/*!*****************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/CountrySelector.vue?vue&type=style&index=0&id=1facd904&scoped=true&lang=css ***!
  \*****************************************************************************************************************************************************************************************************************************************************************************************/

.country-iso[data-v-1facd904] {
  font-weight: bold;
  margin-right: 8px;
  color: #666;
  background-color: #f5f5f5;
  padding: 2px 6px;
  border-radius: 4px;
  font-size: 12px;
}
.country-name[data-v-1facd904] {
  color: #333;
}

/*!*************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/EditProfile.vue?vue&type=style&index=0&id=0a8e9ba4&scoped=true&lang=css ***!
  \*************************************************************************************************************************************************************************************************************************************************************************************/

.error-list[data-v-0a8e9ba4] {
    margin-left: 20px;
    margin-top: 8px;
}
.error-list li[data-v-0a8e9ba4] {
    margin-bottom: 4px;
}
.scrolleable[data-v-0a8e9ba4] {
    max-height: 70vh;
    overflow-y: auto;
    padding-right: 10px;
}

/* Estilo para scroll suave */
.scrolleable[data-v-0a8e9ba4]::-webkit-scrollbar {
    width: 8px;
}
.scrolleable[data-v-0a8e9ba4]::-webkit-scrollbar-track {
    background: #f1f1f1;
}
.scrolleable[data-v-0a8e9ba4]::-webkit-scrollbar-thumb {
    background: #888;
    border-radius: 4px;
}
.scrolleable[data-v-0a8e9ba4]::-webkit-scrollbar-thumb:hover {
    background: #555;
}

/*!*********************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/Overlay.vue?vue&type=style&index=0&id=4d1c5582&scoped=true&lang=css ***!
  \*********************************************************************************************************************************************************************************************************************************************************************************/

/* Estilos por defecto (desktop) */
.overlay-header[data-v-4d1c5582] {
  padding: 16px;
}

/* ✅ CLAVE: Sin flex-wrap para que se mantengan en línea */
.overlay-title-container[data-v-4d1c5582] {
  gap: 4px; /* ✅ Gap reducido para que estén más pegados */
  flex-wrap: nowrap;
  align-items: center;
  overflow: hidden;
}
.title-icon[data-v-4d1c5582] {
  font-size: 24px;
  flex-shrink: 0;
  margin-right: 4px; /* ✅ Pequeño margen entre icono y texto */
}
.overlay-title-text[data-v-4d1c5582] {
  font-size: 1.25rem;
  line-height: 1.4;
  word-wrap: break-word;
  overflow-wrap: break-word;
  white-space: normal;
  flex: 0 1 auto; /* ✅ CAMBIO: No ocupa todo el espacio, solo el necesario */
  min-width: 0;
}
.info-btn[data-v-4d1c5582] {
  box-shadow: none !important;
  border: none !important;
  min-width: auto !important;
  padding: 4px !important;
  margin-left: 0px !important; /* ✅ Sin margen izquierdo para pegarlo al texto */
  flex-shrink: 0;
}
.closeButton[data-v-4d1c5582] {
  width: 40px;
  height: 40px;
}
.overlay-divider[data-v-4d1c5582] {
  margin-top: 12px;
  margin-bottom: 0;
}

/* ✅ MOBILE - Todo más compacto */
@media (max-width: 525px) {
.overlay-header[data-v-4d1c5582] {
    padding: 8px 12px !important;
}
.overlay-title-container[data-v-4d1c5582] {
    gap: 2px; /* ✅ Aún más pegados en móvil */
}

  /* Icono más pequeño */
.title-icon[data-v-4d1c5582] {
    font-size: 18px !important;
    margin-right: 2px !important;
}

  /* Título más pequeño */
.overlay-title-text[data-v-4d1c5582] {
    font-size: 1.1rem !important;
    line-height: 1.2 !important;
}

  /* Botón de info más pequeño */
.info-btn[data-v-4d1c5582] {
    min-width: 28px !important;
    width: 28px !important;
    height: 28px !important;
    padding: 2px !important;
    margin-left: 0px !important;
}
.info-btn .v-icon[data-v-4d1c5582] {
    font-size: 16px !important;
}

  /* Botón cerrar más pequeño */
.closeButton[data-v-4d1c5582] {
    width: 32px !important;
    height: 32px !important;
    min-width: 32px !important;
}
.closeButton .v-icon[data-v-4d1c5582] {
    font-size: 20px !important;
}

  /* Divisor más compacto */
.overlay-divider[data-v-4d1c5582] {
    margin-top: 8px;
}

  /* Reducir padding del card */
[data-v-4d1c5582] .v-card {
    padding: 0 !important;
}
[data-v-4d1c5582] .container-fluid {
    padding: 8px !important;
}
}

/*!************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/EditClientBankAccounts.vue?vue&type=style&index=0&id=7bf7e538&lang=css ***!
  \************************************************************************************************************************************************************************************************************************************************************************************/

.primary-bank {
  border-left: 4px solid rgb(var(--v-theme-primary)) !important;
}
.v-expansion-panel {
  margin-bottom: 8px;
}

/*!***************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/CreateProviderBankAccount.vue?vue&type=style&index=0&id=17530e33&scoped=true&lang=css ***!
  \***************************************************************************************************************************************************************************************************************************************************************************************************/

.error-list[data-v-17530e33] {
    margin-left: 20px;
    margin-top: 8px;
}
.error-list li[data-v-17530e33] {
    margin-bottom: 4px;
}
.item-provider[data-v-17530e33] {
    display: flex;
}
.scrolleable[data-v-17530e33] {
    max-height: 70vh;
    overflow-y: auto;
    padding-right: 10px;
}
.scrolleable[data-v-17530e33]::-webkit-scrollbar {
    width: 8px;
}
.scrolleable[data-v-17530e33]::-webkit-scrollbar-track {
    background: #f1f1f1;
}
.scrolleable[data-v-17530e33]::-webkit-scrollbar-thumb {
    background: #888;
    border-radius: 4px;
}
.scrolleable[data-v-17530e33]::-webkit-scrollbar-thumb:hover {
    background: #555;
}

/*!********************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/Header.vue?vue&type=style&index=0&id=a1b34d24&scoped=true&lang=css ***!
  \********************************************************************************************************************************************************************************************************************************************************************************/

.v-toolbar__extension[data-v-a1b34d24] {
  height: 2px !important;
}
.logo-container[data-v-a1b34d24] {
  flex-shrink: 0;
  margin-left: 3vw;
  margin-right: 8px;
}
.nav-menu-wrapper[data-v-a1b34d24] {
  flex: 1 1 auto;
  min-width: 0;
  overflow-x: auto;
  margin-left: 24px;
  margin-right: 8px;
}
.font-bold[data-v-a1b34d24] {
  font-weight: bold;
}
.font-thin[data-v-a1b34d24] {
  font-weight: 300;
}
@media screen and (max-width: 415px) {
.my-margin[data-v-a1b34d24] {
    margin-bottom: 22px;
}
}
.text-caption[data-v-a1b34d24]{
  font-weight: 550;
  color: rgb(73, 69, 69);
}
.mail-item[data-v-a1b34d24]{
  font-size: 15px;
  font-weight: 900;
}

/*!********************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/Footer.vue?vue&type=style&index=0&id=e4181508&scoped=true&lang=css ***!
  \********************************************************************************************************************************************************************************************************************************************************************************/

.footer-main[data-v-e4181508] {
  border-top: 2px solid rgba(255, 255, 255, 0.1);
}
.footer-links[data-v-e4181508] {
  border-bottom: 1px solid rgba(255, 255, 255, 0.08);
}
.footer-link[data-v-e4181508] {
  color: #b0bec5;
  text-decoration: none;
  font-size: 0.875rem;
  transition: color 0.2s ease;
}
.footer-link[data-v-e4181508]:hover {
  color: #ffffff;
  text-decoration: underline;
}
.footer-separator[data-v-e4181508] {
  color: #616161;
  font-size: 0.875rem;
}

/*!****************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/InvoiceStateHistoryOverlay.vue?vue&type=style&index=0&id=0a53f281&scoped=true&lang=css ***!
  \****************************************************************************************************************************************************************************************************************************************************************************************************/

.invoice-history-overlay[data-v-0a53f281] {
  padding: 16px;
  max-width: 100%;
}
[data-v-0a53f281] .v-data-table-header th {
  background-color: #f5f5f5;
  font-weight: bold;
  text-transform: none !important;
  white-space: nowrap;
}
[data-v-0a53f281] .v-data-table__tr:hover {
  background-color: #f5f5f5;
}
[data-v-0a53f281] .v-data-table {
  border: 1px solid #e0e0e0;
}

/*!****************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/views/Actions.vue?vue&type=style&index=0&id=b5ba0e38&scoped=true&lang=css ***!
  \****************************************************************************************************************************************************************************************************************************************************************************/

.actions-container[data-v-b5ba0e38] {
  width: 100%;
  min-height: 100vh;
  padding: 0;
}
.page-title[data-v-b5ba0e38] {
  font-size: 1.75rem;
  font-weight: 600;
  margin: 1rem;
  color: rgb(var(--v-theme-on-surface));
}
.tabs-wrapper[data-v-b5ba0e38] {
  width: 100%;
  overflow-x: auto;
  background-color: rgb(var(--v-theme-surface));
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  border-bottom: 1px solid rgba(var(--v-border-color), var(--v-border-opacity));
}
.responsive-tabs[data-v-b5ba0e38] {
  width: 100%;
  min-width: max-content;
}
.tab-item[data-v-b5ba0e38] {
  white-space: nowrap;
  min-width: auto;
  max-width: none;
  padding: 0 12px;
  text-transform: none;
  font-weight: 500;
  transition: all 0.3s ease;
}
.tab-label[data-v-b5ba0e38] {
  font-size: 0.875rem;
  line-height: 1.2;
  text-align: center;
}
.content-container[data-v-b5ba0e38] {
  padding: 0;
  margin: 0;
  width: 100%;
}
.window-content[data-v-b5ba0e38] {
  width: 100%;
  min-height: 60vh;
}
.window-item[data-v-b5ba0e38] {
  width: 100%;
}
.tab-content[data-v-b5ba0e38] {
  padding: 1rem;
  width: 100%;
}

/* Responsive Design */
@media (max-width: 768px) {
.page-title[data-v-b5ba0e38] {
    font-size: 1.5rem;
    margin: 0.75rem;
}
.mobile-tab[data-v-b5ba0e38] {
    min-width: 120px !important;
    padding: 0 8px !important;
}
.tab-label[data-v-b5ba0e38] {
    font-size: 0.75rem;
    line-height: 1.1;
}
.tab-content[data-v-b5ba0e38] {
    padding: 0.75rem;
}
.tabs-wrapper[data-v-b5ba0e38] {
    /* Permitir scroll horizontal en móvil */
    -webkit-overflow-scrolling: touch;
    scrollbar-width: thin;
}
.tabs-wrapper[data-v-b5ba0e38]::-webkit-scrollbar {
    height: 4px;
}
.tabs-wrapper[data-v-b5ba0e38]::-webkit-scrollbar-track {
    background: #f1f1f1;
}
.tabs-wrapper[data-v-b5ba0e38]::-webkit-scrollbar-thumb {
    background: #c1c1c1;
    border-radius: 2px;
}
.tabs-wrapper[data-v-b5ba0e38]::-webkit-scrollbar-thumb:hover {
    background: #a8a8a8;
}
}
@media (max-width: 480px) {
.page-title[data-v-b5ba0e38] {
    font-size: 1.25rem;
    margin: 0.5rem;
}
.mobile-tab[data-v-b5ba0e38] {
    min-width: 100px !important;
    padding: 0 6px !important;
}
.tab-label[data-v-b5ba0e38] {
    font-size: 0.7rem;
}
.tab-content[data-v-b5ba0e38] {
    padding: 0.5rem;
}
}
@media (max-width: 360px) {
.mobile-tab[data-v-b5ba0e38] {
    min-width: 90px !important;
    padding: 0 4px !important;
}
.tab-label[data-v-b5ba0e38] {
    font-size: 0.65rem;
}
}

/* Mejoras visuales */
.responsive-tabs[data-v-b5ba0e38] .v-tab--selected {
  color: var(--v-primary-base, #1e2124);
  font-weight: 600;
}
.responsive-tabs[data-v-b5ba0e38] .v-tabs-slider {
  height: 3px;
  border-radius: 2px;
}
.window-content[data-v-b5ba0e38] .v-window__container {
  height: auto;
}

/* Asegurar que el contenido sea completamente responsive */
[data-v-b5ba0e38] {
  box-sizing: border-box;
}

/*!******************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/views/Documents.vue?vue&type=style&index=0&id=3f9cf55f&scoped=true&lang=css ***!
  \******************************************************************************************************************************************************************************************************************************************************************************/

.actions-container[data-v-3f9cf55f] {
  width: 100%;
  min-height: 100vh;
  padding: 0;
}
.page-title[data-v-3f9cf55f] {
  font-size: 1.75rem;
  font-weight: 600;
  margin: 1rem;
  color: rgb(var(--v-theme-on-surface));
}
.tabs-wrapper[data-v-3f9cf55f] {
  width: 100%;
  overflow-x: auto;
  background-color: rgb(var(--v-theme-surface));
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  border-bottom: 1px solid rgba(var(--v-border-color), var(--v-border-opacity));
}
.responsive-tabs[data-v-3f9cf55f] {
  width: 100%;
  min-width: max-content;
}
.tab-item[data-v-3f9cf55f] {
  white-space: nowrap;
  min-width: auto;
  max-width: none;
  padding: 0 24px;
  text-transform: none;
  font-weight: 500;
  transition: all 0.3s ease;
}
.tab-label[data-v-3f9cf55f] {
  font-size: 0.875rem;
  line-height: 1.2;
  text-align: center;
}
.content-container[data-v-3f9cf55f] {
  padding: 0;
  margin: 0;
  width: 100%;
}
.window-content[data-v-3f9cf55f] {
  width: 100%;
  min-height: 60vh;
}
.window-item[data-v-3f9cf55f] {
  width: 100%;
}
.tab-content[data-v-3f9cf55f] {
  padding: 1rem;
  width: 100%;
}

/* Responsive Design */
@media (max-width: 768px) {
.page-title[data-v-3f9cf55f] {
    font-size: 1.5rem;
    margin: 0.75rem;
}
.mobile-tab[data-v-3f9cf55f] {
    min-width: 160px !important;
    padding: 0 16px !important;
}
.tab-label[data-v-3f9cf55f] {
    font-size: 0.8rem;
    line-height: 1.1;
}
.tab-content[data-v-3f9cf55f] {
    padding: 0.75rem;
}
.tabs-wrapper[data-v-3f9cf55f] {
    /* Permitir scroll horizontal en móvil */
    -webkit-overflow-scrolling: touch;
    scrollbar-width: thin;
}
.tabs-wrapper[data-v-3f9cf55f]::-webkit-scrollbar {
    height: 4px;
}
.tabs-wrapper[data-v-3f9cf55f]::-webkit-scrollbar-track {
    background: #f1f1f1;
}
.tabs-wrapper[data-v-3f9cf55f]::-webkit-scrollbar-thumb {
    background: #c1c1c1;
    border-radius: 2px;
}
.tabs-wrapper[data-v-3f9cf55f]::-webkit-scrollbar-thumb:hover {
    background: #a8a8a8;
}
}
@media (max-width: 480px) {
.page-title[data-v-3f9cf55f] {
    font-size: 1.25rem;
    margin: 0.5rem;
}
.mobile-tab[data-v-3f9cf55f] {
    min-width: 140px !important;
    padding: 0 12px !important;
}
.tab-label[data-v-3f9cf55f] {
    font-size: 0.75rem;
    line-height: 1.05;
}
.tab-content[data-v-3f9cf55f] {
    padding: 0.5rem;
}
}
@media (max-width: 360px) {
.mobile-tab[data-v-3f9cf55f] {
    min-width: 120px !important;
    padding: 0 8px !important;
}
.tab-label[data-v-3f9cf55f] {
    font-size: 0.7rem;
    line-height: 1;
}
}

/* Mejoras visuales */
.responsive-tabs[data-v-3f9cf55f] .v-tab--selected {
  color: var(--v-primary-base, #24282c);
  font-weight: 600;
}
.responsive-tabs[data-v-3f9cf55f] .v-tabs-slider {
  height: 3px;
  border-radius: 2px;
}
.window-content[data-v-3f9cf55f] .v-window__container {
  height: auto;
}

/* Para tabs más largos - optimización especial para este componente */
.tab-item[data-v-3f9cf55f] {
  flex: 0 0 auto;
}

/* Asegurar que el contenido sea completamente responsive */
[data-v-3f9cf55f] {
  box-sizing: border-box;
}

/* Estilos específicos para este componente con menos tabs */
@media (min-width: 769px) {
.tab-item[data-v-3f9cf55f] {
    min-width: 200px;
    padding: 0 32px;
}
.responsive-tabs[data-v-3f9cf55f] {
    justify-content: center;
}
}

/*!****************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/CreateProvider.vue?vue&type=style&index=0&id=4bd1acee&scoped=true&lang=css ***!
  \****************************************************************************************************************************************************************************************************************************************************************************************/

.add-templates-button[data-v-4bd1acee] {
  background-color: #87bd78;
  margin-top: 16px;
}

/*!**********************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/CreateInvoiceOverlay.vue?vue&type=style&index=0&id=54f18ac0&scoped=true&lang=css ***!
  \**********************************************************************************************************************************************************************************************************************************************************************************************/

.edited-cols[data-v-54f18ac0] {
    min-width: 8rem;
}

/*!**************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/DynamicFilterTableClient.vue?vue&type=style&index=0&id=41ab7443&scoped=true&lang=css ***!
  \**************************************************************************************************************************************************************************************************************************************************************************************************/

.searchers[data-v-41ab7443] {
    padding: 8px;
}
.v-data-table[data-v-41ab7443] {
    border: 1px solid #e0e0e0;
}
[data-v-41ab7443] .v-data-table-header th {
    background-color: #f5f5f5;
    font-weight: bold;
    text-transform: none !important;
    white-space: nowrap;
}
[data-v-41ab7443] .v-data-table__tr:hover {
    background-color: #f5f5f5;
}
  
/*!********************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/DynamicFilterTable.vue?vue&type=style&index=0&id=f0301c50&scoped=true&lang=css ***!
  \********************************************************************************************************************************************************************************************************************************************************************************************/

.searchers[data-v-f0301c50] {
  padding: 8px;
}
.invoice-card[data-v-f0301c50] {
  border: 1px solid #e0e0e0;
  border-radius: 4px;
  height: 100%;
}
.client-header[data-v-f0301c50] {
  border-bottom: 1px solid #e0e0e0;
  margin-bottom: 12px;
}
.status-label[data-v-f0301c50] {
  background-color: #f5f5f5;
  color: #666;
  font-size: 13px;
  font-weight: 500;
}
.charge-btn[data-v-f0301c50] {
  text-transform: uppercase;
  font-weight: 500;
  letter-spacing: 0.5px;
  height: 40px;
}
.text-caption[data-v-f0301c50] {
  color: #666;
  font-size: 12px;
  margin-bottom: 2px;
}
.text-subtitle-1[data-v-f0301c50] {
  font-size: 14px;
}
.text-h6[data-v-f0301c50] {
  font-size: 16px;
}
.items-per-page-select[data-v-f0301c50] {
  width: 80px;
}

/*!********************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/PriorityRulesOrderingComponent.vue?vue&type=style&index=0&id=8d1fc912&scoped=true&lang=css ***!
  \********************************************************************************************************************************************************************************************************************************************************************************************************/

.list-group-item[data-v-8d1fc912] {
  cursor: move;
  transition: all 0.2s ease;
}
.list-group-item[data-v-8d1fc912]:hover {
  transform: translateX(4px);
}
.ghost-card[data-v-8d1fc912] {
  opacity: 0.5;
  background: #c8ebfb !important;
  border: 2px dashed #4a9eff;
}
.dragging[data-v-8d1fc912] {
  opacity: 0.9;
  transform: rotate(1deg) scale(1.02);
  box-shadow: 0 5px 15px rgba(0,0,0,0.15);
}
.flip-list-move[data-v-8d1fc912] {
  transition: transform 0.3s ease;
}
.flip-list-enter-active[data-v-8d1fc912],
.flip-list-leave-active[data-v-8d1fc912] {
  transition: all 0.3s ease;
}
.flip-list-enter-from[data-v-8d1fc912],
.flip-list-leave-to[data-v-8d1fc912] {
  opacity: 0;
  transform: translateX(-30px);
}
.box-order[data-v-8d1fc912] {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 30px;
  max-height: 30px;
span[data-v-8d1fc912] {
    width: 25px;
    height: 25px;
    font-size: 0.8rem;
    display: flex;
    justify-content: center;
    align-items: center;
    background-color: #64d26f;
}
}

/*!*********************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/ShareComponentRules.vue?vue&type=style&index=0&id=2c63b4b0&lang=css ***!
  \*********************************************************************************************************************************************************************************************************************************************************************************/

.numeric-input {
  width: 10vw;
}

/*!*****************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/PaymentMethodsRuleComponent.vue?vue&type=style&index=0&id=657782e4&scoped=true&lang=css ***!
  \*****************************************************************************************************************************************************************************************************************************************************************************************************/

.plus-btn[data-v-657782e4] {
    background-color: #87bd78;
}
.add-templates-button[data-v-657782e4] {
    background-color: #87bd78;
    margin-top: 16px;
}

/*!*********************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/InvoiceRulesOverlay.vue?vue&type=style&index=0&id=1d268695&scoped=true&lang=css ***!
  \*********************************************************************************************************************************************************************************************************************************************************************************************/

/* Visual cue that inputs are read-only */
[data-v-1d268695] .v-field__input,[data-v-1d268695] .v-input__control {
    opacity: 0.8;
}

/*!********************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/InvoiceWithFilters.vue?vue&type=style&index=0&id=c3ce7a6e&scoped=true&lang=css ***!
  \********************************************************************************************************************************************************************************************************************************************************************************************/

.invoice-table[data-v-c3ce7a6e] {
    margin: 16px;
}
.status-chip[data-v-c3ce7a6e] {
    min-width: 120px;
    justify-content: center;
}
.actions-column[data-v-c3ce7a6e] {
    display: flex;
    gap: 8px;
}
[data-v-c3ce7a6e] .v-data-table-header th {
    background-color: #f5f5f5;
    font-weight: bold;
    text-transform: none !important;
    white-space: nowrap;
}
[data-v-c3ce7a6e] .v-data-table__tr:hover {
    background-color: #f5f5f5;
}
[data-v-c3ce7a6e] .v-data-table {
    border: 1px solid #e0e0e0;
}

/*!*************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/GeneralHome.vue?vue&type=style&index=0&id=ae46b054&lang=css ***!
  \*************************************************************************************************************************************************************************************************************************************************************************/

.my-icons {
    color: #a8cf95;
}
.mini-card {
    color: #63a884;
    background-color: #e5f3df;
    padding: 7px;
    border-radius: 5px;
}

/*!******************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/views/Providers.vue?vue&type=style&index=0&id=4939536e&scoped=true&lang=css ***!
  \******************************************************************************************************************************************************************************************************************************************************************************/

.button-extra[data-v-4939536e] {
    background-color: #243b44;
}
[data-v-4939536e] .v-data-table-header th {
    background-color: #f5f5f5;
    font-weight: bold;
    text-transform: none !important;
    white-space: nowrap;
}
[data-v-4939536e] .v-data-table__tr:hover {
    background-color: #f5f5f5;
}
[data-v-4939536e] .v-data-table {
    border: 1px solid #e0e0e0;
}
.table-wrapper[data-v-4939536e] {
  width: 100%;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}

/*!******************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/HistoryComponent.vue?vue&type=style&index=0&id=65ba106a&scoped=true&lang=css ***!
  \******************************************************************************************************************************************************************************************************************************************************************************************/

[data-v-65ba106a] .v-data-table-header th {
    background-color: #f5f5f5;
    font-weight: bold;
    text-transform: none !important;
    white-space: nowrap;
}
[data-v-65ba106a] .v-data-table__tr:hover {
    background-color: #f5f5f5;
}
[data-v-65ba106a] .v-data-table {
    border: 1px solid #e0e0e0;
}

/*!****************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/views/History.vue?vue&type=style&index=0&id=5aacf0fb&lang=css ***!
  \****************************************************************************************************************************************************************************************************************************************************************/

.tops-cards {
    margin: 10px;
    padding: 20px;
}
.date-picker-card {
    margin: 10px;
    text-align: center;
}
.my-icons {
    color: #1976d2;
    font-size: 2.5rem;
    margin-right: 15px;
}
.mini-card {
    color: #757575;
    font-size: 0.875rem;
}
.center {
    display: flex;
    align-items: center;
    justify-content: center;
}

/*!**********************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/views/HomeProviders.vue?vue&type=style&index=0&id=a2c3d7ac&lang=css ***!
  \**********************************************************************************************************************************************************************************************************************************************************************/

.mi-card {
    flex: 1; /* Makes all cards grow equally */
    padding: 15px; /* Space inside cards */
    transition: all 0.3s ease; /* Optional: Smooth resizing transition */
}
.my-icons {
    color: #a8cf95;
    margin: 20px 40px 40px 20px;
}
.mini-card {
    color: #63a884;
    background-color: #e5f3df;
    padding: 7px;
    border-radius: 5px;
}
:deep(.v-data-table-header th) {
    background-color: #f5f5f5;
    font-weight: bold;
    text-transform: none !important;
    white-space: nowrap;
}
:deep(.v-data-table__tr:hover) {
    background-color: #f5f5f5;
}
:deep(.v-data-table) {
    border: 1px solid #e0e0e0;
}

/*!*********************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/Filters.vue?vue&type=style&index=0&id=849f312c&scoped=true&lang=css ***!
  \*********************************************************************************************************************************************************************************************************************************************************************************/

.searchers[data-v-849f312c] {
    padding: 8px;
}
  
/*!*****************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/views/NotFound.vue?vue&type=style&index=0&id=f58b3cd0&scoped=true&lang=css ***!
  \*****************************************************************************************************************************************************************************************************************************************************************************/

  /* Estilos solo para este componente */
div.container.text-center.mt-5[data-v-f58b3cd0]{
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
}
.not-found-container[data-v-f58b3cd0] {
    text-align: center;
    padding: 40px;
    margin-top: 50px;
}
h1[data-v-f58b3cd0] {
    font-size: 80px;
    font-weight: 100;
    margin-bottom: 20px;
    line-height: 1.2;
}
p[data-v-f58b3cd0] {
    margin-bottom: 15px;
    color: #6c757d; /* Un gris para el texto descriptivo */
}
  
  /* Estilo opcional para el enlace */
.router-link[data-v-f58b3cd0] {
    display: inline-block;
    margin-top: 20px;
    padding: 10px 20px;
    background-color: #007bff; /* Azul primario de Bootstrap, por ejemplo */
    color: white;
    text-decoration: none;
    border-radius: 5px;
    transition: background-color 0.3s ease;
}
.router-link[data-v-f58b3cd0]:hover {
    background-color: #0056b3;
}
  
/*!*******************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/views/RuleTester.vue?vue&type=style&index=0&id=97c7e478&scoped=true&lang=css ***!
  \*******************************************************************************************************************************************************************************************************************************************************************************/

.invoice-tester[data-v-97c7e478] {
  border-radius: 12px;
}
.invoice-card[data-v-97c7e478] {
  transition: all 0.3s ease;
  border: 2px solid transparent;
}
.invoice-card[data-v-97c7e478]:hover {
  transform: translateY(-2px);
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
.invoice-card.selected[data-v-97c7e478] {
  border-color: rgb(var(--v-theme-primary));
  background-color: rgb(var(--v-theme-primary-lighten-5));
}
.rules-card[data-v-97c7e478] {
  border-radius: 8px;
}
.rule-item[data-v-97c7e478] {
  padding: 8px 0;
  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
}
.rule-item[data-v-97c7e478]:last-child {
  border-bottom: none;
}
.summary-card[data-v-97c7e478] {
  border-radius: 8px;
  transition: transform 0.3s ease;
}
.summary-card[data-v-97c7e478]:hover {
  transform: translateY(-2px);
}
.success-text[data-v-97c7e478] {
  color: rgb(var(--v-theme-success));
}
.error-text[data-v-97c7e478] {
  color: rgb(var(--v-theme-error));
}
.primary-text[data-v-97c7e478] {
  color: rgb(var(--v-theme-primary));
}
pre[data-v-97c7e478] {
  white-space: pre-wrap;
  word-wrap: break-word;
  margin: 0;
  font-family: 'Roboto Mono', monospace;
  font-size: 0.875rem;
}
.result-detail[data-v-97c7e478] {
  border-radius: 8px;
}

/* TimeLine Styles */
.v-timeline-item[data-v-97c7e478] {
  margin-bottom: 8px;
}
.v-timeline-item[data-v-97c7e478]:last-child {
  margin-bottom: 0;
}
.timeline-card[data-v-97c7e478] {
  border-radius: 4px;
  transition: background-color 0.2s;
}
.timeline-card[data-v-97c7e478]:hover {
  background-color: rgb(var(--v-theme-surface-variant));
}
.timeline-success[data-v-97c7e478] {
  border-left: 3px solid rgb(var(--v-theme-success));
}
.timeline-error[data-v-97c7e478] {
  border-left: 3px solid rgb(var(--v-theme-error));
}
.timeline-skipped[data-v-97c7e478] {
  border-left: 3px solid rgb(var(--v-theme-warning));
}
.timeline-info[data-v-97c7e478] {
  border-left: 3px solid rgb(var(--v-theme-info));
}
.details-section[data-v-97c7e478] {
  margin-top: 4px;
  padding-top: 4px;
  border-top: 1px dashed rgba(var(--v-border-color), 0.2);
}
.detail-item[data-v-97c7e478] {
  padding: 2px 0;
  color: rgba(var(--v-theme-on-surface), 0.7);
}
.v-timeline-item__body[data-v-97c7e478] {
  max-width: none !important;
}
.timeline-card .text-body-2[data-v-97c7e478] {
  color: rgba(var(--v-theme-on-surface), 0.87);
}


/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNzcyIsIm1hcHBpbmdzIjoiOzs7O0FBZ1VBO0VBQ0UsaUJBQWlCO0VBQ2pCLGlCQUFpQjtFQUNqQixXQUFXO0VBQ1gseUJBQXlCO0VBQ3pCLGdCQUFnQjtFQUNoQixrQkFBa0I7RUFDbEIsZUFBZTtBQUNqQjtBQUVBO0VBQ0UsV0FBVztBQUNiOzs7Ozs7QUMwc0JBO0lBQ0ksaUJBQWlCO0lBQ2pCLGVBQWU7QUFDbkI7QUFFQTtJQUNJLGtCQUFrQjtBQUN0QjtBQUVBO0lBQ0ksZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQixtQkFBbUI7QUFDdkI7O0FBRUEsNkJBQTZCO0FBQzdCO0lBQ0ksVUFBVTtBQUNkO0FBRUE7SUFDSSxtQkFBbUI7QUFDdkI7QUFFQTtJQUNJLGdCQUFnQjtJQUNoQixrQkFBa0I7QUFDdEI7QUFFQTtJQUNJLGdCQUFnQjtBQUNwQjs7Ozs7O0FDcDdCQSxrQ0FBa0M7QUFDbEM7RUFDRSxhQUFhO0FBQ2Y7O0FBRUEsMERBQTBEO0FBQzFEO0VBQ0UsUUFBUSxFQUFFLDhDQUE4QztFQUN4RCxpQkFBaUI7RUFDakIsbUJBQW1CO0VBQ25CLGdCQUFnQjtBQUNsQjtBQUVBO0VBQ0UsZUFBZTtFQUNmLGNBQWM7RUFDZCxpQkFBaUIsRUFBRSx5Q0FBeUM7QUFDOUQ7QUFFQTtFQUNFLGtCQUFrQjtFQUNsQixnQkFBZ0I7RUFDaEIscUJBQXFCO0VBQ3JCLHlCQUF5QjtFQUN6QixtQkFBbUI7RUFDbkIsY0FBYyxFQUFFLDBEQUEwRDtFQUMxRSxZQUFZO0FBQ2Q7QUFFQTtFQUNFLDJCQUEyQjtFQUMzQix1QkFBdUI7RUFDdkIsMEJBQTBCO0VBQzFCLHVCQUF1QjtFQUN2QiwyQkFBMkIsRUFBRSxpREFBaUQ7RUFDOUUsY0FBYztBQUNoQjtBQUVBO0VBQ0UsV0FBVztFQUNYLFlBQVk7QUFDZDtBQUVBO0VBQ0UsZ0JBQWdCO0VBQ2hCLGdCQUFnQjtBQUNsQjs7QUFFQSxpQ0FBaUM7QUFDakM7QUFDRTtJQUNFLDRCQUE0QjtBQUM5QjtBQUVBO0lBQ0UsUUFBUSxFQUFFLCtCQUErQjtBQUMzQzs7RUFFQSxzQkFBc0I7QUFDdEI7SUFDRSwwQkFBMEI7SUFDMUIsNEJBQTRCO0FBQzlCOztFQUVBLHVCQUF1QjtBQUN2QjtJQUNFLDRCQUE0QjtJQUM1QiwyQkFBMkI7QUFDN0I7O0VBRUEsOEJBQThCO0FBQzlCO0lBQ0UsMEJBQTBCO0lBQzFCLHNCQUFzQjtJQUN0Qix1QkFBdUI7SUFDdkIsdUJBQXVCO0lBQ3ZCLDJCQUEyQjtBQUM3QjtBQUVBO0lBQ0UsMEJBQTBCO0FBQzVCOztFQUVBLDZCQUE2QjtBQUM3QjtJQUNFLHNCQUFzQjtJQUN0Qix1QkFBdUI7SUFDdkIsMEJBQTBCO0FBQzVCO0FBRUE7SUFDRSwwQkFBMEI7QUFDNUI7O0VBRUEseUJBQXlCO0FBQ3pCO0lBQ0UsZUFBZTtBQUNqQjs7RUFFQSw2QkFBNkI7QUFDN0I7SUFDRSxxQkFBcUI7QUFDdkI7QUFFQTtJQUNFLHVCQUF1QjtBQUN6QjtBQUNGOzs7Ozs7QUM0QkE7RUFDRSw2REFBNkQ7QUFDL0Q7QUFFQTtFQUNFLGtCQUFrQjtBQUNwQjs7Ozs7O0FDd1pBO0lBQ0ksaUJBQWlCO0lBQ2pCLGVBQWU7QUFDbkI7QUFFQTtJQUNJLGtCQUFrQjtBQUN0QjtBQUVBO0lBQ0ksYUFBYTtBQUNqQjtBQUVBO0lBQ0ksZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQixtQkFBbUI7QUFDdkI7QUFFQTtJQUNJLFVBQVU7QUFDZDtBQUVBO0lBQ0ksbUJBQW1CO0FBQ3ZCO0FBRUE7SUFDSSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0FBQ3RCO0FBRUE7SUFDSSxnQkFBZ0I7QUFDcEI7Ozs7OztBQ3ZSQTtFQUNFLHNCQUFzQjtBQUN4QjtBQUVBO0VBQ0UsY0FBYztFQUNkLGdCQUFnQjtFQUNoQixpQkFBaUI7QUFDbkI7QUFFQTtFQUNFLGNBQWM7RUFDZCxZQUFZO0VBQ1osZ0JBQWdCO0VBQ2hCLGlCQUFpQjtFQUNqQixpQkFBaUI7QUFDbkI7QUFFQTtFQUNFLGlCQUFpQjtBQUNuQjtBQUVBO0VBQ0UsZ0JBQWdCO0FBQ2xCO0FBRUE7QUFDRTtJQUNFLG1CQUFtQjtBQUNyQjtBQUNGO0FBRUE7RUFDRSxnQkFBZ0I7RUFDaEIsc0JBQXNCO0FBQ3hCO0FBRUE7RUFDRSxlQUFlO0VBQ2YsZ0JBQWdCO0FBQ2xCOzs7Ozs7QUM3YUE7RUFDRSw4Q0FBOEM7QUFDaEQ7QUFFQTtFQUNFLGtEQUFrRDtBQUNwRDtBQUVBO0VBQ0UsY0FBYztFQUNkLHFCQUFxQjtFQUNyQixtQkFBbUI7RUFDbkIsMkJBQTJCO0FBQzdCO0FBRUE7RUFDRSxjQUFjO0VBQ2QsMEJBQTBCO0FBQzVCO0FBRUE7RUFDRSxjQUFjO0VBQ2QsbUJBQW1CO0FBQ3JCOzs7Ozs7QUNvS0E7RUFDRSxhQUFhO0VBQ2IsZUFBZTtBQUNqQjtBQUVBO0VBQ0UseUJBQXlCO0VBQ3pCLGlCQUFpQjtFQUNqQiwrQkFBK0I7RUFDL0IsbUJBQW1CO0FBQ3JCO0FBRUE7RUFDRSx5QkFBeUI7QUFDM0I7QUFFQTtFQUNFLHlCQUF5QjtBQUMzQjs7Ozs7O0FDN0lBO0VBQ0UsV0FBVztFQUNYLGlCQUFpQjtFQUNqQixVQUFVO0FBQ1o7QUFFQTtFQUNFLGtCQUFrQjtFQUNsQixnQkFBZ0I7RUFDaEIsWUFBWTtFQUNaLHFDQUFxQztBQUN2QztBQUVBO0VBQ0UsV0FBVztFQUNYLGdCQUFnQjtFQUNoQiw2Q0FBNkM7RUFDN0Msd0NBQXdDO0VBQ3hDLDZFQUE2RTtBQUMvRTtBQUVBO0VBQ0UsV0FBVztFQUNYLHNCQUFzQjtBQUN4QjtBQUVBO0VBQ0UsbUJBQW1CO0VBQ25CLGVBQWU7RUFDZixlQUFlO0VBQ2YsZUFBZTtFQUNmLG9CQUFvQjtFQUNwQixnQkFBZ0I7RUFDaEIseUJBQXlCO0FBQzNCO0FBRUE7RUFDRSxtQkFBbUI7RUFDbkIsZ0JBQWdCO0VBQ2hCLGtCQUFrQjtBQUNwQjtBQUVBO0VBQ0UsVUFBVTtFQUNWLFNBQVM7RUFDVCxXQUFXO0FBQ2I7QUFFQTtFQUNFLFdBQVc7RUFDWCxnQkFBZ0I7QUFDbEI7QUFFQTtFQUNFLFdBQVc7QUFDYjtBQUVBO0VBQ0UsYUFBYTtFQUNiLFdBQVc7QUFDYjs7QUFFQSxzQkFBc0I7QUFDdEI7QUFDRTtJQUNFLGlCQUFpQjtJQUNqQixlQUFlO0FBQ2pCO0FBRUE7SUFDRSwyQkFBMkI7SUFDM0IseUJBQXlCO0FBQzNCO0FBRUE7SUFDRSxrQkFBa0I7SUFDbEIsZ0JBQWdCO0FBQ2xCO0FBRUE7SUFDRSxnQkFBZ0I7QUFDbEI7QUFFQTtJQUNFLHdDQUF3QztJQUN4QyxpQ0FBaUM7SUFDakMscUJBQXFCO0FBQ3ZCO0FBRUE7SUFDRSxXQUFXO0FBQ2I7QUFFQTtJQUNFLG1CQUFtQjtBQUNyQjtBQUVBO0lBQ0UsbUJBQW1CO0lBQ25CLGtCQUFrQjtBQUNwQjtBQUVBO0lBQ0UsbUJBQW1CO0FBQ3JCO0FBQ0Y7QUFFQTtBQUNFO0lBQ0Usa0JBQWtCO0lBQ2xCLGNBQWM7QUFDaEI7QUFFQTtJQUNFLDJCQUEyQjtJQUMzQix5QkFBeUI7QUFDM0I7QUFFQTtJQUNFLGlCQUFpQjtBQUNuQjtBQUVBO0lBQ0UsZUFBZTtBQUNqQjtBQUNGO0FBRUE7QUFDRTtJQUNFLDBCQUEwQjtJQUMxQix5QkFBeUI7QUFDM0I7QUFFQTtJQUNFLGtCQUFrQjtBQUNwQjtBQUNGOztBQUVBLHFCQUFxQjtBQUNyQjtFQUNFLHFDQUFxQztFQUNyQyxnQkFBZ0I7QUFDbEI7QUFFQTtFQUNFLFdBQVc7RUFDWCxrQkFBa0I7QUFDcEI7QUFFQTtFQUNFLFlBQVk7QUFDZDs7QUFFQSwyREFBMkQ7QUFDM0Q7RUFDRSxzQkFBc0I7QUFDeEI7Ozs7OztBQzdKQTtFQUNFLFdBQVc7RUFDWCxpQkFBaUI7RUFDakIsVUFBVTtBQUNaO0FBRUE7RUFDRSxrQkFBa0I7RUFDbEIsZ0JBQWdCO0VBQ2hCLFlBQVk7RUFDWixxQ0FBcUM7QUFDdkM7QUFFQTtFQUNFLFdBQVc7RUFDWCxnQkFBZ0I7RUFDaEIsNkNBQTZDO0VBQzdDLHdDQUF3QztFQUN4Qyw2RUFBNkU7QUFDL0U7QUFFQTtFQUNFLFdBQVc7RUFDWCxzQkFBc0I7QUFDeEI7QUFFQTtFQUNFLG1CQUFtQjtFQUNuQixlQUFlO0VBQ2YsZUFBZTtFQUNmLGVBQWU7RUFDZixvQkFBb0I7RUFDcEIsZ0JBQWdCO0VBQ2hCLHlCQUF5QjtBQUMzQjtBQUVBO0VBQ0UsbUJBQW1CO0VBQ25CLGdCQUFnQjtFQUNoQixrQkFBa0I7QUFDcEI7QUFFQTtFQUNFLFVBQVU7RUFDVixTQUFTO0VBQ1QsV0FBVztBQUNiO0FBRUE7RUFDRSxXQUFXO0VBQ1gsZ0JBQWdCO0FBQ2xCO0FBRUE7RUFDRSxXQUFXO0FBQ2I7QUFFQTtFQUNFLGFBQWE7RUFDYixXQUFXO0FBQ2I7O0FBRUEsc0JBQXNCO0FBQ3RCO0FBQ0U7SUFDRSxpQkFBaUI7SUFDakIsZUFBZTtBQUNqQjtBQUVBO0lBQ0UsMkJBQTJCO0lBQzNCLDBCQUEwQjtBQUM1QjtBQUVBO0lBQ0UsaUJBQWlCO0lBQ2pCLGdCQUFnQjtBQUNsQjtBQUVBO0lBQ0UsZ0JBQWdCO0FBQ2xCO0FBRUE7SUFDRSx3Q0FBd0M7SUFDeEMsaUNBQWlDO0lBQ2pDLHFCQUFxQjtBQUN2QjtBQUVBO0lBQ0UsV0FBVztBQUNiO0FBRUE7SUFDRSxtQkFBbUI7QUFDckI7QUFFQTtJQUNFLG1CQUFtQjtJQUNuQixrQkFBa0I7QUFDcEI7QUFFQTtJQUNFLG1CQUFtQjtBQUNyQjtBQUNGO0FBRUE7QUFDRTtJQUNFLGtCQUFrQjtJQUNsQixjQUFjO0FBQ2hCO0FBRUE7SUFDRSwyQkFBMkI7SUFDM0IsMEJBQTBCO0FBQzVCO0FBRUE7SUFDRSxrQkFBa0I7SUFDbEIsaUJBQWlCO0FBQ25CO0FBRUE7SUFDRSxlQUFlO0FBQ2pCO0FBQ0Y7QUFFQTtBQUNFO0lBQ0UsMkJBQTJCO0lBQzNCLHlCQUF5QjtBQUMzQjtBQUVBO0lBQ0UsaUJBQWlCO0lBQ2pCLGNBQWM7QUFDaEI7QUFDRjs7QUFFQSxxQkFBcUI7QUFDckI7RUFDRSxxQ0FBcUM7RUFDckMsZ0JBQWdCO0FBQ2xCO0FBRUE7RUFDRSxXQUFXO0VBQ1gsa0JBQWtCO0FBQ3BCO0FBRUE7RUFDRSxZQUFZO0FBQ2Q7O0FBRUEsc0VBQXNFO0FBQ3RFO0VBQ0UsY0FBYztBQUNoQjs7QUFFQSwyREFBMkQ7QUFDM0Q7RUFDRSxzQkFBc0I7QUFDeEI7O0FBRUEsNERBQTREO0FBQzVEO0FBQ0U7SUFDRSxnQkFBZ0I7SUFDaEIsZUFBZTtBQUNqQjtBQUVBO0lBQ0UsdUJBQXVCO0FBQ3pCO0FBQ0Y7Ozs7OztBQ3lFQTtFQUNFLHlCQUF5QjtFQUN6QixnQkFBZ0I7QUFDbEI7Ozs7OztBQ3VDQTtJQUNJLGVBQWU7QUFDbkI7Ozs7OztBQ2RFO0lBQ0UsWUFBWTtBQUNkO0FBRUE7SUFDRSx5QkFBeUI7QUFDM0I7QUFFQTtJQUNFLHlCQUF5QjtJQUN6QixpQkFBaUI7SUFDakIsK0JBQStCO0lBQy9CLG1CQUFtQjtBQUNyQjtBQUVBO0lBQ0UseUJBQXlCO0FBQzNCOzs7Ozs7QUNtSEY7RUFDRSxZQUFZO0FBQ2Q7QUFFQTtFQUNFLHlCQUF5QjtFQUN6QixrQkFBa0I7RUFDbEIsWUFBWTtBQUNkO0FBRUE7RUFDRSxnQ0FBZ0M7RUFDaEMsbUJBQW1CO0FBQ3JCO0FBRUE7RUFDRSx5QkFBeUI7RUFDekIsV0FBVztFQUNYLGVBQWU7RUFDZixnQkFBZ0I7QUFDbEI7QUFFQTtFQUNFLHlCQUF5QjtFQUN6QixnQkFBZ0I7RUFDaEIscUJBQXFCO0VBQ3JCLFlBQVk7QUFDZDtBQUVBO0VBQ0UsV0FBVztFQUNYLGVBQWU7RUFDZixrQkFBa0I7QUFDcEI7QUFFQTtFQUNFLGVBQWU7QUFDakI7QUFFQTtFQUNFLGVBQWU7QUFDakI7QUFFQTtFQUNFLFdBQVc7QUFDYjs7Ozs7O0FDcGFBO0VBQ0UsWUFBWTtFQUNaLHlCQUF5QjtBQUMzQjtBQUVBO0VBQ0UsMEJBQTBCO0FBQzVCO0FBRUE7RUFDRSxZQUFZO0VBQ1osOEJBQThCO0VBQzlCLDBCQUEwQjtBQUM1QjtBQUVBO0VBQ0UsWUFBWTtFQUNaLG1DQUFtQztFQUNuQyx1Q0FBdUM7QUFDekM7QUFFQTtFQUNFLCtCQUErQjtBQUNqQztBQUVBOztFQUVFLHlCQUF5QjtBQUMzQjtBQUVBOztFQUVFLFVBQVU7RUFDViw0QkFBNEI7QUFDOUI7QUFFQTtFQUNFLGFBQWE7RUFDYix1QkFBdUI7RUFDdkIsbUJBQW1CO0VBQ25CLFlBQVk7RUFDWixnQkFBZ0I7QUFFaEI7SUFDRSxXQUFXO0lBQ1gsWUFBWTtJQUNaLGlCQUFpQjtJQUNqQixhQUFhO0lBQ2IsdUJBQXVCO0lBQ3ZCLG1CQUFtQjtJQUNuQix5QkFBeUI7QUFDM0I7QUFDRjs7Ozs7O0FDZ0pBO0VBQ0UsV0FBVztBQUNiOzs7Ozs7QUNuSUE7SUFDSSx5QkFBeUI7QUFDN0I7QUFFQTtJQUNJLHlCQUF5QjtJQUN6QixnQkFBZ0I7QUFDcEI7Ozs7OztBQzFFQSx5Q0FBeUM7QUFDekM7SUFFSSxZQUFZO0FBQ2hCOzs7Ozs7QUM2YkE7SUFDSSxZQUFZO0FBQ2hCO0FBRUE7SUFDSSxnQkFBZ0I7SUFDaEIsdUJBQXVCO0FBQzNCO0FBRUE7SUFDSSxhQUFhO0lBQ2IsUUFBUTtBQUNaO0FBRUE7SUFDSSx5QkFBeUI7SUFDekIsaUJBQWlCO0lBQ2pCLCtCQUErQjtJQUMvQixtQkFBbUI7QUFDdkI7QUFFQTtJQUNJLHlCQUF5QjtBQUM3QjtBQUVBO0lBQ0kseUJBQXlCO0FBQzdCOzs7Ozs7QUNuUUE7SUFDSSxjQUFjO0FBQ2xCO0FBRUE7SUFDSSxjQUFjO0lBQ2QseUJBQXlCO0lBQ3pCLFlBQVk7SUFDWixrQkFBa0I7QUFDdEI7Ozs7OztBQ2NBO0lBQ0kseUJBQXlCO0FBQzdCO0FBRUE7SUFDSSx5QkFBeUI7SUFDekIsaUJBQWlCO0lBQ2pCLCtCQUErQjtJQUMvQixtQkFBbUI7QUFDdkI7QUFFQTtJQUNJLHlCQUF5QjtBQUM3QjtBQUVBO0lBQ0kseUJBQXlCO0FBQzdCO0FBRUE7RUFDRSxXQUFXO0VBQ1gsZ0JBQWdCO0VBQ2hCLGlDQUFpQztBQUNuQzs7Ozs7O0FDOURBO0lBQ0kseUJBQXlCO0lBQ3pCLGlCQUFpQjtJQUNqQiwrQkFBK0I7SUFDL0IsbUJBQW1CO0FBQ3ZCO0FBRUE7SUFDSSx5QkFBeUI7QUFDN0I7QUFFQTtJQUNJLHlCQUF5QjtBQUM3Qjs7Ozs7O0FDM0lBO0lBQ0ksWUFBWTtJQUNaLGFBQWE7QUFDakI7QUFFQTtJQUNJLFlBQVk7SUFDWixrQkFBa0I7QUFDdEI7QUFFQTtJQUNJLGNBQWM7SUFDZCxpQkFBaUI7SUFDakIsa0JBQWtCO0FBQ3RCO0FBRUE7SUFDSSxjQUFjO0lBQ2QsbUJBQW1CO0FBQ3ZCO0FBRUE7SUFDSSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLHVCQUF1QjtBQUMzQjs7Ozs7O0FDaU9BO0lBQ0ksT0FBTyxFQUFFLGlDQUFpQztJQUMxQyxhQUFhLEVBQUUsdUJBQXVCO0lBQ3RDLHlCQUF5QixFQUFFLHlDQUF5QztBQUN4RTtBQUVBO0lBQ0ksY0FBYztJQUNkLDJCQUEyQjtBQUMvQjtBQUVBO0lBQ0ksY0FBYztJQUNkLHlCQUF5QjtJQUN6QixZQUFZO0lBQ1osa0JBQWtCO0FBQ3RCO0FBRUE7SUFDSSx5QkFBeUI7SUFDekIsaUJBQWlCO0lBQ2pCLCtCQUErQjtJQUMvQixtQkFBbUI7QUFDdkI7QUFFQTtJQUNJLHlCQUF5QjtBQUM3QjtBQUVBO0lBQ0kseUJBQXlCO0FBQzdCOzs7Ozs7QUM3V0U7SUFDRSxZQUFZO0FBQ2Q7Ozs7OztFQ2pIQSxzQ0FBc0M7QUFDdEM7SUFDRSxtSkFBbUo7QUFDcko7QUFFQTtJQUNFLGtCQUFrQjtJQUNsQixhQUFhO0lBQ2IsZ0JBQWdCO0FBQ2xCO0FBRUE7SUFDRSxlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQixnQkFBZ0I7QUFDbEI7QUFFQTtJQUNFLG1CQUFtQjtJQUNuQixjQUFjLEVBQUUsc0NBQXNDO0FBQ3hEOztFQUVBLG1DQUFtQztBQUNuQztJQUNFLHFCQUFxQjtJQUNyQixnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHlCQUF5QixFQUFFLDRDQUE0QztJQUN2RSxZQUFZO0lBQ1oscUJBQXFCO0lBQ3JCLGtCQUFrQjtJQUNsQixzQ0FBc0M7QUFDeEM7QUFFQTtJQUNFLHlCQUF5QjtBQUMzQjs7Ozs7O0FDc2ZGO0VBQ0UsbUJBQW1CO0FBQ3JCO0FBRUE7RUFDRSx5QkFBeUI7RUFDekIsNkJBQTZCO0FBQy9CO0FBRUE7RUFDRSwyQkFBMkI7RUFDM0IseUNBQXlDO0FBQzNDO0FBRUE7RUFDRSx5Q0FBeUM7RUFDekMsdURBQXVEO0FBQ3pEO0FBRUE7RUFDRSxrQkFBa0I7QUFDcEI7QUFFQTtFQUNFLGNBQWM7RUFDZCwyQ0FBMkM7QUFDN0M7QUFFQTtFQUNFLG1CQUFtQjtBQUNyQjtBQUVBO0VBQ0Usa0JBQWtCO0VBQ2xCLCtCQUErQjtBQUNqQztBQUVBO0VBQ0UsMkJBQTJCO0FBQzdCO0FBRUE7RUFDRSxrQ0FBa0M7QUFDcEM7QUFFQTtFQUNFLGdDQUFnQztBQUNsQztBQUVBO0VBQ0Usa0NBQWtDO0FBQ3BDO0FBRUE7RUFDRSxxQkFBcUI7RUFDckIscUJBQXFCO0VBQ3JCLFNBQVM7RUFDVCxxQ0FBcUM7RUFDckMsbUJBQW1CO0FBQ3JCO0FBRUE7RUFDRSxrQkFBa0I7QUFDcEI7O0FBRUEsb0JBQW9CO0FBQ3BCO0VBQ0Usa0JBQWtCO0FBQ3BCO0FBRUE7RUFDRSxnQkFBZ0I7QUFDbEI7QUFFQTtFQUNFLGtCQUFrQjtFQUNsQixpQ0FBaUM7QUFDbkM7QUFFQTtFQUNFLHFEQUFxRDtBQUN2RDtBQUVBO0VBQ0Usa0RBQWtEO0FBQ3BEO0FBRUE7RUFDRSxnREFBZ0Q7QUFDbEQ7QUFFQTtFQUNFLGtEQUFrRDtBQUNwRDtBQUVBO0VBQ0UsK0NBQStDO0FBQ2pEO0FBRUE7RUFDRSxlQUFlO0VBQ2YsZ0JBQWdCO0VBQ2hCLHVEQUF1RDtBQUN6RDtBQUVBO0VBQ0UsY0FBYztFQUNkLDJDQUEyQztBQUM3QztBQUVBO0VBQ0UsMEJBQTBCO0FBQzVCO0FBRUE7RUFDRSw0Q0FBNEM7QUFDOUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9Db3VudHJ5U2VsZWN0b3IudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jb21wb25lbnRzL0VkaXRQcm9maWxlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9PdmVybGF5LnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9FZGl0Q2xpZW50QmFua0FjY291bnRzLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9DcmVhdGVQcm92aWRlckJhbmtBY2NvdW50LnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9IZWFkZXIudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jb21wb25lbnRzL0Zvb3Rlci52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvSW52b2ljZVN0YXRlSGlzdG9yeU92ZXJsYXkudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy92aWV3cy9BY3Rpb25zLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvdmlld3MvRG9jdW1lbnRzLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9DcmVhdGVQcm92aWRlci52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvQ3JlYXRlSW52b2ljZU92ZXJsYXkudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jb21wb25lbnRzL0R5bmFtaWNGaWx0ZXJUYWJsZUNsaWVudC52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvRHluYW1pY0ZpbHRlclRhYmxlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9Qcmlvcml0eVJ1bGVzT3JkZXJpbmdDb21wb25lbnQudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jb21wb25lbnRzL1NoYXJlQ29tcG9uZW50UnVsZXMudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jb21wb25lbnRzL1BheW1lbnRNZXRob2RzUnVsZUNvbXBvbmVudC52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvSW52b2ljZVJ1bGVzT3ZlcmxheS52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvSW52b2ljZVdpdGhGaWx0ZXJzLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9HZW5lcmFsSG9tZS52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL3ZpZXdzL1Byb3ZpZGVycy52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvSGlzdG9yeUNvbXBvbmVudC52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL3ZpZXdzL0hpc3RvcnkudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy92aWV3cy9Ib21lUHJvdmlkZXJzLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9GaWx0ZXJzLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvdmlld3MvTm90Rm91bmQudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy92aWV3cy9SdWxlVGVzdGVyLnZ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gIDx2LXNlbGVjdFxuICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICA6bW9kZWwtdmFsdWU9XCJtb2RlbFZhbHVlXCJcbiAgICBAdXBkYXRlOm1vZGVsLXZhbHVlPVwiJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgJGV2ZW50KVwiXG4gICAgOml0ZW1zPVwiY291bnRyaWVzXCJcbiAgICBpdGVtLXZhbHVlPVwiaXNvXCJcbiAgICBpdGVtLXRpdGxlPVwic2VhcmNoVGV4dFwiXG4gICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICBjbGVhcmFibGVcbiAgICA6cnVsZXM9XCJydWxlc1wiXG4gICAgOmN1c3RvbS1maWx0ZXI9XCJjb3VudHJ5RmlsdGVyXCJcbiAgPlxuICAgIDx0ZW1wbGF0ZSB2LXNsb3Q6c2VsZWN0aW9uPVwieyBpdGVtIH1cIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY291bnRyeS1pc29cIj57eyBpdGVtLnJhdy5pc28gfX08L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImNvdW50cnktbmFtZVwiPnt7IGl0ZW0ucmF3Lm5hbWUgfX08L3NwYW4+XG4gICAgPC90ZW1wbGF0ZT5cbiAgICA8dGVtcGxhdGUgdi1zbG90Oml0ZW09XCJ7IHByb3BzLCBpdGVtIH1cIj5cbiAgICAgIDx2LWxpc3QtaXRlbSB2LWJpbmQ9XCJwcm9wc1wiPlxuICAgICAgICA8dGVtcGxhdGUgdi1zbG90OnRpdGxlPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY291bnRyeS1pc29cIj57eyBpdGVtLnJhdy5pc28gfX08L3NwYW4+IC0ge3sgaXRlbS5yYXcubmFtZSB9fVxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgPC92LWxpc3QtaXRlbT5cbiAgICA8L3RlbXBsYXRlPlxuICA8L3Ytc2VsZWN0PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ0NvdW50cnlTZWxlY3RvcicsXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ0VTJ1xuICAgIH0sXG4gICAgbGFiZWw6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdQYcOtcydcbiAgICB9LFxuICAgIHJ1bGVzOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGRlZmF1bHQ6ICgpID0+IFtdXG4gICAgfVxuICB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZSddLFxuICBzZXR1cCgpIHtcbiAgICBjb25zdCBjb3VudHJpZXMgPSBbXG4gICAgICB7IGlzbzogJ0FEJywgbmFtZTogJ0FuZG9ycmEnLCBzZWFyY2hUZXh0OiAnQUQgLSBBbmRvcnJhJyB9LFxuICAgICAgeyBpc286ICdBRScsIG5hbWU6ICdFbWlyYXRvcyDDgXJhYmVzIFVuaWRvcycsIHNlYXJjaFRleHQ6ICdBRSAtIEVtaXJhdG9zIMOBcmFiZXMgVW5pZG9zJyB9LFxuICAgICAgeyBpc286ICdBRicsIG5hbWU6ICdBZmdhbmlzdMOhbicsIHNlYXJjaFRleHQ6ICdBRiAtIEFmZ2FuaXN0w6FuJyB9LFxuICAgICAgeyBpc286ICdBRycsIG5hbWU6ICdBbnRpZ3VhIHkgQmFyYnVkYScsIHNlYXJjaFRleHQ6ICdBRyAtIEFudGlndWEgeSBCYXJidWRhJyB9LFxuICAgICAgeyBpc286ICdBSScsIG5hbWU6ICdBbmd1aWxhJywgc2VhcmNoVGV4dDogJ0FJIC0gQW5ndWlsYScgfSxcbiAgICAgIHsgaXNvOiAnQUwnLCBuYW1lOiAnQWxiYW5pYScsIHNlYXJjaFRleHQ6ICdBTCAtIEFsYmFuaWEnIH0sXG4gICAgICB7IGlzbzogJ0FNJywgbmFtZTogJ0FybWVuaWEnLCBzZWFyY2hUZXh0OiAnQU0gLSBBcm1lbmlhJyB9LFxuICAgICAgeyBpc286ICdBTycsIG5hbWU6ICdBbmdvbGEnLCBzZWFyY2hUZXh0OiAnQU8gLSBBbmdvbGEnIH0sXG4gICAgICB7IGlzbzogJ0FRJywgbmFtZTogJ0FudMOhcnRpZGEnLCBzZWFyY2hUZXh0OiAnQVEgLSBBbnTDoXJ0aWRhJyB9LFxuICAgICAgeyBpc286ICdBUicsIG5hbWU6ICdBcmdlbnRpbmEnLCBzZWFyY2hUZXh0OiAnQVIgLSBBcmdlbnRpbmEnIH0sXG4gICAgICB7IGlzbzogJ0FTJywgbmFtZTogJ1NhbW9hIEFtZXJpY2FuYScsIHNlYXJjaFRleHQ6ICdBUyAtIFNhbW9hIEFtZXJpY2FuYScgfSxcbiAgICAgIHsgaXNvOiAnQVQnLCBuYW1lOiAnQXVzdHJpYScsIHNlYXJjaFRleHQ6ICdBVCAtIEF1c3RyaWEnIH0sXG4gICAgICB7IGlzbzogJ0FVJywgbmFtZTogJ0F1c3RyYWxpYScsIHNlYXJjaFRleHQ6ICdBVSAtIEF1c3RyYWxpYScgfSxcbiAgICAgIHsgaXNvOiAnQVcnLCBuYW1lOiAnQXJ1YmEnLCBzZWFyY2hUZXh0OiAnQVcgLSBBcnViYScgfSxcbiAgICAgIHsgaXNvOiAnQVgnLCBuYW1lOiAnSXNsYXMgw4VsYW5kJywgc2VhcmNoVGV4dDogJ0FYIC0gSXNsYXMgw4VsYW5kJyB9LFxuICAgICAgeyBpc286ICdBWicsIG5hbWU6ICdBemVyYmFpecOhbicsIHNlYXJjaFRleHQ6ICdBWiAtIEF6ZXJiYWl5w6FuJyB9LFxuICAgICAgeyBpc286ICdCQScsIG5hbWU6ICdCb3NuaWEgeSBIZXJ6ZWdvdmluYScsIHNlYXJjaFRleHQ6ICdCQSAtIEJvc25pYSB5IEhlcnplZ292aW5hJyB9LFxuICAgICAgeyBpc286ICdCQicsIG5hbWU6ICdCYXJiYWRvcycsIHNlYXJjaFRleHQ6ICdCQiAtIEJhcmJhZG9zJyB9LFxuICAgICAgeyBpc286ICdCRCcsIG5hbWU6ICdCYW5nbGFkZXNoJywgc2VhcmNoVGV4dDogJ0JEIC0gQmFuZ2xhZGVzaCcgfSxcbiAgICAgIHsgaXNvOiAnQkUnLCBuYW1lOiAnQsOpbGdpY2EnLCBzZWFyY2hUZXh0OiAnQkUgLSBCw6lsZ2ljYScgfSxcbiAgICAgIHsgaXNvOiAnQkYnLCBuYW1lOiAnQnVya2luYSBGYXNvJywgc2VhcmNoVGV4dDogJ0JGIC0gQnVya2luYSBGYXNvJyB9LFxuICAgICAgeyBpc286ICdCRycsIG5hbWU6ICdCdWxnYXJpYScsIHNlYXJjaFRleHQ6ICdCRyAtIEJ1bGdhcmlhJyB9LFxuICAgICAgeyBpc286ICdCSCcsIG5hbWU6ICdCYXLDqWluJywgc2VhcmNoVGV4dDogJ0JIIC0gQmFyw6lpbicgfSxcbiAgICAgIHsgaXNvOiAnQkknLCBuYW1lOiAnQnVydW5kaScsIHNlYXJjaFRleHQ6ICdCSSAtIEJ1cnVuZGknIH0sXG4gICAgICB7IGlzbzogJ0JKJywgbmFtZTogJ0JlbsOtbicsIHNlYXJjaFRleHQ6ICdCSiAtIEJlbsOtbicgfSxcbiAgICAgIHsgaXNvOiAnQkwnLCBuYW1lOiAnU2FuIEJhcnRvbG9tw6knLCBzZWFyY2hUZXh0OiAnQkwgLSBTYW4gQmFydG9sb23DqScgfSxcbiAgICAgIHsgaXNvOiAnQk0nLCBuYW1lOiAnQmVybXVkYXMnLCBzZWFyY2hUZXh0OiAnQk0gLSBCZXJtdWRhcycgfSxcbiAgICAgIHsgaXNvOiAnQk4nLCBuYW1lOiAnQnJ1bsOpaScsIHNlYXJjaFRleHQ6ICdCTiAtIEJydW7DqWknIH0sXG4gICAgICB7IGlzbzogJ0JPJywgbmFtZTogJ0JvbGl2aWEnLCBzZWFyY2hUZXh0OiAnQk8gLSBCb2xpdmlhJyB9LFxuICAgICAgeyBpc286ICdCUScsIG5hbWU6ICdCb25haXJlJywgc2VhcmNoVGV4dDogJ0JRIC0gQm9uYWlyZScgfSxcbiAgICAgIHsgaXNvOiAnQlInLCBuYW1lOiAnQnJhc2lsJywgc2VhcmNoVGV4dDogJ0JSIC0gQnJhc2lsJyB9LFxuICAgICAgeyBpc286ICdCUycsIG5hbWU6ICdCYWhhbWFzJywgc2VhcmNoVGV4dDogJ0JTIC0gQmFoYW1hcycgfSxcbiAgICAgIHsgaXNvOiAnQlQnLCBuYW1lOiAnQnV0w6FuJywgc2VhcmNoVGV4dDogJ0JUIC0gQnV0w6FuJyB9LFxuICAgICAgeyBpc286ICdCVicsIG5hbWU6ICdJc2xhIEJvdXZldCcsIHNlYXJjaFRleHQ6ICdCViAtIElzbGEgQm91dmV0JyB9LFxuICAgICAgeyBpc286ICdCVycsIG5hbWU6ICdCb3RzdWFuYScsIHNlYXJjaFRleHQ6ICdCVyAtIEJvdHN1YW5hJyB9LFxuICAgICAgeyBpc286ICdCWScsIG5hbWU6ICdCaWVsb3JydXNpYScsIHNlYXJjaFRleHQ6ICdCWSAtIEJpZWxvcnJ1c2lhJyB9LFxuICAgICAgeyBpc286ICdCWicsIG5hbWU6ICdCZWxpY2UnLCBzZWFyY2hUZXh0OiAnQlogLSBCZWxpY2UnIH0sXG4gICAgICB7IGlzbzogJ0NBJywgbmFtZTogJ0NhbmFkw6EnLCBzZWFyY2hUZXh0OiAnQ0EgLSBDYW5hZMOhJyB9LFxuICAgICAgeyBpc286ICdDQycsIG5hbWU6ICdJc2xhcyBDb2NvcycsIHNlYXJjaFRleHQ6ICdDQyAtIElzbGFzIENvY29zJyB9LFxuICAgICAgeyBpc286ICdDRCcsIG5hbWU6ICdSZXDDumJsaWNhIERlbW9jcsOhdGljYSBkZWwgQ29uZ28nLCBzZWFyY2hUZXh0OiAnQ0QgLSBSZXDDumJsaWNhIERlbW9jcsOhdGljYSBkZWwgQ29uZ28nIH0sXG4gICAgICB7IGlzbzogJ0NGJywgbmFtZTogJ1JlcMO6YmxpY2EgQ2VudHJvYWZyaWNhbmEnLCBzZWFyY2hUZXh0OiAnQ0YgLSBSZXDDumJsaWNhIENlbnRyb2FmcmljYW5hJyB9LFxuICAgICAgeyBpc286ICdDRycsIG5hbWU6ICdSZXDDumJsaWNhIGRlbCBDb25nbycsIHNlYXJjaFRleHQ6ICdDRyAtIFJlcMO6YmxpY2EgZGVsIENvbmdvJyB9LFxuICAgICAgeyBpc286ICdDSCcsIG5hbWU6ICdTdWl6YScsIHNlYXJjaFRleHQ6ICdDSCAtIFN1aXphJyB9LFxuICAgICAgeyBpc286ICdDSScsIG5hbWU6ICdDb3N0YSBkZSBNYXJmaWwnLCBzZWFyY2hUZXh0OiAnQ0kgLSBDb3N0YSBkZSBNYXJmaWwnIH0sXG4gICAgICB7IGlzbzogJ0NLJywgbmFtZTogJ0lzbGFzIENvb2snLCBzZWFyY2hUZXh0OiAnQ0sgLSBJc2xhcyBDb29rJyB9LFxuICAgICAgeyBpc286ICdDTCcsIG5hbWU6ICdDaGlsZScsIHNlYXJjaFRleHQ6ICdDTCAtIENoaWxlJyB9LFxuICAgICAgeyBpc286ICdDTScsIG5hbWU6ICdDYW1lcsO6bicsIHNlYXJjaFRleHQ6ICdDTSAtIENhbWVyw7puJyB9LFxuICAgICAgeyBpc286ICdDTicsIG5hbWU6ICdDaGluYScsIHNlYXJjaFRleHQ6ICdDTiAtIENoaW5hJyB9LFxuICAgICAgeyBpc286ICdDTycsIG5hbWU6ICdDb2xvbWJpYScsIHNlYXJjaFRleHQ6ICdDTyAtIENvbG9tYmlhJyB9LFxuICAgICAgeyBpc286ICdDUicsIG5hbWU6ICdDb3N0YSBSaWNhJywgc2VhcmNoVGV4dDogJ0NSIC0gQ29zdGEgUmljYScgfSxcbiAgICAgIHsgaXNvOiAnQ1UnLCBuYW1lOiAnQ3ViYScsIHNlYXJjaFRleHQ6ICdDVSAtIEN1YmEnIH0sXG4gICAgICB7IGlzbzogJ0NWJywgbmFtZTogJ0NhYm8gVmVyZGUnLCBzZWFyY2hUZXh0OiAnQ1YgLSBDYWJvIFZlcmRlJyB9LFxuICAgICAgeyBpc286ICdDVycsIG5hbWU6ICdDdXJhemFvJywgc2VhcmNoVGV4dDogJ0NXIC0gQ3VyYXphbycgfSxcbiAgICAgIHsgaXNvOiAnQ1gnLCBuYW1lOiAnSXNsYSBkZSBOYXZpZGFkJywgc2VhcmNoVGV4dDogJ0NYIC0gSXNsYSBkZSBOYXZpZGFkJyB9LFxuICAgICAgeyBpc286ICdDWScsIG5hbWU6ICdDaGlwcmUnLCBzZWFyY2hUZXh0OiAnQ1kgLSBDaGlwcmUnIH0sXG4gICAgICB7IGlzbzogJ0NaJywgbmFtZTogJ1JlcMO6YmxpY2EgQ2hlY2EnLCBzZWFyY2hUZXh0OiAnQ1ogLSBSZXDDumJsaWNhIENoZWNhJyB9LFxuICAgICAgeyBpc286ICdERScsIG5hbWU6ICdBbGVtYW5pYScsIHNlYXJjaFRleHQ6ICdERSAtIEFsZW1hbmlhJyB9LFxuICAgICAgeyBpc286ICdESicsIG5hbWU6ICdZaWJ1dGknLCBzZWFyY2hUZXh0OiAnREogLSBZaWJ1dGknIH0sXG4gICAgICB7IGlzbzogJ0RLJywgbmFtZTogJ0RpbmFtYXJjYScsIHNlYXJjaFRleHQ6ICdESyAtIERpbmFtYXJjYScgfSxcbiAgICAgIHsgaXNvOiAnRE0nLCBuYW1lOiAnRG9taW5pY2EnLCBzZWFyY2hUZXh0OiAnRE0gLSBEb21pbmljYScgfSxcbiAgICAgIHsgaXNvOiAnRE8nLCBuYW1lOiAnUmVww7pibGljYSBEb21pbmljYW5hJywgc2VhcmNoVGV4dDogJ0RPIC0gUmVww7pibGljYSBEb21pbmljYW5hJyB9LFxuICAgICAgeyBpc286ICdEWicsIG5hbWU6ICdBcmdlbGlhJywgc2VhcmNoVGV4dDogJ0RaIC0gQXJnZWxpYScgfSxcbiAgICAgIHsgaXNvOiAnRUMnLCBuYW1lOiAnRWN1YWRvcicsIHNlYXJjaFRleHQ6ICdFQyAtIEVjdWFkb3InIH0sXG4gICAgICB7IGlzbzogJ0VFJywgbmFtZTogJ0VzdG9uaWEnLCBzZWFyY2hUZXh0OiAnRUUgLSBFc3RvbmlhJyB9LFxuICAgICAgeyBpc286ICdFRycsIG5hbWU6ICdFZ2lwdG8nLCBzZWFyY2hUZXh0OiAnRUcgLSBFZ2lwdG8nIH0sXG4gICAgICB7IGlzbzogJ0VIJywgbmFtZTogJ1NhaGFyYSBPY2NpZGVudGFsJywgc2VhcmNoVGV4dDogJ0VIIC0gU2FoYXJhIE9jY2lkZW50YWwnIH0sXG4gICAgICB7IGlzbzogJ0VSJywgbmFtZTogJ0VyaXRyZWEnLCBzZWFyY2hUZXh0OiAnRVIgLSBFcml0cmVhJyB9LFxuICAgICAgeyBpc286ICdFUycsIG5hbWU6ICdFc3Bhw7FhJywgc2VhcmNoVGV4dDogJ0VTIC0gRXNwYcOxYScgfSxcbiAgICAgIHsgaXNvOiAnRVQnLCBuYW1lOiAnRXRpb3DDrWEnLCBzZWFyY2hUZXh0OiAnRVQgLSBFdGlvcMOtYScgfSxcbiAgICAgIHsgaXNvOiAnRkknLCBuYW1lOiAnRmlubGFuZGlhJywgc2VhcmNoVGV4dDogJ0ZJIC0gRmlubGFuZGlhJyB9LFxuICAgICAgeyBpc286ICdGSicsIG5hbWU6ICdGaXlpJywgc2VhcmNoVGV4dDogJ0ZKIC0gRml5aScgfSxcbiAgICAgIHsgaXNvOiAnRksnLCBuYW1lOiAnSXNsYXMgTWFsdmluYXMnLCBzZWFyY2hUZXh0OiAnRksgLSBJc2xhcyBNYWx2aW5hcycgfSxcbiAgICAgIHsgaXNvOiAnRk0nLCBuYW1lOiAnTWljcm9uZXNpYScsIHNlYXJjaFRleHQ6ICdGTSAtIE1pY3JvbmVzaWEnIH0sXG4gICAgICB7IGlzbzogJ0ZPJywgbmFtZTogJ0lzbGFzIEZlcm9lJywgc2VhcmNoVGV4dDogJ0ZPIC0gSXNsYXMgRmVyb2UnIH0sXG4gICAgICB7IGlzbzogJ0ZSJywgbmFtZTogJ0ZyYW5jaWEnLCBzZWFyY2hUZXh0OiAnRlIgLSBGcmFuY2lhJyB9LFxuICAgICAgeyBpc286ICdHQScsIG5hbWU6ICdHYWLDs24nLCBzZWFyY2hUZXh0OiAnR0EgLSBHYWLDs24nIH0sXG4gICAgICB7IGlzbzogJ0dCJywgbmFtZTogJ1JlaW5vIFVuaWRvJywgc2VhcmNoVGV4dDogJ0dCIC0gUmVpbm8gVW5pZG8nIH0sXG4gICAgICB7IGlzbzogJ0dEJywgbmFtZTogJ0dyYW5hZGEnLCBzZWFyY2hUZXh0OiAnR0QgLSBHcmFuYWRhJyB9LFxuICAgICAgeyBpc286ICdHRScsIG5hbWU6ICdHZW9yZ2lhJywgc2VhcmNoVGV4dDogJ0dFIC0gR2VvcmdpYScgfSxcbiAgICAgIHsgaXNvOiAnR0YnLCBuYW1lOiAnR3VheWFuYSBGcmFuY2VzYScsIHNlYXJjaFRleHQ6ICdHRiAtIEd1YXlhbmEgRnJhbmNlc2EnIH0sXG4gICAgICB7IGlzbzogJ0dHJywgbmFtZTogJ0d1ZXJuc2V5Jywgc2VhcmNoVGV4dDogJ0dHIC0gR3Vlcm5zZXknIH0sXG4gICAgICB7IGlzbzogJ0dIJywgbmFtZTogJ0doYW5hJywgc2VhcmNoVGV4dDogJ0dIIC0gR2hhbmEnIH0sXG4gICAgICB7IGlzbzogJ0dJJywgbmFtZTogJ0dpYnJhbHRhcicsIHNlYXJjaFRleHQ6ICdHSSAtIEdpYnJhbHRhcicgfSxcbiAgICAgIHsgaXNvOiAnR0wnLCBuYW1lOiAnR3JvZW5sYW5kaWEnLCBzZWFyY2hUZXh0OiAnR0wgLSBHcm9lbmxhbmRpYScgfSxcbiAgICAgIHsgaXNvOiAnR00nLCBuYW1lOiAnR2FtYmlhJywgc2VhcmNoVGV4dDogJ0dNIC0gR2FtYmlhJyB9LFxuICAgICAgeyBpc286ICdHTicsIG5hbWU6ICdHdWluZWEnLCBzZWFyY2hUZXh0OiAnR04gLSBHdWluZWEnIH0sXG4gICAgICB7IGlzbzogJ0dQJywgbmFtZTogJ0d1YWRhbHVwZScsIHNlYXJjaFRleHQ6ICdHUCAtIEd1YWRhbHVwZScgfSxcbiAgICAgIHsgaXNvOiAnR1EnLCBuYW1lOiAnR3VpbmVhIEVjdWF0b3JpYWwnLCBzZWFyY2hUZXh0OiAnR1EgLSBHdWluZWEgRWN1YXRvcmlhbCcgfSxcbiAgICAgIHsgaXNvOiAnR1InLCBuYW1lOiAnR3JlY2lhJywgc2VhcmNoVGV4dDogJ0dSIC0gR3JlY2lhJyB9LFxuICAgICAgeyBpc286ICdHUycsIG5hbWU6ICdJc2xhcyBHZW9yZ2lhIGRlbCBTdXIgeSBTYW5kd2ljaCBkZWwgU3VyJywgc2VhcmNoVGV4dDogJ0dTIC0gSXNsYXMgR2VvcmdpYSBkZWwgU3VyIHkgU2FuZHdpY2ggZGVsIFN1cicgfSxcbiAgICAgIHsgaXNvOiAnR1QnLCBuYW1lOiAnR3VhdGVtYWxhJywgc2VhcmNoVGV4dDogJ0dUIC0gR3VhdGVtYWxhJyB9LFxuICAgICAgeyBpc286ICdHVScsIG5hbWU6ICdHdWFtJywgc2VhcmNoVGV4dDogJ0dVIC0gR3VhbScgfSxcbiAgICAgIHsgaXNvOiAnR1cnLCBuYW1lOiAnR3VpbmVhLUJpc8OhdScsIHNlYXJjaFRleHQ6ICdHVyAtIEd1aW5lYS1CaXPDoXUnIH0sXG4gICAgICB7IGlzbzogJ0dZJywgbmFtZTogJ0d1eWFuYScsIHNlYXJjaFRleHQ6ICdHWSAtIEd1eWFuYScgfSxcbiAgICAgIHsgaXNvOiAnSEsnLCBuYW1lOiAnSG9uZyBLb25nJywgc2VhcmNoVGV4dDogJ0hLIC0gSG9uZyBLb25nJyB9LFxuICAgICAgeyBpc286ICdITScsIG5hbWU6ICdJc2xhcyBIZWFyZCB5IE1jRG9uYWxkJywgc2VhcmNoVGV4dDogJ0hNIC0gSXNsYXMgSGVhcmQgeSBNY0RvbmFsZCcgfSxcbiAgICAgIHsgaXNvOiAnSE4nLCBuYW1lOiAnSG9uZHVyYXMnLCBzZWFyY2hUZXh0OiAnSE4gLSBIb25kdXJhcycgfSxcbiAgICAgIHsgaXNvOiAnSFInLCBuYW1lOiAnQ3JvYWNpYScsIHNlYXJjaFRleHQ6ICdIUiAtIENyb2FjaWEnIH0sXG4gICAgICB7IGlzbzogJ0hUJywgbmFtZTogJ0hhaXTDrScsIHNlYXJjaFRleHQ6ICdIVCAtIEhhaXTDrScgfSxcbiAgICAgIHsgaXNvOiAnSFUnLCBuYW1lOiAnSHVuZ3LDrWEnLCBzZWFyY2hUZXh0OiAnSFUgLSBIdW5ncsOtYScgfSxcbiAgICAgIHsgaXNvOiAnSUQnLCBuYW1lOiAnSW5kb25lc2lhJywgc2VhcmNoVGV4dDogJ0lEIC0gSW5kb25lc2lhJyB9LFxuICAgICAgeyBpc286ICdJRScsIG5hbWU6ICdJcmxhbmRhJywgc2VhcmNoVGV4dDogJ0lFIC0gSXJsYW5kYScgfSxcbiAgICAgIHsgaXNvOiAnSUwnLCBuYW1lOiAnSXNyYWVsJywgc2VhcmNoVGV4dDogJ0lMIC0gSXNyYWVsJyB9LFxuICAgICAgeyBpc286ICdJTScsIG5hbWU6ICdJc2xhIGRlIE1hbicsIHNlYXJjaFRleHQ6ICdJTSAtIElzbGEgZGUgTWFuJyB9LFxuICAgICAgeyBpc286ICdJTicsIG5hbWU6ICdJbmRpYScsIHNlYXJjaFRleHQ6ICdJTiAtIEluZGlhJyB9LFxuICAgICAgeyBpc286ICdJTycsIG5hbWU6ICdUZXJyaXRvcmlvIEJyaXTDoW5pY28gZGVsIE9jw6lhbm8gw41uZGljbycsIHNlYXJjaFRleHQ6ICdJTyAtIFRlcnJpdG9yaW8gQnJpdMOhbmljbyBkZWwgT2PDqWFubyDDjW5kaWNvJyB9LFxuICAgICAgeyBpc286ICdJUScsIG5hbWU6ICdJcmFrJywgc2VhcmNoVGV4dDogJ0lRIC0gSXJhaycgfSxcbiAgICAgIHsgaXNvOiAnSVInLCBuYW1lOiAnSXLDoW4nLCBzZWFyY2hUZXh0OiAnSVIgLSBJcsOhbicgfSxcbiAgICAgIHsgaXNvOiAnSVMnLCBuYW1lOiAnSXNsYW5kaWEnLCBzZWFyY2hUZXh0OiAnSVMgLSBJc2xhbmRpYScgfSxcbiAgICAgIHsgaXNvOiAnSVQnLCBuYW1lOiAnSXRhbGlhJywgc2VhcmNoVGV4dDogJ0lUIC0gSXRhbGlhJyB9LFxuICAgICAgeyBpc286ICdKRScsIG5hbWU6ICdKZXJzZXknLCBzZWFyY2hUZXh0OiAnSkUgLSBKZXJzZXknIH0sXG4gICAgICB7IGlzbzogJ0pNJywgbmFtZTogJ0phbWFpY2EnLCBzZWFyY2hUZXh0OiAnSk0gLSBKYW1haWNhJyB9LFxuICAgICAgeyBpc286ICdKTycsIG5hbWU6ICdKb3JkYW5pYScsIHNlYXJjaFRleHQ6ICdKTyAtIEpvcmRhbmlhJyB9LFxuICAgICAgeyBpc286ICdKUCcsIG5hbWU6ICdKYXDDs24nLCBzZWFyY2hUZXh0OiAnSlAgLSBKYXDDs24nIH0sXG4gICAgICB7IGlzbzogJ0tFJywgbmFtZTogJ0tlbmlhJywgc2VhcmNoVGV4dDogJ0tFIC0gS2VuaWEnIH0sXG4gICAgICB7IGlzbzogJ0tHJywgbmFtZTogJ0tpcmd1aXN0w6FuJywgc2VhcmNoVGV4dDogJ0tHIC0gS2lyZ3Vpc3TDoW4nIH0sXG4gICAgICB7IGlzbzogJ0tIJywgbmFtZTogJ0NhbWJveWEnLCBzZWFyY2hUZXh0OiAnS0ggLSBDYW1ib3lhJyB9LFxuICAgICAgeyBpc286ICdLSScsIG5hbWU6ICdLaXJpYmF0aScsIHNlYXJjaFRleHQ6ICdLSSAtIEtpcmliYXRpJyB9LFxuICAgICAgeyBpc286ICdLTScsIG5hbWU6ICdDb21vcmFzJywgc2VhcmNoVGV4dDogJ0tNIC0gQ29tb3JhcycgfSxcbiAgICAgIHsgaXNvOiAnS04nLCBuYW1lOiAnU2FuIENyaXN0w7NiYWwgeSBOaWV2ZXMnLCBzZWFyY2hUZXh0OiAnS04gLSBTYW4gQ3Jpc3TDs2JhbCB5IE5pZXZlcycgfSxcbiAgICAgIHsgaXNvOiAnS1AnLCBuYW1lOiAnQ29yZWEgZGVsIE5vcnRlJywgc2VhcmNoVGV4dDogJ0tQIC0gQ29yZWEgZGVsIE5vcnRlJyB9LFxuICAgICAgeyBpc286ICdLUicsIG5hbWU6ICdDb3JlYSBkZWwgU3VyJywgc2VhcmNoVGV4dDogJ0tSIC0gQ29yZWEgZGVsIFN1cicgfSxcbiAgICAgIHsgaXNvOiAnS1cnLCBuYW1lOiAnS3V3YWl0Jywgc2VhcmNoVGV4dDogJ0tXIC0gS3V3YWl0JyB9LFxuICAgICAgeyBpc286ICdLWScsIG5hbWU6ICdJc2xhcyBDYWltw6FuJywgc2VhcmNoVGV4dDogJ0tZIC0gSXNsYXMgQ2FpbcOhbicgfSxcbiAgICAgIHsgaXNvOiAnS1onLCBuYW1lOiAnS2F6YWppc3TDoW4nLCBzZWFyY2hUZXh0OiAnS1ogLSBLYXphamlzdMOhbicgfSxcbiAgICAgIHsgaXNvOiAnTEEnLCBuYW1lOiAnTGFvcycsIHNlYXJjaFRleHQ6ICdMQSAtIExhb3MnIH0sXG4gICAgICB7IGlzbzogJ0xCJywgbmFtZTogJ0zDrWJhbm8nLCBzZWFyY2hUZXh0OiAnTEIgLSBMw61iYW5vJyB9LFxuICAgICAgeyBpc286ICdMQycsIG5hbWU6ICdTYW50YSBMdWPDrWEnLCBzZWFyY2hUZXh0OiAnTEMgLSBTYW50YSBMdWPDrWEnIH0sXG4gICAgICB7IGlzbzogJ0xJJywgbmFtZTogJ0xpZWNodGVuc3RlaW4nLCBzZWFyY2hUZXh0OiAnTEkgLSBMaWVjaHRlbnN0ZWluJyB9LFxuICAgICAgeyBpc286ICdMSycsIG5hbWU6ICdTcmkgTGFua2EnLCBzZWFyY2hUZXh0OiAnTEsgLSBTcmkgTGFua2EnIH0sXG4gICAgICB7IGlzbzogJ0xSJywgbmFtZTogJ0xpYmVyaWEnLCBzZWFyY2hUZXh0OiAnTFIgLSBMaWJlcmlhJyB9LFxuICAgICAgeyBpc286ICdMUycsIG5hbWU6ICdMZXNvdG8nLCBzZWFyY2hUZXh0OiAnTFMgLSBMZXNvdG8nIH0sXG4gICAgICB7IGlzbzogJ0xUJywgbmFtZTogJ0xpdHVhbmlhJywgc2VhcmNoVGV4dDogJ0xUIC0gTGl0dWFuaWEnIH0sXG4gICAgICB7IGlzbzogJ0xVJywgbmFtZTogJ0x1eGVtYnVyZ28nLCBzZWFyY2hUZXh0OiAnTFUgLSBMdXhlbWJ1cmdvJyB9LFxuICAgICAgeyBpc286ICdMVicsIG5hbWU6ICdMZXRvbmlhJywgc2VhcmNoVGV4dDogJ0xWIC0gTGV0b25pYScgfSxcbiAgICAgIHsgaXNvOiAnTFknLCBuYW1lOiAnTGliaWEnLCBzZWFyY2hUZXh0OiAnTFkgLSBMaWJpYScgfSxcbiAgICAgIHsgaXNvOiAnTUEnLCBuYW1lOiAnTWFycnVlY29zJywgc2VhcmNoVGV4dDogJ01BIC0gTWFycnVlY29zJyB9LFxuICAgICAgeyBpc286ICdNQycsIG5hbWU6ICdNw7NuYWNvJywgc2VhcmNoVGV4dDogJ01DIC0gTcOzbmFjbycgfSxcbiAgICAgIHsgaXNvOiAnTUQnLCBuYW1lOiAnTW9sZGF2aWEnLCBzZWFyY2hUZXh0OiAnTUQgLSBNb2xkYXZpYScgfSxcbiAgICAgIHsgaXNvOiAnTUUnLCBuYW1lOiAnTW9udGVuZWdybycsIHNlYXJjaFRleHQ6ICdNRSAtIE1vbnRlbmVncm8nIH0sXG4gICAgICB7IGlzbzogJ01GJywgbmFtZTogJ1NhbiBNYXJ0w61uJywgc2VhcmNoVGV4dDogJ01GIC0gU2FuIE1hcnTDrW4nIH0sXG4gICAgICB7IGlzbzogJ01HJywgbmFtZTogJ01hZGFnYXNjYXInLCBzZWFyY2hUZXh0OiAnTUcgLSBNYWRhZ2FzY2FyJyB9LFxuICAgICAgeyBpc286ICdNSCcsIG5hbWU6ICdJc2xhcyBNYXJzaGFsbCcsIHNlYXJjaFRleHQ6ICdNSCAtIElzbGFzIE1hcnNoYWxsJyB9LFxuICAgICAgeyBpc286ICdNSycsIG5hbWU6ICdNYWNlZG9uaWEgZGVsIE5vcnRlJywgc2VhcmNoVGV4dDogJ01LIC0gTWFjZWRvbmlhIGRlbCBOb3J0ZScgfSxcbiAgICAgIHsgaXNvOiAnTUwnLCBuYW1lOiAnTWFsw60nLCBzZWFyY2hUZXh0OiAnTUwgLSBNYWzDrScgfSxcbiAgICAgIHsgaXNvOiAnTU0nLCBuYW1lOiAnTXlhbm1hcicsIHNlYXJjaFRleHQ6ICdNTSAtIE15YW5tYXInIH0sXG4gICAgICB7IGlzbzogJ01OJywgbmFtZTogJ01vbmdvbGlhJywgc2VhcmNoVGV4dDogJ01OIC0gTW9uZ29saWEnIH0sXG4gICAgICB7IGlzbzogJ01PJywgbmFtZTogJ01hY2FvJywgc2VhcmNoVGV4dDogJ01PIC0gTWFjYW8nIH0sXG4gICAgICB7IGlzbzogJ01QJywgbmFtZTogJ0lzbGFzIE1hcmlhbmFzIGRlbCBOb3J0ZScsIHNlYXJjaFRleHQ6ICdNUCAtIElzbGFzIE1hcmlhbmFzIGRlbCBOb3J0ZScgfSxcbiAgICAgIHsgaXNvOiAnTVEnLCBuYW1lOiAnTWFydGluaWNhJywgc2VhcmNoVGV4dDogJ01RIC0gTWFydGluaWNhJyB9LFxuICAgICAgeyBpc286ICdNUicsIG5hbWU6ICdNYXVyaXRhbmlhJywgc2VhcmNoVGV4dDogJ01SIC0gTWF1cml0YW5pYScgfSxcbiAgICAgIHsgaXNvOiAnTVMnLCBuYW1lOiAnTW9udHNlcnJhdCcsIHNlYXJjaFRleHQ6ICdNUyAtIE1vbnRzZXJyYXQnIH0sXG4gICAgICB7IGlzbzogJ01UJywgbmFtZTogJ01hbHRhJywgc2VhcmNoVGV4dDogJ01UIC0gTWFsdGEnIH0sXG4gICAgICB7IGlzbzogJ01VJywgbmFtZTogJ01hdXJpY2lvJywgc2VhcmNoVGV4dDogJ01VIC0gTWF1cmljaW8nIH0sXG4gICAgICB7IGlzbzogJ01WJywgbmFtZTogJ01hbGRpdmFzJywgc2VhcmNoVGV4dDogJ01WIC0gTWFsZGl2YXMnIH0sXG4gICAgICB7IGlzbzogJ01XJywgbmFtZTogJ01hbGF1aScsIHNlYXJjaFRleHQ6ICdNVyAtIE1hbGF1aScgfSxcbiAgICAgIHsgaXNvOiAnTVgnLCBuYW1lOiAnTcOpeGljbycsIHNlYXJjaFRleHQ6ICdNWCAtIE3DqXhpY28nIH0sXG4gICAgICB7IGlzbzogJ01ZJywgbmFtZTogJ01hbGFzaWEnLCBzZWFyY2hUZXh0OiAnTVkgLSBNYWxhc2lhJyB9LFxuICAgICAgeyBpc286ICdNWicsIG5hbWU6ICdNb3phbWJpcXVlJywgc2VhcmNoVGV4dDogJ01aIC0gTW96YW1iaXF1ZScgfSxcbiAgICAgIHsgaXNvOiAnTkEnLCBuYW1lOiAnTmFtaWJpYScsIHNlYXJjaFRleHQ6ICdOQSAtIE5hbWliaWEnIH0sXG4gICAgICB7IGlzbzogJ05DJywgbmFtZTogJ051ZXZhIENhbGVkb25pYScsIHNlYXJjaFRleHQ6ICdOQyAtIE51ZXZhIENhbGVkb25pYScgfSxcbiAgICAgIHsgaXNvOiAnTkUnLCBuYW1lOiAnTsOtZ2VyJywgc2VhcmNoVGV4dDogJ05FIC0gTsOtZ2VyJyB9LFxuICAgICAgeyBpc286ICdORicsIG5hbWU6ICdJc2xhIE5vcmZvbGsnLCBzZWFyY2hUZXh0OiAnTkYgLSBJc2xhIE5vcmZvbGsnIH0sXG4gICAgICB7IGlzbzogJ05HJywgbmFtZTogJ05pZ2VyaWEnLCBzZWFyY2hUZXh0OiAnTkcgLSBOaWdlcmlhJyB9LFxuICAgICAgeyBpc286ICdOSScsIG5hbWU6ICdOaWNhcmFndWEnLCBzZWFyY2hUZXh0OiAnTkkgLSBOaWNhcmFndWEnIH0sXG4gICAgICB7IGlzbzogJ05MJywgbmFtZTogJ1Bhw61zZXMgQmFqb3MnLCBzZWFyY2hUZXh0OiAnTkwgLSBQYcOtc2VzIEJham9zJyB9LFxuICAgICAgeyBpc286ICdOTycsIG5hbWU6ICdOb3J1ZWdhJywgc2VhcmNoVGV4dDogJ05PIC0gTm9ydWVnYScgfSxcbiAgICAgIHsgaXNvOiAnTlAnLCBuYW1lOiAnTmVwYWwnLCBzZWFyY2hUZXh0OiAnTlAgLSBOZXBhbCcgfSxcbiAgICAgIHsgaXNvOiAnTlInLCBuYW1lOiAnTmF1cnUnLCBzZWFyY2hUZXh0OiAnTlIgLSBOYXVydScgfSxcbiAgICAgIHsgaXNvOiAnTlUnLCBuYW1lOiAnTml1ZScsIHNlYXJjaFRleHQ6ICdOVSAtIE5pdWUnIH0sXG4gICAgICB7IGlzbzogJ05aJywgbmFtZTogJ051ZXZhIFplbGFuZGEnLCBzZWFyY2hUZXh0OiAnTlogLSBOdWV2YSBaZWxhbmRhJyB9LFxuICAgICAgeyBpc286ICdPTScsIG5hbWU6ICdPbcOhbicsIHNlYXJjaFRleHQ6ICdPTSAtIE9tw6FuJyB9LFxuICAgICAgeyBpc286ICdQQScsIG5hbWU6ICdQYW5hbcOhJywgc2VhcmNoVGV4dDogJ1BBIC0gUGFuYW3DoScgfSxcbiAgICAgIHsgaXNvOiAnUEUnLCBuYW1lOiAnUGVyw7onLCBzZWFyY2hUZXh0OiAnUEUgLSBQZXLDuicgfSxcbiAgICAgIHsgaXNvOiAnUEYnLCBuYW1lOiAnUG9saW5lc2lhIEZyYW5jZXNhJywgc2VhcmNoVGV4dDogJ1BGIC0gUG9saW5lc2lhIEZyYW5jZXNhJyB9LFxuICAgICAgeyBpc286ICdQRycsIG5hbWU6ICdQYXDDumEgTnVldmEgR3VpbmVhJywgc2VhcmNoVGV4dDogJ1BHIC0gUGFww7phIE51ZXZhIEd1aW5lYScgfSxcbiAgICAgIHsgaXNvOiAnUEgnLCBuYW1lOiAnRmlsaXBpbmFzJywgc2VhcmNoVGV4dDogJ1BIIC0gRmlsaXBpbmFzJyB9LFxuICAgICAgeyBpc286ICdQSycsIG5hbWU6ICdQYWtpc3TDoW4nLCBzZWFyY2hUZXh0OiAnUEsgLSBQYWtpc3TDoW4nIH0sXG4gICAgICB7IGlzbzogJ1BMJywgbmFtZTogJ1BvbG9uaWEnLCBzZWFyY2hUZXh0OiAnUEwgLSBQb2xvbmlhJyB9LFxuICAgICAgeyBpc286ICdQTScsIG5hbWU6ICdTYW4gUGVkcm8geSBNaXF1ZWzDs24nLCBzZWFyY2hUZXh0OiAnUE0gLSBTYW4gUGVkcm8geSBNaXF1ZWzDs24nIH0sXG4gICAgICB7IGlzbzogJ1BOJywgbmFtZTogJ0lzbGFzIFBpdGNhaXJuJywgc2VhcmNoVGV4dDogJ1BOIC0gSXNsYXMgUGl0Y2Fpcm4nIH0sXG4gICAgICB7IGlzbzogJ1BSJywgbmFtZTogJ1B1ZXJ0byBSaWNvJywgc2VhcmNoVGV4dDogJ1BSIC0gUHVlcnRvIFJpY28nIH0sXG4gICAgICB7IGlzbzogJ1BTJywgbmFtZTogJ1BhbGVzdGluYScsIHNlYXJjaFRleHQ6ICdQUyAtIFBhbGVzdGluYScgfSxcbiAgICAgIHsgaXNvOiAnUFQnLCBuYW1lOiAnUG9ydHVnYWwnLCBzZWFyY2hUZXh0OiAnUFQgLSBQb3J0dWdhbCcgfSxcbiAgICAgIHsgaXNvOiAnUFcnLCBuYW1lOiAnUGFsYW9zJywgc2VhcmNoVGV4dDogJ1BXIC0gUGFsYW9zJyB9LFxuICAgICAgeyBpc286ICdQWScsIG5hbWU6ICdQYXJhZ3VheScsIHNlYXJjaFRleHQ6ICdQWSAtIFBhcmFndWF5JyB9LFxuICAgICAgeyBpc286ICdRQScsIG5hbWU6ICdDYXRhcicsIHNlYXJjaFRleHQ6ICdRQSAtIENhdGFyJyB9LFxuICAgICAgeyBpc286ICdSRScsIG5hbWU6ICdSZXVuacOzbicsIHNlYXJjaFRleHQ6ICdSRSAtIFJldW5pw7NuJyB9LFxuICAgICAgeyBpc286ICdSTycsIG5hbWU6ICdSdW1hbmlhJywgc2VhcmNoVGV4dDogJ1JPIC0gUnVtYW5pYScgfSxcbiAgICAgIHsgaXNvOiAnUlMnLCBuYW1lOiAnU2VyYmlhJywgc2VhcmNoVGV4dDogJ1JTIC0gU2VyYmlhJyB9LFxuICAgICAgeyBpc286ICdSVScsIG5hbWU6ICdSdXNpYScsIHNlYXJjaFRleHQ6ICdSVSAtIFJ1c2lhJyB9LFxuICAgICAgeyBpc286ICdSVycsIG5hbWU6ICdSdWFuZGEnLCBzZWFyY2hUZXh0OiAnUlcgLSBSdWFuZGEnIH0sXG4gICAgICB7IGlzbzogJ1NBJywgbmFtZTogJ0FyYWJpYSBTYXVkw60nLCBzZWFyY2hUZXh0OiAnU0EgLSBBcmFiaWEgU2F1ZMOtJyB9LFxuICAgICAgeyBpc286ICdTQicsIG5hbWU6ICdJc2xhcyBTYWxvbcOzbicsIHNlYXJjaFRleHQ6ICdTQiAtIElzbGFzIFNhbG9tw7NuJyB9LFxuICAgICAgeyBpc286ICdTQycsIG5hbWU6ICdTZXljaGVsbGVzJywgc2VhcmNoVGV4dDogJ1NDIC0gU2V5Y2hlbGxlcycgfSxcbiAgICAgIHsgaXNvOiAnU0QnLCBuYW1lOiAnU3Vkw6FuJywgc2VhcmNoVGV4dDogJ1NEIC0gU3Vkw6FuJyB9LFxuICAgICAgeyBpc286ICdTRScsIG5hbWU6ICdTdWVjaWEnLCBzZWFyY2hUZXh0OiAnU0UgLSBTdWVjaWEnIH0sXG4gICAgICB7IGlzbzogJ1NHJywgbmFtZTogJ1NpbmdhcHVyJywgc2VhcmNoVGV4dDogJ1NHIC0gU2luZ2FwdXInIH0sXG4gICAgICB7IGlzbzogJ1NIJywgbmFtZTogJ1NhbnRhIEVsZW5hJywgc2VhcmNoVGV4dDogJ1NIIC0gU2FudGEgRWxlbmEnIH0sXG4gICAgICB7IGlzbzogJ1NJJywgbmFtZTogJ0VzbG92ZW5pYScsIHNlYXJjaFRleHQ6ICdTSSAtIEVzbG92ZW5pYScgfSxcbiAgICAgIHsgaXNvOiAnU0onLCBuYW1lOiAnU3ZhbGJhcmQgeSBKYW4gTWF5ZW4nLCBzZWFyY2hUZXh0OiAnU0ogLSBTdmFsYmFyZCB5IEphbiBNYXllbicgfSxcbiAgICAgIHsgaXNvOiAnU0snLCBuYW1lOiAnRXNsb3ZhcXVpYScsIHNlYXJjaFRleHQ6ICdTSyAtIEVzbG92YXF1aWEnIH0sXG4gICAgICB7IGlzbzogJ1NMJywgbmFtZTogJ1NpZXJyYSBMZW9uYScsIHNlYXJjaFRleHQ6ICdTTCAtIFNpZXJyYSBMZW9uYScgfSxcbiAgICAgIHsgaXNvOiAnU00nLCBuYW1lOiAnU2FuIE1hcmlubycsIHNlYXJjaFRleHQ6ICdTTSAtIFNhbiBNYXJpbm8nIH0sXG4gICAgICB7IGlzbzogJ1NOJywgbmFtZTogJ1NlbmVnYWwnLCBzZWFyY2hUZXh0OiAnU04gLSBTZW5lZ2FsJyB9LFxuICAgICAgeyBpc286ICdTTycsIG5hbWU6ICdTb21hbGlhJywgc2VhcmNoVGV4dDogJ1NPIC0gU29tYWxpYScgfSxcbiAgICAgIHsgaXNvOiAnU1InLCBuYW1lOiAnU3VyaW5hbScsIHNlYXJjaFRleHQ6ICdTUiAtIFN1cmluYW0nIH0sXG4gICAgICB7IGlzbzogJ1NTJywgbmFtZTogJ1N1ZMOhbiBkZWwgU3VyJywgc2VhcmNoVGV4dDogJ1NTIC0gU3Vkw6FuIGRlbCBTdXInIH0sXG4gICAgICB7IGlzbzogJ1NUJywgbmFtZTogJ1NhbnRvIFRvbcOpIHkgUHLDrW5jaXBlJywgc2VhcmNoVGV4dDogJ1NUIC0gU2FudG8gVG9tw6kgeSBQcsOtbmNpcGUnIH0sXG4gICAgICB7IGlzbzogJ1NWJywgbmFtZTogJ0VsIFNhbHZhZG9yJywgc2VhcmNoVGV4dDogJ1NWIC0gRWwgU2FsdmFkb3InIH0sXG4gICAgICB7IGlzbzogJ1NYJywgbmFtZTogJ1NpbnQgTWFhcnRlbicsIHNlYXJjaFRleHQ6ICdTWCAtIFNpbnQgTWFhcnRlbicgfSxcbiAgICAgIHsgaXNvOiAnU1knLCBuYW1lOiAnU2lyaWEnLCBzZWFyY2hUZXh0OiAnU1kgLSBTaXJpYScgfSxcbiAgICAgIHsgaXNvOiAnU1onLCBuYW1lOiAnRXN1YXRpbmknLCBzZWFyY2hUZXh0OiAnU1ogLSBFc3VhdGluaScgfSxcbiAgICAgIHsgaXNvOiAnVEMnLCBuYW1lOiAnSXNsYXMgVHVyY2FzIHkgQ2FpY29zJywgc2VhcmNoVGV4dDogJ1RDIC0gSXNsYXMgVHVyY2FzIHkgQ2FpY29zJyB9LFxuICAgICAgeyBpc286ICdURCcsIG5hbWU6ICdDaGFkJywgc2VhcmNoVGV4dDogJ1REIC0gQ2hhZCcgfSxcbiAgICAgIHsgaXNvOiAnVEYnLCBuYW1lOiAnVGVycml0b3Jpb3MgQXVzdHJhbGVzIEZyYW5jZXNlcycsIHNlYXJjaFRleHQ6ICdURiAtIFRlcnJpdG9yaW9zIEF1c3RyYWxlcyBGcmFuY2VzZXMnIH0sXG4gICAgICB7IGlzbzogJ1RHJywgbmFtZTogJ1RvZ28nLCBzZWFyY2hUZXh0OiAnVEcgLSBUb2dvJyB9LFxuICAgICAgeyBpc286ICdUSCcsIG5hbWU6ICdUYWlsYW5kaWEnLCBzZWFyY2hUZXh0OiAnVEggLSBUYWlsYW5kaWEnIH0sXG4gICAgICB7IGlzbzogJ1RKJywgbmFtZTogJ1RheWlraXN0w6FuJywgc2VhcmNoVGV4dDogJ1RKIC0gVGF5aWtpc3TDoW4nIH0sXG4gICAgICB7IGlzbzogJ1RLJywgbmFtZTogJ1Rva2VsYXUnLCBzZWFyY2hUZXh0OiAnVEsgLSBUb2tlbGF1JyB9LFxuICAgICAgeyBpc286ICdUTCcsIG5hbWU6ICdUaW1vciBPcmllbnRhbCcsIHNlYXJjaFRleHQ6ICdUTCAtIFRpbW9yIE9yaWVudGFsJyB9LFxuICAgICAgeyBpc286ICdUTScsIG5hbWU6ICdUdXJrbWVuaXN0w6FuJywgc2VhcmNoVGV4dDogJ1RNIC0gVHVya21lbmlzdMOhbicgfSxcbiAgICAgIHsgaXNvOiAnVE4nLCBuYW1lOiAnVMO6bmV6Jywgc2VhcmNoVGV4dDogJ1ROIC0gVMO6bmV6JyB9LFxuICAgICAgeyBpc286ICdUTycsIG5hbWU6ICdUb25nYScsIHNlYXJjaFRleHQ6ICdUTyAtIFRvbmdhJyB9LFxuICAgICAgeyBpc286ICdUUicsIG5hbWU6ICdUdXJxdcOtYScsIHNlYXJjaFRleHQ6ICdUUiAtIFR1cnF1w61hJyB9LFxuICAgICAgeyBpc286ICdUVCcsIG5hbWU6ICdUcmluaWRhZCB5IFRvYmFnbycsIHNlYXJjaFRleHQ6ICdUVCAtIFRyaW5pZGFkIHkgVG9iYWdvJyB9LFxuICAgICAgeyBpc286ICdUVicsIG5hbWU6ICdUdXZhbHUnLCBzZWFyY2hUZXh0OiAnVFYgLSBUdXZhbHUnIH0sXG4gICAgICB7IGlzbzogJ1RXJywgbmFtZTogJ1RhaXfDoW4nLCBzZWFyY2hUZXh0OiAnVFcgLSBUYWl3w6FuJyB9LFxuICAgICAgeyBpc286ICdUWicsIG5hbWU6ICdUYW56YW5pYScsIHNlYXJjaFRleHQ6ICdUWiAtIFRhbnphbmlhJyB9LFxuICAgICAgeyBpc286ICdVQScsIG5hbWU6ICdVY3JhbmlhJywgc2VhcmNoVGV4dDogJ1VBIC0gVWNyYW5pYScgfSxcbiAgICAgIHsgaXNvOiAnVUcnLCBuYW1lOiAnVWdhbmRhJywgc2VhcmNoVGV4dDogJ1VHIC0gVWdhbmRhJyB9LFxuICAgICAgeyBpc286ICdVTScsIG5hbWU6ICdJc2xhcyBVbHRyYW1hcmluYXMgZGUgRXN0YWRvcyBVbmlkb3MnLCBzZWFyY2hUZXh0OiAnVU0gLSBJc2xhcyBVbHRyYW1hcmluYXMgZGUgRXN0YWRvcyBVbmlkb3MnIH0sXG4gICAgICB7IGlzbzogJ1VTJywgbmFtZTogJ0VzdGFkb3MgVW5pZG9zJywgc2VhcmNoVGV4dDogJ1VTIC0gRXN0YWRvcyBVbmlkb3MnIH0sXG4gICAgICB7IGlzbzogJ1VZJywgbmFtZTogJ1VydWd1YXknLCBzZWFyY2hUZXh0OiAnVVkgLSBVcnVndWF5JyB9LFxuICAgICAgeyBpc286ICdVWicsIG5hbWU6ICdVemJla2lzdMOhbicsIHNlYXJjaFRleHQ6ICdVWiAtIFV6YmVraXN0w6FuJyB9LFxuICAgICAgeyBpc286ICdWQScsIG5hbWU6ICdDaXVkYWQgZGVsIFZhdGljYW5vJywgc2VhcmNoVGV4dDogJ1ZBIC0gQ2l1ZGFkIGRlbCBWYXRpY2FubycgfSxcbiAgICAgIHsgaXNvOiAnVkMnLCBuYW1lOiAnU2FuIFZpY2VudGUgeSBsYXMgR3JhbmFkaW5hcycsIHNlYXJjaFRleHQ6ICdWQyAtIFNhbiBWaWNlbnRlIHkgbGFzIEdyYW5hZGluYXMnIH0sXG4gICAgICB7IGlzbzogJ1ZFJywgbmFtZTogJ1ZlbmV6dWVsYScsIHNlYXJjaFRleHQ6ICdWRSAtIFZlbmV6dWVsYScgfSxcbiAgICAgIHsgaXNvOiAnVkcnLCBuYW1lOiAnSXNsYXMgVsOtcmdlbmVzIEJyaXTDoW5pY2FzJywgc2VhcmNoVGV4dDogJ1ZHIC0gSXNsYXMgVsOtcmdlbmVzIEJyaXTDoW5pY2FzJyB9LFxuICAgICAgeyBpc286ICdWSScsIG5hbWU6ICdJc2xhcyBWw61yZ2VuZXMgZGUgbG9zIEVzdGFkb3MgVW5pZG9zJywgc2VhcmNoVGV4dDogJ1ZJIC0gSXNsYXMgVsOtcmdlbmVzIGRlIGxvcyBFc3RhZG9zIFVuaWRvcycgfSxcbiAgICAgIHsgaXNvOiAnVk4nLCBuYW1lOiAnVmlldG5hbScsIHNlYXJjaFRleHQ6ICdWTiAtIFZpZXRuYW0nIH0sXG4gICAgICB7IGlzbzogJ1ZVJywgbmFtZTogJ1ZhbnVhdHUnLCBzZWFyY2hUZXh0OiAnVlUgLSBWYW51YXR1JyB9LFxuICAgICAgeyBpc286ICdXRicsIG5hbWU6ICdXYWxsaXMgeSBGdXR1bmEnLCBzZWFyY2hUZXh0OiAnV0YgLSBXYWxsaXMgeSBGdXR1bmEnIH0sXG4gICAgICB7IGlzbzogJ1dTJywgbmFtZTogJ1NhbW9hJywgc2VhcmNoVGV4dDogJ1dTIC0gU2Ftb2EnIH0sXG4gICAgICB7IGlzbzogJ1lFJywgbmFtZTogJ1llbWVuJywgc2VhcmNoVGV4dDogJ1lFIC0gWWVtZW4nIH0sXG4gICAgICB7IGlzbzogJ1lUJywgbmFtZTogJ01heW90dGUnLCBzZWFyY2hUZXh0OiAnWVQgLSBNYXlvdHRlJyB9LFxuICAgICAgeyBpc286ICdaQScsIG5hbWU6ICdTdWTDoWZyaWNhJywgc2VhcmNoVGV4dDogJ1pBIC0gU3Vkw6FmcmljYScgfSxcbiAgICAgIHsgaXNvOiAnWk0nLCBuYW1lOiAnWmFtYmlhJywgc2VhcmNoVGV4dDogJ1pNIC0gWmFtYmlhJyB9LFxuICAgICAgeyBpc286ICdaVycsIG5hbWU6ICdaaW1iYWJ1ZScsIHNlYXJjaFRleHQ6ICdaVyAtIFppbWJhYnVlJyB9XG4gICAgXTtcblxuICAgIGNvbnN0IGNvdW50cnlGaWx0ZXIgPSAodmFsdWUsIHF1ZXJ5LCBpdGVtKSA9PiB7XG4gICAgICBpZiAoIXF1ZXJ5KSByZXR1cm4gdHJ1ZTtcbiAgICAgIFxuICAgICAgY29uc3Qgc2VhcmNoUXVlcnkgPSBxdWVyeS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgY291bnRyeSA9IGl0ZW0ucmF3O1xuICAgICAgXG4gICAgICByZXR1cm4gKFxuICAgICAgICBjb3VudHJ5Lmlzby50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFF1ZXJ5KSB8fFxuICAgICAgICBjb3VudHJ5Lm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hRdWVyeSkgfHxcbiAgICAgICAgY291bnRyeS5zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoUXVlcnkpXG4gICAgICApO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgY291bnRyaWVzLFxuICAgICAgY291bnRyeUZpbHRlclxuICAgIH07XG4gIH1cbn07XG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cbi5jb3VudHJ5LWlzbyB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgY29sb3I6ICM2NjY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG4gIHBhZGRpbmc6IDJweCA2cHg7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgZm9udC1zaXplOiAxMnB4O1xufVxuXG4uY291bnRyeS1uYW1lIHtcbiAgY29sb3I6ICMzMzM7XG59XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgICA8di1mb3JtIHJlZj1cImZvcm1SZWZcIiBAc3VibWl0LnByZXZlbnQ9XCJoYW5kbGVTdWJtaXRcIiB2YWxpZGF0ZS1vbj1cImJsdXIgbGF6eVwiIDpkaXNhYmxlZD1cImxvYWRpbmdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVhYmxlXCI+XG5cbiAgICAgICAgICAgIDwhLS0gQWxlcnQgcGFyYSBtb3N0cmFyIGVycm9yZXMgLS0+XG4gICAgICAgICAgICA8di1hbGVydFxuICAgICAgICAgICAgICAgIHYtaWY9XCJlcnJvck1lc3NhZ2VzLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJlcnJvclwiXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cInRvbmFsXCJcbiAgICAgICAgICAgICAgICBjbG9zYWJsZVxuICAgICAgICAgICAgICAgIEBjbGljazpjbG9zZT1cImNsZWFyRXJyb3JzXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlLTIgbWItMlwiPlBvciBmYXZvciwgY29ycmlqYSBsb3Mgc2lndWllbnRlcyBlcnJvcmVzOjwvZGl2PlxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImVycm9yLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxpIHYtZm9yPVwiKGVycm9yLCBpbmRleCkgaW4gZXJyb3JNZXNzYWdlc1wiIDprZXk9XCJpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZXJyb3IgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC92LWFsZXJ0PlxuXG4gICAgICAgICAgICA8IS0tIEFsZXJ0IHBhcmEgw6l4aXRvIC0tPlxuICAgICAgICAgICAgPHYtYWxlcnRcbiAgICAgICAgICAgICAgICB2LWlmPVwic3VjY2Vzc01lc3NhZ2VcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJzdWNjZXNzXCJcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwidG9uYWxcIlxuICAgICAgICAgICAgICAgIGNsb3NhYmxlXG4gICAgICAgICAgICAgICAgQGNsaWNrOmNsb3NlPVwic3VjY2Vzc01lc3NhZ2UgPSAnJ1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYi00XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBzdWNjZXNzTWVzc2FnZSB9fVxuICAgICAgICAgICAgPC92LWFsZXJ0PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VudGVyIG10LTJcIj5cbiAgICAgICAgICAgICAgICA8aDQ+PGI+TWlzIERhdG9zPC9iPjwvaDQ+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPHYtYWxlcnRcbiAgICAgICAgICAgICAgICB2LWlmPVwiIWlzUHJvZmlsZUVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwid2FybmluZ1wiXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cInRvbmFsXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlLTJcIj5FZGljacOzbiByZXN0cmluZ2lkYTwvZGl2PlxuICAgICAgICAgICAgICAgIDxwPlN1IGNsaWVudGUgaGEgcmVzdHJpbmdpZG8gbGEgbW9kaWZpY2FjacOzbiBkZSBzdXMgZGF0b3MgZGUgcGVyZmlsLiBDb250YWN0ZSBjb24gc3UgY2xpZW50ZSBwYXJhIHJlYWxpemFyIGNhbWJpb3MuPC9wPlxuICAgICAgICAgICAgPC92LWFsZXJ0PlxuXG4gICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxiPkRhdG9zIGRlIEFjY2VzbzwvYj5cbiAgICAgICAgICAgIDx2LXRleHQtZmllbGQgXG4gICAgICAgICAgICAgICAgdi1tb2RlbD1cInVzZXJBY2NvdW50LnNvY2lhbERlbm9taW5hdGlvblwiIFxuICAgICAgICAgICAgICAgIGxhYmVsPVwiKiBEZW5vbWluYWNpw7NuIFNvY2lhbFwiIFxuICAgICAgICAgICAgICAgIGNsZWFyYWJsZSBcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwic29sby1maWxsZWRcIlxuICAgICAgICAgICAgICAgIDpydWxlcz1cInNvY2lhbERlbm9taW5hdGlvblJ1bGVzXCJcbiAgICAgICAgICAgICAgICA6ZXJyb3ItbWVzc2FnZXM9XCJmaWVsZEVycm9ycy5zb2NpYWxEZW5vbWluYXRpb25cIlxuICAgICAgICAgICAgICAgIEBpbnB1dD1cImNsZWFyRmllbGRFcnJvcignc29jaWFsRGVub21pbmF0aW9uJylcIlxuICAgICAgICAgICAgICAgIGNvdW50ZXI9XCIxMjBcIlxuICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjEyMFwiXG4gICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCIhaXNQcm9maWxlRWRpdGFibGVcIlxuICAgICAgICAgICAgPjwvdi10ZXh0LWZpZWxkPlxuXG4gICAgICAgICAgICA8di10ZXh0LWZpZWxkIFxuICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1c2VyQWNjb3VudC5lbWFpbFwiIFxuICAgICAgICAgICAgICAgIGxhYmVsPVwiKiBFbWFpbFwiIFxuICAgICAgICAgICAgICAgIGNsZWFyYWJsZSBcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwic29sby1maWxsZWRcIiBcbiAgICAgICAgICAgICAgICA6cnVsZXM9XCJlbWFpbFJ1bGVzXCIgXG4gICAgICAgICAgICAgICAgOmVycm9yLW1lc3NhZ2VzPVwiZmllbGRFcnJvcnMuZW1haWxcIlxuICAgICAgICAgICAgICAgIEBpbnB1dD1cImNsZWFyRmllbGRFcnJvcignZW1haWwnKVwiXG4gICAgICAgICAgICAgICAgY291bnRlcj1cIjYwXCJcbiAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCI2MFwiXG4gICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCIhaXNQcm9maWxlRWRpdGFibGVcIlxuICAgICAgICAgICAgPjwvdi10ZXh0LWZpZWxkPlxuXG4gICAgICAgICAgICA8di10ZXh0LWZpZWxkIFxuICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1c2VyQWNjb3VudC5wYXNzd29yZFwiIFxuICAgICAgICAgICAgICAgIGxhYmVsPVwiQ29udHJhc2XDsWFcIiBcbiAgICAgICAgICAgICAgICBjbGVhcmFibGUgXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cInNvbG8tZmlsbGVkXCJcbiAgICAgICAgICAgICAgICA6ZXJyb3ItbWVzc2FnZXM9XCJmaWVsZEVycm9ycy5wYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgQGlucHV0PVwiY2xlYXJGaWVsZEVycm9yKCdwYXNzd29yZCcpXCJcbiAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCIhaXNQcm9maWxlRWRpdGFibGVcIlxuICAgICAgICAgICAgPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgPGJyPlxuXG4gICAgICAgICAgICA8ZGl2IHYtaWY9XCJ1c2VyQWNjb3VudC5jb21wYW55VHlwZSAhPSBudWxsXCI+XG4gICAgICAgICAgICAgICAgPHYtc2VsZWN0IFxuICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwidXNlckFjY291bnQuY29tcGFueVR5cGVcIiBcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJUaXBvIGRlIFBlcnNvbmEuLi5cIiBcbiAgICAgICAgICAgICAgICAgICAgOml0ZW1zPVwicGVyc29uVHlwZVwiIFxuICAgICAgICAgICAgICAgICAgICBjbGVhcmFibGUgXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzb2xvLWZpbGxlZFwiIFxuICAgICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJpc0Rpc2FibGVkIHx8ICFpc1Byb2ZpbGVFZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIDplcnJvci1tZXNzYWdlcz1cImZpZWxkRXJyb3JzLmNvbXBhbnlUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgQHVwZGF0ZTptb2RlbFZhbHVlPVwiY2xlYXJGaWVsZEVycm9yKCdjb21wYW55VHlwZScpXCJcbiAgICAgICAgICAgICAgICA+PC92LXNlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiB2LWlmPVwidXNlckFjY291bnQuY29tcGFueVR5cGUgPT0gbnVsbFwiPlxuICAgICAgICAgICAgICAgIDx2LXNlbGVjdCBcbiAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cInVzZXJBY2NvdW50LmNvbXBhbnlUeXBlXCIgXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiVGlwbyBkZSBQZXJzb25hLi4uXCIgXG4gICAgICAgICAgICAgICAgICAgIDppdGVtcz1cInBlcnNvblR5cGVcIiBcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJhYmxlIFxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwic29sby1maWxsZWRcIiBcbiAgICAgICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiaXNEaXNhYmxlZCB8fCAhaXNQcm9maWxlRWRpdGFibGVcIlxuICAgICAgICAgICAgICAgICAgICA6ZXJyb3ItbWVzc2FnZXM9XCJmaWVsZEVycm9ycy5jb21wYW55VHlwZVwiXG4gICAgICAgICAgICAgICAgICAgIEB1cGRhdGU6bW9kZWxWYWx1ZT1cImNsZWFyRmllbGRFcnJvcignY29tcGFueVR5cGUnKVwiXG4gICAgICAgICAgICAgICAgPjwvdi1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiB2LWlmPVwidXNlckFjY291bnQuY29tcGFueVR5cGUgPT09ICdQZXJzb25hIEbDrXNpY2EnXCI+XG4gICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZCBcbiAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cInVzZXJBY2NvdW50LmNvbnRhY3RQZXJzb25OYW1lXCIgXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiTm9tYnJlXCIgXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyYWJsZSBcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInNvbG8tZmlsbGVkXCJcbiAgICAgICAgICAgICAgICAgICAgOnJ1bGVzPVwibmFtZVJ1bGVzXCJcbiAgICAgICAgICAgICAgICAgICAgOmVycm9yLW1lc3NhZ2VzPVwiZmllbGRFcnJvcnMuY29udGFjdFBlcnNvbk5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBAaW5wdXQ9XCJjbGVhckZpZWxkRXJyb3IoJ2NvbnRhY3RQZXJzb25OYW1lJylcIlxuICAgICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCIhaXNQcm9maWxlRWRpdGFibGVcIlxuICAgICAgICAgICAgICAgID48L3YtdGV4dC1maWVsZD5cblxuICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgXG4gICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1c2VyQWNjb3VudC5jb250YWN0UGVyc29uU3VyTmFtZVwiIFxuICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkFwZWxsaWRvKHMpXCIgXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyYWJsZSBcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInNvbG8tZmlsbGVkXCJcbiAgICAgICAgICAgICAgICAgICAgOnJ1bGVzPVwibmFtZVJ1bGVzXCJcbiAgICAgICAgICAgICAgICAgICAgOmVycm9yLW1lc3NhZ2VzPVwiZmllbGRFcnJvcnMuY29udGFjdFBlcnNvblN1ck5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBAaW5wdXQ9XCJjbGVhckZpZWxkRXJyb3IoJ2NvbnRhY3RQZXJzb25TdXJOYW1lJylcIlxuICAgICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCIhaXNQcm9maWxlRWRpdGFibGVcIlxuICAgICAgICAgICAgICAgID48L3YtdGV4dC1maWVsZD5cblxuICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgXG4gICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1c2VyQWNjb3VudC5jb250YWN0UGVyc29uTmlmXCIgXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiTklGXCIgXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyYWJsZSBcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInNvbG8tZmlsbGVkXCJcbiAgICAgICAgICAgICAgICAgICAgOnJ1bGVzPVwibmlmUnVsZXNcIlxuICAgICAgICAgICAgICAgICAgICA6ZXJyb3ItbWVzc2FnZXM9XCJmaWVsZEVycm9ycy5jb250YWN0UGVyc29uTmlmXCJcbiAgICAgICAgICAgICAgICAgICAgQGlucHV0PVwiY2xlYXJGaWVsZEVycm9yKCdjb250YWN0UGVyc29uTmlmJylcIlxuICAgICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCIhaXNQcm9maWxlRWRpdGFibGVcIlxuICAgICAgICAgICAgICAgID48L3YtdGV4dC1maWVsZD5cblxuICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgXG4gICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1c2VyQWNjb3VudC5hZGRyZXNzXCIgXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiRGlyZWNjacOzblwiIFxuICAgICAgICAgICAgICAgICAgICBjbGVhcmFibGUgXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzb2xvLWZpbGxlZFwiXG4gICAgICAgICAgICAgICAgICAgIDpydWxlcz1cImFkZHJlc3NSdWxlc1wiXG4gICAgICAgICAgICAgICAgICAgIDplcnJvci1tZXNzYWdlcz1cImZpZWxkRXJyb3JzLmFkZHJlc3NcIlxuICAgICAgICAgICAgICAgICAgICBAaW5wdXQ9XCJjbGVhckZpZWxkRXJyb3IoJ2FkZHJlc3MnKVwiXG4gICAgICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cIiFpc1Byb2ZpbGVFZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgPjwvdi10ZXh0LWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZCBcbiAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cInVzZXJBY2NvdW50LnBvc3RhbENvZGVcIiBcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJDUFwiIFxuICAgICAgICAgICAgICAgICAgICBjbGVhcmFibGUgXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzb2xvLWZpbGxlZFwiXG4gICAgICAgICAgICAgICAgICAgIDpydWxlcz1cInBvc3RhbENvZGVSdWxlc1wiXG4gICAgICAgICAgICAgICAgICAgIDplcnJvci1tZXNzYWdlcz1cImZpZWxkRXJyb3JzLnBvc3RhbENvZGVcIlxuICAgICAgICAgICAgICAgICAgICBAaW5wdXQ9XCJjbGVhckZpZWxkRXJyb3IoJ3Bvc3RhbENvZGUnKVwiXG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXI9XCI3XCJcbiAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiN1wiXG4gICAgICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cIiFpc1Byb2ZpbGVFZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgPjwvdi10ZXh0LWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZCBcbiAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cInVzZXJBY2NvdW50LmNpdHlcIiBcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJDaXVkYWRcIiBcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJhYmxlIFxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwic29sby1maWxsZWRcIlxuICAgICAgICAgICAgICAgICAgICA6cnVsZXM9XCJjaXR5UnVsZXNcIlxuICAgICAgICAgICAgICAgICAgICA6ZXJyb3ItbWVzc2FnZXM9XCJmaWVsZEVycm9ycy5jaXR5XCJcbiAgICAgICAgICAgICAgICAgICAgQGlucHV0PVwiY2xlYXJGaWVsZEVycm9yKCdjaXR5JylcIlxuICAgICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCIhaXNQcm9maWxlRWRpdGFibGVcIlxuICAgICAgICAgICAgICAgID48L3YtdGV4dC1maWVsZD5cblxuICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgXG4gICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1c2VyQWNjb3VudC5wcm92aW5jZVwiIFxuICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIlByb3ZpbmNpYVwiIFxuICAgICAgICAgICAgICAgICAgICBjbGVhcmFibGUgXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzb2xvLWZpbGxlZFwiXG4gICAgICAgICAgICAgICAgICAgIDpydWxlcz1cInByb3ZpbmNlUnVsZXNcIlxuICAgICAgICAgICAgICAgICAgICA6ZXJyb3ItbWVzc2FnZXM9XCJmaWVsZEVycm9ycy5wcm92aW5jZVwiXG4gICAgICAgICAgICAgICAgICAgIEBpbnB1dD1cImNsZWFyRmllbGRFcnJvcigncHJvdmluY2UnKVwiXG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXI9XCIzMFwiXG4gICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjMwXCJcbiAgICAgICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiIWlzUHJvZmlsZUVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgICA+PC92LXRleHQtZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8Q291bnRyeVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1c2VyQWNjb3VudC5jb3VudHJ5XCIgXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiUGHDrXNcIlxuICAgICAgICAgICAgICAgICAgICA6cnVsZXM9XCJjb3VudHJ5UnVsZXNcIlxuICAgICAgICAgICAgICAgICAgICA6ZXJyb3ItbWVzc2FnZXM9XCJmaWVsZEVycm9ycy5jb3VudHJ5XCJcbiAgICAgICAgICAgICAgICAgICAgQHVwZGF0ZTptb2RlbFZhbHVlPVwiY2xlYXJGaWVsZEVycm9yKCdjb3VudHJ5JylcIlxuICAgICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCIhaXNQcm9maWxlRWRpdGFibGVcIlxuICAgICAgICAgICAgICAgID48L0NvdW50cnlTZWxlY3Rvcj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IHYtaWY9XCJ1c2VyQWNjb3VudC5jb21wYW55VHlwZSA9PT0gJ1BlcnNvbmEgSnVyw61kaWNhJ1wiPlxuICAgICAgICAgICAgICAgIDxTZWxlY3RvciBcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3ItdHlwZT1cIlNvY2lhbFJlYXNvblwiIFxuICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIlJhesOzbiBTb2NpYWxcIiBcbiAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cInVzZXJBY2NvdW50LmNvbnRhY3RQZXJzb25TdXJOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgOmVycm9yLW1lc3NhZ2VzPVwiZmllbGRFcnJvcnMuY29udGFjdFBlcnNvblN1ck5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBAdXBkYXRlOm1vZGVsVmFsdWU9XCJjbGVhckZpZWxkRXJyb3IoJ2NvbnRhY3RQZXJzb25TdXJOYW1lJylcIlxuICAgICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCIhaXNQcm9maWxlRWRpdGFibGVcIlxuICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkIFxuICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwidXNlckFjY291bnQuY29udGFjdFBlcnNvbk5hbWVcIiBcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJEZW5vbWluYWNpw7NuIFNvY2lhbFwiIFxuICAgICAgICAgICAgICAgICAgICBjbGVhcmFibGUgXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzb2xvLWZpbGxlZFwiXG4gICAgICAgICAgICAgICAgICAgIDpydWxlcz1cIm5hbWVSdWxlc1wiXG4gICAgICAgICAgICAgICAgICAgIDplcnJvci1tZXNzYWdlcz1cImZpZWxkRXJyb3JzLmNvbnRhY3RQZXJzb25OYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgQGlucHV0PVwiY2xlYXJGaWVsZEVycm9yKCdjb250YWN0UGVyc29uTmFtZScpXCJcbiAgICAgICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiIWlzUHJvZmlsZUVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgICA+PC92LXRleHQtZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkIFxuICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwidXNlckFjY291bnQuY29tcGFueU5pZlwiIFxuICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkNJRlwiIFxuICAgICAgICAgICAgICAgICAgICBjbGVhcmFibGUgXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzb2xvLWZpbGxlZFwiXG4gICAgICAgICAgICAgICAgICAgIDpydWxlcz1cIm5pZlJ1bGVzXCJcbiAgICAgICAgICAgICAgICAgICAgOmVycm9yLW1lc3NhZ2VzPVwiZmllbGRFcnJvcnMuY29tcGFueU5pZlwiXG4gICAgICAgICAgICAgICAgICAgIEBpbnB1dD1cImNsZWFyRmllbGRFcnJvcignY29tcGFueU5pZicpXCJcbiAgICAgICAgICAgICAgICAgICAgY291bnRlcj1cIjIwXCJcbiAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMjBcIlxuICAgICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCIhaXNQcm9maWxlRWRpdGFibGVcIlxuICAgICAgICAgICAgICAgID48L3YtdGV4dC1maWVsZD5cblxuICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgXG4gICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1c2VyQWNjb3VudC5hZGRyZXNzXCIgXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiRGlyZWNjacOzblwiIFxuICAgICAgICAgICAgICAgICAgICBjbGVhcmFibGUgXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzb2xvLWZpbGxlZFwiXG4gICAgICAgICAgICAgICAgICAgIDpydWxlcz1cImFkZHJlc3NSdWxlc1wiXG4gICAgICAgICAgICAgICAgICAgIDplcnJvci1tZXNzYWdlcz1cImZpZWxkRXJyb3JzLmFkZHJlc3NcIlxuICAgICAgICAgICAgICAgICAgICBAaW5wdXQ9XCJjbGVhckZpZWxkRXJyb3IoJ2FkZHJlc3MnKVwiXG4gICAgICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cIiFpc1Byb2ZpbGVFZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgPjwvdi10ZXh0LWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZCBcbiAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cInVzZXJBY2NvdW50LnBvc3RhbENvZGVcIiBcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJDUFwiIFxuICAgICAgICAgICAgICAgICAgICBjbGVhcmFibGUgXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzb2xvLWZpbGxlZFwiXG4gICAgICAgICAgICAgICAgICAgIDpydWxlcz1cInBvc3RhbENvZGVSdWxlc1wiXG4gICAgICAgICAgICAgICAgICAgIDplcnJvci1tZXNzYWdlcz1cImZpZWxkRXJyb3JzLnBvc3RhbENvZGVcIlxuICAgICAgICAgICAgICAgICAgICBAaW5wdXQ9XCJjbGVhckZpZWxkRXJyb3IoJ3Bvc3RhbENvZGUnKVwiXG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXI9XCI3XCJcbiAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiN1wiXG4gICAgICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cIiFpc1Byb2ZpbGVFZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgPjwvdi10ZXh0LWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZCBcbiAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cInVzZXJBY2NvdW50LmNpdHlcIiBcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJDaXVkYWRcIiBcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJhYmxlIFxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwic29sby1maWxsZWRcIlxuICAgICAgICAgICAgICAgICAgICA6cnVsZXM9XCJjaXR5UnVsZXNcIlxuICAgICAgICAgICAgICAgICAgICA6ZXJyb3ItbWVzc2FnZXM9XCJmaWVsZEVycm9ycy5jaXR5XCJcbiAgICAgICAgICAgICAgICAgICAgQGlucHV0PVwiY2xlYXJGaWVsZEVycm9yKCdjaXR5JylcIlxuICAgICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCIhaXNQcm9maWxlRWRpdGFibGVcIlxuICAgICAgICAgICAgICAgID48L3YtdGV4dC1maWVsZD5cblxuICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgXG4gICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1c2VyQWNjb3VudC5wcm92aW5jZVwiIFxuICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIlByb3ZpbmNpYVwiIFxuICAgICAgICAgICAgICAgICAgICBjbGVhcmFibGUgXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzb2xvLWZpbGxlZFwiXG4gICAgICAgICAgICAgICAgICAgIDpydWxlcz1cInByb3ZpbmNlUnVsZXNcIlxuICAgICAgICAgICAgICAgICAgICA6ZXJyb3ItbWVzc2FnZXM9XCJmaWVsZEVycm9ycy5wcm92aW5jZVwiXG4gICAgICAgICAgICAgICAgICAgIEBpbnB1dD1cImNsZWFyRmllbGRFcnJvcigncHJvdmluY2UnKVwiXG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXI9XCIzMFwiXG4gICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjMwXCJcbiAgICAgICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiIWlzUHJvZmlsZUVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgICA+PC92LXRleHQtZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8Q291bnRyeVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1c2VyQWNjb3VudC5jb3VudHJ5XCIgXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiUGHDrXNcIlxuICAgICAgICAgICAgICAgICAgICA6cnVsZXM9XCJjb3VudHJ5UnVsZXNcIlxuICAgICAgICAgICAgICAgICAgICA6ZXJyb3ItbWVzc2FnZXM9XCJmaWVsZEVycm9ycy5jb3VudHJ5XCJcbiAgICAgICAgICAgICAgICAgICAgQHVwZGF0ZTptb2RlbFZhbHVlPVwiY2xlYXJGaWVsZEVycm9yKCdjb3VudHJ5JylcIlxuICAgICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCIhaXNQcm9maWxlRWRpdGFibGVcIlxuICAgICAgICAgICAgICAgID48L0NvdW50cnlTZWxlY3Rvcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGhyPlxuICAgICAgICAgICAgPHYtZXhwYW5zaW9uLXBhbmVscz5cblxuICAgICAgICAgICAgICAgIDx2LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgICAgICAgICAgICAgPHYtZXhwYW5zaW9uLXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+RGF0b3MgZGUgQ29udGFjdG8gQ29udGFibGU8L2I+XG4gICAgICAgICAgICAgICAgICAgIDwvdi1leHBhbnNpb24tcGFuZWwtdGl0bGU+XG5cbiAgICAgICAgICAgICAgICAgICAgPHYtZXhwYW5zaW9uLXBhbmVsLXRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1c2VyQWNjb3VudC5jb250YWN0Q29udGFibGVOYW1lXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJOb21icmVcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcmFibGUgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInNvbG8tZmlsbGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6cnVsZXM9XCJjb250YWN0TmFtZVJ1bGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZXJyb3ItbWVzc2FnZXM9XCJmaWVsZEVycm9ycy5jb250YWN0Q29udGFibGVOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaW5wdXQ9XCJjbGVhckZpZWxkRXJyb3IoJ2NvbnRhY3RDb250YWJsZU5hbWUnKVwiXG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXI9XCI1MFwiXG4gICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjUwXCJcbiAgICAgICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiIWlzUHJvZmlsZUVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3YtdGV4dC1maWVsZD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwidXNlckFjY291bnQuY29udGFjdENvbnRhYmxlU3VybmFtZVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiQXBlbGxpZG8ocylcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcmFibGUgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInNvbG8tZmlsbGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6cnVsZXM9XCJjb250YWN0TmFtZVJ1bGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZXJyb3ItbWVzc2FnZXM9XCJmaWVsZEVycm9ycy5jb250YWN0Q29udGFibGVTdXJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaW5wdXQ9XCJjbGVhckZpZWxkRXJyb3IoJ2NvbnRhY3RDb250YWJsZVN1cm5hbWUnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiIWlzUHJvZmlsZUVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3YtdGV4dC1maWVsZD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwidXNlckFjY291bnQuY29udGFjdENvbnRhYmxlRW1haWxcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkVtYWlsIGRlIENvbnRhY3RvXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJhYmxlIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzb2xvLWZpbGxlZFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpydWxlcz1cImNvbnRhY3RFbWFpbFJ1bGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZXJyb3ItbWVzc2FnZXM9XCJmaWVsZEVycm9ycy5jb250YWN0Q29udGFibGVFbWFpbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlucHV0PVwiY2xlYXJGaWVsZEVycm9yKCdjb250YWN0Q29udGFibGVFbWFpbCcpXCJcbiAgICAgICAgICAgICAgICAgICAgY291bnRlcj1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cIiFpc1Byb2ZpbGVFZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC92LXRleHQtZmllbGQ+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cInVzZXJBY2NvdW50LmNvbnRhY3RDb250YWJsZVRlbFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiVGVsw6lmb25vXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJhYmxlIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzb2xvLWZpbGxlZFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpydWxlcz1cImNvbnRhY3RUZWxSdWxlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmVycm9yLW1lc3NhZ2VzPVwiZmllbGRFcnJvcnMuY29udGFjdENvbnRhYmxlVGVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaW5wdXQ9XCJjbGVhckZpZWxkRXJyb3IoJ2NvbnRhY3RDb250YWJsZVRlbCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCIhaXNQcm9maWxlRWRpdGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICAgICAgICA8L3YtZXhwYW5zaW9uLXBhbmVsLXRleHQ+XG4gICAgICAgICAgICAgICAgPC92LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgICAgICAgICA8YnI+XG5cbiAgICAgICAgICAgICAgICA8di1leHBhbnNpb24tcGFuZWw+XG5cbiAgICAgICAgICAgICAgICAgICAgPHYtZXhwYW5zaW9uLXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+RGF0b3MgZGUgQ29udGFjdG8gQWRtaW5pc3RyYWRvcjwvYj5cbiAgICAgICAgICAgICAgICAgICAgPC92LWV4cGFuc2lvbi1wYW5lbC10aXRsZT5cblxuICAgICAgICAgICAgICAgICAgICA8di1leHBhbnNpb24tcGFuZWwtdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cInVzZXJBY2NvdW50LmNvbnRhY3RBZG1pbk5hbWVcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIk5vbWJyZVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyYWJsZSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwic29sby1maWxsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpydWxlcz1cImNvbnRhY3ROYW1lUnVsZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDplcnJvci1tZXNzYWdlcz1cImZpZWxkRXJyb3JzLmNvbnRhY3RBZG1pbk5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpbnB1dD1cImNsZWFyRmllbGRFcnJvcignY29udGFjdEFkbWluTmFtZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCIhaXNQcm9maWxlRWRpdGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdi10ZXh0LWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1c2VyQWNjb3VudC5jb250YWN0QWRtaW5TdXJuYW1lXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJBcGVsbGlkbyhzKVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyYWJsZSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwic29sby1maWxsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpydWxlcz1cImNvbnRhY3ROYW1lUnVsZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDplcnJvci1tZXNzYWdlcz1cImZpZWxkRXJyb3JzLmNvbnRhY3RBZG1pblN1cm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpbnB1dD1cImNsZWFyRmllbGRFcnJvcignY29udGFjdEFkbWluU3VybmFtZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCIhaXNQcm9maWxlRWRpdGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdi10ZXh0LWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1c2VyQWNjb3VudC5jb250YWN0QWRtaW5FbWFpbFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiRW1haWwgZGUgQ29udGFjdG9cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcmFibGUgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInNvbG8tZmlsbGVkXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnJ1bGVzPVwiY29udGFjdEVtYWlsUnVsZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDplcnJvci1tZXNzYWdlcz1cImZpZWxkRXJyb3JzLmNvbnRhY3RBZG1pbkVtYWlsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaW5wdXQ9XCJjbGVhckZpZWxkRXJyb3IoJ2NvbnRhY3RBZG1pbkVtYWlsJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cIiFpc1Byb2ZpbGVFZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC92LXRleHQtZmllbGQ+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cInVzZXJBY2NvdW50LmNvbnRhY3RBZG1pblRlbFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiVGVsw6lmb25vXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJhYmxlIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzb2xvLWZpbGxlZFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpydWxlcz1cImNvbnRhY3RUZWxSdWxlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmVycm9yLW1lc3NhZ2VzPVwiZmllbGRFcnJvcnMuY29udGFjdEFkbWluVGVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaW5wdXQ9XCJjbGVhckZpZWxkRXJyb3IoJ2NvbnRhY3RBZG1pblRlbCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCIhaXNQcm9maWxlRWRpdGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdi10ZXh0LWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1c2VyQWNjb3VudC5jb250YWN0QWRtaW5UeXBlXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJUaXBvIGRlIEFkbWluaXN0cmFkb3JcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcmFibGUgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInNvbG8tZmlsbGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6cnVsZXM9XCJjb250YWN0QWRtaW5UeXBlUnVsZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDplcnJvci1tZXNzYWdlcz1cImZpZWxkRXJyb3JzLmNvbnRhY3RBZG1pblR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpbnB1dD1cImNsZWFyRmllbGRFcnJvcignY29udGFjdEFkbWluVHlwZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCIhaXNQcm9maWxlRWRpdGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdi10ZXh0LWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cInVzZXJBY2NvdW50LmNvbnRhY3RBZG1pbk5pZlwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiRE5JXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJhYmxlIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzb2xvLWZpbGxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnJ1bGVzPVwiY29udGFjdEFkbWluTmlmUnVsZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDplcnJvci1tZXNzYWdlcz1cImZpZWxkRXJyb3JzLmNvbnRhY3RBZG1pbk5pZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlucHV0PVwiY2xlYXJGaWVsZEVycm9yKCdjb250YWN0QWRtaW5OaWYnKVwiXG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXI9XCIxNVwiXG4gICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjE1XCJcbiAgICAgICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiIWlzUHJvZmlsZUVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3YtdGV4dC1maWVsZD4gICAgXG4gICAgICAgICAgICAgICAgICAgIDwvdi1leHBhbnNpb24tcGFuZWwtdGV4dD5cbiAgICAgICAgICAgICAgICA8L3YtZXhwYW5zaW9uLXBhbmVsPlxuXG4gICAgICAgICAgICA8L3YtZXhwYW5zaW9uLXBhbmVscz5cbiAgICAgICAgICAgIDxocj5cbiAgICAgICAgICAgIDxicj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8di1idG4gXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXdoaXRlIG1iLTIgbXQtNCBteC1hdXRvIGFkZC10ZW1wbGF0ZXMtYnV0dG9uXCIgXG4gICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgOmxvYWRpbmc9XCJsb2FkaW5nXCJcbiAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJsb2FkaW5nIHx8ICFpc1Byb2ZpbGVFZGl0YWJsZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgdXNlckFjY291bnQ/LmlkID8gJ0FjdHVhbGl6YXInIDogJ0d1YXJkYXInIH19XG4gICAgICAgICAgICA8L3YtYnRuPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L3YtZm9ybT5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjb21wdXRlZCwgcmVmLCByZWFjdGl2ZSwgd2F0Y2ggfSBmcm9tICd2dWUnO1xuaW1wb3J0IHsgdXNlRW50aXR5IH0gZnJvbSAnLi4vc2VydmljZXMvY29tcG9zYWJsZXMvdXNlRW50aXR5JztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvaW1wbGVtZW50YXRpb25zL3VzZXIvdXNlclNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlckltcGwgfSBmcm9tICcuLi9zZXJ2aWNlcy90eXBlcy9pbXBsZW1lbnRhdGlvbnMnO1xuaW1wb3J0IHsgQmFua0FjY291bnRJbXBsIH0gZnJvbSAnLi4vc2VydmljZXMvdHlwZXMvaW1wbGVtZW50YXRpb25zJztcbmltcG9ydCB7IHVzZUF1dGhTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9hdXRoJztcbmltcG9ydCBTZWxlY3RvciBmcm9tICcuL1NlbGVjdG9yLnZ1ZSc7XG5pbXBvcnQgQ291bnRyeVNlbGVjdG9yIGZyb20gJy4vQ291bnRyeVNlbGVjdG9yLnZ1ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiAnRWRpdFByb2ZpbGUnLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgU2VsZWN0b3IsXG4gICAgICAgIENvdW50cnlTZWxlY3RvclxuICAgIH0sXG4gICAgc2V0dXAoKSB7XG4gICAgICAgIGNvbnN0IGF1dGhTdG9yZSA9IHVzZUF1dGhTdG9yZSgpO1xuICAgICAgICBjb25zdCBmb3JtUmVmID0gcmVmKG51bGwpO1xuICAgICAgICBjb25zdCBsb2FkaW5nID0gcmVmKGZhbHNlKTtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlcyA9IHJlZihbXSk7XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NNZXNzYWdlID0gcmVmKCcnKTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHsgZW50aXR5OiB1c2VyQWNjb3VudCB9ID0gdXNlRW50aXR5KFVzZXJJbXBsLCBhdXRoU3RvcmUsIHRydWUpO1xuICAgICAgICBjb25zdCB7IGVudGl0eTogYmFua0FjY291bnQgfSA9IHVzZUVudGl0eShCYW5rQWNjb3VudEltcGwsIGF1dGhTdG9yZSwgdHJ1ZSk7XG5cbiAgICAgICAgbGV0IGlzRmlyc3RUaW1lU2V0ID0gcmVmKGZhbHNlKTtcbiAgICAgICAgbGV0IGlzRGlzYWJsZWQgPSByZWYoZmFsc2UpO1xuICAgICAgICBsZXQgaXNQcm9maWxlRWRpdGFibGUgPSByZWYodHJ1ZSk7XG5cbiAgICAgICAgLy8gT2JqZXRvIHJlYWN0aXZvIHBhcmEgZXJyb3JlcyBwb3IgY2FtcG9cbiAgICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSByZWFjdGl2ZSh7XG4gICAgICAgICAgICBzb2NpYWxEZW5vbWluYXRpb246IFtdLFxuICAgICAgICAgICAgZW1haWw6IFtdLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IFtdLFxuICAgICAgICAgICAgY29tcGFueVR5cGU6IFtdLFxuICAgICAgICAgICAgY29udGFjdFBlcnNvbk5hbWU6IFtdLFxuICAgICAgICAgICAgY29udGFjdFBlcnNvblN1ck5hbWU6IFtdLFxuICAgICAgICAgICAgY29udGFjdFBlcnNvbk5pZjogW10sXG4gICAgICAgICAgICBjb21wYW55TmlmOiBbXSxcbiAgICAgICAgICAgIGFkZHJlc3M6IFtdLFxuICAgICAgICAgICAgcG9zdGFsQ29kZTogW10sXG4gICAgICAgICAgICBjaXR5OiBbXSxcbiAgICAgICAgICAgIHByb3ZpbmNlOiBbXSxcbiAgICAgICAgICAgIGNvdW50cnk6IFtdLFxuICAgICAgICAgICAgY29udGFjdENvbnRhYmxlTmFtZTogW10sXG4gICAgICAgICAgICBjb250YWN0Q29udGFibGVTdXJuYW1lOiBbXSxcbiAgICAgICAgICAgIGNvbnRhY3RDb250YWJsZUVtYWlsOiBbXSxcbiAgICAgICAgICAgIGNvbnRhY3RDb250YWJsZVRlbDogW10sXG4gICAgICAgICAgICBjb250YWN0QWRtaW5OYW1lOiBbXSxcbiAgICAgICAgICAgIGNvbnRhY3RBZG1pblN1cm5hbWU6IFtdLFxuICAgICAgICAgICAgY29udGFjdEFkbWluRW1haWw6IFtdLFxuICAgICAgICAgICAgY29udGFjdEFkbWluVGVsOiBbXSxcbiAgICAgICAgICAgIGNvbnRhY3RBZG1pblR5cGU6IFtdLFxuICAgICAgICAgICAgY29udGFjdEFkbWluTmlmOiBbXVxuICAgICAgICB9KTtcblxuICAgICAgICB3YXRjaCh1c2VyQWNjb3VudCwgKG5ld1VzZXJBY2NvdW50KSA9PiB7ICAgXG4gICAgICAgICAgICBpZiAoIW5ld1VzZXJBY2NvdW50LmlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIC8vIENMSUVOVFMgKFJPTEVfQ0xJRU5URSkgY2FuIEFMV0FZUyBlZGl0IHRoZWlyIHByb2ZpbGVcbiAgICAgICAgICAgIC8vIFRoaXMgcmVzdHJpY3Rpb24gb25seSBhcHBsaWVzIHRvIHByb3ZpZGVyc1xuICAgICAgICAgICAgaWYgKGF1dGhTdG9yZS5pc0NsaWVudCkge1xuICAgICAgICAgICAgICAgIGlzUHJvZmlsZUVkaXRhYmxlLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobmV3VXNlckFjY291bnQuaXNQcm9maWxlRWRpdGFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlzUHJvZmlsZUVkaXRhYmxlLnZhbHVlID0gbmV3VXNlckFjY291bnQuaXNQcm9maWxlRWRpdGFibGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaXNGaXJzdFRpbWVTZXQudmFsdWUgJiYgbmV3VXNlckFjY291bnQuY29tcGFueVR5cGUpIHtcbiAgICAgICAgICAgICAgICBpc0ZpcnN0VGltZVNldC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoIWlzRmlyc3RUaW1lU2V0LnZhbHVlICYmICFuZXdVc2VyQWNjb3VudC5jb21wYW55VHlwZSkge1xuICAgICAgICAgICAgICAgIGlzRmlyc3RUaW1lU2V0LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgeyBkZWVwOiB0cnVlIH0pO1xuXG4gICAgICAgIC8vIFZhbGlkYWNpw7NuIGVuIHRpZW1wbyByZWFsIGRlIGxvbmdpdHVkZXNcbiAgICAgICAgd2F0Y2goKCkgPT4gdXNlckFjY291bnQuY29tcGFueU5pZiwgKG5ld1ZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAobmV3VmFsdWUgJiYgbmV3VmFsdWUubGVuZ3RoID4gMjApIHtcbiAgICAgICAgICAgICAgICBmaWVsZEVycm9ycy5jb21wYW55TmlmID0gWydFbCBDSUYgbm8gcHVlZGUgdGVuZXIgbcOhcyBkZSAyMCBjYXJhY3RlcmVzJ107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkRXJyb3JzLmNvbXBhbnlOaWYubGVuZ3RoID4gMCAmJiAoIW5ld1ZhbHVlIHx8IG5ld1ZhbHVlLmxlbmd0aCA8PSAyMCkpIHtcbiAgICAgICAgICAgICAgICBmaWVsZEVycm9ycy5jb21wYW55TmlmID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHdhdGNoKCgpID0+IHVzZXJBY2NvdW50LmNvbnRhY3RQZXJzb25OaWYsIChuZXdWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlICYmIG5ld1ZhbHVlLmxlbmd0aCA+IDIwKSB7XG4gICAgICAgICAgICAgICAgZmllbGRFcnJvcnMuY29udGFjdFBlcnNvbk5pZiA9IFsnRWwgTklGIG5vIHB1ZWRlIHRlbmVyIG3DoXMgZGUgMjAgY2FyYWN0ZXJlcyddO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmaWVsZEVycm9ycy5jb250YWN0UGVyc29uTmlmLmxlbmd0aCA+IDAgJiYgKCFuZXdWYWx1ZSB8fCBuZXdWYWx1ZS5sZW5ndGggPD0gMjApKSB7XG4gICAgICAgICAgICAgICAgZmllbGRFcnJvcnMuY29udGFjdFBlcnNvbk5pZiA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB3YXRjaCgoKSA9PiB1c2VyQWNjb3VudC5lbWFpbCwgKG5ld1ZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAobmV3VmFsdWUgJiYgbmV3VmFsdWUubGVuZ3RoID4gNjApIHtcbiAgICAgICAgICAgICAgICBmaWVsZEVycm9ycy5lbWFpbCA9IFsnRWwgZW1haWwgbm8gcHVlZGUgdGVuZXIgbcOhcyBkZSA2MCBjYXJhY3RlcmVzJ107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkRXJyb3JzLmVtYWlsLmxlbmd0aCA+IDAgJiYgKCFuZXdWYWx1ZSB8fCBuZXdWYWx1ZS5sZW5ndGggPD0gNjApKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEvLitALitcXC4uKy8udGVzdChuZXdWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRFcnJvcnMuZW1haWwgPSBbJ0luZ3Jlc2UgdW4gY29ycmVvIHbDoWxpZG8nXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZEVycm9ycy5lbWFpbCA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgd2F0Y2goKCkgPT4gdXNlckFjY291bnQucG9zdGFsQ29kZSwgKG5ld1ZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAobmV3VmFsdWUgJiYgbmV3VmFsdWUubGVuZ3RoID4gNykge1xuICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzLnBvc3RhbENvZGUgPSBbJ0VsIGPDs2RpZ28gcG9zdGFsIG5vIHB1ZWRlIHRlbmVyIG3DoXMgZGUgNyBjYXJhY3RlcmVzJ107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkRXJyb3JzLnBvc3RhbENvZGUubGVuZ3RoID4gMCAmJiAoIW5ld1ZhbHVlIHx8IG5ld1ZhbHVlLmxlbmd0aCA8PSA3KSkge1xuICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzLnBvc3RhbENvZGUgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgd2F0Y2goKCkgPT4gdXNlckFjY291bnQuY29udGFjdENvbnRhYmxlVGVsLCAobmV3VmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSAmJiBuZXdWYWx1ZS5sZW5ndGggPiAyMCkge1xuICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzLmNvbnRhY3RDb250YWJsZVRlbCA9IFsnRWwgdGVsw6lmb25vIG5vIHB1ZWRlIHRlbmVyIG3DoXMgZGUgMjAgY2FyYWN0ZXJlcyddO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmaWVsZEVycm9ycy5jb250YWN0Q29udGFibGVUZWwubGVuZ3RoID4gMCAmJiAoIW5ld1ZhbHVlIHx8IG5ld1ZhbHVlLmxlbmd0aCA8PSAyMCkpIHtcbiAgICAgICAgICAgICAgICBmaWVsZEVycm9ycy5jb250YWN0Q29udGFibGVUZWwgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgd2F0Y2goKCkgPT4gdXNlckFjY291bnQuY29udGFjdEFkbWluVGVsLCAobmV3VmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSAmJiBuZXdWYWx1ZS5sZW5ndGggPiAyMCkge1xuICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzLmNvbnRhY3RBZG1pblRlbCA9IFsnRWwgdGVsw6lmb25vIG5vIHB1ZWRlIHRlbmVyIG3DoXMgZGUgMjAgY2FyYWN0ZXJlcyddO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmaWVsZEVycm9ycy5jb250YWN0QWRtaW5UZWwubGVuZ3RoID4gMCAmJiAoIW5ld1ZhbHVlIHx8IG5ld1ZhbHVlLmxlbmd0aCA8PSAyMCkpIHtcbiAgICAgICAgICAgICAgICBmaWVsZEVycm9ycy5jb250YWN0QWRtaW5UZWwgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgd2F0Y2goKCkgPT4gdXNlckFjY291bnQuY29udGFjdENvbnRhYmxlRW1haWwsIChuZXdWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlICYmIG5ld1ZhbHVlLmxlbmd0aCA+IDEwMCkge1xuICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzLmNvbnRhY3RDb250YWJsZUVtYWlsID0gWydFbCBlbWFpbCBubyBwdWVkZSB0ZW5lciBtw6FzIGRlIDEwMCBjYXJhY3RlcmVzJ107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkRXJyb3JzLmNvbnRhY3RDb250YWJsZUVtYWlsLmxlbmd0aCA+IDAgJiYgKCFuZXdWYWx1ZSB8fCBuZXdWYWx1ZS5sZW5ndGggPD0gMTAwKSkge1xuICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzLmNvbnRhY3RDb250YWJsZUVtYWlsID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHdhdGNoKCgpID0+IHVzZXJBY2NvdW50LmNvbnRhY3RBZG1pbkVtYWlsLCAobmV3VmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSAmJiBuZXdWYWx1ZS5sZW5ndGggPiAxMDApIHtcbiAgICAgICAgICAgICAgICBmaWVsZEVycm9ycy5jb250YWN0QWRtaW5FbWFpbCA9IFsnRWwgZW1haWwgbm8gcHVlZGUgdGVuZXIgbcOhcyBkZSAxMDAgY2FyYWN0ZXJlcyddO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmaWVsZEVycm9ycy5jb250YWN0QWRtaW5FbWFpbC5sZW5ndGggPiAwICYmICghbmV3VmFsdWUgfHwgbmV3VmFsdWUubGVuZ3RoIDw9IDEwMCkpIHtcbiAgICAgICAgICAgICAgICBmaWVsZEVycm9ycy5jb250YWN0QWRtaW5FbWFpbCA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB3YXRjaCgoKSA9PiB1c2VyQWNjb3VudC5zb2NpYWxEZW5vbWluYXRpb24sIChuZXdWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlICYmIG5ld1ZhbHVlLmxlbmd0aCA+IDEyMCkge1xuICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzLnNvY2lhbERlbm9taW5hdGlvbiA9IFsnTm8gcHVlZGUgdGVuZXIgbcOhcyBkZSAxMjAgY2FyYWN0ZXJlcyddO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmaWVsZEVycm9ycy5zb2NpYWxEZW5vbWluYXRpb24ubGVuZ3RoID4gMCAmJiAoIW5ld1ZhbHVlIHx8IG5ld1ZhbHVlLmxlbmd0aCA8PSAxMjApKSB7XG4gICAgICAgICAgICAgICAgZmllbGRFcnJvcnMuc29jaWFsRGVub21pbmF0aW9uID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHdhdGNoKCgpID0+IHVzZXJBY2NvdW50LmFkZHJlc3MsIChuZXdWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlICYmIG5ld1ZhbHVlLmxlbmd0aCA+IDYwKSB7XG4gICAgICAgICAgICAgICAgZmllbGRFcnJvcnMuYWRkcmVzcyA9IFsnTm8gcHVlZGUgdGVuZXIgbcOhcyBkZSA2MCBjYXJhY3RlcmVzJ107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkRXJyb3JzLmFkZHJlc3MubGVuZ3RoID4gMCAmJiAoIW5ld1ZhbHVlIHx8IG5ld1ZhbHVlLmxlbmd0aCA8PSA2MCkpIHtcbiAgICAgICAgICAgICAgICBmaWVsZEVycm9ycy5hZGRyZXNzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHdhdGNoKCgpID0+IHVzZXJBY2NvdW50LmNpdHksIChuZXdWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlICYmIG5ld1ZhbHVlLmxlbmd0aCA+IDYwKSB7XG4gICAgICAgICAgICAgICAgZmllbGRFcnJvcnMuY2l0eSA9IFsnTm8gcHVlZGUgdGVuZXIgbcOhcyBkZSA2MCBjYXJhY3RlcmVzJ107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkRXJyb3JzLmNpdHkubGVuZ3RoID4gMCAmJiAoIW5ld1ZhbHVlIHx8IG5ld1ZhbHVlLmxlbmd0aCA8PSA2MCkpIHtcbiAgICAgICAgICAgICAgICBmaWVsZEVycm9ycy5jaXR5ID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHdhdGNoKCgpID0+IHVzZXJBY2NvdW50LnByb3ZpbmNlLCAobmV3VmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSAmJiBuZXdWYWx1ZS5sZW5ndGggPiAzMCkge1xuICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzLnByb3ZpbmNlID0gWydObyBwdWVkZSB0ZW5lciBtw6FzIGRlIDMwIGNhcmFjdGVyZXMnXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGRFcnJvcnMucHJvdmluY2UubGVuZ3RoID4gMCAmJiAoIW5ld1ZhbHVlIHx8IG5ld1ZhbHVlLmxlbmd0aCA8PSAzMCkpIHtcbiAgICAgICAgICAgICAgICBmaWVsZEVycm9ycy5wcm92aW5jZSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBSZWdsYXMgZGUgdmFsaWRhY2nDs24gYmFzYWRhcyBlbiBsYSBlbnRpZGFkIFVzZXJcbiAgICAgICAgY29uc3QgZW1haWxSdWxlcyA9IFtcbiAgICAgICAgICAgIHYgPT4gISF2IHx8ICdFbCBlbWFpbCBlcyBvYmxpZ2F0b3JpbycsXG4gICAgICAgICAgICB2ID0+IC8uK0AuK1xcLi4rLy50ZXN0KHYpIHx8ICdJbmdyZXNlIHVuIGNvcnJlbyB2w6FsaWRvJyxcbiAgICAgICAgICAgIHYgPT4gKHYgJiYgdi5sZW5ndGggPD0gNjApIHx8ICdFbCBlbWFpbCBubyBwdWVkZSB0ZW5lciBtw6FzIGRlIDYwIGNhcmFjdGVyZXMnXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgcGhvbmVSdWxlcyA9IFtcbiAgICAgICAgICAgIHYgPT4gIXYgfHwgL15cXCs/WzAtOVxcc1xcLVxcKFxcKV0rJC8udGVzdCh2KSB8fCAnRm9ybWF0byBkZSB0ZWzDqWZvbm8gaW52w6FsaWRvJyxcbiAgICAgICAgICAgIHYgPT4gIXYgfHwgdi5sZW5ndGggPD0gMTUgfHwgJ0VsIHRlbMOpZm9ubyBubyBwdWVkZSB0ZW5lciBtw6FzIGRlIDE1IGNhcmFjdGVyZXMnXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3Qgc29jaWFsRGVub21pbmF0aW9uUnVsZXMgPSBbXG4gICAgICAgICAgICB2ID0+ICEhdiB8fCAnTGEgZGVub21pbmFjacOzbiBzb2NpYWwgZXMgb2JsaWdhdG9yaWEnLFxuICAgICAgICAgICAgdiA9PiAodiAmJiB2Lmxlbmd0aCA8PSAxMjApIHx8ICdObyBwdWVkZSB0ZW5lciBtw6FzIGRlIDEyMCBjYXJhY3RlcmVzJ1xuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IG5hbWVSdWxlcyA9IFtcbiAgICAgICAgICAgIHYgPT4gIXYgfHwgdi5sZW5ndGggPD0gMTIwIHx8ICdObyBwdWVkZSB0ZW5lciBtw6FzIGRlIDEyMCBjYXJhY3RlcmVzJ1xuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IG5pZlJ1bGVzID0gW1xuICAgICAgICAgICAgdiA9PiAhdiB8fCB2Lmxlbmd0aCA8PSAyMCB8fCAnTm8gcHVlZGUgdGVuZXIgbcOhcyBkZSAyMCBjYXJhY3RlcmVzJ1xuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IGFkZHJlc3NSdWxlcyA9IFtcbiAgICAgICAgICAgIHYgPT4gIXYgfHwgdi5sZW5ndGggPD0gNjAgfHwgJ05vIHB1ZWRlIHRlbmVyIG3DoXMgZGUgNjAgY2FyYWN0ZXJlcydcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBjaXR5UnVsZXMgPSBbXG4gICAgICAgICAgICB2ID0+ICF2IHx8IHYubGVuZ3RoIDw9IDYwIHx8ICdObyBwdWVkZSB0ZW5lciBtw6FzIGRlIDYwIGNhcmFjdGVyZXMnXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgcG9zdGFsQ29kZVJ1bGVzID0gW1xuICAgICAgICAgICAgdiA9PiAhdiB8fCB2Lmxlbmd0aCA8PSA3IHx8ICdObyBwdWVkZSB0ZW5lciBtw6FzIGRlIDcgY2FyYWN0ZXJlcydcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBwcm92aW5jZVJ1bGVzID0gW1xuICAgICAgICAgICAgdiA9PiAhdiB8fCB2Lmxlbmd0aCA8PSAzMCB8fCAnTm8gcHVlZGUgdGVuZXIgbcOhcyBkZSAzMCBjYXJhY3RlcmVzJ1xuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IGNvdW50cnlSdWxlcyA9IFtcbiAgICAgICAgICAgIHYgPT4gIXYgfHwgdi5sZW5ndGggPD0gMiB8fCAnQ8OzZGlnbyBkZSBwYcOtcyBpbnbDoWxpZG8gKG3DoXhpbW8gMiBjYXJhY3RlcmVzKSdcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBjb250YWN0TmFtZVJ1bGVzID0gW1xuICAgICAgICAgICAgdiA9PiAhdiB8fCB2Lmxlbmd0aCA8PSA1MCB8fCAnTm8gcHVlZGUgdGVuZXIgbcOhcyBkZSA1MCBjYXJhY3RlcmVzJ1xuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IGNvbnRhY3RFbWFpbFJ1bGVzID0gW1xuICAgICAgICAgICAgdiA9PiAhdiB8fCAvLitALitcXC4uKy8udGVzdCh2KSB8fCAnRW1haWwgaW52w6FsaWRvJyxcbiAgICAgICAgICAgIHYgPT4gIXYgfHwgdi5sZW5ndGggPD0gMTAwIHx8ICdFbCBlbWFpbCBubyBwdWVkZSB0ZW5lciBtw6FzIGRlIDEwMCBjYXJhY3RlcmVzJ1xuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IGNvbnRhY3RUZWxSdWxlcyA9IFtcbiAgICAgICAgICAgIHYgPT4gIXYgfHwgL15cXCs/WzAtOVxcc1xcLVxcKFxcKV0rJC8udGVzdCh2KSB8fCAnRm9ybWF0byBkZSB0ZWzDqWZvbm8gaW52w6FsaWRvJyxcbiAgICAgICAgICAgIHYgPT4gIXYgfHwgdi5sZW5ndGggPD0gMjAgfHwgJ0VsIHRlbMOpZm9ubyBubyBwdWVkZSB0ZW5lciBtw6FzIGRlIDIwIGNhcmFjdGVyZXMnXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgY29udGFjdEFkbWluVHlwZVJ1bGVzID0gW1xuICAgICAgICAgICAgdiA9PiAhdiB8fCB2Lmxlbmd0aCA8PSA1MCB8fCAnTm8gcHVlZGUgdGVuZXIgbcOhcyBkZSA1MCBjYXJhY3RlcmVzJ1xuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IGNvbnRhY3RBZG1pbk5pZlJ1bGVzID0gW1xuICAgICAgICAgICAgdiA9PiAhdiB8fCB2Lmxlbmd0aCA8PSAxNSB8fCAnTm8gcHVlZGUgdGVuZXIgbcOhcyBkZSAxNSBjYXJhY3RlcmVzJ1xuICAgICAgICBdO1xuXG4gICAgICAgIC8vIExpbXBpYXIgdG9kb3MgbG9zIGVycm9yZXNcbiAgICAgICAgY29uc3QgY2xlYXJFcnJvcnMgPSAoKSA9PiB7XG4gICAgICAgICAgICBlcnJvck1lc3NhZ2VzLnZhbHVlID0gW107XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhmaWVsZEVycm9ycykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzW2tleV0gPSBbXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIExpbXBpYXIgZXJyb3IgZGUgdW4gY2FtcG8gZXNwZWPDrWZpY29cbiAgICAgICAgY29uc3QgY2xlYXJGaWVsZEVycm9yID0gKGZpZWxkTmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGZpZWxkRXJyb3JzLmhhc093blByb3BlcnR5KGZpZWxkTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBmaWVsZEVycm9yc1tmaWVsZE5hbWVdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUYW1iacOpbiBlbGltaW5hciBkZWwgYXJyYXkgZGUgbWVuc2FqZXMgZ2VuZXJhbGVzIHNpIGV4aXN0ZVxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlcy52YWx1ZSA9IGVycm9yTWVzc2FnZXMudmFsdWUuZmlsdGVyKFxuICAgICAgICAgICAgICAgIG1zZyA9PiAhbXNnLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZ2V0RmllbGRMYWJlbChmaWVsZE5hbWUpLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIE9idGVuZXIgZXRpcXVldGEgYW1pZ2FibGUgZGVsIGNhbXBvXG4gICAgICAgIGNvbnN0IGdldEZpZWxkTGFiZWwgPSAoZmllbGROYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsYWJlbHMgPSB7XG4gICAgICAgICAgICAgICAgc29jaWFsRGVub21pbmF0aW9uOiAnRGVub21pbmFjacOzbiBTb2NpYWwnLFxuICAgICAgICAgICAgICAgIGVtYWlsOiAnRW1haWwnLFxuICAgICAgICAgICAgICAgIHBhc3N3b3JkOiAnQ29udHJhc2XDsWEnLFxuICAgICAgICAgICAgICAgIGNvbXBhbnlUeXBlOiAnVGlwbyBkZSBQZXJzb25hJyxcbiAgICAgICAgICAgICAgICBjb250YWN0UGVyc29uTmFtZTogJ05vbWJyZScsXG4gICAgICAgICAgICAgICAgY29udGFjdFBlcnNvblN1ck5hbWU6ICdBcGVsbGlkbyhzKScsXG4gICAgICAgICAgICAgICAgY29udGFjdFBlcnNvbk5pZjogJ05JRicsXG4gICAgICAgICAgICAgICAgY29tcGFueU5pZjogJ0NJRicsXG4gICAgICAgICAgICAgICAgYWRkcmVzczogJ0RpcmVjY2nDs24nLFxuICAgICAgICAgICAgICAgIHBvc3RhbENvZGU6ICdDw7NkaWdvIFBvc3RhbCcsXG4gICAgICAgICAgICAgICAgY2l0eTogJ0NpdWRhZCcsXG4gICAgICAgICAgICAgICAgcHJvdmluY2U6ICdQcm92aW5jaWEnLFxuICAgICAgICAgICAgICAgIGNvdW50cnk6ICdQYcOtcycsXG4gICAgICAgICAgICAgICAgY29udGFjdENvbnRhYmxlTmFtZTogJ05vbWJyZSAoQ29udGFjdG8gQ29udGFibGUpJyxcbiAgICAgICAgICAgICAgICBjb250YWN0Q29udGFibGVTdXJuYW1lOiAnQXBlbGxpZG8ocykgKENvbnRhY3RvIENvbnRhYmxlKScsXG4gICAgICAgICAgICAgICAgY29udGFjdENvbnRhYmxlRW1haWw6ICdFbWFpbCAoQ29udGFjdG8gQ29udGFibGUpJyxcbiAgICAgICAgICAgICAgICBjb250YWN0Q29udGFibGVUZWw6ICdUZWzDqWZvbm8gKENvbnRhY3RvIENvbnRhYmxlKScsXG4gICAgICAgICAgICAgICAgY29udGFjdEFkbWluTmFtZTogJ05vbWJyZSAoQWRtaW5pc3RyYWRvciknLFxuICAgICAgICAgICAgICAgIGNvbnRhY3RBZG1pblN1cm5hbWU6ICdBcGVsbGlkbyhzKSAoQWRtaW5pc3RyYWRvciknLFxuICAgICAgICAgICAgICAgIGNvbnRhY3RBZG1pbkVtYWlsOiAnRW1haWwgKEFkbWluaXN0cmFkb3IpJyxcbiAgICAgICAgICAgICAgICBjb250YWN0QWRtaW5UZWw6ICdUZWzDqWZvbm8gKEFkbWluaXN0cmFkb3IpJyxcbiAgICAgICAgICAgICAgICBjb250YWN0QWRtaW5UeXBlOiAnVGlwbyBkZSBBZG1pbmlzdHJhZG9yJyxcbiAgICAgICAgICAgICAgICBjb250YWN0QWRtaW5OaWY6ICdETkkgKEFkbWluaXN0cmFkb3IpJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBsYWJlbHNbZmllbGROYW1lXSB8fCBmaWVsZE5hbWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUGFyc2VhciBkZXRhbGxlcyBTUUwgcGFyYSBvYnRlbmVyIGluZm9ybWFjacOzbiBhbWlnYWJsZVxuICAgICAgICBjb25zdCBwYXJzZVNxbERldGFpbHMgPSAoZGV0YWlscykgPT4ge1xuICAgICAgICAgICAgaWYgKCFkZXRhaWxzKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gRXh0cmFlciBpbmZvcm1hY2nDs24gZGUgZXJyb3JlcyBTUUwgY29tdW5lc1xuICAgICAgICAgICAgY29uc3QgcGF0dGVybnMgPSB7XG4gICAgICAgICAgICAgICAgdG9vTG9uZzogL0RhdGEgdG9vIGxvbmcgZm9yIGNvbHVtbiAnKFteJ10rKScvaSxcbiAgICAgICAgICAgICAgICBkdXBsaWNhdGU6IC9EdXBsaWNhdGUgZW50cnkgJyhbXiddKyknIGZvciBrZXkgJyhbXiddKyknL2ksXG4gICAgICAgICAgICAgICAgY2Fubm90QmVOdWxsOiAvQ29sdW1uICcoW14nXSspJyBjYW5ub3QgYmUgbnVsbC9pLFxuICAgICAgICAgICAgICAgIGZvcmVpZ25LZXk6IC9DYW5ub3QgKD86YWRkfGRlbGV0ZSkgb3IgdXBkYXRlIC4qZm9yZWlnbiBrZXkgY29uc3RyYWludC9pLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAvSW5jb3JyZWN0IC4qIHZhbHVlOiAnKFteJ10rKScgZm9yIGNvbHVtbiAnKFteJ10rKScvaVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gVmVyaWZpY2FyIGNhZGEgcGF0csOzblxuICAgICAgICAgICAgaWYgKHBhdHRlcm5zLnRvb0xvbmcudGVzdChkZXRhaWxzKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gZGV0YWlscy5tYXRjaChwYXR0ZXJucy50b29Mb25nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5OYW1lID0gbWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgY29uc3QgZnJpZW5kbHlOYW1lID0gZ2V0RmllbGRMYWJlbChcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uTmFtZS5yZXBsYWNlKC9fKFthLXpdKS9nLCAoZykgPT4gZ1sxXS50b1VwcGVyQ2FzZSgpKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbk5hbWUucmVwbGFjZSgvXyhbYS16XSkvZywgKGcpID0+IGdbMV0udG9VcHBlckNhc2UoKSksXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGAke2ZyaWVuZGx5TmFtZX06IEVsIHRleHRvIGVzIGRlbWFzaWFkbyBsYXJnby4gUG9yIGZhdm9yLCBhY8OzcnRlbG8uYFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChwYXR0ZXJucy5kdXBsaWNhdGUudGVzdChkZXRhaWxzKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gZGV0YWlscy5tYXRjaChwYXR0ZXJucy5kdXBsaWNhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gbWF0Y2hbMl07XG4gICAgICAgICAgICAgICAgLy8gSW50ZW50YXIgZGV0ZWN0YXIgZWwgY2FtcG8gZGVsIG5vbWJyZSBkZSBsYSBjbGF2ZVxuICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9ICdlbWFpbCc7XG4gICAgICAgICAgICAgICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCduaWYnKSB8fCBrZXkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnY2lmJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQgPSAnY29tcGFueU5pZic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZW1haWwnKSkge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZCA9ICdlbWFpbCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYCR7Z2V0RmllbGRMYWJlbChmaWVsZCl9OiBFc3RlIHZhbG9yIHlhIGVzdMOhIHJlZ2lzdHJhZG8gZW4gZWwgc2lzdGVtYS5gXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHBhdHRlcm5zLmNhbm5vdEJlTnVsbC50ZXN0KGRldGFpbHMpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBkZXRhaWxzLm1hdGNoKHBhdHRlcm5zLmNhbm5vdEJlTnVsbCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uTmFtZSA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gY29sdW1uTmFtZS5yZXBsYWNlKC9fKFthLXpdKS9nLCAoZykgPT4gZ1sxXS50b1VwcGVyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZDogZmllbGQsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGAke2dldEZpZWxkTGFiZWwoZmllbGQpfTogRXN0ZSBjYW1wbyBlcyBvYmxpZ2F0b3Jpby5gXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHBhdHRlcm5zLmZvcmVpZ25LZXkudGVzdChkZXRhaWxzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnTm8gc2UgcHVlZGUgcmVhbGl6YXIgZXN0YSBvcGVyYWNpw7NuIHBvcnF1ZSBleGlzdGVuIHJlZ2lzdHJvcyByZWxhY2lvbmFkb3MuJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChwYXR0ZXJucy5kYXRhVHlwZS50ZXN0KGRldGFpbHMpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBkZXRhaWxzLm1hdGNoKHBhdHRlcm5zLmRhdGFUeXBlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5OYW1lID0gbWF0Y2hbMl07XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBjb2x1bW5OYW1lLnJlcGxhY2UoL18oW2Etel0pL2csIChnKSA9PiBnWzFdLnRvVXBwZXJDYXNlKCkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYCR7Z2V0RmllbGRMYWJlbChmaWVsZCl9OiBFbCBmb3JtYXRvIGRlbCBkYXRvIG5vIGVzIHbDoWxpZG8uYFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFBhcnNlYXIgZXJyb3JlcyBkZWwgYmFja2VuZFxuICAgICAgICBjb25zdCBwYXJzZUJhY2tlbmRFcnJvcnMgPSAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNvbXBsZXRvOicsIGVycm9yKTtcbiAgICAgICAgICAgIGNsZWFyRXJyb3JzKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIE5VRVZPOiBNYW5lamFyIGZvcm1hdG8gY29uIGVycm9yIHkgZGV0YWlscyAodHUgYmFja2VuZCBhY3R1YWwpXG4gICAgICAgICAgICBpZiAoZXJyb3IucmVzcG9uc2U/LmRhdGE/LmVycm9yIHx8IGVycm9yLnJlc3BvbnNlPy5kYXRhPy5kZXRhaWxzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3JNc2cgPSBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRldGFpbHMgPSBlcnJvci5yZXNwb25zZS5kYXRhLmRldGFpbHM7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSW50ZW50YXIgcGFyc2VhciBsb3MgZGV0YWxsZXMgU1FMXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkU3FsID0gcGFyc2VTcWxEZXRhaWxzKGRldGFpbHMpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmIChwYXJzZWRTcWwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2kgcHVkaW1vcyBwYXJzZWFyIGVsIGVycm9yIFNRTCwgdXNhbW9zIGVsIG1lbnNhamUgYW1pZ2FibGVcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlZFNxbC5maWVsZCAmJiBmaWVsZEVycm9ycy5oYXNPd25Qcm9wZXJ0eShwYXJzZWRTcWwuZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZEVycm9yc1twYXJzZWRTcWwuZmllbGRdID0gW3BhcnNlZFNxbC5tZXNzYWdlLnNwbGl0KCc6ICcpWzFdIHx8IHBhcnNlZFNxbC5tZXNzYWdlXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2VzLnZhbHVlLnB1c2gocGFyc2VkU3FsLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNpIG5vIHB1ZGltb3MgcGFyc2VhciwgbW9zdHJhbW9zIGVsIGVycm9yIGdlbsOpcmljbyBwZXJvIGludGVudGFtb3MgZXh0cmFlciBpbmZvIMO6dGlsXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXRhaWxzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBCdXNjYXIgZWwgbm9tYnJlIGRlIGxhIGNvbHVtbmEgZW4gZWwgbWVuc2FqZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uTWF0Y2ggPSBkZXRhaWxzLm1hdGNoKC9jb2x1bW4gJyhbXiddKyknL2kpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbk1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uTmFtZSA9IGNvbHVtbk1hdGNoWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gY29sdW1uTmFtZS5yZXBsYWNlKC9fKFthLXpdKS9nLCAoZykgPT4gZ1sxXS50b1VwcGVyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmcmllbmRseU1lc3NhZ2UgPSBgJHtnZXRGaWVsZExhYmVsKGZpZWxkKX06IEVycm9yIGFsIHByb2Nlc2FyIGVzdGUgY2FtcG8uIFBvciBmYXZvciwgdmVyaWZpcXVlIGVsIHZhbG9yIGluZ3Jlc2Fkby5gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZEVycm9ycy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRFcnJvcnNbZmllbGRdID0gWydFcnJvciBhbCBwcm9jZXNhciBlc3RlIGNhbXBvJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZXMudmFsdWUucHVzaChmcmllbmRseU1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2VzLnZhbHVlLnB1c2goZXJyb3JNc2cgfHwgJ0Vycm9yIGFsIHByb2Nlc2FyIGxvcyBkYXRvcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlcy52YWx1ZS5wdXNoKGVycm9yTXNnIHx8ICdFcnJvciBhbCBwcm9jZXNhciBsb3MgZGF0b3MnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIFNhbGlyIHRlbXByYW5vIHlhIHF1ZSBtYW5lamFtb3MgZXN0ZSBjYXNvXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFNpIGhheSB1biBtZW5zYWplIGRlIGVycm9yIGdlbmVyYWxcbiAgICAgICAgICAgIGlmIChlcnJvci5yZXNwb25zZT8uZGF0YT8ubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZXMudmFsdWUucHVzaChlcnJvci5yZXNwb25zZS5kYXRhLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTaSBoYXkgZXJyb3JlcyBkZSB2YWxpZGFjacOzbiBlc3BlY8OtZmljb3MgcG9yIGNhbXBvXG4gICAgICAgICAgICBpZiAoZXJyb3IucmVzcG9uc2U/LmRhdGE/LmVycm9ycykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3JzO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGVycm9ycykuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIExpbXBpYXIgZWwgbm9tYnJlIGRlbCBjYW1wbyAocmVtb3ZlciBwcmVmaWpvcyBjb21vIFwidXNlckFjY291bnQuXCIpXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsZWFuRmllbGROYW1lID0gZmllbGQucmVwbGFjZSgvXih1c2VyQWNjb3VudFxcLnxmb3JtRGF0YVxcLikvLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRFcnJvcnMuaGFzT3duUHJvcGVydHkoY2xlYW5GaWVsZE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZ3JlZ2FyIGFsIGNhbXBvIGVzcGVjw61maWNvXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1zZyA9IEFycmF5LmlzQXJyYXkoZXJyb3JzW2ZpZWxkXSkgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlcnJvcnNbZmllbGRdIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogW2Vycm9yc1tmaWVsZF1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZEVycm9yc1tjbGVhbkZpZWxkTmFtZV0gPSBlcnJvck1zZztcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGFtYmnDqW4gYWdyZWdhciBhIGxhIGxpc3RhIGdlbmVyYWxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkTGFiZWwgPSBnZXRGaWVsZExhYmVsKGNsZWFuRmllbGROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTXNnLmZvckVhY2gobXNnID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2VzLnZhbHVlLnB1c2goYCR7ZmllbGRMYWJlbH06ICR7bXNnfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBFcnJvciBxdWUgbm8gY29ycmVzcG9uZGUgYSB1biBjYW1wbyBlc3BlY8OtZmljb1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNncyA9IEFycmF5LmlzQXJyYXkoZXJyb3JzW2ZpZWxkXSkgPyBlcnJvcnNbZmllbGRdIDogW2Vycm9yc1tmaWVsZF1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlcy52YWx1ZS5wdXNoKC4uLm1zZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNpIGhheSB1biBhcnJheSBkZSBlcnJvcmVzXG4gICAgICAgICAgICBpZiAoZXJyb3IucmVzcG9uc2U/LmRhdGE/LmVycm9yTGlzdCkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZXMudmFsdWUucHVzaCguLi5lcnJvci5yZXNwb25zZS5kYXRhLmVycm9yTGlzdCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNpIGVzIGVycm9yIDQwMCBjb24gZGV0YWxsZXMgZGUgdmFsaWRhY2nDs24gKEJlYW4gVmFsaWRhdGlvbilcbiAgICAgICAgICAgIGlmIChlcnJvci5yZXNwb25zZT8uc3RhdHVzID09PSA0MDAgJiYgZXJyb3IucmVzcG9uc2U/LmRhdGE/LnZpb2xhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBlcnJvci5yZXNwb25zZS5kYXRhLnZpb2xhdGlvbnMuZm9yRWFjaCh2aW9sYXRpb24gPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IHZpb2xhdGlvbi5wcm9wZXJ0eVBhdGgucmVwbGFjZSgvXih1c2VyQWNjb3VudFxcLnxmb3JtRGF0YVxcLikvLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB2aW9sYXRpb24ubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZEVycm9ycy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzW2ZpZWxkXS5wdXNoKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2VzLnZhbHVlLnB1c2goYCR7Z2V0RmllbGRMYWJlbChmaWVsZCl9OiAke21lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNpIGVzIGVycm9yIDQyMiAoVW5wcm9jZXNzYWJsZSBFbnRpdHkpIC0gRXJyb3IgZGUgbmVnb2Npb1xuICAgICAgICAgICAgaWYgKGVycm9yLnJlc3BvbnNlPy5zdGF0dXMgPT09IDQyMikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvci5yZXNwb25zZT8uZGF0YT8ubWVzc2FnZSB8fCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IucmVzcG9uc2U/LmRhdGE/LmVycm9yIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFcnJvciBkZSB2YWxpZGFjacOzbiBkZSBuZWdvY2lvJztcbiAgICAgICAgICAgICAgICBpZiAoIWVycm9yTWVzc2FnZXMudmFsdWUuaW5jbHVkZXMobWVzc2FnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlcy52YWx1ZS5wdXNoKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU2kgbm8gaGF5IGVycm9yZXMgZXNwZWPDrWZpY29zIHBlcm8gaGF5IHVuIGVycm9yIDUwMFxuICAgICAgICAgICAgaWYgKGVycm9yLnJlc3BvbnNlPy5zdGF0dXMgPT09IDUwMCAmJiBlcnJvck1lc3NhZ2VzLnZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZXMudmFsdWUucHVzaChcbiAgICAgICAgICAgICAgICAgICAgJ0Vycm9yIGRlbCBzZXJ2aWRvci4gUG9yIGZhdm9yLCB2ZXJpZmlxdWUgcXVlIHRvZG9zIGxvcyBkYXRvcyBlc3TDqW4gY29ycmVjdGFtZW50ZSBpbmdyZXNhZG9zIHkgY29udGFjdGUgY29uIHNvcG9ydGUgc2kgZWwgcHJvYmxlbWEgcGVyc2lzdGUuJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNpIGVzIGVycm9yIGRlIHJlZFxuICAgICAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UgPT09ICdOZXR3b3JrIEVycm9yJyB8fCAhZXJyb3IucmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2VzLnZhbHVlLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICdFcnJvciBkZSBjb25leGnDs24uIFBvciBmYXZvciwgdmVyaWZpcXVlIHN1IGNvbmV4acOzbiBhIGludGVybmV0LidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTaSBubyBzZSBwdWRvIHBhcnNlYXIgbmluZ8O6biBlcnJvclxuICAgICAgICAgICAgaWYgKGVycm9yTWVzc2FnZXMudmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlcy52YWx1ZS5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlIHx8ICdIYSBvY3VycmlkbyB1biBlcnJvciBpbmVzcGVyYWRvLiBQb3IgZmF2b3IsIGludGVudGUgbnVldmFtZW50ZS4nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTG9nIHBhcmEgZGVidWdnaW5nXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3JlcyBwYXJzZWFkb3M6Jywge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZXM6IGVycm9yTWVzc2FnZXMudmFsdWUsXG4gICAgICAgICAgICAgICAgZmllbGRFcnJvcnM6IHsgLi4uZmllbGRFcnJvcnMgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZvcm1SZWYsXG4gICAgICAgICAgICBsb2FkaW5nLFxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlcyxcbiAgICAgICAgICAgIHN1Y2Nlc3NNZXNzYWdlLFxuICAgICAgICAgICAgZmllbGRFcnJvcnMsXG4gICAgICAgICAgICBpc0Rpc2FibGVkLFxuICAgICAgICAgICAgYmFua0FjY291bnQsXG4gICAgICAgICAgICB1c2VyQWNjb3VudCxcbiAgICAgICAgICAgIGVtYWlsUnVsZXMsXG4gICAgICAgICAgICBwaG9uZVJ1bGVzLFxuICAgICAgICAgICAgc29jaWFsRGVub21pbmF0aW9uUnVsZXMsXG4gICAgICAgICAgICBuYW1lUnVsZXMsXG4gICAgICAgICAgICBuaWZSdWxlcyxcbiAgICAgICAgICAgIGFkZHJlc3NSdWxlcyxcbiAgICAgICAgICAgIGNpdHlSdWxlcyxcbiAgICAgICAgICAgIHBvc3RhbENvZGVSdWxlcyxcbiAgICAgICAgICAgIHByb3ZpbmNlUnVsZXMsXG4gICAgICAgICAgICBjb3VudHJ5UnVsZXMsXG4gICAgICAgICAgICBjb250YWN0TmFtZVJ1bGVzLFxuICAgICAgICAgICAgY29udGFjdEVtYWlsUnVsZXMsXG4gICAgICAgICAgICBjb250YWN0VGVsUnVsZXMsXG4gICAgICAgICAgICBjb250YWN0QWRtaW5UeXBlUnVsZXMsXG4gICAgICAgICAgICBjb250YWN0QWRtaW5OaWZSdWxlcyxcbiAgICAgICAgICAgIGF1dGhTdG9yZSxcbiAgICAgICAgICAgIGNsZWFyRXJyb3JzLFxuICAgICAgICAgICAgY2xlYXJGaWVsZEVycm9yLFxuICAgICAgICAgICAgcGFyc2VCYWNrZW5kRXJyb3JzLFxuICAgICAgICAgICAgZ2V0RmllbGRMYWJlbFxuICAgICAgICB9O1xuICAgIH0sXG4gICAgZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbXBhbnlQb3NpdGlvbjogWydDRU8nLCAnQ1RPJywgJ01hbmFnZXInLCAnRW1wbG95ZWUnXSxcbiAgICAgICAgICAgIHBlcnNvblR5cGU6IFtcIlBlcnNvbmEgRsOtc2ljYVwiLCBcIlBlcnNvbmEgSnVyw61kaWNhXCJdLFxuICAgICAgICAgICAgc2VsZWN0ZWRQZXJzb25UeXBlOiBudWxsLCBcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgICBhc3luYyBoYW5kbGVTdWJtaXQoKSB7XG4gICAgICAgICAgICAvLyBWYWxpZGFyIGZvcm11bGFyaW9cbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQgfSA9IGF3YWl0IHRoaXMuZm9ybVJlZi52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2VzID0gWydQb3IgZmF2b3IsIGNvcnJpamEgbG9zIGVycm9yZXMgZGUgdmFsaWRhY2nDs24gZW4gZWwgZm9ybXVsYXJpbyddO1xuICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBoYWNpYSBhcnJpYmEgcGFyYSBxdWUgZWwgdXN1YXJpbyB2ZWEgZWwgZXJyb3JcbiAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IDAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKCk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXNlckFjY291bnRTZXJ2aWNlID0gbmV3IFVzZXJTZXJ2aWNlKHRoaXMudXNlckFjY291bnQpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlR2VuZXJpYyh1c2VyQWNjb3VudFNlcnZpY2UpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9ICdQZXJmaWwgYWN0dWFsaXphZG8gY29ycmVjdGFtZW50ZSc7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gU2Nyb2xsIGhhY2lhIGFycmliYSBwYXJhIHF1ZSBlbCB1c3VhcmlvIHZlYSBlbCBtZW5zYWplIGRlIMOpeGl0b1xuICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogMCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIExpbXBpYXIgbWVuc2FqZSBkZSDDqXhpdG8gZGVzcHXDqXMgZGUgNSBzZWd1bmRvc1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gJyc7XG4gICAgICAgICAgICAgICAgfSwgNTAwMCk7XG5cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWwgYWN0dWFsaXphciBwZXJmaWw6JywgZXJyb3IpO1xuICAgICAgICAgICAgICAgIHRoaXMucGFyc2VCYWNrZW5kRXJyb3JzKGVycm9yKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBTY3JvbGwgaGFjaWEgYXJyaWJhIHBhcmEgcXVlIGVsIHVzdWFyaW8gdmVhIGxvcyBlcnJvcmVzXG4gICAgICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKHsgdG9wOiAwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuLmVycm9yLWxpc3Qge1xuICAgIG1hcmdpbi1sZWZ0OiAyMHB4O1xuICAgIG1hcmdpbi10b3A6IDhweDtcbn1cblxuLmVycm9yLWxpc3QgbGkge1xuICAgIG1hcmdpbi1ib3R0b206IDRweDtcbn1cblxuLnNjcm9sbGVhYmxlIHtcbiAgICBtYXgtaGVpZ2h0OiA3MHZoO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgcGFkZGluZy1yaWdodDogMTBweDtcbn1cblxuLyogRXN0aWxvIHBhcmEgc2Nyb2xsIHN1YXZlICovXG4uc2Nyb2xsZWFibGU6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICB3aWR0aDogOHB4O1xufVxuXG4uc2Nyb2xsZWFibGU6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcbiAgICBiYWNrZ3JvdW5kOiAjZjFmMWYxO1xufVxuXG4uc2Nyb2xsZWFibGU6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICBiYWNrZ3JvdW5kOiAjODg4O1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cblxuLnNjcm9sbGVhYmxlOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogIzU1NTtcbn1cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICA8di1vdmVybGF5XG4gICAgdi1tb2RlbD1cIm92ZXJsYXlcIlxuICAgIDphY3RpdmF0b3I9XCJhY3RpdmF0b3JcIlxuICAgIDpzY3JpbT1cInNjcmltXCJcbiAgICA6cGVyc2lzdGVudD1cInBlcnNpc3RlbnRcIlxuICAgIGNsYXNzPVwiZC1mbGV4IGNlbnRlclwiXG4gICAgc3R5bGU9XCJiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDAuNywgMC43LCAwLjcsIDAuNyksIHJnYmEoMC43LCAwLjcsIDAuNywgMC43KSk7XCJcbiAgICBAY2xpY2s6b3V0c2lkZT1cImhhbmRsZUNsaWNrT3V0c2lkZVwiPlxuICAgIDx2LWNvbnRhaW5lcj5cbiAgICAgIDx2LWNhcmQgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIiBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDEwcHg7XCI+XG4gICAgICAgIDx2LWNhcmQtdGl0bGUgY2xhc3M9XCJwYi0wIG92ZXJsYXktaGVhZGVyXCI+XG4gICAgICAgICAgPCEtLSDinIUgTlVFVk86IExheW91dCBtZWpvcmFkbyBjb24gZ3JpZCAtLT5cbiAgICAgICAgICA8di1yb3cgY2xhc3M9XCJtYS0wIHBhLTAgYWxpZ24tY2VudGVyXCI+XG4gICAgICAgICAgICA8IS0tIFTDrXR1bG8gLSBvY3VwYSBtw6FzIGVzcGFjaW8geSBzZSBhanVzdGEgLS0+XG4gICAgICAgICAgICA8di1jb2wgY29scz1cIjEwXCIgc209XCIxMVwiIGNsYXNzPVwicGEtMFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBvdmVybGF5LXRpdGxlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDx2LWljb24gY2xhc3M9XCJ0aXRsZS1pY29uXCI+bWRpLXBsdXM8L3YtaWNvbj5cbiAgICAgICAgICAgICAgICA8YiBjbGFzcz1cInVuc2VsZWN0YWJsZSBvdmVybGF5LXRpdGxlLXRleHRcIj57eyB0aXRsZSB9fTwvYj5cbiAgICAgICAgICAgICAgICA8IS0tIOKchSBDQU1CSU86IFRvb2x0aXAgcGVnYWRvIGFsIHRleHRvLCBzaW4gZXNwYWNpbyBleHRyYSAtLT5cbiAgICAgICAgICAgICAgICA8di10b29sdGlwIG9wZW4tb24tY2xpY2sgbm8tY2xpY2stYW5pbWF0aW9uPlxuICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDphY3RpdmF0b3I9XCJ7IHByb3BzIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHYtYnRuIHYtYmluZD1cInByb3BzXCIgdGV4dCBjbGFzcz1cImluZm8tYnRuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHYtaWNvbiBjb2xvcj1cInByaW1hcnlcIiBzbWFsbD5tZGktaW5mb3JtYXRpb24tb3V0bGluZTwvdi1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L3YtYnRuPlxuICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2x0aXAtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgICAgICAgIDxoNj48di1pY29uPm1kaS1pbmZvcm1hdGlvbjwvdi1pY29uPiB7eyB0aXRsZSB9fTwvaDY+XG4gICAgICAgICAgICAgICAgICAgIDxocj5cbiAgICAgICAgICAgICAgICAgICAgPHA+e3sgZHluYW1pY0luZm8gfX08L3A+IFxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC92LXRvb2x0aXA+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC92LWNvbD5cblxuICAgICAgICAgICAgPCEtLSBCb3TDs24gY2VycmFyIC0gY29sdW1uYSBwZXF1ZcOxYSBhIGxhIGRlcmVjaGEgLS0+XG4gICAgICAgICAgICA8di1jb2wgY29scz1cIjJcIiBzbT1cIjFcIiBjbGFzcz1cInBhLTAgdGV4dC1yaWdodFwiPlxuICAgICAgICAgICAgICA8di1idG4gaWNvbiBjbGFzcz1cImNsb3NlQnV0dG9uXCIgQGNsaWNrPVwib3ZlcmxheSA9IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgPHYtaWNvbj5tZGktY2xvc2U8L3YtaWNvbj5cbiAgICAgICAgICAgICAgPC92LWJ0bj5cbiAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgPC92LXJvdz5cbiAgICAgICAgICA8aHIgY2xhc3M9XCJvdmVybGF5LWRpdmlkZXJcIj5cbiAgICAgICAgPC92LWNhcmQtdGl0bGU+XG4gICAgICAgIFxuICAgICAgICA8IS0tIEFxdWkgdmFuIG1vbnRhZG9zIGxhcyBvdmVybGF5IGRpbmFtaWNhcyAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiIEBzYXZlZD1cImhhbmRsZVNhdmVkXCI+XG4gICAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgPC92LWNhcmQ+XG4gICAgPC92LWNvbnRhaW5lcj5cbiAgPC92LW92ZXJsYXk+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgdXNlT3ZlcmxheUNvbnRlbnQgfSBmcm9tICdAL3N0b3Jlcy9vdmVybGF5Q29udGVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAnc2F2ZWQnXSxcbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbm90aWZ5T3ZlcmxheVNhdmVkOiB0aGlzLmhhbmRsZVNhdmVkXG4gICAgfTtcbiAgfSxcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3ZlcmxheTogZmFsc2UsXG4gICAgICBkeW5hbWljSW5mbzogJycsXG4gICAgfTtcbiAgfSxcbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIGFjdGl2YXRvcjogU3RyaW5nLFxuICAgIHRpdGxlOiBTdHJpbmcsXG4gICAgaW5mbzogU3RyaW5nLFxuICAgIHByb2dyYW1tZXJSZWY6IFN0cmluZyxcbiAgICBzY3JpbToge1xuICAgICAgdHlwZTogW0Jvb2xlYW4sIFN0cmluZ10sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBwZXJzaXN0ZW50OiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZShuVmFsKSB7XG4gICAgICB0aGlzLm92ZXJsYXkgPSBuVmFsO1xuICAgIH0sXG4gICAgb3ZlcmxheShuVmFsKSB7XG4gICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIG5WYWwpO1xuICAgIH0sXG4gICAgcHJvZ3JhbW1lclJlZihuZXdSZWYpIHtcbiAgICAgIHRoaXMuZmV0Y2hPdmVybGF5Q29udGVudChuZXdSZWYpO1xuICAgIH0sXG4gIH0sXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5vdmVybGF5ID0gdGhpcy5tb2RlbFZhbHVlO1xuICAgIHRoaXMuZmV0Y2hPdmVybGF5Q29udGVudCh0aGlzLnByb2dyYW1tZXJSZWYpO1xuICB9LFxuICBtZXRob2RzOiB7XG4gICAgYXN5bmMgZmV0Y2hPdmVybGF5Q29udGVudChwcm9ncmFtbWVyUmVmKSB7XG4gICAgICBjb25zdCBvdmVybGF5U3RvcmUgPSB1c2VPdmVybGF5Q29udGVudCgpO1xuICAgICAgY29uc3QgZmV0Y2hlZEluZm8gPSBhd2FpdCBvdmVybGF5U3RvcmUuZmV0Y2hDb250ZW50KHByb2dyYW1tZXJSZWYpO1xuICAgICAgdGhpcy5keW5hbWljSW5mbyA9IGZldGNoZWRJbmZvO1xuICAgIH0sXG4gICAgaGFuZGxlQ2xpY2tPdXRzaWRlKCkge1xuICAgICAgaWYgKCF0aGlzLnBlcnNpc3RlbnQpIHtcbiAgICAgICAgdGhpcy5vdmVybGF5ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVTYXZlZChwYXlsb2FkKSB7XG4gICAgICB0aGlzLiRlbWl0KCdzYXZlZCcsIHBheWxvYWQpO1xuICAgIH1cbiAgfSxcbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMub3ZlcmxheSA9IGZhbHNlO1xuICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgZmFsc2UpO1xuICB9XG59O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG4vKiBFc3RpbG9zIHBvciBkZWZlY3RvIChkZXNrdG9wKSAqL1xuLm92ZXJsYXktaGVhZGVyIHtcbiAgcGFkZGluZzogMTZweDtcbn1cblxuLyog4pyFIENMQVZFOiBTaW4gZmxleC13cmFwIHBhcmEgcXVlIHNlIG1hbnRlbmdhbiBlbiBsw61uZWEgKi9cbi5vdmVybGF5LXRpdGxlLWNvbnRhaW5lciB7XG4gIGdhcDogNHB4OyAvKiDinIUgR2FwIHJlZHVjaWRvIHBhcmEgcXVlIGVzdMOpbiBtw6FzIHBlZ2Fkb3MgKi9cbiAgZmxleC13cmFwOiBub3dyYXA7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi50aXRsZS1pY29uIHtcbiAgZm9udC1zaXplOiAyNHB4O1xuICBmbGV4LXNocmluazogMDtcbiAgbWFyZ2luLXJpZ2h0OiA0cHg7IC8qIOKchSBQZXF1ZcOxbyBtYXJnZW4gZW50cmUgaWNvbm8geSB0ZXh0byAqL1xufVxuXG4ub3ZlcmxheS10aXRsZS10ZXh0IHtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG4gIGZsZXg6IDAgMSBhdXRvOyAvKiDinIUgQ0FNQklPOiBObyBvY3VwYSB0b2RvIGVsIGVzcGFjaW8sIHNvbG8gZWwgbmVjZXNhcmlvICovXG4gIG1pbi13aWR0aDogMDtcbn1cblxuLmluZm8tYnRuIHtcbiAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDtcbiAgbWluLXdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7XG4gIHBhZGRpbmc6IDRweCAhaW1wb3J0YW50O1xuICBtYXJnaW4tbGVmdDogMHB4ICFpbXBvcnRhbnQ7IC8qIOKchSBTaW4gbWFyZ2VuIGl6cXVpZXJkbyBwYXJhIHBlZ2FybG8gYWwgdGV4dG8gKi9cbiAgZmxleC1zaHJpbms6IDA7XG59XG5cbi5jbG9zZUJ1dHRvbiB7XG4gIHdpZHRoOiA0MHB4O1xuICBoZWlnaHQ6IDQwcHg7XG59XG5cbi5vdmVybGF5LWRpdmlkZXIge1xuICBtYXJnaW4tdG9wOiAxMnB4O1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG4vKiDinIUgTU9CSUxFIC0gVG9kbyBtw6FzIGNvbXBhY3RvICovXG5AbWVkaWEgKG1heC13aWR0aDogNTI1cHgpIHtcbiAgLm92ZXJsYXktaGVhZGVyIHtcbiAgICBwYWRkaW5nOiA4cHggMTJweCAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm92ZXJsYXktdGl0bGUtY29udGFpbmVyIHtcbiAgICBnYXA6IDJweDsgLyog4pyFIEHDum4gbcOhcyBwZWdhZG9zIGVuIG3Ds3ZpbCAqL1xuICB9XG5cbiAgLyogSWNvbm8gbcOhcyBwZXF1ZcOxbyAqL1xuICAudGl0bGUtaWNvbiB7XG4gICAgZm9udC1zaXplOiAxOHB4ICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAycHggIWltcG9ydGFudDtcbiAgfVxuXG4gIC8qIFTDrXR1bG8gbcOhcyBwZXF1ZcOxbyAqL1xuICAub3ZlcmxheS10aXRsZS10ZXh0IHtcbiAgICBmb250LXNpemU6IDEuMXJlbSAhaW1wb3J0YW50O1xuICAgIGxpbmUtaGVpZ2h0OiAxLjIgIWltcG9ydGFudDtcbiAgfVxuXG4gIC8qIEJvdMOzbiBkZSBpbmZvIG3DoXMgcGVxdWXDsW8gKi9cbiAgLmluZm8tYnRuIHtcbiAgICBtaW4td2lkdGg6IDI4cHggIWltcG9ydGFudDtcbiAgICB3aWR0aDogMjhweCAhaW1wb3J0YW50O1xuICAgIGhlaWdodDogMjhweCAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmc6IDJweCAhaW1wb3J0YW50O1xuICAgIG1hcmdpbi1sZWZ0OiAwcHggIWltcG9ydGFudDtcbiAgfVxuXG4gIC5pbmZvLWJ0biAudi1pY29uIHtcbiAgICBmb250LXNpemU6IDE2cHggIWltcG9ydGFudDtcbiAgfVxuXG4gIC8qIEJvdMOzbiBjZXJyYXIgbcOhcyBwZXF1ZcOxbyAqL1xuICAuY2xvc2VCdXR0b24ge1xuICAgIHdpZHRoOiAzMnB4ICFpbXBvcnRhbnQ7XG4gICAgaGVpZ2h0OiAzMnB4ICFpbXBvcnRhbnQ7XG4gICAgbWluLXdpZHRoOiAzMnB4ICFpbXBvcnRhbnQ7XG4gIH1cblxuICAuY2xvc2VCdXR0b24gLnYtaWNvbiB7XG4gICAgZm9udC1zaXplOiAyMHB4ICFpbXBvcnRhbnQ7XG4gIH1cblxuICAvKiBEaXZpc29yIG3DoXMgY29tcGFjdG8gKi9cbiAgLm92ZXJsYXktZGl2aWRlciB7XG4gICAgbWFyZ2luLXRvcDogOHB4O1xuICB9XG5cbiAgLyogUmVkdWNpciBwYWRkaW5nIGRlbCBjYXJkICovXG4gIDpkZWVwKC52LWNhcmQpIHtcbiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gIH1cblxuICA6ZGVlcCguY29udGFpbmVyLWZsdWlkKSB7XG4gICAgcGFkZGluZzogOHB4ICFpbXBvcnRhbnQ7XG4gIH1cbn1cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICAgIDx2LWZvcm0gQHN1Ym1pdC5wcmV2ZW50PVwiaGFuZGxlU3VibWl0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlYWJsZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbnRlciBtdC0xXCI+XG4gICAgICAgICAgICAgICAgPGgzPjxiPk1pcyBiYW5jb3M8L2I+PC9oMz5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPHYtYnRuIGljb24gY2xhc3M9XCJ0ZXh0LXdoaXRlIHBsdXMtYnRuXCIgOmRpc2FibGVkPVwiIWlzUHJvZmlsZUVkaXRhYmxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDx2LWljb24+bWRpLXBsdXM8L3YtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPE92ZXJsYXkgdGl0bGU9XCJDcmVhciBjdWVudGEgYmFuY2FyaWFcIiBhY3RpdmF0b3I9XCJwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW1tZXJSZWY9XCJiYW5rLWFjY291bnQtcnVsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cInNob3dDcmVhdGVBY2NvdW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q3JlYXRlQmFua0FjY291bnQgQGJhbmtBY2NvdW50Q3JlYXRlZD1cImhhbmRsZUJhbmtBY2NvdW50Q3JlYXRlZFwiPjwvQ3JlYXRlQmFua0FjY291bnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvT3ZlcmxheT5cbiAgICAgICAgICAgICAgICA8L3YtYnRuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPHYtZXhwYW5zaW9uLXBhbmVscyB2LW1vZGVsPVwib3BlblBhbmVsXCI+XG4gICAgICAgICAgICAgICAgPHYtZXhwYW5zaW9uLXBhbmVsIHYtZm9yPVwiKGJhbmtBY2NvdW50LCBpbmRleCkgaW4gYmFua0FjY291bnRzXCIgOmtleT1cImJhbmtBY2NvdW50LmlkIHx8IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgOmNsYXNzPVwieyAncHJpbWFyeS1iYW5rJzogYmFua0FjY291bnQuaXNNYWluQmFua0FjY291bnQgfVwiPlxuICAgICAgICAgICAgICAgICAgICA8di1leHBhbnNpb24tcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8di1yb3cgY2xhc3M9XCJhbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1jb2wgY2xhc3M9XCJmbGV4LXNocmluay0wXCIgY29scz1cImF1dG9cIiB2LWlmPVwiYmFua0FjY291bnQuaXNNYWluQmFua0FjY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtaWNvbiBjb2xvcj1cInByaW1hcnlcIj5tZGktc3Rhcjwvdi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1jb2w+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1jb2w+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhbmNvIHt7IGluZGV4ICsgMSB9fToge3sgYmFua0FjY291bnQuYmFua05hbWUgfHwgXCJTaW4gTm9tYnJlXCIgfX0gLSB7eyBiYW5rQWNjb3VudC5hY2NvdW50UmVmZXJlbmNlTmFtZSB8fCBcIlwiIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1yb3c+XG4gICAgICAgICAgICAgICAgICAgIDwvdi1leHBhbnNpb24tcGFuZWwtdGl0bGU+XG5cbiAgICAgICAgICAgICAgICAgICAgPHYtZXhwYW5zaW9uLXBhbmVsLXRleHQgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkVsaW1pbmFyIGVzdGUgYmFuY288L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtYnRuIGljb24gY2xhc3M9XCJidG4gcm91bmRlZC0yIG14LTNcIiBAY2xpY2s9XCJkZWxldGVCYW5rQWNjb3VudEhhbmRsZXIoYmFua0FjY291bnQpXCIgOmRpc2FibGVkPVwiIWlzUHJvZmlsZUVkaXRhYmxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWljb24gY29sb3I9XCJkYW5nZXJcIj5tZGktdHJhc2gtY2FuPC92LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92LWJ0bj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHYtY2FyZC10ZXh0IGNsYXNzPVwibS0wIHAtMFwiIHN0eWxlPVwibWluLXdpZHRoOiAzMHZ3O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1ncmV5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBsZXRhIGxhIGluZm9ybWFjacOzbiBkZSBsb3MgY2FtcG9zIHBhcmEgYcOxYWRpciBsYSBjdWVudGEgYmFuY2FyaWEuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtcm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1jb2wgY29scz1cIjEyXCIgbWQ9XCI2XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkIHYtbW9kZWw9XCJiYW5rQWNjb3VudC5hY2NvdW50UmVmZXJlbmNlTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJOb21icmUgUmVmZXJlbmNpYVwiIHJlcXVpcmVkIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVuc2l0eT1cImNvbWZvcnRhYmxlXCIgOmRpc2FibGVkPVwiIWlzUHJvZmlsZUVkaXRhYmxlXCI+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIiBtZD1cIjZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RvciBzZWxlY3Rvci10eXBlPVwiQmFua09wdGlvbnNcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkJhbmNvXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cImJhbmtBY2NvdW50LmJhbmtOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cIiFpc1Byb2ZpbGVFZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1yb3c+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1yb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIiBtZD1cIjZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgdi1tb2RlbD1cImJhbmtBY2NvdW50LmRhaWx5TGltaXRcIiBsYWJlbD1cIkzDrW1pdGUgZGlhcmlvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCIgdmFyaWFudD1cIm91dGxpbmVkXCIgZGVuc2l0eT1cImNvbWZvcnRhYmxlXCIgOmRpc2FibGVkPVwiIWlzUHJvZmlsZUVkaXRhYmxlXCI+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIiBtZD1cIjZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgdi1tb2RlbD1cImJhbmtBY2NvdW50LnRvdGFsTGl2aW5nRGVidExpbWl0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkzDrW1pdGUgdG90YWwgZGUgZGV1ZGEgdml2YVwiIHR5cGU9XCJudW1iZXJcIiB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbnNpdHk9XCJjb21mb3J0YWJsZVwiIDpkaXNhYmxlZD1cIiFpc1Byb2ZpbGVFZGl0YWJsZVwiPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1yb3c+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1yb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIiBtZD1cIjZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LXNlbGVjdCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bW9kZWwtdmFsdWU9XCJnZXRUcmVhc3VyeVR5cGUoYmFua0FjY291bnQpXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOml0ZW1zPVwiQkFOS19PUFRJT05TLlRSRUFTVVJZX1RZUEVTXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIlRpcG8gZGUgVGVzb3JlcsOtYVwiIHJlcXVpcmVkIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVuc2l0eT1cImNvbWZvcnRhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdXBkYXRlOm1vZGVsLXZhbHVlPVwiaGFuZGxlVHJlYXN1cnlDaGFuZ2UoJGV2ZW50LCBiYW5rQWNjb3VudCwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCIhaXNQcm9maWxlRWRpdGFibGVcIj48L3Ytc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1jb2wgY29scz1cIjEyXCIgbWQ9XCI2XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0b3Igc2VsZWN0b3ItdHlwZT1cIk91dHB1dEZpbGVzXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJGaWNoZXJvIGRlIFNhbGlkYVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJiYW5rQWNjb3VudC5vdXRwdXRGaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cIiFpc1Byb2ZpbGVFZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1yb3c+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1yb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgdi1tb2RlbD1cImJhbmtBY2NvdW50LmliYW5OdW1iZXJcIiBsYWJlbD1cIkN1ZW50YSBJQkFOXCIgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIiBkZW5zaXR5PVwiY29tZm9ydGFibGVcIiA6ZGlzYWJsZWQ9XCIhaXNQcm9maWxlRWRpdGFibGVcIj48L3YtdGV4dC1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Ytcm93PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtcm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1jb2wgY29scz1cIjEyXCIgbWQ9XCI4XCIgc3R5bGU9XCJwYWRkaW5nOjBweDsgbWFyZ2luOjBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWNoZWNrYm94IHYtbW9kZWw9XCJiYW5rQWNjb3VudC5pc1NlZmlkZUJhbmtBY2NvdW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIsK/Q3VlbnRhIEJhbmNhcmlhIGRlIFNFRklERT9cIiBkZW5zaXR5PVwiY29tZm9ydGFibGVcIiA6ZGlzYWJsZWQ9XCIhaXNQcm9maWxlRWRpdGFibGVcIj48L3YtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIiBtZD1cIjhcIiB2LWlmPVwiYmFua0FjY291bnQuaXNTZWZpZGVCYW5rQWNjb3VudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZCB2LW1vZGVsPVwiYmFua0FjY291bnQuc2VmaWRlSWRcIiBsYWJlbD1cIklEIGRlIFNFRklERVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCIgZGVuc2l0eT1cImNvbWZvcnRhYmxlXCIgOmRpc2FibGVkPVwiIWlzUHJvZmlsZUVkaXRhYmxlXCI+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92LXJvdz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LXJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtY29sIGNvbHM9XCIxMlwiIHN0eWxlPVwicGFkZGluZzowcHg7IG1hcmdpbjowcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1jaGVja2JveCB2LW1vZGVsPVwiYmFua0FjY291bnQuaXNNYWluQmFua0FjY291bnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiwr9FcyBDdWVudGEgQmFuY2FyaWEgcHJpbmNpcGFsP1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVuc2l0eT1cImNvbWZvcnRhYmxlXCIgOmRpc2FibGVkPVwiIWlzUHJvZmlsZUVkaXRhYmxlXCI+PC92LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1yb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3YtY2FyZC10ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L3YtZXhwYW5zaW9uLXBhbmVsLXRleHQ+XG4gICAgICAgICAgICAgICAgPC92LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgICAgIDwvdi1leHBhbnNpb24tcGFuZWxzPlxuXG4gICAgICAgICAgICA8aHI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBcbiAgICAgICAgPCEtLSDinIUgQm90w7NuIGRlIGd1YXJkYXIgRlVFUkEgZGVsIHNjcm9sbGVhYmxlLCBpZ3VhbCBxdWUgRWRpdFByb2ZpbGUgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgIDx2LWJ0biBjbGFzcz1cInRleHQtd2hpdGUgbWItMiBtdC00IG14LWF1dG8gYWRkLXRlbXBsYXRlcy1idXR0b25cIiB0eXBlPVwic3VibWl0XCIgOmRpc2FibGVkPVwiIWlzUHJvZmlsZUVkaXRhYmxlXCI+QWN0dWFsaXphcjwvdi1idG4+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvdi1mb3JtPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBNb3JlSW5mbyBmcm9tICcuL01vcmVJbmZvLnZ1ZSc7XG5pbXBvcnQgQ3JlYXRlQmFua0FjY291bnQgZnJvbSBcIi4vQ3JlYXRlQmFua0FjY291bnQudnVlXCI7XG5pbXBvcnQgT3ZlcmxheSBmcm9tIFwiLi9PdmVybGF5LnZ1ZVwiO1xuaW1wb3J0IHsgdXNlQmFua0FjY291bnRTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9iYW5rQWNjb3VudCdcbmltcG9ydCB7IEJhbmtBY2NvdW50SW1wbCB9IGZyb20gJy4uL3NlcnZpY2VzL3R5cGVzL2ltcGxlbWVudGF0aW9ucy50cyc7XG5pbXBvcnQgeyB1c2VFbnRpdHkgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb21wb3NhYmxlcy91c2VFbnRpdHknO1xuaW1wb3J0IHsgQmFua0FjY291bnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvaW1wbGVtZW50YXRpb25zL2JhbmtBY2NvdW50L2JhbmtBY2NvdW50U2VydmljZS50cyc7XG5pbXBvcnQgeyBCQU5LX09QVElPTlMgfSBmcm9tICcuLi9zZXJ2aWNlcy90eXBlcy9jb21tb24nO1xuaW1wb3J0IHsgY29tcHV0ZWQsIHJlZiB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgU3dhbCBmcm9tICdzd2VldGFsZXJ0Mic7XG5pbXBvcnQgeyB1c2VHbG9iYWxVdGlscyB9IGZyb20gJ0AvdXRpbHMvZ2xvYmFscyc7XG5pbXBvcnQgU2VsZWN0b3IgZnJvbSAnLi9TZWxlY3Rvci52dWUnO1xuaW1wb3J0IHsgdXNlQXV0aFN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL2F1dGgnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBNb3JlSW5mbyxcbiAgICAgICAgQ3JlYXRlQmFua0FjY291bnQsXG4gICAgICAgIE92ZXJsYXksXG4gICAgICAgIFNlbGVjdG9yXG4gICAgfSxcbiAgICBcbiAgICBzZXR1cCgpIHtcbiAgICAgICAgY29uc3QgeyB0b2FzdCB9ID0gdXNlR2xvYmFsVXRpbHMoKTtcbiAgICAgICAgY29uc3QgYmFua0FjY291bnRTdG9yZSA9IHVzZUJhbmtBY2NvdW50U3RvcmUoKTtcbiAgICAgICAgY29uc3QgYXV0aFN0b3JlID0gdXNlQXV0aFN0b3JlKCk7XG4gICAgICAgIGNvbnN0IHsgZW50aXR5OiBiYW5rQWNjb3VudEJhc2UsIGRlbGV0ZUVudGl0eTogZGVsZXRlQmFua0FjY291bnQgfSA9IHVzZUVudGl0eShCYW5rQWNjb3VudEltcGwsIGJhbmtBY2NvdW50U3RvcmUpO1xuXG4gICAgICAgIGNvbnN0IGJhbmtBY2NvdW50cyA9IGNvbXB1dGVkKCgpID0+IGJhbmtBY2NvdW50U3RvcmUuZ2V0QmFua0FjY291bnRzKTtcbiAgICAgICAgY29uc3QgaXNQcm9maWxlRWRpdGFibGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgICAgICAvLyBDTElFTlRTIChST0xFX0NMSUVOVEUpIGNhbiBBTFdBWVMgZWRpdCB0aGVpciBiYW5rIGFjY291bnRzXG4gICAgICAgICAgICAvLyBUaGlzIHJlc3RyaWN0aW9uIG9ubHkgYXBwbGllcyB0byBwcm92aWRlcnNcbiAgICAgICAgICAgIGlmIChhdXRoU3RvcmUuaXNDbGllbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhdXRoU3RvcmUudXNlcj8uaXNQcm9maWxlRWRpdGFibGUgPz8gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBvcGVuUGFuZWwgPSByZWYoMClcbiAgICAgICAgY29uc3QgaXNTZWZpZGVBY2NvdW50RW5hYmxlZCA9IHJlZihmYWxzZSlcbiAgICAgICAgY29uc3Qgc2hvd0NyZWF0ZUFjY291bnQgPSByZWYoZmFsc2UpXG5cbiAgICAgICAgY29uc3QgY29uZmlybVJ1bGUgPSBbXG4gICAgICAgICAgICB2ID0+ICEhdiB8fCAnRXN0ZSBkYXRvIGVzIHJlcXVlcmlkbycsXG4gICAgICAgICAgICB2ID0+ICh2ICYmIHYubGVuZ3RoID49IDIpIHx8ICdFc3RlIGRhdG8gZGViZSB0ZW5lciBtYXMgY2FyYWN0ZXJlcy4nLFxuICAgICAgICBdO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBiYW5rQWNjb3VudFN0b3JlLFxuICAgICAgICAgICAgY29uZmlybVJ1bGUsXG4gICAgICAgICAgICBiYW5rQWNjb3VudHMsXG4gICAgICAgICAgICBCQU5LX09QVElPTlMsXG4gICAgICAgICAgICBvcGVuUGFuZWwsXG4gICAgICAgICAgICBiYW5rQWNjb3VudEJhc2UsXG4gICAgICAgICAgICBpc1NlZmlkZUFjY291bnRFbmFibGVkLFxuICAgICAgICAgICAgc2hvd0NyZWF0ZUFjY291bnQsXG4gICAgICAgICAgICB0b2FzdCxcbiAgICAgICAgICAgIGRlbGV0ZUJhbmtBY2NvdW50LFxuICAgICAgICAgICAgaXNQcm9maWxlRWRpdGFibGVcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgZ2V0VHJlYXN1cnlUeXBlKGJhbmtBY2NvdW50KSB7XG4gICAgICAgICAgICBpZiAoYmFua0FjY291bnQub3duVHJlYXN1cnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJQcm9waWFcIjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYmFua0FjY291bnQuZXh0ZXJuYWxUcmVhc3VyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIkRlIHRlcmNlcm9zXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSxcblxuICAgICAgICBoYW5kbGVUcmVhc3VyeUNoYW5nZSh2YWx1ZSwgYmFua0FjY291bnQsIGluZGV4KSB7XG4gICAgICAgICAgICBiYW5rQWNjb3VudC5vd25UcmVhc3VyeSA9IGZhbHNlO1xuICAgICAgICAgICAgYmFua0FjY291bnQuZXh0ZXJuYWxUcmVhc3VyeSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IFwiUHJvcGlhXCIpIHtcbiAgICAgICAgICAgICAgICBiYW5rQWNjb3VudC5vd25UcmVhc3VyeSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIkRlIHRlcmNlcm9zXCIpIHtcbiAgICAgICAgICAgICAgICBiYW5rQWNjb3VudC5leHRlcm5hbFRyZWFzdXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBkZWxldGVCYW5rQWNjb3VudEhhbmRsZXIoYmFua0FjY291bnQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVCYW5rQWNjb3VudChiYW5rQWNjb3VudCk7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKCdCYW5jbyBlbGltaW5hZG8gY29ycmVjdGFtZW50ZScpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBhbCBlbGltaW5hciBiYW5jbzonLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5lcnJvcignRXJyb3IgYWwgZWxpbWluYXIgZWwgYmFuY286ICcgKyAoZXJyb3IucmVzcG9uc2U/LmRhdGE/Lm1lc3NhZ2UgfHwgZXJyb3IubWVzc2FnZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIGhhbmRsZUJhbmtBY2NvdW50Q3JlYXRlZCgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCfinIUgTnVldm8gYmFuY28gY3JlYWRvIC0gcmVmcmVzY2FuZG8gbGlzdGEgeSBjZXJyYW5kbyBvdmVybGF5Li4uJyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYmFua0FjY291bnRTdG9yZS5mZXRjaEFsbCgpO1xuICAgICAgICAgICAgdGhpcy5zaG93Q3JlYXRlQWNjb3VudCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKCdMaXN0YSBkZSBiYW5jb3MgYWN0dWFsaXphZGEnKTtcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBoYW5kbGVTdWJtaXQoKSB7XG4gICAgICAgICAgICBjb25zdCB0b3QgPSB0aGlzLmJhbmtBY2NvdW50cy5sZW5ndGg7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmJhbmtBY2NvdW50cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYW5rQWNjb3VudCA9IHRoaXMuYmFua0FjY291bnRzW2luZGV4XTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCBjbGVhbkJhbmtBY2NvdW50ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShiYW5rQWNjb3VudCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhbmtBY2NvdW50U2VydmljZSA9IG5ldyBCYW5rQWNjb3VudFNlcnZpY2UoY2xlYW5CYW5rQWNjb3VudCk7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgdGhpcy5jcmVhdGVHZW5lcmljKGJhbmtBY2NvdW50U2VydmljZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoYEJhbmNvICR7aW5kZXggKyAxfS8ke3RvdH0gZ3VhcmRhZG9gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGd1YXJkYW5kbyBiYW5jbyAke2luZGV4ICsgMX06YCwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LmVycm9yKGBFcnJvciBndWFyZGFuZG8gYmFuY28gJHtpbmRleCArIDF9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRW1pdGlyIGV2ZW50byBhbCBmaW5hbGl6YXIgcGFyYSBjZXJyYXIgZWwgb3ZlcmxheVxuICAgICAgICAgICAgdGhpcy4kZW1pdCgnc2F2ZWQnKTtcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbjwvc2NyaXB0PlxuXG48c3R5bGU+XG4ucHJpbWFyeS1iYW5rIHtcbiAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCByZ2IodmFyKC0tdi10aGVtZS1wcmltYXJ5KSkgIWltcG9ydGFudDtcbn1cblxuLnYtZXhwYW5zaW9uLXBhbmVsIHtcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xufVxuPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG4gICAgPHYtZm9ybSByZWY9XCJmb3JtUmVmXCIgQHN1Ym1pdC5wcmV2ZW50PVwiaGFuZGxlU3VibWl0XCIgdmFsaWRhdGUtb249XCJibHVyIGxhenlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVhYmxlXCI+XG5cbiAgICAgICAgICAgIDwhLS0gQWxlcnQgcGFyYSBtb3N0cmFyIGVycm9yZXMgLS0+XG4gICAgICAgICAgICA8di1hbGVydFxuICAgICAgICAgICAgICAgIHYtaWY9XCJlcnJvck1lc3NhZ2VzLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJlcnJvclwiXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cInRvbmFsXCJcbiAgICAgICAgICAgICAgICBjbG9zYWJsZVxuICAgICAgICAgICAgICAgIEBjbGljazpjbG9zZT1cImNsZWFyRXJyb3JzXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlLTIgbWItMlwiPlBvciBmYXZvciwgY29ycmlqYSBsb3Mgc2lndWllbnRlcyBlcnJvcmVzOjwvZGl2PlxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImVycm9yLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxpIHYtZm9yPVwiKGVycm9yLCBpbmRleCkgaW4gZXJyb3JNZXNzYWdlc1wiIDprZXk9XCJpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZXJyb3IgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC92LWFsZXJ0PlxuXG4gICAgICAgICAgICA8TW9yZUluZm8gdGl0bGU9XCJEZXRhbGxlcyBkZSBsYSBjdWVudGFcIlxuICAgICAgICAgICAgICAgICAgICBpbmZvPVwiQ29tcGxldGEgbGEgaW5mb3JtYWNpw7NuIGRlIGxvcyBjYW1wb3Mgc2l0dWFkb3MgYSBjb250aW51YWNpw7NuIGNvbiBsb3MgZGV0YWxsZXMgZGUgbGEgY3VlbnRhIGJhbmNhcmlhLlwiXG4gICAgICAgICAgICAgICAgPjwvTW9yZUluZm8+XG4gICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICA8di1yb3c+XG4gICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZFxuICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIiogSUJBTlwiXG4gICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJiYW5rQWNjb3VudC5pYmFuTnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgOnJ1bGVzPVwiaWJhblJ1bGVzXCJcbiAgICAgICAgICAgICAgICAgICAgOmVycm9yLW1lc3NhZ2VzPVwiZmllbGRFcnJvcnMuaWJhbk51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgIEBpbnB1dD1cImNsZWFyRmllbGRFcnJvcignaWJhbk51bWJlcicpXCJcbiAgICAgICAgICAgICAgICAgICAgY291bnRlcj1cIjM0XCJcbiAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMzRcIlxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgID48L3YtdGV4dC1maWVsZD5cblxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGRcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJCSUMvU1dJRlRcIlxuICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiYmFua0FjY291bnQuYmljTnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgOnJ1bGVzPVwiYmljUnVsZXNcIlxuICAgICAgICAgICAgICAgICAgICA6ZXJyb3ItbWVzc2FnZXM9XCJmaWVsZEVycm9ycy5iaWNOdW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICBAaW5wdXQ9XCJjbGVhckZpZWxkRXJyb3IoJ2JpY051bWJlcicpXCJcbiAgICAgICAgICAgICAgICAgICAgY291bnRlcj1cIjExXCJcbiAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTFcIlxuICAgICAgICAgICAgICAgICAgICBoaW50PVwiQ8OzZGlnbyBCSUMvU1dJRlQgKDggdSAxMSBjYXJhY3RlcmVzKVwiXG4gICAgICAgICAgICAgICAgPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGRcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCIqIFRpdHVsYXJcIlxuICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiYmFua0FjY291bnQudGl0dWxhck5hbWVcIlxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgICAgICAgICAgICAgICA6cnVsZXM9XCJ0aXR1bGFyUnVsZXNcIlxuICAgICAgICAgICAgICAgICAgICA6ZXJyb3ItbWVzc2FnZXM9XCJmaWVsZEVycm9ycy50aXR1bGFyTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIEBpbnB1dD1cImNsZWFyRmllbGRFcnJvcigndGl0dWxhck5hbWUnKVwiXG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXI9XCIyNTVcIlxuICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIyNTVcIlxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgID48L3YtdGV4dC1maWVsZD5cblxuICAgICAgICAgICAgPC92LXJvdz5cbiAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgIDx2LXJvdz5cbiAgICAgICAgICAgICAgICA8Q291bnRyeVNlbGVjdG9yIFxuICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiYmFua0FjY291bnQudGl0dWxhckNvdW50cnlcIiBcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJQYcOtc1wiXG4gICAgICAgICAgICAgICAgICAgIDpydWxlcz1cIltdXCJcbiAgICAgICAgICAgICAgICAgICAgOmVycm9yLW1lc3NhZ2VzPVwiZmllbGRFcnJvcnMudGl0dWxhckNvdW50cnlcIlxuICAgICAgICAgICAgICAgICAgICBAdXBkYXRlOm1vZGVsVmFsdWU9XCJjbGVhckZpZWxkRXJyb3IoJ3RpdHVsYXJDb3VudHJ5JylcIlxuICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiQ2l1ZGFkXCJcbiAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cImJhbmtBY2NvdW50LnRpdHVsYXJDaXR5XCJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgOnJ1bGVzPVwiY2l0eVJ1bGVzXCJcbiAgICAgICAgICAgICAgICAgICAgOmVycm9yLW1lc3NhZ2VzPVwiZmllbGRFcnJvcnMudGl0dWxhckNpdHlcIlxuICAgICAgICAgICAgICAgICAgICBAaW5wdXQ9XCJjbGVhckZpZWxkRXJyb3IoJ3RpdHVsYXJDaXR5JylcIlxuICAgICAgICAgICAgICAgICAgICBjb3VudGVyPVwiMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTAwXCJcbiAgICAgICAgICAgICAgICA+PC92LXRleHQtZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiRGlyZWNjacOzblwiXG4gICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJiYW5rQWNjb3VudC50aXR1bGFyRGlyZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgOnJ1bGVzPVwiZGlyZWN0aW9uUnVsZXNcIlxuICAgICAgICAgICAgICAgICAgICA6ZXJyb3ItbWVzc2FnZXM9XCJmaWVsZEVycm9ycy50aXR1bGFyRGlyZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgQGlucHV0PVwiY2xlYXJGaWVsZEVycm9yKCd0aXR1bGFyRGlyZWN0aW9uJylcIlxuICAgICAgICAgICAgICAgICAgICBjb3VudGVyPVwiMjU1XCJcbiAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMjU1XCJcbiAgICAgICAgICAgICAgICA+PC92LXRleHQtZmllbGQ+XG5cbiAgICAgICAgICAgIDwvdi1yb3c+XG5cbiAgICAgICAgICAgIDxNb3JlSW5mbyB0aXRsZT1cIkNlcnRpZmljYWRvIGRlIHRpdHVsYXJpZGFkXCJcbiAgICAgICAgICAgICAgICBpbmZvPVwiQWRqdW50YSBlbCBjZXJ0aWZpY2FkbyBkZSB0aXR1bGFyaWRhZCBxdWUgbm9zIHBlcm1pdGEgY29tcHJvYmFyIHF1ZSBsYSBjdWVudGEgYmFuY2FyaWEgZXMgdHV5YS4gUHVlZGVzIHN1YmlyIHVubyBvIHZhcmlvcyBhcmNoaXZvcy5cIlxuICAgICAgICAgICAgPjwvTW9yZUluZm8+XG5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHYtY2FyZFxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkFyY2hpdm8ocykgZGUgQ2VydGlmaWNhZG9cIlxuICAgICAgICAgICAgICAgICAgICBzdWJ0aXRsZT1cIlNlbGVjY2lvbmEgdW5vIG8gdmFyaW9zIGFyY2hpdm9zIChQREYsIGltYWdlbiwgZXRjLilcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHYtY2FyZC10ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHYtZmlsZS1pbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiQXJjaGl2b3Mgc2VsZWNjaW9uYWRvc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRGaWxlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlwc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3ctc2l6ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdD1cIi5wZGYsLmpwZywuanBlZywucG5nLC5kb2MsLmRvY3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDplcnJvci1tZXNzYWdlcz1cImZpZWxkRXJyb3JzLm93bmVyc2hpcENlcnRpZmljYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdXBkYXRlOm1vZGVsLXZhbHVlPVwiaGFuZGxlRmlsZXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZC1pY29uPVwibWRpLXBhcGVyY2xpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDpzZWxlY3Rpb249XCJ7IGZpbGVOYW1lcyB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWNoaXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtZm9yPVwiKGZpbGVOYW1lLCBpbmRleCkgaW4gZmlsZU5hbWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9XCJpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWUtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmaWxlTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3YtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC92LWZpbGUtaW5wdXQ+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTGlzdGEgZGUgYXJjaGl2b3MgZXhpc3RlbnRlcyAoc2kgZXN0YW1vcyBlZGl0YW5kbykgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9XCJleGlzdGluZ0ZpbGVzLmxlbmd0aCA+IDBcIiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1kaXZpZGVyIGNsYXNzPVwibWItM1wiPjwvdi1kaXZpZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlLTIgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1pY29uPm1kaS1maWxlLWNoZWNrPC92LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyY2hpdm9zIHlhIHN1Ymlkb3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtbGlzdCBkZW5zaXR5PVwiY29tcGFjdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1saXN0LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtZm9yPVwiKGZpbGUsIGluZGV4KSBpbiBleGlzdGluZ0ZpbGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9XCJpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTIgcGEtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDpwcmVwZW5kPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWljb24gOmNvbG9yPVwiZ2V0RmlsZUljb24oZmlsZSkuY29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0RmlsZUljb24oZmlsZSkuaWNvbiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtbGlzdC1pdGVtLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldEZpbGVOYW1lKGZpbGUpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3YtbGlzdC1pdGVtLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1saXN0LWl0ZW0tc3VidGl0bGUgdi1pZj1cImdldEZpbGVTaXplKGZpbGUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0RmlsZVNpemUoZmlsZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1saXN0LWl0ZW0tc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LXNsb3Q6YXBwZW5kPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWJ0blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwibWRpLWRvd25sb2FkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9XCJkb3dubG9hZEZpbGUoZmlsZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkRlc2NhcmdhciBhcmNoaXZvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92LWJ0bj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1idG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cIm1kaS1kZWxldGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9XCJyZW1vdmVFeGlzdGluZ0ZpbGUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJFbGltaW5hciBhcmNoaXZvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92LWJ0bj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1saXN0LWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92LWxpc3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBJbmZvcm1hY2nDs24gYWRpY2lvbmFsIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHYtYWxlcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiaW5mb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInRvbmFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZW5zaXR5PVwiY29tcGFjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtdC0zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1zbG90OnByZXBlbmQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWljb24+bWRpLWluZm9ybWF0aW9uPC92LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JtYXRvcyBhY2VwdGFkb3M6IFBERiwgSlBHLCBQTkcsIERPQywgRE9DWC4gVGFtYcOxbyBtw6F4aW1vIHBvciBhcmNoaXZvOiAxME1CXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3YtYWxlcnQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdi1jYXJkLXRleHQ+XG4gICAgICAgICAgICAgICAgPC92LWNhcmQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0zIGNlbnRlclwiPlxuICAgICAgICAgICAgPHYtYnRuIFxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC13aGl0ZSBhZGQtdGVtcGxhdGVzLWJ1dHRvblwiIFxuICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgIDpsb2FkaW5nPVwibG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgOmRpc2FibGVkPVwibG9hZGluZ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgaXNFZGl0aW5nID8gJ0FjdHVhbGl6YXInIDogJ0HDsWFkaXInIH19XG4gICAgICAgICAgICA8L3YtYnRuPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L3YtZm9ybT5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjb21wdXRlZCwgcmVmLCByZWFjdGl2ZSwgd2F0Y2ggfSBmcm9tICd2dWUnO1xuaW1wb3J0IE1vcmVJbmZvIGZyb20gJy4vTW9yZUluZm8udnVlJztcbmltcG9ydCB7IHVzZUJhbmtBY2NvdW50U3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvYmFua0FjY291bnQuanMnXG5pbXBvcnQgeyBCYW5rQWNjb3VudEltcGwgfSBmcm9tICcuLi9zZXJ2aWNlcy90eXBlcy9pbXBsZW1lbnRhdGlvbnMnO1xuaW1wb3J0IHsgdXNlRW50aXR5IH0gZnJvbSAnLi4vc2VydmljZXMvY29tcG9zYWJsZXMvdXNlRW50aXR5JztcbmltcG9ydCB7IEJhbmtBY2NvdW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ltcGxlbWVudGF0aW9ucy9iYW5rQWNjb3VudC9iYW5rQWNjb3VudFNlcnZpY2UnO1xuaW1wb3J0IENvdW50cnlTZWxlY3RvciBmcm9tICcuL0NvdW50cnlTZWxlY3Rvci52dWUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBNb3JlSW5mbyxcbiAgICAgICAgQ291bnRyeVNlbGVjdG9yXG4gICAgfSxcbiAgICBzZXR1cCgpIHtcbiAgICAgICAgY29uc3QgZm9ybVJlZiA9IHJlZihudWxsKTtcbiAgICAgICAgY29uc3QgbG9hZGluZyA9IHJlZihmYWxzZSk7XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZXMgPSByZWYoW10pO1xuICAgICAgICBjb25zdCBzZWxlY3RlZEZpbGVzID0gcmVmKFtdKTtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdGaWxlcyA9IHJlZihbXSk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCB7IGVudGl0eTogYmFua0FjY291bnQgfSA9IHVzZUVudGl0eShCYW5rQWNjb3VudEltcGwsIHVzZUJhbmtBY2NvdW50U3RvcmUoKSwgdHJ1ZSk7XG4gICAgICAgIFxuICAgICAgICAvLyBFcnJvcmVzIHBvciBjYW1wb1xuICAgICAgICBjb25zdCBmaWVsZEVycm9ycyA9IHJlYWN0aXZlKHtcbiAgICAgICAgICAgIGliYW5OdW1iZXI6IFtdLFxuICAgICAgICAgICAgYmljTnVtYmVyOiBbXSxcbiAgICAgICAgICAgIHRpdHVsYXJOYW1lOiBbXSxcbiAgICAgICAgICAgIHRpdHVsYXJDb3VudHJ5OiBbXSxcbiAgICAgICAgICAgIHRpdHVsYXJDaXR5OiBbXSxcbiAgICAgICAgICAgIHRpdHVsYXJEaXJlY3Rpb246IFtdLFxuICAgICAgICAgICAgb3duZXJzaGlwQ2VydGlmaWNhdGU6IFtdXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFZhbGlkYXIgZm9ybWF0byBJQkFOXG4gICAgICAgIGNvbnN0IHZhbGlkYXRlSUJBTiA9IChpYmFuKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWliYW4pIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBSZW1vdmVyIGVzcGFjaW9zXG4gICAgICAgICAgICBjb25zdCBjbGVhbklCQU4gPSBpYmFuLnJlcGxhY2UoL1xccy9nLCAnJyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFZlcmlmaWNhciBsb25naXR1ZCAobcOtbmltbyAxNSwgbcOheGltbyAzNClcbiAgICAgICAgICAgIGlmIChjbGVhbklCQU4ubGVuZ3RoIDwgMTUgfHwgY2xlYW5JQkFOLmxlbmd0aCA+IDM0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBWZXJpZmljYXIgcXVlIGVtcGllY2UgY29uIDIgbGV0cmFzIChjw7NkaWdvIHBhw61zKVxuICAgICAgICAgICAgaWYgKCEvXltBLVpdezJ9Ly50ZXN0KGNsZWFuSUJBTikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFZlcmlmaWNhciBxdWUgY29udGVuZ2Egc29sbyBsZXRyYXMgeSBuw7ptZXJvc1xuICAgICAgICAgICAgaWYgKCEvXltBLVowLTldKyQvLnRlc3QoY2xlYW5JQkFOKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gVmFsaWRhciBmb3JtYXRvIEJJQy9TV0lGVFxuICAgICAgICBjb25zdCB2YWxpZGF0ZUJJQyA9IChiaWMpID0+IHtcbiAgICAgICAgICAgIGlmICghYmljKSByZXR1cm4gdHJ1ZTsgLy8gT3BjaW9uYWxcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gUmVtb3ZlciBlc3BhY2lvc1xuICAgICAgICAgICAgY29uc3QgY2xlYW5CSUMgPSBiaWMucmVwbGFjZSgvXFxzL2csICcnKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gQklDIGRlYmUgdGVuZXIgOCB1IDExIGNhcmFjdGVyZXNcbiAgICAgICAgICAgIGlmIChjbGVhbkJJQy5sZW5ndGggIT09IDggJiYgY2xlYW5CSUMubGVuZ3RoICE9PSAxMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gRm9ybWF0bzogNCBsZXRyYXMgKGPDs2RpZ28gYmFuY28pICsgMiBsZXRyYXMgKGPDs2RpZ28gcGHDrXMpICsgMiBhbGZhbnVtw6lyaWNvcyAodWJpY2FjacOzbikgKyAzIGFsZmFudW3DqXJpY29zIG9wY2lvbmFsZXMgKHN1Y3Vyc2FsKVxuICAgICAgICAgICAgaWYgKCEvXltBLVpdezR9W0EtWl17Mn1bQS1aMC05XXsyfShbQS1aMC05XXszfSk/JC8udGVzdChjbGVhbkJJQykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlZ2xhcyBkZSB2YWxpZGFjacOzblxuICAgICAgICBjb25zdCBpYmFuUnVsZXMgPSBbXG4gICAgICAgICAgICB2ID0+ICEhdiB8fCAnRWwgSUJBTiBlcyBvYmxpZ2F0b3JpbycsXG4gICAgICAgICAgICB2ID0+ICh2ICYmIHYubGVuZ3RoID49IDE1KSB8fCAnRWwgSUJBTiBkZWJlIHRlbmVyIGFsIG1lbm9zIDE1IGNhcmFjdGVyZXMnLFxuICAgICAgICAgICAgdiA9PiAodiAmJiB2Lmxlbmd0aCA8PSAzNCkgfHwgJ0VsIElCQU4gbm8gcHVlZGUgdGVuZXIgbcOhcyBkZSAzNCBjYXJhY3RlcmVzJyxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBiaWNSdWxlcyA9IFtcbiAgICAgICAgICAgIHYgPT4gIXYgfHwgKHYubGVuZ3RoID09PSA4IHx8IHYubGVuZ3RoID09PSAxMSkgfHwgJ0VsIEJJQy9TV0lGVCBkZWJlIHRlbmVyIDggdSAxMSBjYXJhY3RlcmVzJyxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCB0aXR1bGFyUnVsZXMgPSBbXG4gICAgICAgICAgICB2ID0+ICEhdiB8fCAnRWwgbm9tYnJlIGRlbCB0aXR1bGFyIGVzIG9ibGlnYXRvcmlvJyxcbiAgICAgICAgICAgIHYgPT4gKHYgJiYgdi5sZW5ndGggPj0gMykgfHwgJ0RlYmUgdGVuZXIgYWwgbWVub3MgMyBjYXJhY3RlcmVzJyxcbiAgICAgICAgICAgIHYgPT4gKHYgJiYgdi5sZW5ndGggPD0gMjU1KSB8fCAnTm8gcHVlZGUgdGVuZXIgbcOhcyBkZSAyNTUgY2FyYWN0ZXJlcydcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBjaXR5UnVsZXMgPSBbXG4gICAgICAgICAgICB2ID0+ICF2IHx8IHYubGVuZ3RoIDw9IDEwMCB8fCAnTm8gcHVlZGUgdGVuZXIgbcOhcyBkZSAxMDAgY2FyYWN0ZXJlcydcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBkaXJlY3Rpb25SdWxlcyA9IFtcbiAgICAgICAgICAgIHYgPT4gIXYgfHwgdi5sZW5ndGggPD0gMjU1IHx8ICdObyBwdWVkZSB0ZW5lciBtw6FzIGRlIDI1NSBjYXJhY3RlcmVzJ1xuICAgICAgICBdO1xuXG4gICAgICAgIC8vIERldGVjdGFyIHNpIGVzdGFtb3MgZWRpdGFuZG9cbiAgICAgICAgY29uc3QgaXNFZGl0aW5nID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICEhKGJhbmtBY2NvdW50LnZhbHVlPy5pZCB8fCBiYW5rQWNjb3VudC52YWx1ZT8uaWJhbk51bWJlcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIENhcmdhciBhcmNoaXZvcyBleGlzdGVudGVzIHNpIGVzdGFtb3MgZWRpdGFuZG9cbiAgICAgICAgd2F0Y2goKCkgPT4gYmFua0FjY291bnQudmFsdWUsIChuZXdWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlICYmIG5ld1ZhbHVlLm93bmVyc2hpcENlcnRpZmljYXRlKSB7XG4gICAgICAgICAgICAgICAgLy8gU2kgb3duZXJzaGlwQ2VydGlmaWNhdGUgZXMgdW4gc3RyaW5nIEpTT04sIHBhcnNlYXJsb1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbmV3VmFsdWUub3duZXJzaGlwQ2VydGlmaWNhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKG5ld1ZhbHVlLm93bmVyc2hpcENlcnRpZmljYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nRmlsZXMudmFsdWUgPSBBcnJheS5pc0FycmF5KHBhcnNlZCkgPyBwYXJzZWQgOiBbcGFyc2VkXTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2kgbm8gZXMgSlNPTiwgdHJhdGFybG8gY29tbyBydXRhIMO6bmljYVxuICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdGaWxlcy52YWx1ZSA9IFtuZXdWYWx1ZS5vd25lcnNoaXBDZXJ0aWZpY2F0ZV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gU2kgeWEgZXMgdW4gYXJyYXlcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KG5ld1ZhbHVlLm93bmVyc2hpcENlcnRpZmljYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0ZpbGVzLnZhbHVlID0gWy4uLm5ld1ZhbHVlLm93bmVyc2hpcENlcnRpZmljYXRlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gU2kgZXMgdW4gb2JqZXRvXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG5ld1ZhbHVlLm93bmVyc2hpcENlcnRpZmljYXRlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0ZpbGVzLnZhbHVlID0gW25ld1ZhbHVlLm93bmVyc2hpcENlcnRpZmljYXRlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nRmlsZXMudmFsdWUgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgeyBpbW1lZGlhdGU6IHRydWUsIGRlZXA6IHRydWUgfSk7XG5cbiAgICAgICAgLy8gTWFuZWphciBzZWxlY2Npw7NuIGRlIGFyY2hpdm9zXG4gICAgICAgIGNvbnN0IGhhbmRsZUZpbGVzU2VsZWN0ZWQgPSAoZmlsZXMpID0+IHtcbiAgICAgICAgICAgIGNsZWFyRmllbGRFcnJvcignb3duZXJzaGlwQ2VydGlmaWNhdGUnKTtcblxuICAgICAgICAgICAgaWYgKCFmaWxlcyB8fCBmaWxlcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgbWF4U2l6ZSA9IDEwICogMTAyNCAqIDEwMjQ7XG4gICAgICAgICAgICBjb25zdCBhbGxvd2VkVHlwZXMgPSBbXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3BkZicsXG4gICAgICAgICAgICAgICAgJ2ltYWdlL2pwZWcnLFxuICAgICAgICAgICAgICAgICdpbWFnZS9qcGcnLFxuICAgICAgICAgICAgICAgICdpbWFnZS9wbmcnLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9tc3dvcmQnLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCdcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIGNvbnN0IGludmFsaWRGaWxlcyA9IGZpbGVzLmZpbHRlcihmaWxlID0+IGZpbGUuc2l6ZSA+IG1heFNpemUpO1xuICAgICAgICAgICAgY29uc3QgaW52YWxpZFR5cGVzID0gZmlsZXMuZmlsdGVyKGZpbGUgPT4gIWFsbG93ZWRUeXBlcy5pbmNsdWRlcyhmaWxlLnR5cGUpKTtcblxuICAgICAgICAgICAgaWYgKGludmFsaWRGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZmllbGRFcnJvcnMub3duZXJzaGlwQ2VydGlmaWNhdGUgPSBbXG4gICAgICAgICAgICAgICAgICAgIGBMb3Mgc2lndWllbnRlcyBhcmNoaXZvcyBleGNlZGVuIGVsIHRhbWHDsW8gbcOheGltbyBkZSAxME1COiAke2ludmFsaWRGaWxlcy5tYXAoZiA9PiBmLm5hbWUpLmpvaW4oJywgJyl9YFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaW52YWxpZFR5cGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmaWVsZEVycm9ycy5vd25lcnNoaXBDZXJ0aWZpY2F0ZSA9IFtcbiAgICAgICAgICAgICAgICAgICAgYFRpcG8gZGUgYXJjaGl2byBubyBwZXJtaXRpZG86ICR7aW52YWxpZFR5cGVzLm1hcChmID0+IGYubmFtZSkuam9pbignLCAnKX1gXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQXJjaGl2b3Mgc2VsZWNjaW9uYWRvcyBPSzpcIiwgZmlsZXMpO1xuICAgICAgICB9O1xuXG5cbiAgICAgICAgLy8gUmVtb3ZlciBhcmNoaXZvIGV4aXN0ZW50ZVxuICAgICAgICBjb25zdCByZW1vdmVFeGlzdGluZ0ZpbGUgPSAoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGV4aXN0aW5nRmlsZXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBPYnRlbmVyIG5vbWJyZSBkZWwgYXJjaGl2b1xuICAgICAgICBjb25zdCBnZXRGaWxlTmFtZSA9IChmaWxlKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZpbGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgLy8gU2kgZXMgdW5hIHJ1dGEsIGV4dHJhZXIgZWwgbm9tYnJlIGRlbCBhcmNoaXZvXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbGUuc3BsaXQoJy8nKS5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmaWxlLm5hbWUgfHwgZmlsZS5maWxlbmFtZSB8fCAnQXJjaGl2byBzaW4gbm9tYnJlJztcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBPYnRlbmVyIHRhbWHDsW8gZGVsIGFyY2hpdm9cbiAgICAgICAgY29uc3QgZ2V0RmlsZVNpemUgPSAoZmlsZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGZpbGUuc2l6ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gZmlsZS5zaXplO1xuICAgICAgICAgICAgICAgIGlmIChieXRlcyA8IDEwMjQpIHJldHVybiBieXRlcyArICcgQic7XG4gICAgICAgICAgICAgICAgaWYgKGJ5dGVzIDwgMTAyNCAqIDEwMjQpIHJldHVybiAoYnl0ZXMgLyAxMDI0KS50b0ZpeGVkKDEpICsgJyBLQic7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChieXRlcyAvICgxMDI0ICogMTAyNCkpLnRvRml4ZWQoMSkgKyAnIE1CJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIE9idGVuZXIgaWNvbm8gc2Vnw7puIHRpcG8gZGUgYXJjaGl2b1xuICAgICAgICBjb25zdCBnZXRGaWxlSWNvbiA9IChmaWxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWxlbmFtZSA9IGdldEZpbGVOYW1lKGZpbGUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChmaWxlbmFtZS5lbmRzV2l0aCgnLnBkZicpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgaWNvbjogJ21kaS1maWxlLXBkZi1ib3gnLCBjb2xvcjogJ3JlZCcgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWxlbmFtZS5lbmRzV2l0aCgnLmpwZycpIHx8IGZpbGVuYW1lLmVuZHNXaXRoKCcuanBlZycpIHx8IGZpbGVuYW1lLmVuZHNXaXRoKCcucG5nJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBpY29uOiAnbWRpLWZpbGUtaW1hZ2UnLCBjb2xvcjogJ2JsdWUnIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlsZW5hbWUuZW5kc1dpdGgoJy5kb2MnKSB8fCBmaWxlbmFtZS5lbmRzV2l0aCgnLmRvY3gnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGljb246ICdtZGktZmlsZS13b3JkJywgY29sb3I6ICdibHVlLWRhcmtlbi0yJyB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgaWNvbjogJ21kaS1maWxlLWRvY3VtZW50JywgY29sb3I6ICdncmV5JyB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIERlc2NhcmdhciBhcmNoaXZvXG4gICAgICAgIGNvbnN0IGRvd25sb2FkRmlsZSA9IChmaWxlKSA9PiB7XG4gICAgICAgICAgICBsZXQgZmlsZVVybDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmaWxlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIFNpIGVzIHVuYSBydXRhIGRlbCBzZXJ2aWRvclxuICAgICAgICAgICAgICAgIGZpbGVVcmwgPSBmaWxlLnN0YXJ0c1dpdGgoJ2h0dHAnKSBcbiAgICAgICAgICAgICAgICAgICAgPyBmaWxlIFxuICAgICAgICAgICAgICAgICAgICA6IGAvdXBsb2Fkcy9iYW5rX2NlcnRpZmljYXRlcy8ke2ZpbGV9YDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsZS51cmwpIHtcbiAgICAgICAgICAgICAgICBmaWxlVXJsID0gZmlsZS51cmw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpbGUucGF0aCkge1xuICAgICAgICAgICAgICAgIGZpbGVVcmwgPSBmaWxlLnBhdGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWxlVXJsKSB7XG4gICAgICAgICAgICAgICAgLy8gQ3JlYXIgZW5sYWNlIHRlbXBvcmFsIHkgaGFjZXIgY2xpY2tcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICAgICAgICAgIGxpbmsuaHJlZiA9IGZpbGVVcmw7XG4gICAgICAgICAgICAgICAgbGluay5kb3dubG9hZCA9IGdldEZpbGVOYW1lKGZpbGUpO1xuICAgICAgICAgICAgICAgIGxpbmsudGFyZ2V0ID0gJ19ibGFuayc7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgICAgICAgICAgICBsaW5rLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignTm8gc2UgcHVkbyBvYnRlbmVyIGxhIFVSTCBkZWwgYXJjaGl2bycsIGZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIExpbXBpYXIgZXJyb3Jlc1xuICAgICAgICBjb25zdCBjbGVhckVycm9ycyA9ICgpID0+IHtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZXMudmFsdWUgPSBbXTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGZpZWxkRXJyb3JzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgZmllbGRFcnJvcnNba2V5XSA9IFtdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gTGltcGlhciBlcnJvciBkZSB1biBjYW1wbyBlc3BlY8OtZmljb1xuICAgICAgICBjb25zdCBjbGVhckZpZWxkRXJyb3IgPSAoZmllbGROYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAoZmllbGRFcnJvcnMuaGFzT3duUHJvcGVydHkoZmllbGROYW1lKSkge1xuICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzW2ZpZWxkTmFtZV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBPYnRlbmVyIGV0aXF1ZXRhIGFtaWdhYmxlIGRlbCBjYW1wb1xuICAgICAgICBjb25zdCBnZXRGaWVsZExhYmVsID0gKGZpZWxkTmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGFiZWxzID0ge1xuICAgICAgICAgICAgICAgIGliYW5OdW1iZXI6ICdJQkFOJyxcbiAgICAgICAgICAgICAgICBiaWNOdW1iZXI6ICdCSUMvU1dJRlQnLFxuICAgICAgICAgICAgICAgIHRpdHVsYXJOYW1lOiAnTm9tYnJlIGRlbCBUaXR1bGFyJyxcbiAgICAgICAgICAgICAgICB0aXR1bGFyQ291bnRyeTogJ1Bhw61zJyxcbiAgICAgICAgICAgICAgICB0aXR1bGFyQ2l0eTogJ0NpdWRhZCcsXG4gICAgICAgICAgICAgICAgdGl0dWxhckRpcmVjdGlvbjogJ0RpcmVjY2nDs24nLFxuICAgICAgICAgICAgICAgIG93bmVyc2hpcENlcnRpZmljYXRlOiAnQ2VydGlmaWNhZG8gZGUgVGl0dWxhcmlkYWQnXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGxhYmVsc1tmaWVsZE5hbWVdIHx8IGZpZWxkTmFtZTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQYXJzZWFyIGVycm9yZXMgZGVsIGJhY2tlbmRcbiAgICAgICAgY29uc3QgcGFyc2VCYWNrZW5kRXJyb3JzID0gKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjb21wbGV0bzonLCBlcnJvcik7XG4gICAgICAgICAgICBjbGVhckVycm9ycygpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBNYW5lam8gZGUgZXJyb3JlcyBlc3TDoW5kYXJcbiAgICAgICAgICAgIGlmIChlcnJvci5yZXNwb25zZT8uZGF0YT8ubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZXMudmFsdWUucHVzaChlcnJvci5yZXNwb25zZS5kYXRhLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZXJyb3IucmVzcG9uc2U/LmRhdGE/LmVycm9ycykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3JzO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGVycm9ycykuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsZWFuRmllbGROYW1lID0gZmllbGQucmVwbGFjZSgvXihiYW5rQWNjb3VudFxcLnxmb3JtRGF0YVxcLikvLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRFcnJvcnMuaGFzT3duUHJvcGVydHkoY2xlYW5GaWVsZE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1zZyA9IEFycmF5LmlzQXJyYXkoZXJyb3JzW2ZpZWxkXSkgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlcnJvcnNbZmllbGRdIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogW2Vycm9yc1tmaWVsZF1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZEVycm9yc1tjbGVhbkZpZWxkTmFtZV0gPSBlcnJvck1zZztcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRMYWJlbCA9IGdldEZpZWxkTGFiZWwoY2xlYW5GaWVsZE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNc2cuZm9yRWFjaChtc2cgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZXMudmFsdWUucHVzaChgJHtmaWVsZExhYmVsfTogJHttc2d9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZ3MgPSBBcnJheS5pc0FycmF5KGVycm9yc1tmaWVsZF0pID8gZXJyb3JzW2ZpZWxkXSA6IFtlcnJvcnNbZmllbGRdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZXMudmFsdWUucHVzaCguLi5tc2dzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZXJyb3IucmVzcG9uc2U/LnN0YXR1cyA9PT0gNTAwICYmIGVycm9yTWVzc2FnZXMudmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlcy52YWx1ZS5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAnRXJyb3IgZGVsIHNlcnZpZG9yLiBQb3IgZmF2b3IsIHZlcmlmaXF1ZSBxdWUgdG9kb3MgbG9zIGRhdG9zIGVzdMOpbiBjb3JyZWN0YW1lbnRlIGluZ3Jlc2Fkb3MuJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2VzLnZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZXMudmFsdWUucHVzaChcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSB8fCAnSGEgb2N1cnJpZG8gdW4gZXJyb3IgaW5lc3BlcmFkby4gUG9yIGZhdm9yLCBpbnRlbnRlIG51ZXZhbWVudGUuJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZvcm1SZWYsXG4gICAgICAgICAgICBsb2FkaW5nLFxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlcyxcbiAgICAgICAgICAgIHNlbGVjdGVkRmlsZXMsXG4gICAgICAgICAgICBleGlzdGluZ0ZpbGVzLFxuICAgICAgICAgICAgZmllbGRFcnJvcnMsXG4gICAgICAgICAgICBiYW5rQWNjb3VudCxcbiAgICAgICAgICAgIGliYW5SdWxlcyxcbiAgICAgICAgICAgIGJpY1J1bGVzLFxuICAgICAgICAgICAgdGl0dWxhclJ1bGVzLFxuICAgICAgICAgICAgY2l0eVJ1bGVzLFxuICAgICAgICAgICAgZGlyZWN0aW9uUnVsZXMsXG4gICAgICAgICAgICBpc0VkaXRpbmcsXG4gICAgICAgICAgICBoYW5kbGVGaWxlc1NlbGVjdGVkLFxuICAgICAgICAgICAgcmVtb3ZlRXhpc3RpbmdGaWxlLFxuICAgICAgICAgICAgZ2V0RmlsZU5hbWUsXG4gICAgICAgICAgICBnZXRGaWxlU2l6ZSxcbiAgICAgICAgICAgIGdldEZpbGVJY29uLFxuICAgICAgICAgICAgZG93bmxvYWRGaWxlLFxuICAgICAgICAgICAgY2xlYXJFcnJvcnMsXG4gICAgICAgICAgICBjbGVhckZpZWxkRXJyb3IsXG4gICAgICAgICAgICBwYXJzZUJhY2tlbmRFcnJvcnNcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIGluamVjdDoge1xuICAgICAgICBjbG9zZU92ZXJsYXk6IHtcbiAgICAgICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgICBjbG9zZUZvcm0oKSB7XG4gICAgICAgICAgICAvLyBFc3RyYXRlZ2lhIDE6IFVzYXIgaW5qZWN0IHNpIGVzdMOhIGRpc3BvbmlibGUgKE92ZXJsYXkgY29uIHByb3ZpZGUpXG4gICAgICAgICAgICBpZiAodGhpcy5jbG9zZU92ZXJsYXkgJiYgdHlwZW9mIHRoaXMuY2xvc2VPdmVybGF5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZU92ZXJsYXkoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEVzdHJhdGVnaWEgMjogRW1pdCBwYXJhIHF1ZSBlbCBwYWRyZSBsbyBtYW5lamVcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2Nsb3NlJyk7XG4gICAgICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGZhbHNlKTtcblxuICAgICAgICAgICAgLy8gRXN0cmF0ZWdpYSAzOiBCdXNjYXIgZWwgY29tcG9uZW50ZSBPdmVybGF5IHBhZHJlIHkgY2VycmFybG9cbiAgICAgICAgICAgIGxldCBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG4gICAgICAgICAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudC5jbG9zZSAmJiB0eXBlb2YgcGFyZW50LmNsb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudC5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnQuJG9wdGlvbnMubmFtZSA9PT0gJ092ZXJsYXknKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnQuaXNPcGVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBFc3RyYXRlZ2lhIDQ6IEJ1c2NhciB2LWRpYWxvZyBlbiBlbCBET01cbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZyA9IHRoaXMuJGVsLmNsb3Nlc3QoJy52LWRpYWxvZycpO1xuICAgICAgICAgICAgaWYgKGRpYWxvZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhY2tkcm9wID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnYtb3ZlcmxheV9fc2NyaW0nKTtcbiAgICAgICAgICAgICAgICBpZiAoYmFja2Ryb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2Ryb3AuY2xpY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgaGFuZGxlU3VibWl0KCkge1xuICAgICAgICAgICAgLy8gVmFsaWRhciBmb3JtdWxhcmlvXG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkIH0gPSBhd2FpdCB0aGlzLmZvcm1SZWYudmFsaWRhdGUoKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlcyA9IFsnUG9yIGZhdm9yLCBjb3JyaWphIGxvcyBlcnJvcmVzIGVuIGVsIGZvcm11bGFyaW8nXTtcbiAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IDAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKCk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgLy8gUHJlcGFyYXIgRm9ybURhdGEgcGFyYSBlbnZpYXIgYXJjaGl2b3NcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIEFncmVnYXIgZGF0b3MgZGUgbGEgY3VlbnRhIGJhbmNhcmlhXG4gICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdpYmFuTnVtYmVyJywgdGhpcy5iYW5rQWNjb3VudC5pYmFuTnVtYmVyKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5iYW5rQWNjb3VudC5iaWNOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdiaWNOdW1iZXInLCB0aGlzLmJhbmtBY2NvdW50LmJpY051bWJlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgndGl0dWxhck5hbWUnLCB0aGlzLmJhbmtBY2NvdW50LnRpdHVsYXJOYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5iYW5rQWNjb3VudC50aXR1bGFyQ291bnRyeSkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3RpdHVsYXJDb3VudHJ5JywgdGhpcy5iYW5rQWNjb3VudC50aXR1bGFyQ291bnRyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmJhbmtBY2NvdW50LnRpdHVsYXJDaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgndGl0dWxhckNpdHknLCB0aGlzLmJhbmtBY2NvdW50LnRpdHVsYXJDaXR5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYmFua0FjY291bnQudGl0dWxhckRpcmVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3RpdHVsYXJEaXJlY3Rpb24nLCB0aGlzLmJhbmtBY2NvdW50LnRpdHVsYXJEaXJlY3Rpb24pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIEFncmVnYXIgYXJjaGl2b3MgbnVldm9zXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRGaWxlcyAmJiB0aGlzLnNlbGVjdGVkRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZXMuZm9yRWFjaCgoZmlsZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChgb3duZXJzaGlwQ2VydGlmaWNhdGVbJHtpbmRleH1dYCwgZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIEFncmVnYXIgYXJjaGl2b3MgZXhpc3RlbnRlcyAoc2kgZXN0YW1vcyBlZGl0YW5kbylcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5leGlzdGluZ0ZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdleGlzdGluZ0ZpbGVzJywgSlNPTi5zdHJpbmdpZnkodGhpcy5leGlzdGluZ0ZpbGVzKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gU2kgZXN0YW1vcyBlZGl0YW5kbywgYWdyZWdhciBlbCBJRFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmJhbmtBY2NvdW50LmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnaWQnLCB0aGlzLmJhbmtBY2NvdW50LmlkKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBDcmVhciBzZXJ2aWNpbyB5IGVudmlhclxuICAgICAgICAgICAgICAgIGNvbnN0IGJhbmtBY2NvdW50U2VydmljZSA9IG5ldyBCYW5rQWNjb3VudFNlcnZpY2UodGhpcy5iYW5rQWNjb3VudCk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gTW9kaWZpY2FyIGVsIHNlcnZpY2lvIHBhcmEgdXNhciBGb3JtRGF0YVxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBiYW5rQWNjb3VudFNlcnZpY2UubXVsdGlwYXJ0Rm9ybURhdGEgPSBmb3JtRGF0YTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNyZWF0ZUdlbmVyaWMoYmFua0FjY291bnRTZXJ2aWNlKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyDinIUgQ2VycmFyIG92ZXJsYXkgdXNhbmRvIG3Dumx0aXBsZXMgZXN0cmF0ZWdpYXNcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlRm9ybSgpO1xuXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFsIGd1YXJkYXIgY3VlbnRhIGJhbmNhcmlhOicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcnNlQmFja2VuZEVycm9ycyhlcnJvcik7XG4gICAgICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKHsgdG9wOiAwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuLmVycm9yLWxpc3Qge1xuICAgIG1hcmdpbi1sZWZ0OiAyMHB4O1xuICAgIG1hcmdpbi10b3A6IDhweDtcbn1cblxuLmVycm9yLWxpc3QgbGkge1xuICAgIG1hcmdpbi1ib3R0b206IDRweDtcbn1cblxuLml0ZW0tcHJvdmlkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG59XG5cbi5zY3JvbGxlYWJsZSB7XG4gICAgbWF4LWhlaWdodDogNzB2aDtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7XG59XG5cbi5zY3JvbGxlYWJsZTo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgIHdpZHRoOiA4cHg7XG59XG5cbi5zY3JvbGxlYWJsZTo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICAgIGJhY2tncm91bmQ6ICNmMWYxZjE7XG59XG5cbi5zY3JvbGxlYWJsZTo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgIGJhY2tncm91bmQ6ICM4ODg7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuXG4uc2Nyb2xsZWFibGU6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiAjNTU1O1xufVxuPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG4gIDx2LWFwcC1iYXIgZXh0ZW5zaW9uLWhlaWdodD1cIjJcIiBzdHlsZT1cInBvc2l0aW9uOiBzdGlja3k7XCIgZWxldmF0aW9uPVwiMVwiPlxuICAgIDx0ZW1wbGF0ZSB2LXNsb3Q6ZXh0ZW5zaW9uPlxuICAgICAgPHYtcHJvZ3Jlc3MtbGluZWFyIDphY3RpdmU9XCJsb2FkZXJTdG9yZS5pc0xvYWRpbmdcIiA6aW5kZXRlcm1pbmF0ZT1cImxvYWRlclN0b3JlLmlzTG9hZGluZ1wiIGNvbG9yPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgaGVpZ2h0PVwiMlwiIC8+XG4gICAgPC90ZW1wbGF0ZT5cblxuICAgIDx2LWNvbnRhaW5lciBmbHVpZCBjbGFzcz1cImQtZmxleCBhbGlnbi1jZW50ZXJcIj5cbiAgICAgIDwhLS0gTG9nbyAtIFdoaXRlLWxhYmVsIGJyYW5kaW5nIGZyb20gU1NPIC0tPlxuICAgICAgPHJvdXRlci1saW5rIDp0bz1cImdldEhvbWVSb3V0ZVwiIGNsYXNzPVwidGV4dC1kZWNvcmF0aW9uLW5vbmUgbG9nby1jb250YWluZXJcIj5cbiAgICAgICAgPGltZyB2LWlmPVwiYXV0aFN0b3JlLnNzb0xvZ29cIlxuICAgICAgICAgIDpzdHlsZT1cImBoZWlnaHQ6IDMwcHg7ICR7dGhlbWU/Lmdsb2JhbC5jdXJyZW50LnZhbHVlLmRhcmsgPyAnZmlsdGVyOiBicmlnaHRuZXNzKDApIGludmVydCgxKTsnIDogJyd9YFwiXG4gICAgICAgICAgOnNyYz1cImF1dGhTdG9yZS5zc29Mb2dvXCJcbiAgICAgICAgICBjbGFzcz1cImltZy1mbHVpZFwiXG4gICAgICAgICAgOmFsdD1cImF1dGhTdG9yZS5jb21wYW55TmFtZVwiPlxuXG4gICAgICAgIDxpbWcgdi1lbHNlLWlmPVwiYXV0aFN0b3JlPy5sb2dvXCJcbiAgICAgICAgICA6c3R5bGU9XCJgaGVpZ2h0OiAzMHB4OyAke3RoZW1lPy5nbG9iYWwuY3VycmVudC52YWx1ZS5kYXJrID8gJ2ZpbHRlcjogYnJpZ2h0bmVzcygwKSBpbnZlcnQoMSk7JyA6ICcnfWBcIlxuICAgICAgICAgIDpzcmM9XCJhdXRoU3RvcmUubG9nb1wiXG4gICAgICAgICAgY2xhc3M9XCJpbWctZmx1aWRcIlxuICAgICAgICAgIGFsdD1cIkxvZ29cIj5cblxuICAgICAgICA8aW1nIHYtZWxzZVxuICAgICAgICAgIDpzdHlsZT1cImBoZWlnaHQ6IDMwcHg7ICR7dGhlbWU/Lmdsb2JhbC5jdXJyZW50LnZhbHVlLmRhcmsgPyAnZmlsdGVyOiBicmlnaHRuZXNzKDApIGludmVydCgxKTsnIDogJyd9YFwiXG4gICAgICAgICAgc3JjPVwiLi4vLi4vaW1hZ2VzL0xvZ28tc2NmLWNvbmZpcm1pbmcuc3ZnXCJcbiAgICAgICAgICBjbGFzcz1cImltZy1mbHVpZFwiXG4gICAgICAgICAgYWx0PVwiTG9nb1wiPlxuICAgICAgPC9yb3V0ZXItbGluaz5cblxuICAgICAgPCEtLSBEeW5hbWljIHBsYXRmb3JtIG5hdmlnYXRpb24gYmFzZWQgb24gY3VycmVudCB3aGl0ZSBsYWJlbCAtLT5cbiAgICAgIDx2LW1lbnUgdi1pZj1cInBsYXRmb3JtQXBwcy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDx0ZW1wbGF0ZSB2LXNsb3Q6YWN0aXZhdG9yPVwieyBwcm9wcyB9XCI+XG4gICAgICAgICAgICA8di1idG4gdi1iaW5kPVwicHJvcHNcIiB2YXJpYW50PVwidGV4dFwiIGNsYXNzPVwiZmxleC1zaHJpbmstMFwiPlxuICAgICAgICAgICAgICA8aW1nIHYtaWY9XCJhdXRoU3RvcmUuc3NvTG9nb1wiIHN0eWxlPVwid2lkdGg6IDQ1cHg7XCIgOnNyYz1cImF1dGhTdG9yZS5zc29Mb2dvXCIgOmFsdD1cImF1dGhTdG9yZS5jb21wYW55TmFtZVwiPlxuICAgICAgICAgICAgICA8aW1nIHYtZWxzZSBzdHlsZT1cIndpZHRoOiA0NXB4O1wiIHNyYz1cIi4uLy4uL2ltYWdlcy9zbWFydGVzY3Jvd19sb2dvLmpwZWdcIiBhbHQ9XCJcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJteC0yIGZhLXNvbGlkIGZhLWNhcmV0LWRvd25cIj48L2k+XG4gICAgICAgICAgICA8L3YtYnRuPlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8di1saXN0PlxuICAgICAgICAgIDx2LWxpc3QtaXRlbSB2LWZvcj1cImFwcCBpbiBwbGF0Zm9ybUFwcHNcIiA6a2V5PVwiYXBwLnVybFwiIGNsYXNzPVwiY2xpY2thYmxlXCI+XG4gICAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiA6aHJlZj1cImFwcC51cmxcIj5cbiAgICAgICAgICAgICAge3sgYXBwLmxhYmVsIH19XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC92LWxpc3QtaXRlbT5cbiAgICAgICAgPC92LWxpc3Q+XG4gICAgICA8L3YtbWVudT5cblxuICAgICAgPCEtLSBOYXZpZ2F0aW9uIE1lbnUgLSBleHBhbmRzIHRvIGZpbGwgYXZhaWxhYmxlIHNwYWNlIC0tPlxuICAgICAgPGRpdiB2LWlmPVwiIXNtQW5kRG93blwiIGNsYXNzPVwibmF2LW1lbnUtd3JhcHBlclwiPlxuICAgICAgICA8di10YWJzIHYtbW9kZWw9XCJhY3RpdmVUYWJcIiBncm93PlxuICAgICAgICAgIDx2LXRhYiB2LWZvcj1cIml0ZW0gaW4gbWVudUl0ZW1zXCIgOmtleT1cIml0ZW0ucm91dGVcIiA6dG89XCJpdGVtLnJvdXRlXCIgZXhhY3Q+XG4gICAgICAgICAgICA8di1pY29uIDppY29uPVwiaXRlbS5pY29uXCIgY2xhc3M9XCJtci0yXCIgLz5cbiAgICAgICAgICAgIHt7IGl0ZW0udGl0bGUgfX1cbiAgICAgICAgICA8L3YtdGFiPlxuICAgICAgICA8L3YtdGFicz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIE1vYmlsZSBidXJnZXIgbWVudSAtLT5cbiAgICAgIDxkaXYgdi1lbHNlIGNsYXNzPVwiZmxleC1zaHJpbmstMFwiPlxuICAgICAgICA8di1tZW51PlxuICAgICAgICAgIDx0ZW1wbGF0ZSB2LXNsb3Q6YWN0aXZhdG9yPVwieyBwcm9wcyB9XCI+XG4gICAgICAgICAgICA8di1idG4gaWNvbj1cIm1kaS1kb3RzLXZlcnRpY2FsXCIgdmFyaWFudD1cInRleHRcIiB2LWJpbmQ9XCJwcm9wc1wiPjwvdi1idG4+XG4gICAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICAgIDx2LWxpc3Q+XG4gICAgICAgICAgICA8di1saXN0LWl0ZW0gdi1mb3I9XCJpdGVtIGluIG1lbnVJdGVtc1wiIDprZXk9XCJpdGVtLnJvdXRlXCIgOnRvPVwiaXRlbS5yb3V0ZVwiIGV4YWN0PlxuICAgICAgICAgICAgICA8di1saXN0LWl0ZW0tdGl0bGU+e3sgaXRlbS50aXRsZSB9fTwvdi1saXN0LWl0ZW0tdGl0bGU+XG4gICAgICAgICAgICA8L3YtbGlzdC1pdGVtPlxuICAgICAgICAgIDwvdi1saXN0PlxuICAgICAgICA8L3YtbWVudT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8di1zcGFjZXIgLz5cblxuICAgICAgPCEtLSBVc2VyIG1lbnUgLSBwdXNoZWQgdG8gZmFyIHJpZ2h0IC0tPlxuICAgICAgPHYtbWVudT5cbiAgICAgICAgICA8dGVtcGxhdGUgdi1zbG90OmFjdGl2YXRvcj1cInsgcHJvcHMgfVwiPlxuICAgICAgICAgICAgPHYtYnRuIHYtYmluZD1cInByb3BzXCIgdmFyaWFudD1cInRleHRcIiBzdHlsZT1cIm1heC13aWR0aDogMzd2dzsgdGV4dC1hbGlnbjogbGVmdDtcIiBjbGFzcz1cIm15LW1hcmdpblwiPlxuICAgICAgICAgICAgICA8di1pY29uIGNsYXNzPVwibXgtMVwiIGljb249XCJtZGktYWNjb3VudC1jaXJjbGVcIi8+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm9ybWFsOyB3b3JkLWJyZWFrOiBicmVhay13b3JkO1wiPlxuICAgICAgICAgICAgICAgIHt7IGF1dGhTdG9yZS51c2VyPy5zb2NpYWxEZW5vbWluYXRpb24gfHwgYXV0aFN0b3JlLmNvbXBhbnlOYW1lIHx8ICdVc3VhcmlvJyB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdi1idG4+XG4gICAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICAgIDx2LWxpc3Q+XG4gICAgICAgICAgICA8di1yb3cgY2xhc3M9XCJhbGlnbi1jZW50ZXJcIj5cblxuICAgICAgICAgICAgICA8IS0tIExvZ28gLSBXaGl0ZS1sYWJlbCBicmFuZGluZyBmcm9tIFNTTyAtLT5cbiAgICAgICAgICAgICAgPHYtY29sIGNvbHM9XCIxXCIgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1zdGFydFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgdi1pZj1cImF1dGhTdG9yZS5zc29Mb2dvXCI+XG4gICAgICAgICAgICAgICAgICA8aW1nIFxuICAgICAgICAgICAgICAgICAgICA6c3JjPVwiYXV0aFN0b3JlLnNzb0xvZ29cIiBcbiAgICAgICAgICAgICAgICAgICAgOmFsdD1cImF1dGhTdG9yZS5jb21wYW55TmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWF4LXdpZHRoOiA4MHB4OyBtYXgtaGVpZ2h0OiA0MHB4OyBwYWRkaW5nOjRweCAhaW1wb3J0YW50OyBvYmplY3QtZml0OiBjb250YWluO1wiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgdi1lbHNlLWlmPVwiYXV0aFN0b3JlPy51c2VyPy5zc29Mb2dvXCI+XG4gICAgICAgICAgICAgICAgICA8aW1nIFxuICAgICAgICAgICAgICAgICAgICA6c3JjPVwiYXV0aFN0b3JlLnVzZXIuc3NvTG9nb1wiIFxuICAgICAgICAgICAgICAgICAgICBhbHQ9XCJMb2dvXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtYXgtd2lkdGg6IDgwcHg7IG1heC1oZWlnaHQ6IDQwcHg7IHBhZGRpbmc6NHB4ICFpbXBvcnRhbnQ7IG9iamVjdC1maXQ6IGNvbnRhaW47XCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvdi1jb2w+XG5cbiAgICAgICAgICAgICAgPCEtLSBEYXRvcyBkZSB1c3VhcmlvIC0tPlxuICAgICAgICAgICAgICA8di1jb2wgY29scz1cIjExXCIgY2xhc3M9XCJ0ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgICAgICA8di1saXN0LWl0ZW0+XG4gICAgICAgICAgICAgICAgICA8di1saXN0LWl0ZW0tdGl0bGUgY2xhc3M9XCJ0ZXh0LWNhcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPHAgdi1pZj1cImF1dGhTdG9yZT8udXNlcj8uYWxpYXNcIiBjbGFzcz1cInRleHQtdXBwZXJjYXNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgQUxJQVM6IHt7IGF1dGhTdG9yZS51c2VyLmFsaWFzIH19XG4gICAgICAgICAgICAgICAgICAgIDwvcD5cblxuICAgICAgICAgICAgICAgICAgICA8aHIgdi1pZj1cImF1dGhTdG9yZT8udXNlcj8uYWxpYXNcIj5cblxuICAgICAgICAgICAgICAgICAgICBST0xFUzoge3sgYXV0aFN0b3JlPy5yb2xlcz8uam9pbignIHwgJykucmVwbGFjZUFsbCgnUk9MRV8nLCAnJykgfX1cbiAgICAgICAgICAgICAgICAgICAgPGhyPlxuXG4gICAgICAgICAgICAgICAgICAgIENPTkVDVEFETyBDT01PIDxicj5cbiAgICAgICAgICAgICAgICAgICAgPGIgY2xhc3M9XCJtYWlsLWl0ZW0gdGV4dC11cHBlcmNhc2VcIj57eyBhdXRoU3RvcmU/LnVzZXI/LmVtYWlsIH19PC9iPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBNb3N0cmFyIG5vbWJyZSBkZSBlbXByZXNhIHNpIGV4aXN0ZSB3aGl0ZS1sYWJlbCBicmFuZGluZyAtLT5cbiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCJhdXRoU3RvcmUuaGFzQ3VzdG9tQnJhbmRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aHI+XG4gICAgICAgICAgICAgICAgICAgICAgRU1QUkVTQTogPGIgY2xhc3M9XCJ0ZXh0LXVwcGVyY2FzZVwiPnt7IGF1dGhTdG9yZS5jb21wYW55TmFtZSB9fTwvYj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvdi1saXN0LWl0ZW0tdGl0bGU+XG4gICAgICAgICAgICAgICAgPC92LWxpc3QtaXRlbT5cbiAgICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgIDwvdi1yb3c+XG5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPGRpdiB2LWlmPVwiYXV0aFN0b3JlPy5yb2xlcy5pbmNsdWRlcygnUk9MRV9DTElFTlRFJykgJiYgYXV0aFN0b3JlPy5yb2xlcy5pbmNsdWRlcygnUk9MRV9QUk9WRUVET1InKVwiPlxuXG4gICAgICAgICAgICAgIDx2LWRpdmlkZXIgLz5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPHA+TmF2ZWdhciBjb21vIHVzdWFyaW86PC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxiIDpjbGFzcz1cInsgJ2ZvbnQtYm9sZCc6ICFub25lLCAnZm9udC10aGluJzogbm9uZSB9XCI+Q2xpZW50ZTwvYj5cbiAgICAgICAgICAgICAgICA8di1zd2l0Y2ggdi1tb2RlbD1cIm5vbmVcIiBjb2xvcj1cInN1Y2Nlc3NcIiBsYWJlbD1cIlwiIHZhbHVlPVwic3VjY2Vzc1wiIGNsYXNzPVwibXgtMlwiIGhpZGUtZGV0YWlscz48L3Ytc3dpdGNoPlxuICAgICAgICAgICAgICAgIDxiIDpjbGFzcz1cInsgJ2ZvbnQtYm9sZCc6IG5vbmUsICdmb250LXRoaW4nOiAhbm9uZSB9XCI+UHJvdmVlZG9yPC9iPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHYtZGl2aWRlciAvPlxuXG4gICAgICAgICAgICA8di1saXN0LWl0ZW0gY2xhc3M9XCJjbGlja2FibGVcIj5cbiAgICAgICAgICAgICAgPHYtbGlzdC1pdGVtLXRpdGxlPlxuICAgICAgICAgICAgICAgIDx2LWljb24gaWNvbj1cIm1kaS1hY2NvdW50LWVkaXRcIiAvPlxuICAgICAgICAgICAgICAgIEVkaXRhciBwZXJmaWxcbiAgICAgICAgICAgICAgICA8T3ZlcmxheSB0aXRsZT1cIkVkaXRhciBwZXJmaWxcIlxuICAgICAgICAgICAgICAgICAgcHJvZ3JhbW1lclJlZj1cImVkaXQtcHJvZmlsZVwiXG4gICAgICAgICAgICAgICAgICBhY3RpdmF0b3I9XCJwYXJlbnRcIj5cbiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjZGVmYXVsdD5cbiAgICAgICAgICAgICAgICAgICAgPGVkaXQtcHJvZmlsZSAvPlxuICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L092ZXJsYXk+XG4gICAgICAgICAgICAgIDwvdi1saXN0LWl0ZW0tdGl0bGU+XG4gICAgICAgICAgICA8L3YtbGlzdC1pdGVtPlxuXG4gICAgICAgICAgICA8di1kaXZpZGVyIC8+XG5cbiAgICAgICAgICAgIDxkaXYgdi1pZj1cImF1dGhTdG9yZS5pc0NsaWVudFwiPlxuICAgICAgICAgICAgICA8di1saXN0LWl0ZW0gY2xhc3M9XCJjbGlja2FibGVcIj5cbiAgICAgICAgICAgICAgICA8di1saXN0LWl0ZW0tdGl0bGU+XG4gICAgICAgICAgICAgICAgICA8di1pY29uIGljb249XCJtZGktY29nXCIgLz5cbiAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYWNpb25lc1xuICAgICAgICAgICAgICAgICAgPE92ZXJsYXkgdGl0bGU9XCJDb25maWd1cmFjaW9uZXNcIlxuICAgICAgICAgICAgICAgICAgcHJvZ3JhbW1lclJlZj1cImhlYWRlci1jb25maWdcIiBcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZhdG9yPVwicGFyZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjZGVmYXVsdD5cbiAgICAgICAgICAgICAgICAgICAgICA8Q29uZmlncyAvPlxuICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPC9PdmVybGF5PlxuICAgICAgICAgICAgICAgIDwvdi1saXN0LWl0ZW0tdGl0bGU+XG4gICAgICAgICAgICAgIDwvdi1saXN0LWl0ZW0+XG4gICAgICAgICAgICAgIDx2LWRpdmlkZXIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgIDx2LWxpc3QtaXRlbSB2LWlmPVwiYXV0aFN0b3JlLmlzUHJvdmlkZXIgJiYgKCFhdXRoU3RvcmUuaXNDbGllbnQgfHwgbm9uZSlcIiBjbGFzcz1cImNsaWNrYWJsZVwiPlxuICAgICAgICAgICAgICA8di1saXN0LWl0ZW0tdGl0bGU+XG4gICAgICAgICAgICAgICAgPHYtaWNvbiBpY29uPVwibWRpLWJhbmtcIiAvPlxuICAgICAgICAgICAgICAgIEN1ZW50YSBCYW5jYXJpYSAtIFByb3ZlZWRvclxuICAgICAgICAgICAgICAgIDxPdmVybGF5IHRpdGxlPVwiQ3VlbnRhcyBCYW5jYXJpYXNcIiBwcm9ncmFtbWVyUmVmPVwiYmFuay1hY2NvdW50LXJ1bGUtcHJvdmlkZXJcIlxuICAgICAgICAgICAgICAgICAgYWN0aXZhdG9yPVwicGFyZW50XCI+XG4gICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI2RlZmF1bHQ+XG4gICAgICAgICAgICAgICAgICAgIDxDcmVhdGVQcm92aWRlckJhbmtBY2NvdW50PjwvQ3JlYXRlUHJvdmlkZXJCYW5rQWNjb3VudD5cbiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9PdmVybGF5PlxuICAgICAgICAgICAgICA8L3YtbGlzdC1pdGVtLXRpdGxlPlxuICAgICAgICAgICAgICA8di1kaXZpZGVyIC8+XG4gICAgICAgICAgICA8L3YtbGlzdC1pdGVtPlxuXG4gICAgICAgICAgICA8di1saXN0LWl0ZW0gdi1pZj1cImF1dGhTdG9yZS5pc0NsaWVudCAmJiAoIWF1dGhTdG9yZS5pc1Byb3ZpZGVyIHx8ICFub25lKVwiIGNsYXNzPVwiY2xpY2thYmxlXCI+XG4gICAgICAgICAgICAgIDx2LWxpc3QtaXRlbS10aXRsZT5cbiAgICAgICAgICAgICAgICA8di1pY29uIGljb249XCJtZGktYmFua1wiLz5cbiAgICAgICAgICAgICAgICBDdWVudGFzIEJhbmNhcmlhcyAtIENsaWVudGVcbiAgICAgICAgICAgICAgICA8T3ZlcmxheSB0aXRsZT1cIkN1ZW50YXMgQmFuY2FyaWFzXCIgcHJvZ3JhbW1lclJlZj1cImJhbmstYWNjb3VudC1ydWxlXCJcbiAgICAgICAgICAgICAgICAgIGFjdGl2YXRvcj1cInBhcmVudFwiIHYtbW9kZWw9XCJzaG93Q2xpZW50QmFua0FjY291bnRzXCI+XG4gICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI2RlZmF1bHQ+XG4gICAgICAgICAgICAgICAgICAgIDxFZGl0Q2xpZW50QmFua0FjY291bnRzIEBzYXZlZD1cInNob3dDbGllbnRCYW5rQWNjb3VudHMgPSBmYWxzZVwiPjwvRWRpdENsaWVudEJhbmtBY2NvdW50cz5cbiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9PdmVybGF5PlxuXG4gICAgICAgICAgICAgIDwvdi1saXN0LWl0ZW0tdGl0bGU+XG4gICAgICAgICAgICAgIDx2LWRpdmlkZXIgLz5cblxuICAgICAgICAgICAgPC92LWxpc3QtaXRlbT5cblxuXG4gICAgICAgICAgICA8di1saXN0LWl0ZW0+XG4gICAgICAgICAgICAgIDx2LWxpc3QtaXRlbS10aXRsZT5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiaHR0cHM6Ly9maXJtYWRvYy5zbWFydGVzY3Jvdy5ldS9cIiBjbGFzcz1cImQtZmxleCBhbGlnbi1jZW50ZXIgdGV4dC1kZWNvcmF0aW9uLW5vbmVcIj5cbiAgICAgICAgICAgICAgICAgIDx2LWljb24gaWNvbj1cIm1kaS1maWxlLWRvY3VtZW50XCIgY2xhc3M9XCJtci0xXCIvPlxuICAgICAgICAgICAgICAgICAgTWlzIGNvbnRyYXRvc1xuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC92LWxpc3QtaXRlbS10aXRsZT5cbiAgICAgICAgICAgIDwvdi1saXN0LWl0ZW0+XG5cbiAgICAgICAgICAgIDx2LWxpc3QtaXRlbT5cbiAgICAgICAgICAgICAgPHYtbGlzdC1pdGVtLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL3RpY2tldHMuc21hcnRlc2Nyb3cuZXUvXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24tY2VudGVyIHRleHQtZGVjb3JhdGlvbi1ub25lXCI+XG4gICAgICAgICAgICAgICAgICA8di1pY29uIGljb249XCJtZGktdGlja2V0XCIgY2xhc3M9XCJtci0xXCIvPlxuICAgICAgICAgICAgICAgICAgVGlja2V0c1xuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC92LWxpc3QtaXRlbS10aXRsZT5cbiAgICAgICAgICAgIDwvdi1saXN0LWl0ZW0+XG5cbiAgICAgICAgICAgIDx2LWxpc3QtaXRlbSBAY2xpY2s9XCJhdXRoU3RvcmUubG9nb3V0XCI+XG4gICAgICAgICAgICAgIDx2LWxpc3QtaXRlbS10aXRsZT5cbiAgICAgICAgICAgICAgICA8di1pY29uIGljb249XCJtZGktbG9nb3V0XCIvPlxuICAgICAgICAgICAgICAgIENlcnJhciBzZXNpw7NuXG4gICAgICAgICAgICAgIDwvdi1saXN0LWl0ZW0tdGl0bGU+XG4gICAgICAgICAgICA8L3YtbGlzdC1pdGVtPlxuXG4gICAgICAgICAgPC92LWxpc3Q+IFxuICAgICAgICA8L3YtbWVudT5cblxuICAgIDwvdi1jb250YWluZXI+XG4gIDwvdi1hcHAtYmFyPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuaW1wb3J0IHsgcmVmLCBvbk1vdW50ZWQsIHdhdGNoLCBjb21wdXRlZCB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgeyB1c2VSb3V0ZSB9IGZyb20gJ3Z1ZS1yb3V0ZXInO1xuaW1wb3J0IHsgdXNlQXV0aFN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL2F1dGgnO1xuaW1wb3J0IHsgdXNlTG9hZGVyU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvbG9hZGVyJztcbmltcG9ydCB7IHVzZVRoZW1lIH0gZnJvbSAndnVldGlmeSc7XG5pbXBvcnQgRWRpdFByb2ZpbGUgZnJvbSAnLi9FZGl0UHJvZmlsZS52dWUnO1xuaW1wb3J0IE92ZXJsYXkgZnJvbSAnLi9PdmVybGF5LnZ1ZSc7XG5pbXBvcnQgRWRpdENsaWVudEJhbmtBY2NvdW50cyBmcm9tICcuL0VkaXRDbGllbnRCYW5rQWNjb3VudHMudnVlJztcbmltcG9ydCBDcmVhdGVQcm92aWRlckJhbmtBY2NvdW50IGZyb20gJy4vQ3JlYXRlUHJvdmlkZXJCYW5rQWNjb3VudC52dWUnO1xuaW1wb3J0IHsgdXNlRGlzcGxheSB9IGZyb20gJ3Z1ZXRpZnknO1xuaW1wb3J0IENvbmZpZ3MgZnJvbSAnLi9Db25maWdzLnZ1ZSc7XG5cbmNvbnN0IE1FTlVfSVRFTVMgPSB7XG4gIENMSUVOVDogW1xuICAgIHtcbiAgICAgIHRpdGxlOiAnRG9jdW1lbnRvcycsXG4gICAgICByb3V0ZTogJy9kb2N1bWVudG9zJyxcbiAgICAgIGljb246ICdtZGktZmlsZSdcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnQWNjaW9uZXMnLFxuICAgICAgcm91dGU6ICcvYWNjaW9uZXMnLFxuICAgICAgaWNvbjogJ21kaS1iZWxsJ1xuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdQcm92ZWVkb3JlcycsXG4gICAgICByb3V0ZTogJy9wcm92ZWVkb3JlcycsXG4gICAgICBpY29uOiAnbWRpLWFjY291bnQtZ3JvdXAnXG4gICAgfSxcbiAgICB7XG4gICAgICB0aXRsZTogJ0ZhY3R1cmFzIGRlIG1pcyBwcm92ZWVkb3JlcycsXG4gICAgICByb3V0ZTogJy9mYWN0dXJhcycsXG4gICAgICBpY29uOiAnbWRpLWZpbGUtZG9jdW1lbnQtb3V0bGluZSdcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnSGlzdG9yaWFsJyxcbiAgICAgIHJvdXRlOiAnL2hpc3RvcmlhbCcsXG4gICAgICBpY29uOiAnbWRpLWhpc3RvcnknXG4gICAgfSxcbiAgICB7XG4gICAgICB0aXRsZTogJ1JlZ2xhcycsXG4gICAgICByb3V0ZTogJy9yZWdsYXMnLFxuICAgICAgaWNvbjogJ21kaS1zaHVmZmxlLXZhcmlhbnQnXG4gICAgfSxcbiAgICB7XG4gICAgICB0aXRsZTogJ1Rlc3RlcicsXG4gICAgICByb3V0ZTogJy90b29scy9ydWxlLXRlc3RlcicsXG4gICAgICBpY29uOiAnbWRpLXRlc3QtdHViZSdcbiAgICB9XG4gIF0sXG4gIFBST1ZJREVSOiBbXG4gICAge1xuICAgICAgdGl0bGU6ICdEb2N1bWVudG9zJyxcbiAgICAgIHJvdXRlOiAnL2RvY3VtZW50b3MnLFxuICAgICAgaWNvbjogJ21kaS1maWxlJ1xuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdGYWN0dXJhcyBhIG1pcyBjbGllbnRlcycsXG4gICAgICByb3V0ZTogJy9pbnZvaWNlc3Byb3ZpZGVyJyxcbiAgICAgIGljb246ICdtZGktZmlsZS1kb2N1bWVudC1vdXRsaW5lJ1xuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdIaXN0b3JpYWwnLFxuICAgICAgcm91dGU6ICcvaGlzdG9yaWFsJyxcbiAgICAgIGljb246ICdtZGktaGlzdG9yeSdcbiAgICB9LFxuICBdXG59O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdOYXZCYXInLFxuICBjb21wb25lbnRzOiB7XG4gICAgRWRpdFByb2ZpbGUsXG4gICAgT3ZlcmxheSxcbiAgICBFZGl0Q2xpZW50QmFua0FjY291bnRzLFxuICAgIENyZWF0ZVByb3ZpZGVyQmFua0FjY291bnQsXG4gICAgQ29uZmlnc1xuICB9LFxuXG4gIHNldHVwKCkge1xuICAgIGNvbnN0IG5vbmUgPSByZWYoZmFsc2UpO1xuICAgIGNvbnN0IHJvdXRlID0gdXNlUm91dGUoKTtcbiAgICBjb25zdCBhdXRoU3RvcmUgPSB1c2VBdXRoU3RvcmUoKTtcbiAgICBjb25zdCBsb2FkZXJTdG9yZSA9IHVzZUxvYWRlclN0b3JlKCk7XG4gICAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuICAgIGNvbnN0IGFjdGl2ZVRhYiA9IHJlZihyb3V0ZS5wYXRoKTtcbiAgICBjb25zdCBzaG93TmV3UHJvdmlkZXJPdmVybGF5ID0gcmVmKGZhbHNlKTtcbiAgICBjb25zdCBzaG93Q2xpZW50QmFua0FjY291bnRzID0gcmVmKGZhbHNlKTtcbiAgICBjb25zdCB7IHNtQW5kRG93biB9ID0gdXNlRGlzcGxheSgpO1xuICAgIGNvbnN0IHBsYXRmb3JtQXBwcyA9IHJlZihbXSk7ICAvLyBQbGF0YWZvcm1hcyBkaW7DoW1pY2FzXG5cbiAgICAvLyBGdW5jacOzbiBwYXJhIGFwbGljYXIgY29sb3JlcyBDU1MgZGluw6FtaWNvc1xuICAgIGNvbnN0IGFwcGx5Q3NzVmFyaWFibGVzID0gKCkgPT4ge1xuICAgICAgaWYgKGF1dGhTdG9yZS5zc29CcmFuZGluZykge1xuICAgICAgICBjb25zdCByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICByb290LnN0eWxlLnNldFByb3BlcnR5KCctLWJyYW5kLXByaW1hcnknLCBhdXRoU3RvcmUucHJpbWFyeUNvbG9yKTtcbiAgICAgICAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1icmFuZC1iZycsIGF1dGhTdG9yZS5iYWNrZ3JvdW5kQ29sb3IpO1xuICAgICAgICByb290LnN0eWxlLnNldFByb3BlcnR5KCctLWJyYW5kLXRleHQnLCBhdXRoU3RvcmUudGV4dENvbG9yKTtcblxuICAgICAgICBjb25zb2xlLmxvZygn8J+OqCBDU1MgVmFyaWFibGVzIGFwbGljYWRhczonLCB7XG4gICAgICAgICAgcHJpbWFyeTogYXV0aFN0b3JlLnByaW1hcnlDb2xvcixcbiAgICAgICAgICBiYWNrZ3JvdW5kOiBhdXRoU3RvcmUuYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgIHRleHQ6IGF1dGhTdG9yZS50ZXh0Q29sb3JcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIENhcmdhciBwbGF0YWZvcm1hcyBkaXNwb25pYmxlcyBkZXNkZSBBUElcbiAgICBjb25zdCBsb2FkUGxhdGZvcm1zID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2FwaS93aGl0ZS1sYWJlbC9wbGF0Zm9ybXMnKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgICBwbGF0Zm9ybUFwcHMudmFsdWUgPSBkYXRhLnBsYXRmb3JtcyB8fCBbXTtcbiAgICAgICAgICBjb25zb2xlLmxvZygn8J+MkCBQbGF0YWZvcm1hcyBjYXJnYWRhczonLCBwbGF0Zm9ybUFwcHMudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjYXJnYW5kbyBwbGF0YWZvcm1hczonLCBlcnJvcik7XG4gICAgICAgIC8vIFNpbGVuY2lhciBlcnJvciwgc2ltcGxlbWVudGUgbm8gbW9zdHJhciBlbCBtZW7DulxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBBcGxpY2FyIGNvbG9yZXMgYWwgbW9udGFyIGVsIGNvbXBvbmVudGVcbiAgICBvbk1vdW50ZWQoKCkgPT4ge1xuICAgICAgLy8gRGVidWcgbG9nc1xuICAgICAgY29uc29sZS5sb2coJ/CflI0gTmF2QmFyIC0gVXNlciBjb21wbGV0bzonLCBhdXRoU3RvcmUudXNlcik7XG4gICAgICBjb25zb2xlLmxvZygn8J+UjSBOYXZCYXIgLSBTU08gTWV0YWRhdGE6JywgYXV0aFN0b3JlLnNzb01ldGFkYXRhKTtcbiAgICAgIGNvbnNvbGUubG9nKCfwn5SNIE5hdkJhciAtIFNTTyBCcmFuZGluZzonLCBhdXRoU3RvcmUuc3NvQnJhbmRpbmcpO1xuICAgICAgY29uc29sZS5sb2coJ/CflI0gTmF2QmFyIC0gTG9nbyBVUkw6JywgYXV0aFN0b3JlLnNzb0xvZ28pO1xuICAgICAgY29uc29sZS5sb2coJ/CflI0gTmF2QmFyIC0gQ29tcGFueSBOYW1lOicsIGF1dGhTdG9yZS5jb21wYW55TmFtZSk7XG5cbiAgICAgIGFwcGx5Q3NzVmFyaWFibGVzKCk7XG4gICAgICBsb2FkUGxhdGZvcm1zKCk7XG4gICAgfSk7XG5cbiAgICAvLyBPYnNlcnZhciBjYW1iaW9zIGVuIGVsIGJyYW5kaW5nIHBhcmEgYXBsaWNhciBjb2xvcmVzIGRpbsOhbWljYW1lbnRlXG4gICAgd2F0Y2goKCkgPT4gYXV0aFN0b3JlLnNzb0JyYW5kaW5nLCAoKSA9PiB7XG4gICAgICBhcHBseUNzc1ZhcmlhYmxlcygpO1xuICAgIH0pO1xuXG4gICAgLy8gQ29tcHV0ZWQgcGFyYSBpdGVtcyBkZWwgbWVuw7pcbiAgICBjb25zdCBtZW51SXRlbXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAvLyBTaSBlbCB1c3VhcmlvIGVzIHRhbnRvIGNsaWVudGUgY29tbyBwcm92ZWVkb3IsIGFsdGVybmFyIHNlZ8O6biBlbCBlc3RhZG8gZGUgYG5vbmVgXG4gICAgICBpZiAoYXV0aFN0b3JlLmlzUHJvdmlkZXIgJiYgYXV0aFN0b3JlLmlzQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBub25lLnZhbHVlID8gTUVOVV9JVEVNUy5QUk9WSURFUiA6IE1FTlVfSVRFTVMuQ0xJRU5UO1xuICAgICAgfVxuXG4gICAgICAvLyBTaSBlcyDDum5pY2FtZW50ZSBjbGllbnRlXG4gICAgICBpZiAoYXV0aFN0b3JlLmlzQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBNRU5VX0lURU1TLkNMSUVOVDtcbiAgICAgIH1cblxuICAgICAgLy8gU2kgZXMgw7puaWNhbWVudGUgcHJvdmVlZG9yXG4gICAgICBpZiAoYXV0aFN0b3JlLmlzUHJvdmlkZXIpIHtcbiAgICAgICAgcmV0dXJuIE1FTlVfSVRFTVMuUFJPVklERVI7XG4gICAgICB9XG5cbiAgICAgIC8vIFJldG9ybm8gdmFjw61vIHNpIG5vIHRpZW5lIHJvbGVzIChjYXNvIGV4Y2VwY2lvbmFsKVxuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xuXG4gICAgY29uc3QgZ2V0SG9tZVJvdXRlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogYXV0aFN0b3JlLmlzUHJvdmlkZXIgPyAnSG9tZVByb3ZpZGVycycgOiAnSG9tZSdcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbm9uZSxcbiAgICAgIHJvdXRlLFxuICAgICAgYXV0aFN0b3JlLFxuICAgICAgbG9hZGVyU3RvcmUsXG4gICAgICB0aGVtZSxcbiAgICAgIGFjdGl2ZVRhYixcbiAgICAgIHNob3dOZXdQcm92aWRlck92ZXJsYXksXG4gICAgICBzaG93Q2xpZW50QmFua0FjY291bnRzLFxuICAgICAgc21BbmREb3duLFxuICAgICAgbWVudUl0ZW1zLFxuICAgICAgZ2V0SG9tZVJvdXRlLFxuICAgICAgcGxhdGZvcm1BcHBzXG4gICAgfVxuICB9LFxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG4udi10b29sYmFyX19leHRlbnNpb24ge1xuICBoZWlnaHQ6IDJweCAhaW1wb3J0YW50O1xufVxuXG4ubG9nby1jb250YWluZXIge1xuICBmbGV4LXNocmluazogMDtcbiAgbWFyZ2luLWxlZnQ6IDN2dztcbiAgbWFyZ2luLXJpZ2h0OiA4cHg7XG59XG5cbi5uYXYtbWVudS13cmFwcGVyIHtcbiAgZmxleDogMSAxIGF1dG87XG4gIG1pbi13aWR0aDogMDtcbiAgb3ZlcmZsb3cteDogYXV0bztcbiAgbWFyZ2luLWxlZnQ6IDI0cHg7XG4gIG1hcmdpbi1yaWdodDogOHB4O1xufVxuXG4uZm9udC1ib2xkIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5mb250LXRoaW4ge1xuICBmb250LXdlaWdodDogMzAwO1xufVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0MTVweCkge1xuICAubXktbWFyZ2luIHtcbiAgICBtYXJnaW4tYm90dG9tOiAyMnB4O1xuICB9XG59XG5cbi50ZXh0LWNhcHRpb257XG4gIGZvbnQtd2VpZ2h0OiA1NTA7XG4gIGNvbG9yOiByZ2IoNzMsIDY5LCA2OSk7XG59XG5cbi5tYWlsLWl0ZW17XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgZm9udC13ZWlnaHQ6IDkwMDtcbn1cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICA8di1mb290ZXIgY2xhc3M9XCJmb290ZXItbWFpbiBkLWZsZXggZmxleC1jb2x1bW4gdy0xMDAgbXQtYXV0byBtLTAgcC0wXCI+XG4gICAgPGRpdiBjbGFzcz1cImZvb3Rlci1saW5rcyBweC00IHB5LTMgYmctZ3JleS1kYXJrZW4tNCB0ZXh0LWNlbnRlciB3LTEwMFwiPlxuICAgICAgPGEgY2xhc3M9XCJmb290ZXItbGluayBteC0zXCIgOmhyZWY9XCJwcml2YWN5TGlua1wiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5cbiAgICAgICAgUG9sw610aWNhIGRlIFByaXZhY2lkYWRcbiAgICAgIDwvYT5cblxuICAgICAgPHNwYW4gY2xhc3M9XCJmb290ZXItc2VwYXJhdG9yXCI+fDwvc3Bhbj5cblxuICAgICAgPGEgY2xhc3M9XCJmb290ZXItbGluayBteC0zXCIgOmhyZWY9XCJ0ZXJtc0xpbmtcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+XG4gICAgICAgIFTDqXJtaW5vcyBkZSBVc29cbiAgICAgIDwvYT5cblxuICAgICAgPHNwYW4gY2xhc3M9XCJmb290ZXItc2VwYXJhdG9yXCI+fDwvc3Bhbj5cblxuICAgICAgPGEgY2xhc3M9XCJmb290ZXItbGluayBteC0zXCIgOmhyZWY9XCJjb250YWN0TGlua1wiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5cbiAgICAgICAgQ29udGFjdG9cbiAgICAgIDwvYT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmb290ZXItY29weXJpZ2h0IHB4LTQgcHktMiBiZy1ncmV5LWRhcmtlbi00IHRleHQtY2VudGVyIHctMTAwXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInRleHQtZ3JleS1saWdodGVuLTEgdGV4dC1jYXB0aW9uXCI+XG4gICAgICAgICZjb3B5OyB7eyBjdXJyZW50WWVhciB9fSB7eyBjb21wYW55RGlzcGxheU5hbWUgfX0uIFRvZG9zIGxvcyBkZXJlY2hvcyByZXNlcnZhZG9zLlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gIDwvdi1mb290ZXI+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0IHNldHVwPlxuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHsgdXNlQXV0aFN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL2F1dGgnO1xuXG5jb25zdCBhdXRoU3RvcmUgPSB1c2VBdXRoU3RvcmUoKTtcbmNvbnN0IGN1cnJlbnRZZWFyID0gY29tcHV0ZWQoKCkgPT4gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpKTtcblxuLy8gVVJMcyBkaW7DoW1pY2FzOiBicmFuZGluZyBkZSBtYXJjYSBibGFuY2Eg4oaSIGZhbGxiYWNrIFNtYXJ0RXNjcm93XG5jb25zdCBwcml2YWN5TGluayA9IGNvbXB1dGVkKCgpID0+IGF1dGhTdG9yZS5wcml2YWN5UG9saWN5VXJsIHx8ICdodHRwczovL3NtYXJ0ZXNjcm93LmV1L3ByaXZhY3lfcG9saWN5Jyk7XG5jb25zdCB0ZXJtc0xpbmsgPSBjb21wdXRlZCgoKSA9PiBhdXRoU3RvcmUudGVybXNVcmwgfHwgJ2h0dHBzOi8vc21hcnRlc2Nyb3cuZXUvdGVybXNfb2ZfdXNlJyk7XG5jb25zdCBjb250YWN0TGluayA9IGNvbXB1dGVkKCgpID0+IGF1dGhTdG9yZS5jb250YWN0VXJsIHx8ICdodHRwczovL3NtYXJ0ZXNjcm93LmV1L2NvbnRhY3QnKTtcbmNvbnN0IGNvbXBhbnlEaXNwbGF5TmFtZSA9IGNvbXB1dGVkKCgpID0+IGF1dGhTdG9yZS5jb21wYW55TmFtZSB8fCAnU21hcnRFc2Nyb3cnKTtcbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuLmZvb3Rlci1tYWluIHtcbiAgYm9yZGVyLXRvcDogMnB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTtcbn1cblxuLmZvb3Rlci1saW5rcyB7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpO1xufVxuXG4uZm9vdGVyLWxpbmsge1xuICBjb2xvcjogI2IwYmVjNTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzIGVhc2U7XG59XG5cbi5mb290ZXItbGluazpob3ZlciB7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLmZvb3Rlci1zZXBhcmF0b3Ige1xuICBjb2xvcjogIzYxNjE2MTtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJpbnZvaWNlLWhpc3Rvcnktb3ZlcmxheVwiPlxuICAgIDx2LWNhcmQgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgPHYtY2FyZC10aXRsZSBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1jbG9jay1oaXN0b3J5IG1lLTJcIj48L2k+XG4gICAgICAgIDxzcGFuPkhpc3RvcmlhbCBkZSBlc3RhZG9zIGRlIGxhIGZhY3R1cmE8L3NwYW4+XG4gICAgICA8L3YtY2FyZC10aXRsZT5cbiAgICAgIFxuICAgICAgPHYtY2FyZC1zdWJ0aXRsZSB2LWlmPVwiaW52b2ljZVwiPlxuICAgICAgICBGYWN0dXJhOiB7eyBpbnZvaWNlLmludm9pY2VOdW1iZXIgfX0gLSB7eyBpbnZvaWNlLnByb3ZpZGVyU29jaWFsRGVub21pbmF0aW9uIH19XG4gICAgICA8L3YtY2FyZC1zdWJ0aXRsZT5cbiAgICAgIFxuICAgICAgPHYtY2FyZC10ZXh0PlxuICAgICAgICA8di1kYXRhLXRhYmxlXG4gICAgICAgICAgdi1pZj1cInN0YXRlSGlzdG9yeSAmJiBzdGF0ZUhpc3RvcnkubGVuZ3RoID4gMFwiXG4gICAgICAgICAgOmhlYWRlcnM9XCJoZWFkZXJzXCJcbiAgICAgICAgICA6aXRlbXM9XCJzdGF0ZUhpc3RvcnlcIlxuICAgICAgICAgIDpsb2FkaW5nPVwibG9hZGluZ1wiXG4gICAgICAgID5cbiAgICAgICAgICA8IS0tIERhdGUgY29sdW1uIC0tPlxuICAgICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5jcmVhdGVkQXQ9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgICAge3sgZm9ybWF0RGF0ZVRpbWUoaXRlbS5jcmVhdGVkQXQpIH19XG4gICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICBcbiAgICAgICAgICA8IS0tIFByZXZpb3VzIHN0YXRlIGNvbHVtbiAtLT5cbiAgICAgICAgICA8dGVtcGxhdGUgI2l0ZW0ub2xkU3RhdGU9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgICAgPFN0YXR1c0NoaXAgOnN0YXR1cz1cIml0ZW0ub2xkU3RhdGVcIj48L1N0YXR1c0NoaXA+XG4gICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICBcbiAgICAgICAgICA8IS0tIE5ldyBzdGF0ZSBjb2x1bW4gLS0+XG4gICAgICAgICAgPHRlbXBsYXRlICNpdGVtLm5ld1N0YXRlPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICAgIDxTdGF0dXNDaGlwIDpzdGF0dXM9XCJpdGVtLm5ld1N0YXRlXCI+PC9TdGF0dXNDaGlwPlxuICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgXG4gICAgICAgICAgPCEtLSBDaGFuZ2UgdHlwZSBjb2x1bW4gLS0+XG4gICAgICAgICAgPHRlbXBsYXRlICNpdGVtLmNoYW5nZVR5cGU9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgICAgPHYtY2hpcFxuICAgICAgICAgICAgICA6Y29sb3I9XCJpdGVtLmNoYW5nZVR5cGUgPT09ICdhdXRvbWF0aWMnID8gJ2luZm8nIDogKGl0ZW0uY2hhbmdlVHlwZSA9PT0gJ3BsYXRmb3JtJyA/ICdzdWNjZXNzJyA6ICd3YXJuaW5nJylcIlxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICBjbGFzcz1cInRleHQtd2hpdGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBpdGVtLmNoYW5nZVR5cGUgPT09ICdhdXRvbWF0aWMnID8gJ0F1dG9tw6F0aWNvJyA6IChpdGVtLmNoYW5nZVR5cGUgPT09ICdwbGF0Zm9ybScgPyAnUGxhdGFmb3JtYScgOiAnTWFudWFsJykgfX1cbiAgICAgICAgICAgIDwvdi1jaGlwPlxuICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgIDwvdi1kYXRhLXRhYmxlPlxuICAgICAgICBcbiAgICAgICAgPGRpdiB2LWVsc2UtaWY9XCIhbG9hZGluZ1wiIGNsYXNzPVwidGV4dC1jZW50ZXIgbXktNFwiPlxuICAgICAgICAgIDxwPk5vIGhheSBoaXN0b3JpYWwgZGUgZXN0YWRvcyBkaXNwb25pYmxlIHBhcmEgZXN0YSBmYWN0dXJhLjwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3YtY2FyZC10ZXh0PlxuICAgICAgXG4gICAgICA8di1jYXJkLWFjdGlvbnMgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgPHYtYnRuXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICBjbGFzcz1cInRleHQtd2hpdGUgYWRkLXRlbXBsYXRlcy1idXR0b25cIlxuICAgICAgICAgIEBjbGljaz1cIiRlbWl0KCdjbG9zZScpXCJcbiAgICAgICAgPlxuICAgICAgICAgIENlcnJhclxuICAgICAgICA8L3YtYnRuPlxuICAgICAgICBcbiAgICAgICAgPHYtYnRuXG4gICAgICAgICAgdi1pZj1cInN0YXRlSGlzdG9yeSAmJiBzdGF0ZUhpc3RvcnkubGVuZ3RoID4gMFwiXG4gICAgICAgICAgY29sb3I9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgIGNsYXNzPVwidGV4dC13aGl0ZSBhZGQtdGVtcGxhdGVzLWJ1dHRvbiBtcy0yXCJcbiAgICAgICAgICBAY2xpY2s9XCJleHBvcnRUb0NTVlwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLWRvd25sb2FkIG1lLTJcIj48L2k+XG4gICAgICAgICAgRXhwb3J0YXJcbiAgICAgICAgPC92LWJ0bj5cbiAgICAgIDwvdi1jYXJkLWFjdGlvbnM+XG4gICAgPC92LWNhcmQ+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBTdGF0dXNDaGlwIGZyb20gJy4vU3RhdHVzQ2hpcC52dWUnO1xuaW1wb3J0IHsgdXNlR2xvYmFsVXRpbHMgfSBmcm9tICcuLi91dGlscy9nbG9iYWxzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnSW52b2ljZVN0YXRlSGlzdG9yeU92ZXJsYXknLFxuICBjb21wb25lbnRzOiB7XG4gICAgU3RhdHVzQ2hpcFxuICB9LFxuICBwcm9wczoge1xuICAgIGludm9pY2U6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfVxuICB9LFxuICBzZXR1cCgpIHtcbiAgICBjb25zdCB7IHRvYXN0IH0gPSB1c2VHbG9iYWxVdGlscygpO1xuICAgIHJldHVybiB7IHRvYXN0IH07XG4gIH0sXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICBzdGF0ZUhpc3Rvcnk6IFtdLFxuICAgICAgaGVhZGVyczogW1xuICAgICAgICB7IHRpdGxlOiAnRmVjaGEgeSBob3JhJywga2V5OiAnY3JlYXRlZEF0Jywgc29ydGFibGU6IHRydWUsIGFsaWduOiAnc3RhcnQnIH0sXG4gICAgICAgIHsgdGl0bGU6ICdFc3RhZG8gYW50ZXJpb3InLCBrZXk6ICdvbGRTdGF0ZScsIHNvcnRhYmxlOiB0cnVlLCBhbGlnbjogJ2NlbnRlcicgfSxcbiAgICAgICAgeyB0aXRsZTogJ051ZXZvIGVzdGFkbycsIGtleTogJ25ld1N0YXRlJywgc29ydGFibGU6IHRydWUsIGFsaWduOiAnY2VudGVyJyB9LFxuICAgICAgICB7IHRpdGxlOiAnVGlwbyBkZSBjYW1iaW8nLCBrZXk6ICdjaGFuZ2VUeXBlJywgc29ydGFibGU6IHRydWUsIGFsaWduOiAnY2VudGVyJyB9XG4gICAgICBdXG4gICAgfTtcbiAgfSxcbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLmZldGNoU3RhdGVIaXN0b3J5KCk7XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBhc3luYyBmZXRjaFN0YXRlSGlzdG9yeSgpIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICBcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEZldGNoIHRoZSBoaXN0b3J5IGRhdGEgZnJvbSB0aGUgQVBJXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYC9hcGkvaW52b2ljZXMvJHt0aGlzLmludm9pY2UuaWR9L2hpc3RvcnlgKTtcbiAgICAgICAgXG4gICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICB0aGlzLnN0YXRlSGlzdG9yeSA9IGRhdGFbJ2h5ZHJhOm1lbWJlciddIHx8IFtdO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgaW52b2ljZSBzdGF0ZSBoaXN0b3J5OicsIGVycm9yKTtcbiAgICAgICAgdGhpcy50b2FzdC5lcnJvcignRXJyb3IgYWwgY2FyZ2FyIGVsIGhpc3RvcmlhbCBkZSBlc3RhZG9zOiAnICsgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIHRoaXMuc3RhdGVIaXN0b3J5ID0gW107XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFxuICAgIGZvcm1hdERhdGVUaW1lKGRhdGVTdHJpbmcpIHtcbiAgICAgIGlmICghZGF0ZVN0cmluZykgcmV0dXJuICctLSc7XG4gICAgICBcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgICAgIFxuICAgICAgLy8gRm9ybWF0IGRhdGVcbiAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygnZXMtRVMnLCB7XG4gICAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICAgIHRpbWVab25lOiAnVVRDJ1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIEZvcm1hdCB0aW1lXG4gICAgICBjb25zdCBmb3JtYXR0ZWRUaW1lID0gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcoJ2VzLUVTJywge1xuICAgICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgICBzZWNvbmQ6ICcyLWRpZ2l0JyxcbiAgICAgICAgdGltZVpvbmU6ICdVVEMnXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgcmV0dXJuIGAke2Zvcm1hdHRlZERhdGV9ICR7Zm9ybWF0dGVkVGltZX1gO1xuICAgIH0sXG4gICAgXG4gICAgZXhwb3J0VG9DU1YoKSB7XG4gICAgICBpZiAoIXRoaXMuc3RhdGVIaXN0b3J5IHx8IHRoaXMuc3RhdGVIaXN0b3J5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnRvYXN0Lndhcm5pbmcoJ05vIGhheSBkYXRvcyBwYXJhIGV4cG9ydGFyJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gR2VuZXJhdGUgQ1NWIGhlYWRlcnNcbiAgICAgICAgY29uc3QgY3N2SGVhZGVycyA9IHRoaXMuaGVhZGVycy5tYXAoaGVhZGVyID0+IGhlYWRlci50aXRsZSkuam9pbignLCcpO1xuICAgICAgICBcbiAgICAgICAgLy8gR2VuZXJhdGUgQ1NWIHJvd3NcbiAgICAgICAgY29uc3QgY3N2Um93cyA9IHRoaXMuc3RhdGVIaXN0b3J5Lm1hcChpdGVtID0+IHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgYFwiJHt0aGlzLmZvcm1hdERhdGVUaW1lKGl0ZW0uY3JlYXRlZEF0KX1cImAsXG4gICAgICAgICAgICBgXCIke3RoaXMuZ2V0U3RhdHVzVGV4dChpdGVtLm9sZFN0YXRlKX1cImAsXG4gICAgICAgICAgICBgXCIke3RoaXMuZ2V0U3RhdHVzVGV4dChpdGVtLm5ld1N0YXRlKX1cImAsXG4gICAgICAgICAgICBgXCIke2l0ZW0uY2hhbmdlVHlwZSA9PT0gJ2F1dG9tYXRpYycgPyAnQXV0b23DoXRpY28nIDogKGl0ZW0uY2hhbmdlVHlwZSA9PT0gJ3BsYXRmb3JtJyA/ICdQbGF0YWZvcm1hJyA6ICdNYW51YWwnKX1cImBcbiAgICAgICAgICBdLmpvaW4oJywnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBDb21iaW5lIGhlYWRlcnMgYW5kIHJvd3NcbiAgICAgICAgY29uc3QgY3N2Q29udGVudCA9IFtjc3ZIZWFkZXJzLCAuLi5jc3ZSb3dzXS5qb2luKCdcXG4nKTtcbiAgICAgICAgXG4gICAgICAgIC8vIENyZWF0ZSBhIEJsb2Igd2l0aCB0aGUgQ1NWIGNvbnRlbnRcbiAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtjc3ZDb250ZW50XSwgeyB0eXBlOiAndGV4dC9jc3Y7Y2hhcnNldD11dGYtODsnIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gQ3JlYXRlIGEgZG93bmxvYWQgbGlua1xuICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBcbiAgICAgICAgLy8gQ3JlYXRlIGEgVVJMIGZvciB0aGUgQmxvYlxuICAgICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICBcbiAgICAgICAgLy8gU2V0dXAgdGhlIGRvd25sb2FkIGxpbmtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmwpO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBgaGlzdG9yaWFsLWVzdGFkb3MtZmFjdHVyYS0ke3RoaXMuaW52b2ljZS5pbnZvaWNlTnVtYmVyfS5jc3ZgKTtcbiAgICAgICAgbGluay5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgIFxuICAgICAgICAvLyBBZGQgdGhlIGxpbmsgdG8gdGhlIERPTVxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICBcbiAgICAgICAgLy8gQ2xpY2sgdGhlIGxpbmsgdG8gdHJpZ2dlciB0aGUgZG93bmxvYWRcbiAgICAgICAgbGluay5jbGljaygpO1xuICAgICAgICBcbiAgICAgICAgLy8gQ2xlYW4gdXBcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKCdIaXN0b3JpYWwgZXhwb3J0YWRvIGNvcnJlY3RhbWVudGUnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGV4cG9ydGluZyB0byBDU1Y6JywgZXJyb3IpO1xuICAgICAgICB0aGlzLnRvYXN0LmVycm9yKCdFcnJvciBhbCBleHBvcnRhciBoaXN0b3JpYWw6ICcgKyBlcnJvci5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFxuICAgIGdldFN0YXR1c1RleHQoc3RhdHVzVmFsdWUpIHtcbiAgICAgIGNvbnN0IHN0YXR1c01hcCA9IHtcbiAgICAgICAgMDogJ1RvZG9zJyxcbiAgICAgICAgMTogJ1ZhbGlkYWRhJyxcbiAgICAgICAgMjogJ0VsZWdpYmxlJyxcbiAgICAgICAgMzogJ05vIGVsZWdpYmxlJyxcbiAgICAgICAgNDogJ0FkZWxhbnRhZGEnLFxuICAgICAgICA1OiAnRmluYWxpemFkYSBzaW4gYWRlbGFudGFyJyxcbiAgICAgICAgNjogJ1BhcmEgdmFsaWRhcicsXG4gICAgICAgIDc6ICdGaW5hbGl6YWRhIGRlc2RlIGFkZWxhbnRhcicsXG4gICAgICAgIDg6ICdBZGVsYW50YWRhIFZhbGlkYWRhJyxcbiAgICAgICAgOTogJ0FkZWxhbnRhZGEgVmFsaWRhZGEgeSBQYWdhZGEnLFxuICAgICAgICAxMDogJ0ZpbmFsaXphZGEgc2luIGFkZWxhbnRhciBQYWdhZGEnLFxuICAgICAgICAxMTogJ0ZpbmFsaXphZGEgZGVzZGUgYWRlbGFudGFyIFBhZ2FkYSdcbiAgICAgIH07XG4gICAgICByZXR1cm4gc3RhdHVzTWFwW3N0YXR1c1ZhbHVlXSB8fCAnRGVzY29ub2NpZG8nO1xuICAgIH1cbiAgfVxufTtcbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuLmludm9pY2UtaGlzdG9yeS1vdmVybGF5IHtcbiAgcGFkZGluZzogMTZweDtcbiAgbWF4LXdpZHRoOiAxMDAlO1xufVxuXG46ZGVlcCgudi1kYXRhLXRhYmxlLWhlYWRlciB0aCkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuOmRlZXAoLnYtZGF0YS10YWJsZV9fdHI6aG92ZXIpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbn1cblxuOmRlZXAoLnYtZGF0YS10YWJsZSkge1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xufVxuPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJhY3Rpb25zLWNvbnRhaW5lclwiPlxuICAgIDxoMSBjbGFzcz1cInBhZ2UtdGl0bGVcIj5BY2Npb25lczwvaDE+XG4gICAgXG4gICAgPCEtLSBUYWJzIENvbnRhaW5lciB3aXRoIHJlc3BvbnNpdmUgZGVzaWduIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJzLXdyYXBwZXJcIj5cbiAgICAgIDx2LXRhYnMgXG4gICAgICAgIHYtbW9kZWw9XCJhY3RpdmVUYWJcIlxuICAgICAgICBjbGFzcz1cInJlc3BvbnNpdmUtdGFic1wiXG4gICAgICAgIDpkaXJlY3Rpb249XCIkdnVldGlmeS5kaXNwbGF5Lm1vYmlsZSA/ICdob3Jpem9udGFsJyA6ICdob3Jpem9udGFsJ1wiXG4gICAgICAgIHNob3ctYXJyb3dzXG4gICAgICAgIHNsaWRlci1jb2xvcj1cInByaW1hcnlcIlxuICAgICAgICA6Zml4ZWQtdGFicz1cImZhbHNlXCJcbiAgICAgICAgOmNlbnRlcmVkPVwiISR2dWV0aWZ5LmRpc3BsYXkubW9iaWxlXCJcbiAgICAgICAgZGVuc2l0eT1cImNvbWZvcnRhYmxlXCJcbiAgICAgID5cbiAgICAgICAgPHYtdGFiXG4gICAgICAgICAgdi1mb3I9XCJ0YWIgaW4gdmlzaWJsZVRhYnNcIlxuICAgICAgICAgIDprZXk9XCJ0YWIudmFsdWVcIlxuICAgICAgICAgIDp2YWx1ZT1cInRhYi52YWx1ZVwiXG4gICAgICAgICAgY2xhc3M9XCJ0YWItaXRlbVwiXG4gICAgICAgICAgOmNsYXNzPVwieyAnbW9iaWxlLXRhYic6ICR2dWV0aWZ5LmRpc3BsYXkubW9iaWxlIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWItbGFiZWxcIj57eyB0YWIubGFiZWwgfX08L3NwYW4+XG4gICAgICAgIDwvdi10YWI+XG4gICAgICA8L3YtdGFicz5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQ29udGVudCBXaW5kb3cgLS0+XG4gICAgPHYtY29udGFpbmVyIGZsdWlkIGNsYXNzPVwiY29udGVudC1jb250YWluZXJcIj5cbiAgICAgIDx2LXdpbmRvdyB2LW1vZGVsPVwiYWN0aXZlVGFiXCIgY2xhc3M9XCJ3aW5kb3ctY29udGVudFwiPlxuICAgICAgICA8di13aW5kb3ctaXRlbSBcbiAgICAgICAgICB2LWZvcj1cInRhYiBpbiB2aXNpYmxlVGFic1wiIFxuICAgICAgICAgIDprZXk9XCJ0YWIudmFsdWVcIiBcbiAgICAgICAgICA6dmFsdWU9XCJ0YWIudmFsdWVcIlxuICAgICAgICAgIGNsYXNzPVwid2luZG93LWl0ZW1cIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1jb250ZW50XCI+XG4gICAgICAgICAgICA8aW52b2ljZS1jYXJkcyA6aW52b2ljZXM9XCJpbnZvaWNlc1wiPjwvaW52b2ljZS1jYXJkcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC92LXdpbmRvdy1pdGVtPlxuICAgICAgPC92LXdpbmRvdz5cbiAgICA8L3YtY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4vKipcbiAqIEVuIGVzdGUgcHJveWVjdG8gZW5jb250cmFyYXMgdW5hIGNhcnBldGEgVE9ETywgY29uIHBkZnMgZGUgbGFzIHRhcmVhcyBmYWx0YW50ZXMgZGVudHJvLi4uXG4gKiBAYXV0aG9yIEJyYWlhbiBNYWNpZWxcbiAqIFRPRE86IFRhcmpldGFzIGEgQ29tcGxldGFyIFJlZiAvVE9ETy9BQ0NJT05FUy0wMDEucGRmOlxuICogLSBBZGVsYW50YWRhIGNvbiBGb3JtYSBkZSBQYWdvIEJhbmNvIFRlcmNlcm9zICBcbiAqIC0gQWRlbGFudGFkYSBjb24gRm9ybWEgZGUgUGFnbyBCYW5jbyBUZXNvcmVyw61hIFByb3BpYSBcbiAqIC0gRmluYWxpemFkYSBkZXNkZSBhZGVsYW50YXIgRm9ybWEgZGUgUGFnbyBCYW5jbyBEZSBUZXJjZXJvcyAgXG4gKiArIEFncmVhZ2FyIEN1ZW50YSBCYW5jYXJpYSBhIHBhZ2FyIHBhcmEgdG9kYXMgbGFzIHRhcmpldGFzIFxuICovXG5pbXBvcnQgeyByZWYsIGNvbXB1dGVkLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgeyB1c2VJbnZvaWNlU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvaW52b2ljZSdcbmltcG9ydCBJbnZvaWNlQ2FyZHMgZnJvbSAnLi4vY29tcG9uZW50cy9JbnZvaWNlQ2FyZHMudnVlJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnQWN0aW9ucycsXG4gIGNvbXBvbmVudHM6IHsgSW52b2ljZUNhcmRzIH0sXG4gIHNldHVwKCkge1xuICAgIC8vIFRPRE86IFRoaXMgcGllY2Ugb2YgY29kZSBtdXN0IGJlIHJlcGxhY2VkIGJ5IGEgdXNlciBsb2dpbi9yZWdpc3RlciBtZXRob2QgdGhhdCByZWNvZ25pemUgdXNlciB1c2luZyBjb29raWVzIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQuLi4gICAgIFxuICAgIGNvbnN0IGludm9pY2VTdG9yZSA9IHVzZUludm9pY2VTdG9yZSgpXG4gICAgY29uc3QgYWN0aXZlVGFiID0gcmVmKDQpO1xuXG4gICAgY29uc3QgdGFicyA9IFtcbiAgICAgIHsgbGFiZWw6IFwiQWRlbGFudGFkYVwiLCB2YWx1ZTogNCwgc2hvdzogdHJ1ZSB9LFxuICAgICAgeyBsYWJlbDogXCJGaW5hbGl6YSBzaW4gYWRlbGFudGFyXCIsIHZhbHVlOiA1LCBzaG93OiB0cnVlIH0sXG4gICAgICB7IGxhYmVsOiBcIlBhcmEgdmFsaWRhclwiLCB2YWx1ZTogNiwgc2hvdzogdHJ1ZSB9LFxuICAgICAgeyBsYWJlbDogXCJWYWxpZGFkYXNcIiwgdmFsdWU6IDEsIHNob3c6IHRydWUgfSxcbiAgICAgIHsgbGFiZWw6IFwiRmluYWxpemFkYSBkZXNkZSBhZGVsYW50YXJcIiwgdmFsdWU6IDcsIHNob3c6IHRydWUgfSxcbiAgICAgIHsgbGFiZWw6IFwiQWRlbGFudGFkYSBWYWxpZGFkYVwiLCB2YWx1ZTogOCwgc2hvdzogZmFsc2UgfSxcbiAgICAgIHsgbGFiZWw6IFwiQWRlbGFudGFkYSBWYWxpZGFkYSB5IFBhZ2FkYVwiLCB2YWx1ZTogOSwgc2hvdzogZmFsc2UgfSxcbiAgICAgIHsgbGFiZWw6IFwiRmluYWxpemFkYSBzaW4gYWRlbGFudGFyIFBhZ2FkYVwiLCB2YWx1ZTogMTAsIHNob3c6IGZhbHNlIH0sXG4gICAgICB7IGxhYmVsOiBcIkZpbmFsaXphZGEgZGVzZGUgYWRlbGFudGFyIFBhZ2FkYVwiLCB2YWx1ZTogMTEsIHNob3c6IGZhbHNlIH0sXG4gICAgICB7IGxhYmVsOiAnVmFsaWRhciBwcm92ZWVkb3JlcycsIHZhbHVlOiAndmFsaWRhdGVQcm92aWRlcnMnLCBzaG93OiB0cnVlIH0sXG4gICAgXTtcblxuICAgIC8vIENvbXB1dGVkIHBhcmEgZmlsdHJhciB0YWJzIHZpc2libGVzXG4gICAgY29uc3QgdmlzaWJsZVRhYnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGFicy5maWx0ZXIodGFiID0+IHRhYi5zaG93KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGxvYWRJbnZvaWNlcyA9IChzdGF0dXMpID0+IHtcbiAgICAgIGludm9pY2VTdG9yZS5mZXRjaEludm9pY2VzQnlTdGF0dXMoc3RhdHVzKVxuICAgIH1cblxuICAgIHdhdGNoKGFjdGl2ZVRhYiwgKG5ld1RhYikgPT4ge1xuICAgICAgbG9hZEludm9pY2VzKG5ld1RhYilcbiAgICB9LCB7IFxuICAgICAgZGVlcDogdHJ1ZSxcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSBcbiAgICB9KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGl2ZVRhYixcbiAgICAgIHRhYnMsXG4gICAgICB2aXNpYmxlVGFicyxcbiAgICAgIGludm9pY2VzOiBjb21wdXRlZCgoKSA9PiBpbnZvaWNlU3RvcmUuaW52b2ljZXMpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cbi5hY3Rpb25zLWNvbnRhaW5lciB7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiAxMDB2aDtcbiAgcGFkZGluZzogMDtcbn1cblxuLnBhZ2UtdGl0bGUge1xuICBmb250LXNpemU6IDEuNzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIG1hcmdpbjogMXJlbTtcbiAgY29sb3I6IHJnYih2YXIoLS12LXRoZW1lLW9uLXN1cmZhY2UpKTtcbn1cblxuLnRhYnMtd3JhcHBlciB7XG4gIHdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdy14OiBhdXRvO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IodmFyKC0tdi10aGVtZS1zdXJmYWNlKSk7XG4gIGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKHZhcigtLXYtYm9yZGVyLWNvbG9yKSwgdmFyKC0tdi1ib3JkZXItb3BhY2l0eSkpO1xufVxuXG4ucmVzcG9uc2l2ZS10YWJzIHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi13aWR0aDogbWF4LWNvbnRlbnQ7XG59XG5cbi50YWItaXRlbSB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIG1pbi13aWR0aDogYXV0bztcbiAgbWF4LXdpZHRoOiBub25lO1xuICBwYWRkaW5nOiAwIDEycHg7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICBmb250LXdlaWdodDogNTAwO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlO1xufVxuXG4udGFiLWxhYmVsIHtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uY29udGVudC1jb250YWluZXIge1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4ud2luZG93LWNvbnRlbnQge1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogNjB2aDtcbn1cblxuLndpbmRvdy1pdGVtIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi50YWItY29udGVudCB7XG4gIHBhZGRpbmc6IDFyZW07XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4vKiBSZXNwb25zaXZlIERlc2lnbiAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gIC5wYWdlLXRpdGxlIHtcbiAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICBtYXJnaW46IDAuNzVyZW07XG4gIH1cbiAgXG4gIC5tb2JpbGUtdGFiIHtcbiAgICBtaW4td2lkdGg6IDEyMHB4ICFpbXBvcnRhbnQ7XG4gICAgcGFkZGluZzogMCA4cHggIWltcG9ydGFudDtcbiAgfVxuICBcbiAgLnRhYi1sYWJlbCB7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjE7XG4gIH1cbiAgXG4gIC50YWItY29udGVudCB7XG4gICAgcGFkZGluZzogMC43NXJlbTtcbiAgfVxuICBcbiAgLnRhYnMtd3JhcHBlciB7XG4gICAgLyogUGVybWl0aXIgc2Nyb2xsIGhvcml6b250YWwgZW4gbcOzdmlsICovXG4gICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjtcbiAgfVxuICBcbiAgLnRhYnMtd3JhcHBlcjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgIGhlaWdodDogNHB4O1xuICB9XG4gIFxuICAudGFicy13cmFwcGVyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XG4gICAgYmFja2dyb3VuZDogI2YxZjFmMTtcbiAgfVxuICBcbiAgLnRhYnMtd3JhcHBlcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgIGJhY2tncm91bmQ6ICNjMWMxYzE7XG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xuICB9XG4gIFxuICAudGFicy13cmFwcGVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogI2E4YThhODtcbiAgfVxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgLnBhZ2UtdGl0bGUge1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgICBtYXJnaW46IDAuNXJlbTtcbiAgfVxuICBcbiAgLm1vYmlsZS10YWIge1xuICAgIG1pbi13aWR0aDogMTAwcHggIWltcG9ydGFudDtcbiAgICBwYWRkaW5nOiAwIDZweCAhaW1wb3J0YW50O1xuICB9XG4gIFxuICAudGFiLWxhYmVsIHtcbiAgICBmb250LXNpemU6IDAuN3JlbTtcbiAgfVxuICBcbiAgLnRhYi1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwLjVyZW07XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDM2MHB4KSB7XG4gIC5tb2JpbGUtdGFiIHtcbiAgICBtaW4td2lkdGg6IDkwcHggIWltcG9ydGFudDtcbiAgICBwYWRkaW5nOiAwIDRweCAhaW1wb3J0YW50O1xuICB9XG4gIFxuICAudGFiLWxhYmVsIHtcbiAgICBmb250LXNpemU6IDAuNjVyZW07XG4gIH1cbn1cblxuLyogTWVqb3JhcyB2aXN1YWxlcyAqL1xuLnJlc3BvbnNpdmUtdGFicyA6ZGVlcCgudi10YWItLXNlbGVjdGVkKSB7XG4gIGNvbG9yOiB2YXIoLS12LXByaW1hcnktYmFzZSwgIzFlMjEyNCk7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi5yZXNwb25zaXZlLXRhYnMgOmRlZXAoLnYtdGFicy1zbGlkZXIpIHtcbiAgaGVpZ2h0OiAzcHg7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbn1cblxuLndpbmRvdy1jb250ZW50IDpkZWVwKC52LXdpbmRvd19fY29udGFpbmVyKSB7XG4gIGhlaWdodDogYXV0bztcbn1cblxuLyogQXNlZ3VyYXIgcXVlIGVsIGNvbnRlbmlkbyBzZWEgY29tcGxldGFtZW50ZSByZXNwb25zaXZlICovXG4qIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiYWN0aW9ucy1jb250YWluZXJcIj5cbiAgICA8aDEgY2xhc3M9XCJwYWdlLXRpdGxlXCI+RG9jdW1lbnRvczwvaDE+XG5cbiAgICA8IS0tIFRhYnMgQ29udGFpbmVyIHdpdGggcmVzcG9uc2l2ZSBkZXNpZ24gLS0+XG4gICAgPGRpdiBjbGFzcz1cInRhYnMtd3JhcHBlclwiPlxuICAgICAgPHYtdGFicyBcbiAgICAgICAgdi1tb2RlbD1cImFjdGl2ZVRhYlwiXG4gICAgICAgIGNsYXNzPVwicmVzcG9uc2l2ZS10YWJzXCJcbiAgICAgICAgOmRpcmVjdGlvbj1cIiR2dWV0aWZ5LmRpc3BsYXkubW9iaWxlID8gJ2hvcml6b250YWwnIDogJ2hvcml6b250YWwnXCJcbiAgICAgICAgc2hvdy1hcnJvd3NcbiAgICAgICAgc2xpZGVyLWNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIDpmaXhlZC10YWJzPVwiZmFsc2VcIlxuICAgICAgICA6Y2VudGVyZWQ9XCIhJHZ1ZXRpZnkuZGlzcGxheS5tb2JpbGVcIlxuICAgICAgICBkZW5zaXR5PVwiY29tZm9ydGFibGVcIlxuICAgICAgPlxuICAgICAgICA8di10YWJcbiAgICAgICAgICB2LWZvcj1cIih0YWIsIGtleSkgaW4gdGFic1wiXG4gICAgICAgICAgOmtleT1cImtleVwiXG4gICAgICAgICAgOnZhbHVlPVwia2V5XCJcbiAgICAgICAgICBjbGFzcz1cInRhYi1pdGVtXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7ICdtb2JpbGUtdGFiJzogJHZ1ZXRpZnkuZGlzcGxheS5tb2JpbGUgfVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhYi1sYWJlbFwiPnt7IHRhYi5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgPC92LXRhYj5cbiAgICAgIDwvdi10YWJzPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDb250ZW50IFdpbmRvdyAtLT5cbiAgICA8di1jb250YWluZXIgZmx1aWQgY2xhc3M9XCJjb250ZW50LWNvbnRhaW5lclwiPlxuICAgICAgPHYtd2luZG93IHYtbW9kZWw9XCJhY3RpdmVUYWJcIiBjbGFzcz1cIndpbmRvdy1jb250ZW50XCI+XG4gICAgICAgIDx2LXdpbmRvdy1pdGVtIFxuICAgICAgICAgIHYtZm9yPVwiKHRhYiwga2V5KSBpbiB0YWJzXCIgXG4gICAgICAgICAgOmtleT1cImtleVwiIFxuICAgICAgICAgIDp2YWx1ZT1cImtleVwiXG4gICAgICAgICAgY2xhc3M9XCJ3aW5kb3ctaXRlbVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkb2N1bWVudC1saXN0IHYtaWY9XCJrZXkgPT09ICdnZW5Eb2NzJ1wiIDpkb2N1bWVudHM9XCJkb2N1bWVudHNcIiAvPlxuICAgICAgICAgICAgPGludm9pY2UtY2FyZHMgdi1lbHNlIDppbnZvaWNlcz1cImludm9pY2VzXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC92LXdpbmRvdy1pdGVtPlxuICAgICAgPC92LXdpbmRvdz5cbiAgICA8L3YtY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyByZWYsIGNvbXB1dGVkLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5cbmltcG9ydCB7IHVzZUludm9pY2VDbGllbnRTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9pbnZvaWNlQ2xpZW50J1xuaW1wb3J0IHsgdXNlSW52b2ljZVByb3ZpZGVyU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvaW52b2ljZVByb3ZpZGVyJ1xuaW1wb3J0IHsgdXNlQXV0aFN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL2F1dGgnO1xuXG5pbXBvcnQgSW52b2ljZUNhcmRzIGZyb20gJy4uL2NvbXBvbmVudHMvSW52b2ljZUNhcmRzLnZ1ZSc7XG5pbXBvcnQgRG9jdW1lbnRMaXN0IGZyb20gJy4uL2NvbXBvbmVudHMvRG9jdW1lbnRMaXN0LnZ1ZSc7XG5pbXBvcnQgeyB1c2VGaWxlc1N0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL2ZpbGVzJztcblxuaW1wb3J0IHsgdXNlR2xvYmFsVXRpbHMgfSBmcm9tICcuLi91dGlscy9nbG9iYWxzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnQWN0aW9ucycsXG4gIGNvbXBvbmVudHM6IHsgSW52b2ljZUNhcmRzLCBEb2N1bWVudExpc3QgfSxcbiAgc2V0dXAoKSB7XG4gICAgLy8gVE9ETzogVGhpcyBwaWVjZSBvZiBjb2RlIG11c3QgYmUgcmVwbGFjZWQgYnkgYSB1c2VyIGxvZ2luL3JlZ2lzdGVyIG1ldGhvZCB0aGF0IHJlY29nbml6ZSB1c2VyIHVzaW5nIGNvb2tpZXMgb3Igc29tZXRoaW5nIGxpa2UgdGhhdC4uLiBcbiAgICBjb25zdCB7IGZldGNoRGluYW15Y0ludm9pY2VGaWx0ZXJlZCB9ID0gdXNlR2xvYmFsVXRpbHMoKTtcbiAgICBcbiAgICBjb25zdCBhdXRoU3RvcmUgPSB1c2VBdXRoU3RvcmUoKTtcbiAgICBjb25zdCBpbnZvaWNlU3RvcmUgPSBhdXRoU3RvcmUuaXNDbGllbnQgPyB1c2VJbnZvaWNlQ2xpZW50U3RvcmUoKSA6IHVzZUludm9pY2VQcm92aWRlclN0b3JlKClcbiAgICBcbiAgICBjb25zdCBmaWxlU3RvcmUgPSB1c2VGaWxlc1N0b3JlKClcbiAgICBjb25zdCBhY3RpdmVUYWIgPSByZWYoJ2dlbkRvY3MnKTtcbiAgICBjb25zdCBjdXJyZW50U3RhdHVzID0gcmVmKG51bGwpO1xuXG4gICAgY29uc3QgdGFicyA9IHtcbiAgICAgIGdlbkRvY3M6IHsgbGFiZWw6IFwiRG9jdW1lbnRvcyBnZW5lcmFsZXNcIiwgdmFsdWU6IFswLCAxXSB9LFxuICAgICAgaW52RG9jczogeyBsYWJlbDogXCJEb2N1bWVudG9zIGRlIGxhcyBmYWN0dXJhc1wiLCB2YWx1ZTogWzQsIDgsIDksIDEwLCAxMV0gfSxcbiAgICB9O1xuXG4gICAgY29uc3QgbG9hZEludm9pY2VzID0gKHN0YXR1cykgPT4ge1xuICAgICAgZmV0Y2hEaW5hbXljSW52b2ljZUZpbHRlcmVkKHN0YXR1cywgaW52b2ljZVN0b3JlKTtcbiAgICB9XG5cbiAgICB3YXRjaChhY3RpdmVUYWIsIChuZXdUYWIpID0+IHtcbiAgICAgIGN1cnJlbnRTdGF0dXMudmFsdWUgPSB0YWJzW25ld1RhYl0udmFsdWU7XG5cbiAgICAgIGlmIChuZXdUYWIgPT09ICdnZW5Eb2NzJykge1xuICAgICAgICBmaWxlU3RvcmUuZmV0Y2hEb2N1bWVudHMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvYWRJbnZvaWNlcyhjdXJyZW50U3RhdHVzLnZhbHVlKVxuICAgICAgfVxuICAgIH0sIHsgXG4gICAgICBkZWVwOiB0cnVlLFxuICAgICAgaW1tZWRpYXRlOiB0cnVlIFxuICAgIH0pXG5cbiAgICByZXR1cm4ge1xuICAgICAgYWN0aXZlVGFiLFxuICAgICAgdGFicyxcbiAgICAgIGludm9pY2VzOiBjb21wdXRlZCgoKSA9PiBpbnZvaWNlU3RvcmUuaW52b2ljZXMpLFxuICAgICAgZG9jdW1lbnRzOiBjb21wdXRlZCgoKSA9PiBmaWxlU3RvcmUuZG9jdW1lbnRzKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG4uYWN0aW9ucy1jb250YWluZXIge1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogMTAwdmg7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi5wYWdlLXRpdGxlIHtcbiAgZm9udC1zaXplOiAxLjc1cmVtO1xuICBmb250LXdlaWdodDogNjAwO1xuICBtYXJnaW46IDFyZW07XG4gIGNvbG9yOiByZ2IodmFyKC0tdi10aGVtZS1vbi1zdXJmYWNlKSk7XG59XG5cbi50YWJzLXdyYXBwZXIge1xuICB3aWR0aDogMTAwJTtcbiAgb3ZlcmZsb3cteDogYXV0bztcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKHZhcigtLXYtdGhlbWUtc3VyZmFjZSkpO1xuICBib3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSh2YXIoLS12LWJvcmRlci1jb2xvciksIHZhcigtLXYtYm9yZGVyLW9wYWNpdHkpKTtcbn1cblxuLnJlc3BvbnNpdmUtdGFicyB7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4td2lkdGg6IG1heC1jb250ZW50O1xufVxuXG4udGFiLWl0ZW0ge1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBtaW4td2lkdGg6IGF1dG87XG4gIG1heC13aWR0aDogbm9uZTtcbiAgcGFkZGluZzogMCAyNHB4O1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtcbn1cblxuLnRhYi1sYWJlbCB7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLmNvbnRlbnQtY29udGFpbmVyIHtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLndpbmRvdy1jb250ZW50IHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDYwdmg7XG59XG5cbi53aW5kb3ctaXRlbSB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4udGFiLWNvbnRlbnQge1xuICBwYWRkaW5nOiAxcmVtO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLyogUmVzcG9uc2l2ZSBEZXNpZ24gKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAucGFnZS10aXRsZSB7XG4gICAgZm9udC1zaXplOiAxLjVyZW07XG4gICAgbWFyZ2luOiAwLjc1cmVtO1xuICB9XG4gIFxuICAubW9iaWxlLXRhYiB7XG4gICAgbWluLXdpZHRoOiAxNjBweCAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmc6IDAgMTZweCAhaW1wb3J0YW50O1xuICB9XG4gIFxuICAudGFiLWxhYmVsIHtcbiAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xO1xuICB9XG4gIFxuICAudGFiLWNvbnRlbnQge1xuICAgIHBhZGRpbmc6IDAuNzVyZW07XG4gIH1cbiAgXG4gIC50YWJzLXdyYXBwZXIge1xuICAgIC8qIFBlcm1pdGlyIHNjcm9sbCBob3Jpem9udGFsIGVuIG3Ds3ZpbCAqL1xuICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47XG4gIH1cbiAgXG4gIC50YWJzLXdyYXBwZXI6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICBoZWlnaHQ6IDRweDtcbiAgfVxuICBcbiAgLnRhYnMtd3JhcHBlcjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICAgIGJhY2tncm91bmQ6ICNmMWYxZjE7XG4gIH1cbiAgXG4gIC50YWJzLXdyYXBwZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICBiYWNrZ3JvdW5kOiAjYzFjMWMxO1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgfVxuICBcbiAgLnRhYnMtd3JhcHBlcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICNhOGE4YTg7XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gIC5wYWdlLXRpdGxlIHtcbiAgICBmb250LXNpemU6IDEuMjVyZW07XG4gICAgbWFyZ2luOiAwLjVyZW07XG4gIH1cbiAgXG4gIC5tb2JpbGUtdGFiIHtcbiAgICBtaW4td2lkdGg6IDE0MHB4ICFpbXBvcnRhbnQ7XG4gICAgcGFkZGluZzogMCAxMnB4ICFpbXBvcnRhbnQ7XG4gIH1cbiAgXG4gIC50YWItbGFiZWwge1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4wNTtcbiAgfVxuICBcbiAgLnRhYi1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwLjVyZW07XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDM2MHB4KSB7XG4gIC5tb2JpbGUtdGFiIHtcbiAgICBtaW4td2lkdGg6IDEyMHB4ICFpbXBvcnRhbnQ7XG4gICAgcGFkZGluZzogMCA4cHggIWltcG9ydGFudDtcbiAgfVxuICBcbiAgLnRhYi1sYWJlbCB7XG4gICAgZm9udC1zaXplOiAwLjdyZW07XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gIH1cbn1cblxuLyogTWVqb3JhcyB2aXN1YWxlcyAqL1xuLnJlc3BvbnNpdmUtdGFicyA6ZGVlcCgudi10YWItLXNlbGVjdGVkKSB7XG4gIGNvbG9yOiB2YXIoLS12LXByaW1hcnktYmFzZSwgIzI0MjgyYyk7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi5yZXNwb25zaXZlLXRhYnMgOmRlZXAoLnYtdGFicy1zbGlkZXIpIHtcbiAgaGVpZ2h0OiAzcHg7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbn1cblxuLndpbmRvdy1jb250ZW50IDpkZWVwKC52LXdpbmRvd19fY29udGFpbmVyKSB7XG4gIGhlaWdodDogYXV0bztcbn1cblxuLyogUGFyYSB0YWJzIG3DoXMgbGFyZ29zIC0gb3B0aW1pemFjacOzbiBlc3BlY2lhbCBwYXJhIGVzdGUgY29tcG9uZW50ZSAqL1xuLnRhYi1pdGVtIHtcbiAgZmxleDogMCAwIGF1dG87XG59XG5cbi8qIEFzZWd1cmFyIHF1ZSBlbCBjb250ZW5pZG8gc2VhIGNvbXBsZXRhbWVudGUgcmVzcG9uc2l2ZSAqL1xuKiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi8qIEVzdGlsb3MgZXNwZWPDrWZpY29zIHBhcmEgZXN0ZSBjb21wb25lbnRlIGNvbiBtZW5vcyB0YWJzICovXG5AbWVkaWEgKG1pbi13aWR0aDogNzY5cHgpIHtcbiAgLnRhYi1pdGVtIHtcbiAgICBtaW4td2lkdGg6IDIwMHB4O1xuICAgIHBhZGRpbmc6IDAgMzJweDtcbiAgfVxuICBcbiAgLnJlc3BvbnNpdmUtdGFicyB7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIH1cbn1cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICA8di1mb3JtIHZhbGlkYXRlLW9uPVwic3VibWl0IGxhenlcIiBmYXN0LWZhaWwgQHN1Ym1pdC5wcmV2ZW50PVwiaGFuZGxlU3VibWl0XCI+XG4gICAgPGRpdiBjbGFzcz1cInNjcm9sbGVhYmxlXCI+XG4gICAgICA8TW9yZUluZm8gdGl0bGU9XCJEYXRvcyBFbXByZXNhXCIgcHJvZ3JhbW1lclJlZj1cImNyZWF0ZS1wcm92aWRlci1pbmZvXCJcbiAgICAgIGFjdGl2YXRvcj1cInBhcmVudFwiPlxuICAgICAgPC9Nb3JlSW5mbz5cblxuICAgICAgPGJyPlxuXG4gICAgICA8IS0tIOKchSBDQU1CSU86IEdyaWQgcmVzcG9uc2l2ZSAtLT5cbiAgICAgIDx2LXJvdz5cbiAgICAgICAgPHYtY29sIGNvbHM9XCIxMlwiIG1kPVwiNlwiPlxuICAgICAgICAgIDx2LXNlbGVjdCBsYWJlbD1cIiogVGlwb1wiIHYtbW9kZWw9XCJwcm92aWRlci5jb21wYW55VHlwZVwiIDppdGVtcz1cInBlcnNvblR5cGVzXCIgY2xlYXJhYmxlIGRlbGV0YWJsZS1jaGlwc1xuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCIgOnJ1bGVzPVwiY29uZmlybVJ1bGVcIiByZXF1aXJlZD48L3Ytc2VsZWN0PlxuICAgICAgICA8L3YtY29sPlxuXG4gICAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIiBtZD1cIjZcIj5cbiAgICAgICAgICA8di10ZXh0LWZpZWxkIGxhYmVsPVwiKiBEZW5vbWluYWNpw7NuIFNvY2lhbFwiIHYtbW9kZWw9XCJwcm92aWRlci5zb2NpYWxEZW5vbWluYXRpb25cIlxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCIgOnJ1bGVzPVwiY29uZmlybVJ1bGVcIiByZXF1aXJlZC8+XG4gICAgICAgIDwvdi1jb2w+XG5cbiAgICAgICAgPHYtY29sIGNvbHM9XCIxMlwiIG1kPVwiNlwiPlxuICAgICAgICAgIDx2LXRleHQtZmllbGQgbGFiZWw9XCJDaXVkYWRcIiB2LW1vZGVsPVwicHJvdmlkZXIuY2l0eVwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIC8+XG4gICAgICAgIDwvdi1jb2w+XG5cbiAgICAgICAgPHYtY29sIGNvbHM9XCIxMlwiIG1kPVwiNlwiPlxuICAgICAgICAgIDx2LXRleHQtZmllbGQgbGFiZWw9XCJEaXJlY2Npw7NuXCIgdi1tb2RlbD1cInByb3ZpZGVyLmFkZHJlc3NcIiB2YXJpYW50PVwib3V0bGluZWRcIiAvPlxuICAgICAgICA8L3YtY29sPlxuICAgICAgPC92LXJvdz5cblxuICAgICAgPHYtcm93PlxuICAgICAgICA8di1jb2wgY29scz1cIjEyXCIgbWQ9XCI2XCI+XG4gICAgICAgICAgPHYtdGV4dC1maWVsZCBsYWJlbD1cIiogTklGIEVtcHJlc2FcIiB2LW1vZGVsPVwicHJvdmlkZXIuY29tcGFueU5pZlwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIDpydWxlcz1cImNvbmZpcm1SdWxlXCIgcmVxdWlyZWQvPlxuICAgICAgICA8L3YtY29sPlxuXG4gICAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIiBtZD1cIjZcIj5cbiAgICAgICAgICA8di10ZXh0LWZpZWxkIGxhYmVsPVwiQ8OzZGlnbyBQb3N0YWxcIiB2LW1vZGVsPVwicHJvdmlkZXIucG9zdGFsQ29kZVwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIC8+XG4gICAgICAgIDwvdi1jb2w+XG4gICAgICA8L3Ytcm93PlxuXG4gICAgICA8di1yb3c+XG4gICAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIiBtZD1cIjEyXCI+XG4gICAgICAgICAgPENvdW50cnlTZWxlY3RvciBcbiAgICAgICAgICAgIHYtbW9kZWw9XCJwcm92aWRlci5jb3VudHJ5XCIgXG4gICAgICAgICAgICBsYWJlbD1cIlBhw61zXCJcbiAgICAgICAgICAgIDpydWxlcz1cIltdXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3YtY29sPlxuICAgICAgPC92LXJvdz5cbiAgICAgIFxuICAgICAgPGJyPlxuXG4gICAgICA8TW9yZUluZm8gdGl0bGU9XCJEYXRvcyBkZSBmYWN0dXJhY2nDs25cIiBwcm9ncmFtbWVyUmVmPVwiYmlsbGluZy1kYXRhXCIgYWN0aXZhdG9yPVwicGFyZW50XCI+XG4gICAgICA8L01vcmVJbmZvPlxuXG4gICAgICA8di1yb3c+XG4gICAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIiBtZD1cIjZcIj5cbiAgICAgICAgICA8di10ZXh0LWZpZWxkIGxhYmVsPVwiKiBJQkFOXCIgdi1tb2RlbD1cInByb3ZpZGVyLnByb3ZpZGVySWJhblwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIDpydWxlcz1cImliYW5SdWxlc1wiIHJlcXVpcmVkLz5cbiAgICAgICAgPC92LWNvbD5cblxuICAgICAgICA8di1jb2wgY29scz1cIjEyXCIgbWQ9XCI2XCI+XG4gICAgICAgICAgPFNlbGVjdG9yIHNlbGVjdG9yLXR5cGU9XCJQYXltZW50TWV0aG9kc1wiIFxuICAgICAgICAgICAgbGFiZWw9XCJGb3JtYSBkZSBwYWdvXCIgXG4gICAgICAgICAgICB2LW1vZGVsPVwicHJvdmlkZXIucGF5bWVudE1ldGhvZFwiXG4gICAgICAgICAgICA6cnVsZXM9XCJjb25maXJtUnVsZVwiIHJlcXVpcmVkXG4gICAgICAgICAgLz5cbiAgICAgICAgPC92LWNvbD5cbiAgICAgIDwvdi1yb3c+XG4gXG4gICAgICA8TW9yZUluZm8gdGl0bGU9XCJEYXRvcyBkZSBjb250YWN0b1wiIHByb2dyYW1tZXJSZWY9XCJjb250YWN0LWRhdGFcIiBhY3RpdmF0b3I9XCJwYXJlbnRcIj48L01vcmVJbmZvPlxuXG4gICAgICA8di1yb3c+XG4gICAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIiBtZD1cIjRcIj5cbiAgICAgICAgICA8di10ZXh0LWZpZWxkIGxhYmVsPVwiTm9tYnJlXCIgdi1tb2RlbD1cInByb3ZpZGVyLmNvbnRhY3RQZXJzb25OYW1lXCJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICA8L3YtY29sPlxuXG4gICAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIiBtZD1cIjRcIj5cbiAgICAgICAgICA8di10ZXh0LWZpZWxkIGxhYmVsPVwiKiBUZWzDqWZvbm9cIiB2LW1vZGVsPVwicHJvdmlkZXIuY29udGFjdFBlcnNvblBob25lXCJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIHJlcXVpcmVkIDpydWxlcz1cInBob25lUnVsZXNcIj48L3YtdGV4dC1maWVsZD5cbiAgICAgICAgPC92LWNvbD5cblxuICAgICAgICA8di1jb2wgY29scz1cIjEyXCIgbWQ9XCI0XCI+XG4gICAgICAgICAgPHYtdGV4dC1maWVsZCBsYWJlbD1cIkFwZWxsaWRvc1wiIHYtbW9kZWw9XCJwcm92aWRlci5jb250YWN0UGVyc29uU3VyTmFtZVwiXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIj48L3YtdGV4dC1maWVsZD5cbiAgICAgICAgPC92LWNvbD5cbiAgICAgIDwvdi1yb3c+XG5cbiAgICAgIDx2LXJvdz5cbiAgICAgICAgPHYtY29sIGNvbHM9XCIxMlwiIG1kPVwiNFwiPlxuICAgICAgICAgIDx2LXRleHQtZmllbGQgbGFiZWw9XCIqIEVtYWlsXCIgdi1tb2RlbD1cInByb3ZpZGVyLmNvbnRhY3RQZXJzb25FbWFpbFwiXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIiA6cnVsZXM9XCJlbWFpbFJ1bGVzXCIgcmVxdWlyZWQ+PC92LXRleHQtZmllbGQ+XG4gICAgICAgIDwvdi1jb2w+XG5cbiAgICAgICAgPHYtY29sIGNvbHM9XCIxMlwiIG1kPVwiNFwiPlxuICAgICAgICAgIDx2LXRleHQtZmllbGQgbGFiZWw9XCJETklcIiB2LW1vZGVsPVwicHJvdmlkZXIuY29udGFjdFBlcnNvbk5pZlwiXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIj48L3YtdGV4dC1maWVsZD5cbiAgICAgICAgPC92LWNvbD5cbiAgICAgICAgXG4gICAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIiBtZD1cIjRcIj5cbiAgICAgICAgICA8U2VsZWN0b3Igc2VsZWN0b3ItdHlwZT1cIkNvbXBhbnlQb3NpdGlvblwiIFxuICAgICAgICAgICAgbGFiZWw9XCJDYXJnbyBlbiBsYSBlbXByZXNhXCIgXG4gICAgICAgICAgICB2LW1vZGVsPVwicHJvdmlkZXIuY29udGFjdFBlcnNvblBvc2l0aW9uXCJcbiAgICAgICAgICAgIDpydWxlcz1cImNvbmZpcm1SdWxlXCIgcmVxdWlyZWRcbiAgICAgICAgICAvPlxuICAgICAgICA8L3YtY29sPlxuICAgICAgPC92LXJvdz5cblxuICAgICAgPE1vcmVJbmZvIHRpdGxlPVwiQ2xhc2lmaWNhY2nDs25cIlxuICAgICAgcHJvZ3JhbW1lclJlZj1cImNyZWF0ZS1wcm92aWRlci1jbGFzc2lmaWNhdGlvblwiXG4gICAgICBhY3RpdmF0b3I9XCJwYXJlbnRcIlxuICAgICAgPlxuICAgICAgPC9Nb3JlSW5mbz5cblxuICAgICAgPHYtcm93IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8di1jb2w+XG4gICAgICAgICAgPHYtc2VsZWN0IGxhYmVsPVwiU2VsZWNjaW9uZSB1bmEgY2F0ZWdvcsOtYVwiIFxuICAgICAgICAgICAgdi1tb2RlbD1cInByb3ZpZGVyLmNhdGVnb3JpZXNBc3NpZ25lZFwiXG4gICAgICAgICAgICA6aXRlbXM9XCJ0YXJnZXRDYXRlZ29yaWVzXCJcbiAgICAgICAgICAgIGl0ZW0tdmFsdWU9XCJAaWRcIlxuICAgICAgICAgICAgaXRlbS10aXRsZT1cIm5hbWVcIiBcbiAgICAgICAgICAgIGNsZWFyYWJsZSBkZWxldGFibGUtY2hpcHMgbXVsdGlwbGVcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiPlxuICAgICAgICAgIDwvdi1zZWxlY3Q+XG4gICAgICAgIDwvdi1jb2w+XG5cbiAgICAgICAgIDx2LWJ0biBpY29uIGNsYXNzPVwicGx1cy1idG5cIj5cbiAgICAgICAgICA8di1pY29uIGNsYXNzPVwidGV4dC13aGl0ZVwiPm1kaS1wbHVzPC92LWljb24+XG4gICAgICAgICAgPE92ZXJsYXkgXG4gICAgICAgICAgdi1tb2RlbD1cInNob3dDYXRlZ29yeU92ZXJsYXlcIlxuICAgICAgICAgIHRpdGxlPVwiQWdyZWdhciB0w6lybWlubyBkZSBjYXRlZ29yw61hXCJcbiAgICAgICAgICBwcm9ncmFtbWVyUmVmPVwiY2F0ZWdvcmllcy1uYW1lXCIgXG4gICAgICAgICAgICBhY3RpdmF0b3I9XCJwYXJlbnRcIj5cbiAgICAgICAgICAgIDx0ZW1wbGF0ZSAjZGVmYXVsdD5cbiAgICAgICAgICAgICAgPHYtZm9ybSBjbGFzcz1cInAtMlwiIGZhc3QtZmFpbCBAc3VibWl0LnByZXZlbnQ9XCJoYW5kbGVTdWJtaXRDYXRlZ29yeVwiIHN0eWxlPVwib3ZlcmZsb3cteTogYXV0bztcIj5cbiAgICAgICAgICAgICAgICA8TW9yZUluZm8gdGl0bGU9XCJOb21icmUgZGUgbGEgY2F0ZWdvcsOtYVwiXG4gICAgICAgICAgICAgICAgICBwcm9ncmFtbWVyUmVmPVwiY2F0ZWdvcnktbmFtZVwiXG4gICAgICAgICAgICAgICAgICBhY3RpdmF0b3I9XCJwYXJlbnRcIj5cbiAgICAgICAgICAgICAgICA8L01vcmVJbmZvPlxuXG4gICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZCB2YXJpYW50PVwib3V0bGluZWRcIiBsYWJlbD1cIk5vbWJyZSBkZSBsYSBjYXRlZ29yw61hXCJcbiAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJjYXRlZ29yeS5uYW1lXCIgaGlkZS1kZXRhaWxzPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTMgY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDx2LWJ0biBjbGFzcz1cInRleHQtd2hpdGUgYWRkLXRlbXBsYXRlcy1idXR0b25cIiB0eXBlPVwic3VibWl0XCI+QcOxYWRpcjwvdi1idG4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC92LWZvcm0+XG4gICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgIDwvT3ZlcmxheT5cbiAgICAgICAgPC92LWJ0bj5cbiAgICAgIDwvdi1yb3c+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY2VudGVyXCI+XG4gICAgICA8di1idG4gY2xhc3M9XCJteS0yIHRleHQtd2hpdGUgYWRkLXRlbXBsYXRlcy1idXR0b25cIiB0eXBlPVwic3VibWl0XCI+XG4gICAgICAgIHt7IGV4aXN0aW5nUHJvdmlkZXIgPyAnQWN0dWFsaXphcicgOiAnQcOxYWRpcicgfX1cbiAgICAgIDwvdi1idG4+XG4gICAgPC9kaXY+XG4gIDwvdi1mb3JtPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBPdmVybGF5IGZyb20gJy4vT3ZlcmxheS52dWUnO1xuaW1wb3J0IE1vcmVJbmZvIGZyb20gXCIuL01vcmVJbmZvLnZ1ZVwiO1xuaW1wb3J0IENvdW50cnlTZWxlY3RvciBmcm9tICcuL0NvdW50cnlTZWxlY3Rvci52dWUnO1xuaW1wb3J0IHsgQ2F0ZWdvcnlJbXBsLCBQcm92aWRlckltcGwgfSBmcm9tICcuLi9zZXJ2aWNlcy90eXBlcy9pbXBsZW1lbnRhdGlvbnMnO1xuaW1wb3J0IHsgUHJvdmlkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvaW1wbGVtZW50YXRpb25zL3Byb3ZpZGVyL3Byb3ZpZGVyU2VydmljZSc7XG5pbXBvcnQgeyB1c2VFbnRpdHkgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb21wb3NhYmxlcy91c2VFbnRpdHknO1xuaW1wb3J0IHsgQ2F0ZWdvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvaW1wbGVtZW50YXRpb25zL2NhdGVnb3J5L2NhdGVnb3J5U2VydmljZSc7XG5pbXBvcnQgeyB1c2VDYXRlZ29yeVN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL2NhdGVnb3J5LmpzJ1xuaW1wb3J0IHsgdXNlUHJvdmlkZXJTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9wcm92aWRlci5qcydcbmltcG9ydCB7IHVzZUdlbmVyaWNTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9nZW5lcmljLnRzJ1xuaW1wb3J0IHsgY29tcHV0ZWQsIHRvUmVmcywgd2F0Y2gsIG9uTW91bnRlZCwgcmVmIH0gZnJvbSAndnVlJztcbmltcG9ydCBTZWxlY3RvciBmcm9tICcuL1NlbGVjdG9yLnZ1ZSc7XG5pbXBvcnQgeyB1c2VUb2FzdCB9IGZyb20gJ3Z1ZS10b2FzdGlmaWNhdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbm5hbWU6ICdDcmVhdGVQcm92aWRlcicsXG5pbmplY3Q6IHtcbiAgbm90aWZ5T3ZlcmxheVNhdmVkOiB7XG4gICAgZnJvbTogJ25vdGlmeU92ZXJsYXlTYXZlZCcsXG4gICAgZGVmYXVsdDogbnVsbFxuICB9XG59LFxuZGF0YTp7XG4gIHBob25lUnVsZXM6IFtcbiAgICAgICAgdiA9PiAhIXYgfHwgJ1NlIHJlcXVpZXJlIGVsIG7Dum1lcm8gdGVsZWbDs25pY28uJyxcbiAgICAgICAgdiA9PiAodiAmJiB2Lmxlbmd0aCA+PSA2KSB8fCAnRWwgbsO6bWVybyBkZWJlIGNvbnRlbmVyIGFsIG1lbm9zIDYgY2Fyw6FjdGVyZXMuJyxcbiAgICAgIF0sXG59LFxuY29tcG9uZW50czoge1xuICBNb3JlSW5mbyxcbiAgT3ZlcmxheSxcbiAgU2VsZWN0b3IsXG4gIENvdW50cnlTZWxlY3RvclxufSxcbnByb3BzOiB7XG4gIGV4aXN0aW5nUHJvdmlkZXI6IHtcbiAgICB0eXBlOiBPYmplY3QsXG4gICAgZGVmYXVsdDogbnVsbFxuICB9XG59LFxuc2V0dXAocHJvcHMpIHtcbiAgY29uc3QgeyBleGlzdGluZ1Byb3ZpZGVyIH0gPSB0b1JlZnMocHJvcHMpO1xuXG4gIGNvbnN0IHRvYXN0ID0gdXNlVG9hc3QoKTtcbiAgY29uc3QgY2F0ZWdvcnlTdG9yZSA9IHVzZUNhdGVnb3J5U3RvcmUoKTtcbiAgY29uc3QgcHJvdmlkZXJTdG9yZSA9IHVzZVByb3ZpZGVyU3RvcmUoKTtcbiAgY29uc3QgZ2VuZXJpY1N0b3JlID0gdXNlR2VuZXJpY1N0b3JlKCk7XG5cbiAgY29uc3Qgc2hvd0NhdGVnb3J5T3ZlcmxheSA9IHJlZihmYWxzZSk7XG5cbiAgb25Nb3VudGVkKGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2F0ZWdvcnlTdG9yZS5mZXRjaEFsbCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBhbCBjYXJnYXIgY2F0ZWdvcsOtYXM6JywgZXJyb3IpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgdGFyZ2V0Q2F0ZWdvcmllcyA9IGNvbXB1dGVkKCgpID0+IGNhdGVnb3J5U3RvcmUuZ2V0Q2F0ZWdvcmllcyk7XG5cbiAgY29uc3QgZW1haWxSdWxlcyA9IFtcbiAgICB2ID0+ICEhdiB8fCAnRWwgY29ycmVvIGVzIHJlcXVlcmlkbycsXG4gICAgdiA9PiAvLitALitcXC4uKy8udGVzdCh2KSB8fCAnSW5ncmVzZSB1biBjb3JyZW8gdsOhbGlkbydcbiAgXTtcblxuICBjb25zdCBjb25maXJtUnVsZSA9IFtcbiAgICB2ID0+ICEhdiB8fCAnRXN0ZSBkYXRvIGVzIHJlcXVlcmlkbycsXG4gICAgdiA9PiAodiAmJiB2Lmxlbmd0aCA+PSAyKSB8fCAnRXN0ZSBkYXRvIGRlYmUgdGVuZXIgbWFzIGNhcmFjdGVyZXMuJyxcbiAgXTtcblxuICBjb25zdCBpYmFuUnVsZXMgPSBbXG4gICAgdiA9PiAhIXYgfHwgJ0VsIElCQU4gZXMgcmVxdWVyaWRvLicsXG4gIF07XG5cbiAgY29uc3QgeyBcbiAgICBlbnRpdHk6IHByb3ZpZGVyLCBcbiAgICByZXNldEVudGl0eTogcmVzZXRQcm92aWRlcixcbiAgICBsb2FkRW50aXR5OiBsb2FkUHJvdmlkZXIgXG4gIH0gPSB1c2VFbnRpdHkoUHJvdmlkZXJJbXBsLCBwcm92aWRlclN0b3JlKTtcblxuICBjb25zdCB7IFxuICAgIGVudGl0eTogY2F0ZWdvcnksXG4gICAgcmVzZXRFbnRpdHk6IHJlc2V0Q2F0ZWdvcnksXG4gIH0gPSB1c2VFbnRpdHkoQ2F0ZWdvcnlJbXBsLCBjYXRlZ29yeVN0b3JlKTtcblxuICBpZiAoZXhpc3RpbmdQcm92aWRlci52YWx1ZSkge1xuICAgIGxvYWRQcm92aWRlcihleGlzdGluZ1Byb3ZpZGVyLnZhbHVlKTtcbiAgfVxuXG4gIHdhdGNoKCgpID0+IGV4aXN0aW5nUHJvdmlkZXIudmFsdWUsIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcbiAgICBpZiAobmV3VmFsdWUgPT09IG9sZFZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICBsb2FkUHJvdmlkZXIobmV3VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNldFByb3ZpZGVyKCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHRvYXN0LFxuICAgIGdlbmVyaWNTdG9yZSxcbiAgICBpYmFuUnVsZXMsXG4gICAgY29uZmlybVJ1bGUsXG4gICAgZW1haWxSdWxlcyxcbiAgICB0YXJnZXRDYXRlZ29yaWVzLFxuICAgIGNhdGVnb3J5U3RvcmUsXG4gICAgcHJvdmlkZXJTdG9yZSxcbiAgICBjYXRlZ29yeSxcbiAgICBwcm92aWRlcixcbiAgICByZXNldENhdGVnb3J5LFxuICAgIHJlc2V0UHJvdmlkZXIsXG4gICAgcGVyc29uVHlwZXM6IFtcIlBlcnNvbmEgRsOtc2ljYVwiLCBcIlBlcnNvbmEgSnVyw61kaWNhXCJdLFxuICAgIHNob3dDYXRlZ29yeU92ZXJsYXksXG4gIH07XG59LFxubWV0aG9kczoge1xuICBhc3luYyBjcmVhdGVPclVwZGF0ZVByb3ZpZGVyKHNlcnZpY2UpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMucHJvdmlkZXIucHJvdmlkZXJJYmFuKSB7XG4gICAgICAgIHRoaXMucHJvdmlkZXIucHJvdmlkZXJJYmFuID0gdGhpcy5wcm92aWRlci5wcm92aWRlckliYW4ucmVwbGFjZSgvXFxzL2csICcnKS50b1VwcGVyQ2FzZSgpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLmdlbmVyaWNTdG9yZS5jcmVhdGVHZW5lcmljKHNlcnZpY2UpO1xuXG4gICAgICB0aGlzLiRlbWl0KCdzYXZlZCcsIHRydWUpO1xuXG4gICAgICBpZiAodGhpcy5ub3RpZnlPdmVybGF5U2F2ZWQgJiYgdHlwZW9mIHRoaXMubm90aWZ5T3ZlcmxheVNhdmVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMubm90aWZ5T3ZlcmxheVNhdmVkKHRydWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZW4gY3JlYXRlT3JVcGRhdGVQcm92aWRlcjonLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH0sXG5cbiAgYXN5bmMgaGFuZGxlU3VibWl0Q2F0ZWdvcnkoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNhdGVnb3J5U2VydmljZSA9IG5ldyBDYXRlZ29yeVNlcnZpY2UodGhpcy5jYXRlZ29yeSwgbnVsbCk7XG4gICAgICBcbiAgICAgIGF3YWl0IHRoaXMuZ2VuZXJpY1N0b3JlLmNyZWF0ZUdlbmVyaWMoY2F0ZWdvcnlTZXJ2aWNlKTtcblxuICAgICAgdGhpcy5zaG93Q2F0ZWdvcnlPdmVybGF5ID0gZmFsc2U7XG5cbiAgICAgIHRoaXMucmVzZXRDYXRlZ29yeSgpO1xuICAgICAgXG4gICAgICBhd2FpdCB0aGlzLmNhdGVnb3J5U3RvcmUuZmV0Y2hBbGwoKTsgXG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWwgY3JlYXIgY2F0ZWdvcsOtYTonLCBlcnJvcik7XG4gICAgICB0aGlzLnRvYXN0LmVycm9yKCdFcnJvciBhbCBjcmVhciBjYXRlZ29yw61hJyk7XG4gICAgfVxuICB9LFxuICBcbiAgYXN5bmMgaGFuZGxlU3VibWl0KGV2ZW50KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBldmVudDtcblxuICAgICAgaWYgKCFyZXN1bHRzWyd2YWxpZCddKSB7XG4gICAgICAgIHRoaXMudG9hc3QuZXJyb3IoJ0Zvcm11bGFyaW8gaW52w6FsaWRvJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLnByb3ZpZGVyLnByb3ZpZGVySWJhbiB8fCB0aGlzLnByb3ZpZGVyLnByb3ZpZGVySWJhbi50cmltKCkgPT09ICcnKSB7XG4gICAgICAgIHRoaXMudG9hc3QuZXJyb3IoJ0VsIElCQU4gZXMgcmVxdWVyaWRvJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wcm92aWRlci5wcm92aWRlckliYW4gPSB0aGlzLnByb3ZpZGVyLnByb3ZpZGVySWJhbi5yZXBsYWNlKC9cXHMvZywgJycpLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgIGNvbnN0IHByb3ZpZGVyU2VydmljZSA9IG5ldyBQcm92aWRlclNlcnZpY2UoXG4gICAgICAgIHRoaXMucHJvdmlkZXIsXG4gICAgICAgIHRoaXMuZXhpc3RpbmdQcm92aWRlclxuICAgICAgKTtcblxuICAgICAgYXdhaXQgdGhpcy5jcmVhdGVPclVwZGF0ZVByb3ZpZGVyKHByb3ZpZGVyU2VydmljZSk7XG5cbiAgICAgIGlmICghdGhpcy5leGlzdGluZ1Byb3ZpZGVyKSB7XG4gICAgICAgIHRoaXMucmVzZXRQcm92aWRlcigpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBlbiBoYW5kbGVTdWJtaXQ6JywgZXJyb3IpO1xuICAgICAgdGhpcy50b2FzdC5lcnJvcignRXJyb3IgYWwgZ3VhcmRhcjogJyArIChlcnJvci5tZXNzYWdlIHx8IGVycm9yKSk7XG4gICAgfVxuICB9XG59XG59O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG4uYWRkLXRlbXBsYXRlcy1idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODdiZDc4O1xuICBtYXJnaW4tdG9wOiAxNnB4O1xufVxuPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG4gICAgPHYtZm9ybSB2YWxpZGF0ZS1vbj1cInN1Ym1pdCBsYXp5XCIgZmFzdC1mYWlsIEBzdWJtaXQucHJldmVudD1cImhhbmRsZVN1Ym1pdFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZWFibGVcIj5cbiAgICAgICAgICAgIDxNb3JlSW5mbyB0aXRsZT1cIkRhdG9zIGRlIGZhY3R1cmFcIiBcbiAgICAgICAgICAgIHByb2dyYW1tZXJSZWY9XCJhZGQtaW52b2ljZVwiXG4gICAgICAgICAgICBhY3RpdmF0b3I9XCJwYXJlbnRcIj48L01vcmVJbmZvPlxuICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8di1yb3cgY2xhc3M9XCJjZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPVwiYXV0aFN0b3JlLmlzQ2xpZW50XCIgY2xhc3M9XCJ3LTEwMCBkLWZsZXggY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8di1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LWlmPVwiIWxvYWRpbmdQcm92aWRlcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLW1kLTExXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW4td2lkdGg9XCIxNTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiUHJvdmVlZG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6aXRlbXM9XCJ0YXJnZXRQcm92aWRlcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJpbnZvaWNlLnByb3ZpZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXRpdGxlPVwic29jaWFsRGVub21pbmF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXZhbHVlPVwiQGlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcmFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGFibGUtY2hpcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC92LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LXByb2dyZXNzLWNpcmN1bGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXRlcm1pbmF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtbWQtMTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdi1wcm9ncmVzcy1jaXJjdWxhcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPHYtYnRuIGljb24gQGNsaWNrPVwiKCkgPT4geyB9XCIgY2xhc3M9XCJwbHVzLWJ0biBjb2wtbWQtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWljb24gY2xhc3M9XCJ0ZXh0LXdoaXRlXCI+bWRpLXBsdXM8L3YtaWNvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxPdmVybGF5IHRpdGxlPVwiQ3JlYXIgcHJvdmVlZG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbW1lclJlZj1cImNyZWF0ZS1wcm92aWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0b3I9XCJwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cInNob3dQcm92aWRlck92ZXJsYXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENyZWF0ZVByb3ZpZGVyIEBzYXZlZD1cIm9uUHJvdmlkZXJTYXZlZFwiPjwvQ3JlYXRlUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9PdmVybGF5PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC92LWJ0bj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBjZW50ZXJcIiB2LWlmPVwiYXV0aFN0b3JlLmlzUHJvdmlkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtaWY9XCIhbG9hZGluZ0NsaWVudHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLW1kLTExXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW4td2lkdGg9XCIxNTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiQ2xpZW50ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOml0ZW1zPVwidGFyZ2V0Q2xpZW50c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cImludm9pY2UuY2xpZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXRpdGxlPVwic29jaWFsRGVub21pbmF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXZhbHVlPVwiQGlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcmFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGFibGUtY2hpcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC92LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LXByb2dyZXNzLWNpcmN1bGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXRlcm1pbmF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtbWQtMTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdi1wcm9ncmVzcy1jaXJjdWxhcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAjVE9ETzogQ3JlYXIgY29tcG9uZW50ZSBDcmVhdGVDbGllbnQgc2ltaWxhciBhIENyZWF0ZVByb3ZpZGVyIC0tPiBcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPHYtYnRuIGljb24gQGNsaWNrPVwiKCkgPT4geyB9XCIgY2xhc3M9XCJwbHVzLWJ0biBjb2wtbWQtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWljb24gY2xhc3M9XCJ0ZXh0LXdoaXRlXCI+bWRpLXBsdXM8L3YtaWNvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxPdmVybGF5IHRpdGxlPVwiQ3JlYXIgY2xpZW50ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW1tZXJSZWY9XCJjcmVhdGUtY2xpZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2YXRvcj1cInBhcmVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI2RlZmF1bHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9PdmVybGF5PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC92LWJ0bj4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgICAgICA8L3Ytcm93PlxuXG4gICAgICAgICAgICAgICAgPGJyPjxicj5cblxuICAgICAgICAgICAgICAgIDx2LXJvdz5cbiAgICAgICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJtLTFcIiBsYWJlbD1cIk7CsCBGYWN0dXJhXCIgdi1tb2RlbD1cImludm9pY2UuaW52b2ljZU51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPC92LXRleHQtZmllbGQ+XG5cbiAgICAgICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZCB0eXBlPVwibnVtYmVyXCIgdmFyaWFudD1cIm91dGxpbmVkXCIgY2xhc3M9XCJtLTFcIiBsYWJlbD1cIlRvdGFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJpbnZvaWNlLnRvdGFsXCI+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgdHlwZT1cIm51bWJlclwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGNsYXNzPVwibS0xXCIgbGFiZWw9XCJCYXNlIGltcG9uaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiaW52b2ljZS50YXhCYXNlXCI+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgdHlwZT1cIm51bWJlclwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGNsYXNzPVwibS0xXCIgbGFiZWw9XCJJbXB1ZXN0b3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cImludm9pY2UudGF4XCI+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgdHlwZT1cIm51bWJlclwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGNsYXNzPVwibS0xXCIgbGFiZWw9XCJSZXRlbmNpb25lc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiaW52b2ljZS5yZXRlbnRpb25zXCI+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgICAgPC92LXJvdz5cbiAgICAgICAgICAgICAgICA8YnI+XG5cbiAgICAgICAgICAgICAgICA8di1yb3c+XG5cbiAgICAgICAgICAgICAgICAgICAgPERhdGVJbnB1dCBcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibS0xXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkZlY2hhIGRlIEVtaXNpb25cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJpbnZvaWNlLmJyb2FkY2FzdERhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPERhdGVJbnB1dCBcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibS0xXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkZlY2hhIGRlIFZlbmNpbWllbnRvXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiaW52b2ljZS5leHBpcmF0aW9uRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGF0ZUlucHV0IFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtLTFcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiRmVjaGEgZGUgUHJlc3RhY2lvbiBkZSBTZXJ2aWNpb3NcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJpbnZvaWNlLmRhdGVPZlNlcnZpY2VQcm92aXNpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDwvdi1yb3c+XG4gICAgICAgICAgICAgICAgPGJyPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDx2LWNhcmQgdGl0bGU9XCJTZWxlY2Npb25hciB1biBmaWNoZXJvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlPVwiTcOheGltbyAxIGZpY2hlcm8uIEzDrW1pdGUgZGUgNTAgTUIuIFRpcG9zIHBlcm1pdGlkb3M6IHBkZi5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LWZpbGUtaW5wdXQgY2xlYXJhYmxlIGxhYmVsPVwiRmljaGVyb3Mgc2VsZWNjaW9uYWRvczpcIiB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJpbnZvaWNlLmF0dGFjaGVkRG9jdW1lbnRcIiBhY2NlcHQ9XCIucGRmXCI+PC92LWZpbGUtaW5wdXQ+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0yIG10LTAgdy0xMDAgY2VudGVyIGZsZXgtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCB2LWlmPVwiaW52b2ljZS5hdHRhY2hlZERvY3VtZW50XCI+PGI+QXJjaGl2byBhZGp1bnRvOjwvYj4ge3sgaW52b2ljZS5hdHRhY2hlZERvY3VtZW50IH19PC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIHYtZWxzZT48Yj5ObyBoYXkgYXJjaGl2byBhZGp1bnRvIGF1bi4uLjwvYj48L3NtYWxsPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDx2LWJ0blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1pZj1cImludm9pY2UuYXR0YWNoZWREb2N1bWVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6aHJlZj1cImAvdXBsb2Fkcy8ke2ludm9pY2UuYXR0YWNoZWREb2N1bWVudH1gXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyIGRvY3VtZW50b1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3YtYnRuPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC92LWNhcmQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPHYtcm93IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZCB0eXBlPVwibnVtYmVyXCIgdmFyaWFudD1cIm91dGxpbmVkXCIgY2xhc3M9XCJ3LTUwIG0tMVwiIGxhYmVsPVwiR2FzdG8gc3VwbGlkbyBkZSBmYWN0dXJhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiaW52b2ljZS5zdXBwbGllZEV4cGVuc2VcIj48L3YtdGV4dC1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC92LXJvdz5cbiAgICAgICAgICAgICAgICAgICAgPHYtcm93IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8U2VsZWN0b3Igc2VsZWN0b3ItdHlwZT1cIlBheW1lbnRNZXRob2RzXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkZvcm1hIGRlIHBhZ29cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJpbnZvaWNlLnBheW1lbnRNZXRob2RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgOnJ1bGVzPVwiY29uZmlybVJ1bGVcIiByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LTUwXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC92LXJvdz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjZW50ZXIgcHgtMyBweS01XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbnRlciBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxNb3JlSW5mbyB0aXRsZT1cIk51ZXZvIEdydXBvXCIgXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW1tZXJSZWY9XCJncm91cC1pdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2YXRvcj1cInBhcmVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8L01vcmVJbmZvPlxuICAgICAgICAgICAgICAgICAgICA8di1idG4gaWNvbiBAY2xpY2s9XCJpbnZvaWNlQWRkXCIgY2xhc3M9XCJwbHVzLWJ0blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHYtaWNvbiBjbGFzcz1cInRleHQtd2hpdGVcIj5tZGktcGx1czwvdi1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L3YtYnRuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gKEFycmF5LmlzQXJyYXkoaW52b2ljZS5wcm9kdWN0KSA/IGludm9pY2UucHJvZHVjdCA6IFtdKVwiIDprZXk9XCJpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGhyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHYtcm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWJ0biBjbGFzcz1cImNsb3NlQnV0dG9uIGJ0biByb3VuZGVkLWNpcmNsZVwiIHNpemU9XCJzbWFsbFwiIGljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPVwicmVtb3ZlSW52b2ljZShpbmRleClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtaWNvbj5tZGktdHJhc2gtY2FuLW91dGxpbmU8L3YtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3YtYnRuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj48YnI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Ytcm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHYtcm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgdmFyaWFudD1cIm91dGxpbmVkXCIgY2xhc3M9XCJtLTFcIiBsYWJlbD1cIkNvbmNlcHRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cIml0ZW0ucHJvZHVjdERlc2NyaXB0aW9uXCI+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Ytcm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHYtcm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgdHlwZT1cIm51bWJlclwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGNsYXNzPVwibS0xXCIgbGFiZWw9XCJVZHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiaXRlbS51bml0c1wiPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgdHlwZT1cIm51bWJlclwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGNsYXNzPVwibS0xXCIgbGFiZWw9XCJQcmVjaW8gdWQuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cIml0ZW0udW5pdFByaWNlXCI+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZCB0eXBlPVwibnVtYmVyXCIgdmFyaWFudD1cIm91dGxpbmVkXCIgY2xhc3M9XCJtLTFcIiBsYWJlbD1cIkRlc2N1ZW50b1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJpbnZvaWNlLmRpc2NvdW50XCI+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZCB0eXBlPVwibnVtYmVyXCIgdmFyaWFudD1cIm91dGxpbmVkXCIgY2xhc3M9XCJtLTFcIiBsYWJlbD1cIlRvdGFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cIml0ZW0ucHJvZHVjdFRvdGFsXCI+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Ytcm93PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0zIGNlbnRlclwiPlxuICAgICAgICAgICAgPHYtYnRuIGNsYXNzPVwidGV4dC13aGl0ZSBhZGQtdGVtcGxhdGVzLWJ1dHRvblwiIHR5cGU9XCJzdWJtaXRcIj57eyBleGlzdGluZ0ludm9pY2UgPyAnQWN0dWFsaXphciBGYWN0dXJhJyA6ICdHdWFyZGFyIEZhY3R1cmEnIH19PC92LWJ0bj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC92LWZvcm0+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IE92ZXJsYXkgZnJvbSAnLi9PdmVybGF5LnZ1ZSc7XG5pbXBvcnQgTW9yZUluZm8gZnJvbSAnLi9Nb3JlSW5mby52dWUnO1xuaW1wb3J0IENyZWF0ZVByb3ZpZGVyIGZyb20gJy4vQ3JlYXRlUHJvdmlkZXIudnVlJztcblxuaW1wb3J0IHsgdXNlRW50aXR5IH0gZnJvbSAnLi4vc2VydmljZXMvY29tcG9zYWJsZXMvdXNlRW50aXR5JztcbmltcG9ydCB7IEludm9pY2VJbXBsLCBQcm92aWRlckltcGwsIFByb2R1Y3RJbXBsIH0gZnJvbSAnLi4vc2VydmljZXMvdHlwZXMvaW1wbGVtZW50YXRpb25zJztcbmltcG9ydCB7IGZpbmRTZWxlY3RlZEVudGl0eSwgY3JlYXRlSW52b2ljZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9oZWxwZXJzL2ludm9pY2VIZWxwZXInO1xuaW1wb3J0IHsgdXNlUHJvdmlkZXJTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9wcm92aWRlci5qcydcbmltcG9ydCB7IHVzZUNsaWVudFN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL2NsaWVudC5qcydcbmltcG9ydCB7IHVzZUludm9pY2VDbGllbnRTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9pbnZvaWNlQ2xpZW50LmpzJ1xuaW1wb3J0IHsgdXNlSW52b2ljZVByb3ZpZGVyU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvaW52b2ljZVByb3ZpZGVyLmpzJ1xuaW1wb3J0IHsgY29tcHV0ZWQsIHRvUmVmcywgcmVmIH0gZnJvbSAndnVlJztcbmltcG9ydCB7IHVzZUF1dGhTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9hdXRoJztcbmltcG9ydCBTZWxlY3RvciBmcm9tICcuL1NlbGVjdG9yLnZ1ZSc7XG5pbXBvcnQgRGF0ZUlucHV0IGZyb20gJy4vRGF0ZUlucHV0LnZ1ZSc7XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ0NyZWF0ZUludm9pY2VPdmVybGF5JyxcbiAgICBwcm9wczogWydleGlzdGluZ0ludm9pY2UnXSxcbiAgICBlbWl0czogWydzYXZlZCddLFxuXG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBPdmVybGF5LFxuICAgICAgICBNb3JlSW5mbyxcbiAgICAgICAgQ3JlYXRlUHJvdmlkZXIsXG4gICAgICAgIFNlbGVjdG9yLFxuICAgICAgICBEYXRlSW5wdXRcbiAgICB9LFxuICAgIHNldHVwKHByb3BzKSB7XG4gICAgICAgIGNvbnN0IHsgZXhpc3RpbmdJbnZvaWNlIH0gPSB0b1JlZnMocHJvcHMpO1xuXG4gICAgICAgIGNvbnN0IGF1dGhTdG9yZSA9IHVzZUF1dGhTdG9yZSgpO1xuXG4gICAgICAgIGNvbnN0IHByb3ZpZGVyU3RvcmUgPSB1c2VQcm92aWRlclN0b3JlKCk7XG4gICAgICAgIGNvbnN0IGNsaWVudFN0b3JlID0gdXNlQ2xpZW50U3RvcmUoKTtcblxuICAgICAgICBjb25zdCBpbnZvaWNlQ2xpZW50U3RvcmUgPSB1c2VJbnZvaWNlQ2xpZW50U3RvcmUoKTtcbiAgICAgICAgY29uc3QgaW52b2ljZVByb3ZpZGVyU3RvcmUgPSB1c2VJbnZvaWNlUHJvdmlkZXJTdG9yZSgpO1xuXG4gICAgICAgIC8vIExvYWRpbmcgc3RhdGVzXG4gICAgICAgIGNvbnN0IGxvYWRpbmdDbGllbnRzID0gcmVmKHRydWUpO1xuICAgICAgICBjb25zdCBsb2FkaW5nUHJvdmlkZXJzID0gcmVmKHRydWUpO1xuXG4gICAgICAgIC8vIEZldGNoIGJvdGggY2xpZW50cyBhbmQgcHJvdmlkZXJzXG4gICAgICAgIGNsaWVudFN0b3JlLmZldGNoQWxsKCkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICBsb2FkaW5nQ2xpZW50cy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgcHJvdmlkZXJTdG9yZS5mZXRjaEFsbCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgbG9hZGluZ1Byb3ZpZGVycy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0YXJnZXRQcm92aWRlcnMgPSBjb21wdXRlZCgoKSA9PiBwcm92aWRlclN0b3JlLnByb3ZpZGVycyk7XG4gICAgICAgIGNvbnN0IHRhcmdldENsaWVudHMgPSBjb21wdXRlZCgoKSA9PiBjbGllbnRTdG9yZS5jbGllbnRzKTtcblxuICAgICAgICBjb25zdCB1cGRhdGVJbnZvaWNlU3RvcmUgPSBhdXRoU3RvcmUuaXNDbGllbnQgPyBpbnZvaWNlQ2xpZW50U3RvcmUgOiBpbnZvaWNlUHJvdmlkZXJTdG9yZTtcblxuICAgICAgICBjb25zdCB7IGVudGl0eTogaW52b2ljZSwgcmVzZXRFbnRpdHk6IHJlc2V0SW52b2ljZSwgbG9hZEVudGl0eTogbG9hZEludm9pY2UsIHJlZnJlc2hFbnRpdGllcyB9ID0gdXNlRW50aXR5KEludm9pY2VJbXBsLCB1cGRhdGVJbnZvaWNlU3RvcmUpO1xuICAgICAgICBjb25zdCB7IGVudGl0eTogcHJvdmlkZXIsIHJlc2V0RW50aXR5OiByZXNldFByb3ZpZGVyIH0gPSB1c2VFbnRpdHkoUHJvdmlkZXJJbXBsLCBwcm92aWRlclN0b3JlKTtcblxuICAgICAgICBjb25zdCBzaG93UHJvdmlkZXJPdmVybGF5ID0gcmVmKGZhbHNlKTtcblxuICAgICAgICBjb25zdCBvblByb3ZpZGVyU2F2ZWQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBzaG93UHJvdmlkZXJPdmVybGF5LnZhbHVlID0gZmFsc2U7IFxuICAgICAgICAgICAgbG9hZGluZ1Byb3ZpZGVycy52YWx1ZSA9IHRydWU7IC8vIChPcGNpb25hbCkgUG9uZSBlbCBzZWxlY3QgZW4gY2FyZ2FcbiAgICAgICAgICAgIGF3YWl0IHByb3ZpZGVyU3RvcmUuZmV0Y2hBbGwoKTtcbiAgICAgICAgICAgIGxvYWRpbmdQcm92aWRlcnMudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZXhpc3RpbmdJbnZvaWNlLnZhbHVlKSB7XG4gICAgICAgICAgICAvLyBOb3JtYWxpemUgdGhlIGludm9pY2UgZGF0YSBiZWZvcmUgbG9hZGluZ1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEludm9pY2UgPSB7IC4uLmV4aXN0aW5nSW52b2ljZS52YWx1ZSB9O1xuXG4gICAgICAgICAgICAvLyBJZiBwcm92aWRlciBpcyBhbiBvYmplY3QsIGV4dHJhY3QgaXRzIEBpZFxuICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRJbnZvaWNlLnByb3ZpZGVyICYmIHR5cGVvZiBub3JtYWxpemVkSW52b2ljZS5wcm92aWRlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkSW52b2ljZS5wcm92aWRlciA9IG5vcm1hbGl6ZWRJbnZvaWNlLnByb3ZpZGVyWydAaWQnXSB8fCBub3JtYWxpemVkSW52b2ljZS5wcm92aWRlcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgY2xpZW50IGlzIGFuIG9iamVjdCwgZXh0cmFjdCBpdHMgQGlkXG4gICAgICAgICAgICBpZiAobm9ybWFsaXplZEludm9pY2UuY2xpZW50ICYmIHR5cGVvZiBub3JtYWxpemVkSW52b2ljZS5jbGllbnQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZEludm9pY2UuY2xpZW50ID0gbm9ybWFsaXplZEludm9pY2UuY2xpZW50WydAaWQnXSB8fCBub3JtYWxpemVkSW52b2ljZS5jbGllbnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE1hcCBwcm9kdWN0QXJyYXkgdG8gcHJvZHVjdCBpZiBwcm9kdWN0IGlzIG1pc3NpbmcvZW1wdHkgKGZvciBsZWdhY3kgaW52b2ljZXMpXG4gICAgICAgICAgICBpZiAobm9ybWFsaXplZEludm9pY2UucHJvZHVjdEFycmF5ICYmICghbm9ybWFsaXplZEludm9pY2UucHJvZHVjdCB8fCBub3JtYWxpemVkSW52b2ljZS5wcm9kdWN0Lmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkSW52b2ljZS5wcm9kdWN0ID0gbm9ybWFsaXplZEludm9pY2UucHJvZHVjdEFycmF5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsb2FkSW52b2ljZShub3JtYWxpemVkSW52b2ljZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW52b2ljZSxcbiAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgdGFyZ2V0UHJvdmlkZXJzLFxuICAgICAgICAgICAgdGFyZ2V0Q2xpZW50cyxcbiAgICAgICAgICAgIHJlc2V0SW52b2ljZSxcbiAgICAgICAgICAgIHJlZnJlc2hFbnRpdGllcyxcbiAgICAgICAgICAgIGF1dGhTdG9yZSxcbiAgICAgICAgICAgIGxvYWRpbmdDbGllbnRzLFxuICAgICAgICAgICAgbG9hZGluZ1Byb3ZpZGVycyxcbiAgICAgICAgICAgIHNob3dQcm92aWRlck92ZXJsYXksXG4gICAgICAgICAgICBvblByb3ZpZGVyU2F2ZWRcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNob3dQcm92aWRlcnNPdmVybGF5VHdvOiBmYWxzZSxcbiAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IG51bGxcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgICBpbnZvaWNlQWRkKCkge1xuICAgICAgICAgICAgLy8gRW5zdXJlIHByb2R1Y3QgaXMgYWx3YXlzIGFuIGFycmF5IGJlZm9yZSBhZGRpbmcgaXRlbXNcbiAgICAgICAgICAgIGlmICghdGhpcy5pbnZvaWNlLnByb2R1Y3QgfHwgIUFycmF5LmlzQXJyYXkodGhpcy5pbnZvaWNlLnByb2R1Y3QpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZvaWNlLnByb2R1Y3QgPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pbnZvaWNlLnByb2R1Y3QucHVzaChuZXcgUHJvZHVjdEltcGwoKSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmludm9pY2UucHJvZHVjdCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVtb3ZlSW52b2ljZShpbmRleCkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5pbnZvaWNlLnByb2R1Y3QpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZvaWNlLnByb2R1Y3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgaGFuZGxlU3VibWl0KCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0NsaWVudCA9IHRoaXMuYXV0aFN0b3JlLmlzQ2xpZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eVR5cGUgPSBpc0NsaWVudCA/ICdwcm92aWRlcicgOiAnY2xpZW50JztcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdGllcyA9IGlzQ2xpZW50ID8gdGhpcy50YXJnZXRQcm92aWRlcnMgOiB0aGlzLnRhcmdldENsaWVudHM7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZCA9IHRoaXMuaW52b2ljZVtlbnRpdHlUeXBlXTtcbiAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdGVkSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyAke2VudGl0eVR5cGV9IHNlbGVjdGVkYCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbnRpdHkgPSBmaW5kU2VsZWN0ZWRFbnRpdHkoZW50aXRpZXMsIHNlbGVjdGVkSWQpO1xuICAgICAgICAgICAgICAgIGlmICghc2VsZWN0ZWRFbnRpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2VudGl0eVR5cGV9IG5vdCBmb3VuZGApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNlbGVjdGVkRW50aXR5LmlkID0gc2VsZWN0ZWRJZDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VQYXJhbXMgPSBpc0NsaWVudCBcbiAgICAgICAgICAgICAgICAgICAgPyB7IHByb3ZpZGVyOiBzZWxlY3RlZEVudGl0eSB9XG4gICAgICAgICAgICAgICAgICAgIDogeyBjbGllbnQ6IHNlbGVjdGVkRW50aXR5IH07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpbnZvaWNlU2VydmljZSA9IGNyZWF0ZUludm9pY2VTZXJ2aWNlKHRoaXMuaW52b2ljZSwgc2VydmljZVBhcmFtcyk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgdGhpcy5jcmVhdGVHZW5lcmljKGludm9pY2VTZXJ2aWNlKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2hFbnRpdGllcygpO1xuICAgICAgICAgICAgICAgICAgICAvLyDinIUgRW1pdGlyIGV2ZW50byBkZXNwdcOpcyBkZSBndWFyZGFyIGV4aXRvc2FtZW50ZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdzYXZlZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3VibWl0dGluZyBpbnZvaWNlOicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LmVycm9yKCdFcnJvciBhbCBndWFyZGFyIGxhIGZhY3R1cmE6ICcgKyBlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9LFxuICAgIG1vdW50ZWQoKSB7XG4gICAgICAgIC8vIEVuc3VyZSBpbnZvaWNlLnByb2R1Y3QgaXMgYWx3YXlzIGFuIGFycmF5IHRvIHByZXZlbnQgaXRlcmF0aW9uIGVycm9yc1xuICAgICAgICBpZiAodGhpcy5pbnZvaWNlLnByb2R1Y3RBcnJheSkge1xuICAgICAgICAgICAgLy8gSWYgcHJvZHVjdEFycmF5IGV4aXN0cywgY2hlY2sgaWYgaXQncyBhbiBhcnJheVxuICAgICAgICAgICAgdGhpcy5pbnZvaWNlLnByb2R1Y3QgPSBBcnJheS5pc0FycmF5KHRoaXMuaW52b2ljZS5wcm9kdWN0QXJyYXkpXG4gICAgICAgICAgICAgICAgPyB0aGlzLmludm9pY2UucHJvZHVjdEFycmF5XG4gICAgICAgICAgICAgICAgOiBbdGhpcy5pbnZvaWNlLnByb2R1Y3RBcnJheV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJZiBwcm9kdWN0QXJyYXkgZG9lc24ndCBleGlzdCwgaW5pdGlhbGl6ZSBhcyBlbXB0eSBhcnJheVxuICAgICAgICAgICAgdGhpcy5pbnZvaWNlLnByb2R1Y3QgPSBbXTtcbiAgICAgICAgfVxuICAgIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuLmVkaXRlZC1jb2xzIHtcbiAgICBtaW4td2lkdGg6IDhyZW07XG59XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2PlxuICAgICAgPCEtLSBGaWx0ZXIgU2VjdGlvbiAtLT5cbiAgICAgIDx2LWNhcmQgY2xhc3M9XCJtYi00XCI+XG4gICAgICAgIDx2LWNhcmQtdGl0bGU+XG4gICAgICAgICAgPHNsb3QgbmFtZT1cInRpdGxlXCI+e3sgdGl0bGUgfX08L3Nsb3Q+XG4gICAgICAgIDwvdi1jYXJkLXRpdGxlPlxuICAgICAgICBcbiAgICAgICAgPHYtcm93IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LXdyYXAtd3JhcCBteC01XCI+XG4gICAgICAgICAgPHRlbXBsYXRlIHYtZm9yPVwiKGZpbHRlciwgaW5kZXgpIGluIGZpbHRlckNvbmZpZ1wiIDprZXk9XCJpbmRleFwiPlxuICAgICAgICAgICAgPHYtY29sIDpjb2xzPVwiMTJcIiA6c209XCI2XCIgOm1kPVwiZmlsdGVyLndpZHRoIHx8IDNcIiBjbGFzcz1cInNlYXJjaGVyc1wiPlxuICAgICAgICAgICAgICA8IS0tIFRleHQgZmllbGQgLS0+XG4gICAgICAgICAgICAgIDx2LXRleHQtZmllbGRcbiAgICAgICAgICAgICAgICB2LWlmPVwiZmlsdGVyLnR5cGUgPT09ICd0ZXh0J1wiXG4gICAgICAgICAgICAgICAgdi1tb2RlbD1cImxvY2FsRmlsdGVyc1tmaWx0ZXIuZmllbGRdXCJcbiAgICAgICAgICAgICAgICA6bGFiZWw9XCJmaWx0ZXIubGFiZWxcIlxuICAgICAgICAgICAgICAgIDpwcmVwZW5kLWlubmVyLWljb249XCJmaWx0ZXIuaWNvbiB8fCAnbWRpLW1hZ25pZnknXCJcbiAgICAgICAgICAgICAgICBjbGVhcmFibGVcbiAgICAgICAgICAgICAgICBoaWRlLWRldGFpbHNcbiAgICAgICAgICAgICAgICBkZW5zZVxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzb2xvLWZpbGxlZFwiXG4gICAgICAgICAgICAgICAgQHVwZGF0ZTptb2RlbC12YWx1ZT1cInVwZGF0ZUZpbHRlcnNcIlxuICAgICAgICAgICAgICA+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICA8IS0tIERhdGUgZmllbGQgLS0+XG4gICAgICAgICAgICAgIDx2LXRleHQtZmllbGRcbiAgICAgICAgICAgICAgICB2LWlmPVwiZmlsdGVyLnR5cGUgPT09ICdkYXRlJ1wiXG4gICAgICAgICAgICAgICAgdi1tb2RlbD1cImxvY2FsRmlsdGVyc1tmaWx0ZXIuZmllbGRdXCJcbiAgICAgICAgICAgICAgICA6bGFiZWw9XCJmaWx0ZXIubGFiZWxcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJkYXRlXCJcbiAgICAgICAgICAgICAgICBoaWRlLWRldGFpbHNcbiAgICAgICAgICAgICAgICBkZW5zZVxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzb2xvLWZpbGxlZFwiXG4gICAgICAgICAgICAgICAgQHVwZGF0ZTptb2RlbC12YWx1ZT1cInVwZGF0ZUZpbHRlcnNcIlxuICAgICAgICAgICAgICA+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICA8IS0tIFN0YXR1cyBmaWVsZCAtLT5cbiAgICAgICAgICAgICAgPHYtc2VsZWN0XG4gICAgICAgICAgICAgICAgdi1pZj1cImZpbHRlci50eXBlID09PSAnc2VsZWN0J1wiXG4gICAgICAgICAgICAgICAgdi1tb2RlbD1cImxvY2FsRmlsdGVyc1tmaWx0ZXIuZmllbGRdXCJcbiAgICAgICAgICAgICAgICA6aXRlbXM9XCJmaWx0ZXIuaXRlbXMgfHwgW11cIlxuICAgICAgICAgICAgICAgIDpsYWJlbD1cImZpbHRlci5sYWJlbFwiXG4gICAgICAgICAgICAgICAgOnByZXBlbmQtaW5uZXItaWNvbj1cImZpbHRlci5pY29uIHx8ICdtZGktbWFnbmlmeSdcIlxuICAgICAgICAgICAgICAgIGl0ZW0tdGl0bGU9XCJpdGV4dFwiXG4gICAgICAgICAgICAgICAgaXRlbS12YWx1ZT1cIml2YWx1ZVwiXG4gICAgICAgICAgICAgICAgY2xlYXJhYmxlXG4gICAgICAgICAgICAgICAgaGlkZS1kZXRhaWxzXG4gICAgICAgICAgICAgICAgZGVuc2VcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwic29sby1maWxsZWRcIlxuICAgICAgICAgICAgICAgIEB1cGRhdGU6bW9kZWwtdmFsdWU9XCJ1cGRhdGVGaWx0ZXJzXCJcbiAgICAgICAgICAgICAgPjwvdi1zZWxlY3Q+XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICA8IS0tIFJhbmdlIGZpZWxkIC0tPlxuICAgICAgICAgICAgICA8ZGl2IHYtaWY9XCJmaWx0ZXIudHlwZSA9PT0gJ3JhbmdlJ1wiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGRcbiAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJsb2NhbEZpbHRlcnNbYCR7ZmlsdGVyLmZpZWxkfVtndGVdYF1cIlxuICAgICAgICAgICAgICAgICAgOmxhYmVsPVwiYCR7ZmlsdGVyLmxhYmVsfSBtaW4gLWBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICBoaWRlLWRldGFpbHNcbiAgICAgICAgICAgICAgICAgIGRlbnNlXG4gICAgICAgICAgICAgICAgICB2YXJpYW50PVwic29sby1maWxsZWRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZS0yXCJcbiAgICAgICAgICAgICAgICAgIEB1cGRhdGU6bW9kZWwtdmFsdWU9XCJ1cGRhdGVGaWx0ZXJzXCJcbiAgICAgICAgICAgICAgICA+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZFxuICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cImxvY2FsRmlsdGVyc1tgJHtmaWx0ZXIuZmllbGR9W2x0ZV1gXVwiXG4gICAgICAgICAgICAgICAgICA6bGFiZWw9XCJgJHtmaWx0ZXIubGFiZWx9IG1heCArYFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgIGhpZGUtZGV0YWlsc1xuICAgICAgICAgICAgICAgICAgZGVuc2VcbiAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzb2xvLWZpbGxlZFwiXG4gICAgICAgICAgICAgICAgICBAdXBkYXRlOm1vZGVsLXZhbHVlPVwidXBkYXRlRmlsdGVyc1wiXG4gICAgICAgICAgICAgICAgPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPC92LXJvdz5cbiAgICAgICAgPGJyPlxuICAgICAgPC92LWNhcmQ+XG4gIFxuICAgICAgPCEtLSBEYXRhIFRhYmxlIC0tPlxuICAgICAgPHYtY2FyZD5cbiAgICAgICAgPHYtZGF0YS10YWJsZVxuICAgICAgICAgIDpoZWFkZXJzPVwicHJvY2Vzc2VkSGVhZGVyc1wiXG4gICAgICAgICAgOml0ZW1zPVwiaXRlbXNcIlxuICAgICAgICAgIDpsb2FkaW5nPVwibG9hZGluZ1wiXG4gICAgICAgICAgOml0ZW1zLXBlci1wYWdlPVwicGFnaW5hdGlvbi5pdGVtc1BlclBhZ2VcIlxuICAgICAgICAgIDpwYWdlPVwicGFnaW5hdGlvbi5wYWdlXCJcbiAgICAgICAgICA6c2VydmVyLWl0ZW1zLWxlbmd0aD1cInRvdGFsSXRlbXNcIlxuICAgICAgICAgIEB1cGRhdGU6b3B0aW9ucz1cIm9uVGFibGVPcHRpb25zVXBkYXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDwhLS0gQ3VzdG9tIHNsb3QgZm9yIGFjdGlvbnMgLS0+XG4gICAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDppdGVtLmFjdGlvbnM9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgICAgPHNsb3QgbmFtZT1cImFjdGlvbnNcIiA6aXRlbT1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNlbnRlciBhbGlnbi1jZW50ZXJcIiBzdHlsZT1cImdhcDogOHB4O1wiPlxuICBcbiAgICAgICAgICAgICAgPHYtYnRuXG4gICAgICAgICAgICAgICAgdi1mb3I9XCIoYWN0aW9uLCBpKSBpbiBhY3Rpb25zXCJcbiAgICAgICAgICAgICAgICA6a2V5PVwiaVwiXG4gICAgICAgICAgICAgICAgOmljb249XCJhY3Rpb24uaWNvblwiXG4gICAgICAgICAgICAgICAgOmNvbG9yPVwiYWN0aW9uLmNvbG9yIHx8ICdwcmltYXJ5J1wiXG4gICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiYWN0aW9uLmNvbmRpdGlvbiA/IGFjdGlvbi5jb25kaXRpb24oaXRlbSkgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgOnRpdGxlPVwiYWN0aW9uPy50aXRsZSA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJteC0xXCJcbiAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cImFjdGlvbi5oYW5kbGVyKGl0ZW0pXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDx2LWljb24gdi1pZj1cImFjdGlvbi5pY29uXCI+e3sgYWN0aW9uLmljb24gfX08L3YtaWNvbj5cbiAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwiYWN0aW9uLnRleHRcIiBjbGFzcz1cIm1zLTFcIj57eyBhY3Rpb24udGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC92LWJ0bj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3Nsb3Q+XG4gICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICBcbiAgICAgICAgICA8IS0tIERlZmF1bHQgc2xvdCBmb3IgY3VzdG9tIGNvbHVtbnMgLS0+XG4gICAgICAgICAgPHRlbXBsYXRlIHYtZm9yPVwic2xvdE5hbWUgaW4gT2JqZWN0LmtleXMoJHNsb3RzKVwiIDprZXk9XCJzbG90TmFtZVwiICNbc2xvdE5hbWVdPVwic2xvdERhdGFcIj5cbiAgICAgICAgICAgIDxzbG90IDpuYW1lPVwic2xvdE5hbWVcIiB2LWJpbmQ9XCJzbG90RGF0YVwiPjwvc2xvdD5cbiAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8L3YtZGF0YS10YWJsZT5cbiAgICAgIDwvdi1jYXJkPlxuICAgIDwvZGl2PlxuICA8L3RlbXBsYXRlPlxuICBcbiAgPHNjcmlwdD5cbiAgaW1wb3J0IHsgdXNlQXBpUmVzb3VyY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb21wb3NhYmxlcy91c2VBcGlSZXNvdXJjZSc7XG4gIGltcG9ydCB7IHJlZiwgb25Nb3VudGVkLCB3YXRjaCwgY29tcHV0ZWQgfSBmcm9tICd2dWUnO1xuICBcbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWU6ICdEeW5hbWljRmlsdGVyVGFibGVDbGllbnQnLFxuICAgIFxuICAgIHByb3BzOiB7XG4gICAgICB0aXRsZToge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIGRlZmF1bHQ6ICdSZXN1bHRhZG9zJ1xuICAgICAgfSxcbiAgICAgIFxuICAgICAgLy8gQVBJIGVuZHBvaW50IHRvIGZldGNoIGRhdGEgZnJvbVxuICAgICAgYXBpRW5kcG9pbnQ6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFxuICAgICAgLy8gQ29uZmlndXJhdGlvbiBmb3IgZmlsdGVyIGZpZWxkcyAob3B0aW9uYWwpXG4gICAgICBmaWx0ZXJDb25maWc6IHtcbiAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgIGRlZmF1bHQ6ICgpID0+IFtdXG4gICAgICB9LFxuICAgICAgXG4gICAgICAvLyBUYWJsZSBoZWFkZXJzIGNvbmZpZ3VyYXRpb25cbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICB9LFxuICAgICAgXG4gICAgICAvLyBBY3Rpb25zIGZvciB0aGUgYWN0aW9uIGNvbHVtblxuICAgICAgYWN0aW9uczoge1xuICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gW11cbiAgICAgIH0sXG4gICAgICBcbiAgICAgIC8vIEFkZGl0aW9uYWwgcXVlcnkgcGFyYW1ldGVycyB0byBpbmNsdWRlIGluIEFQSSByZXF1ZXN0c1xuICAgICAgYWRkaXRpb25hbFBhcmFtczoge1xuICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgIGRlZmF1bHQ6ICgpID0+ICh7fSlcbiAgICAgIH0sXG4gICAgICBcbiAgICAgIC8vIERlZmF1bHQgc29ydCBzZXR0aW5nc1xuICAgICAgZGVmYXVsdFNvcnQ6IHtcbiAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe1xuICAgICAgICAgIGZpZWxkOiAnaWQnLFxuICAgICAgICAgIGRpcmVjdGlvbjogJ2Rlc2MnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBcbiAgICBzZXR1cChwcm9wcywgeyBlbWl0IH0pIHtcbiAgICAgIC8vIExvY2FsIGZpbHRlcnMgdG8gbWFuYWdlIGluIHRoZSBVSVxuICAgICAgY29uc3QgbG9jYWxGaWx0ZXJzID0gcmVmKHt9KTtcbiAgICAgIFxuICAgICAgLy8gSW5pdGlhbGl6ZSBBUEkgUmVzb3VyY2VcbiAgICAgIGNvbnN0IGFwaVJlc291cmNlID0gdXNlQXBpUmVzb3VyY2Uoe1xuICAgICAgICBlbmRwb2ludDogcHJvcHMuYXBpRW5kcG9pbnQsXG4gICAgICAgIGRlZmF1bHRQYXJhbXM6IHByb3BzLmFkZGl0aW9uYWxQYXJhbXMsXG4gICAgICAgIGF1dG9GZXRjaDogZmFsc2UgLy8gV2UnbGwgaGFuZGxlIGZldGNoaW5nIGFmdGVyIGluaXRpYWxpemluZyBmaWx0ZXJzXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgLy8gRXh0cmFjdCB2YWx1ZXMgZnJvbSBhcGlSZXNvdXJjZVxuICAgICAgY29uc3QgeyBcbiAgICAgICAgaXRlbXMsIFxuICAgICAgICBsb2FkaW5nLCBcbiAgICAgICAgZXJyb3IsIFxuICAgICAgICBwYWdpbmF0aW9uLCBcbiAgICAgICAgdG90YWxJdGVtcywgXG4gICAgICAgIGZldGNoRGF0YSwgXG4gICAgICAgIHNldEZpbHRlcnMsIFxuICAgICAgICBoYW5kbGVUYWJsZU9wdGlvbnMsIFxuICAgICAgICByZXNldEZpbHRlcnMsXG4gICAgICAgIGZpbHRlcnMgXG4gICAgICB9ID0gYXBpUmVzb3VyY2U7XG4gICAgICBcbiAgICAgIC8vIEluaXRpYWxpemUgZmlsdGVycyBiYXNlZCBvbiBmaWx0ZXJDb25maWdcbiAgICAgIG9uTW91bnRlZCgoKSA9PiB7XG4gICAgICAgIC8vIEluaXRpYWxpemUgbG9jYWwgZmlsdGVycyBvYmplY3Qgd2l0aCBlbXB0eSB2YWx1ZXNcbiAgICAgICAgcHJvcHMuZmlsdGVyQ29uZmlnLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyLnR5cGUgPT09ICdyYW5nZScpIHtcbiAgICAgICAgICAgIGxvY2FsRmlsdGVycy52YWx1ZVtgJHtmaWx0ZXIuZmllbGR9W2d0ZV1gXSA9ICcnO1xuICAgICAgICAgICAgbG9jYWxGaWx0ZXJzLnZhbHVlW2Ake2ZpbHRlci5maWVsZH1bbHRlXWBdID0gJyc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvY2FsRmlsdGVycy52YWx1ZVtmaWx0ZXIuZmllbGRdID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIEluaXRpYWwgZGF0YSBmZXRjaFxuICAgICAgICBmZXRjaERhdGEoKTtcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBEZWJvdW5jZSB0aW1lclxuICAgICAgbGV0IGRlYm91bmNlVGltZXIgPSBudWxsO1xuICAgICAgXG4gICAgICAvLyBVcGRhdGUgZmlsdGVycyB3aGVuIHVzZXIgY2hhbmdlcyB0aGVtIGluIHRoZSBVSSAod2l0aCBkZWJvdW5jZSlcbiAgICAgIGNvbnN0IHVwZGF0ZUZpbHRlcnMgPSAoKSA9PiB7XG4gICAgICAgIC8vIENsZWFyIHByZXZpb3VzIHRpbWVyXG4gICAgICAgIGlmIChkZWJvdW5jZVRpbWVyKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KGRlYm91bmNlVGltZXIpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBTZXQgbmV3IHRpbWVyICgzMDBtcyBkZWxheSlcbiAgICAgICAgZGVib3VuY2VUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8vIEZpbHRlciBvdXQgZW1wdHkgdmFsdWVzXG4gICAgICAgICAgY29uc3Qgbm9uRW1wdHlGaWx0ZXJzID0ge307XG4gICAgICAgICAgbGV0IGhhc0FjdGl2ZUZpbHRlcnMgPSBmYWxzZTtcbiAgICAgICAgICBcbiAgICAgICAgICBPYmplY3Qua2V5cyhsb2NhbEZpbHRlcnMudmFsdWUpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChsb2NhbEZpbHRlcnMudmFsdWVba2V5XSAhPT0gJycgJiYgXG4gICAgICAgICAgICAgICAgbG9jYWxGaWx0ZXJzLnZhbHVlW2tleV0gIT09IG51bGwgJiYgXG4gICAgICAgICAgICAgICAgbG9jYWxGaWx0ZXJzLnZhbHVlW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBub25FbXB0eUZpbHRlcnNba2V5XSA9IGxvY2FsRmlsdGVycy52YWx1ZVtrZXldO1xuICAgICAgICAgICAgICBoYXNBY3RpdmVGaWx0ZXJzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBDaGVjayBpZiBhbGwgZmlsdGVycyBhcmUgZW1wdHkgLSByZWxvYWQgb3JpZ2luYWwgZGF0YSBpZiBzb1xuICAgICAgICAgIGlmICghaGFzQWN0aXZlRmlsdGVycykge1xuICAgICAgICAgICAgcmVzZXRGaWx0ZXJzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIEFwcGx5IGZpbHRlcnMgYW5kIHJlc2V0IHBhZ2luYXRpb25cbiAgICAgICAgICBzZXRGaWx0ZXJzKG5vbkVtcHR5RmlsdGVycyk7XG4gICAgICAgIH0sIDc2NSk7IC8vIDc2NW1zIGRlYm91bmNlXG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBIYW5kbGUgdGFibGUgb3B0aW9ucyB1cGRhdGUgKHBhZ2luYXRpb24sIHNvcnRpbmcpXG4gICAgICBjb25zdCBvblRhYmxlT3B0aW9uc1VwZGF0ZSA9IChvcHRpb25zKSA9PiB7XG4gICAgICAgIGhhbmRsZVRhYmxlT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgIH07XG4gICAgICBcbiAgICAgIC8vIFJlc2V0IGFsbCBmaWx0ZXJzXG4gICAgICBjb25zdCByZXNldExvY2FsRmlsdGVycyA9ICgpID0+IHtcbiAgICAgICAgLy8gQ2xlYXIgdGhlIFVJIGZpbHRlcnNcbiAgICAgICAgcHJvcHMuZmlsdGVyQ29uZmlnLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyLnR5cGUgPT09ICdyYW5nZScpIHtcbiAgICAgICAgICAgIGxvY2FsRmlsdGVycy52YWx1ZVtgJHtmaWx0ZXIuZmllbGR9W2d0ZV1gXSA9ICcnO1xuICAgICAgICAgICAgbG9jYWxGaWx0ZXJzLnZhbHVlW2Ake2ZpbHRlci5maWVsZH1bbHRlXWBdID0gJyc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvY2FsRmlsdGVycy52YWx1ZVtmaWx0ZXIuZmllbGRdID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIENsZWFyIGFueSBkZWJvdW5jZWQgb3BlcmF0aW9uc1xuICAgICAgICBpZiAoZGVib3VuY2VUaW1lcikge1xuICAgICAgICAgIGNsZWFyVGltZW91dChkZWJvdW5jZVRpbWVyKTtcbiAgICAgICAgICBkZWJvdW5jZVRpbWVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gUmVzZXQgdGhlIGJhY2tlbmQgZmlsdGVycyBhbmQgcmVsb2FkIG9yaWdpbmFsIGRhdGFcbiAgICAgICAgcmVzZXRGaWx0ZXJzKCk7XG4gICAgICAgIFxuICAgICAgICAvLyBFbWl0IGFuIGV2ZW50IHRvIG5vdGlmeSBwYXJlbnQgY29tcG9uZW50c1xuICAgICAgICBlbWl0KCdmaWx0ZXJzLXJlc2V0Jyk7XG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBSZWZyZXNoIGRhdGEgd2l0aG91dCBjaGFuZ2luZyBmaWx0ZXJzXG4gICAgICBjb25zdCByZWZyZXNoID0gKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnW0R5bmFtaWNGaWx0ZXJUYWJsZUNsaWVudF0gcmVmcmVzaCgpIGxsYW1hZG8sIGVqZWN1dGFuZG8gZmV0Y2hEYXRhKCknKTtcbiAgICAgICAgZmV0Y2hEYXRhKCk7XG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBXYXRjaCBmb3IgZGF0YSBjaGFuZ2VzIGFuZCBlbWl0IGV2ZW50c1xuICAgICAgd2F0Y2goaXRlbXMsIChuZXdJdGVtcykgPT4ge1xuICAgICAgICBpZiAobmV3SXRlbXMgJiYgbmV3SXRlbXMubGVuZ3RoID49IDApIHtcbiAgICAgICAgICBlbWl0KCdkYXRhLWxvYWRlZCcsIG5ld0l0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHdhdGNoKGVycm9yLCAobmV3RXJyb3IpID0+IHtcbiAgICAgICAgaWYgKG5ld0Vycm9yKSB7XG4gICAgICAgICAgZW1pdCgnZXJyb3InLCBuZXdFcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBXYXRjaCBmb3IgYWRkaXRpb25hbFBhcmFtcyBjaGFuZ2VzIChlLmcuLCBkYXRlIGZpbHRlcnMgZnJvbSBwYXJlbnQpXG4gICAgICAvLyBXYXRjaCBmb3IgYWRkaXRpb25hbFBhcmFtcyBjaGFuZ2VzIChlLmcuLCBkYXRlIGZpbHRlcnMgZnJvbSBwYXJlbnQpXG4gICAgICB3YXRjaCgoKSA9PiBwcm9wcy5hZGRpdGlvbmFsUGFyYW1zLCAobmV3UGFyYW1zKSA9PiB7XG4gICAgICAgIC8vIE1lcmdlIGFkZGl0aW9uYWwgcGFyYW1zIHdpdGggY3VycmVudCBmaWx0ZXJzXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRGaWx0ZXJzID0geyAuLi5maWx0ZXJzIH07XG4gICAgICAgIFxuICAgICAgICAvLyBFeHBsaWNpdGx5IGNsZWFyIGJyb2FkY2FzdERhdGUgZmlsdGVycyBpZiBub3QgcHJlc2VudCBpbiBuZXdQYXJhbXNcbiAgICAgICAgLy8gVGhpcyBpcyBjcnVjaWFsIGZvciBcIlBlcmlvZG8gdG90YWxcIiB3aGljaCBzZW5kcyBlbXB0eSBwYXJhbXNcbiAgICAgICAgaWYgKCFuZXdQYXJhbXNbJ2Jyb2FkY2FzdERhdGVbYWZ0ZXJdJ10pIGRlbGV0ZSB1cGRhdGVkRmlsdGVyc1snYnJvYWRjYXN0RGF0ZVthZnRlcl0nXTtcbiAgICAgICAgaWYgKCFuZXdQYXJhbXNbJ2Jyb2FkY2FzdERhdGVbYmVmb3JlXSddKSBkZWxldGUgdXBkYXRlZEZpbHRlcnNbJ2Jyb2FkY2FzdERhdGVbYmVmb3JlXSddO1xuICAgICAgICBcbiAgICAgICAgT2JqZWN0LmtleXMobmV3UGFyYW1zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICB1cGRhdGVkRmlsdGVyc1trZXldID0gbmV3UGFyYW1zW2tleV07XG4gICAgICAgIH0pO1xuICAgICAgICBzZXRGaWx0ZXJzKHVwZGF0ZWRGaWx0ZXJzKTtcbiAgICAgIH0sIHsgZGVlcDogdHJ1ZSwgaW1tZWRpYXRlOiB0cnVlIH0pO1xuICAgICAgXG4gICAgICAvLyBXYXRjaCBmb3IgcGFnaW5hdGlvbiBjaGFuZ2VzXG4gICAgICB3YXRjaCgoKSA9PiBwYWdpbmF0aW9uLnBhZ2UsIChuZXdQYWdlKSA9PiB7XG4gICAgICAgIGVtaXQoJ3BhZ2UtY2hhbmdlZCcsIG5ld1BhZ2UpO1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHdhdGNoKCgpID0+IHBhZ2luYXRpb24uaXRlbXNQZXJQYWdlLCAobmV3SXRlbXNQZXJQYWdlKSA9PiB7XG4gICAgICAgIGVtaXQoJ2l0ZW1zLXBlci1wYWdlLWNoYW5nZWQnLCBuZXdJdGVtc1BlclBhZ2UpO1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIE1vbml0b3IgZmlsdGVyIHN0YXRlIGZvciBhbGwtZW1wdHkgY29uZGl0aW9uXG4gICAgICB3YXRjaChsb2NhbEZpbHRlcnMsIChuZXdGaWx0ZXJzKSA9PiB7XG4gICAgICAgIGxldCBhbGxFbXB0eSA9IHRydWU7XG4gICAgICAgIFxuICAgICAgICAvLyBDaGVjayBpZiBhbGwgZmlsdGVycyBhcmUgZW1wdHlcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhuZXdGaWx0ZXJzKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICBpZiAodmFsdWUgIT09ICcnICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFsbEVtcHR5ID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIEVtaXQgZXZlbnQgZm9yIGZpbHRlciBzdGF0ZVxuICAgICAgICBlbWl0KCdmaWx0ZXJzLXN0YXRlJywgeyBhbGxFbXB0eSwgaGFzRmlsdGVyczogIWFsbEVtcHR5IH0pO1xuICAgICAgfSwgeyBkZWVwOiB0cnVlIH0pO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICAvLyBTdGF0ZSBmcm9tIHVzZUFwaVJlc291cmNlXG4gICAgICAgIGl0ZW1zLFxuICAgICAgICBsb2FkaW5nLFxuICAgICAgICBwYWdpbmF0aW9uLFxuICAgICAgICB0b3RhbEl0ZW1zLFxuICAgICAgICBcbiAgICAgICAgLy8gTG9jYWwgc3RhdGVcbiAgICAgICAgbG9jYWxGaWx0ZXJzLFxuICAgICAgICBcbiAgICAgICAgLy8gTWV0aG9kc1xuICAgICAgICB1cGRhdGVGaWx0ZXJzLFxuICAgICAgICBvblRhYmxlT3B0aW9uc1VwZGF0ZSxcbiAgICAgICAgcmVzZXRGaWx0ZXJzOiByZXNldExvY2FsRmlsdGVycyxcbiAgICAgICAgcmVmcmVzaCxcbiAgICAgICAgXG4gICAgICAgIC8vIENvbXB1dGVkIHByb3BlcnR5IHRvIGhhbmRsZSBjb25kaXRpb25hbCBjb2x1bW4gdmlzaWJpbGl0eVxuICAgICAgICBwcm9jZXNzZWRIZWFkZXJzOiBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgICAgLy8gUmV0dXJuIGhlYWRlcnMgYXMtaXMgaWYgbm8gaXRlbXMgdG8gcHJvY2Vzc1xuICAgICAgICAgIGlmICghaXRlbXMudmFsdWUgfHwgaXRlbXMudmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvcHMuaGVhZGVycztcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gUHJvY2VzcyBoZWFkZXJzIHRvIGhhbmRsZSBjb25kaXRpb25hbCB2aXNpYmlsaXR5XG4gICAgICAgICAgcmV0dXJuIHByb3BzLmhlYWRlcnMuZmlsdGVyKGhlYWRlciA9PiB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgaGVhZGVyIGhhcyBhIHNob3dDb25kaXRpb24gZnVuY3Rpb24sIGNoZWNrIGlmIGl0IHNob3VsZCBiZSBzaG93blxuICAgICAgICAgICAgaWYgKGhlYWRlci5zaG93Q29uZGl0aW9uKSB7XG4gICAgICAgICAgICAgIC8vIENoZWNrIGlmIEFOWSBpdGVtIGluIHRoZSBjdXJyZW50IHBhZ2Ugd291bGQgc2hvdyB0aGlzIGNvbHVtblxuICAgICAgICAgICAgICAvLyBJZiBhdCBsZWFzdCBvbmUgaXRlbSBzaG91bGQgc2hvdyBpdCwgd2UgaW5jbHVkZSB0aGUgY29sdW1uXG4gICAgICAgICAgICAgIHJldHVybiBpdGVtcy52YWx1ZS5zb21lKGl0ZW0gPT4gaGVhZGVyLnNob3dDb25kaXRpb24oaXRlbSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBIZWFkZXJzIHdpdGhvdXQgYSBzaG93Q29uZGl0aW9uIGFyZSBhbHdheXMgc2hvd25cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgfTtcbiAgICB9XG4gIH07XG4gIDwvc2NyaXB0PlxuICBcbiAgPHN0eWxlIHNjb3BlZD5cbiAgLnNlYXJjaGVycyB7XG4gICAgcGFkZGluZzogOHB4O1xuICB9XG4gIFxuICAudi1kYXRhLXRhYmxlIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xuICB9XG4gIFxuICA6ZGVlcCgudi1kYXRhLXRhYmxlLWhlYWRlciB0aCkge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgdGV4dC10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG4gIFxuICA6ZGVlcCgudi1kYXRhLXRhYmxlX190cjpob3Zlcikge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG4gIH1cbiAgPC9zdHlsZT4iLCI8dGVtcGxhdGU+XHJcbiAgPGRpdj5cclxuICAgIDwhLS0gRmlsdGVyIFNlY3Rpb24gLS0+XHJcbiAgICA8di1jYXJkIGNsYXNzPVwibWItNFwiPlxyXG4gICAgICA8di1jYXJkLXRpdGxlPlxyXG4gICAgICAgIDxzbG90IG5hbWU9XCJ0aXRsZVwiPnt7IHRpdGxlIH19PC9zbG90PlxyXG4gICAgICA8L3YtY2FyZC10aXRsZT5cclxuICAgICAgXHJcbiAgICAgIDx2LXJvdyBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC13cmFwLXdyYXAgbXgtNVwiPlxyXG4gICAgICAgIDx0ZW1wbGF0ZSB2LWZvcj1cIihmaWx0ZXIsIGluZGV4KSBpbiBmaWx0ZXJDb25maWdcIiA6a2V5PVwiaW5kZXhcIj5cclxuICAgICAgICAgIDx2LWNvbCA6Y29scz1cIjEyXCIgOnNtPVwiNlwiIDptZD1cImZpbHRlci53aWR0aCB8fCAzXCIgY2xhc3M9XCJzZWFyY2hlcnNcIj5cclxuICAgICAgICAgICAgPCEtLSBUZXh0IGZpZWxkIC0tPlxyXG4gICAgICAgICAgICA8di10ZXh0LWZpZWxkXHJcbiAgICAgICAgICAgICAgdi1pZj1cImZpbHRlci50eXBlID09PSAndGV4dCdcIlxyXG4gICAgICAgICAgICAgIHYtbW9kZWw9XCJsb2NhbEZpbHRlcnNbZmlsdGVyLmZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgOmxhYmVsPVwiZmlsdGVyLmxhYmVsXCJcclxuICAgICAgICAgICAgICA6cHJlcGVuZC1pbm5lci1pY29uPVwiZmlsdGVyLmljb24gfHwgJ21kaS1tYWduaWZ5J1wiXHJcbiAgICAgICAgICAgICAgOnRpdGxlPVwiYWN0aW9uPy50aXRsZSA/PyAnJ1wiXHJcbiAgICAgICAgICAgICAgY2xlYXJhYmxlXHJcbiAgICAgICAgICAgICAgaGlkZS1kZXRhaWxzXHJcbiAgICAgICAgICAgICAgZGVuc2VcclxuICAgICAgICAgICAgICB2YXJpYW50PVwic29sby1maWxsZWRcIlxyXG4gICAgICAgICAgICAgIEB1cGRhdGU6bW9kZWwtdmFsdWU9XCJ1cGRhdGVGaWx0ZXJzXCJcclxuICAgICAgICAgICAgPjwvdi10ZXh0LWZpZWxkPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPCEtLSBEYXRlIGZpZWxkIC0tPlxyXG5cclxuICAgICAgICAgICAgPHYtdGV4dC1maWVsZFxyXG4gICAgICAgICAgICAgICAgdi1pZj1cImZpbHRlci50eXBlID09PSAnZGF0ZSdcIlxyXG4gICAgICAgICAgICAgICAgdi1tb2RlbD1cImxvY2FsRmlsdGVyc1tmaWx0ZXIuZmllbGRdXCJcclxuICAgICAgICAgICAgICAgIDpsYWJlbD1cImZpbHRlci5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiZGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBoaWRlLWRldGFpbHNcclxuICAgICAgICAgICAgICAgIGRlbnNlXHJcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwic29sby1maWxsZWRcIlxyXG4gICAgICAgICAgICAgICAgQHVwZGF0ZTptb2RlbC12YWx1ZT1cIih2YWwpID0+IG9uRGF0ZVVwZGF0ZShmaWx0ZXIuZmllbGQsIHZhbClcIlxyXG4gICAgICAgICAgICA+PC92LXRleHQtZmllbGQ+XHJcbiAgICBcclxuICAgICAgICAgICAgPCEtLSBTdGF0dXMgZmllbGQgLS0+XHJcbiAgICAgICAgICAgIDx2LXNlbGVjdFxyXG4gICAgICAgICAgICAgIHYtaWY9XCJmaWx0ZXIudHlwZSA9PT0gJ3NlbGVjdCdcIlxyXG4gICAgICAgICAgICAgIHYtbW9kZWw9XCJsb2NhbEZpbHRlcnNbZmlsdGVyLmZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgOml0ZW1zPVwiZmlsdGVyLml0ZW1zIHx8IFtdXCJcclxuICAgICAgICAgICAgICA6bGFiZWw9XCJmaWx0ZXIubGFiZWxcIlxyXG4gICAgICAgICAgICAgIDpwcmVwZW5kLWlubmVyLWljb249XCJmaWx0ZXIuaWNvbiB8fCAnbWRpLW1hZ25pZnknXCJcclxuICAgICAgICAgICAgICBpdGVtLXRpdGxlPVwiaXRleHRcIlxyXG4gICAgICAgICAgICAgIGl0ZW0tdmFsdWU9XCJpdmFsdWVcIlxyXG4gICAgICAgICAgICAgIGNsZWFyYWJsZVxyXG4gICAgICAgICAgICAgIGhpZGUtZGV0YWlsc1xyXG4gICAgICAgICAgICAgIGRlbnNlXHJcbiAgICAgICAgICAgICAgdmFyaWFudD1cInNvbG8tZmlsbGVkXCJcclxuICAgICAgICAgICAgICBAdXBkYXRlOm1vZGVsLXZhbHVlPVwidXBkYXRlRmlsdGVyc1wiXHJcbiAgICAgICAgICAgID48L3Ytc2VsZWN0PlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPCEtLSBSYW5nZSBmaWVsZCAtLT5cclxuICAgICAgICAgICAgPGRpdiB2LWlmPVwiZmlsdGVyLnR5cGUgPT09ICdyYW5nZSdcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkXHJcbiAgICAgICAgICAgICAgICB2LW1vZGVsPVwibG9jYWxGaWx0ZXJzW2Ake2ZpbHRlci5maWVsZH1bZ3RlXWBdXCJcclxuICAgICAgICAgICAgICAgIDpsYWJlbD1cImAke2ZpbHRlci5sYWJlbH0gbWluLmBcIlxyXG4gICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICBoaWRlLWRldGFpbHNcclxuICAgICAgICAgICAgICAgIGRlbnNlXHJcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwic29sby1maWxsZWRcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtZS0yXCJcclxuICAgICAgICAgICAgICAgIEB1cGRhdGU6bW9kZWwtdmFsdWU9XCJ1cGRhdGVGaWx0ZXJzXCJcclxuICAgICAgICAgICAgICA+PC92LXRleHQtZmllbGQ+XHJcbiAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZFxyXG4gICAgICAgICAgICAgICAgdi1tb2RlbD1cImxvY2FsRmlsdGVyc1tgJHtmaWx0ZXIuZmllbGR9W2x0ZV1gXVwiXHJcbiAgICAgICAgICAgICAgICA6bGFiZWw9XCJgJHtmaWx0ZXIubGFiZWx9IG1heC5gXCJcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgaGlkZS1kZXRhaWxzXHJcbiAgICAgICAgICAgICAgICBkZW5zZVxyXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cInNvbG8tZmlsbGVkXCJcclxuICAgICAgICAgICAgICAgIEB1cGRhdGU6bW9kZWwtdmFsdWU9XCJ1cGRhdGVGaWx0ZXJzXCJcclxuICAgICAgICAgICAgICA+PC92LXRleHQtZmllbGQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC92LWNvbD5cclxuICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICA8L3Ytcm93PiA8YnI+XHJcbiAgICA8L3YtY2FyZD5cclxuXHJcbiAgICA8IS0tIENhcmQgVmlldyAtLT5cclxuICAgIDx2LWNhcmQ+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwYS00XCI+XHJcbiAgICAgICAgPCEtLSBMb2FkaW5nIGluZGljYXRvciAtLT5cclxuICAgICAgICA8ZGl2IHYtaWY9XCJsb2FkaW5nXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBteS00XCI+XHJcbiAgICAgICAgICA8di1wcm9ncmVzcy1jaXJjdWxhciBpbmRldGVybWluYXRlIGNvbG9yPVwicHJpbWFyeVwiPjwvdi1wcm9ncmVzcy1jaXJjdWxhcj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCI+Q2FyZ2FuZG8gZGF0b3MuLi48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICA8IS0tIENhcmQgZ3JpZCBsYXlvdXQgLS0+XHJcbiAgICAgICAgPHYtcm93IHYtZWxzZT5cclxuICAgICAgICAgIDx2LWNvbCB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gaXRlbXNcIiA6a2V5PVwiaW5kZXhcIiBjb2xzPVwiMTJcIiBzbT1cIjZcIiBtZD1cIjRcIiBsZz1cIjNcIj5cclxuICAgICAgICAgICAgPHYtY2FyZCBjbGFzcz1cImludm9pY2UtY2FyZFwiIGVsZXZhdGlvbj1cIjBcIiBvdXRsaW5lZD5cclxuICAgICAgICAgICAgICA8di1jYXJkLXRleHQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gQ2xpZW50IGhlYWRlciAtLT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsaWVudC1oZWFkZXIgcGItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlLTIgdGV4dC11cHBlcmNhc2VcIj4qQ2xpZW50ZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWg2IGZvbnQtd2VpZ2h0LWJvbGRcIj57eyBnZXRJdGVtVmFsdWUoaXRlbSwgJ2NsaWVudFNvY2lhbERlbm9taW5hdGlvbicpIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPCEtLSBOSUYgQ2xpZW50ZSAtLT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jYXB0aW9uXCI+TklGIENsaWVudGU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zdWJ0aXRsZS0xXCI+e3sgZ2V0SXRlbVZhbHVlKGl0ZW0sICdjbGllbnRWYXROdW1iZXInKSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gSW52b2ljZSBhbmQgZGF0ZSAtLT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LXNwYWNlLWJldHdlZW4gbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jYXB0aW9uXCI+TsK6IGZhY3R1cmE8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlLTEgZm9udC13ZWlnaHQtYm9sZFwiPnt7IGdldEl0ZW1WYWx1ZShpdGVtLCAnaW52b2ljZU51bWJlcicpIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNhcHRpb25cIj5GZWNoYSBFLjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc3VidGl0bGUtMVwiPnt7IGZvcm1hdERhdGUoZ2V0SXRlbVZhbHVlKGl0ZW0sICdicm9hZGNhc3REYXRlJykpIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPCEtLSBGLiBWZW5jLiAtLT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jYXB0aW9uXCI+Ri4gVmVuYy48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zdWJ0aXRsZS0xXCI+e3sgZm9ybWF0RGF0ZShnZXRJdGVtVmFsdWUoaXRlbSwgJ2V4cGlyYXRpb25EYXRlJykpIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgPCEtLSBFeHBpcmVzIGFuZCB0b3RhbCAtLT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LXNwYWNlLWJldHdlZW4gbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj1cInNob3dEYXlzVG9FeHBpcmUoaXRlbSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNhcHRpb25cIj5Ew61hcy9QIFZlbmMuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zdWJ0aXRsZS0xXCI+e3sgZ2V0SXRlbVZhbHVlKGl0ZW0sICdkYXlzVG9FeHBpcmUnKSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jYXB0aW9uXCI+VG90YWw8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlLTEgZm9udC13ZWlnaHQtYm9sZFwiPnt7IGZvcm1hdEN1cnJlbmN5KGdldEl0ZW1WYWx1ZShpdGVtLCAndG90YWwnKSkgfX0g4oKsPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgPCEtLSBEaXNjb3VudCBpZiBhdmFpbGFibGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj1cInNob3dEaXNjb3VudChpdGVtKSAmJiBoYXNEaXNjb3VudChpdGVtKVwiIGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNhcHRpb25cIj5EdG8uPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc3VidGl0bGUtMVwiPnt7IGZvcm1hdEN1cnJlbmN5KGdldEl0ZW1WYWx1ZShpdGVtLCAnZGlzY291bnQnKSkgfX0g4oKsPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgPCEtLSBTdGF0dXMgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0dXMtY2hpcCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB5LTEgcm91bmRlZC1waWxsIHN0YXR1cy1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZ2V0U3RhdHVzTGFiZWwoZ2V0SXRlbVZhbHVlKGl0ZW0sICdzdGF0dXMnKSkgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICA8IS0tIEFjdGlvbnMgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jZW50ZXIgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24tY2VudGVyXCIgc3R5bGU9XCJnYXA6IDhweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWZvcj1cIihhY3Rpb24sIGkpIGluIGFjdGlvbnNcIiA6a2V5PVwiaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8di1idG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA6aWNvbj1cImFjdGlvbi5pY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA6Y29sb3I9XCJhY3Rpb24uY29sb3IgfHwgJ3ByaW1hcnknXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJhY3Rpb24uY29uZGl0aW9uID8gYWN0aW9uLmNvbmRpdGlvbihpdGVtKSA6IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uLWJ0blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPVwiYWN0aW9uLmhhbmRsZXIoaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtaWNvbiB2LWlmPVwiYWN0aW9uLmljb25cIj57eyBhY3Rpb24uaWNvbiB9fTwvdi1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3YtYnRuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L3YtY2FyZC10ZXh0PlxyXG4gICAgICAgICAgICA8L3YtY2FyZD5cclxuICAgICAgICAgIDwvdi1jb2w+XHJcbiAgICAgICAgPC92LXJvdz5cclxuICAgICAgICBcclxuICAgICAgICA8IS0tIFBhZ2luYXRpb24gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWVuZCBhbGlnbi1jZW50ZXIgbXQtNFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWNhcHRpb24gbWUtNFwiPkl0ZW1zIHBvciBww6FnaW5hOjwvc3Bhbj5cclxuICAgICAgICAgIDx2LXNlbGVjdFxyXG4gICAgICAgICAgICB2LW1vZGVsPVwicGFnaW5hdGlvbi5pdGVtc1BlclBhZ2VcIlxyXG4gICAgICAgICAgICA6aXRlbXM9XCJbNSwgMTAsIDE1LCAyMCwgMjUsIDUwXVwiXHJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgIGRlbnNpdHk9XCJjb21wYWN0XCJcclxuICAgICAgICAgICAgY2xhc3M9XCJpdGVtcy1wZXItcGFnZS1zZWxlY3RcIlxyXG4gICAgICAgICAgICBoaWRlLWRldGFpbHNcclxuICAgICAgICAgID48L3Ytc2VsZWN0PlxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICA8di1wYWdpbmF0aW9uXHJcbiAgICAgICAgICAgIHYtbW9kZWw9XCJwYWdpbmF0aW9uLnBhZ2VcIlxyXG4gICAgICAgICAgICA6bGVuZ3RoPVwiTWF0aC5jZWlsKHRvdGFsSXRlbXMgLyBwYWdpbmF0aW9uLml0ZW1zUGVyUGFnZSlcIlxyXG4gICAgICAgICAgICA6dG90YWwtdmlzaWJsZT1cIjVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1zLTRcIlxyXG4gICAgICAgICAgPjwvdi1wYWdpbmF0aW9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvdi1jYXJkPlxyXG4gIDwvZGl2PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdD5cclxuaW1wb3J0IHsgdXNlQXBpUmVzb3VyY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb21wb3NhYmxlcy91c2VBcGlSZXNvdXJjZSc7XHJcbmltcG9ydCB7IHJlZiwgb25Nb3VudGVkLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XHJcbmltcG9ydCBEYXRlSW5wdXQgZnJvbSAnLi9EYXRlSW5wdXQudnVlJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBuYW1lOiAnRHluYW1pY0ZpbHRlclRhYmxlJyxcclxuICBcclxuICBwcm9wczoge1xyXG4gICAgdGl0bGU6IHtcclxuICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICBkZWZhdWx0OiAnJ1xyXG4gICAgfSxcclxuICAgIFxyXG4gICAgLy8gQVBJIGVuZHBvaW50IHRvIGZldGNoIGRhdGEgZnJvbVxyXG4gICAgYXBpRW5kcG9pbnQ6IHtcclxuICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIFxyXG4gICAgLy8gQ29uZmlndXJhdGlvbiBmb3IgZmlsdGVyIGZpZWxkcyAob3B0aW9uYWwpXHJcbiAgICBmaWx0ZXJDb25maWc6IHtcclxuICAgICAgdHlwZTogQXJyYXksXHJcbiAgICAgIGRlZmF1bHQ6ICgpID0+IFtdXHJcbiAgICB9LFxyXG4gICAgXHJcbiAgICAvLyBUYWJsZSBoZWFkZXJzIGNvbmZpZ3VyYXRpb25cclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgdHlwZTogQXJyYXksXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAgXHJcbiAgICAvLyBBY3Rpb25zIGZvciB0aGUgYWN0aW9uIGNvbHVtblxyXG4gICAgYWN0aW9uczoge1xyXG4gICAgICB0eXBlOiBBcnJheSxcclxuICAgICAgZGVmYXVsdDogKCkgPT4gW11cclxuICAgIH0sXHJcbiAgICBcclxuICAgIC8vIEFkZGl0aW9uYWwgcXVlcnkgcGFyYW1ldGVycyB0byBpbmNsdWRlIGluIEFQSSByZXF1ZXN0c1xyXG4gICAgYWRkaXRpb25hbFBhcmFtczoge1xyXG4gICAgICB0eXBlOiBPYmplY3QsXHJcbiAgICAgIGRlZmF1bHQ6ICgpID0+ICh7fSlcclxuICAgIH0sXHJcbiAgICBcclxuICAgIC8vIERlZmF1bHQgc29ydCBzZXR0aW5nc1xyXG4gICAgZGVmYXVsdFNvcnQ6IHtcclxuICAgICAgdHlwZTogT2JqZWN0LFxyXG4gICAgICBkZWZhdWx0OiAoKSA9PiAoe1xyXG4gICAgICAgIGZpZWxkOiAnaWQnLFxyXG4gICAgICAgIGRpcmVjdGlvbjogJ2Rlc2MnXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfSxcclxuICBcclxuICBzZXR1cChwcm9wcywgeyBlbWl0IH0pIHtcclxuICAgIC8vIExvY2FsIGZpbHRlcnMgdG8gbWFuYWdlIGluIHRoZSBVSVxyXG4gICAgY29uc3QgbG9jYWxGaWx0ZXJzID0gcmVmKHt9KTtcclxuICAgIFxyXG4gICAgLy8gSW5pdGlhbGl6ZSBBUEkgUmVzb3VyY2VcclxuICAgIGNvbnN0IGFwaVJlc291cmNlID0gdXNlQXBpUmVzb3VyY2Uoe1xyXG4gICAgICBlbmRwb2ludDogcHJvcHMuYXBpRW5kcG9pbnQsXHJcbiAgICAgIGRlZmF1bHRQYXJhbXM6IHByb3BzLmFkZGl0aW9uYWxQYXJhbXMsXHJcbiAgICAgIGF1dG9GZXRjaDogZmFsc2UgLy8gV2UnbGwgaGFuZGxlIGZldGNoaW5nIGFmdGVyIGluaXRpYWxpemluZyBmaWx0ZXJzXHJcbiAgICB9KTtcclxuICAgIFxyXG4gICAgLy8gRXh0cmFjdCB2YWx1ZXMgZnJvbSBhcGlSZXNvdXJjZVxyXG4gICAgY29uc3QgeyBcclxuICAgICAgaXRlbXMsIFxyXG4gICAgICBsb2FkaW5nLCBcclxuICAgICAgZXJyb3IsIFxyXG4gICAgICBwYWdpbmF0aW9uLCBcclxuICAgICAgdG90YWxJdGVtcywgXHJcbiAgICAgIGZldGNoRGF0YSwgXHJcbiAgICAgIHNldEZpbHRlcnMsIFxyXG4gICAgICBoYW5kbGVUYWJsZU9wdGlvbnMsIFxyXG4gICAgICByZXNldEZpbHRlcnMsXHJcbiAgICAgIGZpbHRlcnMgXHJcbiAgICB9ID0gYXBpUmVzb3VyY2U7XHJcbiAgICBcclxuICAgIC8vIEluaXRpYWxpemUgZmlsdGVycyBiYXNlZCBvbiBmaWx0ZXJDb25maWdcclxuICAgIG9uTW91bnRlZCgoKSA9PiB7XHJcbiAgICAgIC8vIEluaXRpYWxpemUgbG9jYWwgZmlsdGVycyBvYmplY3Qgd2l0aCBlbXB0eSB2YWx1ZXNcclxuICAgICAgcHJvcHMuZmlsdGVyQ29uZmlnLmZvckVhY2goZmlsdGVyID0+IHtcclxuICAgICAgICBpZiAoZmlsdGVyLnR5cGUgPT09ICdyYW5nZScpIHtcclxuICAgICAgICAgIGxvY2FsRmlsdGVycy52YWx1ZVtgJHtmaWx0ZXIuZmllbGR9W2d0ZV1gXSA9ICcnO1xyXG4gICAgICAgICAgbG9jYWxGaWx0ZXJzLnZhbHVlW2Ake2ZpbHRlci5maWVsZH1bbHRlXWBdID0gJyc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxvY2FsRmlsdGVycy52YWx1ZVtmaWx0ZXIuZmllbGRdID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgXHJcbiAgICAgIC8vIEluaXRpYWwgZGF0YSBmZXRjaFxyXG4gICAgICBmZXRjaERhdGEoKTtcclxuICAgIH0pO1xyXG4gICAgXHJcbiAgICAvLyBEZWJvdW5jZSB0aW1lclxyXG4gICAgbGV0IGRlYm91bmNlVGltZXIgPSBudWxsO1xyXG4gICAgXHJcbiAgICAvLyBVcGRhdGUgZmlsdGVycyB3aGVuIHVzZXIgY2hhbmdlcyB0aGVtIGluIHRoZSBVSSAod2l0aCBkZWJvdW5jZSlcclxuICAgIGNvbnN0IHVwZGF0ZUZpbHRlcnMgPSAoKSA9PiB7XHJcbiAgICAgIC8vIENsZWFyIHByZXZpb3VzIHRpbWVyXHJcbiAgICAgIGlmIChkZWJvdW5jZVRpbWVyKSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KGRlYm91bmNlVGltZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBTZXQgbmV3IHRpbWVyICgzMDBtcyBkZWxheSlcclxuICAgICAgZGVib3VuY2VUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIC8vIEZpbHRlciBvdXQgZW1wdHkgdmFsdWVzXHJcbiAgICAgICAgY29uc3Qgbm9uRW1wdHlGaWx0ZXJzID0ge307XHJcbiAgICAgICAgXHJcbiAgICAgICAgT2JqZWN0LmtleXMobG9jYWxGaWx0ZXJzLnZhbHVlKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICBpZiAobG9jYWxGaWx0ZXJzLnZhbHVlW2tleV0gIT09ICcnICYmIFxyXG4gICAgICAgICAgICAgIGxvY2FsRmlsdGVycy52YWx1ZVtrZXldICE9PSBudWxsICYmIFxyXG4gICAgICAgICAgICAgIGxvY2FsRmlsdGVycy52YWx1ZVtrZXldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgbm9uRW1wdHlGaWx0ZXJzW2tleV0gPSBsb2NhbEZpbHRlcnMudmFsdWVba2V5XTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBBcHBseSB0aGUgZmlsdGVycyB0byB0aGUgQVBJIHJlc291cmNlXHJcbiAgICAgICAgc2V0RmlsdGVycyhub25FbXB0eUZpbHRlcnMpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIEVtaXQgZmlsdGVyIGNoYW5nZSBldmVudCB3aXRoIGN1cnJlbnQgZmlsdGVyc1xyXG4gICAgICAgIGVtaXQoJ2ZpbHRlci1jaGFuZ2UnLCBub25FbXB0eUZpbHRlcnMpO1xyXG4gICAgICB9LCAzMDApO1xyXG4gICAgfTtcclxuICAgIFxyXG4gICAgLy8gUmVzZXQgbG9jYWwgZmlsdGVyc1xyXG4gICAgY29uc3QgcmVzZXRMb2NhbEZpbHRlcnMgPSAoKSA9PiB7XHJcbiAgICAgIC8vIFJlc2V0IGFsbCBsb2NhbCBmaWx0ZXIgdmFsdWVzXHJcbiAgICAgIHByb3BzLmZpbHRlckNvbmZpZy5mb3JFYWNoKGZpbHRlciA9PiB7XHJcbiAgICAgICAgaWYgKGZpbHRlci50eXBlID09PSAncmFuZ2UnKSB7XHJcbiAgICAgICAgICBsb2NhbEZpbHRlcnMudmFsdWVbYCR7ZmlsdGVyLmZpZWxkfVtndGVdYF0gPSAnJztcclxuICAgICAgICAgIGxvY2FsRmlsdGVycy52YWx1ZVtgJHtmaWx0ZXIuZmllbGR9W2x0ZV1gXSA9ICcnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsb2NhbEZpbHRlcnMudmFsdWVbZmlsdGVyLmZpZWxkXSA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBDbGVhciBhbnkgZGVib3VuY2VkIG9wZXJhdGlvbnNcclxuICAgICAgaWYgKGRlYm91bmNlVGltZXIpIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQoZGVib3VuY2VUaW1lcik7XHJcbiAgICAgICAgZGVib3VuY2VUaW1lciA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIC8vIFJlc2V0IHRoZSBiYWNrZW5kIGZpbHRlcnMgYW5kIHJlbG9hZCBvcmlnaW5hbCBkYXRhXHJcbiAgICAgIHJlc2V0RmlsdGVycygpO1xyXG4gICAgICBcclxuICAgICAgLy8gRW1pdCBhbiBldmVudCB0byBub3RpZnkgcGFyZW50IGNvbXBvbmVudHNcclxuICAgICAgZW1pdCgnZmlsdGVycy1yZXNldCcpO1xyXG4gICAgICBlbWl0KCdmaWx0ZXItY2hhbmdlJywge30pO1xyXG4gICAgfTtcclxuICAgIFxyXG4gICAgLy8gUmVmcmVzaCBkYXRhIHdpdGhvdXQgY2hhbmdpbmcgZmlsdGVyc1xyXG4gICAgY29uc3QgcmVmcmVzaCA9ICgpID0+IHtcclxuICAgICAgZmV0Y2hEYXRhKCk7XHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICAvLyBXYXRjaCBmb3IgZGF0YSBjaGFuZ2VzIGFuZCBlbWl0IGV2ZW50c1xyXG4gICAgd2F0Y2goaXRlbXMsIChuZXdJdGVtcykgPT4ge1xyXG4gICAgICBpZiAobmV3SXRlbXMgJiYgbmV3SXRlbXMubGVuZ3RoID49IDApIHtcclxuICAgICAgICBlbWl0KCdkYXRhLWxvYWRlZCcsIG5ld0l0ZW1zKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBcclxuICAgIHdhdGNoKGVycm9yLCAobmV3RXJyb3IpID0+IHtcclxuICAgICAgaWYgKG5ld0Vycm9yKSB7XHJcbiAgICAgICAgZW1pdCgnZXJyb3InLCBuZXdFcnJvcik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgXHJcbiAgICAvLyBXYXRjaCBmb3IgcGFnaW5hdGlvbiBjaGFuZ2VzXHJcbiAgICB3YXRjaCgoKSA9PiBwYWdpbmF0aW9uLnBhZ2UsIChuZXdQYWdlKSA9PiB7XHJcbiAgICAgIGVtaXQoJ3BhZ2UtY2hhbmdlZCcsIG5ld1BhZ2UpO1xyXG4gICAgfSk7XHJcbiAgICBcclxuICAgIHdhdGNoKCgpID0+IHBhZ2luYXRpb24uaXRlbXNQZXJQYWdlLCAobmV3SXRlbXNQZXJQYWdlKSA9PiB7XHJcbiAgICAgIGVtaXQoJ2l0ZW1zLXBlci1wYWdlLWNoYW5nZWQnLCBuZXdJdGVtc1BlclBhZ2UpO1xyXG4gICAgfSk7XHJcbiAgICBcclxuICAgIC8vIFdhdGNoIGZvciBhZGRpdGlvbmFsUGFyYW1zIGNoYW5nZXMgKGUuZy4sIGRhdGUgZmlsdGVycyBmcm9tIHBhcmVudClcclxuICAgIHdhdGNoKCgpID0+IHByb3BzLmFkZGl0aW9uYWxQYXJhbXMsIChuZXdQYXJhbXMpID0+IHtcclxuICAgICAgaWYgKG5ld1BhcmFtcyAmJiBPYmplY3Qua2V5cyhuZXdQYXJhbXMpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBzZXRGaWx0ZXJzKG5ld1BhcmFtcyk7XHJcbiAgICAgIH1cclxuICAgIH0sIHsgZGVlcDogdHJ1ZSwgaW1tZWRpYXRlOiB0cnVlIH0pO1xyXG4gICAgXHJcbiAgICAvLyBNb25pdG9yIGZpbHRlciBzdGF0ZSBmb3IgYWxsLWVtcHR5IGNvbmRpdGlvblxyXG4gICAgd2F0Y2gobG9jYWxGaWx0ZXJzLCAobmV3RmlsdGVycykgPT4ge1xyXG4gICAgICBsZXQgYWxsRW1wdHkgPSB0cnVlO1xyXG4gICAgICBcclxuICAgICAgLy8gQ2hlY2sgaWYgYWxsIGZpbHRlcnMgYXJlIGVtcHR5XHJcbiAgICAgIE9iamVjdC52YWx1ZXMobmV3RmlsdGVycykuZm9yRWFjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSAnJyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBhbGxFbXB0eSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBFbWl0IGV2ZW50IGZvciBmaWx0ZXIgc3RhdGVcclxuICAgICAgZW1pdCgnZmlsdGVycy1zdGF0ZScsIHsgYWxsRW1wdHksIGhhc0ZpbHRlcnM6ICFhbGxFbXB0eSB9KTtcclxuICAgIH0sIHsgZGVlcDogdHJ1ZSB9KTtcclxuICAgIFxyXG4gICAgLy8gSGVscGVyIG1ldGhvZHMgZm9yIGNvbmRpdGlvbmFsbHkgc2hvd2luZyBlbGVtZW50c1xyXG4gICAgY29uc3Qgc2hvd0RheXNUb0V4cGlyZSA9IChpdGVtKSA9PiB7XHJcbiAgICAgIC8vIFN0YXRlcyB3aGVyZSBkYXlzIHRvIGV4cGlyYXRpb24gYXJlIHJlbGV2YW50OlxyXG4gICAgICAvLyBWYWxpZGF0ZWQgKDEpLCBFbGlnaWJsZSAoMiksIE5vdCBFbGlnaWJsZSAoMyksIEFkdmFuY2VkICg0KSwgZXRjLlxyXG4gICAgICBjb25zdCBzdGF0dXMgPSBOdW1iZXIoZ2V0SXRlbVZhbHVlKGl0ZW0sICdzdGF0dXMnKSk7XHJcbiAgICAgIGNvbnN0IHJlbGV2YW50U3RhdGVzID0gWzEsIDIsIDMsIDRdO1xyXG4gICAgICByZXR1cm4gcmVsZXZhbnRTdGF0ZXMuaW5jbHVkZXMoc3RhdHVzKTtcclxuICAgIH07XHJcbiAgICBcclxuICAgIGNvbnN0IHNob3dEaXNjb3VudCA9IChpdGVtKSA9PiB7XHJcbiAgICAgIC8vIFNhbWUgc3RhdGVzIGFzIGRheXMgdG8gZXhwaXJhdGlvblxyXG4gICAgICBjb25zdCBzdGF0dXMgPSBOdW1iZXIoZ2V0SXRlbVZhbHVlKGl0ZW0sICdzdGF0dXMnKSk7XHJcbiAgICAgIGNvbnN0IHJlbGV2YW50U3RhdGVzID0gWzEsIDIsIDMsIDRdO1xyXG4gICAgICByZXR1cm4gcmVsZXZhbnRTdGF0ZXMuaW5jbHVkZXMoc3RhdHVzKTtcclxuICAgIH07XHJcbiAgICBcclxuICAgIC8vIEhlbHBlciBtZXRob2RzIGZvciBjYXJkIGRpc3BsYXlcclxuICAgIGNvbnN0IGdldEl0ZW1WYWx1ZSA9IChpdGVtLCBrZXkpID0+IHtcclxuICAgICAgLy8gUmF3IGl0ZW0gYWNjZXNzXHJcbiAgICAgIGlmIChpdGVtLnJhdyAmJiB0eXBlb2YgaXRlbS5yYXcgPT09ICdvYmplY3QnICYmIGl0ZW0ucmF3W2tleV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybiBpdGVtLnJhd1trZXldO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIERpcmVjdCBwcm9wZXJ0eSBhY2Nlc3NcclxuICAgICAgcmV0dXJuIGl0ZW1ba2V5XTtcclxuICAgIH07XHJcbiAgICBcclxuICAgIGNvbnN0IGZvcm1hdERhdGUgPSAoZGF0ZSkgPT4ge1xyXG4gICAgICBpZiAoIWRhdGUpIHJldHVybiAnLS0nO1xyXG4gICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZSkudG9Mb2NhbGVEYXRlU3RyaW5nKCdlcy1FUycsIHtcclxuICAgICAgICB5ZWFyOiAnbnVtZXJpYycsXHJcbiAgICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcclxuICAgICAgICBkYXk6ICcyLWRpZ2l0JyxcclxuICAgICAgICB0aW1lWm9uZTogJ1VUQydcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICBjb25zdCBmb3JtYXRDdXJyZW5jeSA9IChhbW91bnQpID0+IHtcclxuICAgICAgaWYgKCFhbW91bnQpIHJldHVybiAnMCwwMCc7XHJcbiAgICAgIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQoJ2VzLUVTJywge1xyXG4gICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMixcclxuICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IDJcclxuICAgICAgfSkuZm9ybWF0KGFtb3VudCk7XHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICBjb25zdCBnZXRTdGF0dXNMYWJlbCA9IChzdGF0dXMpID0+IHtcclxuICAgICAgY29uc3Qgc3RhdHVzTGFiZWxzID0ge1xyXG4gICAgICAgIDA6ICdQZW5kaWVudGUnLFxyXG4gICAgICAgIDE6ICdWYWxpZGFkYScsXHJcbiAgICAgICAgMjogJ0VsZWdpYmxlJyxcclxuICAgICAgICAzOiAnTm8gZWxlZ2libGUnLFxyXG4gICAgICAgIDQ6ICdBZGVsYW50YWRhJyxcclxuICAgICAgICA1OiAnRmluYWxpemFkYSBzaW4gYWRlbGFudGFyJyxcclxuICAgICAgICA2OiAnUGFyYSB2YWxpZGFyJyxcclxuICAgICAgICA3OiAnQWRlbGFudGFkYSBWYWxpZGFkYSB5IFBhZ2FkYSdcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHN0YXR1c0xhYmVsc1tzdGF0dXNdIHx8ICdBZGVsYW50YWRhIFZhbGlkYWRhIHkgUGFnYWRhJztcclxuICAgIH07XHJcbiAgICBcclxuICAgIGNvbnN0IGhhc0Rpc2NvdW50ID0gKGl0ZW0pID0+IHtcclxuICAgICAgY29uc3QgZGlzY291bnQgPSBnZXRJdGVtVmFsdWUoaXRlbSwgJ2Rpc2NvdW50Jyk7XHJcbiAgICAgIHJldHVybiBkaXNjb3VudCAmJiBkaXNjb3VudCAhPT0gMDtcclxuICAgIH07XHJcbiAgICBcclxuICAgIC8vIEZpbHRlciBhY3Rpb25zIGZvciBlYWNoIGl0ZW1cclxuICAgIGNvbnN0IGFjdGlvbnNGb3JJdGVtID0gKGl0ZW0pID0+IHtcclxuICAgICAgcmV0dXJuIHByb3BzLmFjdGlvbnMuZmlsdGVyKGFjdGlvbiA9PiB7XHJcbiAgICAgICAgaWYgKGFjdGlvbi5jb25kaXRpb24pIHtcclxuICAgICAgICAgIHJldHVybiAhYWN0aW9uLmNvbmRpdGlvbihpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIFxyXG4gICAgY29uc3QgaXNNYWluQWN0aW9uID0gKGFjdGlvbikgPT4ge1xyXG4gICAgICAvLyBJZGVudGlmeSB0aGUgbWFpbiBhY3Rpb24gKENPQlJBUiBidXR0b24pXHJcbiAgICAgIHJldHVybiBhY3Rpb24uaWNvbiA9PT0gJ21kaS1jYXNoJyB8fCBhY3Rpb24udGV4dCA9PT0gJ0NPQlJBUicgfHwgYWN0aW9uLnRleHQgPT09ICdDb2JyYXInO1xyXG4gICAgfTtcclxuICAgIFxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLy8gU3RhdGUgZnJvbSB1c2VBcGlSZXNvdXJjZVxyXG4gICAgICBpdGVtcyxcclxuICAgICAgbG9hZGluZyxcclxuICAgICAgcGFnaW5hdGlvbixcclxuICAgICAgdG90YWxJdGVtcyxcclxuICAgICAgXHJcbiAgICAgIC8vIExvY2FsIHN0YXRlXHJcbiAgICAgIGxvY2FsRmlsdGVycyxcclxuICAgICAgXHJcbiAgICAgIC8vIE1ldGhvZHNcclxuICAgICAgdXBkYXRlRmlsdGVycyxcclxuICAgICAgcmVzZXRGaWx0ZXJzOiByZXNldExvY2FsRmlsdGVycyxcclxuICAgICAgcmVmcmVzaCxcclxuICAgICAgXHJcbiAgICAgIC8vIEhlbHBlciBtZXRob2RzXHJcbiAgICAgIGdldEl0ZW1WYWx1ZSxcclxuICAgICAgZm9ybWF0RGF0ZSxcclxuICAgICAgZm9ybWF0Q3VycmVuY3ksXHJcbiAgICAgIGdldFN0YXR1c0xhYmVsLFxyXG4gICAgICBoYXNEaXNjb3VudCxcclxuICAgICAgc2hvd0RheXNUb0V4cGlyZSxcclxuICAgICAgc2hvd0Rpc2NvdW50LFxyXG4gICAgICBhY3Rpb25zRm9ySXRlbSxcclxuICAgICAgaXNNYWluQWN0aW9uLFxyXG4gICAgICBvbkRhdGVVcGRhdGU6IChmaWVsZCwgZGF0ZSkgPT4ge1xyXG4gICAgICAgIC8vIFRoZSBpbnB1dCB0eXBlPVwiZGF0ZVwiIGFscmVhZHkgcmV0dXJucyB5eXl5LW1tLWRkIGZvcm1hdFxyXG4gICAgICAgIC8vIFVzaW5nIGl0IGRpcmVjdGx5IGF2b2lkcyB0aW1lem9uZSBjb252ZXJzaW9uIGlzc3Vlc1xyXG4gICAgICAgIGxvY2FsRmlsdGVycy52YWx1ZVtmaWVsZF0gPSBkYXRlIHx8ICcnO1xyXG4gICAgICAgIHVwZGF0ZUZpbHRlcnMoKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9LFxyXG4gIGNvbXBvbmVudHM6IHtcclxuICAgIERhdGVJbnB1dFxyXG4gIH1cclxufTtcclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgc2NvcGVkPlxyXG4uc2VhcmNoZXJzIHtcclxuICBwYWRkaW5nOiA4cHg7XHJcbn1cclxuXHJcbi5pbnZvaWNlLWNhcmQge1xyXG4gIGJvcmRlcjogMXB4IHNvbGlkICNlMGUwZTA7XHJcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xyXG4gIGhlaWdodDogMTAwJTtcclxufVxyXG5cclxuLmNsaWVudC1oZWFkZXIge1xyXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTBlMGUwO1xyXG4gIG1hcmdpbi1ib3R0b206IDEycHg7XHJcbn1cclxuXHJcbi5zdGF0dXMtbGFiZWwge1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XHJcbiAgY29sb3I6ICM2NjY7XHJcbiAgZm9udC1zaXplOiAxM3B4O1xyXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XHJcbn1cclxuXHJcbi5jaGFyZ2UtYnRuIHtcclxuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xyXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XHJcbiAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4O1xyXG4gIGhlaWdodDogNDBweDtcclxufVxyXG5cclxuLnRleHQtY2FwdGlvbiB7XHJcbiAgY29sb3I6ICM2NjY7XHJcbiAgZm9udC1zaXplOiAxMnB4O1xyXG4gIG1hcmdpbi1ib3R0b206IDJweDtcclxufVxyXG5cclxuLnRleHQtc3VidGl0bGUtMSB7XHJcbiAgZm9udC1zaXplOiAxNHB4O1xyXG59XHJcblxyXG4udGV4dC1oNiB7XHJcbiAgZm9udC1zaXplOiAxNnB4O1xyXG59XHJcblxyXG4uaXRlbXMtcGVyLXBhZ2Utc2VsZWN0IHtcclxuICB3aWR0aDogODBweDtcclxufVxyXG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImZsZXggbS0xMFwiPlxuICAgIDxkcmFnZ2FibGUgXG4gICAgICBjbGFzcz1cImRyYWdBcmVhIGxpc3QtZ3JvdXAgdy1mdWxsXCIgXG4gICAgICB2LW1vZGVsPVwic29ydGVkUnVsZXNcIlxuICAgICAgQGNoYW5nZT1cInVwZGF0ZVByaW9yaXRpZXNcIlxuICAgICAgOmFuaW1hdGlvbj1cIjIwMFwiXG4gICAgICBnaG9zdC1jbGFzcz1cImdob3N0LWNhcmRcIlxuICAgICAgZHJhZy1jbGFzcz1cImRyYWdnaW5nXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA+XG4gICAgICBcbiAgICA8ZGl2XG4gICAgICAgIHYtZm9yPVwiKGVsZW1lbnQsIGluZGV4KSBpbiBzb3J0ZWRSdWxlc1wiXG4gICAgICAgIDprZXk9XCJlbGVtZW50LmlkXCJcbiAgICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAgICdsaXN0LWdyb3VwLWl0ZW0gbS0xIHAtMyByb3VuZGVkLW1kIGQtZmxleCB0cmFuc2Zvcm0gdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwIGVhc2UtaW4tb3V0JyxcbiAgICAgICAgICBpc0N1cnJlbnRSdWxlKGVsZW1lbnQpID8gJ2JnLWJsdWUtMjAwJyA6ICdiZy1ncmF5LTMwMCBob3ZlcjpiZy1ncmF5LTIwMCdcbiAgICAgICAgXVwiXG4gICAgICA+XG4gICAgICA8ZGl2IHYtaWY9XCIhbG9hZGVyU3RvcmUuZ2V0SXNMb2FkaW5nXCIgY2xhc3M9XCJmb250LW1lZGl1bSBib3gtb3JkZXJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0zIHJvdW5kZWQtY2lyY2xlXCI+XG4gICAgICAgICAgICA8Yj57eyBpbmRleCA/PyBlbGVtZW50LnByaW9yaXR5T3JkZXIgfX08L2I+XG4gICAgICAgIDwvc3Bhbj4gXG4gICAgICAgIFJlZ2xhOiB7eyBlbGVtZW50LnJ1bGVOYW1lIHx8ICdTaW4gbm9tYnJlJyB9fTogXG4gICAgICAgIDxzbWFsbCBjbGFzcz1cIm1zLTFcIj57eyB0cnVuYyhlbGVtZW50LmRlc2NyaXB0aW9uLCAyMCkgfHwgJ1NpbiBkZXNjcmlwY2nDs24nIH19PC9zbWFsbD5cbiAgICAgIDwvZGl2PlxuICAgICAgXG4gICAgICA8di1za2VsZXRvbi1sb2FkZXIgdi1lbHNlIGNsYXNzPVwiYm94LW9yZGVyXCIgIHR5cGU9XCJsaXN0LWl0ZW0tYXZhdGFyXCI+PC92LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgIDwvZGl2PlxuICAgICAgXG4gICAgICA8ZGl2IHYtaWY9XCJzb3J0ZWRSdWxlcy5sZW5ndGggPT0gMFwiIGNsYXNzPVwicC0yIG15LTIgdGV4dC1jZW50ZXIgYmctZ3JleSByb3VuZGVkLXBpbGxcIj5cbiAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICBBUVVJIElSQU4gVE9EQVMgTEFTIFJFR0xBUyBDUkVBREFTLCBJTkNMVVlFTkRPIExBIEFDVFVBTFxuICAgICAgICA8L3NtYWxsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kcmFnZ2FibGU+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCwgY29tcHV0ZWQsIHJlZiwgd2F0Y2ggfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBWdWVEcmFnZ2FibGVOZXh0IH0gZnJvbSAndnVlLWRyYWdnYWJsZS1uZXh0J1xuaW1wb3J0IHsgdXNlUnVsZXNTdG9yZSB9IGZyb20gJ0Avc3RvcmVzL3J1bGVzJ1xuaW1wb3J0IHsgdXNlTG9hZGVyU3RvcmUgfSBmcm9tICdAL3N0b3Jlcy9sb2FkZXInXG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbXBvbmVudCh7XG4gIG5hbWU6ICdQcmlvcml0eVJ1bGVzJyxcbiAgY29tcG9uZW50czoge1xuICAgIGRyYWdnYWJsZTogVnVlRHJhZ2dhYmxlTmV4dCxcbiAgfSxcbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgZGlzYWJsZWQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnXSxcbiAgXG4gIHNldHVwKHByb3BzLCB7IGVtaXQgfSkge1xuICAgIGNvbnN0IGxvYWRlclN0b3JlID0gdXNlTG9hZGVyU3RvcmUoKVxuICAgIGNvbnN0IHJ1bGVzU3RvcmUgPSB1c2VSdWxlc1N0b3JlKClcbiAgICBjb25zdCBjdXJyZW50UnVsZXMgPSByZWYoW10pXG4gICAgY29uc3Qga2V5ID0gcmVmKDApXG5cbiAgICB3YXRjaCgoKSA9PiBydWxlc1N0b3JlLmdldFJ1bGVzLCAoKSA9PiB7XG4gICAgICBrZXkudmFsdWUrK1xuICAgIH0sIHsgZGVlcDogdHJ1ZSB9KVxuXG4gICAgY29uc3Qgc29ydGVkUnVsZXMgPSBjb21wdXRlZCh7XG4gICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgY29uc3QgcnVsZXMgPSBwcm9wcy5tb2RlbFZhbHVlLl9zdGF0ZU1hbmFnZXIuZ2V0UnVsZXNBc0FycmF5IHx8IFtdXG4gICAgICAgIC8vIEZpbHRlciBydWxlcyB0byBtYXRjaCB0aGUgY3VycmVudCBmb3JtIHR5cGVcbiAgICAgICAgY29uc3QgZmlsdGVyZWRSdWxlcyA9IHJ1bGVzLmZpbHRlcihydWxlID0+IHJ1bGUucnVsZVR5cGUgPT09IHByb3BzLm1vZGVsVmFsdWUuZm9ybU5hbWUpXG4gICAgICAgIC8vIFNvcnQgdGhlIGZpbHRlcmVkIHJ1bGVzIGJ5IHByaW9yaXR5XG4gICAgICAgIGNvbnN0IHNvcnRlZFJ1bGVzID0gWy4uLmZpbHRlcmVkUnVsZXNdLnNvcnQoKGEsIGIpID0+IFxuICAgICAgICAgIChhLnByaW9yaXR5T3JkZXIgfHwgMCkgLSAoYi5wcmlvcml0eU9yZGVyIHx8IDApXG4gICAgICAgIClcbiAgICAgICAgY3VycmVudFJ1bGVzLnZhbHVlID0gc29ydGVkUnVsZXNcbiAgICAgICAgcmV0dXJuIHNvcnRlZFJ1bGVzXG4gICAgICB9LFxuICAgICAgc2V0OiAobmV3VmFsdWUpID0+IHtcbiAgICAgICAgY3VycmVudFJ1bGVzLnZhbHVlID0gbmV3VmFsdWVcbiAgICAgICAgZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB7XG4gICAgICAgICAgLi4ucHJvcHMubW9kZWxWYWx1ZSxcbiAgICAgICAgICBfc3RhdGVNYW5hZ2VyOiB7XG4gICAgICAgICAgICAuLi5wcm9wcy5tb2RlbFZhbHVlLl9zdGF0ZU1hbmFnZXIsXG4gICAgICAgICAgICBnZXRSdWxlc0FzQXJyYXk6IFtcbiAgICAgICAgICAgICAgLy8gS2VlcCBvdGhlciBydWxlcyB0aGF0IGRvbid0IG1hdGNoIHRoZSBjdXJyZW50IGZvcm0gdHlwZVxuICAgICAgICAgICAgICAuLi4ocHJvcHMubW9kZWxWYWx1ZS5fc3RhdGVNYW5hZ2VyLmdldFJ1bGVzQXNBcnJheSB8fCBbXSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHJ1bGUgPT4gcnVsZS5ydWxlVHlwZSAhPT0gcHJvcHMubW9kZWxWYWx1ZS5mb3JtTmFtZSksXG4gICAgICAgICAgICAgIC8vIEFkZCB0aGUgdXBkYXRlZCBydWxlc1xuICAgICAgICAgICAgICAuLi5uZXdWYWx1ZVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgY29uc3QgaXNDdXJyZW50UnVsZSA9IChydWxlKSA9PiB7XG4gICAgICByZXR1cm4gcnVsZS5pZCA9PT0gcHJvcHMubW9kZWxWYWx1ZS5pZFxuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZVByaW9yaXRpZXMgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5tb3ZlZCkge1xuICAgICAgICBjb25zdCB7IG9sZEluZGV4LCBuZXdJbmRleCB9ID0gZXZlbnQubW92ZWRcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgTW92aW5nIGZyb20gJHtvbGRJbmRleH0gdG8gJHtuZXdJbmRleH1gKVxuICAgICAgICBcbiAgICAgICAgY29uc3QgdXBkYXRlZFJ1bGVzID0gY3VycmVudFJ1bGVzLnZhbHVlXG4gICAgICAgIGNvbnN0IHVwZGF0ZXMgPSB1cGRhdGVkUnVsZXMubWFwKChydWxlLCBjdXJyZW50SW5kZXgpID0+ICh7XG4gICAgICAgICAgaWQ6IHJ1bGUuaWQsXG4gICAgICAgICAgcHJpb3JpdHlPcmRlcjogY3VycmVudEluZGV4XG4gICAgICAgIH0pKVxuXG4gICAgICAgIC8vY29uc29sZS5sb2coYFVwZGF0ZXMgdG8gc2VuZDonLCB1cGRhdGVzKVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgcnVsZXNTdG9yZS51cGRhdGVQcmlvcml0aWVzKHVwZGF0ZXMpXG4gICAgICAgICAgYXdhaXQgcnVsZXNTdG9yZS5mZXRjaEFsbCgpXG4gICAgICAgICAga2V5LnZhbHVlKytcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gdXBkYXRlIHByaW9yaXRpZXM6JywgZXJyb3IpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbG9hZGVyU3RvcmUsXG4gICAgICBzb3J0ZWRSdWxlcyxcbiAgICAgIGlzQ3VycmVudFJ1bGUsXG4gICAgICB1cGRhdGVQcmlvcml0aWVzLFxuICAgICAga2V5XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG4ubGlzdC1ncm91cC1pdGVtIHtcbiAgY3Vyc29yOiBtb3ZlO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlO1xufVxuXG4ubGlzdC1ncm91cC1pdGVtOmhvdmVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDRweCk7XG59XG5cbi5naG9zdC1jYXJkIHtcbiAgb3BhY2l0eTogMC41O1xuICBiYWNrZ3JvdW5kOiAjYzhlYmZiICFpbXBvcnRhbnQ7XG4gIGJvcmRlcjogMnB4IGRhc2hlZCAjNGE5ZWZmO1xufVxuXG4uZHJhZ2dpbmcge1xuICBvcGFjaXR5OiAwLjk7XG4gIHRyYW5zZm9ybTogcm90YXRlKDFkZWcpIHNjYWxlKDEuMDIpO1xuICBib3gtc2hhZG93OiAwIDVweCAxNXB4IHJnYmEoMCwwLDAsMC4xNSk7XG59XG5cbi5mbGlwLWxpc3QtbW92ZSB7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzIGVhc2U7XG59XG5cbi5mbGlwLWxpc3QtZW50ZXItYWN0aXZlLFxuLmZsaXAtbGlzdC1sZWF2ZS1hY3RpdmUge1xuICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlO1xufVxuXG4uZmxpcC1saXN0LWVudGVyLWZyb20sXG4uZmxpcC1saXN0LWxlYXZlLXRvIHtcbiAgb3BhY2l0eTogMDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0zMHB4KTtcbn1cblxuLmJveC1vcmRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBoZWlnaHQ6IDMwcHg7XG4gIG1heC1oZWlnaHQ6IDMwcHg7XG4gIFxuICBzcGFuIHtcbiAgICB3aWR0aDogMjVweDtcbiAgICBoZWlnaHQ6IDI1cHg7XG4gICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM2NGQyNmY7XG4gIH1cbn1cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICA8di1mb3JtPlxuICAgIDxkaXY+IFxuICAgICAgPE1vcmVJbmZvIHRpdGxlPVwiRGF0b3MgZGUgbGEgcmVnbGFcIlxuICAgICAgcHJvZ3JhbW1lclJlZj1cInJ1bGUtZGF0YVwiXG4gICAgICBhY3RpdmF0b3I9XCJwYXJlbnRcIj5cbiAgICAgIDwvTW9yZUluZm8+XG4gICAgICA8YnI+XG4gICAgICA8di10ZXh0LWZpZWxkIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGxhYmVsPVwiTm9tYnJlIGRlIGxhIHJlZ2xhXCIgdi1tb2RlbD1cImVudGl0eS5ydWxlTmFtZVwiIDpkaXNhYmxlZD1cImRpc2FibGVkXCIgLz5cbiAgICAgIDx2LXRleHQtZmllbGQgdmFyaWFudD1cIm91dGxpbmVkXCIgbGFiZWw9XCJEZXNjcmlwY2nDs25cIiB2LW1vZGVsPVwiZW50aXR5LmRlc2NyaXB0aW9uXCIgOmRpc2FibGVkPVwiZGlzYWJsZWRcIiAvPlxuICAgICAgPE1vcmVJbmZvIHRpdGxlPVwiwr9BIHF1acOpbiB2YSBkaXJpZ2lkYT9cIlxuICAgICAgICBhY3RpdmF0b3I9XCJwYXJlbnRcIiBwcm9ncmFtbWVyUmVmPVwiY3JlYXRlLXByb3ZpZGVyLWNsYXNzaWZpY2F0aW9uXCI+XG4gICAgICA8L01vcmVJbmZvPlxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8di1zZWxlY3QgXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIFxuICAgICAgICAgICAgICBsYWJlbD1cIlNlbGVjY2lvbmEgdW4gdGFyZ2V0XCIgXG4gICAgICAgICAgICAgIDppdGVtcz1cInRhcmdldExpc3RcIiBcbiAgICAgICAgICAgICAgdi1tb2RlbD1cImVudGl0eS50YXJnZXRzXCJcbiAgICAgICAgICAgICAgaXRlbS10aXRsZT1cInRhcmdldE5hbWVcIlxuICAgICAgICAgICAgICBpdGVtLXZhbHVlPVwiQGlkXCJcbiAgICAgICAgICAgICAgbXVsdGlwbGUgXG4gICAgICAgICAgICAgIGNsZWFyYWJsZVxuICAgICAgICAgICAgICBkZWxldGFibGUtY2hpcHNcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDpjaGlwPVwieyBpdGVtLCBwcm9wcyB9XCI+XG4gICAgICAgICAgICAgICAgICA8di1jaGlwIHYtYmluZD1cInByb3BzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS5yYXcudGFyZ2V0TmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8di1idG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGljb24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJ4LXNtYWxsXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrLnN0b3A9XCJ2aWV3VGFyZ2V0KGl0ZW0ucmF3KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWwtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8di1pY29uIHNpemU9XCJtZWRpdW1cIj5tZGktZXllPC92LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC92LWJ0bj5cbiAgICAgICAgICAgICAgICAgIDwvdi1jaGlwPlxuICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1zbG90Oml0ZW09XCJ7IGl0ZW0sIHByb3BzIH1cIj5cbiAgICAgICAgICAgICAgICAgIDx2LWxpc3QtaXRlbSB2LWJpbmQ9XCJwcm9wc1wiIDp0aXRsZT1cIml0ZW0ucmF3LnRhcmdldE5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1zbG90OmFwcGVuZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtYnRuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cIm1kaS1leWVcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2suc3RvcD1cInZpZXdUYXJnZXQoaXRlbS5yYXcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdi1idG4+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvdi1saXN0LWl0ZW0+XG4gICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgPC92LXNlbGVjdD5cbiAgICAgICAgICA8Q3JlYXRlTmV3VGFyZ2V0IHYtaWY9XCIhZGlzYWJsZWRcIiBAc2F2ZWQ9XCJvblRhcmdldFNhdmVkXCI+PC9DcmVhdGVOZXdUYXJnZXQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gT3ZlcmxheSBwYXJhIHZlciBkZXRhbGxlcyBkZWwgdGFyZ2V0IC0tPlxuICAgICAgPE92ZXJsYXkgXG4gICAgICAgIHRpdGxlPVwiRGV0YWxsZXMgZGVsIFRhcmdldFwiIFxuICAgICAgICBwcm9ncmFtbWVyUmVmPVwidmlldy10YXJnZXQtZGV0YWlsc1wiXG4gICAgICAgIHYtbW9kZWw9XCJzaG93VGFyZ2V0RGV0YWlsc092ZXJsYXlcIlxuICAgICAgPlxuICAgICAgICA8dGVtcGxhdGUgI2RlZmF1bHQ+XG4gICAgICAgICAgPHYtZm9ybSBjbGFzcz1cInNjcm9sbGVhYmxlXCI+XG4gICAgICAgICAgICA8TW9yZUluZm8gdGl0bGU9XCJEYXRvcyBkZWwgdGFyZ2V0XCJcbiAgICAgICAgICAgICAgcHJvZ3JhbW1lclJlZj1cInRhcmdldC1pbmZvLXZpZXdcIlxuICAgICAgICAgICAgICBhY3RpdmF0b3I9XCJwYXJlbnRcIj5cbiAgICAgICAgICAgIDwvTW9yZUluZm8+XG4gICAgICAgICAgICA8di10ZXh0LWZpZWxkIFxuICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIiBcbiAgICAgICAgICAgICAgbGFiZWw9XCJOb21icmUgZGVsIHRhcmdldFwiIFxuICAgICAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRUYXJnZXQudGFyZ2V0TmFtZVwiIFxuICAgICAgICAgICAgICBkaXNhYmxlZCBcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktc3BhY2UtYmV0d2VlblwiPlxuICAgICAgICAgICAgICA8di1zd2l0Y2ggXG4gICAgICAgICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVGFyZ2V0Lm9ubHlJbmNsdWRlSW52b2ljZXNGcm9tVG9kYXlcIiBcbiAgICAgICAgICAgICAgICBjb2xvcj1cInN1Y2Nlc3NcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibm8tZGV0YWlsc1wiIFxuICAgICAgICAgICAgICAgIGxhYmVsPVwiU29sbyBhcGxpY2FyIHBhcmEgbnVldmFzIGZhY3R1cmFzIGEgcGFydGlyIGRlIGhveS5cIlxuICAgICAgICAgICAgICAgIGRpc2FibGVkXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC92LXN3aXRjaD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICA8TW9yZUluZm8gdGl0bGU9XCLCv0EgcXVpw6luIGFwbGljYT9cIlxuICAgICAgICAgICAgICBwcm9ncmFtbWVyUmVmPVwidGFyZ2V0LWFwcGxpZWQtdG8tcHJvdmlkZXItdmlld1wiXG4gICAgICAgICAgICAgIGFjdGl2YXRvcj1cInBhcmVudFwiPlxuICAgICAgICAgICAgPC9Nb3JlSW5mbz5cbiAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPHYtc2VsZWN0IFxuICAgICAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRUYXJnZXQucHJvdmlkZXJzXCIgXG4gICAgICAgICAgICAgIGl0ZW0tdmFsdWU9XCJAaWRcIiBcbiAgICAgICAgICAgICAgaXRlbS10aXRsZT1cInNvY2lhbERlbm9taW5hdGlvblwiXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIFxuICAgICAgICAgICAgICBsYWJlbD1cIlByb3ZlZWRvcmVzXCIgXG4gICAgICAgICAgICAgIDppdGVtcz1cInByb3ZpZGVyc1wiIFxuICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICBkZWxldGFibGUtY2hpcHNcbiAgICAgICAgICAgICAgZGlzYWJsZWRcbiAgICAgICAgICAgID48L3Ytc2VsZWN0PlxuICAgICAgICAgICAgPHYtc2VsZWN0IFxuICAgICAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRUYXJnZXQuY2F0ZWdvcmllc1wiIFxuICAgICAgICAgICAgICBpdGVtLXZhbHVlPVwiQGlkXCIgXG4gICAgICAgICAgICAgIGl0ZW0tdGl0bGU9XCJuYW1lXCIgXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXG4gICAgICAgICAgICAgIGxhYmVsPVwiR3J1cG9zXCIgXG4gICAgICAgICAgICAgIDppdGVtcz1cImdyb3Vwc1wiIFxuICAgICAgICAgICAgICBtdWx0aXBsZSBcbiAgICAgICAgICAgICAgZGVsZXRhYmxlLWNoaXBzXG4gICAgICAgICAgICAgIGRpc2FibGVkXG4gICAgICAgICAgICA+PC92LXNlbGVjdD5cbiAgICAgICAgICAgIDxNb3JlSW5mbyB0aXRsZT1cIsK/QSBxdcOpIGZhY3R1cmFzIGFwbGljYT9cIlxuICAgICAgICAgICAgICBwcm9ncmFtbWVyUmVmPVwidGFyZ2V0LWFwcGxpZWQtdG8taW52b2ljZS12aWV3XCJcbiAgICAgICAgICAgICAgYWN0aXZhdG9yPVwicGFyZW50XCI+XG4gICAgICAgICAgICA8L01vcmVJbmZvPlxuICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgPHYtc2VsZWN0IFxuICAgICAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRUYXJnZXQuaW52b2ljZXNcIiBcbiAgICAgICAgICAgICAgbGFiZWw9XCJGYWN0dXJhc1wiIFxuICAgICAgICAgICAgICBpdGVtLXZhbHVlPVwiQGlkXCJcbiAgICAgICAgICAgICAgaXRlbS10aXRsZT1cImludm9pY2VOdW1iZXJcIiBcbiAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCIgXG4gICAgICAgICAgICAgIDppdGVtcz1cImludm9pY2VzXCIgXG4gICAgICAgICAgICAgIG11bHRpcGxlIFxuICAgICAgICAgICAgICBkZWxldGFibGUtY2hpcHNcbiAgICAgICAgICAgICAgZGlzYWJsZWRcbiAgICAgICAgICAgID48L3Ytc2VsZWN0PlxuICAgICAgICAgICAgPCEtLSBTZWNjacOzbiBkZSByYW5nb3MgZGUgZmVjaGFzIC0tPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPHYtcm93IGNsYXNzPVwiY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICA8di1jb2wgY29scz1cImF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8di1zd2l0Y2ggXG4gICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiaGFzRGF0ZVJhbmdlc1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICA+PC92LXN3aXRjaD5cbiAgICAgICAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgICAgICAgICA8di1jb2w+XG4gICAgICAgICAgICAgICAgICAgICAgPE1vcmVJbmZvIHRpdGxlPVwiUmFuZ29zIGRlIGZhY3R1cmFzIHBvciBmZWNoYXMuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbW1lclJlZj1cInJhbmdlLXBlci1kYXRlLXZpZXdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0b3I9XCJwYXJlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8L01vcmVJbmZvPlxuICAgICAgICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgICAgPC92LXJvdz5cbiAgICAgICAgICAgICAgPHYtY29udGFpbmVyIHYtaWY9XCJoYXNEYXRlUmFuZ2VzXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjZW50ZXIgcHgtMyBweS01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPlJhbmdvIGRlIGZlY2hhcyAoRGVzZGUgLSBIYXN0YSk8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9XCIocmFuZ2UsIGluZGV4KSBpbiBnZXREaXNwbGF5RGF0ZVJhbmdlc1wiIDprZXk9XCJpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtY29sIGNsYXNzPVwidy0xMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1yb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWRhdGUtaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bW9kZWwtdmFsdWU9XCJyYW5nZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJSYW5nbyAoSW5pY2lvIC0gRmluKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGU9XCJyYW5nZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZC1pY29uPVwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kLWlubmVyLWljb249XCJtZGktY2FsZW5kYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlLWRldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3YtZGF0ZS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Ytcm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWRpdmlkZXIgdi1pZj1cImluZGV4IDwgZ2V0RGlzcGxheURhdGVSYW5nZXMubGVuZ3RoIC0gMVwiIGNsYXNzPVwibXktNFwiPjwvdi1kaXZpZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L3YtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktMyBjZW50ZXIgZC1mbGV4IGp1c3RpZnktY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgIDx2LWJ0biBcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtd2hpdGVcIiBcbiAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNob3dUYXJnZXREZXRhaWxzT3ZlcmxheSA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIENlcnJhclxuICAgICAgICAgICAgICA8L3YtYnRuPlxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3YtZm9ybT5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgIDwvT3ZlcmxheT5cbiAgICAgIDxNb3JlSW5mbyB0aXRsZT1cIk9yZGVuIGRlIHByaW9yaWRhZFwiXG4gICAgICAgIGFjdGl2YXRvcj1cInBhcmVudFwiIHByb2dyYW1tZXJSZWY9XCJwcmlvcml0eS1vcmRlclwiPlxuICAgICAgPC9Nb3JlSW5mbz5cbiAgICAgIDxQcmlvcml0eVJ1bGVzIHYtbW9kZWw9XCJlbnRpdHlcIiA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiIC8+XG4gICAgICA8TW9yZUluZm8gdGl0bGU9XCLCv1F1w6kgaGFjZW1vcz9cIlxuICAgICAgICBhY3RpdmF0b3I9XCJwYXJlbnRcIiBwcm9ncmFtbWVyUmVmPVwibW9uZXRhcnktbGltaXRzXCI+XG4gICAgICA8L01vcmVJbmZvPlxuICAgIDwvZGl2PlxuICA8L3YtZm9ybT5cbjwvdGVtcGxhdGU+XG48c2NyaXB0PlxuaW1wb3J0IHsgY29tcHV0ZWQsIHJlZiwgdG9SZWZzIH0gZnJvbSAndnVlJztcbmltcG9ydCBTd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcbmltcG9ydCB7IHVzZVRhcmdldFN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL3RhcmdldCc7XG5pbXBvcnQgeyB1c2VQcm92aWRlclN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL3Byb3ZpZGVyLmpzJztcbmltcG9ydCB7IHVzZUNhdGVnb3J5U3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvY2F0ZWdvcnkuanMnO1xuaW1wb3J0IHsgdXNlSW52b2ljZUNsaWVudFN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL2ludm9pY2VDbGllbnQuanMnO1xuaW1wb3J0IE1vcmVJbmZvIGZyb20gJy4vTW9yZUluZm8udnVlJztcbmltcG9ydCBPdmVybGF5IGZyb20gJy4vT3ZlcmxheS52dWUnO1xuaW1wb3J0IENyZWF0ZVByb3ZpZGVyIGZyb20gXCIuL0NyZWF0ZVByb3ZpZGVyLnZ1ZVwiO1xuaW1wb3J0IENyZWF0ZU5ld1RhcmdldCBmcm9tIFwiLi9DcmVhdGVOZXdUYXJnZXQudnVlXCI7XG5pbXBvcnQgUHJpb3JpdHlSdWxlcyBmcm9tICcuL1ByaW9yaXR5UnVsZXNPcmRlcmluZ0NvbXBvbmVudC52dWUnO1xuaW1wb3J0IHsgVkRhdGVJbnB1dCB9IGZyb20gJ3Z1ZXRpZnkvbGliL2xhYnMvY29tcG9uZW50cy5tanMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdTaGFyZUNvbXBvbmVudFJ1bGVzJyxcbiAgY29tcG9uZW50czoge1xuICAgIE1vcmVJbmZvLFxuICAgIE92ZXJsYXksXG4gICAgQ3JlYXRlUHJvdmlkZXIsXG4gICAgQ3JlYXRlTmV3VGFyZ2V0LFxuICAgIFByaW9yaXR5UnVsZXMsXG4gICAgVkRhdGVJbnB1dFxuICB9LFxuICBwcm9wczoge1xuICAgIHJ1bGVUeXBlOiB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBlbnRpdHk6IHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIGRpc2FibGVkOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZSddLFxuICBzZXR1cChwcm9wcywgY29udGV4dCkge1xuICAgIGNvbnN0IHsgZW50aXR5IH0gPSB0b1JlZnMocHJvcHMpO1xuICAgIGNvbnN0IHRhcmdldFN0b3JlID0gdXNlVGFyZ2V0U3RvcmUoKTtcbiAgICBjb25zdCBwcm92aWRlclN0b3JlID0gdXNlUHJvdmlkZXJTdG9yZSgpO1xuICAgIGNvbnN0IGNhdGVnb3J5U3RvcmUgPSB1c2VDYXRlZ29yeVN0b3JlKCk7XG4gICAgY29uc3QgaW52b2ljZVN0b3JlID0gdXNlSW52b2ljZUNsaWVudFN0b3JlKCk7XG4gICAgXG4gICAgLy8gTGlzdGEgZGUgdGFyZ2V0cyBkaXNwb25pYmxlc1xuICAgIGNvbnN0IHRhcmdldExpc3QgPSBjb21wdXRlZCgoKSA9PiB0YXJnZXRTdG9yZS5nZXRUYXJnZXRzKTtcbiAgICBjb25zdCBwcm92aWRlcnMgPSBjb21wdXRlZCgoKSA9PiBwcm92aWRlclN0b3JlLmdldFByb3ZpZGVycyk7XG4gICAgY29uc3QgZ3JvdXBzID0gY29tcHV0ZWQoKCkgPT4gY2F0ZWdvcnlTdG9yZS5nZXRDYXRlZ29yaWVzKTtcbiAgICBjb25zdCBpbnZvaWNlcyA9IGNvbXB1dGVkKCgpID0+IGludm9pY2VTdG9yZS5nZXRJbnZvaWNlcyk7XG4gICAgXG4gICAgLy8gRXN0YWRvIHBhcmEgZWwgb3ZlcmxheSBkZSBkZXRhbGxlc1xuICAgIGNvbnN0IHNob3dUYXJnZXREZXRhaWxzT3ZlcmxheSA9IHJlZihmYWxzZSk7XG4gICAgY29uc3Qgc2VsZWN0ZWRUYXJnZXQgPSByZWYoe30pO1xuICAgIFxuICAgIC8vIENvbXB1dGVkIHBhcmEgdmVyaWZpY2FyIHNpIGhheSByYW5nb3MgZGUgZmVjaGFzXG4gICAgY29uc3QgaGFzRGF0ZVJhbmdlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIHJldHVybiBzZWxlY3RlZFRhcmdldC52YWx1ZT8uaGFzRGF0ZVJhbmdlcyB8fCBmYWxzZTtcbiAgICB9KTtcbiAgICBcbiAgICAvLyBDb21wdXRlZCBwYXJhIGNvbnZlcnRpciBkYXRlUmFuZ2VzIGRlbCBiYWNrZW5kIGFsIGZvcm1hdG8gZGUgdi1kYXRlLWlucHV0XG4gICAgY29uc3QgZ2V0RGlzcGxheURhdGVSYW5nZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICBpZiAoIXNlbGVjdGVkVGFyZ2V0LnZhbHVlPy5kYXRlUmFuZ2VzIHx8IHNlbGVjdGVkVGFyZ2V0LnZhbHVlLmRhdGVSYW5nZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIHNlbGVjdGVkVGFyZ2V0LnZhbHVlLmRhdGVSYW5nZXMubWFwKHJhbmdlID0+IHtcbiAgICAgICAgY29uc3QgZGF0ZXMgPSBbXTtcbiAgICAgICAgaWYgKHJhbmdlLnN0YXJ0RGF0ZSkge1xuICAgICAgICAgIGRhdGVzLnB1c2gobmV3IERhdGUocmFuZ2Uuc3RhcnREYXRlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJhbmdlLmZpbmlzaERhdGUpIHtcbiAgICAgICAgICBkYXRlcy5wdXNoKG5ldyBEYXRlKHJhbmdlLmZpbmlzaERhdGUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0ZXM7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBcbiAgICAvLyBDYXJnYXIgZGF0b3MgYWwgbW9udGFyIGVsIGNvbXBvbmVudGVcbiAgICB0YXJnZXRTdG9yZS5mZXRjaEFsbCgpO1xuICAgIHByb3ZpZGVyU3RvcmUuZmV0Y2hBbGwoKTtcbiAgICBjYXRlZ29yeVN0b3JlLmZldGNoQWxsKCk7XG4gICAgaW52b2ljZVN0b3JlLmZldGNoQWxsKCk7XG4gICAgXG4gICAgY29uc3Qgb25UYXJnZXRTYXZlZCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRhcmdldFN0b3JlLmZldGNoQWxsKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHZpZXdUYXJnZXQgPSAodGFyZ2V0KSA9PiB7XG4gICAgICBzZWxlY3RlZFRhcmdldC52YWx1ZSA9IHtcbiAgICAgICAgLi4udGFyZ2V0LFxuICAgICAgICBpbnZvaWNlczogdGFyZ2V0Lmludm9pY2VzIHx8IFtdLFxuICAgICAgICBwcm92aWRlcnM6IHRhcmdldC5wcm92aWRlcnMgfHwgW10sXG4gICAgICAgIGNhdGVnb3JpZXM6IHRhcmdldC5jYXRlZ29yaWVzIHx8IFtdLFxuICAgICAgICBvbmx5SW5jbHVkZUludm9pY2VzRnJvbVRvZGF5OiAhIXRhcmdldC5vbmx5SW5jbHVkZUludm9pY2VzRnJvbVRvZGF5LFxuICAgICAgICAvLyBDb252ZXJ0aXIgcmFuZ29zIGRlbCBiYWNrZW5kIOKGkiBmb3JtYXRvIHF1ZSBuZWNlc2l0YSB2LWRhdGUtaW5wdXRcbiAgICAgICAgZGF0ZVJhbmdlczogdGFyZ2V0LmRhdGVSYW5nZXMgfHwgW11cbiAgICAgIH07XG4gICAgICBzaG93VGFyZ2V0RGV0YWlsc092ZXJsYXkudmFsdWUgPSB0cnVlO1xuICAgIH07XG5cbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgZW50aXR5LFxuICAgICAgdGFyZ2V0TGlzdCxcbiAgICAgIHByb3ZpZGVycyxcbiAgICAgIGdyb3VwcyxcbiAgICAgIGludm9pY2VzLFxuICAgICAgb25UYXJnZXRTYXZlZCxcbiAgICAgIHNob3dUYXJnZXREZXRhaWxzT3ZlcmxheSxcbiAgICAgIHNlbGVjdGVkVGFyZ2V0LFxuICAgICAgdmlld1RhcmdldCxcbiAgICAgIGhhc0RhdGVSYW5nZXMsXG4gICAgICBnZXREaXNwbGF5RGF0ZVJhbmdlcyxcblxuICAgIH07XG4gIH0sXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGVsOiBudWxsLFxuICAgICAgc2VsZWN0ZWRDb3VudHJ5OiBcIlwiLFxuICAgICAgQ29tcGFueVBvc2l0aW9uOiBbXG4gICAgICAgIFwiQWRtaW5pc3RyYWRvclwiLFxuICAgICAgICBcIkFwb2RlcmFkb1wiLFxuICAgICAgICBcIkRpcmVjdG9yXCIsXG4gICAgICAgIFwiR2VyZW50ZVwiLFxuICAgICAgICBcIlRyYWJhamFkb3JcIixcbiAgICAgICAgXCJUcmFiYWphZG9yIFRlY25pY29cIixcbiAgICAgICAgXCJPdHJvXCIsXG4gICAgICBdLFxuICAgICAgcGVyc29uVHlwZXM6IFtcIlBlcnNvbmEgRsOtc2ljYVwiLCBcIlBlcnNvbmEgSnVyw61kaWNhXCJdLFxuICAgICAgdGFyZ2V0czogW1widGFyZ2V0IDFcIiwgXCJ0YXJnZXQgMlwiLCBcInRhcmdldCAzXCJdLFxuICAgIH07XG4gIH0sXG59O1xuPC9zY3JpcHQ+XG48c3R5bGU+XG4ubnVtZXJpYy1pbnB1dCB7XG4gIHdpZHRoOiAxMHZ3O1xufVxuPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG4gICAgPGRpdiB2LWlmPVwiY29udGVudE9ubHlcIj5cbiAgICAgICAgPHYtZm9ybSBmYXN0LWZhaWwgQHN1Ym1pdC5wcmV2ZW50PVwiaGFuZGxlU3VibWl0XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZWFibGVcIj5cbiAgICAgICAgICAgICAgICA8IS0tIENvbXBvbmVudGUgY29tcGFydGlkbyBwYXJhIHRvZGFzIGxhcyByZWdsYXMgLS0+XG4gICAgICAgICAgICAgICAgPFNoYXJlQ29tcG9uZW50UnVsZXMgOmVudGl0eT1cImVudGl0eVwiIDpydWxlLXR5cGU9XCJQYXltZW50TWV0aG9kc1J1bGVJbXBsXCIgOmRpc2FibGVkPVwiZGlzYWJsZWRcIj48L1NoYXJlQ29tcG9uZW50UnVsZXM+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNlwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIFNlY2Npw7NuIGRlIGN1ZW50YSBiYW5jYXJpYSAtLT5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIFNlbGVjdG9yIGRlIGN1ZW50YSBiYW5jYXJpYSBleGlzdGVudGUgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZW50ZXIganVzdGlmeS1zcGFjZS1iZXR3ZWVuXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LXNlbGVjdCB2LW1vZGVsPVwiZW50aXR5LmJhbmtBY2NvdW50XCIgOml0ZW1zPVwiYXZhaWxhYmxlQmFua0FjY291bnRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXRpdGxlPVwiYWNjb3VudFJlZmVyZW5jZU5hbWVcIiBpdGVtLXZhbHVlPVwiQGlkXCIgbGFiZWw9XCJTZWxlY2Npb25hciBjdWVudGEgYmFuY2FyaWFcIiB2YXJpYW50PVwib3V0bGluZWRcIiBjbGFzcz1cIm1iLTRcIiA6cnVsZXM9XCJiYW5rQWNjb3VudFJ1bGVzXCIgcmVxdWlyZWQgaGlkZS1kZXRhaWxzIDpkaXNhYmxlZD1cImRpc2FibGVkXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1zbG90Oml0ZW09XCJ7IHByb3BzLCBpdGVtIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtbGlzdC1pdGVtIHYtYmluZD1cInByb3BzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1zbG90OnRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ucmF3LmFjY291bnRSZWZlcmVuY2VOYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDpzdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnJhdy5pYmFuTnVtYmVyIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3YtbGlzdC1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Ytc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3YtZm9ybT5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIEJPVE9OIFJFR0xBUyBERSBGT1JNQVMgREUgUEFHTyAtLT5cbiAgICA8di1idG4gdi1lbHNlIGNsYXNzPVwib3B0aW9uLWJ1dHRvbiBteS0xXCI+Rm9ybWFzIGRlIHBhZ29cbiAgICAgICAgPE92ZXJsYXkgdi1tb2RlbD1cInNob3dNb2RhbFwiIHRpdGxlPVwiQcOxYWRpciByZWdsYSBkZSBmb3JtYXMgZGUgcGFnby5cIiBhY3RpdmF0b3I9XCJwYXJlbnRcIlxuICAgICAgICAgICAgcHJvZ3JhbW1lclJlZj1cInBheW1lbnQtbWV0aG9kc1wiIDpzY3JpbT1cImZhbHNlXCI+XG4gICAgICAgICAgICA8dGVtcGxhdGUgI2RlZmF1bHQ+XG4gICAgICAgICAgICAgICAgPHYtZm9ybSBmYXN0LWZhaWwgQHN1Ym1pdC5wcmV2ZW50PVwiaGFuZGxlU3VibWl0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlYWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDb21wb25lbnRlIGNvbXBhcnRpZG8gcGFyYSB0b2RhcyBsYXMgcmVnbGFzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNoYXJlQ29tcG9uZW50UnVsZXMgOmVudGl0eT1cImVudGl0eVwiIDpydWxlLXR5cGU9XCJQYXltZW50TWV0aG9kc1J1bGVJbXBsXCI+PC9TaGFyZUNvbXBvbmVudFJ1bGVzPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VjY2nDs24gZGUgY3VlbnRhIGJhbmNhcmlhIC0tPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWxlY3RvciBkZSBjdWVudGEgYmFuY2FyaWEgZXhpc3RlbnRlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZW50ZXIganVzdGlmeS1zcGFjZS1iZXR3ZWVuXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtc2VsZWN0IHYtbW9kZWw9XCJlbnRpdHkuYmFua0FjY291bnRcIiA6aXRlbXM9XCJhdmFpbGFibGVCYW5rQWNjb3VudHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS10aXRsZT1cImFjY291bnRSZWZlcmVuY2VOYW1lXCIgaXRlbS12YWx1ZT1cIkBpZFwiIGxhYmVsPVwiU2VsZWNjaW9uYXIgY3VlbnRhIGJhbmNhcmlhXCIgdmFyaWFudD1cIm91dGxpbmVkXCIgY2xhc3M9XCJtYi00XCIgOnJ1bGVzPVwiYmFua0FjY291bnRSdWxlc1wiIHJlcXVpcmVkIGhpZGUtZGV0YWlscz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDppdGVtPVwieyBwcm9wcywgaXRlbSB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtbGlzdC1pdGVtIHYtYmluZD1cInByb3BzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LXNsb3Q6dGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnJhdy5hY2NvdW50UmVmZXJlbmNlTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1zbG90OnN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5yYXcuaWJhbk51bWJlciB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1saXN0LWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Ytc2VsZWN0PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWJ0biBpY29uIGNsYXNzPVwidGV4dC13aGl0ZSBwbHVzLWJ0blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtaWNvbj5tZGktcGx1czwvdi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE92ZXJsYXkgdGl0bGU9XCJDcmVhciBjdWVudGEgYmFuY2FyaWFcIiBhY3RpdmF0b3I9XCJwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW1tZXJSZWY9XCJiYW5rLWFjY291bnQtcnVsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cInNob3dDcmVhdGVBY2NvdW50XCIgOnNjcmltPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI2RlZmF1bHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0g4pyFIEFHUkVHQVI6IEVzY3VjaGFyIGVsIGV2ZW50byAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENyZWF0ZUJhbmtBY2NvdW50IEBiYW5rQWNjb3VudENyZWF0ZWQ9XCJoYW5kbGVCYW5rQWNjb3VudENyZWF0ZWRcIj48L0NyZWF0ZUJhbmtBY2NvdW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L092ZXJsYXk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1idG4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTMgY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8di1idG4gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwidGV4dC13aGl0ZSBhZGQtdGVtcGxhdGVzLWJ1dHRvblwiIDpkaXNhYmxlZD1cIiFpc0Zvcm1WYWxpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGV4aXN0aW5nUnVsZSA/ICdBY3R1YWxpemFyJyA6ICdBw7FhZGlyJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC92LWJ0bj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC92LWZvcm0+XG4gICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8L092ZXJsYXk+XG4gICAgPC92LWJ0bj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBQYXltZW50TWV0aG9kc1J1bGVJbXBsIH0gZnJvbSAnLi4vc2VydmljZXMvdHlwZXMvaW1wbGVtZW50YXRpb25zJztcbmltcG9ydCB7IHVzZUVudGl0eSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbXBvc2FibGVzL3VzZUVudGl0eSc7XG5pbXBvcnQgT3ZlcmxheSBmcm9tIFwiLi4vY29tcG9uZW50cy9PdmVybGF5LnZ1ZVwiO1xuaW1wb3J0IFNoYXJlQ29tcG9uZW50UnVsZXMgZnJvbSBcIi4uL2NvbXBvbmVudHMvU2hhcmVDb21wb25lbnRSdWxlcy52dWVcIjtcbmltcG9ydCBDcmVhdGVCYW5rQWNjb3VudCBmcm9tIFwiLi4vY29tcG9uZW50cy9DcmVhdGVCYW5rQWNjb3VudC52dWVcIjtcbmltcG9ydCB7IFBheW1lbnRNZXRob2RzUnVsZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9pbXBsZW1lbnRhdGlvbnMvcnVsZXMvc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlUnVsZXNTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9ydWxlcy5qcyc7XG5pbXBvcnQgeyB1c2VCYW5rQWNjb3VudFN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL2JhbmtBY2NvdW50LmpzJztcbmltcG9ydCB7IGNvbXB1dGVkLCByZWYsIHRvUmVmcywgb25Nb3VudGVkLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiAnUGF5bWVudE1ldGhvZHNSdWxlQ29tcG9uZW50JyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIFNoYXJlQ29tcG9uZW50UnVsZXMsXG4gICAgICAgIE92ZXJsYXksXG4gICAgICAgIENyZWF0ZUJhbmtBY2NvdW50XG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgICBleGlzdGluZ1J1bGU6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRlbnRPbmx5OiB7XG4gICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgZGlzYWJsZWQ6IHtcbiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgICB9XG4gICAgfSxcbiAgICBzZXR1cChwcm9wcykge1xuICAgICAgICBjb25zdCB7IGV4aXN0aW5nUnVsZSB9ID0gdG9SZWZzKHByb3BzKTtcbiAgICAgICAgY29uc3QgYmFua0FjY291bnRTdG9yZSA9IHVzZUJhbmtBY2NvdW50U3RvcmUoKTtcblxuICAgICAgICBjb25zdCB7IGVudGl0eSwgbG9hZEVudGl0eSB9ID0gdXNlRW50aXR5KFBheW1lbnRNZXRob2RzUnVsZUltcGwsIHVzZVJ1bGVzU3RvcmUoKSk7XG4gICAgICAgIGNvbnN0IHNob3dDcmVhdGVBY2NvdW50ID0gcmVmKGZhbHNlKTtcblxuICAgICAgICAvLyBDb250cm9sIHZpc2liaWxpdHkgb2YgdGhlIG1vZGFsXG4gICAgICAgIGNvbnN0IHNob3dNb2RhbCA9IHJlZihmYWxzZSk7XG5cbiAgICAgICAgd2F0Y2goZXhpc3RpbmdSdWxlLCAobmV3VmFsKSA9PiB7XG4gICAgICAgICAgICBpZiAobmV3VmFsKSB7XG4gICAgICAgICAgICAgICAgbG9hZEVudGl0eShuZXdWYWwpO1xuICAgICAgICAgICAgICAgIHNob3dNb2RhbC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHsgaW1tZWRpYXRlOiB0cnVlIH0pO1xuXG4gICAgICAgIC8vIENvbXB1dGVkIHBhcmEgbGFzIGN1ZW50YXMgYmFuY2FyaWFzIGRpc3BvbmlibGVzXG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZUJhbmtBY2NvdW50cyA9IGNvbXB1dGVkKCgpID0+IGJhbmtBY2NvdW50U3RvcmUuZ2V0QmFua0FjY291bnRzKTtcblxuICAgICAgICAvLyBDb21wdXRlZCBwYXJhIHZhbGlkYXIgZWwgZm9ybXVsYXJpb1xuICAgICAgICBjb25zdCBpc0Zvcm1WYWxpZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBlbnRpdHkudmFsdWUuYmFua0FjY291bnQgIT0gbnVsbDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gTGlzdGEgZGUgYmFuY29zIGRpc3BvbmlibGVzXG4gICAgICAgIGNvbnN0IGJhbmtOYW1lcyA9IFtcbiAgICAgICAgICAgICdCQlZBJyxcbiAgICAgICAgICAgICdTYW50YW5kZXInLFxuICAgICAgICAgICAgJ0NhaXhhQmFuaycsXG4gICAgICAgICAgICAnQmFua2lhJyxcbiAgICAgICAgICAgICdTYWJhZGVsbCcsXG4gICAgICAgICAgICAnVW5pY2FqYScsXG4gICAgICAgICAgICAnS3V0eGFiYW5rJyxcbiAgICAgICAgICAgICdJYmVyY2FqYScsXG4gICAgICAgICAgICAnT3RybydcbiAgICAgICAgXTtcblxuICAgICAgICAvLyBSZWdsYXMgZGUgdmFsaWRhY2nDs25cbiAgICAgICAgY29uc3QgYmFua0FjY291bnRSdWxlcyA9IFtcbiAgICAgICAgICAgIHYgPT4gISF2IHx8ICdMYSBjdWVudGEgYmFuY2FyaWEgZXMgcmVxdWVyaWRhJ1xuICAgICAgICBdO1xuXG4gICAgICAgIG9uTW91bnRlZCgoKSA9PiB7XG4gICAgICAgICAgICAvLyBDYXJnYXIgY3VlbnRhcyBiYW5jYXJpYXMgYWwgbW9udGFyIGVsIGNvbXBvbmVudGVcbiAgICAgICAgICAgIGJhbmtBY2NvdW50U3RvcmUuZmV0Y2hBbGwoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgIFBheW1lbnRNZXRob2RzUnVsZUltcGwsXG4gICAgICAgICAgICBzaG93TW9kYWwsXG4gICAgICAgICAgICBzaG93Q3JlYXRlQWNjb3VudCxcbiAgICAgICAgICAgIGF2YWlsYWJsZUJhbmtBY2NvdW50cyxcbiAgICAgICAgICAgIGlzRm9ybVZhbGlkLFxuICAgICAgICAgICAgYmFua05hbWVzLFxuICAgICAgICAgICAgYmFua0FjY291bnRSdWxlcyxcbiAgICAgICAgICAgIGJhbmtBY2NvdW50U3RvcmUgLy8g4pyFIEFHUkVHQVI6IFJldG9ybmFyIGVsIHN0b3JlXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIC8vIOKchSBOVUVWTzogTcOpdG9kbyBwYXJhIG1hbmVqYXIgbGEgY3JlYWNpw7NuIGRlIGN1ZW50YSBiYW5jYXJpYVxuICAgICAgICBhc3luYyBoYW5kbGVCYW5rQWNjb3VudENyZWF0ZWQoKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygn4pyFIE51ZXZhIGN1ZW50YSBiYW5jYXJpYSBjcmVhZGEgLSByZWZyZXNjYW5kbyBsaXN0YSB5IGNlcnJhbmRvIG92ZXJsYXkuLi4nKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gUmVmcmVzY2FyIGxhIGxpc3RhIGRlIGN1ZW50YXMgYmFuY2FyaWFzXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmJhbmtBY2NvdW50U3RvcmUuZmV0Y2hBbGwoKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gQ2VycmFyIGVsIG92ZXJsYXlcbiAgICAgICAgICAgIHRoaXMuc2hvd0NyZWF0ZUFjY291bnQgPSBmYWxzZTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gT3BjaW9uYWw6IE1vc3RyYXIgbWVuc2FqZSBkZSDDqXhpdG9cbiAgICAgICAgICAgIHRoaXMudG9hc3Q/LnN1Y2Nlc3MoJ0N1ZW50YSBiYW5jYXJpYSBjcmVhZGEgY29ycmVjdGFtZW50ZScpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIGhhbmRsZVN1Ym1pdCgpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSBuZXcgUGF5bWVudE1ldGhvZHNSdWxlU2VydmljZSh0aGlzLmVudGl0eSk7XG4gICAgICAgICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgdGhpcy5jcmVhdGVHZW5lcmljKHNlcnZpY2UpO1xuICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dNb2RhbCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH1cbn07XG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cbi5wbHVzLWJ0biB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzg3YmQ3ODtcbn1cblxuLmFkZC10ZW1wbGF0ZXMtYnV0dG9uIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjODdiZDc4O1xuICAgIG1hcmdpbi10b3A6IDE2cHg7XG59XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwicnVsZXMtbGlzdFwiPlxuICAgICAgICA8di1saXN0IHYtaWY9XCJhbGxSdWxlcy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8di1saXN0LWl0ZW0gdi1mb3I9XCIocnVsZSwgaW5kZXgpIGluIGFsbFJ1bGVzXCIgOmtleT1cImluZGV4XCI+XG4gICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDpwcmVwZW5kPlxuICAgICAgICAgICAgICAgICAgICA8di1pY29uIGNvbG9yPVwicHJpbWFyeVwiPm1kaS1nYXZlbDwvdi1pY29uPlxuICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPHYtbGlzdC1pdGVtLXRpdGxlPnt7IGdldFJ1bGVOYW1lKHJ1bGUpIH19PC92LWxpc3QtaXRlbS10aXRsZT5cbiAgICAgICAgICAgICAgICA8di1saXN0LWl0ZW0tc3VidGl0bGU+e3sgZ2V0UnVsZVR5cGVMYWJlbChydWxlKSB9fTwvdi1saXN0LWl0ZW0tc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDphcHBlbmQ+XG4gICAgICAgICAgICAgICAgICAgIDx2LWJ0biBpY29uIGNvbG9yPVwicHJpbWFyeVwiIHZhcmlhbnQ9XCJ0ZXh0XCIgQGNsaWNrPVwib3BlblJ1bGUocnVsZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LWljb24+bWRpLWV5ZTwvdi1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L3YtYnRuPlxuICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3YtbGlzdC1pdGVtPlxuICAgICAgICA8L3YtbGlzdD5cbiAgICAgICAgXG4gICAgICAgIDxkaXYgdi1lbHNlIGNsYXNzPVwidGV4dC1jZW50ZXIgcGEtNFwiPlxuICAgICAgICAgICAgPHYtaWNvbiBzaXplPVwibGFyZ2VcIiBjb2xvcj1cImdyZXlcIj5tZGktZmlsZS1kb2N1bWVudC1vdXRsaW5lPC92LWljb24+XG4gICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtZ3JleSBtdC0yXCI+Tm8gaGF5IHJlZ2xhcyBhc29jaWFkYXMgYSBlc3RhIGZhY3R1cmE8L3A+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gT3ZlcmxheSBmb3Igc3BlY2lmaWMgcnVsZSAtLT5cbiAgICAgICAgPCEtLSBPdmVybGF5IGZvciBzcGVjaWZpYyBydWxlIC0tPlxuICAgICAgICA8ZGl2IHYtaWY9XCJzZWxlY3RlZFJ1bGVcIj5cbiAgICAgICAgICAgIDxPdmVybGF5IHYtbW9kZWw9XCJzaG93UnVsZU1vZGFsXCIgdGl0bGU9XCJEZXRhbGxlIGRlIGxhIFJlZ2xhXCJcbiAgICAgICAgICAgICAgICBwcm9ncmFtbWVyUmVmPVwicnVsZS1kZXRhaWxcIlxuICAgICAgICAgICAgICAgIDpzY3JpbT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI2RlZmF1bHQ+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYS00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29tcG9uZW50IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtaWY9XCJzZWxlY3RlZFJ1bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDppcz1cImdldENvbXBvbmVudChzZWxlY3RlZFJ1bGUpXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmV4aXN0aW5nUnVsZT1cInNlbGVjdGVkUnVsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNvbnRlbnRPbmx5PVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmRpc2FibGVkPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmtleT1cInNlbGVjdGVkUnVsZS5pZCB8fCBzZWxlY3RlZFJ1bGVbJ0BpZCddIHx8IEpTT04uc3RyaW5naWZ5KHNlbGVjdGVkUnVsZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvY29tcG9uZW50PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgPC9PdmVybGF5PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRWxlZ2liaWxpdHlSdWxlQ29tcG9uZW50IGZyb20gJy4vRWxlZ2liaWxpdHlSdWxlQ29tcG9uZW50LnZ1ZSc7XG5pbXBvcnQgRXhwaXJhdGlvbkRhdGVSdWxlQ29tcG9uZW50IGZyb20gJy4vRXhwaXJhdGlvbkRhdGVSdWxlQ29tcG9uZW50LnZ1ZSc7XG5pbXBvcnQgTGltaXRzUnVsZUNvbXBvbmVudCBmcm9tICcuL0xpbWl0c1J1bGVDb21wb25lbnQudnVlJztcbmltcG9ydCBEaXNjb3VudFJ1bGVDb21wb25lbnQgZnJvbSAnLi9EaXNjb3VudFJ1bGVDb21wb25lbnQudnVlJztcbmltcG9ydCBQYXltZW50TWV0aG9kc1J1bGVDb21wb25lbnQgZnJvbSAnLi9QYXltZW50TWV0aG9kc1J1bGVDb21wb25lbnQudnVlJztcbmltcG9ydCBPdmVybGF5IGZyb20gJy4vT3ZlcmxheS52dWUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ0ludm9pY2VSdWxlc092ZXJsYXknLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgRWxlZ2liaWxpdHlSdWxlQ29tcG9uZW50LFxuICAgICAgICBFeHBpcmF0aW9uRGF0ZVJ1bGVDb21wb25lbnQsXG4gICAgICAgIExpbWl0c1J1bGVDb21wb25lbnQsXG4gICAgICAgIERpc2NvdW50UnVsZUNvbXBvbmVudCxcbiAgICAgICAgUGF5bWVudE1ldGhvZHNSdWxlQ29tcG9uZW50LFxuICAgICAgICBPdmVybGF5XG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgICBpbnZvaWNlOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9XG4gICAgfSxcbiAgICBkYXRhKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2hvd1J1bGVNb2RhbDogZmFsc2UsXG4gICAgICAgICAgICBzZWxlY3RlZFJ1bGU6IG51bGxcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIGNvbXB1dGVkOiB7XG4gICAgICAgIGFsbFJ1bGVzKCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmludm9pY2UpIHJldHVybiBbXTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgcnVsZXMgPSBbXTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gSGVscGVyIHRvIGFkZCBydWxlcyB3aXRoIHR5cGVcbiAgICAgICAgICAgIGNvbnN0IGFkZFJ1bGVzID0gKGNvbGxlY3Rpb24sIHR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29sbGVjdGlvbiAmJiBBcnJheS5pc0FycmF5KGNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24uZm9yRWFjaChydWxlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSBydWxlIGhhcyB0eXBlIHByb3BlcnR5IGlmIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcnVsZS5ydWxlVHlwZSkgcnVsZS5ydWxlVHlwZSA9IHR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBydWxlcy5wdXNoKHJ1bGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBhZGRSdWxlcyh0aGlzLmludm9pY2UuZWxlZ2liaWxpdHlSdWxlcywgJ0VsZWdpYmlsaXR5UnVsZScpO1xuICAgICAgICAgICAgYWRkUnVsZXModGhpcy5pbnZvaWNlLmV4cGlyYXRpb25EYXRlc1J1bGVzLCAnRXhwaXJhdGlvbkRhdGVzUnVsZScpO1xuICAgICAgICAgICAgYWRkUnVsZXModGhpcy5pbnZvaWNlLmxpbWl0c1J1bGVzLCAnTGltaXRzUnVsZScpO1xuICAgICAgICAgICAgYWRkUnVsZXModGhpcy5pbnZvaWNlLmRpc2NvdW50R3JvdXBzUnVsZXMsICdEaXNjb3VudEdyb3Vwc1J1bGUnKTtcbiAgICAgICAgICAgIGFkZFJ1bGVzKHRoaXMuaW52b2ljZS5wYXltZW50TWV0aG9kc1J1bGVzLCAnUGF5bWVudE1ldGhvZHNSdWxlJyk7XG5cbiAgICAgICAgICAgIHJldHVybiBydWxlcztcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgICBnZXRSdWxlTmFtZShydWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gcnVsZS5ydWxlTmFtZSB8fCBydWxlLmRlc2NyaXB0aW9uIHx8ICdSZWdsYSBzaW4gbm9tYnJlJztcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0UnVsZVR5cGVMYWJlbChydWxlKSB7XG4gICAgICAgICAgICBjb25zdCB0eXBlcyA9IHtcbiAgICAgICAgICAgICAgICAnRWxlZ2liaWxpdHlSdWxlJzogJ1JlZ2xhIGRlIEVsZWdpYmlsaWRhZCcsXG4gICAgICAgICAgICAgICAgJ0V4cGlyYXRpb25EYXRlc1J1bGUnOiAnUmVnbGEgZGUgVmVuY2ltaWVudG8nLFxuICAgICAgICAgICAgICAgICdMaW1pdHNSdWxlJzogJ1JlZ2xhIGRlIEzDrW1pdGVzJyxcbiAgICAgICAgICAgICAgICAnRGlzY291bnRHcm91cHNSdWxlJzogJ1JlZ2xhIGRlIERlc2N1ZW50b3MnLFxuICAgICAgICAgICAgICAgICdQYXltZW50TWV0aG9kc1J1bGUnOiAnUmVnbGEgZGUgRm9ybWFzIGRlIFBhZ28nXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVzW3J1bGUucnVsZVR5cGVdIHx8IHJ1bGUucnVsZVR5cGU7XG4gICAgICAgIH0sXG4gICAgICAgIGdldENvbXBvbmVudChydWxlKSB7XG4gICAgICAgICAgICBpZiAoIXJ1bGUpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCB0eXBlTWFwID0ge1xuICAgICAgICAgICAgICAgICdFbGVnaWJpbGl0eVJ1bGUnOiAnRWxlZ2liaWxpdHlSdWxlQ29tcG9uZW50JyxcbiAgICAgICAgICAgICAgICAnRXhwaXJhdGlvbkRhdGVzUnVsZSc6ICdFeHBpcmF0aW9uRGF0ZVJ1bGVDb21wb25lbnQnLFxuICAgICAgICAgICAgICAgICdMaW1pdHNSdWxlJzogJ0xpbWl0c1J1bGVDb21wb25lbnQnLFxuICAgICAgICAgICAgICAgICdEaXNjb3VudEdyb3Vwc1J1bGUnOiAnRGlzY291bnRSdWxlQ29tcG9uZW50JyxcbiAgICAgICAgICAgICAgICAnUGF5bWVudE1ldGhvZHNSdWxlJzogJ1BheW1lbnRNZXRob2RzUnVsZUNvbXBvbmVudCdcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEFsc28gaGFuZGxlIGlmIHJ1bGVUeXBlIGNvbWVzIGZyb20gYmFja2VuZCBhcyBjbGFzcyBuYW1lIG9yIHNpbWlsYXJcbiAgICAgICAgICAgIC8vIFRoZSBiYWNrZW5kIHVzdWFsbHkgc2VuZHMgJ3J1bGVUeXBlJyBwcm9wZXJ0eSBpZiBpdCdzIHNlcmlhbGl6ZWQgZnJvbSBBYnN0cmFjdFJ1bGVcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHR5cGVNYXBbcnVsZS5ydWxlVHlwZV0gfHwgbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgb3BlblJ1bGUocnVsZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJ1bGUgPSBydWxlO1xuICAgICAgICAgICAgdGhpcy5zaG93UnVsZU1vZGFsID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuLyogVmlzdWFsIGN1ZSB0aGF0IGlucHV0cyBhcmUgcmVhZC1vbmx5ICovXG46ZGVlcCgudi1maWVsZF9faW5wdXQpLFxuOmRlZXAoLnYtaW5wdXRfX2NvbnRyb2wpIHtcbiAgICBvcGFjaXR5OiAwLjg7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlPlxuICAgIDx2LXJvdz5cbiAgICAgICAgPHYtY29sPlxuICAgICAgICAgICAgPHYtY2FyZD5cbiAgICAgICAgICAgICAgICA8di1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8Yj57eyAnRmFjdHVyYXMgJyArIChhdXRoU3RvcmUuaXNDbGllbnQgPyAnUmVjaWJpZGFzJyA6ICdFbWl0aWRhcycpIH19PC9iPlxuICAgICAgICAgICAgICAgIDwvdi1jYXJkLXRpdGxlPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBEeW5hbWljIEZpbHRlciBUYWJsZSB3aXRoIGJ1aWx0LWluIHBhZ2luYXRpb24gYW5kIGZpbHRlcmluZyAtLT5cbiAgICAgICAgICAgICAgICA8Y29tcG9uZW50IDppcz1cInRhZ0NvbXBvbmVudGVcIlxuICAgICAgICAgICAgICAgICAgICByZWY9XCJpbnZvaWNlVGFibGVcIlxuICAgICAgICAgICAgICAgICAgICA6YXBpLWVuZHBvaW50PVwiYXBpRW5kcG9pbnRcIlxuICAgICAgICAgICAgICAgICAgICA6ZmlsdGVyLWNvbmZpZz1cImZpbHRlckNvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgIDpoZWFkZXJzPVwiaGVhZGVyc1wiXG4gICAgICAgICAgICAgICAgICAgIDphY3Rpb25zPVwiYWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIDphZGRpdGlvbmFsLXBhcmFtcz1cImRhdGVGaWx0ZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgQGRhdGEtbG9hZGVkPVwib25EYXRhTG9hZGVkXCJcbiAgICAgICAgICAgICAgICAgICAgQGVycm9yPVwib25FcnJvclwiXG4gICAgICAgICAgICAgICAgICAgIEBmaWx0ZXItY2hhbmdlPVwib25GaWx0ZXJDaGFuZ2VcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBDdXN0b20gc3RhdHVzIGNvbHVtbiB0ZW1wbGF0ZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlICNpdGVtLnN0YXR1cz1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U3RhdHVzQ2hpcCA6aXRlbT1cIml0ZW1cIj48L1N0YXR1c0NoaXA+XG4gICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8IS0tIEZvcm1hdCBjdXJyZW5jeSBjb2x1bW5zIC0tPlxuICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI2l0ZW0udG90YWw9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybWF0Q3VycmVuY3koaXRlbS50b3RhbCkgfX1cbiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5kaXNjb3VudD1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmRpc2NvdW50ID8gZm9ybWF0Q3VycmVuY3koaXRlbS5kaXNjb3VudCkgOiAnLS0nIH19XG4gICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8IS0tIEZvcm1hdCBkYXRlIGNvbHVtbnMgLS0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5icm9hZGNhc3REYXRlPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdERhdGUoaXRlbS5icm9hZGNhc3REYXRlKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlICNpdGVtLmV4cGlyYXRpb25EYXRlPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdERhdGUoaXRlbS5leHBpcmF0aW9uRGF0ZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2NvbXBvbmVudD5cbiAgICAgICAgICAgIDwvdi1jYXJkPlxuICAgICAgICA8L3YtY29sPlxuXG4gICAgICAgIDwhLS0gRURJVEFSIEVMIElOVk9JQ0UgU0VMRUNDSU9OQURPIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZWRpdC1pbnZvaWNlXCI+XG4gICAgICAgICAgICA8T3ZlcmxheSB0aXRsZT1cIkVkaXRhciBGYWN0dXJhXCIgcHJvZ3JhbW1lclJlZj1cImFkZC1pbnZvaWNlXCIgYWN0aXZhdG9yPVwicGFyZW50XCJcbiAgICAgICAgICAgICAgICB2LW1vZGVsPVwic2hvd0VkaXRJbnZvaWNlXCI+XG4gICAgICAgICAgICAgICAgPHRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgICAgICAgICAgICA8Q3JlYXRlSW52b2ljZU92ZXJsYXkgdi1pZj1cInNlbGVjdGVkSW52b2ljZVwiIDpleGlzdGluZ0ludm9pY2U9XCJzZWxlY3RlZEludm9pY2VcIiBAc2F2ZWQ9XCJyZWZyZXNoRGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICA8L0NyZWF0ZUludm9pY2VPdmVybGF5PlxuICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICA8L092ZXJsYXk+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gVkVSIEVMIElOVk9JQ0UgU0VMRUNDSU9OQURPIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hvdy1pbnZvaWNlXCI+XG4gICAgICAgICAgICA8T3ZlcmxheSB2LW1vZGVsPVwic2hvd0RldGFpbHNcIiB0aXRsZT1cIkRldGFsbGVzIGRlIGZhY3R1cmFcIiBwcm9ncmFtbWVyUmVmPVwiaW52b2ljZS1kZXRhaWxcIiBhY3RpdmF0b3I9XCJwYXJlbnRcIj5cbiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI2RlZmF1bHQ+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlYWJsZVwiIHYtaWY9XCJzZWxlY3RlZEludm9pY2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxNb3JlSW5mbyB0aXRsZT1cIkRhdG9zXCIgcHJvZ3JhbW1lclJlZj1cInByaW5jaXBhbC1kYXRhLWludm9pY2VcIiBhY3RpdmF0b3I9XCJwYXJlbnRcIj48L01vcmVJbmZvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHYtcm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LXJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtY29sIGNvbHM9XCI0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIiogRmVjaGEgZGUgRW1pc2lvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bW9kZWwtdmFsdWU9XCJmb3JtYXREYXRlKHNlbGVjdGVkSW52b2ljZS5icm9hZGNhc3REYXRlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInVuZGVybGluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1jb2wgY29scz1cIjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiKiBGZWNoYSBkZSBWZW5jaW1pZW50b1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bW9kZWwtdmFsdWU9XCJmb3JtYXREYXRlKHNlbGVjdGVkSW52b2ljZS5leHBpcmF0aW9uRGF0ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJ1bmRlcmxpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3YtdGV4dC1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtY29sIGNvbHM9XCI0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkZlY2hhIGRlIFByZXN0YWNpb24gZGUgU2VydmljaW9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOm1vZGVsLXZhbHVlPVwiZm9ybWF0RGF0ZShzZWxlY3RlZEludm9pY2UuZGF0ZU9mU2VydmljZVByb3Zpc2lvbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJ1bmRlcmxpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3YtdGV4dC1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92LXJvdz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPC92LXJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LXJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkIGxhYmVsPVwiKiBQcm92ZWVkb3JcIiB2LW1vZGVsPVwic2VsZWN0ZWRJbnZvaWNlLnByb3ZpZGVyU29jaWFsRGVub21pbmF0aW9uXCIgcmVhZG9ubHkgdmFyaWFudD1cInVuZGVybGluZWRcIiByZXF1aXJlZD48L3YtdGV4dC1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkIGxhYmVsPVwiRm9ybWEgZGUgcGFnb1wiIHYtbW9kZWw9XCJzZWxlY3RlZEludm9pY2UucGF5bWVudE1ldGhvZFwiIHJlYWRvbmx5IHZhcmlhbnQ9XCJ1bmRlcmxpbmVkXCI+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZCBsYWJlbD1cIiogSW1wdWVzdG9zXCIgdi1tb2RlbD1cInNlbGVjdGVkSW52b2ljZS50YXhcIiByZWFkb25seSB2YXJpYW50PVwidW5kZXJsaW5lZFwiIHJlcXVpcmVkPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC92LXJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LXJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkIGxhYmVsPVwiKiBUb3RhbFwiIHYtbW9kZWw9XCJzZWxlY3RlZEludm9pY2UudG90YWxcIiByZWFkb25seSB2YXJpYW50PVwidW5kZXJsaW5lZFwiIHJlcXVpcmVkPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgbGFiZWw9XCIqIE4gRmFjdHVyYVwiIHYtbW9kZWw9XCJzZWxlY3RlZEludm9pY2UuaW52b2ljZU51bWJlclwiIHJlYWRvbmx5IHZhcmlhbnQ9XCJ1bmRlcmxpbmVkXCIgcmVxdWlyZWQ+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZCB0eXBlPVwibnVtYmVyXCIgbGFiZWw9XCIqIEJhc2UgaW1wb25pYmxlXCIgdi1tb2RlbD1cInNlbGVjdGVkSW52b2ljZS50YXhCYXNlXCIgcmVhZG9ubHkgdmFyaWFudD1cInVuZGVybGluZWRcIiByZXF1aXJlZD48L3YtdGV4dC1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1yb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICA8di1yb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZCBsYWJlbD1cIlJldGVuY2lvbmVzXCIgdi1tb2RlbD1cInNlbGVjdGVkSW52b2ljZS5yZXRlbnRpb25zXCIgcmVhZG9ubHkgdmFyaWFudD1cInVuZGVybGluZWRcIj48L3YtdGV4dC1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgbGFiZWw9XCJDb3N0byBzdXBsaWRvIGRlIGZhY3R1cmFcIiB2LW1vZGVsPVwic2VsZWN0ZWRJbnZvaWNlLnN1cHBsaWVkRXhwZW5zZVwiIHJlYWRvbmx5IHZhcmlhbnQ9XCJ1bmRlcmxpbmVkXCI+PC92LXRleHQtZmllbGQ+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0yIG10LTAgdy0xMDAgY2VudGVyIGZsZXgtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCB2LWlmPVwic2VsZWN0ZWRJbnZvaWNlLmF0dGFjaGVkRG9jdW1lbnRcIj48Yj5BcmNoaXZvIGFkanVudG86PC9iPiB7eyBzZWxlY3RlZEludm9pY2UuYXR0YWNoZWREb2N1bWVudCB9fTwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCB2LWVsc2U+PGI+Tm8gaGF5IGFyY2hpdm8gYWRqdW50byBhdW4uLi48L2I+PC9zbWFsbD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtYnRuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LWlmPVwic2VsZWN0ZWRJbnZvaWNlLmF0dGFjaGVkRG9jdW1lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmhyZWY9XCJgL3VwbG9hZHMvJHtzZWxlY3RlZEludm9pY2UuYXR0YWNoZWREb2N1bWVudH1gXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyIGRvY3VtZW50b1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3YtYnRuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Ytcm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPE1vcmVJbmZvIHRpdGxlPVwiUHJvZHVjdG9zIGRlIGxhIGZhY3R1cmFcIiBwcm9ncmFtbWVyUmVmPVwiaW52b2ljZS1wcm9kdWN0cy1kZXRhaWxzXCIgYWN0aXZhdG9yPVwicGFyZW50XCI+PC9Nb3JlSW5mbz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWZvcj1cIihwcm9kdWN0LCBpbmRleCkgaW4gc2VsZWN0ZWRJbnZvaWNlLnByb2R1Y3RBcnJheVwiIDprZXk9XCJpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiIGNsYXNzPVwibXktMlwiPlByb2R1Y3RvIHt7IGluZGV4ICsgMSB9fTwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1yb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWNvbCBjb2xzPVwiM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZCBsYWJlbD1cIiogQ29uY2VwdG9cIiB2LW1vZGVsPVwicHJvZHVjdC5wcm9kdWN0RGVzY3JpcHRpb25cIiByZWFkb25seSB2YXJpYW50PVwidW5kZXJsaW5lZFwiPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1jb2wgY29scz1cIjNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgbGFiZWw9XCIqIFVkcy5cIiB2LW1vZGVsPVwicHJvZHVjdC51bml0c1wiIHJlYWRvbmx5IHZhcmlhbnQ9XCJ1bmRlcmxpbmVkXCI+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWNvbCBjb2xzPVwiM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZCBsYWJlbD1cIiogUHJlY2lvXCIgdi1tb2RlbD1cInByb2R1Y3QudW5pdFByaWNlXCIgcmVhZG9ubHkgdmFyaWFudD1cInVuZGVybGluZWRcIj48L3YtdGV4dC1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtY29sIGNvbHM9XCIzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkIGxhYmVsPVwiRHRvLlwiIDptb2RlbC12YWx1ZT1cImZvcm1hdEN1cnJlbmN5KHNlbGVjdGVkSW52b2ljZS5kaXNjb3VudClcIiByZWFkb25seSB2YXJpYW50PVwidW5kZXJsaW5lZFwiPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1jb2wgY29scz1cIjNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgbGFiZWw9XCIqIFRvdGFsXCIgdi1tb2RlbD1cInByb2R1Y3QucHJvZHVjdFRvdGFsXCIgcmVhZG9ubHkgdmFyaWFudD1cInVuZGVybGluZWRcIj48L3YtdGV4dC1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Ytcm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWRpdmlkZXIgdi1pZj1cImluZGV4IDwgc2VsZWN0ZWRJbnZvaWNlLnByb2R1Y3RBcnJheS5sZW5ndGggLSAxXCIgY2xhc3M9XCJteS0zXCI+PC92LWRpdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZW50ZXIgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHYtYnRuIGNsYXNzPVwidGV4dC13aGl0ZSBhZGQtdGVtcGxhdGVzLWJ1dHRvbiBtZS0yXCIgQGNsaWNrPVwic2hvd0RldGFpbHMgPSBmYWxzZVwiPkFjZXB0YXI8L3YtYnRuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHYtYnRuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiaW5mb1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC13aGl0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPVwidmlld0hpc3Rvcnkoc2VsZWN0ZWRJbnZvaWNlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSGlzdG9yaWFsIGRlIGVzdGFkb3MgZGUgbGEgZmFjdHVyYVxuICAgICAgICAgICAgICAgICAgICAgICAgPC92LWJ0bj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvT3ZlcmxheT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBJTlZPSUNFIEhJU1RPUlkgT1ZFUkxBWSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImhpc3Rvcnktb3ZlcmxheVwiPlxuICAgICAgICAgICAgPE92ZXJsYXkgdi1tb2RlbD1cInNob3dIaXN0b3J5XCIgdGl0bGU9XCJIaXN0b3JpYWwgZGUgZXN0YWRvc1wiIHByb2dyYW1tZXJSZWY9XCJpbnZvaWNlLWhpc3RvcnlcIiBhY3RpdmF0b3I9XCJwYXJlbnRcIj5cbiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI2RlZmF1bHQ+XG4gICAgICAgICAgICAgICAgICAgIDxJbnZvaWNlU3RhdGVIaXN0b3J5T3ZlcmxheSBcbiAgICAgICAgICAgICAgICAgICAgICAgIHYtaWY9XCJzZWxlY3RlZEludm9pY2VcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgIDppbnZvaWNlPVwic2VsZWN0ZWRJbnZvaWNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBjbG9zZT1cInNob3dIaXN0b3J5ID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICA8L092ZXJsYXk+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tIFJ1bGVzIE92ZXJsYXkgLS0+XG4gICAgICAgIDxkaXYgdi1pZj1cInNlbGVjdGVkSW52b2ljZUZvclJ1bGVzXCI+XG4gICAgICAgICAgICA8T3ZlcmxheSB2LW1vZGVsPVwic2hvd1J1bGVzT3ZlcmxheVwiIHRpdGxlPVwiUmVnbGFzIGRlIGxhIEZhY3R1cmFcIlxuICAgICAgICAgICAgICAgIHByb2dyYW1tZXJSZWY9XCJpbnZvaWNlLXJ1bGVzXCJcbiAgICAgICAgICAgICAgICA6c2NyaW09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPHRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgICAgICAgICAgICA8SW52b2ljZVJ1bGVzT3ZlcmxheSA6aW52b2ljZT1cInNlbGVjdGVkSW52b2ljZUZvclJ1bGVzXCIgLz5cbiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgPC9PdmVybGF5PlxuICAgICAgICA8L2Rpdj5cblxuICAgIDwvdi1yb3c+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IE1vcmVJbmZvIGZyb20gJy4uL2NvbXBvbmVudHMvTW9yZUluZm8udnVlJztcbmltcG9ydCBPdmVybGF5IGZyb20gJy4uL2NvbXBvbmVudHMvT3ZlcmxheS52dWUnO1xuaW1wb3J0IFN0YXR1c0NoaXAgZnJvbSAnLi4vY29tcG9uZW50cy9TdGF0dXNDaGlwLnZ1ZSc7XG5pbXBvcnQgQ3JlYXRlSW52b2ljZU92ZXJsYXkgZnJvbSAnLi4vY29tcG9uZW50cy9DcmVhdGVJbnZvaWNlT3ZlcmxheS52dWUnO1xuaW1wb3J0IEludm9pY2VTdGF0ZUhpc3RvcnlPdmVybGF5IGZyb20gJy4uL2NvbXBvbmVudHMvSW52b2ljZVN0YXRlSGlzdG9yeU92ZXJsYXkudnVlJztcbmltcG9ydCBEeW5hbWljRmlsdGVyVGFibGVDbGllbnQgZnJvbSAnLi4vY29tcG9uZW50cy9EeW5hbWljRmlsdGVyVGFibGVDbGllbnQudnVlJztcbmltcG9ydCBEeW5hbWljRmlsdGVyVGFibGVDYXJkcyBmcm9tICcuLi9jb21wb25lbnRzL0R5bmFtaWNGaWx0ZXJUYWJsZS52dWUnO1xuaW1wb3J0IHsgdXNlR2xvYmFsVXRpbHMgfSBmcm9tICcuLi91dGlscy9nbG9iYWxzJztcbmltcG9ydCBEYXRlSW5wdXQgZnJvbSAnLi4vY29tcG9uZW50cy9EYXRlSW5wdXQudnVlJztcbmltcG9ydCB7IHVzZUF1dGhTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9hdXRoJztcbmltcG9ydCB7IHVzZUludm9pY2VTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9pbnZvaWNlJztcbmltcG9ydCB7IGNvbXB1dGVkIH0gZnJvbSAndnVlJztcbmltcG9ydCBJbnZvaWNlUnVsZXNPdmVybGF5IGZyb20gJy4vSW52b2ljZVJ1bGVzT3ZlcmxheS52dWUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgcHJvcHM6IHtcbiAgICAgICAgc2hvd0FzQ2xpZW50OiB7XG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGFkdmFuY2VJbnZvaWNlTm93OiB7XG4gICAgICAgICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICgpID0+IGNvbnNvbGUuZXJyb3IoJ05vIHNlIHBhc28gbGEgZnVuY2lvbiBcImFkdmFuY2VJbnZvaWNlTm93XCIuJyksXG4gICAgICAgIH0sXG4gICAgICAgIHZhbGlkYXRlSW52b2ljZU5vdzoge1xuICAgICAgICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiAoKSA9PiBjb25zb2xlLmVycm9yKCdObyBzZSBwYXNvIGxhIGZ1bmNpb24gXCJ2YWxpZGF0ZUludm9pY2VOb3dcIi4nKSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVmcmVzaEludm9pY2VzOiB7XG4gICAgICAgICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICgpID0+IGNvbnNvbGUuZXJyb3IoJ05vIHNlIHBhc28gbGEgZnVuY2lvbiBcInJlZnJlc2hJbnZvaWNlc1wiLicpLFxuICAgICAgICB9LFxuICAgICAgICBkZWxldGVJbnZvaWNlOiB7XG4gICAgICAgICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICgpID0+IGNvbnNvbGUuZXJyb3IoJ05vIHNlIHBhc28gbGEgZnVuY2lvbiBcImRlbGV0ZUludm9pY2VcIi4nKSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF0ZUZpbHRlcnM6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICgpID0+ICh7fSlcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIG5hbWU6ICdJbnZvaWNlV2l0aEZpbHRlcnMnLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgRGF0ZUlucHV0LFxuICAgICAgICBNb3JlSW5mbyxcbiAgICAgICAgT3ZlcmxheSxcbiAgICAgICAgU3RhdHVzQ2hpcCxcbiAgICAgICAgRHluYW1pY0ZpbHRlclRhYmxlQ2xpZW50LFxuICAgICAgICBEeW5hbWljRmlsdGVyVGFibGVDYXJkcyxcbiAgICAgICAgQ3JlYXRlSW52b2ljZU92ZXJsYXksXG4gICAgICAgIEludm9pY2VTdGF0ZUhpc3RvcnlPdmVybGF5LFxuICAgICAgICBJbnZvaWNlUnVsZXNPdmVybGF5XG4gICAgfSxcbiAgICBzZXR1cChwcm9wcykge1xuICAgICAgICBjb25zdCBhdXRoU3RvcmUgPSB1c2VBdXRoU3RvcmUoKTtcbiAgICAgICAgY29uc3QgaW52b2ljZVN0b3JlID0gdXNlSW52b2ljZVN0b3JlKCk7XG4gICAgICAgIGNvbnN0IHsgdG9hc3QsIHN3YWwsIGZvcm1hdERhdGUsIGZvcm1hdEN1cnJlbmN5IH0gPSB1c2VHbG9iYWxVdGlscygpO1xuXG4gICAgICAgIHJldHVybiB7IFxuICAgICAgICAgICAgdG9hc3QsIFxuICAgICAgICAgICAgc3dhbCwgXG4gICAgICAgICAgICBhdXRoU3RvcmUsXG4gICAgICAgICAgICBpbnZvaWNlU3RvcmUsXG4gICAgICAgICAgICBmb3JtYXREYXRlLFxuICAgICAgICAgICAgZm9ybWF0Q3VycmVuY3lcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIGRhdGEoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaG93RGV0YWlsczogZmFsc2UsXG4gICAgICAgICAgICBzaG93RWRpdEludm9pY2U6IGZhbHNlLFxuICAgICAgICAgICAgc2hvd0hpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAgICAgc2VsZWN0ZWRJbnZvaWNlOiBudWxsLFxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBSdWxlcyBPdmVybGF5XG4gICAgICAgICAgICBzaG93UnVsZXNPdmVybGF5OiBmYWxzZSxcbiAgICAgICAgICAgIHNlbGVjdGVkSW52b2ljZUZvclJ1bGVzOiBudWxsLFxuXG4gICAgICAgICAgICAvLyBBUEkgZW5kcG9pbnQgZm9yIGZldGNoaW5nIGludm9pY2VzXG4gICAgICAgICAgICBhcGlFbmRwb2ludDogdGhpcy5zaG93QXNDbGllbnQgXG4gICAgICAgICAgICAgICAgPyAnL3VzZXJzL3t1c2VySWR9L2NsaWVudEludm9pY2VzJ1xuICAgICAgICAgICAgICAgIDogJy91c2Vycy97dXNlcklkfS9wcm92aWRlckludm9pY2VzJyxcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEZpbHRlciBjb25maWd1cmF0aW9uXG4gICAgICAgICAgICAvLyBGaWx0ZXIgY29uZmlndXJhdGlvbiBtb3ZlZCB0byBjb21wdXRlZCBwcm9wZXJ0eVxuICAgICAgICAgICAgYWN0aW9uc1Byb3ZpZGVyOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpY29uOiAnbWRpLWNhc2gnLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ0NvYnJhciBBaG9yYScsXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXI6IHRoaXMucHJvdmlkZXJDaGFyZ2VOb3csXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogKGl0ZW0pID0+ICEoaXRlbS5zdGF0dXMgPT0gMiAmJiBpdGVtLmFkdmFuY2VBbGxvd2VkKSAvLyBEaXNhYmxlZCBpZiBOT1QgZWxpZ2libGUgd2l0aCBhZHZhbmNlIGFsbG93ZWRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ21kaS1leWUnLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ1ZlciBGYWN0dXJhJyxcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcjogdGhpcy52aWV3SW52b2ljZSxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdwcmltYXJ5J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpY29uOiAnbWRpLXBlbmNpbCcsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnRWRpdGFyIEZhY3R1cmEnLFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyOiB0aGlzLmVkaXRJbnZvaWNlLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3ByaW1hcnknXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGljb246ICdtZGktaGlzdG9yeScsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnVmVyIENhbWJpb3MnLFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyOiB0aGlzLnZpZXdIaXN0b3J5LFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ2luZm8nXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBhY3Rpb25zQ2xpZW50OiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpY29uOiAnbWRpLWV5ZScsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnVmVyIEZhY3R1cmEnLFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyOiB0aGlzLnZpZXdJbnZvaWNlLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3ByaW1hcnknXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGljb246ICdtZGktY2hlY2stY2lyY2xlLW91dGxpbmUnLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ1ZhbGlkYXIgRmFjdHVyYScsXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXI6IHRoaXMudmFsaWRhdGVJbnZvaWNlLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICBjb25kaXRpb246IChpdGVtKSA9PiBpdGVtLnN0YXR1cyAhPSA2IC8vIERpc2FibGVkIGlmIE5PVCAnUGFyYSB2YWxpZGFyJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpY29uOiAnbWRpLWNhc2gtY2hlY2snLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ1BhZ2FyIEFob3JhJyxcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcjogdGhpcy5wYXlOb3csXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnd2FybmluZycsXG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogKGl0ZW0pID0+ICFbNCwgNSwgN10uaW5jbHVkZXMocGFyc2VJbnQoaXRlbS5zdGF0dXMpKSAvLyBEaXNhYmxlZCBpZiBOT1QgaW4gdGhlc2Ugc3RhdGVzXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGljb246ICdtZGktcGVuY2lsJyxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdFZGl0YXIgRmFjdHVyYScsXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXI6IHRoaXMuZWRpdEludm9pY2UsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncHJpbWFyeSdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ21kaS1ib29rLW9wZW4tb3V0bGluZScsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnVmVyIFJlZ2xhcycsXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXI6IHRoaXMudmlld1J1bGVzLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ2luZm8nXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGljb246ICdtZGktaGlzdG9yeScsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnVmVyIENhbWJpb3MnLFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyOiB0aGlzLnZpZXdIaXN0b3J5LFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ2luZm8nXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGljb246ICdtZGktZGVsZXRlJyxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdCb3JyYXIgRmFjdHVyYScsXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXI6IHRoaXMuZGVsZXRlSW52b2ljZUl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnZXJyb3InXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHN0YXR1c09wdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAnQWRlbGFudGFkYScsXG4gICAgICAgICAgICAgICAgJ0ZpbmFsaXphZGEgc2luIGFkZWxhbnRhcicsXG4gICAgICAgICAgICAgICAgJ1BhcmEgdmFsaWRhcicsXG4gICAgICAgICAgICAgICAgJ05vIGVsZWdpYmxlJyxcbiAgICAgICAgICAgICAgICAnVmFsaWRhZGEnLFxuICAgICAgICAgICAgICAgICdFbGVnaWJsZSdcbiAgICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgICAgdGFnQ29tcG9uZW50ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmF1dGhTdG9yZS5pc0NsaWVudCA/ICdEeW5hbWljRmlsdGVyVGFibGVDbGllbnQnIDogJ0R5bmFtaWNGaWx0ZXJUYWJsZUNhcmRzJztcbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVyQ29uZmlnKCkge1xuICAgICAgICAgICAgY29uc3QgY291bnRlcnBhcnR5TmFtZUZpZWxkID0gdGhpcy5zaG93QXNDbGllbnQgPyAncHJvdmlkZXIuc29jaWFsRGVub21pbmF0aW9uJyA6ICdjbGllbnQuc29jaWFsRGVub21pbmF0aW9uJztcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ZXJwYXJ0eVZhdEZpZWxkID0gdGhpcy5zaG93QXNDbGllbnQgPyAncHJvdmlkZXIudmF0TnVtYmVyJyA6ICdjbGllbnQudmF0TnVtYmVyJztcblxuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICB7IHR5cGU6ICd0ZXh0JywgZmllbGQ6IGNvdW50ZXJwYXJ0eU5hbWVGaWVsZCwgbGFiZWw6ICdOb21icmUgQ29udHJhcGFydGUnLCBpY29uOiAnbWRpLW1hZ25pZnknLCB3aWR0aDogMiB9LFxuICAgICAgICAgICAgICAgIHsgdHlwZTogJ3RleHQnLCBmaWVsZDogY291bnRlcnBhcnR5VmF0RmllbGQsIGxhYmVsOiAnTklGIENvbnRyYXBhcnRlJywgaWNvbjogJ21kaS1tYWduaWZ5Jywgd2lkdGg6IDIgfSxcbiAgICAgICAgICAgICAgICB7IHR5cGU6ICd0ZXh0JywgZmllbGQ6ICdpbnZvaWNlTnVtYmVyJywgbGFiZWw6ICdOwrAgZmFjdHVyYScsIGljb246ICdtZGktbWFnbmlmeScsIHdpZHRoOiAyIH0sXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAnZGF0ZScsIGZpZWxkOiAnYnJvYWRjYXN0RGF0ZVthZnRlcl0nLCBsYWJlbDogJ0Rlc2RlJywgd2lkdGg6IDIgfSxcbiAgICAgICAgICAgICAgICB7IHR5cGU6ICdkYXRlJywgZmllbGQ6ICdicm9hZGNhc3REYXRlW2JlZm9yZV0nLCBsYWJlbDogJ0hhc3RhJywgd2lkdGg6IDIgfSxcbiAgICAgICAgICAgICAgICB7IHR5cGU6ICdkYXRlJywgZmllbGQ6ICdleHBpcmF0aW9uRGF0ZVthZnRlcl0nLCBsYWJlbDogJ0YuIFZlbmMuIERlc2RlJywgd2lkdGg6IDIgfSxcbiAgICAgICAgICAgICAgICB7IHR5cGU6ICdkYXRlJywgZmllbGQ6ICdleHBpcmF0aW9uRGF0ZVtiZWZvcmVdJywgbGFiZWw6ICdGLiBWZW5jLiBIYXN0YScsIHdpZHRoOiAyIH0sXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAnc2VsZWN0JywgZmllbGQ6ICdzdGF0dXMnLCBsYWJlbDogJ0VzdGFkbycsIGl0ZW1zOiBbeyBpdGV4dDogXCJUb2Rvc1wiLCBpdmFsdWU6IDB9LCB7IGl0ZXh0OiBcIlZhbGlkYWRhc1wiLCBpdmFsdWU6IDF9LCB7IGl0ZXh0OiBcIkVsZWdpYmxlc1wiLCBpdmFsdWU6IDJ9LCB7IGl0ZXh0OiBcIk5vIGVsZWdpYmxlc1wiLCBpdmFsdWU6IDN9LCB7IGl0ZXh0OiBcIkFkZWxhbnRhZGFzXCIsIGl2YWx1ZTogNH0sIHsgaXRleHQ6IFwiRmluYWxpemFkYXMgc2luIGFkZWxhbnRhclwiLCBpdmFsdWU6IDV9LCB7IGl0ZXh0OiBcIlBhcmEgdmFsaWRhclwiLCBpdmFsdWU6IDZ9LCB7IGl0ZXh0OiBcIkZpbmFsaXphZGFzIGRlc2RlIGFkZWxhbnRhclwiLCBpdmFsdWU6IDd9XSwgd2lkdGg6IDMgfSxcbiAgICAgICAgICAgICAgICB7IHR5cGU6ICdyYW5nZScsIGZpZWxkOiAndG90YWwnLCBsYWJlbDogJ1RvdGFsJywgd2lkdGg6IDYgfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfSxcbiAgICAgICAgYWN0aW9ucygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3dBc0NsaWVudCA/IHRoaXMuYWN0aW9uc0NsaWVudCA6IHRoaXMuYWN0aW9uc1Byb3ZpZGVyO1xuICAgICAgICB9LFxuICAgICAgICBjb3VudGVyUGFydE5hbWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaG93QXNDbGllbnQgPyAnUHJvdmVlZG9yJyA6ICdDbGllbnRlJztcbiAgICAgICAgfSxcbiAgICAgICAgaGVhZGVycygpIHtcbiAgICAgICAgICAgIC8vIEJhc2UgaGVhZGVycyB0aGF0IGFyZSBhbHdheXMgdmlzaWJsZVxuICAgICAgICAgICAgY29uc3QgYmFzZUhlYWRlcnMgPSBbXG4gICAgICAgICAgICAgICAgeyB0aXRsZTogdGhpcy5jb3VudGVyUGFydE5hbWUsIGtleTogdGhpcy5zaG93QXNDbGllbnQgPyAncHJvdmlkZXJTb2NpYWxEZW5vbWluYXRpb24nIDogJ2NsaWVudFNvY2lhbERlbm9taW5hdGlvbicsIHNvcnRhYmxlOiB0cnVlLCBhbGlnbjogJ3N0YXJ0JyB9LFxuICAgICAgICAgICAgICAgIHsgdGl0bGU6IGBOSUYgJHt0aGlzLmNvdW50ZXJQYXJ0TmFtZX1gLCBrZXk6ICdwcm92aWRlclZhdE51bWJlcicsIHNvcnRhYmxlOiB0cnVlLCBhbGlnbjogJ3N0YXJ0JyB9LFxuICAgICAgICAgICAgICAgIHsgdGl0bGU6ICdOwrogZmFjdHVyYScsIGtleTogJ2ludm9pY2VOdW1iZXInLCBzb3J0YWJsZTogdHJ1ZSwgYWxpZ246ICdzdGFydCcgfSxcbiAgICAgICAgICAgICAgICB7IHRpdGxlOiAnRmVjaGEgRS4nLCBrZXk6ICdicm9hZGNhc3REYXRlJywgc29ydGFibGU6IHRydWUsIGFsaWduOiAnc3RhcnQnIH0sXG4gICAgICAgICAgICAgICAgeyB0aXRsZTogJ0YuIFZlbmMuJywga2V5OiAnZXhwaXJhdGlvbkRhdGUnLCBzb3J0YWJsZTogdHJ1ZSwgYWxpZ246ICdzdGFydCcgfSxcbiAgICAgICAgICAgICAgICB7IHRpdGxlOiAnVG90YWwnLCBrZXk6ICd0b3RhbCcsIHNvcnRhYmxlOiB0cnVlLCBhbGlnbjogJ2VuZCcgfSxcbiAgICAgICAgICAgICAgICB7IHRpdGxlOiAnRXN0YWRvJywga2V5OiAnc3RhdHVzJywgc29ydGFibGU6IHRydWUsIGFsaWduOiAnY2VudGVyJyB9LFxuICAgICAgICAgICAgICAgIHsgdGl0bGU6ICdBY2Npb25lcycsIGtleTogJ2FjdGlvbnMnLCBzb3J0YWJsZTogZmFsc2UsIGFsaWduOiAnY2VudGVyJyB9XG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBTdGF0ZXMgd2hlcmUgZGF5cyB0byBleHBpcmF0aW9uIGFuZCBkaXNjb3VudCBhcmUgcmVsZXZhbnRcbiAgICAgICAgICAgIC8vIFZhbGlkYXRlZCAtIEVsaWdpYmxlIC0gTm90IEVsaWdpYmxlIC0gQWR2YW5jZWQgLSBBZHZhbmNlZCBWYWxpZGF0ZWQgLSBBZHZhbmNlZCBWYWxpZGF0ZWQgUGFpZFxuICAgICAgICAgICAgY29uc3Qgc3RhdGVzV2l0aEV4cGlyYXRpb25BbmREaXNjb3VudCA9IFsxLCAyLCAzLCA0XTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gQWRkIGNvbmRpdGlvbmFsIGhlYWRlcnNcbiAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbmFsSGVhZGVycyA9IFtdO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBBZGQgZGF5cyB0byBleHBpcmF0aW9uIGhlYWRlciBvbmx5IGZvciByZWxldmFudCBzdGF0ZXNcbiAgICAgICAgICAgIC8vIFRoaXMgZmlsdGVyIHdpbGwgYmUgYXBwbGllZCBjbGllbnQtc2lkZSBpbiB0aGUgdGFibGUgY29tcG9uZW50XG4gICAgICAgICAgICBjb25kaXRpb25hbEhlYWRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdEaWFzL1AgVmVuYy4nLFxuICAgICAgICAgICAgICAgIGtleTogJ2RheXNUb0V4cGlyZScsXG4gICAgICAgICAgICAgICAgc29ydGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgYWxpZ246ICdzdGFydCcsXG4gICAgICAgICAgICAgICAgc2hvd0NvbmRpdGlvbjogKGl0ZW0pID0+IHN0YXRlc1dpdGhFeHBpcmF0aW9uQW5kRGlzY291bnQuaW5jbHVkZXMoaXRlbS5zdGF0dXMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gQWRkIGRpc2NvdW50IGhlYWRlciAtIGFsd2F5cyB2aXNpYmxlXG4gICAgICAgICAgICBjb25kaXRpb25hbEhlYWRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdEdG8uJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdkaXNjb3VudCcsXG4gICAgICAgICAgICAgICAgc29ydGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgYWxpZ246ICdlbmQnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gQ29tYmluZSBhbmQgcmV0dXJuIGFsbCBoZWFkZXJzXG4gICAgICAgICAgICAvLyBXZSdyZSBpbnNlcnRpbmcgdGhlIGNvbmRpdGlvbmFsIGhlYWRlcnMgYmVmb3JlIHRoZSBsYXN0IHR3byBpdGVtcyAoRXN0YWRvIGFuZCBBY2Npb25lcylcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgLi4uYmFzZUhlYWRlcnMuc2xpY2UoMCwgYmFzZUhlYWRlcnMubGVuZ3RoIC0gMiksXG4gICAgICAgICAgICAgICAgLi4uY29uZGl0aW9uYWxIZWFkZXJzLFxuICAgICAgICAgICAgICAgIC4uLmJhc2VIZWFkZXJzLnNsaWNlKGJhc2VIZWFkZXJzLmxlbmd0aCAtIDIpXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGNhbGN1bGF0ZVRvdGFsRGlzY291bnQoaW52b2ljZSkge1xuICAgICAgICAgICAgLy8gU3VtIGFsbCBwcm9kdWN0IGRpc2NvdW50c1xuICAgICAgICAgICAgaWYgKCFpbnZvaWNlLnByb2R1Y3RBcnJheSB8fCAhQXJyYXkuaXNBcnJheShpbnZvaWNlLnByb2R1Y3RBcnJheSkpIHtcbiAgICAgICAgICAgICAgICAvLyBGYWxsYmFjayB0byBpbnZvaWNlLmRpc2NvdW50IGlmIG5vIHByb2R1Y3RzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGludm9pY2UuZGlzY291bnQgPyB0aGlzLmZvcm1hdEN1cnJlbmN5KGludm9pY2UuZGlzY291bnQpIDogJy0tJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgdG90YWxEaXNjb3VudCA9IGludm9pY2UucHJvZHVjdEFycmF5LnJlZHVjZSgoc3VtLCBwcm9kdWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlzY291bnQgPSBwYXJzZUZsb2F0KHByb2R1Y3QucHJvZHVjdERpc2NvdW50KSB8fCAwO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdW0gKyBkaXNjb3VudDtcbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gdG90YWxEaXNjb3VudCA+IDAgPyB0aGlzLmZvcm1hdEN1cnJlbmN5KHRvdGFsRGlzY291bnQpIDogJy0tJztcbiAgICAgICAgfSxcbiAgICAgICAgdmlld0ludm9pY2UoaXRlbSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEludm9pY2UgPSBpdGVtO1xuICAgICAgICAgICAgdGhpcy5zaG93RGV0YWlscyA9IHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIHZhbGlkYXRlSW52b2ljZShpdGVtKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5zdGF0dXMgIT0gNikge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3QuZXJyb3IoJ0VzdGEgZmFjdHVyYSBubyBzZSBwdWVkZSB2YWxpZGFyLiBTb2xvIGxhcyBmYWN0dXJhcyBcIlBhcmEgVmFsaWRhclwiIHB1ZWRlbiBzZXIgdmFsaWRhZGFzLicpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zd2FsLmZpcmUoe1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnVmFsaWRhcicsXG4gICAgICAgICAgICAgICAgaHRtbDogYEVzdGEgc2VndXJvIHF1ZSBkZXNlYSB2YWxpZGFyIGxhIGZhY3R1cmEgJHtpdGVtLmludm9pY2VOdW1iZXJ9P2AsXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IFwiQWNlcHRvXCIsXG4gICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogXCJWb2x2ZXJcIixcbiAgICAgICAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxuICAgICAgICAgICAgICAgIGljb246IFwid2FybmluZ1wiXG4gICAgICAgICAgICB9KS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmlzQ29uZmlybWVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJbnZvaWNlTm93KGl0ZW0uaWQpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoRGF0YSgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcHJvdmlkZXJDaGFyZ2VOb3coaW52b2ljZSkge1xuICAgICAgICAgICAgaWYgKGludm9pY2Uuc3RhdHVzICE9IDIgfHwgIWludm9pY2UuYWR2YW5jZUFsbG93ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LmVycm9yKCdFc3RhIGZhY3R1cmEgbm8gc2UgcHVlZGUgY29icmFyIGFob3JhLiBEZWJlIGVzdGFyIGVuIGVzdGFkbyBcIkVsZWdpYmxlXCIgeSB0ZW5lciBwZXJtaXRpZG8gZWwgYWRlbGFudG8uJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBSZWRpcmVjdCB0byB0aGUgY2hhcmdlIHBhZ2UgZm9yIGNvbmZpcm1hdGlvbiBhbmQgc2lnbmluZ1xuICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBuYW1lOiAnSW52b2ljZUNoYXJnZScsIHBhcmFtczogeyBpbnZvaWNlSWQ6IGludm9pY2UuaWQgfSB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcGF5Tm93KGludm9pY2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmZvcm1hdERhdGUoaW52b2ljZS5leHBpcmF0aW9uRGF0ZSk7XG4gICAgICAgICAgICBsZXQgaHRtbCA9ICcnO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKHBhcnNlSW50KGludm9pY2Uuc3RhdHVzKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgNTogLy8gRmluYWxpemFkYSBzaW4gYWRlbGFudGFyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwgPSBgQWNlcHRvIGxvcyBkYXRvcyBkZSBsYSBmYWN0dXJhIG9yaWdpbmFsIGUgaW5kaWNvIHF1ZSB5YSBoZSBoZWNobyBsYSB0cmFuc2ZlcmVuY2lhIGJhbmNhcmlhIGFsIHByb3ZlZWRvciBhbCB0ZW5lciBmZWNoYSBkZSB2ZW5jaW1pZW50byA8Yj4ke2RhdGV9PC9iPiBwYXNhZGEgbGEgZmFjdHVyYWA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogLy8gQWRlbGFudGFkYVxuICAgICAgICAgICAgICAgICAgICBodG1sID0gYEFjZXB0byBsb3MgZGF0b3MgZGUgbGEgZmFjdHVyYSwgZGVsIGNvbnRyYXRvIHkgZGUgbGEgZmFjdHVyYSByZWN0aWZpY2F0aXZhIGUgaW5kaWNvIHF1ZSB5YSBoZSBoZWNobyBsYSB0cmFuc2ZlcmVuY2lhIGJhbmNhcmlhIGFsIHByb3ZlZWRvcmA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogLy8gRmluYWxpemFkYSBkZXNkZSBhZGVsYW50YXJcbiAgICAgICAgICAgICAgICAgICAgaHRtbCA9IGBBY2VwdG8gbG9zIGRhdG9zIGRlIGxhIGZhY3R1cmEgb3JpZ2luYWwgZSBpbmRpY28gcXVlIHlhIGhlIGhlY2hvIGxhIHRyYW5zZmVyZW5jaWEgYmFuY2FyaWEgYWwgZmluYW5jaWFkb3Igbm8gYSBsYSBjdWVudGEgZGVsIHByb3ZlZWRvciBkYWRvIHF1ZSBleGlzdMOtYSB1bmEgdG9tYSBkZSByYXrDs24gYWwgY2VkZXIgbGEgZmFjdHVyYSBlbiBlbCBhZGVsYW50by5gO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zd2FsLmZpcmUoe1xuICAgICAgICAgICAgICAgIHRpdGxlOiBgwr9ZYSBoYXMgaGVjaG8gbGEgdHJhbnNmZXJlbmNpYSBkZSBsYSBmYWN0dXJhICR7aW52b2ljZS5pbnZvaWNlTnVtYmVyfT9gLFxuICAgICAgICAgICAgICAgIGh0bWw6IGh0bWwsXG4gICAgICAgICAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogXCJBY2VwdG9cIixcbiAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiBcIkNhbmNlbGFyXCIsXG4gICAgICAgICAgICAgICAgaWNvbjogXCJzdWNjZXNzXCJcbiAgICAgICAgICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNDb25maXJtZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZvaWNlU3RvcmUucGF5SW52b2ljZU5vdyhpbnZvaWNlLmlkKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaERhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVkaXRJbnZvaWNlKGl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbnZvaWNlID0gaXRlbTtcbiAgICAgICAgICAgIHRoaXMuc2hvd0VkaXRJbnZvaWNlID0gdHJ1ZTtcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyB2aWV3UnVsZXMoaXRlbSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBGZXRjaCB0aGUgaW52b2ljZSBydWxlcyBmcm9tIHRoZSBkZWRpY2F0ZWQgZW5kcG9pbnRcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAvYXBpL2ludm9pY2VzLyR7aXRlbS5pZH0vcnVsZXNgLCB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBydWxlcyA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29tYmluZSBpdGVtIGRhdGEgd2l0aCBydWxlc1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW52b2ljZUZvclJ1bGVzID0geyAuLi5pdGVtLCAuLi5ydWxlcyB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dSdWxlc092ZXJsYXkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGludm9pY2UgcnVsZXM6JywgcmVzcG9uc2Uuc3RhdHVzVGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBpbnZvaWNlIHJ1bGVzOicsIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIHZpZXdIaXN0b3J5KGl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbnZvaWNlID0gaXRlbTtcbiAgICAgICAgICAgIHRoaXMuc2hvd0hpc3RvcnkgPSB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBkZWxldGVJbnZvaWNlSXRlbShpdGVtKSB7XG4gICAgICAgICAgICAvLyBhIHRyYXbDqXMgZGVsIHVzZUVudGl0eSBjb21wb3NhYmxlXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZUludm9pY2UoaXRlbSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaERhdGEoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU29sbyBtb3N0cmFyIGVycm9yIHNpIG5vIGZ1ZSBjYW5jZWxhZG8gcG9yIGVsIHVzdWFyaW9cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UgIT09ICdEZWxldGlvbiBjYW5jZWxsZWQgYnkgdXNlci4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkZWxldGluZyBpbnZvaWNlOicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3QuZXJyb3IoJ05vIHNlIHB1ZG8gZWxpbWluYXIgbGEgZmFjdHVyYS4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICByZWZyZXNoRGF0YSgpIHtcbiAgICAgICAgLy8gQ2VycmFyIGN1YWxxdWllciBvdmVybGF5IGFiaWVydG8gcHJpbWVyb1xuICAgICAgICAgICAgdGhpcy5zaG93RWRpdEludm9pY2UgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2hvd0RldGFpbHMgPSBmYWxzZTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gUGVxdWXDsW8gZGVsYXkgcGFyYSBhc2VndXJhciBxdWUgZWwgb3ZlcmxheSBzZSBjaWVycmUgYW50ZXMgZGUgcmVmcmVzY2FyXG4gICAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuJHJlZnMuaW52b2ljZVRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHJlZnMuaW52b2ljZVRhYmxlLnJlZnJlc2goKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hJbnZvaWNlcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBvbkRhdGFMb2FkZWQoaXRlbXMpIHtcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2RhdGEtbG9hZGVkJywgaXRlbXMpO1xuICAgICAgICB9LFxuICAgICAgICBvbkZpbHRlckNoYW5nZShmaWx0ZXJzKSB7XG4gICAgICAgICAgICB0aGlzLiRlbWl0KCdmaWx0ZXItY2hhbmdlJywgZmlsdGVycyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgaW52b2ljZXM6JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG4uaW52b2ljZS10YWJsZSB7XG4gICAgbWFyZ2luOiAxNnB4O1xufVxuXG4uc3RhdHVzLWNoaXAge1xuICAgIG1pbi13aWR0aDogMTIwcHg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5hY3Rpb25zLWNvbHVtbiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBnYXA6IDhweDtcbn1cblxuOmRlZXAoLnYtZGF0YS10YWJsZS1oZWFkZXIgdGgpIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHRleHQtdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuOmRlZXAoLnYtZGF0YS10YWJsZV9fdHI6aG92ZXIpIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xufVxuXG46ZGVlcCgudi1kYXRhLXRhYmxlKSB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcbn1cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cbiAgICAgICAgPGJyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IGp1c3RpZnktc3BhY2UtYmV0d2VlblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLWNoZWNrMi1jaXJjbGUgbWUtMiBmcy0zXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm10LTJcIj48Yj5SZXN1bWVuIGdlbmVyYWw8L2I+PC9oND5cbiAgICAgICAgICAgICAgICA8di1idG4gaWNvbiBzaXplPVwic21hbGxcIiB2YXJpYW50PVwidGV4dFwiIGNsYXNzPVwibXMtMlwiIDpsb2FkaW5nPVwibG9hZGluZ1N0YXRzXCIgQGNsaWNrPVwiZmV0Y2hTdGF0c1wiPlxuICAgICAgICAgICAgICAgICAgICA8di1pY29uPm1kaS1yZWZyZXNoPC92LWljb24+XG4gICAgICAgICAgICAgICAgPC92LWJ0bj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPHYtYnRuIGljb24gY2xhc3M9XCJidXR0b24tZG93bmxvYWRcIiBAY2xpY2s9XCJkb3dubG9hZEludm9pY2VzQ3N2XCI+XG4gICAgICAgICAgICAgICAgICAgIDx2LWljb24+bWRpLWRvd25sb2FkPC92LWljb24+XG4gICAgICAgICAgICAgICAgPC92LWJ0bj5cbiAgICAgICAgICAgICAgICA8di1zZWxlY3QgY2xhc3M9XCJ3LTc1XCIgbGFiZWw9XCJTZWxlY2Npb25hclwiIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvblwiIDppdGVtcz1cInNlbGVjdFwiIHN0eWxlPVwibWluLXdpZHRoOiAyMHZ3O1wiIGNsZWFyYWJsZSBkZWxldGFibGUtY2hpcHMgdmFyaWFudD1cIm91dGxpbmVkXCIgaGlkZS1kZXRhaWxzPjwvdi1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGJyPjxicj5cbiAgICAgICAgPHYtcm93IGNsYXNzPVwiY2VudGVyXCI+XG4gICAgICAgICAgICA8di1jYXJkIGNsYXNzPVwibS0xIHAtNCBjZW50ZXJcIiB3aWR0aD1cIjMwMFwiPlxuICAgICAgICAgICAgICAgIDxoMSBjbGFzcz1cIm14LTJcIj48aSBjbGFzcz1cImZzLTEgbXktaWNvbnMgYmkgYmktZmlsZS1lYXJtYXJrLWFycm93LXVwLWZpbGxcIj48L2k+PC9oMT5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8cD5QYXJhIGFkZWxhbnRhcjwvcD5cbiAgICAgICAgICAgICAgICAgICAgPGgyPjxiPnt7IGZvcm1hdEN1cnJlbmN5KHRvdGFsVG9BZHZhbmNlKSB9fTwvYj48L2gyPlxuICAgICAgICAgICAgICAgICAgICA8YiBjbGFzcz1cIm1pbmktY2FyZFwiPkVsZWdpYmxlczwvYj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdi1jYXJkPlxuXG4gICAgICAgICAgICA8di1jYXJkIGNsYXNzPVwibS0xIHAtNCBjZW50ZXJcIiB3aWR0aD1cIjMwMFwiPlxuICAgICAgICAgICAgICAgIDxoMSBjbGFzcz1cIm14LTJcIj48aSBjbGFzcz1cImZzLTEgbXktaWNvbnMgYmkgYmktZmlsZS1lYXJtYXJrLWNoZWNrLWZpbGxcIj48L2k+PC9oMT5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8cD5BZGVsYW50YWRhczwvcD5cbiAgICAgICAgICAgICAgICAgICAgPGgyPjxiPnt7IGZvcm1hdEN1cnJlbmN5KHRvdGFsQWR2YW5jZWQpIH19PC9iPjwvaDI+XG4gICAgICAgICAgICAgICAgICAgIDxiIGNsYXNzPVwibWluaS1jYXJkXCI+VG90YWwgYWRlbGFudGFkbzwvYj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdi1jYXJkPlxuXG4gICAgICAgICAgICA8di1jYXJkIGNsYXNzPVwibS0xIHAtNCBjZW50ZXJcIiB3aWR0aD1cIjMwMFwiPlxuICAgICAgICAgICAgICAgIDxoMSBjbGFzcz1cIm14LTJcIj48aSBjbGFzcz1cImZzLTEgbXktaWNvbnMgYmkgYmktY2FzaC1jb2luXCI+PC9pPjwvaDE+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPHA+RGVzY3VlbnRvczwvcD5cbiAgICAgICAgICAgICAgICAgICAgPGgyPjxiPnt7IGZvcm1hdEN1cnJlbmN5KHRvdGFsRGlzY291bnRzKSB9fTwvYj48L2gyPlxuICAgICAgICAgICAgICAgICAgICA8YiBjbGFzcz1cIm1pbmktY2FyZFwiPlRvdGFsIGFwbGljYWRvPC9iPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC92LWNhcmQ+XG5cbiAgICAgICAgICAgIDx2LWNhcmQgY2xhc3M9XCJtLTEgcC00IGNlbnRlclwiIHdpZHRoPVwiMzUwXCI+XG4gICAgICAgICAgICAgICAgPGgxIGNsYXNzPVwibXgtMlwiPjxpIGNsYXNzPVwiZnMtMSBteS1pY29ucyBiaSBiaS1jbG9jay1oaXN0b3J5XCI+PC9pPjwvaDE+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPHA+UGVuZGllbnRlcyBkZSBwYWdvPC9wPlxuICAgICAgICAgICAgICAgICAgICA8aDI+PGI+e3sgZm9ybWF0Q3VycmVuY3kodG90YWxQZW5kaW5nKSB9fTwvYj48L2gyPlxuICAgICAgICAgICAgICAgICAgICA8YiBjbGFzcz1cIm1pbmktY2FyZFwiPlBvciBjb2JyYXI8L2I+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3YtY2FyZD5cbiAgICAgICAgPC92LXJvdz5cblxuICAgICAgICA8SW52b2ljZVdpdGhGaWx0ZXJzXG4gICAgICAgICAgICByZWY9XCJpbnZvaWNlV2l0aEZpbHRlcnNcIlxuICAgICAgICAgICAgOmludm9pY2VzPVwiaW52b2ljZXNcIlxuICAgICAgICAgICAgOnZhbGlkYXRlSW52b2ljZU5vdz1cInZhbGlkYXRlSW52b2ljZU5vd1wiXG4gICAgICAgICAgICA6cmVmcmVzaEludm9pY2VzPVwicmVmcmVzaEludm9pY2VzXCJcbiAgICAgICAgICAgIDpkZWxldGVJbnZvaWNlPVwiZGVsZXRlSW52b2ljZVwiXG4gICAgICAgICAgICA6ZGF0ZUZpbHRlcnM9XCJkYXRlRmlsdGVyc1wiPlxuICAgICAgICA8L0ludm9pY2VXaXRoRmlsdGVycz5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgTW9yZUluZm8gZnJvbSAnLi4vY29tcG9uZW50cy9Nb3JlSW5mby52dWUnO1xuaW1wb3J0IE92ZXJsYXkgZnJvbSAnLi4vY29tcG9uZW50cy9PdmVybGF5LnZ1ZSc7XG5pbXBvcnQgSW52b2ljZVdpdGhGaWx0ZXJzIGZyb20gJy4uL2NvbXBvbmVudHMvSW52b2ljZVdpdGhGaWx0ZXJzLnZ1ZSdcbmltcG9ydCB7IHVzZUVudGl0eSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbXBvc2FibGVzL3VzZUVudGl0eSc7XG5pbXBvcnQgeyBJbnZvaWNlSW1wbCB9IGZyb20gJy4uL3NlcnZpY2VzL3R5cGVzL2ltcGxlbWVudGF0aW9ucyc7XG5pbXBvcnQgeyBjb21wdXRlZCwgcmVmLCBvbk1vdW50ZWQsIHdhdGNoIH0gZnJvbSAndnVlJztcbmltcG9ydCB7IHVzZUludm9pY2VDbGllbnRTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9pbnZvaWNlQ2xpZW50LmpzJztcbmltcG9ydCB7IHVzZUludm9pY2VTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9pbnZvaWNlLmpzJztcbmltcG9ydCB7IHVzZUdsb2JhbFV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvZ2xvYmFscyc7XG5pbXBvcnQgeyB1c2VBdXRoU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvYXV0aCc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBJbnZvaWNlV2l0aEZpbHRlcnMsXG4gICAgICAgIE1vcmVJbmZvLFxuICAgICAgICBPdmVybGF5LFxuICAgIH0sXG4gICAgbmFtZTogJ0dlbmVyYWxIb21lJyxcbiAgICBzZXR1cCgpIHtcbiAgICAgICAgY29uc3QgeyB2YWxpZGF0ZUludm9pY2VOb3cgfSA9IHVzZUludm9pY2VTdG9yZSgpO1xuICAgICAgICBjb25zdCBpbnZvaWNlQ2xpZW50U3RvcmUgPSB1c2VJbnZvaWNlQ2xpZW50U3RvcmUoKTtcbiAgICAgICAgY29uc3QgeyB0b2FzdCB9ID0gdXNlR2xvYmFsVXRpbHMoKTtcblxuICAgICAgICBjb25zdCB7IGVudGl0eSwgcmVmcmVzaEVudGl0aWVzOiByZWZyZXNoSW52b2ljZXMsIGRlbGV0ZUVudGl0eTogZGVsZXRlSW52b2ljZSB9ID0gdXNlRW50aXR5KEludm9pY2VJbXBsLCBpbnZvaWNlQ2xpZW50U3RvcmUpO1xuICAgICAgICBjb25zdCBpbnZvaWNlcyA9IGNvbXB1dGVkKCgpID0+IGludm9pY2VDbGllbnRTdG9yZS5nZXRJbnZvaWNlcyk7XG4gICAgICAgIGNvbnN0IGF1dGhTdG9yZSA9IHVzZUF1dGhTdG9yZSgpO1xuXG4gICAgICAgIC8vIFN0YXRzIHJlZnNcbiAgICAgICAgY29uc3QgbG9hZGluZ1N0YXRzID0gcmVmKGZhbHNlKTtcbiAgICAgICAgY29uc3QgdG90YWxUb0FkdmFuY2UgPSByZWYoMCk7XG4gICAgICAgIGNvbnN0IHRvdGFsQWR2YW5jZWQgPSByZWYoMCk7XG4gICAgICAgIGNvbnN0IHRvdGFsUGVuZGluZyA9IHJlZigwKTtcbiAgICAgICAgY29uc3QgdG90YWxEaXNjb3VudHMgPSByZWYoMCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gcmVmKFwiQcOxbyBlbiBjdXJzb1wiKTtcblxuICAgICAgICBjb25zdCBjYWxjdWxhdGVEYXRlUmFuZ2UgPSAob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICB0b2RheS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgIGxldCBzdGFydERhdGUsIGVuZERhdGU7XG5cbiAgICAgICAgICAgIHN3aXRjaCAob3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcIsOabHRpbW9zIDMgZMOtYXNcIjpcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlID0gbmV3IERhdGUodG9kYXkpO1xuICAgICAgICAgICAgICAgICAgICBzdGFydERhdGUuc2V0RGF0ZSh0b2RheS5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZSA9IG5ldyBEYXRlKHRvZGF5KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIsOabHRpbW9zIDcgZMOtYXNcIjpcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlID0gbmV3IERhdGUodG9kYXkpO1xuICAgICAgICAgICAgICAgICAgICBzdGFydERhdGUuc2V0RGF0ZSh0b2RheS5nZXREYXRlKCkgLSA2KTtcbiAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZSA9IG5ldyBEYXRlKHRvZGF5KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIsOabHRpbW9zIDE1IGTDrWFzXCI6XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHRvZGF5KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlLnNldERhdGUodG9kYXkuZ2V0RGF0ZSgpIC0gMTQpO1xuICAgICAgICAgICAgICAgICAgICBlbmREYXRlID0gbmV3IERhdGUodG9kYXkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiTWVzIGFjdHVhbFwiOlxuICAgICAgICAgICAgICAgICAgICBzdGFydERhdGUgPSBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZSA9IG5ldyBEYXRlKHRvZGF5KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIlRyaW1lc3RyZSBhY3R1YWxcIjpcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFF1YXJ0ZXIgPSBNYXRoLmZsb29yKHRvZGF5LmdldE1vbnRoKCkgLyAzKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlID0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgY3VycmVudFF1YXJ0ZXIgKiAzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZSA9IG5ldyBEYXRlKHRvZGF5KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIlNlbWVzdHJlIGFjdHVhbFwiOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U2VtZXN0ZXIgPSBNYXRoLmZsb29yKHRvZGF5LmdldE1vbnRoKCkgLyA2KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlID0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgY3VycmVudFNlbWVzdGVyICogNiwgMSk7XG4gICAgICAgICAgICAgICAgICAgIGVuZERhdGUgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJBw7FvIGVuIGN1cnNvXCI6XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHRvZGF5LmdldEZ1bGxZZWFyKCksIDAsIDEpO1xuICAgICAgICAgICAgICAgICAgICBlbmREYXRlID0gbmV3IERhdGUodG9kYXkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiUGVyw61vZG8gdG90YWxcIjpcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsgLy8gTm8gZmlsdGVyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEZvcm1hdCBhcyB5eXl5LW1tLWRkXG4gICAgICAgICAgICBjb25zdCBmb3JtYXREYXRlID0gKGRhdGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vbnRoID0gU3RyaW5nKGRhdGUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF5ID0gU3RyaW5nKGRhdGUuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgICAgICAgICAgIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX1gO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBhZnRlcjogZm9ybWF0RGF0ZShzdGFydERhdGUpLFxuICAgICAgICAgICAgICAgIGJlZm9yZTogZm9ybWF0RGF0ZShlbmREYXRlKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBDb21wdXRlZCBwcm9wZXJ0eSBmb3IgZGF0ZSBmaWx0ZXJzIHRvIHBhc3MgdG8gdGFibGVcbiAgICAgICAgY29uc3QgZGF0ZUZpbHRlcnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRlUmFuZ2UgPSBjYWxjdWxhdGVEYXRlUmFuZ2Uoc2VsZWN0ZWRPcHRpb24udmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFkYXRlUmFuZ2UpIHJldHVybiB7fTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgJ2Jyb2FkY2FzdERhdGVbYWZ0ZXJdJzogZGF0ZVJhbmdlLmFmdGVyLFxuICAgICAgICAgICAgICAgICdicm9hZGNhc3REYXRlW2JlZm9yZV0nOiBkYXRlUmFuZ2UuYmVmb3JlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBmZXRjaFN0YXRzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGxvYWRpbmdTdGF0cy52YWx1ZSkgcmV0dXJuO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBsb2FkaW5nU3RhdHMudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VySWQgPSBhdXRoU3RvcmUudXNlci5pZDtcbiAgICAgICAgICAgICAgICBsZXQgdXJsID0gYC9hcGkvdXNlcnMvJHt1c2VySWR9L2ludm9pY2VzL2NsaWVudC1zdGF0c2A7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZVJhbmdlID0gY2FsY3VsYXRlRGF0ZVJhbmdlKHNlbGVjdGVkT3B0aW9uLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZVJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHVybCArPSBgP2Jyb2FkY2FzdERhdGVbYWZ0ZXJdPSR7ZGF0ZVJhbmdlLmFmdGVyfSZicm9hZGNhc3REYXRlW2JlZm9yZV09JHtkYXRlUmFuZ2UuYmVmb3JlfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KHVybCk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdG90YWxUb0FkdmFuY2UudmFsdWUgPSByZXNwb25zZS5kYXRhLnRvdGFsVG9BZHZhbmNlIHx8IDA7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsQWR2YW5jZWQudmFsdWUgPSByZXNwb25zZS5kYXRhLnRvdGFsQWR2YW5jZWQgfHwgMDtcbiAgICAgICAgICAgICAgICAgICAgdG90YWxQZW5kaW5nLnZhbHVlID0gcmVzcG9uc2UuZGF0YS50b3RhbFBlbmRpbmcgfHwgMDtcbiAgICAgICAgICAgICAgICAgICAgdG90YWxEaXNjb3VudHMudmFsdWUgPSByZXNwb25zZS5kYXRhLnRvdGFsRGlzY291bnRzIHx8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBzdGF0czonLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgdG9hc3QuZXJyb3IoJ0Vycm9yIGFsIGFjdHVhbGl6YXIgZXN0YWTDrXN0aWNhcycpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBsb2FkaW5nU3RhdHMudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBXYXRjaCBmb3IgY2hhbmdlcyBpbiBzZWxlY3RlZE9wdGlvblxuICAgICAgICB3YXRjaChzZWxlY3RlZE9wdGlvbiwgKCkgPT4ge1xuICAgICAgICAgICAgZmV0Y2hTdGF0cygpO1xuICAgICAgICB9KTtcblxuICAgICAgICBvbk1vdW50ZWQoKCkgPT4ge1xuICAgICAgICAgICAgZmV0Y2hTdGF0cygpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW52b2ljZXMsXG4gICAgICAgICAgICBpbnZvaWNlQ2xpZW50U3RvcmUsXG4gICAgICAgICAgICB2YWxpZGF0ZUludm9pY2VOb3csXG4gICAgICAgICAgICByZWZyZXNoSW52b2ljZXMsXG4gICAgICAgICAgICBkZWxldGVJbnZvaWNlLFxuICAgICAgICAgICAgdG9hc3QsXG4gICAgICAgICAgICB0b3RhbFRvQWR2YW5jZSxcbiAgICAgICAgICAgIHRvdGFsQWR2YW5jZWQsXG4gICAgICAgICAgICB0b3RhbFBlbmRpbmcsXG4gICAgICAgICAgICB0b3RhbERpc2NvdW50cyxcbiAgICAgICAgICAgIGxvYWRpbmdTdGF0cyxcbiAgICAgICAgICAgIGZldGNoU3RhdHMsXG4gICAgICAgICAgICBzZWxlY3RlZE9wdGlvbixcbiAgICAgICAgICAgIGRhdGVGaWx0ZXJzXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBkYXRhKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2VsZWN0OiBbXCLDmmx0aW1vcyAzIGTDrWFzXCIsIFwiw5psdGltb3MgNyBkw61hc1wiLCBcIsOabHRpbW9zIDE1IGTDrWFzXCIsIFwiTWVzIGFjdHVhbFwiLCBcIlRyaW1lc3RyZSBhY3R1YWxcIiwgXCJTZW1lc3RyZSBhY3R1YWxcIiwgXCJBw7FvIGVuIGN1cnNvXCIsIFwiUGVyw61vZG8gdG90YWxcIl0sXG4gICAgICAgIH0gICBcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgLy8gTcOpdG9kbyBwYXJhIGZvcm1hdGVhciB1bmEgZmVjaGEgKHVzYWRvIHBhcmEgZWwgQ1NWKVxuICAgICAgICBmb3JtYXREYXRlKGRhdGUpIHtcbiAgICAgICAgICAgIGlmICghZGF0ZSkgcmV0dXJuICcnO1xuICAgICAgICAgICAgY29uc3QgZCA9IG5ldyBEYXRlKGRhdGUpO1xuICAgICAgICAgICAgcmV0dXJuIGAke2QuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX0vJHsoZC5nZXRNb250aCgpICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfS8ke2QuZ2V0RnVsbFllYXIoKX1gO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIE3DqXRvZG8gcGFyYSBmb3JtYXRlYXIgdW4gbsO6bWVybyBjb21vIG1vbmVkYSAoY29ycmVnaWRvIHBhcmEgbWFuZWphciBkaWZlcmVudGVzIHRpcG9zKVxuICAgICAgICBmb3JtYXRDdXJyZW5jeShhbW91bnQpIHtcbiAgICAgICAgICAgIGlmIChhbW91bnQgPT09IG51bGwgfHwgYW1vdW50ID09PSB1bmRlZmluZWQgfHwgYW1vdW50ID09PSAnJykgcmV0dXJuICcnO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBDb252ZXJ0aXIgYSBuw7ptZXJvIHNpIGVzIHN0cmluZ1xuICAgICAgICAgICAgY29uc3QgbnVtQW1vdW50ID0gdHlwZW9mIGFtb3VudCA9PT0gJ3N0cmluZycgPyBwYXJzZUZsb2F0KGFtb3VudC5yZXBsYWNlKCcsJywgJy4nKSkgOiBhbW91bnQ7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFZlcmlmaWNhciBzaSBlcyB1biBuw7ptZXJvIHbDoWxpZG8gZGVzcHXDqXMgZGUgbGEgY29udmVyc2nDs25cbiAgICAgICAgICAgIGlmIChpc05hTihudW1BbW91bnQpKSByZXR1cm4gJyc7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEZvcm1hdGVhciBjb24gMiBkZWNpbWFsZXMgeSB1c2FyIGNvbWEgY29tbyBzZXBhcmFkb3IgZGVjaW1hbFxuICAgICAgICAgICAgcmV0dXJuIG51bUFtb3VudC50b0ZpeGVkKDIpLnJlcGxhY2UoJy4nLCAnLCcpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIE3DqXRvZG8gcGFyYSBjb252ZXJ0aXIgZWwgZXN0YWRvIG51bcOpcmljbyBhIHRleHRvXG4gICAgICAgIGdldFN0YXR1c1RleHQoc3RhdHVzQ29kZSkge1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzTWFwID0ge1xuICAgICAgICAgICAgICAgIDA6ICdQZW5kaWVudGUnLFxuICAgICAgICAgICAgICAgIDE6ICdWYWxpZGFkYScsXG4gICAgICAgICAgICAgICAgMjogJ0VsZWdpYmxlJyxcbiAgICAgICAgICAgICAgICAzOiAnTm8gZWxlZ2libGUnLFxuICAgICAgICAgICAgICAgIDQ6ICdBZGVsYW50YWRhJyxcbiAgICAgICAgICAgICAgICA1OiAnRmluYWxpemFkYSBzaW4gYWRlbGFudGFyJyxcbiAgICAgICAgICAgICAgICA2OiAnUGFyYSB2YWxpZGFyJyxcbiAgICAgICAgICAgICAgICA3OiAnRmluYWxpemFkYSBkZXNkZSBhZGVsYW50YXInXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHN0YXR1c01hcFtzdGF0dXNDb2RlXSB8fCAnRGVzY29ub2NpZG8nO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIE3DqXRvZG8gcGFyYSBkZXNjYXJnYXIgbGFzIGZhY3R1cmFzIGNvbW8gQ1NWXG4gICAgICAgIGRvd25sb2FkSW52b2ljZXNDc3YoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIE9idGVuZXIgbGFzIGZhY3R1cmFzIGFjdHVhbGVzIChwb2Ryw61hIHNlciBkZWwgY29tcG9uZW50ZSBoaWpvIG8gZGVsIHN0b3JlKVxuICAgICAgICAgICAgICAgIGxldCBpbnZvaWNlc1RvRXhwb3J0ID0gW107XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuJHJlZnMuaW52b2ljZVdpdGhGaWx0ZXJzICYmIHRoaXMuJHJlZnMuaW52b2ljZVdpdGhGaWx0ZXJzLiRyZWZzLmludm9pY2VUYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJbnRlbnRhciBvYnRlbmVyIGZhY3R1cmFzIGZpbHRyYWRhcyBzaSBlc3TDoW4gZGlzcG9uaWJsZXNcbiAgICAgICAgICAgICAgICAgICAgaW52b2ljZXNUb0V4cG9ydCA9IHRoaXMuJHJlZnMuaW52b2ljZVdpdGhGaWx0ZXJzLiRyZWZzLmludm9pY2VUYWJsZS5pdGVtcyB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhgRmFjdHVyYXMgZGVzZGUgbGEgdGFibGE6JywgaW52b2ljZXNUb0V4cG9ydCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2FzbyBmYWxsYmFjazogdXNhciB0b2RhcyBsYXMgZmFjdHVyYXMgZGVsIHN0b3JlXG4gICAgICAgICAgICAgICAgICAgIGludm9pY2VzVG9FeHBvcnQgPSB0aGlzLmludm9pY2VzO1xuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGBGYWN0dXJhcyBkZXNkZSBlbCBzdG9yZTonLCBpbnZvaWNlc1RvRXhwb3J0KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWludm9pY2VzVG9FeHBvcnQgfHwgaW52b2ljZXNUb0V4cG9ydC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5pbmZvKCdObyBoYXkgZmFjdHVyYXMgcGFyYSBleHBvcnRhcicpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gRGVmaW5pciBsYXMgY2FiZWNlcmFzIGRlbCBDU1ZcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gW1xuICAgICAgICAgICAgICAgICAgICAnTsKwIEZhY3R1cmEnLFxuICAgICAgICAgICAgICAgICAgICAnUHJvdmVlZG9yJyxcbiAgICAgICAgICAgICAgICAgICAgJ05JRicsXG4gICAgICAgICAgICAgICAgICAgICdGZWNoYSBFbWlzacOzbicsXG4gICAgICAgICAgICAgICAgICAgICdGZWNoYSBWZW5jaW1pZW50bycsXG4gICAgICAgICAgICAgICAgICAgICdEw61hcyBwYXJhIFZlbmNlcicsXG4gICAgICAgICAgICAgICAgICAgICdUb3RhbCcsXG4gICAgICAgICAgICAgICAgICAgICdCYXNlIEltcG9uaWJsZScsXG4gICAgICAgICAgICAgICAgICAgICdJbXB1ZXN0b3MnLFxuICAgICAgICAgICAgICAgICAgICAnRGVzY3VlbnRvJyxcbiAgICAgICAgICAgICAgICAgICAgJ0VzdGFkbycsXG4gICAgICAgICAgICAgICAgICAgICdDb25jZXB0bydcbiAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgLy8gQ3JlYXIgbGFzIGZpbGFzIGRlbCBDU1ZcbiAgICAgICAgICAgICAgICBjb25zdCBjc3ZDb250ZW50ID0gaW52b2ljZXNUb0V4cG9ydC5tYXAoaW52b2ljZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZvaWNlLmludm9pY2VOdW1iZXIgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZvaWNlLnByb3ZpZGVyU29jaWFsRGVub21pbmF0aW9uIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW52b2ljZS5wcm92aWRlclZhdE51bWJlciB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0RGF0ZShpbnZvaWNlLmJyb2FkY2FzdERhdGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtYXREYXRlKGludm9pY2UuZXhwaXJhdGlvbkRhdGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW52b2ljZS5kYXlzVG9FeHBpcmUgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1hdEN1cnJlbmN5KGludm9pY2UudG90YWwpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtYXRDdXJyZW5jeShpbnZvaWNlLnRheEJhc2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtYXRDdXJyZW5jeShpbnZvaWNlLnRheCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1hdEN1cnJlbmN5KGludm9pY2UuZGlzY291bnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTdGF0dXNUZXh0KGludm9pY2Uuc3RhdHVzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGludm9pY2UuY29uY2VwdCB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICBdLmpvaW4oJzsnKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8vIFVuaXIgY2FiZWNlcmFzIHkgZmlsYXNcbiAgICAgICAgICAgICAgICBjb25zdCBjc3YgPSBbXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnMuam9pbignOycpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jc3ZDb250ZW50XG4gICAgICAgICAgICAgICAgXS5qb2luKCdcXG4nKTtcblxuICAgICAgICAgICAgICAgIC8vIENyZWFyIHVuIEJsb2IgeSBnZW5lcmFyIFVSTCBwYXJhIGRlc2NhcmdhXG4gICAgICAgICAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtcIlxcdWZlZmZcIiArIGNzdl0sIHsgdHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7JyB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBDcmVhciBlbGVtZW50byBhIHBhcmEgZGVzY2FyZ2FyXG4gICAgICAgICAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHVybCk7XG4gICAgICAgICAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgYGZhY3R1cmFzXyR7dGhpcy5zZWxlY3RlZE9wdGlvbi5yZXBsYWNlKC9cXHMvZywgJ18nKS50b0xvd2VyQ2FzZSgpfV8ke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCl9LmNzdmApO1xuICAgICAgICAgICAgICAgIGxpbmsuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIEHDsWFkaXIgYSBET00sIGhhY2VyIGNsaWMgeSBsaW1waWFyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgICAgICAgICAgICBsaW5rLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoJ0FyY2hpdm8gQ1NWIGRlc2NhcmdhZG8gY29ycmVjdGFtZW50ZScpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBhbCBnZW5lcmFyIENTVjonLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5lcnJvcignRXJyb3IgYWwgZ2VuZXJhciBlbCBhcmNoaXZvIENTVjogJyArIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cbi5teS1pY29ucyB7XG4gICAgY29sb3I6ICNhOGNmOTU7XG59XG5cbi5taW5pLWNhcmQge1xuICAgIGNvbG9yOiAjNjNhODg0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlNWYzZGY7XG4gICAgcGFkZGluZzogN3B4O1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbn1cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cbiAgICAgICAgPHYtcm93IGNsYXNzPVwiY2VudGVyIGp1c3RpZnktc3BhY2UtYmV0d2VlbiBteS0zXCI+XG4gICAgICAgICAgICA8di1yb3cgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VudGVyIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmcy0xIGJpIGJpLXBlb3BsZSBteC0yXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8aDQ+PGI+UHJvdmVlZG9yZXMgfDwvYj48L2g0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHYtc3dpdGNoIGNvbG9yPVwic3VjY2Vzc1wiIHZhbHVlPVwic3VjY2Vzc1wiIGNsYXNzPVwibXgtMVwiIGluc2V0Pjwvdi1zd2l0Y2g+XG4gICAgICAgICAgICAgICAgICAgIDxNb3JlSW5mbyB0aXRsZT1cIlJlZ2lzdHJvIGxpYnJlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW1tZXJSZWY9XCJmcmVlLXJlZ2lzdHJhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0b3I9XCJwYXJlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9Nb3JlSW5mbz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8di1zd2l0Y2ggY29sb3I9XCJzdWNjZXNzXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiYXV0aFN0b3JlLnVzZXIuYWxsb3dQcm92aWRlcnNUb0VkaXREYXRhXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICBAY2hhbmdlPVwidXBkYXRlUHJvdmlkZXJQZXJtaXNzaW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXgtMVwiIGluc2V0Pjwvdi1zd2l0Y2g+XG4gICAgICAgICAgICAgICAgICAgIDxNb3JlSW5mbyB0aXRsZT1cIk1vZGlmaWNhciBkYXRvc1wiXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2YXRvcj1cInBhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW1tZXJSZWY9XCJkYXRhLW1vZGlmaWVkXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L01vcmVJbmZvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC92LXJvdz5cblxuICAgICAgICAgICAgPHYtcm93IGNsYXNzPVwiY2VudGVyIG0tMiBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICAgICAgICAgICAgPHYtYnRuIGljb24gY2xhc3M9XCJidXR0b24tZG93bmxvYWQgbXgtMlwiIEBjbGljaz1cImRvd25sb2FkUHJvdmlkZXJzQ3N2XCI+XG4gICAgICAgICAgICAgICAgICAgIDx2LWljb24+bWRpLWRvd25sb2FkPC92LWljb24+XG4gICAgICAgICAgICAgICAgPC92LWJ0bj5cblxuICAgICAgICAgICAgICAgIDx2LWJ0biBpY29uIGNsYXNzPVwiYnV0dG9uLWV4dHJhIG14LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1saW5rXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8Q29ubmVjdFNFPjwvQ29ubmVjdFNFPlxuICAgICAgICAgICAgICAgIDwvdi1idG4+XG5cbiAgICAgICAgICAgICAgICA8di1idG4gaWNvbiBjbGFzcz1cImJ1dHRvbi1leHRyYSBteC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtYXJyb3ctdXAtZnJvbS1icmFja2V0XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8T3ZlcmxheSB0aXRsZT1cIkltcG9ydGFyIFByb3ZlZWRvcmVzXCIgYWN0aXZhdG9yPVwicGFyZW50XCIgcHJvZ3JhbW1lclJlZj1cInRleHQtcHJvdmlkZXJzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI2RlZmF1bHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVhYmxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0UHJvdmlkZXJzPjwvVGV4dFByb3ZpZGVycz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvT3ZlcmxheT5cbiAgICAgICAgICAgICAgICA8L3YtYnRuPlxuXG4gICAgICAgICAgICAgICAgPHYtYnRuIGljb24gY2xhc3M9XCJidXR0b24tZXh0cmEgbXgtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8di1pY29uPm1kaS1wbHVzPC92LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxPdmVybGF5XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkHDsWFkaXIgcHJvdmVlZG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2YXRvcj1cInBhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtbWVyUmVmPVwiY3JlYXRlLXByb3ZpZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJzaG93Q3JlYXRlUHJvdmlkZXJPdmVybGF5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBzYXZlZD1cInJlZnJlc2hEYXRhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI2RlZmF1bHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENyZWF0ZVByb3ZpZGVyPjwvQ3JlYXRlUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L092ZXJsYXk+XG4gICAgICAgICAgICAgICAgPC92LWJ0bj5cbiAgICAgICAgICAgIDwvdi1yb3c+XG4gICAgICAgIDwvdi1yb3c+XG5cbiAgICAgICAgPHYtcm93PlxuICAgICAgICAgICAgPHYtY29sPlxuICAgICAgICAgICAgICAgIDx2LWNhcmQ+XG4gICAgICAgICAgICAgICAgICAgIDx2LWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5Qcm92ZWVkb3JlczwvYj5cbiAgICAgICAgICAgICAgICAgICAgPC92LWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RHluYW1pY0ZpbHRlclRhYmxlQ2xpZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmPVwicHJvdmlkZXJzVGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDphcGktZW5kcG9pbnQ9XCJhcGlFbmRwb2ludFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmZpbHRlci1jb25maWc9XCJmaWx0ZXJDb25maWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpoZWFkZXJzPVwiaGVhZGVyc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmFjdGlvbnM9XCJ0YWJsZUFjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBkYXRhLWxvYWRlZD1cIm9uRGF0YUxvYWRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGVycm9yPVwib25FcnJvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDYXRlZ29yaWVzIGNvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI2l0ZW0udXNlckNhdGVnb3JpZXM9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1jaGlwIHYtZm9yPVwiY2F0ZWdvcnkgaW4gaXRlbS51c2VyQ2F0ZWdvcmllc1wiIDprZXk9XCJjYXRlZ29yeS5pZFwiIGNsYXNzPVwibWEtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBzaXplPVwic21hbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNhdGVnb3J5Lm5hbWUgPz8gJy0nIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0R5bmFtaWNGaWx0ZXJUYWJsZUNsaWVudD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDwvdi1jYXJkPlxuICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgPC92LXJvdz5cblxuICAgICAgICA8IS0tIEVkaXQgUHJvdmlkZXIgT3ZlcmxheSAtLT5cbiAgICAgICAgPGRpdiB2LWlmPVwic2VsZWN0ZWRQcm92aWRlclwiPlxuICAgICAgICAgICAgPE92ZXJsYXkgdi1tb2RlbD1cInNob3dFZGl0T3ZlcmxheVwiIHRpdGxlPVwiRWRpdGFyIHByb3ZlZWRvclwiXG4gICAgICAgICAgICBwcm9ncmFtbWVyUmVmPVwiY3JlYXRlLXByb3ZpZGVyXCJcbiAgICAgICAgICAgIEBzYXZlZD1cInJlZnJlc2hEYXRhXCI+XG4gICAgICAgICAgICAgICAgPHRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgICAgICAgICAgICA8Q3JlYXRlUHJvdmlkZXIgOmV4aXN0aW5nUHJvdmlkZXI9XCJzZWxlY3RlZFByb3ZpZGVyXCIgLz5cbiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgPC9PdmVybGF5PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cblxuPHNjcmlwdD5cbmltcG9ydCBDcmVhdGVQcm92aWRlciBmcm9tICcuLi9jb21wb25lbnRzL0NyZWF0ZVByb3ZpZGVyLnZ1ZSc7XG5pbXBvcnQgTW9yZUluZm8gZnJvbSAnLi4vY29tcG9uZW50cy9Nb3JlSW5mby52dWUnO1xuaW1wb3J0IE92ZXJsYXkgZnJvbSAnLi4vY29tcG9uZW50cy9PdmVybGF5LnZ1ZSc7XG5pbXBvcnQgVGV4dFByb3ZpZGVycyBmcm9tICcuLi9jb21wb25lbnRzL1RleHRQcm92aWRlcnMudnVlJztcbmltcG9ydCBEeW5hbWljRmlsdGVyVGFibGVDbGllbnQgZnJvbSAnLi4vY29tcG9uZW50cy9EeW5hbWljRmlsdGVyVGFibGVDbGllbnQudnVlJztcbmltcG9ydCB7IHVzZVByb3ZpZGVyU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvcHJvdmlkZXInO1xuaW1wb3J0IHsgdXNlQmFua0FjY291bnRTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9iYW5rQWNjb3VudCc7XG5pbXBvcnQgeyB1c2VFbnRpdHkgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb21wb3NhYmxlcy91c2VFbnRpdHknO1xuaW1wb3J0IHsgUHJvdmlkZXJJbXBsIH0gZnJvbSAnLi4vc2VydmljZXMvdHlwZXMvaW1wbGVtZW50YXRpb25zJztcbmltcG9ydCB7IHVzZUdsb2JhbFV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvZ2xvYmFscyc7XG5pbXBvcnQgeyBjb21wdXRlZCwgcmVmLCBvbk1vdW50ZWQgfSBmcm9tICd2dWUnO1xuaW1wb3J0IENvbm5lY3RTRSBmcm9tICcuLi9jb21wb25lbnRzL0Nvbm5lY3RTRS52dWUnO1xuXG5pbXBvcnQgeyB1c2VBdXRoU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvYXV0aCc7XG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ltcGxlbWVudGF0aW9ucy91c2VyL3VzZXJTZXJ2aWNlJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiAnUHJvdmlkZXJzJyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIENyZWF0ZVByb3ZpZGVyLFxuICAgICAgICBNb3JlSW5mbyxcbiAgICAgICAgT3ZlcmxheSxcbiAgICAgICAgRHluYW1pY0ZpbHRlclRhYmxlQ2xpZW50LFxuICAgICAgICBUZXh0UHJvdmlkZXJzLFxuICAgICAgICBDb25uZWN0U0VcbiAgICB9LFxuICAgIHNldHVwKCkge1xuICAgICAgICBjb25zdCBlbWFpbFJ1bGVzID0gW1xuICAgICAgICAgICAgdiA9PiAhIXYgfHwgJ0VsIGNvcnJlbyBlcyByZXF1ZXJpZG8nLFxuICAgICAgICAgICAgdiA9PiAvLitALitcXC4uKy8udGVzdCh2KSB8fCAnSW5ncmVzZSB1biBjb3JyZW8gdsOhbGlkbydcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgeyBzd2FsLCB0b2FzdCB9ID0gdXNlR2xvYmFsVXRpbHMoKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXJTdG9yZSA9IHVzZVByb3ZpZGVyU3RvcmUoKTtcbiAgICAgICAgY29uc3QgYmFua0FjY291bnRTdG9yZSA9IHVzZUJhbmtBY2NvdW50U3RvcmUoKTtcbiAgICAgICAgY29uc3QgYXV0aFN0b3JlID0gdXNlQXV0aFN0b3JlKCk7XG4gICAgICAgIGNvbnN0IHVzZXJTZXJ2aWNlID0gbmV3IFVzZXJTZXJ2aWNlKCk7XG5cbiAgICAgICAgY29uc3QgeyBlbnRpdHksIHJlZnJlc2hFbnRpdGllczogcmVmcmVzaFByb3ZpZGVycywgZGVsZXRlRW50aXR5OiBkZWxldGVQcm92aWRlciB9ID0gdXNlRW50aXR5KFByb3ZpZGVySW1wbCwgcHJvdmlkZXJTdG9yZSk7XG5cblxuICAgICAgICAvLyBDYXJnYXIgY3VlbnRhcyBiYW5jYXJpYXMgYWwgbW9udGFyIGVsIGNvbXBvbmVudGVcbiAgICAgICAgLy8gRXN0byBlcyBuZWNlc2FyaW8gcGFyYSBldml0YXIgZXJyb3JlcyBhbCBhYnJpciBlbCBtb2RhbCBDcmVhdGVQcm92aWRlclxuICAgICAgICAvLyBDYXJnYXIgY3VlbnRhcyBiYW5jYXJpYXMgYWwgbW9udGFyIGVsIGNvbXBvbmVudGVcbiAgICAgICAgLy8gRXN0byBlcyBuZWNlc2FyaW8gcGFyYSBldml0YXIgZXJyb3JlcyBhbCBhYnJpciBlbCBtb2RhbCBDcmVhdGVQcm92aWRlclxuICAgICAgICBvbk1vdW50ZWQoKCkgPT4ge1xuICAgICAgICAgICAgYmFua0FjY291bnRTdG9yZS5mZXRjaEFsbCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB1cGRhdGVQcm92aWRlclBlcm1pc3Npb24gPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucGF0Y2goYC9hcGkvdXNlcnMvJHthdXRoU3RvcmUudXNlci5pZH1gLCB7XG4gICAgICAgICAgICAgICAgICAgIGFsbG93UHJvdmlkZXJzVG9FZGl0RGF0YTogYXV0aFN0b3JlLnVzZXIuYWxsb3dQcm92aWRlcnNUb0VkaXREYXRhXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL21lcmdlLXBhdGNoK2pzb24nXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHVzZXIgaW4gdGhlIHN0b3JlIHdpdGggdGhlIHJlc3BvbnNlIGRhdGFcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGF1dGhTdG9yZS51c2VyLCByZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdG9hc3QoJ1Blcm1pc29zIGFjdHVhbGl6YWRvcyBjb3JyZWN0YW1lbnRlJywgJ3N1Y2Nlc3MnKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgdG9hc3QoJ0Vycm9yIGFsIGFjdHVhbGl6YXIgcGVybWlzb3MnLCAnZXJyb3InKTtcbiAgICAgICAgICAgICAgICAvLyBSZXZlcnQgdGhlIHRvZ2dsZSBvbiBlcnJvclxuICAgICAgICAgICAgICAgIGF1dGhTdG9yZS51c2VyLmFsbG93UHJvdmlkZXJzVG9FZGl0RGF0YSA9ICFhdXRoU3RvcmUudXNlci5hbGxvd1Byb3ZpZGVyc1RvRWRpdERhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXV0aFN0b3JlLFxuICAgICAgICAgICAgdXBkYXRlUHJvdmlkZXJQZXJtaXNzaW9uLFxuICAgICAgICAgICAgZW1haWxSdWxlcyxcbiAgICAgICAgICAgIHN3YWwsXG4gICAgICAgICAgICB0b2FzdCxcbiAgICAgICAgICAgIHJlZnJlc2hQcm92aWRlcnMsXG4gICAgICAgICAgICBkZWxldGVQcm92aWRlcixcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIGRhdGEoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzZWxlY3RlZFByb3ZpZGVyOiBudWxsLFxuICAgICAgICAgICAgc2hvd0VkaXRPdmVybGF5OiBmYWxzZSxcbiAgICAgICAgICAgIHNob3dDcmVhdGVQcm92aWRlck92ZXJsYXk6IGZhbHNlLFxuXG4gICAgICAgICAgICAvLyBBUEkgZW5kcG9pbnRcbiAgICAgICAgICAgIGFwaUVuZHBvaW50OiAnL3VzZXJzL3t1c2VySWR9L3Byb3ZpZGVycycsXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEZpbHRlciBjb25maWd1cmF0aW9uXG4gICAgICAgICAgICBmaWx0ZXJDb25maWc6IFtcbiAgICAgICAgICAgICAgICB7IHR5cGU6ICd0ZXh0JywgZmllbGQ6ICdzb2NpYWxEZW5vbWluYXRpb24nLCBsYWJlbDogJ05vbWJyZSBQcm92ZWVkb3InLCBpY29uOiAnbWRpLW1hZ25pZnknLCB3aWR0aDogMyB9LFxuICAgICAgICAgICAgICAgIHsgdHlwZTogJ3RleHQnLCBmaWVsZDogJ2NvbXBhbnlOaWYnLCBsYWJlbDogJ05JRicsIGljb246ICdtZGktbWFnbmlmeScsIHdpZHRoOiAzIH0sXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAndGV4dCcsIGZpZWxkOiAnY2F0ZWdvcmllc0Fzc2lnbmVkLm5hbWUnLCBsYWJlbDogJ0NhdGVnb3LDrWFzJywgaWNvbjogJ21kaS1tYWduaWZ5Jywgd2lkdGg6IDMgfSxcbiAgICAgICAgICAgICAgICAvKiB7IHR5cGU6ICd0ZXh0JywgZmllbGQ6ICdwcm92aWRlclN0YXR1cycsIGxhYmVsOiAnRXN0YWRvJywgaWNvbjogJ21kaS1tYWduaWZ5Jywgd2lkdGg6IDMgfSxcbiAgICAgICAgICAgICAgICB7IHR5cGU6ICd0ZXh0JywgZmllbGQ6ICdwYXltZW50TWV0aG9kJywgbGFiZWw6ICdGb3JtYSBEZSBQYWdvJywgaWNvbjogJ21kaS1tYWduaWZ5Jywgd2lkdGg6IDMgfSwgKi9cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFRhYmxlIGhlYWRlcnNcbiAgICAgICAgICAgIGhlYWRlcnM6IFtcbiAgICAgICAgICAgICAgICB7IHRpdGxlOiAnUHJvdmVlZG9yJywga2V5OiAnc29jaWFsRGVub21pbmF0aW9uJywgc29ydGFibGU6IHRydWUsIGFsaWduOiAnc3RhcnQnIH0sXG4gICAgICAgICAgICAgICAgeyB0aXRsZTogJ05JRicsIGtleTogJ2NvbXBhbnlOaWYnLCBzb3J0YWJsZTogdHJ1ZSwgYWxpZ246ICdzdGFydCcgfSxcbiAgICAgICAgICAgICAgICB7IHRpdGxlOiAnQ2l1ZGFkJywga2V5OiAnY2l0eScsIHNvcnRhYmxlOiB0cnVlLCBhbGlnbjogJ3N0YXJ0JyB9LFxuICAgICAgICAgICAgICAgIHsgdGl0bGU6ICdFbWFpbCcsIGtleTogJ2NvbnRhY3RQZXJzb25FbWFpbCcsIHNvcnRhYmxlOiB0cnVlLCBhbGlnbjogJ3N0YXJ0JyB9LFxuICAgICAgICAgICAgICAgIHsgdGl0bGU6ICdDYXRlZ29yw61hcycsIGtleTogJ3VzZXJDYXRlZ29yaWVzJywgc29ydGFibGU6IGZhbHNlLCBhbGlnbjogJ3N0YXJ0JyB9LFxuICAgICAgICAgICAgICAgIHsgdGl0bGU6ICdBY2Npb25lcycsIGtleTogJ2FjdGlvbnMnLCBzb3J0YWJsZTogZmFsc2UsIGFsaWduOiAnY2VudGVyJyB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBUYWJsZSBhY3Rpb25zXG4gICAgICAgICAgICB0YWJsZUFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGljb246ICdtZGktbGluaycsXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXI6IHRoaXMuc2hvd0FjY2Vzc0xpbmssXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnaW5mbydcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ21kaS1wZW5jaWwnLFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyOiB0aGlzLmVkaXRQcm92aWRlcixcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdwcmltYXJ5J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpY29uOiAnbWRpLWRlbGV0ZScsXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXI6IHRoaXMuY29uZmlybURlbGV0ZVByb3ZpZGVyLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ2Vycm9yJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbm5lY3RGb3JtOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogJycsXG4gICAgICAgICAgICAgICAgc3VybmFtZTogJycsXG4gICAgICAgICAgICAgICAgZW1haWw6ICcnLFxuICAgICAgICAgICAgICAgIHBob25lOiAnJyxcbiAgICAgICAgICAgICAgICBzb2Z0d2FyZTogJycsXG4gICAgICAgICAgICAgICAgY29tbWVudHM6ICcnXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIC8vIE3DqXRvZG8gcGFyYSBkZXNjYXJnYXIgbG9zIHByb3ZlZWRvcmVzIGNvbW8gQ1NWXG4gICAgICAgIGRvd25sb2FkUHJvdmlkZXJzQ3N2KCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBPYnRlbmVyIGxvcyBwcm92ZWVkb3JlcyBhY3R1YWxlc1xuICAgICAgICAgICAgICAgIGxldCBwcm92aWRlcnNUb0V4cG9ydCA9IFtdO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLiRyZWZzLnByb3ZpZGVyc1RhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE9idGVuZXIgbG9zIHByb3ZlZWRvcmVzIGZpbHRyYWRvcyBkZSBsYSB0YWJsYVxuICAgICAgICAgICAgICAgICAgICBwcm92aWRlcnNUb0V4cG9ydCA9IHRoaXMuJHJlZnMucHJvdmlkZXJzVGFibGUuaXRlbXMgfHwgW107XG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coYFByb3ZlZWRvcmVzIGRlc2RlIGxhIHRhYmxhOicsIHByb3ZpZGVyc1RvRXhwb3J0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBTaSBubyBzZSBlbmN1ZW50cmEgbGEgcmVmZXJlbmNpYSBhIGxhIHRhYmxhLCBtb3N0cmFyIHVuIGVycm9yXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3QuZXJyb3IoJ05vIHNlIHB1ZWRlbiBvYnRlbmVyIGxvcyBwcm92ZWVkb3JlcyBhY3R1YWxlcycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFwcm92aWRlcnNUb0V4cG9ydCB8fCBwcm92aWRlcnNUb0V4cG9ydC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5pbmZvKCdObyBoYXkgcHJvdmVlZG9yZXMgcGFyYSBleHBvcnRhcicpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gRGVmaW5pciBsYXMgY2FiZWNlcmFzIGRlbCBDU1ZcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gW1xuICAgICAgICAgICAgICAgICAgICAnUHJvdmVlZG9yJyxcbiAgICAgICAgICAgICAgICAgICAgJ05JRicsXG4gICAgICAgICAgICAgICAgICAgICdDaXVkYWQnLFxuICAgICAgICAgICAgICAgICAgICAnRW1haWwnLFxuICAgICAgICAgICAgICAgICAgICAnVGVsw6lmb25vJyxcbiAgICAgICAgICAgICAgICAgICAgJ0RpcmVjY2nDs24nLFxuICAgICAgICAgICAgICAgICAgICAnQ8OzZGlnbyBQb3N0YWwnLFxuICAgICAgICAgICAgICAgICAgICAnUGVyc29uYSBkZSBDb250YWN0bycsXG4gICAgICAgICAgICAgICAgICAgICdDYXRlZ29yw61hcydcbiAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgLy8gQ3JlYXIgbGFzIGZpbGFzIGRlbCBDU1ZcbiAgICAgICAgICAgICAgICBjb25zdCBjc3ZDb250ZW50ID0gcHJvdmlkZXJzVG9FeHBvcnQubWFwKHByb3ZpZGVyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gT2J0ZW5lciBjYXRlZ29yw61hcyBjb21vIHRleHRvXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBwcm92aWRlci51c2VyQ2F0ZWdvcmllcyAmJiBwcm92aWRlci51c2VyQ2F0ZWdvcmllcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHByb3ZpZGVyLnVzZXJDYXRlZ29yaWVzLm1hcChjYXQgPT4gY2F0Lm5hbWUpLmpvaW4oJywgJylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXIuc29jaWFsRGVub21pbmF0aW9uIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXIuY29tcGFueU5pZiB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyLmNpdHkgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlci5jb250YWN0UGVyc29uRW1haWwgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlci5jb250YWN0UGVyc29uUGhvbmUgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlci5hZGRyZXNzIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXIucG9zdGFsQ29kZSB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyLmNvbnRhY3RQZXJzb25OYW1lIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllc1xuICAgICAgICAgICAgICAgICAgICBdLmpvaW4oJzsnKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8vIFVuaXIgY2FiZWNlcmFzIHkgZmlsYXNcbiAgICAgICAgICAgICAgICBjb25zdCBjc3YgPSBbXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnMuam9pbignOycpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jc3ZDb250ZW50XG4gICAgICAgICAgICAgICAgXS5qb2luKCdcXG4nKTtcblxuICAgICAgICAgICAgICAgIC8vIENyZWFyIHVuIEJsb2IgeSBnZW5lcmFyIFVSTCBwYXJhIGRlc2NhcmdhXG4gICAgICAgICAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtcIlxcdWZlZmZcIiArIGNzdl0sIHsgdHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7JyB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBDcmVhciBlbGVtZW50byBhIHBhcmEgZGVzY2FyZ2FyXG4gICAgICAgICAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHVybCk7XG4gICAgICAgICAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgYHByb3ZlZWRvcmVzXyR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKX0uY3N2YCk7XG4gICAgICAgICAgICAgICAgbGluay5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gQcOxYWRpciBhIERPTSwgaGFjZXIgY2xpYyB5IGxpbXBpYXJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICAgICAgICAgIGxpbmsuY2xpY2soKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2VzcygnQXJjaGl2byBDU1YgZGUgcHJvdmVlZG9yZXMgZGVzY2FyZ2FkbyBjb3JyZWN0YW1lbnRlJyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFsIGdlbmVyYXIgQ1NWIGRlIHByb3ZlZWRvcmVzOicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LmVycm9yKCdFcnJvciBhbCBnZW5lcmFyIGVsIGFyY2hpdm8gQ1NWOiAnICsgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICBzaG93QWNjZXNzTGluayhpdGVtKSB7XG4gICAgICAgICAgICB0aGlzLnN3YWwuZmlyZSh7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdMaW5rIGRlIGluaWNpbyBkZWwgcHJvdmVlZG9yJyxcbiAgICAgICAgICAgICAgICBodG1sOiBgPHNtYWxsPkVsIGxpbmsgZGUgPGI+XCJSZWdpc3Ryb1wiL1wiaW5pY2lvIGRlIHNlc2lvblwiPC9iPiBkZWwgcHJvdmVlZG9yIGVzOiA8YSB0YXJnZXQ9J19ibGFuaycgaHJlZj0nJHtpdGVtLnByb3ZpZGVyTGlua30nPiR7aXRlbS5wcm92aWRlckxpbmt9PC9hPjwvc21hbGw+YCxcbiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogXCJBY2VwdG9cIixcbiAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiBcIlZvbHZlclwiLFxuICAgICAgICAgICAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXG4gICAgICAgICAgICAgICAgaWNvbjogXCJ3YXJuaW5nXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgZWRpdFByb3ZpZGVyKGl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm92aWRlciA9IGl0ZW07XG4gICAgICAgICAgICB0aGlzLnNob3dFZGl0T3ZlcmxheSA9IHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICBjb25maXJtRGVsZXRlUHJvdmlkZXIoaXRlbSkge1xuICAgICAgICAgICAgdGhpcy5kZWxldGVQcm92aWRlcihpdGVtKS50aGVuKCgpID0+IHRoaXMucmVmcmVzaERhdGEoKSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICByZWZyZXNoRGF0YSgpIHtcbiAgICAgICAgICAgIC8vIENlcnJhciBjdWFscXVpZXIgb3ZlcmxheSBhYmllcnRvXG4gICAgICAgICAgICB0aGlzLnNob3dDcmVhdGVQcm92aWRlck92ZXJsYXkgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2hvd0VkaXRPdmVybGF5ID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIEVzcGVyYXIgYSBxdWUgVnVlIGFjdHVhbGljZSBlbCBET00geSByZWZyZXNjYXIgbGEgdGFibGFcbiAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4kcmVmcy5wcm92aWRlcnNUYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRyZWZzLnByb3ZpZGVyc1RhYmxlLnJlZnJlc2goKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIG9uRGF0YUxvYWRlZChkYXRhKSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGBMb2FkZWQgJHtkYXRhLmxlbmd0aH0gcHJvdmlkZXJzYCk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICBvbkVycm9yKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0LmVycm9yKCdFcnJvciBhbCBjYXJnYXIgcHJvdmVlZG9yZXM6ICcgKyBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG59O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG4uYnV0dG9uLWV4dHJhIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjQzYjQ0O1xufVxuXG46ZGVlcCgudi1kYXRhLXRhYmxlLWhlYWRlciB0aCkge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgdGV4dC10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG46ZGVlcCgudi1kYXRhLXRhYmxlX190cjpob3Zlcikge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG59XG5cbjpkZWVwKC52LWRhdGEtdGFibGUpIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xufVxuXG4udGFibGUtd3JhcHBlciB7XG4gIHdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdy14OiBhdXRvO1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG59XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgICA8di1mb3JtPlxuICAgICAgICA8YnI+XG4gICAgICAgIDx2LWNhcmQ+XG4gICAgICAgICAgICA8di1jb2w+XG4gICAgICAgICAgICAgICAgPHYtcm93PlxuICAgICAgICAgICAgICAgICAgICA8di1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+SGlzdG9yaWFsIGRlIGNhbWJpb3MgZGUgZXN0YWRvPC9iPlxuICAgICAgICAgICAgICAgICAgICA8L3YtY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8L3Ytcm93PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBEeW5hbWljIEZpbHRlciBUYWJsZSAtLT5cbiAgICAgICAgICAgICAgICA8di1kYXRhLXRhYmxlXG4gICAgICAgICAgICAgICAgICAgIDpoZWFkZXJzPVwiaGVhZGVyc1wiXG4gICAgICAgICAgICAgICAgICAgIDppdGVtcz1cInN0YXRlSGlzdG9yeVwiXG4gICAgICAgICAgICAgICAgICAgIDpsb2FkaW5nPVwibG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgIDppdGVtcy1wZXItcGFnZT1cIjEwXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlbGV2YXRpb24tMVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIEZvcm1hdCBkYXRlIGFuZCB0aW1lIC0tPlxuICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI2l0ZW0uY3JlYXRlZEF0PVwieyBpdGVtIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdERhdGVUaW1lKGl0ZW0uY3JlYXRlZEF0KSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gT2xkIHN0YXRlIGNvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlICNpdGVtLm9sZFN0YXRlPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTdGF0dXNDaGlwIDpzdGF0dXM9XCJpdGVtLm9sZFN0YXRlXCI+PC9TdGF0dXNDaGlwPlxuICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gTmV3IHN0YXRlIGNvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlICNpdGVtLm5ld1N0YXRlPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTdGF0dXNDaGlwIDpzdGF0dXM9XCJpdGVtLm5ld1N0YXRlXCI+PC9TdGF0dXNDaGlwPlxuICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gQ2hhbmdlIHR5cGUgY29sdW1uIC0tPlxuICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI2l0ZW0uY2hhbmdlVHlwZT1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8di1jaGlwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNvbG9yPVwiaXRlbS5jaGFuZ2VUeXBlID09PSAnYXV0b21hdGljJyA/ICdpbmZvJyA6ICd3YXJuaW5nJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWNvbG9yPVwid2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uY2hhbmdlVHlwZSA9PT0gJ2F1dG9tYXRpYycgPyAnQXV0b23DoXRpY28nIDogJ01hbnVhbCcgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1jaGlwPlxuICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gSW52b2ljZSBpbmZvIGNvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlICNpdGVtLmludm9pY2U9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjxiPnt7IGl0ZW0uaW52b2ljZS5pbnZvaWNlTnVtYmVyIHx8ICdOL0EnIH19PC9iPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNhcHRpb25cIj57eyBpdGVtLmludm9pY2UucHJvdmlkZXJTb2NpYWxEZW5vbWluYXRpb24gfHwgJ04vQScgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBBY3Rpb25zIGNvbHVtbiAoSGlzdMOzcmljbykgLS0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5hY3Rpb25zPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LWJ0blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImluZm9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPVwidmlld0ludm9pY2VIaXN0b3J5KGl0ZW0uaW52b2ljZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiSGlzdG9yaWFsIGRlIGVzdGFkb3MgZGUgbGEgZmFjdHVyYVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtaWNvbj5tZGktaGlzdG9yeTwvdi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC92LWJ0bj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gTm8gZGF0YSBtZXNzYWdlIC0tPlxuICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI25vLWRhdGE+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcGEtNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPk5vIGhheSBkYXRvcyBkZSBoaXN0b3JpYWwgcGFyYSBsYSBmZWNoYSBzZWxlY2Npb25hZGEuPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1jYXB0aW9uXCI+UG9yIGZhdm9yIHNlbGVjY2lvbmUgb3RyYSBmZWNoYSBvIHZlcmlmaXF1ZSBxdWUgaGF5YSBhY3RpdmlkYWQuPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC92LWRhdGEtdGFibGU+XG4gICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICA8L3YtY2FyZD5cbiAgICA8L3YtZm9ybT5cbiAgICBcbiAgICA8IS0tIElOVk9JQ0UgSElTVE9SWSBPVkVSTEFZIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJoaXN0b3J5LW92ZXJsYXlcIj5cbiAgICAgICAgPE92ZXJsYXkgdi1tb2RlbD1cInNob3dIaXN0b3J5XCIgdGl0bGU9XCJIaXN0b3JpYWwgZGUgZXN0YWRvc1wiIHByb2dyYW1tZXJSZWY9XCJpbnZvaWNlLWhpc3RvcnlcIiBhY3RpdmF0b3I9XCJwYXJlbnRcIj5cbiAgICAgICAgICAgIDx0ZW1wbGF0ZSAjZGVmYXVsdD5cbiAgICAgICAgICAgICAgICA8SW52b2ljZVN0YXRlSGlzdG9yeU92ZXJsYXkgXG4gICAgICAgICAgICAgICAgICAgIHYtaWY9XCJzZWxlY3RlZEludm9pY2VcIiBcbiAgICAgICAgICAgICAgICAgICAgOmludm9pY2U9XCJzZWxlY3RlZEludm9pY2VcIlxuICAgICAgICAgICAgICAgICAgICBAY2xvc2U9XCJzaG93SGlzdG9yeSA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPC9PdmVybGF5PlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBTdGF0dXNDaGlwIGZyb20gJy4uL2NvbXBvbmVudHMvU3RhdHVzQ2hpcC52dWUnO1xuaW1wb3J0IE92ZXJsYXkgZnJvbSAnLi4vY29tcG9uZW50cy9PdmVybGF5LnZ1ZSc7XG5pbXBvcnQgSW52b2ljZVN0YXRlSGlzdG9yeU92ZXJsYXkgZnJvbSAnLi4vY29tcG9uZW50cy9JbnZvaWNlU3RhdGVIaXN0b3J5T3ZlcmxheS52dWUnO1xuaW1wb3J0IHsgdXNlR2xvYmFsVXRpbHMgfSBmcm9tICcuLi91dGlscy9nbG9iYWxzJztcbmltcG9ydCB7IHVzZUF1dGhTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9hdXRoJztcbmltcG9ydCB7IHJlZiB9IGZyb20gJ3Z1ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIFN0YXR1c0NoaXAsXG4gICAgICAgIE92ZXJsYXksXG4gICAgICAgIEludm9pY2VTdGF0ZUhpc3RvcnlPdmVybGF5XG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgICBzZWxlY3RlZERhdGU6IHtcbiAgICAgICAgICAgIHR5cGU6IERhdGUsXG4gICAgICAgICAgICBkZWZhdWx0OiAoKSA9PiBuZXcgRGF0ZSgpXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHNldHVwKCkge1xuICAgICAgICBjb25zdCB7IHRvYXN0IH0gPSB1c2VHbG9iYWxVdGlscygpO1xuICAgICAgICBjb25zdCBhdXRoU3RvcmUgPSB1c2VBdXRoU3RvcmUoKTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0b2FzdCxcbiAgICAgICAgICAgIGF1dGhTdG9yZVxuICAgICAgICB9O1xuICAgIH0sXG4gICAgZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8vIEFQSSBlbmRwb2ludFxuICAgICAgICAgICAgYXBpRW5kcG9pbnQ6IGAvYXBpL3VzZXJzL3t1c2VySWR9L2hpc3RvcnlgLFxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBUYWJsZSBoZWFkZXJzIGZvciBzdGF0ZSBoaXN0b3J5XG4gICAgICAgICAgICBoZWFkZXJzOiBbXG4gICAgICAgICAgICAgICAgeyB0aXRsZTogJ0ZlY2hhIHkgSG9yYScsIGtleTogJ2NyZWF0ZWRBdCcsIHNvcnRhYmxlOiB0cnVlLCBhbGlnbjogJ3N0YXJ0JyB9LFxuICAgICAgICAgICAgICAgIHsgdGl0bGU6ICdGYWN0dXJhJywga2V5OiAnaW52b2ljZScsIHNvcnRhYmxlOiBmYWxzZSwgYWxpZ246ICdzdGFydCcgfSxcbiAgICAgICAgICAgICAgICB7IHRpdGxlOiAnRXN0YWRvIEFudGVyaW9yJywga2V5OiAnb2xkU3RhdGUnLCBzb3J0YWJsZTogdHJ1ZSwgYWxpZ246ICdjZW50ZXInIH0sXG4gICAgICAgICAgICAgICAgeyB0aXRsZTogJ051ZXZvIEVzdGFkbycsIGtleTogJ25ld1N0YXRlJywgc29ydGFibGU6IHRydWUsIGFsaWduOiAnY2VudGVyJyB9LFxuICAgICAgICAgICAgICAgIHsgdGl0bGU6ICdUaXBvIGRlIENhbWJpbycsIGtleTogJ2NoYW5nZVR5cGUnLCBzb3J0YWJsZTogdHJ1ZSwgYWxpZ246ICdjZW50ZXInIH0sXG4gICAgICAgICAgICAgICAgeyB0aXRsZTogJ0hpc3TDs3JpY28nLCBrZXk6ICdhY3Rpb25zJywgc29ydGFibGU6IGZhbHNlLCBhbGlnbjogJ2NlbnRlcicgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gU3RhdGUgaGlzdG9yeSBkYXRhXG4gICAgICAgICAgICBzdGF0ZUhpc3Rvcnk6IFtdLFxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBMb2FkaW5nIHN0YXRlXG4gICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gT3ZlcmxheSBzdGF0ZVxuICAgICAgICAgICAgc2hvd0hpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAgICAgc2VsZWN0ZWRJbnZvaWNlOiBudWxsLFxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBTdGF0cyBkYXRhXG4gICAgICAgICAgICBzdGF0czoge1xuICAgICAgICAgICAgICAgIGFuYWx5emVkSW52b2ljZXM6IDAsXG4gICAgICAgICAgICAgICAgYW5hbHl6ZWRUb2RheTogMCxcbiAgICAgICAgICAgICAgICBhZHZhbmNlZEludm9pY2VzOiAwLFxuICAgICAgICAgICAgICAgIGFkdmFuY2VkQW1vdW50OiAwLFxuICAgICAgICAgICAgICAgIGFkdmFuY2VkVG9kYXk6IDAsXG4gICAgICAgICAgICAgICAgZXhwaXJlZEludm9pY2VzOiAwLFxuICAgICAgICAgICAgICAgIGV4cGlyZWRBbW91bnQ6IDAsXG4gICAgICAgICAgICAgICAgZXhwaXJlZFRvZGF5OiAwXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSxcbiAgICB3YXRjaDoge1xuICAgICAgICBzZWxlY3RlZERhdGU6IHtcbiAgICAgICAgICAgIGhhbmRsZXIobmV3RGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hIaXN0b3J5RGF0YShuZXdEYXRlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbW1lZGlhdGU6IHRydWVcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgICAvLyBGb3JtYXQgZGF0ZSB0byBsb2NhbGUgc3RyaW5nXG4gICAgICAgIGZvcm1hdERhdGUoZGF0ZSkge1xuICAgICAgICAgICAgaWYgKCFkYXRlKSByZXR1cm4gJy0tJztcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlKS50b0xvY2FsZURhdGVTdHJpbmcoJ2VzLUVTJywge1xuICAgICAgICAgICAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgICAgICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgICAgICAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgICAgICAgICAgIHRpbWVab25lOiAnVVRDJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvLyBGb3JtYXQgZGF0ZSBhbmQgdGltZVxuICAgICAgICBmb3JtYXREYXRlVGltZShkYXRlVGltZSkge1xuICAgICAgICAgICAgaWYgKCFkYXRlVGltZSkgcmV0dXJuICctLSc7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShkYXRlVGltZSk7XG4gICAgICAgICAgICByZXR1cm4gYCR7ZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoJ2VzLUVTJywge1xuICAgICAgICAgICAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgICAgICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgICAgICAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgICAgICAgICAgIHRpbWVab25lOiAnVVRDJ1xuICAgICAgICAgICAgfSl9ICR7ZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcoJ2VzLUVTJywge1xuICAgICAgICAgICAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgICAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICAgICAgICBzZWNvbmQ6ICcyLWRpZ2l0JyxcbiAgICAgICAgICAgICAgICB0aW1lWm9uZTogJ1VUQydcbiAgICAgICAgICAgIH0pfWA7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvLyBGb3JtYXQgY3VycmVuY3lcbiAgICAgICAgZm9ybWF0Q3VycmVuY3koYW1vdW50KSB7XG4gICAgICAgICAgICBpZiAoIWFtb3VudCkgcmV0dXJuICfigqwwLjAwJztcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQoJ2VzLUVTJywge1xuICAgICAgICAgICAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxuICAgICAgICAgICAgICAgIGN1cnJlbmN5OiAnRVVSJ1xuICAgICAgICAgICAgfSkuZm9ybWF0KGFtb3VudCk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvLyBFeHRyYWN0IHBsYWluIHRleHQgZnJvbSBzdGF0dXMgdmFsdWVcbiAgICAgICAgZ2V0U3RhdHVzVGV4dChzdGF0dXNWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzTWFwID0ge1xuICAgICAgICAgICAgICAgIDA6ICdQZW5kaWVudGUnLFxuICAgICAgICAgICAgICAgIDE6ICdWYWxpZGFkYScsXG4gICAgICAgICAgICAgICAgMjogJ0VsZWdpYmxlJyxcbiAgICAgICAgICAgICAgICAzOiAnTm8gZWxlZ2libGUnLFxuICAgICAgICAgICAgICAgIDQ6ICdBZGVsYW50YWRhJyxcbiAgICAgICAgICAgICAgICA1OiAnRmluYWxpemFkYSBzaW4gYWRlbGFudGFyJyxcbiAgICAgICAgICAgICAgICA2OiAnUGFyYSB2YWxpZGFyJyxcbiAgICAgICAgICAgICAgICA3OiAnRmluYWxpemFkYSBkZXNkZSBhZGVsYW50YXInXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHN0YXR1c01hcFtzdGF0dXNWYWx1ZV0gfHwgJ0Rlc2Nvbm9jaWRvJztcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8vIEZldGNoIGhpc3RvcnkgZGF0YSBmcm9tIHRoZSBBUElcbiAgICAgICAgZmV0Y2hIaXN0b3J5RGF0YShkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBGb3JtYXQgZGF0ZSBmb3IgQVBJIHJlcXVlc3RcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBkYXRlIGluc3RhbmNlb2YgRGF0ZSA/IGRhdGUudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdIDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgdXNlcklkIHBsYWNlaG9sZGVyIHdpdGggYWN0dWFsIHVzZXIgSURcbiAgICAgICAgICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGlFbmRwb2ludC5yZXBsYWNlKCd7dXNlcklkfScsIHRoaXMuYXV0aFN0b3JlLnVzZXIuaWQpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBBZGQgZGF0ZSBwYXJhbWV0ZXJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IGAke2VuZHBvaW50fT9kYXRlPSR7Zm9ybWF0dGVkRGF0ZX1gO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBGZXRjaCBkYXRhXG4gICAgICAgICAgICBmZXRjaCh1cmwpXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUhpc3RvcnkgPSBkYXRhLml0ZW1zIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRzID0gZGF0YS5zdGF0cyB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIEVtaXQgc3RhdHMgdXBkYXRlIGV2ZW50XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3N0YXRzLXVwZGF0ZWQnLCB0aGlzLnN0YXRzKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIEVtaXQgaGFzRGF0YSBldmVudFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdoYXMtZGF0YScsIHRoaXMuc3RhdGVIaXN0b3J5Lmxlbmd0aCA+IDApO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgaGlzdG9yeSBkYXRhOicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5lcnJvcihgRXJyb3IgYWwgY2FyZ2FyIGVsIGhpc3RvcmlhbDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlSGlzdG9yeSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgLy8gRW1pdCBoYXMtZGF0YSBldmVudCB3aXRoIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2hhcy1kYXRhJywgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8vIFJlZnJlc2ggZGF0YSBmb3IgY3VycmVudCBkYXRlXG4gICAgICAgIHJlZnJlc2hEYXRhKCkge1xuICAgICAgICAgICAgdGhpcy5mZXRjaEhpc3RvcnlEYXRhKHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8vIEV4cG9ydCBkYXRhIHRvIENTVlxuICAgICAgICBleHBvcnRUb0NTVigpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgZGF0YSB0byBleHBvcnRcbiAgICAgICAgICAgIGlmICghdGhpcy5zdGF0ZUhpc3RvcnkgfHwgdGhpcy5zdGF0ZUhpc3RvcnkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC53YXJuaW5nKCdObyBoYXkgZGF0b3MgcGFyYSBleHBvcnRhcicpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBDU1YgaGVhZGVyc1xuICAgICAgICAgICAgICAgIGNvbnN0IGNzdkhlYWRlcnMgPSB0aGlzLmhlYWRlcnMubWFwKGhlYWRlciA9PiBoZWFkZXIudGl0bGUpLmpvaW4oJywnKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBDU1Ygcm93c1xuICAgICAgICAgICAgICAgIGNvbnN0IGNzdlJvd3MgPSB0aGlzLnN0YXRlSGlzdG9yeS5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBgXCIke3RoaXMuZm9ybWF0RGF0ZVRpbWUoaXRlbS5jcmVhdGVkQXQpfVwiYCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGBcIiR7aXRlbS5pbnZvaWNlID8gaXRlbS5pbnZvaWNlLmludm9pY2VOdW1iZXIgOiAnTi9BJ30gLSAke2l0ZW0uaW52b2ljZSA/IGl0ZW0uaW52b2ljZS5wcm92aWRlclNvY2lhbERlbm9taW5hdGlvbiA6ICdOL0EnfVwiYCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGBcIiR7dGhpcy5nZXRTdGF0dXNUZXh0KGl0ZW0ub2xkU3RhdGUpfVwiYCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGBcIiR7dGhpcy5nZXRTdGF0dXNUZXh0KGl0ZW0ubmV3U3RhdGUpfVwiYCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGBcIiR7aXRlbS5jaGFuZ2VUeXBlID09PSAnYXV0b21hdGljJyA/ICdBdXRvbcOhdGljbycgOiAnTWFudWFsJ31cImBcbiAgICAgICAgICAgICAgICAgICAgXS5qb2luKCcsJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gQ29tYmluZSBoZWFkZXJzIGFuZCByb3dzXG4gICAgICAgICAgICAgICAgY29uc3QgY3N2Q29udGVudCA9IFtjc3ZIZWFkZXJzLCAuLi5jc3ZSb3dzXS5qb2luKCdcXG4nKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBCbG9iIHdpdGggdGhlIENTViBjb250ZW50XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtjc3ZDb250ZW50XSwgeyB0eXBlOiAndGV4dC9jc3Y7Y2hhcnNldD11dGYtODsnIH0pO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGRvd25sb2FkIGxpbmtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIFVSTCBmb3IgdGhlIEJsb2JcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIFNldHVwIHRoZSBkb3dubG9hZCBsaW5rXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZVN0ciA9IHRoaXMuc2VsZWN0ZWREYXRlIGluc3RhbmNlb2YgRGF0ZSA/IHRoaXMuc2VsZWN0ZWREYXRlLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xuICAgICAgICAgICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgdXJsKTtcbiAgICAgICAgICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBgaGlzdG9yaWFsLWNhbWJpb3MtZXN0YWRvLSR7ZGF0ZVN0cn0uY3N2YCk7XG4gICAgICAgICAgICAgICAgbGluay5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBsaW5rIHRvIHRoZSBET01cbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIENsaWNrIHRoZSBsaW5rIHRvIHRyaWdnZXIgdGhlIGRvd25sb2FkXG4gICAgICAgICAgICAgICAgbGluay5jbGljaygpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIENsZWFuIHVwXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcbiAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKCdIaXN0b3JpYWwgZXhwb3J0YWRvIGNvcnJlY3RhbWVudGUnKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZXhwb3J0aW5nIHRvIENTVjonLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5lcnJvcignRXJyb3IgYWwgZXhwb3J0YXIgaGlzdG9yaWFsOiAnICsgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvLyBWaWV3IGludm9pY2UgaGlzdG9yeVxuICAgICAgICB2aWV3SW52b2ljZUhpc3RvcnkoaW52b2ljZSkge1xuICAgICAgICAgICAgaWYgKCFpbnZvaWNlIHx8ICFpbnZvaWNlLmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5lcnJvcignTm8gc2UgcHVlZGUgbW9zdHJhciBlbCBoaXN0b3JpYWw6IERhdG9zIGRlIGZhY3R1cmEgaW5jb21wbGV0b3MnKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbnZvaWNlID0gaW52b2ljZTtcbiAgICAgICAgICAgIHRoaXMuc2hvd0hpc3RvcnkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG46ZGVlcCgudi1kYXRhLXRhYmxlLWhlYWRlciB0aCkge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgdGV4dC10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG46ZGVlcCgudi1kYXRhLXRhYmxlX190cjpob3Zlcikge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG59XG5cbjpkZWVwKC52LWRhdGEtdGFibGUpIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xufVxuPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXdyYXBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1zcGFjZS1iZXR3ZWVuIGZsZXgtd3JhcFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMiBjZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1iLTIgZnMtMyBiaSBiaS1jbG9jay1oaXN0b3J5XCI+PC9pPlxuICAgICAgICAgICAgICAgIDxoND48YiBjbGFzcz1cIm14LTJcIj5IaXN0b3JpYWwgZGUgQ2FtYmlvcyBkZSBFc3RhZG88L2I+PC9oND5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDx2LWJ0biBcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtLTMgcC0zIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgYnRuIHRleHQtd2hpdGUgYWRkLXRlbXBsYXRlcy1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBAY2xpY2s9XCJkb3dubG9hZENTVlwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZzLTMgdGV4dC13aGl0ZSBiaSBiaS1kb3dubG9hZFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXdoaXRlIG0tMVwiPkRlc2NhcmdhciBoaXN0b3JpYWwgZGVsIGTDrWE8L3A+XG4gICAgICAgICAgICAgICAgPC92LWJ0bj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHYtY2FyZCBjbGFzcz1cImRhdGUtcGlja2VyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LWNhcmQtdGl0bGU+U2VsZWNjaW9uYSB1bmEgZmVjaGE8L3YtY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LWRhdGUtcGlja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdy1hZGphY2VudC1tb250aHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bWF4PVwibmV3IERhdGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmFsbG93ZWQtZGF0ZXM9XCJpc0FsbG93ZWREYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpsb2FkaW5nPVwibG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQHVwZGF0ZTptb2RlbC12YWx1ZT1cIm9uRGF0ZUNoYW5nZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC92LWRhdGUtcGlja2VyPlxuICAgICAgICAgICAgICAgICAgICA8L3YtY2FyZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIj5cbiAgICAgICAgICAgICAgICAgICAgPHYtY2FyZCBjbGFzcz1cImNlbnRlciB0b3BzLWNhcmRzIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMT48aSBjbGFzcz1cIm15LWljb25zIGJpIGJpLWNsaXBib2FyZDItZGF0YS1maWxsXCI+PC9pPjwvaDE+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPkZhY3R1cmFzIGFuYWxpemFkYXM8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPjxiPnt7IHN0YXRzLmFuYWx5emVkSW52b2ljZXMgfX08L2I+PC9oMj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YiBjbGFzcz1cIm1pbmktY2FyZFwiPit7eyBzdGF0cy5hbmFseXplZFRvZGF5IH19IGhveTwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3YtY2FyZD5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDx2LWNhcmQgY2xhc3M9XCJjZW50ZXIgdG9wcy1jYXJkcyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDE+PGkgY2xhc3M9XCJteS1pY29ucyBiaSBiaS1maWxlLWVhcm1hcmstY2hlY2stZmlsbFwiPjwvaT48L2gxPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5GYWN0dXJhcyBhZGVsYW50YWRhczwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+PGI+e3sgZm9ybWF0Q3VycmVuY3koc3RhdHMuYWR2YW5jZWRBbW91bnQpIH19PC9iPjwvaDI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGIgY2xhc3M9XCJtaW5pLWNhcmRcIj4re3sgZm9ybWF0Q3VycmVuY3koc3RhdHMuYWR2YW5jZWRUb2RheSkgfX0gaG95PC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdi1jYXJkPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPHYtY2FyZCBjbGFzcz1cImNlbnRlciB0b3BzLWNhcmRzIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMT48aSBjbGFzcz1cIm15LWljb25zIGJpIGJpLWNsb2NrLWhpc3RvcnlcIj48L2k+PC9oMT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+RmFjdHVyYXMgdmVuY2lkYXM8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPjxiPnt7IGZvcm1hdEN1cnJlbmN5KHN0YXRzLmV4cGlyZWRBbW91bnQpIH19PC9iPjwvaDI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGIgY2xhc3M9XCJtaW5pLWNhcmRcIj4re3sgZm9ybWF0Q3VycmVuY3koc3RhdHMuZXhwaXJlZFRvZGF5KSB9fSBob3k8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC92LWNhcmQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxicj5cbiAgICAgICAgXG4gICAgICAgIDx2LXJvdyBjbGFzcz1cInctMTAwIG0tNFwiIHYtaWY9XCIhaGFzRGF0YVwiPlxuICAgICAgICAgICAgPHYtYWxlcnQgdHlwZT1cImluZm9cIiBpY29uPVwibWRpLWluZm9ybWF0aW9uXCI+XG4gICAgICAgICAgICAgICAgTm8gaGF5IGhpc3RvcmlhbCBkaXNwb25pYmxlIHBhcmEgbGEgZmVjaGEgc2VsZWNjaW9uYWRhLlxuICAgICAgICAgICAgPC92LWFsZXJ0PlxuICAgICAgICA8L3Ytcm93PlxuICAgICAgICBcbiAgICAgICAgPHYtY29sIGNvbHM9XCIxMlwiPlxuICAgICAgICAgICAgPEhpc3RvcnlDb21wb25lbnQgXG4gICAgICAgICAgICAgICAgcmVmPVwiaGlzdG9yeUNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICAgOnNlbGVjdGVkLWRhdGU9XCJzZWxlY3RlZERhdGVPYmpcIiBcbiAgICAgICAgICAgICAgICBAc3RhdHMtdXBkYXRlZD1cInVwZGF0ZVN0YXRzXCJcbiAgICAgICAgICAgICAgICBAaGFzLWRhdGE9XCJ1cGRhdGVIYXNEYXRhXCJcbiAgICAgICAgICAgID48L0hpc3RvcnlDb21wb25lbnQ+XG4gICAgICAgIDwvdi1jb2w+XG4gICAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IEhpc3RvcnlDb21wb25lbnQgZnJvbSAnLi4vY29tcG9uZW50cy9IaXN0b3J5Q29tcG9uZW50LnZ1ZSc7XG5pbXBvcnQgeyB1c2VBdXRoU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvYXV0aCc7XG5pbXBvcnQgeyB1c2VEYXRlIH0gZnJvbSAndnVldGlmeSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIEhpc3RvcnlDb21wb25lbnRcbiAgICB9LFxuICAgIFxuICAgIHNldHVwKCkge1xuICAgICAgICBjb25zdCBhdXRoU3RvcmUgPSB1c2VBdXRoU3RvcmUoKTtcbiAgICAgICAgY29uc3QgZGF0ZUFkYXB0ZXIgPSB1c2VEYXRlKCk7XG4gICAgICAgIHJldHVybiB7IGF1dGhTdG9yZSwgZGF0ZUFkYXB0ZXIgfTtcbiAgICB9LFxuICAgIFxuICAgIG5hbWU6ICdIaXN0b3J5JyxcbiAgICBcbiAgICBkYXRhKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGFzRGF0YTogZmFsc2UsXG4gICAgICAgICAgICBzZWxlY3RlZERhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICBldmVudERhdGVzOiBbXSxcbiAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgc3RhdHM6IHtcbiAgICAgICAgICAgICAgICBhbmFseXplZEludm9pY2VzOiAwLFxuICAgICAgICAgICAgICAgIGFuYWx5emVkVG9kYXk6IDAsXG4gICAgICAgICAgICAgICAgYWR2YW5jZWRJbnZvaWNlczogMCxcbiAgICAgICAgICAgICAgICBhZHZhbmNlZEFtb3VudDogMCxcbiAgICAgICAgICAgICAgICBhZHZhbmNlZFRvZGF5OiAwLFxuICAgICAgICAgICAgICAgIGV4cGlyZWRJbnZvaWNlczogMCxcbiAgICAgICAgICAgICAgICBleHBpcmVkQW1vdW50OiAwLFxuICAgICAgICAgICAgICAgIGV4cGlyZWRUb2RheTogMFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBcbiAgICBjb21wdXRlZDoge1xuICAgICAgICBzZWxlY3RlZERhdGVPYmooKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZERhdGUgPyBuZXcgRGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZSkgOiBuZXcgRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBcbiAgICBtb3VudGVkKCkge1xuICAgICAgICB0aGlzLmZldGNoSGlzdG9yeURhdGVzKCk7XG4gICAgfSxcbiAgICBcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIC8vIEZldGNoIGRhdGVzIHdpdGggaGlzdG9yeSBldmVudHMgZm9yIGNhbGVuZGFyXG4gICAgICAgIGZldGNoSGlzdG9yeURhdGVzKCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gT2J0ZW5lciBlbCBJRCBkZWwgdXN1YXJpbyBhY3R1YWxcbiAgICAgICAgICAgIGNvbnN0IHVzZXJJZCA9IHRoaXMuJHN0b3JlPy5zdGF0ZT8uYXV0aD8udXNlcj8uaWQgfHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dGhTdG9yZT8udXNlcj8uaWQ7XG4gICAgICAgICAgICBpZiAoIXVzZXJJZCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHVzZXIgSUQgYXZhaWxhYmxlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBFbmRwb2ludCBwYXJhIG9idGVuZXIgZmVjaGFzIGRlIGhpc3RvcmlhbFxuICAgICAgICAgICAgY29uc3QgdXJsID0gYC9hcGkvdXNlcnMvJHt1c2VySWR9L2hpc3RvcnktZGF0ZXNgO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBmZXRjaCh1cmwpXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWN0dWFsaXphciBldmVudERhdGVzIHBhcmEgZWwgY2FsZW5kYXJpb1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV2ZW50RGF0ZXMgPSBkYXRhLmRhdGVzIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGBMb2FkZWQgaGlzdG9yeSBkYXRlczonLCB0aGlzLmV2ZW50RGF0ZXMpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgaGlzdG9yeSBkYXRlczonLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLy8gVXBkYXRlIHN0YXRzIHdoZW4gcmVjZWl2ZWQgZnJvbSBIaXN0b3J5Q29tcG9uZW50XG4gICAgICAgIHVwZGF0ZVN0YXRzKG5ld1N0YXRzKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRzID0gbmV3U3RhdHM7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvLyBVcGRhdGUgaGFzRGF0YSBmbGFnIHdoZW4gcmVjZWl2ZWQgZnJvbSBIaXN0b3J5Q29tcG9uZW50XG4gICAgICAgIHVwZGF0ZUhhc0RhdGEoaGFzRGF0YSkge1xuICAgICAgICAgICAgdGhpcy5oYXNEYXRhID0gaGFzRGF0YTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8vIEhhbmRsZSBkYXRlIGNoYW5nZSBmcm9tIGRhdGUgcGlja2VyXG4gICAgICAgIG9uRGF0ZUNoYW5nZShuZXdEYXRlKSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGBEYXRlIGNoYW5nZWQgdG86JywgbmV3RGF0ZSk7XG4gICAgICAgICAgICAvLyBzZWxlY3RlZERhdGUgd2lsbCBiZSB1cGRhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdi1tb2RlbFxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLy8gRm9ybWF0IGN1cnJlbmN5IGZvciBkaXNwbGF5XG4gICAgICAgIGZvcm1hdEN1cnJlbmN5KGFtb3VudCkge1xuICAgICAgICAgICAgaWYgKCFhbW91bnQpIHJldHVybiAn4oKsMCwwMCc7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KCdlcy1FUycsIHtcbiAgICAgICAgICAgICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICAgICAgICAgICAgICBjdXJyZW5jeTogJ0VVUidcbiAgICAgICAgICAgIH0pLmZvcm1hdChhbW91bnQpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLy8gRG93bmxvYWQgQ1NWIGV4cG9ydFxuICAgICAgICBkb3dubG9hZENTVigpIHtcbiAgICAgICAgICAgIC8vIENhbGwgdGhlIGV4cG9ydFRvQ1NWIG1ldGhvZCBvZiB0aGUgSGlzdG9yeUNvbXBvbmVudFxuICAgICAgICAgICAgaWYgKHRoaXMuJHJlZnMuaGlzdG9yeUNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJHJlZnMuaGlzdG9yeUNvbXBvbmVudC5leHBvcnRUb0NTVigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgaWYgYSBkYXRlIGlzIGFsbG93ZWQgKGhhcyBoaXN0b3J5IGVudHJpZXMpXG4gICAgICAgIGlzQWxsb3dlZERhdGUodmFsKSB7XG4gICAgICAgICAgICAvLyB2YWwgcHVlZGUgc2VyIERhdGUgbyBzdHJpbmc7IGxvIHBhcnNlbyBjb24gZWwgYWRhcHRlclxuICAgICAgICAgICAgY29uc3QgaXNvID0gdGhpcy5kYXRlQWRhcHRlci50b0lTTyh2YWwpICAgICAgICAgICAvLyDihpIgXCIyMDI1LTA2LTAzXCJcbiAgICAgICAgICAgIGNvbnN0IHRvZGF5ID0gdGhpcy5kYXRlQWRhcHRlci50b0lTTyhuZXcgRGF0ZSgpKSAgLy8g4oaSIFwiMjAyNS0wNi0wNlwiXG5cbiAgICAgICAgICAgIGlmIChpc28gPT09IHRvZGF5KSByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgaWYgKCF0aGlzLmV2ZW50RGF0ZXMubGVuZ3RoKSByZXR1cm4gdGhpcy5sb2FkaW5nXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ldmVudERhdGVzLmluY2x1ZGVzKGlzbylcbiAgICAgICAgfVxuICAgIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGU+XG4udG9wcy1jYXJkcyB7XG4gICAgbWFyZ2luOiAxMHB4O1xuICAgIHBhZGRpbmc6IDIwcHg7XG59XG5cbi5kYXRlLXBpY2tlci1jYXJkIHtcbiAgICBtYXJnaW46IDEwcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4ubXktaWNvbnMge1xuICAgIGNvbG9yOiAjMTk3NmQyO1xuICAgIGZvbnQtc2l6ZTogMi41cmVtO1xuICAgIG1hcmdpbi1yaWdodDogMTVweDtcbn1cblxuLm1pbmktY2FyZCB7XG4gICAgY29sb3I6ICM3NTc1NzU7XG4gICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbn1cblxuLmNlbnRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxuICAgICAgICA8di1yb3cgY2xhc3M9XCJjZW50ZXIganVzdGlmeS1zcGFjZS1iZXR3ZWVuIG0tMiBtdC00XCI+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1jaGVjazItY2lyY2xlIG1lLTIgZnMtM1wiPjwvaT5cbiAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtdC0yXCI+PGI+UmVzdW1lbiBnZW5lcmFsPC9iPjwvaDQ+XG4gICAgICAgICAgICAgICAgPHYtYnRuIGljb24gc2l6ZT1cInNtYWxsXCIgdmFyaWFudD1cInRleHRcIiBjbGFzcz1cIm1zLTJcIiA6bG9hZGluZz1cImxvYWRpbmdTdGF0c1wiIEBjbGljaz1cImZldGNoU3RhdHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHYtaWNvbj5tZGktcmVmcmVzaDwvdi1pY29uPlxuICAgICAgICAgICAgICAgIDwvdi1idG4+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbnRlciB3LTUwXCI+XG4gICAgICAgICAgICAgICAgPHYtYnRuIGljb24gY2xhc3M9XCJidXR0b24tZG93bmxvYWQgbXgtMlwiIEBjbGljaz1cImRvd25sb2FkSW52b2ljZXNDc3ZcIj5cbiAgICAgICAgICAgICAgICAgICAgPHYtaWNvbj5tZGktZG93bmxvYWQ8L3YtaWNvbj5cbiAgICAgICAgICAgICAgICA8L3YtYnRuPlxuXG4gICAgICAgICAgICAgICAgPHYtc2VsZWN0IG1pbi13aWR0aD1cIjIwMFwiIGxhYmVsPVwiU2VsZWNjaW9uYXJcIiB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25cIiA6aXRlbXM9XCJzZWxlY3RcIiBjbGVhcmFibGUgZGVsZXRhYmxlLWNoaXBzXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGhpZGUtZGV0YWlscz48L3Ytc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdi1yb3c+XG5cbiAgICAgICAgPHYtcm93IGNsYXNzPVwiY2VudGVyXCI+XG4gICAgICAgICAgICA8di1jYXJkIGNsYXNzPVwiY2VudGVyIHAtNCBtLTFcIj5cbiAgICAgICAgICAgICAgICA8aDE+PGkgY2xhc3M9XCJteS1pY29ucyBiaSBiaS1wZXJjZW50XCI+PC9pPjwvaDE+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPHA+RGVzY3VlbnRvczwvcD5cbiAgICAgICAgICAgICAgICAgICAgPGgyPjxiPnt7IGZvcm1hdEN1cnJlbmN5KHRvdGFsRGlzY291bnRzKSB9fTwvYj48L2gyPlxuICAgICAgICAgICAgICAgICAgICA8YiBjbGFzcz1cIm1pbmktY2FyZFwiPlRvdGFsIGFwbGljYWRvPC9iPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC92LWNhcmQ+XG5cbiAgICAgICAgICAgIDx2LWNhcmQgY2xhc3M9XCJjZW50ZXIgcC00IG0tMVwiPlxuICAgICAgICAgICAgICAgIDxoMT48aSBjbGFzcz1cIm15LWljb25zIGJpIGJpLWZpbGUtZWFybWFyay1jaGVjay1maWxsXCI+PC9pPjwvaDE+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPHA+QWRlbGFudGFkYXM8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxoMj48Yj57eyBmb3JtYXRDdXJyZW5jeSh0b3RhbEFkdmFuY2VkKSB9fTwvYj48L2gyPlxuICAgICAgICAgICAgICAgICAgICA8YiBjbGFzcz1cIm1pbmktY2FyZFwiPlRvdGFsIGFkZWxhbnRhZG88L2I+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3YtY2FyZD5cblxuICAgICAgICAgICAgPHYtY2FyZCBjbGFzcz1cImNlbnRlciBwLTQgbS0xXCI+XG4gICAgICAgICAgICAgICAgPGgxPjxpIGNsYXNzPVwibXktaWNvbnMgYmkgYmktY2FzaC1jb2luXCI+PC9pPjwvaDE+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPHA+UGVuZGllbnRlcyBkZSBwYWdvPC9wPlxuICAgICAgICAgICAgICAgICAgICA8aDI+PGI+e3sgZm9ybWF0Q3VycmVuY3kodG90YWxQZW5kaW5nKSB9fTwvYj48L2gyPlxuICAgICAgICAgICAgICAgICAgICA8YiBjbGFzcz1cIm1pbmktY2FyZFwiPlBvciBjb2JyYXI8L2I+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3YtY2FyZD5cblxuICAgICAgICAgICAgPHYtY2FyZCBjbGFzcz1cImNlbnRlciBwLTQgbS0xXCI+XG4gICAgICAgICAgICAgICAgPGgxPjxpIGNsYXNzPVwibXktaWNvbnMgYmkgYmktY2xvY2staGlzdG9yeVwiPjwvaT48L2gxPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxwPlBhcmEgYWRlbGFudGFyPC9wPlxuICAgICAgICAgICAgICAgICAgICA8aDI+PGI+e3sgZm9ybWF0Q3VycmVuY3kodG90YWxUb0FkdmFuY2UpIH19PC9iPjwvaDI+XG4gICAgICAgICAgICAgICAgICAgIDxiIGNsYXNzPVwibWluaS1jYXJkXCI+RWxlZ2libGVzPC9iPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC92LWNhcmQ+XG4gICAgICAgIDwvdi1yb3c+XG4gICAgICAgIFxuICAgICAgICA8SW52b2ljZVdpdGhGaWx0ZXJzXG4gICAgICAgICAgICByZWY9XCJpbnZvaWNlV2l0aEZpbHRlcnNcIlxuICAgICAgICAgICAgOnNob3ctYXMtY2xpZW50PVwiZmFsc2VcIlxuICAgICAgICAgICAgOmFkdmFuY2VJbnZvaWNlTm93PVwiYWR2YW5jZUludm9pY2VOb3dcIlxuICAgICAgICAgICAgOnZhbGlkYXRlSW52b2ljZU5vdz1cInZhbGlkYXRlSW52b2ljZU5vd1wiXG4gICAgICAgICAgICA6cmVmcmVzaEludm9pY2VzPVwicmVmcmVzaEludm9pY2VzXCJcbiAgICAgICAgICAgIDpkZWxldGVJbnZvaWNlPVwiZGVsZXRlSW52b2ljZVwiXG4gICAgICAgICAgICA6ZGF0ZUZpbHRlcnM9XCJkYXRlRmlsdGVyc1wiXG4gICAgICAgICAgICBAZmlsdGVyLWNoYW5nZT1cIm9uRmlsdGVyQ2hhbmdlXCI+XG4gICAgICAgIDwvSW52b2ljZVdpdGhGaWx0ZXJzPlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBNb3JlSW5mbyBmcm9tICcuLi9jb21wb25lbnRzL01vcmVJbmZvLnZ1ZSc7XG5pbXBvcnQgSW52b2ljZVdpdGhGaWx0ZXJzIGZyb20gJy4uL2NvbXBvbmVudHMvSW52b2ljZVdpdGhGaWx0ZXJzLnZ1ZSc7XG5pbXBvcnQgeyB1c2VFbnRpdHkgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb21wb3NhYmxlcy91c2VFbnRpdHknO1xuaW1wb3J0IHsgSW52b2ljZUltcGwgfSBmcm9tICcuLi9zZXJ2aWNlcy90eXBlcy9pbXBsZW1lbnRhdGlvbnMnO1xuaW1wb3J0IHsgY29tcHV0ZWQsIHJlZiwgb25Nb3VudGVkLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgeyB1c2VJbnZvaWNlUHJvdmlkZXJTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9pbnZvaWNlUHJvdmlkZXIuanMnO1xuaW1wb3J0IHsgdXNlSW52b2ljZVN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL2ludm9pY2UuanMnO1xuaW1wb3J0IHsgdXNlR2xvYmFsVXRpbHMgfSBmcm9tICcuLi91dGlscy9nbG9iYWxzJztcbmltcG9ydCB7IHVzZUF1dGhTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9hdXRoJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIE1vcmVJbmZvLFxuICAgICAgICBJbnZvaWNlV2l0aEZpbHRlcnNcbiAgICB9LFxuICAgIHNldHVwKCkge1xuICAgICAgICBjb25zdCB7IGFkdmFuY2VJbnZvaWNlTm93IH0gPSB1c2VJbnZvaWNlU3RvcmUoKTtcbiAgICAgICAgY29uc3QgaW52b2ljZVByb3ZpZGVyU3RvcmUgPSB1c2VJbnZvaWNlUHJvdmlkZXJTdG9yZSgpO1xuICAgICAgICBjb25zdCB7IHRvYXN0LCBzd2FsIH0gPSB1c2VHbG9iYWxVdGlscygpO1xuXG4gICAgICAgIGNvbnN0IHsgZW50aXR5LCByZWZyZXNoRW50aXRpZXM6IHJlZnJlc2hJbnZvaWNlcywgZGVsZXRlRW50aXR5OiBkZWxldGVJbnZvaWNlIH0gPSB1c2VFbnRpdHkoSW52b2ljZUltcGwsIGludm9pY2VQcm92aWRlclN0b3JlKTtcbiAgICAgICAgY29uc3QgaW52b2ljZXMgPSBjb21wdXRlZCgoKSA9PiBpbnZvaWNlUHJvdmlkZXJTdG9yZS5nZXRJbnZvaWNlcyk7XG4gICAgICAgIGNvbnN0IGF1dGhTdG9yZSA9IHVzZUF1dGhTdG9yZSgpO1xuICAgICAgICBcbiAgICAgICAgLy8gQWN0aXZlIGZpbHRlcnMgZnJvbSB0aGUgdGFibGVcbiAgICAgICAgY29uc3QgYWN0aXZlRmlsdGVycyA9IHJlZih7fSk7XG4gICAgICAgIFxuICAgICAgICAvLyBGb3IgbW9iaWxlIGNhcmQgdmlld1xuICAgICAgICBjb25zdCBmaWx0ZXJlZEludm9pY2VzID0gcmVmKFtdKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFN0YXRzIHJlZnNcbiAgICAgICAgY29uc3QgbG9hZGluZ1N0YXRzID0gcmVmKGZhbHNlKTtcbiAgICAgICAgY29uc3QgdG90YWxUb0FkdmFuY2UgPSByZWYoMCk7XG4gICAgICAgIGNvbnN0IHRvdGFsQWR2YW5jZWQgPSByZWYoMCk7XG4gICAgICAgIGNvbnN0IHRvdGFsUGVuZGluZyA9IHJlZigwKTtcbiAgICAgICAgY29uc3QgdG90YWxEaXNjb3VudHMgPSByZWYoMCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gcmVmKFwiQcOxbyBlbiBjdXJzb1wiKTtcblxuICAgICAgICBjb25zdCBjYWxjdWxhdGVEYXRlUmFuZ2UgPSAob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICB0b2RheS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgIGxldCBzdGFydERhdGUsIGVuZERhdGU7XG5cbiAgICAgICAgICAgIHN3aXRjaCAob3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcIsOabHRpbW9zIDMgZMOtYXNcIjpcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlID0gbmV3IERhdGUodG9kYXkpO1xuICAgICAgICAgICAgICAgICAgICBzdGFydERhdGUuc2V0RGF0ZSh0b2RheS5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZSA9IG5ldyBEYXRlKHRvZGF5KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIsOabHRpbW9zIDcgZMOtYXNcIjpcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlID0gbmV3IERhdGUodG9kYXkpO1xuICAgICAgICAgICAgICAgICAgICBzdGFydERhdGUuc2V0RGF0ZSh0b2RheS5nZXREYXRlKCkgLSA2KTtcbiAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZSA9IG5ldyBEYXRlKHRvZGF5KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIsOabHRpbW9zIDE1IGTDrWFzXCI6XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHRvZGF5KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlLnNldERhdGUodG9kYXkuZ2V0RGF0ZSgpIC0gMTQpO1xuICAgICAgICAgICAgICAgICAgICBlbmREYXRlID0gbmV3IERhdGUodG9kYXkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiTWVzIGFjdHVhbFwiOlxuICAgICAgICAgICAgICAgICAgICBzdGFydERhdGUgPSBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZSA9IG5ldyBEYXRlKHRvZGF5KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIlRyaW1lc3RyZSBhY3R1YWxcIjpcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFF1YXJ0ZXIgPSBNYXRoLmZsb29yKHRvZGF5LmdldE1vbnRoKCkgLyAzKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlID0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgY3VycmVudFF1YXJ0ZXIgKiAzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZSA9IG5ldyBEYXRlKHRvZGF5KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIlNlbWVzdHJlIGFjdHVhbFwiOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U2VtZXN0ZXIgPSBNYXRoLmZsb29yKHRvZGF5LmdldE1vbnRoKCkgLyA2KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlID0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgY3VycmVudFNlbWVzdGVyICogNiwgMSk7XG4gICAgICAgICAgICAgICAgICAgIGVuZERhdGUgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJBw7FvIGVuIGN1cnNvXCI6XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHRvZGF5LmdldEZ1bGxZZWFyKCksIDAsIDEpO1xuICAgICAgICAgICAgICAgICAgICBlbmREYXRlID0gbmV3IERhdGUodG9kYXkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiUGVyw61vZG8gdG90YWxcIjpcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsgLy8gTm8gZmlsdGVyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEZvcm1hdCBhcyB5eXl5LW1tLWRkXG4gICAgICAgICAgICBjb25zdCBmb3JtYXREYXRlID0gKGRhdGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vbnRoID0gU3RyaW5nKGRhdGUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF5ID0gU3RyaW5nKGRhdGUuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgICAgICAgICAgIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX1gO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBhZnRlcjogZm9ybWF0RGF0ZShzdGFydERhdGUpLFxuICAgICAgICAgICAgICAgIGJlZm9yZTogZm9ybWF0RGF0ZShlbmREYXRlKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBDb21wdXRlZCBwcm9wZXJ0eSBmb3IgZGF0ZSBmaWx0ZXJzIHRvIHBhc3MgdG8gdGFibGVcbiAgICAgICAgY29uc3QgZGF0ZUZpbHRlcnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRlUmFuZ2UgPSBjYWxjdWxhdGVEYXRlUmFuZ2Uoc2VsZWN0ZWRPcHRpb24udmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFkYXRlUmFuZ2UpIHJldHVybiB7fTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgJ2Jyb2FkY2FzdERhdGVbYWZ0ZXJdJzogZGF0ZVJhbmdlLmFmdGVyLFxuICAgICAgICAgICAgICAgICdicm9hZGNhc3REYXRlW2JlZm9yZV0nOiBkYXRlUmFuZ2UuYmVmb3JlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBmZXRjaFN0YXRzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGxvYWRpbmdTdGF0cy52YWx1ZSkgcmV0dXJuO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBsb2FkaW5nU3RhdHMudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VySWQgPSBhdXRoU3RvcmUudXNlci5pZDtcbiAgICAgICAgICAgICAgICBsZXQgdXJsID0gYC9hcGkvdXNlcnMvJHt1c2VySWR9L2ludm9pY2VzL3Byb3ZpZGVyLXN0YXRzYDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlUmFuZ2UgPSBjYWxjdWxhdGVEYXRlUmFuZ2Uoc2VsZWN0ZWRPcHRpb24udmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChkYXRlUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsICs9IGA/YnJvYWRjYXN0RGF0ZVthZnRlcl09JHtkYXRlUmFuZ2UuYWZ0ZXJ9JmJyb2FkY2FzdERhdGVbYmVmb3JlXT0ke2RhdGVSYW5nZS5iZWZvcmV9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gQWRkIGFjdGl2ZSBmaWx0ZXJzIHRvIHRoZSBVUkxcbiAgICAgICAgICAgICAgICBpZiAoYWN0aXZlRmlsdGVycy52YWx1ZSAmJiBPYmplY3Qua2V5cyhhY3RpdmVGaWx0ZXJzLnZhbHVlKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcGFyYXRvciA9IHVybC5pbmNsdWRlcygnPycpID8gJyYnIDogJz8nO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhhY3RpdmVGaWx0ZXJzLnZhbHVlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNraXAgYnJvYWRjYXN0RGF0ZSBmaWx0ZXJzIGFzIHRoZXkgYXJlIGhhbmRsZWQgYnkgc2VsZWN0ZWRPcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ICE9PSAnYnJvYWRjYXN0RGF0ZVthZnRlcl0nICYmIGtleSAhPT0gJ2Jyb2FkY2FzdERhdGVbYmVmb3JlXScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBwYXJhbXMudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgKz0gYCR7c2VwYXJhdG9yfSR7cXVlcnlTdHJpbmd9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldCh1cmwpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsVG9BZHZhbmNlLnZhbHVlID0gcmVzcG9uc2UuZGF0YS50b3RhbFRvQWR2YW5jZSB8fCAwO1xuICAgICAgICAgICAgICAgICAgICB0b3RhbEFkdmFuY2VkLnZhbHVlID0gcmVzcG9uc2UuZGF0YS50b3RhbEFkdmFuY2VkIHx8IDA7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsUGVuZGluZy52YWx1ZSA9IHJlc3BvbnNlLmRhdGEudG90YWxQZW5kaW5nIHx8IDA7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsRGlzY291bnRzLnZhbHVlID0gcmVzcG9uc2UuZGF0YS50b3RhbERpc2NvdW50cyB8fCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgc3RhdHM6JywgZXJyb3IpO1xuICAgICAgICAgICAgICAgIHRvYXN0LmVycm9yKCdFcnJvciBhbCBhY3R1YWxpemFyIGVzdGFkw61zdGljYXMnKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgbG9hZGluZ1N0YXRzLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gV2F0Y2ggZm9yIGNoYW5nZXMgaW4gc2VsZWN0ZWRPcHRpb25cbiAgICAgICAgd2F0Y2goc2VsZWN0ZWRPcHRpb24sICgpID0+IHtcbiAgICAgICAgICAgIGZldGNoU3RhdHMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBvbkZpbHRlckNoYW5nZSA9IChmaWx0ZXJzKSA9PiB7XG4gICAgICAgICAgICBhY3RpdmVGaWx0ZXJzLnZhbHVlID0gZmlsdGVycztcbiAgICAgICAgICAgIGZldGNoU3RhdHMoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBvbk1vdW50ZWQoKCkgPT4ge1xuICAgICAgICAgICAgZmV0Y2hTdGF0cygpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW52b2ljZXMsXG4gICAgICAgICAgICBmaWx0ZXJlZEludm9pY2VzLFxuICAgICAgICAgICAgYWR2YW5jZUludm9pY2VOb3csXG4gICAgICAgICAgICB2YWxpZGF0ZUludm9pY2VOb3c6ICgpID0+IHt9LCAvLyBQbGFjZWhvbGRlciAtIG5vdCB1c2VkIGluIHByb3ZpZGVyIHZpZXdcbiAgICAgICAgICAgIGludm9pY2VQcm92aWRlclN0b3JlLFxuICAgICAgICAgICAgcmVmcmVzaEludm9pY2VzLFxuICAgICAgICAgICAgZGVsZXRlSW52b2ljZSxcbiAgICAgICAgICAgIHRvYXN0LFxuICAgICAgICAgICAgc3dhbCxcbiAgICAgICAgICAgIHRvdGFsVG9BZHZhbmNlLFxuICAgICAgICAgICAgdG90YWxBZHZhbmNlZCxcbiAgICAgICAgICAgIHRvdGFsUGVuZGluZyxcbiAgICAgICAgICAgIHRvdGFsRGlzY291bnRzLFxuICAgICAgICAgICAgZmV0Y2hTdGF0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9uLFxuICAgICAgICAgICAgZGF0ZUZpbHRlcnMsXG4gICAgICAgICAgICBvbkZpbHRlckNoYW5nZVxuICAgICAgICB9O1xuICAgIH0sXG4gICAgbmFtZTogJ0hvbWVQcm92aWRlcnMnLFxuICAgIGRhdGEoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAvLyBBUEkgZW5kcG9pbnRcbiAgICAgICAgICAgIGFwaUVuZHBvaW50OiAnL3VzZXJzL3t1c2VySWR9L3Byb3ZpZGVySW52b2ljZXMnLFxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBGaWx0ZXIgY29uZmlndXJhdGlvblxuICAgICAgICAgICAgZmlsdGVyQ29uZmlnOiBbXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAndGV4dCcsIGZpZWxkOiAnY2xpZW50U29jaWFsRGVub21pbmF0aW9uJywgbGFiZWw6ICdOb21icmUgQ2xpZW50ZScsIGljb246ICdtZGktbWFnbmlmeScsIHdpZHRoOiAzIH0sXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAndGV4dCcsIGZpZWxkOiAnY2xpZW50VmF0TnVtYmVyJywgbGFiZWw6ICdOSUYgQ2xpZW50ZScsIGljb246ICdtZGktbWFnbmlmeScsIHdpZHRoOiAzIH0sXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAndGV4dCcsIGZpZWxkOiAnaW52b2ljZU51bWJlcicsIGxhYmVsOiAnTsKwIGZhY3R1cmEnLCBpY29uOiAnbWRpLW1hZ25pZnknLCB3aWR0aDogMyB9LFxuICAgICAgICAgICAgICAgIHsgdHlwZTogJ2RhdGUnLCBmaWVsZDogJ2Jyb2FkY2FzdERhdGVbYWZ0ZXJdJywgbGFiZWw6ICdEZXNkZScsIHdpZHRoOiAzIH0sXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAnZGF0ZScsIGZpZWxkOiAnYnJvYWRjYXN0RGF0ZVtiZWZvcmVdJywgbGFiZWw6ICdIYXN0YScsIHdpZHRoOiAzIH0sXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAnZGF0ZScsIGZpZWxkOiAnZXhwaXJhdGlvbkRhdGUnLCBsYWJlbDogJ0YuIFZlbmMuJywgd2lkdGg6IDMgfSxcbiAgICAgICAgICAgICAgICB7IHR5cGU6ICdzZWxlY3QnLCBmaWVsZDogJ3N0YXR1cycsIGxhYmVsOiAnRXN0YWRvJywgaXRlbXM6IFt7IGl0ZXh0OiBcIlRvZG9zXCIsIGl2YWx1ZTogMH0sIHsgaXRleHQ6IFwiVmFsaWRhZGFzXCIsIGl2YWx1ZTogMX0sIHsgaXRleHQ6IFwiRWxlZ2libGVzXCIsIGl2YWx1ZTogMn0sIHsgaXRleHQ6IFwiTm8gZWxlZ2libGVzXCIsIGl2YWx1ZTogM30sIHsgaXRleHQ6IFwiQWRlbGFudGFkYXNcIiwgaXZhbHVlOiA0fSwgeyBpdGV4dDogXCJGaW5hbGl6YWRhcyBzaW4gYWRlbGFudGFyXCIsIGl2YWx1ZTogNX0sIHsgaXRleHQ6IFwiUGFyYSB2YWxpZGFyXCIsIGl2YWx1ZTogNn0sIHsgaXRleHQ6IFwiRmluYWxpemFkYXMgZGVzZGUgYWRlbGFudGFyXCIsIGl2YWx1ZTogN31dLCB3aWR0aDogMyB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBUYWJsZSBoZWFkZXJzXG4gICAgICAgICAgICBoZWFkZXJzOiBbXG4gICAgICAgICAgICAgICAgeyB0aXRsZTogJ0NsaWVudGUnLCBrZXk6ICdjbGllbnRTb2NpYWxEZW5vbWluYXRpb24nLCBzb3J0YWJsZTogdHJ1ZSwgYWxpZ246ICdzdGFydCcgfSxcbiAgICAgICAgICAgICAgICB7IHRpdGxlOiAnTklGIENsaWVudGUnLCBrZXk6ICdjbGllbnRWYXROdW1iZXInLCBzb3J0YWJsZTogdHJ1ZSwgYWxpZ246ICdzdGFydCcgfSxcbiAgICAgICAgICAgICAgICB7IHRpdGxlOiAnTsK6IGZhY3R1cmEnLCBrZXk6ICdpbnZvaWNlTnVtYmVyJywgc29ydGFibGU6IHRydWUsIGFsaWduOiAnc3RhcnQnIH0sXG4gICAgICAgICAgICAgICAgeyB0aXRsZTogJ0ZlY2hhIEUuJywga2V5OiAnYnJvYWRjYXN0RGF0ZScsIHNvcnRhYmxlOiB0cnVlLCBhbGlnbjogJ3N0YXJ0JyB9LFxuICAgICAgICAgICAgICAgIHsgdGl0bGU6ICdGLiBWZW5jLicsIGtleTogJ2V4cGlyYXRpb25EYXRlJywgc29ydGFibGU6IHRydWUsIGFsaWduOiAnc3RhcnQnIH0sXG4gICAgICAgICAgICAgICAgeyB0aXRsZTogJ0RpYXMvUCBWZW5jLicsIGtleTogJ2RheXNUb0V4cGlyZScsIHNvcnRhYmxlOiB0cnVlLCBhbGlnbjogJ3N0YXJ0JyB9LFxuICAgICAgICAgICAgICAgIHsgdGl0bGU6ICdUb3RhbCcsIGtleTogJ3RvdGFsJywgc29ydGFibGU6IHRydWUsIGFsaWduOiAnZW5kJyB9LFxuICAgICAgICAgICAgICAgIHsgdGl0bGU6ICdEdG8uJywga2V5OiAnZGlzY291bnQnLCBzb3J0YWJsZTogdHJ1ZSwgYWxpZ246ICdlbmQnIH0sXG4gICAgICAgICAgICAgICAgeyB0aXRsZTogJ0VzdGFkbycsIGtleTogJ3N0YXR1cycsIHNvcnRhYmxlOiB0cnVlLCBhbGlnbjogJ2NlbnRlcicgfSxcbiAgICAgICAgICAgICAgICB7IHRpdGxlOiAnQWNjaW9uZXMnLCBrZXk6ICdhY3Rpb25zJywgc29ydGFibGU6IGZhbHNlLCBhbGlnbjogJ2NlbnRlcicgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gQWN0aW9ucyBmb3IgdGFibGVcbiAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGljb246ICdtZGktY2FzaCcsXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXI6IHRoaXMucHJvdmlkZXJDaGFyZ2VOb3csXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogKGl0ZW0pID0+IChpdGVtLnN0YXR1cyAhPSAyIHx8ICFpdGVtLmFkdmFuY2VBbGxvd2VkKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpY29uOiAnbWRpLWV5ZScsXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXI6IHRoaXMudmlld0ludm9pY2UsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncHJpbWFyeSdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ21kaS1wZW5jaWwnLFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyOiB0aGlzLmVkaXRJbnZvaWNlLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3ByaW1hcnknXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgc2VsZWN0OiBbXCLDmmx0aW1vcyAzIGTDrWFzXCIsIFwiw5psdGltb3MgNyBkw61hc1wiLCBcIsOabHRpbW9zIDE1IGTDrWFzXCIsIFwiTWVzIGFjdHVhbFwiLCBcIlRyaW1lc3RyZSBhY3R1YWxcIiwgXCJTZW1lc3RyZSBhY3R1YWxcIiwgXCJBw7FvIGVuIGN1cnNvXCIsIFwiUGVyw61vZG8gdG90YWxcIl0sXG4gICAgICAgICAgICBjb21wYW55UG9zaXRpb246IFtcIkFkbWluaXN0cmFkb3JcIiwgXCJBcG9kZXJhZG9cIiwgXCJEaXJlY3RvclwiLCBcIkdlcmVudGVcIiwgXCJUcmFiYWphZG9yXCIsIFwiVHJhYmFqYWRvciB0w6ljbmljb1wiLCBcIk90cm9cIl0sXG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgZG93bmxvYWRJbnZvaWNlc0NzdigpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdHVzTWFwID0ge1xuICAgICAgICAgICAgICAgICAgICAnMCc6ICdUb2RvcycsXG4gICAgICAgICAgICAgICAgICAgICcxJzogJ1ZhbGlkYWRhJyxcbiAgICAgICAgICAgICAgICAgICAgJzInOiAnRWxlZ2libGUnLFxuICAgICAgICAgICAgICAgICAgICAnMyc6ICdObyBlbGVnaWJsZScsXG4gICAgICAgICAgICAgICAgICAgICc0JzogJ0FkZWxhbnRhZGEnLFxuICAgICAgICAgICAgICAgICAgICAnNSc6ICdGaW5hbGl6YWRhIHNpbiBhZGVsYW50YXInLFxuICAgICAgICAgICAgICAgICAgICAnNic6ICdQYXJhIHZhbGlkYXInLFxuICAgICAgICAgICAgICAgICAgICAnNyc6ICdGaW5hbGl6YWRhIGRlc2RlIGFkZWxhbnRhcicsXG4gICAgICAgICAgICAgICAgICAgICc4JzogJ0FkZWxhbnRhZGEgVmFsaWRhZGEnLFxuICAgICAgICAgICAgICAgICAgICAnOSc6ICdBZGVsYW50YWRhIFZhbGlkYWRhIHkgUGFnYWRhJyxcbiAgICAgICAgICAgICAgICAgICAgJzEwJzogJ0ZpbmFsaXphZGEgc2luIGFkZWxhbnRhciBQYWdhZGEnLFxuICAgICAgICAgICAgICAgICAgICAnMTEnOiAnRmluYWxpemFkYSBkZXNkZSBhZGVsYW50YXIgUGFnYWRhJ1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBsZXQgaW52b2ljZXNUb0V4cG9ydCA9IFtdO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLiRyZWZzLmludm9pY2VUYWJsZT8uaXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaW52b2ljZXNUb0V4cG9ydCA9IHRoaXMuJHJlZnMuaW52b2ljZVRhYmxlLml0ZW1zO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3QuZXJyb3IoJ05vIHNlIHB1ZWRlbiBvYnRlbmVyIGxhcyBmYWN0dXJhcyBhY3R1YWxlcycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFpbnZvaWNlc1RvRXhwb3J0IHx8IGludm9pY2VzVG9FeHBvcnQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3QuaW5mbygnTm8gaGF5IGZhY3R1cmFzIHBhcmEgZXhwb3J0YXInKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBbXG4gICAgICAgICAgICAgICAgICAgICdDbGllbnRlJyxcbiAgICAgICAgICAgICAgICAgICAgJ05JRiBDbGllbnRlJyxcbiAgICAgICAgICAgICAgICAgICAgJ07Dum1lcm8gRmFjdHVyYScsXG4gICAgICAgICAgICAgICAgICAgICdGZWNoYSBFbWlzacOzbicsXG4gICAgICAgICAgICAgICAgICAgICdGZWNoYSBWZW5jaW1pZW50bycsXG4gICAgICAgICAgICAgICAgICAgICdEw61hcyBoYXN0YSBWZW5jaW1pZW50bycsXG4gICAgICAgICAgICAgICAgICAgICdJbXBvcnRlIFRvdGFsJyxcbiAgICAgICAgICAgICAgICAgICAgJ0VzdGFkbycsXG4gICAgICAgICAgICAgICAgICAgICdEZXNjdWVudG8nLFxuICAgICAgICAgICAgICAgICAgICAnVG90YWwgYSBSZWNpYmlyJyxcbiAgICAgICAgICAgICAgICAgICAgJ03DqXRvZG8gZGUgUGFnbycsXG4gICAgICAgICAgICAgICAgICAgICdCYXNlIEltcG9uaWJsZScsXG4gICAgICAgICAgICAgICAgICAgICdJbXB1ZXN0b3MnXG4gICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNzdkNvbnRlbnQgPSBpbnZvaWNlc1RvRXhwb3J0Lm1hcChpbnZvaWNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRGVidWc6IHZlciBxdcOpIHRyYWUgaW52b2ljZS5zdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhdHVzVGV4dCA9IHN0YXR1c01hcFtTdHJpbmcoaW52b2ljZS5zdGF0dXMpXTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZvaWNlLmNsaWVudFNvY2lhbERlbm9taW5hdGlvbiB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGludm9pY2UuY2xpZW50VmF0TnVtYmVyIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW52b2ljZS5pbnZvaWNlTnVtYmVyIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW52b2ljZS5icm9hZGNhc3REYXRlIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW52b2ljZS5leHBpcmF0aW9uRGF0ZSB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGludm9pY2UuZGF5c1RvRXhwaXJlIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW52b2ljZS50b3RhbCB8fCAnMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0IHx8IGludm9pY2Uuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW52b2ljZS5kaXNjb3VudCB8fCAnMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZvaWNlLnRvdGFsVG9SZWNlaXZlIHx8ICcwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGludm9pY2UucGF5bWVudE1ldGhvZCB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGludm9pY2UudGF4QmFzZSB8fCAnMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZvaWNlLnRheCB8fCAnMCdcbiAgICAgICAgICAgICAgICAgICAgXS5qb2luKCc7Jyk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjc3YgPSBbXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnMuam9pbignOycpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jc3ZDb250ZW50XG4gICAgICAgICAgICAgICAgXS5qb2luKCdcXG4nKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbXCJcXHVmZWZmXCIgKyBjc3ZdLCB7IHR5cGU6ICd0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04OycgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHVybCk7XG4gICAgICAgICAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgYGZhY3R1cmFzX2FfbWlzX2NsaWVudGVzXyR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKX0uY3N2YCk7XG4gICAgICAgICAgICAgICAgbGluay5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgICAgICAgICAgICBsaW5rLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoJ0FyY2hpdm8gQ1NWIGRlc2NhcmdhZG8gY29ycmVjdGFtZW50ZScpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBhbCBnZW5lcmFyIENTVjonLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5lcnJvcignRXJyb3IgYWwgZ2VuZXJhciBlbCBhcmNoaXZvIENTVjogJyArIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBGb3JtYXQgZGF0ZSB0byBsb2NhbGUgc3RyaW5nXG4gICAgICAgIGZvcm1hdERhdGUoZGF0ZSkge1xuICAgICAgICAgICAgaWYgKCFkYXRlKSByZXR1cm4gJy0tJztcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlKS50b0xvY2FsZURhdGVTdHJpbmcoJ2VzLUVTJywge1xuICAgICAgICAgICAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgICAgICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgICAgICAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgICAgICAgICAgIHRpbWVab25lOiAnVVRDJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvLyBGb3JtYXQgY3VycmVuY3lcbiAgICAgICAgZm9ybWF0Q3VycmVuY3koYW1vdW50KSB7XG4gICAgICAgICAgICBpZiAoIWFtb3VudCkgcmV0dXJuICfigqwwLjAwJztcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQoJ2VzLUVTJywge1xuICAgICAgICAgICAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxuICAgICAgICAgICAgICAgIGN1cnJlbmN5OiAnRVVSJ1xuICAgICAgICAgICAgfSkuZm9ybWF0KGFtb3VudCk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvLyBWaWV3IGludm9pY2UgZGV0YWlsc1xuICAgICAgICB2aWV3SW52b2ljZShpdGVtKSB7XG4gICAgICAgICAgICAvLyBQbGFjZWhvbGRlciBmb3IgaW52b2ljZSBkZXRhaWxzIHZpZXdcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coYFZpZXcgaW52b2ljZSBkZXRhaWxzJywgaXRlbSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvLyBFZGl0IGludm9pY2VcbiAgICAgICAgZWRpdEludm9pY2UoaXRlbSkge1xuICAgICAgICAgICAgLy8gUGxhY2Vob2xkZXIgZm9yIGludm9pY2UgZWRpdFxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhgRWRpdCBpbnZvaWNlJywgaXRlbSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvLyBIYW5kbGUgZGF0YSBsb2FkZWQgZXZlbnRcbiAgICAgICAgb25EYXRhTG9hZGVkKGRhdGEpIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coYExvYWRlZCAke2RhdGEubGVuZ3RofSBpbnZvaWNlc2ApO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZEludm9pY2VzID0gZGF0YTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8vIEhhbmRsZSBlcnJvciBldmVudFxuICAgICAgICBvbkVycm9yKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0LmVycm9yKCdFcnJvciBhbCBjYXJnYXIgZmFjdHVyYXM6ICcgKyBlcnJvcik7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvLyBSZWZyZXNoIGRhdGFcbiAgICAgICAgcmVmcmVzaERhdGEoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4kcmVmcy5pbnZvaWNlVGFibGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRyZWZzLmludm9pY2VUYWJsZS5yZWZyZXNoKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaEludm9pY2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuLm1pLWNhcmQge1xuICAgIGZsZXg6IDE7IC8qIE1ha2VzIGFsbCBjYXJkcyBncm93IGVxdWFsbHkgKi9cbiAgICBwYWRkaW5nOiAxNXB4OyAvKiBTcGFjZSBpbnNpZGUgY2FyZHMgKi9cbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOyAvKiBPcHRpb25hbDogU21vb3RoIHJlc2l6aW5nIHRyYW5zaXRpb24gKi9cbn1cblxuLm15LWljb25zIHtcbiAgICBjb2xvcjogI2E4Y2Y5NTtcbiAgICBtYXJnaW46IDIwcHggNDBweCA0MHB4IDIwcHg7XG59XG5cbi5taW5pLWNhcmQge1xuICAgIGNvbG9yOiAjNjNhODg0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlNWYzZGY7XG4gICAgcGFkZGluZzogN3B4O1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbn1cblxuOmRlZXAoLnYtZGF0YS10YWJsZS1oZWFkZXIgdGgpIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHRleHQtdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuOmRlZXAoLnYtZGF0YS10YWJsZV9fdHI6aG92ZXIpIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xufVxuXG46ZGVlcCgudi1kYXRhLXRhYmxlKSB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcbn1cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICA8ZGl2PlxuICAgIDx2LXJvdyBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC13cmFwLXdyYXAgbXQtMyBteC01XCI+XG4gICAgICA8dGVtcGxhdGUgdi1mb3I9XCIoZmlsdGVyLCBpbmRleCkgaW4gYWN0aXZlRmlsdGVyc1wiIDprZXk9XCJpbmRleFwiPlxuICAgICAgICA8di1jb2wgOmNvbHM9XCIxMlwiIDpzbT1cIjRcIiA6bWQ9XCJjb2x1bW5XaWR0aFwiIGNsYXNzPVwic2VhcmNoZXJzXCI+XG4gICAgICAgICAgPCEtLSBDYW1wbyBkZSB0ZXh0byAtLT5cbiAgICAgICAgICA8di10ZXh0LWZpZWxkXG4gICAgICAgICAgICB2LWlmPVwiZmlsdGVyLnR5cGUgPT09ICd0ZXh0J1wiXG4gICAgICAgICAgICB2LW1vZGVsPVwibW9kZWxWYWx1ZVtmaWx0ZXIubW9kZWxdXCJcbiAgICAgICAgICAgIDpsYWJlbD1cImZpbHRlci5sYWJlbFwiXG4gICAgICAgICAgICA6cHJlcGVuZC1pbm5lci1pY29uPVwiZmlsdGVyLmljb25cIlxuICAgICAgICAgICAgY2xlYXJhYmxlXG4gICAgICAgICAgICBoaWRlLWRldGFpbHNcbiAgICAgICAgICAgIGRlbnNlXG4gICAgICAgICAgICB2YXJpYW50PVwic29sby1maWxsZWRcIlxuICAgICAgICAgID48L3YtdGV4dC1maWVsZD5cbiAgXG4gICAgICAgICAgPCEtLSBDYW1wbyBkZSBmZWNoYSAtLT5cbiAgICAgICAgICA8di10ZXh0LWZpZWxkXG4gICAgICAgICAgICB2LWlmPVwiZmlsdGVyLnR5cGUgPT09ICdkYXRlJ1wiXG4gICAgICAgICAgICB2LW1vZGVsPVwibW9kZWxWYWx1ZVtmaWx0ZXIubW9kZWxdXCJcbiAgICAgICAgICAgIDpsYWJlbD1cImZpbHRlci5sYWJlbFwiXG4gICAgICAgICAgICB0eXBlPVwiZGF0ZVwiXG4gICAgICAgICAgICBoaWRlLWRldGFpbHNcbiAgICAgICAgICAgIGRlbnNlXG4gICAgICAgICAgICB2YXJpYW50PVwic29sby1maWxsZWRcIlxuICAgICAgICAgID48L3YtdGV4dC1maWVsZD5cbiAgXG4gICAgICAgICAgPCEtLSBDYW1wbyBkZSBzZWxlY2Npw7NuIC0tPlxuICAgICAgICAgIDx2LXNlbGVjdFxuICAgICAgICAgICAgdi1pZj1cImZpbHRlci50eXBlID09PSAnc2VsZWN0J1wiXG4gICAgICAgICAgICB2LW1vZGVsPVwibW9kZWxWYWx1ZVtmaWx0ZXIubW9kZWxdXCJcbiAgICAgICAgICAgIDppdGVtcz1cImZpbHRlci5pdGVtc1wiXG4gICAgICAgICAgICA6bGFiZWw9XCJmaWx0ZXIubGFiZWxcIlxuICAgICAgICAgICAgOnByZXBlbmQtaW5uZXItaWNvbj1cImZpbHRlci5pY29uXCJcbiAgICAgICAgICAgIGNsZWFyYWJsZVxuICAgICAgICAgICAgaGlkZS1kZXRhaWxzXG4gICAgICAgICAgICBkZW5zZVxuICAgICAgICAgICAgdmFyaWFudD1cInNvbG8tZmlsbGVkXCJcbiAgICAgICAgICA+PC92LXNlbGVjdD5cbiAgICAgICAgPC92LWNvbD5cbiAgICAgIDwvdGVtcGxhdGU+XG4gICAgPC92LXJvdz5cbiAgPC9kaXY+XG4gIDwvdGVtcGxhdGU+XG4gIFxuICA8c2NyaXB0PlxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ0ZpbHRlckNvbXBvbmVudCcsXG4gICAgXG4gICAgcHJvcHM6IHtcbiAgICAgIG1vZGVsVmFsdWU6IHtcbiAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHZhcmlhbnQ6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICBkZWZhdWx0OiAnZGVmYXVsdCcsXG4gICAgICAgIHZhbGlkYXRvcjogKHZhbHVlKSA9PiBbJ2RlZmF1bHQnLCAnaW52b2ljZXMnLCAnZG9jdW1lbnRzJywgJ3N1cHBsaWVycycsICdjYXRlZ29yaWVzJ10uaW5jbHVkZXModmFsdWUpXG4gICAgICB9LFxuICAgIH0sXG4gIFxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBjb2x1bW5XaWR0aCgpIHtcbiAgICAgICAgY29uc3QgdmFyaWFudHNXaWR0aCA9IHtcbiAgICAgICAgICBkZWZhdWx0OiAyLFxuICAgICAgICAgIGludm9pY2VzOiAzLFxuICAgICAgICAgIGRvY3VtZW50czogMixcbiAgICAgICAgICBzdXBwbGllcnM6IDIuNSxcbiAgICAgICAgICBjYXRlZ29yaWVzOiAyXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB2YXJpYW50c1dpZHRoW3RoaXMudmFyaWFudF0gfHwgNDtcbiAgICAgIH0sXG4gICAgICBhY3RpdmVGaWx0ZXJzKCkge1xuICAgICAgICBjb25zdCBmaWx0ZXJDb25maWdzID0ge1xuICAgICAgICAgIGRlZmF1bHQ6IFtcbiAgICAgICAgICAgIHsgdHlwZTogJ3RleHQnLCBsYWJlbDogJ05vbWJyZSBDb250cmFwYXJ0ZScsIG1vZGVsOiAncHJvdmlkZXInLCBpY29uOiAnbWRpLW1hZ25pZnknIH0sXG4gICAgICAgICAgICB7IHR5cGU6ICd0ZXh0JywgbGFiZWw6ICdOSUYgQ29udHJhcGFydGUnLCBtb2RlbDogJ25pZicsIGljb246ICdtZGktbWFnbmlmeScgfSxcbiAgICAgICAgICAgIHsgdHlwZTogJ3NlbGVjdCcsIGxhYmVsOiAnTsKwIGZhY3R1cmEnLCBtb2RlbDogJ2ludm9pY2UnLCBpdGVtczogW10sIGljb246ICdtZGktbWFnbmlmeScgfSxcbiAgICAgICAgICAgIHsgdHlwZTogJ2RhdGUnLCBsYWJlbDogJ0YuIFZlbmMuJywgbW9kZWw6ICdkdWVEYXRlJyB9LFxuICAgICAgICAgICAgeyB0eXBlOiAnc2VsZWN0JywgbGFiZWw6ICdFc3RhZG8nLCBtb2RlbDogJ3N0YXR1cycsIGl0ZW1zOiB0aGlzLnN0YXR1c0l0ZW1zLCBpY29uOiAnbWRpLW1hZ25pZnknIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIGludm9pY2VzOiBbXG4gICAgICAgICAgICB7IHR5cGU6ICd0ZXh0JywgbGFiZWw6ICdOb21icmUgQ29udHJhcGFydGUnLCBtb2RlbDogJ3Byb3ZpZGVyJywgaWNvbjogJ21kaS1tYWduaWZ5JyB9LFxuICAgICAgICAgICAgeyB0eXBlOiAndGV4dCcsIGxhYmVsOiAnTklGIENvbnRyYXBhcnRlJywgbW9kZWw6ICduaWYnLCBpY29uOiAnbWRpLW1hZ25pZnknIH0sXG4gICAgICAgICAgICB7IHR5cGU6ICd0ZXh0JywgbGFiZWw6ICdOwrAgZmFjdHVyYScsIG1vZGVsOiAnaW52b2ljZScsIGljb246ICdtZGktbWFnbmlmeScgfSxcbiAgICAgICAgICAgIHsgdHlwZTogJ2RhdGUnLCBsYWJlbDogJ0Rlc2RlJywgbW9kZWw6ICdkYXRlRnJvbScgfSxcbiAgICAgICAgICAgIHsgdHlwZTogJ2RhdGUnLCBsYWJlbDogJ0hhc3RhJywgbW9kZWw6ICdkYXRlVG8nIH0sXG4gICAgICAgICAgICB7IHR5cGU6ICdkYXRlJywgbGFiZWw6ICdGLiBWZW5jLicsIG1vZGVsOiAnZHVlRGF0ZScgfSxcbiAgICAgICAgICAgIHsgdHlwZTogJ3NlbGVjdCcsIGxhYmVsOiAnRXN0YWRvJywgbW9kZWw6ICdzdGF0dXMnLCBpdGVtczogdGhpcy5zdGF0dXNJdGVtcyB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBkb2N1bWVudHM6IFtcbiAgICAgICAgICAgIHsgdHlwZTogJ3RleHQnLCBsYWJlbDogJ05vbWJyZSBDb250cmFwYXJ0ZScsIG1vZGVsOiAncHJvdmlkZXInLCBpY29uOiAnbWRpLW1hZ25pZnknIH0sXG4gICAgICAgICAgICB7IHR5cGU6ICd0ZXh0JywgbGFiZWw6ICdOSUYgQ29udHJhcGFydGUnLCBtb2RlbDogJ25pZicsIGljb246ICdtZGktbWFnbmlmeScgfSxcbiAgICAgICAgICAgIHsgdHlwZTogJ3RleHQnLCBsYWJlbDogJ07CsCBmYWN0dXJhJywgbW9kZWw6ICdpbnZvaWNlJywgaWNvbjogJ21kaS1tYWduaWZ5JyB9LFxuICAgICAgICAgICAgeyB0eXBlOiAnZGF0ZScsIGxhYmVsOiAnRGVzZGUnLCBtb2RlbDogJ2RhdGVGcm9tJyB9LFxuICAgICAgICAgICAgeyB0eXBlOiAnZGF0ZScsIGxhYmVsOiAnSGFzdGEnLCBtb2RlbDogJ2RhdGVUbycgfSxcbiAgICAgICAgICAgIHsgdHlwZTogJ3NlbGVjdCcsIGxhYmVsOiAnRXN0YWRvJywgbW9kZWw6ICdzdGF0dXMnLCBpdGVtczogdGhpcy5zdGF0dXNJdGVtcyB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBzdXBwbGllcnM6IFtcbiAgICAgICAgICAgIHsgdHlwZTogJ3RleHQnLCBsYWJlbDogJ05vbWJyZSBDb250cmFwYXJ0ZScsIG1vZGVsOiAncHJvdmlkZXInLCBpY29uOiAnbWRpLW1hZ25pZnknIH0sXG4gICAgICAgICAgICB7IHR5cGU6ICd0ZXh0JywgbGFiZWw6ICdOSUYgQ29udHJhcGFydGUnLCBtb2RlbDogJ25pZicsIGljb246ICdtZGktbWFnbmlmeScgfSxcbiAgICAgICAgICAgIHsgdHlwZTogJ3NlbGVjdCcsIGxhYmVsOiAnQ2F0ZWdvcsOtYXMnLCBtb2RlbDogJ2NhdGVnb3J5JywgaXRlbXM6IFtdLCBpY29uOiAnbWRpLW1hZ25pZnknIH0sXG4gICAgICAgICAgICB7IHR5cGU6ICdzZWxlY3QnLCBsYWJlbDogJ0VzdGFkbycsIG1vZGVsOiAnc3RhdHVzJywgaXRlbXM6IHRoaXMuc3RhdHVzSXRlbXMsIGljb246ICdtZGktbWFnbmlmeScgfSxcbiAgICAgICAgICAgIHsgdHlwZTogJ3NlbGVjdCcsIGxhYmVsOiAnRm9ybWEgZGUgcGFnbycsIG1vZGVsOiAncGF5bWVudE1ldGhvZCcsIGl0ZW1zOiB0aGlzLnBheW1lbnRNZXRob2RJdGVtcywgaWNvbjogJ21kaS1tYWduaWZ5JyB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICBcbiAgICAgICAgcmV0dXJuIGZpbHRlckNvbmZpZ3NbdGhpcy52YXJpYW50XSB8fCBmaWx0ZXJDb25maWdzLmRlZmF1bHQ7XG4gICAgICB9LFxuICBcbiAgICAgIHN0YXR1c0l0ZW1zKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICdQZW5kaWVudGUnLFxuICAgICAgICAgICdBcHJvYmFkbycsXG4gICAgICAgICAgJ1JlY2hhemFkbycsXG4gICAgICAgICAgJ0VuIHByb2Nlc28nXG4gICAgICAgIF07XG4gICAgICB9LFxuICBcbiAgICAgIHBheW1lbnRNZXRob2RJdGVtcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAnVHJhbnNmZXJlbmNpYScsXG4gICAgICAgICAgJ0NoZXF1ZScsXG4gICAgICAgICAgJ0VmZWN0aXZvJyxcbiAgICAgICAgICAnVGFyamV0YSdcbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgPC9zY3JpcHQ+XG4gIFxuICA8c3R5bGUgc2NvcGVkPlxuICAuc2VhcmNoZXJzIHtcbiAgICBwYWRkaW5nOiA4cHg7XG4gIH1cbiAgPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lciB0ZXh0LWNlbnRlciBtdC01XCI+XG4gICAgICA8aW1nIHNyYz1cIi9pbWFnZXMvTG9nby1zY2YtY29uZmlybWluZy5zdmdcIiBhbHQ9XCJMb2dvXCIgc3R5bGU9XCJtYXgtaGVpZ2h0OiA4MHB4O1wiIGNsYXNzPVwibWItNFwiPlxuICBcbiAgICAgIDxoMT40MDQ8L2gxPlxuICBcbiAgICAgIDxoMiBjbGFzcz1cIm1iLTRcIj5Qw6FnaW5hIG5vIGVuY29udHJhZGE8L2gyPlxuICBcbiAgICAgIDxwIGNsYXNzPVwidGV4dC1tdXRlZCBtYi00XCI+XG4gICAgICAgIExvIHNlbnRpbW9zLCBsYSBww6FnaW5hIHF1ZSBidXNjYXMgbm8gZXhpc3RlIG8gb2N1cnJpw7MgdW4gcHJvYmxlbWEgbWllbnRyYXMgcHJvY2Vzw6FiYW1vcyB0dSBzb2xpY2l0dWQuXG4gICAgICA8L3A+XG4gIFxuICAgICAgPHJvdXRlci1saW5rIHRvPVwiL2FwcC9cIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPlZvbHZlciBhbCBJbmljaW88L3JvdXRlci1saW5rPlxuICAgICAgPC9kaXY+XG4gIDwvdGVtcGxhdGU+XG4gIFxuICA8c2NyaXB0IHNldHVwPlxuICAvLyBObyBzZSBuZWNlc2l0YSBsw7NnaWNhIEphdmFTY3JpcHQgY29tcGxlamEgcGFyYSB1bmEgcMOhZ2luYSA0MDQgYsOhc2ljYS5cbiAgLy8gJ3NjcmlwdCBzZXR1cCcgZXMgbGEgc2ludGF4aXMgbW9kZXJuYSB5IHJlY29tZW5kYWRhIGVuIFZ1ZSAzLlxuICA8L3NjcmlwdD5cbiAgXG4gIDxzdHlsZSBzY29wZWQ+XG4gIC8qIEVzdGlsb3Mgc29sbyBwYXJhIGVzdGUgY29tcG9uZW50ZSAqL1xuICBkaXYuY29udGFpbmVyLnRleHQtY2VudGVyLm10LTV7XG4gICAgZm9udC1mYW1pbHk6IHN5c3RlbS11aSwgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIE94eWdlbiwgVWJ1bnR1LCBDYW50YXJlbGwsICdPcGVuIFNhbnMnLCAnSGVsdmV0aWNhIE5ldWUnLCBzYW5zLXNlcmlmO1xuICB9XG5cbiAgLm5vdC1mb3VuZC1jb250YWluZXIge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBwYWRkaW5nOiA0MHB4O1xuICAgIG1hcmdpbi10b3A6IDUwcHg7XG4gIH1cbiAgXG4gIGgxIHtcbiAgICBmb250LXNpemU6IDgwcHg7XG4gICAgZm9udC13ZWlnaHQ6IDEwMDtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxLjI7XG4gIH1cbiAgXG4gIHAge1xuICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gICAgY29sb3I6ICM2Yzc1N2Q7IC8qIFVuIGdyaXMgcGFyYSBlbCB0ZXh0byBkZXNjcmlwdGl2byAqL1xuICB9XG4gIFxuICAvKiBFc3RpbG8gb3BjaW9uYWwgcGFyYSBlbCBlbmxhY2UgKi9cbiAgLnJvdXRlci1saW5rIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luLXRvcDogMjBweDtcbiAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjsgLyogQXp1bCBwcmltYXJpbyBkZSBCb290c3RyYXAsIHBvciBlamVtcGxvICovXG4gICAgY29sb3I6IHdoaXRlO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBib3JkZXItcmFkaXVzOiA1cHg7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzIGVhc2U7XG4gIH1cbiAgXG4gIC5yb3V0ZXItbGluazpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzAwNTZiMztcbiAgfVxuICA8L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgPHYtY29udGFpbmVyPlxuICAgIDx2LWNhcmQgY2xhc3M9XCJpbnZvaWNlLXRlc3RlciBwYS02XCIgZWxldmF0aW9uPVwiMlwiPlxuICAgICAgPCEtLSBIZWFkZXIgU2VjdGlvbiAtLT5cbiAgICAgIDxoZWFkZXIgY2xhc3M9XCJtYi04XCI+XG4gICAgICAgIDx2LWNhcmQtdGl0bGUgY2xhc3M9XCJ0ZXh0LWg0XCI+U2lzdGVtYSBkZSBUZXN0aW5nIGRlIFJlZ2xhczwvdi1jYXJkLXRpdGxlPlxuICAgICAgICA8di1jYXJkLXN1YnRpdGxlIGNsYXNzPVwidGV4dC1ib2R5LTFcIj5cbiAgICAgICAgICBTZWxlY2Npb25hIGxhcyBmYWN0dXJhcyB5IHJlZ2xhcyBxdWUgZGVzZWFzIHZhbGlkYXIuIFxuICAgICAgICAgIDxicj5cbiAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICBObyB0ZSBwcmVvY3VwZXMgZXN0byBubyBhZmVjdGFyYSBkaXJlY3RhbWVudGUgYSB0dXMgZmFjdHVyYXMsIGVzIHNvbG8gcGFyYSBwcm9iYXIgcXVlIGZ1bmNpb25lbi5cbiAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICA8L3YtY2FyZC1zdWJ0aXRsZT5cbiAgICAgIDwvaGVhZGVyPlxuXG4gICAgICA8IS0tIE1haW4gQ29udGVudCBHcmlkIC0tPlxuICAgICAgPHYtcm93PlxuICAgICAgICA8IS0tIExlZnQgQ29sdW1uOiBJbnZvaWNlIFNlbGVjdGlvbiAtLT5cbiAgICAgICAgPHYtY29sIGNvbHM9XCIxMlwiIG1kPVwiN1wiPlxuICAgICAgICAgIDx2LWNhcmQtdGV4dD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1zcGFjZS1iZXR3ZWVuIGFsaWduLWNlbnRlciBtYi00XCI+XG4gICAgICAgICAgICAgIDxoMiBjbGFzcz1cInRleHQtaDVcIj5GYWN0dXJhcyBEaXNwb25pYmxlczwvaDI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWJvZHktMlwiPlxuICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkSW52b2ljZXMubGVuZ3RoIH19IHNlbGVjY2lvbmFkYXMgZGUge3sgaW52b2ljZXMubGVuZ3RoIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gU2VhcmNoIGFuZCBGaWx0ZXIgQmFyIC0tPlxuICAgICAgICAgICAgPHYtcm93IGNsYXNzPVwibWItNFwiPlxuICAgICAgICAgICAgICA8di1jb2wgY29scz1cIjEyXCIgc209XCI2XCI+XG4gICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZFxuICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cInNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICBwcmVwZW5kLWlubmVyLWljb249XCJtZGktbWFnbmlmeVwiXG4gICAgICAgICAgICAgICAgICBsYWJlbD1cIkJ1c2NhciBmYWN0dXJhc1wiXG4gICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgICAgICAgICAgICAgZGVuc2l0eT1cImNvbWZvcnRhYmxlXCJcbiAgICAgICAgICAgICAgICAgIGhpZGUtZGV0YWlsc1xuICAgICAgICAgICAgICAgID48L3YtdGV4dC1maWVsZD5cbiAgICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgICAgPHYtY29sIGNvbHM9XCIxMlwiIHNtPVwiNlwiPlxuICAgICAgICAgICAgICAgIDx2LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cImZpbHRlclN0YXR1c1wiXG4gICAgICAgICAgICAgICAgICA6aXRlbXM9XCJbJ1RvZGFzJywgJ1BlbmRpZW50ZXMnLCAnVmVuY2lkYXMnXVwiXG4gICAgICAgICAgICAgICAgICBsYWJlbD1cIkVzdGFkb1wiXG4gICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgICAgICAgICAgICAgZGVuc2l0eT1cImNvbWZvcnRhYmxlXCJcbiAgICAgICAgICAgICAgICAgIGhpZGUtZGV0YWlsc1xuICAgICAgICAgICAgICAgID48L3Ytc2VsZWN0PlxuICAgICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgICAgPC92LXJvdz5cblxuICAgICAgICAgICAgPCEtLSBJbnZvaWNlIEdyaWQgLS0+XG4gICAgICAgICAgICA8di1yb3c+XG4gICAgICAgICAgICAgIDx2LWNvbCBcbiAgICAgICAgICAgICAgICB2LWZvcj1cImludm9pY2UgaW4gZmlsdGVyZWRJbnZvaWNlc1wiIFxuICAgICAgICAgICAgICAgIDprZXk9XCJpbnZvaWNlLmlkXCIgXG4gICAgICAgICAgICAgICAgY29scz1cIjEyXCIgc209XCI2XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDx2LWNhcmRcbiAgICAgICAgICAgICAgICAgIDpjbGFzcz1cIlsnaW52b2ljZS1jYXJkIHBhLTQnLCB7J3NlbGVjdGVkJzogaXNTZWxlY3RlZChpbnZvaWNlLmlkKX1dXCJcbiAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXG4gICAgICAgICAgICAgICAgICBAY2xpY2s9XCJ0b2dnbGVJbnZvaWNlKGludm9pY2UuaWQpXCJcbiAgICAgICAgICAgICAgICAgIGhvdmVyXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1jZW50ZXIganVzdGlmeS1zcGFjZS1iZXR3ZWVuIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHYtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRJbnZvaWNlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgOnZhbHVlPVwiaW52b2ljZS5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgOmxhYmVsPVwiaW52b2ljZS5pbnZvaWNlTnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBAY2xpY2suc3RvcFxuICAgICAgICAgICAgICAgICAgICAgIGhpZGUtZGV0YWlsc1xuICAgICAgICAgICAgICAgICAgICA+PC92LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICA8di1jaGlwXG4gICAgICAgICAgICAgICAgICAgICAgOmNvbG9yPVwiZ2V0U3RhdHVzQ29sb3IoaW52b2ljZS5leHBpcmF0aW9uRGF0ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRTdGF0dXNUZXh0KGludm9pY2UuZXhwaXJhdGlvbkRhdGUpIH19XG4gICAgICAgICAgICAgICAgICAgIDwvdi1jaGlwPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZvaWNlLWRldGFpbHMgbXQtM1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWNlbnRlciBtYi0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHYtaWNvbiBzaXplPVwic21hbGxcIiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cIm1yLTJcIj5tZGktY3VycmVuY3ktZXVyPC92LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXdlaWdodC1tZWRpdW1cIj57eyBmb3JtYXRDdXJyZW5jeShpbnZvaWNlLnRvdGFsKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24tY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHYtaWNvbiBzaXplPVwic21hbGxcIiBjb2xvcj1cImdyZXlcIiBjbGFzcz1cIm1yLTJcIj5tZGktYWNjb3VudDwvdi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ncmV5XCI+Q2xpZW50ZToge3sgaW52b2ljZS5jbGllbnRTb2NpYWxEZW5vbWluYXRpb24gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx2LWljb24gc2l6ZT1cInNtYWxsXCIgY29sb3I9XCJncmV5XCIgY2xhc3M9XCJtci0yXCI+bWRpLWNhbGVuZGFyPC92LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWdyZXlcIj5WZW5jZToge3sgZm9ybWF0RGF0ZShpbnZvaWNlLmV4cGlyYXRpb25EYXRlKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3YtY2FyZD5cbiAgICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgIDwvdi1yb3c+XG4gICAgICAgICAgPC92LWNhcmQtdGV4dD5cbiAgICAgICAgPC92LWNvbD5cblxuICAgICAgICA8IS0tIFJpZ2h0IENvbHVtbjogUnVsZXMgYW5kIEFjdGlvbnMgLS0+XG4gICAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIiBtZD1cIjVcIj5cbiAgICAgICAgICA8di1jYXJkLXRleHQ+XG4gICAgICAgICAgICA8aDIgY2xhc3M9XCJ0ZXh0LWg1IG1iLTRcIj5Db25maWd1cmFjacOzbiBkZSBSZWdsYXM8L2gyPlxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgIDx2LWJ0blxuICAgICAgICAgICAgICBjb2xvcj1cImdyZXlcIlxuICAgICAgICAgICAgICBibG9ja1xuICAgICAgICAgICAgICBAY2xpY2s9XCJ0b2dnbGVBbGxSdWxlc1wiXG4gICAgICAgICAgICAgIDpkaXNhYmxlZD1cImxvYWRpbmdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8di1pY29uIHN0YXJ0Pm1kaS1zZWxlY3QtYWxsPC92LWljb24+XG4gICAgICAgICAgICAgIFRvZGFzL05pbmd1bmEgcmVnbGFzXG4gICAgICAgICAgICA8L3YtYnRuPlxuICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8IS0tIFJ1bGVzIFNlbGVjdGlvbiAtLT5cbiAgICAgICAgICAgIDx2LWNhcmQgdmFyaWFudD1cIm91dGxpbmVkXCIgY2xhc3M9XCJydWxlcy1jYXJkIHBhLTQgbWItNlwiPlxuICAgICAgICAgICAgICA8ZGl2IFxuICAgICAgICAgICAgICAgIHYtZm9yPVwiKGVuYWJsZWQsIHJ1bGUpIGluIHNlbGVjdGVkUnVsZXNcIiBcbiAgICAgICAgICAgICAgICA6a2V5PVwicnVsZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJydWxlLWl0ZW1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHYtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFJ1bGVzW3J1bGVdXCJcbiAgICAgICAgICAgICAgICAgIDpsYWJlbD1cImdldFJ1bGVOYW1lKHJ1bGUpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1zbG90OmFwcGVuZD5cbiAgICAgICAgICAgICAgICAgICAgPHYtdG9vbHRpcCA6dGV4dD1cImdldFJ1bGVEZXNjcmlwdGlvbihydWxlKVwiIGxvY2F0aW9uPVwicmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1zbG90OmFjdGl2YXRvcj1cInsgcHJvcHMgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHYtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICB2LWJpbmQ9XCJwcm9wc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiZ3JleS1kYXJrZW4tMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+bWRpLWluZm9ybWF0aW9uPC92LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC92LXRvb2x0aXA+XG4gICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvdi1jaGVja2JveD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3YtY2FyZD5cblxuICAgICAgICAgICAgPCEtLSBBY3Rpb24gQnV0dG9ucyAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTNcIj5cbiAgICAgICAgICAgICAgPHYtYnRuXG4gICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgICAgICAgIGJsb2NrXG4gICAgICAgICAgICAgICAgOmxvYWRpbmc9XCJsb2FkaW5nXCJcbiAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCIhY2FuUnVuVGVzdFwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwicnVuVGVzdFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8di1pY29uIHN0YXJ0Pm1kaS1wbGF5PC92LWljb24+XG4gICAgICAgICAgICAgICAge3sgbG9hZGluZyA/ICdQcm9jZXNhbmRvLi4uJyA6ICdFamVjdXRhciBUZXN0JyB9fVxuICAgICAgICAgICAgICA8L3YtYnRuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC92LWNhcmQtdGV4dD5cbiAgICAgICAgPC92LWNvbD5cbiAgICAgIDwvdi1yb3c+XG5cbiAgICAgIDwhLS0gUmVzdWx0cyBTZWN0aW9uIC0tPlxuICAgICAgPHYtZXhwYW5kLXRyYW5zaXRpb24+XG4gICAgICAgIDxkaXYgdi1pZj1cInJlc3VsdHNcIiBjbGFzcz1cIm10LThcIj5cbiAgICAgICAgICA8di1kaXZpZGVyIGNsYXNzPVwibWItNlwiPjwvdi1kaXZpZGVyPlxuICAgICAgICAgIFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1zcGFjZS1iZXR3ZWVuIGFsaWduLWNlbnRlciBtYi00XCI+XG4gICAgICAgICAgICA8aDIgY2xhc3M9XCJ0ZXh0LWg1XCI+UmVzdWx0YWRvcyBkZWwgVGVzdDwvaDI+XG4gICAgICAgICAgICA8di1idG5cbiAgICAgICAgICAgICAgdmFyaWFudD1cInRleHRcIlxuICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJleHBvcnRSZXN1bHRzXCJcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwibG9hZGluZ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDx2LWljb24gc3RhcnQ+bWRpLWRvd25sb2FkPC92LWljb24+XG4gICAgICAgICAgICAgIEV4cG9ydGFyIFJlc3VsdGFkb3NcbiAgICAgICAgICAgIDwvdi1idG4+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFJlc3VsdHMgU3VtbWFyeSAtLT5cbiAgICAgICAgICA8di1yb3cgY2xhc3M9XCJtYi02XCI+XG4gICAgICAgICAgICA8di1jb2wgY29scz1cIjEyXCIgc209XCI0XCI+XG4gICAgICAgICAgICAgIDx2LWNhcmQgY2xhc3M9XCJzdW1tYXJ5LWNhcmRcIiBjb2xvcj1cInN1Y2Nlc3MtbGlnaHRlbi01XCI+XG4gICAgICAgICAgICAgICAgPHYtY2FyZC10ZXh0PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtaDYgc3VjY2Vzcy10ZXh0XCI+UHJ1ZWJhcyBFeGl0b3NhczwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtaDRcIj57eyBnZXRTdWNjZXNzQ291bnQgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3YtY2FyZC10ZXh0PlxuICAgICAgICAgICAgICA8L3YtY2FyZD5cbiAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgICA8di1jb2wgY29scz1cIjEyXCIgc209XCI0XCI+XG4gICAgICAgICAgICAgIDx2LWNhcmQgY2xhc3M9XCJzdW1tYXJ5LWNhcmRcIiBjb2xvcj1cImVycm9yLWxpZ2h0ZW4tNVwiPlxuICAgICAgICAgICAgICAgIDx2LWNhcmQtdGV4dD5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWg2IGVycm9yLXRleHRcIj5QcnVlYmFzIEZhbGxpZGFzPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1oNFwiPnt7IGdldEZhaWx1cmVDb3VudCB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvdi1jYXJkLXRleHQ+XG4gICAgICAgICAgICAgIDwvdi1jYXJkPlxuICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIiBzbT1cIjRcIj5cbiAgICAgICAgICAgICAgPHYtY2FyZCBjbGFzcz1cInN1bW1hcnktY2FyZFwiIGNvbG9yPVwicHJpbWFyeS1saWdodGVuLTVcIj5cbiAgICAgICAgICAgICAgICA8di1jYXJkLXRleHQ+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1oNiBwcmltYXJ5LXRleHRcIj5UYXNhIGRlIMOJeGl0bzwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtaDRcIj57eyBnZXRTdWNjZXNzUmF0ZSB9fSU8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3YtY2FyZC10ZXh0PlxuICAgICAgICAgICAgICA8L3YtY2FyZD5cbiAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgPC92LXJvdz5cblxuICAgICAgICAgIDwhLS0gRGV0YWlsZWQgUmVzdWx0cyAtLT5cbiAgICAgICAgICA8di1leHBhbnNpb24tcGFuZWxzPlxuICAgICAgICAgICAgPCEtLSBDYW1iaWFyIGVsIHYtZm9yIHBhcmEgdXNhciBzaW11bGF0aW9ucyAtLT5cbiAgICAgICAgICAgIDx2LWV4cGFuc2lvbi1wYW5lbFxuICAgICAgICAgICAgICB2LWZvcj1cIihzaW11bGF0aW9uLCBpbnZvaWNlSWQpIGluIHJlc3VsdHM/LnNpbXVsYXRpb25zXCJcbiAgICAgICAgICAgICAgOmtleT1cImludm9pY2VJZFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibWItMlwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8di1leHBhbnNpb24tcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24tY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPHYtaWNvblxuICAgICAgICAgICAgICAgICAgOmNvbG9yPVwiaGFzU3VjY2Vzc2Z1bFJ1bGVzKHNpbXVsYXRpb24pID8gJ3N1Y2Nlc3MnIDogJ2Vycm9yJ1wiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1yLTJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGhhc1N1Y2Nlc3NmdWxSdWxlcyhzaW11bGF0aW9uKSA/ICdtZGktY2hlY2stY2lyY2xlJyA6ICdtZGktYWxlcnQtY2lyY2xlJyB9fVxuICAgICAgICAgICAgICAgIDwvdi1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC13ZWlnaHQtbWVkaXVtXCI+e3sgc2ltdWxhdGlvbi5pbnZvaWNlX251bWJlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8di1jaGlwXG4gICAgICAgICAgICAgICAgICA6Y29sb3I9XCJoYXNTdWNjZXNzZnVsUnVsZXMoc2ltdWxhdGlvbikgPyAnc3VjY2VzcycgOiAnZXJyb3InXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWwtNFwiXG4gICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGhhc1N1Y2Nlc3NmdWxSdWxlcyhzaW11bGF0aW9uKSA/ICfDiXhpdG8nIDogJ0ZhbGxpZG8nIH19XG4gICAgICAgICAgICAgICAgPC92LWNoaXA+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC92LWV4cGFuc2lvbi1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDx2LWV4cGFuc2lvbi1wYW5lbC10ZXh0PlxuICAgICAgICAgICAgICAgIDx2LWNhcmQgZmxhdCBjbGFzcz1cInJlc3VsdC1kZXRhaWwgcGEtNFwiPlxuICAgICAgICAgICAgICAgICAgPCEtLSBFc3RhZG8gSW5pY2lhbCAtLT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi00XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlLTEgZm9udC13ZWlnaHQtbWVkaXVtIG1iLTJcIj5Fc3RhZG8gSW5pY2lhbDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8di1jYXJkIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGNsYXNzPVwiYmctZ3JleS1saWdodGVuLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8di1jYXJkLXRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cHJlPnt7IGZvcm1hdFN0YXRlKHNpbXVsYXRpb24ub3JpZ2luYWxfc3RhdHVzKSB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdi1jYXJkLXRleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdi1jYXJkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDwhLS0gUmVzdWx0YWRvcyBwb3IgUmVnbGEgLS0+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zdWJ0aXRsZS0xIGZvbnQtd2VpZ2h0LW1lZGl1bSBtYi0yXCI+UHJvY2VzbyBkZSBWYWxpZGFjacOzbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8di10aW1lbGluZSBkZW5zaXR5PVwiY29tZm9ydGFibGVcIiBhbGlnbj1cInN0YXJ0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHYtdGltZWxpbmUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgdi1mb3I9XCIoZXZlbnQsIGluZGV4KSBpbiBzaW11bGF0aW9uLnRpbWVsaW5lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9XCJpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6ZG90LWNvbG9yPVwiZ2V0VGltZWxpbmVDb2xvcihldmVudC5zdGF0dXMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDppY29uPVwiZ2V0VGltZWxpbmVJY29uKGV2ZW50LnN0YXR1cylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGwtZG90XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDpvcHBvc2l0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2FwdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdFRpbWVsaW5lVHlwZShldmVudC50eXBlKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LWNhcmQgdmFyaWFudD1cIm91dGxpbmVkXCIgOmNsYXNzPVwiWyd0aW1lbGluZS1jYXJkIG14LTIgcGEtMicsIGB0aW1lbGluZS0ke2V2ZW50LnN0YXR1c31gXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ib2R5LTJcIj57eyBldmVudC5tZXNzYWdlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9XCJldmVudC5kZXRhaWxzICYmIE9iamVjdC5rZXlzKGV2ZW50LmRldGFpbHMpLmxlbmd0aCA+IDBcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1jYXB0aW9uIG10LTEgZGV0YWlscy1zZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWZvcj1cIih2YWx1ZSwga2V5KSBpbiBldmVudC5kZXRhaWxzXCIgOmtleT1cImtleVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LXNob3c9XCJzaG91bGRTaG93RGV0YWlsKGtleSlcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkZXRhaWwtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXdlaWdodC1tZWRpdW1cIj57eyBmb3JtYXREZXRhaWxLZXkoa2V5KSB9fTo8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtYXREZXRhaWxWYWx1ZSh2YWx1ZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3YtY2FyZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L3YtdGltZWxpbmUtaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPC92LXRpbWVsaW5lPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDwhLS0gRXN0YWRvIEZpbmFsIC0tPlxuICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc3VidGl0bGUtMSBmb250LXdlaWdodC1tZWRpdW0gbWItMlwiPkVzdGFkbyBGaW5hbDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8di1jYXJkIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGNsYXNzPVwiYmctZ3JleS1saWdodGVuLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8di1jYXJkLXRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cHJlPnt7IGZvcm1hdFN0YXRlKHNpbXVsYXRpb24uZmluYWxfc3RhdHVzKSB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdi1jYXJkLXRleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdi1jYXJkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC92LWNhcmQ+XG4gICAgICAgICAgICAgIDwvdi1leHBhbnNpb24tcGFuZWwtdGV4dD5cbiAgICAgICAgICAgIDwvdi1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgPC92LWV4cGFuc2lvbi1wYW5lbHM+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC92LWV4cGFuZC10cmFuc2l0aW9uPlxuICAgIDwvdi1jYXJkPlxuICA8L3YtY29udGFpbmVyPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdCBzZXR1cD5cbmltcG9ydCB7IHJlZiwgY29tcHV0ZWQsIG9uTW91bnRlZCB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgeyB1c2VHbG9iYWxVdGlscyB9IGZyb20gJy4uL3V0aWxzL2dsb2JhbHMnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcblxuLy8gRXN0YWRvXG5jb25zdCBpbnZvaWNlcyA9IHJlZihbXSk7XG5jb25zdCBzZWxlY3RlZEludm9pY2VzID0gcmVmKFtdKTtcbmNvbnN0IHNlYXJjaCA9IHJlZignJyk7XG5jb25zdCBmaWx0ZXJTdGF0dXMgPSByZWYoJ1RvZGFzJyk7XG5jb25zdCBzZWxlY3RlZFJ1bGVzID0gcmVmKHtcbiAgRWxlZ2liaWxpdHlSdWxlOiBmYWxzZSxcbiAgRXhwaXJhdGlvbkRhdGVzUnVsZTogZmFsc2UsXG4gIExpbWl0c1J1bGU6IGZhbHNlLFxuICBEaXNjb3VudEdyb3Vwc1J1bGU6IGZhbHNlLFxuICBQYXltZW50TWV0aG9kc1J1bGU6IGZhbHNlXG59KTtcbmNvbnN0IHJlc3VsdHMgPSByZWYobnVsbCk7XG5jb25zdCBsb2FkaW5nID0gcmVmKGZhbHNlKTtcbmNvbnN0IHsgdG9hc3QgfSA9IHVzZUdsb2JhbFV0aWxzKCk7XG5cbi8vIENvbXB1dGVkIFByb3BlcnRpZXNcbmNvbnN0IGZpbHRlcmVkSW52b2ljZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gIGxldCBmaWx0ZXJlZCA9IFsuLi5pbnZvaWNlcy52YWx1ZV07XG4gIFxuICAvLyBBcGxpY2FyIGLDunNxdWVkYVxuICBpZiAoc2VhcmNoLnZhbHVlKSB7XG4gICAgY29uc3Qgc2VhcmNoVGVybSA9IHNlYXJjaC52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgIGZpbHRlcmVkID0gZmlsdGVyZWQuZmlsdGVyKGludm9pY2UgPT4gXG4gICAgICBpbnZvaWNlLmludm9pY2VOdW1iZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXJtKVxuICAgICk7XG4gIH1cbiAgXG4gIC8vIEFwbGljYXIgZmlsdHJvIGRlIGVzdGFkb1xuICBpZiAoZmlsdGVyU3RhdHVzLnZhbHVlICE9PSAnVG9kYXMnKSB7XG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgIGZpbHRlcmVkID0gZmlsdGVyZWQuZmlsdGVyKGludm9pY2UgPT4ge1xuICAgICAgY29uc3QgaXNFeHBpcmVkID0gbmV3IERhdGUoaW52b2ljZS5leHBpcmF0aW9uRGF0ZSkgPCB0b2RheTtcbiAgICAgIHJldHVybiBmaWx0ZXJTdGF0dXMudmFsdWUgPT09ICdWZW5jaWRhcycgPyBpc0V4cGlyZWQgOiAhaXNFeHBpcmVkO1xuICAgIH0pO1xuICB9XG4gIFxuICByZXR1cm4gZmlsdGVyZWQ7XG59KTtcblxuY29uc3QgY2FuUnVuVGVzdCA9IGNvbXB1dGVkKCgpID0+IFxuICBzZWxlY3RlZEludm9pY2VzLnZhbHVlLmxlbmd0aCA+IDAgJiYgXG4gIE9iamVjdC52YWx1ZXMoc2VsZWN0ZWRSdWxlcy52YWx1ZSkuc29tZShydWxlID0+IHJ1bGUpXG4pO1xuXG4vLyBDb21wdXRlZHMuLi5cbmNvbnN0IGdldFN1Y2Nlc3NDb3VudCA9IGNvbXB1dGVkKCgpID0+IHJlc3VsdHMudmFsdWU/LnN1bW1hcnk/LnN1Y2Nlc3NmdWwgPz8gMCk7XG5jb25zdCBnZXRGYWlsdXJlQ291bnQgPSBjb21wdXRlZCgoKSA9PiByZXN1bHRzLnZhbHVlPy5zdW1tYXJ5Py5mYWlsZWQgPz8gMCk7XG5jb25zdCBnZXRTdWNjZXNzUmF0ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgaWYgKCFyZXN1bHRzLnZhbHVlPy5zdW1tYXJ5Py50b3RhbCkgcmV0dXJuIDA7XG4gIHJldHVybiBNYXRoLnJvdW5kKChyZXN1bHRzLnZhbHVlLnN1bW1hcnkuc3VjY2Vzc2Z1bCAvIHJlc3VsdHMudmFsdWUuc3VtbWFyeS50b3RhbCkgKiAxMDApO1xufSk7XG5cbi8vIE3DqXRvZG9zXG5jb25zdCBpc1NlbGVjdGVkID0gKGlkKSA9PiBzZWxlY3RlZEludm9pY2VzLnZhbHVlLmluY2x1ZGVzKGlkKTtcblxuY29uc3QgaGFzU3VjY2Vzc2Z1bFJ1bGVzID0gKHNpbXVsYXRpb24pID0+IHtcbiAgaWYgKCFzaW11bGF0aW9uLmZpbmFsX3N0YXR1cykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gc2ltdWxhdGlvbi5maW5hbF9zdGF0dXMuYWR2YW5jZUFsbG93ZWQgPT09IHRydWU7XG59O1xuXG5jb25zdCB0b2dnbGVJbnZvaWNlID0gKGlkKSA9PiB7XG4gIGlmIChpc1NlbGVjdGVkKGlkKSkge1xuICAgIHNlbGVjdGVkSW52b2ljZXMudmFsdWUgPSBzZWxlY3RlZEludm9pY2VzLnZhbHVlLmZpbHRlcihpID0+IGkgIT09IGlkKTtcbiAgfSBlbHNlIHtcbiAgICBzZWxlY3RlZEludm9pY2VzLnZhbHVlLnB1c2goaWQpO1xuICB9XG59O1xuXG5cblxuY29uc3QgZm9ybWF0RGF0ZSA9IChkYXRlU3RyKSA9PiB7XG4gIGlmICghZGF0ZVN0cikgcmV0dXJuICcnO1xuXG4gIGNvbnN0IFt5ZWFyLCBtb250aCwgZGF5XSA9IGRhdGVTdHIuc3BsaXQoJy0nKTtcbiAgcmV0dXJuIGAke2RheX0vJHttb250aH0vJHt5ZWFyfWA7XG59O1xuXG5cbmNvbnN0IGZvcm1hdEN1cnJlbmN5ID0gKGFtb3VudCkgPT4ge1xuICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KCdlcy1FUycsIHtcbiAgICBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICBjdXJyZW5jeTogJ0VVUidcbiAgfSkuZm9ybWF0KGFtb3VudCk7XG59O1xuXG5jb25zdCBmb3JtYXRTdGF0ZSA9IChzdGF0ZSkgPT4ge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc3RhdGUsIG51bGwsIDIpO1xufTtcblxuY29uc3QgZ2V0U3RhdHVzQ29sb3IgPSAoZGF0ZSkgPT4ge1xuICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IGV4cGlyYXRpb25EYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gIGlmIChleHBpcmF0aW9uRGF0ZSA8IHRvZGF5KSByZXR1cm4gJ2Vycm9yJztcbiAgaWYgKGV4cGlyYXRpb25EYXRlIC0gdG9kYXkgPCA3ICogMjQgKiA2MCAqIDYwICogMTAwMCkgcmV0dXJuICd3YXJuaW5nJztcbiAgcmV0dXJuICdzdWNjZXNzJztcbn07XG5cbmNvbnN0IGdldFN0YXR1c1RleHQgPSAoZGF0ZSkgPT4ge1xuICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IGV4cGlyYXRpb25EYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gIGlmIChleHBpcmF0aW9uRGF0ZSA8IHRvZGF5KSByZXR1cm4gJ1ZlbmNpZGEnO1xuICBpZiAoZXhwaXJhdGlvbkRhdGUgLSB0b2RheSA8IDcgKiAyNCAqIDYwICogNjAgKiAxMDAwKSByZXR1cm4gJ1Byw7N4aW1hJztcbiAgcmV0dXJuICdWaWdlbnRlJztcbn07XG5cbmNvbnN0IGdldFJ1bGVOYW1lID0gKHJ1bGUpID0+ICh7XG4gIEVsZWdpYmlsaXR5UnVsZTogJ0VsZWdpYmlsaWRhZCcsXG4gIEV4cGlyYXRpb25EYXRlc1J1bGU6ICdGZWNoYXMgZGUgVmVuY2ltaWVudG8nLFxuICBMaW1pdHNSdWxlOiAnTMOtbWl0ZXMnLFxuICBEaXNjb3VudEdyb3Vwc1J1bGU6ICdHcnVwb3MgZGUgRGVzY3VlbnRvJyxcbiAgUGF5bWVudE1ldGhvZHNSdWxlOiAnTcOpdG9kb3MgZGUgUGFnbydcbn0pW3J1bGVdO1xuXG5jb25zdCBnZXRSdWxlRGVzY3JpcHRpb24gPSAocnVsZSkgPT4gKHtcbiAgRWxlZ2liaWxpdHlSdWxlOiAnVmVyaWZpY2Egc2kgbGEgZmFjdHVyYSBjdW1wbGUgY29uIGxvcyBjcml0ZXJpb3MgYsOhc2ljb3MgZGUgZWxlZ2liaWxpZGFkJyxcbiAgRXhwaXJhdGlvbkRhdGVzUnVsZTogJ1ZhbGlkYSBsYXMgZmVjaGFzIGRlIHZlbmNpbWllbnRvIHkgcGxhem9zIGRlIHBhZ28nLFxuICBMaW1pdHNSdWxlOiAnQ29tcHJ1ZWJhIHF1ZSBsb3MgbW9udG9zIGVzdMOpbiBkZW50cm8gZGUgbG9zIGzDrW1pdGVzIGVzdGFibGVjaWRvcycsXG4gIERpc2NvdW50R3JvdXBzUnVsZTogJ1ZhbGlkYSBsYSBhcGxpY2FjacOzbiBjb3JyZWN0YSBkZSBkZXNjdWVudG9zIHNlZ8O6biBlbCBncnVwbycsXG4gIFBheW1lbnRNZXRob2RzUnVsZTogJ1ZlcmlmaWNhIGxhIGRpc3BvbmliaWxpZGFkIHkgdmFsaWRleiBkZSBsb3MgbcOpdG9kb3MgZGUgcGFnbydcbn0pW3J1bGVdO1xuXG5jb25zdCB0b2dnbGVBbGxSdWxlcyA9ICgpID0+IHtcbiAgY29uc3Qgc3J2ID0gc2VsZWN0ZWRSdWxlcy52YWx1ZTtcbiAgY29uc3QgdG9nZ2xlZFZhbHVlID0gIXNydi5FbGVnaWJpbGl0eVJ1bGUgJiYgIXNydi5FeHBpcmF0aW9uRGF0ZXNSdWxlICYmICFzcnYuTGltaXRzUnVsZSAmJiAhc3J2LkRpc2NvdW50R3JvdXBzUnVsZSAmJiAhc3J2LlBheW1lbnRNZXRob2RzUnVsZTtcblxuICBzZWxlY3RlZFJ1bGVzLnZhbHVlID0ge1xuICAgIEVsZWdpYmlsaXR5UnVsZTogdG9nZ2xlZFZhbHVlLFxuICAgIEV4cGlyYXRpb25EYXRlc1J1bGU6IHRvZ2dsZWRWYWx1ZSxcbiAgICBMaW1pdHNSdWxlOiB0b2dnbGVkVmFsdWUsXG4gICAgRGlzY291bnRHcm91cHNSdWxlOiB0b2dnbGVkVmFsdWUsXG4gICAgUGF5bWVudE1ldGhvZHNSdWxlOiB0b2dnbGVkVmFsdWVcbiAgfTtcbiAgXG4gIHJlc3VsdHMudmFsdWUgPSBudWxsO1xufTtcblxuY29uc3QgZXhwb3J0UmVzdWx0cyA9ICgpID0+IHtcbiAgaWYgKCFyZXN1bHRzLnZhbHVlKSByZXR1cm47XG5cbiAgY29uc3QgZXhwb3J0RGF0YSA9IHtcbiAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBzdW1tYXJ5OiByZXN1bHRzLnZhbHVlLnN1bW1hcnksXG4gICAgc2ltdWxhdGlvbnM6IHJlc3VsdHMudmFsdWUuc2ltdWxhdGlvbnNcbiAgfTtcblxuICBjb25zdCBibG9iID0gbmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KGV4cG9ydERhdGEsIG51bGwsIDIpXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vanNvbicgfSk7XG4gIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICBsaW5rLmhyZWYgPSB1cmw7XG4gIGxpbmsuZG93bmxvYWQgPSBgdGVzdC1yZXN1bHRzLSR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF19Lmpzb25gO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICBsaW5rLmNsaWNrKCk7XG4gIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gIFxuICB0b2FzdC5zdWNjZXNzKCdSZXN1bHRhZG9zIGV4cG9ydGFkb3MgY29ycmVjdGFtZW50ZScpO1xufTtcblxuLy8gQWp1c3RhciBsYSBmdW5jacOzbiBydW5UZXN0IHBhcmEgdXNhciBsYSBudWV2YSBlc3RydWN0dXJhXG5jb25zdCBydW5UZXN0ID0gYXN5bmMgKCkgPT4ge1xuICBpZiAoIWNhblJ1blRlc3QudmFsdWUpIHJldHVybjtcbiAgXG4gIGxvYWRpbmcudmFsdWUgPSB0cnVlO1xuICByZXN1bHRzLnZhbHVlID0gbnVsbDtcbiAgXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0KCcvYXBpL3Rvb2xzL3J1bGUtdGVzdGVyL3NpbXVsYXRlJywge1xuICAgICAgaW52b2ljZUlkczogc2VsZWN0ZWRJbnZvaWNlcy52YWx1ZSxcbiAgICAgIHJ1bGVzOiBzZWxlY3RlZFJ1bGVzLnZhbHVlXG4gICAgfSk7XG5cbiAgICByZXN1bHRzLnZhbHVlID0gcmVzcG9uc2UuZGF0YTtcbiAgICBjb25zdCB7IHN1Y2Nlc3NmdWwsIHRvdGFsIH0gPSByZXNwb25zZS5kYXRhLnN1bW1hcnk7XG4gICAgXG4gICAgaWYgKHN1Y2Nlc3NmdWwgPT09IHRvdGFsKSB7XG4gICAgICB0b2FzdC5zdWNjZXNzKGDCocOJeGl0byEgVG9kYXMgbGFzIGZhY3R1cmFzICgke3RvdGFsfSkgcGFzYXJvbiBsYXMgcHJ1ZWJhc2ApO1xuICAgIH0gZWxzZSBpZiAoc3VjY2Vzc2Z1bCA9PT0gMCkge1xuICAgICAgdG9hc3QuZXJyb3IoYE5pbmd1bmEgZmFjdHVyYSBwYXPDsyBsYXMgcmVnbGFzICgke3RvdGFsfSBmYWxsaWRhcylgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdG9hc3Qud2FybmluZyhgJHtzdWNjZXNzZnVsfSBkZSAke3RvdGFsfSBmYWN0dXJhcyBwYXNhcm9uIGxhcyBwcnVlYmFzYCk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGVuIGxhIHNpbXVsYWNpw7NuOicsIGVycm9yKTtcbiAgICB0b2FzdC5lcnJvcignRXJyb3IgYWwgZWplY3V0YXIgbGEgc2ltdWxhY2nDs246ICcgKyAoZXJyb3IucmVzcG9uc2U/LmRhdGE/Lm1lc3NhZ2UgfHwgZXJyb3IubWVzc2FnZSkpO1xuICB9IGZpbmFsbHkge1xuICAgIGxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgfVxufTtcblxuLy8gVGltZUxpbmUgbWV0aG9kc1xuY29uc3QgZ2V0VGltZWxpbmVDb2xvciA9IChzdGF0dXMpID0+IHtcbiAgY29uc3QgY29sb3JzID0ge1xuICAgICdzdWNjZXNzJzogJ3N1Y2Nlc3MnLFxuICAgICdlcnJvcic6ICdlcnJvcicsXG4gICAgJ3NraXBwZWQnOiAnd2FybmluZycsXG4gICAgJ2luZm8nOiAnaW5mbydcbiAgfTtcbiAgcmV0dXJuIGNvbG9yc1tzdGF0dXNdIHx8ICdncmV5Jztcbn07XG5cbmNvbnN0IGdldFRpbWVsaW5lSWNvbiA9IChzdGF0dXMpID0+IHtcbiAgY29uc3QgaWNvbnMgPSB7XG4gICAgJ3N1Y2Nlc3MnOiAnbWRpLWNoZWNrLWNpcmNsZScsXG4gICAgJ2Vycm9yJzogJ21kaS1hbGVydC1jaXJjbGUnLFxuICAgICdza2lwcGVkJzogJ21kaS1za2lwLW5leHQtY2lyY2xlJyxcbiAgICAnaW5mbyc6ICdtZGktaW5mb3JtYXRpb24nLFxuICB9O1xuICByZXR1cm4gaWNvbnNbc3RhdHVzXSB8fCAnbWRpLWNpcmNsZSc7XG59O1xuXG5jb25zdCBmb3JtYXRUaW1lbGluZVR5cGUgPSAodHlwZSkgPT4ge1xuICBjb25zdCB0eXBlcyA9IHtcbiAgICAncnVsZSc6ICdSZWdsYScsXG4gICAgJ3ZhbGlkYXRpb24nOiAnVmFsaWRhY2nDs24nLFxuICAgICd0YXJnZXQnOiAnVGFyZ2V0JyxcbiAgICAnaW5mbyc6ICdJbmZvJ1xuICB9O1xuICByZXR1cm4gdHlwZXNbdHlwZV0gfHwgdHlwZTtcbn07XG5cbmNvbnN0IHNob3VsZFNob3dEZXRhaWwgPSAoa2V5KSA9PiB7XG4gIC8vIEZpbHRyYXIgcXXDqSBkZXRhbGxlcyBxdWVyZW1vcyBtb3N0cmFyXG4gIC8vIGNvbnN0IHZhbGlkS2V5cyA9IFsncnVsZV9pZCcsICdwcmlvcml0eScsICd0YXJnZXRfaWQnLCAnbWVzc2FnZSddO1xuICAvLyByZXR1cm4gdmFsaWRLZXlzLmluY2x1ZGVzKGtleSk7XG4gIHJldHVybiB0cnVlO1xufTtcblxuY29uc3QgZm9ybWF0RGV0YWlsS2V5ID0gKGtleSkgPT4ge1xuICBjb25zdCBrZXlNYXAgPSB7XG4gICAgJ3J1bGVfaWQnOiAnUmVnbGEgSUQnLFxuICAgICdwcmlvcml0eSc6ICdQcmlvcmlkYWQnLFxuICAgICd0YXJnZXRfaWQnOiAnVGFyZ2V0IElEJyxcbiAgICAnbWVzc2FnZSc6ICdNZW5zYWplJ1xuICB9O1xuICByZXR1cm4ga2V5TWFwW2tleV0gfHwga2V5O1xufTtcblxuY29uc3QgZm9ybWF0RGV0YWlsVmFsdWUgPSAodmFsdWUpID0+IHtcbiAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJ04vQSc7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykgcmV0dXJuIHZhbHVlID8gJ1PDrScgOiAnTm8nO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JykgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgcmV0dXJuIHZhbHVlO1xufTtcblxub25Nb3VudGVkKGFzeW5jICgpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldCgnL2FwaS90b29scy9ydWxlLXRlc3Rlci9pbnZvaWNlcycpO1xuICAgIGludm9pY2VzLnZhbHVlID0gcmVzcG9uc2UuZGF0YTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvciBhbCBjYXJnYXIgZmFjdHVyYXM6JywgZXJyb3IpO1xuICAgIHRvYXN0LmVycm9yKCdFcnJvciBhbCBjYXJnYXIgbGFzIGZhY3R1cmFzJyk7XG4gIH1cbn0pO1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG4uaW52b2ljZS10ZXN0ZXIge1xuICBib3JkZXItcmFkaXVzOiAxMnB4O1xufVxuXG4uaW52b2ljZS1jYXJkIHtcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtcbiAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG59XG5cbi5pbnZvaWNlLWNhcmQ6aG92ZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG4gIGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuXG4uaW52b2ljZS1jYXJkLnNlbGVjdGVkIHtcbiAgYm9yZGVyLWNvbG9yOiByZ2IodmFyKC0tdi10aGVtZS1wcmltYXJ5KSk7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYih2YXIoLS12LXRoZW1lLXByaW1hcnktbGlnaHRlbi01KSk7XG59XG5cbi5ydWxlcy1jYXJkIHtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xufVxuXG4ucnVsZS1pdGVtIHtcbiAgcGFkZGluZzogOHB4IDA7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMSk7XG59XG5cbi5ydWxlLWl0ZW06bGFzdC1jaGlsZCB7XG4gIGJvcmRlci1ib3R0b206IG5vbmU7XG59XG5cbi5zdW1tYXJ5LWNhcmQge1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzIGVhc2U7XG59XG5cbi5zdW1tYXJ5LWNhcmQ6aG92ZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG59XG5cbi5zdWNjZXNzLXRleHQge1xuICBjb2xvcjogcmdiKHZhcigtLXYtdGhlbWUtc3VjY2VzcykpO1xufVxuXG4uZXJyb3ItdGV4dCB7XG4gIGNvbG9yOiByZ2IodmFyKC0tdi10aGVtZS1lcnJvcikpO1xufVxuXG4ucHJpbWFyeS10ZXh0IHtcbiAgY29sb3I6IHJnYih2YXIoLS12LXRoZW1lLXByaW1hcnkpKTtcbn1cblxucHJlIHtcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gIG1hcmdpbjogMDtcbiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbn1cblxuLnJlc3VsdC1kZXRhaWwge1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG59XG5cbi8qIFRpbWVMaW5lIFN0eWxlcyAqL1xuLnYtdGltZWxpbmUtaXRlbSB7XG4gIG1hcmdpbi1ib3R0b206IDhweDtcbn1cblxuLnYtdGltZWxpbmUtaXRlbTpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLnRpbWVsaW5lLWNhcmQge1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4ycztcbn1cblxuLnRpbWVsaW5lLWNhcmQ6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IodmFyKC0tdi10aGVtZS1zdXJmYWNlLXZhcmlhbnQpKTtcbn1cblxuLnRpbWVsaW5lLXN1Y2Nlc3Mge1xuICBib3JkZXItbGVmdDogM3B4IHNvbGlkIHJnYih2YXIoLS12LXRoZW1lLXN1Y2Nlc3MpKTtcbn1cblxuLnRpbWVsaW5lLWVycm9yIHtcbiAgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCByZ2IodmFyKC0tdi10aGVtZS1lcnJvcikpO1xufVxuXG4udGltZWxpbmUtc2tpcHBlZCB7XG4gIGJvcmRlci1sZWZ0OiAzcHggc29saWQgcmdiKHZhcigtLXYtdGhlbWUtd2FybmluZykpO1xufVxuXG4udGltZWxpbmUtaW5mbyB7XG4gIGJvcmRlci1sZWZ0OiAzcHggc29saWQgcmdiKHZhcigtLXYtdGhlbWUtaW5mbykpO1xufVxuXG4uZGV0YWlscy1zZWN0aW9uIHtcbiAgbWFyZ2luLXRvcDogNHB4O1xuICBwYWRkaW5nLXRvcDogNHB4O1xuICBib3JkZXItdG9wOiAxcHggZGFzaGVkIHJnYmEodmFyKC0tdi1ib3JkZXItY29sb3IpLCAwLjIpO1xufVxuXG4uZGV0YWlsLWl0ZW0ge1xuICBwYWRkaW5nOiAycHggMDtcbiAgY29sb3I6IHJnYmEodmFyKC0tdi10aGVtZS1vbi1zdXJmYWNlKSwgMC43KTtcbn1cblxuLnYtdGltZWxpbmUtaXRlbV9fYm9keSB7XG4gIG1heC13aWR0aDogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4udGltZWxpbmUtY2FyZCAudGV4dC1ib2R5LTIge1xuICBjb2xvcjogcmdiYSh2YXIoLS12LXRoZW1lLW9uLXN1cmZhY2UpLCAwLjg3KTtcbn1cbjwvc3R5bGU+Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9*/