/*!*****************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNzcyIsIm1hcHBpbmdzIjoiOzs7O0FBZ1VBO0VBQ0UsaUJBQWlCO0VBQ2pCLGlCQUFpQjtFQUNqQixXQUFXO0VBQ1gseUJBQXlCO0VBQ3pCLGdCQUFnQjtFQUNoQixrQkFBa0I7RUFDbEIsZUFBZTtBQUNqQjtBQUVBO0VBQ0UsV0FBVztBQUNiOzs7Ozs7QUMwc0JBO0lBQ0ksaUJBQWlCO0lBQ2pCLGVBQWU7QUFDbkI7QUFFQTtJQUNJLGtCQUFrQjtBQUN0QjtBQUVBO0lBQ0ksZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQixtQkFBbUI7QUFDdkI7O0FBRUEsNkJBQTZCO0FBQzdCO0lBQ0ksVUFBVTtBQUNkO0FBRUE7SUFDSSxtQkFBbUI7QUFDdkI7QUFFQTtJQUNJLGdCQUFnQjtJQUNoQixrQkFBa0I7QUFDdEI7QUFFQTtJQUNJLGdCQUFnQjtBQUNwQjs7Ozs7O0FDcDdCQSxrQ0FBa0M7QUFDbEM7RUFDRSxhQUFhO0FBQ2Y7O0FBRUEsMERBQTBEO0FBQzFEO0VBQ0UsUUFBUSxFQUFFLDhDQUE4QztFQUN4RCxpQkFBaUI7RUFDakIsbUJBQW1CO0VBQ25CLGdCQUFnQjtBQUNsQjtBQUVBO0VBQ0UsZUFBZTtFQUNmLGNBQWM7RUFDZCxpQkFBaUIsRUFBRSx5Q0FBeUM7QUFDOUQ7QUFFQTtFQUNFLGtCQUFrQjtFQUNsQixnQkFBZ0I7RUFDaEIscUJBQXFCO0VBQ3JCLHlCQUF5QjtFQUN6QixtQkFBbUI7RUFDbkIsY0FBYyxFQUFFLDBEQUEwRDtFQUMxRSxZQUFZO0FBQ2Q7QUFFQTtFQUNFLDJCQUEyQjtFQUMzQix1QkFBdUI7RUFDdkIsMEJBQTBCO0VBQzFCLHVCQUF1QjtFQUN2QiwyQkFBMkIsRUFBRSxpREFBaUQ7RUFDOUUsY0FBYztBQUNoQjtBQUVBO0VBQ0UsV0FBVztFQUNYLFlBQVk7QUFDZDtBQUVBO0VBQ0UsZ0JBQWdCO0VBQ2hCLGdCQUFnQjtBQUNsQjs7QUFFQSxpQ0FBaUM7QUFDakM7QUFDRTtJQUNFLDRCQUE0QjtBQUM5QjtBQUVBO0lBQ0UsUUFBUSxFQUFFLCtCQUErQjtBQUMzQzs7RUFFQSxzQkFBc0I7QUFDdEI7SUFDRSwwQkFBMEI7SUFDMUIsNEJBQTRCO0FBQzlCOztFQUVBLHVCQUF1QjtBQUN2QjtJQUNFLDRCQUE0QjtJQUM1QiwyQkFBMkI7QUFDN0I7O0VBRUEsOEJBQThCO0FBQzlCO0lBQ0UsMEJBQTBCO0lBQzFCLHNCQUFzQjtJQUN0Qix1QkFBdUI7SUFDdkIsdUJBQXVCO0lBQ3ZCLDJCQUEyQjtBQUM3QjtBQUVBO0lBQ0UsMEJBQTBCO0FBQzVCOztFQUVBLDZCQUE2QjtBQUM3QjtJQUNFLHNCQUFzQjtJQUN0Qix1QkFBdUI7SUFDdkIsMEJBQTBCO0FBQzVCO0FBRUE7SUFDRSwwQkFBMEI7QUFDNUI7O0VBRUEseUJBQXlCO0FBQ3pCO0lBQ0UsZUFBZTtBQUNqQjs7RUFFQSw2QkFBNkI7QUFDN0I7SUFDRSxxQkFBcUI7QUFDdkI7QUFFQTtJQUNFLHVCQUF1QjtBQUN6QjtBQUNGOzs7Ozs7QUM0QkE7RUFDRSw2REFBNkQ7QUFDL0Q7QUFFQTtFQUNFLGtCQUFrQjtBQUNwQjs7Ozs7O0FDd1pBO0lBQ0ksaUJBQWlCO0lBQ2pCLGVBQWU7QUFDbkI7QUFFQTtJQUNJLGtCQUFrQjtBQUN0QjtBQUVBO0lBQ0ksYUFBYTtBQUNqQjtBQUVBO0lBQ0ksZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQixtQkFBbUI7QUFDdkI7QUFFQTtJQUNJLFVBQVU7QUFDZDtBQUVBO0lBQ0ksbUJBQW1CO0FBQ3ZCO0FBRUE7SUFDSSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0FBQ3RCO0FBRUE7SUFDSSxnQkFBZ0I7QUFDcEI7Ozs7OztBQ2hTQTtFQUNFLHNCQUFzQjtBQUN4QjtBQUVBO0VBQ0UsY0FBYztFQUNkLGdCQUFnQjtFQUNoQixpQkFBaUI7QUFDbkI7QUFFQTtFQUNFLGNBQWM7RUFDZCxZQUFZO0VBQ1osZ0JBQWdCO0VBQ2hCLGlCQUFpQjtFQUNqQixpQkFBaUI7QUFDbkI7QUFFQTtFQUNFLGlCQUFpQjtBQUNuQjtBQUVBO0VBQ0UsZ0JBQWdCO0FBQ2xCO0FBRUE7QUFDRTtJQUNFLG1CQUFtQjtBQUNyQjtBQUNGO0FBRUE7RUFDRSxnQkFBZ0I7RUFDaEIsc0JBQXNCO0FBQ3hCO0FBRUE7RUFDRSxlQUFlO0VBQ2YsZ0JBQWdCO0FBQ2xCOzs7Ozs7QUNwYUE7RUFDRSw4Q0FBOEM7QUFDaEQ7QUFFQTtFQUNFLGtEQUFrRDtBQUNwRDtBQUVBO0VBQ0UsY0FBYztFQUNkLHFCQUFxQjtFQUNyQixtQkFBbUI7RUFDbkIsMkJBQTJCO0FBQzdCO0FBRUE7RUFDRSxjQUFjO0VBQ2QsMEJBQTBCO0FBQzVCO0FBRUE7RUFDRSxjQUFjO0VBQ2QsbUJBQW1CO0FBQ3JCOzs7Ozs7QUNvS0E7RUFDRSxhQUFhO0VBQ2IsZUFBZTtBQUNqQjtBQUVBO0VBQ0UseUJBQXlCO0VBQ3pCLGlCQUFpQjtFQUNqQiwrQkFBK0I7RUFDL0IsbUJBQW1CO0FBQ3JCO0FBRUE7RUFDRSx5QkFBeUI7QUFDM0I7QUFFQTtFQUNFLHlCQUF5QjtBQUMzQjs7Ozs7O0FDN0lBO0VBQ0UsV0FBVztFQUNYLGlCQUFpQjtFQUNqQixVQUFVO0FBQ1o7QUFFQTtFQUNFLGtCQUFrQjtFQUNsQixnQkFBZ0I7RUFDaEIsWUFBWTtFQUNaLHFDQUFxQztBQUN2QztBQUVBO0VBQ0UsV0FBVztFQUNYLGdCQUFnQjtFQUNoQiw2Q0FBNkM7RUFDN0Msd0NBQXdDO0VBQ3hDLDZFQUE2RTtBQUMvRTtBQUVBO0VBQ0UsV0FBVztFQUNYLHNCQUFzQjtBQUN4QjtBQUVBO0VBQ0UsbUJBQW1CO0VBQ25CLGVBQWU7RUFDZixlQUFlO0VBQ2YsZUFBZTtFQUNmLG9CQUFvQjtFQUNwQixnQkFBZ0I7RUFDaEIseUJBQXlCO0FBQzNCO0FBRUE7RUFDRSxtQkFBbUI7RUFDbkIsZ0JBQWdCO0VBQ2hCLGtCQUFrQjtBQUNwQjtBQUVBO0VBQ0UsVUFBVTtFQUNWLFNBQVM7RUFDVCxXQUFXO0FBQ2I7QUFFQTtFQUNFLFdBQVc7RUFDWCxnQkFBZ0I7QUFDbEI7QUFFQTtFQUNFLFdBQVc7QUFDYjtBQUVBO0VBQ0UsYUFBYTtFQUNiLFdBQVc7QUFDYjs7QUFFQSxzQkFBc0I7QUFDdEI7QUFDRTtJQUNFLGlCQUFpQjtJQUNqQixlQUFlO0FBQ2pCO0FBRUE7SUFDRSwyQkFBMkI7SUFDM0IseUJBQXlCO0FBQzNCO0FBRUE7SUFDRSxrQkFBa0I7SUFDbEIsZ0JBQWdCO0FBQ2xCO0FBRUE7SUFDRSxnQkFBZ0I7QUFDbEI7QUFFQTtJQUNFLHdDQUF3QztJQUN4QyxpQ0FBaUM7SUFDakMscUJBQXFCO0FBQ3ZCO0FBRUE7SUFDRSxXQUFXO0FBQ2I7QUFFQTtJQUNFLG1CQUFtQjtBQUNyQjtBQUVBO0lBQ0UsbUJBQW1CO0lBQ25CLGtCQUFrQjtBQUNwQjtBQUVBO0lBQ0UsbUJBQW1CO0FBQ3JCO0FBQ0Y7QUFFQTtBQUNFO0lBQ0Usa0JBQWtCO0lBQ2xCLGNBQWM7QUFDaEI7QUFFQTtJQUNFLDJCQUEyQjtJQUMzQix5QkFBeUI7QUFDM0I7QUFFQTtJQUNFLGlCQUFpQjtBQUNuQjtBQUVBO0lBQ0UsZUFBZTtBQUNqQjtBQUNGO0FBRUE7QUFDRTtJQUNFLDBCQUEwQjtJQUMxQix5QkFBeUI7QUFDM0I7QUFFQTtJQUNFLGtCQUFrQjtBQUNwQjtBQUNGOztBQUVBLHFCQUFxQjtBQUNyQjtFQUNFLHFDQUFxQztFQUNyQyxnQkFBZ0I7QUFDbEI7QUFFQTtFQUNFLFdBQVc7RUFDWCxrQkFBa0I7QUFDcEI7QUFFQTtFQUNFLFlBQVk7QUFDZDs7QUFFQSwyREFBMkQ7QUFDM0Q7RUFDRSxzQkFBc0I7QUFDeEI7Ozs7OztBQzdKQTtFQUNFLFdBQVc7RUFDWCxpQkFBaUI7RUFDakIsVUFBVTtBQUNaO0FBRUE7RUFDRSxrQkFBa0I7RUFDbEIsZ0JBQWdCO0VBQ2hCLFlBQVk7RUFDWixxQ0FBcUM7QUFDdkM7QUFFQTtFQUNFLFdBQVc7RUFDWCxnQkFBZ0I7RUFDaEIsNkNBQTZDO0VBQzdDLHdDQUF3QztFQUN4Qyw2RUFBNkU7QUFDL0U7QUFFQTtFQUNFLFdBQVc7RUFDWCxzQkFBc0I7QUFDeEI7QUFFQTtFQUNFLG1CQUFtQjtFQUNuQixlQUFlO0VBQ2YsZUFBZTtFQUNmLGVBQWU7RUFDZixvQkFBb0I7RUFDcEIsZ0JBQWdCO0VBQ2hCLHlCQUF5QjtBQUMzQjtBQUVBO0VBQ0UsbUJBQW1CO0VBQ25CLGdCQUFnQjtFQUNoQixrQkFBa0I7QUFDcEI7QUFFQTtFQUNFLFVBQVU7RUFDVixTQUFTO0VBQ1QsV0FBVztBQUNiO0FBRUE7RUFDRSxXQUFXO0VBQ1gsZ0JBQWdCO0FBQ2xCO0FBRUE7RUFDRSxXQUFXO0FBQ2I7QUFFQTtFQUNFLGFBQWE7RUFDYixXQUFXO0FBQ2I7O0FBRUEsc0JBQXNCO0FBQ3RCO0FBQ0U7SUFDRSxpQkFBaUI7SUFDakIsZUFBZTtBQUNqQjtBQUVBO0lBQ0UsMkJBQTJCO0lBQzNCLDBCQUEwQjtBQUM1QjtBQUVBO0lBQ0UsaUJBQWlCO0lBQ2pCLGdCQUFnQjtBQUNsQjtBQUVBO0lBQ0UsZ0JBQWdCO0FBQ2xCO0FBRUE7SUFDRSx3Q0FBd0M7SUFDeEMsaUNBQWlDO0lBQ2pDLHFCQUFxQjtBQUN2QjtBQUVBO0lBQ0UsV0FBVztBQUNiO0FBRUE7SUFDRSxtQkFBbUI7QUFDckI7QUFFQTtJQUNFLG1CQUFtQjtJQUNuQixrQkFBa0I7QUFDcEI7QUFFQTtJQUNFLG1CQUFtQjtBQUNyQjtBQUNGO0FBRUE7QUFDRTtJQUNFLGtCQUFrQjtJQUNsQixjQUFjO0FBQ2hCO0FBRUE7SUFDRSwyQkFBMkI7SUFDM0IsMEJBQTBCO0FBQzVCO0FBRUE7SUFDRSxrQkFBa0I7SUFDbEIsaUJBQWlCO0FBQ25CO0FBRUE7SUFDRSxlQUFlO0FBQ2pCO0FBQ0Y7QUFFQTtBQUNFO0lBQ0UsMkJBQTJCO0lBQzNCLHlCQUF5QjtBQUMzQjtBQUVBO0lBQ0UsaUJBQWlCO0lBQ2pCLGNBQWM7QUFDaEI7QUFDRjs7QUFFQSxxQkFBcUI7QUFDckI7RUFDRSxxQ0FBcUM7RUFDckMsZ0JBQWdCO0FBQ2xCO0FBRUE7RUFDRSxXQUFXO0VBQ1gsa0JBQWtCO0FBQ3BCO0FBRUE7RUFDRSxZQUFZO0FBQ2Q7O0FBRUEsc0VBQXNFO0FBQ3RFO0VBQ0UsY0FBYztBQUNoQjs7QUFFQSwyREFBMkQ7QUFDM0Q7RUFDRSxzQkFBc0I7QUFDeEI7O0FBRUEsNERBQTREO0FBQzVEO0FBQ0U7SUFDRSxnQkFBZ0I7SUFDaEIsZUFBZTtBQUNqQjtBQUVBO0lBQ0UsdUJBQXVCO0FBQ3pCO0FBQ0Y7Ozs7OztBQ3lFQTtFQUNFLHlCQUF5QjtFQUN6QixnQkFBZ0I7QUFDbEI7Ozs7OztBQ3VDQTtJQUNJLGVBQWU7QUFDbkI7Ozs7OztBQ2RFO0lBQ0UsWUFBWTtBQUNkO0FBRUE7SUFDRSx5QkFBeUI7QUFDM0I7QUFFQTtJQUNFLHlCQUF5QjtJQUN6QixpQkFBaUI7SUFDakIsK0JBQStCO0lBQy9CLG1CQUFtQjtBQUNyQjtBQUVBO0lBQ0UseUJBQXlCO0FBQzNCOzs7Ozs7QUNtSEY7RUFDRSxZQUFZO0FBQ2Q7QUFFQTtFQUNFLHlCQUF5QjtFQUN6QixrQkFBa0I7RUFDbEIsWUFBWTtBQUNkO0FBRUE7RUFDRSxnQ0FBZ0M7RUFDaEMsbUJBQW1CO0FBQ3JCO0FBRUE7RUFDRSx5QkFBeUI7RUFDekIsV0FBVztFQUNYLGVBQWU7RUFDZixnQkFBZ0I7QUFDbEI7QUFFQTtFQUNFLHlCQUF5QjtFQUN6QixnQkFBZ0I7RUFDaEIscUJBQXFCO0VBQ3JCLFlBQVk7QUFDZDtBQUVBO0VBQ0UsV0FBVztFQUNYLGVBQWU7RUFDZixrQkFBa0I7QUFDcEI7QUFFQTtFQUNFLGVBQWU7QUFDakI7QUFFQTtFQUNFLGVBQWU7QUFDakI7QUFFQTtFQUNFLFdBQVc7QUFDYjs7Ozs7O0FDcGFBO0VBQ0UsWUFBWTtFQUNaLHlCQUF5QjtBQUMzQjtBQUVBO0VBQ0UsMEJBQTBCO0FBQzVCO0FBRUE7RUFDRSxZQUFZO0VBQ1osOEJBQThCO0VBQzlCLDBCQUEwQjtBQUM1QjtBQUVBO0VBQ0UsWUFBWTtFQUNaLG1DQUFtQztFQUNuQyx1Q0FBdUM7QUFDekM7QUFFQTtFQUNFLCtCQUErQjtBQUNqQztBQUVBOztFQUVFLHlCQUF5QjtBQUMzQjtBQUVBOztFQUVFLFVBQVU7RUFDViw0QkFBNEI7QUFDOUI7QUFFQTtFQUNFLGFBQWE7RUFDYix1QkFBdUI7RUFDdkIsbUJBQW1CO0VBQ25CLFlBQVk7RUFDWixnQkFBZ0I7QUFFaEI7SUFDRSxXQUFXO0lBQ1gsWUFBWTtJQUNaLGlCQUFpQjtJQUNqQixhQUFhO0lBQ2IsdUJBQXVCO0lBQ3ZCLG1CQUFtQjtJQUNuQix5QkFBeUI7QUFDM0I7QUFDRjs7Ozs7O0FDZ0pBO0VBQ0UsV0FBVztBQUNiOzs7Ozs7QUNuSUE7SUFDSSx5QkFBeUI7QUFDN0I7QUFFQTtJQUNJLHlCQUF5QjtJQUN6QixnQkFBZ0I7QUFDcEI7Ozs7OztBQzFFQSx5Q0FBeUM7QUFDekM7SUFFSSxZQUFZO0FBQ2hCOzs7Ozs7QUM2YkE7SUFDSSxZQUFZO0FBQ2hCO0FBRUE7SUFDSSxnQkFBZ0I7SUFDaEIsdUJBQXVCO0FBQzNCO0FBRUE7SUFDSSxhQUFhO0lBQ2IsUUFBUTtBQUNaO0FBRUE7SUFDSSx5QkFBeUI7SUFDekIsaUJBQWlCO0lBQ2pCLCtCQUErQjtJQUMvQixtQkFBbUI7QUFDdkI7QUFFQTtJQUNJLHlCQUF5QjtBQUM3QjtBQUVBO0lBQ0kseUJBQXlCO0FBQzdCOzs7Ozs7QUNuUUE7SUFDSSxjQUFjO0FBQ2xCO0FBRUE7SUFDSSxjQUFjO0lBQ2QseUJBQXlCO0lBQ3pCLFlBQVk7SUFDWixrQkFBa0I7QUFDdEI7Ozs7OztBQ2NBO0lBQ0kseUJBQXlCO0FBQzdCO0FBRUE7SUFDSSx5QkFBeUI7SUFDekIsaUJBQWlCO0lBQ2pCLCtCQUErQjtJQUMvQixtQkFBbUI7QUFDdkI7QUFFQTtJQUNJLHlCQUF5QjtBQUM3QjtBQUVBO0lBQ0kseUJBQXlCO0FBQzdCO0FBRUE7RUFDRSxXQUFXO0VBQ1gsZ0JBQWdCO0VBQ2hCLGlDQUFpQztBQUNuQzs7Ozs7O0FDOURBO0lBQ0kseUJBQXlCO0lBQ3pCLGlCQUFpQjtJQUNqQiwrQkFBK0I7SUFDL0IsbUJBQW1CO0FBQ3ZCO0FBRUE7SUFDSSx5QkFBeUI7QUFDN0I7QUFFQTtJQUNJLHlCQUF5QjtBQUM3Qjs7Ozs7O0FDM0lBO0lBQ0ksWUFBWTtJQUNaLGFBQWE7QUFDakI7QUFFQTtJQUNJLFlBQVk7SUFDWixrQkFBa0I7QUFDdEI7QUFFQTtJQUNJLGNBQWM7SUFDZCxpQkFBaUI7SUFDakIsa0JBQWtCO0FBQ3RCO0FBRUE7SUFDSSxjQUFjO0lBQ2QsbUJBQW1CO0FBQ3ZCO0FBRUE7SUFDSSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLHVCQUF1QjtBQUMzQjs7Ozs7O0FDaU9BO0lBQ0ksT0FBTyxFQUFFLGlDQUFpQztJQUMxQyxhQUFhLEVBQUUsdUJBQXVCO0lBQ3RDLHlCQUF5QixFQUFFLHlDQUF5QztBQUN4RTtBQUVBO0lBQ0ksY0FBYztJQUNkLDJCQUEyQjtBQUMvQjtBQUVBO0lBQ0ksY0FBYztJQUNkLHlCQUF5QjtJQUN6QixZQUFZO0lBQ1osa0JBQWtCO0FBQ3RCO0FBRUE7SUFDSSx5QkFBeUI7SUFDekIsaUJBQWlCO0lBQ2pCLCtCQUErQjtJQUMvQixtQkFBbUI7QUFDdkI7QUFFQTtJQUNJLHlCQUF5QjtBQUM3QjtBQUVBO0lBQ0kseUJBQXlCO0FBQzdCOzs7Ozs7QUM3V0U7SUFDRSxZQUFZO0FBQ2Q7Ozs7OztFQ2pIQSxzQ0FBc0M7QUFDdEM7SUFDRSxtSkFBbUo7QUFDcko7QUFFQTtJQUNFLGtCQUFrQjtJQUNsQixhQUFhO0lBQ2IsZ0JBQWdCO0FBQ2xCO0FBRUE7SUFDRSxlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQixnQkFBZ0I7QUFDbEI7QUFFQTtJQUNFLG1CQUFtQjtJQUNuQixjQUFjLEVBQUUsc0NBQXNDO0FBQ3hEOztFQUVBLG1DQUFtQztBQUNuQztJQUNFLHFCQUFxQjtJQUNyQixnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHlCQUF5QixFQUFFLDRDQUE0QztJQUN2RSxZQUFZO0lBQ1oscUJBQXFCO0lBQ3JCLGtCQUFrQjtJQUNsQixzQ0FBc0M7QUFDeEM7QUFFQTtJQUNFLHlCQUF5QjtBQUMzQjs7Ozs7O0FDc2ZGO0VBQ0UsbUJBQW1CO0FBQ3JCO0FBRUE7RUFDRSx5QkFBeUI7RUFDekIsNkJBQTZCO0FBQy9CO0FBRUE7RUFDRSwyQkFBMkI7RUFDM0IseUNBQXlDO0FBQzNDO0FBRUE7RUFDRSx5Q0FBeUM7RUFDekMsdURBQXVEO0FBQ3pEO0FBRUE7RUFDRSxrQkFBa0I7QUFDcEI7QUFFQTtFQUNFLGNBQWM7RUFDZCwyQ0FBMkM7QUFDN0M7QUFFQTtFQUNFLG1CQUFtQjtBQUNyQjtBQUVBO0VBQ0Usa0JBQWtCO0VBQ2xCLCtCQUErQjtBQUNqQztBQUVBO0VBQ0UsMkJBQTJCO0FBQzdCO0FBRUE7RUFDRSxrQ0FBa0M7QUFDcEM7QUFFQTtFQUNFLGdDQUFnQztBQUNsQztBQUVBO0VBQ0Usa0NBQWtDO0FBQ3BDO0FBRUE7RUFDRSxxQkFBcUI7RUFDckIscUJBQXFCO0VBQ3JCLFNBQVM7RUFDVCxxQ0FBcUM7RUFDckMsbUJBQW1CO0FBQ3JCO0FBRUE7RUFDRSxrQkFBa0I7QUFDcEI7O0FBRUEsb0JBQW9CO0FBQ3BCO0VBQ0Usa0JBQWtCO0FBQ3BCO0FBRUE7RUFDRSxnQkFBZ0I7QUFDbEI7QUFFQTtFQUNFLGtCQUFrQjtFQUNsQixpQ0FBaUM7QUFDbkM7QUFFQTtFQUNFLHFEQUFxRDtBQUN2RDtBQUVBO0VBQ0Usa0RBQWtEO0FBQ3BEO0FBRUE7RUFDRSxnREFBZ0Q7QUFDbEQ7QUFFQTtFQUNFLGtEQUFrRDtBQUNwRDtBQUVBO0VBQ0UsK0NBQStDO0FBQ2pEO0FBRUE7RUFDRSxlQUFlO0VBQ2YsZ0JBQWdCO0VBQ2hCLHVEQUF1RDtBQUN6RDtBQUVBO0VBQ0UsY0FBYztFQUNkLDJDQUEyQztBQUM3QztBQUVBO0VBQ0UsMEJBQTBCO0FBQzVCO0FBRUE7RUFDRSw0Q0FBNEM7QUFDOUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9Db3VudHJ5U2VsZWN0b3IudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jb21wb25lbnRzL0VkaXRQcm9maWxlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9PdmVybGF5LnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9FZGl0Q2xpZW50QmFua0FjY291bnRzLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9DcmVhdGVQcm92aWRlckJhbmtBY2NvdW50LnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9IZWFkZXIudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jb21wb25lbnRzL0Zvb3Rlci52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvSW52b2ljZVN0YXRlSGlzdG9yeU92ZXJsYXkudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy92aWV3cy9BY3Rpb25zLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvdmlld3MvRG9jdW1lbnRzLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9DcmVhdGVQcm92aWRlci52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvQ3JlYXRlSW52b2ljZU92ZXJsYXkudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jb21wb25lbnRzL0R5bmFtaWNGaWx0ZXJUYWJsZUNsaWVudC52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvRHluYW1pY0ZpbHRlclRhYmxlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9Qcmlvcml0eVJ1bGVzT3JkZXJpbmdDb21wb25lbnQudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jb21wb25lbnRzL1NoYXJlQ29tcG9uZW50UnVsZXMudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jb21wb25lbnRzL1BheW1lbnRNZXRob2RzUnVsZUNvbXBvbmVudC52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvSW52b2ljZVJ1bGVzT3ZlcmxheS52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvSW52b2ljZVdpdGhGaWx0ZXJzLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9HZW5lcmFsSG9tZS52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL3ZpZXdzL1Byb3ZpZGVycy52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvSGlzdG9yeUNvbXBvbmVudC52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL3ZpZXdzL0hpc3RvcnkudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy92aWV3cy9Ib21lUHJvdmlkZXJzLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9GaWx0ZXJzLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvdmlld3MvTm90Rm91bmQudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy92aWV3cy9SdWxlVGVzdGVyLnZ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+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+XG4gICAgICAgICAgICAgIDx2LWxpc3QtaXRlbS10aXRsZT5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiaHR0cHM6Ly90aWNrZXRzLnNtYXJ0ZXNjcm93LmV1L1wiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWNlbnRlciB0ZXh0LWRlY29yYXRpb24tbm9uZVwiPlxuICAgICAgICAgICAgICAgICAgPHYtaWNvbiBpY29uPVwibWRpLXRpY2tldFwiIGNsYXNzPVwibXItMVwiLz5cbiAgICAgICAgICAgICAgICAgIFRpY2tldHNcbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDwvdi1saXN0LWl0ZW0tdGl0bGU+XG4gICAgICAgICAgICA8L3YtbGlzdC1pdGVtPlxuXG4gICAgICAgICAgICA8di1saXN0LWl0ZW0gQGNsaWNrPVwiYXV0aFN0b3JlLmxvZ291dFwiPlxuICAgICAgICAgICAgICA8di1saXN0LWl0ZW0tdGl0bGU+XG4gICAgICAgICAgICAgICAgPHYtaWNvbiBpY29uPVwibWRpLWxvZ291dFwiLz5cbiAgICAgICAgICAgICAgICBDZXJyYXIgc2VzacOzblxuICAgICAgICAgICAgICA8L3YtbGlzdC1pdGVtLXRpdGxlPlxuICAgICAgICAgICAgPC92LWxpc3QtaXRlbT5cblxuICAgICAgICAgIDwvdi1saXN0PiBcbiAgICAgICAgPC92LW1lbnU+XG5cbiAgICA8L3YtY29udGFpbmVyPlxuICA8L3YtYXBwLWJhcj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmltcG9ydCB7IHJlZiwgb25Nb3VudGVkLCB3YXRjaCwgY29tcHV0ZWQgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHsgdXNlUm91dGUgfSBmcm9tICd2dWUtcm91dGVyJztcbmltcG9ydCB7IHVzZUF1dGhTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9hdXRoJztcbmltcG9ydCB7IHVzZUxvYWRlclN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL2xvYWRlcic7XG5pbXBvcnQgeyB1c2VUaGVtZSB9IGZyb20gJ3Z1ZXRpZnknO1xuaW1wb3J0IEVkaXRQcm9maWxlIGZyb20gJy4vRWRpdFByb2ZpbGUudnVlJztcbmltcG9ydCBPdmVybGF5IGZyb20gJy4vT3ZlcmxheS52dWUnO1xuaW1wb3J0IEVkaXRDbGllbnRCYW5rQWNjb3VudHMgZnJvbSAnLi9FZGl0Q2xpZW50QmFua0FjY291bnRzLnZ1ZSc7XG5pbXBvcnQgQ3JlYXRlUHJvdmlkZXJCYW5rQWNjb3VudCBmcm9tICcuL0NyZWF0ZVByb3ZpZGVyQmFua0FjY291bnQudnVlJztcbmltcG9ydCB7IHVzZURpc3BsYXkgfSBmcm9tICd2dWV0aWZ5JztcbmltcG9ydCBDb25maWdzIGZyb20gJy4vQ29uZmlncy52dWUnO1xuXG5jb25zdCBNRU5VX0lURU1TID0ge1xuICBDTElFTlQ6IFtcbiAgICB7XG4gICAgICB0aXRsZTogJ0RvY3VtZW50b3MnLFxuICAgICAgcm91dGU6ICcvZG9jdW1lbnRvcycsXG4gICAgICBpY29uOiAnbWRpLWZpbGUnXG4gICAgfSxcbiAgICB7XG4gICAgICB0aXRsZTogJ0FjY2lvbmVzJyxcbiAgICAgIHJvdXRlOiAnL2FjY2lvbmVzJyxcbiAgICAgIGljb246ICdtZGktYmVsbCdcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnUHJvdmVlZG9yZXMnLFxuICAgICAgcm91dGU6ICcvcHJvdmVlZG9yZXMnLFxuICAgICAgaWNvbjogJ21kaS1hY2NvdW50LWdyb3VwJ1xuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdGYWN0dXJhcyBkZSBtaXMgcHJvdmVlZG9yZXMnLFxuICAgICAgcm91dGU6ICcvZmFjdHVyYXMnLFxuICAgICAgaWNvbjogJ21kaS1maWxlLWRvY3VtZW50LW91dGxpbmUnXG4gICAgfSxcbiAgICB7XG4gICAgICB0aXRsZTogJ0hpc3RvcmlhbCcsXG4gICAgICByb3V0ZTogJy9oaXN0b3JpYWwnLFxuICAgICAgaWNvbjogJ21kaS1oaXN0b3J5J1xuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdSZWdsYXMnLFxuICAgICAgcm91dGU6ICcvcmVnbGFzJyxcbiAgICAgIGljb246ICdtZGktc2h1ZmZsZS12YXJpYW50J1xuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdUZXN0ZXInLFxuICAgICAgcm91dGU6ICcvdG9vbHMvcnVsZS10ZXN0ZXInLFxuICAgICAgaWNvbjogJ21kaS10ZXN0LXR1YmUnXG4gICAgfVxuICBdLFxuICBQUk9WSURFUjogW1xuICAgIHtcbiAgICAgIHRpdGxlOiAnRG9jdW1lbnRvcycsXG4gICAgICByb3V0ZTogJy9kb2N1bWVudG9zJyxcbiAgICAgIGljb246ICdtZGktZmlsZSdcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnRmFjdHVyYXMgYSBtaXMgY2xpZW50ZXMnLFxuICAgICAgcm91dGU6ICcvaW52b2ljZXNwcm92aWRlcicsXG4gICAgICBpY29uOiAnbWRpLWZpbGUtZG9jdW1lbnQtb3V0bGluZSdcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnSGlzdG9yaWFsJyxcbiAgICAgIHJvdXRlOiAnL2hpc3RvcmlhbCcsXG4gICAgICBpY29uOiAnbWRpLWhpc3RvcnknXG4gICAgfSxcbiAgXVxufTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnTmF2QmFyJyxcbiAgY29tcG9uZW50czoge1xuICAgIEVkaXRQcm9maWxlLFxuICAgIE92ZXJsYXksXG4gICAgRWRpdENsaWVudEJhbmtBY2NvdW50cyxcbiAgICBDcmVhdGVQcm92aWRlckJhbmtBY2NvdW50LFxuICAgIENvbmZpZ3NcbiAgfSxcblxuICBzZXR1cCgpIHtcbiAgICBjb25zdCBub25lID0gcmVmKGZhbHNlKTtcbiAgICBjb25zdCByb3V0ZSA9IHVzZVJvdXRlKCk7XG4gICAgY29uc3QgYXV0aFN0b3JlID0gdXNlQXV0aFN0b3JlKCk7XG4gICAgY29uc3QgbG9hZGVyU3RvcmUgPSB1c2VMb2FkZXJTdG9yZSgpO1xuICAgIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTtcbiAgICBjb25zdCBhY3RpdmVUYWIgPSByZWYocm91dGUucGF0aCk7XG4gICAgY29uc3Qgc2hvd05ld1Byb3ZpZGVyT3ZlcmxheSA9IHJlZihmYWxzZSk7XG4gICAgY29uc3Qgc2hvd0NsaWVudEJhbmtBY2NvdW50cyA9IHJlZihmYWxzZSk7XG4gICAgY29uc3QgeyBzbUFuZERvd24gfSA9IHVzZURpc3BsYXkoKTtcbiAgICBjb25zdCBwbGF0Zm9ybUFwcHMgPSByZWYoW10pOyAgLy8gUGxhdGFmb3JtYXMgZGluw6FtaWNhc1xuXG4gICAgLy8gRnVuY2nDs24gcGFyYSBhcGxpY2FyIGNvbG9yZXMgQ1NTIGRpbsOhbWljb3NcbiAgICBjb25zdCBhcHBseUNzc1ZhcmlhYmxlcyA9ICgpID0+IHtcbiAgICAgIGlmIChhdXRoU3RvcmUuc3NvQnJhbmRpbmcpIHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1icmFuZC1wcmltYXJ5JywgYXV0aFN0b3JlLnByaW1hcnlDb2xvcik7XG4gICAgICAgIHJvb3Quc3R5bGUuc2V0UHJvcGVydHkoJy0tYnJhbmQtYmcnLCBhdXRoU3RvcmUuYmFja2dyb3VuZENvbG9yKTtcbiAgICAgICAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1icmFuZC10ZXh0JywgYXV0aFN0b3JlLnRleHRDb2xvcik7XG5cbiAgICAgICAgY29uc29sZS5sb2coJ/CfjqggQ1NTIFZhcmlhYmxlcyBhcGxpY2FkYXM6Jywge1xuICAgICAgICAgIHByaW1hcnk6IGF1dGhTdG9yZS5wcmltYXJ5Q29sb3IsXG4gICAgICAgICAgYmFja2dyb3VuZDogYXV0aFN0b3JlLmJhY2tncm91bmRDb2xvcixcbiAgICAgICAgICB0ZXh0OiBhdXRoU3RvcmUudGV4dENvbG9yXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBDYXJnYXIgcGxhdGFmb3JtYXMgZGlzcG9uaWJsZXMgZGVzZGUgQVBJXG4gICAgY29uc3QgbG9hZFBsYXRmb3JtcyA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJy9hcGkvd2hpdGUtbGFiZWwvcGxhdGZvcm1zJyk7XG4gICAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgcGxhdGZvcm1BcHBzLnZhbHVlID0gZGF0YS5wbGF0Zm9ybXMgfHwgW107XG4gICAgICAgICAgY29uc29sZS5sb2coJ/CfjJAgUGxhdGFmb3JtYXMgY2FyZ2FkYXM6JywgcGxhdGZvcm1BcHBzLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgY2FyZ2FuZG8gcGxhdGFmb3JtYXM6JywgZXJyb3IpO1xuICAgICAgICAvLyBTaWxlbmNpYXIgZXJyb3IsIHNpbXBsZW1lbnRlIG5vIG1vc3RyYXIgZWwgbWVuw7pcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gQXBsaWNhciBjb2xvcmVzIGFsIG1vbnRhciBlbCBjb21wb25lbnRlXG4gICAgb25Nb3VudGVkKCgpID0+IHtcbiAgICAgIC8vIERlYnVnIGxvZ3NcbiAgICAgIGNvbnNvbGUubG9nKCfwn5SNIE5hdkJhciAtIFVzZXIgY29tcGxldG86JywgYXV0aFN0b3JlLnVzZXIpO1xuICAgICAgY29uc29sZS5sb2coJ/CflI0gTmF2QmFyIC0gU1NPIE1ldGFkYXRhOicsIGF1dGhTdG9yZS5zc29NZXRhZGF0YSk7XG4gICAgICBjb25zb2xlLmxvZygn8J+UjSBOYXZCYXIgLSBTU08gQnJhbmRpbmc6JywgYXV0aFN0b3JlLnNzb0JyYW5kaW5nKTtcbiAgICAgIGNvbnNvbGUubG9nKCfwn5SNIE5hdkJhciAtIExvZ28gVVJMOicsIGF1dGhTdG9yZS5zc29Mb2dvKTtcbiAgICAgIGNvbnNvbGUubG9nKCfwn5SNIE5hdkJhciAtIENvbXBhbnkgTmFtZTonLCBhdXRoU3RvcmUuY29tcGFueU5hbWUpO1xuXG4gICAgICBhcHBseUNzc1ZhcmlhYmxlcygpO1xuICAgICAgbG9hZFBsYXRmb3JtcygpO1xuICAgIH0pO1xuXG4gICAgLy8gT2JzZXJ2YXIgY2FtYmlvcyBlbiBlbCBicmFuZGluZyBwYXJhIGFwbGljYXIgY29sb3JlcyBkaW7DoW1pY2FtZW50ZVxuICAgIHdhdGNoKCgpID0+IGF1dGhTdG9yZS5zc29CcmFuZGluZywgKCkgPT4ge1xuICAgICAgYXBwbHlDc3NWYXJpYWJsZXMoKTtcbiAgICB9KTtcblxuICAgIC8vIENvbXB1dGVkIHBhcmEgaXRlbXMgZGVsIG1lbsO6XG4gICAgY29uc3QgbWVudUl0ZW1zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgLy8gU2kgZWwgdXN1YXJpbyBlcyB0YW50byBjbGllbnRlIGNvbW8gcHJvdmVlZG9yLCBhbHRlcm5hciBzZWfDum4gZWwgZXN0YWRvIGRlIGBub25lYFxuICAgICAgaWYgKGF1dGhTdG9yZS5pc1Byb3ZpZGVyICYmIGF1dGhTdG9yZS5pc0NsaWVudCkge1xuICAgICAgICByZXR1cm4gbm9uZS52YWx1ZSA/IE1FTlVfSVRFTVMuUFJPVklERVIgOiBNRU5VX0lURU1TLkNMSUVOVDtcbiAgICAgIH1cblxuICAgICAgLy8gU2kgZXMgw7puaWNhbWVudGUgY2xpZW50ZVxuICAgICAgaWYgKGF1dGhTdG9yZS5pc0NsaWVudCkge1xuICAgICAgICByZXR1cm4gTUVOVV9JVEVNUy5DTElFTlQ7XG4gICAgICB9XG5cbiAgICAgIC8vIFNpIGVzIMO6bmljYW1lbnRlIHByb3ZlZWRvclxuICAgICAgaWYgKGF1dGhTdG9yZS5pc1Byb3ZpZGVyKSB7XG4gICAgICAgIHJldHVybiBNRU5VX0lURU1TLlBST1ZJREVSO1xuICAgICAgfVxuXG4gICAgICAvLyBSZXRvcm5vIHZhY8OtbyBzaSBubyB0aWVuZSByb2xlcyAoY2FzbyBleGNlcGNpb25hbClcbiAgICAgIHJldHVybiBbXTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGdldEhvbWVSb3V0ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGF1dGhTdG9yZS5pc1Byb3ZpZGVyID8gJ0hvbWVQcm92aWRlcnMnIDogJ0hvbWUnXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5vbmUsXG4gICAgICByb3V0ZSxcbiAgICAgIGF1dGhTdG9yZSxcbiAgICAgIGxvYWRlclN0b3JlLFxuICAgICAgdGhlbWUsXG4gICAgICBhY3RpdmVUYWIsXG4gICAgICBzaG93TmV3UHJvdmlkZXJPdmVybGF5LFxuICAgICAgc2hvd0NsaWVudEJhbmtBY2NvdW50cyxcbiAgICAgIHNtQW5kRG93bixcbiAgICAgIG1lbnVJdGVtcyxcbiAgICAgIGdldEhvbWVSb3V0ZSxcbiAgICAgIHBsYXRmb3JtQXBwc1xuICAgIH1cbiAgfSxcbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuLnYtdG9vbGJhcl9fZXh0ZW5zaW9uIHtcbiAgaGVpZ2h0OiAycHggIWltcG9ydGFudDtcbn1cblxuLmxvZ28tY29udGFpbmVyIHtcbiAgZmxleC1zaHJpbms6IDA7XG4gIG1hcmdpbi1sZWZ0OiAzdnc7XG4gIG1hcmdpbi1yaWdodDogOHB4O1xufVxuXG4ubmF2LW1lbnUtd3JhcHBlciB7XG4gIGZsZXg6IDEgMSBhdXRvO1xuICBtaW4td2lkdGg6IDA7XG4gIG92ZXJmbG93LXg6IGF1dG87XG4gIG1hcmdpbi1sZWZ0OiAyNHB4O1xuICBtYXJnaW4tcmlnaHQ6IDhweDtcbn1cblxuLmZvbnQtYm9sZCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4uZm9udC10aGluIHtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDE1cHgpIHtcbiAgLm15LW1hcmdpbiB7XG4gICAgbWFyZ2luLWJvdHRvbTogMjJweDtcbiAgfVxufVxuXG4udGV4dC1jYXB0aW9ue1xuICBmb250LXdlaWdodDogNTUwO1xuICBjb2xvcjogcmdiKDczLCA2OSwgNjkpO1xufVxuXG4ubWFpbC1pdGVte1xuICBmb250LXNpemU6IDE1cHg7XG4gIGZvbnQtd2VpZ2h0OiA5MDA7XG59XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgPHYtZm9vdGVyIGNsYXNzPVwiZm9vdGVyLW1haW4gZC1mbGV4IGZsZXgtY29sdW1uIHctMTAwIG10LWF1dG8gbS0wIHAtMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmb290ZXItbGlua3MgcHgtNCBweS0zIGJnLWdyZXktZGFya2VuLTQgdGV4dC1jZW50ZXIgdy0xMDBcIj5cbiAgICAgIDxhIGNsYXNzPVwiZm9vdGVyLWxpbmsgbXgtM1wiIDpocmVmPVwicHJpdmFjeUxpbmtcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+XG4gICAgICAgIFBvbMOtdGljYSBkZSBQcml2YWNpZGFkXG4gICAgICA8L2E+XG5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZm9vdGVyLXNlcGFyYXRvclwiPnw8L3NwYW4+XG5cbiAgICAgIDxhIGNsYXNzPVwiZm9vdGVyLWxpbmsgbXgtM1wiIDpocmVmPVwidGVybXNMaW5rXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlxuICAgICAgICBUw6lybWlub3MgZGUgVXNvXG4gICAgICA8L2E+XG5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZm9vdGVyLXNlcGFyYXRvclwiPnw8L3NwYW4+XG5cbiAgICAgIDxhIGNsYXNzPVwiZm9vdGVyLWxpbmsgbXgtM1wiIDpocmVmPVwiY29udGFjdExpbmtcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+XG4gICAgICAgIENvbnRhY3RvXG4gICAgICA8L2E+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyLWNvcHlyaWdodCBweC00IHB5LTIgYmctZ3JleS1kYXJrZW4tNCB0ZXh0LWNlbnRlciB3LTEwMFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWdyZXktbGlnaHRlbi0xIHRleHQtY2FwdGlvblwiPlxuICAgICAgICAmY29weTsge3sgY3VycmVudFllYXIgfX0ge3sgY29tcGFueURpc3BsYXlOYW1lIH19LiBUb2RvcyBsb3MgZGVyZWNob3MgcmVzZXJ2YWRvcy5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICA8L3YtZm9vdGVyPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdCBzZXR1cD5cbmltcG9ydCB7IGNvbXB1dGVkIH0gZnJvbSAndnVlJztcbmltcG9ydCB7IHVzZUF1dGhTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9hdXRoJztcblxuY29uc3QgYXV0aFN0b3JlID0gdXNlQXV0aFN0b3JlKCk7XG5jb25zdCBjdXJyZW50WWVhciA9IGNvbXB1dGVkKCgpID0+IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSk7XG5cbi8vIFVSTHMgZGluw6FtaWNhczogYnJhbmRpbmcgZGUgbWFyY2EgYmxhbmNhIOKGkiBmYWxsYmFjayBTbWFydEVzY3Jvd1xuY29uc3QgcHJpdmFjeUxpbmsgPSBjb21wdXRlZCgoKSA9PiBhdXRoU3RvcmUucHJpdmFjeVBvbGljeVVybCB8fCAnaHR0cHM6Ly9zbWFydGVzY3Jvdy5ldS9wcml2YWN5X3BvbGljeScpO1xuY29uc3QgdGVybXNMaW5rID0gY29tcHV0ZWQoKCkgPT4gYXV0aFN0b3JlLnRlcm1zVXJsIHx8ICdodHRwczovL3NtYXJ0ZXNjcm93LmV1L3Rlcm1zX29mX3VzZScpO1xuY29uc3QgY29udGFjdExpbmsgPSBjb21wdXRlZCgoKSA9PiBhdXRoU3RvcmUuY29udGFjdFVybCB8fCAnaHR0cHM6Ly9zbWFydGVzY3Jvdy5ldS9jb250YWN0Jyk7XG5jb25zdCBjb21wYW55RGlzcGxheU5hbWUgPSBjb21wdXRlZCgoKSA9PiBhdXRoU3RvcmUuY29tcGFueU5hbWUgfHwgJ1NtYXJ0RXNjcm93Jyk7XG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cbi5mb290ZXItbWFpbiB7XG4gIGJvcmRlci10b3A6IDJweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7XG59XG5cbi5mb290ZXItbGlua3Mge1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTtcbn1cblxuLmZvb3Rlci1saW5rIHtcbiAgY29sb3I6ICNiMGJlYzU7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgdHJhbnNpdGlvbjogY29sb3IgMC4ycyBlYXNlO1xufVxuXG4uZm9vdGVyLWxpbms6aG92ZXIge1xuICBjb2xvcjogI2ZmZmZmZjtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi5mb290ZXItc2VwYXJhdG9yIHtcbiAgY29sb3I6ICM2MTYxNjE7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiaW52b2ljZS1oaXN0b3J5LW92ZXJsYXlcIj5cbiAgICA8di1jYXJkIGNsYXNzPVwidy0xMDBcIj5cbiAgICAgIDx2LWNhcmQtdGl0bGUgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiYmkgYmktY2xvY2staGlzdG9yeSBtZS0yXCI+PC9pPlxuICAgICAgICA8c3Bhbj5IaXN0b3JpYWwgZGUgZXN0YWRvcyBkZSBsYSBmYWN0dXJhPC9zcGFuPlxuICAgICAgPC92LWNhcmQtdGl0bGU+XG4gICAgICBcbiAgICAgIDx2LWNhcmQtc3VidGl0bGUgdi1pZj1cImludm9pY2VcIj5cbiAgICAgICAgRmFjdHVyYToge3sgaW52b2ljZS5pbnZvaWNlTnVtYmVyIH19IC0ge3sgaW52b2ljZS5wcm92aWRlclNvY2lhbERlbm9taW5hdGlvbiB9fVxuICAgICAgPC92LWNhcmQtc3VidGl0bGU+XG4gICAgICBcbiAgICAgIDx2LWNhcmQtdGV4dD5cbiAgICAgICAgPHYtZGF0YS10YWJsZVxuICAgICAgICAgIHYtaWY9XCJzdGF0ZUhpc3RvcnkgJiYgc3RhdGVIaXN0b3J5Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgIDpoZWFkZXJzPVwiaGVhZGVyc1wiXG4gICAgICAgICAgOml0ZW1zPVwic3RhdGVIaXN0b3J5XCJcbiAgICAgICAgICA6bG9hZGluZz1cImxvYWRpbmdcIlxuICAgICAgICA+XG4gICAgICAgICAgPCEtLSBEYXRlIGNvbHVtbiAtLT5cbiAgICAgICAgICA8dGVtcGxhdGUgI2l0ZW0uY3JlYXRlZEF0PVwieyBpdGVtIH1cIj5cbiAgICAgICAgICAgIHt7IGZvcm1hdERhdGVUaW1lKGl0ZW0uY3JlYXRlZEF0KSB9fVxuICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgXG4gICAgICAgICAgPCEtLSBQcmV2aW91cyBzdGF0ZSBjb2x1bW4gLS0+XG4gICAgICAgICAgPHRlbXBsYXRlICNpdGVtLm9sZFN0YXRlPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICAgIDxTdGF0dXNDaGlwIDpzdGF0dXM9XCJpdGVtLm9sZFN0YXRlXCI+PC9TdGF0dXNDaGlwPlxuICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgXG4gICAgICAgICAgPCEtLSBOZXcgc3RhdGUgY29sdW1uIC0tPlxuICAgICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5uZXdTdGF0ZT1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgICA8U3RhdHVzQ2hpcCA6c3RhdHVzPVwiaXRlbS5uZXdTdGF0ZVwiPjwvU3RhdHVzQ2hpcD5cbiAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgIFxuICAgICAgICAgIDwhLS0gQ2hhbmdlIHR5cGUgY29sdW1uIC0tPlxuICAgICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5jaGFuZ2VUeXBlPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICAgIDx2LWNoaXBcbiAgICAgICAgICAgICAgOmNvbG9yPVwiaXRlbS5jaGFuZ2VUeXBlID09PSAnYXV0b21hdGljJyA/ICdpbmZvJyA6IChpdGVtLmNoYW5nZVR5cGUgPT09ICdwbGF0Zm9ybScgPyAnc3VjY2VzcycgOiAnd2FybmluZycpXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXdoaXRlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgaXRlbS5jaGFuZ2VUeXBlID09PSAnYXV0b21hdGljJyA/ICdBdXRvbcOhdGljbycgOiAoaXRlbS5jaGFuZ2VUeXBlID09PSAncGxhdGZvcm0nID8gJ1BsYXRhZm9ybWEnIDogJ01hbnVhbCcpIH19XG4gICAgICAgICAgICA8L3YtY2hpcD5cbiAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8L3YtZGF0YS10YWJsZT5cbiAgICAgICAgXG4gICAgICAgIDxkaXYgdi1lbHNlLWlmPVwiIWxvYWRpbmdcIiBjbGFzcz1cInRleHQtY2VudGVyIG15LTRcIj5cbiAgICAgICAgICA8cD5ObyBoYXkgaGlzdG9yaWFsIGRlIGVzdGFkb3MgZGlzcG9uaWJsZSBwYXJhIGVzdGEgZmFjdHVyYS48L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC92LWNhcmQtdGV4dD5cbiAgICAgIFxuICAgICAgPHYtY2FyZC1hY3Rpb25zIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgIDx2LWJ0blxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LXdoaXRlIGFkZC10ZW1wbGF0ZXMtYnV0dG9uXCJcbiAgICAgICAgICBAY2xpY2s9XCIkZW1pdCgnY2xvc2UnKVwiXG4gICAgICAgID5cbiAgICAgICAgICBDZXJyYXJcbiAgICAgICAgPC92LWJ0bj5cbiAgICAgICAgXG4gICAgICAgIDx2LWJ0blxuICAgICAgICAgIHYtaWY9XCJzdGF0ZUhpc3RvcnkgJiYgc3RhdGVIaXN0b3J5Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgIGNvbG9yPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICBjbGFzcz1cInRleHQtd2hpdGUgYWRkLXRlbXBsYXRlcy1idXR0b24gbXMtMlwiXG4gICAgICAgICAgQGNsaWNrPVwiZXhwb3J0VG9DU1ZcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1kb3dubG9hZCBtZS0yXCI+PC9pPlxuICAgICAgICAgIEV4cG9ydGFyXG4gICAgICAgIDwvdi1idG4+XG4gICAgICA8L3YtY2FyZC1hY3Rpb25zPlxuICAgIDwvdi1jYXJkPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgU3RhdHVzQ2hpcCBmcm9tICcuL1N0YXR1c0NoaXAudnVlJztcbmltcG9ydCB7IHVzZUdsb2JhbFV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvZ2xvYmFscyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ0ludm9pY2VTdGF0ZUhpc3RvcnlPdmVybGF5JyxcbiAgY29tcG9uZW50czoge1xuICAgIFN0YXR1c0NoaXBcbiAgfSxcbiAgcHJvcHM6IHtcbiAgICBpbnZvaWNlOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAgc2V0dXAoKSB7XG4gICAgY29uc3QgeyB0b2FzdCB9ID0gdXNlR2xvYmFsVXRpbHMoKTtcbiAgICByZXR1cm4geyB0b2FzdCB9O1xuICB9LFxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgc3RhdGVIaXN0b3J5OiBbXSxcbiAgICAgIGhlYWRlcnM6IFtcbiAgICAgICAgeyB0aXRsZTogJ0ZlY2hhIHkgaG9yYScsIGtleTogJ2NyZWF0ZWRBdCcsIHNvcnRhYmxlOiB0cnVlLCBhbGlnbjogJ3N0YXJ0JyB9LFxuICAgICAgICB7IHRpdGxlOiAnRXN0YWRvIGFudGVyaW9yJywga2V5OiAnb2xkU3RhdGUnLCBzb3J0YWJsZTogdHJ1ZSwgYWxpZ246ICdjZW50ZXInIH0sXG4gICAgICAgIHsgdGl0bGU6ICdOdWV2byBlc3RhZG8nLCBrZXk6ICduZXdTdGF0ZScsIHNvcnRhYmxlOiB0cnVlLCBhbGlnbjogJ2NlbnRlcicgfSxcbiAgICAgICAgeyB0aXRsZTogJ1RpcG8gZGUgY2FtYmlvJywga2V5OiAnY2hhbmdlVHlwZScsIHNvcnRhYmxlOiB0cnVlLCBhbGlnbjogJ2NlbnRlcicgfVxuICAgICAgXVxuICAgIH07XG4gIH0sXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5mZXRjaFN0YXRlSGlzdG9yeSgpO1xuICB9LFxuICBtZXRob2RzOiB7XG4gICAgYXN5bmMgZmV0Y2hTdGF0ZUhpc3RvcnkoKSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICAvLyBGZXRjaCB0aGUgaGlzdG9yeSBkYXRhIGZyb20gdGhlIEFQSVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAvYXBpL2ludm9pY2VzLyR7dGhpcy5pbnZvaWNlLmlkfS9oaXN0b3J5YCk7XG4gICAgICAgIFxuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciAke3Jlc3BvbnNlLnN0YXR1c306ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgdGhpcy5zdGF0ZUhpc3RvcnkgPSBkYXRhWydoeWRyYTptZW1iZXInXSB8fCBbXTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGludm9pY2Ugc3RhdGUgaGlzdG9yeTonLCBlcnJvcik7XG4gICAgICAgIHRoaXMudG9hc3QuZXJyb3IoJ0Vycm9yIGFsIGNhcmdhciBlbCBoaXN0b3JpYWwgZGUgZXN0YWRvczogJyArIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICB0aGlzLnN0YXRlSGlzdG9yeSA9IFtdO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSxcbiAgICBcbiAgICBmb3JtYXREYXRlVGltZShkYXRlU3RyaW5nKSB7XG4gICAgICBpZiAoIWRhdGVTdHJpbmcpIHJldHVybiAnLS0nO1xuICAgICAgXG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICBcbiAgICAgIC8vIEZvcm1hdCBkYXRlXG4gICAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoJ2VzLUVTJywge1xuICAgICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICAgIG1vbnRoOiAnMi1kaWdpdCcsXG4gICAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgICB0aW1lWm9uZTogJ1VUQydcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBGb3JtYXQgdGltZVxuICAgICAgY29uc3QgZm9ybWF0dGVkVGltZSA9IGRhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKCdlcy1FUycsIHtcbiAgICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgc2Vjb25kOiAnMi1kaWdpdCcsXG4gICAgICAgIHRpbWVab25lOiAnVVRDJ1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHJldHVybiBgJHtmb3JtYXR0ZWREYXRlfSAke2Zvcm1hdHRlZFRpbWV9YDtcbiAgICB9LFxuICAgIFxuICAgIGV4cG9ydFRvQ1NWKCkge1xuICAgICAgaWYgKCF0aGlzLnN0YXRlSGlzdG9yeSB8fCB0aGlzLnN0YXRlSGlzdG9yeS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy50b2FzdC53YXJuaW5nKCdObyBoYXkgZGF0b3MgcGFyYSBleHBvcnRhcicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEdlbmVyYXRlIENTViBoZWFkZXJzXG4gICAgICAgIGNvbnN0IGNzdkhlYWRlcnMgPSB0aGlzLmhlYWRlcnMubWFwKGhlYWRlciA9PiBoZWFkZXIudGl0bGUpLmpvaW4oJywnKTtcbiAgICAgICAgXG4gICAgICAgIC8vIEdlbmVyYXRlIENTViByb3dzXG4gICAgICAgIGNvbnN0IGNzdlJvd3MgPSB0aGlzLnN0YXRlSGlzdG9yeS5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGBcIiR7dGhpcy5mb3JtYXREYXRlVGltZShpdGVtLmNyZWF0ZWRBdCl9XCJgLFxuICAgICAgICAgICAgYFwiJHt0aGlzLmdldFN0YXR1c1RleHQoaXRlbS5vbGRTdGF0ZSl9XCJgLFxuICAgICAgICAgICAgYFwiJHt0aGlzLmdldFN0YXR1c1RleHQoaXRlbS5uZXdTdGF0ZSl9XCJgLFxuICAgICAgICAgICAgYFwiJHtpdGVtLmNoYW5nZVR5cGUgPT09ICdhdXRvbWF0aWMnID8gJ0F1dG9tw6F0aWNvJyA6IChpdGVtLmNoYW5nZVR5cGUgPT09ICdwbGF0Zm9ybScgPyAnUGxhdGFmb3JtYScgOiAnTWFudWFsJyl9XCJgXG4gICAgICAgICAgXS5qb2luKCcsJyk7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gQ29tYmluZSBoZWFkZXJzIGFuZCByb3dzXG4gICAgICAgIGNvbnN0IGNzdkNvbnRlbnQgPSBbY3N2SGVhZGVycywgLi4uY3N2Um93c10uam9pbignXFxuJyk7XG4gICAgICAgIFxuICAgICAgICAvLyBDcmVhdGUgYSBCbG9iIHdpdGggdGhlIENTViBjb250ZW50XG4gICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbY3N2Q29udGVudF0sIHsgdHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7JyB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIENyZWF0ZSBhIGRvd25sb2FkIGxpbmtcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgXG4gICAgICAgIC8vIENyZWF0ZSBhIFVSTCBmb3IgdGhlIEJsb2JcbiAgICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFNldHVwIHRoZSBkb3dubG9hZCBsaW5rXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgdXJsKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgYGhpc3RvcmlhbC1lc3RhZG9zLWZhY3R1cmEtJHt0aGlzLmludm9pY2UuaW52b2ljZU51bWJlcn0uY3N2YCk7XG4gICAgICAgIGxpbmsuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICBcbiAgICAgICAgLy8gQWRkIHRoZSBsaW5rIHRvIHRoZSBET01cbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgICAgXG4gICAgICAgIC8vIENsaWNrIHRoZSBsaW5rIHRvIHRyaWdnZXIgdGhlIGRvd25sb2FkXG4gICAgICAgIGxpbmsuY2xpY2soKTtcbiAgICAgICAgXG4gICAgICAgIC8vIENsZWFuIHVwXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMudG9hc3Quc3VjY2VzcygnSGlzdG9yaWFsIGV4cG9ydGFkbyBjb3JyZWN0YW1lbnRlJyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBleHBvcnRpbmcgdG8gQ1NWOicsIGVycm9yKTtcbiAgICAgICAgdGhpcy50b2FzdC5lcnJvcignRXJyb3IgYWwgZXhwb3J0YXIgaGlzdG9yaWFsOiAnICsgZXJyb3IubWVzc2FnZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBcbiAgICBnZXRTdGF0dXNUZXh0KHN0YXR1c1ZhbHVlKSB7XG4gICAgICBjb25zdCBzdGF0dXNNYXAgPSB7XG4gICAgICAgIDA6ICdUb2RvcycsXG4gICAgICAgIDE6ICdWYWxpZGFkYScsXG4gICAgICAgIDI6ICdFbGVnaWJsZScsXG4gICAgICAgIDM6ICdObyBlbGVnaWJsZScsXG4gICAgICAgIDQ6ICdBZGVsYW50YWRhJyxcbiAgICAgICAgNTogJ0ZpbmFsaXphZGEgc2luIGFkZWxhbnRhcicsXG4gICAgICAgIDY6ICdQYXJhIHZhbGlkYXInLFxuICAgICAgICA3OiAnRmluYWxpemFkYSBkZXNkZSBhZGVsYW50YXInLFxuICAgICAgICA4OiAnQWRlbGFudGFkYSBWYWxpZGFkYScsXG4gICAgICAgIDk6ICdBZGVsYW50YWRhIFZhbGlkYWRhIHkgUGFnYWRhJyxcbiAgICAgICAgMTA6ICdGaW5hbGl6YWRhIHNpbiBhZGVsYW50YXIgUGFnYWRhJyxcbiAgICAgICAgMTE6ICdGaW5hbGl6YWRhIGRlc2RlIGFkZWxhbnRhciBQYWdhZGEnXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHN0YXR1c01hcFtzdGF0dXNWYWx1ZV0gfHwgJ0Rlc2Nvbm9jaWRvJztcbiAgICB9XG4gIH1cbn07XG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cbi5pbnZvaWNlLWhpc3Rvcnktb3ZlcmxheSB7XG4gIHBhZGRpbmc6IDE2cHg7XG4gIG1heC13aWR0aDogMTAwJTtcbn1cblxuOmRlZXAoLnYtZGF0YS10YWJsZS1oZWFkZXIgdGgpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbjpkZWVwKC52LWRhdGEtdGFibGVfX3RyOmhvdmVyKSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG59XG5cbjpkZWVwKC52LWRhdGEtdGFibGUpIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcbn1cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiYWN0aW9ucy1jb250YWluZXJcIj5cbiAgICA8aDEgY2xhc3M9XCJwYWdlLXRpdGxlXCI+QWNjaW9uZXM8L2gxPlxuICAgIFxuICAgIDwhLS0gVGFicyBDb250YWluZXIgd2l0aCByZXNwb25zaXZlIGRlc2lnbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwidGFicy13cmFwcGVyXCI+XG4gICAgICA8di10YWJzIFxuICAgICAgICB2LW1vZGVsPVwiYWN0aXZlVGFiXCJcbiAgICAgICAgY2xhc3M9XCJyZXNwb25zaXZlLXRhYnNcIlxuICAgICAgICA6ZGlyZWN0aW9uPVwiJHZ1ZXRpZnkuZGlzcGxheS5tb2JpbGUgPyAnaG9yaXpvbnRhbCcgOiAnaG9yaXpvbnRhbCdcIlxuICAgICAgICBzaG93LWFycm93c1xuICAgICAgICBzbGlkZXItY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgOmZpeGVkLXRhYnM9XCJmYWxzZVwiXG4gICAgICAgIDpjZW50ZXJlZD1cIiEkdnVldGlmeS5kaXNwbGF5Lm1vYmlsZVwiXG4gICAgICAgIGRlbnNpdHk9XCJjb21mb3J0YWJsZVwiXG4gICAgICA+XG4gICAgICAgIDx2LXRhYlxuICAgICAgICAgIHYtZm9yPVwidGFiIGluIHZpc2libGVUYWJzXCJcbiAgICAgICAgICA6a2V5PVwidGFiLnZhbHVlXCJcbiAgICAgICAgICA6dmFsdWU9XCJ0YWIudmFsdWVcIlxuICAgICAgICAgIGNsYXNzPVwidGFiLWl0ZW1cIlxuICAgICAgICAgIDpjbGFzcz1cInsgJ21vYmlsZS10YWInOiAkdnVldGlmeS5kaXNwbGF5Lm1vYmlsZSB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFiLWxhYmVsXCI+e3sgdGFiLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICA8L3YtdGFiPlxuICAgICAgPC92LXRhYnM+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIENvbnRlbnQgV2luZG93IC0tPlxuICAgIDx2LWNvbnRhaW5lciBmbHVpZCBjbGFzcz1cImNvbnRlbnQtY29udGFpbmVyXCI+XG4gICAgICA8di13aW5kb3cgdi1tb2RlbD1cImFjdGl2ZVRhYlwiIGNsYXNzPVwid2luZG93LWNvbnRlbnRcIj5cbiAgICAgICAgPHYtd2luZG93LWl0ZW0gXG4gICAgICAgICAgdi1mb3I9XCJ0YWIgaW4gdmlzaWJsZVRhYnNcIiBcbiAgICAgICAgICA6a2V5PVwidGFiLnZhbHVlXCIgXG4gICAgICAgICAgOnZhbHVlPVwidGFiLnZhbHVlXCJcbiAgICAgICAgICBjbGFzcz1cIndpbmRvdy1pdGVtXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItY29udGVudFwiPlxuICAgICAgICAgICAgPGludm9pY2UtY2FyZHMgOmludm9pY2VzPVwiaW52b2ljZXNcIj48L2ludm9pY2UtY2FyZHM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdi13aW5kb3ctaXRlbT5cbiAgICAgIDwvdi13aW5kb3c+XG4gICAgPC92LWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuLyoqXG4gKiBFbiBlc3RlIHByb3llY3RvIGVuY29udHJhcmFzIHVuYSBjYXJwZXRhIFRPRE8sIGNvbiBwZGZzIGRlIGxhcyB0YXJlYXMgZmFsdGFudGVzIGRlbnRyby4uLlxuICogQGF1dGhvciBCcmFpYW4gTWFjaWVsXG4gKiBUT0RPOiBUYXJqZXRhcyBhIENvbXBsZXRhciBSZWYgL1RPRE8vQUNDSU9ORVMtMDAxLnBkZjpcbiAqIC0gQWRlbGFudGFkYSBjb24gRm9ybWEgZGUgUGFnbyBCYW5jbyBUZXJjZXJvcyAgXG4gKiAtIEFkZWxhbnRhZGEgY29uIEZvcm1hIGRlIFBhZ28gQmFuY28gVGVzb3JlcsOtYSBQcm9waWEgXG4gKiAtIEZpbmFsaXphZGEgZGVzZGUgYWRlbGFudGFyIEZvcm1hIGRlIFBhZ28gQmFuY28gRGUgVGVyY2Vyb3MgIFxuICogKyBBZ3JlYWdhciBDdWVudGEgQmFuY2FyaWEgYSBwYWdhciBwYXJhIHRvZGFzIGxhcyB0YXJqZXRhcyBcbiAqL1xuaW1wb3J0IHsgcmVmLCBjb21wdXRlZCwgd2F0Y2ggfSBmcm9tICd2dWUnO1xuaW1wb3J0IHsgdXNlSW52b2ljZVN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL2ludm9pY2UnXG5pbXBvcnQgSW52b2ljZUNhcmRzIGZyb20gJy4uL2NvbXBvbmVudHMvSW52b2ljZUNhcmRzLnZ1ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ0FjdGlvbnMnLFxuICBjb21wb25lbnRzOiB7IEludm9pY2VDYXJkcyB9LFxuICBzZXR1cCgpIHtcbiAgICAvLyBUT0RPOiBUaGlzIHBpZWNlIG9mIGNvZGUgbXVzdCBiZSByZXBsYWNlZCBieSBhIHVzZXIgbG9naW4vcmVnaXN0ZXIgbWV0aG9kIHRoYXQgcmVjb2duaXplIHVzZXIgdXNpbmcgY29va2llcyBvciBzb21ldGhpbmcgbGlrZSB0aGF0Li4uICAgICBcbiAgICBjb25zdCBpbnZvaWNlU3RvcmUgPSB1c2VJbnZvaWNlU3RvcmUoKVxuICAgIGNvbnN0IGFjdGl2ZVRhYiA9IHJlZig0KTtcblxuICAgIGNvbnN0IHRhYnMgPSBbXG4gICAgICB7IGxhYmVsOiBcIkFkZWxhbnRhZGFcIiwgdmFsdWU6IDQsIHNob3c6IHRydWUgfSxcbiAgICAgIHsgbGFiZWw6IFwiRmluYWxpemEgc2luIGFkZWxhbnRhclwiLCB2YWx1ZTogNSwgc2hvdzogdHJ1ZSB9LFxuICAgICAgeyBsYWJlbDogXCJQYXJhIHZhbGlkYXJcIiwgdmFsdWU6IDYsIHNob3c6IHRydWUgfSxcbiAgICAgIHsgbGFiZWw6IFwiVmFsaWRhZGFzXCIsIHZhbHVlOiAxLCBzaG93OiB0cnVlIH0sXG4gICAgICB7IGxhYmVsOiBcIkZpbmFsaXphZGEgZGVzZGUgYWRlbGFudGFyXCIsIHZhbHVlOiA3LCBzaG93OiB0cnVlIH0sXG4gICAgICB7IGxhYmVsOiBcIkFkZWxhbnRhZGEgVmFsaWRhZGFcIiwgdmFsdWU6IDgsIHNob3c6IGZhbHNlIH0sXG4gICAgICB7IGxhYmVsOiBcIkFkZWxhbnRhZGEgVmFsaWRhZGEgeSBQYWdhZGFcIiwgdmFsdWU6IDksIHNob3c6IGZhbHNlIH0sXG4gICAgICB7IGxhYmVsOiBcIkZpbmFsaXphZGEgc2luIGFkZWxhbnRhciBQYWdhZGFcIiwgdmFsdWU6IDEwLCBzaG93OiBmYWxzZSB9LFxuICAgICAgeyBsYWJlbDogXCJGaW5hbGl6YWRhIGRlc2RlIGFkZWxhbnRhciBQYWdhZGFcIiwgdmFsdWU6IDExLCBzaG93OiBmYWxzZSB9LFxuICAgICAgeyBsYWJlbDogJ1ZhbGlkYXIgcHJvdmVlZG9yZXMnLCB2YWx1ZTogJ3ZhbGlkYXRlUHJvdmlkZXJzJywgc2hvdzogdHJ1ZSB9LFxuICAgIF07XG5cbiAgICAvLyBDb21wdXRlZCBwYXJhIGZpbHRyYXIgdGFicyB2aXNpYmxlc1xuICAgIGNvbnN0IHZpc2libGVUYWJzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRhYnMuZmlsdGVyKHRhYiA9PiB0YWIuc2hvdyk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBsb2FkSW52b2ljZXMgPSAoc3RhdHVzKSA9PiB7XG4gICAgICBpbnZvaWNlU3RvcmUuZmV0Y2hJbnZvaWNlc0J5U3RhdHVzKHN0YXR1cylcbiAgICB9XG5cbiAgICB3YXRjaChhY3RpdmVUYWIsIChuZXdUYWIpID0+IHtcbiAgICAgIGxvYWRJbnZvaWNlcyhuZXdUYWIpXG4gICAgfSwgeyBcbiAgICAgIGRlZXA6IHRydWUsXG4gICAgICBpbW1lZGlhdGU6IHRydWUgXG4gICAgfSlcblxuICAgIHJldHVybiB7XG4gICAgICBhY3RpdmVUYWIsXG4gICAgICB0YWJzLFxuICAgICAgdmlzaWJsZVRhYnMsXG4gICAgICBpbnZvaWNlczogY29tcHV0ZWQoKCkgPT4gaW52b2ljZVN0b3JlLmludm9pY2VzKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG4uYWN0aW9ucy1jb250YWluZXIge1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogMTAwdmg7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi5wYWdlLXRpdGxlIHtcbiAgZm9udC1zaXplOiAxLjc1cmVtO1xuICBmb250LXdlaWdodDogNjAwO1xuICBtYXJnaW46IDFyZW07XG4gIGNvbG9yOiByZ2IodmFyKC0tdi10aGVtZS1vbi1zdXJmYWNlKSk7XG59XG5cbi50YWJzLXdyYXBwZXIge1xuICB3aWR0aDogMTAwJTtcbiAgb3ZlcmZsb3cteDogYXV0bztcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKHZhcigtLXYtdGhlbWUtc3VyZmFjZSkpO1xuICBib3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSh2YXIoLS12LWJvcmRlci1jb2xvciksIHZhcigtLXYtYm9yZGVyLW9wYWNpdHkpKTtcbn1cblxuLnJlc3BvbnNpdmUtdGFicyB7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4td2lkdGg6IG1heC1jb250ZW50O1xufVxuXG4udGFiLWl0ZW0ge1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBtaW4td2lkdGg6IGF1dG87XG4gIG1heC13aWR0aDogbm9uZTtcbiAgcGFkZGluZzogMCAxMnB4O1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtcbn1cblxuLnRhYi1sYWJlbCB7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLmNvbnRlbnQtY29udGFpbmVyIHtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLndpbmRvdy1jb250ZW50IHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDYwdmg7XG59XG5cbi53aW5kb3ctaXRlbSB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4udGFiLWNvbnRlbnQge1xuICBwYWRkaW5nOiAxcmVtO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLyogUmVzcG9uc2l2ZSBEZXNpZ24gKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAucGFnZS10aXRsZSB7XG4gICAgZm9udC1zaXplOiAxLjVyZW07XG4gICAgbWFyZ2luOiAwLjc1cmVtO1xuICB9XG4gIFxuICAubW9iaWxlLXRhYiB7XG4gICAgbWluLXdpZHRoOiAxMjBweCAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmc6IDAgOHB4ICFpbXBvcnRhbnQ7XG4gIH1cbiAgXG4gIC50YWItbGFiZWwge1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xO1xuICB9XG4gIFxuICAudGFiLWNvbnRlbnQge1xuICAgIHBhZGRpbmc6IDAuNzVyZW07XG4gIH1cbiAgXG4gIC50YWJzLXdyYXBwZXIge1xuICAgIC8qIFBlcm1pdGlyIHNjcm9sbCBob3Jpem9udGFsIGVuIG3Ds3ZpbCAqL1xuICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47XG4gIH1cbiAgXG4gIC50YWJzLXdyYXBwZXI6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICBoZWlnaHQ6IDRweDtcbiAgfVxuICBcbiAgLnRhYnMtd3JhcHBlcjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICAgIGJhY2tncm91bmQ6ICNmMWYxZjE7XG4gIH1cbiAgXG4gIC50YWJzLXdyYXBwZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICBiYWNrZ3JvdW5kOiAjYzFjMWMxO1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgfVxuICBcbiAgLnRhYnMtd3JhcHBlcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICNhOGE4YTg7XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gIC5wYWdlLXRpdGxlIHtcbiAgICBmb250LXNpemU6IDEuMjVyZW07XG4gICAgbWFyZ2luOiAwLjVyZW07XG4gIH1cbiAgXG4gIC5tb2JpbGUtdGFiIHtcbiAgICBtaW4td2lkdGg6IDEwMHB4ICFpbXBvcnRhbnQ7XG4gICAgcGFkZGluZzogMCA2cHggIWltcG9ydGFudDtcbiAgfVxuICBcbiAgLnRhYi1sYWJlbCB7XG4gICAgZm9udC1zaXplOiAwLjdyZW07XG4gIH1cbiAgXG4gIC50YWItY29udGVudCB7XG4gICAgcGFkZGluZzogMC41cmVtO1xuICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiAzNjBweCkge1xuICAubW9iaWxlLXRhYiB7XG4gICAgbWluLXdpZHRoOiA5MHB4ICFpbXBvcnRhbnQ7XG4gICAgcGFkZGluZzogMCA0cHggIWltcG9ydGFudDtcbiAgfVxuICBcbiAgLnRhYi1sYWJlbCB7XG4gICAgZm9udC1zaXplOiAwLjY1cmVtO1xuICB9XG59XG5cbi8qIE1lam9yYXMgdmlzdWFsZXMgKi9cbi5yZXNwb25zaXZlLXRhYnMgOmRlZXAoLnYtdGFiLS1zZWxlY3RlZCkge1xuICBjb2xvcjogdmFyKC0tdi1wcmltYXJ5LWJhc2UsICMxZTIxMjQpO1xuICBmb250LXdlaWdodDogNjAwO1xufVxuXG4ucmVzcG9uc2l2ZS10YWJzIDpkZWVwKC52LXRhYnMtc2xpZGVyKSB7XG4gIGhlaWdodDogM3B4O1xuICBib3JkZXItcmFkaXVzOiAycHg7XG59XG5cbi53aW5kb3ctY29udGVudCA6ZGVlcCgudi13aW5kb3dfX2NvbnRhaW5lcikge1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbi8qIEFzZWd1cmFyIHF1ZSBlbCBjb250ZW5pZG8gc2VhIGNvbXBsZXRhbWVudGUgcmVzcG9uc2l2ZSAqL1xuKiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImFjdGlvbnMtY29udGFpbmVyXCI+XG4gICAgPGgxIGNsYXNzPVwicGFnZS10aXRsZVwiPkRvY3VtZW50b3M8L2gxPlxuXG4gICAgPCEtLSBUYWJzIENvbnRhaW5lciB3aXRoIHJlc3BvbnNpdmUgZGVzaWduIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJzLXdyYXBwZXJcIj5cbiAgICAgIDx2LXRhYnMgXG4gICAgICAgIHYtbW9kZWw9XCJhY3RpdmVUYWJcIlxuICAgICAgICBjbGFzcz1cInJlc3BvbnNpdmUtdGFic1wiXG4gICAgICAgIDpkaXJlY3Rpb249XCIkdnVldGlmeS5kaXNwbGF5Lm1vYmlsZSA/ICdob3Jpem9udGFsJyA6ICdob3Jpem9udGFsJ1wiXG4gICAgICAgIHNob3ctYXJyb3dzXG4gICAgICAgIHNsaWRlci1jb2xvcj1cInByaW1hcnlcIlxuICAgICAgICA6Zml4ZWQtdGFicz1cImZhbHNlXCJcbiAgICAgICAgOmNlbnRlcmVkPVwiISR2dWV0aWZ5LmRpc3BsYXkubW9iaWxlXCJcbiAgICAgICAgZGVuc2l0eT1cImNvbWZvcnRhYmxlXCJcbiAgICAgID5cbiAgICAgICAgPHYtdGFiXG4gICAgICAgICAgdi1mb3I9XCIodGFiLCBrZXkpIGluIHRhYnNcIlxuICAgICAgICAgIDprZXk9XCJrZXlcIlxuICAgICAgICAgIDp2YWx1ZT1cImtleVwiXG4gICAgICAgICAgY2xhc3M9XCJ0YWItaXRlbVwiXG4gICAgICAgICAgOmNsYXNzPVwieyAnbW9iaWxlLXRhYic6ICR2dWV0aWZ5LmRpc3BsYXkubW9iaWxlIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWItbGFiZWxcIj57eyB0YWIubGFiZWwgfX08L3NwYW4+XG4gICAgICAgIDwvdi10YWI+XG4gICAgICA8L3YtdGFicz5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQ29udGVudCBXaW5kb3cgLS0+XG4gICAgPHYtY29udGFpbmVyIGZsdWlkIGNsYXNzPVwiY29udGVudC1jb250YWluZXJcIj5cbiAgICAgIDx2LXdpbmRvdyB2LW1vZGVsPVwiYWN0aXZlVGFiXCIgY2xhc3M9XCJ3aW5kb3ctY29udGVudFwiPlxuICAgICAgICA8di13aW5kb3ctaXRlbSBcbiAgICAgICAgICB2LWZvcj1cIih0YWIsIGtleSkgaW4gdGFic1wiIFxuICAgICAgICAgIDprZXk9XCJrZXlcIiBcbiAgICAgICAgICA6dmFsdWU9XCJrZXlcIlxuICAgICAgICAgIGNsYXNzPVwid2luZG93LWl0ZW1cIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZG9jdW1lbnQtbGlzdCB2LWlmPVwia2V5ID09PSAnZ2VuRG9jcydcIiA6ZG9jdW1lbnRzPVwiZG9jdW1lbnRzXCIgLz5cbiAgICAgICAgICAgIDxpbnZvaWNlLWNhcmRzIHYtZWxzZSA6aW52b2ljZXM9XCJpbnZvaWNlc1wiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdi13aW5kb3ctaXRlbT5cbiAgICAgIDwvdi13aW5kb3c+XG4gICAgPC92LWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgcmVmLCBjb21wdXRlZCwgd2F0Y2ggfSBmcm9tICd2dWUnO1xuXG5pbXBvcnQgeyB1c2VJbnZvaWNlQ2xpZW50U3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvaW52b2ljZUNsaWVudCdcbmltcG9ydCB7IHVzZUludm9pY2VQcm92aWRlclN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL2ludm9pY2VQcm92aWRlcidcbmltcG9ydCB7IHVzZUF1dGhTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9hdXRoJztcblxuaW1wb3J0IEludm9pY2VDYXJkcyBmcm9tICcuLi9jb21wb25lbnRzL0ludm9pY2VDYXJkcy52dWUnO1xuaW1wb3J0IERvY3VtZW50TGlzdCBmcm9tICcuLi9jb21wb25lbnRzL0RvY3VtZW50TGlzdC52dWUnO1xuaW1wb3J0IHsgdXNlRmlsZXNTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9maWxlcyc7XG5cbmltcG9ydCB7IHVzZUdsb2JhbFV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvZ2xvYmFscyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ0FjdGlvbnMnLFxuICBjb21wb25lbnRzOiB7IEludm9pY2VDYXJkcywgRG9jdW1lbnRMaXN0IH0sXG4gIHNldHVwKCkge1xuICAgIC8vIFRPRE86IFRoaXMgcGllY2Ugb2YgY29kZSBtdXN0IGJlIHJlcGxhY2VkIGJ5IGEgdXNlciBsb2dpbi9yZWdpc3RlciBtZXRob2QgdGhhdCByZWNvZ25pemUgdXNlciB1c2luZyBjb29raWVzIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQuLi4gXG4gICAgY29uc3QgeyBmZXRjaERpbmFteWNJbnZvaWNlRmlsdGVyZWQgfSA9IHVzZUdsb2JhbFV0aWxzKCk7XG4gICAgXG4gICAgY29uc3QgYXV0aFN0b3JlID0gdXNlQXV0aFN0b3JlKCk7XG4gICAgY29uc3QgaW52b2ljZVN0b3JlID0gYXV0aFN0b3JlLmlzQ2xpZW50ID8gdXNlSW52b2ljZUNsaWVudFN0b3JlKCkgOiB1c2VJbnZvaWNlUHJvdmlkZXJTdG9yZSgpXG4gICAgXG4gICAgY29uc3QgZmlsZVN0b3JlID0gdXNlRmlsZXNTdG9yZSgpXG4gICAgY29uc3QgYWN0aXZlVGFiID0gcmVmKCdnZW5Eb2NzJyk7XG4gICAgY29uc3QgY3VycmVudFN0YXR1cyA9IHJlZihudWxsKTtcblxuICAgIGNvbnN0IHRhYnMgPSB7XG4gICAgICBnZW5Eb2NzOiB7IGxhYmVsOiBcIkRvY3VtZW50b3MgZ2VuZXJhbGVzXCIsIHZhbHVlOiBbMCwgMV0gfSxcbiAgICAgIGludkRvY3M6IHsgbGFiZWw6IFwiRG9jdW1lbnRvcyBkZSBsYXMgZmFjdHVyYXNcIiwgdmFsdWU6IFs0LCA4LCA5LCAxMCwgMTFdIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGxvYWRJbnZvaWNlcyA9IChzdGF0dXMpID0+IHtcbiAgICAgIGZldGNoRGluYW15Y0ludm9pY2VGaWx0ZXJlZChzdGF0dXMsIGludm9pY2VTdG9yZSk7XG4gICAgfVxuXG4gICAgd2F0Y2goYWN0aXZlVGFiLCAobmV3VGFiKSA9PiB7XG4gICAgICBjdXJyZW50U3RhdHVzLnZhbHVlID0gdGFic1tuZXdUYWJdLnZhbHVlO1xuXG4gICAgICBpZiAobmV3VGFiID09PSAnZ2VuRG9jcycpIHtcbiAgICAgICAgZmlsZVN0b3JlLmZldGNoRG9jdW1lbnRzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2FkSW52b2ljZXMoY3VycmVudFN0YXR1cy52YWx1ZSlcbiAgICAgIH1cbiAgICB9LCB7IFxuICAgICAgZGVlcDogdHJ1ZSxcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSBcbiAgICB9KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGl2ZVRhYixcbiAgICAgIHRhYnMsXG4gICAgICBpbnZvaWNlczogY29tcHV0ZWQoKCkgPT4gaW52b2ljZVN0b3JlLmludm9pY2VzKSxcbiAgICAgIGRvY3VtZW50czogY29tcHV0ZWQoKCkgPT4gZmlsZVN0b3JlLmRvY3VtZW50cylcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuLmFjdGlvbnMtY29udGFpbmVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDEwMHZoO1xuICBwYWRkaW5nOiAwO1xufVxuXG4ucGFnZS10aXRsZSB7XG4gIGZvbnQtc2l6ZTogMS43NXJlbTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgbWFyZ2luOiAxcmVtO1xuICBjb2xvcjogcmdiKHZhcigtLXYtdGhlbWUtb24tc3VyZmFjZSkpO1xufVxuXG4udGFicy13cmFwcGVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIG92ZXJmbG93LXg6IGF1dG87XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYih2YXIoLS12LXRoZW1lLXN1cmZhY2UpKTtcbiAgYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEodmFyKC0tdi1ib3JkZXItY29sb3IpLCB2YXIoLS12LWJvcmRlci1vcGFjaXR5KSk7XG59XG5cbi5yZXNwb25zaXZlLXRhYnMge1xuICB3aWR0aDogMTAwJTtcbiAgbWluLXdpZHRoOiBtYXgtY29udGVudDtcbn1cblxuLnRhYi1pdGVtIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgbWluLXdpZHRoOiBhdXRvO1xuICBtYXgtd2lkdGg6IG5vbmU7XG4gIHBhZGRpbmc6IDAgMjRweDtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7XG59XG5cbi50YWItbGFiZWwge1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBsaW5lLWhlaWdodDogMS4yO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5jb250ZW50LWNvbnRhaW5lciB7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMDtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi53aW5kb3ctY29udGVudCB7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiA2MHZoO1xufVxuXG4ud2luZG93LWl0ZW0ge1xuICB3aWR0aDogMTAwJTtcbn1cblxuLnRhYi1jb250ZW50IHtcbiAgcGFkZGluZzogMXJlbTtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi8qIFJlc3BvbnNpdmUgRGVzaWduICovXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLnBhZ2UtdGl0bGUge1xuICAgIGZvbnQtc2l6ZTogMS41cmVtO1xuICAgIG1hcmdpbjogMC43NXJlbTtcbiAgfVxuICBcbiAgLm1vYmlsZS10YWIge1xuICAgIG1pbi13aWR0aDogMTYwcHggIWltcG9ydGFudDtcbiAgICBwYWRkaW5nOiAwIDE2cHggIWltcG9ydGFudDtcbiAgfVxuICBcbiAgLnRhYi1sYWJlbCB7XG4gICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMTtcbiAgfVxuICBcbiAgLnRhYi1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwLjc1cmVtO1xuICB9XG4gIFxuICAudGFicy13cmFwcGVyIHtcbiAgICAvKiBQZXJtaXRpciBzY3JvbGwgaG9yaXpvbnRhbCBlbiBtw7N2aWwgKi9cbiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG4gICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluO1xuICB9XG4gIFxuICAudGFicy13cmFwcGVyOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgaGVpZ2h0OiA0cHg7XG4gIH1cbiAgXG4gIC50YWJzLXdyYXBwZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcbiAgICBiYWNrZ3JvdW5kOiAjZjFmMWYxO1xuICB9XG4gIFxuICAudGFicy13cmFwcGVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgYmFja2dyb3VuZDogI2MxYzFjMTtcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gIH1cbiAgXG4gIC50YWJzLXdyYXBwZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiAjYThhOGE4O1xuICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAucGFnZS10aXRsZSB7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtO1xuICAgIG1hcmdpbjogMC41cmVtO1xuICB9XG4gIFxuICAubW9iaWxlLXRhYiB7XG4gICAgbWluLXdpZHRoOiAxNDBweCAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmc6IDAgMTJweCAhaW1wb3J0YW50O1xuICB9XG4gIFxuICAudGFiLWxhYmVsIHtcbiAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMDU7XG4gIH1cbiAgXG4gIC50YWItY29udGVudCB7XG4gICAgcGFkZGluZzogMC41cmVtO1xuICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiAzNjBweCkge1xuICAubW9iaWxlLXRhYiB7XG4gICAgbWluLXdpZHRoOiAxMjBweCAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmc6IDAgOHB4ICFpbXBvcnRhbnQ7XG4gIH1cbiAgXG4gIC50YWItbGFiZWwge1xuICAgIGZvbnQtc2l6ZTogMC43cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICB9XG59XG5cbi8qIE1lam9yYXMgdmlzdWFsZXMgKi9cbi5yZXNwb25zaXZlLXRhYnMgOmRlZXAoLnYtdGFiLS1zZWxlY3RlZCkge1xuICBjb2xvcjogdmFyKC0tdi1wcmltYXJ5LWJhc2UsICMyNDI4MmMpO1xuICBmb250LXdlaWdodDogNjAwO1xufVxuXG4ucmVzcG9uc2l2ZS10YWJzIDpkZWVwKC52LXRhYnMtc2xpZGVyKSB7XG4gIGhlaWdodDogM3B4O1xuICBib3JkZXItcmFkaXVzOiAycHg7XG59XG5cbi53aW5kb3ctY29udGVudCA6ZGVlcCgudi13aW5kb3dfX2NvbnRhaW5lcikge1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbi8qIFBhcmEgdGFicyBtw6FzIGxhcmdvcyAtIG9wdGltaXphY2nDs24gZXNwZWNpYWwgcGFyYSBlc3RlIGNvbXBvbmVudGUgKi9cbi50YWItaXRlbSB7XG4gIGZsZXg6IDAgMCBhdXRvO1xufVxuXG4vKiBBc2VndXJhciBxdWUgZWwgY29udGVuaWRvIHNlYSBjb21wbGV0YW1lbnRlIHJlc3BvbnNpdmUgKi9cbioge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4vKiBFc3RpbG9zIGVzcGVjw61maWNvcyBwYXJhIGVzdGUgY29tcG9uZW50ZSBjb24gbWVub3MgdGFicyAqL1xuQG1lZGlhIChtaW4td2lkdGg6IDc2OXB4KSB7XG4gIC50YWItaXRlbSB7XG4gICAgbWluLXdpZHRoOiAyMDBweDtcbiAgICBwYWRkaW5nOiAwIDMycHg7XG4gIH1cbiAgXG4gIC5yZXNwb25zaXZlLXRhYnMge1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB9XG59XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgPHYtZm9ybSB2YWxpZGF0ZS1vbj1cInN1Ym1pdCBsYXp5XCIgZmFzdC1mYWlsIEBzdWJtaXQucHJldmVudD1cImhhbmRsZVN1Ym1pdFwiPlxuICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlYWJsZVwiPlxuICAgICAgPE1vcmVJbmZvIHRpdGxlPVwiRGF0b3MgRW1wcmVzYVwiIHByb2dyYW1tZXJSZWY9XCJjcmVhdGUtcHJvdmlkZXItaW5mb1wiXG4gICAgICBhY3RpdmF0b3I9XCJwYXJlbnRcIj5cbiAgICAgIDwvTW9yZUluZm8+XG5cbiAgICAgIDxicj5cblxuICAgICAgPCEtLSDinIUgQ0FNQklPOiBHcmlkIHJlc3BvbnNpdmUgLS0+XG4gICAgICA8di1yb3c+XG4gICAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIiBtZD1cIjZcIj5cbiAgICAgICAgICA8di1zZWxlY3QgbGFiZWw9XCIqIFRpcG9cIiB2LW1vZGVsPVwicHJvdmlkZXIuY29tcGFueVR5cGVcIiA6aXRlbXM9XCJwZXJzb25UeXBlc1wiIGNsZWFyYWJsZSBkZWxldGFibGUtY2hpcHNcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIDpydWxlcz1cImNvbmZpcm1SdWxlXCIgcmVxdWlyZWQ+PC92LXNlbGVjdD5cbiAgICAgICAgPC92LWNvbD5cblxuICAgICAgICA8di1jb2wgY29scz1cIjEyXCIgbWQ9XCI2XCI+XG4gICAgICAgICAgPHYtdGV4dC1maWVsZCBsYWJlbD1cIiogRGVub21pbmFjacOzbiBTb2NpYWxcIiB2LW1vZGVsPVwicHJvdmlkZXIuc29jaWFsRGVub21pbmF0aW9uXCJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIDpydWxlcz1cImNvbmZpcm1SdWxlXCIgcmVxdWlyZWQvPlxuICAgICAgICA8L3YtY29sPlxuXG4gICAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIiBtZD1cIjZcIj5cbiAgICAgICAgICA8di10ZXh0LWZpZWxkIGxhYmVsPVwiQ2l1ZGFkXCIgdi1tb2RlbD1cInByb3ZpZGVyLmNpdHlcIiB2YXJpYW50PVwib3V0bGluZWRcIiAvPlxuICAgICAgICA8L3YtY29sPlxuXG4gICAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIiBtZD1cIjZcIj5cbiAgICAgICAgICA8di10ZXh0LWZpZWxkIGxhYmVsPVwiRGlyZWNjacOzblwiIHYtbW9kZWw9XCJwcm92aWRlci5hZGRyZXNzXCIgdmFyaWFudD1cIm91dGxpbmVkXCIgLz5cbiAgICAgICAgPC92LWNvbD5cbiAgICAgIDwvdi1yb3c+XG5cbiAgICAgIDx2LXJvdz5cbiAgICAgICAgPHYtY29sIGNvbHM9XCIxMlwiIG1kPVwiNlwiPlxuICAgICAgICAgIDx2LXRleHQtZmllbGQgbGFiZWw9XCIqIE5JRiBFbXByZXNhXCIgdi1tb2RlbD1cInByb3ZpZGVyLmNvbXBhbnlOaWZcIiB2YXJpYW50PVwib3V0bGluZWRcIiA6cnVsZXM9XCJjb25maXJtUnVsZVwiIHJlcXVpcmVkLz5cbiAgICAgICAgPC92LWNvbD5cblxuICAgICAgICA8di1jb2wgY29scz1cIjEyXCIgbWQ9XCI2XCI+XG4gICAgICAgICAgPHYtdGV4dC1maWVsZCBsYWJlbD1cIkPDs2RpZ28gUG9zdGFsXCIgdi1tb2RlbD1cInByb3ZpZGVyLnBvc3RhbENvZGVcIiB2YXJpYW50PVwib3V0bGluZWRcIiAvPlxuICAgICAgICA8L3YtY29sPlxuICAgICAgPC92LXJvdz5cblxuICAgICAgPHYtcm93PlxuICAgICAgICA8di1jb2wgY29scz1cIjEyXCIgbWQ9XCIxMlwiPlxuICAgICAgICAgIDxDb3VudHJ5U2VsZWN0b3IgXG4gICAgICAgICAgICB2LW1vZGVsPVwicHJvdmlkZXIuY291bnRyeVwiIFxuICAgICAgICAgICAgbGFiZWw9XCJQYcOtc1wiXG4gICAgICAgICAgICA6cnVsZXM9XCJbXVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC92LWNvbD5cbiAgICAgIDwvdi1yb3c+XG4gICAgICBcbiAgICAgIDxicj5cblxuICAgICAgPE1vcmVJbmZvIHRpdGxlPVwiRGF0b3MgZGUgZmFjdHVyYWNpw7NuXCIgcHJvZ3JhbW1lclJlZj1cImJpbGxpbmctZGF0YVwiIGFjdGl2YXRvcj1cInBhcmVudFwiPlxuICAgICAgPC9Nb3JlSW5mbz5cblxuICAgICAgPHYtcm93PlxuICAgICAgICA8di1jb2wgY29scz1cIjEyXCIgbWQ9XCI2XCI+XG4gICAgICAgICAgPHYtdGV4dC1maWVsZCBsYWJlbD1cIiogSUJBTlwiIHYtbW9kZWw9XCJwcm92aWRlci5wcm92aWRlckliYW5cIiB2YXJpYW50PVwib3V0bGluZWRcIiA6cnVsZXM9XCJpYmFuUnVsZXNcIiByZXF1aXJlZC8+XG4gICAgICAgIDwvdi1jb2w+XG5cbiAgICAgICAgPHYtY29sIGNvbHM9XCIxMlwiIG1kPVwiNlwiPlxuICAgICAgICAgIDxTZWxlY3RvciBzZWxlY3Rvci10eXBlPVwiUGF5bWVudE1ldGhvZHNcIiBcbiAgICAgICAgICAgIGxhYmVsPVwiRm9ybWEgZGUgcGFnb1wiIFxuICAgICAgICAgICAgdi1tb2RlbD1cInByb3ZpZGVyLnBheW1lbnRNZXRob2RcIlxuICAgICAgICAgICAgOnJ1bGVzPVwiY29uZmlybVJ1bGVcIiByZXF1aXJlZFxuICAgICAgICAgIC8+XG4gICAgICAgIDwvdi1jb2w+XG4gICAgICA8L3Ytcm93PlxuIFxuICAgICAgPE1vcmVJbmZvIHRpdGxlPVwiRGF0b3MgZGUgY29udGFjdG9cIiBwcm9ncmFtbWVyUmVmPVwiY29udGFjdC1kYXRhXCIgYWN0aXZhdG9yPVwicGFyZW50XCI+PC9Nb3JlSW5mbz5cblxuICAgICAgPHYtcm93PlxuICAgICAgICA8di1jb2wgY29scz1cIjEyXCIgbWQ9XCI0XCI+XG4gICAgICAgICAgPHYtdGV4dC1maWVsZCBsYWJlbD1cIk5vbWJyZVwiIHYtbW9kZWw9XCJwcm92aWRlci5jb250YWN0UGVyc29uTmFtZVwiXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIj48L3YtdGV4dC1maWVsZD5cbiAgICAgICAgPC92LWNvbD5cblxuICAgICAgICA8di1jb2wgY29scz1cIjEyXCIgbWQ9XCI0XCI+XG4gICAgICAgICAgPHYtdGV4dC1maWVsZCBsYWJlbD1cIiogVGVsw6lmb25vXCIgdi1tb2RlbD1cInByb3ZpZGVyLmNvbnRhY3RQZXJzb25QaG9uZVwiXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIiByZXF1aXJlZCA6cnVsZXM9XCJwaG9uZVJ1bGVzXCI+PC92LXRleHQtZmllbGQ+XG4gICAgICAgIDwvdi1jb2w+XG5cbiAgICAgICAgPHYtY29sIGNvbHM9XCIxMlwiIG1kPVwiNFwiPlxuICAgICAgICAgIDx2LXRleHQtZmllbGQgbGFiZWw9XCJBcGVsbGlkb3NcIiB2LW1vZGVsPVwicHJvdmlkZXIuY29udGFjdFBlcnNvblN1ck5hbWVcIlxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCI+PC92LXRleHQtZmllbGQ+XG4gICAgICAgIDwvdi1jb2w+XG4gICAgICA8L3Ytcm93PlxuXG4gICAgICA8di1yb3c+XG4gICAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIiBtZD1cIjRcIj5cbiAgICAgICAgICA8di10ZXh0LWZpZWxkIGxhYmVsPVwiKiBFbWFpbFwiIHYtbW9kZWw9XCJwcm92aWRlci5jb250YWN0UGVyc29uRW1haWxcIlxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCIgOnJ1bGVzPVwiZW1haWxSdWxlc1wiIHJlcXVpcmVkPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICA8L3YtY29sPlxuXG4gICAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIiBtZD1cIjRcIj5cbiAgICAgICAgICA8di10ZXh0LWZpZWxkIGxhYmVsPVwiRE5JXCIgdi1tb2RlbD1cInByb3ZpZGVyLmNvbnRhY3RQZXJzb25OaWZcIlxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCI+PC92LXRleHQtZmllbGQ+XG4gICAgICAgIDwvdi1jb2w+XG4gICAgICAgIFxuICAgICAgICA8di1jb2wgY29scz1cIjEyXCIgbWQ9XCI0XCI+XG4gICAgICAgICAgPFNlbGVjdG9yIHNlbGVjdG9yLXR5cGU9XCJDb21wYW55UG9zaXRpb25cIiBcbiAgICAgICAgICAgIGxhYmVsPVwiQ2FyZ28gZW4gbGEgZW1wcmVzYVwiIFxuICAgICAgICAgICAgdi1tb2RlbD1cInByb3ZpZGVyLmNvbnRhY3RQZXJzb25Qb3NpdGlvblwiXG4gICAgICAgICAgICA6cnVsZXM9XCJjb25maXJtUnVsZVwiIHJlcXVpcmVkXG4gICAgICAgICAgLz5cbiAgICAgICAgPC92LWNvbD5cbiAgICAgIDwvdi1yb3c+XG5cbiAgICAgIDxNb3JlSW5mbyB0aXRsZT1cIkNsYXNpZmljYWNpw7NuXCJcbiAgICAgIHByb2dyYW1tZXJSZWY9XCJjcmVhdGUtcHJvdmlkZXItY2xhc3NpZmljYXRpb25cIlxuICAgICAgYWN0aXZhdG9yPVwicGFyZW50XCJcbiAgICAgID5cbiAgICAgIDwvTW9yZUluZm8+XG5cbiAgICAgIDx2LXJvdyBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPHYtY29sPlxuICAgICAgICAgIDx2LXNlbGVjdCBsYWJlbD1cIlNlbGVjY2lvbmUgdW5hIGNhdGVnb3LDrWFcIiBcbiAgICAgICAgICAgIHYtbW9kZWw9XCJwcm92aWRlci5jYXRlZ29yaWVzQXNzaWduZWRcIlxuICAgICAgICAgICAgOml0ZW1zPVwidGFyZ2V0Q2F0ZWdvcmllc1wiXG4gICAgICAgICAgICBpdGVtLXZhbHVlPVwiQGlkXCJcbiAgICAgICAgICAgIGl0ZW0tdGl0bGU9XCJuYW1lXCIgXG4gICAgICAgICAgICBjbGVhcmFibGUgZGVsZXRhYmxlLWNoaXBzIG11bHRpcGxlXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIj5cbiAgICAgICAgICA8L3Ytc2VsZWN0PlxuICAgICAgICA8L3YtY29sPlxuXG4gICAgICAgICA8di1idG4gaWNvbiBjbGFzcz1cInBsdXMtYnRuXCI+XG4gICAgICAgICAgPHYtaWNvbiBjbGFzcz1cInRleHQtd2hpdGVcIj5tZGktcGx1czwvdi1pY29uPlxuICAgICAgICAgIDxPdmVybGF5IFxuICAgICAgICAgIHYtbW9kZWw9XCJzaG93Q2F0ZWdvcnlPdmVybGF5XCJcbiAgICAgICAgICB0aXRsZT1cIkFncmVnYXIgdMOpcm1pbm8gZGUgY2F0ZWdvcsOtYVwiXG4gICAgICAgICAgcHJvZ3JhbW1lclJlZj1cImNhdGVnb3JpZXMtbmFtZVwiIFxuICAgICAgICAgICAgYWN0aXZhdG9yPVwicGFyZW50XCI+XG4gICAgICAgICAgICA8dGVtcGxhdGUgI2RlZmF1bHQ+XG4gICAgICAgICAgICAgIDx2LWZvcm0gY2xhc3M9XCJwLTJcIiBmYXN0LWZhaWwgQHN1Ym1pdC5wcmV2ZW50PVwiaGFuZGxlU3VibWl0Q2F0ZWdvcnlcIiBzdHlsZT1cIm92ZXJmbG93LXk6IGF1dG87XCI+XG4gICAgICAgICAgICAgICAgPE1vcmVJbmZvIHRpdGxlPVwiTm9tYnJlIGRlIGxhIGNhdGVnb3LDrWFcIlxuICAgICAgICAgICAgICAgICAgcHJvZ3JhbW1lclJlZj1cImNhdGVnb3J5LW5hbWVcIlxuICAgICAgICAgICAgICAgICAgYWN0aXZhdG9yPVwicGFyZW50XCI+XG4gICAgICAgICAgICAgICAgPC9Nb3JlSW5mbz5cblxuICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgdmFyaWFudD1cIm91dGxpbmVkXCIgbGFiZWw9XCJOb21icmUgZGUgbGEgY2F0ZWdvcsOtYVwiXG4gICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiY2F0ZWdvcnkubmFtZVwiIGhpZGUtZGV0YWlscz48L3YtdGV4dC1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0zIGNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8di1idG4gY2xhc3M9XCJ0ZXh0LXdoaXRlIGFkZC10ZW1wbGF0ZXMtYnV0dG9uXCIgdHlwZT1cInN1Ym1pdFwiPkHDsWFkaXI8L3YtYnRuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvdi1mb3JtPlxuICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICA8L092ZXJsYXk+XG4gICAgICAgIDwvdi1idG4+XG4gICAgICA8L3Ytcm93PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNlbnRlclwiPlxuICAgICAgPHYtYnRuIGNsYXNzPVwibXktMiB0ZXh0LXdoaXRlIGFkZC10ZW1wbGF0ZXMtYnV0dG9uXCIgdHlwZT1cInN1Ym1pdFwiPlxuICAgICAgICB7eyBleGlzdGluZ1Byb3ZpZGVyID8gJ0FjdHVhbGl6YXInIDogJ0HDsWFkaXInIH19XG4gICAgICA8L3YtYnRuPlxuICAgIDwvZGl2PlxuICA8L3YtZm9ybT5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgT3ZlcmxheSBmcm9tICcuL092ZXJsYXkudnVlJztcbmltcG9ydCBNb3JlSW5mbyBmcm9tIFwiLi9Nb3JlSW5mby52dWVcIjtcbmltcG9ydCBDb3VudHJ5U2VsZWN0b3IgZnJvbSAnLi9Db3VudHJ5U2VsZWN0b3IudnVlJztcbmltcG9ydCB7IENhdGVnb3J5SW1wbCwgUHJvdmlkZXJJbXBsIH0gZnJvbSAnLi4vc2VydmljZXMvdHlwZXMvaW1wbGVtZW50YXRpb25zJztcbmltcG9ydCB7IFByb3ZpZGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ltcGxlbWVudGF0aW9ucy9wcm92aWRlci9wcm92aWRlclNlcnZpY2UnO1xuaW1wb3J0IHsgdXNlRW50aXR5IH0gZnJvbSAnLi4vc2VydmljZXMvY29tcG9zYWJsZXMvdXNlRW50aXR5JztcbmltcG9ydCB7IENhdGVnb3J5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ltcGxlbWVudGF0aW9ucy9jYXRlZ29yeS9jYXRlZ29yeVNlcnZpY2UnO1xuaW1wb3J0IHsgdXNlQ2F0ZWdvcnlTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9jYXRlZ29yeS5qcydcbmltcG9ydCB7IHVzZVByb3ZpZGVyU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvcHJvdmlkZXIuanMnXG5pbXBvcnQgeyB1c2VHZW5lcmljU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvZ2VuZXJpYy50cydcbmltcG9ydCB7IGNvbXB1dGVkLCB0b1JlZnMsIHdhdGNoLCBvbk1vdW50ZWQsIHJlZiB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgU2VsZWN0b3IgZnJvbSAnLi9TZWxlY3Rvci52dWUnO1xuaW1wb3J0IHsgdXNlVG9hc3QgfSBmcm9tICd2dWUtdG9hc3RpZmljYXRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCB7XG5uYW1lOiAnQ3JlYXRlUHJvdmlkZXInLFxuaW5qZWN0OiB7XG4gIG5vdGlmeU92ZXJsYXlTYXZlZDoge1xuICAgIGZyb206ICdub3RpZnlPdmVybGF5U2F2ZWQnLFxuICAgIGRlZmF1bHQ6IG51bGxcbiAgfVxufSxcbmRhdGE6e1xuICBwaG9uZVJ1bGVzOiBbXG4gICAgICAgIHYgPT4gISF2IHx8ICdTZSByZXF1aWVyZSBlbCBuw7ptZXJvIHRlbGVmw7NuaWNvLicsXG4gICAgICAgIHYgPT4gKHYgJiYgdi5sZW5ndGggPj0gNikgfHwgJ0VsIG7Dum1lcm8gZGViZSBjb250ZW5lciBhbCBtZW5vcyA2IGNhcsOhY3RlcmVzLicsXG4gICAgICBdLFxufSxcbmNvbXBvbmVudHM6IHtcbiAgTW9yZUluZm8sXG4gIE92ZXJsYXksXG4gIFNlbGVjdG9yLFxuICBDb3VudHJ5U2VsZWN0b3Jcbn0sXG5wcm9wczoge1xuICBleGlzdGluZ1Byb3ZpZGVyOiB7XG4gICAgdHlwZTogT2JqZWN0LFxuICAgIGRlZmF1bHQ6IG51bGxcbiAgfVxufSxcbnNldHVwKHByb3BzKSB7XG4gIGNvbnN0IHsgZXhpc3RpbmdQcm92aWRlciB9ID0gdG9SZWZzKHByb3BzKTtcblxuICBjb25zdCB0b2FzdCA9IHVzZVRvYXN0KCk7XG4gIGNvbnN0IGNhdGVnb3J5U3RvcmUgPSB1c2VDYXRlZ29yeVN0b3JlKCk7XG4gIGNvbnN0IHByb3ZpZGVyU3RvcmUgPSB1c2VQcm92aWRlclN0b3JlKCk7XG4gIGNvbnN0IGdlbmVyaWNTdG9yZSA9IHVzZUdlbmVyaWNTdG9yZSgpO1xuXG4gIGNvbnN0IHNob3dDYXRlZ29yeU92ZXJsYXkgPSByZWYoZmFsc2UpO1xuXG4gIG9uTW91bnRlZChhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNhdGVnb3J5U3RvcmUuZmV0Y2hBbGwoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWwgY2FyZ2FyIGNhdGVnb3LDrWFzOicsIGVycm9yKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHRhcmdldENhdGVnb3JpZXMgPSBjb21wdXRlZCgoKSA9PiBjYXRlZ29yeVN0b3JlLmdldENhdGVnb3JpZXMpO1xuXG4gIGNvbnN0IGVtYWlsUnVsZXMgPSBbXG4gICAgdiA9PiAhIXYgfHwgJ0VsIGNvcnJlbyBlcyByZXF1ZXJpZG8nLFxuICAgIHYgPT4gLy4rQC4rXFwuLisvLnRlc3QodikgfHwgJ0luZ3Jlc2UgdW4gY29ycmVvIHbDoWxpZG8nXG4gIF07XG5cbiAgY29uc3QgY29uZmlybVJ1bGUgPSBbXG4gICAgdiA9PiAhIXYgfHwgJ0VzdGUgZGF0byBlcyByZXF1ZXJpZG8nLFxuICAgIHYgPT4gKHYgJiYgdi5sZW5ndGggPj0gMikgfHwgJ0VzdGUgZGF0byBkZWJlIHRlbmVyIG1hcyBjYXJhY3RlcmVzLicsXG4gIF07XG5cbiAgY29uc3QgaWJhblJ1bGVzID0gW1xuICAgIHYgPT4gISF2IHx8ICdFbCBJQkFOIGVzIHJlcXVlcmlkby4nLFxuICBdO1xuXG4gIGNvbnN0IHsgXG4gICAgZW50aXR5OiBwcm92aWRlciwgXG4gICAgcmVzZXRFbnRpdHk6IHJlc2V0UHJvdmlkZXIsXG4gICAgbG9hZEVudGl0eTogbG9hZFByb3ZpZGVyIFxuICB9ID0gdXNlRW50aXR5KFByb3ZpZGVySW1wbCwgcHJvdmlkZXJTdG9yZSk7XG5cbiAgY29uc3QgeyBcbiAgICBlbnRpdHk6IGNhdGVnb3J5LFxuICAgIHJlc2V0RW50aXR5OiByZXNldENhdGVnb3J5LFxuICB9ID0gdXNlRW50aXR5KENhdGVnb3J5SW1wbCwgY2F0ZWdvcnlTdG9yZSk7XG5cbiAgaWYgKGV4aXN0aW5nUHJvdmlkZXIudmFsdWUpIHtcbiAgICBsb2FkUHJvdmlkZXIoZXhpc3RpbmdQcm92aWRlci52YWx1ZSk7XG4gIH1cblxuICB3YXRjaCgoKSA9PiBleGlzdGluZ1Byb3ZpZGVyLnZhbHVlLCAobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiB7XG4gICAgaWYgKG5ld1ZhbHVlID09PSBvbGRWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChuZXdWYWx1ZSkge1xuICAgICAgbG9hZFByb3ZpZGVyKG5ld1ZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzZXRQcm92aWRlcigpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICB0b2FzdCxcbiAgICBnZW5lcmljU3RvcmUsXG4gICAgaWJhblJ1bGVzLFxuICAgIGNvbmZpcm1SdWxlLFxuICAgIGVtYWlsUnVsZXMsXG4gICAgdGFyZ2V0Q2F0ZWdvcmllcyxcbiAgICBjYXRlZ29yeVN0b3JlLFxuICAgIHByb3ZpZGVyU3RvcmUsXG4gICAgY2F0ZWdvcnksXG4gICAgcHJvdmlkZXIsXG4gICAgcmVzZXRDYXRlZ29yeSxcbiAgICByZXNldFByb3ZpZGVyLFxuICAgIHBlcnNvblR5cGVzOiBbXCJQZXJzb25hIEbDrXNpY2FcIiwgXCJQZXJzb25hIEp1csOtZGljYVwiXSxcbiAgICBzaG93Q2F0ZWdvcnlPdmVybGF5LFxuICB9O1xufSxcbm1ldGhvZHM6IHtcbiAgYXN5bmMgY3JlYXRlT3JVcGRhdGVQcm92aWRlcihzZXJ2aWNlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLnByb3ZpZGVyLnByb3ZpZGVySWJhbikge1xuICAgICAgICB0aGlzLnByb3ZpZGVyLnByb3ZpZGVySWJhbiA9IHRoaXMucHJvdmlkZXIucHJvdmlkZXJJYmFuLnJlcGxhY2UoL1xccy9nLCAnJykudG9VcHBlckNhc2UoKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5nZW5lcmljU3RvcmUuY3JlYXRlR2VuZXJpYyhzZXJ2aWNlKTtcblxuICAgICAgdGhpcy4kZW1pdCgnc2F2ZWQnLCB0cnVlKTtcblxuICAgICAgaWYgKHRoaXMubm90aWZ5T3ZlcmxheVNhdmVkICYmIHR5cGVvZiB0aGlzLm5vdGlmeU92ZXJsYXlTYXZlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm5vdGlmeU92ZXJsYXlTYXZlZCh0cnVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGVuIGNyZWF0ZU9yVXBkYXRlUHJvdmlkZXI6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9LFxuXG4gIGFzeW5jIGhhbmRsZVN1Ym1pdENhdGVnb3J5KCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjYXRlZ29yeVNlcnZpY2UgPSBuZXcgQ2F0ZWdvcnlTZXJ2aWNlKHRoaXMuY2F0ZWdvcnksIG51bGwpO1xuICAgICAgXG4gICAgICBhd2FpdCB0aGlzLmdlbmVyaWNTdG9yZS5jcmVhdGVHZW5lcmljKGNhdGVnb3J5U2VydmljZSk7XG5cbiAgICAgIHRoaXMuc2hvd0NhdGVnb3J5T3ZlcmxheSA9IGZhbHNlO1xuXG4gICAgICB0aGlzLnJlc2V0Q2F0ZWdvcnkoKTtcbiAgICAgIFxuICAgICAgYXdhaXQgdGhpcy5jYXRlZ29yeVN0b3JlLmZldGNoQWxsKCk7IFxuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFsIGNyZWFyIGNhdGVnb3LDrWE6JywgZXJyb3IpO1xuICAgICAgdGhpcy50b2FzdC5lcnJvcignRXJyb3IgYWwgY3JlYXIgY2F0ZWdvcsOtYScpO1xuICAgIH1cbiAgfSxcbiAgXG4gIGFzeW5jIGhhbmRsZVN1Ym1pdChldmVudCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgZXZlbnQ7XG5cbiAgICAgIGlmICghcmVzdWx0c1sndmFsaWQnXSkge1xuICAgICAgICB0aGlzLnRvYXN0LmVycm9yKCdGb3JtdWxhcmlvIGludsOhbGlkbycpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5wcm92aWRlci5wcm92aWRlckliYW4gfHwgdGhpcy5wcm92aWRlci5wcm92aWRlckliYW4udHJpbSgpID09PSAnJykge1xuICAgICAgICB0aGlzLnRvYXN0LmVycm9yKCdFbCBJQkFOIGVzIHJlcXVlcmlkbycpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMucHJvdmlkZXIucHJvdmlkZXJJYmFuID0gdGhpcy5wcm92aWRlci5wcm92aWRlckliYW4ucmVwbGFjZSgvXFxzL2csICcnKS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICBjb25zdCBwcm92aWRlclNlcnZpY2UgPSBuZXcgUHJvdmlkZXJTZXJ2aWNlKFxuICAgICAgICB0aGlzLnByb3ZpZGVyLFxuICAgICAgICB0aGlzLmV4aXN0aW5nUHJvdmlkZXJcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IHRoaXMuY3JlYXRlT3JVcGRhdGVQcm92aWRlcihwcm92aWRlclNlcnZpY2UpO1xuXG4gICAgICBpZiAoIXRoaXMuZXhpc3RpbmdQcm92aWRlcikge1xuICAgICAgICB0aGlzLnJlc2V0UHJvdmlkZXIoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZW4gaGFuZGxlU3VibWl0OicsIGVycm9yKTtcbiAgICAgIHRoaXMudG9hc3QuZXJyb3IoJ0Vycm9yIGFsIGd1YXJkYXI6ICcgKyAoZXJyb3IubWVzc2FnZSB8fCBlcnJvcikpO1xuICAgIH1cbiAgfVxufVxufTtcbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuLmFkZC10ZW1wbGF0ZXMtYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzg3YmQ3ODtcbiAgbWFyZ2luLXRvcDogMTZweDtcbn1cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICAgIDx2LWZvcm0gdmFsaWRhdGUtb249XCJzdWJtaXQgbGF6eVwiIGZhc3QtZmFpbCBAc3VibWl0LnByZXZlbnQ9XCJoYW5kbGVTdWJtaXRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVhYmxlXCI+XG4gICAgICAgICAgICA8TW9yZUluZm8gdGl0bGU9XCJEYXRvcyBkZSBmYWN0dXJhXCIgXG4gICAgICAgICAgICBwcm9ncmFtbWVyUmVmPVwiYWRkLWludm9pY2VcIlxuICAgICAgICAgICAgYWN0aXZhdG9yPVwicGFyZW50XCI+PC9Nb3JlSW5mbz5cbiAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHYtcm93IGNsYXNzPVwiY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj1cImF1dGhTdG9yZS5pc0NsaWVudFwiIGNsYXNzPVwidy0xMDAgZC1mbGV4IGNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHYtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1pZj1cIiFsb2FkaW5nUHJvdmlkZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1tZC0xMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoPVwiMTUwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIlByb3ZlZWRvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOml0ZW1zPVwidGFyZ2V0UHJvdmlkZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiaW52b2ljZS5wcm92aWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS10aXRsZT1cInNvY2lhbERlbm9taW5hdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS12YWx1ZT1cIkBpZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRhYmxlLWNoaXBzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8di1wcm9ncmVzcy1jaXJjdWxhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV0ZXJtaW5hdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLW1kLTExXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3YtcHJvZ3Jlc3MtY2lyY3VsYXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LWJ0biBpY29uIEBjbGljaz1cIigpID0+IHsgfVwiIGNsYXNzPVwicGx1cy1idG4gY29sLW1kLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1pY29uIGNsYXNzPVwidGV4dC13aGl0ZVwiPm1kaS1wbHVzPC92LWljb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8T3ZlcmxheSB0aXRsZT1cIkNyZWFyIHByb3ZlZWRvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW1tZXJSZWY9XCJjcmVhdGUtcHJvdmlkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZhdG9yPVwicGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJzaG93UHJvdmlkZXJPdmVybGF5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjZGVmYXVsdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDcmVhdGVQcm92aWRlciBAc2F2ZWQ9XCJvblByb3ZpZGVyU2F2ZWRcIj48L0NyZWF0ZVByb3ZpZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvT3ZlcmxheT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1idG4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXggY2VudGVyXCIgdi1pZj1cImF1dGhTdG9yZS5pc1Byb3ZpZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8di1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LWlmPVwiIWxvYWRpbmdDbGllbnRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1tZC0xMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoPVwiMTUwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkNsaWVudGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDppdGVtcz1cInRhcmdldENsaWVudHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJpbnZvaWNlLmNsaWVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS10aXRsZT1cInNvY2lhbERlbm9taW5hdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS12YWx1ZT1cIkBpZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRhYmxlLWNoaXBzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8di1wcm9ncmVzcy1jaXJjdWxhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV0ZXJtaW5hdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLW1kLTExXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3YtcHJvZ3Jlc3MtY2lyY3VsYXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gI1RPRE86IENyZWFyIGNvbXBvbmVudGUgQ3JlYXRlQ2xpZW50IHNpbWlsYXIgYSBDcmVhdGVQcm92aWRlciAtLT4gXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDx2LWJ0biBpY29uIEBjbGljaz1cIigpID0+IHsgfVwiIGNsYXNzPVwicGx1cy1idG4gY29sLW1kLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1pY29uIGNsYXNzPVwidGV4dC13aGl0ZVwiPm1kaS1wbHVzPC92LWljb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8T3ZlcmxheSB0aXRsZT1cIkNyZWFyIGNsaWVudGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtbWVyUmVmPVwiY3JlYXRlLWNsaWVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0b3I9XCJwYXJlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvT3ZlcmxheT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1idG4+IC0tPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICAgICAgPC92LXJvdz5cblxuICAgICAgICAgICAgICAgIDxicj48YnI+XG5cbiAgICAgICAgICAgICAgICA8di1yb3c+XG4gICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwibS0xXCIgbGFiZWw9XCJOwrAgRmFjdHVyYVwiIHYtbW9kZWw9XCJpbnZvaWNlLmludm9pY2VOdW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvdi10ZXh0LWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgdHlwZT1cIm51bWJlclwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGNsYXNzPVwibS0xXCIgbGFiZWw9XCJUb3RhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiaW52b2ljZS50b3RhbFwiPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkIHR5cGU9XCJudW1iZXJcIiB2YXJpYW50PVwib3V0bGluZWRcIiBjbGFzcz1cIm0tMVwiIGxhYmVsPVwiQmFzZSBpbXBvbmlibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cImludm9pY2UudGF4QmFzZVwiPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkIHR5cGU9XCJudW1iZXJcIiB2YXJpYW50PVwib3V0bGluZWRcIiBjbGFzcz1cIm0tMVwiIGxhYmVsPVwiSW1wdWVzdG9zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJpbnZvaWNlLnRheFwiPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkIHR5cGU9XCJudW1iZXJcIiB2YXJpYW50PVwib3V0bGluZWRcIiBjbGFzcz1cIm0tMVwiIGxhYmVsPVwiUmV0ZW5jaW9uZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cImludm9pY2UucmV0ZW50aW9uc1wiPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvdi1yb3c+XG4gICAgICAgICAgICAgICAgPGJyPlxuXG4gICAgICAgICAgICAgICAgPHYtcm93PlxuXG4gICAgICAgICAgICAgICAgICAgIDxEYXRlSW5wdXQgXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm0tMVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJGZWNoYSBkZSBFbWlzaW9uXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiaW52b2ljZS5icm9hZGNhc3REYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxEYXRlSW5wdXQgXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm0tMVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJGZWNoYSBkZSBWZW5jaW1pZW50b1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cImludm9pY2UuZXhwaXJhdGlvbkRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPERhdGVJbnB1dCBcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibS0xXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkZlY2hhIGRlIFByZXN0YWNpb24gZGUgU2VydmljaW9zXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiaW52b2ljZS5kYXRlT2ZTZXJ2aWNlUHJvdmlzaW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8L3Ytcm93PlxuICAgICAgICAgICAgICAgIDxicj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgICAgICAgICAgICAgICA8di1jYXJkIHRpdGxlPVwiU2VsZWNjaW9uYXIgdW4gZmljaGVyb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJ0aXRsZT1cIk3DoXhpbW8gMSBmaWNoZXJvLiBMw61taXRlIGRlIDUwIE1CLiBUaXBvcyBwZXJtaXRpZG9zOiBwZGYuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8di1maWxlLWlucHV0IGNsZWFyYWJsZSBsYWJlbD1cIkZpY2hlcm9zIHNlbGVjY2lvbmFkb3M6XCIgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiaW52b2ljZS5hdHRhY2hlZERvY3VtZW50XCIgYWNjZXB0PVwiLnBkZlwiPjwvdi1maWxlLWlucHV0PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMiBtdC0wIHctMTAwIGNlbnRlciBmbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgdi1pZj1cImludm9pY2UuYXR0YWNoZWREb2N1bWVudFwiPjxiPkFyY2hpdm8gYWRqdW50bzo8L2I+IHt7IGludm9pY2UuYXR0YWNoZWREb2N1bWVudCB9fTwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCB2LWVsc2U+PGI+Tm8gaGF5IGFyY2hpdm8gYWRqdW50byBhdW4uLi48L2I+PC9zbWFsbD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8di1idG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtaWY9XCJpbnZvaWNlLmF0dGFjaGVkRG9jdW1lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmhyZWY9XCJgL3VwbG9hZHMvJHtpbnZvaWNlLmF0dGFjaGVkRG9jdW1lbnR9YFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlciBkb2N1bWVudG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92LWJ0bj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdi1jYXJkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDx2LXJvdyBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgdHlwZT1cIm51bWJlclwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGNsYXNzPVwidy01MCBtLTFcIiBsYWJlbD1cIkdhc3RvIHN1cGxpZG8gZGUgZmFjdHVyYVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cImludm9pY2Uuc3VwcGxpZWRFeHBlbnNlXCI+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdi1yb3c+XG4gICAgICAgICAgICAgICAgICAgIDx2LXJvdyBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPFNlbGVjdG9yIHNlbGVjdG9yLXR5cGU9XCJQYXltZW50TWV0aG9kc1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJGb3JtYSBkZSBwYWdvXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiaW52b2ljZS5wYXltZW50TWV0aG9kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDpydWxlcz1cImNvbmZpcm1SdWxlXCIgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy01MFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvdi1yb3c+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgY2VudGVyIHB4LTMgcHktNVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZW50ZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8TW9yZUluZm8gdGl0bGU9XCJOdWV2byBHcnVwb1wiIFxuICAgICAgICAgICAgICAgICAgICBwcm9ncmFtbWVyUmVmPVwiZ3JvdXAtaXRlbXNcIlxuICAgICAgICAgICAgICAgICAgICBhY3RpdmF0b3I9XCJwYXJlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9Nb3JlSW5mbz5cbiAgICAgICAgICAgICAgICAgICAgPHYtYnRuIGljb24gQGNsaWNrPVwiaW52b2ljZUFkZFwiIGNsYXNzPVwicGx1cy1idG5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LWljb24gY2xhc3M9XCJ0ZXh0LXdoaXRlXCI+bWRpLXBsdXM8L3YtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC92LWJ0bj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIChBcnJheS5pc0FycmF5KGludm9pY2UucHJvZHVjdCkgPyBpbnZvaWNlLnByb2R1Y3QgOiBbXSlcIiA6a2V5PVwiaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxocj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LXJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1idG4gY2xhc3M9XCJjbG9zZUJ1dHRvbiBidG4gcm91bmRlZC1jaXJjbGVcIiBzaXplPVwic21hbGxcIiBpY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz1cInJlbW92ZUludm9pY2UoaW5kZXgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWljb24+bWRpLXRyYXNoLWNhbi1vdXRsaW5lPC92LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92LWJ0bj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnI+PGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC92LXJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LXJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGNsYXNzPVwibS0xXCIgbGFiZWw9XCJDb25jZXB0b1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJpdGVtLnByb2R1Y3REZXNjcmlwdGlvblwiPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC92LXJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LXJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkIHR5cGU9XCJudW1iZXJcIiB2YXJpYW50PVwib3V0bGluZWRcIiBjbGFzcz1cIm0tMVwiIGxhYmVsPVwiVWRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cIml0ZW0udW5pdHNcIj48L3YtdGV4dC1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkIHR5cGU9XCJudW1iZXJcIiB2YXJpYW50PVwib3V0bGluZWRcIiBjbGFzcz1cIm0tMVwiIGxhYmVsPVwiUHJlY2lvIHVkLlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJpdGVtLnVuaXRQcmljZVwiPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgdHlwZT1cIm51bWJlclwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGNsYXNzPVwibS0xXCIgbGFiZWw9XCJEZXNjdWVudG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiaW52b2ljZS5kaXNjb3VudFwiPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgdHlwZT1cIm51bWJlclwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGNsYXNzPVwibS0xXCIgbGFiZWw9XCJUb3RhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJpdGVtLnByb2R1Y3RUb3RhbFwiPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC92LXJvdz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMyBjZW50ZXJcIj5cbiAgICAgICAgICAgIDx2LWJ0biBjbGFzcz1cInRleHQtd2hpdGUgYWRkLXRlbXBsYXRlcy1idXR0b25cIiB0eXBlPVwic3VibWl0XCI+e3sgZXhpc3RpbmdJbnZvaWNlID8gJ0FjdHVhbGl6YXIgRmFjdHVyYScgOiAnR3VhcmRhciBGYWN0dXJhJyB9fTwvdi1idG4+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvdi1mb3JtPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBPdmVybGF5IGZyb20gJy4vT3ZlcmxheS52dWUnO1xuaW1wb3J0IE1vcmVJbmZvIGZyb20gJy4vTW9yZUluZm8udnVlJztcbmltcG9ydCBDcmVhdGVQcm92aWRlciBmcm9tICcuL0NyZWF0ZVByb3ZpZGVyLnZ1ZSc7XG5cbmltcG9ydCB7IHVzZUVudGl0eSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbXBvc2FibGVzL3VzZUVudGl0eSc7XG5pbXBvcnQgeyBJbnZvaWNlSW1wbCwgUHJvdmlkZXJJbXBsLCBQcm9kdWN0SW1wbCB9IGZyb20gJy4uL3NlcnZpY2VzL3R5cGVzL2ltcGxlbWVudGF0aW9ucyc7XG5pbXBvcnQgeyBmaW5kU2VsZWN0ZWRFbnRpdHksIGNyZWF0ZUludm9pY2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvaGVscGVycy9pbnZvaWNlSGVscGVyJztcbmltcG9ydCB7IHVzZVByb3ZpZGVyU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvcHJvdmlkZXIuanMnXG5pbXBvcnQgeyB1c2VDbGllbnRTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9jbGllbnQuanMnXG5pbXBvcnQgeyB1c2VJbnZvaWNlQ2xpZW50U3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvaW52b2ljZUNsaWVudC5qcydcbmltcG9ydCB7IHVzZUludm9pY2VQcm92aWRlclN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL2ludm9pY2VQcm92aWRlci5qcydcbmltcG9ydCB7IGNvbXB1dGVkLCB0b1JlZnMsIHJlZiB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgeyB1c2VBdXRoU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvYXV0aCc7XG5pbXBvcnQgU2VsZWN0b3IgZnJvbSAnLi9TZWxlY3Rvci52dWUnO1xuaW1wb3J0IERhdGVJbnB1dCBmcm9tICcuL0RhdGVJbnB1dC52dWUnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWU6ICdDcmVhdGVJbnZvaWNlT3ZlcmxheScsXG4gICAgcHJvcHM6IFsnZXhpc3RpbmdJbnZvaWNlJ10sXG4gICAgZW1pdHM6IFsnc2F2ZWQnXSxcblxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgT3ZlcmxheSxcbiAgICAgICAgTW9yZUluZm8sXG4gICAgICAgIENyZWF0ZVByb3ZpZGVyLFxuICAgICAgICBTZWxlY3RvcixcbiAgICAgICAgRGF0ZUlucHV0XG4gICAgfSxcbiAgICBzZXR1cChwcm9wcykge1xuICAgICAgICBjb25zdCB7IGV4aXN0aW5nSW52b2ljZSB9ID0gdG9SZWZzKHByb3BzKTtcblxuICAgICAgICBjb25zdCBhdXRoU3RvcmUgPSB1c2VBdXRoU3RvcmUoKTtcblxuICAgICAgICBjb25zdCBwcm92aWRlclN0b3JlID0gdXNlUHJvdmlkZXJTdG9yZSgpO1xuICAgICAgICBjb25zdCBjbGllbnRTdG9yZSA9IHVzZUNsaWVudFN0b3JlKCk7XG5cbiAgICAgICAgY29uc3QgaW52b2ljZUNsaWVudFN0b3JlID0gdXNlSW52b2ljZUNsaWVudFN0b3JlKCk7XG4gICAgICAgIGNvbnN0IGludm9pY2VQcm92aWRlclN0b3JlID0gdXNlSW52b2ljZVByb3ZpZGVyU3RvcmUoKTtcblxuICAgICAgICAvLyBMb2FkaW5nIHN0YXRlc1xuICAgICAgICBjb25zdCBsb2FkaW5nQ2xpZW50cyA9IHJlZih0cnVlKTtcbiAgICAgICAgY29uc3QgbG9hZGluZ1Byb3ZpZGVycyA9IHJlZih0cnVlKTtcblxuICAgICAgICAvLyBGZXRjaCBib3RoIGNsaWVudHMgYW5kIHByb3ZpZGVyc1xuICAgICAgICBjbGllbnRTdG9yZS5mZXRjaEFsbCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgbG9hZGluZ0NsaWVudHMudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHByb3ZpZGVyU3RvcmUuZmV0Y2hBbGwoKS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgIGxvYWRpbmdQcm92aWRlcnMudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0UHJvdmlkZXJzID0gY29tcHV0ZWQoKCkgPT4gcHJvdmlkZXJTdG9yZS5wcm92aWRlcnMpO1xuICAgICAgICBjb25zdCB0YXJnZXRDbGllbnRzID0gY29tcHV0ZWQoKCkgPT4gY2xpZW50U3RvcmUuY2xpZW50cyk7XG5cbiAgICAgICAgY29uc3QgdXBkYXRlSW52b2ljZVN0b3JlID0gYXV0aFN0b3JlLmlzQ2xpZW50ID8gaW52b2ljZUNsaWVudFN0b3JlIDogaW52b2ljZVByb3ZpZGVyU3RvcmU7XG5cbiAgICAgICAgY29uc3QgeyBlbnRpdHk6IGludm9pY2UsIHJlc2V0RW50aXR5OiByZXNldEludm9pY2UsIGxvYWRFbnRpdHk6IGxvYWRJbnZvaWNlLCByZWZyZXNoRW50aXRpZXMgfSA9IHVzZUVudGl0eShJbnZvaWNlSW1wbCwgdXBkYXRlSW52b2ljZVN0b3JlKTtcbiAgICAgICAgY29uc3QgeyBlbnRpdHk6IHByb3ZpZGVyLCByZXNldEVudGl0eTogcmVzZXRQcm92aWRlciB9ID0gdXNlRW50aXR5KFByb3ZpZGVySW1wbCwgcHJvdmlkZXJTdG9yZSk7XG5cbiAgICAgICAgY29uc3Qgc2hvd1Byb3ZpZGVyT3ZlcmxheSA9IHJlZihmYWxzZSk7XG5cbiAgICAgICAgY29uc3Qgb25Qcm92aWRlclNhdmVkID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgc2hvd1Byb3ZpZGVyT3ZlcmxheS52YWx1ZSA9IGZhbHNlOyBcbiAgICAgICAgICAgIGxvYWRpbmdQcm92aWRlcnMudmFsdWUgPSB0cnVlOyAvLyAoT3BjaW9uYWwpIFBvbmUgZWwgc2VsZWN0IGVuIGNhcmdhXG4gICAgICAgICAgICBhd2FpdCBwcm92aWRlclN0b3JlLmZldGNoQWxsKCk7XG4gICAgICAgICAgICBsb2FkaW5nUHJvdmlkZXJzLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGV4aXN0aW5nSW52b2ljZS52YWx1ZSkge1xuICAgICAgICAgICAgLy8gTm9ybWFsaXplIHRoZSBpbnZvaWNlIGRhdGEgYmVmb3JlIGxvYWRpbmdcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRJbnZvaWNlID0geyAuLi5leGlzdGluZ0ludm9pY2UudmFsdWUgfTtcblxuICAgICAgICAgICAgLy8gSWYgcHJvdmlkZXIgaXMgYW4gb2JqZWN0LCBleHRyYWN0IGl0cyBAaWRcbiAgICAgICAgICAgIGlmIChub3JtYWxpemVkSW52b2ljZS5wcm92aWRlciAmJiB0eXBlb2Ygbm9ybWFsaXplZEludm9pY2UucHJvdmlkZXIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZEludm9pY2UucHJvdmlkZXIgPSBub3JtYWxpemVkSW52b2ljZS5wcm92aWRlclsnQGlkJ10gfHwgbm9ybWFsaXplZEludm9pY2UucHJvdmlkZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIGNsaWVudCBpcyBhbiBvYmplY3QsIGV4dHJhY3QgaXRzIEBpZFxuICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRJbnZvaWNlLmNsaWVudCAmJiB0eXBlb2Ygbm9ybWFsaXplZEludm9pY2UuY2xpZW50ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRJbnZvaWNlLmNsaWVudCA9IG5vcm1hbGl6ZWRJbnZvaWNlLmNsaWVudFsnQGlkJ10gfHwgbm9ybWFsaXplZEludm9pY2UuY2xpZW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNYXAgcHJvZHVjdEFycmF5IHRvIHByb2R1Y3QgaWYgcHJvZHVjdCBpcyBtaXNzaW5nL2VtcHR5IChmb3IgbGVnYWN5IGludm9pY2VzKVxuICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRJbnZvaWNlLnByb2R1Y3RBcnJheSAmJiAoIW5vcm1hbGl6ZWRJbnZvaWNlLnByb2R1Y3QgfHwgbm9ybWFsaXplZEludm9pY2UucHJvZHVjdC5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZEludm9pY2UucHJvZHVjdCA9IG5vcm1hbGl6ZWRJbnZvaWNlLnByb2R1Y3RBcnJheTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbG9hZEludm9pY2Uobm9ybWFsaXplZEludm9pY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGludm9pY2UsXG4gICAgICAgICAgICBwcm92aWRlcixcbiAgICAgICAgICAgIHRhcmdldFByb3ZpZGVycyxcbiAgICAgICAgICAgIHRhcmdldENsaWVudHMsXG4gICAgICAgICAgICByZXNldEludm9pY2UsXG4gICAgICAgICAgICByZWZyZXNoRW50aXRpZXMsXG4gICAgICAgICAgICBhdXRoU3RvcmUsXG4gICAgICAgICAgICBsb2FkaW5nQ2xpZW50cyxcbiAgICAgICAgICAgIGxvYWRpbmdQcm92aWRlcnMsXG4gICAgICAgICAgICBzaG93UHJvdmlkZXJPdmVybGF5LFxuICAgICAgICAgICAgb25Qcm92aWRlclNhdmVkXG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRhdGEoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaG93UHJvdmlkZXJzT3ZlcmxheVR3bzogZmFsc2UsXG4gICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBudWxsXG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgaW52b2ljZUFkZCgpIHtcbiAgICAgICAgICAgIC8vIEVuc3VyZSBwcm9kdWN0IGlzIGFsd2F5cyBhbiBhcnJheSBiZWZvcmUgYWRkaW5nIGl0ZW1zXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW52b2ljZS5wcm9kdWN0IHx8ICFBcnJheS5pc0FycmF5KHRoaXMuaW52b2ljZS5wcm9kdWN0KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW52b2ljZS5wcm9kdWN0ID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuaW52b2ljZS5wcm9kdWN0LnB1c2gobmV3IFByb2R1Y3RJbXBsKCkpO1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5pbnZvaWNlLnByb2R1Y3QpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlbW92ZUludm9pY2UoaW5kZXgpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuaW52b2ljZS5wcm9kdWN0KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW52b2ljZS5wcm9kdWN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIGhhbmRsZVN1Ym1pdCgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNDbGllbnQgPSB0aGlzLmF1dGhTdG9yZS5pc0NsaWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlUeXBlID0gaXNDbGllbnQgPyAncHJvdmlkZXInIDogJ2NsaWVudCc7XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXRpZXMgPSBpc0NsaWVudCA/IHRoaXMudGFyZ2V0UHJvdmlkZXJzIDogdGhpcy50YXJnZXRDbGllbnRzO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSWQgPSB0aGlzLmludm9pY2VbZW50aXR5VHlwZV07XG4gICAgICAgICAgICAgICAgaWYgKCFzZWxlY3RlZElkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gJHtlbnRpdHlUeXBlfSBzZWxlY3RlZGApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRW50aXR5ID0gZmluZFNlbGVjdGVkRW50aXR5KGVudGl0aWVzLCBzZWxlY3RlZElkKTtcbiAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdGVkRW50aXR5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlbnRpdHlUeXBlfSBub3QgZm91bmRgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzZWxlY3RlZEVudGl0eS5pZCA9IHNlbGVjdGVkSWQ7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlUGFyYW1zID0gaXNDbGllbnQgXG4gICAgICAgICAgICAgICAgICAgID8geyBwcm92aWRlcjogc2VsZWN0ZWRFbnRpdHkgfVxuICAgICAgICAgICAgICAgICAgICA6IHsgY2xpZW50OiBzZWxlY3RlZEVudGl0eSB9O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaW52b2ljZVNlcnZpY2UgPSBjcmVhdGVJbnZvaWNlU2VydmljZSh0aGlzLmludm9pY2UsIHNlcnZpY2VQYXJhbXMpO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IHRoaXMuY3JlYXRlR2VuZXJpYyhpbnZvaWNlU2VydmljZSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoRW50aXRpZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8g4pyFIEVtaXRpciBldmVudG8gZGVzcHXDqXMgZGUgZ3VhcmRhciBleGl0b3NhbWVudGVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnc2F2ZWQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN1Ym1pdHRpbmcgaW52b2ljZTonLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5lcnJvcignRXJyb3IgYWwgZ3VhcmRhciBsYSBmYWN0dXJhOiAnICsgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBtb3VudGVkKCkge1xuICAgICAgICAvLyBFbnN1cmUgaW52b2ljZS5wcm9kdWN0IGlzIGFsd2F5cyBhbiBhcnJheSB0byBwcmV2ZW50IGl0ZXJhdGlvbiBlcnJvcnNcbiAgICAgICAgaWYgKHRoaXMuaW52b2ljZS5wcm9kdWN0QXJyYXkpIHtcbiAgICAgICAgICAgIC8vIElmIHByb2R1Y3RBcnJheSBleGlzdHMsIGNoZWNrIGlmIGl0J3MgYW4gYXJyYXlcbiAgICAgICAgICAgIHRoaXMuaW52b2ljZS5wcm9kdWN0ID0gQXJyYXkuaXNBcnJheSh0aGlzLmludm9pY2UucHJvZHVjdEFycmF5KVxuICAgICAgICAgICAgICAgID8gdGhpcy5pbnZvaWNlLnByb2R1Y3RBcnJheVxuICAgICAgICAgICAgICAgIDogW3RoaXMuaW52b2ljZS5wcm9kdWN0QXJyYXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgcHJvZHVjdEFycmF5IGRvZXNuJ3QgZXhpc3QsIGluaXRpYWxpemUgYXMgZW1wdHkgYXJyYXlcbiAgICAgICAgICAgIHRoaXMuaW52b2ljZS5wcm9kdWN0ID0gW107XG4gICAgICAgIH1cbiAgICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cbi5lZGl0ZWQtY29scyB7XG4gICAgbWluLXdpZHRoOiA4cmVtO1xufVxuPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG4gICAgPGRpdj5cbiAgICAgIDwhLS0gRmlsdGVyIFNlY3Rpb24gLS0+XG4gICAgICA8di1jYXJkIGNsYXNzPVwibWItNFwiPlxuICAgICAgICA8di1jYXJkLXRpdGxlPlxuICAgICAgICAgIDxzbG90IG5hbWU9XCJ0aXRsZVwiPnt7IHRpdGxlIH19PC9zbG90PlxuICAgICAgICA8L3YtY2FyZC10aXRsZT5cbiAgICAgICAgXG4gICAgICAgIDx2LXJvdyBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC13cmFwLXdyYXAgbXgtNVwiPlxuICAgICAgICAgIDx0ZW1wbGF0ZSB2LWZvcj1cIihmaWx0ZXIsIGluZGV4KSBpbiBmaWx0ZXJDb25maWdcIiA6a2V5PVwiaW5kZXhcIj5cbiAgICAgICAgICAgIDx2LWNvbCA6Y29scz1cIjEyXCIgOnNtPVwiNlwiIDptZD1cImZpbHRlci53aWR0aCB8fCAzXCIgY2xhc3M9XCJzZWFyY2hlcnNcIj5cbiAgICAgICAgICAgICAgPCEtLSBUZXh0IGZpZWxkIC0tPlxuICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkXG4gICAgICAgICAgICAgICAgdi1pZj1cImZpbHRlci50eXBlID09PSAndGV4dCdcIlxuICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJsb2NhbEZpbHRlcnNbZmlsdGVyLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgOmxhYmVsPVwiZmlsdGVyLmxhYmVsXCJcbiAgICAgICAgICAgICAgICA6cHJlcGVuZC1pbm5lci1pY29uPVwiZmlsdGVyLmljb24gfHwgJ21kaS1tYWduaWZ5J1wiXG4gICAgICAgICAgICAgICAgY2xlYXJhYmxlXG4gICAgICAgICAgICAgICAgaGlkZS1kZXRhaWxzXG4gICAgICAgICAgICAgICAgZGVuc2VcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwic29sby1maWxsZWRcIlxuICAgICAgICAgICAgICAgIEB1cGRhdGU6bW9kZWwtdmFsdWU9XCJ1cGRhdGVGaWx0ZXJzXCJcbiAgICAgICAgICAgICAgPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgPCEtLSBEYXRlIGZpZWxkIC0tPlxuICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkXG4gICAgICAgICAgICAgICAgdi1pZj1cImZpbHRlci50eXBlID09PSAnZGF0ZSdcIlxuICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJsb2NhbEZpbHRlcnNbZmlsdGVyLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgOmxhYmVsPVwiZmlsdGVyLmxhYmVsXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiZGF0ZVwiXG4gICAgICAgICAgICAgICAgaGlkZS1kZXRhaWxzXG4gICAgICAgICAgICAgICAgZGVuc2VcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwic29sby1maWxsZWRcIlxuICAgICAgICAgICAgICAgIEB1cGRhdGU6bW9kZWwtdmFsdWU9XCJ1cGRhdGVGaWx0ZXJzXCJcbiAgICAgICAgICAgICAgPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgPCEtLSBTdGF0dXMgZmllbGQgLS0+XG4gICAgICAgICAgICAgIDx2LXNlbGVjdFxuICAgICAgICAgICAgICAgIHYtaWY9XCJmaWx0ZXIudHlwZSA9PT0gJ3NlbGVjdCdcIlxuICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJsb2NhbEZpbHRlcnNbZmlsdGVyLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgOml0ZW1zPVwiZmlsdGVyLml0ZW1zIHx8IFtdXCJcbiAgICAgICAgICAgICAgICA6bGFiZWw9XCJmaWx0ZXIubGFiZWxcIlxuICAgICAgICAgICAgICAgIDpwcmVwZW5kLWlubmVyLWljb249XCJmaWx0ZXIuaWNvbiB8fCAnbWRpLW1hZ25pZnknXCJcbiAgICAgICAgICAgICAgICBpdGVtLXRpdGxlPVwiaXRleHRcIlxuICAgICAgICAgICAgICAgIGl0ZW0tdmFsdWU9XCJpdmFsdWVcIlxuICAgICAgICAgICAgICAgIGNsZWFyYWJsZVxuICAgICAgICAgICAgICAgIGhpZGUtZGV0YWlsc1xuICAgICAgICAgICAgICAgIGRlbnNlXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cInNvbG8tZmlsbGVkXCJcbiAgICAgICAgICAgICAgICBAdXBkYXRlOm1vZGVsLXZhbHVlPVwidXBkYXRlRmlsdGVyc1wiXG4gICAgICAgICAgICAgID48L3Ytc2VsZWN0PlxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgPCEtLSBSYW5nZSBmaWVsZCAtLT5cbiAgICAgICAgICAgICAgPGRpdiB2LWlmPVwiZmlsdGVyLnR5cGUgPT09ICdyYW5nZSdcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkXG4gICAgICAgICAgICAgICAgICB2LW1vZGVsPVwibG9jYWxGaWx0ZXJzW2Ake2ZpbHRlci5maWVsZH1bZ3RlXWBdXCJcbiAgICAgICAgICAgICAgICAgIDpsYWJlbD1cImAke2ZpbHRlci5sYWJlbH0gbWluIC1gXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgaGlkZS1kZXRhaWxzXG4gICAgICAgICAgICAgICAgICBkZW5zZVxuICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInNvbG8tZmlsbGVkXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWUtMlwiXG4gICAgICAgICAgICAgICAgICBAdXBkYXRlOm1vZGVsLXZhbHVlPVwidXBkYXRlRmlsdGVyc1wiXG4gICAgICAgICAgICAgICAgPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGRcbiAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJsb2NhbEZpbHRlcnNbYCR7ZmlsdGVyLmZpZWxkfVtsdGVdYF1cIlxuICAgICAgICAgICAgICAgICAgOmxhYmVsPVwiYCR7ZmlsdGVyLmxhYmVsfSBtYXggK2BcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICBoaWRlLWRldGFpbHNcbiAgICAgICAgICAgICAgICAgIGRlbnNlXG4gICAgICAgICAgICAgICAgICB2YXJpYW50PVwic29sby1maWxsZWRcIlxuICAgICAgICAgICAgICAgICAgQHVwZGF0ZTptb2RlbC12YWx1ZT1cInVwZGF0ZUZpbHRlcnNcIlxuICAgICAgICAgICAgICAgID48L3YtdGV4dC1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgIDwvdi1yb3c+XG4gICAgICAgIDxicj5cbiAgICAgIDwvdi1jYXJkPlxuICBcbiAgICAgIDwhLS0gRGF0YSBUYWJsZSAtLT5cbiAgICAgIDx2LWNhcmQ+XG4gICAgICAgIDx2LWRhdGEtdGFibGVcbiAgICAgICAgICA6aGVhZGVycz1cInByb2Nlc3NlZEhlYWRlcnNcIlxuICAgICAgICAgIDppdGVtcz1cIml0ZW1zXCJcbiAgICAgICAgICA6bG9hZGluZz1cImxvYWRpbmdcIlxuICAgICAgICAgIDppdGVtcy1wZXItcGFnZT1cInBhZ2luYXRpb24uaXRlbXNQZXJQYWdlXCJcbiAgICAgICAgICA6cGFnZT1cInBhZ2luYXRpb24ucGFnZVwiXG4gICAgICAgICAgOnNlcnZlci1pdGVtcy1sZW5ndGg9XCJ0b3RhbEl0ZW1zXCJcbiAgICAgICAgICBAdXBkYXRlOm9wdGlvbnM9XCJvblRhYmxlT3B0aW9uc1VwZGF0ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8IS0tIEN1c3RvbSBzbG90IGZvciBhY3Rpb25zIC0tPlxuICAgICAgICAgIDx0ZW1wbGF0ZSB2LXNsb3Q6aXRlbS5hY3Rpb25zPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICAgIDxzbG90IG5hbWU9XCJhY3Rpb25zXCIgOml0ZW09XCJpdGVtXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jZW50ZXIgYWxpZ24tY2VudGVyXCIgc3R5bGU9XCJnYXA6IDhweDtcIj5cbiAgXG4gICAgICAgICAgICAgIDx2LWJ0blxuICAgICAgICAgICAgICAgIHYtZm9yPVwiKGFjdGlvbiwgaSkgaW4gYWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgOmtleT1cImlcIlxuICAgICAgICAgICAgICAgIDppY29uPVwiYWN0aW9uLmljb25cIlxuICAgICAgICAgICAgICAgIDpjb2xvcj1cImFjdGlvbi5jb2xvciB8fCAncHJpbWFyeSdcIlxuICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cImFjdGlvbi5jb25kaXRpb24gPyBhY3Rpb24uY29uZGl0aW9uKGl0ZW0pIDogZmFsc2VcIlxuICAgICAgICAgICAgICAgIDp0aXRsZT1cImFjdGlvbj8udGl0bGUgPz8gJydcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibXgtMVwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJhY3Rpb24uaGFuZGxlcihpdGVtKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8di1pY29uIHYtaWY9XCJhY3Rpb24uaWNvblwiPnt7IGFjdGlvbi5pY29uIH19PC92LWljb24+XG4gICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cImFjdGlvbi50ZXh0XCIgY2xhc3M9XCJtcy0xXCI+e3sgYWN0aW9uLnRleHQgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvdi1idG4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9zbG90PlxuICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgXG4gICAgICAgICAgPCEtLSBEZWZhdWx0IHNsb3QgZm9yIGN1c3RvbSBjb2x1bW5zIC0tPlxuICAgICAgICAgIDx0ZW1wbGF0ZSB2LWZvcj1cInNsb3ROYW1lIGluIE9iamVjdC5rZXlzKCRzbG90cylcIiA6a2V5PVwic2xvdE5hbWVcIiAjW3Nsb3ROYW1lXT1cInNsb3REYXRhXCI+XG4gICAgICAgICAgICA8c2xvdCA6bmFtZT1cInNsb3ROYW1lXCIgdi1iaW5kPVwic2xvdERhdGFcIj48L3Nsb3Q+XG4gICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPC92LWRhdGEtdGFibGU+XG4gICAgICA8L3YtY2FyZD5cbiAgICA8L2Rpdj5cbiAgPC90ZW1wbGF0ZT5cbiAgXG4gIDxzY3JpcHQ+XG4gIGltcG9ydCB7IHVzZUFwaVJlc291cmNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29tcG9zYWJsZXMvdXNlQXBpUmVzb3VyY2UnO1xuICBpbXBvcnQgeyByZWYsIG9uTW91bnRlZCwgd2F0Y2gsIGNvbXB1dGVkIH0gZnJvbSAndnVlJztcbiAgXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiAnRHluYW1pY0ZpbHRlclRhYmxlQ2xpZW50JyxcbiAgICBcbiAgICBwcm9wczoge1xuICAgICAgdGl0bGU6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICBkZWZhdWx0OiAnUmVzdWx0YWRvcydcbiAgICAgIH0sXG4gICAgICBcbiAgICAgIC8vIEFQSSBlbmRwb2ludCB0byBmZXRjaCBkYXRhIGZyb21cbiAgICAgIGFwaUVuZHBvaW50OiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgIH0sXG4gICAgICBcbiAgICAgIC8vIENvbmZpZ3VyYXRpb24gZm9yIGZpbHRlciBmaWVsZHMgKG9wdGlvbmFsKVxuICAgICAgZmlsdGVyQ29uZmlnOiB7XG4gICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICBkZWZhdWx0OiAoKSA9PiBbXVxuICAgICAgfSxcbiAgICAgIFxuICAgICAgLy8gVGFibGUgaGVhZGVycyBjb25maWd1cmF0aW9uXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFxuICAgICAgLy8gQWN0aW9ucyBmb3IgdGhlIGFjdGlvbiBjb2x1bW5cbiAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgIGRlZmF1bHQ6ICgpID0+IFtdXG4gICAgICB9LFxuICAgICAgXG4gICAgICAvLyBBZGRpdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gaW5jbHVkZSBpbiBBUEkgcmVxdWVzdHNcbiAgICAgIGFkZGl0aW9uYWxQYXJhbXM6IHtcbiAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pXG4gICAgICB9LFxuICAgICAgXG4gICAgICAvLyBEZWZhdWx0IHNvcnQgc2V0dGluZ3NcbiAgICAgIGRlZmF1bHRTb3J0OiB7XG4gICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gKHtcbiAgICAgICAgICBmaWVsZDogJ2lkJyxcbiAgICAgICAgICBkaXJlY3Rpb246ICdkZXNjJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgXG4gICAgc2V0dXAocHJvcHMsIHsgZW1pdCB9KSB7XG4gICAgICAvLyBMb2NhbCBmaWx0ZXJzIHRvIG1hbmFnZSBpbiB0aGUgVUlcbiAgICAgIGNvbnN0IGxvY2FsRmlsdGVycyA9IHJlZih7fSk7XG4gICAgICBcbiAgICAgIC8vIEluaXRpYWxpemUgQVBJIFJlc291cmNlXG4gICAgICBjb25zdCBhcGlSZXNvdXJjZSA9IHVzZUFwaVJlc291cmNlKHtcbiAgICAgICAgZW5kcG9pbnQ6IHByb3BzLmFwaUVuZHBvaW50LFxuICAgICAgICBkZWZhdWx0UGFyYW1zOiBwcm9wcy5hZGRpdGlvbmFsUGFyYW1zLFxuICAgICAgICBhdXRvRmV0Y2g6IGZhbHNlIC8vIFdlJ2xsIGhhbmRsZSBmZXRjaGluZyBhZnRlciBpbml0aWFsaXppbmcgZmlsdGVyc1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIEV4dHJhY3QgdmFsdWVzIGZyb20gYXBpUmVzb3VyY2VcbiAgICAgIGNvbnN0IHsgXG4gICAgICAgIGl0ZW1zLCBcbiAgICAgICAgbG9hZGluZywgXG4gICAgICAgIGVycm9yLCBcbiAgICAgICAgcGFnaW5hdGlvbiwgXG4gICAgICAgIHRvdGFsSXRlbXMsIFxuICAgICAgICBmZXRjaERhdGEsIFxuICAgICAgICBzZXRGaWx0ZXJzLCBcbiAgICAgICAgaGFuZGxlVGFibGVPcHRpb25zLCBcbiAgICAgICAgcmVzZXRGaWx0ZXJzLFxuICAgICAgICBmaWx0ZXJzIFxuICAgICAgfSA9IGFwaVJlc291cmNlO1xuICAgICAgXG4gICAgICAvLyBJbml0aWFsaXplIGZpbHRlcnMgYmFzZWQgb24gZmlsdGVyQ29uZmlnXG4gICAgICBvbk1vdW50ZWQoKCkgPT4ge1xuICAgICAgICAvLyBJbml0aWFsaXplIGxvY2FsIGZpbHRlcnMgb2JqZWN0IHdpdGggZW1wdHkgdmFsdWVzXG4gICAgICAgIHByb3BzLmZpbHRlckNvbmZpZy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlci50eXBlID09PSAncmFuZ2UnKSB7XG4gICAgICAgICAgICBsb2NhbEZpbHRlcnMudmFsdWVbYCR7ZmlsdGVyLmZpZWxkfVtndGVdYF0gPSAnJztcbiAgICAgICAgICAgIGxvY2FsRmlsdGVycy52YWx1ZVtgJHtmaWx0ZXIuZmllbGR9W2x0ZV1gXSA9ICcnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2NhbEZpbHRlcnMudmFsdWVbZmlsdGVyLmZpZWxkXSA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBJbml0aWFsIGRhdGEgZmV0Y2hcbiAgICAgICAgZmV0Y2hEYXRhKCk7XG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgLy8gRGVib3VuY2UgdGltZXJcbiAgICAgIGxldCBkZWJvdW5jZVRpbWVyID0gbnVsbDtcbiAgICAgIFxuICAgICAgLy8gVXBkYXRlIGZpbHRlcnMgd2hlbiB1c2VyIGNoYW5nZXMgdGhlbSBpbiB0aGUgVUkgKHdpdGggZGVib3VuY2UpXG4gICAgICBjb25zdCB1cGRhdGVGaWx0ZXJzID0gKCkgPT4ge1xuICAgICAgICAvLyBDbGVhciBwcmV2aW91cyB0aW1lclxuICAgICAgICBpZiAoZGVib3VuY2VUaW1lcikge1xuICAgICAgICAgIGNsZWFyVGltZW91dChkZWJvdW5jZVRpbWVyKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gU2V0IG5ldyB0aW1lciAoMzAwbXMgZGVsYXkpXG4gICAgICAgIGRlYm91bmNlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyBGaWx0ZXIgb3V0IGVtcHR5IHZhbHVlc1xuICAgICAgICAgIGNvbnN0IG5vbkVtcHR5RmlsdGVycyA9IHt9O1xuICAgICAgICAgIGxldCBoYXNBY3RpdmVGaWx0ZXJzID0gZmFsc2U7XG4gICAgICAgICAgXG4gICAgICAgICAgT2JqZWN0LmtleXMobG9jYWxGaWx0ZXJzLnZhbHVlKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAobG9jYWxGaWx0ZXJzLnZhbHVlW2tleV0gIT09ICcnICYmIFxuICAgICAgICAgICAgICAgIGxvY2FsRmlsdGVycy52YWx1ZVtrZXldICE9PSBudWxsICYmIFxuICAgICAgICAgICAgICAgIGxvY2FsRmlsdGVycy52YWx1ZVtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgbm9uRW1wdHlGaWx0ZXJzW2tleV0gPSBsb2NhbEZpbHRlcnMudmFsdWVba2V5XTtcbiAgICAgICAgICAgICAgaGFzQWN0aXZlRmlsdGVycyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgYWxsIGZpbHRlcnMgYXJlIGVtcHR5IC0gcmVsb2FkIG9yaWdpbmFsIGRhdGEgaWYgc29cbiAgICAgICAgICBpZiAoIWhhc0FjdGl2ZUZpbHRlcnMpIHtcbiAgICAgICAgICAgIHJlc2V0RmlsdGVycygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBBcHBseSBmaWx0ZXJzIGFuZCByZXNldCBwYWdpbmF0aW9uXG4gICAgICAgICAgc2V0RmlsdGVycyhub25FbXB0eUZpbHRlcnMpO1xuICAgICAgICB9LCA3NjUpOyAvLyA3NjVtcyBkZWJvdW5jZVxuICAgICAgfTtcbiAgICAgIFxuICAgICAgLy8gSGFuZGxlIHRhYmxlIG9wdGlvbnMgdXBkYXRlIChwYWdpbmF0aW9uLCBzb3J0aW5nKVxuICAgICAgY29uc3Qgb25UYWJsZU9wdGlvbnNVcGRhdGUgPSAob3B0aW9ucykgPT4ge1xuICAgICAgICBoYW5kbGVUYWJsZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBSZXNldCBhbGwgZmlsdGVyc1xuICAgICAgY29uc3QgcmVzZXRMb2NhbEZpbHRlcnMgPSAoKSA9PiB7XG4gICAgICAgIC8vIENsZWFyIHRoZSBVSSBmaWx0ZXJzXG4gICAgICAgIHByb3BzLmZpbHRlckNvbmZpZy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlci50eXBlID09PSAncmFuZ2UnKSB7XG4gICAgICAgICAgICBsb2NhbEZpbHRlcnMudmFsdWVbYCR7ZmlsdGVyLmZpZWxkfVtndGVdYF0gPSAnJztcbiAgICAgICAgICAgIGxvY2FsRmlsdGVycy52YWx1ZVtgJHtmaWx0ZXIuZmllbGR9W2x0ZV1gXSA9ICcnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2NhbEZpbHRlcnMudmFsdWVbZmlsdGVyLmZpZWxkXSA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBDbGVhciBhbnkgZGVib3VuY2VkIG9wZXJhdGlvbnNcbiAgICAgICAgaWYgKGRlYm91bmNlVGltZXIpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQoZGVib3VuY2VUaW1lcik7XG4gICAgICAgICAgZGVib3VuY2VUaW1lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIFJlc2V0IHRoZSBiYWNrZW5kIGZpbHRlcnMgYW5kIHJlbG9hZCBvcmlnaW5hbCBkYXRhXG4gICAgICAgIHJlc2V0RmlsdGVycygpO1xuICAgICAgICBcbiAgICAgICAgLy8gRW1pdCBhbiBldmVudCB0byBub3RpZnkgcGFyZW50IGNvbXBvbmVudHNcbiAgICAgICAgZW1pdCgnZmlsdGVycy1yZXNldCcpO1xuICAgICAgfTtcbiAgICAgIFxuICAgICAgLy8gUmVmcmVzaCBkYXRhIHdpdGhvdXQgY2hhbmdpbmcgZmlsdGVyc1xuICAgICAgY29uc3QgcmVmcmVzaCA9ICgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ1tEeW5hbWljRmlsdGVyVGFibGVDbGllbnRdIHJlZnJlc2goKSBsbGFtYWRvLCBlamVjdXRhbmRvIGZldGNoRGF0YSgpJyk7XG4gICAgICAgIGZldGNoRGF0YSgpO1xuICAgICAgfTtcbiAgICAgIFxuICAgICAgLy8gV2F0Y2ggZm9yIGRhdGEgY2hhbmdlcyBhbmQgZW1pdCBldmVudHNcbiAgICAgIHdhdGNoKGl0ZW1zLCAobmV3SXRlbXMpID0+IHtcbiAgICAgICAgaWYgKG5ld0l0ZW1zICYmIG5ld0l0ZW1zLmxlbmd0aCA+PSAwKSB7XG4gICAgICAgICAgZW1pdCgnZGF0YS1sb2FkZWQnLCBuZXdJdGVtcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgXG4gICAgICB3YXRjaChlcnJvciwgKG5ld0Vycm9yKSA9PiB7XG4gICAgICAgIGlmIChuZXdFcnJvcikge1xuICAgICAgICAgIGVtaXQoJ2Vycm9yJywgbmV3RXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgLy8gV2F0Y2ggZm9yIGFkZGl0aW9uYWxQYXJhbXMgY2hhbmdlcyAoZS5nLiwgZGF0ZSBmaWx0ZXJzIGZyb20gcGFyZW50KVxuICAgICAgLy8gV2F0Y2ggZm9yIGFkZGl0aW9uYWxQYXJhbXMgY2hhbmdlcyAoZS5nLiwgZGF0ZSBmaWx0ZXJzIGZyb20gcGFyZW50KVxuICAgICAgd2F0Y2goKCkgPT4gcHJvcHMuYWRkaXRpb25hbFBhcmFtcywgKG5ld1BhcmFtcykgPT4ge1xuICAgICAgICAvLyBNZXJnZSBhZGRpdGlvbmFsIHBhcmFtcyB3aXRoIGN1cnJlbnQgZmlsdGVyc1xuICAgICAgICBjb25zdCB1cGRhdGVkRmlsdGVycyA9IHsgLi4uZmlsdGVycyB9O1xuICAgICAgICBcbiAgICAgICAgLy8gRXhwbGljaXRseSBjbGVhciBicm9hZGNhc3REYXRlIGZpbHRlcnMgaWYgbm90IHByZXNlbnQgaW4gbmV3UGFyYW1zXG4gICAgICAgIC8vIFRoaXMgaXMgY3J1Y2lhbCBmb3IgXCJQZXJpb2RvIHRvdGFsXCIgd2hpY2ggc2VuZHMgZW1wdHkgcGFyYW1zXG4gICAgICAgIGlmICghbmV3UGFyYW1zWydicm9hZGNhc3REYXRlW2FmdGVyXSddKSBkZWxldGUgdXBkYXRlZEZpbHRlcnNbJ2Jyb2FkY2FzdERhdGVbYWZ0ZXJdJ107XG4gICAgICAgIGlmICghbmV3UGFyYW1zWydicm9hZGNhc3REYXRlW2JlZm9yZV0nXSkgZGVsZXRlIHVwZGF0ZWRGaWx0ZXJzWydicm9hZGNhc3REYXRlW2JlZm9yZV0nXTtcbiAgICAgICAgXG4gICAgICAgIE9iamVjdC5rZXlzKG5ld1BhcmFtcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgdXBkYXRlZEZpbHRlcnNba2V5XSA9IG5ld1BhcmFtc1trZXldO1xuICAgICAgICB9KTtcbiAgICAgICAgc2V0RmlsdGVycyh1cGRhdGVkRmlsdGVycyk7XG4gICAgICB9LCB7IGRlZXA6IHRydWUsIGltbWVkaWF0ZTogdHJ1ZSB9KTtcbiAgICAgIFxuICAgICAgLy8gV2F0Y2ggZm9yIHBhZ2luYXRpb24gY2hhbmdlc1xuICAgICAgd2F0Y2goKCkgPT4gcGFnaW5hdGlvbi5wYWdlLCAobmV3UGFnZSkgPT4ge1xuICAgICAgICBlbWl0KCdwYWdlLWNoYW5nZWQnLCBuZXdQYWdlKTtcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICB3YXRjaCgoKSA9PiBwYWdpbmF0aW9uLml0ZW1zUGVyUGFnZSwgKG5ld0l0ZW1zUGVyUGFnZSkgPT4ge1xuICAgICAgICBlbWl0KCdpdGVtcy1wZXItcGFnZS1jaGFuZ2VkJywgbmV3SXRlbXNQZXJQYWdlKTtcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBNb25pdG9yIGZpbHRlciBzdGF0ZSBmb3IgYWxsLWVtcHR5IGNvbmRpdGlvblxuICAgICAgd2F0Y2gobG9jYWxGaWx0ZXJzLCAobmV3RmlsdGVycykgPT4ge1xuICAgICAgICBsZXQgYWxsRW1wdHkgPSB0cnVlO1xuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgaWYgYWxsIGZpbHRlcnMgYXJlIGVtcHR5XG4gICAgICAgIE9iamVjdC52YWx1ZXMobmV3RmlsdGVycykuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgaWYgKHZhbHVlICE9PSAnJyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhbGxFbXB0eSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBFbWl0IGV2ZW50IGZvciBmaWx0ZXIgc3RhdGVcbiAgICAgICAgZW1pdCgnZmlsdGVycy1zdGF0ZScsIHsgYWxsRW1wdHksIGhhc0ZpbHRlcnM6ICFhbGxFbXB0eSB9KTtcbiAgICAgIH0sIHsgZGVlcDogdHJ1ZSB9KTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLy8gU3RhdGUgZnJvbSB1c2VBcGlSZXNvdXJjZVxuICAgICAgICBpdGVtcyxcbiAgICAgICAgbG9hZGluZyxcbiAgICAgICAgcGFnaW5hdGlvbixcbiAgICAgICAgdG90YWxJdGVtcyxcbiAgICAgICAgXG4gICAgICAgIC8vIExvY2FsIHN0YXRlXG4gICAgICAgIGxvY2FsRmlsdGVycyxcbiAgICAgICAgXG4gICAgICAgIC8vIE1ldGhvZHNcbiAgICAgICAgdXBkYXRlRmlsdGVycyxcbiAgICAgICAgb25UYWJsZU9wdGlvbnNVcGRhdGUsXG4gICAgICAgIHJlc2V0RmlsdGVyczogcmVzZXRMb2NhbEZpbHRlcnMsXG4gICAgICAgIHJlZnJlc2gsXG4gICAgICAgIFxuICAgICAgICAvLyBDb21wdXRlZCBwcm9wZXJ0eSB0byBoYW5kbGUgY29uZGl0aW9uYWwgY29sdW1uIHZpc2liaWxpdHlcbiAgICAgICAgcHJvY2Vzc2VkSGVhZGVyczogY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICAgIC8vIFJldHVybiBoZWFkZXJzIGFzLWlzIGlmIG5vIGl0ZW1zIHRvIHByb2Nlc3NcbiAgICAgICAgICBpZiAoIWl0ZW1zLnZhbHVlIHx8IGl0ZW1zLnZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHByb3BzLmhlYWRlcnM7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIFByb2Nlc3MgaGVhZGVycyB0byBoYW5kbGUgY29uZGl0aW9uYWwgdmlzaWJpbGl0eVxuICAgICAgICAgIHJldHVybiBwcm9wcy5oZWFkZXJzLmZpbHRlcihoZWFkZXIgPT4ge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGhlYWRlciBoYXMgYSBzaG93Q29uZGl0aW9uIGZ1bmN0aW9uLCBjaGVjayBpZiBpdCBzaG91bGQgYmUgc2hvd25cbiAgICAgICAgICAgIGlmIChoZWFkZXIuc2hvd0NvbmRpdGlvbikge1xuICAgICAgICAgICAgICAvLyBDaGVjayBpZiBBTlkgaXRlbSBpbiB0aGUgY3VycmVudCBwYWdlIHdvdWxkIHNob3cgdGhpcyBjb2x1bW5cbiAgICAgICAgICAgICAgLy8gSWYgYXQgbGVhc3Qgb25lIGl0ZW0gc2hvdWxkIHNob3cgaXQsIHdlIGluY2x1ZGUgdGhlIGNvbHVtblxuICAgICAgICAgICAgICByZXR1cm4gaXRlbXMudmFsdWUuc29tZShpdGVtID0+IGhlYWRlci5zaG93Q29uZGl0aW9uKGl0ZW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gSGVhZGVycyB3aXRob3V0IGEgc2hvd0NvbmRpdGlvbiBhcmUgYWx3YXlzIHNob3duXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgfVxuICB9O1xuICA8L3NjcmlwdD5cbiAgXG4gIDxzdHlsZSBzY29wZWQ+XG4gIC5zZWFyY2hlcnMge1xuICAgIHBhZGRpbmc6IDhweDtcbiAgfVxuICBcbiAgLnYtZGF0YS10YWJsZSB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcbiAgfVxuICBcbiAgOmRlZXAoLnYtZGF0YS10YWJsZS1oZWFkZXIgdGgpIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHRleHQtdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuICBcbiAgOmRlZXAoLnYtZGF0YS10YWJsZV9fdHI6aG92ZXIpIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICB9XG4gIDwvc3R5bGU+IiwiPHRlbXBsYXRlPlxyXG4gIDxkaXY+XHJcbiAgICA8IS0tIEZpbHRlciBTZWN0aW9uIC0tPlxyXG4gICAgPHYtY2FyZCBjbGFzcz1cIm1iLTRcIj5cclxuICAgICAgPHYtY2FyZC10aXRsZT5cclxuICAgICAgICA8c2xvdCBuYW1lPVwidGl0bGVcIj57eyB0aXRsZSB9fTwvc2xvdD5cclxuICAgICAgPC92LWNhcmQtdGl0bGU+XHJcbiAgICAgIFxyXG4gICAgICA8di1yb3cgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtd3JhcC13cmFwIG14LTVcIj5cclxuICAgICAgICA8dGVtcGxhdGUgdi1mb3I9XCIoZmlsdGVyLCBpbmRleCkgaW4gZmlsdGVyQ29uZmlnXCIgOmtleT1cImluZGV4XCI+XHJcbiAgICAgICAgICA8di1jb2wgOmNvbHM9XCIxMlwiIDpzbT1cIjZcIiA6bWQ9XCJmaWx0ZXIud2lkdGggfHwgM1wiIGNsYXNzPVwic2VhcmNoZXJzXCI+XHJcbiAgICAgICAgICAgIDwhLS0gVGV4dCBmaWVsZCAtLT5cclxuICAgICAgICAgICAgPHYtdGV4dC1maWVsZFxyXG4gICAgICAgICAgICAgIHYtaWY9XCJmaWx0ZXIudHlwZSA9PT0gJ3RleHQnXCJcclxuICAgICAgICAgICAgICB2LW1vZGVsPVwibG9jYWxGaWx0ZXJzW2ZpbHRlci5maWVsZF1cIlxyXG4gICAgICAgICAgICAgIDpsYWJlbD1cImZpbHRlci5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgOnByZXBlbmQtaW5uZXItaWNvbj1cImZpbHRlci5pY29uIHx8ICdtZGktbWFnbmlmeSdcIlxyXG4gICAgICAgICAgICAgIDp0aXRsZT1cImFjdGlvbj8udGl0bGUgPz8gJydcIlxyXG4gICAgICAgICAgICAgIGNsZWFyYWJsZVxyXG4gICAgICAgICAgICAgIGhpZGUtZGV0YWlsc1xyXG4gICAgICAgICAgICAgIGRlbnNlXHJcbiAgICAgICAgICAgICAgdmFyaWFudD1cInNvbG8tZmlsbGVkXCJcclxuICAgICAgICAgICAgICBAdXBkYXRlOm1vZGVsLXZhbHVlPVwidXBkYXRlRmlsdGVyc1wiXHJcbiAgICAgICAgICAgID48L3YtdGV4dC1maWVsZD5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwhLS0gRGF0ZSBmaWVsZCAtLT5cclxuXHJcbiAgICAgICAgICAgIDx2LXRleHQtZmllbGRcclxuICAgICAgICAgICAgICAgIHYtaWY9XCJmaWx0ZXIudHlwZSA9PT0gJ2RhdGUnXCJcclxuICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJsb2NhbEZpbHRlcnNbZmlsdGVyLmZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICA6bGFiZWw9XCJmaWx0ZXIubGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImRhdGVcIlxyXG4gICAgICAgICAgICAgICAgaGlkZS1kZXRhaWxzXHJcbiAgICAgICAgICAgICAgICBkZW5zZVxyXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cInNvbG8tZmlsbGVkXCJcclxuICAgICAgICAgICAgICAgIEB1cGRhdGU6bW9kZWwtdmFsdWU9XCIodmFsKSA9PiBvbkRhdGVVcGRhdGUoZmlsdGVyLmZpZWxkLCB2YWwpXCJcclxuICAgICAgICAgICAgPjwvdi10ZXh0LWZpZWxkPlxyXG4gICAgXHJcbiAgICAgICAgICAgIDwhLS0gU3RhdHVzIGZpZWxkIC0tPlxyXG4gICAgICAgICAgICA8di1zZWxlY3RcclxuICAgICAgICAgICAgICB2LWlmPVwiZmlsdGVyLnR5cGUgPT09ICdzZWxlY3QnXCJcclxuICAgICAgICAgICAgICB2LW1vZGVsPVwibG9jYWxGaWx0ZXJzW2ZpbHRlci5maWVsZF1cIlxyXG4gICAgICAgICAgICAgIDppdGVtcz1cImZpbHRlci5pdGVtcyB8fCBbXVwiXHJcbiAgICAgICAgICAgICAgOmxhYmVsPVwiZmlsdGVyLmxhYmVsXCJcclxuICAgICAgICAgICAgICA6cHJlcGVuZC1pbm5lci1pY29uPVwiZmlsdGVyLmljb24gfHwgJ21kaS1tYWduaWZ5J1wiXHJcbiAgICAgICAgICAgICAgaXRlbS10aXRsZT1cIml0ZXh0XCJcclxuICAgICAgICAgICAgICBpdGVtLXZhbHVlPVwiaXZhbHVlXCJcclxuICAgICAgICAgICAgICBjbGVhcmFibGVcclxuICAgICAgICAgICAgICBoaWRlLWRldGFpbHNcclxuICAgICAgICAgICAgICBkZW5zZVxyXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJzb2xvLWZpbGxlZFwiXHJcbiAgICAgICAgICAgICAgQHVwZGF0ZTptb2RlbC12YWx1ZT1cInVwZGF0ZUZpbHRlcnNcIlxyXG4gICAgICAgICAgICA+PC92LXNlbGVjdD5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwhLS0gUmFuZ2UgZmllbGQgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgdi1pZj1cImZpbHRlci50eXBlID09PSAncmFuZ2UnXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24tY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZFxyXG4gICAgICAgICAgICAgICAgdi1tb2RlbD1cImxvY2FsRmlsdGVyc1tgJHtmaWx0ZXIuZmllbGR9W2d0ZV1gXVwiXHJcbiAgICAgICAgICAgICAgICA6bGFiZWw9XCJgJHtmaWx0ZXIubGFiZWx9IG1pbi5gXCJcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgaGlkZS1kZXRhaWxzXHJcbiAgICAgICAgICAgICAgICBkZW5zZVxyXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cInNvbG8tZmlsbGVkXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWUtMlwiXHJcbiAgICAgICAgICAgICAgICBAdXBkYXRlOm1vZGVsLXZhbHVlPVwidXBkYXRlRmlsdGVyc1wiXHJcbiAgICAgICAgICAgICAgPjwvdi10ZXh0LWZpZWxkPlxyXG4gICAgICAgICAgICAgIDx2LXRleHQtZmllbGRcclxuICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJsb2NhbEZpbHRlcnNbYCR7ZmlsdGVyLmZpZWxkfVtsdGVdYF1cIlxyXG4gICAgICAgICAgICAgICAgOmxhYmVsPVwiYCR7ZmlsdGVyLmxhYmVsfSBtYXguYFwiXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgIGhpZGUtZGV0YWlsc1xyXG4gICAgICAgICAgICAgICAgZGVuc2VcclxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzb2xvLWZpbGxlZFwiXHJcbiAgICAgICAgICAgICAgICBAdXBkYXRlOm1vZGVsLXZhbHVlPVwidXBkYXRlRmlsdGVyc1wiXHJcbiAgICAgICAgICAgICAgPjwvdi10ZXh0LWZpZWxkPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvdi1jb2w+XHJcbiAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgPC92LXJvdz4gPGJyPlxyXG4gICAgPC92LWNhcmQ+XHJcblxyXG4gICAgPCEtLSBDYXJkIFZpZXcgLS0+XHJcbiAgICA8di1jYXJkPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicGEtNFwiPlxyXG4gICAgICAgIDwhLS0gTG9hZGluZyBpbmRpY2F0b3IgLS0+XHJcbiAgICAgICAgPGRpdiB2LWlmPVwibG9hZGluZ1wiIGNsYXNzPVwidGV4dC1jZW50ZXIgbXktNFwiPlxyXG4gICAgICAgICAgPHYtcHJvZ3Jlc3MtY2lyY3VsYXIgaW5kZXRlcm1pbmF0ZSBjb2xvcj1cInByaW1hcnlcIj48L3YtcHJvZ3Jlc3MtY2lyY3VsYXI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiPkNhcmdhbmRvIGRhdG9zLi4uPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPCEtLSBDYXJkIGdyaWQgbGF5b3V0IC0tPlxyXG4gICAgICAgIDx2LXJvdyB2LWVsc2U+XHJcbiAgICAgICAgICA8di1jb2wgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIGl0ZW1zXCIgOmtleT1cImluZGV4XCIgY29scz1cIjEyXCIgc209XCI2XCIgbWQ9XCI0XCIgbGc9XCIzXCI+XHJcbiAgICAgICAgICAgIDx2LWNhcmQgY2xhc3M9XCJpbnZvaWNlLWNhcmRcIiBlbGV2YXRpb249XCIwXCIgb3V0bGluZWQ+XHJcbiAgICAgICAgICAgICAgPHYtY2FyZC10ZXh0PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIENsaWVudCBoZWFkZXIgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGllbnQtaGVhZGVyIHBiLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zdWJ0aXRsZS0yIHRleHQtdXBwZXJjYXNlXCI+KkNsaWVudGU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1oNiBmb250LXdlaWdodC1ib2xkXCI+e3sgZ2V0SXRlbVZhbHVlKGl0ZW0sICdjbGllbnRTb2NpYWxEZW5vbWluYXRpb24nKSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gTklGIENsaWVudGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2FwdGlvblwiPk5JRiBDbGllbnRlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc3VidGl0bGUtMVwiPnt7IGdldEl0ZW1WYWx1ZShpdGVtLCAnY2xpZW50VmF0TnVtYmVyJykgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICA8IS0tIEludm9pY2UgYW5kIGRhdGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1zcGFjZS1iZXR3ZWVuIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2FwdGlvblwiPk7CuiBmYWN0dXJhPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zdWJ0aXRsZS0xIGZvbnQtd2VpZ2h0LWJvbGRcIj57eyBnZXRJdGVtVmFsdWUoaXRlbSwgJ2ludm9pY2VOdW1iZXInKSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jYXB0aW9uXCI+RmVjaGEgRS48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlLTFcIj57eyBmb3JtYXREYXRlKGdldEl0ZW1WYWx1ZShpdGVtLCAnYnJvYWRjYXN0RGF0ZScpKSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gRi4gVmVuYy4gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2FwdGlvblwiPkYuIFZlbmMuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc3VidGl0bGUtMVwiPnt7IGZvcm1hdERhdGUoZ2V0SXRlbVZhbHVlKGl0ZW0sICdleHBpcmF0aW9uRGF0ZScpKSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gRXhwaXJlcyBhbmQgdG90YWwgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1zcGFjZS1iZXR3ZWVuIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9XCJzaG93RGF5c1RvRXhwaXJlKGl0ZW0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jYXB0aW9uXCI+RMOtYXMvUCBWZW5jLjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc3VidGl0bGUtMVwiPnt7IGdldEl0ZW1WYWx1ZShpdGVtLCAnZGF5c1RvRXhwaXJlJykgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2FwdGlvblwiPlRvdGFsPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zdWJ0aXRsZS0xIGZvbnQtd2VpZ2h0LWJvbGRcIj57eyBmb3JtYXRDdXJyZW5jeShnZXRJdGVtVmFsdWUoaXRlbSwgJ3RvdGFsJykpIH19IOKCrDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gRGlzY291bnQgaWYgYXZhaWxhYmxlIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9XCJzaG93RGlzY291bnQoaXRlbSkgJiYgaGFzRGlzY291bnQoaXRlbSlcIiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jYXB0aW9uXCI+RHRvLjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlLTFcIj57eyBmb3JtYXRDdXJyZW5jeShnZXRJdGVtVmFsdWUoaXRlbSwgJ2Rpc2NvdW50JykpIH19IOKCrDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gU3RhdHVzIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdHVzLWNoaXAgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS0xIHJvdW5kZWQtcGlsbCBzdGF0dXMtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGdldFN0YXR1c0xhYmVsKGdldEl0ZW1WYWx1ZShpdGVtLCAnc3RhdHVzJykpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgPCEtLSBBY3Rpb25zIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY2VudGVyIG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWNlbnRlclwiIHN0eWxlPVwiZ2FwOiA4cHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1mb3I9XCIoYWN0aW9uLCBpKSBpbiBhY3Rpb25zXCIgOmtleT1cImlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHYtYnRuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOmljb249XCJhY3Rpb24uaWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOmNvbG9yPVwiYWN0aW9uLmNvbG9yIHx8ICdwcmltYXJ5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiYWN0aW9uLmNvbmRpdGlvbiA/IGFjdGlvbi5jb25kaXRpb24oaXRlbSkgOiBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbi1idG5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz1cImFjdGlvbi5oYW5kbGVyKGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWljb24gdi1pZj1cImFjdGlvbi5pY29uXCI+e3sgYWN0aW9uLmljb24gfX08L3YtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92LWJ0bj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC92LWNhcmQtdGV4dD5cclxuICAgICAgICAgICAgPC92LWNhcmQ+XHJcbiAgICAgICAgICA8L3YtY29sPlxyXG4gICAgICAgIDwvdi1yb3c+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPCEtLSBQYWdpbmF0aW9uIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1lbmQgYWxpZ24tY2VudGVyIG10LTRcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1jYXB0aW9uIG1lLTRcIj5JdGVtcyBwb3IgcMOhZ2luYTo8L3NwYW4+XHJcbiAgICAgICAgICA8di1zZWxlY3RcclxuICAgICAgICAgICAgdi1tb2RlbD1cInBhZ2luYXRpb24uaXRlbXNQZXJQYWdlXCJcclxuICAgICAgICAgICAgOml0ZW1zPVwiWzUsIDEwLCAxNSwgMjAsIDI1LCA1MF1cIlxyXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICBkZW5zaXR5PVwiY29tcGFjdFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaXRlbXMtcGVyLXBhZ2Utc2VsZWN0XCJcclxuICAgICAgICAgICAgaGlkZS1kZXRhaWxzXHJcbiAgICAgICAgICA+PC92LXNlbGVjdD5cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgPHYtcGFnaW5hdGlvblxyXG4gICAgICAgICAgICB2LW1vZGVsPVwicGFnaW5hdGlvbi5wYWdlXCJcclxuICAgICAgICAgICAgOmxlbmd0aD1cIk1hdGguY2VpbCh0b3RhbEl0ZW1zIC8gcGFnaW5hdGlvbi5pdGVtc1BlclBhZ2UpXCJcclxuICAgICAgICAgICAgOnRvdGFsLXZpc2libGU9XCI1XCJcclxuICAgICAgICAgICAgY2xhc3M9XCJtcy00XCJcclxuICAgICAgICAgID48L3YtcGFnaW5hdGlvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3YtY2FyZD5cclxuICA8L2Rpdj5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbmltcG9ydCB7IHVzZUFwaVJlc291cmNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29tcG9zYWJsZXMvdXNlQXBpUmVzb3VyY2UnO1xyXG5pbXBvcnQgeyByZWYsIG9uTW91bnRlZCwgd2F0Y2ggfSBmcm9tICd2dWUnO1xyXG5pbXBvcnQgRGF0ZUlucHV0IGZyb20gJy4vRGF0ZUlucHV0LnZ1ZSc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgbmFtZTogJ0R5bmFtaWNGaWx0ZXJUYWJsZScsXHJcbiAgXHJcbiAgcHJvcHM6IHtcclxuICAgIHRpdGxlOiB7XHJcbiAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgZGVmYXVsdDogJydcclxuICAgIH0sXHJcbiAgICBcclxuICAgIC8vIEFQSSBlbmRwb2ludCB0byBmZXRjaCBkYXRhIGZyb21cclxuICAgIGFwaUVuZHBvaW50OiB7XHJcbiAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICBcclxuICAgIC8vIENvbmZpZ3VyYXRpb24gZm9yIGZpbHRlciBmaWVsZHMgKG9wdGlvbmFsKVxyXG4gICAgZmlsdGVyQ29uZmlnOiB7XHJcbiAgICAgIHR5cGU6IEFycmF5LFxyXG4gICAgICBkZWZhdWx0OiAoKSA9PiBbXVxyXG4gICAgfSxcclxuICAgIFxyXG4gICAgLy8gVGFibGUgaGVhZGVycyBjb25maWd1cmF0aW9uXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIHR5cGU6IEFycmF5LFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIFxyXG4gICAgLy8gQWN0aW9ucyBmb3IgdGhlIGFjdGlvbiBjb2x1bW5cclxuICAgIGFjdGlvbnM6IHtcclxuICAgICAgdHlwZTogQXJyYXksXHJcbiAgICAgIGRlZmF1bHQ6ICgpID0+IFtdXHJcbiAgICB9LFxyXG4gICAgXHJcbiAgICAvLyBBZGRpdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gaW5jbHVkZSBpbiBBUEkgcmVxdWVzdHNcclxuICAgIGFkZGl0aW9uYWxQYXJhbXM6IHtcclxuICAgICAgdHlwZTogT2JqZWN0LFxyXG4gICAgICBkZWZhdWx0OiAoKSA9PiAoe30pXHJcbiAgICB9LFxyXG4gICAgXHJcbiAgICAvLyBEZWZhdWx0IHNvcnQgc2V0dGluZ3NcclxuICAgIGRlZmF1bHRTb3J0OiB7XHJcbiAgICAgIHR5cGU6IE9iamVjdCxcclxuICAgICAgZGVmYXVsdDogKCkgPT4gKHtcclxuICAgICAgICBmaWVsZDogJ2lkJyxcclxuICAgICAgICBkaXJlY3Rpb246ICdkZXNjJ1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH0sXHJcbiAgXHJcbiAgc2V0dXAocHJvcHMsIHsgZW1pdCB9KSB7XHJcbiAgICAvLyBMb2NhbCBmaWx0ZXJzIHRvIG1hbmFnZSBpbiB0aGUgVUlcclxuICAgIGNvbnN0IGxvY2FsRmlsdGVycyA9IHJlZih7fSk7XHJcbiAgICBcclxuICAgIC8vIEluaXRpYWxpemUgQVBJIFJlc291cmNlXHJcbiAgICBjb25zdCBhcGlSZXNvdXJjZSA9IHVzZUFwaVJlc291cmNlKHtcclxuICAgICAgZW5kcG9pbnQ6IHByb3BzLmFwaUVuZHBvaW50LFxyXG4gICAgICBkZWZhdWx0UGFyYW1zOiBwcm9wcy5hZGRpdGlvbmFsUGFyYW1zLFxyXG4gICAgICBhdXRvRmV0Y2g6IGZhbHNlIC8vIFdlJ2xsIGhhbmRsZSBmZXRjaGluZyBhZnRlciBpbml0aWFsaXppbmcgZmlsdGVyc1xyXG4gICAgfSk7XHJcbiAgICBcclxuICAgIC8vIEV4dHJhY3QgdmFsdWVzIGZyb20gYXBpUmVzb3VyY2VcclxuICAgIGNvbnN0IHsgXHJcbiAgICAgIGl0ZW1zLCBcclxuICAgICAgbG9hZGluZywgXHJcbiAgICAgIGVycm9yLCBcclxuICAgICAgcGFnaW5hdGlvbiwgXHJcbiAgICAgIHRvdGFsSXRlbXMsIFxyXG4gICAgICBmZXRjaERhdGEsIFxyXG4gICAgICBzZXRGaWx0ZXJzLCBcclxuICAgICAgaGFuZGxlVGFibGVPcHRpb25zLCBcclxuICAgICAgcmVzZXRGaWx0ZXJzLFxyXG4gICAgICBmaWx0ZXJzIFxyXG4gICAgfSA9IGFwaVJlc291cmNlO1xyXG4gICAgXHJcbiAgICAvLyBJbml0aWFsaXplIGZpbHRlcnMgYmFzZWQgb24gZmlsdGVyQ29uZmlnXHJcbiAgICBvbk1vdW50ZWQoKCkgPT4ge1xyXG4gICAgICAvLyBJbml0aWFsaXplIGxvY2FsIGZpbHRlcnMgb2JqZWN0IHdpdGggZW1wdHkgdmFsdWVzXHJcbiAgICAgIHByb3BzLmZpbHRlckNvbmZpZy5mb3JFYWNoKGZpbHRlciA9PiB7XHJcbiAgICAgICAgaWYgKGZpbHRlci50eXBlID09PSAncmFuZ2UnKSB7XHJcbiAgICAgICAgICBsb2NhbEZpbHRlcnMudmFsdWVbYCR7ZmlsdGVyLmZpZWxkfVtndGVdYF0gPSAnJztcclxuICAgICAgICAgIGxvY2FsRmlsdGVycy52YWx1ZVtgJHtmaWx0ZXIuZmllbGR9W2x0ZV1gXSA9ICcnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsb2NhbEZpbHRlcnMudmFsdWVbZmlsdGVyLmZpZWxkXSA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBJbml0aWFsIGRhdGEgZmV0Y2hcclxuICAgICAgZmV0Y2hEYXRhKCk7XHJcbiAgICB9KTtcclxuICAgIFxyXG4gICAgLy8gRGVib3VuY2UgdGltZXJcclxuICAgIGxldCBkZWJvdW5jZVRpbWVyID0gbnVsbDtcclxuICAgIFxyXG4gICAgLy8gVXBkYXRlIGZpbHRlcnMgd2hlbiB1c2VyIGNoYW5nZXMgdGhlbSBpbiB0aGUgVUkgKHdpdGggZGVib3VuY2UpXHJcbiAgICBjb25zdCB1cGRhdGVGaWx0ZXJzID0gKCkgPT4ge1xyXG4gICAgICAvLyBDbGVhciBwcmV2aW91cyB0aW1lclxyXG4gICAgICBpZiAoZGVib3VuY2VUaW1lcikge1xyXG4gICAgICAgIGNsZWFyVGltZW91dChkZWJvdW5jZVRpbWVyKTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gU2V0IG5ldyB0aW1lciAoMzAwbXMgZGVsYXkpXHJcbiAgICAgIGRlYm91bmNlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAvLyBGaWx0ZXIgb3V0IGVtcHR5IHZhbHVlc1xyXG4gICAgICAgIGNvbnN0IG5vbkVtcHR5RmlsdGVycyA9IHt9O1xyXG4gICAgICAgIFxyXG4gICAgICAgIE9iamVjdC5rZXlzKGxvY2FsRmlsdGVycy52YWx1ZSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgaWYgKGxvY2FsRmlsdGVycy52YWx1ZVtrZXldICE9PSAnJyAmJiBcclxuICAgICAgICAgICAgICBsb2NhbEZpbHRlcnMudmFsdWVba2V5XSAhPT0gbnVsbCAmJiBcclxuICAgICAgICAgICAgICBsb2NhbEZpbHRlcnMudmFsdWVba2V5XSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIG5vbkVtcHR5RmlsdGVyc1trZXldID0gbG9jYWxGaWx0ZXJzLnZhbHVlW2tleV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gQXBwbHkgdGhlIGZpbHRlcnMgdG8gdGhlIEFQSSByZXNvdXJjZVxyXG4gICAgICAgIHNldEZpbHRlcnMobm9uRW1wdHlGaWx0ZXJzKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBFbWl0IGZpbHRlciBjaGFuZ2UgZXZlbnQgd2l0aCBjdXJyZW50IGZpbHRlcnNcclxuICAgICAgICBlbWl0KCdmaWx0ZXItY2hhbmdlJywgbm9uRW1wdHlGaWx0ZXJzKTtcclxuICAgICAgfSwgMzAwKTtcclxuICAgIH07XHJcbiAgICBcclxuICAgIC8vIFJlc2V0IGxvY2FsIGZpbHRlcnNcclxuICAgIGNvbnN0IHJlc2V0TG9jYWxGaWx0ZXJzID0gKCkgPT4ge1xyXG4gICAgICAvLyBSZXNldCBhbGwgbG9jYWwgZmlsdGVyIHZhbHVlc1xyXG4gICAgICBwcm9wcy5maWx0ZXJDb25maWcuZm9yRWFjaChmaWx0ZXIgPT4ge1xyXG4gICAgICAgIGlmIChmaWx0ZXIudHlwZSA9PT0gJ3JhbmdlJykge1xyXG4gICAgICAgICAgbG9jYWxGaWx0ZXJzLnZhbHVlW2Ake2ZpbHRlci5maWVsZH1bZ3RlXWBdID0gJyc7XHJcbiAgICAgICAgICBsb2NhbEZpbHRlcnMudmFsdWVbYCR7ZmlsdGVyLmZpZWxkfVtsdGVdYF0gPSAnJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbG9jYWxGaWx0ZXJzLnZhbHVlW2ZpbHRlci5maWVsZF0gPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBcclxuICAgICAgLy8gQ2xlYXIgYW55IGRlYm91bmNlZCBvcGVyYXRpb25zXHJcbiAgICAgIGlmIChkZWJvdW5jZVRpbWVyKSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KGRlYm91bmNlVGltZXIpO1xyXG4gICAgICAgIGRlYm91bmNlVGltZXIgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBSZXNldCB0aGUgYmFja2VuZCBmaWx0ZXJzIGFuZCByZWxvYWQgb3JpZ2luYWwgZGF0YVxyXG4gICAgICByZXNldEZpbHRlcnMoKTtcclxuICAgICAgXHJcbiAgICAgIC8vIEVtaXQgYW4gZXZlbnQgdG8gbm90aWZ5IHBhcmVudCBjb21wb25lbnRzXHJcbiAgICAgIGVtaXQoJ2ZpbHRlcnMtcmVzZXQnKTtcclxuICAgICAgZW1pdCgnZmlsdGVyLWNoYW5nZScsIHt9KTtcclxuICAgIH07XHJcbiAgICBcclxuICAgIC8vIFJlZnJlc2ggZGF0YSB3aXRob3V0IGNoYW5naW5nIGZpbHRlcnNcclxuICAgIGNvbnN0IHJlZnJlc2ggPSAoKSA9PiB7XHJcbiAgICAgIGZldGNoRGF0YSgpO1xyXG4gICAgfTtcclxuICAgIFxyXG4gICAgLy8gV2F0Y2ggZm9yIGRhdGEgY2hhbmdlcyBhbmQgZW1pdCBldmVudHNcclxuICAgIHdhdGNoKGl0ZW1zLCAobmV3SXRlbXMpID0+IHtcclxuICAgICAgaWYgKG5ld0l0ZW1zICYmIG5ld0l0ZW1zLmxlbmd0aCA+PSAwKSB7XHJcbiAgICAgICAgZW1pdCgnZGF0YS1sb2FkZWQnLCBuZXdJdGVtcyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgXHJcbiAgICB3YXRjaChlcnJvciwgKG5ld0Vycm9yKSA9PiB7XHJcbiAgICAgIGlmIChuZXdFcnJvcikge1xyXG4gICAgICAgIGVtaXQoJ2Vycm9yJywgbmV3RXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIFxyXG4gICAgLy8gV2F0Y2ggZm9yIHBhZ2luYXRpb24gY2hhbmdlc1xyXG4gICAgd2F0Y2goKCkgPT4gcGFnaW5hdGlvbi5wYWdlLCAobmV3UGFnZSkgPT4ge1xyXG4gICAgICBlbWl0KCdwYWdlLWNoYW5nZWQnLCBuZXdQYWdlKTtcclxuICAgIH0pO1xyXG4gICAgXHJcbiAgICB3YXRjaCgoKSA9PiBwYWdpbmF0aW9uLml0ZW1zUGVyUGFnZSwgKG5ld0l0ZW1zUGVyUGFnZSkgPT4ge1xyXG4gICAgICBlbWl0KCdpdGVtcy1wZXItcGFnZS1jaGFuZ2VkJywgbmV3SXRlbXNQZXJQYWdlKTtcclxuICAgIH0pO1xyXG4gICAgXHJcbiAgICAvLyBXYXRjaCBmb3IgYWRkaXRpb25hbFBhcmFtcyBjaGFuZ2VzIChlLmcuLCBkYXRlIGZpbHRlcnMgZnJvbSBwYXJlbnQpXHJcbiAgICB3YXRjaCgoKSA9PiBwcm9wcy5hZGRpdGlvbmFsUGFyYW1zLCAobmV3UGFyYW1zKSA9PiB7XHJcbiAgICAgIGlmIChuZXdQYXJhbXMgJiYgT2JqZWN0LmtleXMobmV3UGFyYW1zKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgc2V0RmlsdGVycyhuZXdQYXJhbXMpO1xyXG4gICAgICB9XHJcbiAgICB9LCB7IGRlZXA6IHRydWUsIGltbWVkaWF0ZTogdHJ1ZSB9KTtcclxuICAgIFxyXG4gICAgLy8gTW9uaXRvciBmaWx0ZXIgc3RhdGUgZm9yIGFsbC1lbXB0eSBjb25kaXRpb25cclxuICAgIHdhdGNoKGxvY2FsRmlsdGVycywgKG5ld0ZpbHRlcnMpID0+IHtcclxuICAgICAgbGV0IGFsbEVtcHR5ID0gdHJ1ZTtcclxuICAgICAgXHJcbiAgICAgIC8vIENoZWNrIGlmIGFsbCBmaWx0ZXJzIGFyZSBlbXB0eVxyXG4gICAgICBPYmplY3QudmFsdWVzKG5ld0ZpbHRlcnMpLmZvckVhY2godmFsdWUgPT4ge1xyXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gJycgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgYWxsRW1wdHkgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBcclxuICAgICAgLy8gRW1pdCBldmVudCBmb3IgZmlsdGVyIHN0YXRlXHJcbiAgICAgIGVtaXQoJ2ZpbHRlcnMtc3RhdGUnLCB7IGFsbEVtcHR5LCBoYXNGaWx0ZXJzOiAhYWxsRW1wdHkgfSk7XHJcbiAgICB9LCB7IGRlZXA6IHRydWUgfSk7XHJcbiAgICBcclxuICAgIC8vIEhlbHBlciBtZXRob2RzIGZvciBjb25kaXRpb25hbGx5IHNob3dpbmcgZWxlbWVudHNcclxuICAgIGNvbnN0IHNob3dEYXlzVG9FeHBpcmUgPSAoaXRlbSkgPT4ge1xyXG4gICAgICAvLyBTdGF0ZXMgd2hlcmUgZGF5cyB0byBleHBpcmF0aW9uIGFyZSByZWxldmFudDpcclxuICAgICAgLy8gVmFsaWRhdGVkICgxKSwgRWxpZ2libGUgKDIpLCBOb3QgRWxpZ2libGUgKDMpLCBBZHZhbmNlZCAoNCksIGV0Yy5cclxuICAgICAgY29uc3Qgc3RhdHVzID0gTnVtYmVyKGdldEl0ZW1WYWx1ZShpdGVtLCAnc3RhdHVzJykpO1xyXG4gICAgICBjb25zdCByZWxldmFudFN0YXRlcyA9IFsxLCAyLCAzLCA0XTtcclxuICAgICAgcmV0dXJuIHJlbGV2YW50U3RhdGVzLmluY2x1ZGVzKHN0YXR1cyk7XHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICBjb25zdCBzaG93RGlzY291bnQgPSAoaXRlbSkgPT4ge1xyXG4gICAgICAvLyBTYW1lIHN0YXRlcyBhcyBkYXlzIHRvIGV4cGlyYXRpb25cclxuICAgICAgY29uc3Qgc3RhdHVzID0gTnVtYmVyKGdldEl0ZW1WYWx1ZShpdGVtLCAnc3RhdHVzJykpO1xyXG4gICAgICBjb25zdCByZWxldmFudFN0YXRlcyA9IFsxLCAyLCAzLCA0XTtcclxuICAgICAgcmV0dXJuIHJlbGV2YW50U3RhdGVzLmluY2x1ZGVzKHN0YXR1cyk7XHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICAvLyBIZWxwZXIgbWV0aG9kcyBmb3IgY2FyZCBkaXNwbGF5XHJcbiAgICBjb25zdCBnZXRJdGVtVmFsdWUgPSAoaXRlbSwga2V5KSA9PiB7XHJcbiAgICAgIC8vIFJhdyBpdGVtIGFjY2Vzc1xyXG4gICAgICBpZiAoaXRlbS5yYXcgJiYgdHlwZW9mIGl0ZW0ucmF3ID09PSAnb2JqZWN0JyAmJiBpdGVtLnJhd1trZXldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm4gaXRlbS5yYXdba2V5XTtcclxuICAgICAgfVxyXG4gICAgICAvLyBEaXJlY3QgcHJvcGVydHkgYWNjZXNzXHJcbiAgICAgIHJldHVybiBpdGVtW2tleV07XHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICBjb25zdCBmb3JtYXREYXRlID0gKGRhdGUpID0+IHtcclxuICAgICAgaWYgKCFkYXRlKSByZXR1cm4gJy0tJztcclxuICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpLnRvTG9jYWxlRGF0ZVN0cmluZygnZXMtRVMnLCB7XHJcbiAgICAgICAgeWVhcjogJ251bWVyaWMnLFxyXG4gICAgICAgIG1vbnRoOiAnMi1kaWdpdCcsXHJcbiAgICAgICAgZGF5OiAnMi1kaWdpdCcsXHJcbiAgICAgICAgdGltZVpvbmU6ICdVVEMnXHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIFxyXG4gICAgY29uc3QgZm9ybWF0Q3VycmVuY3kgPSAoYW1vdW50KSA9PiB7XHJcbiAgICAgIGlmICghYW1vdW50KSByZXR1cm4gJzAsMDAnO1xyXG4gICAgICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KCdlcy1FUycsIHtcclxuICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDIsXHJcbiAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAyXHJcbiAgICAgIH0pLmZvcm1hdChhbW91bnQpO1xyXG4gICAgfTtcclxuICAgIFxyXG4gICAgY29uc3QgZ2V0U3RhdHVzTGFiZWwgPSAoc3RhdHVzKSA9PiB7XHJcbiAgICAgIGNvbnN0IHN0YXR1c0xhYmVscyA9IHtcclxuICAgICAgICAwOiAnUGVuZGllbnRlJyxcclxuICAgICAgICAxOiAnVmFsaWRhZGEnLFxyXG4gICAgICAgIDI6ICdFbGVnaWJsZScsXHJcbiAgICAgICAgMzogJ05vIGVsZWdpYmxlJyxcclxuICAgICAgICA0OiAnQWRlbGFudGFkYScsXHJcbiAgICAgICAgNTogJ0ZpbmFsaXphZGEgc2luIGFkZWxhbnRhcicsXHJcbiAgICAgICAgNjogJ1BhcmEgdmFsaWRhcicsXHJcbiAgICAgICAgNzogJ0FkZWxhbnRhZGEgVmFsaWRhZGEgeSBQYWdhZGEnXHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiBzdGF0dXNMYWJlbHNbc3RhdHVzXSB8fCAnQWRlbGFudGFkYSBWYWxpZGFkYSB5IFBhZ2FkYSc7XHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICBjb25zdCBoYXNEaXNjb3VudCA9IChpdGVtKSA9PiB7XHJcbiAgICAgIGNvbnN0IGRpc2NvdW50ID0gZ2V0SXRlbVZhbHVlKGl0ZW0sICdkaXNjb3VudCcpO1xyXG4gICAgICByZXR1cm4gZGlzY291bnQgJiYgZGlzY291bnQgIT09IDA7XHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICAvLyBGaWx0ZXIgYWN0aW9ucyBmb3IgZWFjaCBpdGVtXHJcbiAgICBjb25zdCBhY3Rpb25zRm9ySXRlbSA9IChpdGVtKSA9PiB7XHJcbiAgICAgIHJldHVybiBwcm9wcy5hY3Rpb25zLmZpbHRlcihhY3Rpb24gPT4ge1xyXG4gICAgICAgIGlmIChhY3Rpb24uY29uZGl0aW9uKSB7XHJcbiAgICAgICAgICByZXR1cm4gIWFjdGlvbi5jb25kaXRpb24oaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgIH07XHJcbiAgICBcclxuICAgIGNvbnN0IGlzTWFpbkFjdGlvbiA9IChhY3Rpb24pID0+IHtcclxuICAgICAgLy8gSWRlbnRpZnkgdGhlIG1haW4gYWN0aW9uIChDT0JSQVIgYnV0dG9uKVxyXG4gICAgICByZXR1cm4gYWN0aW9uLmljb24gPT09ICdtZGktY2FzaCcgfHwgYWN0aW9uLnRleHQgPT09ICdDT0JSQVInIHx8IGFjdGlvbi50ZXh0ID09PSAnQ29icmFyJztcclxuICAgIH07XHJcbiAgICBcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC8vIFN0YXRlIGZyb20gdXNlQXBpUmVzb3VyY2VcclxuICAgICAgaXRlbXMsXHJcbiAgICAgIGxvYWRpbmcsXHJcbiAgICAgIHBhZ2luYXRpb24sXHJcbiAgICAgIHRvdGFsSXRlbXMsXHJcbiAgICAgIFxyXG4gICAgICAvLyBMb2NhbCBzdGF0ZVxyXG4gICAgICBsb2NhbEZpbHRlcnMsXHJcbiAgICAgIFxyXG4gICAgICAvLyBNZXRob2RzXHJcbiAgICAgIHVwZGF0ZUZpbHRlcnMsXHJcbiAgICAgIHJlc2V0RmlsdGVyczogcmVzZXRMb2NhbEZpbHRlcnMsXHJcbiAgICAgIHJlZnJlc2gsXHJcbiAgICAgIFxyXG4gICAgICAvLyBIZWxwZXIgbWV0aG9kc1xyXG4gICAgICBnZXRJdGVtVmFsdWUsXHJcbiAgICAgIGZvcm1hdERhdGUsXHJcbiAgICAgIGZvcm1hdEN1cnJlbmN5LFxyXG4gICAgICBnZXRTdGF0dXNMYWJlbCxcclxuICAgICAgaGFzRGlzY291bnQsXHJcbiAgICAgIHNob3dEYXlzVG9FeHBpcmUsXHJcbiAgICAgIHNob3dEaXNjb3VudCxcclxuICAgICAgYWN0aW9uc0Zvckl0ZW0sXHJcbiAgICAgIGlzTWFpbkFjdGlvbixcclxuICAgICAgb25EYXRlVXBkYXRlOiAoZmllbGQsIGRhdGUpID0+IHtcclxuICAgICAgICAvLyBUaGUgaW5wdXQgdHlwZT1cImRhdGVcIiBhbHJlYWR5IHJldHVybnMgeXl5eS1tbS1kZCBmb3JtYXRcclxuICAgICAgICAvLyBVc2luZyBpdCBkaXJlY3RseSBhdm9pZHMgdGltZXpvbmUgY29udmVyc2lvbiBpc3N1ZXNcclxuICAgICAgICBsb2NhbEZpbHRlcnMudmFsdWVbZmllbGRdID0gZGF0ZSB8fCAnJztcclxuICAgICAgICB1cGRhdGVGaWx0ZXJzKCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfSxcclxuICBjb21wb25lbnRzOiB7XHJcbiAgICBEYXRlSW5wdXRcclxuICB9XHJcbn07XHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIHNjb3BlZD5cclxuLnNlYXJjaGVycyB7XHJcbiAgcGFkZGluZzogOHB4O1xyXG59XHJcblxyXG4uaW52b2ljZS1jYXJkIHtcclxuICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xyXG4gIGJvcmRlci1yYWRpdXM6IDRweDtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbn1cclxuXHJcbi5jbGllbnQtaGVhZGVyIHtcclxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2UwZTBlMDtcclxuICBtYXJnaW4tYm90dG9tOiAxMnB4O1xyXG59XHJcblxyXG4uc3RhdHVzLWxhYmVsIHtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xyXG4gIGNvbG9yOiAjNjY2O1xyXG4gIGZvbnQtc2l6ZTogMTNweDtcclxuICBmb250LXdlaWdodDogNTAwO1xyXG59XHJcblxyXG4uY2hhcmdlLWJ0biB7XHJcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcclxuICBmb250LXdlaWdodDogNTAwO1xyXG4gIGxldHRlci1zcGFjaW5nOiAwLjVweDtcclxuICBoZWlnaHQ6IDQwcHg7XHJcbn1cclxuXHJcbi50ZXh0LWNhcHRpb24ge1xyXG4gIGNvbG9yOiAjNjY2O1xyXG4gIGZvbnQtc2l6ZTogMTJweDtcclxuICBtYXJnaW4tYm90dG9tOiAycHg7XHJcbn1cclxuXHJcbi50ZXh0LXN1YnRpdGxlLTEge1xyXG4gIGZvbnQtc2l6ZTogMTRweDtcclxufVxyXG5cclxuLnRleHQtaDYge1xyXG4gIGZvbnQtc2l6ZTogMTZweDtcclxufVxyXG5cclxuLml0ZW1zLXBlci1wYWdlLXNlbGVjdCB7XHJcbiAgd2lkdGg6IDgwcHg7XHJcbn1cclxuPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IG0tMTBcIj5cbiAgICA8ZHJhZ2dhYmxlIFxuICAgICAgY2xhc3M9XCJkcmFnQXJlYSBsaXN0LWdyb3VwIHctZnVsbFwiIFxuICAgICAgdi1tb2RlbD1cInNvcnRlZFJ1bGVzXCJcbiAgICAgIEBjaGFuZ2U9XCJ1cGRhdGVQcmlvcml0aWVzXCJcbiAgICAgIDphbmltYXRpb249XCIyMDBcIlxuICAgICAgZ2hvc3QtY2xhc3M9XCJnaG9zdC1jYXJkXCJcbiAgICAgIGRyYWctY2xhc3M9XCJkcmFnZ2luZ1wiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgPlxuICAgICAgXG4gICAgPGRpdlxuICAgICAgICB2LWZvcj1cIihlbGVtZW50LCBpbmRleCkgaW4gc29ydGVkUnVsZXNcIlxuICAgICAgICA6a2V5PVwiZWxlbWVudC5pZFwiXG4gICAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgICAnbGlzdC1ncm91cC1pdGVtIG0tMSBwLTMgcm91bmRlZC1tZCBkLWZsZXggdHJhbnNmb3JtIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCBlYXNlLWluLW91dCcsXG4gICAgICAgICAgaXNDdXJyZW50UnVsZShlbGVtZW50KSA/ICdiZy1ibHVlLTIwMCcgOiAnYmctZ3JheS0zMDAgaG92ZXI6YmctZ3JheS0yMDAnXG4gICAgICAgIF1cIlxuICAgICAgPlxuICAgICAgPGRpdiB2LWlmPVwiIWxvYWRlclN0b3JlLmdldElzTG9hZGluZ1wiIGNsYXNzPVwiZm9udC1tZWRpdW0gYm94LW9yZGVyXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMyByb3VuZGVkLWNpcmNsZVwiPlxuICAgICAgICAgICAgPGI+e3sgaW5kZXggPz8gZWxlbWVudC5wcmlvcml0eU9yZGVyIH19PC9iPlxuICAgICAgICA8L3NwYW4+IFxuICAgICAgICBSZWdsYToge3sgZWxlbWVudC5ydWxlTmFtZSB8fCAnU2luIG5vbWJyZScgfX06IFxuICAgICAgICA8c21hbGwgY2xhc3M9XCJtcy0xXCI+e3sgdHJ1bmMoZWxlbWVudC5kZXNjcmlwdGlvbiwgMjApIHx8ICdTaW4gZGVzY3JpcGNpw7NuJyB9fTwvc21hbGw+XG4gICAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgPHYtc2tlbGV0b24tbG9hZGVyIHYtZWxzZSBjbGFzcz1cImJveC1vcmRlclwiICB0eXBlPVwibGlzdC1pdGVtLWF2YXRhclwiPjwvdi1za2VsZXRvbi1sb2FkZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgPGRpdiB2LWlmPVwic29ydGVkUnVsZXMubGVuZ3RoID09IDBcIiBjbGFzcz1cInAtMiBteS0yIHRleHQtY2VudGVyIGJnLWdyZXkgcm91bmRlZC1waWxsXCI+XG4gICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgQVFVSSBJUkFOIFRPREFTIExBUyBSRUdMQVMgQ1JFQURBUywgSU5DTFVZRU5ETyBMQSBBQ1RVQUxcbiAgICAgICAgPC9zbWFsbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZHJhZ2dhYmxlPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQsIGNvbXB1dGVkLCByZWYsIHdhdGNoIH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgVnVlRHJhZ2dhYmxlTmV4dCB9IGZyb20gJ3Z1ZS1kcmFnZ2FibGUtbmV4dCdcbmltcG9ydCB7IHVzZVJ1bGVzU3RvcmUgfSBmcm9tICdAL3N0b3Jlcy9ydWxlcydcbmltcG9ydCB7IHVzZUxvYWRlclN0b3JlIH0gZnJvbSAnQC9zdG9yZXMvbG9hZGVyJ1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb21wb25lbnQoe1xuICBuYW1lOiAnUHJpb3JpdHlSdWxlcycsXG4gIGNvbXBvbmVudHM6IHtcbiAgICBkcmFnZ2FibGU6IFZ1ZURyYWdnYWJsZU5leHQsXG4gIH0sXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZToge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIGRpc2FibGVkOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJ10sXG4gIFxuICBzZXR1cChwcm9wcywgeyBlbWl0IH0pIHtcbiAgICBjb25zdCBsb2FkZXJTdG9yZSA9IHVzZUxvYWRlclN0b3JlKClcbiAgICBjb25zdCBydWxlc1N0b3JlID0gdXNlUnVsZXNTdG9yZSgpXG4gICAgY29uc3QgY3VycmVudFJ1bGVzID0gcmVmKFtdKVxuICAgIGNvbnN0IGtleSA9IHJlZigwKVxuXG4gICAgd2F0Y2goKCkgPT4gcnVsZXNTdG9yZS5nZXRSdWxlcywgKCkgPT4ge1xuICAgICAga2V5LnZhbHVlKytcbiAgICB9LCB7IGRlZXA6IHRydWUgfSlcblxuICAgIGNvbnN0IHNvcnRlZFJ1bGVzID0gY29tcHV0ZWQoe1xuICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gcHJvcHMubW9kZWxWYWx1ZS5fc3RhdGVNYW5hZ2VyLmdldFJ1bGVzQXNBcnJheSB8fCBbXVxuICAgICAgICAvLyBGaWx0ZXIgcnVsZXMgdG8gbWF0Y2ggdGhlIGN1cnJlbnQgZm9ybSB0eXBlXG4gICAgICAgIGNvbnN0IGZpbHRlcmVkUnVsZXMgPSBydWxlcy5maWx0ZXIocnVsZSA9PiBydWxlLnJ1bGVUeXBlID09PSBwcm9wcy5tb2RlbFZhbHVlLmZvcm1OYW1lKVxuICAgICAgICAvLyBTb3J0IHRoZSBmaWx0ZXJlZCBydWxlcyBieSBwcmlvcml0eVxuICAgICAgICBjb25zdCBzb3J0ZWRSdWxlcyA9IFsuLi5maWx0ZXJlZFJ1bGVzXS5zb3J0KChhLCBiKSA9PiBcbiAgICAgICAgICAoYS5wcmlvcml0eU9yZGVyIHx8IDApIC0gKGIucHJpb3JpdHlPcmRlciB8fCAwKVxuICAgICAgICApXG4gICAgICAgIGN1cnJlbnRSdWxlcy52YWx1ZSA9IHNvcnRlZFJ1bGVzXG4gICAgICAgIHJldHVybiBzb3J0ZWRSdWxlc1xuICAgICAgfSxcbiAgICAgIHNldDogKG5ld1ZhbHVlKSA9PiB7XG4gICAgICAgIGN1cnJlbnRSdWxlcy52YWx1ZSA9IG5ld1ZhbHVlXG4gICAgICAgIGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywge1xuICAgICAgICAgIC4uLnByb3BzLm1vZGVsVmFsdWUsXG4gICAgICAgICAgX3N0YXRlTWFuYWdlcjoge1xuICAgICAgICAgICAgLi4ucHJvcHMubW9kZWxWYWx1ZS5fc3RhdGVNYW5hZ2VyLFxuICAgICAgICAgICAgZ2V0UnVsZXNBc0FycmF5OiBbXG4gICAgICAgICAgICAgIC8vIEtlZXAgb3RoZXIgcnVsZXMgdGhhdCBkb24ndCBtYXRjaCB0aGUgY3VycmVudCBmb3JtIHR5cGVcbiAgICAgICAgICAgICAgLi4uKHByb3BzLm1vZGVsVmFsdWUuX3N0YXRlTWFuYWdlci5nZXRSdWxlc0FzQXJyYXkgfHwgW10pXG4gICAgICAgICAgICAgICAgLmZpbHRlcihydWxlID0+IHJ1bGUucnVsZVR5cGUgIT09IHByb3BzLm1vZGVsVmFsdWUuZm9ybU5hbWUpLFxuICAgICAgICAgICAgICAvLyBBZGQgdGhlIHVwZGF0ZWQgcnVsZXNcbiAgICAgICAgICAgICAgLi4ubmV3VmFsdWVcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IGlzQ3VycmVudFJ1bGUgPSAocnVsZSkgPT4ge1xuICAgICAgcmV0dXJuIHJ1bGUuaWQgPT09IHByb3BzLm1vZGVsVmFsdWUuaWRcbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVQcmlvcml0aWVzID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQubW92ZWQpIHtcbiAgICAgICAgY29uc3QgeyBvbGRJbmRleCwgbmV3SW5kZXggfSA9IGV2ZW50Lm1vdmVkXG4gICAgICAgIC8vY29uc29sZS5sb2coYE1vdmluZyBmcm9tICR7b2xkSW5kZXh9IHRvICR7bmV3SW5kZXh9YClcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRSdWxlcyA9IGN1cnJlbnRSdWxlcy52YWx1ZVxuICAgICAgICBjb25zdCB1cGRhdGVzID0gdXBkYXRlZFJ1bGVzLm1hcCgocnVsZSwgY3VycmVudEluZGV4KSA9PiAoe1xuICAgICAgICAgIGlkOiBydWxlLmlkLFxuICAgICAgICAgIHByaW9yaXR5T3JkZXI6IGN1cnJlbnRJbmRleFxuICAgICAgICB9KSlcblxuICAgICAgICAvL2NvbnNvbGUubG9nKGBVcGRhdGVzIHRvIHNlbmQ6JywgdXBkYXRlcylcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHJ1bGVzU3RvcmUudXBkYXRlUHJpb3JpdGllcyh1cGRhdGVzKVxuICAgICAgICAgIGF3YWl0IHJ1bGVzU3RvcmUuZmV0Y2hBbGwoKVxuICAgICAgICAgIGtleS52YWx1ZSsrXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHVwZGF0ZSBwcmlvcml0aWVzOicsIGVycm9yKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYWRlclN0b3JlLFxuICAgICAgc29ydGVkUnVsZXMsXG4gICAgICBpc0N1cnJlbnRSdWxlLFxuICAgICAgdXBkYXRlUHJpb3JpdGllcyxcbiAgICAgIGtleVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuLmxpc3QtZ3JvdXAtaXRlbSB7XG4gIGN1cnNvcjogbW92ZTtcbiAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcbn1cblxuLmxpc3QtZ3JvdXAtaXRlbTpob3ZlciB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg0cHgpO1xufVxuXG4uZ2hvc3QtY2FyZCB7XG4gIG9wYWNpdHk6IDAuNTtcbiAgYmFja2dyb3VuZDogI2M4ZWJmYiAhaW1wb3J0YW50O1xuICBib3JkZXI6IDJweCBkYXNoZWQgIzRhOWVmZjtcbn1cblxuLmRyYWdnaW5nIHtcbiAgb3BhY2l0eTogMC45O1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgxZGVnKSBzY2FsZSgxLjAyKTtcbiAgYm94LXNoYWRvdzogMCA1cHggMTVweCByZ2JhKDAsMCwwLDAuMTUpO1xufVxuXG4uZmxpcC1saXN0LW1vdmUge1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcyBlYXNlO1xufVxuXG4uZmxpcC1saXN0LWVudGVyLWFjdGl2ZSxcbi5mbGlwLWxpc3QtbGVhdmUtYWN0aXZlIHtcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtcbn1cblxuLmZsaXAtbGlzdC1lbnRlci1mcm9tLFxuLmZsaXAtbGlzdC1sZWF2ZS10byB7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMzBweCk7XG59XG5cbi5ib3gtb3JkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgaGVpZ2h0OiAzMHB4O1xuICBtYXgtaGVpZ2h0OiAzMHB4O1xuICBcbiAgc3BhbiB7XG4gICAgd2lkdGg6IDI1cHg7XG4gICAgaGVpZ2h0OiAyNXB4O1xuICAgIGZvbnQtc2l6ZTogMC44cmVtO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjRkMjZmO1xuICB9XG59XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgPHYtZm9ybT5cbiAgICA8ZGl2PiBcbiAgICAgIDxNb3JlSW5mbyB0aXRsZT1cIkRhdG9zIGRlIGxhIHJlZ2xhXCJcbiAgICAgIHByb2dyYW1tZXJSZWY9XCJydWxlLWRhdGFcIlxuICAgICAgYWN0aXZhdG9yPVwicGFyZW50XCI+XG4gICAgICA8L01vcmVJbmZvPlxuICAgICAgPGJyPlxuICAgICAgPHYtdGV4dC1maWVsZCB2YXJpYW50PVwib3V0bGluZWRcIiBsYWJlbD1cIk5vbWJyZSBkZSBsYSByZWdsYVwiIHYtbW9kZWw9XCJlbnRpdHkucnVsZU5hbWVcIiA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiIC8+XG4gICAgICA8di10ZXh0LWZpZWxkIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGxhYmVsPVwiRGVzY3JpcGNpw7NuXCIgdi1tb2RlbD1cImVudGl0eS5kZXNjcmlwdGlvblwiIDpkaXNhYmxlZD1cImRpc2FibGVkXCIgLz5cbiAgICAgIDxNb3JlSW5mbyB0aXRsZT1cIsK/QSBxdWnDqW4gdmEgZGlyaWdpZGE/XCJcbiAgICAgICAgYWN0aXZhdG9yPVwicGFyZW50XCIgcHJvZ3JhbW1lclJlZj1cImNyZWF0ZS1wcm92aWRlci1jbGFzc2lmaWNhdGlvblwiPlxuICAgICAgPC9Nb3JlSW5mbz5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPHYtc2VsZWN0IFxuICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIiBcbiAgICAgICAgICAgICAgbGFiZWw9XCJTZWxlY2Npb25hIHVuIHRhcmdldFwiIFxuICAgICAgICAgICAgICA6aXRlbXM9XCJ0YXJnZXRMaXN0XCIgXG4gICAgICAgICAgICAgIHYtbW9kZWw9XCJlbnRpdHkudGFyZ2V0c1wiXG4gICAgICAgICAgICAgIGl0ZW0tdGl0bGU9XCJ0YXJnZXROYW1lXCJcbiAgICAgICAgICAgICAgaXRlbS12YWx1ZT1cIkBpZFwiXG4gICAgICAgICAgICAgIG11bHRpcGxlIFxuICAgICAgICAgICAgICBjbGVhcmFibGVcbiAgICAgICAgICAgICAgZGVsZXRhYmxlLWNoaXBzXG4gICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LXNsb3Q6Y2hpcD1cInsgaXRlbSwgcHJvcHMgfVwiPlxuICAgICAgICAgICAgICAgICAgPHYtY2hpcCB2LWJpbmQ9XCJwcm9wc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW0ucmF3LnRhcmdldE5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHYtYnRuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uIFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwieC1zbWFsbFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljay5zdG9wPVwidmlld1RhcmdldChpdGVtLnJhdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1sLTFcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtaWNvbiBzaXplPVwibWVkaXVtXCI+bWRpLWV5ZTwvdi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdi1idG4+XG4gICAgICAgICAgICAgICAgICA8L3YtY2hpcD5cbiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDppdGVtPVwieyBpdGVtLCBwcm9wcyB9XCI+XG4gICAgICAgICAgICAgICAgICA8di1saXN0LWl0ZW0gdi1iaW5kPVwicHJvcHNcIiA6dGl0bGU9XCJpdGVtLnJhdy50YXJnZXROYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDphcHBlbmQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWJ0biBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJtZGktZXllXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwidGV4dFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrLnN0b3A9XCJ2aWV3VGFyZ2V0KGl0ZW0ucmF3KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L3YtYnRuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8L3YtbGlzdC1pdGVtPlxuICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgIDwvdi1zZWxlY3Q+XG4gICAgICAgICAgPENyZWF0ZU5ld1RhcmdldCB2LWlmPVwiIWRpc2FibGVkXCIgQHNhdmVkPVwib25UYXJnZXRTYXZlZFwiPjwvQ3JlYXRlTmV3VGFyZ2V0PlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tIE92ZXJsYXkgcGFyYSB2ZXIgZGV0YWxsZXMgZGVsIHRhcmdldCAtLT5cbiAgICAgIDxPdmVybGF5IFxuICAgICAgICB0aXRsZT1cIkRldGFsbGVzIGRlbCBUYXJnZXRcIiBcbiAgICAgICAgcHJvZ3JhbW1lclJlZj1cInZpZXctdGFyZ2V0LWRldGFpbHNcIlxuICAgICAgICB2LW1vZGVsPVwic2hvd1RhcmdldERldGFpbHNPdmVybGF5XCJcbiAgICAgID5cbiAgICAgICAgPHRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgIDx2LWZvcm0gY2xhc3M9XCJzY3JvbGxlYWJsZVwiPlxuICAgICAgICAgICAgPE1vcmVJbmZvIHRpdGxlPVwiRGF0b3MgZGVsIHRhcmdldFwiXG4gICAgICAgICAgICAgIHByb2dyYW1tZXJSZWY9XCJ0YXJnZXQtaW5mby12aWV3XCJcbiAgICAgICAgICAgICAgYWN0aXZhdG9yPVwicGFyZW50XCI+XG4gICAgICAgICAgICA8L01vcmVJbmZvPlxuICAgICAgICAgICAgPHYtdGV4dC1maWVsZCBcbiAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCIgXG4gICAgICAgICAgICAgIGxhYmVsPVwiTm9tYnJlIGRlbCB0YXJnZXRcIiBcbiAgICAgICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVGFyZ2V0LnRhcmdldE5hbWVcIiBcbiAgICAgICAgICAgICAgZGlzYWJsZWQgXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LXNwYWNlLWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgPHYtc3dpdGNoIFxuICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFRhcmdldC5vbmx5SW5jbHVkZUludm9pY2VzRnJvbVRvZGF5XCIgXG4gICAgICAgICAgICAgICAgY29sb3I9XCJzdWNjZXNzXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm5vLWRldGFpbHNcIiBcbiAgICAgICAgICAgICAgICBsYWJlbD1cIlNvbG8gYXBsaWNhciBwYXJhIG51ZXZhcyBmYWN0dXJhcyBhIHBhcnRpciBkZSBob3kuXCJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZFxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvdi1zd2l0Y2g+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgPE1vcmVJbmZvIHRpdGxlPVwiwr9BIHF1acOpbiBhcGxpY2E/XCJcbiAgICAgICAgICAgICAgcHJvZ3JhbW1lclJlZj1cInRhcmdldC1hcHBsaWVkLXRvLXByb3ZpZGVyLXZpZXdcIlxuICAgICAgICAgICAgICBhY3RpdmF0b3I9XCJwYXJlbnRcIj5cbiAgICAgICAgICAgIDwvTW9yZUluZm8+XG4gICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDx2LXNlbGVjdCBcbiAgICAgICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVGFyZ2V0LnByb3ZpZGVyc1wiIFxuICAgICAgICAgICAgICBpdGVtLXZhbHVlPVwiQGlkXCIgXG4gICAgICAgICAgICAgIGl0ZW0tdGl0bGU9XCJzb2NpYWxEZW5vbWluYXRpb25cIlxuICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIiBcbiAgICAgICAgICAgICAgbGFiZWw9XCJQcm92ZWVkb3Jlc1wiIFxuICAgICAgICAgICAgICA6aXRlbXM9XCJwcm92aWRlcnNcIiBcbiAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgZGVsZXRhYmxlLWNoaXBzXG4gICAgICAgICAgICAgIGRpc2FibGVkXG4gICAgICAgICAgICA+PC92LXNlbGVjdD5cbiAgICAgICAgICAgIDx2LXNlbGVjdCBcbiAgICAgICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVGFyZ2V0LmNhdGVnb3JpZXNcIiBcbiAgICAgICAgICAgICAgaXRlbS12YWx1ZT1cIkBpZFwiIFxuICAgICAgICAgICAgICBpdGVtLXRpdGxlPVwibmFtZVwiIFxuICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgICAgICAgICBsYWJlbD1cIkdydXBvc1wiIFxuICAgICAgICAgICAgICA6aXRlbXM9XCJncm91cHNcIiBcbiAgICAgICAgICAgICAgbXVsdGlwbGUgXG4gICAgICAgICAgICAgIGRlbGV0YWJsZS1jaGlwc1xuICAgICAgICAgICAgICBkaXNhYmxlZFxuICAgICAgICAgICAgPjwvdi1zZWxlY3Q+XG4gICAgICAgICAgICA8TW9yZUluZm8gdGl0bGU9XCLCv0EgcXXDqSBmYWN0dXJhcyBhcGxpY2E/XCJcbiAgICAgICAgICAgICAgcHJvZ3JhbW1lclJlZj1cInRhcmdldC1hcHBsaWVkLXRvLWludm9pY2Utdmlld1wiXG4gICAgICAgICAgICAgIGFjdGl2YXRvcj1cInBhcmVudFwiPlxuICAgICAgICAgICAgPC9Nb3JlSW5mbz5cbiAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgIDx2LXNlbGVjdCBcbiAgICAgICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVGFyZ2V0Lmludm9pY2VzXCIgXG4gICAgICAgICAgICAgIGxhYmVsPVwiRmFjdHVyYXNcIiBcbiAgICAgICAgICAgICAgaXRlbS12YWx1ZT1cIkBpZFwiXG4gICAgICAgICAgICAgIGl0ZW0tdGl0bGU9XCJpbnZvaWNlTnVtYmVyXCIgXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIFxuICAgICAgICAgICAgICA6aXRlbXM9XCJpbnZvaWNlc1wiIFxuICAgICAgICAgICAgICBtdWx0aXBsZSBcbiAgICAgICAgICAgICAgZGVsZXRhYmxlLWNoaXBzXG4gICAgICAgICAgICAgIGRpc2FibGVkXG4gICAgICAgICAgICA+PC92LXNlbGVjdD5cbiAgICAgICAgICAgIDwhLS0gU2VjY2nDs24gZGUgcmFuZ29zIGRlIGZlY2hhcyAtLT5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDx2LXJvdyBjbGFzcz1cImNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgPHYtY29sIGNvbHM9XCJhdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHYtc3dpdGNoIFxuICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cImhhc0RhdGVSYW5nZXNcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgICAgPjwvdi1zd2l0Y2g+XG4gICAgICAgICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgICAgICAgICAgPHYtY29sPlxuICAgICAgICAgICAgICAgICAgICAgIDxNb3JlSW5mbyB0aXRsZT1cIlJhbmdvcyBkZSBmYWN0dXJhcyBwb3IgZmVjaGFzLlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW1tZXJSZWY9XCJyYW5nZS1wZXItZGF0ZS12aWV3XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZhdG9yPVwicGFyZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9Nb3JlSW5mbz5cbiAgICAgICAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgICAgIDwvdi1yb3c+XG4gICAgICAgICAgICAgIDx2LWNvbnRhaW5lciB2LWlmPVwiaGFzRGF0ZVJhbmdlc1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgY2VudGVyIHB4LTMgcHktNVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5SYW5nbyBkZSBmZWNoYXMgKERlc2RlIC0gSGFzdGEpPC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGhyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZm9yPVwiKHJhbmdlLCBpbmRleCkgaW4gZ2V0RGlzcGxheURhdGVSYW5nZXNcIiA6a2V5PVwiaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWNvbCBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtcm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1jb2wgY29scz1cIjEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1kYXRlLWlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOm1vZGVsLXZhbHVlPVwicmFuZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiUmFuZ28gKEluaWNpbyAtIEZpbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlPVwicmFuZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQtaWNvbj1cIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZC1pbm5lci1pY29uPVwibWRpLWNhbGVuZGFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZS1kZXRhaWxzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92LWRhdGUtaW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92LXJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1kaXZpZGVyIHYtaWY9XCJpbmRleCA8IGdldERpc3BsYXlEYXRlUmFuZ2VzLmxlbmd0aCAtIDFcIiBjbGFzcz1cIm15LTRcIj48L3YtZGl2aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC92LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTMgY2VudGVyIGQtZmxleCBqdXN0aWZ5LWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICA8di1idG4gXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXdoaXRlXCIgXG4gICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJzaG93VGFyZ2V0RGV0YWlsc092ZXJsYXkgPSBmYWxzZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBDZXJyYXJcbiAgICAgICAgICAgICAgPC92LWJ0bj5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC92LWZvcm0+XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICA8L092ZXJsYXk+XG4gICAgICA8TW9yZUluZm8gdGl0bGU9XCJPcmRlbiBkZSBwcmlvcmlkYWRcIlxuICAgICAgICBhY3RpdmF0b3I9XCJwYXJlbnRcIiBwcm9ncmFtbWVyUmVmPVwicHJpb3JpdHktb3JkZXJcIj5cbiAgICAgIDwvTW9yZUluZm8+XG4gICAgICA8UHJpb3JpdHlSdWxlcyB2LW1vZGVsPVwiZW50aXR5XCIgOmRpc2FibGVkPVwiZGlzYWJsZWRcIiAvPlxuICAgICAgPE1vcmVJbmZvIHRpdGxlPVwiwr9RdcOpIGhhY2Vtb3M/XCJcbiAgICAgICAgYWN0aXZhdG9yPVwicGFyZW50XCIgcHJvZ3JhbW1lclJlZj1cIm1vbmV0YXJ5LWxpbWl0c1wiPlxuICAgICAgPC9Nb3JlSW5mbz5cbiAgICA8L2Rpdj5cbiAgPC92LWZvcm0+XG48L3RlbXBsYXRlPlxuPHNjcmlwdD5cbmltcG9ydCB7IGNvbXB1dGVkLCByZWYsIHRvUmVmcyB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgU3dhbCBmcm9tICdzd2VldGFsZXJ0Mic7XG5pbXBvcnQgeyB1c2VUYXJnZXRTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy90YXJnZXQnO1xuaW1wb3J0IHsgdXNlUHJvdmlkZXJTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9wcm92aWRlci5qcyc7XG5pbXBvcnQgeyB1c2VDYXRlZ29yeVN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL2NhdGVnb3J5LmpzJztcbmltcG9ydCB7IHVzZUludm9pY2VDbGllbnRTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9pbnZvaWNlQ2xpZW50LmpzJztcbmltcG9ydCBNb3JlSW5mbyBmcm9tICcuL01vcmVJbmZvLnZ1ZSc7XG5pbXBvcnQgT3ZlcmxheSBmcm9tICcuL092ZXJsYXkudnVlJztcbmltcG9ydCBDcmVhdGVQcm92aWRlciBmcm9tIFwiLi9DcmVhdGVQcm92aWRlci52dWVcIjtcbmltcG9ydCBDcmVhdGVOZXdUYXJnZXQgZnJvbSBcIi4vQ3JlYXRlTmV3VGFyZ2V0LnZ1ZVwiO1xuaW1wb3J0IFByaW9yaXR5UnVsZXMgZnJvbSAnLi9Qcmlvcml0eVJ1bGVzT3JkZXJpbmdDb21wb25lbnQudnVlJztcbmltcG9ydCB7IFZEYXRlSW5wdXQgfSBmcm9tICd2dWV0aWZ5L2xpYi9sYWJzL2NvbXBvbmVudHMubWpzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnU2hhcmVDb21wb25lbnRSdWxlcycsXG4gIGNvbXBvbmVudHM6IHtcbiAgICBNb3JlSW5mbyxcbiAgICBPdmVybGF5LFxuICAgIENyZWF0ZVByb3ZpZGVyLFxuICAgIENyZWF0ZU5ld1RhcmdldCxcbiAgICBQcmlvcml0eVJ1bGVzLFxuICAgIFZEYXRlSW5wdXRcbiAgfSxcbiAgcHJvcHM6IHtcbiAgICBydWxlVHlwZToge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgZW50aXR5OiB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBkaXNhYmxlZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9LFxuICBlbWl0czogWyd1cGRhdGUnXSxcbiAgc2V0dXAocHJvcHMsIGNvbnRleHQpIHtcbiAgICBjb25zdCB7IGVudGl0eSB9ID0gdG9SZWZzKHByb3BzKTtcbiAgICBjb25zdCB0YXJnZXRTdG9yZSA9IHVzZVRhcmdldFN0b3JlKCk7XG4gICAgY29uc3QgcHJvdmlkZXJTdG9yZSA9IHVzZVByb3ZpZGVyU3RvcmUoKTtcbiAgICBjb25zdCBjYXRlZ29yeVN0b3JlID0gdXNlQ2F0ZWdvcnlTdG9yZSgpO1xuICAgIGNvbnN0IGludm9pY2VTdG9yZSA9IHVzZUludm9pY2VDbGllbnRTdG9yZSgpO1xuICAgIFxuICAgIC8vIExpc3RhIGRlIHRhcmdldHMgZGlzcG9uaWJsZXNcbiAgICBjb25zdCB0YXJnZXRMaXN0ID0gY29tcHV0ZWQoKCkgPT4gdGFyZ2V0U3RvcmUuZ2V0VGFyZ2V0cyk7XG4gICAgY29uc3QgcHJvdmlkZXJzID0gY29tcHV0ZWQoKCkgPT4gcHJvdmlkZXJTdG9yZS5nZXRQcm92aWRlcnMpO1xuICAgIGNvbnN0IGdyb3VwcyA9IGNvbXB1dGVkKCgpID0+IGNhdGVnb3J5U3RvcmUuZ2V0Q2F0ZWdvcmllcyk7XG4gICAgY29uc3QgaW52b2ljZXMgPSBjb21wdXRlZCgoKSA9PiBpbnZvaWNlU3RvcmUuZ2V0SW52b2ljZXMpO1xuICAgIFxuICAgIC8vIEVzdGFkbyBwYXJhIGVsIG92ZXJsYXkgZGUgZGV0YWxsZXNcbiAgICBjb25zdCBzaG93VGFyZ2V0RGV0YWlsc092ZXJsYXkgPSByZWYoZmFsc2UpO1xuICAgIGNvbnN0IHNlbGVjdGVkVGFyZ2V0ID0gcmVmKHt9KTtcbiAgICBcbiAgICAvLyBDb21wdXRlZCBwYXJhIHZlcmlmaWNhciBzaSBoYXkgcmFuZ29zIGRlIGZlY2hhc1xuICAgIGNvbnN0IGhhc0RhdGVSYW5nZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICByZXR1cm4gc2VsZWN0ZWRUYXJnZXQudmFsdWU/Lmhhc0RhdGVSYW5nZXMgfHwgZmFsc2U7XG4gICAgfSk7XG4gICAgXG4gICAgLy8gQ29tcHV0ZWQgcGFyYSBjb252ZXJ0aXIgZGF0ZVJhbmdlcyBkZWwgYmFja2VuZCBhbCBmb3JtYXRvIGRlIHYtZGF0ZS1pbnB1dFxuICAgIGNvbnN0IGdldERpc3BsYXlEYXRlUmFuZ2VzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgaWYgKCFzZWxlY3RlZFRhcmdldC52YWx1ZT8uZGF0ZVJhbmdlcyB8fCBzZWxlY3RlZFRhcmdldC52YWx1ZS5kYXRlUmFuZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJldHVybiBzZWxlY3RlZFRhcmdldC52YWx1ZS5kYXRlUmFuZ2VzLm1hcChyYW5nZSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGVzID0gW107XG4gICAgICAgIGlmIChyYW5nZS5zdGFydERhdGUpIHtcbiAgICAgICAgICBkYXRlcy5wdXNoKG5ldyBEYXRlKHJhbmdlLnN0YXJ0RGF0ZSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyYW5nZS5maW5pc2hEYXRlKSB7XG4gICAgICAgICAgZGF0ZXMucHVzaChuZXcgRGF0ZShyYW5nZS5maW5pc2hEYXRlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGVzO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgXG4gICAgLy8gQ2FyZ2FyIGRhdG9zIGFsIG1vbnRhciBlbCBjb21wb25lbnRlXG4gICAgdGFyZ2V0U3RvcmUuZmV0Y2hBbGwoKTtcbiAgICBwcm92aWRlclN0b3JlLmZldGNoQWxsKCk7XG4gICAgY2F0ZWdvcnlTdG9yZS5mZXRjaEFsbCgpO1xuICAgIGludm9pY2VTdG9yZS5mZXRjaEFsbCgpO1xuICAgIFxuICAgIGNvbnN0IG9uVGFyZ2V0U2F2ZWQgPSBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0YXJnZXRTdG9yZS5mZXRjaEFsbCgpO1xuICAgIH07XG5cbiAgICBjb25zdCB2aWV3VGFyZ2V0ID0gKHRhcmdldCkgPT4ge1xuICAgICAgc2VsZWN0ZWRUYXJnZXQudmFsdWUgPSB7XG4gICAgICAgIC4uLnRhcmdldCxcbiAgICAgICAgaW52b2ljZXM6IHRhcmdldC5pbnZvaWNlcyB8fCBbXSxcbiAgICAgICAgcHJvdmlkZXJzOiB0YXJnZXQucHJvdmlkZXJzIHx8IFtdLFxuICAgICAgICBjYXRlZ29yaWVzOiB0YXJnZXQuY2F0ZWdvcmllcyB8fCBbXSxcbiAgICAgICAgb25seUluY2x1ZGVJbnZvaWNlc0Zyb21Ub2RheTogISF0YXJnZXQub25seUluY2x1ZGVJbnZvaWNlc0Zyb21Ub2RheSxcbiAgICAgICAgLy8gQ29udmVydGlyIHJhbmdvcyBkZWwgYmFja2VuZCDihpIgZm9ybWF0byBxdWUgbmVjZXNpdGEgdi1kYXRlLWlucHV0XG4gICAgICAgIGRhdGVSYW5nZXM6IHRhcmdldC5kYXRlUmFuZ2VzIHx8IFtdXG4gICAgICB9O1xuICAgICAgc2hvd1RhcmdldERldGFpbHNPdmVybGF5LnZhbHVlID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGl0eSxcbiAgICAgIHRhcmdldExpc3QsXG4gICAgICBwcm92aWRlcnMsXG4gICAgICBncm91cHMsXG4gICAgICBpbnZvaWNlcyxcbiAgICAgIG9uVGFyZ2V0U2F2ZWQsXG4gICAgICBzaG93VGFyZ2V0RGV0YWlsc092ZXJsYXksXG4gICAgICBzZWxlY3RlZFRhcmdldCxcbiAgICAgIHZpZXdUYXJnZXQsXG4gICAgICBoYXNEYXRlUmFuZ2VzLFxuICAgICAgZ2V0RGlzcGxheURhdGVSYW5nZXMsXG5cbiAgICB9O1xuICB9LFxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlbDogbnVsbCxcbiAgICAgIHNlbGVjdGVkQ291bnRyeTogXCJcIixcbiAgICAgIENvbXBhbnlQb3NpdGlvbjogW1xuICAgICAgICBcIkFkbWluaXN0cmFkb3JcIixcbiAgICAgICAgXCJBcG9kZXJhZG9cIixcbiAgICAgICAgXCJEaXJlY3RvclwiLFxuICAgICAgICBcIkdlcmVudGVcIixcbiAgICAgICAgXCJUcmFiYWphZG9yXCIsXG4gICAgICAgIFwiVHJhYmFqYWRvciBUZWNuaWNvXCIsXG4gICAgICAgIFwiT3Ryb1wiLFxuICAgICAgXSxcbiAgICAgIHBlcnNvblR5cGVzOiBbXCJQZXJzb25hIEbDrXNpY2FcIiwgXCJQZXJzb25hIEp1csOtZGljYVwiXSxcbiAgICAgIHRhcmdldHM6IFtcInRhcmdldCAxXCIsIFwidGFyZ2V0IDJcIiwgXCJ0YXJnZXQgM1wiXSxcbiAgICB9O1xuICB9LFxufTtcbjwvc2NyaXB0PlxuPHN0eWxlPlxuLm51bWVyaWMtaW5wdXQge1xuICB3aWR0aDogMTB2dztcbn1cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICAgIDxkaXYgdi1pZj1cImNvbnRlbnRPbmx5XCI+XG4gICAgICAgIDx2LWZvcm0gZmFzdC1mYWlsIEBzdWJtaXQucHJldmVudD1cImhhbmRsZVN1Ym1pdFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVhYmxlXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBDb21wb25lbnRlIGNvbXBhcnRpZG8gcGFyYSB0b2RhcyBsYXMgcmVnbGFzIC0tPlxuICAgICAgICAgICAgICAgIDxTaGFyZUNvbXBvbmVudFJ1bGVzIDplbnRpdHk9XCJlbnRpdHlcIiA6cnVsZS10eXBlPVwiUGF5bWVudE1ldGhvZHNSdWxlSW1wbFwiIDpkaXNhYmxlZD1cImRpc2FibGVkXCI+PC9TaGFyZUNvbXBvbmVudFJ1bGVzPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTZcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWNjacOzbiBkZSBjdWVudGEgYmFuY2FyaWEgLS0+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWxlY3RvciBkZSBjdWVudGEgYmFuY2FyaWEgZXhpc3RlbnRlIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VudGVyIGp1c3RpZnktc3BhY2UtYmV0d2VlblwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8di1zZWxlY3Qgdi1tb2RlbD1cImVudGl0eS5iYW5rQWNjb3VudFwiIDppdGVtcz1cImF2YWlsYWJsZUJhbmtBY2NvdW50c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS10aXRsZT1cImFjY291bnRSZWZlcmVuY2VOYW1lXCIgaXRlbS12YWx1ZT1cIkBpZFwiIGxhYmVsPVwiU2VsZWNjaW9uYXIgY3VlbnRhIGJhbmNhcmlhXCIgdmFyaWFudD1cIm91dGxpbmVkXCIgY2xhc3M9XCJtYi00XCIgOnJ1bGVzPVwiYmFua0FjY291bnRSdWxlc1wiIHJlcXVpcmVkIGhpZGUtZGV0YWlscyA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDppdGVtPVwieyBwcm9wcywgaXRlbSB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWxpc3QtaXRlbSB2LWJpbmQ9XCJwcm9wc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDp0aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnJhdy5hY2NvdW50UmVmZXJlbmNlTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LXNsb3Q6c3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5yYXcuaWJhbk51bWJlciB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92LWxpc3QtaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC92LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC92LWZvcm0+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBCT1RPTiBSRUdMQVMgREUgRk9STUFTIERFIFBBR08gLS0+XG4gICAgPHYtYnRuIHYtZWxzZSBjbGFzcz1cIm9wdGlvbi1idXR0b24gbXktMVwiPkZvcm1hcyBkZSBwYWdvXG4gICAgICAgIDxPdmVybGF5IHYtbW9kZWw9XCJzaG93TW9kYWxcIiB0aXRsZT1cIkHDsWFkaXIgcmVnbGEgZGUgZm9ybWFzIGRlIHBhZ28uXCIgYWN0aXZhdG9yPVwicGFyZW50XCJcbiAgICAgICAgICAgIHByb2dyYW1tZXJSZWY9XCJwYXltZW50LW1ldGhvZHNcIiA6c2NyaW09XCJmYWxzZVwiPlxuICAgICAgICAgICAgPHRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgICAgICAgIDx2LWZvcm0gZmFzdC1mYWlsIEBzdWJtaXQucHJldmVudD1cImhhbmRsZVN1Ym1pdFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZWFibGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ29tcG9uZW50ZSBjb21wYXJ0aWRvIHBhcmEgdG9kYXMgbGFzIHJlZ2xhcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTaGFyZUNvbXBvbmVudFJ1bGVzIDplbnRpdHk9XCJlbnRpdHlcIiA6cnVsZS10eXBlPVwiUGF5bWVudE1ldGhvZHNSdWxlSW1wbFwiPjwvU2hhcmVDb21wb25lbnRSdWxlcz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlY2Npw7NuIGRlIGN1ZW50YSBiYW5jYXJpYSAtLT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VsZWN0b3IgZGUgY3VlbnRhIGJhbmNhcmlhIGV4aXN0ZW50ZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VudGVyIGp1c3RpZnktc3BhY2UtYmV0d2VlblwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LXNlbGVjdCB2LW1vZGVsPVwiZW50aXR5LmJhbmtBY2NvdW50XCIgOml0ZW1zPVwiYXZhaWxhYmxlQmFua0FjY291bnRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tdGl0bGU9XCJhY2NvdW50UmVmZXJlbmNlTmFtZVwiIGl0ZW0tdmFsdWU9XCJAaWRcIiBsYWJlbD1cIlNlbGVjY2lvbmFyIGN1ZW50YSBiYW5jYXJpYVwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGNsYXNzPVwibWItNFwiIDpydWxlcz1cImJhbmtBY2NvdW50UnVsZXNcIiByZXF1aXJlZCBoaWRlLWRldGFpbHM+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LXNsb3Q6aXRlbT1cInsgcHJvcHMsIGl0ZW0gfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWxpc3QtaXRlbSB2LWJpbmQ9XCJwcm9wc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1zbG90OnRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5yYXcuYWNjb3VudFJlZmVyZW5jZU5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDpzdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ucmF3LmliYW5OdW1iZXIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3YtbGlzdC1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92LXNlbGVjdD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1idG4gaWNvbiBjbGFzcz1cInRleHQtd2hpdGUgcGx1cy1idG5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWljb24+bWRpLXBsdXM8L3YtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxPdmVybGF5IHRpdGxlPVwiQ3JlYXIgY3VlbnRhIGJhbmNhcmlhXCIgYWN0aXZhdG9yPVwicGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtbWVyUmVmPVwiYmFuay1hY2NvdW50LXJ1bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJzaG93Q3JlYXRlQWNjb3VudFwiIDpzY3JpbT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIOKchSBBR1JFR0FSOiBFc2N1Y2hhciBlbCBldmVudG8gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDcmVhdGVCYW5rQWNjb3VudCBAYmFua0FjY291bnRDcmVhdGVkPVwiaGFuZGxlQmFua0FjY291bnRDcmVhdGVkXCI+PC9DcmVhdGVCYW5rQWNjb3VudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9PdmVybGF5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3YtYnRuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0zIGNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHYtYnRuIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cInRleHQtd2hpdGUgYWRkLXRlbXBsYXRlcy1idXR0b25cIiA6ZGlzYWJsZWQ9XCIhaXNGb3JtVmFsaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBleGlzdGluZ1J1bGUgPyAnQWN0dWFsaXphcicgOiAnQcOxYWRpcicgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1idG4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvdi1mb3JtPlxuICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPC9PdmVybGF5PlxuICAgIDwvdi1idG4+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgUGF5bWVudE1ldGhvZHNSdWxlSW1wbCB9IGZyb20gJy4uL3NlcnZpY2VzL3R5cGVzL2ltcGxlbWVudGF0aW9ucyc7XG5pbXBvcnQgeyB1c2VFbnRpdHkgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb21wb3NhYmxlcy91c2VFbnRpdHknO1xuaW1wb3J0IE92ZXJsYXkgZnJvbSBcIi4uL2NvbXBvbmVudHMvT3ZlcmxheS52dWVcIjtcbmltcG9ydCBTaGFyZUNvbXBvbmVudFJ1bGVzIGZyb20gXCIuLi9jb21wb25lbnRzL1NoYXJlQ29tcG9uZW50UnVsZXMudnVlXCI7XG5pbXBvcnQgQ3JlYXRlQmFua0FjY291bnQgZnJvbSBcIi4uL2NvbXBvbmVudHMvQ3JlYXRlQmFua0FjY291bnQudnVlXCI7XG5pbXBvcnQgeyBQYXltZW50TWV0aG9kc1J1bGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvaW1wbGVtZW50YXRpb25zL3J1bGVzL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZVJ1bGVzU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvcnVsZXMuanMnO1xuaW1wb3J0IHsgdXNlQmFua0FjY291bnRTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9iYW5rQWNjb3VudC5qcyc7XG5pbXBvcnQgeyBjb21wdXRlZCwgcmVmLCB0b1JlZnMsIG9uTW91bnRlZCwgd2F0Y2ggfSBmcm9tICd2dWUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ1BheW1lbnRNZXRob2RzUnVsZUNvbXBvbmVudCcsXG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBTaGFyZUNvbXBvbmVudFJ1bGVzLFxuICAgICAgICBPdmVybGF5LFxuICAgICAgICBDcmVhdGVCYW5rQWNjb3VudFxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZXhpc3RpbmdSdWxlOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICBjb250ZW50T25seToge1xuICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIGRpc2FibGVkOiB7XG4gICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgICAgfVxuICAgIH0sXG4gICAgc2V0dXAocHJvcHMpIHtcbiAgICAgICAgY29uc3QgeyBleGlzdGluZ1J1bGUgfSA9IHRvUmVmcyhwcm9wcyk7XG4gICAgICAgIGNvbnN0IGJhbmtBY2NvdW50U3RvcmUgPSB1c2VCYW5rQWNjb3VudFN0b3JlKCk7XG5cbiAgICAgICAgY29uc3QgeyBlbnRpdHksIGxvYWRFbnRpdHkgfSA9IHVzZUVudGl0eShQYXltZW50TWV0aG9kc1J1bGVJbXBsLCB1c2VSdWxlc1N0b3JlKCkpO1xuICAgICAgICBjb25zdCBzaG93Q3JlYXRlQWNjb3VudCA9IHJlZihmYWxzZSk7XG5cbiAgICAgICAgLy8gQ29udHJvbCB2aXNpYmlsaXR5IG9mIHRoZSBtb2RhbFxuICAgICAgICBjb25zdCBzaG93TW9kYWwgPSByZWYoZmFsc2UpO1xuXG4gICAgICAgIHdhdGNoKGV4aXN0aW5nUnVsZSwgKG5ld1ZhbCkgPT4ge1xuICAgICAgICAgICAgaWYgKG5ld1ZhbCkge1xuICAgICAgICAgICAgICAgIGxvYWRFbnRpdHkobmV3VmFsKTtcbiAgICAgICAgICAgICAgICBzaG93TW9kYWwudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7IGltbWVkaWF0ZTogdHJ1ZSB9KTtcblxuICAgICAgICAvLyBDb21wdXRlZCBwYXJhIGxhcyBjdWVudGFzIGJhbmNhcmlhcyBkaXNwb25pYmxlc1xuICAgICAgICBjb25zdCBhdmFpbGFibGVCYW5rQWNjb3VudHMgPSBjb21wdXRlZCgoKSA9PiBiYW5rQWNjb3VudFN0b3JlLmdldEJhbmtBY2NvdW50cyk7XG5cbiAgICAgICAgLy8gQ29tcHV0ZWQgcGFyYSB2YWxpZGFyIGVsIGZvcm11bGFyaW9cbiAgICAgICAgY29uc3QgaXNGb3JtVmFsaWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZW50aXR5LnZhbHVlLmJhbmtBY2NvdW50ICE9IG51bGw7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIExpc3RhIGRlIGJhbmNvcyBkaXNwb25pYmxlc1xuICAgICAgICBjb25zdCBiYW5rTmFtZXMgPSBbXG4gICAgICAgICAgICAnQkJWQScsXG4gICAgICAgICAgICAnU2FudGFuZGVyJyxcbiAgICAgICAgICAgICdDYWl4YUJhbmsnLFxuICAgICAgICAgICAgJ0JhbmtpYScsXG4gICAgICAgICAgICAnU2FiYWRlbGwnLFxuICAgICAgICAgICAgJ1VuaWNhamEnLFxuICAgICAgICAgICAgJ0t1dHhhYmFuaycsXG4gICAgICAgICAgICAnSWJlcmNhamEnLFxuICAgICAgICAgICAgJ090cm8nXG4gICAgICAgIF07XG5cbiAgICAgICAgLy8gUmVnbGFzIGRlIHZhbGlkYWNpw7NuXG4gICAgICAgIGNvbnN0IGJhbmtBY2NvdW50UnVsZXMgPSBbXG4gICAgICAgICAgICB2ID0+ICEhdiB8fCAnTGEgY3VlbnRhIGJhbmNhcmlhIGVzIHJlcXVlcmlkYSdcbiAgICAgICAgXTtcblxuICAgICAgICBvbk1vdW50ZWQoKCkgPT4ge1xuICAgICAgICAgICAgLy8gQ2FyZ2FyIGN1ZW50YXMgYmFuY2FyaWFzIGFsIG1vbnRhciBlbCBjb21wb25lbnRlXG4gICAgICAgICAgICBiYW5rQWNjb3VudFN0b3JlLmZldGNoQWxsKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICBQYXltZW50TWV0aG9kc1J1bGVJbXBsLFxuICAgICAgICAgICAgc2hvd01vZGFsLFxuICAgICAgICAgICAgc2hvd0NyZWF0ZUFjY291bnQsXG4gICAgICAgICAgICBhdmFpbGFibGVCYW5rQWNjb3VudHMsXG4gICAgICAgICAgICBpc0Zvcm1WYWxpZCxcbiAgICAgICAgICAgIGJhbmtOYW1lcyxcbiAgICAgICAgICAgIGJhbmtBY2NvdW50UnVsZXMsXG4gICAgICAgICAgICBiYW5rQWNjb3VudFN0b3JlIC8vIOKchSBBR1JFR0FSOiBSZXRvcm5hciBlbCBzdG9yZVxuICAgICAgICB9O1xuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgICAvLyDinIUgTlVFVk86IE3DqXRvZG8gcGFyYSBtYW5lamFyIGxhIGNyZWFjacOzbiBkZSBjdWVudGEgYmFuY2FyaWFcbiAgICAgICAgYXN5bmMgaGFuZGxlQmFua0FjY291bnRDcmVhdGVkKCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ+KchSBOdWV2YSBjdWVudGEgYmFuY2FyaWEgY3JlYWRhIC0gcmVmcmVzY2FuZG8gbGlzdGEgeSBjZXJyYW5kbyBvdmVybGF5Li4uJyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFJlZnJlc2NhciBsYSBsaXN0YSBkZSBjdWVudGFzIGJhbmNhcmlhc1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5iYW5rQWNjb3VudFN0b3JlLmZldGNoQWxsKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIENlcnJhciBlbCBvdmVybGF5XG4gICAgICAgICAgICB0aGlzLnNob3dDcmVhdGVBY2NvdW50ID0gZmFsc2U7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIE9wY2lvbmFsOiBNb3N0cmFyIG1lbnNhamUgZGUgw6l4aXRvXG4gICAgICAgICAgICB0aGlzLnRvYXN0Py5zdWNjZXNzKCdDdWVudGEgYmFuY2FyaWEgY3JlYWRhIGNvcnJlY3RhbWVudGUnKTtcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBoYW5kbGVTdWJtaXQoKSB7XG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlID0gbmV3IFBheW1lbnRNZXRob2RzUnVsZVNlcnZpY2UodGhpcy5lbnRpdHkpO1xuICAgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IHRoaXMuY3JlYXRlR2VuZXJpYyhzZXJ2aWNlKTtcbiAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93TW9kYWwgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9XG59O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG4ucGx1cy1idG4ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM4N2JkNzg7XG59XG5cbi5hZGQtdGVtcGxhdGVzLWJ1dHRvbiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzg3YmQ3ODtcbiAgICBtYXJnaW4tdG9wOiAxNnB4O1xufVxuPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cInJ1bGVzLWxpc3RcIj5cbiAgICAgICAgPHYtbGlzdCB2LWlmPVwiYWxsUnVsZXMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPHYtbGlzdC1pdGVtIHYtZm9yPVwiKHJ1bGUsIGluZGV4KSBpbiBhbGxSdWxlc1wiIDprZXk9XCJpbmRleFwiPlxuICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LXNsb3Q6cHJlcGVuZD5cbiAgICAgICAgICAgICAgICAgICAgPHYtaWNvbiBjb2xvcj1cInByaW1hcnlcIj5tZGktZ2F2ZWw8L3YtaWNvbj5cbiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDx2LWxpc3QtaXRlbS10aXRsZT57eyBnZXRSdWxlTmFtZShydWxlKSB9fTwvdi1saXN0LWl0ZW0tdGl0bGU+XG4gICAgICAgICAgICAgICAgPHYtbGlzdC1pdGVtLXN1YnRpdGxlPnt7IGdldFJ1bGVUeXBlTGFiZWwocnVsZSkgfX08L3YtbGlzdC1pdGVtLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LXNsb3Q6YXBwZW5kPlxuICAgICAgICAgICAgICAgICAgICA8di1idG4gaWNvbiBjb2xvcj1cInByaW1hcnlcIiB2YXJpYW50PVwidGV4dFwiIEBjbGljaz1cIm9wZW5SdWxlKHJ1bGUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8di1pY29uPm1kaS1leWU8L3YtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC92LWJ0bj5cbiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgPC92LWxpc3QtaXRlbT5cbiAgICAgICAgPC92LWxpc3Q+XG4gICAgICAgIFxuICAgICAgICA8ZGl2IHYtZWxzZSBjbGFzcz1cInRleHQtY2VudGVyIHBhLTRcIj5cbiAgICAgICAgICAgIDx2LWljb24gc2l6ZT1cImxhcmdlXCIgY29sb3I9XCJncmV5XCI+bWRpLWZpbGUtZG9jdW1lbnQtb3V0bGluZTwvdi1pY29uPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWdyZXkgbXQtMlwiPk5vIGhheSByZWdsYXMgYXNvY2lhZGFzIGEgZXN0YSBmYWN0dXJhPC9wPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIE92ZXJsYXkgZm9yIHNwZWNpZmljIHJ1bGUgLS0+XG4gICAgICAgIDwhLS0gT3ZlcmxheSBmb3Igc3BlY2lmaWMgcnVsZSAtLT5cbiAgICAgICAgPGRpdiB2LWlmPVwic2VsZWN0ZWRSdWxlXCI+XG4gICAgICAgICAgICA8T3ZlcmxheSB2LW1vZGVsPVwic2hvd1J1bGVNb2RhbFwiIHRpdGxlPVwiRGV0YWxsZSBkZSBsYSBSZWdsYVwiXG4gICAgICAgICAgICAgICAgcHJvZ3JhbW1lclJlZj1cInJ1bGUtZGV0YWlsXCJcbiAgICAgICAgICAgICAgICA6c2NyaW09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPHRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGEtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNvbXBvbmVudCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LWlmPVwic2VsZWN0ZWRSdWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6aXM9XCJnZXRDb21wb25lbnQoc2VsZWN0ZWRSdWxlKVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpleGlzdGluZ1J1bGU9XCJzZWxlY3RlZFJ1bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjb250ZW50T25seT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9XCJzZWxlY3RlZFJ1bGUuaWQgfHwgc2VsZWN0ZWRSdWxlWydAaWQnXSB8fCBKU09OLnN0cmluZ2lmeShzZWxlY3RlZFJ1bGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2NvbXBvbmVudD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvT3ZlcmxheT5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IEVsZWdpYmlsaXR5UnVsZUNvbXBvbmVudCBmcm9tICcuL0VsZWdpYmlsaXR5UnVsZUNvbXBvbmVudC52dWUnO1xuaW1wb3J0IEV4cGlyYXRpb25EYXRlUnVsZUNvbXBvbmVudCBmcm9tICcuL0V4cGlyYXRpb25EYXRlUnVsZUNvbXBvbmVudC52dWUnO1xuaW1wb3J0IExpbWl0c1J1bGVDb21wb25lbnQgZnJvbSAnLi9MaW1pdHNSdWxlQ29tcG9uZW50LnZ1ZSc7XG5pbXBvcnQgRGlzY291bnRSdWxlQ29tcG9uZW50IGZyb20gJy4vRGlzY291bnRSdWxlQ29tcG9uZW50LnZ1ZSc7XG5pbXBvcnQgUGF5bWVudE1ldGhvZHNSdWxlQ29tcG9uZW50IGZyb20gJy4vUGF5bWVudE1ldGhvZHNSdWxlQ29tcG9uZW50LnZ1ZSc7XG5pbXBvcnQgT3ZlcmxheSBmcm9tICcuL092ZXJsYXkudnVlJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWU6ICdJbnZvaWNlUnVsZXNPdmVybGF5JyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIEVsZWdpYmlsaXR5UnVsZUNvbXBvbmVudCxcbiAgICAgICAgRXhwaXJhdGlvbkRhdGVSdWxlQ29tcG9uZW50LFxuICAgICAgICBMaW1pdHNSdWxlQ29tcG9uZW50LFxuICAgICAgICBEaXNjb3VudFJ1bGVDb21wb25lbnQsXG4gICAgICAgIFBheW1lbnRNZXRob2RzUnVsZUNvbXBvbmVudCxcbiAgICAgICAgT3ZlcmxheVxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgaW52b2ljZToge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNob3dSdWxlTW9kYWw6IGZhbHNlLFxuICAgICAgICAgICAgc2VsZWN0ZWRSdWxlOiBudWxsXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBjb21wdXRlZDoge1xuICAgICAgICBhbGxSdWxlcygpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pbnZvaWNlKSByZXR1cm4gW107XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVzID0gW107XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEhlbHBlciB0byBhZGQgcnVsZXMgd2l0aCB0eXBlXG4gICAgICAgICAgICBjb25zdCBhZGRSdWxlcyA9IChjb2xsZWN0aW9uLCB0eXBlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb24gJiYgQXJyYXkuaXNBcnJheShjb2xsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLmZvckVhY2gocnVsZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgcnVsZSBoYXMgdHlwZSBwcm9wZXJ0eSBpZiBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJ1bGUucnVsZVR5cGUpIHJ1bGUucnVsZVR5cGUgPSB0eXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcnVsZXMucHVzaChydWxlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgYWRkUnVsZXModGhpcy5pbnZvaWNlLmVsZWdpYmlsaXR5UnVsZXMsICdFbGVnaWJpbGl0eVJ1bGUnKTtcbiAgICAgICAgICAgIGFkZFJ1bGVzKHRoaXMuaW52b2ljZS5leHBpcmF0aW9uRGF0ZXNSdWxlcywgJ0V4cGlyYXRpb25EYXRlc1J1bGUnKTtcbiAgICAgICAgICAgIGFkZFJ1bGVzKHRoaXMuaW52b2ljZS5saW1pdHNSdWxlcywgJ0xpbWl0c1J1bGUnKTtcbiAgICAgICAgICAgIGFkZFJ1bGVzKHRoaXMuaW52b2ljZS5kaXNjb3VudEdyb3Vwc1J1bGVzLCAnRGlzY291bnRHcm91cHNSdWxlJyk7XG4gICAgICAgICAgICBhZGRSdWxlcyh0aGlzLmludm9pY2UucGF5bWVudE1ldGhvZHNSdWxlcywgJ1BheW1lbnRNZXRob2RzUnVsZScpO1xuXG4gICAgICAgICAgICByZXR1cm4gcnVsZXM7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgZ2V0UnVsZU5hbWUocnVsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJ1bGUucnVsZU5hbWUgfHwgcnVsZS5kZXNjcmlwdGlvbiB8fCAnUmVnbGEgc2luIG5vbWJyZSc7XG4gICAgICAgIH0sXG4gICAgICAgIGdldFJ1bGVUeXBlTGFiZWwocnVsZSkge1xuICAgICAgICAgICAgY29uc3QgdHlwZXMgPSB7XG4gICAgICAgICAgICAgICAgJ0VsZWdpYmlsaXR5UnVsZSc6ICdSZWdsYSBkZSBFbGVnaWJpbGlkYWQnLFxuICAgICAgICAgICAgICAgICdFeHBpcmF0aW9uRGF0ZXNSdWxlJzogJ1JlZ2xhIGRlIFZlbmNpbWllbnRvJyxcbiAgICAgICAgICAgICAgICAnTGltaXRzUnVsZSc6ICdSZWdsYSBkZSBMw61taXRlcycsXG4gICAgICAgICAgICAgICAgJ0Rpc2NvdW50R3JvdXBzUnVsZSc6ICdSZWdsYSBkZSBEZXNjdWVudG9zJyxcbiAgICAgICAgICAgICAgICAnUGF5bWVudE1ldGhvZHNSdWxlJzogJ1JlZ2xhIGRlIEZvcm1hcyBkZSBQYWdvJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlc1tydWxlLnJ1bGVUeXBlXSB8fCBydWxlLnJ1bGVUeXBlO1xuICAgICAgICB9LFxuICAgICAgICBnZXRDb21wb25lbnQocnVsZSkge1xuICAgICAgICAgICAgaWYgKCFydWxlKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgdHlwZU1hcCA9IHtcbiAgICAgICAgICAgICAgICAnRWxlZ2liaWxpdHlSdWxlJzogJ0VsZWdpYmlsaXR5UnVsZUNvbXBvbmVudCcsXG4gICAgICAgICAgICAgICAgJ0V4cGlyYXRpb25EYXRlc1J1bGUnOiAnRXhwaXJhdGlvbkRhdGVSdWxlQ29tcG9uZW50JyxcbiAgICAgICAgICAgICAgICAnTGltaXRzUnVsZSc6ICdMaW1pdHNSdWxlQ29tcG9uZW50JyxcbiAgICAgICAgICAgICAgICAnRGlzY291bnRHcm91cHNSdWxlJzogJ0Rpc2NvdW50UnVsZUNvbXBvbmVudCcsXG4gICAgICAgICAgICAgICAgJ1BheW1lbnRNZXRob2RzUnVsZSc6ICdQYXltZW50TWV0aG9kc1J1bGVDb21wb25lbnQnXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBBbHNvIGhhbmRsZSBpZiBydWxlVHlwZSBjb21lcyBmcm9tIGJhY2tlbmQgYXMgY2xhc3MgbmFtZSBvciBzaW1pbGFyXG4gICAgICAgICAgICAvLyBUaGUgYmFja2VuZCB1c3VhbGx5IHNlbmRzICdydWxlVHlwZScgcHJvcGVydHkgaWYgaXQncyBzZXJpYWxpemVkIGZyb20gQWJzdHJhY3RSdWxlXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiB0eXBlTWFwW3J1bGUucnVsZVR5cGVdIHx8IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIG9wZW5SdWxlKHJ1bGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSdWxlID0gcnVsZTtcbiAgICAgICAgICAgIHRoaXMuc2hvd1J1bGVNb2RhbCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cbi8qIFZpc3VhbCBjdWUgdGhhdCBpbnB1dHMgYXJlIHJlYWQtb25seSAqL1xuOmRlZXAoLnYtZmllbGRfX2lucHV0KSxcbjpkZWVwKC52LWlucHV0X19jb250cm9sKSB7XG4gICAgb3BhY2l0eTogMC44O1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgICA8di1yb3c+XG4gICAgICAgIDx2LWNvbD5cbiAgICAgICAgICAgIDx2LWNhcmQ+XG4gICAgICAgICAgICAgICAgPHYtY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPGI+e3sgJ0ZhY3R1cmFzICcgKyAoYXV0aFN0b3JlLmlzQ2xpZW50ID8gJ1JlY2liaWRhcycgOiAnRW1pdGlkYXMnKSB9fTwvYj5cbiAgICAgICAgICAgICAgICA8L3YtY2FyZC10aXRsZT5cblxuICAgICAgICAgICAgICAgIDwhLS0gRHluYW1pYyBGaWx0ZXIgVGFibGUgd2l0aCBidWlsdC1pbiBwYWdpbmF0aW9uIGFuZCBmaWx0ZXJpbmcgLS0+XG4gICAgICAgICAgICAgICAgPGNvbXBvbmVudCA6aXM9XCJ0YWdDb21wb25lbnRlXCJcbiAgICAgICAgICAgICAgICAgICAgcmVmPVwiaW52b2ljZVRhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgOmFwaS1lbmRwb2ludD1cImFwaUVuZHBvaW50XCJcbiAgICAgICAgICAgICAgICAgICAgOmZpbHRlci1jb25maWc9XCJmaWx0ZXJDb25maWdcIlxuICAgICAgICAgICAgICAgICAgICA6aGVhZGVycz1cImhlYWRlcnNcIlxuICAgICAgICAgICAgICAgICAgICA6YWN0aW9ucz1cImFjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICA6YWRkaXRpb25hbC1wYXJhbXM9XCJkYXRlRmlsdGVyc1wiXG4gICAgICAgICAgICAgICAgICAgIEBkYXRhLWxvYWRlZD1cIm9uRGF0YUxvYWRlZFwiXG4gICAgICAgICAgICAgICAgICAgIEBlcnJvcj1cIm9uRXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICBAZmlsdGVyLWNoYW5nZT1cIm9uRmlsdGVyQ2hhbmdlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gQ3VzdG9tIHN0YXR1cyBjb2x1bW4gdGVtcGxhdGUgLS0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5zdGF0dXM9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0YXR1c0NoaXAgOml0ZW09XCJpdGVtXCI+PC9TdGF0dXNDaGlwPlxuICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBGb3JtYXQgY3VycmVuY3kgY29sdW1ucyAtLT5cbiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlICNpdGVtLnRvdGFsPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdEN1cnJlbmN5KGl0ZW0udG90YWwpIH19XG4gICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI2l0ZW0uZGlzY291bnQ9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5kaXNjb3VudCA/IGZvcm1hdEN1cnJlbmN5KGl0ZW0uZGlzY291bnQpIDogJy0tJyB9fVxuICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBGb3JtYXQgZGF0ZSBjb2x1bW5zIC0tPlxuICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI2l0ZW0uYnJvYWRjYXN0RGF0ZT1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtYXREYXRlKGl0ZW0uYnJvYWRjYXN0RGF0ZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5leHBpcmF0aW9uRGF0ZT1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtYXREYXRlKGl0ZW0uZXhwaXJhdGlvbkRhdGUpIH19XG4gICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9jb21wb25lbnQ+XG4gICAgICAgICAgICA8L3YtY2FyZD5cbiAgICAgICAgPC92LWNvbD5cblxuICAgICAgICA8IS0tIEVESVRBUiBFTCBJTlZPSUNFIFNFTEVDQ0lPTkFETyAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVkaXQtaW52b2ljZVwiPlxuICAgICAgICAgICAgPE92ZXJsYXkgdGl0bGU9XCJFZGl0YXIgRmFjdHVyYVwiIHByb2dyYW1tZXJSZWY9XCJhZGQtaW52b2ljZVwiIGFjdGl2YXRvcj1cInBhcmVudFwiXG4gICAgICAgICAgICAgICAgdi1tb2RlbD1cInNob3dFZGl0SW52b2ljZVwiPlxuICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjZGVmYXVsdD5cbiAgICAgICAgICAgICAgICAgICAgPENyZWF0ZUludm9pY2VPdmVybGF5IHYtaWY9XCJzZWxlY3RlZEludm9pY2VcIiA6ZXhpc3RpbmdJbnZvaWNlPVwic2VsZWN0ZWRJbnZvaWNlXCIgQHNhdmVkPVwicmVmcmVzaERhdGFcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9DcmVhdGVJbnZvaWNlT3ZlcmxheT5cbiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgPC9PdmVybGF5PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFZFUiBFTCBJTlZPSUNFIFNFTEVDQ0lPTkFETyAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNob3ctaW52b2ljZVwiPlxuICAgICAgICAgICAgPE92ZXJsYXkgdi1tb2RlbD1cInNob3dEZXRhaWxzXCIgdGl0bGU9XCJEZXRhbGxlcyBkZSBmYWN0dXJhXCIgcHJvZ3JhbW1lclJlZj1cImludm9pY2UtZGV0YWlsXCIgYWN0aXZhdG9yPVwicGFyZW50XCI+XG4gICAgICAgICAgICAgICAgPHRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZWFibGVcIiB2LWlmPVwic2VsZWN0ZWRJbnZvaWNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TW9yZUluZm8gdGl0bGU9XCJEYXRvc1wiIHByb2dyYW1tZXJSZWY9XCJwcmluY2lwYWwtZGF0YS1pbnZvaWNlXCIgYWN0aXZhdG9yPVwicGFyZW50XCI+PC9Nb3JlSW5mbz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LXJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1yb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWNvbCBjb2xzPVwiNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCIqIEZlY2hhIGRlIEVtaXNpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOm1vZGVsLXZhbHVlPVwiZm9ybWF0RGF0ZShzZWxlY3RlZEludm9pY2UuYnJvYWRjYXN0RGF0ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJ1bmRlcmxpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3YtdGV4dC1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtY29sIGNvbHM9XCI0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIiogRmVjaGEgZGUgVmVuY2ltaWVudG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOm1vZGVsLXZhbHVlPVwiZm9ybWF0RGF0ZShzZWxlY3RlZEludm9pY2UuZXhwaXJhdGlvbkRhdGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwidW5kZXJsaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWNvbCBjb2xzPVwiNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJGZWNoYSBkZSBQcmVzdGFjaW9uIGRlIFNlcnZpY2lvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDptb2RlbC12YWx1ZT1cImZvcm1hdERhdGUoc2VsZWN0ZWRJbnZvaWNlLmRhdGVPZlNlcnZpY2VQcm92aXNpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwidW5kZXJsaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1yb3c+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1yb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICA8di1yb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZCBsYWJlbD1cIiogUHJvdmVlZG9yXCIgdi1tb2RlbD1cInNlbGVjdGVkSW52b2ljZS5wcm92aWRlclNvY2lhbERlbm9taW5hdGlvblwiIHJlYWRvbmx5IHZhcmlhbnQ9XCJ1bmRlcmxpbmVkXCIgcmVxdWlyZWQ+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZCBsYWJlbD1cIkZvcm1hIGRlIHBhZ29cIiB2LW1vZGVsPVwic2VsZWN0ZWRJbnZvaWNlLnBheW1lbnRNZXRob2RcIiByZWFkb25seSB2YXJpYW50PVwidW5kZXJsaW5lZFwiPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgbGFiZWw9XCIqIEltcHVlc3Rvc1wiIHYtbW9kZWw9XCJzZWxlY3RlZEludm9pY2UudGF4XCIgcmVhZG9ubHkgdmFyaWFudD1cInVuZGVybGluZWRcIiByZXF1aXJlZD48L3YtdGV4dC1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1yb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICA8di1yb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZCBsYWJlbD1cIiogVG90YWxcIiB2LW1vZGVsPVwic2VsZWN0ZWRJbnZvaWNlLnRvdGFsXCIgcmVhZG9ubHkgdmFyaWFudD1cInVuZGVybGluZWRcIiByZXF1aXJlZD48L3YtdGV4dC1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkIGxhYmVsPVwiKiBOIEZhY3R1cmFcIiB2LW1vZGVsPVwic2VsZWN0ZWRJbnZvaWNlLmludm9pY2VOdW1iZXJcIiByZWFkb25seSB2YXJpYW50PVwidW5kZXJsaW5lZFwiIHJlcXVpcmVkPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgdHlwZT1cIm51bWJlclwiIGxhYmVsPVwiKiBCYXNlIGltcG9uaWJsZVwiIHYtbW9kZWw9XCJzZWxlY3RlZEludm9pY2UudGF4QmFzZVwiIHJlYWRvbmx5IHZhcmlhbnQ9XCJ1bmRlcmxpbmVkXCIgcmVxdWlyZWQ+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Ytcm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHYtcm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgbGFiZWw9XCJSZXRlbmNpb25lc1wiIHYtbW9kZWw9XCJzZWxlY3RlZEludm9pY2UucmV0ZW50aW9uc1wiIHJlYWRvbmx5IHZhcmlhbnQ9XCJ1bmRlcmxpbmVkXCI+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkIGxhYmVsPVwiQ29zdG8gc3VwbGlkbyBkZSBmYWN0dXJhXCIgdi1tb2RlbD1cInNlbGVjdGVkSW52b2ljZS5zdXBwbGllZEV4cGVuc2VcIiByZWFkb25seSB2YXJpYW50PVwidW5kZXJsaW5lZFwiPjwvdi10ZXh0LWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMiBtdC0wIHctMTAwIGNlbnRlciBmbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgdi1pZj1cInNlbGVjdGVkSW52b2ljZS5hdHRhY2hlZERvY3VtZW50XCI+PGI+QXJjaGl2byBhZGp1bnRvOjwvYj4ge3sgc2VsZWN0ZWRJbnZvaWNlLmF0dGFjaGVkRG9jdW1lbnQgfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgdi1lbHNlPjxiPk5vIGhheSBhcmNoaXZvIGFkanVudG8gYXVuLi4uPC9iPjwvc21hbGw+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWJ0blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1pZj1cInNlbGVjdGVkSW52b2ljZS5hdHRhY2hlZERvY3VtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpocmVmPVwiYC91cGxvYWRzLyR7c2VsZWN0ZWRJbnZvaWNlLmF0dGFjaGVkRG9jdW1lbnR9YFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlciBkb2N1bWVudG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92LWJ0bj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPC92LXJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxNb3JlSW5mbyB0aXRsZT1cIlByb2R1Y3RvcyBkZSBsYSBmYWN0dXJhXCIgcHJvZ3JhbW1lclJlZj1cImludm9pY2UtcHJvZHVjdHMtZGV0YWlsc1wiIGFjdGl2YXRvcj1cInBhcmVudFwiPjwvTW9yZUluZm8+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9XCIocHJvZHVjdCwgaW5kZXgpIGluIHNlbGVjdGVkSW52b2ljZS5wcm9kdWN0QXJyYXlcIiA6a2V5PVwiaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YiBjbGFzcz1cIm15LTJcIj5Qcm9kdWN0byB7eyBpbmRleCArIDEgfX08L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtcm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1jb2wgY29scz1cIjNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgbGFiZWw9XCIqIENvbmNlcHRvXCIgdi1tb2RlbD1cInByb2R1Y3QucHJvZHVjdERlc2NyaXB0aW9uXCIgcmVhZG9ubHkgdmFyaWFudD1cInVuZGVybGluZWRcIj48L3YtdGV4dC1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtY29sIGNvbHM9XCIzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkIGxhYmVsPVwiKiBVZHMuXCIgdi1tb2RlbD1cInByb2R1Y3QudW5pdHNcIiByZWFkb25seSB2YXJpYW50PVwidW5kZXJsaW5lZFwiPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1jb2wgY29scz1cIjNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGQgbGFiZWw9XCIqIFByZWNpb1wiIHYtbW9kZWw9XCJwcm9kdWN0LnVuaXRQcmljZVwiIHJlYWRvbmx5IHZhcmlhbnQ9XCJ1bmRlcmxpbmVkXCI+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWNvbCBjb2xzPVwiM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZCBsYWJlbD1cIkR0by5cIiA6bW9kZWwtdmFsdWU9XCJmb3JtYXRDdXJyZW5jeShzZWxlY3RlZEludm9pY2UuZGlzY291bnQpXCIgcmVhZG9ubHkgdmFyaWFudD1cInVuZGVybGluZWRcIj48L3YtdGV4dC1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtY29sIGNvbHM9XCIzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di10ZXh0LWZpZWxkIGxhYmVsPVwiKiBUb3RhbFwiIHYtbW9kZWw9XCJwcm9kdWN0LnByb2R1Y3RUb3RhbFwiIHJlYWRvbmx5IHZhcmlhbnQ9XCJ1bmRlcmxpbmVkXCI+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92LXJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8di1kaXZpZGVyIHYtaWY9XCJpbmRleCA8IHNlbGVjdGVkSW52b2ljZS5wcm9kdWN0QXJyYXkubGVuZ3RoIC0gMVwiIGNsYXNzPVwibXktM1wiPjwvdi1kaXZpZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VudGVyIG1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LWJ0biBjbGFzcz1cInRleHQtd2hpdGUgYWRkLXRlbXBsYXRlcy1idXR0b24gbWUtMlwiIEBjbGljaz1cInNob3dEZXRhaWxzID0gZmFsc2VcIj5BY2VwdGFyPC92LWJ0bj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LWJ0biBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImluZm9cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtd2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz1cInZpZXdIaXN0b3J5KHNlbGVjdGVkSW52b2ljZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpc3RvcmlhbCBkZSBlc3RhZG9zIGRlIGxhIGZhY3R1cmFcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1idG4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICA8L092ZXJsYXk+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gSU5WT0lDRSBISVNUT1JZIE9WRVJMQVkgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoaXN0b3J5LW92ZXJsYXlcIj5cbiAgICAgICAgICAgIDxPdmVybGF5IHYtbW9kZWw9XCJzaG93SGlzdG9yeVwiIHRpdGxlPVwiSGlzdG9yaWFsIGRlIGVzdGFkb3NcIiBwcm9ncmFtbWVyUmVmPVwiaW52b2ljZS1oaXN0b3J5XCIgYWN0aXZhdG9yPVwicGFyZW50XCI+XG4gICAgICAgICAgICAgICAgPHRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgICAgICAgICAgICA8SW52b2ljZVN0YXRlSGlzdG9yeU92ZXJsYXkgXG4gICAgICAgICAgICAgICAgICAgICAgICB2LWlmPVwic2VsZWN0ZWRJbnZvaWNlXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICA6aW52b2ljZT1cInNlbGVjdGVkSW52b2ljZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBAY2xvc2U9XCJzaG93SGlzdG9yeSA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgPC9PdmVybGF5PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLSBSdWxlcyBPdmVybGF5IC0tPlxuICAgICAgICA8ZGl2IHYtaWY9XCJzZWxlY3RlZEludm9pY2VGb3JSdWxlc1wiPlxuICAgICAgICAgICAgPE92ZXJsYXkgdi1tb2RlbD1cInNob3dSdWxlc092ZXJsYXlcIiB0aXRsZT1cIlJlZ2xhcyBkZSBsYSBGYWN0dXJhXCJcbiAgICAgICAgICAgICAgICBwcm9ncmFtbWVyUmVmPVwiaW52b2ljZS1ydWxlc1wiXG4gICAgICAgICAgICAgICAgOnNjcmltPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjZGVmYXVsdD5cbiAgICAgICAgICAgICAgICAgICAgPEludm9pY2VSdWxlc092ZXJsYXkgOmludm9pY2U9XCJzZWxlY3RlZEludm9pY2VGb3JSdWxlc1wiIC8+XG4gICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvT3ZlcmxheT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICA8L3Ytcm93PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBNb3JlSW5mbyBmcm9tICcuLi9jb21wb25lbnRzL01vcmVJbmZvLnZ1ZSc7XG5pbXBvcnQgT3ZlcmxheSBmcm9tICcuLi9jb21wb25lbnRzL092ZXJsYXkudnVlJztcbmltcG9ydCBTdGF0dXNDaGlwIGZyb20gJy4uL2NvbXBvbmVudHMvU3RhdHVzQ2hpcC52dWUnO1xuaW1wb3J0IENyZWF0ZUludm9pY2VPdmVybGF5IGZyb20gJy4uL2NvbXBvbmVudHMvQ3JlYXRlSW52b2ljZU92ZXJsYXkudnVlJztcbmltcG9ydCBJbnZvaWNlU3RhdGVIaXN0b3J5T3ZlcmxheSBmcm9tICcuLi9jb21wb25lbnRzL0ludm9pY2VTdGF0ZUhpc3RvcnlPdmVybGF5LnZ1ZSc7XG5pbXBvcnQgRHluYW1pY0ZpbHRlclRhYmxlQ2xpZW50IGZyb20gJy4uL2NvbXBvbmVudHMvRHluYW1pY0ZpbHRlclRhYmxlQ2xpZW50LnZ1ZSc7XG5pbXBvcnQgRHluYW1pY0ZpbHRlclRhYmxlQ2FyZHMgZnJvbSAnLi4vY29tcG9uZW50cy9EeW5hbWljRmlsdGVyVGFibGUudnVlJztcbmltcG9ydCB7IHVzZUdsb2JhbFV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvZ2xvYmFscyc7XG5pbXBvcnQgRGF0ZUlucHV0IGZyb20gJy4uL2NvbXBvbmVudHMvRGF0ZUlucHV0LnZ1ZSc7XG5pbXBvcnQgeyB1c2VBdXRoU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvYXV0aCc7XG5pbXBvcnQgeyB1c2VJbnZvaWNlU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvaW52b2ljZSc7XG5pbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgSW52b2ljZVJ1bGVzT3ZlcmxheSBmcm9tICcuL0ludm9pY2VSdWxlc092ZXJsYXkudnVlJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIHByb3BzOiB7XG4gICAgICAgIHNob3dBc0NsaWVudDoge1xuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBhZHZhbmNlSW52b2ljZU5vdzoge1xuICAgICAgICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiAoKSA9PiBjb25zb2xlLmVycm9yKCdObyBzZSBwYXNvIGxhIGZ1bmNpb24gXCJhZHZhbmNlSW52b2ljZU5vd1wiLicpLFxuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0ZUludm9pY2VOb3c6IHtcbiAgICAgICAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogKCkgPT4gY29uc29sZS5lcnJvcignTm8gc2UgcGFzbyBsYSBmdW5jaW9uIFwidmFsaWRhdGVJbnZvaWNlTm93XCIuJyksXG4gICAgICAgIH0sXG4gICAgICAgIHJlZnJlc2hJbnZvaWNlczoge1xuICAgICAgICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiAoKSA9PiBjb25zb2xlLmVycm9yKCdObyBzZSBwYXNvIGxhIGZ1bmNpb24gXCJyZWZyZXNoSW52b2ljZXNcIi4nKSxcbiAgICAgICAgfSxcbiAgICAgICAgZGVsZXRlSW52b2ljZToge1xuICAgICAgICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiAoKSA9PiBjb25zb2xlLmVycm9yKCdObyBzZSBwYXNvIGxhIGZ1bmNpb24gXCJkZWxldGVJbnZvaWNlXCIuJyksXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGVGaWx0ZXJzOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBuYW1lOiAnSW52b2ljZVdpdGhGaWx0ZXJzJyxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIERhdGVJbnB1dCxcbiAgICAgICAgTW9yZUluZm8sXG4gICAgICAgIE92ZXJsYXksXG4gICAgICAgIFN0YXR1c0NoaXAsXG4gICAgICAgIER5bmFtaWNGaWx0ZXJUYWJsZUNsaWVudCxcbiAgICAgICAgRHluYW1pY0ZpbHRlclRhYmxlQ2FyZHMsXG4gICAgICAgIENyZWF0ZUludm9pY2VPdmVybGF5LFxuICAgICAgICBJbnZvaWNlU3RhdGVIaXN0b3J5T3ZlcmxheSxcbiAgICAgICAgSW52b2ljZVJ1bGVzT3ZlcmxheVxuICAgIH0sXG4gICAgc2V0dXAocHJvcHMpIHtcbiAgICAgICAgY29uc3QgYXV0aFN0b3JlID0gdXNlQXV0aFN0b3JlKCk7XG4gICAgICAgIGNvbnN0IGludm9pY2VTdG9yZSA9IHVzZUludm9pY2VTdG9yZSgpO1xuICAgICAgICBjb25zdCB7IHRvYXN0LCBzd2FsLCBmb3JtYXREYXRlLCBmb3JtYXRDdXJyZW5jeSB9ID0gdXNlR2xvYmFsVXRpbHMoKTtcblxuICAgICAgICByZXR1cm4geyBcbiAgICAgICAgICAgIHRvYXN0LCBcbiAgICAgICAgICAgIHN3YWwsIFxuICAgICAgICAgICAgYXV0aFN0b3JlLFxuICAgICAgICAgICAgaW52b2ljZVN0b3JlLFxuICAgICAgICAgICAgZm9ybWF0RGF0ZSxcbiAgICAgICAgICAgIGZvcm1hdEN1cnJlbmN5XG4gICAgICAgIH07XG4gICAgfSxcbiAgICBkYXRhKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2hvd0RldGFpbHM6IGZhbHNlLFxuICAgICAgICAgICAgc2hvd0VkaXRJbnZvaWNlOiBmYWxzZSxcbiAgICAgICAgICAgIHNob3dIaXN0b3J5OiBmYWxzZSxcbiAgICAgICAgICAgIHNlbGVjdGVkSW52b2ljZTogbnVsbCxcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gUnVsZXMgT3ZlcmxheVxuICAgICAgICAgICAgc2hvd1J1bGVzT3ZlcmxheTogZmFsc2UsXG4gICAgICAgICAgICBzZWxlY3RlZEludm9pY2VGb3JSdWxlczogbnVsbCxcblxuICAgICAgICAgICAgLy8gQVBJIGVuZHBvaW50IGZvciBmZXRjaGluZyBpbnZvaWNlc1xuICAgICAgICAgICAgYXBpRW5kcG9pbnQ6IHRoaXMuc2hvd0FzQ2xpZW50IFxuICAgICAgICAgICAgICAgID8gJy91c2Vycy97dXNlcklkfS9jbGllbnRJbnZvaWNlcydcbiAgICAgICAgICAgICAgICA6ICcvdXNlcnMve3VzZXJJZH0vcHJvdmlkZXJJbnZvaWNlcycsXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBGaWx0ZXIgY29uZmlndXJhdGlvblxuICAgICAgICAgICAgLy8gRmlsdGVyIGNvbmZpZ3VyYXRpb24gbW92ZWQgdG8gY29tcHV0ZWQgcHJvcGVydHlcbiAgICAgICAgICAgIGFjdGlvbnNQcm92aWRlcjogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ21kaS1jYXNoJyxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdDb2JyYXIgQWhvcmEnLFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyOiB0aGlzLnByb3ZpZGVyQ2hhcmdlTm93LFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICBjb25kaXRpb246IChpdGVtKSA9PiAhKGl0ZW0uc3RhdHVzID09IDIgJiYgaXRlbS5hZHZhbmNlQWxsb3dlZCkgLy8gRGlzYWJsZWQgaWYgTk9UIGVsaWdpYmxlIHdpdGggYWR2YW5jZSBhbGxvd2VkXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGljb246ICdtZGktZXllJyxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdWZXIgRmFjdHVyYScsXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXI6IHRoaXMudmlld0ludm9pY2UsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncHJpbWFyeSdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ21kaS1wZW5jaWwnLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ0VkaXRhciBGYWN0dXJhJyxcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcjogdGhpcy5lZGl0SW52b2ljZSxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdwcmltYXJ5J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpY29uOiAnbWRpLWhpc3RvcnknLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ1ZlciBDYW1iaW9zJyxcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcjogdGhpcy52aWV3SGlzdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdpbmZvJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgYWN0aW9uc0NsaWVudDogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ21kaS1leWUnLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ1ZlciBGYWN0dXJhJyxcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcjogdGhpcy52aWV3SW52b2ljZSxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdwcmltYXJ5J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpY29uOiAnbWRpLWNoZWNrLWNpcmNsZS1vdXRsaW5lJyxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdWYWxpZGFyIEZhY3R1cmEnLFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyOiB0aGlzLnZhbGlkYXRlSW52b2ljZSxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uOiAoaXRlbSkgPT4gaXRlbS5zdGF0dXMgIT0gNiAvLyBEaXNhYmxlZCBpZiBOT1QgJ1BhcmEgdmFsaWRhcidcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ21kaS1jYXNoLWNoZWNrJyxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdQYWdhciBBaG9yYScsXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXI6IHRoaXMucGF5Tm93LFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3dhcm5pbmcnLFxuICAgICAgICAgICAgICAgICAgICBjb25kaXRpb246IChpdGVtKSA9PiAhWzQsIDUsIDddLmluY2x1ZGVzKHBhcnNlSW50KGl0ZW0uc3RhdHVzKSkgLy8gRGlzYWJsZWQgaWYgTk9UIGluIHRoZXNlIHN0YXRlc1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpY29uOiAnbWRpLXBlbmNpbCcsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnRWRpdGFyIEZhY3R1cmEnLFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyOiB0aGlzLmVkaXRJbnZvaWNlLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3ByaW1hcnknXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGljb246ICdtZGktYm9vay1vcGVuLW91dGxpbmUnLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ1ZlciBSZWdsYXMnLFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyOiB0aGlzLnZpZXdSdWxlcyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdpbmZvJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpY29uOiAnbWRpLWhpc3RvcnknLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ1ZlciBDYW1iaW9zJyxcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcjogdGhpcy52aWV3SGlzdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdpbmZvJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpY29uOiAnbWRpLWRlbGV0ZScsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnQm9ycmFyIEZhY3R1cmEnLFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyOiB0aGlzLmRlbGV0ZUludm9pY2VJdGVtLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ2Vycm9yJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBzdGF0dXNPcHRpb25zOiBbXG4gICAgICAgICAgICAgICAgJ0FkZWxhbnRhZGEnLFxuICAgICAgICAgICAgICAgICdGaW5hbGl6YWRhIHNpbiBhZGVsYW50YXInLFxuICAgICAgICAgICAgICAgICdQYXJhIHZhbGlkYXInLFxuICAgICAgICAgICAgICAgICdObyBlbGVnaWJsZScsXG4gICAgICAgICAgICAgICAgJ1ZhbGlkYWRhJyxcbiAgICAgICAgICAgICAgICAnRWxlZ2libGUnXG4gICAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICB9LFxuICAgIGNvbXB1dGVkOiB7XG4gICAgICAgIHRhZ0NvbXBvbmVudGUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hdXRoU3RvcmUuaXNDbGllbnQgPyAnRHluYW1pY0ZpbHRlclRhYmxlQ2xpZW50JyA6ICdEeW5hbWljRmlsdGVyVGFibGVDYXJkcyc7XG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlckNvbmZpZygpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ZXJwYXJ0eU5hbWVGaWVsZCA9IHRoaXMuc2hvd0FzQ2xpZW50ID8gJ3Byb3ZpZGVyLnNvY2lhbERlbm9taW5hdGlvbicgOiAnY2xpZW50LnNvY2lhbERlbm9taW5hdGlvbic7XG4gICAgICAgICAgICBjb25zdCBjb3VudGVycGFydHlWYXRGaWVsZCA9IHRoaXMuc2hvd0FzQ2xpZW50ID8gJ3Byb3ZpZGVyLnZhdE51bWJlcicgOiAnY2xpZW50LnZhdE51bWJlcic7XG5cbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAndGV4dCcsIGZpZWxkOiBjb3VudGVycGFydHlOYW1lRmllbGQsIGxhYmVsOiAnTm9tYnJlIENvbnRyYXBhcnRlJywgaWNvbjogJ21kaS1tYWduaWZ5Jywgd2lkdGg6IDIgfSxcbiAgICAgICAgICAgICAgICB7IHR5cGU6ICd0ZXh0JywgZmllbGQ6IGNvdW50ZXJwYXJ0eVZhdEZpZWxkLCBsYWJlbDogJ05JRiBDb250cmFwYXJ0ZScsIGljb246ICdtZGktbWFnbmlmeScsIHdpZHRoOiAyIH0sXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAndGV4dCcsIGZpZWxkOiAnaW52b2ljZU51bWJlcicsIGxhYmVsOiAnTsKwIGZhY3R1cmEnLCBpY29uOiAnbWRpLW1hZ25pZnknLCB3aWR0aDogMiB9LFxuICAgICAgICAgICAgICAgIHsgdHlwZTogJ2RhdGUnLCBmaWVsZDogJ2Jyb2FkY2FzdERhdGVbYWZ0ZXJdJywgbGFiZWw6ICdEZXNkZScsIHdpZHRoOiAyIH0sXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAnZGF0ZScsIGZpZWxkOiAnYnJvYWRjYXN0RGF0ZVtiZWZvcmVdJywgbGFiZWw6ICdIYXN0YScsIHdpZHRoOiAyIH0sXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAnZGF0ZScsIGZpZWxkOiAnZXhwaXJhdGlvbkRhdGVbYWZ0ZXJdJywgbGFiZWw6ICdGLiBWZW5jLiBEZXNkZScsIHdpZHRoOiAyIH0sXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAnZGF0ZScsIGZpZWxkOiAnZXhwaXJhdGlvbkRhdGVbYmVmb3JlXScsIGxhYmVsOiAnRi4gVmVuYy4gSGFzdGEnLCB3aWR0aDogMiB9LFxuICAgICAgICAgICAgICAgIHsgdHlwZTogJ3NlbGVjdCcsIGZpZWxkOiAnc3RhdHVzJywgbGFiZWw6ICdFc3RhZG8nLCBpdGVtczogW3sgaXRleHQ6IFwiVG9kb3NcIiwgaXZhbHVlOiAwfSwgeyBpdGV4dDogXCJWYWxpZGFkYXNcIiwgaXZhbHVlOiAxfSwgeyBpdGV4dDogXCJFbGVnaWJsZXNcIiwgaXZhbHVlOiAyfSwgeyBpdGV4dDogXCJObyBlbGVnaWJsZXNcIiwgaXZhbHVlOiAzfSwgeyBpdGV4dDogXCJBZGVsYW50YWRhc1wiLCBpdmFsdWU6IDR9LCB7IGl0ZXh0OiBcIkZpbmFsaXphZGFzIHNpbiBhZGVsYW50YXJcIiwgaXZhbHVlOiA1fSwgeyBpdGV4dDogXCJQYXJhIHZhbGlkYXJcIiwgaXZhbHVlOiA2fSwgeyBpdGV4dDogXCJGaW5hbGl6YWRhcyBkZXNkZSBhZGVsYW50YXJcIiwgaXZhbHVlOiA3fV0sIHdpZHRoOiAzIH0sXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAncmFuZ2UnLCBmaWVsZDogJ3RvdGFsJywgbGFiZWw6ICdUb3RhbCcsIHdpZHRoOiA2IH1cbiAgICAgICAgICAgIF07XG4gICAgICAgIH0sXG4gICAgICAgIGFjdGlvbnMoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaG93QXNDbGllbnQgPyB0aGlzLmFjdGlvbnNDbGllbnQgOiB0aGlzLmFjdGlvbnNQcm92aWRlcjtcbiAgICAgICAgfSxcbiAgICAgICAgY291bnRlclBhcnROYW1lKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hvd0FzQ2xpZW50ID8gJ1Byb3ZlZWRvcicgOiAnQ2xpZW50ZSc7XG4gICAgICAgIH0sXG4gICAgICAgIGhlYWRlcnMoKSB7XG4gICAgICAgICAgICAvLyBCYXNlIGhlYWRlcnMgdGhhdCBhcmUgYWx3YXlzIHZpc2libGVcbiAgICAgICAgICAgIGNvbnN0IGJhc2VIZWFkZXJzID0gW1xuICAgICAgICAgICAgICAgIHsgdGl0bGU6IHRoaXMuY291bnRlclBhcnROYW1lLCBrZXk6IHRoaXMuc2hvd0FzQ2xpZW50ID8gJ3Byb3ZpZGVyU29jaWFsRGVub21pbmF0aW9uJyA6ICdjbGllbnRTb2NpYWxEZW5vbWluYXRpb24nLCBzb3J0YWJsZTogdHJ1ZSwgYWxpZ246ICdzdGFydCcgfSxcbiAgICAgICAgICAgICAgICB7IHRpdGxlOiBgTklGICR7dGhpcy5jb3VudGVyUGFydE5hbWV9YCwga2V5OiAncHJvdmlkZXJWYXROdW1iZXInLCBzb3J0YWJsZTogdHJ1ZSwgYWxpZ246ICdzdGFydCcgfSxcbiAgICAgICAgICAgICAgICB7IHRpdGxlOiAnTsK6IGZhY3R1cmEnLCBrZXk6ICdpbnZvaWNlTnVtYmVyJywgc29ydGFibGU6IHRydWUsIGFsaWduOiAnc3RhcnQnIH0sXG4gICAgICAgICAgICAgICAgeyB0aXRsZTogJ0ZlY2hhIEUuJywga2V5OiAnYnJvYWRjYXN0RGF0ZScsIHNvcnRhYmxlOiB0cnVlLCBhbGlnbjogJ3N0YXJ0JyB9LFxuICAgICAgICAgICAgICAgIHsgdGl0bGU6ICdGLiBWZW5jLicsIGtleTogJ2V4cGlyYXRpb25EYXRlJywgc29ydGFibGU6IHRydWUsIGFsaWduOiAnc3RhcnQnIH0sXG4gICAgICAgICAgICAgICAgeyB0aXRsZTogJ1RvdGFsJywga2V5OiAndG90YWwnLCBzb3J0YWJsZTogdHJ1ZSwgYWxpZ246ICdlbmQnIH0sXG4gICAgICAgICAgICAgICAgeyB0aXRsZTogJ0VzdGFkbycsIGtleTogJ3N0YXR1cycsIHNvcnRhYmxlOiB0cnVlLCBhbGlnbjogJ2NlbnRlcicgfSxcbiAgICAgICAgICAgICAgICB7IHRpdGxlOiAnQWNjaW9uZXMnLCBrZXk6ICdhY3Rpb25zJywgc29ydGFibGU6IGZhbHNlLCBhbGlnbjogJ2NlbnRlcicgfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gU3RhdGVzIHdoZXJlIGRheXMgdG8gZXhwaXJhdGlvbiBhbmQgZGlzY291bnQgYXJlIHJlbGV2YW50XG4gICAgICAgICAgICAvLyBWYWxpZGF0ZWQgLSBFbGlnaWJsZSAtIE5vdCBFbGlnaWJsZSAtIEFkdmFuY2VkIC0gQWR2YW5jZWQgVmFsaWRhdGVkIC0gQWR2YW5jZWQgVmFsaWRhdGVkIFBhaWRcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlc1dpdGhFeHBpcmF0aW9uQW5kRGlzY291bnQgPSBbMSwgMiwgMywgNF07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEFkZCBjb25kaXRpb25hbCBoZWFkZXJzXG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb25hbEhlYWRlcnMgPSBbXTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gQWRkIGRheXMgdG8gZXhwaXJhdGlvbiBoZWFkZXIgb25seSBmb3IgcmVsZXZhbnQgc3RhdGVzXG4gICAgICAgICAgICAvLyBUaGlzIGZpbHRlciB3aWxsIGJlIGFwcGxpZWQgY2xpZW50LXNpZGUgaW4gdGhlIHRhYmxlIGNvbXBvbmVudFxuICAgICAgICAgICAgY29uZGl0aW9uYWxIZWFkZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnRGlhcy9QIFZlbmMuJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdkYXlzVG9FeHBpcmUnLFxuICAgICAgICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGFsaWduOiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgIHNob3dDb25kaXRpb246IChpdGVtKSA9PiBzdGF0ZXNXaXRoRXhwaXJhdGlvbkFuZERpc2NvdW50LmluY2x1ZGVzKGl0ZW0uc3RhdHVzKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEFkZCBkaXNjb3VudCBoZWFkZXIgLSBhbHdheXMgdmlzaWJsZVxuICAgICAgICAgICAgY29uZGl0aW9uYWxIZWFkZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnRHRvLicsXG4gICAgICAgICAgICAgICAga2V5OiAnZGlzY291bnQnLFxuICAgICAgICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGFsaWduOiAnZW5kJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIENvbWJpbmUgYW5kIHJldHVybiBhbGwgaGVhZGVyc1xuICAgICAgICAgICAgLy8gV2UncmUgaW5zZXJ0aW5nIHRoZSBjb25kaXRpb25hbCBoZWFkZXJzIGJlZm9yZSB0aGUgbGFzdCB0d28gaXRlbXMgKEVzdGFkbyBhbmQgQWNjaW9uZXMpXG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIC4uLmJhc2VIZWFkZXJzLnNsaWNlKDAsIGJhc2VIZWFkZXJzLmxlbmd0aCAtIDIpLFxuICAgICAgICAgICAgICAgIC4uLmNvbmRpdGlvbmFsSGVhZGVycyxcbiAgICAgICAgICAgICAgICAuLi5iYXNlSGVhZGVycy5zbGljZShiYXNlSGVhZGVycy5sZW5ndGggLSAyKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgICBjYWxjdWxhdGVUb3RhbERpc2NvdW50KGludm9pY2UpIHtcbiAgICAgICAgICAgIC8vIFN1bSBhbGwgcHJvZHVjdCBkaXNjb3VudHNcbiAgICAgICAgICAgIGlmICghaW52b2ljZS5wcm9kdWN0QXJyYXkgfHwgIUFycmF5LmlzQXJyYXkoaW52b2ljZS5wcm9kdWN0QXJyYXkpKSB7XG4gICAgICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8gaW52b2ljZS5kaXNjb3VudCBpZiBubyBwcm9kdWN0c1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnZvaWNlLmRpc2NvdW50ID8gdGhpcy5mb3JtYXRDdXJyZW5jeShpbnZvaWNlLmRpc2NvdW50KSA6ICctLSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsRGlzY291bnQgPSBpbnZvaWNlLnByb2R1Y3RBcnJheS5yZWR1Y2UoKHN1bSwgcHJvZHVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc2NvdW50ID0gcGFyc2VGbG9hdChwcm9kdWN0LnByb2R1Y3REaXNjb3VudCkgfHwgMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VtICsgZGlzY291bnQ7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHRvdGFsRGlzY291bnQgPiAwID8gdGhpcy5mb3JtYXRDdXJyZW5jeSh0b3RhbERpc2NvdW50KSA6ICctLSc7XG4gICAgICAgIH0sXG4gICAgICAgIHZpZXdJbnZvaWNlKGl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbnZvaWNlID0gaXRlbTtcbiAgICAgICAgICAgIHRoaXMuc2hvd0RldGFpbHMgPSB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0ZUludm9pY2UoaXRlbSkge1xuICAgICAgICAgICAgaWYgKGl0ZW0uc3RhdHVzICE9IDYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LmVycm9yKCdFc3RhIGZhY3R1cmEgbm8gc2UgcHVlZGUgdmFsaWRhci4gU29sbyBsYXMgZmFjdHVyYXMgXCJQYXJhIFZhbGlkYXJcIiBwdWVkZW4gc2VyIHZhbGlkYWRhcy4nKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogJ1ZhbGlkYXInLFxuICAgICAgICAgICAgICAgIGh0bWw6IGBFc3RhIHNlZ3VybyBxdWUgZGVzZWEgdmFsaWRhciBsYSBmYWN0dXJhICR7aXRlbS5pbnZvaWNlTnVtYmVyfT9gLFxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBcIkFjZXB0b1wiLFxuICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IFwiVm9sdmVyXCIsXG4gICAgICAgICAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpY29uOiBcIndhcm5pbmdcIlxuICAgICAgICAgICAgfSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pc0NvbmZpcm1lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlSW52b2ljZU5vdyhpdGVtLmlkKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaERhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHByb3ZpZGVyQ2hhcmdlTm93KGludm9pY2UpIHtcbiAgICAgICAgICAgIGlmIChpbnZvaWNlLnN0YXR1cyAhPSAyIHx8ICFpbnZvaWNlLmFkdmFuY2VBbGxvd2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5lcnJvcignRXN0YSBmYWN0dXJhIG5vIHNlIHB1ZWRlIGNvYnJhciBhaG9yYS4gRGViZSBlc3RhciBlbiBlc3RhZG8gXCJFbGVnaWJsZVwiIHkgdGVuZXIgcGVybWl0aWRvIGVsIGFkZWxhbnRvLicpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gUmVkaXJlY3QgdG8gdGhlIGNoYXJnZSBwYWdlIGZvciBjb25maXJtYXRpb24gYW5kIHNpZ25pbmdcbiAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgbmFtZTogJ0ludm9pY2VDaGFyZ2UnLCBwYXJhbXM6IHsgaW52b2ljZUlkOiBpbnZvaWNlLmlkIH0gfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBheU5vdyhpbnZvaWNlKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5mb3JtYXREYXRlKGludm9pY2UuZXhwaXJhdGlvbkRhdGUpO1xuICAgICAgICAgICAgbGV0IGh0bWwgPSAnJztcblxuICAgICAgICAgICAgc3dpdGNoIChwYXJzZUludChpbnZvaWNlLnN0YXR1cykpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IC8vIEZpbmFsaXphZGEgc2luIGFkZWxhbnRhclxuICAgICAgICAgICAgICAgICAgICBodG1sID0gYEFjZXB0byBsb3MgZGF0b3MgZGUgbGEgZmFjdHVyYSBvcmlnaW5hbCBlIGluZGljbyBxdWUgeWEgaGUgaGVjaG8gbGEgdHJhbnNmZXJlbmNpYSBiYW5jYXJpYSBhbCBwcm92ZWVkb3IgYWwgdGVuZXIgZmVjaGEgZGUgdmVuY2ltaWVudG8gPGI+JHtkYXRlfTwvYj4gcGFzYWRhIGxhIGZhY3R1cmFgO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IC8vIEFkZWxhbnRhZGFcbiAgICAgICAgICAgICAgICAgICAgaHRtbCA9IGBBY2VwdG8gbG9zIGRhdG9zIGRlIGxhIGZhY3R1cmEsIGRlbCBjb250cmF0byB5IGRlIGxhIGZhY3R1cmEgcmVjdGlmaWNhdGl2YSBlIGluZGljbyBxdWUgeWEgaGUgaGVjaG8gbGEgdHJhbnNmZXJlbmNpYSBiYW5jYXJpYSBhbCBwcm92ZWVkb3JgO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDc6IC8vIEZpbmFsaXphZGEgZGVzZGUgYWRlbGFudGFyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwgPSBgQWNlcHRvIGxvcyBkYXRvcyBkZSBsYSBmYWN0dXJhIG9yaWdpbmFsIGUgaW5kaWNvIHF1ZSB5YSBoZSBoZWNobyBsYSB0cmFuc2ZlcmVuY2lhIGJhbmNhcmlhIGFsIGZpbmFuY2lhZG9yIG5vIGEgbGEgY3VlbnRhIGRlbCBwcm92ZWVkb3IgZGFkbyBxdWUgZXhpc3TDrWEgdW5hIHRvbWEgZGUgcmF6w7NuIGFsIGNlZGVyIGxhIGZhY3R1cmEgZW4gZWwgYWRlbGFudG8uYDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogYMK/WWEgaGFzIGhlY2hvIGxhIHRyYW5zZmVyZW5jaWEgZGUgbGEgZmFjdHVyYSAke2ludm9pY2UuaW52b2ljZU51bWJlcn0/YCxcbiAgICAgICAgICAgICAgICBodG1sOiBodG1sLFxuICAgICAgICAgICAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IFwiQWNlcHRvXCIsXG4gICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogXCJDYW5jZWxhclwiLFxuICAgICAgICAgICAgICAgIGljb246IFwic3VjY2Vzc1wiXG4gICAgICAgICAgICB9KS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmlzQ29uZmlybWVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2ljZVN0b3JlLnBheUludm9pY2VOb3coaW52b2ljZS5pZCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hEYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBlZGl0SW52b2ljZShpdGVtKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW52b2ljZSA9IGl0ZW07XG4gICAgICAgICAgICB0aGlzLnNob3dFZGl0SW52b2ljZSA9IHRydWU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgdmlld1J1bGVzKGl0ZW0pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgLy8gRmV0Y2ggdGhlIGludm9pY2UgcnVsZXMgZnJvbSB0aGUgZGVkaWNhdGVkIGVuZHBvaW50XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgL2FwaS9pbnZvaWNlcy8ke2l0ZW0uaWR9L3J1bGVzYCwge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcnVsZXMgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIENvbWJpbmUgaXRlbSBkYXRhIHdpdGggcnVsZXNcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEludm9pY2VGb3JSdWxlcyA9IHsgLi4uaXRlbSwgLi4ucnVsZXMgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93UnVsZXNPdmVybGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBpbnZvaWNlIHJ1bGVzOicsIHJlc3BvbnNlLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgaW52b2ljZSBydWxlczonLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICB2aWV3SGlzdG9yeShpdGVtKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW52b2ljZSA9IGl0ZW07XG4gICAgICAgICAgICB0aGlzLnNob3dIaXN0b3J5ID0gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVsZXRlSW52b2ljZUl0ZW0oaXRlbSkge1xuICAgICAgICAgICAgLy8gYSB0cmF2w6lzIGRlbCB1c2VFbnRpdHkgY29tcG9zYWJsZVxuICAgICAgICAgICAgdGhpcy5kZWxldGVJbnZvaWNlKGl0ZW0pXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hEYXRhKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNvbG8gbW9zdHJhciBlcnJvciBzaSBubyBmdWUgY2FuY2VsYWRvIHBvciBlbCB1c3VhcmlvXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvci5tZXNzYWdlICE9PSAnRGVsZXRpb24gY2FuY2VsbGVkIGJ5IHVzZXIuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZGVsZXRpbmcgaW52b2ljZTonLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LmVycm9yKCdObyBzZSBwdWRvIGVsaW1pbmFyIGxhIGZhY3R1cmEuJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVmcmVzaERhdGEoKSB7XG4gICAgICAgIC8vIENlcnJhciBjdWFscXVpZXIgb3ZlcmxheSBhYmllcnRvIHByaW1lcm9cbiAgICAgICAgICAgIHRoaXMuc2hvd0VkaXRJbnZvaWNlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNob3dEZXRhaWxzID0gZmFsc2U7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFBlcXVlw7FvIGRlbGF5IHBhcmEgYXNlZ3VyYXIgcXVlIGVsIG92ZXJsYXkgc2UgY2llcnJlIGFudGVzIGRlIHJlZnJlc2NhclxuICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLiRyZWZzLmludm9pY2VUYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRyZWZzLmludm9pY2VUYWJsZS5yZWZyZXNoKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoSW52b2ljZXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25EYXRhTG9hZGVkKGl0ZW1zKSB7XG4gICAgICAgICAgICB0aGlzLiRlbWl0KCdkYXRhLWxvYWRlZCcsIGl0ZW1zKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25GaWx0ZXJDaGFuZ2UoZmlsdGVycykge1xuICAgICAgICAgICAgdGhpcy4kZW1pdCgnZmlsdGVyLWNoYW5nZScsIGZpbHRlcnMpO1xuICAgICAgICB9LFxuICAgICAgICBvbkVycm9yKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGludm9pY2VzOicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuLmludm9pY2UtdGFibGUge1xuICAgIG1hcmdpbjogMTZweDtcbn1cblxuLnN0YXR1cy1jaGlwIHtcbiAgICBtaW4td2lkdGg6IDEyMHB4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4uYWN0aW9ucy1jb2x1bW4ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiA4cHg7XG59XG5cbjpkZWVwKC52LWRhdGEtdGFibGUtaGVhZGVyIHRoKSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50O1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbjpkZWVwKC52LWRhdGEtdGFibGVfX3RyOmhvdmVyKSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbn1cblxuOmRlZXAoLnYtZGF0YS10YWJsZSkge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMGUwZTA7XG59XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgICAgIDxicj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXJvdyBqdXN0aWZ5LXNwYWNlLWJldHdlZW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1jaGVjazItY2lyY2xlIG1lLTIgZnMtM1wiPjwvaT5cbiAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtdC0yXCI+PGI+UmVzdW1lbiBnZW5lcmFsPC9iPjwvaDQ+XG4gICAgICAgICAgICAgICAgPHYtYnRuIGljb24gc2l6ZT1cInNtYWxsXCIgdmFyaWFudD1cInRleHRcIiBjbGFzcz1cIm1zLTJcIiA6bG9hZGluZz1cImxvYWRpbmdTdGF0c1wiIEBjbGljaz1cImZldGNoU3RhdHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHYtaWNvbj5tZGktcmVmcmVzaDwvdi1pY29uPlxuICAgICAgICAgICAgICAgIDwvdi1idG4+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDx2LWJ0biBpY29uIGNsYXNzPVwiYnV0dG9uLWRvd25sb2FkXCIgQGNsaWNrPVwiZG93bmxvYWRJbnZvaWNlc0NzdlwiPlxuICAgICAgICAgICAgICAgICAgICA8di1pY29uPm1kaS1kb3dubG9hZDwvdi1pY29uPlxuICAgICAgICAgICAgICAgIDwvdi1idG4+XG4gICAgICAgICAgICAgICAgPHYtc2VsZWN0IGNsYXNzPVwidy03NVwiIGxhYmVsPVwiU2VsZWNjaW9uYXJcIiB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25cIiA6aXRlbXM9XCJzZWxlY3RcIiBzdHlsZT1cIm1pbi13aWR0aDogMjB2dztcIiBjbGVhcmFibGUgZGVsZXRhYmxlLWNoaXBzIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGhpZGUtZGV0YWlscz48L3Ytc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxicj48YnI+XG4gICAgICAgIDx2LXJvdyBjbGFzcz1cImNlbnRlclwiPlxuICAgICAgICAgICAgPHYtY2FyZCBjbGFzcz1cIm0tMSBwLTQgY2VudGVyXCIgd2lkdGg9XCIzMDBcIj5cbiAgICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJteC0yXCI+PGkgY2xhc3M9XCJmcy0xIG15LWljb25zIGJpIGJpLWZpbGUtZWFybWFyay1hcnJvdy11cC1maWxsXCI+PC9pPjwvaDE+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPHA+UGFyYSBhZGVsYW50YXI8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxoMj48Yj57eyBmb3JtYXRDdXJyZW5jeSh0b3RhbFRvQWR2YW5jZSkgfX08L2I+PC9oMj5cbiAgICAgICAgICAgICAgICAgICAgPGIgY2xhc3M9XCJtaW5pLWNhcmRcIj5FbGVnaWJsZXM8L2I+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3YtY2FyZD5cblxuICAgICAgICAgICAgPHYtY2FyZCBjbGFzcz1cIm0tMSBwLTQgY2VudGVyXCIgd2lkdGg9XCIzMDBcIj5cbiAgICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJteC0yXCI+PGkgY2xhc3M9XCJmcy0xIG15LWljb25zIGJpIGJpLWZpbGUtZWFybWFyay1jaGVjay1maWxsXCI+PC9pPjwvaDE+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPHA+QWRlbGFudGFkYXM8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxoMj48Yj57eyBmb3JtYXRDdXJyZW5jeSh0b3RhbEFkdmFuY2VkKSB9fTwvYj48L2gyPlxuICAgICAgICAgICAgICAgICAgICA8YiBjbGFzcz1cIm1pbmktY2FyZFwiPlRvdGFsIGFkZWxhbnRhZG88L2I+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3YtY2FyZD5cblxuICAgICAgICAgICAgPHYtY2FyZCBjbGFzcz1cIm0tMSBwLTQgY2VudGVyXCIgd2lkdGg9XCIzMDBcIj5cbiAgICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJteC0yXCI+PGkgY2xhc3M9XCJmcy0xIG15LWljb25zIGJpIGJpLWNhc2gtY29pblwiPjwvaT48L2gxPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxwPkRlc2N1ZW50b3M8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxoMj48Yj57eyBmb3JtYXRDdXJyZW5jeSh0b3RhbERpc2NvdW50cykgfX08L2I+PC9oMj5cbiAgICAgICAgICAgICAgICAgICAgPGIgY2xhc3M9XCJtaW5pLWNhcmRcIj5Ub3RhbCBhcGxpY2FkbzwvYj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdi1jYXJkPlxuXG4gICAgICAgICAgICA8di1jYXJkIGNsYXNzPVwibS0xIHAtNCBjZW50ZXJcIiB3aWR0aD1cIjM1MFwiPlxuICAgICAgICAgICAgICAgIDxoMSBjbGFzcz1cIm14LTJcIj48aSBjbGFzcz1cImZzLTEgbXktaWNvbnMgYmkgYmktY2xvY2staGlzdG9yeVwiPjwvaT48L2gxPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxwPlBlbmRpZW50ZXMgZGUgcGFnbzwvcD5cbiAgICAgICAgICAgICAgICAgICAgPGgyPjxiPnt7IGZvcm1hdEN1cnJlbmN5KHRvdGFsUGVuZGluZykgfX08L2I+PC9oMj5cbiAgICAgICAgICAgICAgICAgICAgPGIgY2xhc3M9XCJtaW5pLWNhcmRcIj5Qb3IgY29icmFyPC9iPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC92LWNhcmQ+XG4gICAgICAgIDwvdi1yb3c+XG5cbiAgICAgICAgPEludm9pY2VXaXRoRmlsdGVyc1xuICAgICAgICAgICAgcmVmPVwiaW52b2ljZVdpdGhGaWx0ZXJzXCJcbiAgICAgICAgICAgIDppbnZvaWNlcz1cImludm9pY2VzXCJcbiAgICAgICAgICAgIDp2YWxpZGF0ZUludm9pY2VOb3c9XCJ2YWxpZGF0ZUludm9pY2VOb3dcIlxuICAgICAgICAgICAgOnJlZnJlc2hJbnZvaWNlcz1cInJlZnJlc2hJbnZvaWNlc1wiXG4gICAgICAgICAgICA6ZGVsZXRlSW52b2ljZT1cImRlbGV0ZUludm9pY2VcIlxuICAgICAgICAgICAgOmRhdGVGaWx0ZXJzPVwiZGF0ZUZpbHRlcnNcIj5cbiAgICAgICAgPC9JbnZvaWNlV2l0aEZpbHRlcnM+XG4gICAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IE1vcmVJbmZvIGZyb20gJy4uL2NvbXBvbmVudHMvTW9yZUluZm8udnVlJztcbmltcG9ydCBPdmVybGF5IGZyb20gJy4uL2NvbXBvbmVudHMvT3ZlcmxheS52dWUnO1xuaW1wb3J0IEludm9pY2VXaXRoRmlsdGVycyBmcm9tICcuLi9jb21wb25lbnRzL0ludm9pY2VXaXRoRmlsdGVycy52dWUnXG5pbXBvcnQgeyB1c2VFbnRpdHkgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb21wb3NhYmxlcy91c2VFbnRpdHknO1xuaW1wb3J0IHsgSW52b2ljZUltcGwgfSBmcm9tICcuLi9zZXJ2aWNlcy90eXBlcy9pbXBsZW1lbnRhdGlvbnMnO1xuaW1wb3J0IHsgY29tcHV0ZWQsIHJlZiwgb25Nb3VudGVkLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgeyB1c2VJbnZvaWNlQ2xpZW50U3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvaW52b2ljZUNsaWVudC5qcyc7XG5pbXBvcnQgeyB1c2VJbnZvaWNlU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvaW52b2ljZS5qcyc7XG5pbXBvcnQgeyB1c2VHbG9iYWxVdGlscyB9IGZyb20gJy4uL3V0aWxzL2dsb2JhbHMnO1xuaW1wb3J0IHsgdXNlQXV0aFN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL2F1dGgnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgSW52b2ljZVdpdGhGaWx0ZXJzLFxuICAgICAgICBNb3JlSW5mbyxcbiAgICAgICAgT3ZlcmxheSxcbiAgICB9LFxuICAgIG5hbWU6ICdHZW5lcmFsSG9tZScsXG4gICAgc2V0dXAoKSB7XG4gICAgICAgIGNvbnN0IHsgdmFsaWRhdGVJbnZvaWNlTm93IH0gPSB1c2VJbnZvaWNlU3RvcmUoKTtcbiAgICAgICAgY29uc3QgaW52b2ljZUNsaWVudFN0b3JlID0gdXNlSW52b2ljZUNsaWVudFN0b3JlKCk7XG4gICAgICAgIGNvbnN0IHsgdG9hc3QgfSA9IHVzZUdsb2JhbFV0aWxzKCk7XG5cbiAgICAgICAgY29uc3QgeyBlbnRpdHksIHJlZnJlc2hFbnRpdGllczogcmVmcmVzaEludm9pY2VzLCBkZWxldGVFbnRpdHk6IGRlbGV0ZUludm9pY2UgfSA9IHVzZUVudGl0eShJbnZvaWNlSW1wbCwgaW52b2ljZUNsaWVudFN0b3JlKTtcbiAgICAgICAgY29uc3QgaW52b2ljZXMgPSBjb21wdXRlZCgoKSA9PiBpbnZvaWNlQ2xpZW50U3RvcmUuZ2V0SW52b2ljZXMpO1xuICAgICAgICBjb25zdCBhdXRoU3RvcmUgPSB1c2VBdXRoU3RvcmUoKTtcblxuICAgICAgICAvLyBTdGF0cyByZWZzXG4gICAgICAgIGNvbnN0IGxvYWRpbmdTdGF0cyA9IHJlZihmYWxzZSk7XG4gICAgICAgIGNvbnN0IHRvdGFsVG9BZHZhbmNlID0gcmVmKDApO1xuICAgICAgICBjb25zdCB0b3RhbEFkdmFuY2VkID0gcmVmKDApO1xuICAgICAgICBjb25zdCB0b3RhbFBlbmRpbmcgPSByZWYoMCk7XG4gICAgICAgIGNvbnN0IHRvdGFsRGlzY291bnRzID0gcmVmKDApO1xuICAgICAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IHJlZihcIkHDsW8gZW4gY3Vyc29cIik7XG5cbiAgICAgICAgY29uc3QgY2FsY3VsYXRlRGF0ZVJhbmdlID0gKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgdG9kYXkuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgICAgICBsZXQgc3RhcnREYXRlLCBlbmREYXRlO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbikge1xuICAgICAgICAgICAgICAgIGNhc2UgXCLDmmx0aW1vcyAzIGTDrWFzXCI6XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHRvZGF5KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlLnNldERhdGUodG9kYXkuZ2V0RGF0ZSgpIC0gMik7XG4gICAgICAgICAgICAgICAgICAgIGVuZERhdGUgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCLDmmx0aW1vcyA3IGTDrWFzXCI6XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHRvZGF5KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlLnNldERhdGUodG9kYXkuZ2V0RGF0ZSgpIC0gNik7XG4gICAgICAgICAgICAgICAgICAgIGVuZERhdGUgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCLDmmx0aW1vcyAxNSBkw61hc1wiOlxuICAgICAgICAgICAgICAgICAgICBzdGFydERhdGUgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZS5zZXREYXRlKHRvZGF5LmdldERhdGUoKSAtIDE0KTtcbiAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZSA9IG5ldyBEYXRlKHRvZGF5KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIk1lcyBhY3R1YWxcIjpcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlID0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgdG9kYXkuZ2V0TW9udGgoKSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIGVuZERhdGUgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJUcmltZXN0cmUgYWN0dWFsXCI6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRRdWFydGVyID0gTWF0aC5mbG9vcih0b2RheS5nZXRNb250aCgpIC8gMyk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHRvZGF5LmdldEZ1bGxZZWFyKCksIGN1cnJlbnRRdWFydGVyICogMywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGVuZERhdGUgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJTZW1lc3RyZSBhY3R1YWxcIjpcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFNlbWVzdGVyID0gTWF0aC5mbG9vcih0b2RheS5nZXRNb250aCgpIC8gNik7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHRvZGF5LmdldEZ1bGxZZWFyKCksIGN1cnJlbnRTZW1lc3RlciAqIDYsIDEpO1xuICAgICAgICAgICAgICAgICAgICBlbmREYXRlID0gbmV3IERhdGUodG9kYXkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiQcOxbyBlbiBjdXJzb1wiOlxuICAgICAgICAgICAgICAgICAgICBzdGFydERhdGUgPSBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCAwLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZSA9IG5ldyBEYXRlKHRvZGF5KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIlBlcsOtb2RvIHRvdGFsXCI6XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7IC8vIE5vIGZpbHRlclxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBGb3JtYXQgYXMgeXl5eS1tbS1kZFxuICAgICAgICAgICAgY29uc3QgZm9ybWF0RGF0ZSA9IChkYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtb250aCA9IFN0cmluZyhkYXRlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRheSA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYWZ0ZXI6IGZvcm1hdERhdGUoc3RhcnREYXRlKSxcbiAgICAgICAgICAgICAgICBiZWZvcmU6IGZvcm1hdERhdGUoZW5kRGF0ZSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gQ29tcHV0ZWQgcHJvcGVydHkgZm9yIGRhdGUgZmlsdGVycyB0byBwYXNzIHRvIHRhYmxlXG4gICAgICAgIGNvbnN0IGRhdGVGaWx0ZXJzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0ZVJhbmdlID0gY2FsY3VsYXRlRGF0ZVJhbmdlKHNlbGVjdGVkT3B0aW9uLnZhbHVlKTtcbiAgICAgICAgICAgIGlmICghZGF0ZVJhbmdlKSByZXR1cm4ge307XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICdicm9hZGNhc3REYXRlW2FmdGVyXSc6IGRhdGVSYW5nZS5hZnRlcixcbiAgICAgICAgICAgICAgICAnYnJvYWRjYXN0RGF0ZVtiZWZvcmVdJzogZGF0ZVJhbmdlLmJlZm9yZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZmV0Y2hTdGF0cyA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmIChsb2FkaW5nU3RhdHMudmFsdWUpIHJldHVybjtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbG9hZGluZ1N0YXRzLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXNlcklkID0gYXV0aFN0b3JlLnVzZXIuaWQ7XG4gICAgICAgICAgICAgICAgbGV0IHVybCA9IGAvYXBpL3VzZXJzLyR7dXNlcklkfS9pbnZvaWNlcy9jbGllbnQtc3RhdHNgO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVSYW5nZSA9IGNhbGN1bGF0ZURhdGVSYW5nZShzZWxlY3RlZE9wdGlvbi52YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGVSYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICB1cmwgKz0gYD9icm9hZGNhc3REYXRlW2FmdGVyXT0ke2RhdGVSYW5nZS5hZnRlcn0mYnJvYWRjYXN0RGF0ZVtiZWZvcmVdPSR7ZGF0ZVJhbmdlLmJlZm9yZX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldCh1cmwpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsVG9BZHZhbmNlLnZhbHVlID0gcmVzcG9uc2UuZGF0YS50b3RhbFRvQWR2YW5jZSB8fCAwO1xuICAgICAgICAgICAgICAgICAgICB0b3RhbEFkdmFuY2VkLnZhbHVlID0gcmVzcG9uc2UuZGF0YS50b3RhbEFkdmFuY2VkIHx8IDA7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsUGVuZGluZy52YWx1ZSA9IHJlc3BvbnNlLmRhdGEudG90YWxQZW5kaW5nIHx8IDA7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsRGlzY291bnRzLnZhbHVlID0gcmVzcG9uc2UuZGF0YS50b3RhbERpc2NvdW50cyB8fCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgc3RhdHM6JywgZXJyb3IpO1xuICAgICAgICAgICAgICAgIHRvYXN0LmVycm9yKCdFcnJvciBhbCBhY3R1YWxpemFyIGVzdGFkw61zdGljYXMnKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgbG9hZGluZ1N0YXRzLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gV2F0Y2ggZm9yIGNoYW5nZXMgaW4gc2VsZWN0ZWRPcHRpb25cbiAgICAgICAgd2F0Y2goc2VsZWN0ZWRPcHRpb24sICgpID0+IHtcbiAgICAgICAgICAgIGZldGNoU3RhdHMoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgb25Nb3VudGVkKCgpID0+IHtcbiAgICAgICAgICAgIGZldGNoU3RhdHMoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGludm9pY2VzLFxuICAgICAgICAgICAgaW52b2ljZUNsaWVudFN0b3JlLFxuICAgICAgICAgICAgdmFsaWRhdGVJbnZvaWNlTm93LFxuICAgICAgICAgICAgcmVmcmVzaEludm9pY2VzLFxuICAgICAgICAgICAgZGVsZXRlSW52b2ljZSxcbiAgICAgICAgICAgIHRvYXN0LFxuICAgICAgICAgICAgdG90YWxUb0FkdmFuY2UsXG4gICAgICAgICAgICB0b3RhbEFkdmFuY2VkLFxuICAgICAgICAgICAgdG90YWxQZW5kaW5nLFxuICAgICAgICAgICAgdG90YWxEaXNjb3VudHMsXG4gICAgICAgICAgICBsb2FkaW5nU3RhdHMsXG4gICAgICAgICAgICBmZXRjaFN0YXRzLFxuICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb24sXG4gICAgICAgICAgICBkYXRlRmlsdGVyc1xuICAgICAgICB9O1xuICAgIH0sXG4gICAgZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNlbGVjdDogW1wiw5psdGltb3MgMyBkw61hc1wiLCBcIsOabHRpbW9zIDcgZMOtYXNcIiwgXCLDmmx0aW1vcyAxNSBkw61hc1wiLCBcIk1lcyBhY3R1YWxcIiwgXCJUcmltZXN0cmUgYWN0dWFsXCIsIFwiU2VtZXN0cmUgYWN0dWFsXCIsIFwiQcOxbyBlbiBjdXJzb1wiLCBcIlBlcsOtb2RvIHRvdGFsXCJdLFxuICAgICAgICB9ICAgXG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIC8vIE3DqXRvZG8gcGFyYSBmb3JtYXRlYXIgdW5hIGZlY2hhICh1c2FkbyBwYXJhIGVsIENTVilcbiAgICAgICAgZm9ybWF0RGF0ZShkYXRlKSB7XG4gICAgICAgICAgICBpZiAoIWRhdGUpIHJldHVybiAnJztcbiAgICAgICAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICAgICAgICAgIHJldHVybiBgJHtkLmdldERhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9LyR7KGQuZ2V0TW9udGgoKSArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX0vJHtkLmdldEZ1bGxZZWFyKCl9YDtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBNw6l0b2RvIHBhcmEgZm9ybWF0ZWFyIHVuIG7Dum1lcm8gY29tbyBtb25lZGEgKGNvcnJlZ2lkbyBwYXJhIG1hbmVqYXIgZGlmZXJlbnRlcyB0aXBvcylcbiAgICAgICAgZm9ybWF0Q3VycmVuY3koYW1vdW50KSB7XG4gICAgICAgICAgICBpZiAoYW1vdW50ID09PSBudWxsIHx8IGFtb3VudCA9PT0gdW5kZWZpbmVkIHx8IGFtb3VudCA9PT0gJycpIHJldHVybiAnJztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gQ29udmVydGlyIGEgbsO6bWVybyBzaSBlcyBzdHJpbmdcbiAgICAgICAgICAgIGNvbnN0IG51bUFtb3VudCA9IHR5cGVvZiBhbW91bnQgPT09ICdzdHJpbmcnID8gcGFyc2VGbG9hdChhbW91bnQucmVwbGFjZSgnLCcsICcuJykpIDogYW1vdW50O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBWZXJpZmljYXIgc2kgZXMgdW4gbsO6bWVybyB2w6FsaWRvIGRlc3B1w6lzIGRlIGxhIGNvbnZlcnNpw7NuXG4gICAgICAgICAgICBpZiAoaXNOYU4obnVtQW1vdW50KSkgcmV0dXJuICcnO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBGb3JtYXRlYXIgY29uIDIgZGVjaW1hbGVzIHkgdXNhciBjb21hIGNvbW8gc2VwYXJhZG9yIGRlY2ltYWxcbiAgICAgICAgICAgIHJldHVybiBudW1BbW91bnQudG9GaXhlZCgyKS5yZXBsYWNlKCcuJywgJywnKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBNw6l0b2RvIHBhcmEgY29udmVydGlyIGVsIGVzdGFkbyBudW3DqXJpY28gYSB0ZXh0b1xuICAgICAgICBnZXRTdGF0dXNUZXh0KHN0YXR1c0NvZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1c01hcCA9IHtcbiAgICAgICAgICAgICAgICAwOiAnUGVuZGllbnRlJyxcbiAgICAgICAgICAgICAgICAxOiAnVmFsaWRhZGEnLFxuICAgICAgICAgICAgICAgIDI6ICdFbGVnaWJsZScsXG4gICAgICAgICAgICAgICAgMzogJ05vIGVsZWdpYmxlJyxcbiAgICAgICAgICAgICAgICA0OiAnQWRlbGFudGFkYScsXG4gICAgICAgICAgICAgICAgNTogJ0ZpbmFsaXphZGEgc2luIGFkZWxhbnRhcicsXG4gICAgICAgICAgICAgICAgNjogJ1BhcmEgdmFsaWRhcicsXG4gICAgICAgICAgICAgICAgNzogJ0ZpbmFsaXphZGEgZGVzZGUgYWRlbGFudGFyJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBzdGF0dXNNYXBbc3RhdHVzQ29kZV0gfHwgJ0Rlc2Nvbm9jaWRvJztcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBNw6l0b2RvIHBhcmEgZGVzY2FyZ2FyIGxhcyBmYWN0dXJhcyBjb21vIENTVlxuICAgICAgICBkb3dubG9hZEludm9pY2VzQ3N2KCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBPYnRlbmVyIGxhcyBmYWN0dXJhcyBhY3R1YWxlcyAocG9kcsOtYSBzZXIgZGVsIGNvbXBvbmVudGUgaGlqbyBvIGRlbCBzdG9yZSlcbiAgICAgICAgICAgICAgICBsZXQgaW52b2ljZXNUb0V4cG9ydCA9IFtdO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLiRyZWZzLmludm9pY2VXaXRoRmlsdGVycyAmJiB0aGlzLiRyZWZzLmludm9pY2VXaXRoRmlsdGVycy4kcmVmcy5pbnZvaWNlVGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSW50ZW50YXIgb2J0ZW5lciBmYWN0dXJhcyBmaWx0cmFkYXMgc2kgZXN0w6FuIGRpc3BvbmlibGVzXG4gICAgICAgICAgICAgICAgICAgIGludm9pY2VzVG9FeHBvcnQgPSB0aGlzLiRyZWZzLmludm9pY2VXaXRoRmlsdGVycy4kcmVmcy5pbnZvaWNlVGFibGUuaXRlbXMgfHwgW107XG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coYEZhY3R1cmFzIGRlc2RlIGxhIHRhYmxhOicsIGludm9pY2VzVG9FeHBvcnQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENhc28gZmFsbGJhY2s6IHVzYXIgdG9kYXMgbGFzIGZhY3R1cmFzIGRlbCBzdG9yZVxuICAgICAgICAgICAgICAgICAgICBpbnZvaWNlc1RvRXhwb3J0ID0gdGhpcy5pbnZvaWNlcztcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhgRmFjdHVyYXMgZGVzZGUgZWwgc3RvcmU6JywgaW52b2ljZXNUb0V4cG9ydCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFpbnZvaWNlc1RvRXhwb3J0IHx8IGludm9pY2VzVG9FeHBvcnQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3QuaW5mbygnTm8gaGF5IGZhY3R1cmFzIHBhcmEgZXhwb3J0YXInKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIERlZmluaXIgbGFzIGNhYmVjZXJhcyBkZWwgQ1NWXG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IFtcbiAgICAgICAgICAgICAgICAgICAgJ07CsCBGYWN0dXJhJyxcbiAgICAgICAgICAgICAgICAgICAgJ1Byb3ZlZWRvcicsXG4gICAgICAgICAgICAgICAgICAgICdOSUYnLFxuICAgICAgICAgICAgICAgICAgICAnRmVjaGEgRW1pc2nDs24nLFxuICAgICAgICAgICAgICAgICAgICAnRmVjaGEgVmVuY2ltaWVudG8nLFxuICAgICAgICAgICAgICAgICAgICAnRMOtYXMgcGFyYSBWZW5jZXInLFxuICAgICAgICAgICAgICAgICAgICAnVG90YWwnLFxuICAgICAgICAgICAgICAgICAgICAnQmFzZSBJbXBvbmlibGUnLFxuICAgICAgICAgICAgICAgICAgICAnSW1wdWVzdG9zJyxcbiAgICAgICAgICAgICAgICAgICAgJ0Rlc2N1ZW50bycsXG4gICAgICAgICAgICAgICAgICAgICdFc3RhZG8nLFxuICAgICAgICAgICAgICAgICAgICAnQ29uY2VwdG8nXG4gICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgIC8vIENyZWFyIGxhcyBmaWxhcyBkZWwgQ1NWXG4gICAgICAgICAgICAgICAgY29uc3QgY3N2Q29udGVudCA9IGludm9pY2VzVG9FeHBvcnQubWFwKGludm9pY2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52b2ljZS5pbnZvaWNlTnVtYmVyIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW52b2ljZS5wcm92aWRlclNvY2lhbERlbm9taW5hdGlvbiB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGludm9pY2UucHJvdmlkZXJWYXROdW1iZXIgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1hdERhdGUoaW52b2ljZS5icm9hZGNhc3REYXRlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0RGF0ZShpbnZvaWNlLmV4cGlyYXRpb25EYXRlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGludm9pY2UuZGF5c1RvRXhwaXJlIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtYXRDdXJyZW5jeShpbnZvaWNlLnRvdGFsKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0Q3VycmVuY3koaW52b2ljZS50YXhCYXNlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0Q3VycmVuY3koaW52b2ljZS50YXgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtYXRDdXJyZW5jeShpbnZvaWNlLmRpc2NvdW50KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3RhdHVzVGV4dChpbnZvaWNlLnN0YXR1cyksXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZvaWNlLmNvbmNlcHQgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgXS5qb2luKCc7Jyk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBVbmlyIGNhYmVjZXJhcyB5IGZpbGFzXG4gICAgICAgICAgICAgICAgY29uc3QgY3N2ID0gW1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLmpvaW4oJzsnKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uY3N2Q29udGVudFxuICAgICAgICAgICAgICAgIF0uam9pbignXFxuJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBDcmVhciB1biBCbG9iIHkgZ2VuZXJhciBVUkwgcGFyYSBkZXNjYXJnYVxuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbXCJcXHVmZWZmXCIgKyBjc3ZdLCB7IHR5cGU6ICd0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04OycgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gQ3JlYXIgZWxlbWVudG8gYSBwYXJhIGRlc2NhcmdhclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgICAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmwpO1xuICAgICAgICAgICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGBmYWN0dXJhc18ke3RoaXMuc2VsZWN0ZWRPcHRpb24ucmVwbGFjZSgvXFxzL2csICdfJykudG9Mb3dlckNhc2UoKX1fJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTApfS5jc3ZgKTtcbiAgICAgICAgICAgICAgICBsaW5rLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBBw7FhZGlyIGEgRE9NLCBoYWNlciBjbGljIHkgbGltcGlhclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICAgICAgICAgICAgbGluay5jbGljaygpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKCdBcmNoaXZvIENTViBkZXNjYXJnYWRvIGNvcnJlY3RhbWVudGUnKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWwgZ2VuZXJhciBDU1Y6JywgZXJyb3IpO1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3QuZXJyb3IoJ0Vycm9yIGFsIGdlbmVyYXIgZWwgYXJjaGl2byBDU1Y6ICcgKyBlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGU+XG4ubXktaWNvbnMge1xuICAgIGNvbG9yOiAjYThjZjk1O1xufVxuXG4ubWluaS1jYXJkIHtcbiAgICBjb2xvcjogIzYzYTg4NDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTVmM2RmO1xuICAgIHBhZGRpbmc6IDdweDtcbiAgICBib3JkZXItcmFkaXVzOiA1cHg7XG59XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgICAgIDx2LXJvdyBjbGFzcz1cImNlbnRlciBqdXN0aWZ5LXNwYWNlLWJldHdlZW4gbXktM1wiPlxuICAgICAgICAgICAgPHYtcm93IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbnRlciBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZnMtMSBiaSBiaS1wZW9wbGUgbXgtMlwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPGg0PjxiPlByb3ZlZWRvcmVzIHw8L2I+PC9oND5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDx2LXN3aXRjaCBjb2xvcj1cInN1Y2Nlc3NcIiB2YWx1ZT1cInN1Y2Nlc3NcIiBjbGFzcz1cIm14LTFcIiBpbnNldD48L3Ytc3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICA8TW9yZUluZm8gdGl0bGU9XCJSZWdpc3RybyBsaWJyZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtbWVyUmVmPVwiZnJlZS1yZWdpc3RyYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZhdG9yPVwicGFyZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvTW9yZUluZm8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHYtc3dpdGNoIGNvbG9yPVwic3VjY2Vzc1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cImF1dGhTdG9yZS51c2VyLmFsbG93UHJvdmlkZXJzVG9FZGl0RGF0YVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgQGNoYW5nZT1cInVwZGF0ZVByb3ZpZGVyUGVybWlzc2lvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm14LTFcIiBpbnNldD48L3Ytc3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICA8TW9yZUluZm8gdGl0bGU9XCJNb2RpZmljYXIgZGF0b3NcIlxuICAgICAgICAgICAgICAgICAgICBhY3RpdmF0b3I9XCJwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICBwcm9ncmFtbWVyUmVmPVwiZGF0YS1tb2RpZmllZFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC9Nb3JlSW5mbz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdi1yb3c+XG5cbiAgICAgICAgICAgIDx2LXJvdyBjbGFzcz1cImNlbnRlciBtLTIganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgICAgICAgICAgICAgIDx2LWJ0biBpY29uIGNsYXNzPVwiYnV0dG9uLWRvd25sb2FkIG14LTJcIiBAY2xpY2s9XCJkb3dubG9hZFByb3ZpZGVyc0NzdlwiPlxuICAgICAgICAgICAgICAgICAgICA8di1pY29uPm1kaS1kb3dubG9hZDwvdi1pY29uPlxuICAgICAgICAgICAgICAgIDwvdi1idG4+XG5cbiAgICAgICAgICAgICAgICA8di1idG4gaWNvbiBjbGFzcz1cImJ1dHRvbi1leHRyYSBteC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtbGlua1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPENvbm5lY3RTRT48L0Nvbm5lY3RTRT5cbiAgICAgICAgICAgICAgICA8L3YtYnRuPlxuXG4gICAgICAgICAgICAgICAgPHYtYnRuIGljb24gY2xhc3M9XCJidXR0b24tZXh0cmEgbXgtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWFycm93LXVwLWZyb20tYnJhY2tldFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPE92ZXJsYXkgdGl0bGU9XCJJbXBvcnRhciBQcm92ZWVkb3Jlc1wiIGFjdGl2YXRvcj1cInBhcmVudFwiIHByb2dyYW1tZXJSZWY9XCJ0ZXh0LXByb3ZpZGVyc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlYWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dFByb3ZpZGVycz48L1RleHRQcm92aWRlcnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L092ZXJsYXk+XG4gICAgICAgICAgICAgICAgPC92LWJ0bj5cblxuICAgICAgICAgICAgICAgIDx2LWJ0biBpY29uIGNsYXNzPVwiYnV0dG9uLWV4dHJhIG14LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHYtaWNvbj5tZGktcGx1czwvdi1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8T3ZlcmxheVxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJBw7FhZGlyIHByb3ZlZWRvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0b3I9XCJwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbW1lclJlZj1cImNyZWF0ZS1wcm92aWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwic2hvd0NyZWF0ZVByb3ZpZGVyT3ZlcmxheVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBAc2F2ZWQ9XCJyZWZyZXNoRGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDcmVhdGVQcm92aWRlcj48L0NyZWF0ZVByb3ZpZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9PdmVybGF5PlxuICAgICAgICAgICAgICAgIDwvdi1idG4+XG4gICAgICAgICAgICA8L3Ytcm93PlxuICAgICAgICA8L3Ytcm93PlxuXG4gICAgICAgIDx2LXJvdz5cbiAgICAgICAgICAgIDx2LWNvbD5cbiAgICAgICAgICAgICAgICA8di1jYXJkPlxuICAgICAgICAgICAgICAgICAgICA8di1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+UHJvdmVlZG9yZXM8L2I+XG4gICAgICAgICAgICAgICAgICAgIDwvdi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPER5bmFtaWNGaWx0ZXJUYWJsZUNsaWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZj1cInByb3ZpZGVyc1RhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6YXBpLWVuZHBvaW50PVwiYXBpRW5kcG9pbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpmaWx0ZXItY29uZmlnPVwiZmlsdGVyQ29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6aGVhZGVycz1cImhlYWRlcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDphY3Rpb25zPVwidGFibGVBY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZGF0YS1sb2FkZWQ9XCJvbkRhdGFMb2FkZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBlcnJvcj1cIm9uRXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ2F0ZWdvcmllcyBjb2x1bW4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlICNpdGVtLnVzZXJDYXRlZ29yaWVzPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHYtY2hpcCB2LWZvcj1cImNhdGVnb3J5IGluIGl0ZW0udXNlckNhdGVnb3JpZXNcIiA6a2V5PVwiY2F0ZWdvcnkuaWRcIiBjbGFzcz1cIm1hLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgc2l6ZT1cInNtYWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjYXRlZ29yeS5uYW1lID8/ICctJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3YtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9EeW5hbWljRmlsdGVyVGFibGVDbGllbnQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8L3YtY2FyZD5cbiAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgIDwvdi1yb3c+XG5cbiAgICAgICAgPCEtLSBFZGl0IFByb3ZpZGVyIE92ZXJsYXkgLS0+XG4gICAgICAgIDxkaXYgdi1pZj1cInNlbGVjdGVkUHJvdmlkZXJcIj5cbiAgICAgICAgICAgIDxPdmVybGF5IHYtbW9kZWw9XCJzaG93RWRpdE92ZXJsYXlcIiB0aXRsZT1cIkVkaXRhciBwcm92ZWVkb3JcIlxuICAgICAgICAgICAgcHJvZ3JhbW1lclJlZj1cImNyZWF0ZS1wcm92aWRlclwiXG4gICAgICAgICAgICBAc2F2ZWQ9XCJyZWZyZXNoRGF0YVwiPlxuICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjZGVmYXVsdD5cbiAgICAgICAgICAgICAgICAgICAgPENyZWF0ZVByb3ZpZGVyIDpleGlzdGluZ1Byb3ZpZGVyPVwic2VsZWN0ZWRQcm92aWRlclwiIC8+XG4gICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvT3ZlcmxheT5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG5cbjxzY3JpcHQ+XG5pbXBvcnQgQ3JlYXRlUHJvdmlkZXIgZnJvbSAnLi4vY29tcG9uZW50cy9DcmVhdGVQcm92aWRlci52dWUnO1xuaW1wb3J0IE1vcmVJbmZvIGZyb20gJy4uL2NvbXBvbmVudHMvTW9yZUluZm8udnVlJztcbmltcG9ydCBPdmVybGF5IGZyb20gJy4uL2NvbXBvbmVudHMvT3ZlcmxheS52dWUnO1xuaW1wb3J0IFRleHRQcm92aWRlcnMgZnJvbSAnLi4vY29tcG9uZW50cy9UZXh0UHJvdmlkZXJzLnZ1ZSc7XG5pbXBvcnQgRHluYW1pY0ZpbHRlclRhYmxlQ2xpZW50IGZyb20gJy4uL2NvbXBvbmVudHMvRHluYW1pY0ZpbHRlclRhYmxlQ2xpZW50LnZ1ZSc7XG5pbXBvcnQgeyB1c2VQcm92aWRlclN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL3Byb3ZpZGVyJztcbmltcG9ydCB7IHVzZUJhbmtBY2NvdW50U3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvYmFua0FjY291bnQnO1xuaW1wb3J0IHsgdXNlRW50aXR5IH0gZnJvbSAnLi4vc2VydmljZXMvY29tcG9zYWJsZXMvdXNlRW50aXR5JztcbmltcG9ydCB7IFByb3ZpZGVySW1wbCB9IGZyb20gJy4uL3NlcnZpY2VzL3R5cGVzL2ltcGxlbWVudGF0aW9ucyc7XG5pbXBvcnQgeyB1c2VHbG9iYWxVdGlscyB9IGZyb20gJy4uL3V0aWxzL2dsb2JhbHMnO1xuaW1wb3J0IHsgY29tcHV0ZWQsIHJlZiwgb25Nb3VudGVkIH0gZnJvbSAndnVlJztcbmltcG9ydCBDb25uZWN0U0UgZnJvbSAnLi4vY29tcG9uZW50cy9Db25uZWN0U0UudnVlJztcblxuaW1wb3J0IHsgdXNlQXV0aFN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL2F1dGgnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9pbXBsZW1lbnRhdGlvbnMvdXNlci91c2VyU2VydmljZSc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ1Byb3ZpZGVycycsXG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBDcmVhdGVQcm92aWRlcixcbiAgICAgICAgTW9yZUluZm8sXG4gICAgICAgIE92ZXJsYXksXG4gICAgICAgIER5bmFtaWNGaWx0ZXJUYWJsZUNsaWVudCxcbiAgICAgICAgVGV4dFByb3ZpZGVycyxcbiAgICAgICAgQ29ubmVjdFNFXG4gICAgfSxcbiAgICBzZXR1cCgpIHtcbiAgICAgICAgY29uc3QgZW1haWxSdWxlcyA9IFtcbiAgICAgICAgICAgIHYgPT4gISF2IHx8ICdFbCBjb3JyZW8gZXMgcmVxdWVyaWRvJyxcbiAgICAgICAgICAgIHYgPT4gLy4rQC4rXFwuLisvLnRlc3QodikgfHwgJ0luZ3Jlc2UgdW4gY29ycmVvIHbDoWxpZG8nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IHsgc3dhbCwgdG9hc3QgfSA9IHVzZUdsb2JhbFV0aWxzKCk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyU3RvcmUgPSB1c2VQcm92aWRlclN0b3JlKCk7XG4gICAgICAgIGNvbnN0IGJhbmtBY2NvdW50U3RvcmUgPSB1c2VCYW5rQWNjb3VudFN0b3JlKCk7XG4gICAgICAgIGNvbnN0IGF1dGhTdG9yZSA9IHVzZUF1dGhTdG9yZSgpO1xuICAgICAgICBjb25zdCB1c2VyU2VydmljZSA9IG5ldyBVc2VyU2VydmljZSgpO1xuXG4gICAgICAgIGNvbnN0IHsgZW50aXR5LCByZWZyZXNoRW50aXRpZXM6IHJlZnJlc2hQcm92aWRlcnMsIGRlbGV0ZUVudGl0eTogZGVsZXRlUHJvdmlkZXIgfSA9IHVzZUVudGl0eShQcm92aWRlckltcGwsIHByb3ZpZGVyU3RvcmUpO1xuXG5cbiAgICAgICAgLy8gQ2FyZ2FyIGN1ZW50YXMgYmFuY2FyaWFzIGFsIG1vbnRhciBlbCBjb21wb25lbnRlXG4gICAgICAgIC8vIEVzdG8gZXMgbmVjZXNhcmlvIHBhcmEgZXZpdGFyIGVycm9yZXMgYWwgYWJyaXIgZWwgbW9kYWwgQ3JlYXRlUHJvdmlkZXJcbiAgICAgICAgLy8gQ2FyZ2FyIGN1ZW50YXMgYmFuY2FyaWFzIGFsIG1vbnRhciBlbCBjb21wb25lbnRlXG4gICAgICAgIC8vIEVzdG8gZXMgbmVjZXNhcmlvIHBhcmEgZXZpdGFyIGVycm9yZXMgYWwgYWJyaXIgZWwgbW9kYWwgQ3JlYXRlUHJvdmlkZXJcbiAgICAgICAgb25Nb3VudGVkKCgpID0+IHtcbiAgICAgICAgICAgIGJhbmtBY2NvdW50U3RvcmUuZmV0Y2hBbGwoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdXBkYXRlUHJvdmlkZXJQZXJtaXNzaW9uID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBhdGNoKGAvYXBpL3VzZXJzLyR7YXV0aFN0b3JlLnVzZXIuaWR9YCwge1xuICAgICAgICAgICAgICAgICAgICBhbGxvd1Byb3ZpZGVyc1RvRWRpdERhdGE6IGF1dGhTdG9yZS51c2VyLmFsbG93UHJvdmlkZXJzVG9FZGl0RGF0YVxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9tZXJnZS1wYXRjaCtqc29uJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB1c2VyIGluIHRoZSBzdG9yZSB3aXRoIHRoZSByZXNwb25zZSBkYXRhXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihhdXRoU3RvcmUudXNlciwgcmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHRvYXN0KCdQZXJtaXNvcyBhY3R1YWxpemFkb3MgY29ycmVjdGFtZW50ZScsICdzdWNjZXNzJyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIHRvYXN0KCdFcnJvciBhbCBhY3R1YWxpemFyIHBlcm1pc29zJywgJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgLy8gUmV2ZXJ0IHRoZSB0b2dnbGUgb24gZXJyb3JcbiAgICAgICAgICAgICAgICBhdXRoU3RvcmUudXNlci5hbGxvd1Byb3ZpZGVyc1RvRWRpdERhdGEgPSAhYXV0aFN0b3JlLnVzZXIuYWxsb3dQcm92aWRlcnNUb0VkaXREYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF1dGhTdG9yZSxcbiAgICAgICAgICAgIHVwZGF0ZVByb3ZpZGVyUGVybWlzc2lvbixcbiAgICAgICAgICAgIGVtYWlsUnVsZXMsXG4gICAgICAgICAgICBzd2FsLFxuICAgICAgICAgICAgdG9hc3QsXG4gICAgICAgICAgICByZWZyZXNoUHJvdmlkZXJzLFxuICAgICAgICAgICAgZGVsZXRlUHJvdmlkZXIsXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBkYXRhKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2VsZWN0ZWRQcm92aWRlcjogbnVsbCxcbiAgICAgICAgICAgIHNob3dFZGl0T3ZlcmxheTogZmFsc2UsXG4gICAgICAgICAgICBzaG93Q3JlYXRlUHJvdmlkZXJPdmVybGF5OiBmYWxzZSxcblxuICAgICAgICAgICAgLy8gQVBJIGVuZHBvaW50XG4gICAgICAgICAgICBhcGlFbmRwb2ludDogJy91c2Vycy97dXNlcklkfS9wcm92aWRlcnMnLFxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBGaWx0ZXIgY29uZmlndXJhdGlvblxuICAgICAgICAgICAgZmlsdGVyQ29uZmlnOiBbXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAndGV4dCcsIGZpZWxkOiAnc29jaWFsRGVub21pbmF0aW9uJywgbGFiZWw6ICdOb21icmUgUHJvdmVlZG9yJywgaWNvbjogJ21kaS1tYWduaWZ5Jywgd2lkdGg6IDMgfSxcbiAgICAgICAgICAgICAgICB7IHR5cGU6ICd0ZXh0JywgZmllbGQ6ICdjb21wYW55TmlmJywgbGFiZWw6ICdOSUYnLCBpY29uOiAnbWRpLW1hZ25pZnknLCB3aWR0aDogMyB9LFxuICAgICAgICAgICAgICAgIHsgdHlwZTogJ3RleHQnLCBmaWVsZDogJ2NhdGVnb3JpZXNBc3NpZ25lZC5uYW1lJywgbGFiZWw6ICdDYXRlZ29yw61hcycsIGljb246ICdtZGktbWFnbmlmeScsIHdpZHRoOiAzIH0sXG4gICAgICAgICAgICAgICAgLyogeyB0eXBlOiAndGV4dCcsIGZpZWxkOiAncHJvdmlkZXJTdGF0dXMnLCBsYWJlbDogJ0VzdGFkbycsIGljb246ICdtZGktbWFnbmlmeScsIHdpZHRoOiAzIH0sXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAndGV4dCcsIGZpZWxkOiAncGF5bWVudE1ldGhvZCcsIGxhYmVsOiAnRm9ybWEgRGUgUGFnbycsIGljb246ICdtZGktbWFnbmlmeScsIHdpZHRoOiAzIH0sICovXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBUYWJsZSBoZWFkZXJzXG4gICAgICAgICAgICBoZWFkZXJzOiBbXG4gICAgICAgICAgICAgICAgeyB0aXRsZTogJ1Byb3ZlZWRvcicsIGtleTogJ3NvY2lhbERlbm9taW5hdGlvbicsIHNvcnRhYmxlOiB0cnVlLCBhbGlnbjogJ3N0YXJ0JyB9LFxuICAgICAgICAgICAgICAgIHsgdGl0bGU6ICdOSUYnLCBrZXk6ICdjb21wYW55TmlmJywgc29ydGFibGU6IHRydWUsIGFsaWduOiAnc3RhcnQnIH0sXG4gICAgICAgICAgICAgICAgeyB0aXRsZTogJ0NpdWRhZCcsIGtleTogJ2NpdHknLCBzb3J0YWJsZTogdHJ1ZSwgYWxpZ246ICdzdGFydCcgfSxcbiAgICAgICAgICAgICAgICB7IHRpdGxlOiAnRW1haWwnLCBrZXk6ICdjb250YWN0UGVyc29uRW1haWwnLCBzb3J0YWJsZTogdHJ1ZSwgYWxpZ246ICdzdGFydCcgfSxcbiAgICAgICAgICAgICAgICB7IHRpdGxlOiAnQ2F0ZWdvcsOtYXMnLCBrZXk6ICd1c2VyQ2F0ZWdvcmllcycsIHNvcnRhYmxlOiBmYWxzZSwgYWxpZ246ICdzdGFydCcgfSxcbiAgICAgICAgICAgICAgICB7IHRpdGxlOiAnQWNjaW9uZXMnLCBrZXk6ICdhY3Rpb25zJywgc29ydGFibGU6IGZhbHNlLCBhbGlnbjogJ2NlbnRlcicgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gVGFibGUgYWN0aW9uc1xuICAgICAgICAgICAgdGFibGVBY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpY29uOiAnbWRpLWxpbmsnLFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyOiB0aGlzLnNob3dBY2Nlc3NMaW5rLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ2luZm8nXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGljb246ICdtZGktcGVuY2lsJyxcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcjogdGhpcy5lZGl0UHJvdmlkZXIsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncHJpbWFyeSdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ21kaS1kZWxldGUnLFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyOiB0aGlzLmNvbmZpcm1EZWxldGVQcm92aWRlcixcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdlcnJvcidcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25uZWN0Rm9ybToge1xuICAgICAgICAgICAgICAgIG5hbWU6ICcnLFxuICAgICAgICAgICAgICAgIHN1cm5hbWU6ICcnLFxuICAgICAgICAgICAgICAgIGVtYWlsOiAnJyxcbiAgICAgICAgICAgICAgICBwaG9uZTogJycsXG4gICAgICAgICAgICAgICAgc29mdHdhcmU6ICcnLFxuICAgICAgICAgICAgICAgIGNvbW1lbnRzOiAnJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgICAvLyBNw6l0b2RvIHBhcmEgZGVzY2FyZ2FyIGxvcyBwcm92ZWVkb3JlcyBjb21vIENTVlxuICAgICAgICBkb3dubG9hZFByb3ZpZGVyc0NzdigpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgLy8gT2J0ZW5lciBsb3MgcHJvdmVlZG9yZXMgYWN0dWFsZXNcbiAgICAgICAgICAgICAgICBsZXQgcHJvdmlkZXJzVG9FeHBvcnQgPSBbXTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4kcmVmcy5wcm92aWRlcnNUYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBPYnRlbmVyIGxvcyBwcm92ZWVkb3JlcyBmaWx0cmFkb3MgZGUgbGEgdGFibGFcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXJzVG9FeHBvcnQgPSB0aGlzLiRyZWZzLnByb3ZpZGVyc1RhYmxlLml0ZW1zIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGBQcm92ZWVkb3JlcyBkZXNkZSBsYSB0YWJsYTonLCBwcm92aWRlcnNUb0V4cG9ydCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2kgbm8gc2UgZW5jdWVudHJhIGxhIHJlZmVyZW5jaWEgYSBsYSB0YWJsYSwgbW9zdHJhciB1biBlcnJvclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LmVycm9yKCdObyBzZSBwdWVkZW4gb2J0ZW5lciBsb3MgcHJvdmVlZG9yZXMgYWN0dWFsZXMnKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghcHJvdmlkZXJzVG9FeHBvcnQgfHwgcHJvdmlkZXJzVG9FeHBvcnQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3QuaW5mbygnTm8gaGF5IHByb3ZlZWRvcmVzIHBhcmEgZXhwb3J0YXInKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIERlZmluaXIgbGFzIGNhYmVjZXJhcyBkZWwgQ1NWXG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IFtcbiAgICAgICAgICAgICAgICAgICAgJ1Byb3ZlZWRvcicsXG4gICAgICAgICAgICAgICAgICAgICdOSUYnLFxuICAgICAgICAgICAgICAgICAgICAnQ2l1ZGFkJyxcbiAgICAgICAgICAgICAgICAgICAgJ0VtYWlsJyxcbiAgICAgICAgICAgICAgICAgICAgJ1RlbMOpZm9ubycsXG4gICAgICAgICAgICAgICAgICAgICdEaXJlY2Npw7NuJyxcbiAgICAgICAgICAgICAgICAgICAgJ0PDs2RpZ28gUG9zdGFsJyxcbiAgICAgICAgICAgICAgICAgICAgJ1BlcnNvbmEgZGUgQ29udGFjdG8nLFxuICAgICAgICAgICAgICAgICAgICAnQ2F0ZWdvcsOtYXMnXG4gICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgIC8vIENyZWFyIGxhcyBmaWxhcyBkZWwgQ1NWXG4gICAgICAgICAgICAgICAgY29uc3QgY3N2Q29udGVudCA9IHByb3ZpZGVyc1RvRXhwb3J0Lm1hcChwcm92aWRlciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE9idGVuZXIgY2F0ZWdvcsOtYXMgY29tbyB0ZXh0b1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gcHJvdmlkZXIudXNlckNhdGVnb3JpZXMgJiYgcHJvdmlkZXIudXNlckNhdGVnb3JpZXMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBwcm92aWRlci51c2VyQ2F0ZWdvcmllcy5tYXAoY2F0ID0+IGNhdC5uYW1lKS5qb2luKCcsICcpXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyLnNvY2lhbERlbm9taW5hdGlvbiB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyLmNvbXBhbnlOaWYgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlci5jaXR5IHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXIuY29udGFjdFBlcnNvbkVtYWlsIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXIuY29udGFjdFBlcnNvblBob25lIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXIuYWRkcmVzcyB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyLnBvc3RhbENvZGUgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlci5jb250YWN0UGVyc29uTmFtZSB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3JpZXNcbiAgICAgICAgICAgICAgICAgICAgXS5qb2luKCc7Jyk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBVbmlyIGNhYmVjZXJhcyB5IGZpbGFzXG4gICAgICAgICAgICAgICAgY29uc3QgY3N2ID0gW1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLmpvaW4oJzsnKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uY3N2Q29udGVudFxuICAgICAgICAgICAgICAgIF0uam9pbignXFxuJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBDcmVhciB1biBCbG9iIHkgZ2VuZXJhciBVUkwgcGFyYSBkZXNjYXJnYVxuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbXCJcXHVmZWZmXCIgKyBjc3ZdLCB7IHR5cGU6ICd0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04OycgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gQ3JlYXIgZWxlbWVudG8gYSBwYXJhIGRlc2NhcmdhclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgICAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmwpO1xuICAgICAgICAgICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGBwcm92ZWVkb3Jlc18ke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCl9LmNzdmApO1xuICAgICAgICAgICAgICAgIGxpbmsuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIEHDsWFkaXIgYSBET00sIGhhY2VyIGNsaWMgeSBsaW1waWFyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgICAgICAgICAgICBsaW5rLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoJ0FyY2hpdm8gQ1NWIGRlIHByb3ZlZWRvcmVzIGRlc2NhcmdhZG8gY29ycmVjdGFtZW50ZScpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBhbCBnZW5lcmFyIENTViBkZSBwcm92ZWVkb3JlczonLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5lcnJvcignRXJyb3IgYWwgZ2VuZXJhciBlbCBhcmNoaXZvIENTVjogJyArIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgc2hvd0FjY2Vzc0xpbmsoaXRlbSkge1xuICAgICAgICAgICAgdGhpcy5zd2FsLmZpcmUoe1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnTGluayBkZSBpbmljaW8gZGVsIHByb3ZlZWRvcicsXG4gICAgICAgICAgICAgICAgaHRtbDogYDxzbWFsbD5FbCBsaW5rIGRlIDxiPlwiUmVnaXN0cm9cIi9cImluaWNpbyBkZSBzZXNpb25cIjwvYj4gZGVsIHByb3ZlZWRvciBlczogPGEgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9JyR7aXRlbS5wcm92aWRlckxpbmt9Jz4ke2l0ZW0ucHJvdmlkZXJMaW5rfTwvYT48L3NtYWxsPmAsXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IFwiQWNlcHRvXCIsXG4gICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogXCJWb2x2ZXJcIixcbiAgICAgICAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxuICAgICAgICAgICAgICAgIGljb246IFwid2FybmluZ1wiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIGVkaXRQcm92aWRlcihpdGVtKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvdmlkZXIgPSBpdGVtO1xuICAgICAgICAgICAgdGhpcy5zaG93RWRpdE92ZXJsYXkgPSB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgY29uZmlybURlbGV0ZVByb3ZpZGVyKGl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlUHJvdmlkZXIoaXRlbSkudGhlbigoKSA9PiB0aGlzLnJlZnJlc2hEYXRhKCkpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgcmVmcmVzaERhdGEoKSB7XG4gICAgICAgICAgICAvLyBDZXJyYXIgY3VhbHF1aWVyIG92ZXJsYXkgYWJpZXJ0b1xuICAgICAgICAgICAgdGhpcy5zaG93Q3JlYXRlUHJvdmlkZXJPdmVybGF5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNob3dFZGl0T3ZlcmxheSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBFc3BlcmFyIGEgcXVlIFZ1ZSBhY3R1YWxpY2UgZWwgRE9NIHkgcmVmcmVzY2FyIGxhIHRhYmxhXG4gICAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuJHJlZnMucHJvdmlkZXJzVGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kcmVmcy5wcm92aWRlcnNUYWJsZS5yZWZyZXNoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICBvbkRhdGFMb2FkZWQoZGF0YSkge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhgTG9hZGVkICR7ZGF0YS5sZW5ndGh9IHByb3ZpZGVyc2ApO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgb25FcnJvcihlcnJvcikge1xuICAgICAgICAgICAgdGhpcy50b2FzdC5lcnJvcignRXJyb3IgYWwgY2FyZ2FyIHByb3ZlZWRvcmVzOiAnICsgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxufTtcbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuLmJ1dHRvbi1leHRyYSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzI0M2I0NDtcbn1cblxuOmRlZXAoLnYtZGF0YS10YWJsZS1oZWFkZXIgdGgpIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHRleHQtdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuOmRlZXAoLnYtZGF0YS10YWJsZV9fdHI6aG92ZXIpIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xufVxuXG46ZGVlcCgudi1kYXRhLXRhYmxlKSB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcbn1cblxuLnRhYmxlLXdyYXBwZXIge1xuICB3aWR0aDogMTAwJTtcbiAgb3ZlcmZsb3cteDogYXV0bztcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xufVxuPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG4gICAgPHYtZm9ybT5cbiAgICAgICAgPGJyPlxuICAgICAgICA8di1jYXJkPlxuICAgICAgICAgICAgPHYtY29sPlxuICAgICAgICAgICAgICAgIDx2LXJvdz5cbiAgICAgICAgICAgICAgICAgICAgPHYtY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPkhpc3RvcmlhbCBkZSBjYW1iaW9zIGRlIGVzdGFkbzwvYj5cbiAgICAgICAgICAgICAgICAgICAgPC92LWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgPC92LXJvdz5cblxuICAgICAgICAgICAgICAgIDwhLS0gRHluYW1pYyBGaWx0ZXIgVGFibGUgLS0+XG4gICAgICAgICAgICAgICAgPHYtZGF0YS10YWJsZVxuICAgICAgICAgICAgICAgICAgICA6aGVhZGVycz1cImhlYWRlcnNcIlxuICAgICAgICAgICAgICAgICAgICA6aXRlbXM9XCJzdGF0ZUhpc3RvcnlcIlxuICAgICAgICAgICAgICAgICAgICA6bG9hZGluZz1cImxvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICA6aXRlbXMtcGVyLXBhZ2U9XCIxMFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZWxldmF0aW9uLTFcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBGb3JtYXQgZGF0ZSBhbmQgdGltZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlICNpdGVtLmNyZWF0ZWRBdD1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtYXREYXRlVGltZShpdGVtLmNyZWF0ZWRBdCkgfX1cbiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIE9sZCBzdGF0ZSBjb2x1bW4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5vbGRTdGF0ZT1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U3RhdHVzQ2hpcCA6c3RhdHVzPVwiaXRlbS5vbGRTdGF0ZVwiPjwvU3RhdHVzQ2hpcD5cbiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIE5ldyBzdGF0ZSBjb2x1bW4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5uZXdTdGF0ZT1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U3RhdHVzQ2hpcCA6c3RhdHVzPVwiaXRlbS5uZXdTdGF0ZVwiPjwvU3RhdHVzQ2hpcD5cbiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIENoYW5nZSB0eXBlIGNvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlICNpdGVtLmNoYW5nZVR5cGU9XCJ7IGl0ZW0gfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHYtY2hpcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjb2xvcj1cIml0ZW0uY2hhbmdlVHlwZSA9PT0gJ2F1dG9tYXRpYycgPyAnaW5mbycgOiAnd2FybmluZydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1jb2xvcj1cIndoaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmNoYW5nZVR5cGUgPT09ICdhdXRvbWF0aWMnID8gJ0F1dG9tw6F0aWNvJyA6ICdNYW51YWwnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3YtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIEludm9pY2UgaW5mbyBjb2x1bW4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS5pbnZvaWNlPVwieyBpdGVtIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48Yj57eyBpdGVtLmludm9pY2UuaW52b2ljZU51bWJlciB8fCAnTi9BJyB9fTwvYj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jYXB0aW9uXCI+e3sgaXRlbS5pbnZvaWNlLnByb3ZpZGVyU29jaWFsRGVub21pbmF0aW9uIHx8ICdOL0EnIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gQWN0aW9ucyBjb2x1bW4gKEhpc3TDs3JpY28pIC0tPlxuICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI2l0ZW0uYWN0aW9ucz1cInsgaXRlbSB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8di1idG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJpbmZvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz1cInZpZXdJbnZvaWNlSGlzdG9yeShpdGVtLmludm9pY2UpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkhpc3RvcmlhbCBkZSBlc3RhZG9zIGRlIGxhIGZhY3R1cmFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2LWljb24+bWRpLWhpc3Rvcnk8L3YtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1idG4+XG4gICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8IS0tIE5vIGRhdGEgbWVzc2FnZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlICNuby1kYXRhPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHBhLTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5ObyBoYXkgZGF0b3MgZGUgaGlzdG9yaWFsIHBhcmEgbGEgZmVjaGEgc2VsZWNjaW9uYWRhLjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtY2FwdGlvblwiPlBvciBmYXZvciBzZWxlY2Npb25lIG90cmEgZmVjaGEgbyB2ZXJpZmlxdWUgcXVlIGhheWEgYWN0aXZpZGFkLjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvdi1kYXRhLXRhYmxlPlxuICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgPC92LWNhcmQ+XG4gICAgPC92LWZvcm0+XG4gICAgXG4gICAgPCEtLSBJTlZPSUNFIEhJU1RPUlkgT1ZFUkxBWSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiaGlzdG9yeS1vdmVybGF5XCI+XG4gICAgICAgIDxPdmVybGF5IHYtbW9kZWw9XCJzaG93SGlzdG9yeVwiIHRpdGxlPVwiSGlzdG9yaWFsIGRlIGVzdGFkb3NcIiBwcm9ncmFtbWVyUmVmPVwiaW52b2ljZS1oaXN0b3J5XCIgYWN0aXZhdG9yPVwicGFyZW50XCI+XG4gICAgICAgICAgICA8dGVtcGxhdGUgI2RlZmF1bHQ+XG4gICAgICAgICAgICAgICAgPEludm9pY2VTdGF0ZUhpc3RvcnlPdmVybGF5IFxuICAgICAgICAgICAgICAgICAgICB2LWlmPVwic2VsZWN0ZWRJbnZvaWNlXCIgXG4gICAgICAgICAgICAgICAgICAgIDppbnZvaWNlPVwic2VsZWN0ZWRJbnZvaWNlXCJcbiAgICAgICAgICAgICAgICAgICAgQGNsb3NlPVwic2hvd0hpc3RvcnkgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgIDwvT3ZlcmxheT5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgU3RhdHVzQ2hpcCBmcm9tICcuLi9jb21wb25lbnRzL1N0YXR1c0NoaXAudnVlJztcbmltcG9ydCBPdmVybGF5IGZyb20gJy4uL2NvbXBvbmVudHMvT3ZlcmxheS52dWUnO1xuaW1wb3J0IEludm9pY2VTdGF0ZUhpc3RvcnlPdmVybGF5IGZyb20gJy4uL2NvbXBvbmVudHMvSW52b2ljZVN0YXRlSGlzdG9yeU92ZXJsYXkudnVlJztcbmltcG9ydCB7IHVzZUdsb2JhbFV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvZ2xvYmFscyc7XG5pbXBvcnQgeyB1c2VBdXRoU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvYXV0aCc7XG5pbXBvcnQgeyByZWYgfSBmcm9tICd2dWUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBTdGF0dXNDaGlwLFxuICAgICAgICBPdmVybGF5LFxuICAgICAgICBJbnZvaWNlU3RhdGVIaXN0b3J5T3ZlcmxheVxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgc2VsZWN0ZWREYXRlOiB7XG4gICAgICAgICAgICB0eXBlOiBEYXRlLFxuICAgICAgICAgICAgZGVmYXVsdDogKCkgPT4gbmV3IERhdGUoKVxuICAgICAgICB9XG4gICAgfSxcbiAgICBzZXR1cCgpIHtcbiAgICAgICAgY29uc3QgeyB0b2FzdCB9ID0gdXNlR2xvYmFsVXRpbHMoKTtcbiAgICAgICAgY29uc3QgYXV0aFN0b3JlID0gdXNlQXV0aFN0b3JlKCk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9hc3QsXG4gICAgICAgICAgICBhdXRoU3RvcmVcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIGRhdGEoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAvLyBBUEkgZW5kcG9pbnRcbiAgICAgICAgICAgIGFwaUVuZHBvaW50OiBgL2FwaS91c2Vycy97dXNlcklkfS9oaXN0b3J5YCxcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gVGFibGUgaGVhZGVycyBmb3Igc3RhdGUgaGlzdG9yeVxuICAgICAgICAgICAgaGVhZGVyczogW1xuICAgICAgICAgICAgICAgIHsgdGl0bGU6ICdGZWNoYSB5IEhvcmEnLCBrZXk6ICdjcmVhdGVkQXQnLCBzb3J0YWJsZTogdHJ1ZSwgYWxpZ246ICdzdGFydCcgfSxcbiAgICAgICAgICAgICAgICB7IHRpdGxlOiAnRmFjdHVyYScsIGtleTogJ2ludm9pY2UnLCBzb3J0YWJsZTogZmFsc2UsIGFsaWduOiAnc3RhcnQnIH0sXG4gICAgICAgICAgICAgICAgeyB0aXRsZTogJ0VzdGFkbyBBbnRlcmlvcicsIGtleTogJ29sZFN0YXRlJywgc29ydGFibGU6IHRydWUsIGFsaWduOiAnY2VudGVyJyB9LFxuICAgICAgICAgICAgICAgIHsgdGl0bGU6ICdOdWV2byBFc3RhZG8nLCBrZXk6ICduZXdTdGF0ZScsIHNvcnRhYmxlOiB0cnVlLCBhbGlnbjogJ2NlbnRlcicgfSxcbiAgICAgICAgICAgICAgICB7IHRpdGxlOiAnVGlwbyBkZSBDYW1iaW8nLCBrZXk6ICdjaGFuZ2VUeXBlJywgc29ydGFibGU6IHRydWUsIGFsaWduOiAnY2VudGVyJyB9LFxuICAgICAgICAgICAgICAgIHsgdGl0bGU6ICdIaXN0w7NyaWNvJywga2V5OiAnYWN0aW9ucycsIHNvcnRhYmxlOiBmYWxzZSwgYWxpZ246ICdjZW50ZXInIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFN0YXRlIGhpc3RvcnkgZGF0YVxuICAgICAgICAgICAgc3RhdGVIaXN0b3J5OiBbXSxcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gTG9hZGluZyBzdGF0ZVxuICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIE92ZXJsYXkgc3RhdGVcbiAgICAgICAgICAgIHNob3dIaXN0b3J5OiBmYWxzZSxcbiAgICAgICAgICAgIHNlbGVjdGVkSW52b2ljZTogbnVsbCxcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gU3RhdHMgZGF0YVxuICAgICAgICAgICAgc3RhdHM6IHtcbiAgICAgICAgICAgICAgICBhbmFseXplZEludm9pY2VzOiAwLFxuICAgICAgICAgICAgICAgIGFuYWx5emVkVG9kYXk6IDAsXG4gICAgICAgICAgICAgICAgYWR2YW5jZWRJbnZvaWNlczogMCxcbiAgICAgICAgICAgICAgICBhZHZhbmNlZEFtb3VudDogMCxcbiAgICAgICAgICAgICAgICBhZHZhbmNlZFRvZGF5OiAwLFxuICAgICAgICAgICAgICAgIGV4cGlyZWRJbnZvaWNlczogMCxcbiAgICAgICAgICAgICAgICBleHBpcmVkQW1vdW50OiAwLFxuICAgICAgICAgICAgICAgIGV4cGlyZWRUb2RheTogMFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0sXG4gICAgd2F0Y2g6IHtcbiAgICAgICAgc2VsZWN0ZWREYXRlOiB7XG4gICAgICAgICAgICBoYW5kbGVyKG5ld0RhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZldGNoSGlzdG9yeURhdGEobmV3RGF0ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1tZWRpYXRlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgLy8gRm9ybWF0IGRhdGUgdG8gbG9jYWxlIHN0cmluZ1xuICAgICAgICBmb3JtYXREYXRlKGRhdGUpIHtcbiAgICAgICAgICAgIGlmICghZGF0ZSkgcmV0dXJuICctLSc7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZSkudG9Mb2NhbGVEYXRlU3RyaW5nKCdlcy1FUycsIHtcbiAgICAgICAgICAgICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgICAgICAgICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgICAgICAgICAgICB0aW1lWm9uZTogJ1VUQydcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLy8gRm9ybWF0IGRhdGUgYW5kIHRpbWVcbiAgICAgICAgZm9ybWF0RGF0ZVRpbWUoZGF0ZVRpbWUpIHtcbiAgICAgICAgICAgIGlmICghZGF0ZVRpbWUpIHJldHVybiAnLS0nO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoZGF0ZVRpbWUpO1xuICAgICAgICAgICAgcmV0dXJuIGAke2RhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCdlcy1FUycsIHtcbiAgICAgICAgICAgICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgICAgICAgICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgICAgICAgICAgICB0aW1lWm9uZTogJ1VUQydcbiAgICAgICAgICAgIH0pfSAke2RhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKCdlcy1FUycsIHtcbiAgICAgICAgICAgICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICAgICAgICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICAgICAgICAgICAgc2Vjb25kOiAnMi1kaWdpdCcsXG4gICAgICAgICAgICAgICAgdGltZVpvbmU6ICdVVEMnXG4gICAgICAgICAgICB9KX1gO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLy8gRm9ybWF0IGN1cnJlbmN5XG4gICAgICAgIGZvcm1hdEN1cnJlbmN5KGFtb3VudCkge1xuICAgICAgICAgICAgaWYgKCFhbW91bnQpIHJldHVybiAn4oKsMC4wMCc7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KCdlcy1FUycsIHtcbiAgICAgICAgICAgICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICAgICAgICAgICAgICBjdXJyZW5jeTogJ0VVUidcbiAgICAgICAgICAgIH0pLmZvcm1hdChhbW91bnQpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLy8gRXh0cmFjdCBwbGFpbiB0ZXh0IGZyb20gc3RhdHVzIHZhbHVlXG4gICAgICAgIGdldFN0YXR1c1RleHQoc3RhdHVzVmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1c01hcCA9IHtcbiAgICAgICAgICAgICAgICAwOiAnUGVuZGllbnRlJyxcbiAgICAgICAgICAgICAgICAxOiAnVmFsaWRhZGEnLFxuICAgICAgICAgICAgICAgIDI6ICdFbGVnaWJsZScsXG4gICAgICAgICAgICAgICAgMzogJ05vIGVsZWdpYmxlJyxcbiAgICAgICAgICAgICAgICA0OiAnQWRlbGFudGFkYScsXG4gICAgICAgICAgICAgICAgNTogJ0ZpbmFsaXphZGEgc2luIGFkZWxhbnRhcicsXG4gICAgICAgICAgICAgICAgNjogJ1BhcmEgdmFsaWRhcicsXG4gICAgICAgICAgICAgICAgNzogJ0ZpbmFsaXphZGEgZGVzZGUgYWRlbGFudGFyJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBzdGF0dXNNYXBbc3RhdHVzVmFsdWVdIHx8ICdEZXNjb25vY2lkbyc7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvLyBGZXRjaCBoaXN0b3J5IGRhdGEgZnJvbSB0aGUgQVBJXG4gICAgICAgIGZldGNoSGlzdG9yeURhdGEoZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gRm9ybWF0IGRhdGUgZm9yIEFQSSByZXF1ZXN0XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gZGF0ZSBpbnN0YW5jZW9mIERhdGUgPyBkYXRlLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBSZXBsYWNlIHVzZXJJZCBwbGFjZWhvbGRlciB3aXRoIGFjdHVhbCB1c2VyIElEXG4gICAgICAgICAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpRW5kcG9pbnQucmVwbGFjZSgne3VzZXJJZH0nLCB0aGlzLmF1dGhTdG9yZS51c2VyLmlkKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gQWRkIGRhdGUgcGFyYW1ldGVyXG4gICAgICAgICAgICBjb25zdCB1cmwgPSBgJHtlbmRwb2ludH0/ZGF0ZT0ke2Zvcm1hdHRlZERhdGV9YDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gRmV0Y2ggZGF0YVxuICAgICAgICAgICAgZmV0Y2godXJsKVxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciAke3Jlc3BvbnNlLnN0YXR1c306ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVIaXN0b3J5ID0gZGF0YS5pdGVtcyB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0cyA9IGRhdGEuc3RhdHMgfHwge307XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAvLyBFbWl0IHN0YXRzIHVwZGF0ZSBldmVudFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdzdGF0cy11cGRhdGVkJywgdGhpcy5zdGF0cyk7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAvLyBFbWl0IGhhc0RhdGEgZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnaGFzLWRhdGEnLCB0aGlzLnN0YXRlSGlzdG9yeS5sZW5ndGggPiAwKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGhpc3RvcnkgZGF0YTonLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3QuZXJyb3IoYEVycm9yIGFsIGNhcmdhciBlbCBoaXN0b3JpYWw6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUhpc3RvcnkgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIEVtaXQgaGFzLWRhdGEgZXZlbnQgd2l0aCBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdoYXMtZGF0YScsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvLyBSZWZyZXNoIGRhdGEgZm9yIGN1cnJlbnQgZGF0ZVxuICAgICAgICByZWZyZXNoRGF0YSgpIHtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hIaXN0b3J5RGF0YSh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvLyBFeHBvcnQgZGF0YSB0byBDU1ZcbiAgICAgICAgZXhwb3J0VG9DU1YoKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGRhdGEgdG8gZXhwb3J0XG4gICAgICAgICAgICBpZiAoIXRoaXMuc3RhdGVIaXN0b3J5IHx8IHRoaXMuc3RhdGVIaXN0b3J5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Qud2FybmluZygnTm8gaGF5IGRhdG9zIHBhcmEgZXhwb3J0YXInKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgLy8gR2VuZXJhdGUgQ1NWIGhlYWRlcnNcbiAgICAgICAgICAgICAgICBjb25zdCBjc3ZIZWFkZXJzID0gdGhpcy5oZWFkZXJzLm1hcChoZWFkZXIgPT4gaGVhZGVyLnRpdGxlKS5qb2luKCcsJyk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gR2VuZXJhdGUgQ1NWIHJvd3NcbiAgICAgICAgICAgICAgICBjb25zdCBjc3ZSb3dzID0gdGhpcy5zdGF0ZUhpc3RvcnkubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgYFwiJHt0aGlzLmZvcm1hdERhdGVUaW1lKGl0ZW0uY3JlYXRlZEF0KX1cImAsXG4gICAgICAgICAgICAgICAgICAgICAgICBgXCIke2l0ZW0uaW52b2ljZSA/IGl0ZW0uaW52b2ljZS5pbnZvaWNlTnVtYmVyIDogJ04vQSd9IC0gJHtpdGVtLmludm9pY2UgPyBpdGVtLmludm9pY2UucHJvdmlkZXJTb2NpYWxEZW5vbWluYXRpb24gOiAnTi9BJ31cImAsXG4gICAgICAgICAgICAgICAgICAgICAgICBgXCIke3RoaXMuZ2V0U3RhdHVzVGV4dChpdGVtLm9sZFN0YXRlKX1cImAsXG4gICAgICAgICAgICAgICAgICAgICAgICBgXCIke3RoaXMuZ2V0U3RhdHVzVGV4dChpdGVtLm5ld1N0YXRlKX1cImAsXG4gICAgICAgICAgICAgICAgICAgICAgICBgXCIke2l0ZW0uY2hhbmdlVHlwZSA9PT0gJ2F1dG9tYXRpYycgPyAnQXV0b23DoXRpY28nIDogJ01hbnVhbCd9XCJgXG4gICAgICAgICAgICAgICAgICAgIF0uam9pbignLCcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIENvbWJpbmUgaGVhZGVycyBhbmQgcm93c1xuICAgICAgICAgICAgICAgIGNvbnN0IGNzdkNvbnRlbnQgPSBbY3N2SGVhZGVycywgLi4uY3N2Um93c10uam9pbignXFxuJyk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgQmxvYiB3aXRoIHRoZSBDU1YgY29udGVudFxuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbY3N2Q29udGVudF0sIHsgdHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7JyB9KTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBkb3dubG9hZCBsaW5rXG4gICAgICAgICAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBVUkwgZm9yIHRoZSBCbG9iXG4gICAgICAgICAgICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBTZXR1cCB0aGUgZG93bmxvYWQgbGlua1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVTdHIgPSB0aGlzLnNlbGVjdGVkRGF0ZSBpbnN0YW5jZW9mIERhdGUgPyB0aGlzLnNlbGVjdGVkRGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0gOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcbiAgICAgICAgICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHVybCk7XG4gICAgICAgICAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgYGhpc3RvcmlhbC1jYW1iaW9zLWVzdGFkby0ke2RhdGVTdHJ9LmNzdmApO1xuICAgICAgICAgICAgICAgIGxpbmsuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgbGluayB0byB0aGUgRE9NXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBDbGljayB0aGUgbGluayB0byB0cmlnZ2VyIHRoZSBkb3dubG9hZFxuICAgICAgICAgICAgICAgIGxpbmsuY2xpY2soKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBDbGVhbiB1cFxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2VzcygnSGlzdG9yaWFsIGV4cG9ydGFkbyBjb3JyZWN0YW1lbnRlJyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGV4cG9ydGluZyB0byBDU1Y6JywgZXJyb3IpO1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3QuZXJyb3IoJ0Vycm9yIGFsIGV4cG9ydGFyIGhpc3RvcmlhbDogJyArIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLy8gVmlldyBpbnZvaWNlIGhpc3RvcnlcbiAgICAgICAgdmlld0ludm9pY2VIaXN0b3J5KGludm9pY2UpIHtcbiAgICAgICAgICAgIGlmICghaW52b2ljZSB8fCAhaW52b2ljZS5pZCkge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3QuZXJyb3IoJ05vIHNlIHB1ZWRlIG1vc3RyYXIgZWwgaGlzdG9yaWFsOiBEYXRvcyBkZSBmYWN0dXJhIGluY29tcGxldG9zJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW52b2ljZSA9IGludm9pY2U7XG4gICAgICAgICAgICB0aGlzLnNob3dIaXN0b3J5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuOmRlZXAoLnYtZGF0YS10YWJsZS1oZWFkZXIgdGgpIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHRleHQtdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuOmRlZXAoLnYtZGF0YS10YWJsZV9fdHI6aG92ZXIpIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xufVxuXG46ZGVlcCgudi1kYXRhLXRhYmxlKSB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcbn1cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC13cmFwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktc3BhY2UtYmV0d2VlbiBmbGV4LXdyYXBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTIgY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtYi0yIGZzLTMgYmkgYmktY2xvY2staGlzdG9yeVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8aDQ+PGIgY2xhc3M9XCJteC0yXCI+SGlzdG9yaWFsIGRlIENhbWJpb3MgZGUgRXN0YWRvPC9iPjwvaDQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8di1idG4gXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibS0zIHAtMyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGJ0biB0ZXh0LXdoaXRlIGFkZC10ZW1wbGF0ZXMtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgQGNsaWNrPVwiZG93bmxvYWRDU1ZcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmcy0zIHRleHQtd2hpdGUgYmkgYmktZG93bmxvYWRcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC13aGl0ZSBtLTFcIj5EZXNjYXJnYXIgaGlzdG9yaWFsIGRlbCBkw61hPC9wPlxuICAgICAgICAgICAgICAgIDwvdi1idG4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIFxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgICAgICAgIDx2LWNhcmQgY2xhc3M9XCJkYXRlLXBpY2tlci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8di1jYXJkLXRpdGxlPlNlbGVjY2lvbmEgdW5hIGZlY2hhPC92LWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8di1kYXRlLXBpY2tlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZERhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3ctYWRqYWNlbnQtbW9udGhzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOm1heD1cIm5ldyBEYXRlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDphbGxvd2VkLWRhdGVzPVwiaXNBbGxvd2VkRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bG9hZGluZz1cImxvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB1cGRhdGU6bW9kZWwtdmFsdWU9XCJvbkRhdGVDaGFuZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdi1kYXRlLXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgICAgPC92LWNhcmQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCI+XG4gICAgICAgICAgICAgICAgICAgIDx2LWNhcmQgY2xhc3M9XCJjZW50ZXIgdG9wcy1jYXJkcyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDE+PGkgY2xhc3M9XCJteS1pY29ucyBiaSBiaS1jbGlwYm9hcmQyLWRhdGEtZmlsbFwiPjwvaT48L2gxPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5GYWN0dXJhcyBhbmFsaXphZGFzPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj48Yj57eyBzdGF0cy5hbmFseXplZEludm9pY2VzIH19PC9iPjwvaDI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGIgY2xhc3M9XCJtaW5pLWNhcmRcIj4re3sgc3RhdHMuYW5hbHl6ZWRUb2RheSB9fSBob3k8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC92LWNhcmQ+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8di1jYXJkIGNsYXNzPVwiY2VudGVyIHRvcHMtY2FyZHMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgxPjxpIGNsYXNzPVwibXktaWNvbnMgYmkgYmktZmlsZS1lYXJtYXJrLWNoZWNrLWZpbGxcIj48L2k+PC9oMT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+RmFjdHVyYXMgYWRlbGFudGFkYXM8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPjxiPnt7IGZvcm1hdEN1cnJlbmN5KHN0YXRzLmFkdmFuY2VkQW1vdW50KSB9fTwvYj48L2gyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiIGNsYXNzPVwibWluaS1jYXJkXCI+K3t7IGZvcm1hdEN1cnJlbmN5KHN0YXRzLmFkdmFuY2VkVG9kYXkpIH19IGhveTwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3YtY2FyZD5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDx2LWNhcmQgY2xhc3M9XCJjZW50ZXIgdG9wcy1jYXJkcyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDE+PGkgY2xhc3M9XCJteS1pY29ucyBiaSBiaS1jbG9jay1oaXN0b3J5XCI+PC9pPjwvaDE+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPkZhY3R1cmFzIHZlbmNpZGFzPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj48Yj57eyBmb3JtYXRDdXJyZW5jeShzdGF0cy5leHBpcmVkQW1vdW50KSB9fTwvYj48L2gyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiIGNsYXNzPVwibWluaS1jYXJkXCI+K3t7IGZvcm1hdEN1cnJlbmN5KHN0YXRzLmV4cGlyZWRUb2RheSkgfX0gaG95PC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdi1jYXJkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnI+XG4gICAgICAgIFxuICAgICAgICA8di1yb3cgY2xhc3M9XCJ3LTEwMCBtLTRcIiB2LWlmPVwiIWhhc0RhdGFcIj5cbiAgICAgICAgICAgIDx2LWFsZXJ0IHR5cGU9XCJpbmZvXCIgaWNvbj1cIm1kaS1pbmZvcm1hdGlvblwiPlxuICAgICAgICAgICAgICAgIE5vIGhheSBoaXN0b3JpYWwgZGlzcG9uaWJsZSBwYXJhIGxhIGZlY2hhIHNlbGVjY2lvbmFkYS5cbiAgICAgICAgICAgIDwvdi1hbGVydD5cbiAgICAgICAgPC92LXJvdz5cbiAgICAgICAgXG4gICAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIj5cbiAgICAgICAgICAgIDxIaXN0b3J5Q29tcG9uZW50IFxuICAgICAgICAgICAgICAgIHJlZj1cImhpc3RvcnlDb21wb25lbnRcIlxuICAgICAgICAgICAgICAgIDpzZWxlY3RlZC1kYXRlPVwic2VsZWN0ZWREYXRlT2JqXCIgXG4gICAgICAgICAgICAgICAgQHN0YXRzLXVwZGF0ZWQ9XCJ1cGRhdGVTdGF0c1wiXG4gICAgICAgICAgICAgICAgQGhhcy1kYXRhPVwidXBkYXRlSGFzRGF0YVwiXG4gICAgICAgICAgICA+PC9IaXN0b3J5Q29tcG9uZW50PlxuICAgICAgICA8L3YtY29sPlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBIaXN0b3J5Q29tcG9uZW50IGZyb20gJy4uL2NvbXBvbmVudHMvSGlzdG9yeUNvbXBvbmVudC52dWUnO1xuaW1wb3J0IHsgdXNlQXV0aFN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL2F1dGgnO1xuaW1wb3J0IHsgdXNlRGF0ZSB9IGZyb20gJ3Z1ZXRpZnknO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBIaXN0b3J5Q29tcG9uZW50XG4gICAgfSxcbiAgICBcbiAgICBzZXR1cCgpIHtcbiAgICAgICAgY29uc3QgYXV0aFN0b3JlID0gdXNlQXV0aFN0b3JlKCk7XG4gICAgICAgIGNvbnN0IGRhdGVBZGFwdGVyID0gdXNlRGF0ZSgpO1xuICAgICAgICByZXR1cm4geyBhdXRoU3RvcmUsIGRhdGVBZGFwdGVyIH07XG4gICAgfSxcbiAgICBcbiAgICBuYW1lOiAnSGlzdG9yeScsXG4gICAgXG4gICAgZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhhc0RhdGE6IGZhbHNlLFxuICAgICAgICAgICAgc2VsZWN0ZWREYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgZXZlbnREYXRlczogW10sXG4gICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXRzOiB7XG4gICAgICAgICAgICAgICAgYW5hbHl6ZWRJbnZvaWNlczogMCxcbiAgICAgICAgICAgICAgICBhbmFseXplZFRvZGF5OiAwLFxuICAgICAgICAgICAgICAgIGFkdmFuY2VkSW52b2ljZXM6IDAsXG4gICAgICAgICAgICAgICAgYWR2YW5jZWRBbW91bnQ6IDAsXG4gICAgICAgICAgICAgICAgYWR2YW5jZWRUb2RheTogMCxcbiAgICAgICAgICAgICAgICBleHBpcmVkSW52b2ljZXM6IDAsXG4gICAgICAgICAgICAgICAgZXhwaXJlZEFtb3VudDogMCxcbiAgICAgICAgICAgICAgICBleHBpcmVkVG9kYXk6IDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgICAgc2VsZWN0ZWREYXRlT2JqKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWREYXRlID8gbmV3IERhdGUodGhpcy5zZWxlY3RlZERhdGUpIDogbmV3IERhdGUoKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgXG4gICAgbW91bnRlZCgpIHtcbiAgICAgICAgdGhpcy5mZXRjaEhpc3RvcnlEYXRlcygpO1xuICAgIH0sXG4gICAgXG4gICAgbWV0aG9kczoge1xuICAgICAgICAvLyBGZXRjaCBkYXRlcyB3aXRoIGhpc3RvcnkgZXZlbnRzIGZvciBjYWxlbmRhclxuICAgICAgICBmZXRjaEhpc3RvcnlEYXRlcygpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIE9idGVuZXIgZWwgSUQgZGVsIHVzdWFyaW8gYWN0dWFsXG4gICAgICAgICAgICBjb25zdCB1c2VySWQgPSB0aGlzLiRzdG9yZT8uc3RhdGU/LmF1dGg/LnVzZXI/LmlkIHx8IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRoU3RvcmU/LnVzZXI/LmlkO1xuICAgICAgICAgICAgaWYgKCF1c2VySWQpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdObyB1c2VyIElEIGF2YWlsYWJsZScpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gRW5kcG9pbnQgcGFyYSBvYnRlbmVyIGZlY2hhcyBkZSBoaXN0b3JpYWxcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IGAvYXBpL3VzZXJzLyR7dXNlcklkfS9oaXN0b3J5LWRhdGVzYDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZmV0Y2godXJsKVxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciAke3Jlc3BvbnNlLnN0YXR1c306ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFjdHVhbGl6YXIgZXZlbnREYXRlcyBwYXJhIGVsIGNhbGVuZGFyaW9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudERhdGVzID0gZGF0YS5kYXRlcyB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhgTG9hZGVkIGhpc3RvcnkgZGF0ZXM6JywgdGhpcy5ldmVudERhdGVzKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGhpc3RvcnkgZGF0ZXM6JywgZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8vIFVwZGF0ZSBzdGF0cyB3aGVuIHJlY2VpdmVkIGZyb20gSGlzdG9yeUNvbXBvbmVudFxuICAgICAgICB1cGRhdGVTdGF0cyhuZXdTdGF0cykge1xuICAgICAgICAgICAgdGhpcy5zdGF0cyA9IG5ld1N0YXRzO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLy8gVXBkYXRlIGhhc0RhdGEgZmxhZyB3aGVuIHJlY2VpdmVkIGZyb20gSGlzdG9yeUNvbXBvbmVudFxuICAgICAgICB1cGRhdGVIYXNEYXRhKGhhc0RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzRGF0YSA9IGhhc0RhdGE7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvLyBIYW5kbGUgZGF0ZSBjaGFuZ2UgZnJvbSBkYXRlIHBpY2tlclxuICAgICAgICBvbkRhdGVDaGFuZ2UobmV3RGF0ZSkge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhgRGF0ZSBjaGFuZ2VkIHRvOicsIG5ld0RhdGUpO1xuICAgICAgICAgICAgLy8gc2VsZWN0ZWREYXRlIHdpbGwgYmUgdXBkYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHYtbW9kZWxcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8vIEZvcm1hdCBjdXJyZW5jeSBmb3IgZGlzcGxheVxuICAgICAgICBmb3JtYXRDdXJyZW5jeShhbW91bnQpIHtcbiAgICAgICAgICAgIGlmICghYW1vdW50KSByZXR1cm4gJ+KCrDAsMDAnO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCgnZXMtRVMnLCB7XG4gICAgICAgICAgICAgICAgc3R5bGU6ICdjdXJyZW5jeScsXG4gICAgICAgICAgICAgICAgY3VycmVuY3k6ICdFVVInXG4gICAgICAgICAgICB9KS5mb3JtYXQoYW1vdW50KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8vIERvd25sb2FkIENTViBleHBvcnRcbiAgICAgICAgZG93bmxvYWRDU1YoKSB7XG4gICAgICAgICAgICAvLyBDYWxsIHRoZSBleHBvcnRUb0NTViBtZXRob2Qgb2YgdGhlIEhpc3RvcnlDb21wb25lbnRcbiAgICAgICAgICAgIGlmICh0aGlzLiRyZWZzLmhpc3RvcnlDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRyZWZzLmhpc3RvcnlDb21wb25lbnQuZXhwb3J0VG9DU1YoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8vIENoZWNrIGlmIGEgZGF0ZSBpcyBhbGxvd2VkIChoYXMgaGlzdG9yeSBlbnRyaWVzKVxuICAgICAgICBpc0FsbG93ZWREYXRlKHZhbCkge1xuICAgICAgICAgICAgLy8gdmFsIHB1ZWRlIHNlciBEYXRlIG8gc3RyaW5nOyBsbyBwYXJzZW8gY29uIGVsIGFkYXB0ZXJcbiAgICAgICAgICAgIGNvbnN0IGlzbyA9IHRoaXMuZGF0ZUFkYXB0ZXIudG9JU08odmFsKSAgICAgICAgICAgLy8g4oaSIFwiMjAyNS0wNi0wM1wiXG4gICAgICAgICAgICBjb25zdCB0b2RheSA9IHRoaXMuZGF0ZUFkYXB0ZXIudG9JU08obmV3IERhdGUoKSkgIC8vIOKGkiBcIjIwMjUtMDYtMDZcIlxuXG4gICAgICAgICAgICBpZiAoaXNvID09PSB0b2RheSkgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIGlmICghdGhpcy5ldmVudERhdGVzLmxlbmd0aCkgcmV0dXJuIHRoaXMubG9hZGluZ1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnREYXRlcy5pbmNsdWRlcyhpc28pXG4gICAgICAgIH1cbiAgICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuLnRvcHMtY2FyZHMge1xuICAgIG1hcmdpbjogMTBweDtcbiAgICBwYWRkaW5nOiAyMHB4O1xufVxuXG4uZGF0ZS1waWNrZXItY2FyZCB7XG4gICAgbWFyZ2luOiAxMHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLm15LWljb25zIHtcbiAgICBjb2xvcjogIzE5NzZkMjtcbiAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICBtYXJnaW4tcmlnaHQ6IDE1cHg7XG59XG5cbi5taW5pLWNhcmQge1xuICAgIGNvbG9yOiAjNzU3NTc1O1xuICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG59XG5cbi5jZW50ZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cbiAgICAgICAgPHYtcm93IGNsYXNzPVwiY2VudGVyIGp1c3RpZnktc3BhY2UtYmV0d2VlbiBtLTIgbXQtNFwiPlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktY2hlY2syLWNpcmNsZSBtZS0yIGZzLTNcIj48L2k+XG4gICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibXQtMlwiPjxiPlJlc3VtZW4gZ2VuZXJhbDwvYj48L2g0PlxuICAgICAgICAgICAgICAgIDx2LWJ0biBpY29uIHNpemU9XCJzbWFsbFwiIHZhcmlhbnQ9XCJ0ZXh0XCIgY2xhc3M9XCJtcy0yXCIgOmxvYWRpbmc9XCJsb2FkaW5nU3RhdHNcIiBAY2xpY2s9XCJmZXRjaFN0YXRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDx2LWljb24+bWRpLXJlZnJlc2g8L3YtaWNvbj5cbiAgICAgICAgICAgICAgICA8L3YtYnRuPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZW50ZXIgdy01MFwiPlxuICAgICAgICAgICAgICAgIDx2LWJ0biBpY29uIGNsYXNzPVwiYnV0dG9uLWRvd25sb2FkIG14LTJcIiBAY2xpY2s9XCJkb3dubG9hZEludm9pY2VzQ3N2XCI+XG4gICAgICAgICAgICAgICAgICAgIDx2LWljb24+bWRpLWRvd25sb2FkPC92LWljb24+XG4gICAgICAgICAgICAgICAgPC92LWJ0bj5cblxuICAgICAgICAgICAgICAgIDx2LXNlbGVjdCBtaW4td2lkdGg9XCIyMDBcIiBsYWJlbD1cIlNlbGVjY2lvbmFyXCIgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uXCIgOml0ZW1zPVwic2VsZWN0XCIgY2xlYXJhYmxlIGRlbGV0YWJsZS1jaGlwc1xuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIiBoaWRlLWRldGFpbHM+PC92LXNlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3Ytcm93PlxuXG4gICAgICAgIDx2LXJvdyBjbGFzcz1cImNlbnRlclwiPlxuICAgICAgICAgICAgPHYtY2FyZCBjbGFzcz1cImNlbnRlciBwLTQgbS0xXCI+XG4gICAgICAgICAgICAgICAgPGgxPjxpIGNsYXNzPVwibXktaWNvbnMgYmkgYmktcGVyY2VudFwiPjwvaT48L2gxPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxwPkRlc2N1ZW50b3M8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxoMj48Yj57eyBmb3JtYXRDdXJyZW5jeSh0b3RhbERpc2NvdW50cykgfX08L2I+PC9oMj5cbiAgICAgICAgICAgICAgICAgICAgPGIgY2xhc3M9XCJtaW5pLWNhcmRcIj5Ub3RhbCBhcGxpY2FkbzwvYj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdi1jYXJkPlxuXG4gICAgICAgICAgICA8di1jYXJkIGNsYXNzPVwiY2VudGVyIHAtNCBtLTFcIj5cbiAgICAgICAgICAgICAgICA8aDE+PGkgY2xhc3M9XCJteS1pY29ucyBiaSBiaS1maWxlLWVhcm1hcmstY2hlY2stZmlsbFwiPjwvaT48L2gxPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxwPkFkZWxhbnRhZGFzPC9wPlxuICAgICAgICAgICAgICAgICAgICA8aDI+PGI+e3sgZm9ybWF0Q3VycmVuY3kodG90YWxBZHZhbmNlZCkgfX08L2I+PC9oMj5cbiAgICAgICAgICAgICAgICAgICAgPGIgY2xhc3M9XCJtaW5pLWNhcmRcIj5Ub3RhbCBhZGVsYW50YWRvPC9iPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC92LWNhcmQ+XG5cbiAgICAgICAgICAgIDx2LWNhcmQgY2xhc3M9XCJjZW50ZXIgcC00IG0tMVwiPlxuICAgICAgICAgICAgICAgIDxoMT48aSBjbGFzcz1cIm15LWljb25zIGJpIGJpLWNhc2gtY29pblwiPjwvaT48L2gxPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxwPlBlbmRpZW50ZXMgZGUgcGFnbzwvcD5cbiAgICAgICAgICAgICAgICAgICAgPGgyPjxiPnt7IGZvcm1hdEN1cnJlbmN5KHRvdGFsUGVuZGluZykgfX08L2I+PC9oMj5cbiAgICAgICAgICAgICAgICAgICAgPGIgY2xhc3M9XCJtaW5pLWNhcmRcIj5Qb3IgY29icmFyPC9iPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC92LWNhcmQ+XG5cbiAgICAgICAgICAgIDx2LWNhcmQgY2xhc3M9XCJjZW50ZXIgcC00IG0tMVwiPlxuICAgICAgICAgICAgICAgIDxoMT48aSBjbGFzcz1cIm15LWljb25zIGJpIGJpLWNsb2NrLWhpc3RvcnlcIj48L2k+PC9oMT5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8cD5QYXJhIGFkZWxhbnRhcjwvcD5cbiAgICAgICAgICAgICAgICAgICAgPGgyPjxiPnt7IGZvcm1hdEN1cnJlbmN5KHRvdGFsVG9BZHZhbmNlKSB9fTwvYj48L2gyPlxuICAgICAgICAgICAgICAgICAgICA8YiBjbGFzcz1cIm1pbmktY2FyZFwiPkVsZWdpYmxlczwvYj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdi1jYXJkPlxuICAgICAgICA8L3Ytcm93PlxuICAgICAgICBcbiAgICAgICAgPEludm9pY2VXaXRoRmlsdGVyc1xuICAgICAgICAgICAgcmVmPVwiaW52b2ljZVdpdGhGaWx0ZXJzXCJcbiAgICAgICAgICAgIDpzaG93LWFzLWNsaWVudD1cImZhbHNlXCJcbiAgICAgICAgICAgIDphZHZhbmNlSW52b2ljZU5vdz1cImFkdmFuY2VJbnZvaWNlTm93XCJcbiAgICAgICAgICAgIDp2YWxpZGF0ZUludm9pY2VOb3c9XCJ2YWxpZGF0ZUludm9pY2VOb3dcIlxuICAgICAgICAgICAgOnJlZnJlc2hJbnZvaWNlcz1cInJlZnJlc2hJbnZvaWNlc1wiXG4gICAgICAgICAgICA6ZGVsZXRlSW52b2ljZT1cImRlbGV0ZUludm9pY2VcIlxuICAgICAgICAgICAgOmRhdGVGaWx0ZXJzPVwiZGF0ZUZpbHRlcnNcIlxuICAgICAgICAgICAgQGZpbHRlci1jaGFuZ2U9XCJvbkZpbHRlckNoYW5nZVwiPlxuICAgICAgICA8L0ludm9pY2VXaXRoRmlsdGVycz5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgTW9yZUluZm8gZnJvbSAnLi4vY29tcG9uZW50cy9Nb3JlSW5mby52dWUnO1xuaW1wb3J0IEludm9pY2VXaXRoRmlsdGVycyBmcm9tICcuLi9jb21wb25lbnRzL0ludm9pY2VXaXRoRmlsdGVycy52dWUnO1xuaW1wb3J0IHsgdXNlRW50aXR5IH0gZnJvbSAnLi4vc2VydmljZXMvY29tcG9zYWJsZXMvdXNlRW50aXR5JztcbmltcG9ydCB7IEludm9pY2VJbXBsIH0gZnJvbSAnLi4vc2VydmljZXMvdHlwZXMvaW1wbGVtZW50YXRpb25zJztcbmltcG9ydCB7IGNvbXB1dGVkLCByZWYsIG9uTW91bnRlZCwgd2F0Y2ggfSBmcm9tICd2dWUnO1xuaW1wb3J0IHsgdXNlSW52b2ljZVByb3ZpZGVyU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvaW52b2ljZVByb3ZpZGVyLmpzJztcbmltcG9ydCB7IHVzZUludm9pY2VTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9pbnZvaWNlLmpzJztcbmltcG9ydCB7IHVzZUdsb2JhbFV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvZ2xvYmFscyc7XG5pbXBvcnQgeyB1c2VBdXRoU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvYXV0aCc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBNb3JlSW5mbyxcbiAgICAgICAgSW52b2ljZVdpdGhGaWx0ZXJzXG4gICAgfSxcbiAgICBzZXR1cCgpIHtcbiAgICAgICAgY29uc3QgeyBhZHZhbmNlSW52b2ljZU5vdyB9ID0gdXNlSW52b2ljZVN0b3JlKCk7XG4gICAgICAgIGNvbnN0IGludm9pY2VQcm92aWRlclN0b3JlID0gdXNlSW52b2ljZVByb3ZpZGVyU3RvcmUoKTtcbiAgICAgICAgY29uc3QgeyB0b2FzdCwgc3dhbCB9ID0gdXNlR2xvYmFsVXRpbHMoKTtcblxuICAgICAgICBjb25zdCB7IGVudGl0eSwgcmVmcmVzaEVudGl0aWVzOiByZWZyZXNoSW52b2ljZXMsIGRlbGV0ZUVudGl0eTogZGVsZXRlSW52b2ljZSB9ID0gdXNlRW50aXR5KEludm9pY2VJbXBsLCBpbnZvaWNlUHJvdmlkZXJTdG9yZSk7XG4gICAgICAgIGNvbnN0IGludm9pY2VzID0gY29tcHV0ZWQoKCkgPT4gaW52b2ljZVByb3ZpZGVyU3RvcmUuZ2V0SW52b2ljZXMpO1xuICAgICAgICBjb25zdCBhdXRoU3RvcmUgPSB1c2VBdXRoU3RvcmUoKTtcbiAgICAgICAgXG4gICAgICAgIC8vIEFjdGl2ZSBmaWx0ZXJzIGZyb20gdGhlIHRhYmxlXG4gICAgICAgIGNvbnN0IGFjdGl2ZUZpbHRlcnMgPSByZWYoe30pO1xuICAgICAgICBcbiAgICAgICAgLy8gRm9yIG1vYmlsZSBjYXJkIHZpZXdcbiAgICAgICAgY29uc3QgZmlsdGVyZWRJbnZvaWNlcyA9IHJlZihbXSk7XG4gICAgICAgIFxuICAgICAgICAvLyBTdGF0cyByZWZzXG4gICAgICAgIGNvbnN0IGxvYWRpbmdTdGF0cyA9IHJlZihmYWxzZSk7XG4gICAgICAgIGNvbnN0IHRvdGFsVG9BZHZhbmNlID0gcmVmKDApO1xuICAgICAgICBjb25zdCB0b3RhbEFkdmFuY2VkID0gcmVmKDApO1xuICAgICAgICBjb25zdCB0b3RhbFBlbmRpbmcgPSByZWYoMCk7XG4gICAgICAgIGNvbnN0IHRvdGFsRGlzY291bnRzID0gcmVmKDApO1xuICAgICAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IHJlZihcIkHDsW8gZW4gY3Vyc29cIik7XG5cbiAgICAgICAgY29uc3QgY2FsY3VsYXRlRGF0ZVJhbmdlID0gKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgdG9kYXkuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgICAgICBsZXQgc3RhcnREYXRlLCBlbmREYXRlO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbikge1xuICAgICAgICAgICAgICAgIGNhc2UgXCLDmmx0aW1vcyAzIGTDrWFzXCI6XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHRvZGF5KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlLnNldERhdGUodG9kYXkuZ2V0RGF0ZSgpIC0gMik7XG4gICAgICAgICAgICAgICAgICAgIGVuZERhdGUgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCLDmmx0aW1vcyA3IGTDrWFzXCI6XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHRvZGF5KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlLnNldERhdGUodG9kYXkuZ2V0RGF0ZSgpIC0gNik7XG4gICAgICAgICAgICAgICAgICAgIGVuZERhdGUgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCLDmmx0aW1vcyAxNSBkw61hc1wiOlxuICAgICAgICAgICAgICAgICAgICBzdGFydERhdGUgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZS5zZXREYXRlKHRvZGF5LmdldERhdGUoKSAtIDE0KTtcbiAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZSA9IG5ldyBEYXRlKHRvZGF5KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIk1lcyBhY3R1YWxcIjpcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlID0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgdG9kYXkuZ2V0TW9udGgoKSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIGVuZERhdGUgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJUcmltZXN0cmUgYWN0dWFsXCI6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRRdWFydGVyID0gTWF0aC5mbG9vcih0b2RheS5nZXRNb250aCgpIC8gMyk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHRvZGF5LmdldEZ1bGxZZWFyKCksIGN1cnJlbnRRdWFydGVyICogMywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGVuZERhdGUgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJTZW1lc3RyZSBhY3R1YWxcIjpcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFNlbWVzdGVyID0gTWF0aC5mbG9vcih0b2RheS5nZXRNb250aCgpIC8gNik7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHRvZGF5LmdldEZ1bGxZZWFyKCksIGN1cnJlbnRTZW1lc3RlciAqIDYsIDEpO1xuICAgICAgICAgICAgICAgICAgICBlbmREYXRlID0gbmV3IERhdGUodG9kYXkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiQcOxbyBlbiBjdXJzb1wiOlxuICAgICAgICAgICAgICAgICAgICBzdGFydERhdGUgPSBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCAwLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZSA9IG5ldyBEYXRlKHRvZGF5KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIlBlcsOtb2RvIHRvdGFsXCI6XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7IC8vIE5vIGZpbHRlclxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBGb3JtYXQgYXMgeXl5eS1tbS1kZFxuICAgICAgICAgICAgY29uc3QgZm9ybWF0RGF0ZSA9IChkYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtb250aCA9IFN0cmluZyhkYXRlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRheSA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYWZ0ZXI6IGZvcm1hdERhdGUoc3RhcnREYXRlKSxcbiAgICAgICAgICAgICAgICBiZWZvcmU6IGZvcm1hdERhdGUoZW5kRGF0ZSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gQ29tcHV0ZWQgcHJvcGVydHkgZm9yIGRhdGUgZmlsdGVycyB0byBwYXNzIHRvIHRhYmxlXG4gICAgICAgIGNvbnN0IGRhdGVGaWx0ZXJzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0ZVJhbmdlID0gY2FsY3VsYXRlRGF0ZVJhbmdlKHNlbGVjdGVkT3B0aW9uLnZhbHVlKTtcbiAgICAgICAgICAgIGlmICghZGF0ZVJhbmdlKSByZXR1cm4ge307XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICdicm9hZGNhc3REYXRlW2FmdGVyXSc6IGRhdGVSYW5nZS5hZnRlcixcbiAgICAgICAgICAgICAgICAnYnJvYWRjYXN0RGF0ZVtiZWZvcmVdJzogZGF0ZVJhbmdlLmJlZm9yZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZmV0Y2hTdGF0cyA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmIChsb2FkaW5nU3RhdHMudmFsdWUpIHJldHVybjtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbG9hZGluZ1N0YXRzLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXNlcklkID0gYXV0aFN0b3JlLnVzZXIuaWQ7XG4gICAgICAgICAgICAgICAgbGV0IHVybCA9IGAvYXBpL3VzZXJzLyR7dXNlcklkfS9pbnZvaWNlcy9wcm92aWRlci1zdGF0c2A7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZVJhbmdlID0gY2FsY3VsYXRlRGF0ZVJhbmdlKHNlbGVjdGVkT3B0aW9uLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZVJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHVybCArPSBgP2Jyb2FkY2FzdERhdGVbYWZ0ZXJdPSR7ZGF0ZVJhbmdlLmFmdGVyfSZicm9hZGNhc3REYXRlW2JlZm9yZV09JHtkYXRlUmFuZ2UuYmVmb3JlfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIEFkZCBhY3RpdmUgZmlsdGVycyB0byB0aGUgVVJMXG4gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZUZpbHRlcnMudmFsdWUgJiYgT2JqZWN0LmtleXMoYWN0aXZlRmlsdGVycy52YWx1ZSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXBhcmF0b3IgPSB1cmwuaW5jbHVkZXMoJz8nKSA/ICcmJyA6ICc/JztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoYWN0aXZlRmlsdGVycy52YWx1ZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09ICcnICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTa2lwIGJyb2FkY2FzdERhdGUgZmlsdGVycyBhcyB0aGV5IGFyZSBoYW5kbGVkIGJ5IHNlbGVjdGVkT3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJ2Jyb2FkY2FzdERhdGVbYWZ0ZXJdJyAmJiBrZXkgIT09ICdicm9hZGNhc3REYXRlW2JlZm9yZV0nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcGFyYW1zLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxdWVyeVN0cmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJsICs9IGAke3NlcGFyYXRvcn0ke3F1ZXJ5U3RyaW5nfWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQodXJsKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICB0b3RhbFRvQWR2YW5jZS52YWx1ZSA9IHJlc3BvbnNlLmRhdGEudG90YWxUb0FkdmFuY2UgfHwgMDtcbiAgICAgICAgICAgICAgICAgICAgdG90YWxBZHZhbmNlZC52YWx1ZSA9IHJlc3BvbnNlLmRhdGEudG90YWxBZHZhbmNlZCB8fCAwO1xuICAgICAgICAgICAgICAgICAgICB0b3RhbFBlbmRpbmcudmFsdWUgPSByZXNwb25zZS5kYXRhLnRvdGFsUGVuZGluZyB8fCAwO1xuICAgICAgICAgICAgICAgICAgICB0b3RhbERpc2NvdW50cy52YWx1ZSA9IHJlc3BvbnNlLmRhdGEudG90YWxEaXNjb3VudHMgfHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHN0YXRzOicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB0b2FzdC5lcnJvcignRXJyb3IgYWwgYWN0dWFsaXphciBlc3RhZMOtc3RpY2FzJyk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGxvYWRpbmdTdGF0cy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFdhdGNoIGZvciBjaGFuZ2VzIGluIHNlbGVjdGVkT3B0aW9uXG4gICAgICAgIHdhdGNoKHNlbGVjdGVkT3B0aW9uLCAoKSA9PiB7XG4gICAgICAgICAgICBmZXRjaFN0YXRzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgY29uc3Qgb25GaWx0ZXJDaGFuZ2UgPSAoZmlsdGVycykgPT4ge1xuICAgICAgICAgICAgYWN0aXZlRmlsdGVycy52YWx1ZSA9IGZpbHRlcnM7XG4gICAgICAgICAgICBmZXRjaFN0YXRzKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgb25Nb3VudGVkKCgpID0+IHtcbiAgICAgICAgICAgIGZldGNoU3RhdHMoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGludm9pY2VzLFxuICAgICAgICAgICAgZmlsdGVyZWRJbnZvaWNlcyxcbiAgICAgICAgICAgIGFkdmFuY2VJbnZvaWNlTm93LFxuICAgICAgICAgICAgdmFsaWRhdGVJbnZvaWNlTm93OiAoKSA9PiB7fSwgLy8gUGxhY2Vob2xkZXIgLSBub3QgdXNlZCBpbiBwcm92aWRlciB2aWV3XG4gICAgICAgICAgICBpbnZvaWNlUHJvdmlkZXJTdG9yZSxcbiAgICAgICAgICAgIHJlZnJlc2hJbnZvaWNlcyxcbiAgICAgICAgICAgIGRlbGV0ZUludm9pY2UsXG4gICAgICAgICAgICB0b2FzdCxcbiAgICAgICAgICAgIHN3YWwsXG4gICAgICAgICAgICB0b3RhbFRvQWR2YW5jZSxcbiAgICAgICAgICAgIHRvdGFsQWR2YW5jZWQsXG4gICAgICAgICAgICB0b3RhbFBlbmRpbmcsXG4gICAgICAgICAgICB0b3RhbERpc2NvdW50cyxcbiAgICAgICAgICAgIGZldGNoU3RhdHMsXG4gICAgICAgICAgICBzZWxlY3RlZE9wdGlvbixcbiAgICAgICAgICAgIGRhdGVGaWx0ZXJzLFxuICAgICAgICAgICAgb25GaWx0ZXJDaGFuZ2VcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIG5hbWU6ICdIb21lUHJvdmlkZXJzJyxcbiAgICBkYXRhKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLy8gQVBJIGVuZHBvaW50XG4gICAgICAgICAgICBhcGlFbmRwb2ludDogJy91c2Vycy97dXNlcklkfS9wcm92aWRlckludm9pY2VzJyxcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gRmlsdGVyIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgICAgIGZpbHRlckNvbmZpZzogW1xuICAgICAgICAgICAgICAgIHsgdHlwZTogJ3RleHQnLCBmaWVsZDogJ2NsaWVudFNvY2lhbERlbm9taW5hdGlvbicsIGxhYmVsOiAnTm9tYnJlIENsaWVudGUnLCBpY29uOiAnbWRpLW1hZ25pZnknLCB3aWR0aDogMyB9LFxuICAgICAgICAgICAgICAgIHsgdHlwZTogJ3RleHQnLCBmaWVsZDogJ2NsaWVudFZhdE51bWJlcicsIGxhYmVsOiAnTklGIENsaWVudGUnLCBpY29uOiAnbWRpLW1hZ25pZnknLCB3aWR0aDogMyB9LFxuICAgICAgICAgICAgICAgIHsgdHlwZTogJ3RleHQnLCBmaWVsZDogJ2ludm9pY2VOdW1iZXInLCBsYWJlbDogJ07CsCBmYWN0dXJhJywgaWNvbjogJ21kaS1tYWduaWZ5Jywgd2lkdGg6IDMgfSxcbiAgICAgICAgICAgICAgICB7IHR5cGU6ICdkYXRlJywgZmllbGQ6ICdicm9hZGNhc3REYXRlW2FmdGVyXScsIGxhYmVsOiAnRGVzZGUnLCB3aWR0aDogMyB9LFxuICAgICAgICAgICAgICAgIHsgdHlwZTogJ2RhdGUnLCBmaWVsZDogJ2Jyb2FkY2FzdERhdGVbYmVmb3JlXScsIGxhYmVsOiAnSGFzdGEnLCB3aWR0aDogMyB9LFxuICAgICAgICAgICAgICAgIHsgdHlwZTogJ2RhdGUnLCBmaWVsZDogJ2V4cGlyYXRpb25EYXRlJywgbGFiZWw6ICdGLiBWZW5jLicsIHdpZHRoOiAzIH0sXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAnc2VsZWN0JywgZmllbGQ6ICdzdGF0dXMnLCBsYWJlbDogJ0VzdGFkbycsIGl0ZW1zOiBbeyBpdGV4dDogXCJUb2Rvc1wiLCBpdmFsdWU6IDB9LCB7IGl0ZXh0OiBcIlZhbGlkYWRhc1wiLCBpdmFsdWU6IDF9LCB7IGl0ZXh0OiBcIkVsZWdpYmxlc1wiLCBpdmFsdWU6IDJ9LCB7IGl0ZXh0OiBcIk5vIGVsZWdpYmxlc1wiLCBpdmFsdWU6IDN9LCB7IGl0ZXh0OiBcIkFkZWxhbnRhZGFzXCIsIGl2YWx1ZTogNH0sIHsgaXRleHQ6IFwiRmluYWxpemFkYXMgc2luIGFkZWxhbnRhclwiLCBpdmFsdWU6IDV9LCB7IGl0ZXh0OiBcIlBhcmEgdmFsaWRhclwiLCBpdmFsdWU6IDZ9LCB7IGl0ZXh0OiBcIkZpbmFsaXphZGFzIGRlc2RlIGFkZWxhbnRhclwiLCBpdmFsdWU6IDd9XSwgd2lkdGg6IDMgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gVGFibGUgaGVhZGVyc1xuICAgICAgICAgICAgaGVhZGVyczogW1xuICAgICAgICAgICAgICAgIHsgdGl0bGU6ICdDbGllbnRlJywga2V5OiAnY2xpZW50U29jaWFsRGVub21pbmF0aW9uJywgc29ydGFibGU6IHRydWUsIGFsaWduOiAnc3RhcnQnIH0sXG4gICAgICAgICAgICAgICAgeyB0aXRsZTogJ05JRiBDbGllbnRlJywga2V5OiAnY2xpZW50VmF0TnVtYmVyJywgc29ydGFibGU6IHRydWUsIGFsaWduOiAnc3RhcnQnIH0sXG4gICAgICAgICAgICAgICAgeyB0aXRsZTogJ07CuiBmYWN0dXJhJywga2V5OiAnaW52b2ljZU51bWJlcicsIHNvcnRhYmxlOiB0cnVlLCBhbGlnbjogJ3N0YXJ0JyB9LFxuICAgICAgICAgICAgICAgIHsgdGl0bGU6ICdGZWNoYSBFLicsIGtleTogJ2Jyb2FkY2FzdERhdGUnLCBzb3J0YWJsZTogdHJ1ZSwgYWxpZ246ICdzdGFydCcgfSxcbiAgICAgICAgICAgICAgICB7IHRpdGxlOiAnRi4gVmVuYy4nLCBrZXk6ICdleHBpcmF0aW9uRGF0ZScsIHNvcnRhYmxlOiB0cnVlLCBhbGlnbjogJ3N0YXJ0JyB9LFxuICAgICAgICAgICAgICAgIHsgdGl0bGU6ICdEaWFzL1AgVmVuYy4nLCBrZXk6ICdkYXlzVG9FeHBpcmUnLCBzb3J0YWJsZTogdHJ1ZSwgYWxpZ246ICdzdGFydCcgfSxcbiAgICAgICAgICAgICAgICB7IHRpdGxlOiAnVG90YWwnLCBrZXk6ICd0b3RhbCcsIHNvcnRhYmxlOiB0cnVlLCBhbGlnbjogJ2VuZCcgfSxcbiAgICAgICAgICAgICAgICB7IHRpdGxlOiAnRHRvLicsIGtleTogJ2Rpc2NvdW50Jywgc29ydGFibGU6IHRydWUsIGFsaWduOiAnZW5kJyB9LFxuICAgICAgICAgICAgICAgIHsgdGl0bGU6ICdFc3RhZG8nLCBrZXk6ICdzdGF0dXMnLCBzb3J0YWJsZTogdHJ1ZSwgYWxpZ246ICdjZW50ZXInIH0sXG4gICAgICAgICAgICAgICAgeyB0aXRsZTogJ0FjY2lvbmVzJywga2V5OiAnYWN0aW9ucycsIHNvcnRhYmxlOiBmYWxzZSwgYWxpZ246ICdjZW50ZXInIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEFjdGlvbnMgZm9yIHRhYmxlXG4gICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpY29uOiAnbWRpLWNhc2gnLFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyOiB0aGlzLnByb3ZpZGVyQ2hhcmdlTm93LFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICBjb25kaXRpb246IChpdGVtKSA9PiAoaXRlbS5zdGF0dXMgIT0gMiB8fCAhaXRlbS5hZHZhbmNlQWxsb3dlZClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ21kaS1leWUnLFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyOiB0aGlzLnZpZXdJbnZvaWNlLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3ByaW1hcnknXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGljb246ICdtZGktcGVuY2lsJyxcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcjogdGhpcy5lZGl0SW52b2ljZSxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdwcmltYXJ5J1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHNlbGVjdDogW1wiw5psdGltb3MgMyBkw61hc1wiLCBcIsOabHRpbW9zIDcgZMOtYXNcIiwgXCLDmmx0aW1vcyAxNSBkw61hc1wiLCBcIk1lcyBhY3R1YWxcIiwgXCJUcmltZXN0cmUgYWN0dWFsXCIsIFwiU2VtZXN0cmUgYWN0dWFsXCIsIFwiQcOxbyBlbiBjdXJzb1wiLCBcIlBlcsOtb2RvIHRvdGFsXCJdLFxuICAgICAgICAgICAgY29tcGFueVBvc2l0aW9uOiBbXCJBZG1pbmlzdHJhZG9yXCIsIFwiQXBvZGVyYWRvXCIsIFwiRGlyZWN0b3JcIiwgXCJHZXJlbnRlXCIsIFwiVHJhYmFqYWRvclwiLCBcIlRyYWJhamFkb3IgdMOpY25pY29cIiwgXCJPdHJvXCJdLFxuICAgICAgICB9XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGRvd25sb2FkSW52b2ljZXNDc3YoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXR1c01hcCA9IHtcbiAgICAgICAgICAgICAgICAgICAgJzAnOiAnVG9kb3MnLFxuICAgICAgICAgICAgICAgICAgICAnMSc6ICdWYWxpZGFkYScsXG4gICAgICAgICAgICAgICAgICAgICcyJzogJ0VsZWdpYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgJzMnOiAnTm8gZWxlZ2libGUnLFxuICAgICAgICAgICAgICAgICAgICAnNCc6ICdBZGVsYW50YWRhJyxcbiAgICAgICAgICAgICAgICAgICAgJzUnOiAnRmluYWxpemFkYSBzaW4gYWRlbGFudGFyJyxcbiAgICAgICAgICAgICAgICAgICAgJzYnOiAnUGFyYSB2YWxpZGFyJyxcbiAgICAgICAgICAgICAgICAgICAgJzcnOiAnRmluYWxpemFkYSBkZXNkZSBhZGVsYW50YXInLFxuICAgICAgICAgICAgICAgICAgICAnOCc6ICdBZGVsYW50YWRhIFZhbGlkYWRhJyxcbiAgICAgICAgICAgICAgICAgICAgJzknOiAnQWRlbGFudGFkYSBWYWxpZGFkYSB5IFBhZ2FkYScsXG4gICAgICAgICAgICAgICAgICAgICcxMCc6ICdGaW5hbGl6YWRhIHNpbiBhZGVsYW50YXIgUGFnYWRhJyxcbiAgICAgICAgICAgICAgICAgICAgJzExJzogJ0ZpbmFsaXphZGEgZGVzZGUgYWRlbGFudGFyIFBhZ2FkYSdcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgbGV0IGludm9pY2VzVG9FeHBvcnQgPSBbXTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4kcmVmcy5pbnZvaWNlVGFibGU/Lml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgIGludm9pY2VzVG9FeHBvcnQgPSB0aGlzLiRyZWZzLmludm9pY2VUYWJsZS5pdGVtcztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LmVycm9yKCdObyBzZSBwdWVkZW4gb2J0ZW5lciBsYXMgZmFjdHVyYXMgYWN0dWFsZXMnKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghaW52b2ljZXNUb0V4cG9ydCB8fCBpbnZvaWNlc1RvRXhwb3J0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LmluZm8oJ05vIGhheSBmYWN0dXJhcyBwYXJhIGV4cG9ydGFyJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gW1xuICAgICAgICAgICAgICAgICAgICAnQ2xpZW50ZScsXG4gICAgICAgICAgICAgICAgICAgICdOSUYgQ2xpZW50ZScsXG4gICAgICAgICAgICAgICAgICAgICdOw7ptZXJvIEZhY3R1cmEnLFxuICAgICAgICAgICAgICAgICAgICAnRmVjaGEgRW1pc2nDs24nLFxuICAgICAgICAgICAgICAgICAgICAnRmVjaGEgVmVuY2ltaWVudG8nLFxuICAgICAgICAgICAgICAgICAgICAnRMOtYXMgaGFzdGEgVmVuY2ltaWVudG8nLFxuICAgICAgICAgICAgICAgICAgICAnSW1wb3J0ZSBUb3RhbCcsXG4gICAgICAgICAgICAgICAgICAgICdFc3RhZG8nLFxuICAgICAgICAgICAgICAgICAgICAnRGVzY3VlbnRvJyxcbiAgICAgICAgICAgICAgICAgICAgJ1RvdGFsIGEgUmVjaWJpcicsXG4gICAgICAgICAgICAgICAgICAgICdNw6l0b2RvIGRlIFBhZ28nLFxuICAgICAgICAgICAgICAgICAgICAnQmFzZSBJbXBvbmlibGUnLFxuICAgICAgICAgICAgICAgICAgICAnSW1wdWVzdG9zJ1xuICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjc3ZDb250ZW50ID0gaW52b2ljZXNUb0V4cG9ydC5tYXAoaW52b2ljZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIERlYnVnOiB2ZXIgcXXDqSB0cmFlIGludm9pY2Uuc3RhdHVzXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXR1c1RleHQgPSBzdGF0dXNNYXBbU3RyaW5nKGludm9pY2Uuc3RhdHVzKV07XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52b2ljZS5jbGllbnRTb2NpYWxEZW5vbWluYXRpb24gfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZvaWNlLmNsaWVudFZhdE51bWJlciB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGludm9pY2UuaW52b2ljZU51bWJlciB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGludm9pY2UuYnJvYWRjYXN0RGF0ZSB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGludm9pY2UuZXhwaXJhdGlvbkRhdGUgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZvaWNlLmRheXNUb0V4cGlyZSB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGludm9pY2UudG90YWwgfHwgJzAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCB8fCBpbnZvaWNlLnN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGludm9pY2UuZGlzY291bnQgfHwgJzAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW52b2ljZS50b3RhbFRvUmVjZWl2ZSB8fCAnMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZvaWNlLnBheW1lbnRNZXRob2QgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZvaWNlLnRheEJhc2UgfHwgJzAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW52b2ljZS50YXggfHwgJzAnXG4gICAgICAgICAgICAgICAgICAgIF0uam9pbignOycpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY3N2ID0gW1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLmpvaW4oJzsnKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uY3N2Q29udGVudFxuICAgICAgICAgICAgICAgIF0uam9pbignXFxuJyk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW1wiXFx1ZmVmZlwiICsgY3N2XSwgeyB0eXBlOiAndGV4dC9jc3Y7Y2hhcnNldD11dGYtODsnIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgICAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmwpO1xuICAgICAgICAgICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGBmYWN0dXJhc19hX21pc19jbGllbnRlc18ke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCl9LmNzdmApO1xuICAgICAgICAgICAgICAgIGxpbmsuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICAgICAgICAgICAgbGluay5jbGljaygpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKCdBcmNoaXZvIENTViBkZXNjYXJnYWRvIGNvcnJlY3RhbWVudGUnKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWwgZ2VuZXJhciBDU1Y6JywgZXJyb3IpO1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3QuZXJyb3IoJ0Vycm9yIGFsIGdlbmVyYXIgZWwgYXJjaGl2byBDU1Y6ICcgKyBlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gRm9ybWF0IGRhdGUgdG8gbG9jYWxlIHN0cmluZ1xuICAgICAgICBmb3JtYXREYXRlKGRhdGUpIHtcbiAgICAgICAgICAgIGlmICghZGF0ZSkgcmV0dXJuICctLSc7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZSkudG9Mb2NhbGVEYXRlU3RyaW5nKCdlcy1FUycsIHtcbiAgICAgICAgICAgICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgICAgICAgICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgICAgICAgICAgICB0aW1lWm9uZTogJ1VUQydcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLy8gRm9ybWF0IGN1cnJlbmN5XG4gICAgICAgIGZvcm1hdEN1cnJlbmN5KGFtb3VudCkge1xuICAgICAgICAgICAgaWYgKCFhbW91bnQpIHJldHVybiAn4oKsMC4wMCc7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KCdlcy1FUycsIHtcbiAgICAgICAgICAgICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICAgICAgICAgICAgICBjdXJyZW5jeTogJ0VVUidcbiAgICAgICAgICAgIH0pLmZvcm1hdChhbW91bnQpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLy8gVmlldyBpbnZvaWNlIGRldGFpbHNcbiAgICAgICAgdmlld0ludm9pY2UoaXRlbSkge1xuICAgICAgICAgICAgLy8gUGxhY2Vob2xkZXIgZm9yIGludm9pY2UgZGV0YWlscyB2aWV3XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGBWaWV3IGludm9pY2UgZGV0YWlscycsIGl0ZW0pO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLy8gRWRpdCBpbnZvaWNlXG4gICAgICAgIGVkaXRJbnZvaWNlKGl0ZW0pIHtcbiAgICAgICAgICAgIC8vIFBsYWNlaG9sZGVyIGZvciBpbnZvaWNlIGVkaXRcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coYEVkaXQgaW52b2ljZScsIGl0ZW0pO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLy8gSGFuZGxlIGRhdGEgbG9hZGVkIGV2ZW50XG4gICAgICAgIG9uRGF0YUxvYWRlZChkYXRhKSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGBMb2FkZWQgJHtkYXRhLmxlbmd0aH0gaW52b2ljZXNgKTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRJbnZvaWNlcyA9IGRhdGE7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvLyBIYW5kbGUgZXJyb3IgZXZlbnRcbiAgICAgICAgb25FcnJvcihlcnJvcikge1xuICAgICAgICAgICAgdGhpcy50b2FzdC5lcnJvcignRXJyb3IgYWwgY2FyZ2FyIGZhY3R1cmFzOiAnICsgZXJyb3IpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLy8gUmVmcmVzaCBkYXRhXG4gICAgICAgIHJlZnJlc2hEYXRhKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuJHJlZnMuaW52b2ljZVRhYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kcmVmcy5pbnZvaWNlVGFibGUucmVmcmVzaCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hJbnZvaWNlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cbi5taS1jYXJkIHtcbiAgICBmbGV4OiAxOyAvKiBNYWtlcyBhbGwgY2FyZHMgZ3JvdyBlcXVhbGx5ICovXG4gICAgcGFkZGluZzogMTVweDsgLyogU3BhY2UgaW5zaWRlIGNhcmRzICovXG4gICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsgLyogT3B0aW9uYWw6IFNtb290aCByZXNpemluZyB0cmFuc2l0aW9uICovXG59XG5cbi5teS1pY29ucyB7XG4gICAgY29sb3I6ICNhOGNmOTU7XG4gICAgbWFyZ2luOiAyMHB4IDQwcHggNDBweCAyMHB4O1xufVxuXG4ubWluaS1jYXJkIHtcbiAgICBjb2xvcjogIzYzYTg4NDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTVmM2RmO1xuICAgIHBhZGRpbmc6IDdweDtcbiAgICBib3JkZXItcmFkaXVzOiA1cHg7XG59XG5cbjpkZWVwKC52LWRhdGEtdGFibGUtaGVhZGVyIHRoKSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50O1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbjpkZWVwKC52LWRhdGEtdGFibGVfX3RyOmhvdmVyKSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbn1cblxuOmRlZXAoLnYtZGF0YS10YWJsZSkge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMGUwZTA7XG59XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdj5cbiAgICA8di1yb3cgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtd3JhcC13cmFwIG10LTMgbXgtNVwiPlxuICAgICAgPHRlbXBsYXRlIHYtZm9yPVwiKGZpbHRlciwgaW5kZXgpIGluIGFjdGl2ZUZpbHRlcnNcIiA6a2V5PVwiaW5kZXhcIj5cbiAgICAgICAgPHYtY29sIDpjb2xzPVwiMTJcIiA6c209XCI0XCIgOm1kPVwiY29sdW1uV2lkdGhcIiBjbGFzcz1cInNlYXJjaGVyc1wiPlxuICAgICAgICAgIDwhLS0gQ2FtcG8gZGUgdGV4dG8gLS0+XG4gICAgICAgICAgPHYtdGV4dC1maWVsZFxuICAgICAgICAgICAgdi1pZj1cImZpbHRlci50eXBlID09PSAndGV4dCdcIlxuICAgICAgICAgICAgdi1tb2RlbD1cIm1vZGVsVmFsdWVbZmlsdGVyLm1vZGVsXVwiXG4gICAgICAgICAgICA6bGFiZWw9XCJmaWx0ZXIubGFiZWxcIlxuICAgICAgICAgICAgOnByZXBlbmQtaW5uZXItaWNvbj1cImZpbHRlci5pY29uXCJcbiAgICAgICAgICAgIGNsZWFyYWJsZVxuICAgICAgICAgICAgaGlkZS1kZXRhaWxzXG4gICAgICAgICAgICBkZW5zZVxuICAgICAgICAgICAgdmFyaWFudD1cInNvbG8tZmlsbGVkXCJcbiAgICAgICAgICA+PC92LXRleHQtZmllbGQ+XG4gIFxuICAgICAgICAgIDwhLS0gQ2FtcG8gZGUgZmVjaGEgLS0+XG4gICAgICAgICAgPHYtdGV4dC1maWVsZFxuICAgICAgICAgICAgdi1pZj1cImZpbHRlci50eXBlID09PSAnZGF0ZSdcIlxuICAgICAgICAgICAgdi1tb2RlbD1cIm1vZGVsVmFsdWVbZmlsdGVyLm1vZGVsXVwiXG4gICAgICAgICAgICA6bGFiZWw9XCJmaWx0ZXIubGFiZWxcIlxuICAgICAgICAgICAgdHlwZT1cImRhdGVcIlxuICAgICAgICAgICAgaGlkZS1kZXRhaWxzXG4gICAgICAgICAgICBkZW5zZVxuICAgICAgICAgICAgdmFyaWFudD1cInNvbG8tZmlsbGVkXCJcbiAgICAgICAgICA+PC92LXRleHQtZmllbGQ+XG4gIFxuICAgICAgICAgIDwhLS0gQ2FtcG8gZGUgc2VsZWNjacOzbiAtLT5cbiAgICAgICAgICA8di1zZWxlY3RcbiAgICAgICAgICAgIHYtaWY9XCJmaWx0ZXIudHlwZSA9PT0gJ3NlbGVjdCdcIlxuICAgICAgICAgICAgdi1tb2RlbD1cIm1vZGVsVmFsdWVbZmlsdGVyLm1vZGVsXVwiXG4gICAgICAgICAgICA6aXRlbXM9XCJmaWx0ZXIuaXRlbXNcIlxuICAgICAgICAgICAgOmxhYmVsPVwiZmlsdGVyLmxhYmVsXCJcbiAgICAgICAgICAgIDpwcmVwZW5kLWlubmVyLWljb249XCJmaWx0ZXIuaWNvblwiXG4gICAgICAgICAgICBjbGVhcmFibGVcbiAgICAgICAgICAgIGhpZGUtZGV0YWlsc1xuICAgICAgICAgICAgZGVuc2VcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJzb2xvLWZpbGxlZFwiXG4gICAgICAgICAgPjwvdi1zZWxlY3Q+XG4gICAgICAgIDwvdi1jb2w+XG4gICAgICA8L3RlbXBsYXRlPlxuICAgIDwvdi1yb3c+XG4gIDwvZGl2PlxuICA8L3RlbXBsYXRlPlxuICBcbiAgPHNjcmlwdD5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWU6ICdGaWx0ZXJDb21wb25lbnQnLFxuICAgIFxuICAgIHByb3BzOiB7XG4gICAgICBtb2RlbFZhbHVlOiB7XG4gICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgIH0sXG4gICAgICB2YXJpYW50OiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgZGVmYXVsdDogJ2RlZmF1bHQnLFxuICAgICAgICB2YWxpZGF0b3I6ICh2YWx1ZSkgPT4gWydkZWZhdWx0JywgJ2ludm9pY2VzJywgJ2RvY3VtZW50cycsICdzdXBwbGllcnMnLCAnY2F0ZWdvcmllcyddLmluY2x1ZGVzKHZhbHVlKVxuICAgICAgfSxcbiAgICB9LFxuICBcbiAgICBjb21wdXRlZDoge1xuICAgICAgY29sdW1uV2lkdGgoKSB7XG4gICAgICAgIGNvbnN0IHZhcmlhbnRzV2lkdGggPSB7XG4gICAgICAgICAgZGVmYXVsdDogMixcbiAgICAgICAgICBpbnZvaWNlczogMyxcbiAgICAgICAgICBkb2N1bWVudHM6IDIsXG4gICAgICAgICAgc3VwcGxpZXJzOiAyLjUsXG4gICAgICAgICAgY2F0ZWdvcmllczogMlxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdmFyaWFudHNXaWR0aFt0aGlzLnZhcmlhbnRdIHx8IDQ7XG4gICAgICB9LFxuICAgICAgYWN0aXZlRmlsdGVycygpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyQ29uZmlncyA9IHtcbiAgICAgICAgICBkZWZhdWx0OiBbXG4gICAgICAgICAgICB7IHR5cGU6ICd0ZXh0JywgbGFiZWw6ICdOb21icmUgQ29udHJhcGFydGUnLCBtb2RlbDogJ3Byb3ZpZGVyJywgaWNvbjogJ21kaS1tYWduaWZ5JyB9LFxuICAgICAgICAgICAgeyB0eXBlOiAndGV4dCcsIGxhYmVsOiAnTklGIENvbnRyYXBhcnRlJywgbW9kZWw6ICduaWYnLCBpY29uOiAnbWRpLW1hZ25pZnknIH0sXG4gICAgICAgICAgICB7IHR5cGU6ICdzZWxlY3QnLCBsYWJlbDogJ07CsCBmYWN0dXJhJywgbW9kZWw6ICdpbnZvaWNlJywgaXRlbXM6IFtdLCBpY29uOiAnbWRpLW1hZ25pZnknIH0sXG4gICAgICAgICAgICB7IHR5cGU6ICdkYXRlJywgbGFiZWw6ICdGLiBWZW5jLicsIG1vZGVsOiAnZHVlRGF0ZScgfSxcbiAgICAgICAgICAgIHsgdHlwZTogJ3NlbGVjdCcsIGxhYmVsOiAnRXN0YWRvJywgbW9kZWw6ICdzdGF0dXMnLCBpdGVtczogdGhpcy5zdGF0dXNJdGVtcywgaWNvbjogJ21kaS1tYWduaWZ5JyB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBpbnZvaWNlczogW1xuICAgICAgICAgICAgeyB0eXBlOiAndGV4dCcsIGxhYmVsOiAnTm9tYnJlIENvbnRyYXBhcnRlJywgbW9kZWw6ICdwcm92aWRlcicsIGljb246ICdtZGktbWFnbmlmeScgfSxcbiAgICAgICAgICAgIHsgdHlwZTogJ3RleHQnLCBsYWJlbDogJ05JRiBDb250cmFwYXJ0ZScsIG1vZGVsOiAnbmlmJywgaWNvbjogJ21kaS1tYWduaWZ5JyB9LFxuICAgICAgICAgICAgeyB0eXBlOiAndGV4dCcsIGxhYmVsOiAnTsKwIGZhY3R1cmEnLCBtb2RlbDogJ2ludm9pY2UnLCBpY29uOiAnbWRpLW1hZ25pZnknIH0sXG4gICAgICAgICAgICB7IHR5cGU6ICdkYXRlJywgbGFiZWw6ICdEZXNkZScsIG1vZGVsOiAnZGF0ZUZyb20nIH0sXG4gICAgICAgICAgICB7IHR5cGU6ICdkYXRlJywgbGFiZWw6ICdIYXN0YScsIG1vZGVsOiAnZGF0ZVRvJyB9LFxuICAgICAgICAgICAgeyB0eXBlOiAnZGF0ZScsIGxhYmVsOiAnRi4gVmVuYy4nLCBtb2RlbDogJ2R1ZURhdGUnIH0sXG4gICAgICAgICAgICB7IHR5cGU6ICdzZWxlY3QnLCBsYWJlbDogJ0VzdGFkbycsIG1vZGVsOiAnc3RhdHVzJywgaXRlbXM6IHRoaXMuc3RhdHVzSXRlbXMgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgZG9jdW1lbnRzOiBbXG4gICAgICAgICAgICB7IHR5cGU6ICd0ZXh0JywgbGFiZWw6ICdOb21icmUgQ29udHJhcGFydGUnLCBtb2RlbDogJ3Byb3ZpZGVyJywgaWNvbjogJ21kaS1tYWduaWZ5JyB9LFxuICAgICAgICAgICAgeyB0eXBlOiAndGV4dCcsIGxhYmVsOiAnTklGIENvbnRyYXBhcnRlJywgbW9kZWw6ICduaWYnLCBpY29uOiAnbWRpLW1hZ25pZnknIH0sXG4gICAgICAgICAgICB7IHR5cGU6ICd0ZXh0JywgbGFiZWw6ICdOwrAgZmFjdHVyYScsIG1vZGVsOiAnaW52b2ljZScsIGljb246ICdtZGktbWFnbmlmeScgfSxcbiAgICAgICAgICAgIHsgdHlwZTogJ2RhdGUnLCBsYWJlbDogJ0Rlc2RlJywgbW9kZWw6ICdkYXRlRnJvbScgfSxcbiAgICAgICAgICAgIHsgdHlwZTogJ2RhdGUnLCBsYWJlbDogJ0hhc3RhJywgbW9kZWw6ICdkYXRlVG8nIH0sXG4gICAgICAgICAgICB7IHR5cGU6ICdzZWxlY3QnLCBsYWJlbDogJ0VzdGFkbycsIG1vZGVsOiAnc3RhdHVzJywgaXRlbXM6IHRoaXMuc3RhdHVzSXRlbXMgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgc3VwcGxpZXJzOiBbXG4gICAgICAgICAgICB7IHR5cGU6ICd0ZXh0JywgbGFiZWw6ICdOb21icmUgQ29udHJhcGFydGUnLCBtb2RlbDogJ3Byb3ZpZGVyJywgaWNvbjogJ21kaS1tYWduaWZ5JyB9LFxuICAgICAgICAgICAgeyB0eXBlOiAndGV4dCcsIGxhYmVsOiAnTklGIENvbnRyYXBhcnRlJywgbW9kZWw6ICduaWYnLCBpY29uOiAnbWRpLW1hZ25pZnknIH0sXG4gICAgICAgICAgICB7IHR5cGU6ICdzZWxlY3QnLCBsYWJlbDogJ0NhdGVnb3LDrWFzJywgbW9kZWw6ICdjYXRlZ29yeScsIGl0ZW1zOiBbXSwgaWNvbjogJ21kaS1tYWduaWZ5JyB9LFxuICAgICAgICAgICAgeyB0eXBlOiAnc2VsZWN0JywgbGFiZWw6ICdFc3RhZG8nLCBtb2RlbDogJ3N0YXR1cycsIGl0ZW1zOiB0aGlzLnN0YXR1c0l0ZW1zLCBpY29uOiAnbWRpLW1hZ25pZnknIH0sXG4gICAgICAgICAgICB7IHR5cGU6ICdzZWxlY3QnLCBsYWJlbDogJ0Zvcm1hIGRlIHBhZ28nLCBtb2RlbDogJ3BheW1lbnRNZXRob2QnLCBpdGVtczogdGhpcy5wYXltZW50TWV0aG9kSXRlbXMsIGljb246ICdtZGktbWFnbmlmeScgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgXG4gICAgICAgIHJldHVybiBmaWx0ZXJDb25maWdzW3RoaXMudmFyaWFudF0gfHwgZmlsdGVyQ29uZmlncy5kZWZhdWx0O1xuICAgICAgfSxcbiAgXG4gICAgICBzdGF0dXNJdGVtcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAnUGVuZGllbnRlJyxcbiAgICAgICAgICAnQXByb2JhZG8nLFxuICAgICAgICAgICdSZWNoYXphZG8nLFxuICAgICAgICAgICdFbiBwcm9jZXNvJ1xuICAgICAgICBdO1xuICAgICAgfSxcbiAgXG4gICAgICBwYXltZW50TWV0aG9kSXRlbXMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgJ1RyYW5zZmVyZW5jaWEnLFxuICAgICAgICAgICdDaGVxdWUnLFxuICAgICAgICAgICdFZmVjdGl2bycsXG4gICAgICAgICAgJ1RhcmpldGEnXG4gICAgICAgIF07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIDwvc2NyaXB0PlxuICBcbiAgPHN0eWxlIHNjb3BlZD5cbiAgLnNlYXJjaGVycyB7XG4gICAgcGFkZGluZzogOHB4O1xuICB9XG4gIDwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXIgdGV4dC1jZW50ZXIgbXQtNVwiPlxuICAgICAgPGltZyBzcmM9XCIvaW1hZ2VzL0xvZ28tc2NmLWNvbmZpcm1pbmcuc3ZnXCIgYWx0PVwiTG9nb1wiIHN0eWxlPVwibWF4LWhlaWdodDogODBweDtcIiBjbGFzcz1cIm1iLTRcIj5cbiAgXG4gICAgICA8aDE+NDA0PC9oMT5cbiAgXG4gICAgICA8aDIgY2xhc3M9XCJtYi00XCI+UMOhZ2luYSBubyBlbmNvbnRyYWRhPC9oMj5cbiAgXG4gICAgICA8cCBjbGFzcz1cInRleHQtbXV0ZWQgbWItNFwiPlxuICAgICAgICBMbyBzZW50aW1vcywgbGEgcMOhZ2luYSBxdWUgYnVzY2FzIG5vIGV4aXN0ZSBvIG9jdXJyacOzIHVuIHByb2JsZW1hIG1pZW50cmFzIHByb2Nlc8OhYmFtb3MgdHUgc29saWNpdHVkLlxuICAgICAgPC9wPlxuICBcbiAgICAgIDxyb3V0ZXItbGluayB0bz1cIi9hcHAvXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj5Wb2x2ZXIgYWwgSW5pY2lvPC9yb3V0ZXItbGluaz5cbiAgICAgIDwvZGl2PlxuICA8L3RlbXBsYXRlPlxuICBcbiAgPHNjcmlwdCBzZXR1cD5cbiAgLy8gTm8gc2UgbmVjZXNpdGEgbMOzZ2ljYSBKYXZhU2NyaXB0IGNvbXBsZWphIHBhcmEgdW5hIHDDoWdpbmEgNDA0IGLDoXNpY2EuXG4gIC8vICdzY3JpcHQgc2V0dXAnIGVzIGxhIHNpbnRheGlzIG1vZGVybmEgeSByZWNvbWVuZGFkYSBlbiBWdWUgMy5cbiAgPC9zY3JpcHQ+XG4gIFxuICA8c3R5bGUgc2NvcGVkPlxuICAvKiBFc3RpbG9zIHNvbG8gcGFyYSBlc3RlIGNvbXBvbmVudGUgKi9cbiAgZGl2LmNvbnRhaW5lci50ZXh0LWNlbnRlci5tdC01e1xuICAgIGZvbnQtZmFtaWx5OiBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLCBPeHlnZW4sIFVidW50dSwgQ2FudGFyZWxsLCAnT3BlbiBTYW5zJywgJ0hlbHZldGljYSBOZXVlJywgc2Fucy1zZXJpZjtcbiAgfVxuXG4gIC5ub3QtZm91bmQtY29udGFpbmVyIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgcGFkZGluZzogNDBweDtcbiAgICBtYXJnaW4tdG9wOiA1MHB4O1xuICB9XG4gIFxuICBoMSB7XG4gICAgZm9udC1zaXplOiA4MHB4O1xuICAgIGZvbnQtd2VpZ2h0OiAxMDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICBsaW5lLWhlaWdodDogMS4yO1xuICB9XG4gIFxuICBwIHtcbiAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICAgIGNvbG9yOiAjNmM3NTdkOyAvKiBVbiBncmlzIHBhcmEgZWwgdGV4dG8gZGVzY3JpcHRpdm8gKi9cbiAgfVxuICBcbiAgLyogRXN0aWxvIG9wY2lvbmFsIHBhcmEgZWwgZW5sYWNlICovXG4gIC5yb3V0ZXItbGluayB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgcGFkZGluZzogMTBweCAyMHB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7IC8qIEF6dWwgcHJpbWFyaW8gZGUgQm9vdHN0cmFwLCBwb3IgZWplbXBsbyAqL1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcyBlYXNlO1xuICB9XG4gIFxuICAucm91dGVyLWxpbms6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDU2YjM7XG4gIH1cbiAgPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG4gIDx2LWNvbnRhaW5lcj5cbiAgICA8di1jYXJkIGNsYXNzPVwiaW52b2ljZS10ZXN0ZXIgcGEtNlwiIGVsZXZhdGlvbj1cIjJcIj5cbiAgICAgIDwhLS0gSGVhZGVyIFNlY3Rpb24gLS0+XG4gICAgICA8aGVhZGVyIGNsYXNzPVwibWItOFwiPlxuICAgICAgICA8di1jYXJkLXRpdGxlIGNsYXNzPVwidGV4dC1oNFwiPlNpc3RlbWEgZGUgVGVzdGluZyBkZSBSZWdsYXM8L3YtY2FyZC10aXRsZT5cbiAgICAgICAgPHYtY2FyZC1zdWJ0aXRsZSBjbGFzcz1cInRleHQtYm9keS0xXCI+XG4gICAgICAgICAgU2VsZWNjaW9uYSBsYXMgZmFjdHVyYXMgeSByZWdsYXMgcXVlIGRlc2VhcyB2YWxpZGFyLiBcbiAgICAgICAgICA8YnI+XG4gICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgTm8gdGUgcHJlb2N1cGVzIGVzdG8gbm8gYWZlY3RhcmEgZGlyZWN0YW1lbnRlIGEgdHVzIGZhY3R1cmFzLCBlcyBzb2xvIHBhcmEgcHJvYmFyIHF1ZSBmdW5jaW9uZW4uXG4gICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgPC92LWNhcmQtc3VidGl0bGU+XG4gICAgICA8L2hlYWRlcj5cblxuICAgICAgPCEtLSBNYWluIENvbnRlbnQgR3JpZCAtLT5cbiAgICAgIDx2LXJvdz5cbiAgICAgICAgPCEtLSBMZWZ0IENvbHVtbjogSW52b2ljZSBTZWxlY3Rpb24gLS0+XG4gICAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIiBtZD1cIjdcIj5cbiAgICAgICAgICA8di1jYXJkLXRleHQ+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbWItNFwiPlxuICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ0ZXh0LWg1XCI+RmFjdHVyYXMgRGlzcG9uaWJsZXM8L2gyPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ib2R5LTJcIj5cbiAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZEludm9pY2VzLmxlbmd0aCB9fSBzZWxlY2Npb25hZGFzIGRlIHt7IGludm9pY2VzLmxlbmd0aCB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFNlYXJjaCBhbmQgRmlsdGVyIEJhciAtLT5cbiAgICAgICAgICAgIDx2LXJvdyBjbGFzcz1cIm1iLTRcIj5cbiAgICAgICAgICAgICAgPHYtY29sIGNvbHM9XCIxMlwiIHNtPVwiNlwiPlxuICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGRcbiAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJzZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgcHJlcGVuZC1pbm5lci1pY29uPVwibWRpLW1hZ25pZnlcIlxuICAgICAgICAgICAgICAgICAgbGFiZWw9XCJCdXNjYXIgZmFjdHVyYXNcIlxuICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgICAgICAgIGRlbnNpdHk9XCJjb21mb3J0YWJsZVwiXG4gICAgICAgICAgICAgICAgICBoaWRlLWRldGFpbHNcbiAgICAgICAgICAgICAgICA+PC92LXRleHQtZmllbGQ+XG4gICAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIiBzbT1cIjZcIj5cbiAgICAgICAgICAgICAgICA8di1zZWxlY3RcbiAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJmaWx0ZXJTdGF0dXNcIlxuICAgICAgICAgICAgICAgICAgOml0ZW1zPVwiWydUb2RhcycsICdQZW5kaWVudGVzJywgJ1ZlbmNpZGFzJ11cIlxuICAgICAgICAgICAgICAgICAgbGFiZWw9XCJFc3RhZG9cIlxuICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgICAgICAgIGRlbnNpdHk9XCJjb21mb3J0YWJsZVwiXG4gICAgICAgICAgICAgICAgICBoaWRlLWRldGFpbHNcbiAgICAgICAgICAgICAgICA+PC92LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgIDwvdi1yb3c+XG5cbiAgICAgICAgICAgIDwhLS0gSW52b2ljZSBHcmlkIC0tPlxuICAgICAgICAgICAgPHYtcm93PlxuICAgICAgICAgICAgICA8di1jb2wgXG4gICAgICAgICAgICAgICAgdi1mb3I9XCJpbnZvaWNlIGluIGZpbHRlcmVkSW52b2ljZXNcIiBcbiAgICAgICAgICAgICAgICA6a2V5PVwiaW52b2ljZS5pZFwiIFxuICAgICAgICAgICAgICAgIGNvbHM9XCIxMlwiIHNtPVwiNlwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8di1jYXJkXG4gICAgICAgICAgICAgICAgICA6Y2xhc3M9XCJbJ2ludm9pY2UtY2FyZCBwYS00JywgeydzZWxlY3RlZCc6IGlzU2VsZWN0ZWQoaW52b2ljZS5pZCl9XVwiXG4gICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgICAgICAgICAgICAgQGNsaWNrPVwidG9nZ2xlSW52b2ljZShpbnZvaWNlLmlkKVwiXG4gICAgICAgICAgICAgICAgICBob3ZlclxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24tY2VudGVyIGp1c3RpZnktc3BhY2UtYmV0d2VlbiBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDx2LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkSW52b2ljZXNcIlxuICAgICAgICAgICAgICAgICAgICAgIDp2YWx1ZT1cImludm9pY2UuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgIDpsYWJlbD1cImludm9pY2UuaW52b2ljZU51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgQGNsaWNrLnN0b3BcbiAgICAgICAgICAgICAgICAgICAgICBoaWRlLWRldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgPjwvdi1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgPHYtY2hpcFxuICAgICAgICAgICAgICAgICAgICAgIDpjb2xvcj1cImdldFN0YXR1c0NvbG9yKGludm9pY2UuZXhwaXJhdGlvbkRhdGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZ2V0U3RhdHVzVGV4dChpbnZvaWNlLmV4cGlyYXRpb25EYXRlKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3YtY2hpcD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52b2ljZS1kZXRhaWxzIG10LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1jZW50ZXIgbWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx2LWljb24gc2l6ZT1cInNtYWxsXCIgY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJtci0yXCI+bWRpLWN1cnJlbmN5LWV1cjwvdi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC13ZWlnaHQtbWVkaXVtXCI+e3sgZm9ybWF0Q3VycmVuY3koaW52b2ljZS50b3RhbCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx2LWljb24gc2l6ZT1cInNtYWxsXCIgY29sb3I9XCJncmV5XCIgY2xhc3M9XCJtci0yXCI+bWRpLWFjY291bnQ8L3YtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZ3JleVwiPkNsaWVudGU6IHt7IGludm9pY2UuY2xpZW50U29jaWFsRGVub21pbmF0aW9uIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8di1pY29uIHNpemU9XCJzbWFsbFwiIGNvbG9yPVwiZ3JleVwiIGNsYXNzPVwibXItMlwiPm1kaS1jYWxlbmRhcjwvdi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ncmV5XCI+VmVuY2U6IHt7IGZvcm1hdERhdGUoaW52b2ljZS5leHBpcmF0aW9uRGF0ZSkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC92LWNhcmQ+XG4gICAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgICA8L3Ytcm93PlxuICAgICAgICAgIDwvdi1jYXJkLXRleHQ+XG4gICAgICAgIDwvdi1jb2w+XG5cbiAgICAgICAgPCEtLSBSaWdodCBDb2x1bW46IFJ1bGVzIGFuZCBBY3Rpb25zIC0tPlxuICAgICAgICA8di1jb2wgY29scz1cIjEyXCIgbWQ9XCI1XCI+XG4gICAgICAgICAgPHYtY2FyZC10ZXh0PlxuICAgICAgICAgICAgPGgyIGNsYXNzPVwidGV4dC1oNSBtYi00XCI+Q29uZmlndXJhY2nDs24gZGUgUmVnbGFzPC9oMj5cbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICA8di1idG5cbiAgICAgICAgICAgICAgY29sb3I9XCJncmV5XCJcbiAgICAgICAgICAgICAgYmxvY2tcbiAgICAgICAgICAgICAgQGNsaWNrPVwidG9nZ2xlQWxsUnVsZXNcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJsb2FkaW5nXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHYtaWNvbiBzdGFydD5tZGktc2VsZWN0LWFsbDwvdi1pY29uPlxuICAgICAgICAgICAgICBUb2Rhcy9OaW5ndW5hIHJlZ2xhc1xuICAgICAgICAgICAgPC92LWJ0bj5cbiAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPCEtLSBSdWxlcyBTZWxlY3Rpb24gLS0+XG4gICAgICAgICAgICA8di1jYXJkIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGNsYXNzPVwicnVsZXMtY2FyZCBwYS00IG1iLTZcIj5cbiAgICAgICAgICAgICAgPGRpdiBcbiAgICAgICAgICAgICAgICB2LWZvcj1cIihlbmFibGVkLCBydWxlKSBpbiBzZWxlY3RlZFJ1bGVzXCIgXG4gICAgICAgICAgICAgICAgOmtleT1cInJ1bGVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicnVsZS1pdGVtXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDx2LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRSdWxlc1tydWxlXVwiXG4gICAgICAgICAgICAgICAgICA6bGFiZWw9XCJnZXRSdWxlTmFtZShydWxlKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDphcHBlbmQ+XG4gICAgICAgICAgICAgICAgICAgIDx2LXRvb2x0aXAgOnRleHQ9XCJnZXRSdWxlRGVzY3JpcHRpb24ocnVsZSlcIiBsb2NhdGlvbj1cInJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDphY3RpdmF0b3I9XCJ7IHByb3BzIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdi1iaW5kPVwicHJvcHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImdyZXktZGFya2VuLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPm1kaS1pbmZvcm1hdGlvbjwvdi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvdi10b29sdGlwPlxuICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L3YtY2hlY2tib3g+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC92LWNhcmQ+XG5cbiAgICAgICAgICAgIDwhLS0gQWN0aW9uIEJ1dHRvbnMgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0zXCI+XG4gICAgICAgICAgICAgIDx2LWJ0blxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICAgICAgICBibG9ja1xuICAgICAgICAgICAgICAgIDpsb2FkaW5nPVwibG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiIWNhblJ1blRlc3RcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cInJ1blRlc3RcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHYtaWNvbiBzdGFydD5tZGktcGxheTwvdi1pY29uPlxuICAgICAgICAgICAgICAgIHt7IGxvYWRpbmcgPyAnUHJvY2VzYW5kby4uLicgOiAnRWplY3V0YXIgVGVzdCcgfX1cbiAgICAgICAgICAgICAgPC92LWJ0bj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdi1jYXJkLXRleHQ+XG4gICAgICAgIDwvdi1jb2w+XG4gICAgICA8L3Ytcm93PlxuXG4gICAgICA8IS0tIFJlc3VsdHMgU2VjdGlvbiAtLT5cbiAgICAgIDx2LWV4cGFuZC10cmFuc2l0aW9uPlxuICAgICAgICA8ZGl2IHYtaWY9XCJyZXN1bHRzXCIgY2xhc3M9XCJtdC04XCI+XG4gICAgICAgICAgPHYtZGl2aWRlciBjbGFzcz1cIm1iLTZcIj48L3YtZGl2aWRlcj5cbiAgICAgICAgICBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbWItNFwiPlxuICAgICAgICAgICAgPGgyIGNsYXNzPVwidGV4dC1oNVwiPlJlc3VsdGFkb3MgZGVsIFRlc3Q8L2gyPlxuICAgICAgICAgICAgPHYtYnRuXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwiZXhwb3J0UmVzdWx0c1wiXG4gICAgICAgICAgICAgIDpkaXNhYmxlZD1cImxvYWRpbmdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8di1pY29uIHN0YXJ0Pm1kaS1kb3dubG9hZDwvdi1pY29uPlxuICAgICAgICAgICAgICBFeHBvcnRhciBSZXN1bHRhZG9zXG4gICAgICAgICAgICA8L3YtYnRuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBSZXN1bHRzIFN1bW1hcnkgLS0+XG4gICAgICAgICAgPHYtcm93IGNsYXNzPVwibWItNlwiPlxuICAgICAgICAgICAgPHYtY29sIGNvbHM9XCIxMlwiIHNtPVwiNFwiPlxuICAgICAgICAgICAgICA8di1jYXJkIGNsYXNzPVwic3VtbWFyeS1jYXJkXCIgY29sb3I9XCJzdWNjZXNzLWxpZ2h0ZW4tNVwiPlxuICAgICAgICAgICAgICAgIDx2LWNhcmQtdGV4dD5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWg2IHN1Y2Nlc3MtdGV4dFwiPlBydWViYXMgRXhpdG9zYXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWg0XCI+e3sgZ2V0U3VjY2Vzc0NvdW50IH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPC92LWNhcmQtdGV4dD5cbiAgICAgICAgICAgICAgPC92LWNhcmQ+XG4gICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgICAgPHYtY29sIGNvbHM9XCIxMlwiIHNtPVwiNFwiPlxuICAgICAgICAgICAgICA8di1jYXJkIGNsYXNzPVwic3VtbWFyeS1jYXJkXCIgY29sb3I9XCJlcnJvci1saWdodGVuLTVcIj5cbiAgICAgICAgICAgICAgICA8di1jYXJkLXRleHQ+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1oNiBlcnJvci10ZXh0XCI+UHJ1ZWJhcyBGYWxsaWRhczwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtaDRcIj57eyBnZXRGYWlsdXJlQ291bnQgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3YtY2FyZC10ZXh0PlxuICAgICAgICAgICAgICA8L3YtY2FyZD5cbiAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgICA8di1jb2wgY29scz1cIjEyXCIgc209XCI0XCI+XG4gICAgICAgICAgICAgIDx2LWNhcmQgY2xhc3M9XCJzdW1tYXJ5LWNhcmRcIiBjb2xvcj1cInByaW1hcnktbGlnaHRlbi01XCI+XG4gICAgICAgICAgICAgICAgPHYtY2FyZC10ZXh0PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtaDYgcHJpbWFyeS10ZXh0XCI+VGFzYSBkZSDDiXhpdG88L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWg0XCI+e3sgZ2V0U3VjY2Vzc1JhdGUgfX0lPC9kaXY+XG4gICAgICAgICAgICAgICAgPC92LWNhcmQtdGV4dD5cbiAgICAgICAgICAgICAgPC92LWNhcmQ+XG4gICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgIDwvdi1yb3c+XG5cbiAgICAgICAgICA8IS0tIERldGFpbGVkIFJlc3VsdHMgLS0+XG4gICAgICAgICAgPHYtZXhwYW5zaW9uLXBhbmVscz5cbiAgICAgICAgICAgIDwhLS0gQ2FtYmlhciBlbCB2LWZvciBwYXJhIHVzYXIgc2ltdWxhdGlvbnMgLS0+XG4gICAgICAgICAgICA8di1leHBhbnNpb24tcGFuZWxcbiAgICAgICAgICAgICAgdi1mb3I9XCIoc2ltdWxhdGlvbiwgaW52b2ljZUlkKSBpbiByZXN1bHRzPy5zaW11bGF0aW9uc1wiXG4gICAgICAgICAgICAgIDprZXk9XCJpbnZvaWNlSWRcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm1iLTJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPHYtZXhwYW5zaW9uLXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDx2LWljb25cbiAgICAgICAgICAgICAgICAgIDpjb2xvcj1cImhhc1N1Y2Nlc3NmdWxSdWxlcyhzaW11bGF0aW9uKSA/ICdzdWNjZXNzJyA6ICdlcnJvcidcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtci0yXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBoYXNTdWNjZXNzZnVsUnVsZXMoc2ltdWxhdGlvbikgPyAnbWRpLWNoZWNrLWNpcmNsZScgOiAnbWRpLWFsZXJ0LWNpcmNsZScgfX1cbiAgICAgICAgICAgICAgICA8L3YtaWNvbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtd2VpZ2h0LW1lZGl1bVwiPnt7IHNpbXVsYXRpb24uaW52b2ljZV9udW1iZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHYtY2hpcFxuICAgICAgICAgICAgICAgICAgOmNvbG9yPVwiaGFzU3VjY2Vzc2Z1bFJ1bGVzKHNpbXVsYXRpb24pID8gJ3N1Y2Nlc3MnIDogJ2Vycm9yJ1wiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1sLTRcIlxuICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBoYXNTdWNjZXNzZnVsUnVsZXMoc2ltdWxhdGlvbikgPyAnw4l4aXRvJyA6ICdGYWxsaWRvJyB9fVxuICAgICAgICAgICAgICAgIDwvdi1jaGlwPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdi1leHBhbnNpb24tcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICA8di1leHBhbnNpb24tcGFuZWwtdGV4dD5cbiAgICAgICAgICAgICAgICA8di1jYXJkIGZsYXQgY2xhc3M9XCJyZXN1bHQtZGV0YWlsIHBhLTRcIj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gRXN0YWRvIEluaWNpYWwgLS0+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zdWJ0aXRsZS0xIGZvbnQtd2VpZ2h0LW1lZGl1bSBtYi0yXCI+RXN0YWRvIEluaWNpYWw8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHYtY2FyZCB2YXJpYW50PVwib3V0bGluZWRcIiBjbGFzcz1cImJnLWdyZXktbGlnaHRlbi00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHYtY2FyZC10ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHByZT57eyBmb3JtYXRTdGF0ZShzaW11bGF0aW9uLm9yaWdpbmFsX3N0YXR1cykgfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3YtY2FyZC10ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L3YtY2FyZD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8IS0tIFJlc3VsdGFkb3MgcG9yIFJlZ2xhIC0tPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc3VidGl0bGUtMSBmb250LXdlaWdodC1tZWRpdW0gbWItMlwiPlByb2Nlc28gZGUgVmFsaWRhY2nDs248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHYtdGltZWxpbmUgZGVuc2l0eT1cImNvbWZvcnRhYmxlXCIgYWxpZ249XCJzdGFydFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx2LXRpbWVsaW5lLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIHYtZm9yPVwiKGV2ZW50LCBpbmRleCkgaW4gc2ltdWxhdGlvbi50aW1lbGluZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6a2V5PVwiaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgOmRvdC1jb2xvcj1cImdldFRpbWVsaW5lQ29sb3IoZXZlbnQuc3RhdHVzKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6aWNvbj1cImdldFRpbWVsaW5lSWNvbihldmVudC5zdGF0dXMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsLWRvdFxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LXNsb3Q6b3Bwb3NpdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNhcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtYXRUaW1lbGluZVR5cGUoZXZlbnQudHlwZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICA8di1jYXJkIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIDpjbGFzcz1cIlsndGltZWxpbmUtY2FyZCBteC0yIHBhLTInLCBgdGltZWxpbmUtJHtldmVudC5zdGF0dXN9YF1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYm9keS0yXCI+e3sgZXZlbnQubWVzc2FnZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPVwiZXZlbnQuZGV0YWlscyAmJiBPYmplY3Qua2V5cyhldmVudC5kZXRhaWxzKS5sZW5ndGggPiAwXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtY2FwdGlvbiBtdC0xIGRldGFpbHMtc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9XCIodmFsdWUsIGtleSkgaW4gZXZlbnQuZGV0YWlsc1wiIDprZXk9XCJrZXlcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1zaG93PVwic2hvdWxkU2hvd0RldGFpbChrZXkpXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGV0YWlsLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC13ZWlnaHQtbWVkaXVtXCI+e3sgZm9ybWF0RGV0YWlsS2V5KGtleSkgfX06PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybWF0RGV0YWlsVmFsdWUodmFsdWUpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC92LWNhcmQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC92LXRpbWVsaW5lLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDwvdi10aW1lbGluZT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8IS0tIEVzdGFkbyBGaW5hbCAtLT5cbiAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlLTEgZm9udC13ZWlnaHQtbWVkaXVtIG1iLTJcIj5Fc3RhZG8gRmluYWw8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHYtY2FyZCB2YXJpYW50PVwib3V0bGluZWRcIiBjbGFzcz1cImJnLWdyZXktbGlnaHRlbi00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHYtY2FyZC10ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHByZT57eyBmb3JtYXRTdGF0ZShzaW11bGF0aW9uLmZpbmFsX3N0YXR1cykgfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3YtY2FyZC10ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L3YtY2FyZD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvdi1jYXJkPlxuICAgICAgICAgICAgICA8L3YtZXhwYW5zaW9uLXBhbmVsLXRleHQ+XG4gICAgICAgICAgICA8L3YtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvdi1leHBhbnNpb24tcGFuZWxzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdi1leHBhbmQtdHJhbnNpdGlvbj5cbiAgICA8L3YtY2FyZD5cbiAgPC92LWNvbnRhaW5lcj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQgc2V0dXA+XG5pbXBvcnQgeyByZWYsIGNvbXB1dGVkLCBvbk1vdW50ZWQgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHsgdXNlR2xvYmFsVXRpbHMgfSBmcm9tICcuLi91dGlscy9nbG9iYWxzJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5cbi8vIEVzdGFkb1xuY29uc3QgaW52b2ljZXMgPSByZWYoW10pO1xuY29uc3Qgc2VsZWN0ZWRJbnZvaWNlcyA9IHJlZihbXSk7XG5jb25zdCBzZWFyY2ggPSByZWYoJycpO1xuY29uc3QgZmlsdGVyU3RhdHVzID0gcmVmKCdUb2RhcycpO1xuY29uc3Qgc2VsZWN0ZWRSdWxlcyA9IHJlZih7XG4gIEVsZWdpYmlsaXR5UnVsZTogZmFsc2UsXG4gIEV4cGlyYXRpb25EYXRlc1J1bGU6IGZhbHNlLFxuICBMaW1pdHNSdWxlOiBmYWxzZSxcbiAgRGlzY291bnRHcm91cHNSdWxlOiBmYWxzZSxcbiAgUGF5bWVudE1ldGhvZHNSdWxlOiBmYWxzZVxufSk7XG5jb25zdCByZXN1bHRzID0gcmVmKG51bGwpO1xuY29uc3QgbG9hZGluZyA9IHJlZihmYWxzZSk7XG5jb25zdCB7IHRvYXN0IH0gPSB1c2VHbG9iYWxVdGlscygpO1xuXG4vLyBDb21wdXRlZCBQcm9wZXJ0aWVzXG5jb25zdCBmaWx0ZXJlZEludm9pY2VzID0gY29tcHV0ZWQoKCkgPT4ge1xuICBsZXQgZmlsdGVyZWQgPSBbLi4uaW52b2ljZXMudmFsdWVdO1xuICBcbiAgLy8gQXBsaWNhciBiw7pzcXVlZGFcbiAgaWYgKHNlYXJjaC52YWx1ZSkge1xuICAgIGNvbnN0IHNlYXJjaFRlcm0gPSBzZWFyY2gudmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkLmZpbHRlcihpbnZvaWNlID0+IFxuICAgICAgaW52b2ljZS5pbnZvaWNlTnVtYmVyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGVybSlcbiAgICApO1xuICB9XG4gIFxuICAvLyBBcGxpY2FyIGZpbHRybyBkZSBlc3RhZG9cbiAgaWYgKGZpbHRlclN0YXR1cy52YWx1ZSAhPT0gJ1RvZGFzJykge1xuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkLmZpbHRlcihpbnZvaWNlID0+IHtcbiAgICAgIGNvbnN0IGlzRXhwaXJlZCA9IG5ldyBEYXRlKGludm9pY2UuZXhwaXJhdGlvbkRhdGUpIDwgdG9kYXk7XG4gICAgICByZXR1cm4gZmlsdGVyU3RhdHVzLnZhbHVlID09PSAnVmVuY2lkYXMnID8gaXNFeHBpcmVkIDogIWlzRXhwaXJlZDtcbiAgICB9KTtcbiAgfVxuICBcbiAgcmV0dXJuIGZpbHRlcmVkO1xufSk7XG5cbmNvbnN0IGNhblJ1blRlc3QgPSBjb21wdXRlZCgoKSA9PiBcbiAgc2VsZWN0ZWRJbnZvaWNlcy52YWx1ZS5sZW5ndGggPiAwICYmIFxuICBPYmplY3QudmFsdWVzKHNlbGVjdGVkUnVsZXMudmFsdWUpLnNvbWUocnVsZSA9PiBydWxlKVxuKTtcblxuLy8gQ29tcHV0ZWRzLi4uXG5jb25zdCBnZXRTdWNjZXNzQ291bnQgPSBjb21wdXRlZCgoKSA9PiByZXN1bHRzLnZhbHVlPy5zdW1tYXJ5Py5zdWNjZXNzZnVsID8/IDApO1xuY29uc3QgZ2V0RmFpbHVyZUNvdW50ID0gY29tcHV0ZWQoKCkgPT4gcmVzdWx0cy52YWx1ZT8uc3VtbWFyeT8uZmFpbGVkID8/IDApO1xuY29uc3QgZ2V0U3VjY2Vzc1JhdGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gIGlmICghcmVzdWx0cy52YWx1ZT8uc3VtbWFyeT8udG90YWwpIHJldHVybiAwO1xuICByZXR1cm4gTWF0aC5yb3VuZCgocmVzdWx0cy52YWx1ZS5zdW1tYXJ5LnN1Y2Nlc3NmdWwgLyByZXN1bHRzLnZhbHVlLnN1bW1hcnkudG90YWwpICogMTAwKTtcbn0pO1xuXG4vLyBNw6l0b2Rvc1xuY29uc3QgaXNTZWxlY3RlZCA9IChpZCkgPT4gc2VsZWN0ZWRJbnZvaWNlcy52YWx1ZS5pbmNsdWRlcyhpZCk7XG5cbmNvbnN0IGhhc1N1Y2Nlc3NmdWxSdWxlcyA9IChzaW11bGF0aW9uKSA9PiB7XG4gIGlmICghc2ltdWxhdGlvbi5maW5hbF9zdGF0dXMpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHNpbXVsYXRpb24uZmluYWxfc3RhdHVzLmFkdmFuY2VBbGxvd2VkID09PSB0cnVlO1xufTtcblxuY29uc3QgdG9nZ2xlSW52b2ljZSA9IChpZCkgPT4ge1xuICBpZiAoaXNTZWxlY3RlZChpZCkpIHtcbiAgICBzZWxlY3RlZEludm9pY2VzLnZhbHVlID0gc2VsZWN0ZWRJbnZvaWNlcy52YWx1ZS5maWx0ZXIoaSA9PiBpICE9PSBpZCk7XG4gIH0gZWxzZSB7XG4gICAgc2VsZWN0ZWRJbnZvaWNlcy52YWx1ZS5wdXNoKGlkKTtcbiAgfVxufTtcblxuXG5cbmNvbnN0IGZvcm1hdERhdGUgPSAoZGF0ZVN0cikgPT4ge1xuICBpZiAoIWRhdGVTdHIpIHJldHVybiAnJztcblxuICBjb25zdCBbeWVhciwgbW9udGgsIGRheV0gPSBkYXRlU3RyLnNwbGl0KCctJyk7XG4gIHJldHVybiBgJHtkYXl9LyR7bW9udGh9LyR7eWVhcn1gO1xufTtcblxuXG5jb25zdCBmb3JtYXRDdXJyZW5jeSA9IChhbW91bnQpID0+IHtcbiAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCgnZXMtRVMnLCB7XG4gICAgc3R5bGU6ICdjdXJyZW5jeScsXG4gICAgY3VycmVuY3k6ICdFVVInXG4gIH0pLmZvcm1hdChhbW91bnQpO1xufTtcblxuY29uc3QgZm9ybWF0U3RhdGUgPSAoc3RhdGUpID0+IHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHN0YXRlLCBudWxsLCAyKTtcbn07XG5cbmNvbnN0IGdldFN0YXR1c0NvbG9yID0gKGRhdGUpID0+IHtcbiAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCBleHBpcmF0aW9uRGF0ZSA9IG5ldyBEYXRlKGRhdGUpO1xuICBpZiAoZXhwaXJhdGlvbkRhdGUgPCB0b2RheSkgcmV0dXJuICdlcnJvcic7XG4gIGlmIChleHBpcmF0aW9uRGF0ZSAtIHRvZGF5IDwgNyAqIDI0ICogNjAgKiA2MCAqIDEwMDApIHJldHVybiAnd2FybmluZyc7XG4gIHJldHVybiAnc3VjY2Vzcyc7XG59O1xuXG5jb25zdCBnZXRTdGF0dXNUZXh0ID0gKGRhdGUpID0+IHtcbiAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCBleHBpcmF0aW9uRGF0ZSA9IG5ldyBEYXRlKGRhdGUpO1xuICBpZiAoZXhwaXJhdGlvbkRhdGUgPCB0b2RheSkgcmV0dXJuICdWZW5jaWRhJztcbiAgaWYgKGV4cGlyYXRpb25EYXRlIC0gdG9kYXkgPCA3ICogMjQgKiA2MCAqIDYwICogMTAwMCkgcmV0dXJuICdQcsOzeGltYSc7XG4gIHJldHVybiAnVmlnZW50ZSc7XG59O1xuXG5jb25zdCBnZXRSdWxlTmFtZSA9IChydWxlKSA9PiAoe1xuICBFbGVnaWJpbGl0eVJ1bGU6ICdFbGVnaWJpbGlkYWQnLFxuICBFeHBpcmF0aW9uRGF0ZXNSdWxlOiAnRmVjaGFzIGRlIFZlbmNpbWllbnRvJyxcbiAgTGltaXRzUnVsZTogJ0zDrW1pdGVzJyxcbiAgRGlzY291bnRHcm91cHNSdWxlOiAnR3J1cG9zIGRlIERlc2N1ZW50bycsXG4gIFBheW1lbnRNZXRob2RzUnVsZTogJ03DqXRvZG9zIGRlIFBhZ28nXG59KVtydWxlXTtcblxuY29uc3QgZ2V0UnVsZURlc2NyaXB0aW9uID0gKHJ1bGUpID0+ICh7XG4gIEVsZWdpYmlsaXR5UnVsZTogJ1ZlcmlmaWNhIHNpIGxhIGZhY3R1cmEgY3VtcGxlIGNvbiBsb3MgY3JpdGVyaW9zIGLDoXNpY29zIGRlIGVsZWdpYmlsaWRhZCcsXG4gIEV4cGlyYXRpb25EYXRlc1J1bGU6ICdWYWxpZGEgbGFzIGZlY2hhcyBkZSB2ZW5jaW1pZW50byB5IHBsYXpvcyBkZSBwYWdvJyxcbiAgTGltaXRzUnVsZTogJ0NvbXBydWViYSBxdWUgbG9zIG1vbnRvcyBlc3TDqW4gZGVudHJvIGRlIGxvcyBsw61taXRlcyBlc3RhYmxlY2lkb3MnLFxuICBEaXNjb3VudEdyb3Vwc1J1bGU6ICdWYWxpZGEgbGEgYXBsaWNhY2nDs24gY29ycmVjdGEgZGUgZGVzY3VlbnRvcyBzZWfDum4gZWwgZ3J1cG8nLFxuICBQYXltZW50TWV0aG9kc1J1bGU6ICdWZXJpZmljYSBsYSBkaXNwb25pYmlsaWRhZCB5IHZhbGlkZXogZGUgbG9zIG3DqXRvZG9zIGRlIHBhZ28nXG59KVtydWxlXTtcblxuY29uc3QgdG9nZ2xlQWxsUnVsZXMgPSAoKSA9PiB7XG4gIGNvbnN0IHNydiA9IHNlbGVjdGVkUnVsZXMudmFsdWU7XG4gIGNvbnN0IHRvZ2dsZWRWYWx1ZSA9ICFzcnYuRWxlZ2liaWxpdHlSdWxlICYmICFzcnYuRXhwaXJhdGlvbkRhdGVzUnVsZSAmJiAhc3J2LkxpbWl0c1J1bGUgJiYgIXNydi5EaXNjb3VudEdyb3Vwc1J1bGUgJiYgIXNydi5QYXltZW50TWV0aG9kc1J1bGU7XG5cbiAgc2VsZWN0ZWRSdWxlcy52YWx1ZSA9IHtcbiAgICBFbGVnaWJpbGl0eVJ1bGU6IHRvZ2dsZWRWYWx1ZSxcbiAgICBFeHBpcmF0aW9uRGF0ZXNSdWxlOiB0b2dnbGVkVmFsdWUsXG4gICAgTGltaXRzUnVsZTogdG9nZ2xlZFZhbHVlLFxuICAgIERpc2NvdW50R3JvdXBzUnVsZTogdG9nZ2xlZFZhbHVlLFxuICAgIFBheW1lbnRNZXRob2RzUnVsZTogdG9nZ2xlZFZhbHVlXG4gIH07XG4gIFxuICByZXN1bHRzLnZhbHVlID0gbnVsbDtcbn07XG5cbmNvbnN0IGV4cG9ydFJlc3VsdHMgPSAoKSA9PiB7XG4gIGlmICghcmVzdWx0cy52YWx1ZSkgcmV0dXJuO1xuXG4gIGNvbnN0IGV4cG9ydERhdGEgPSB7XG4gICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgc3VtbWFyeTogcmVzdWx0cy52YWx1ZS5zdW1tYXJ5LFxuICAgIHNpbXVsYXRpb25zOiByZXN1bHRzLnZhbHVlLnNpbXVsYXRpb25zXG4gIH07XG5cbiAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtKU09OLnN0cmluZ2lmeShleHBvcnREYXRhLCBudWxsLCAyKV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nIH0pO1xuICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgbGluay5ocmVmID0gdXJsO1xuICBsaW5rLmRvd25sb2FkID0gYHRlc3QtcmVzdWx0cy0ke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdfS5qc29uYDtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgbGluay5jbGljaygpO1xuICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xuICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICBcbiAgdG9hc3Quc3VjY2VzcygnUmVzdWx0YWRvcyBleHBvcnRhZG9zIGNvcnJlY3RhbWVudGUnKTtcbn07XG5cbi8vIEFqdXN0YXIgbGEgZnVuY2nDs24gcnVuVGVzdCBwYXJhIHVzYXIgbGEgbnVldmEgZXN0cnVjdHVyYVxuY29uc3QgcnVuVGVzdCA9IGFzeW5jICgpID0+IHtcbiAgaWYgKCFjYW5SdW5UZXN0LnZhbHVlKSByZXR1cm47XG4gIFxuICBsb2FkaW5nLnZhbHVlID0gdHJ1ZTtcbiAgcmVzdWx0cy52YWx1ZSA9IG51bGw7XG4gIFxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdCgnL2FwaS90b29scy9ydWxlLXRlc3Rlci9zaW11bGF0ZScsIHtcbiAgICAgIGludm9pY2VJZHM6IHNlbGVjdGVkSW52b2ljZXMudmFsdWUsXG4gICAgICBydWxlczogc2VsZWN0ZWRSdWxlcy52YWx1ZVxuICAgIH0pO1xuXG4gICAgcmVzdWx0cy52YWx1ZSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgY29uc3QgeyBzdWNjZXNzZnVsLCB0b3RhbCB9ID0gcmVzcG9uc2UuZGF0YS5zdW1tYXJ5O1xuICAgIFxuICAgIGlmIChzdWNjZXNzZnVsID09PSB0b3RhbCkge1xuICAgICAgdG9hc3Quc3VjY2VzcyhgwqHDiXhpdG8hIFRvZGFzIGxhcyBmYWN0dXJhcyAoJHt0b3RhbH0pIHBhc2Fyb24gbGFzIHBydWViYXNgKTtcbiAgICB9IGVsc2UgaWYgKHN1Y2Nlc3NmdWwgPT09IDApIHtcbiAgICAgIHRvYXN0LmVycm9yKGBOaW5ndW5hIGZhY3R1cmEgcGFzw7MgbGFzIHJlZ2xhcyAoJHt0b3RhbH0gZmFsbGlkYXMpYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvYXN0Lndhcm5pbmcoYCR7c3VjY2Vzc2Z1bH0gZGUgJHt0b3RhbH0gZmFjdHVyYXMgcGFzYXJvbiBsYXMgcHJ1ZWJhc2ApO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvciBlbiBsYSBzaW11bGFjacOzbjonLCBlcnJvcik7XG4gICAgdG9hc3QuZXJyb3IoJ0Vycm9yIGFsIGVqZWN1dGFyIGxhIHNpbXVsYWNpw7NuOiAnICsgKGVycm9yLnJlc3BvbnNlPy5kYXRhPy5tZXNzYWdlIHx8IGVycm9yLm1lc3NhZ2UpKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBsb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gIH1cbn07XG5cbi8vIFRpbWVMaW5lIG1ldGhvZHNcbmNvbnN0IGdldFRpbWVsaW5lQ29sb3IgPSAoc3RhdHVzKSA9PiB7XG4gIGNvbnN0IGNvbG9ycyA9IHtcbiAgICAnc3VjY2Vzcyc6ICdzdWNjZXNzJyxcbiAgICAnZXJyb3InOiAnZXJyb3InLFxuICAgICdza2lwcGVkJzogJ3dhcm5pbmcnLFxuICAgICdpbmZvJzogJ2luZm8nXG4gIH07XG4gIHJldHVybiBjb2xvcnNbc3RhdHVzXSB8fCAnZ3JleSc7XG59O1xuXG5jb25zdCBnZXRUaW1lbGluZUljb24gPSAoc3RhdHVzKSA9PiB7XG4gIGNvbnN0IGljb25zID0ge1xuICAgICdzdWNjZXNzJzogJ21kaS1jaGVjay1jaXJjbGUnLFxuICAgICdlcnJvcic6ICdtZGktYWxlcnQtY2lyY2xlJyxcbiAgICAnc2tpcHBlZCc6ICdtZGktc2tpcC1uZXh0LWNpcmNsZScsXG4gICAgJ2luZm8nOiAnbWRpLWluZm9ybWF0aW9uJyxcbiAgfTtcbiAgcmV0dXJuIGljb25zW3N0YXR1c10gfHwgJ21kaS1jaXJjbGUnO1xufTtcblxuY29uc3QgZm9ybWF0VGltZWxpbmVUeXBlID0gKHR5cGUpID0+IHtcbiAgY29uc3QgdHlwZXMgPSB7XG4gICAgJ3J1bGUnOiAnUmVnbGEnLFxuICAgICd2YWxpZGF0aW9uJzogJ1ZhbGlkYWNpw7NuJyxcbiAgICAndGFyZ2V0JzogJ1RhcmdldCcsXG4gICAgJ2luZm8nOiAnSW5mbydcbiAgfTtcbiAgcmV0dXJuIHR5cGVzW3R5cGVdIHx8IHR5cGU7XG59O1xuXG5jb25zdCBzaG91bGRTaG93RGV0YWlsID0gKGtleSkgPT4ge1xuICAvLyBGaWx0cmFyIHF1w6kgZGV0YWxsZXMgcXVlcmVtb3MgbW9zdHJhclxuICAvLyBjb25zdCB2YWxpZEtleXMgPSBbJ3J1bGVfaWQnLCAncHJpb3JpdHknLCAndGFyZ2V0X2lkJywgJ21lc3NhZ2UnXTtcbiAgLy8gcmV0dXJuIHZhbGlkS2V5cy5pbmNsdWRlcyhrZXkpO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmNvbnN0IGZvcm1hdERldGFpbEtleSA9IChrZXkpID0+IHtcbiAgY29uc3Qga2V5TWFwID0ge1xuICAgICdydWxlX2lkJzogJ1JlZ2xhIElEJyxcbiAgICAncHJpb3JpdHknOiAnUHJpb3JpZGFkJyxcbiAgICAndGFyZ2V0X2lkJzogJ1RhcmdldCBJRCcsXG4gICAgJ21lc3NhZ2UnOiAnTWVuc2FqZSdcbiAgfTtcbiAgcmV0dXJuIGtleU1hcFtrZXldIHx8IGtleTtcbn07XG5cbmNvbnN0IGZvcm1hdERldGFpbFZhbHVlID0gKHZhbHVlKSA9PiB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICdOL0EnO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHJldHVybiB2YWx1ZSA/ICdTw60nIDogJ05vJztcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbm9uTW91bnRlZChhc3luYyAoKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQoJy9hcGkvdG9vbHMvcnVsZS10ZXN0ZXIvaW52b2ljZXMnKTtcbiAgICBpbnZvaWNlcy52YWx1ZSA9IHJlc3BvbnNlLmRhdGE7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3IgYWwgY2FyZ2FyIGZhY3R1cmFzOicsIGVycm9yKTtcbiAgICB0b2FzdC5lcnJvcignRXJyb3IgYWwgY2FyZ2FyIGxhcyBmYWN0dXJhcycpO1xuICB9XG59KTtcbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuLmludm9pY2UtdGVzdGVyIHtcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcbn1cblxuLmludm9pY2UtY2FyZCB7XG4gIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7XG4gIGJvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xufVxuXG4uaW52b2ljZS1jYXJkOmhvdmVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xuICBib3gtc2hhZG93OiAwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cblxuLmludm9pY2UtY2FyZC5zZWxlY3RlZCB7XG4gIGJvcmRlci1jb2xvcjogcmdiKHZhcigtLXYtdGhlbWUtcHJpbWFyeSkpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IodmFyKC0tdi10aGVtZS1wcmltYXJ5LWxpZ2h0ZW4tNSkpO1xufVxuXG4ucnVsZXMtY2FyZCB7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbn1cblxuLnJ1bGUtaXRlbSB7XG4gIHBhZGRpbmc6IDhweCAwO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuXG4ucnVsZS1pdGVtOmxhc3QtY2hpbGQge1xuICBib3JkZXItYm90dG9tOiBub25lO1xufVxuXG4uc3VtbWFyeS1jYXJkIHtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcyBlYXNlO1xufVxuXG4uc3VtbWFyeS1jYXJkOmhvdmVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xufVxuXG4uc3VjY2Vzcy10ZXh0IHtcbiAgY29sb3I6IHJnYih2YXIoLS12LXRoZW1lLXN1Y2Nlc3MpKTtcbn1cblxuLmVycm9yLXRleHQge1xuICBjb2xvcjogcmdiKHZhcigtLXYtdGhlbWUtZXJyb3IpKTtcbn1cblxuLnByaW1hcnktdGV4dCB7XG4gIGNvbG9yOiByZ2IodmFyKC0tdi10aGVtZS1wcmltYXJ5KSk7XG59XG5cbnByZSB7XG4gIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICBtYXJnaW46IDA7XG4gIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCBtb25vc3BhY2U7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG59XG5cbi5yZXN1bHQtZGV0YWlsIHtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xufVxuXG4vKiBUaW1lTGluZSBTdHlsZXMgKi9cbi52LXRpbWVsaW5lLWl0ZW0ge1xuICBtYXJnaW4tYm90dG9tOiA4cHg7XG59XG5cbi52LXRpbWVsaW5lLWl0ZW06bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbi50aW1lbGluZS1jYXJkIHtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMnM7XG59XG5cbi50aW1lbGluZS1jYXJkOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKHZhcigtLXYtdGhlbWUtc3VyZmFjZS12YXJpYW50KSk7XG59XG5cbi50aW1lbGluZS1zdWNjZXNzIHtcbiAgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCByZ2IodmFyKC0tdi10aGVtZS1zdWNjZXNzKSk7XG59XG5cbi50aW1lbGluZS1lcnJvciB7XG4gIGJvcmRlci1sZWZ0OiAzcHggc29saWQgcmdiKHZhcigtLXYtdGhlbWUtZXJyb3IpKTtcbn1cblxuLnRpbWVsaW5lLXNraXBwZWQge1xuICBib3JkZXItbGVmdDogM3B4IHNvbGlkIHJnYih2YXIoLS12LXRoZW1lLXdhcm5pbmcpKTtcbn1cblxuLnRpbWVsaW5lLWluZm8ge1xuICBib3JkZXItbGVmdDogM3B4IHNvbGlkIHJnYih2YXIoLS12LXRoZW1lLWluZm8pKTtcbn1cblxuLmRldGFpbHMtc2VjdGlvbiB7XG4gIG1hcmdpbi10b3A6IDRweDtcbiAgcGFkZGluZy10b3A6IDRweDtcbiAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCByZ2JhKHZhcigtLXYtYm9yZGVyLWNvbG9yKSwgMC4yKTtcbn1cblxuLmRldGFpbC1pdGVtIHtcbiAgcGFkZGluZzogMnB4IDA7XG4gIGNvbG9yOiByZ2JhKHZhcigtLXYtdGhlbWUtb24tc3VyZmFjZSksIDAuNyk7XG59XG5cbi52LXRpbWVsaW5lLWl0ZW1fX2JvZHkge1xuICBtYXgtd2lkdGg6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLnRpbWVsaW5lLWNhcmQgLnRleHQtYm9keS0yIHtcbiAgY29sb3I6IHJnYmEodmFyKC0tdi10aGVtZS1vbi1zdXJmYWNlKSwgMC44Nyk7XG59XG48L3N0eWxlPiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==*/