@sunbird-cb/consumption 0.0.8 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1954,7 +1954,7 @@ var ContentStripWithTabsLibComponent = /** @class */ (function (_super) {
1954
1954
  ContentStripWithTabsLibComponent.decorators = [
1955
1955
  { type: Component, args: [{
1956
1956
  selector: 'sb-uic-content-strip-with-tabs',
1957
- template: "<ng-container *ngIf=\"!contentAvailable; else otherTemplate\"></ng-container>\n<ng-template #otherTemplate>\n <!-- <div *ngIf=\"showParentLoader\" class=\"text-center my-2\">\n <mat-spinner class=\"inline-block\"></mat-spinner>\n </div> -->\n <ng-container *ngIf=\"showParentError\" [sbUiResolverWidget]=\"widgetData.errorWidget\"></ng-container>\n <ng-container *ngIf=\"showParentNoData\" [sbUiResolverWidget]=\"widgetData.noDataWidget\"></ng-container>\n <ng-container *ngFor=\"let key of stripsKeyOrder; let i = index; trackBy: identify\">\n <ng-container *ngIf=\"isStripShowing(stripsResultDataMap[key])\">\n <a name=\"{{stripsResultDataMap[key]?.stripTitle}}\" [class]=\"key\">\n <div *ngIf=\"stripsResultDataMap && (getLength(stripsResultDataMap[key]) ||\n stripsResultDataMap[key]?.showOnNoData ||\n stripsResultDataMap[key]?.showOnLoader ||\n stripsResultDataMap[key]?.showOnError)\n \" [ngClass]=\"\n !widgetData?.isChannelStrip ? 'xs:px-8 sx:px-10ss' : i > 0 ? 'mt-12' : ''\n \" [id]=\"key\" [ngClass]=\"!widgetData?.isChannelStrip ? margin-bottom-custom : margin-bottom-xs\">\n <div [ngClass]=\"{ pad: stripsResultDataMap[key]?.stripBackground }\"\n [ngStyle]=\"{ 'background-color': stripsResultDataMap[key]?.stripBackground }\">\n <div class=\"flex flex-col pl-4 pr-4 md:pr-0 md:pl-0 \" [ngClass]=\"\n !widgetData?.isChannelStrip\n ? ''\n : stripsResultDataMap[key]?.stripTitle\n ? 'mb-8'\n : ''\n \">\n <div class=\"flex flex-1 items-center\">\n <p class=\"mat-subheading-1 margin-remove inline-block \" *ngIf=\"stripsResultDataMap[key]?.stripTitle\">\n <span class=\"capitalize\" *ngIf=\"stripsResultDataMap[key]?.disableTranslate\">\n {{stripsResultDataMap[key]?.stripTitle}}\n </span>\n <span *ngIf=\"!stripsResultDataMap[key]?.disableTranslate\">\n {{ translateLabels(stripsResultDataMap[key]?.stripTitle, 'home') }}\n </span>\n </p>\n\n <button *ngIf=\"stripsResultDataMap[key]?.stripInfo?.icon\" type=\"button\" mat-icon-button\n (click)=\"toggleInfo(stripsResultDataMap[key])\" i18n-matTooltip matTooltip=\"info\"\n class=\"margin-left-xs\">\n <mat-icon>{{ stripsResultDataMap[key]?.stripInfo?.icon.icon }}</mat-icon>\n </button>\n <a *ngIf=\"stripsResultDataMap[key]?.stripTitleLink?.link\"\n [routerLink]=\"stripsResultDataMap[key]?.stripTitleLink?.link\"\n [queryParams]=\"stripsResultDataMap[key]?.stripTitleLink?.link?.queryParams\">\n <mat-icon class=\"ws-mat-primary-primary-text ws-mat-default-text\" [color]=\"'accent'\">{{\n stripsResultDataMap[key]?.stripTitleLink?.icon }}</mat-icon>\n </a>\n <span class=\"spacer\"></span>\n <!-- viewAll start-->\n <div *ngIf=\"checkCondition(widgetData , stripsResultDataMap[key])\"\n class=\"ml-4 view-more ws-mat-default-text\">\n <a class=\"flex ws-mat-default-text items-center justify-center mat-body-1\" [routerLink]=\"stripsResultDataMap[key]?.viewMoreUrl?.path\"\n [queryParams]=\"stripsResultDataMap[key]?.viewMoreUrl?.queryParams\">\n <span i18n class=\"ws-mat-default-text\">{{translateLabels(widgetData.strips[0].viewMoreUrl.viewMoreText,'home') || 'See all'}}</span>\n <mat-icon class=\"ws-mat-default-text mat-icon notranslate material-icons mat-icon-no-color\" color=\"accent\">navigate_next</mat-icon>\n </a>\n </div>\n <!-- viewAll end-->\n </div>\n <button mat-icon-button (click)=\"setHiddenForStrip(key)\" *ngIf=\"stripsResultDataMap[key]?.canHideStrip\">\n <mat-icon>close</mat-icon>\n </button>\n <mat-icon class=\"cursor-pointer\" *ngIf=\"stripsResultDataMap[key]?.mode === 'accordion' && isMobile\"\n (click)=\"showAccordionData = !showAccordionData\">{{ showAccordionData ? 'expand_less' : 'expand_more' }}\n </mat-icon>\n </div>\n\n <div class=\"mb-4\" *ngIf=\"checkVisible(stripsResultDataMap[key])\">\n <ng-container [sbUiResolverWidget]=\"getdata(stripsResultDataMap[key])\">\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"stripsResultDataMap[key]?.showOnNoData\"\n [sbUiResolverWidget]=\"stripsResultDataMap[key]?.noDataWidget\"></ng-container>\n <ng-container *ngIf=\"stripsResultDataMap[key]?.showOnError\"\n [sbUiResolverWidget]=\"stripsResultDataMap[key]?.errorWidget\"></ng-container>\n <!-- IF no errors then proceed to show tabs or non tabs strip -->\n <ng-container *ngIf=\"!stripsResultDataMap[key]?.showOnNoData && !stripsResultDataMap[key]?.showOnError\">\n <ng-container *ngIf=\"stripsResultDataMap[key].tabs && stripsResultDataMap[key].tabs.length\">\n <mat-tab-group animationDuration=\"0ms\" [selectedIndex]=\"getSelectedIndex(stripsResultDataMap[key], key)\"\n class=\"mat-tab-labels w-full strips-tabgroup\" dynamicHeight\n (selectedTabChange)=\"tabClicked($event, stripsResultDataMap[key], key)\">\n <mat-tab label=\"{{tab?.label}}\" *ngFor=\"let tab of stripsResultDataMap[key].tabs; let last = last;\">\n <ng-template mat-tab-label>\n <span>{{ translateLabels(tab?.label, 'home') }} &nbsp;</span>\n <span *ngIf=\"tab?.showTabDataCount && tab?.widgets?.length\">({{tab?.widgets?.length}})</span>\n </ng-template>\n <div>\n <!-- <ng-container [ngTemplateOutlet]=\"loader\" *ngIf=\"stripsResultDataMap[key]?.showOnLoader\">\n </ng-container> -->\n <div *ngIf=\"stripsResultDataMap && stripsResultDataMap[key]?.showOnLoader ||\n !tab.fetchTabStatus\"\n class=\"text-center my-2\">\n <sb-uic-horizontal-scroller-v2 [sliderConfig]=\"stripsResultDataMap[key]?.sliderConfig\"\n [loadStatus]=\"'fetching'\" [stripConfig]=\"stripsResultDataMap[key]?.stripConfig\">\n <ng-container *ngFor=\"let widget of stripsResultDataMap[key]?.loaderWidgets; trackBy: tracker\">\n <ng-container [sbUiResolverWidget]=\"widget\"></ng-container>\n </ng-container>\n </sb-uic-horizontal-scroller-v2>\n </div>\n <div *ngIf=\"((tab?.fetchTabStatus && tab?.fetchTabStatus === 'done') &&\n (!tab?.widgets || !tab?.widgets?.length))\">\n <ng-container *ngIf=\"tab?.value === 'inprogress'; else msgTemp\">\n <div class=\"w-full flex flex-col items-center justify-center\">\n <img alt=\"\" class=\"mt-4 mb-4\" src=\"assets/icons/home/nodataDefault.svg\">\n <div class=\"mat-subheading-1 text-center info-content\">{{ 'contentstripmultiple.getReadyForLearningAdventure' | translate }} -\n <a class=\"click-here\" [routerLink]=\"'/page/learn'\">{{ 'contentstripmultiple.clickHere' | translate }}</a> {{ 'contentstripmultiple.toEnrollNextCourse' | translate }}</div>\n </div>\n </ng-container>\n <ng-template #msgTemp>\n <div class=\"w-full flex flex-col items-center justify-center\">\n <img alt=\"\" class=\"mt-4 mb-4\" src=\"assets/icons/home/nodataDefault.png\">\n <div class=\"mat-subheading-1 text-center\">{{ translateLabels(tab.nodataMsg, 'home') }}</div>\n </div>\n </ng-template>\n </div>\n <ng-container *ngIf=\"(tab?.fetchTabStatus === 'done' || tab?.widgets?.length)\">\n <ng-container *ngIf=\"!tab?.tabLoading\">\n\n <sb-uic-horizontal-scroller-v2 [sliderConfig]=\"stripsResultDataMap[key]?.sliderConfig\" [widgetsLength]=\"tab?.widgets?.length\"\n *ngIf=\"getContineuLearningLenth(stripsResultDataMap[key]) && showAccordion(key)\"\n [loadStatus]=\"'done'\" [defaultMaxWidgets]=\"tab?.maxWidgets ||\n stripsResultDataMap[key]?.sliderConfig?.maxWidgets || defaultMaxWidgets\" [stripConfig]=\"stripsResultDataMap[key]?.stripConfig\">\n <ng-container *ngFor=\"let widget of tab?.widgets| slice:0:(tab?.maxWidgets ||\n stripsResultDataMap[key]?.sliderConfig?.maxWidgets || defaultMaxWidgets); trackBy: tracker\">\n <ng-container [sbUiResolverWidget]=\"widget\"></ng-container>\n </ng-container>\n </sb-uic-horizontal-scroller-v2>\n </ng-container>\n </ng-container>\n </div>\n </mat-tab>\n </mat-tab-group>\n </ng-container>\n <ng-container *ngIf=\"!stripsResultDataMap[key].tabs || !stripsResultDataMap[key].tabs.length\">\n <div *ngIf=\"stripsResultDataMap && stripsResultDataMap[key]?.showOnLoader\" class=\"text-center my-2\">\n <sb-uic-horizontal-scroller-v2 [sliderConfig]=\"stripsResultDataMap[key]?.sliderConfig\"\n [loadStatus]=\"'fetching'\" [stripConfig]=\"stripsResultDataMap[key]?.stripConfig\">\n <ng-container *ngFor=\"let widget of stripsResultDataMap[key]?.loaderWidgets; trackBy: tracker\">\n <ng-container [sbUiResolverWidget]=\"widget\"></ng-container>\n </ng-container>\n </sb-uic-horizontal-scroller-v2>\n </div>\n <div class=\"\">\n <sb-uic-horizontal-scroller-v2 [sliderConfig]=\"stripsResultDataMap[key]?.sliderConfig\"\n *ngIf=\"getContineuLearningLenth(stripsResultDataMap[key]) && showAccordion(key)\" [widgetsLength]=\"stripsResultDataMap[key]?.widgets?.length\" [loadStatus]=\"'done'\" [defaultMaxWidgets]=\"stripsResultDataMap[key].sliderConfig?.maxWidgets || defaultMaxWidgets\" [stripConfig]=\"stripsResultDataMap[key]?.stripConfig\">\n <ng-container *ngFor=\"let widget of stripsResultDataMap[key]?.widgets| slice:0:(stripsResultDataMap[key].sliderConfig?.maxWidgets || defaultMaxWidgets); trackBy: tracker\">\n <!-- <ng-container *ngIf=\"widget.widgetData.context.pageSection === 'continueLearning' \"> -->\n <!-- <ng-container *ngIf=\"widget.widgetData.content.completionPercentage !== 100\"\n [sbUiResolverWidget]=\"widget\"></ng-container> -->\n <ng-container [sbUiResolverWidget]=\"widget\"></ng-container>\n <!-- </ng-container> -->\n </ng-container>\n </sb-uic-horizontal-scroller-v2>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </a>\n\n </ng-container>\n </ng-container>\n</ng-template>",
1957
+ template: "<ng-container *ngIf=\"!contentAvailable; else otherTemplate\"></ng-container>\n<ng-template #otherTemplate>\n <!-- <div *ngIf=\"showParentLoader\" class=\"text-center my-2\">\n <mat-spinner class=\"inline-block\"></mat-spinner>\n </div> -->\n <ng-container *ngIf=\"showParentError\" [wsResolverWidget]=\"widgetData.errorWidget\"></ng-container>\n <ng-container *ngIf=\"showParentNoData\" [wsResolverWidget]=\"widgetData.noDataWidget\"></ng-container>\n <ng-container *ngFor=\"let key of stripsKeyOrder; let i = index; trackBy: identify\">\n <ng-container *ngIf=\"isStripShowing(stripsResultDataMap[key])\">\n <a name=\"{{stripsResultDataMap[key]?.stripTitle}}\" [class]=\"key\">\n <div *ngIf=\"stripsResultDataMap && (getLength(stripsResultDataMap[key]) ||\n stripsResultDataMap[key]?.showOnNoData ||\n stripsResultDataMap[key]?.showOnLoader ||\n stripsResultDataMap[key]?.showOnError)\n \" [ngClass]=\"\n !widgetData?.isChannelStrip ? 'xs:px-8 sx:px-10ss' : i > 0 ? 'mt-12' : ''\n \" [id]=\"key\" [ngClass]=\"!widgetData?.isChannelStrip ? margin-bottom-custom : margin-bottom-xs\">\n <div [ngClass]=\"{ pad: stripsResultDataMap[key]?.stripBackground }\"\n [ngStyle]=\"{ 'background-color': stripsResultDataMap[key]?.stripBackground }\">\n <div class=\"flex flex-col pl-4 pr-4 md:pr-0 md:pl-0 \" [ngClass]=\"\n !widgetData?.isChannelStrip\n ? ''\n : stripsResultDataMap[key]?.stripTitle\n ? 'mb-8'\n : ''\n \">\n <div class=\"flex flex-1 items-center\">\n <p class=\"mat-subheading-1 margin-remove inline-block \" *ngIf=\"stripsResultDataMap[key]?.stripTitle\">\n <span class=\"capitalize\" *ngIf=\"stripsResultDataMap[key]?.disableTranslate\">\n {{stripsResultDataMap[key]?.stripTitle}}\n </span>\n <span *ngIf=\"!stripsResultDataMap[key]?.disableTranslate\">\n {{ translateLabels(stripsResultDataMap[key]?.stripTitle, 'home') }}\n </span>\n </p>\n\n <button *ngIf=\"stripsResultDataMap[key]?.stripInfo?.icon\" type=\"button\" mat-icon-button\n (click)=\"toggleInfo(stripsResultDataMap[key])\" i18n-matTooltip matTooltip=\"info\"\n class=\"margin-left-xs\">\n <mat-icon>{{ stripsResultDataMap[key]?.stripInfo?.icon.icon }}</mat-icon>\n </button>\n <a *ngIf=\"stripsResultDataMap[key]?.stripTitleLink?.link\"\n [routerLink]=\"stripsResultDataMap[key]?.stripTitleLink?.link\"\n [queryParams]=\"stripsResultDataMap[key]?.stripTitleLink?.link?.queryParams\">\n <mat-icon class=\"ws-mat-primary-primary-text ws-mat-default-text\" [color]=\"'accent'\">{{\n stripsResultDataMap[key]?.stripTitleLink?.icon }}</mat-icon>\n </a>\n <span class=\"spacer\"></span>\n <!-- viewAll start-->\n <div *ngIf=\"checkCondition(widgetData , stripsResultDataMap[key])\"\n class=\"ml-4 view-more ws-mat-default-text\">\n <a class=\"flex ws-mat-default-text items-center justify-center mat-body-1\" [routerLink]=\"stripsResultDataMap[key]?.viewMoreUrl?.path\"\n [queryParams]=\"stripsResultDataMap[key]?.viewMoreUrl?.queryParams\">\n <span i18n class=\"ws-mat-default-text\">{{translateLabels(widgetData.strips[0].viewMoreUrl.viewMoreText,'home') || 'See all'}}</span>\n <mat-icon class=\"ws-mat-default-text mat-icon notranslate material-icons mat-icon-no-color\" color=\"accent\">navigate_next</mat-icon>\n </a>\n </div>\n <!-- viewAll end-->\n </div>\n <button mat-icon-button (click)=\"setHiddenForStrip(key)\" *ngIf=\"stripsResultDataMap[key]?.canHideStrip\">\n <mat-icon>close</mat-icon>\n </button>\n <mat-icon class=\"cursor-pointer\" *ngIf=\"stripsResultDataMap[key]?.mode === 'accordion' && isMobile\"\n (click)=\"showAccordionData = !showAccordionData\">{{ showAccordionData ? 'expand_less' : 'expand_more' }}\n </mat-icon>\n </div>\n\n <div class=\"mb-4\" *ngIf=\"checkVisible(stripsResultDataMap[key])\">\n <ng-container [wsResolverWidget]=\"getdata(stripsResultDataMap[key])\">\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"stripsResultDataMap[key]?.showOnNoData\"\n [wsResolverWidget]=\"stripsResultDataMap[key]?.noDataWidget\"></ng-container>\n <ng-container *ngIf=\"stripsResultDataMap[key]?.showOnError\"\n [wsResolverWidget]=\"stripsResultDataMap[key]?.errorWidget\"></ng-container>\n <!-- IF no errors then proceed to show tabs or non tabs strip -->\n <ng-container *ngIf=\"!stripsResultDataMap[key]?.showOnNoData && !stripsResultDataMap[key]?.showOnError\">\n <ng-container *ngIf=\"stripsResultDataMap[key].tabs && stripsResultDataMap[key].tabs.length\">\n <mat-tab-group animationDuration=\"0ms\" [selectedIndex]=\"getSelectedIndex(stripsResultDataMap[key], key)\"\n class=\"mat-tab-labels w-full strips-tabgroup\" dynamicHeight\n (selectedTabChange)=\"tabClicked($event, stripsResultDataMap[key], key)\">\n <mat-tab label=\"{{tab?.label}}\" *ngFor=\"let tab of stripsResultDataMap[key].tabs; let last = last;\">\n <ng-template mat-tab-label>\n <span>{{ translateLabels(tab?.label, 'home') }} &nbsp;</span>\n <span *ngIf=\"tab?.showTabDataCount && tab?.widgets?.length\">({{tab?.widgets?.length}})</span>\n </ng-template>\n <div>\n <!-- <ng-container [ngTemplateOutlet]=\"loader\" *ngIf=\"stripsResultDataMap[key]?.showOnLoader\">\n </ng-container> -->\n <div *ngIf=\"stripsResultDataMap && stripsResultDataMap[key]?.showOnLoader ||\n !tab.fetchTabStatus\"\n class=\"text-center my-2\">\n <sb-uic-horizontal-scroller-v2 [sliderConfig]=\"stripsResultDataMap[key]?.sliderConfig\"\n [loadStatus]=\"'fetching'\" [stripConfig]=\"stripsResultDataMap[key]?.stripConfig\">\n <ng-container *ngFor=\"let widget of stripsResultDataMap[key]?.loaderWidgets; trackBy: tracker\">\n <ng-container [wsResolverWidget]=\"widget\"></ng-container>\n </ng-container>\n </sb-uic-horizontal-scroller-v2>\n </div>\n <div *ngIf=\"((tab?.fetchTabStatus && tab?.fetchTabStatus === 'done') &&\n (!tab?.widgets || !tab?.widgets?.length))\">\n <ng-container *ngIf=\"tab?.value === 'inprogress'; else msgTemp\">\n <div class=\"w-full flex flex-col items-center justify-center\">\n <img alt=\"\" class=\"mt-4 mb-4\" src=\"assets/icons/home/nodataDefault.svg\">\n <div class=\"mat-subheading-1 text-center info-content\">{{ 'contentstripmultiple.getReadyForLearningAdventure' | translate }} -\n <a class=\"click-here\" [routerLink]=\"'/page/learn'\">{{ 'contentstripmultiple.clickHere' | translate }}</a> {{ 'contentstripmultiple.toEnrollNextCourse' | translate }}</div>\n </div>\n </ng-container>\n <ng-template #msgTemp>\n <div class=\"w-full flex flex-col items-center justify-center\">\n <img alt=\"\" class=\"mt-4 mb-4\" src=\"assets/icons/home/nodataDefault.png\">\n <div class=\"mat-subheading-1 text-center\">{{ translateLabels(tab.nodataMsg, 'home') }}</div>\n </div>\n </ng-template>\n </div>\n <ng-container *ngIf=\"(tab?.fetchTabStatus === 'done' || tab?.widgets?.length)\">\n <ng-container *ngIf=\"!tab?.tabLoading\">\n\n <sb-uic-horizontal-scroller-v2 [sliderConfig]=\"stripsResultDataMap[key]?.sliderConfig\" [widgetsLength]=\"tab?.widgets?.length\"\n *ngIf=\"getContineuLearningLenth(stripsResultDataMap[key]) && showAccordion(key)\"\n [loadStatus]=\"'done'\" [defaultMaxWidgets]=\"tab?.maxWidgets ||\n stripsResultDataMap[key]?.sliderConfig?.maxWidgets || defaultMaxWidgets\" [stripConfig]=\"stripsResultDataMap[key]?.stripConfig\">\n <ng-container *ngFor=\"let widget of tab?.widgets| slice:0:(tab?.maxWidgets ||\n stripsResultDataMap[key]?.sliderConfig?.maxWidgets || defaultMaxWidgets); trackBy: tracker\">\n <ng-container [wsResolverWidget]=\"widget\"></ng-container>\n </ng-container>\n </sb-uic-horizontal-scroller-v2>\n </ng-container>\n </ng-container>\n </div>\n </mat-tab>\n </mat-tab-group>\n </ng-container>\n <ng-container *ngIf=\"!stripsResultDataMap[key].tabs || !stripsResultDataMap[key].tabs.length\">\n <div *ngIf=\"stripsResultDataMap && stripsResultDataMap[key]?.showOnLoader\" class=\"text-center my-2\">\n <sb-uic-horizontal-scroller-v2 [sliderConfig]=\"stripsResultDataMap[key]?.sliderConfig\"\n [loadStatus]=\"'fetching'\" [stripConfig]=\"stripsResultDataMap[key]?.stripConfig\">\n <ng-container *ngFor=\"let widget of stripsResultDataMap[key]?.loaderWidgets; trackBy: tracker\">\n <ng-container [wsResolverWidget]=\"widget\"></ng-container>\n </ng-container>\n </sb-uic-horizontal-scroller-v2>\n </div>\n <div class=\"\">\n <sb-uic-horizontal-scroller-v2 [sliderConfig]=\"stripsResultDataMap[key]?.sliderConfig\"\n *ngIf=\"getContineuLearningLenth(stripsResultDataMap[key]) && showAccordion(key)\" [widgetsLength]=\"stripsResultDataMap[key]?.widgets?.length\" [loadStatus]=\"'done'\" [defaultMaxWidgets]=\"stripsResultDataMap[key].sliderConfig?.maxWidgets || defaultMaxWidgets\" [stripConfig]=\"stripsResultDataMap[key]?.stripConfig\">\n <ng-container *ngFor=\"let widget of stripsResultDataMap[key]?.widgets| slice:0:(stripsResultDataMap[key].sliderConfig?.maxWidgets || defaultMaxWidgets); trackBy: tracker\">\n <!-- <ng-container *ngIf=\"widget.widgetData.context.pageSection === 'continueLearning' \"> -->\n <!-- <ng-container *ngIf=\"widget.widgetData.content.completionPercentage !== 100\"\n [wsResolverWidget]=\"widget\"></ng-container> -->\n <ng-container [wsResolverWidget]=\"widget\"></ng-container>\n <!-- </ng-container> -->\n </ng-container>\n </sb-uic-horizontal-scroller-v2>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </a>\n\n </ng-container>\n </ng-container>\n</ng-template>",
1958
1958
  styles: [".view-more{display:flex;align-items:center;text-align:center;height:40px;justify-content:center}.view-more .icon{font-size:24px;width:24px;height:24px;border:1px solid;border-radius:50%;padding:8px;margin-bottom:8px}.margin-bottom-custom{margin-bottom:60px}.view-more:hover{background-color:#dcdfe5}::ng-deep.strips-tabgroup .mat-tab-header{border-bottom:2px solid rgba(0,0,0,.12)}::ng-deep.strips-tabgroup .mat-tab-body{padding:20px 0!important;box-sizing:border-box;overflow-y:initial!important}::ng-deep.strips-tabgroup .mat-tab-body-wrapper{overflow:inherit!important}::ng-deep.strips-tabgroup .mat-tab-label{border-bottom:0 solid rgba(0,0,0,.1);margin-right:0;opacity:1}::ng-deep.strips-tabgroup .mat-tab-label .mat-tab-label-content{text-transform:inherit;font:400 14px/20px Lato}::ng-deep.strips-tabgroup .mat-tab-label-active .mat-tab-label-content{font-weight:700!important}.click-here{color:#1b4ca1}.info-content{opacity:1;color:rgba(0,0,0,.87);font:700 14px/20px Lato-Bold;text-align:center}"]
1959
1959
  }] }
1960
1960
  ];
@@ -2060,4 +2060,4 @@ if (false) {
2060
2060
  */
2061
2061
  ContentStripWithTabsLibComponent.prototype.langtranslations;
2062
2062
  }
2063
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1zdHJpcC13aXRoLXRhYnMtbGliLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWNiL2NvbnN1bXB0aW9uLyIsInNvdXJjZXMiOlsibGliL19jb21tb24vY29udGVudC1zdHJpcC13aXRoLXRhYnMtbGliL2NvbnRlbnQtc3RyaXAtd2l0aC10YWJzLWxpYi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBYSxXQUFXLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0csT0FBTyxFQUFvQixtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQUdoRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUU5RSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNwRyxPQUFPLEVBRUwsYUFBYSxFQUNiLFlBQVksRUFDWixxQkFBcUIsRUFDckIsY0FBYyxFQUNkLFFBQVEsR0FDVCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7O0FBR3hFLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFBO0FBRTNCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQUV2RCxvQ0FvQ0M7OztJQW5DQyxvQ0FBWTs7SUFDWiw2Q0FBc0I7O0lBQ3RCLHFDQUFjOztJQUNkLDBDQUFtQjs7SUFDbkIsaURBQTBCOztJQUMxQix3Q0FBc0Q7O0lBQ3RELDJDQUFtQjs7SUFDbkIsK0NBTUU7O0lBQ0YsNkNBS0U7O0lBQ0Ys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Q2lEOztJQUNqRCwrREFBbUU7O0lBQ25FLDBEQUE4Qjs7SUFDOUIsNkRBQXlCOztJQUN6Qiw0REFBeUI7O0lBQ3pCLDJEQUF3Qjs7SUFDeEIsNERBQXlCOztJQUN6QiwwREFBbUI7O0lBQ25CLHVEQUFnQjs7SUFDaEIsNERBQXFCOztJQUNyQiw0REFBd0I7O0lBQ3hCLG1EQUF3Qzs7SUFDeEMsNERBQXlCOztJQUN6Qix1REFBa0I7O0lBQ2xCLG1FQUFvRDs7SUFDcEQsNkRBQXVCOztJQUN2QiwwREFBb0I7O0lBQ3BCLHdEQUF1Qjs7Ozs7SUFLckIsc0RBQXdDOzs7OztJQUN4QyxxREFBZ0M7Ozs7O0lBQ2hDLG9EQUE4Qjs7Ozs7SUFDOUIscURBQXdDOztJQUN4QyxzREFBaUM7Ozs7O0lBR2pDLG1EQUFrQzs7Ozs7SUFDbEMscURBQW1DOzs7OztJQUNuQyw0REFBeUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE9uRGVzdHJveSwgSG9zdEJpbmRpbmcsIEluamVjdCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5zV2lkZ2V0UmVzb2x2ZXIsIFdpZGdldEJhc2VDb21wb25lbnQgfSBmcm9tICdAc3VuYmlyZC1jYi9yZXNvbHZlci12Mic7XG5pbXBvcnQgeyBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzIH0gZnJvbSAnLi9jb250ZW50LXN0cmlwLXdpdGgtdGFicy1saWIubW9kZWwnO1xuLy8gaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xuaW1wb3J0IHsgV2lkZ2V0Q29udGVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9fc2VydmljZXMvd2lkZ2V0LWNvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBOc0NvbnRlbnQgfSBmcm9tICcuLi8uLi9fbW9kZWxzL3dpZGdldC1jb250ZW50Lm1vZGVsJztcbmltcG9ydCB7IE11bHRpbGluZ3VhbFRyYW5zbGF0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9fc2VydmljZXMvbXVsdGlsaW5ndWFsLXRyYW5zbGF0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIFRGZXRjaFN0YXR1cyxcbiAgTG9nZ2VyU2VydmljZSxcbiAgRXZlbnRTZXJ2aWNlLFxuICBDb25maWd1cmF0aW9uc1NlcnZpY2UsXG4gIFV0aWxpdHlTZXJ2aWNlLFxuICBXc0V2ZW50cyxcbn0gZnJvbSAnQHN1bmJpcmQtY2IvdXRpbHMtdjInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBXaWRnZXRVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uL19zZXJ2aWNlcy93aWRnZXQtdXNlci5zZXJ2aWNlJztcbi8vIGltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnc3JjL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCdcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBNYXRUYWJDaGFuZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJztcbmltcG9ydCB7IE5zQ2FyZENvbnRlbnQgfSBmcm9tICcuLi8uLi9fbW9kZWxzL2NhcmQtY29udGVudC12Mi5tb2RlbCc7XG5pbXBvcnQgeyBJVG9kYXlFdmVudHMgfSBmcm9tICcuLi8uLi9fbW9kZWxzL2V2ZW50JztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuaW50ZXJmYWNlIElTdHJpcFVuaXRDb250ZW50RGF0YSB7XG4gIGtleTogc3RyaW5nO1xuICBjYW5IaWRlU3RyaXA6IGJvb2xlYW47XG4gIG1vZGU/OiBzdHJpbmc7XG4gIHNob3dTdHJpcDogYm9vbGVhbjtcbiAgZGlzYWJsZVRyYW5zbGF0ZTogYm9vbGVhbjtcbiAgd2lkZ2V0cz86IE5zV2lkZ2V0UmVzb2x2ZXIuSVJlbmRlckNvbmZpZ1dpdGhBbnlEYXRhW107XG4gIHN0cmlwVGl0bGU6IHN0cmluZztcbiAgc3RyaXBUaXRsZUxpbms/OiB7XG4gICAgbGluazogIHtcbiAgICAgIHF1ZXJ5UGFyYW1zOiBzdHJpbmdcbiAgICB9LFxuICAgIGljb246IHN0cmluZyxcbiAgICBxdWVyeVBhcmFtczogc3RyaW5nXG4gIH07XG4gIHNsaWRlckNvbmZpZz86IHtcbiAgICBzaG93TmF2czogYm9vbGVhbixcbiAgICBzaG93RG90czogYm9vbGVhbixcbiAgICBtYXhXaWRnZXRzPzogbnVtYmVyXG4gICAgY2VyaWZpY2F0ZUNhcmRNYXJnaW4/OiBib29sZWFuXG4gIH07XG4gIHN0cmlwQ29uZmlnOiBhbnk7XG4gIHRhYnM/OiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBUYWJbXSB8IHVuZGVmaW5lZDtcbiAgc3RyaXBOYW1lPzogc3RyaW5nO1xuICBzdHJpcExvZ28/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBzdHJpcEluZm8/OiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklTdHJpcEluZm87XG4gIG5vRGF0YVdpZGdldD86IE5zV2lkZ2V0UmVzb2x2ZXIuSVJlbmRlckNvbmZpZ1dpdGhBbnlEYXRhO1xuICBlcnJvcldpZGdldD86IE5zV2lkZ2V0UmVzb2x2ZXIuSVJlbmRlckNvbmZpZ1dpdGhBbnlEYXRhO1xuICBzaG93T25Ob0RhdGE6IGJvb2xlYW47XG4gIHNob3dPbkxvYWRlcjogYm9vbGVhbjtcbiAgc2hvd09uRXJyb3I6IGJvb2xlYW47XG4gIGxvYWRlcldpZGdldHM/OiBhbnk7XG4gIHN0cmlwQmFja2dyb3VuZD86IHN0cmluZztcbiAgc2Vjb25kYXJ5SGVhZGluZz86IGFueTtcbiAgdmlld01vcmVVcmw6IGFueTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2ItdWljLWNvbnRlbnQtc3RyaXAtd2l0aC10YWJzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbnRlbnQtc3RyaXAtd2l0aC10YWJzLWxpYi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbnRlbnQtc3RyaXAtd2l0aC10YWJzLWxpYi5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDb250ZW50U3RyaXBXaXRoVGFic0xpYkNvbXBvbmVudCBleHRlbmRzIFdpZGdldEJhc2VDb21wb25lbnRcbiAgaW1wbGVtZW50c1xuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgTnNXaWRnZXRSZXNvbHZlci5JV2lkZ2V0RGF0YTxOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBNdWx0aXBsZT4ge1xuICBASW5wdXQoKSB3aWRnZXREYXRhITogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwTXVsdGlwbGU7XG4gIEBPdXRwdXQoKSBlbXB0eVJlc3BvbnNlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQElucHV0KCkgcHJvdmlkZXJJZCA6IGFueSA9ICcnXG4gIEBIb3N0QmluZGluZygnaWQnKVxuICBwdWJsaWMgaWQgPSBgd3Mtc3RyaXAtbWlsdGlwbGVfJHtNYXRoLnJhbmRvbSgpfWA7XG4gIHN0cmlwc1Jlc3VsdERhdGFNYXA6IHsgW2tleTogc3RyaW5nXTogSVN0cmlwVW5pdENvbnRlbnREYXRhIH0gPSB7fTtcbiAgc3RyaXBzS2V5T3JkZXI6IHN0cmluZ1tdID0gW107XG4gIHNob3dBY2NvcmRpb25EYXRhID0gdHJ1ZTtcbiAgc2hvd1BhcmVudExvYWRlciA9IGZhbHNlO1xuICBzaG93UGFyZW50RXJyb3IgPSBmYWxzZTtcbiAgc2hvd1BhcmVudE5vRGF0YSA9IGZhbHNlO1xuICBlcnJvckRhdGFDb3VudCA9IDA7XG4gIG5vRGF0YUNvdW50ID0gMDtcbiAgc3VjY2Vzc0RhdGFDb3VudCA9IDA7XG4gIGNvbnRlbnRBdmFpbGFibGUgPSB0cnVlO1xuICBiYXNlVXJsID0gdGhpcy5jb25maWdTdmMuc2l0ZVBhdGggfHwgJyc7XG4gIHZlaWZpZWRLYXJtYXlvZ2kgPSBmYWxzZTtcbiAgZW52aXJvbm1lbnQhOiBhbnk7XG4gIGNoYW5nZUV2ZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgZGVmYXVsdE1heFdpZGdldHMgPSAxMjtcbiAgZW5yb2xsSW50ZXJ2YWw6IGFueTtcbiAgdG9kYXlzRXZlbnRzOiBhbnkgPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAvLyBwcml2YXRlIGNvbnRlbnRTdHJpcFN2YzogQ29udGVudFN0cmlwTmV3TXVsdGlwbGVTZXJ2aWNlLFxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgZW52aXJvbm1lbnQ6IGFueSxcbiAgICBwcml2YXRlIGNvbnRlbnRTdmM6IFdpZGdldENvbnRlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9nZ2VyU3ZjOiBMb2dnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXZlbnRTdmM6IEV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1N2YzogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxuICAgIHB1YmxpYyB1dGlsaXR5U3ZjOiBVdGlsaXR5U2VydmljZSxcbiAgICAvLyBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgLy8gcHJpdmF0ZSBzZWFyY2hTZXJ2U3ZjOiBTZWFyY2hTZXJ2U2VydmljZSxcbiAgICBwcml2YXRlIHVzZXJTdmM6IFdpZGdldFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbGFuZ3RyYW5zbGF0aW9uczogTXVsdGlsaW5ndWFsVHJhbnNsYXRpb25zU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd2Vic2l0ZUxhbmd1YWdlJykpIHtcbiAgICAgIHRoaXMudHJhbnNsYXRlLnNldERlZmF1bHRMYW5nKCdlbicpO1xuICAgICAgbGV0IGxhbmcgPSBKU09OLnN0cmluZ2lmeShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd2Vic2l0ZUxhbmd1YWdlJykpO1xuICAgICAgbGFuZyA9IGxhbmcucmVwbGFjZSgvXFxcIi9nLCAnJyk7XG4gICAgICB0aGlzLnRyYW5zbGF0ZS51c2UobGFuZyk7XG4gICAgfVxuICAgIHRoaXMuZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudFxuICAgIGNvbnNvbGUubG9nKCdwbHVnaW4nKVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gY29uc3QgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWZcbiAgICB0aGlzLmluaXREYXRhKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5jaGFuZ2VFdmVudFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5jaGFuZ2VFdmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNob3dBY2NvcmRpb24oa2V5OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy51dGlsaXR5U3ZjLmlzTW9iaWxlICYmIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldLm1vZGUgPT09ICdhY2NvcmRpb24nKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaG93QWNjb3JkaW9uRGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzZXRIaWRkZW5Gb3JTdHJpcChrZXk6IHN0cmluZykge1xuICAgIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldLnNob3dTdHJpcCA9IGZhbHNlO1xuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oYGNzdHJpcF8ke2tleX1gLCAnMScpO1xuICB9XG4gIHByaXZhdGUgZ2V0SWZTdHJpcEhpZGRlbihrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHN0b3JhZ2VJdGVtID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShgY3N0cmlwXyR7a2V5fWApO1xuICAgIHJldHVybiBCb29sZWFuKHN0b3JhZ2VJdGVtICE9PSAnMScpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0RGF0YSgpIHtcbiAgICB0aGlzLnN0cmlwc0tleU9yZGVyID0gdGhpcy53aWRnZXREYXRhICYmIHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMgJiYgdGhpcy53aWRnZXREYXRhLnN0cmlwcy5tYXAoc3RyaXAgPT4gc3RyaXAua2V5KSB8fCBbXTtcbiAgICBpZiAodGhpcy53aWRnZXREYXRhLmxvYWRlciAmJiB0aGlzLndpZGdldERhdGEuc3RyaXBzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zaG93UGFyZW50TG9hZGVyID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gRmV0Y2ggdGhlIGRhdGFcbiAgICBmb3IgKGNvbnN0IHN0cmlwIG9mIHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMpIHtcbiAgICAgIGlmICh0aGlzLmNoZWNrRm9yRW1wdHlXaWRnZXQoc3RyaXApKSB7XG4gICAgICAgIHRoaXMuZmV0Y2hTdHJpcEZyb21SZXF1ZXN0RGF0YShzdHJpcCwgZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZG9uZScsIHRydWUsIG51bGwpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBTdWJzY3JpcHRpb24gZm9yIGNoYW5nZXNcbiAgICBjb25zdCBrZXlBbmRFdmVudDogeyBrZXk6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBmcm9tOiBzdHJpbmcgfVtdID0gdGhpcy53aWRnZXREYXRhLnN0cmlwc1xuICAgICAgLm1hcChzdHJpcCA9PiAoe1xuICAgICAgICBrZXk6IHN0cmlwLmtleSxcbiAgICAgICAgdHlwZTogKHN0cmlwLnJlZnJlc2hFdmVudCAmJiBzdHJpcC5yZWZyZXNoRXZlbnQuZXZlbnRUeXBlKSB8fCAnJyxcbiAgICAgICAgZnJvbTogKHN0cmlwLnJlZnJlc2hFdmVudCAmJiBzdHJpcC5yZWZyZXNoRXZlbnQuZnJvbS50b1N0cmluZygpKSB8fCAnJyxcbiAgICAgIH0pKVxuICAgICAgLmZpbHRlcigoeyBrZXksIHR5cGUsIGZyb20gfSkgPT4ga2V5ICYmIHR5cGUgJiYgZnJvbSk7XG4gICAgY29uc3QgZXZlbnRUeXBlU2V0ID0gbmV3IFNldChrZXlBbmRFdmVudC5tYXAoZSA9PiBlLnR5cGUpKTtcbiAgICB0aGlzLmNoYW5nZUV2ZW50U3Vic2NyaXB0aW9uID0gdGhpcy5ldmVudFN2Yy5ldmVudHMkXG4gICAgICAucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnRUeXBlU2V0LmhhcyhldmVudC5ldmVudFR5cGUpKSlcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICBrZXlBbmRFdmVudFxuICAgICAgICAgIC5maWx0ZXIoZSA9PiBlLnR5cGUgPT09IGV2ZW50LmV2ZW50VHlwZSAmJiBlLmZyb20gPT09IGV2ZW50LmZyb20pXG4gICAgICAgICAgLm1hcChlID0+IGUua2V5KVxuICAgICAgICAgIC5mb3JFYWNoKGsgPT4gdGhpcy5mZXRjaFN0cmlwRnJvbUtleShrLCBmYWxzZSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGZldGNoU3RyaXBGcm9tS2V5KGtleTogc3RyaW5nLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgY29uc3Qgc3RyaXBEYXRhID0gdGhpcy53aWRnZXREYXRhLnN0cmlwcy5maW5kKHN0cmlwID0+IHN0cmlwLmtleSA9PT0ga2V5KTtcbiAgICBpZiAoc3RyaXBEYXRhKSB7XG4gICAgICB0aGlzLmZldGNoU3RyaXBGcm9tUmVxdWVzdERhdGEoc3RyaXBEYXRhLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIH1cbiAgfVxuXG4gIGlzU3RyaXBTaG93aW5nKGRhdGE6IGFueSkge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgaWYgKGRhdGEgJiYgZGF0YS5rZXkgPT09IHRoaXMuZW52aXJvbm1lbnQucHJvZ3JhbVN0cmlwS2V5ICYmICghZGF0YS50YWJzIHx8ICFkYXRhLnRhYnMubGVuZ3RoKSAmJlxuICAgICAgZGF0YS5zdHJpcFRpdGxlID09PSB0aGlzLmVudmlyb25tZW50LnByb2dyYW1TdHJpcE5hbWUgJiYgZGF0YS53aWRnZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGRhdGEud2lkZ2V0cy5mb3JFYWNoKChrZXk6IGFueSkgPT4ge1xuICAgICAgICBpZiAoa2V5ICYmIGtleS53aWRnZXREYXRhLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSB0aGlzLmVudmlyb25tZW50LnByb2dyYW1TdHJpcFByaW1hcnlDYXRlZ29yeSkge1xuICAgICAgICAgIGNvdW50ID0gY291bnQgKyAxO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChjb3VudCA+IDApIHtcbiAgICAgICAgZGF0YS5zaG93U3RyaXAgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5zaG93U3RyaXAgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coJ2RhdGEua2V5JywgZGF0YSwgZGF0YS5rZXksIGRhdGEud2lkZ2V0cyk7XG4gICAgcmV0dXJuIGRhdGEuc2hvd1N0cmlwO1xuICB9XG5cbiAgZ2V0IGlzTW9iaWxlKCkge1xuICAgIHJldHVybiB0aGlzLnV0aWxpdHlTdmMuaXNNb2JpbGUgfHwgZmFsc2U7XG4gIH1cblxuICBnZXRkYXRhKGRhdGE6IElTdHJpcFVuaXRDb250ZW50RGF0YSkge1xuICAgIGlmIChkYXRhLnN0cmlwSW5mbykge1xuICAgICAgcmV0dXJuIGRhdGEuc3RyaXBJbmZvLndpZGdldDtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuXG4gIH1cbiAgY2hlY2tDb25kaXRpb24od0RhdGE6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcE11bHRpcGxlLCBkYXRhOiBJU3RyaXBVbml0Q29udGVudERhdGEpIHtcbiAgICBpZiAod0RhdGEuc3RyaXBzWzBdLnN0cmlwQ29uZmlnICYmIHdEYXRhLnN0cmlwc1swXS5zdHJpcENvbmZpZy5oaWRlU2hvd0FsbCkge1xuICAgICAgcmV0dXJuICF3RGF0YS5zdHJpcHNbMF0uc3RyaXBDb25maWcuaGlkZVNob3dBbGw7XG4gICAgfVxuICAgIHJldHVybiB3RGF0YS5zdHJpcHNbMF0udmlld01vcmVVcmwgJiYgZGF0YS53aWRnZXRzICYmIGRhdGEud2lkZ2V0cy5sZW5ndGggPj0gNDtcbiAgfVxuICBjaGVja1Zpc2libGUoZGF0YTogSVN0cmlwVW5pdENvbnRlbnREYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEuc3RyaXBJbmZvICYmIGRhdGEuc3RyaXBJbmZvLnZpc2liaWxpdHlNb2RlID09PSAndmlzaWJsZSc7XG4gIH1cblxuICBnZXRDb250aW5ldUxlYXJuaW5nTGVudGgoZGF0YTogSVN0cmlwVW5pdENvbnRlbnREYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEud2lkZ2V0cyA/IGRhdGEud2lkZ2V0cy5sZW5ndGggOiAwO1xuICB9XG4gIGdldExlbmd0aChkYXRhOiBJU3RyaXBVbml0Q29udGVudERhdGEpIHtcbiAgICBpZiAoIWRhdGEudGFicyB8fCAhZGF0YS50YWJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGRhdGEud2lkZ2V0cyA/IGRhdGEud2lkZ2V0cy5sZW5ndGggOiAwO1xuICAgIH0ge1xuICAgICAgLy8gaWYgdGFicyBhcmUgdGhlcmUgY2hlY2sgaWYgZWFjaCB0YWIgaGFzIHdpZGdldHMgYW5kIGdldCB0aGUgdGFiIHdpdGggbWF4IHdpZGdldHNcbiAgICAgIGNvbnN0IHRhYldpdGhNYXhXaWRnZXRzID0gZGF0YS50YWJzLnJlZHVjZShcbiAgICAgICAgKHByZXYsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBpZiAoIXByZXYud2lkZ2V0cyAmJiAhY3VycmVudC53aWRnZXRzKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHByZXYud2lkZ2V0cyAmJiBjdXJyZW50LndpZGdldHMpIHtcbiAgICAgICAgICAgIHJldHVybiAocHJldi53aWRnZXRzLmxlbmd0aCA+IGN1cnJlbnQud2lkZ2V0cy5sZW5ndGgpID8gcHJldiA6IGN1cnJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjdXJyZW50LndpZGdldHMgJiYgIXByZXYud2lkZ2V0cykge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghY3VycmVudC53aWRnZXRzICYmIHByZXYud2lkZ2V0cykge1xuICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIC8vIHJldHVybiAocHJldi53aWRnZXRzICYmIGN1cnJlbnQud2lkZ2V0cyAmJiAocHJldi53aWRnZXRzLmxlbmd0aCA+IGN1cnJlbnQud2lkZ2V0cy5sZW5ndGgpICkgPyBwcmV2IDogY3VycmVudFxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogYWxpZ25cbiAgICAgICAgfSwgZGF0YS50YWJzWzBdKTtcbiAgICAgIC8vIGlmIHRhYnMgaGFzIGF0bGVhc3QgMSB3aWRnZXRzIHRoZW4gc3RyaXAgd2lsbCBzaG93IG9yIGVsc2Ugbm90XG4gICAgICByZXR1cm4gdGFiV2l0aE1heFdpZGdldHMud2lkZ2V0cyA/IHRhYldpdGhNYXhXaWRnZXRzLndpZGdldHMubGVuZ3RoIDogMDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEZpbHRlcnNGcm9tQXJyYXkodjZmaWx0ZXJzOiBhbnkpIHtcbiAgICBjb25zdCBmaWx0ZXJzOiBhbnkgPSB7fTtcbiAgICBpZiAodjZmaWx0ZXJzLmNvbnN0cnVjdG9yID09PSBBcnJheSkge1xuICAgICAgdjZmaWx0ZXJzLmZvckVhY2goKChmOiBhbnkpID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXMoZikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGZpbHRlcnNba2V5XSA9IGZba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gZmlsdGVycztcbiAgICB9XG4gICAgcmV0dXJuIHY2ZmlsdGVycztcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtU2VhcmNoVjZGaWx0ZXJzVjIodjZmaWx0ZXJzOiBhbnkpIHtcbiAgICBjb25zdCBmaWx0ZXJzOiBhbnkgPSB7fTtcbiAgICBpZiAodjZmaWx0ZXJzLmNvbnN0cnVjdG9yID09PSBBcnJheSkge1xuICAgICAgdjZmaWx0ZXJzLmZvckVhY2goKChmOiBhbnkpID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXMoZikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGZpbHRlcnNba2V5XSA9IGZba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gZmlsdGVycztcbiAgICB9XG4gICAgcmV0dXJuIHY2ZmlsdGVycztcbiAgfVxuXG4gIGNoZWNrRm9yRGF0ZUZpbHRlcnMoZmlsdGVyczogYW55KSB7XG4gICAgbGV0IHVzZXJEYXRhOiBhbnk7XG4gICAgaWYgKHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlKSB7XG4gICAgICB1c2VyRGF0YSA9IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJzICYmIGZpbHRlcnMuaGFzT3duUHJvcGVydHkoJ2JhdGNoZXMuZW5kRGF0ZScpKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGZpbHRlcnNbJ2JhdGNoZXMuZW5kRGF0ZSddWyc+PSddID0gZXZhbChmaWx0ZXJzWydiYXRjaGVzLmVuZERhdGUnXVsnPj0nXSlcbiAgICB9IGVsc2UgaWYgKGZpbHRlcnMgJiYgZmlsdGVycy5oYXNPd25Qcm9wZXJ0eSgnYmF0Y2hlcy5lbnJvbGxtZW50RW5kRGF0ZScpKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGZpbHRlcnNbJ2JhdGNoZXMuZW5yb2xsbWVudEVuZERhdGUnXVsnPj0nXSA9IGV2YWwoZmlsdGVyc1snYmF0Y2hlcy5lbnJvbGxtZW50RW5kRGF0ZSddWyc+PSddKVxuICAgIH0gZWxzZSBpZiAoZmlsdGVycy5vcmdhbmlzYXRpb24gJiZcbiAgICAgIGZpbHRlcnMub3JnYW5pc2F0aW9uLmluZGV4T2YoJzxvcmdJRD4nKSA+PSAwXG4gICAgKSB7XG4gICAgICBmaWx0ZXJzLm9yZ2FuaXNhdGlvbiA9IHVzZXJEYXRhICYmIHVzZXJEYXRhLnJvb3RPcmdJZDtcblxuICAgICAgaWYgKGZpbHRlcnMgJiYgZmlsdGVycy5oYXNPd25Qcm9wZXJ0eSgnZGVzaWduYXRpb24nKSkge1xuICAgICAgICBmaWx0ZXJzLmRlc2lnbmF0aW9uID0gdXNlckRhdGEucHJvZmVzc2lvbmFsRGV0YWlscy5sZW5ndGggPiAwID9cbiAgICAgICAgICB1c2VyRGF0YS5wcm9mZXNzaW9uYWxEZXRhaWxzWzBdLmRlc2lnbmF0aW9uIDogJyc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBmZXRjaFN0cmlwRnJvbVJlcXVlc3REYXRhKFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUsXG4gICkge1xuICAgIC8vIHNldHRpbmcgaW5pdGlhbCB2YWx1ZXNcbiAgICBzdHJpcC5sb2FkZXJXaWRnZXRzID0gdGhpcy50cmFuc2Zvcm1Ta2VsZXRvblRvV2lkZ2V0cyhzdHJpcCk7XG4gICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZmV0Y2hpbmcnLCBmYWxzZSwgbnVsbCk7XG4gICAgdGhpcy5mZXRjaEZyb21FbnJvbGxtZW50TGlzdChzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoRnJvbVNlYXJjaFY2KHN0cmlwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIHRoaXMuZmV0Y2hGcm9tVHJlbmRpbmdDb250ZW50KHN0cmlwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIHRoaXMuZmV0Y2hBbGxDYnBQbGFucyhzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoQWxsVG9wQ29udGVudChzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoQWxsRmVhdHVyZWRDb250ZW50KHN0cmlwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIC8vIHRoaXMuZW5yb2xsSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgLy8gICB0aGlzLmZldGNoQWxsQ2JwUGxhbnMoc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cylcbiAgICAvLyB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMClcbiAgfVxuXG4gIGZldGNoRnJvbUVucm9sbG1lbnRMaXN0KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgaWYgKHN0cmlwLnJlcXVlc3QgJiYgc3RyaXAucmVxdWVzdC5lbnJvbGxtZW50TGlzdCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LmVucm9sbG1lbnRMaXN0KS5sZW5ndGgpIHtcbiAgICAgIGxldCB1c2VySWQgPSAnJztcbiAgICAgIGxldCBjb250ZW50OiBOc0NvbnRlbnQuSUNvbnRlbnRbXTtcbiAgICAgIGxldCBjb250ZW50TmV3OiBOc0NvbnRlbnQuSUNvbnRlbnRbXTtcbiAgICAgIGxldCB0YWJSZXN1bHRzOiBhbnlbXSA9IFtdO1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBfLmdldChzdHJpcC5yZXF1ZXN0LmVucm9sbG1lbnRMaXN0LCAncXVlcnlQYXJhbXMnKTtcbiAgICAgIGlmICh0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZSkge1xuICAgICAgICB1c2VySWQgPSB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS51c2VySWQ7XG4gICAgICB9XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGRlcHJlY2F0aW9uXG4gICAgICB0aGlzLnVzZXJTdmMuZmV0Y2hVc2VyQmF0Y2hMaXN0KHVzZXJJZCwgcXVlcnlQYXJhbXMpLnN1YnNjcmliZShcbiAgICAgICAgKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgY291cnNlcyA9IHJlc3VsdCAmJiByZXN1bHQuY291cnNlcztcbiAgICAgICAgICBjb25zdCBzaG93Vmlld01vcmUgPSBCb29sZWFuKFxuICAgICAgICAgICAgY291cnNlcy5sZW5ndGggPiA1ICYmIHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLnBvc3RDYXJkRm9yU2VhcmNoLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qgdmlld01vcmVVcmwgPSBzaG93Vmlld01vcmVcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBwYXRoOiAoc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucGF0aCkgfHwgJycsXG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgcTogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICAgICAgZjpcbiAgICAgICAgICAgICAgICAgIHN0cmlwLnJlcXVlc3QgJiYgc3RyaXAucmVxdWVzdC5zZWFyY2hWNiAmJiBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmZpbHRlcnNcbiAgICAgICAgICAgICAgICAgICAgPyBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLnNlYXJjaFNlcnZTdmMudHJhbnNmb3JtU2VhcmNoVjZGaWx0ZXJzKFxuICAgICAgICAgICAgICAgICAgICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYuZmlsdGVyc1xuICAgICAgICAgICAgICAgICAgICAgIC8vICksXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICBpZiAoY291cnNlcyAmJiBjb3Vyc2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29udGVudCA9IGNvdXJzZXMubWFwKChjOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY29udGVudFRlbXA6IE5zQ29udGVudC5JQ29udGVudCA9IGMuY29udGVudDtcbiAgICAgICAgICAgICAgY29udGVudFRlbXAuY29tcGxldGlvblBlcmNlbnRhZ2UgPSBjLmNvbXBsZXRpb25QZXJjZW50YWdlIHx8IGMucHJvZ3Jlc3MgfHwgMDtcbiAgICAgICAgICAgICAgY29udGVudFRlbXAuY29tcGxldGlvblN0YXR1cyA9IGMuY29tcGxldGlvblN0YXR1cyB8fCBjLnN0YXR1cyB8fCAwO1xuICAgICAgICAgICAgICBjb250ZW50VGVtcC5lbnJvbGxlZERhdGUgPSBjLmVucm9sbGVkRGF0ZSB8fCAnJztcbiAgICAgICAgICAgICAgY29udGVudFRlbXAubGFzdENvbnRlbnRBY2Nlc3NUaW1lID0gYy5sYXN0Q29udGVudEFjY2Vzc1RpbWUgfHwgJyc7XG4gICAgICAgICAgICAgIGNvbnRlbnRUZW1wLmxhc3RSZWFkQ29udGVudFN0YXR1cyA9IGMubGFzdFJlYWRDb250ZW50U3RhdHVzIHx8ICcnO1xuICAgICAgICAgICAgICBjb250ZW50VGVtcC5sYXN0UmVhZENvbnRlbnRJZCA9IGMubGFzdFJlYWRDb250ZW50SWQgfHwgJyc7XG4gICAgICAgICAgICAgIGNvbnRlbnRUZW1wLmxyY1Byb2dyZXNzRGV0YWlscyA9IGMubHJjUHJvZ3Jlc3NEZXRhaWxzIHx8ICcnO1xuICAgICAgICAgICAgICBjb250ZW50VGVtcC5pc3N1ZWRDZXJ0aWZpY2F0ZXMgPSBjLmlzc3VlZENlcnRpZmljYXRlcyB8fCBbXTtcbiAgICAgICAgICAgICAgY29udGVudFRlbXAuYmF0Y2hJZCA9IGMuYmF0Y2hJZCB8fCAnJztcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRUZW1wO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFRvIGZpbHRlciBjb250ZW50IHdpdGggY29tcGxldGlvblBlcmNlbnRhZ2UgPiAwLFxuICAgICAgICAgIC8vIHNvIHRoYXQgb25seSB0aG9zZSBjb250ZW50IHdpbGwgc2hvdyBpbiBob21lIHBhZ2VcbiAgICAgICAgICAvLyBjb250aW51ZSBsZWFyaW5nIHN0cmlwXG4gICAgICAgICAgLy8gaWYgKGNvbnRlbnQgJiYgY29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgICAvLyAgIGNvbnRlbnROZXcgPSBjb250ZW50LmZpbHRlcigoYzogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgIC8qKiBjb21tZW50ZWQgYXMgYm90aCBhcmUgMCBhZnRlciBlbnJvbGxsICovXG4gICAgICAgICAgLy8gICAgIGlmIChjLmNvbXBsZXRpb25QZXJjZW50YWdlICYmIGMuY29tcGxldGlvblBlcmNlbnRhZ2UgPiAwKSB7XG4gICAgICAgICAgLy8gICAgICAgcmV0dXJuIGNcbiAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgIC8vICAgfSlcbiAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAvLyBUbyBzb3J0IGluIGRlc2NlbmRpbmcgb3JkZXIgb2YgdGhlIGVucm9sbGVkIGRhdGVcbiAgICAgICAgICBjb250ZW50TmV3ID0gKGNvbnRlbnQgfHwgW10pLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRlQTogYW55ID0gbmV3IERhdGUoYS5sYXN0Q29udGVudEFjY2Vzc1RpbWUgfHwgMCk7XG4gICAgICAgICAgICBjb25zdCBkYXRlQjogYW55ID0gbmV3IERhdGUoYi5sYXN0Q29udGVudEFjY2Vzc1RpbWUgfHwgMCk7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZUIgLSBkYXRlQTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0YWJSZXN1bHRzID0gdGhpcy5zcGxpdEVucm9sbG1lbnRUYWJzRGF0YShjb250ZW50TmV3LCBzdHJpcCk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY29udGVudE5ldywgc3RyaXApLFxuICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgdmlld01vcmVVcmwsXG4gICAgICAgICAgICAgIHRhYlJlc3VsdHNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb250ZW50TmV3LCBzdHJpcCksXG4gICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICB2aWV3TW9yZVVybCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHNwbGl0RW5yb2xsbWVudFRhYnNEYXRhKGNvbnRlbnROZXc6IE5zQ29udGVudC5JQ29udGVudFtdLCBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCkge1xuICAgIGNvbnN0IHRhYlJlc3VsdHM6IGFueVtdID0gW107XG4gICAgY29uc3Qgc3BsaXREYXRhID0gdGhpcy5nZXRJbnByb2dyZXNzQW5kQ29tcGxldGVkKFxuICAgICAgY29udGVudE5ldyxcbiAgICAgIChlOiBhbnkpID0+IGUuY29tcGxldGlvblN0YXR1cyA9PT0gMSB8fCBlLmNvbXBsZXRpb25QZXJjZW50YWdlIDwgMTAwLFxuICAgICAgc3RyaXAsXG4gICAgKTtcblxuICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnMubGVuZ3RoKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmlwLnRhYnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKHN0cmlwLnRhYnNbaV0pIHtcbiAgICAgICAgICB0YWJSZXN1bHRzLnB1c2goXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLnN0cmlwLnRhYnNbaV0sXG4gICAgICAgICAgICAgIGZldGNoVGFiU3RhdHVzOiAnZG9uZScsXG4gICAgICAgICAgICAgIC4uLihzcGxpdERhdGEuZmluZChpdG1Jbm5lciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFic1tpXSAmJiBpdG1Jbm5lci52YWx1ZSA9PT0gc3RyaXAudGFic1tpXS52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0bUlubmVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFiUmVzdWx0cztcbiAgfVxuXG4gIGdldElucHJvZ3Jlc3NBbmRDb21wbGV0ZWQoYXJyYXk6IE5zQ29udGVudC5JQ29udGVudFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpbHRlcjogYW55LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0KSB7XG4gICAgY29uc3QgaW5wcm9ncmVzczogYW55W10gPSBbXTtcbiAgICBjb25zdCBjb21wbGV0ZWQ6IGFueVtdID0gW107XG4gICAgYXJyYXkuZm9yRWFjaCgoZTogYW55LCBpZHg6IG51bWJlciwgYXJyOiBhbnlbXSkgPT4gKGN1c3RvbUZpbHRlcihlLCBpZHgsIGFycikgPyBpbnByb2dyZXNzIDogY29tcGxldGVkKS5wdXNoKGUpKTtcbiAgICByZXR1cm4gW1xuICAgICAgeyB2YWx1ZTogJ2lucHJvZ3Jlc3MnLCB3aWRnZXRzOiB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGlucHJvZ3Jlc3MsIHN0cmlwKSB9LFxuICAgICAgeyB2YWx1ZTogJ2NvbXBsZXRlZCcsIHdpZGdldHM6IHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY29tcGxldGVkLCBzdHJpcCkgfV07XG4gIH1cblxuICBhc3luYyBmZXRjaEZyb21TZWFyY2hWNihzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5zZWFyY2hWNikubGVuZ3RoKSB7XG4gICAgICAvLyBpZiAoIShzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmxvY2FsZSAmJiBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmxvY2FsZS5sZW5ndGggPiAwKSkge1xuICAgICAgLy8gICBpZiAodGhpcy5jb25maWdTdmMuYWN0aXZlTG9jYWxlKSB7XG4gICAgICAvLyAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUgPSBbdGhpcy5jb25maWdTdmMuYWN0aXZlTG9jYWxlLmxvY2Fsc1swXV1cbiAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgIC8vICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmxvY2FsZSA9IFsnZW4nXVxuICAgICAgLy8gICB9XG4gICAgICAvLyB9XG4gICAgICBsZXQgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlOm5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUubG9nKG9yaWdpbmFsRmlsdGVycyk7XG4gICAgICBpZiAoc3RyaXAucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycykge1xuICAgICAgICBvcmlnaW5hbEZpbHRlcnMgPSBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycztcbiAgICAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMgPSB0aGlzLmNoZWNrRm9yRGF0ZUZpbHRlcnMoc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMpO1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycyA9IHRoaXMuZ2V0RmlsdGVyc0Zyb21BcnJheShcbiAgICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIFRPRE86IEhhdmUgdG8gZXh0cmFjdCByZXF1ZXN0UmVxdWlyZWQgdG8gb3V0ZXIgbGV2ZWwgb2YgdGFicyBjb25maWdcbiAgICAgICAgY29uc3QgZmlyc3RUYWIgPSBzdHJpcC50YWJzWzBdO1xuICAgICAgICBpZiAoZmlyc3RUYWIucmVxdWVzdFJlcXVpcmVkKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldICYmIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbFRhYnMgPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFRhYkZyb21NYXAgPSAoYWxsVGFicyAmJiBhbGxUYWJzLmxlbmd0aCAmJiBhbGxUYWJzWzBdKSBhcyBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBUYWI7XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0VGFiRGF0YUJ5TmV3UmVxU2VhcmNoVjYoc3RyaXAsIDAsIGN1cnJlbnRUYWJGcm9tTWFwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZWFyY2hWNlJlcXVlc3Qoc3RyaXAsIHN0cmlwLnJlcXVlc3QsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyIC0gcmVzcG9uc2UsICcsIHJlc3BvbnNlKVxuICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzKSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbGluZyAgYWZ0ZXItLSAnKVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50LCBzdHJpcCksXG4gICAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuRXZlbnQpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1FdmVudHNUb1dpZGdldHMocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuRXZlbnQsIHN0cmlwKSxcbiAgICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLnZpZXdNb3JlVXJsLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gSGFuZGxlIGVycm9yc1xuICAgICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlYXJjaFY2UmVxdWVzdChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXRbJ3JlcXVlc3QnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1czogYm9vbGVhblxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsRmlsdGVyczogYW55ID0gW107XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHJlcXVlc3QgJiYgcmVxdWVzdC5zZWFyY2hWNikge1xuICAgICAgICB0aGlzLmNvbnRlbnRTdmMuc2VhcmNoVjYocmVxdWVzdC5zZWFyY2hWNikuc3Vic2NyaWJlKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGNvbnN0IHNob3dWaWV3TW9yZSA9IEJvb2xlYW4oXG4gICAgICAgICAgICByZXN1bHRzLnJlc3VsdC5jb250ZW50ICYmIHJlc3VsdHMucmVzdWx0LmNvbnRlbnQubGVuZ3RoID4gNSAmJiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5wb3N0Q2FyZEZvclNlYXJjaCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHZpZXdNb3JlVXJsID0gc2hvd1ZpZXdNb3JlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgcGF0aDogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucGF0aCB8fCAnJyxcbiAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAgICAgICB0YWI6ICdMZWFybicsXG4gICAgICAgICAgICAgICAgcTogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICAgICAgZjpcbiAgICAgICAgICAgICAgICAgIHJlcXVlc3QgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5zZWFyY2hWNiAmJlxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnNcbiAgICAgICAgICAgICAgICAgICAgPyBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybVNlYXJjaFY2RmlsdGVyc1YyKFxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxGaWx0ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IHt9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgIC8vIGlmICh2aWV3TW9yZVVybCAmJiB2aWV3TW9yZVVybC5xdWVyeVBhcmFtcykge1xuICAgICAgICAgIC8vICAgdmlld01vcmVVcmwucXVlcnlQYXJhbXMgPSB2aWV3TW9yZVVybC5xdWVyeVBhcmFtc1xuICAgICAgICAgIC8vIH1cbiAgICAgICAgICByZXNvbHZlKHsgcmVzdWx0cywgdmlld01vcmVVcmwgfSk7XG4gICAgICAgIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoRnJvbVRyZW5kaW5nQ29udGVudChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2ggJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaCkubGVuZ3RoKSB7XG4gICAgICAvLyBpZiAoIShzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmxvY2FsZSAmJiBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmxvY2FsZS5sZW5ndGggPiAwKSkge1xuICAgICAgLy8gICBpZiAodGhpcy5jb25maWdTdmMuYWN0aXZlTG9jYWxlKSB7XG4gICAgICAvLyAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUgPSBbdGhpcy5jb25maWdTdmMuYWN0aXZlTG9jYWxlLmxvY2Fsc1swXV1cbiAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgIC8vICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmxvY2FsZSA9IFsnZW4nXVxuICAgICAgLy8gICB9XG4gICAgICAvLyB9XG4gICAgICBsZXQgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlOm5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUubG9nKG9yaWdpbmFsRmlsdGVycyk7XG4gICAgICBpZiAoc3RyaXAucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycykge1xuICAgICAgICBvcmlnaW5hbEZpbHRlcnMgPSBzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycztcbiAgICAgICAgc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0LmZpbHRlcnMgPSB0aGlzLmNoZWNrRm9yRGF0ZUZpbHRlcnMoc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0LmZpbHRlcnMpO1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycyA9IHRoaXMuZ2V0RmlsdGVyc0Zyb21BcnJheShcbiAgICAgICAgICBzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIFRPRE86IEhhdmUgdG8gZXh0cmFjdCByZXF1ZXN0UmVxdWlyZWQgdG8gb3V0ZXIgbGV2ZWwgb2YgdGFicyBjb25maWdcbiAgICAgICAgY29uc3QgZmlyc3RUYWIgPSBzdHJpcC50YWJzWzBdO1xuICAgICAgICBpZiAoZmlyc3RUYWIucmVxdWVzdFJlcXVpcmVkKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldICYmIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbFRhYnMgPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFRhYkZyb21NYXAgPSAoYWxsVGFicyAmJiBhbGxUYWJzLmxlbmd0aCAmJiBhbGxUYWJzWzBdKSBhcyBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBUYWI7XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0VGFiRGF0YUJ5TmV3UmVxVHJlbmRpbmcoc3RyaXAsIDAsIGN1cnJlbnRUYWJGcm9tTWFwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50cmVuZGluZ1NlYXJjaFJlcXVlc3Qoc3RyaXAsIHN0cmlwLnJlcXVlc3QsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdHMgJiYgcmVzcG9uc2UucmVzdWx0cy5yZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc3QgY29udGVudCA9IHJlc3BvbnNlLnJlc3VsdHMucmVzcG9uc2Vbc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXNwb25zZUtleV0gfHwgW107XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY29udGVudCwgc3RyaXApLFxuICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgcmVzcG9uc2Uudmlld01vcmVVcmwgfHwgJycsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdkb25lJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gSGFuZGxlIGVycm9yc1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHRyZW5kaW5nU2VhcmNoUmVxdWVzdChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXRbJ3JlcXVlc3QnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1czogYm9vbGVhblxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsRmlsdGVyczogYW55ID0gW107XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHJlcXVlc3QgJiYgcmVxdWVzdC50cmVuZGluZ1NlYXJjaCkge1xuICAgICAgICAvLyBjaGVjayBmb3IgdGhlIHJlcXVlc3QgaWYgaXQgaGFzIGR5bmFtaWMgdmFsdWVzXVxuICAgICAgICBpZiAocmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0LmZpbHRlcnMub3JnYW5pc2F0aW9uICYmXG4gICAgICAgICAgcmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0LmZpbHRlcnMub3JnYW5pc2F0aW9uLmluZGV4T2YoJzxvcmdJRD4nKSA+PSAwXG4gICAgICAgICkge1xuICAgICAgICAgIGxldCB1c2VyUm9vdE9yZ0lkO1xuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZSkge1xuICAgICAgICAgICAgdXNlclJvb3RPcmdJZCA9IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnJvb3RPcmdJZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0LmZpbHRlcnMub3JnYW5pc2F0aW9uID0gdXNlclJvb3RPcmdJZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRlbnRTdmMudHJlbmRpbmdDb250ZW50U2VhcmNoKHJlcXVlc3QudHJlbmRpbmdTZWFyY2gpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgICAgICBjb25zdCBzaG93Vmlld01vcmUgPSBCb29sZWFuKFxuICAgICAgICAgICAgcmVzdWx0cy5yZXN1bHQgJiZcbiAgICAgICAgICAgIHN0cmlwLnJlcXVlc3QgJiZcbiAgICAgICAgICAgIHJlc3VsdHMucmVzdWx0W3N0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVzcG9uc2VLZXldICYmXG4gICAgICAgICAgICByZXN1bHRzLnJlc3VsdFtzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlc3BvbnNlS2V5XS5sZW5ndGggPiA1ICYmXG4gICAgICAgICAgICBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5wb3N0Q2FyZEZvclNlYXJjaCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHZpZXdNb3JlVXJsID0gc2hvd1ZpZXdNb3JlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgcGF0aDogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucGF0aCB8fCAnJyxcbiAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAgICAgICB0YWI6ICdMZWFybicsXG4gICAgICAgICAgICAgICAgcTogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICAgICAgZjpcbiAgICAgICAgICAgICAgICAgIHJlcXVlc3QgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC50cmVuZGluZ1NlYXJjaCAmJlxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0LmZpbHRlcnNcbiAgICAgICAgICAgICAgICAgICAgPyBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybVNlYXJjaFY2RmlsdGVyc1YyKFxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxGaWx0ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IHt9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgIHJlc29sdmUoeyByZXN1bHRzLCB2aWV3TW9yZVVybCB9KTtcbiAgICAgICAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoZXJyb3IuZXJyb3IgJiYgZXJyb3IuZXJyb3Iuc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2RvbmUnLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdkb25lJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKVxuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB0b2dnbGVJbmZvKGRhdGE6IElTdHJpcFVuaXRDb250ZW50RGF0YSkge1xuICAgIGNvbnN0IHN0cmlwSW5mbyA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtkYXRhLmtleV0uc3RyaXBJbmZvO1xuICAgIGlmIChzdHJpcEluZm8pIHtcbiAgICAgIGlmIChzdHJpcEluZm8ubW9kZSAhPT0gJ2JlbG93Jykge1xuICAgICAgICB0aGlzLmxvZ2dlclN2Yy53YXJuKGBzdHJpcCBpbmZvIG1vZGU6ICR7c3RyaXBJbmZvLm1vZGV9IG5vdCBpbXBsZW1lbnRlZCB5ZXRgKTtcbiAgICAgICAgc3RyaXBJbmZvLm1vZGUgPSAnYmVsb3cnO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmlwSW5mby5tb2RlID09PSAnYmVsb3cnKSB7XG4gICAgICAgIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtkYXRhLmtleV0uc3RyaXBJbmZvID0ge1xuICAgICAgICAgIC4uLnN0cmlwSW5mbyxcbiAgICAgICAgICB2aXNpYmlsaXR5TW9kZTogc3RyaXBJbmZvLnZpc2liaWxpdHlNb2RlID09PSAnaGlkZGVuJyA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoXG4gICAgY29udGVudHM6IE5zQ29udGVudC5JQ29udGVudFtdLFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICApIHtcbiAgICByZXR1cm4gKGNvbnRlbnRzIHx8IFtdKS5tYXAoKGNvbnRlbnQsIGlkeCkgPT4gKFxuICAgICAgY29udGVudCA/IHtcbiAgICAgICAgd2lkZ2V0VHlwZTogJ2NhcmRMaWInLFxuICAgICAgICB3aWRnZXRTdWJUeXBlOiAnY2FyZENvbnRlbnRMaWInLFxuICAgICAgICB3aWRnZXRIb3N0Q2xhc3M6ICdtYi0yJyxcbiAgICAgICAgd2lkZ2V0RGF0YToge1xuICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgLi4uKGNvbnRlbnQuYmF0Y2ggJiYgeyBiYXRjaDogY29udGVudC5iYXRjaCB9KSxcbiAgICAgICAgICBjYXJkU3ViVHlwZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuY2FyZFN1YlR5cGUsXG4gICAgICAgICAgY2FyZEN1c3RvbWVDbGFzczogc3RyaXAuY3VzdG9tZUNsYXNzID8gc3RyaXAuY3VzdG9tZUNsYXNzIDogJycsXG4gICAgICAgICAgY29udGV4dDogeyBwYWdlU2VjdGlvbjogc3RyaXAua2V5LCBwb3NpdGlvbjogaWR4IH0sXG4gICAgICAgICAgaW50cmFuZXRNb2RlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5pbnRyYW5ldE1vZGUsXG4gICAgICAgICAgZGVsZXRlZE1vZGU6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmRlbGV0ZWRNb2RlLFxuICAgICAgICAgIGNvbnRlbnRUYWdzOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5jb250ZW50VGFncyxcbiAgICAgICAgfSxcbiAgICAgIH0gOiB7XG4gICAgICAgIHdpZGdldFR5cGU6ICdjYXJkJyxcbiAgICAgICAgd2lkZ2V0U3ViVHlwZTogJ2NhcmRDb250ZW50JyxcbiAgICAgICAgd2lkZ2V0SG9zdENsYXNzOiAnbWItMicsXG4gICAgICAgIHdpZGdldERhdGE6IHt9LFxuICAgICAgfVxuICAgICkpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1FdmVudHNUb1dpZGdldHMoXG4gICAgY29udGVudHM6IElUb2RheUV2ZW50c1tdLFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICApIHtcbiAgICB0aGlzLmV2ZW50U3ZjLnNldEV2ZW50TGlzdERhdGEoY29udGVudHMpO1xuICAgIHJldHVybiAodGhpcy5ldmVudFN2Yy50b2RheXNFdmVudHMgfHwgW10pLm1hcCgoY29udGVudDogYW55LCBpZHg6IGFueSkgPT4gKGNvbnRlbnQgPyB7XG4gICAgICB3aWRnZXRUeXBlOiAnY2FyZCcsXG4gICAgICB3aWRnZXRTdWJUeXBlOiAnZXZlbnRIdWJDYXJkJyxcbiAgICAgIHdpZGdldEhvc3RDbGFzczogJ21iLTInLFxuICAgICAgd2lkZ2V0RGF0YToge1xuICAgICAgICBjb250ZW50LFxuICAgICAgICBjYXJkU3ViVHlwZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuY2FyZFN1YlR5cGUsXG4gICAgICAgIGNhcmRDdXN0b21lQ2xhc3M6IHN0cmlwLmN1c3RvbWVDbGFzcyA/IHN0cmlwLmN1c3RvbWVDbGFzcyA6ICcnLFxuICAgICAgICBjb250ZXh0OiB7IHBhZ2VTZWN0aW9uOiBzdHJpcC5rZXksIHBvc2l0aW9uOiBpZHggfSxcbiAgICAgICAgaW50cmFuZXRNb2RlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5pbnRyYW5ldE1vZGUsXG4gICAgICAgIGRlbGV0ZWRNb2RlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5kZWxldGVkTW9kZSxcbiAgICAgICAgY29udGVudFRhZ3M6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmNvbnRlbnRUYWdzLFxuICAgICAgfSxcbiAgICB9IDoge1xuICAgICAgd2lkZ2V0VHlwZTogJ2NhcmQnLFxuICAgICAgd2lkZ2V0U3ViVHlwZTogJ2V2ZW50SHViQ2FyZCcsXG4gICAgICB3aWRnZXRIb3N0Q2xhc3M6ICdtYi0yJyxcbiAgICAgIHdpZGdldERhdGE6IHt9LFxuICAgIH1cbiAgICApKTtcbiAgfVxuICBwcml2YXRlIHRyYW5zZm9ybVNrZWxldG9uVG9XaWRnZXRzKFxuICAgIHN0cmlwOiBhbnlcbiAgKSB7XG4gICAgcmV0dXJuIFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA3LCA4LCA5LCAxMF0ubWFwKF9jb250ZW50ID0+ICh7XG4gICAgICB3aWRnZXRUeXBlOiAnY2FyZExpYicsXG4gICAgICB3aWRnZXRTdWJUeXBlOiAnY2FyZENvbnRlbnRMaWInLFxuICAgICAgd2lkZ2V0SG9zdENsYXNzOiAnbWItMicsXG4gICAgICB3aWRnZXREYXRhOiB7XG4gICAgICAgIGNhcmRTdWJUeXBlOiBzdHJpcC5sb2FkZXJDb25maWcgJiYgc3RyaXAubG9hZGVyQ29uZmlnLmNhcmRTdWJUeXBlIHx8ICdjYXJkLXN0YW5kYXJkLXNrZWxldG9uJyxcbiAgICAgICAgY2FyZEN1c3RvbWVDbGFzczogc3RyaXAuY3VzdG9tZUNsYXNzID8gc3RyaXAuY3VzdG9tZUNsYXNzIDogJycsXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1N0cmlwKFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICAgIHJlc3VsdHM6IE5zV2lkZ2V0UmVzb2x2ZXIuSVJlbmRlckNvbmZpZ1dpdGhBbnlEYXRhW10gPSBbXSxcbiAgICBmZXRjaFN0YXR1czogVEZldGNoU3RhdHVzLFxuICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUsXG4gICAgX3ZpZXdNb3JlVXJsOiBhbnksXG4gICAgdGFic1Jlc3VsdHM/OiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBUYWJbXSB8IHVuZGVmaW5lZCxcbiAgICAvLyBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgaXMgdXNlZCBzbyB0aGF0IHBhcmVudHMnIHN0YXR1cyBpcyBub3QgcmUtY2FsY3VsYXRlZCBpZiB0aGUgQVBJIGlzIGNhbGxlZCBhZ2FpbiBjb3ogb2YgZmlsdGVycywgZXRjLlxuICApIHtcbiAgICBjb25zdCBzdHJpcERhdGEgPSB7XG4gICAgICB2aWV3TW9yZVVybDogc3RyaXAudmlld01vcmVVcmwsXG4gICAgICBrZXk6IHN0cmlwLmtleSxcbiAgICAgIGNhbkhpZGVTdHJpcDogQm9vbGVhbihzdHJpcC5jYW5IaWRlU3RyaXApLFxuICAgICAgc2hvd1N0cmlwOiB0aGlzLmdldElmU3RyaXBIaWRkZW4oc3RyaXAua2V5KSxcbiAgICAgIG5vRGF0YVdpZGdldDogc3RyaXAubm9EYXRhV2lkZ2V0LFxuICAgICAgZXJyb3JXaWRnZXQ6IHN0cmlwLmVycm9yV2lkZ2V0LFxuICAgICAgc3RyaXBJbmZvOiBzdHJpcC5pbmZvLFxuICAgICAgc3RyaXBUaXRsZTogc3RyaXAudGl0bGUsXG4gICAgICBzdHJpcFRpdGxlTGluazogc3RyaXAuc3RyaXBUaXRsZUxpbmssXG4gICAgICBkaXNhYmxlVHJhbnNsYXRlOiBzdHJpcC5kaXNhYmxlVHJhbnNsYXRlLFxuICAgICAgc2xpZGVyQ29uZmlnOiBzdHJpcC5zbGlkZXJDb25maWcsXG4gICAgICB0YWJzOiB0YWJzUmVzdWx0cyA/IHRhYnNSZXN1bHRzIDogc3RyaXAudGFicyxcbiAgICAgIHN0cmlwTmFtZTogc3RyaXAubmFtZSxcbiAgICAgIG1vZGU6IHN0cmlwLm1vZGUsXG4gICAgICBzdHJpcENvbmZpZzogc3RyaXAuc3RyaXBDb25maWcsXG4gICAgICBzdHJpcEJhY2tncm91bmQ6IHN0cmlwLnN0cmlwQmFja2dyb3VuZCxcbiAgICAgIHNlY29uZGFyeUhlYWRpbmc6IHN0cmlwLnNlY29uZGFyeUhlYWRpbmcsXG4gICAgICBsb2FkZXJXaWRnZXRzOiBzdHJpcC5sb2FkZXJXaWRnZXRzIHx8IFtdLFxuICAgICAgd2lkZ2V0czpcbiAgICAgICAgZmV0Y2hTdGF0dXMgPT09ICdkb25lJ1xuICAgICAgICAgID8gW1xuICAgICAgICAgICAgLi4uKHN0cmlwLnByZVdpZGdldHMgfHwgW10pLm1hcCh3ID0+ICh7XG4gICAgICAgICAgICAgIC4uLncsXG4gICAgICAgICAgICAgIHdpZGdldEhvc3RDbGFzczogYG1iLTIgJHt3LndpZGdldEhvc3RDbGFzc31gLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgLi4ucmVzdWx0cyxcbiAgICAgICAgICAgIC4uLihzdHJpcC5wb3N0V2lkZ2V0cyB8fCBbXSkubWFwKHcgPT4gKHtcbiAgICAgICAgICAgICAgLi4udyxcbiAgICAgICAgICAgICAgd2lkZ2V0SG9zdENsYXNzOiBgbWItMiAke3cud2lkZ2V0SG9zdENsYXNzfWAsXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgXVxuICAgICAgICAgIDogW10sXG4gICAgICBzaG93T25Ob0RhdGE6IEJvb2xlYW4oXG4gICAgICAgIHN0cmlwLm5vRGF0YVdpZGdldCAmJlxuICAgICAgICAhKChzdHJpcC5wcmVXaWRnZXRzIHx8IFtdKS5sZW5ndGggKyByZXN1bHRzLmxlbmd0aCArIChzdHJpcC5wb3N0V2lkZ2V0cyB8fCBbXSkubGVuZ3RoKSAmJlxuICAgICAgICBmZXRjaFN0YXR1cyA9PT0gJ2RvbmUnLFxuICAgICAgKSxcbiAgICAgIHNob3dPbkxvYWRlcjogQm9vbGVhbihzdHJpcC5sb2FkZXIgJiYgZmV0Y2hTdGF0dXMgPT09ICdmZXRjaGluZycpLFxuICAgICAgc2hvd09uRXJyb3I6IEJvb2xlYW4oc3RyaXAuZXJyb3JXaWRnZXQgJiYgZmV0Y2hTdGF0dXMgPT09ICdlcnJvcicpLFxuICAgIH07XG4gICAgLy8gY29uc3Qgc3RyaXBEYXRhID0gdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV1cbiAgICB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXAgPSB7XG4gICAgICAuLi50aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXAsXG4gICAgICBbc3RyaXAua2V5XTogc3RyaXBEYXRhLFxuICAgIH07XG4gICAgaWYgKCF0YWJzUmVzdWx0cykge1xuICAgICAgaWYgKFxuICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgJiZcbiAgICAgICAgKGZldGNoU3RhdHVzID09PSAnZG9uZScgfHwgZmV0Y2hTdGF0dXMgPT09ICdlcnJvcicpICYmXG4gICAgICAgIHN0cmlwRGF0YS53aWRnZXRzXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5jaGVja1BhcmVudFN0YXR1cyhmZXRjaFN0YXR1cywgc3RyaXBEYXRhLndpZGdldHMubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIGlmIChjYWxjdWxhdGVQYXJlbnRTdGF0dXMgJiYgIShyZXN1bHRzICYmIHJlc3VsdHMubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgdGhpcy5jb250ZW50QXZhaWxhYmxlID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuY29udGVudEF2YWlsYWJsZSA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29udGVudEF2YWlsYWJsZSA9IHRydWU7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgY2hlY2tQYXJlbnRTdGF0dXMoZmV0Y2hTdGF0dXM6IFRGZXRjaFN0YXR1cywgc3RyaXBXaWRnZXRzQ291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChmZXRjaFN0YXR1cyA9PT0gJ2RvbmUnICYmICFzdHJpcFdpZGdldHNDb3VudCkge1xuICAgICAgdGhpcy5ub0RhdGFDb3VudCArPSAxO1xuICAgIH0gZWxzZSBpZiAoZmV0Y2hTdGF0dXMgPT09ICdkb25lJyAmJiBzdHJpcFdpZGdldHNDb3VudCkge1xuICAgICAgdGhpcy5zdWNjZXNzRGF0YUNvdW50ICs9IDE7XG4gICAgfSBlbHNlIGlmIChmZXRjaFN0YXR1cyA9PT0gJ2Vycm9yJykge1xuICAgICAgdGhpcy5lcnJvckRhdGFDb3VudCArPSAxO1xuICAgIH1cbiAgICBjb25zdCBzZXR0bGVkQ291bnQgPSB0aGlzLm5vRGF0YUNvdW50ICsgdGhpcy5zdWNjZXNzRGF0YUNvdW50ICsgdGhpcy5lcnJvckRhdGFDb3VudDtcbiAgICBjb25zdCB0b3RhbENvdW50ID0gdGhpcy53aWRnZXREYXRhLnN0cmlwcy5sZW5ndGg7XG4gICAgaWYgKHRoaXMuc3VjY2Vzc0RhdGFDb3VudCA+IDAgJiYgc2V0dGxlZENvdW50IDwgdG90YWxDb3VudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNob3dQYXJlbnRMb2FkZXIgPSBzZXR0bGVkQ291bnQgIT09IHRvdGFsQ291bnQ7XG4gICAgdGhpcy5zaG93UGFyZW50Tm9EYXRhID1cbiAgICAgIHRoaXMubm9EYXRhQ291bnQgPiAwICYmIHRoaXMubm9EYXRhQ291bnQgKyB0aGlzLmVycm9yRGF0YUNvdW50ID09PSB0b3RhbENvdW50O1xuICAgIHRoaXMuc2hvd1BhcmVudEVycm9yID0gdGhpcy5lcnJvckRhdGFDb3VudCA9PT0gdG90YWxDb3VudDtcbiAgfVxuICBjaGVja0ZvckVtcHR5V2lkZ2V0KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0KTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgc3RyaXAucmVxdWVzdCAmJlxuICAgICAgKChzdHJpcC5yZXF1ZXN0LmFwaSAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LmFwaSkubGVuZ3RoKSB8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC5zZWFyY2ggJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5zZWFyY2gpLmxlbmd0aCkgfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3Quc2VhcmNoUmVnaW9uUmVjb21tZW5kYXRpb24gJiZcbiAgICAgICAgICBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnNlYXJjaFJlZ2lvblJlY29tbWVuZGF0aW9uKS5sZW5ndGgpIHx8XG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYpLmxlbmd0aCkgfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3QuZW5yb2xsbWVudExpc3QgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5lbnJvbGxtZW50TGlzdCkubGVuZ3RoKSB8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC5jYnBMaXN0ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuY2JwTGlzdCkubGVuZ3RoKSB8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoKS5sZW5ndGgpfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3QudG9wQ29udGVudCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnRvcENvbnRlbnQpLmxlbmd0aCkgfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudCkubGVuZ3RoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyB0YWJDbGlja2VkKHRhYkV2ZW50OiBNYXRUYWJDaGFuZ2VFdmVudCwgc3RyaXBNYXA6IElTdHJpcFVuaXRDb250ZW50RGF0YSwgc3RyaXBLZXk6IHN0cmluZykge1xuICAgIGlmIChzdHJpcE1hcCAmJiBzdHJpcE1hcC50YWJzICYmIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdKSB7XG4gICAgICBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XS5mZXRjaFRhYlN0YXR1cyA9ICdpbnByb2dyZXNzJztcbiAgICAgIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdLnRhYkxvYWRpbmcgPSB0cnVlO1xuICAgICAgc3RyaXBNYXAuc2hvd09uTG9hZGVyID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgZGF0YTogV3NFdmVudHMuSVRlbGVtZXRyeVRhYkRhdGEgPSB7XG4gICAgICBsYWJlbDogYCR7dGFiRXZlbnQudGFiLnRleHRMYWJlbH1gLFxuICAgICAgaW5kZXg6IHRhYkV2ZW50LmluZGV4LFxuICAgIH07XG4gICAgdGhpcy5ldmVudFN2Yy5yYWlzZUludGVyYWN0VGVsZW1ldHJ5KFxuICAgICAge1xuICAgICAgICB0eXBlOiBXc0V2ZW50cy5FbnVtSW50ZXJhY3RUeXBlcy5DTElDSyxcbiAgICAgICAgc3ViVHlwZTogV3NFdmVudHMuRW51bUludGVyYWN0U3ViVHlwZXMuSE9NRV9QQUdFX1NUUklQX1RBQlMsXG4gICAgICAgIGlkOiBgJHtfLmNhbWVsQ2FzZShkYXRhLmxhYmVsKX0tdGFiYCxcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgbW9kdWxlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5bW9kdWxlcy5IT01FLFxuICAgICAgfVxuICAgICk7XG4gICAgY29uc3QgY3VycmVudFRhYkZyb21NYXA6IGFueSA9IHN0cmlwTWFwLnRhYnMgJiYgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF07XG4gICAgY29uc3QgY3VycmVudFN0cmlwID0gdGhpcy53aWRnZXREYXRhLnN0cmlwcy5maW5kKHMgPT4gcy5rZXkgPT09IHN0cmlwS2V5KTtcbiAgICBpZiAodGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwS2V5XSAmJiBjdXJyZW50VGFiRnJvbU1hcCkge1xuICAgICAgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwS2V5XS52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyA9IHtcbiAgICAgICAgLi4udGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwS2V5XS52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyxcbiAgICAgICAgdGFiU2VsZWN0ZWQ6IGN1cnJlbnRUYWJGcm9tTWFwLmxhYmVsLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGN1cnJlbnRTdHJpcCAmJiBjdXJyZW50VGFiRnJvbU1hcCAmJiAhY3VycmVudFRhYkZyb21NYXAuY29tcHV0ZURhdGFPbkNsaWNrKSB7XG4gICAgICBpZiAoY3VycmVudFRhYkZyb21NYXAucmVxdWVzdFJlcXVpcmVkICYmIGN1cnJlbnRUYWJGcm9tTWFwLnJlcXVlc3QpIHtcbiAgICAgICAgLy8gY2FsbCBBUEkgdG8gZ2V0IHRhYiBkYXRhIGFuZCBwcm9jZXNzXG4gICAgICAgIC8vIHRoaXMucHJvY2Vzc1N0cmlwKGN1cnJlbnRTdHJpcCwgW10sICdmZXRjaGluZycsIHRydWUsIG51bGwpXG4gICAgICAgIGlmIChjdXJyZW50VGFiRnJvbU1hcC5yZXF1ZXN0LnNlYXJjaFY2KSB7XG4gICAgICAgICAgdGhpcy5nZXRUYWJEYXRhQnlOZXdSZXFTZWFyY2hWNihjdXJyZW50U3RyaXAsIHRhYkV2ZW50LmluZGV4LCBjdXJyZW50VGFiRnJvbU1hcCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFRhYkZyb21NYXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaCkge1xuICAgICAgICAgIHRoaXMuZ2V0VGFiRGF0YUJ5TmV3UmVxVHJlbmRpbmcoY3VycmVudFN0cmlwLCB0YWJFdmVudC5pbmRleCwgY3VycmVudFRhYkZyb21NYXAsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJpcE1hcCAmJiBzdHJpcE1hcC50YWJzICYmIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdKSB7XG4gICAgICAgICAgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0udGFiTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmdldFRhYkRhdGFCeWZpbHRlcihjdXJyZW50U3RyaXAsIGN1cnJlbnRUYWJGcm9tTWFwLCB0cnVlKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0cmlwTWFwICYmIHN0cmlwTWFwLnRhYnMgJiYgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0pIHtcbiAgICAgICAgICAgICAgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0udGFiTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XS5mZXRjaFRhYlN0YXR1cyA9ICdkb25lJztcbiAgICAgICAgICAgICAgc3RyaXBNYXAuc2hvd09uTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAgICAgICAgIDIwMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0VGFiRGF0YUJ5TmV3UmVxU2VhcmNoVjYoXG4gICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgdGFiSW5kZXg6IG51bWJlcixcbiAgICBjdXJyZW50VGFiOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBUYWIsXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzOiBib29sZWFuXG4gICkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VhcmNoVjZSZXF1ZXN0KHN0cmlwLCBjdXJyZW50VGFiLnJlcXVlc3QsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cykge1xuICAgICAgICBjb25zdCB3aWRnZXRzID0gdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50LCBzdHJpcCk7XG4gICAgICAgIGxldCB0YWJSZXN1bHRzOiBhbnlbXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0gJiYgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFicykge1xuICAgICAgICAgIGNvbnN0IGFsbFRhYnMgPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzO1xuICAgICAgICAgIGlmIChhbGxUYWJzICYmIGFsbFRhYnMubGVuZ3RoICYmIGFsbFRhYnNbdGFiSW5kZXhdKSB7XG4gICAgICAgICAgICBhbGxUYWJzW3RhYkluZGV4XSA9IHtcbiAgICAgICAgICAgICAgLi4uYWxsVGFic1t0YWJJbmRleF0sXG4gICAgICAgICAgICAgIHdpZGdldHMsXG4gICAgICAgICAgICAgIGZldGNoVGFiU3RhdHVzOiAnZG9uZScsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGFiUmVzdWx0cyA9IGFsbFRhYnM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgIHdpZGdldHMsXG4gICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCxcbiAgICAgICAgICB0YWJSZXN1bHRzIC8vIHRhYlJlc3VsdHMgYXMgd2lkZ2V0c1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAvLyBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0VGFiRGF0YUJ5TmV3UmVxVHJlbmRpbmcoXG4gICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgdGFiSW5kZXg6IG51bWJlcixcbiAgICBjdXJyZW50VGFiOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBUYWIsXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzOiBib29sZWFuXG4gICkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMudHJlbmRpbmdTZWFyY2hSZXF1ZXN0KHN0cmlwLCBjdXJyZW50VGFiLnJlcXVlc3QsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cyAmJiByZXNwb25zZS5yZXN1bHRzLnJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSByZXNwb25zZS5yZXN1bHRzLnJlc3BvbnNlW2N1cnJlbnRUYWIudmFsdWVdIHx8IFtdO1xuICAgICAgICBjb25zdCB3aWRnZXRzID0gdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb250ZW50LCBzdHJpcCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjdXJyZW50VGFiIC0tLSB3aWRnZXRzJywgd2lkZ2V0cylcbiAgICAgICAgbGV0IHRhYlJlc3VsdHM6IGFueVtdID0gW107XG4gICAgICAgIGlmICh0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XSAmJiB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzKSB7XG4gICAgICAgICAgY29uc3QgYWxsVGFicyA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnM7XG4gICAgICAgICAgaWYgKGFsbFRhYnMgJiYgYWxsVGFicy5sZW5ndGggJiYgYWxsVGFic1t0YWJJbmRleF0pIHtcbiAgICAgICAgICAgIGFsbFRhYnNbdGFiSW5kZXhdID0ge1xuICAgICAgICAgICAgICAuLi5hbGxUYWJzW3RhYkluZGV4XSxcbiAgICAgICAgICAgICAgd2lkZ2V0cyxcbiAgICAgICAgICAgICAgZmV0Y2hUYWJTdGF0dXM6ICdkb25lJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0YWJSZXN1bHRzID0gYWxsVGFicztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3RhYlJlc3VsdHMgLSsrKysqKiotLScsIHRhYlJlc3VsdHMpXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlci0tICcpXG4gICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgIHdpZGdldHMsXG4gICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCxcbiAgICAgICAgICB0YWJSZXN1bHRzIC8vIHRhYlJlc3VsdHMgYXMgd2lkZ2V0c1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZG9uZScsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICB9XG4gIH1cblxuICBnZXRUYWJEYXRhQnlmaWx0ZXIoXG4gICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgY3VycmVudFRhYjogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVGFiLFxuICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1czogYm9vbGVhblxuICApIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2coJ3N0cmlwIC0tICcsIHN0cmlwKTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2coJ2N1cnJlbnRUYWIgLS0gJywgY3VycmVudFRhYik7XG4gICAgLy8gdHNsaW50OmRpc2FibGU6bm8tY29uc29sZVxuICAgIGNvbnNvbGUubG9nKCdjYWxjdWxhdGVQYXJlbnRTdGF0dXMtLSAnLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIC8vIFRPRE86IFdyaXRlIGxvZ2ljIGZvciBpbmRpdmlkdWFsIGZpbHRlciBpZiBwYXNzZWQgaW4gY29uZmlnXG4gICAgLy8gYWRkIHN3aXRjaCBjYXNlIGJhc2VkIG9uIGNvbmZpZyBrZXkgcGFzc2VkXG4gIH1cblxuICBhc3luYyBmZXRjaEFsbENicFBsYW5zKHN0cmlwOiBhbnksIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcblxuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3QuY2JwTGlzdCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LmNicExpc3QpLmxlbmd0aCkge1xuXG4gICAgICBsZXQgY291cnNlczogTnNDb250ZW50LklDb250ZW50W107XG4gICAgICBsZXQgdGFiUmVzdWx0czogYW55W10gPSBbXTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy51c2VyU3ZjLmZldGNoQ2JwUGxhbkxpc3QoKS50b1Byb21pc2UoKTtcbiAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgY291cnNlcyA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFicy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGFiUmVzdWx0cyA9IHRoaXMuc3BsaXRDYnBUYWJzRGF0YShjb3Vyc2VzLCBzdHJpcCk7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY291cnNlcywgc3RyaXApLFxuICAgICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgdGFiUmVzdWx0c1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb3Vyc2VzLCBzdHJpcCksXG4gICAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgICAndmlld01vcmVVcmwnLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gdGhpcy51c2VyU3ZjLmZldGNoQ2JwUGxhbkxpc3QoKS5zdWJzY3JpYmUoIGFzeW5jICAocmVzOiBhbnkpID0+IHtcbiAgICAgIC8vICAgaWYgKHJlcykge1xuICAgICAgLy8gICAgIGNvbnNvbGUubG9nKHJlcywnPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT4nKVxuICAgICAgLy8gICAgIGNvdXJzZXMgPSByZXNcbiAgICAgIC8vICAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgLy8gICAgICAgdGFiUmVzdWx0cyA9IHRoaXMuc3BsaXRDYnBUYWJzRGF0YShjb3Vyc2VzLCBzdHJpcClcbiAgICAgIC8vICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgLy8gICAgICAgICBzdHJpcCxcbiAgICAgIC8vICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb3Vyc2VzLCBzdHJpcCksXG4gICAgICAvLyAgICAgICAgICdkb25lJyxcbiAgICAgIC8vICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgLy8gICAgICAgICAnJyxcbiAgICAgIC8vICAgICAgICAgdGFiUmVzdWx0c1xuICAgICAgLy8gICAgICAgKVxuICAgICAgLy8gICAgIH0gZWxzZSB7XG4gICAgICAvLyAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgIC8vICAgICAgICAgc3RyaXAsXG4gICAgICAvLyAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY291cnNlcywgc3RyaXApLFxuICAgICAgLy8gICAgICAgICAnZG9uZScsXG4gICAgICAvLyAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgIC8vICAgICAgICAgJ3ZpZXdNb3JlVXJsJyxcbiAgICAgIC8vICAgICAgIClcbiAgICAgIC8vICAgICB9XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfZXJyOiBhbnkpID0+IHtcblxuICAgICAgLy8gfSlcblxuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmVucm9sbEludGVydmFsKTtcbiAgICB9XG4gIH1cbiAgc3BsaXRDYnBUYWJzRGF0YShjb250ZW50TmV3OiBOc0NvbnRlbnQuSUNvbnRlbnRbXSwgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQpIHtcbiAgICBjb25zdCB0YWJSZXN1bHRzOiBhbnlbXSA9IFtdO1xuICAgIGNvbnN0IHNwbGl0RGF0YSA9IHRoaXMuZ2V0VGFic0xpc3QoXG4gICAgICBjb250ZW50TmV3LFxuICAgICAgc3RyaXAsXG4gICAgKTtcbiAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpcC50YWJzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChzdHJpcC50YWJzW2ldKSB7XG4gICAgICAgICAgdGFiUmVzdWx0cy5wdXNoKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi5zdHJpcC50YWJzW2ldLFxuICAgICAgICAgICAgICBmZXRjaFRhYlN0YXR1czogJ2RvbmUnLFxuICAgICAgICAgICAgICAuLi4oc3BsaXREYXRhLmZpbmQoaXRtSW5uZXIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnNbaV0gJiYgaXRtSW5uZXIudmFsdWUgPT09IHN0cmlwLnRhYnNbaV0udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpdG1Jbm5lcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhYlJlc3VsdHM7XG4gIH1cblxuICBnZXRUYWJzTGlzdChhcnJheTogTnNDb250ZW50LklDb250ZW50W10sXG4gICAgICAgICAgICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0KSB7XG4gICAgbGV0IGFsbDogYW55W10gPSBbXTtcbiAgICBsZXQgdXBjb21pbmc6IGFueVtdID0gW107XG4gICAgbGV0IG92ZXJkdWU6IGFueVtdID0gW107XG4gICAgYXJyYXkuZm9yRWFjaCgoZTogYW55KSA9PiB7XG4gICAgICBhbGwucHVzaChlKTtcbiAgICAgIGlmIChlLnBsYW5EdXJhdGlvbiA9PT0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuT1ZFUkRVRSkge1xuICAgICAgICBvdmVyZHVlLnB1c2goZSk7XG4gICAgICB9IGVsc2UgaWYgKGUucGxhbkR1cmF0aW9uID09PSBOc0NhcmRDb250ZW50LkFDQlBDb25zdC5VUENPTUlORykge1xuICAgICAgICB1cGNvbWluZy5wdXNoKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGFsbENvbXBsZXRlZCA9IGFsbC5maWx0ZXIoKGFsbERhdGE6IGFueSkgPT4gYWxsRGF0YS5jb250ZW50U3RhdHVzID09PSAyKTtcbiAgICBsZXQgYWxsSW5Db21wbGV0ZWQgPSBhbGwuZmlsdGVyKChhbGxEYXRhOiBhbnkpID0+IGFsbERhdGEuY29udGVudFN0YXR1cyA8IDIpO1xuXG4gICAgbGV0IGFsbENvbXBsZXRlZE92ZXJEdWUgPSBhbGxDb21wbGV0ZWQuZmlsdGVyKChhbGxEYXRhOiBhbnkpID0+IGFsbERhdGEucGxhbkR1cmF0aW9uID09PSBOc0NhcmRDb250ZW50LkFDQlBDb25zdC5PVkVSRFVFKTtcbiAgICBjb25zdCBhbGxDb21wbGV0ZWRBbGwgPSBhbGxDb21wbGV0ZWQuZmlsdGVyKChhbGxEYXRhOiBhbnkpID0+ICBhbGxEYXRhLnBsYW5EdXJhdGlvbiAhPT0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuT1ZFUkRVRSk7XG5cbiAgICBhbGxDb21wbGV0ZWRPdmVyRHVlID0gYWxsQ29tcGxldGVkT3ZlckR1ZS5zb3J0KChhOiBhbnksIGI6IGFueSk6IGFueSA9PiB7XG4gICAgICBpZiAoYS5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUgJiYgYi5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUpIHtcbiAgICAgICAgY29uc3QgZmlyc3REYXRlOiBhbnkgPSBuZXcgRGF0ZShhLmVuZERhdGUpO1xuICAgICAgICBjb25zdCBzZWNvbmREYXRlOiBhbnkgPSBuZXcgRGF0ZShiLmVuZERhdGUpO1xuICAgICAgICByZXR1cm4gIGZpcnN0RGF0ZSA+IHNlY29uZERhdGUgID8gLTEgOiAxO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWxsSW5Db21wbGV0ZWQgPSBhbGxJbkNvbXBsZXRlZC5zb3J0KChhOiBhbnksIGI6IGFueSk6IGFueSA9PiB7XG4gICAgICBpZiAoYS5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUgJiYgYi5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUpIHtcbiAgICAgICAgY29uc3QgZmlyc3REYXRlOiBhbnkgPSBuZXcgRGF0ZShhLmVuZERhdGUpO1xuICAgICAgICBjb25zdCBzZWNvbmREYXRlOiBhbnkgPSBuZXcgRGF0ZShiLmVuZERhdGUpO1xuICAgICAgICByZXR1cm4gIGZpcnN0RGF0ZSA+IHNlY29uZERhdGUgID8gLTEgOiAxO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWxsID0gWy4uLmFsbEluQ29tcGxldGVkLCAuLi5hbGxDb21wbGV0ZWRBbGwsIC4uLmFsbENvbXBsZXRlZE92ZXJEdWVdO1xuXG4gICAgb3ZlcmR1ZSA9IG92ZXJkdWUuZmlsdGVyKChkYXRhOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgcmV0dXJuIGRhdGEuY29udGVudFN0YXR1cyA8IDI7XG4gICAgfSk7XG5cbiAgICBvdmVyZHVlID0gb3ZlcmR1ZS5zb3J0KChhOiBhbnksIGI6IGFueSk6IGFueSA9PiB7XG4gICAgICAgIGNvbnN0IGZpcnN0RGF0ZTogYW55ID0gbmV3IERhdGUoYS5lbmREYXRlKTtcbiAgICAgICAgY29uc3Qgc2Vjb25kRGF0ZTogYW55ID0gbmV3IERhdGUoYi5lbmREYXRlKTtcbiAgICAgICAgcmV0dXJuICBmaXJzdERhdGUgPiBzZWNvbmREYXRlICA/IC0xIDogMTtcbiAgICB9KTtcblxuICAgIHVwY29taW5nID0gdXBjb21pbmcuZmlsdGVyKChkYXRhOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgcmV0dXJuIGRhdGEuY29udGVudFN0YXR1cyA8IDI7XG4gICAgfSk7XG4gICAgLy8gdGhpcy5nZXRTZWxlY3RlZEluZGV4KDEpXG4gICAgcmV0dXJuIFtcbiAgICB7IHZhbHVlOiAnYWxsJywgd2lkZ2V0czogdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhhbGwsIHN0cmlwKSB9LFxuICAgIHsgdmFsdWU6ICd1cGNvbWluZycsIHdpZGdldHM6IHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHModXBjb21pbmcsIHN0cmlwKSB9LFxuICAgIHsgdmFsdWU6ICdvdmVyZHVlJywgd2lkZ2V0czogdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhvdmVyZHVlLCBzdHJpcCkgfV07XG4gIH1cblxuICBnZXRTZWxlY3RlZEluZGV4KHN0cmlwc1Jlc3VsdERhdGFNYXA6IGFueSwga2V5OiBhbnkpOiBudW1iZXIge1xuICAgIGxldCByZXR1cm5WYWx1ZSA9IDA7XG4gICAgaWYgKGtleSA9PT0gJ2NicFBsYW4nKSB7XG4gICAgICBpZiAoc3RyaXBzUmVzdWx0RGF0YU1hcC50YWJzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBkYXRhID0gc3RyaXBzUmVzdWx0RGF0YU1hcC50YWJzLmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZS52YWx1ZSA9PT0gJ3VwY29taW5nJyk7XG4gICAgICAgIHJldHVyblZhbHVlID0gZGF0YVswXS53aWRnZXRzICYmIGRhdGFbMF0ud2lkZ2V0cy5sZW5ndGggPiAwID8gMSA6IDA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgfVxuXG4gIHRyYW5zbGF0ZUxhYmVscyhsYWJlbDogc3RyaW5nLCB0eXBlOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5sYW5ndHJhbnNsYXRpb25zLnRyYW5zbGF0ZUxhYmVsKGxhYmVsLCB0eXBlLCAnJyk7XG4gIH1cblxuICBpZGVudGlmeShpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpIHtcbiAgICBpZiAoaW5kZXggPj0gMCkgeyB9XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cbiAgdHJhY2tlcihpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpIHtcbiAgICBpZiAoaW5kZXggPj0gMCkgeyB9XG4gICAgcmV0dXJuIF8uZ2V0KGl0ZW0sICd3aWRnZXREYXRhLmNvbnRlbnQuaWRlbnRpZmllcicpXG4gIH1cblxuICBhc3luYyBmZXRjaEFsbFRvcENvbnRlbnQoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBpZiAoc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LnRvcENvbnRlbnQgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC50b3BDb250ZW50KS5sZW5ndGgpIHtcbiAgICAgIGxldCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgICAgaWYgKHN0cmlwLnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC50b3BDb250ZW50ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QudG9wQ29udGVudC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QudG9wQ29udGVudC5yZXF1ZXN0LmZpbHRlcnMpIHtcbiAgICAgICAgb3JpZ2luYWxGaWx0ZXJzID0gc3RyaXAucmVxdWVzdC50b3BDb250ZW50LnJlcXVlc3QuZmlsdGVycztcbiAgICAgICAgc3RyaXAucmVxdWVzdC50b3BDb250ZW50LnJlcXVlc3QuZmlsdGVycyA9IHRoaXMucG9zdE1ldGhvZEZpbHRlcnMoc3RyaXAucmVxdWVzdC50b3BDb250ZW50LnJlcXVlc3QuZmlsdGVycyk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucG9zdFJlcXVlc3RNZXRob2Qoc3RyaXAsIHN0cmlwLnJlcXVlc3QudG9wQ29udGVudCwgc3RyaXAucmVxdWVzdC5hcGlVcmwsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlciAtIHJlc3BvbnNlLCAnLCByZXNwb25zZSlcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdHMpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbGluZyAgYWZ0ZXItLSAnKVxuICAgICAgICAgIGlmIChyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50KSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuY29udGVudCwgc3RyaXApLFxuICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgcmVzcG9uc2Uudmlld01vcmVVcmwsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBmZXRjaEFsbEZlYXR1cmVkQ29udGVudChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudCkubGVuZ3RoKSB7XG4gICAgICBsZXQgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQucmVxdWVzdC5maWx0ZXJzKSB7XG4gICAgICAgIG9yaWdpbmFsRmlsdGVycyA9IHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQucmVxdWVzdC5maWx0ZXJzO1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50LnJlcXVlc3QuZmlsdGVycyA9IHRoaXMuY2hlY2tGb3JEYXRlRmlsdGVycyhzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50LnJlcXVlc3QuZmlsdGVycyk7XG4gICAgICAgIHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQucmVxdWVzdC5maWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRnJvbUFycmF5KFxuICAgICAgICAgIHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQucmVxdWVzdC5maWx0ZXJzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnBvc3RSZXF1ZXN0TWV0aG9kKHN0cmlwLCBzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50LnJlcXVlc3QsIHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQucGF0aCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyIC0gcmVzcG9uc2UsICcsIHJlc3BvbnNlKVxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cykge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlci0tICcpXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmNvbnRlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50LCBzdHJpcCksXG4gICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgICAgLy8gY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHBvc3RSZXF1ZXN0TWV0aG9kKHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICAgIHJlcXVlc3Q6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXRbJ3JlcXVlc3QnXSxcbiAgICBhcGlVcmw6IHN0cmluZyxcbiAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXM6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChyZXF1ZXN0ICYmIHJlcXVlc3QpIHtcbiAgICAgICAgdGhpcy5jb250ZW50U3ZjLnBvc3RBcGlNZXRob2QoYXBpVXJsLHJlcXVlc3QpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgICAgY29uc3Qgc2hvd1ZpZXdNb3JlID0gQm9vbGVhbihcbiAgICAgICAgcmVzdWx0cy5yZXN1bHQuY29udGVudCAmJiByZXN1bHRzLnJlc3VsdC5jb250ZW50Lmxlbmd0aCA+IDUgJiYgc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcucG9zdENhcmRGb3JTZWFyY2gsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHZpZXdNb3JlVXJsID0gc2hvd1ZpZXdNb3JlXG4gICAgICAgID8ge1xuICAgICAgICBwYXRoOiBzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5wYXRoIHx8ICcnLFxuICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICB0YWI6ICdMZWFybicsXG4gICAgICAgIHE6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zLFxuICAgICAgICBmOlxuICAgICAgICByZXF1ZXN0ICYmXG4gICAgICAgIHJlcXVlc3Quc2VhcmNoVjYgJiZcbiAgICAgICAgcmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0ICYmXG4gICAgICAgIHJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzXG4gICAgICAgID8gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgdGhpcy50cmFuc2Zvcm1TZWFyY2hWNkZpbHRlcnNWMihcbiAgICAgICAgICAgIG9yaWdpbmFsRmlsdGVycyxcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgOiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgICA6IG51bGw7XG4gICAgICAgIHJlc29sdmUoeyByZXN1bHRzLCB2aWV3TW9yZVVybCB9KTtcbiAgICAgICAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcG9zdE1ldGhvZEZpbHRlcnMoZmlsdGVyczogYW55KXtcbiAgICBpZiAoZmlsdGVycy5vcmdhbmlzYXRpb24gJiZcbiAgICAgIGZpbHRlcnMub3JnYW5pc2F0aW9uLmluZGV4T2YoJzxvcmdJRD4nKSA+PSAwXG4gICAgKSB7XG4gICAgICBmaWx0ZXJzLm9yZ2FuaXNhdGlvbiA9IHRoaXMucHJvdmlkZXJJZFxuICAgIH1cbiAgICByZXR1cm4gZmlsdGVyc1xuICB9XG59XG4iXX0=
2063
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1zdHJpcC13aXRoLXRhYnMtbGliLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWNiL2NvbnN1bXB0aW9uLyIsInNvdXJjZXMiOlsibGliL19jb21tb24vY29udGVudC1zdHJpcC13aXRoLXRhYnMtbGliL2NvbnRlbnQtc3RyaXAtd2l0aC10YWJzLWxpYi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBYSxXQUFXLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0csT0FBTyxFQUFvQixtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQUdoRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUU5RSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNwRyxPQUFPLEVBRUwsYUFBYSxFQUNiLFlBQVksRUFDWixxQkFBcUIsRUFDckIsY0FBYyxFQUNkLFFBQVEsR0FDVCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7O0FBR3hFLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFBO0FBRTNCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQUV2RCxvQ0FvQ0M7OztJQW5DQyxvQ0FBWTs7SUFDWiw2Q0FBc0I7O0lBQ3RCLHFDQUFjOztJQUNkLDBDQUFtQjs7SUFDbkIsaURBQTBCOztJQUMxQix3Q0FBc0Q7O0lBQ3RELDJDQUFtQjs7SUFDbkIsK0NBTUU7O0lBQ0YsNkNBS0U7O0lBQ0Ys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Q2lEOztJQUNqRCwrREFBbUU7O0lBQ25FLDBEQUE4Qjs7SUFDOUIsNkRBQXlCOztJQUN6Qiw0REFBeUI7O0lBQ3pCLDJEQUF3Qjs7SUFDeEIsNERBQXlCOztJQUN6QiwwREFBbUI7O0lBQ25CLHVEQUFnQjs7SUFDaEIsNERBQXFCOztJQUNyQiw0REFBd0I7O0lBQ3hCLG1EQUF3Qzs7SUFDeEMsNERBQXlCOztJQUN6Qix1REFBa0I7O0lBQ2xCLG1FQUFvRDs7SUFDcEQsNkRBQXVCOztJQUN2QiwwREFBb0I7O0lBQ3BCLHdEQUF1Qjs7Ozs7SUFLckIsc0RBQXdDOzs7OztJQUN4QyxxREFBZ0M7Ozs7O0lBQ2hDLG9EQUE4Qjs7Ozs7SUFDOUIscURBQXdDOztJQUN4QyxzREFBaUM7Ozs7O0lBR2pDLG1EQUFrQzs7Ozs7SUFDbEMscURBQW1DOzs7OztJQUNuQyw0REFBeUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE9uRGVzdHJveSwgSG9zdEJpbmRpbmcsIEluamVjdCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5zV2lkZ2V0UmVzb2x2ZXIsIFdpZGdldEJhc2VDb21wb25lbnQgfSBmcm9tICdAc3VuYmlyZC1jYi9yZXNvbHZlci12Mic7XG5pbXBvcnQgeyBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzIH0gZnJvbSAnLi9jb250ZW50LXN0cmlwLXdpdGgtdGFicy1saWIubW9kZWwnO1xuLy8gaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xuaW1wb3J0IHsgV2lkZ2V0Q29udGVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9fc2VydmljZXMvd2lkZ2V0LWNvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBOc0NvbnRlbnQgfSBmcm9tICcuLi8uLi9fbW9kZWxzL3dpZGdldC1jb250ZW50Lm1vZGVsJztcbmltcG9ydCB7IE11bHRpbGluZ3VhbFRyYW5zbGF0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9fc2VydmljZXMvbXVsdGlsaW5ndWFsLXRyYW5zbGF0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIFRGZXRjaFN0YXR1cyxcbiAgTG9nZ2VyU2VydmljZSxcbiAgRXZlbnRTZXJ2aWNlLFxuICBDb25maWd1cmF0aW9uc1NlcnZpY2UsXG4gIFV0aWxpdHlTZXJ2aWNlLFxuICBXc0V2ZW50cyxcbn0gZnJvbSAnQHN1bmJpcmQtY2IvdXRpbHMtdjInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBXaWRnZXRVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uL19zZXJ2aWNlcy93aWRnZXQtdXNlci5zZXJ2aWNlJztcbi8vIGltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnc3JjL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCdcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBNYXRUYWJDaGFuZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJztcbmltcG9ydCB7IE5zQ2FyZENvbnRlbnQgfSBmcm9tICcuLi8uLi9fbW9kZWxzL2NhcmQtY29udGVudC12Mi5tb2RlbCc7XG5pbXBvcnQgeyBJVG9kYXlFdmVudHMgfSBmcm9tICcuLi8uLi9fbW9kZWxzL2V2ZW50JztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuaW50ZXJmYWNlIElTdHJpcFVuaXRDb250ZW50RGF0YSB7XG4gIGtleTogc3RyaW5nO1xuICBjYW5IaWRlU3RyaXA6IGJvb2xlYW47XG4gIG1vZGU/OiBzdHJpbmc7XG4gIHNob3dTdHJpcDogYm9vbGVhbjtcbiAgZGlzYWJsZVRyYW5zbGF0ZTogYm9vbGVhbjtcbiAgd2lkZ2V0cz86IE5zV2lkZ2V0UmVzb2x2ZXIuSVJlbmRlckNvbmZpZ1dpdGhBbnlEYXRhW107XG4gIHN0cmlwVGl0bGU6IHN0cmluZztcbiAgc3RyaXBUaXRsZUxpbms/OiB7XG4gICAgbGluazogIHtcbiAgICAgIHF1ZXJ5UGFyYW1zOiBzdHJpbmdcbiAgICB9LFxuICAgIGljb246IHN0cmluZyxcbiAgICBxdWVyeVBhcmFtczogc3RyaW5nXG4gIH07XG4gIHNsaWRlckNvbmZpZz86IHtcbiAgICBzaG93TmF2czogYm9vbGVhbixcbiAgICBzaG93RG90czogYm9vbGVhbixcbiAgICBtYXhXaWRnZXRzPzogbnVtYmVyXG4gICAgY2VyaWZpY2F0ZUNhcmRNYXJnaW4/OiBib29sZWFuXG4gIH07XG4gIHN0cmlwQ29uZmlnOiBhbnk7XG4gIHRhYnM/OiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBUYWJbXSB8IHVuZGVmaW5lZDtcbiAgc3RyaXBOYW1lPzogc3RyaW5nO1xuICBzdHJpcExvZ28/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBzdHJpcEluZm8/OiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklTdHJpcEluZm87XG4gIG5vRGF0YVdpZGdldD86IE5zV2lkZ2V0UmVzb2x2ZXIuSVJlbmRlckNvbmZpZ1dpdGhBbnlEYXRhO1xuICBlcnJvcldpZGdldD86IE5zV2lkZ2V0UmVzb2x2ZXIuSVJlbmRlckNvbmZpZ1dpdGhBbnlEYXRhO1xuICBzaG93T25Ob0RhdGE6IGJvb2xlYW47XG4gIHNob3dPbkxvYWRlcjogYm9vbGVhbjtcbiAgc2hvd09uRXJyb3I6IGJvb2xlYW47XG4gIGxvYWRlcldpZGdldHM/OiBhbnk7XG4gIHN0cmlwQmFja2dyb3VuZD86IHN0cmluZztcbiAgc2Vjb25kYXJ5SGVhZGluZz86IGFueTtcbiAgdmlld01vcmVVcmw6IGFueTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2ItdWljLWNvbnRlbnQtc3RyaXAtd2l0aC10YWJzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbnRlbnQtc3RyaXAtd2l0aC10YWJzLWxpYi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbnRlbnQtc3RyaXAtd2l0aC10YWJzLWxpYi5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDb250ZW50U3RyaXBXaXRoVGFic0xpYkNvbXBvbmVudCBleHRlbmRzIFdpZGdldEJhc2VDb21wb25lbnRcbiAgaW1wbGVtZW50c1xuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgTnNXaWRnZXRSZXNvbHZlci5JV2lkZ2V0RGF0YTxOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBNdWx0aXBsZT4ge1xuICBASW5wdXQoKSB3aWRnZXREYXRhITogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwTXVsdGlwbGU7XG4gIEBPdXRwdXQoKSBlbXB0eVJlc3BvbnNlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQElucHV0KCkgcHJvdmlkZXJJZCA6IGFueSA9ICcnXG4gIEBIb3N0QmluZGluZygnaWQnKVxuICBwdWJsaWMgaWQgPSBgd3Mtc3RyaXAtbWlsdGlwbGVfJHtNYXRoLnJhbmRvbSgpfWA7XG4gIHN0cmlwc1Jlc3VsdERhdGFNYXA6IHsgW2tleTogc3RyaW5nXTogSVN0cmlwVW5pdENvbnRlbnREYXRhIH0gPSB7fTtcbiAgc3RyaXBzS2V5T3JkZXI6IHN0cmluZ1tdID0gW107XG4gIHNob3dBY2NvcmRpb25EYXRhID0gdHJ1ZTtcbiAgc2hvd1BhcmVudExvYWRlciA9IGZhbHNlO1xuICBzaG93UGFyZW50RXJyb3IgPSBmYWxzZTtcbiAgc2hvd1BhcmVudE5vRGF0YSA9IGZhbHNlO1xuICBlcnJvckRhdGFDb3VudCA9IDA7XG4gIG5vRGF0YUNvdW50ID0gMDtcbiAgc3VjY2Vzc0RhdGFDb3VudCA9IDA7XG4gIGNvbnRlbnRBdmFpbGFibGUgPSB0cnVlO1xuICBiYXNlVXJsID0gdGhpcy5jb25maWdTdmMuc2l0ZVBhdGggfHwgJyc7XG4gIHZlaWZpZWRLYXJtYXlvZ2kgPSBmYWxzZTtcbiAgZW52aXJvbm1lbnQhOiBhbnk7XG4gIGNoYW5nZUV2ZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgZGVmYXVsdE1heFdpZGdldHMgPSAxMjtcbiAgZW5yb2xsSW50ZXJ2YWw6IGFueTtcbiAgdG9kYXlzRXZlbnRzOiBhbnkgPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAvLyBwcml2YXRlIGNvbnRlbnRTdHJpcFN2YzogQ29udGVudFN0cmlwTmV3TXVsdGlwbGVTZXJ2aWNlLFxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgZW52aXJvbm1lbnQ6IGFueSxcbiAgICBwcml2YXRlIGNvbnRlbnRTdmM6IFdpZGdldENvbnRlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9nZ2VyU3ZjOiBMb2dnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXZlbnRTdmM6IEV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1N2YzogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxuICAgIHB1YmxpYyB1dGlsaXR5U3ZjOiBVdGlsaXR5U2VydmljZSxcbiAgICAvLyBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgLy8gcHJpdmF0ZSBzZWFyY2hTZXJ2U3ZjOiBTZWFyY2hTZXJ2U2VydmljZSxcbiAgICBwcml2YXRlIHVzZXJTdmM6IFdpZGdldFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbGFuZ3RyYW5zbGF0aW9uczogTXVsdGlsaW5ndWFsVHJhbnNsYXRpb25zU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd2Vic2l0ZUxhbmd1YWdlJykpIHtcbiAgICAgIHRoaXMudHJhbnNsYXRlLnNldERlZmF1bHRMYW5nKCdlbicpO1xuICAgICAgbGV0IGxhbmcgPSBKU09OLnN0cmluZ2lmeShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd2Vic2l0ZUxhbmd1YWdlJykpO1xuICAgICAgbGFuZyA9IGxhbmcucmVwbGFjZSgvXFxcIi9nLCAnJyk7XG4gICAgICB0aGlzLnRyYW5zbGF0ZS51c2UobGFuZyk7XG4gICAgfVxuICAgIHRoaXMuZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudFxuICAgIGNvbnNvbGUubG9nKCdwbHVnaW4nKVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gY29uc3QgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWZcbiAgICB0aGlzLmluaXREYXRhKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5jaGFuZ2VFdmVudFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5jaGFuZ2VFdmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNob3dBY2NvcmRpb24oa2V5OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy51dGlsaXR5U3ZjLmlzTW9iaWxlICYmIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldLm1vZGUgPT09ICdhY2NvcmRpb24nKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaG93QWNjb3JkaW9uRGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzZXRIaWRkZW5Gb3JTdHJpcChrZXk6IHN0cmluZykge1xuICAgIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldLnNob3dTdHJpcCA9IGZhbHNlO1xuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oYGNzdHJpcF8ke2tleX1gLCAnMScpO1xuICB9XG4gIHByaXZhdGUgZ2V0SWZTdHJpcEhpZGRlbihrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHN0b3JhZ2VJdGVtID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShgY3N0cmlwXyR7a2V5fWApO1xuICAgIHJldHVybiBCb29sZWFuKHN0b3JhZ2VJdGVtICE9PSAnMScpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0RGF0YSgpIHtcbiAgICB0aGlzLnN0cmlwc0tleU9yZGVyID0gdGhpcy53aWRnZXREYXRhICYmIHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMgJiYgdGhpcy53aWRnZXREYXRhLnN0cmlwcy5tYXAoc3RyaXAgPT4gc3RyaXAua2V5KSB8fCBbXTtcbiAgICBpZiAodGhpcy53aWRnZXREYXRhLmxvYWRlciAmJiB0aGlzLndpZGdldERhdGEuc3RyaXBzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zaG93UGFyZW50TG9hZGVyID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gRmV0Y2ggdGhlIGRhdGFcbiAgICBmb3IgKGNvbnN0IHN0cmlwIG9mIHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMpIHtcbiAgICAgIGlmICh0aGlzLmNoZWNrRm9yRW1wdHlXaWRnZXQoc3RyaXApKSB7XG4gICAgICAgIHRoaXMuZmV0Y2hTdHJpcEZyb21SZXF1ZXN0RGF0YShzdHJpcCwgZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZG9uZScsIHRydWUsIG51bGwpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBTdWJzY3JpcHRpb24gZm9yIGNoYW5nZXNcbiAgICBjb25zdCBrZXlBbmRFdmVudDogeyBrZXk6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBmcm9tOiBzdHJpbmcgfVtdID0gdGhpcy53aWRnZXREYXRhLnN0cmlwc1xuICAgICAgLm1hcChzdHJpcCA9PiAoe1xuICAgICAgICBrZXk6IHN0cmlwLmtleSxcbiAgICAgICAgdHlwZTogKHN0cmlwLnJlZnJlc2hFdmVudCAmJiBzdHJpcC5yZWZyZXNoRXZlbnQuZXZlbnRUeXBlKSB8fCAnJyxcbiAgICAgICAgZnJvbTogKHN0cmlwLnJlZnJlc2hFdmVudCAmJiBzdHJpcC5yZWZyZXNoRXZlbnQuZnJvbS50b1N0cmluZygpKSB8fCAnJyxcbiAgICAgIH0pKVxuICAgICAgLmZpbHRlcigoeyBrZXksIHR5cGUsIGZyb20gfSkgPT4ga2V5ICYmIHR5cGUgJiYgZnJvbSk7XG4gICAgY29uc3QgZXZlbnRUeXBlU2V0ID0gbmV3IFNldChrZXlBbmRFdmVudC5tYXAoZSA9PiBlLnR5cGUpKTtcbiAgICB0aGlzLmNoYW5nZUV2ZW50U3Vic2NyaXB0aW9uID0gdGhpcy5ldmVudFN2Yy5ldmVudHMkXG4gICAgICAucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnRUeXBlU2V0LmhhcyhldmVudC5ldmVudFR5cGUpKSlcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICBrZXlBbmRFdmVudFxuICAgICAgICAgIC5maWx0ZXIoZSA9PiBlLnR5cGUgPT09IGV2ZW50LmV2ZW50VHlwZSAmJiBlLmZyb20gPT09IGV2ZW50LmZyb20pXG4gICAgICAgICAgLm1hcChlID0+IGUua2V5KVxuICAgICAgICAgIC5mb3JFYWNoKGsgPT4gdGhpcy5mZXRjaFN0cmlwRnJvbUtleShrLCBmYWxzZSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGZldGNoU3RyaXBGcm9tS2V5KGtleTogc3RyaW5nLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgY29uc3Qgc3RyaXBEYXRhID0gdGhpcy53aWRnZXREYXRhLnN0cmlwcy5maW5kKHN0cmlwID0+IHN0cmlwLmtleSA9PT0ga2V5KTtcbiAgICBpZiAoc3RyaXBEYXRhKSB7XG4gICAgICB0aGlzLmZldGNoU3RyaXBGcm9tUmVxdWVzdERhdGEoc3RyaXBEYXRhLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIH1cbiAgfVxuXG4gIGlzU3RyaXBTaG93aW5nKGRhdGE6IGFueSkge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgaWYgKGRhdGEgJiYgZGF0YS5rZXkgPT09IHRoaXMuZW52aXJvbm1lbnQucHJvZ3JhbVN0cmlwS2V5ICYmICghZGF0YS50YWJzIHx8ICFkYXRhLnRhYnMubGVuZ3RoKSAmJlxuICAgICAgZGF0YS5zdHJpcFRpdGxlID09PSB0aGlzLmVudmlyb25tZW50LnByb2dyYW1TdHJpcE5hbWUgJiYgZGF0YS53aWRnZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGRhdGEud2lkZ2V0cy5mb3JFYWNoKChrZXk6IGFueSkgPT4ge1xuICAgICAgICBpZiAoa2V5ICYmIGtleS53aWRnZXREYXRhLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSB0aGlzLmVudmlyb25tZW50LnByb2dyYW1TdHJpcFByaW1hcnlDYXRlZ29yeSkge1xuICAgICAgICAgIGNvdW50ID0gY291bnQgKyAxO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChjb3VudCA+IDApIHtcbiAgICAgICAgZGF0YS5zaG93U3RyaXAgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5zaG93U3RyaXAgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coJ2RhdGEua2V5JywgZGF0YSwgZGF0YS5rZXksIGRhdGEud2lkZ2V0cyk7XG4gICAgcmV0dXJuIGRhdGEuc2hvd1N0cmlwO1xuICB9XG5cbiAgZ2V0IGlzTW9iaWxlKCkge1xuICAgIHJldHVybiB0aGlzLnV0aWxpdHlTdmMuaXNNb2JpbGUgfHwgZmFsc2U7XG4gIH1cblxuICBnZXRkYXRhKGRhdGE6IElTdHJpcFVuaXRDb250ZW50RGF0YSkge1xuICAgIGlmIChkYXRhLnN0cmlwSW5mbykge1xuICAgICAgcmV0dXJuIGRhdGEuc3RyaXBJbmZvLndpZGdldDtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuXG4gIH1cbiAgY2hlY2tDb25kaXRpb24od0RhdGE6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcE11bHRpcGxlLCBkYXRhOiBJU3RyaXBVbml0Q29udGVudERhdGEpIHtcbiAgICBpZiAod0RhdGEuc3RyaXBzWzBdLnN0cmlwQ29uZmlnICYmIHdEYXRhLnN0cmlwc1swXS5zdHJpcENvbmZpZy5oaWRlU2hvd0FsbCkge1xuICAgICAgcmV0dXJuICF3RGF0YS5zdHJpcHNbMF0uc3RyaXBDb25maWcuaGlkZVNob3dBbGw7XG4gICAgfVxuICAgIHJldHVybiB3RGF0YS5zdHJpcHNbMF0udmlld01vcmVVcmwgJiYgZGF0YS53aWRnZXRzICYmIGRhdGEud2lkZ2V0cy5sZW5ndGggPj0gNDtcbiAgfVxuICBjaGVja1Zpc2libGUoZGF0YTogSVN0cmlwVW5pdENvbnRlbnREYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEuc3RyaXBJbmZvICYmIGRhdGEuc3RyaXBJbmZvLnZpc2liaWxpdHlNb2RlID09PSAndmlzaWJsZSc7XG4gIH1cblxuICBnZXRDb250aW5ldUxlYXJuaW5nTGVudGgoZGF0YTogSVN0cmlwVW5pdENvbnRlbnREYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEud2lkZ2V0cyA/IGRhdGEud2lkZ2V0cy5sZW5ndGggOiAwO1xuICB9XG4gIGdldExlbmd0aChkYXRhOiBJU3RyaXBVbml0Q29udGVudERhdGEpIHtcbiAgICBpZiAoIWRhdGEudGFicyB8fCAhZGF0YS50YWJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGRhdGEud2lkZ2V0cyA/IGRhdGEud2lkZ2V0cy5sZW5ndGggOiAwO1xuICAgIH0ge1xuICAgICAgLy8gaWYgdGFicyBhcmUgdGhlcmUgY2hlY2sgaWYgZWFjaCB0YWIgaGFzIHdpZGdldHMgYW5kIGdldCB0aGUgdGFiIHdpdGggbWF4IHdpZGdldHNcbiAgICAgIGNvbnN0IHRhYldpdGhNYXhXaWRnZXRzID0gZGF0YS50YWJzLnJlZHVjZShcbiAgICAgICAgKHByZXYsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBpZiAoIXByZXYud2lkZ2V0cyAmJiAhY3VycmVudC53aWRnZXRzKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHByZXYud2lkZ2V0cyAmJiBjdXJyZW50LndpZGdldHMpIHtcbiAgICAgICAgICAgIHJldHVybiAocHJldi53aWRnZXRzLmxlbmd0aCA+IGN1cnJlbnQud2lkZ2V0cy5sZW5ndGgpID8gcHJldiA6IGN1cnJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjdXJyZW50LndpZGdldHMgJiYgIXByZXYud2lkZ2V0cykge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghY3VycmVudC53aWRnZXRzICYmIHByZXYud2lkZ2V0cykge1xuICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIC8vIHJldHVybiAocHJldi53aWRnZXRzICYmIGN1cnJlbnQud2lkZ2V0cyAmJiAocHJldi53aWRnZXRzLmxlbmd0aCA+IGN1cnJlbnQud2lkZ2V0cy5sZW5ndGgpICkgPyBwcmV2IDogY3VycmVudFxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogYWxpZ25cbiAgICAgICAgfSwgZGF0YS50YWJzWzBdKTtcbiAgICAgIC8vIGlmIHRhYnMgaGFzIGF0bGVhc3QgMSB3aWRnZXRzIHRoZW4gc3RyaXAgd2lsbCBzaG93IG9yIGVsc2Ugbm90XG4gICAgICByZXR1cm4gdGFiV2l0aE1heFdpZGdldHMud2lkZ2V0cyA/IHRhYldpdGhNYXhXaWRnZXRzLndpZGdldHMubGVuZ3RoIDogMDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEZpbHRlcnNGcm9tQXJyYXkodjZmaWx0ZXJzOiBhbnkpIHtcbiAgICBjb25zdCBmaWx0ZXJzOiBhbnkgPSB7fTtcbiAgICBpZiAodjZmaWx0ZXJzLmNvbnN0cnVjdG9yID09PSBBcnJheSkge1xuICAgICAgdjZmaWx0ZXJzLmZvckVhY2goKChmOiBhbnkpID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXMoZikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGZpbHRlcnNba2V5XSA9IGZba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gZmlsdGVycztcbiAgICB9XG4gICAgcmV0dXJuIHY2ZmlsdGVycztcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtU2VhcmNoVjZGaWx0ZXJzVjIodjZmaWx0ZXJzOiBhbnkpIHtcbiAgICBjb25zdCBmaWx0ZXJzOiBhbnkgPSB7fTtcbiAgICBpZiAodjZmaWx0ZXJzLmNvbnN0cnVjdG9yID09PSBBcnJheSkge1xuICAgICAgdjZmaWx0ZXJzLmZvckVhY2goKChmOiBhbnkpID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXMoZikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGZpbHRlcnNba2V5XSA9IGZba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gZmlsdGVycztcbiAgICB9XG4gICAgcmV0dXJuIHY2ZmlsdGVycztcbiAgfVxuXG4gIGNoZWNrRm9yRGF0ZUZpbHRlcnMoZmlsdGVyczogYW55KSB7XG4gICAgbGV0IHVzZXJEYXRhOiBhbnk7XG4gICAgaWYgKHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlKSB7XG4gICAgICB1c2VyRGF0YSA9IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJzICYmIGZpbHRlcnMuaGFzT3duUHJvcGVydHkoJ2JhdGNoZXMuZW5kRGF0ZScpKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGZpbHRlcnNbJ2JhdGNoZXMuZW5kRGF0ZSddWyc+PSddID0gZXZhbChmaWx0ZXJzWydiYXRjaGVzLmVuZERhdGUnXVsnPj0nXSlcbiAgICB9IGVsc2UgaWYgKGZpbHRlcnMgJiYgZmlsdGVycy5oYXNPd25Qcm9wZXJ0eSgnYmF0Y2hlcy5lbnJvbGxtZW50RW5kRGF0ZScpKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGZpbHRlcnNbJ2JhdGNoZXMuZW5yb2xsbWVudEVuZERhdGUnXVsnPj0nXSA9IGV2YWwoZmlsdGVyc1snYmF0Y2hlcy5lbnJvbGxtZW50RW5kRGF0ZSddWyc+PSddKVxuICAgIH0gZWxzZSBpZiAoZmlsdGVycy5vcmdhbmlzYXRpb24gJiZcbiAgICAgIGZpbHRlcnMub3JnYW5pc2F0aW9uLmluZGV4T2YoJzxvcmdJRD4nKSA+PSAwXG4gICAgKSB7XG4gICAgICBmaWx0ZXJzLm9yZ2FuaXNhdGlvbiA9IHVzZXJEYXRhICYmIHVzZXJEYXRhLnJvb3RPcmdJZDtcblxuICAgICAgaWYgKGZpbHRlcnMgJiYgZmlsdGVycy5oYXNPd25Qcm9wZXJ0eSgnZGVzaWduYXRpb24nKSkge1xuICAgICAgICBmaWx0ZXJzLmRlc2lnbmF0aW9uID0gdXNlckRhdGEucHJvZmVzc2lvbmFsRGV0YWlscy5sZW5ndGggPiAwID9cbiAgICAgICAgICB1c2VyRGF0YS5wcm9mZXNzaW9uYWxEZXRhaWxzWzBdLmRlc2lnbmF0aW9uIDogJyc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBmZXRjaFN0cmlwRnJvbVJlcXVlc3REYXRhKFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUsXG4gICkge1xuICAgIC8vIHNldHRpbmcgaW5pdGlhbCB2YWx1ZXNcbiAgICBzdHJpcC5sb2FkZXJXaWRnZXRzID0gdGhpcy50cmFuc2Zvcm1Ta2VsZXRvblRvV2lkZ2V0cyhzdHJpcCk7XG4gICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZmV0Y2hpbmcnLCBmYWxzZSwgbnVsbCk7XG4gICAgdGhpcy5mZXRjaEZyb21FbnJvbGxtZW50TGlzdChzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoRnJvbVNlYXJjaFY2KHN0cmlwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIHRoaXMuZmV0Y2hGcm9tVHJlbmRpbmdDb250ZW50KHN0cmlwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIHRoaXMuZmV0Y2hBbGxDYnBQbGFucyhzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoQWxsVG9wQ29udGVudChzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoQWxsRmVhdHVyZWRDb250ZW50KHN0cmlwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIC8vIHRoaXMuZW5yb2xsSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgLy8gICB0aGlzLmZldGNoQWxsQ2JwUGxhbnMoc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cylcbiAgICAvLyB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMClcbiAgfVxuXG4gIGZldGNoRnJvbUVucm9sbG1lbnRMaXN0KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgaWYgKHN0cmlwLnJlcXVlc3QgJiYgc3RyaXAucmVxdWVzdC5lbnJvbGxtZW50TGlzdCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LmVucm9sbG1lbnRMaXN0KS5sZW5ndGgpIHtcbiAgICAgIGxldCB1c2VySWQgPSAnJztcbiAgICAgIGxldCBjb250ZW50OiBOc0NvbnRlbnQuSUNvbnRlbnRbXTtcbiAgICAgIGxldCBjb250ZW50TmV3OiBOc0NvbnRlbnQuSUNvbnRlbnRbXTtcbiAgICAgIGxldCB0YWJSZXN1bHRzOiBhbnlbXSA9IFtdO1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBfLmdldChzdHJpcC5yZXF1ZXN0LmVucm9sbG1lbnRMaXN0LCAncXVlcnlQYXJhbXMnKTtcbiAgICAgIGlmICh0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZSkge1xuICAgICAgICB1c2VySWQgPSB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS51c2VySWQ7XG4gICAgICB9XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGRlcHJlY2F0aW9uXG4gICAgICB0aGlzLnVzZXJTdmMuZmV0Y2hVc2VyQmF0Y2hMaXN0KHVzZXJJZCwgcXVlcnlQYXJhbXMpLnN1YnNjcmliZShcbiAgICAgICAgKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgY291cnNlcyA9IHJlc3VsdCAmJiByZXN1bHQuY291cnNlcztcbiAgICAgICAgICBjb25zdCBzaG93Vmlld01vcmUgPSBCb29sZWFuKFxuICAgICAgICAgICAgY291cnNlcy5sZW5ndGggPiA1ICYmIHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLnBvc3RDYXJkRm9yU2VhcmNoLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qgdmlld01vcmVVcmwgPSBzaG93Vmlld01vcmVcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBwYXRoOiAoc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucGF0aCkgfHwgJycsXG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgcTogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICAgICAgZjpcbiAgICAgICAgICAgICAgICAgIHN0cmlwLnJlcXVlc3QgJiYgc3RyaXAucmVxdWVzdC5zZWFyY2hWNiAmJiBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmZpbHRlcnNcbiAgICAgICAgICAgICAgICAgICAgPyBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLnNlYXJjaFNlcnZTdmMudHJhbnNmb3JtU2VhcmNoVjZGaWx0ZXJzKFxuICAgICAgICAgICAgICAgICAgICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYuZmlsdGVyc1xuICAgICAgICAgICAgICAgICAgICAgIC8vICksXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICBpZiAoY291cnNlcyAmJiBjb3Vyc2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29udGVudCA9IGNvdXJzZXMubWFwKChjOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY29udGVudFRlbXA6IE5zQ29udGVudC5JQ29udGVudCA9IGMuY29udGVudDtcbiAgICAgICAgICAgICAgY29udGVudFRlbXAuY29tcGxldGlvblBlcmNlbnRhZ2UgPSBjLmNvbXBsZXRpb25QZXJjZW50YWdlIHx8IGMucHJvZ3Jlc3MgfHwgMDtcbiAgICAgICAgICAgICAgY29udGVudFRlbXAuY29tcGxldGlvblN0YXR1cyA9IGMuY29tcGxldGlvblN0YXR1cyB8fCBjLnN0YXR1cyB8fCAwO1xuICAgICAgICAgICAgICBjb250ZW50VGVtcC5lbnJvbGxlZERhdGUgPSBjLmVucm9sbGVkRGF0ZSB8fCAnJztcbiAgICAgICAgICAgICAgY29udGVudFRlbXAubGFzdENvbnRlbnRBY2Nlc3NUaW1lID0gYy5sYXN0Q29udGVudEFjY2Vzc1RpbWUgfHwgJyc7XG4gICAgICAgICAgICAgIGNvbnRlbnRUZW1wLmxhc3RSZWFkQ29udGVudFN0YXR1cyA9IGMubGFzdFJlYWRDb250ZW50U3RhdHVzIHx8ICcnO1xuICAgICAgICAgICAgICBjb250ZW50VGVtcC5sYXN0UmVhZENvbnRlbnRJZCA9IGMubGFzdFJlYWRDb250ZW50SWQgfHwgJyc7XG4gICAgICAgICAgICAgIGNvbnRlbnRUZW1wLmxyY1Byb2dyZXNzRGV0YWlscyA9IGMubHJjUHJvZ3Jlc3NEZXRhaWxzIHx8ICcnO1xuICAgICAgICAgICAgICBjb250ZW50VGVtcC5pc3N1ZWRDZXJ0aWZpY2F0ZXMgPSBjLmlzc3VlZENlcnRpZmljYXRlcyB8fCBbXTtcbiAgICAgICAgICAgICAgY29udGVudFRlbXAuYmF0Y2hJZCA9IGMuYmF0Y2hJZCB8fCAnJztcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRUZW1wO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFRvIGZpbHRlciBjb250ZW50IHdpdGggY29tcGxldGlvblBlcmNlbnRhZ2UgPiAwLFxuICAgICAgICAgIC8vIHNvIHRoYXQgb25seSB0aG9zZSBjb250ZW50IHdpbGwgc2hvdyBpbiBob21lIHBhZ2VcbiAgICAgICAgICAvLyBjb250aW51ZSBsZWFyaW5nIHN0cmlwXG4gICAgICAgICAgLy8gaWYgKGNvbnRlbnQgJiYgY29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgICAvLyAgIGNvbnRlbnROZXcgPSBjb250ZW50LmZpbHRlcigoYzogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgIC8qKiBjb21tZW50ZWQgYXMgYm90aCBhcmUgMCBhZnRlciBlbnJvbGxsICovXG4gICAgICAgICAgLy8gICAgIGlmIChjLmNvbXBsZXRpb25QZXJjZW50YWdlICYmIGMuY29tcGxldGlvblBlcmNlbnRhZ2UgPiAwKSB7XG4gICAgICAgICAgLy8gICAgICAgcmV0dXJuIGNcbiAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgIC8vICAgfSlcbiAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAvLyBUbyBzb3J0IGluIGRlc2NlbmRpbmcgb3JkZXIgb2YgdGhlIGVucm9sbGVkIGRhdGVcbiAgICAgICAgICBjb250ZW50TmV3ID0gKGNvbnRlbnQgfHwgW10pLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRlQTogYW55ID0gbmV3IERhdGUoYS5sYXN0Q29udGVudEFjY2Vzc1RpbWUgfHwgMCk7XG4gICAgICAgICAgICBjb25zdCBkYXRlQjogYW55ID0gbmV3IERhdGUoYi5sYXN0Q29udGVudEFjY2Vzc1RpbWUgfHwgMCk7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZUIgLSBkYXRlQTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0YWJSZXN1bHRzID0gdGhpcy5zcGxpdEVucm9sbG1lbnRUYWJzRGF0YShjb250ZW50TmV3LCBzdHJpcCk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY29udGVudE5ldywgc3RyaXApLFxuICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgdmlld01vcmVVcmwsXG4gICAgICAgICAgICAgIHRhYlJlc3VsdHNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb250ZW50TmV3LCBzdHJpcCksXG4gICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICB2aWV3TW9yZVVybCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHNwbGl0RW5yb2xsbWVudFRhYnNEYXRhKGNvbnRlbnROZXc6IE5zQ29udGVudC5JQ29udGVudFtdLCBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCkge1xuICAgIGNvbnN0IHRhYlJlc3VsdHM6IGFueVtdID0gW107XG4gICAgY29uc3Qgc3BsaXREYXRhID0gdGhpcy5nZXRJbnByb2dyZXNzQW5kQ29tcGxldGVkKFxuICAgICAgY29udGVudE5ldyxcbiAgICAgIChlOiBhbnkpID0+IGUuY29tcGxldGlvblN0YXR1cyA9PT0gMSB8fCBlLmNvbXBsZXRpb25QZXJjZW50YWdlIDwgMTAwLFxuICAgICAgc3RyaXAsXG4gICAgKTtcblxuICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnMubGVuZ3RoKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmlwLnRhYnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKHN0cmlwLnRhYnNbaV0pIHtcbiAgICAgICAgICB0YWJSZXN1bHRzLnB1c2goXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLnN0cmlwLnRhYnNbaV0sXG4gICAgICAgICAgICAgIGZldGNoVGFiU3RhdHVzOiAnZG9uZScsXG4gICAgICAgICAgICAgIC4uLihzcGxpdERhdGEuZmluZChpdG1Jbm5lciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFic1tpXSAmJiBpdG1Jbm5lci52YWx1ZSA9PT0gc3RyaXAudGFic1tpXS52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0bUlubmVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFiUmVzdWx0cztcbiAgfVxuXG4gIGdldElucHJvZ3Jlc3NBbmRDb21wbGV0ZWQoYXJyYXk6IE5zQ29udGVudC5JQ29udGVudFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpbHRlcjogYW55LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0KSB7XG4gICAgY29uc3QgaW5wcm9ncmVzczogYW55W10gPSBbXTtcbiAgICBjb25zdCBjb21wbGV0ZWQ6IGFueVtdID0gW107XG4gICAgYXJyYXkuZm9yRWFjaCgoZTogYW55LCBpZHg6IG51bWJlciwgYXJyOiBhbnlbXSkgPT4gKGN1c3RvbUZpbHRlcihlLCBpZHgsIGFycikgPyBpbnByb2dyZXNzIDogY29tcGxldGVkKS5wdXNoKGUpKTtcbiAgICByZXR1cm4gW1xuICAgICAgeyB2YWx1ZTogJ2lucHJvZ3Jlc3MnLCB3aWRnZXRzOiB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGlucHJvZ3Jlc3MsIHN0cmlwKSB9LFxuICAgICAgeyB2YWx1ZTogJ2NvbXBsZXRlZCcsIHdpZGdldHM6IHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY29tcGxldGVkLCBzdHJpcCkgfV07XG4gIH1cblxuICBhc3luYyBmZXRjaEZyb21TZWFyY2hWNihzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5zZWFyY2hWNikubGVuZ3RoKSB7XG4gICAgICAvLyBpZiAoIShzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmxvY2FsZSAmJiBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmxvY2FsZS5sZW5ndGggPiAwKSkge1xuICAgICAgLy8gICBpZiAodGhpcy5jb25maWdTdmMuYWN0aXZlTG9jYWxlKSB7XG4gICAgICAvLyAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUgPSBbdGhpcy5jb25maWdTdmMuYWN0aXZlTG9jYWxlLmxvY2Fsc1swXV1cbiAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgIC8vICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmxvY2FsZSA9IFsnZW4nXVxuICAgICAgLy8gICB9XG4gICAgICAvLyB9XG4gICAgICBsZXQgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlOm5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUubG9nKG9yaWdpbmFsRmlsdGVycyk7XG4gICAgICBpZiAoc3RyaXAucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycykge1xuICAgICAgICBvcmlnaW5hbEZpbHRlcnMgPSBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycztcbiAgICAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMgPSB0aGlzLmNoZWNrRm9yRGF0ZUZpbHRlcnMoc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMpO1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycyA9IHRoaXMuZ2V0RmlsdGVyc0Zyb21BcnJheShcbiAgICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIFRPRE86IEhhdmUgdG8gZXh0cmFjdCByZXF1ZXN0UmVxdWlyZWQgdG8gb3V0ZXIgbGV2ZWwgb2YgdGFicyBjb25maWdcbiAgICAgICAgY29uc3QgZmlyc3RUYWIgPSBzdHJpcC50YWJzWzBdO1xuICAgICAgICBpZiAoZmlyc3RUYWIucmVxdWVzdFJlcXVpcmVkKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldICYmIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbFRhYnMgPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFRhYkZyb21NYXAgPSAoYWxsVGFicyAmJiBhbGxUYWJzLmxlbmd0aCAmJiBhbGxUYWJzWzBdKSBhcyBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBUYWI7XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0VGFiRGF0YUJ5TmV3UmVxU2VhcmNoVjYoc3RyaXAsIDAsIGN1cnJlbnRUYWJGcm9tTWFwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZWFyY2hWNlJlcXVlc3Qoc3RyaXAsIHN0cmlwLnJlcXVlc3QsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyIC0gcmVzcG9uc2UsICcsIHJlc3BvbnNlKVxuICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzKSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbGluZyAgYWZ0ZXItLSAnKVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50LCBzdHJpcCksXG4gICAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuRXZlbnQpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1FdmVudHNUb1dpZGdldHMocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuRXZlbnQsIHN0cmlwKSxcbiAgICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLnZpZXdNb3JlVXJsLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gSGFuZGxlIGVycm9yc1xuICAgICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlYXJjaFY2UmVxdWVzdChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXRbJ3JlcXVlc3QnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1czogYm9vbGVhblxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsRmlsdGVyczogYW55ID0gW107XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHJlcXVlc3QgJiYgcmVxdWVzdC5zZWFyY2hWNikge1xuICAgICAgICB0aGlzLmNvbnRlbnRTdmMuc2VhcmNoVjYocmVxdWVzdC5zZWFyY2hWNikuc3Vic2NyaWJlKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGNvbnN0IHNob3dWaWV3TW9yZSA9IEJvb2xlYW4oXG4gICAgICAgICAgICByZXN1bHRzLnJlc3VsdC5jb250ZW50ICYmIHJlc3VsdHMucmVzdWx0LmNvbnRlbnQubGVuZ3RoID4gNSAmJiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5wb3N0Q2FyZEZvclNlYXJjaCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHZpZXdNb3JlVXJsID0gc2hvd1ZpZXdNb3JlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgcGF0aDogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucGF0aCB8fCAnJyxcbiAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAgICAgICB0YWI6ICdMZWFybicsXG4gICAgICAgICAgICAgICAgcTogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICAgICAgZjpcbiAgICAgICAgICAgICAgICAgIHJlcXVlc3QgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5zZWFyY2hWNiAmJlxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnNcbiAgICAgICAgICAgICAgICAgICAgPyBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybVNlYXJjaFY2RmlsdGVyc1YyKFxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxGaWx0ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IHt9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgIC8vIGlmICh2aWV3TW9yZVVybCAmJiB2aWV3TW9yZVVybC5xdWVyeVBhcmFtcykge1xuICAgICAgICAgIC8vICAgdmlld01vcmVVcmwucXVlcnlQYXJhbXMgPSB2aWV3TW9yZVVybC5xdWVyeVBhcmFtc1xuICAgICAgICAgIC8vIH1cbiAgICAgICAgICByZXNvbHZlKHsgcmVzdWx0cywgdmlld01vcmVVcmwgfSk7XG4gICAgICAgIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoRnJvbVRyZW5kaW5nQ29udGVudChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2ggJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaCkubGVuZ3RoKSB7XG4gICAgICAvLyBpZiAoIShzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmxvY2FsZSAmJiBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmxvY2FsZS5sZW5ndGggPiAwKSkge1xuICAgICAgLy8gICBpZiAodGhpcy5jb25maWdTdmMuYWN0aXZlTG9jYWxlKSB7XG4gICAgICAvLyAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUgPSBbdGhpcy5jb25maWdTdmMuYWN0aXZlTG9jYWxlLmxvY2Fsc1swXV1cbiAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgIC8vICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmxvY2FsZSA9IFsnZW4nXVxuICAgICAgLy8gICB9XG4gICAgICAvLyB9XG4gICAgICBsZXQgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlOm5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUubG9nKG9yaWdpbmFsRmlsdGVycyk7XG4gICAgICBpZiAoc3RyaXAucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycykge1xuICAgICAgICBvcmlnaW5hbEZpbHRlcnMgPSBzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycztcbiAgICAgICAgc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0LmZpbHRlcnMgPSB0aGlzLmNoZWNrRm9yRGF0ZUZpbHRlcnMoc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0LmZpbHRlcnMpO1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycyA9IHRoaXMuZ2V0RmlsdGVyc0Zyb21BcnJheShcbiAgICAgICAgICBzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIFRPRE86IEhhdmUgdG8gZXh0cmFjdCByZXF1ZXN0UmVxdWlyZWQgdG8gb3V0ZXIgbGV2ZWwgb2YgdGFicyBjb25maWdcbiAgICAgICAgY29uc3QgZmlyc3RUYWIgPSBzdHJpcC50YWJzWzBdO1xuICAgICAgICBpZiAoZmlyc3RUYWIucmVxdWVzdFJlcXVpcmVkKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldICYmIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbFRhYnMgPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFRhYkZyb21NYXAgPSAoYWxsVGFicyAmJiBhbGxUYWJzLmxlbmd0aCAmJiBhbGxUYWJzWzBdKSBhcyBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBUYWI7XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0VGFiRGF0YUJ5TmV3UmVxVHJlbmRpbmcoc3RyaXAsIDAsIGN1cnJlbnRUYWJGcm9tTWFwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50cmVuZGluZ1NlYXJjaFJlcXVlc3Qoc3RyaXAsIHN0cmlwLnJlcXVlc3QsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdHMgJiYgcmVzcG9uc2UucmVzdWx0cy5yZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc3QgY29udGVudCA9IHJlc3BvbnNlLnJlc3VsdHMucmVzcG9uc2Vbc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXNwb25zZUtleV0gfHwgW107XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY29udGVudCwgc3RyaXApLFxuICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgcmVzcG9uc2Uudmlld01vcmVVcmwgfHwgJycsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdkb25lJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gSGFuZGxlIGVycm9yc1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHRyZW5kaW5nU2VhcmNoUmVxdWVzdChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXRbJ3JlcXVlc3QnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1czogYm9vbGVhblxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsRmlsdGVyczogYW55ID0gW107XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHJlcXVlc3QgJiYgcmVxdWVzdC50cmVuZGluZ1NlYXJjaCkge1xuICAgICAgICAvLyBjaGVjayBmb3IgdGhlIHJlcXVlc3QgaWYgaXQgaGFzIGR5bmFtaWMgdmFsdWVzXVxuICAgICAgICBpZiAocmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0LmZpbHRlcnMub3JnYW5pc2F0aW9uICYmXG4gICAgICAgICAgcmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0LmZpbHRlcnMub3JnYW5pc2F0aW9uLmluZGV4T2YoJzxvcmdJRD4nKSA+PSAwXG4gICAgICAgICkge1xuICAgICAgICAgIGxldCB1c2VyUm9vdE9yZ0lkO1xuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZSkge1xuICAgICAgICAgICAgdXNlclJvb3RPcmdJZCA9IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnJvb3RPcmdJZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0LmZpbHRlcnMub3JnYW5pc2F0aW9uID0gdXNlclJvb3RPcmdJZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRlbnRTdmMudHJlbmRpbmdDb250ZW50U2VhcmNoKHJlcXVlc3QudHJlbmRpbmdTZWFyY2gpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgICAgICBjb25zdCBzaG93Vmlld01vcmUgPSBCb29sZWFuKFxuICAgICAgICAgICAgcmVzdWx0cy5yZXN1bHQgJiZcbiAgICAgICAgICAgIHN0cmlwLnJlcXVlc3QgJiZcbiAgICAgICAgICAgIHJlc3VsdHMucmVzdWx0W3N0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVzcG9uc2VLZXldICYmXG4gICAgICAgICAgICByZXN1bHRzLnJlc3VsdFtzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlc3BvbnNlS2V5XS5sZW5ndGggPiA1ICYmXG4gICAgICAgICAgICBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5wb3N0Q2FyZEZvclNlYXJjaCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHZpZXdNb3JlVXJsID0gc2hvd1ZpZXdNb3JlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgcGF0aDogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucGF0aCB8fCAnJyxcbiAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAgICAgICB0YWI6ICdMZWFybicsXG4gICAgICAgICAgICAgICAgcTogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICAgICAgZjpcbiAgICAgICAgICAgICAgICAgIHJlcXVlc3QgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC50cmVuZGluZ1NlYXJjaCAmJlxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0LmZpbHRlcnNcbiAgICAgICAgICAgICAgICAgICAgPyBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybVNlYXJjaFY2RmlsdGVyc1YyKFxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxGaWx0ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IHt9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgIHJlc29sdmUoeyByZXN1bHRzLCB2aWV3TW9yZVVybCB9KTtcbiAgICAgICAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoZXJyb3IuZXJyb3IgJiYgZXJyb3IuZXJyb3Iuc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2RvbmUnLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdkb25lJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKVxuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB0b2dnbGVJbmZvKGRhdGE6IElTdHJpcFVuaXRDb250ZW50RGF0YSkge1xuICAgIGNvbnN0IHN0cmlwSW5mbyA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtkYXRhLmtleV0uc3RyaXBJbmZvO1xuICAgIGlmIChzdHJpcEluZm8pIHtcbiAgICAgIGlmIChzdHJpcEluZm8ubW9kZSAhPT0gJ2JlbG93Jykge1xuICAgICAgICB0aGlzLmxvZ2dlclN2Yy53YXJuKGBzdHJpcCBpbmZvIG1vZGU6ICR7c3RyaXBJbmZvLm1vZGV9IG5vdCBpbXBsZW1lbnRlZCB5ZXRgKTtcbiAgICAgICAgc3RyaXBJbmZvLm1vZGUgPSAnYmVsb3cnO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmlwSW5mby5tb2RlID09PSAnYmVsb3cnKSB7XG4gICAgICAgIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtkYXRhLmtleV0uc3RyaXBJbmZvID0ge1xuICAgICAgICAgIC4uLnN0cmlwSW5mbyxcbiAgICAgICAgICB2aXNpYmlsaXR5TW9kZTogc3RyaXBJbmZvLnZpc2liaWxpdHlNb2RlID09PSAnaGlkZGVuJyA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoXG4gICAgY29udGVudHM6IE5zQ29udGVudC5JQ29udGVudFtdLFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICApIHtcbiAgICByZXR1cm4gKGNvbnRlbnRzIHx8IFtdKS5tYXAoKGNvbnRlbnQsIGlkeCkgPT4gKFxuICAgICAgY29udGVudCA/IHtcbiAgICAgICAgd2lkZ2V0VHlwZTogJ2NhcmRMaWInLFxuICAgICAgICB3aWRnZXRTdWJUeXBlOiAnY2FyZENvbnRlbnRMaWInLFxuICAgICAgICB3aWRnZXRIb3N0Q2xhc3M6ICdtYi0yJyxcbiAgICAgICAgd2lkZ2V0RGF0YToge1xuICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgLi4uKGNvbnRlbnQuYmF0Y2ggJiYgeyBiYXRjaDogY29udGVudC5iYXRjaCB9KSxcbiAgICAgICAgICBjYXJkU3ViVHlwZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuY2FyZFN1YlR5cGUsXG4gICAgICAgICAgY2FyZEN1c3RvbWVDbGFzczogc3RyaXAuY3VzdG9tZUNsYXNzID8gc3RyaXAuY3VzdG9tZUNsYXNzIDogJycsXG4gICAgICAgICAgY29udGV4dDogeyBwYWdlU2VjdGlvbjogc3RyaXAua2V5LCBwb3NpdGlvbjogaWR4IH0sXG4gICAgICAgICAgaW50cmFuZXRNb2RlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5pbnRyYW5ldE1vZGUsXG4gICAgICAgICAgZGVsZXRlZE1vZGU6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmRlbGV0ZWRNb2RlLFxuICAgICAgICAgIGNvbnRlbnRUYWdzOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5jb250ZW50VGFncyxcbiAgICAgICAgfSxcbiAgICAgIH0gOiB7XG4gICAgICAgIHdpZGdldFR5cGU6ICdjYXJkJyxcbiAgICAgICAgd2lkZ2V0U3ViVHlwZTogJ2NhcmRDb250ZW50JyxcbiAgICAgICAgd2lkZ2V0SG9zdENsYXNzOiAnbWItMicsXG4gICAgICAgIHdpZGdldERhdGE6IHt9LFxuICAgICAgfVxuICAgICkpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1FdmVudHNUb1dpZGdldHMoXG4gICAgY29udGVudHM6IElUb2RheUV2ZW50c1tdLFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICApIHtcbiAgICB0aGlzLmV2ZW50U3ZjLnNldEV2ZW50TGlzdERhdGEoY29udGVudHMpO1xuICAgIHJldHVybiAodGhpcy5ldmVudFN2Yy50b2RheXNFdmVudHMgfHwgW10pLm1hcCgoY29udGVudDogYW55LCBpZHg6IGFueSkgPT4gKGNvbnRlbnQgPyB7XG4gICAgICB3aWRnZXRUeXBlOiAnY2FyZCcsXG4gICAgICB3aWRnZXRTdWJUeXBlOiAnZXZlbnRIdWJDYXJkJyxcbiAgICAgIHdpZGdldEhvc3RDbGFzczogJ21iLTInLFxuICAgICAgd2lkZ2V0RGF0YToge1xuICAgICAgICBjb250ZW50LFxuICAgICAgICBjYXJkU3ViVHlwZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuY2FyZFN1YlR5cGUsXG4gICAgICAgIGNhcmRDdXN0b21lQ2xhc3M6IHN0cmlwLmN1c3RvbWVDbGFzcyA/IHN0cmlwLmN1c3RvbWVDbGFzcyA6ICcnLFxuICAgICAgICBjb250ZXh0OiB7IHBhZ2VTZWN0aW9uOiBzdHJpcC5rZXksIHBvc2l0aW9uOiBpZHggfSxcbiAgICAgICAgaW50cmFuZXRNb2RlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5pbnRyYW5ldE1vZGUsXG4gICAgICAgIGRlbGV0ZWRNb2RlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5kZWxldGVkTW9kZSxcbiAgICAgICAgY29udGVudFRhZ3M6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmNvbnRlbnRUYWdzLFxuICAgICAgfSxcbiAgICB9IDoge1xuICAgICAgd2lkZ2V0VHlwZTogJ2NhcmQnLFxuICAgICAgd2lkZ2V0U3ViVHlwZTogJ2V2ZW50SHViQ2FyZCcsXG4gICAgICB3aWRnZXRIb3N0Q2xhc3M6ICdtYi0yJyxcbiAgICAgIHdpZGdldERhdGE6IHt9LFxuICAgIH1cbiAgICApKTtcbiAgfVxuICBwcml2YXRlIHRyYW5zZm9ybVNrZWxldG9uVG9XaWRnZXRzKFxuICAgIHN0cmlwOiBhbnlcbiAgKSB7XG4gICAgcmV0dXJuIFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA3LCA4LCA5LCAxMF0ubWFwKF9jb250ZW50ID0+ICh7XG4gICAgICB3aWRnZXRUeXBlOiAnY2FyZExpYicsXG4gICAgICB3aWRnZXRTdWJUeXBlOiAnY2FyZENvbnRlbnRMaWInLFxuICAgICAgd2lkZ2V0SG9zdENsYXNzOiAnbWItMicsXG4gICAgICB3aWRnZXREYXRhOiB7XG4gICAgICAgIGNhcmRTdWJUeXBlOiBzdHJpcC5sb2FkZXJDb25maWcgJiYgc3RyaXAubG9hZGVyQ29uZmlnLmNhcmRTdWJUeXBlIHx8ICdjYXJkLXN0YW5kYXJkLXNrZWxldG9uJyxcbiAgICAgICAgY2FyZEN1c3RvbWVDbGFzczogc3RyaXAuY3VzdG9tZUNsYXNzID8gc3RyaXAuY3VzdG9tZUNsYXNzIDogJycsXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1N0cmlwKFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICAgIHJlc3VsdHM6IE5zV2lkZ2V0UmVzb2x2ZXIuSVJlbmRlckNvbmZpZ1dpdGhBbnlEYXRhW10gPSBbXSxcbiAgICBmZXRjaFN0YXR1czogVEZldGNoU3RhdHVzLFxuICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUsXG4gICAgX3ZpZXdNb3JlVXJsOiBhbnksXG4gICAgdGFic1Jlc3VsdHM/OiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBUYWJbXSB8IHVuZGVmaW5lZCxcbiAgICAvLyBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgaXMgdXNlZCBzbyB0aGF0IHBhcmVudHMnIHN0YXR1cyBpcyBub3QgcmUtY2FsY3VsYXRlZCBpZiB0aGUgQVBJIGlzIGNhbGxlZCBhZ2FpbiBjb3ogb2YgZmlsdGVycywgZXRjLlxuICApIHtcbiAgICBjb25zdCBzdHJpcERhdGEgPSB7XG4gICAgICB2aWV3TW9yZVVybDogc3RyaXAudmlld01vcmVVcmwsXG4gICAgICBrZXk6IHN0cmlwLmtleSxcbiAgICAgIGNhbkhpZGVTdHJpcDogQm9vbGVhbihzdHJpcC5jYW5IaWRlU3RyaXApLFxuICAgICAgc2hvd1N0cmlwOiB0aGlzLmdldElmU3RyaXBIaWRkZW4oc3RyaXAua2V5KSxcbiAgICAgIG5vRGF0YVdpZGdldDogc3RyaXAubm9EYXRhV2lkZ2V0LFxuICAgICAgZXJyb3JXaWRnZXQ6IHN0cmlwLmVycm9yV2lkZ2V0LFxuICAgICAgc3RyaXBJbmZvOiBzdHJpcC5pbmZvLFxuICAgICAgc3RyaXBUaXRsZTogc3RyaXAudGl0bGUsXG4gICAgICBzdHJpcFRpdGxlTGluazogc3RyaXAuc3RyaXBUaXRsZUxpbmssXG4gICAgICBkaXNhYmxlVHJhbnNsYXRlOiBzdHJpcC5kaXNhYmxlVHJhbnNsYXRlLFxuICAgICAgc2xpZGVyQ29uZmlnOiBzdHJpcC5zbGlkZXJDb25maWcsXG4gICAgICB0YWJzOiB0YWJzUmVzdWx0cyA/IHRhYnNSZXN1bHRzIDogc3RyaXAudGFicyxcbiAgICAgIHN0cmlwTmFtZTogc3RyaXAubmFtZSxcbiAgICAgIG1vZGU6IHN0cmlwLm1vZGUsXG4gICAgICBzdHJpcENvbmZpZzogc3RyaXAuc3RyaXBDb25maWcsXG4gICAgICBzdHJpcEJhY2tncm91bmQ6IHN0cmlwLnN0cmlwQmFja2dyb3VuZCxcbiAgICAgIHNlY29uZGFyeUhlYWRpbmc6IHN0cmlwLnNlY29uZGFyeUhlYWRpbmcsXG4gICAgICBsb2FkZXJXaWRnZXRzOiBzdHJpcC5sb2FkZXJXaWRnZXRzIHx8IFtdLFxuICAgICAgd2lkZ2V0czpcbiAgICAgICAgZmV0Y2hTdGF0dXMgPT09ICdkb25lJ1xuICAgICAgICAgID8gW1xuICAgICAgICAgICAgLi4uKHN0cmlwLnByZVdpZGdldHMgfHwgW10pLm1hcCh3ID0+ICh7XG4gICAgICAgICAgICAgIC4uLncsXG4gICAgICAgICAgICAgIHdpZGdldEhvc3RDbGFzczogYG1iLTIgJHt3LndpZGdldEhvc3RDbGFzc31gLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgLi4ucmVzdWx0cyxcbiAgICAgICAgICAgIC4uLihzdHJpcC5wb3N0V2lkZ2V0cyB8fCBbXSkubWFwKHcgPT4gKHtcbiAgICAgICAgICAgICAgLi4udyxcbiAgICAgICAgICAgICAgd2lkZ2V0SG9zdENsYXNzOiBgbWItMiAke3cud2lkZ2V0SG9zdENsYXNzfWAsXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgXVxuICAgICAgICAgIDogW10sXG4gICAgICBzaG93T25Ob0RhdGE6IEJvb2xlYW4oXG4gICAgICAgIHN0cmlwLm5vRGF0YVdpZGdldCAmJlxuICAgICAgICAhKChzdHJpcC5wcmVXaWRnZXRzIHx8IFtdKS5sZW5ndGggKyByZXN1bHRzLmxlbmd0aCArIChzdHJpcC5wb3N0V2lkZ2V0cyB8fCBbXSkubGVuZ3RoKSAmJlxuICAgICAgICBmZXRjaFN0YXR1cyA9PT0gJ2RvbmUnLFxuICAgICAgKSxcbiAgICAgIHNob3dPbkxvYWRlcjogQm9vbGVhbihzdHJpcC5sb2FkZXIgJiYgZmV0Y2hTdGF0dXMgPT09ICdmZXRjaGluZycpLFxuICAgICAgc2hvd09uRXJyb3I6IEJvb2xlYW4oc3RyaXAuZXJyb3JXaWRnZXQgJiYgZmV0Y2hTdGF0dXMgPT09ICdlcnJvcicpLFxuICAgIH07XG4gICAgLy8gY29uc3Qgc3RyaXBEYXRhID0gdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV1cbiAgICB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXAgPSB7XG4gICAgICAuLi50aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXAsXG4gICAgICBbc3RyaXAua2V5XTogc3RyaXBEYXRhLFxuICAgIH07XG4gICAgaWYgKCF0YWJzUmVzdWx0cykge1xuICAgICAgaWYgKFxuICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgJiZcbiAgICAgICAgKGZldGNoU3RhdHVzID09PSAnZG9uZScgfHwgZmV0Y2hTdGF0dXMgPT09ICdlcnJvcicpICYmXG4gICAgICAgIHN0cmlwRGF0YS53aWRnZXRzXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5jaGVja1BhcmVudFN0YXR1cyhmZXRjaFN0YXR1cywgc3RyaXBEYXRhLndpZGdldHMubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIGlmIChjYWxjdWxhdGVQYXJlbnRTdGF0dXMgJiYgIShyZXN1bHRzICYmIHJlc3VsdHMubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgdGhpcy5jb250ZW50QXZhaWxhYmxlID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuY29udGVudEF2YWlsYWJsZSA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29udGVudEF2YWlsYWJsZSA9IHRydWU7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgY2hlY2tQYXJlbnRTdGF0dXMoZmV0Y2hTdGF0dXM6IFRGZXRjaFN0YXR1cywgc3RyaXBXaWRnZXRzQ291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChmZXRjaFN0YXR1cyA9PT0gJ2RvbmUnICYmICFzdHJpcFdpZGdldHNDb3VudCkge1xuICAgICAgdGhpcy5ub0RhdGFDb3VudCArPSAxO1xuICAgIH0gZWxzZSBpZiAoZmV0Y2hTdGF0dXMgPT09ICdkb25lJyAmJiBzdHJpcFdpZGdldHNDb3VudCkge1xuICAgICAgdGhpcy5zdWNjZXNzRGF0YUNvdW50ICs9IDE7XG4gICAgfSBlbHNlIGlmIChmZXRjaFN0YXR1cyA9PT0gJ2Vycm9yJykge1xuICAgICAgdGhpcy5lcnJvckRhdGFDb3VudCArPSAxO1xuICAgIH1cbiAgICBjb25zdCBzZXR0bGVkQ291bnQgPSB0aGlzLm5vRGF0YUNvdW50ICsgdGhpcy5zdWNjZXNzRGF0YUNvdW50ICsgdGhpcy5lcnJvckRhdGFDb3VudDtcbiAgICBjb25zdCB0b3RhbENvdW50ID0gdGhpcy53aWRnZXREYXRhLnN0cmlwcy5sZW5ndGg7XG4gICAgaWYgKHRoaXMuc3VjY2Vzc0RhdGFDb3VudCA+IDAgJiYgc2V0dGxlZENvdW50IDwgdG90YWxDb3VudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNob3dQYXJlbnRMb2FkZXIgPSBzZXR0bGVkQ291bnQgIT09IHRvdGFsQ291bnQ7XG4gICAgdGhpcy5zaG93UGFyZW50Tm9EYXRhID1cbiAgICAgIHRoaXMubm9EYXRhQ291bnQgPiAwICYmIHRoaXMubm9EYXRhQ291bnQgKyB0aGlzLmVycm9yRGF0YUNvdW50ID09PSB0b3RhbENvdW50O1xuICAgIHRoaXMuc2hvd1BhcmVudEVycm9yID0gdGhpcy5lcnJvckRhdGFDb3VudCA9PT0gdG90YWxDb3VudDtcbiAgfVxuICBjaGVja0ZvckVtcHR5V2lkZ2V0KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0KTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgc3RyaXAucmVxdWVzdCAmJlxuICAgICAgKChzdHJpcC5yZXF1ZXN0LmFwaSAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LmFwaSkubGVuZ3RoKSB8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC5zZWFyY2ggJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5zZWFyY2gpLmxlbmd0aCkgfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3Quc2VhcmNoUmVnaW9uUmVjb21tZW5kYXRpb24gJiZcbiAgICAgICAgICBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnNlYXJjaFJlZ2lvblJlY29tbWVuZGF0aW9uKS5sZW5ndGgpIHx8XG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYpLmxlbmd0aCkgfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3QuZW5yb2xsbWVudExpc3QgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5lbnJvbGxtZW50TGlzdCkubGVuZ3RoKSB8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC5jYnBMaXN0ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuY2JwTGlzdCkubGVuZ3RoKSB8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoKS5sZW5ndGgpfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3QudG9wQ29udGVudCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnRvcENvbnRlbnQpLmxlbmd0aCkgfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudCkubGVuZ3RoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyB0YWJDbGlja2VkKHRhYkV2ZW50OiBNYXRUYWJDaGFuZ2VFdmVudCwgc3RyaXBNYXA6IElTdHJpcFVuaXRDb250ZW50RGF0YSwgc3RyaXBLZXk6IHN0cmluZykge1xuICAgIGlmIChzdHJpcE1hcCAmJiBzdHJpcE1hcC50YWJzICYmIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdKSB7XG4gICAgICBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XS5mZXRjaFRhYlN0YXR1cyA9ICdpbnByb2dyZXNzJztcbiAgICAgIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdLnRhYkxvYWRpbmcgPSB0cnVlO1xuICAgICAgc3RyaXBNYXAuc2hvd09uTG9hZGVyID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgZGF0YTogV3NFdmVudHMuSVRlbGVtZXRyeVRhYkRhdGEgPSB7XG4gICAgICBsYWJlbDogYCR7dGFiRXZlbnQudGFiLnRleHRMYWJlbH1gLFxuICAgICAgaW5kZXg6IHRhYkV2ZW50LmluZGV4LFxuICAgIH07XG4gICAgdGhpcy5ldmVudFN2Yy5yYWlzZUludGVyYWN0VGVsZW1ldHJ5KFxuICAgICAge1xuICAgICAgICB0eXBlOiBXc0V2ZW50cy5FbnVtSW50ZXJhY3RUeXBlcy5DTElDSyxcbiAgICAgICAgc3ViVHlwZTogV3NFdmVudHMuRW51bUludGVyYWN0U3ViVHlwZXMuSE9NRV9QQUdFX1NUUklQX1RBQlMsXG4gICAgICAgIGlkOiBgJHtfLmNhbWVsQ2FzZShkYXRhLmxhYmVsKX0tdGFiYCxcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgbW9kdWxlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5bW9kdWxlcy5IT01FLFxuICAgICAgfVxuICAgICk7XG4gICAgY29uc3QgY3VycmVudFRhYkZyb21NYXA6IGFueSA9IHN0cmlwTWFwLnRhYnMgJiYgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF07XG4gICAgY29uc3QgY3VycmVudFN0cmlwID0gdGhpcy53aWRnZXREYXRhLnN0cmlwcy5maW5kKHMgPT4gcy5rZXkgPT09IHN0cmlwS2V5KTtcbiAgICBpZiAodGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwS2V5XSAmJiBjdXJyZW50VGFiRnJvbU1hcCkge1xuICAgICAgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwS2V5XS52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyA9IHtcbiAgICAgICAgLi4udGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwS2V5XS52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyxcbiAgICAgICAgdGFiU2VsZWN0ZWQ6IGN1cnJlbnRUYWJGcm9tTWFwLmxhYmVsLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGN1cnJlbnRTdHJpcCAmJiBjdXJyZW50VGFiRnJvbU1hcCAmJiAhY3VycmVudFRhYkZyb21NYXAuY29tcHV0ZURhdGFPbkNsaWNrKSB7XG4gICAgICBpZiAoY3VycmVudFRhYkZyb21NYXAucmVxdWVzdFJlcXVpcmVkICYmIGN1cnJlbnRUYWJGcm9tTWFwLnJlcXVlc3QpIHtcbiAgICAgICAgLy8gY2FsbCBBUEkgdG8gZ2V0IHRhYiBkYXRhIGFuZCBwcm9jZXNzXG4gICAgICAgIC8vIHRoaXMucHJvY2Vzc1N0cmlwKGN1cnJlbnRTdHJpcCwgW10sICdmZXRjaGluZycsIHRydWUsIG51bGwpXG4gICAgICAgIGlmIChjdXJyZW50VGFiRnJvbU1hcC5yZXF1ZXN0LnNlYXJjaFY2KSB7XG4gICAgICAgICAgdGhpcy5nZXRUYWJEYXRhQnlOZXdSZXFTZWFyY2hWNihjdXJyZW50U3RyaXAsIHRhYkV2ZW50LmluZGV4LCBjdXJyZW50VGFiRnJvbU1hcCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFRhYkZyb21NYXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaCkge1xuICAgICAgICAgIHRoaXMuZ2V0VGFiRGF0YUJ5TmV3UmVxVHJlbmRpbmcoY3VycmVudFN0cmlwLCB0YWJFdmVudC5pbmRleCwgY3VycmVudFRhYkZyb21NYXAsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJpcE1hcCAmJiBzdHJpcE1hcC50YWJzICYmIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdKSB7XG4gICAgICAgICAgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0udGFiTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmdldFRhYkRhdGFCeWZpbHRlcihjdXJyZW50U3RyaXAsIGN1cnJlbnRUYWJGcm9tTWFwLCB0cnVlKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0cmlwTWFwICYmIHN0cmlwTWFwLnRhYnMgJiYgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0pIHtcbiAgICAgICAgICAgICAgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0udGFiTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XS5mZXRjaFRhYlN0YXR1cyA9ICdkb25lJztcbiAgICAgICAgICAgICAgc3RyaXBNYXAuc2hvd09uTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAgICAgICAgIDIwMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0VGFiRGF0YUJ5TmV3UmVxU2VhcmNoVjYoXG4gICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgdGFiSW5kZXg6IG51bWJlcixcbiAgICBjdXJyZW50VGFiOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBUYWIsXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzOiBib29sZWFuXG4gICkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VhcmNoVjZSZXF1ZXN0KHN0cmlwLCBjdXJyZW50VGFiLnJlcXVlc3QsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cykge1xuICAgICAgICBjb25zdCB3aWRnZXRzID0gdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50LCBzdHJpcCk7XG4gICAgICAgIGxldCB0YWJSZXN1bHRzOiBhbnlbXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0gJiYgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFicykge1xuICAgICAgICAgIGNvbnN0IGFsbFRhYnMgPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzO1xuICAgICAgICAgIGlmIChhbGxUYWJzICYmIGFsbFRhYnMubGVuZ3RoICYmIGFsbFRhYnNbdGFiSW5kZXhdKSB7XG4gICAgICAgICAgICBhbGxUYWJzW3RhYkluZGV4XSA9IHtcbiAgICAgICAgICAgICAgLi4uYWxsVGFic1t0YWJJbmRleF0sXG4gICAgICAgICAgICAgIHdpZGdldHMsXG4gICAgICAgICAgICAgIGZldGNoVGFiU3RhdHVzOiAnZG9uZScsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGFiUmVzdWx0cyA9IGFsbFRhYnM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgIHdpZGdldHMsXG4gICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCxcbiAgICAgICAgICB0YWJSZXN1bHRzIC8vIHRhYlJlc3VsdHMgYXMgd2lkZ2V0c1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAvLyBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0VGFiRGF0YUJ5TmV3UmVxVHJlbmRpbmcoXG4gICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgdGFiSW5kZXg6IG51bWJlcixcbiAgICBjdXJyZW50VGFiOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBUYWIsXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzOiBib29sZWFuXG4gICkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMudHJlbmRpbmdTZWFyY2hSZXF1ZXN0KHN0cmlwLCBjdXJyZW50VGFiLnJlcXVlc3QsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cyAmJiByZXNwb25zZS5yZXN1bHRzLnJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSByZXNwb25zZS5yZXN1bHRzLnJlc3BvbnNlW2N1cnJlbnRUYWIudmFsdWVdIHx8IFtdO1xuICAgICAgICBjb25zdCB3aWRnZXRzID0gdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb250ZW50LCBzdHJpcCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjdXJyZW50VGFiIC0tLSB3aWRnZXRzJywgd2lkZ2V0cylcbiAgICAgICAgbGV0IHRhYlJlc3VsdHM6IGFueVtdID0gW107XG4gICAgICAgIGlmICh0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XSAmJiB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzKSB7XG4gICAgICAgICAgY29uc3QgYWxsVGFicyA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnM7XG4gICAgICAgICAgaWYgKGFsbFRhYnMgJiYgYWxsVGFicy5sZW5ndGggJiYgYWxsVGFic1t0YWJJbmRleF0pIHtcbiAgICAgICAgICAgIGFsbFRhYnNbdGFiSW5kZXhdID0ge1xuICAgICAgICAgICAgICAuLi5hbGxUYWJzW3RhYkluZGV4XSxcbiAgICAgICAgICAgICAgd2lkZ2V0cyxcbiAgICAgICAgICAgICAgZmV0Y2hUYWJTdGF0dXM6ICdkb25lJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0YWJSZXN1bHRzID0gYWxsVGFicztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3RhYlJlc3VsdHMgLSsrKysqKiotLScsIHRhYlJlc3VsdHMpXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlci0tICcpXG4gICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgIHdpZGdldHMsXG4gICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCxcbiAgICAgICAgICB0YWJSZXN1bHRzIC8vIHRhYlJlc3VsdHMgYXMgd2lkZ2V0c1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZG9uZScsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICB9XG4gIH1cblxuICBnZXRUYWJEYXRhQnlmaWx0ZXIoXG4gICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgY3VycmVudFRhYjogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVGFiLFxuICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1czogYm9vbGVhblxuICApIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2coJ3N0cmlwIC0tICcsIHN0cmlwKTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2coJ2N1cnJlbnRUYWIgLS0gJywgY3VycmVudFRhYik7XG4gICAgLy8gdHNsaW50OmRpc2FibGU6bm8tY29uc29sZVxuICAgIGNvbnNvbGUubG9nKCdjYWxjdWxhdGVQYXJlbnRTdGF0dXMtLSAnLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIC8vIFRPRE86IFdyaXRlIGxvZ2ljIGZvciBpbmRpdmlkdWFsIGZpbHRlciBpZiBwYXNzZWQgaW4gY29uZmlnXG4gICAgLy8gYWRkIHN3aXRjaCBjYXNlIGJhc2VkIG9uIGNvbmZpZyBrZXkgcGFzc2VkXG4gIH1cblxuICBhc3luYyBmZXRjaEFsbENicFBsYW5zKHN0cmlwOiBhbnksIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcblxuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3QuY2JwTGlzdCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LmNicExpc3QpLmxlbmd0aCkge1xuXG4gICAgICBsZXQgY291cnNlczogTnNDb250ZW50LklDb250ZW50W107XG4gICAgICBsZXQgdGFiUmVzdWx0czogYW55W10gPSBbXTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy51c2VyU3ZjLmZldGNoQ2JwUGxhbkxpc3QoKS50b1Byb21pc2UoKTtcbiAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgY291cnNlcyA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFicy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGFiUmVzdWx0cyA9IHRoaXMuc3BsaXRDYnBUYWJzRGF0YShjb3Vyc2VzLCBzdHJpcCk7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY291cnNlcywgc3RyaXApLFxuICAgICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgdGFiUmVzdWx0c1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb3Vyc2VzLCBzdHJpcCksXG4gICAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgICAndmlld01vcmVVcmwnLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gdGhpcy51c2VyU3ZjLmZldGNoQ2JwUGxhbkxpc3QoKS5zdWJzY3JpYmUoIGFzeW5jICAocmVzOiBhbnkpID0+IHtcbiAgICAgIC8vICAgaWYgKHJlcykge1xuICAgICAgLy8gICAgIGNvbnNvbGUubG9nKHJlcywnPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT4nKVxuICAgICAgLy8gICAgIGNvdXJzZXMgPSByZXNcbiAgICAgIC8vICAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgLy8gICAgICAgdGFiUmVzdWx0cyA9IHRoaXMuc3BsaXRDYnBUYWJzRGF0YShjb3Vyc2VzLCBzdHJpcClcbiAgICAgIC8vICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgLy8gICAgICAgICBzdHJpcCxcbiAgICAgIC8vICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb3Vyc2VzLCBzdHJpcCksXG4gICAgICAvLyAgICAgICAgICdkb25lJyxcbiAgICAgIC8vICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgLy8gICAgICAgICAnJyxcbiAgICAgIC8vICAgICAgICAgdGFiUmVzdWx0c1xuICAgICAgLy8gICAgICAgKVxuICAgICAgLy8gICAgIH0gZWxzZSB7XG4gICAgICAvLyAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgIC8vICAgICAgICAgc3RyaXAsXG4gICAgICAvLyAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY291cnNlcywgc3RyaXApLFxuICAgICAgLy8gICAgICAgICAnZG9uZScsXG4gICAgICAvLyAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgIC8vICAgICAgICAgJ3ZpZXdNb3JlVXJsJyxcbiAgICAgIC8vICAgICAgIClcbiAgICAgIC8vICAgICB9XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfZXJyOiBhbnkpID0+IHtcblxuICAgICAgLy8gfSlcblxuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmVucm9sbEludGVydmFsKTtcbiAgICB9XG4gIH1cbiAgc3BsaXRDYnBUYWJzRGF0YShjb250ZW50TmV3OiBOc0NvbnRlbnQuSUNvbnRlbnRbXSwgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQpIHtcbiAgICBjb25zdCB0YWJSZXN1bHRzOiBhbnlbXSA9IFtdO1xuICAgIGNvbnN0IHNwbGl0RGF0YSA9IHRoaXMuZ2V0VGFic0xpc3QoXG4gICAgICBjb250ZW50TmV3LFxuICAgICAgc3RyaXAsXG4gICAgKTtcbiAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpcC50YWJzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChzdHJpcC50YWJzW2ldKSB7XG4gICAgICAgICAgdGFiUmVzdWx0cy5wdXNoKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi5zdHJpcC50YWJzW2ldLFxuICAgICAgICAgICAgICBmZXRjaFRhYlN0YXR1czogJ2RvbmUnLFxuICAgICAgICAgICAgICAuLi4oc3BsaXREYXRhLmZpbmQoaXRtSW5uZXIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnNbaV0gJiYgaXRtSW5uZXIudmFsdWUgPT09IHN0cmlwLnRhYnNbaV0udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpdG1Jbm5lcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhYlJlc3VsdHM7XG4gIH1cblxuICBnZXRUYWJzTGlzdChhcnJheTogTnNDb250ZW50LklDb250ZW50W10sXG4gICAgICAgICAgICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0KSB7XG4gICAgbGV0IGFsbDogYW55W10gPSBbXTtcbiAgICBsZXQgdXBjb21pbmc6IGFueVtdID0gW107XG4gICAgbGV0IG92ZXJkdWU6IGFueVtdID0gW107XG4gICAgYXJyYXkuZm9yRWFjaCgoZTogYW55KSA9PiB7XG4gICAgICBhbGwucHVzaChlKTtcbiAgICAgIGlmIChlLnBsYW5EdXJhdGlvbiA9PT0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuT1ZFUkRVRSkge1xuICAgICAgICBvdmVyZHVlLnB1c2goZSk7XG4gICAgICB9IGVsc2UgaWYgKGUucGxhbkR1cmF0aW9uID09PSBOc0NhcmRDb250ZW50LkFDQlBDb25zdC5VUENPTUlORykge1xuICAgICAgICB1cGNvbWluZy5wdXNoKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGFsbENvbXBsZXRlZCA9IGFsbC5maWx0ZXIoKGFsbERhdGE6IGFueSkgPT4gYWxsRGF0YS5jb250ZW50U3RhdHVzID09PSAyKTtcbiAgICBsZXQgYWxsSW5Db21wbGV0ZWQgPSBhbGwuZmlsdGVyKChhbGxEYXRhOiBhbnkpID0+IGFsbERhdGEuY29udGVudFN0YXR1cyA8IDIpO1xuXG4gICAgbGV0IGFsbENvbXBsZXRlZE92ZXJEdWUgPSBhbGxDb21wbGV0ZWQuZmlsdGVyKChhbGxEYXRhOiBhbnkpID0+IGFsbERhdGEucGxhbkR1cmF0aW9uID09PSBOc0NhcmRDb250ZW50LkFDQlBDb25zdC5PVkVSRFVFKTtcbiAgICBjb25zdCBhbGxDb21wbGV0ZWRBbGwgPSBhbGxDb21wbGV0ZWQuZmlsdGVyKChhbGxEYXRhOiBhbnkpID0+ICBhbGxEYXRhLnBsYW5EdXJhdGlvbiAhPT0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuT1ZFUkRVRSk7XG5cbiAgICBhbGxDb21wbGV0ZWRPdmVyRHVlID0gYWxsQ29tcGxldGVkT3ZlckR1ZS5zb3J0KChhOiBhbnksIGI6IGFueSk6IGFueSA9PiB7XG4gICAgICBpZiAoYS5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUgJiYgYi5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUpIHtcbiAgICAgICAgY29uc3QgZmlyc3REYXRlOiBhbnkgPSBuZXcgRGF0ZShhLmVuZERhdGUpO1xuICAgICAgICBjb25zdCBzZWNvbmREYXRlOiBhbnkgPSBuZXcgRGF0ZShiLmVuZERhdGUpO1xuICAgICAgICByZXR1cm4gIGZpcnN0RGF0ZSA+IHNlY29uZERhdGUgID8gLTEgOiAxO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWxsSW5Db21wbGV0ZWQgPSBhbGxJbkNvbXBsZXRlZC5zb3J0KChhOiBhbnksIGI6IGFueSk6IGFueSA9PiB7XG4gICAgICBpZiAoYS5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUgJiYgYi5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUpIHtcbiAgICAgICAgY29uc3QgZmlyc3REYXRlOiBhbnkgPSBuZXcgRGF0ZShhLmVuZERhdGUpO1xuICAgICAgICBjb25zdCBzZWNvbmREYXRlOiBhbnkgPSBuZXcgRGF0ZShiLmVuZERhdGUpO1xuICAgICAgICByZXR1cm4gIGZpcnN0RGF0ZSA+IHNlY29uZERhdGUgID8gLTEgOiAxO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWxsID0gWy4uLmFsbEluQ29tcGxldGVkLCAuLi5hbGxDb21wbGV0ZWRBbGwsIC4uLmFsbENvbXBsZXRlZE92ZXJEdWVdO1xuXG4gICAgb3ZlcmR1ZSA9IG92ZXJkdWUuZmlsdGVyKChkYXRhOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgcmV0dXJuIGRhdGEuY29udGVudFN0YXR1cyA8IDI7XG4gICAgfSk7XG5cbiAgICBvdmVyZHVlID0gb3ZlcmR1ZS5zb3J0KChhOiBhbnksIGI6IGFueSk6IGFueSA9PiB7XG4gICAgICAgIGNvbnN0IGZpcnN0RGF0ZTogYW55ID0gbmV3IERhdGUoYS5lbmREYXRlKTtcbiAgICAgICAgY29uc3Qgc2Vjb25kRGF0ZTogYW55ID0gbmV3IERhdGUoYi5lbmREYXRlKTtcbiAgICAgICAgcmV0dXJuICBmaXJzdERhdGUgPiBzZWNvbmREYXRlICA/IC0xIDogMTtcbiAgICB9KTtcblxuICAgIHVwY29taW5nID0gdXBjb21pbmcuZmlsdGVyKChkYXRhOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgcmV0dXJuIGRhdGEuY29udGVudFN0YXR1cyA8IDI7XG4gICAgfSk7XG4gICAgLy8gdGhpcy5nZXRTZWxlY3RlZEluZGV4KDEpXG4gICAgcmV0dXJuIFtcbiAgICB7IHZhbHVlOiAnYWxsJywgd2lkZ2V0czogdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhhbGwsIHN0cmlwKSB9LFxuICAgIHsgdmFsdWU6ICd1cGNvbWluZycsIHdpZGdldHM6IHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHModXBjb21pbmcsIHN0cmlwKSB9LFxuICAgIHsgdmFsdWU6ICdvdmVyZHVlJywgd2lkZ2V0czogdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhvdmVyZHVlLCBzdHJpcCkgfV07XG4gIH1cblxuICBnZXRTZWxlY3RlZEluZGV4KHN0cmlwc1Jlc3VsdERhdGFNYXA6IGFueSwga2V5OiBhbnkpOiBudW1iZXIge1xuICAgIGxldCByZXR1cm5WYWx1ZSA9IDA7XG4gICAgaWYgKGtleSA9PT0gJ2NicFBsYW4nKSB7XG4gICAgICBpZiAoc3RyaXBzUmVzdWx0RGF0YU1hcC50YWJzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBkYXRhID0gc3RyaXBzUmVzdWx0RGF0YU1hcC50YWJzLmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZS52YWx1ZSA9PT0gJ3VwY29taW5nJyk7XG4gICAgICAgIHJldHVyblZhbHVlID0gZGF0YVswXS53aWRnZXRzICYmIGRhdGFbMF0ud2lkZ2V0cy5sZW5ndGggPiAwID8gMSA6IDA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgfVxuXG4gIHRyYW5zbGF0ZUxhYmVscyhsYWJlbDogc3RyaW5nLCB0eXBlOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5sYW5ndHJhbnNsYXRpb25zLnRyYW5zbGF0ZUxhYmVsKGxhYmVsLCB0eXBlLCAnJyk7XG4gIH1cblxuICBpZGVudGlmeShpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpIHtcbiAgICBpZiAoaW5kZXggPj0gMCkgeyB9XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cbiAgdHJhY2tlcihpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpIHtcbiAgICBpZiAoaW5kZXggPj0gMCkgeyB9XG4gICAgcmV0dXJuIF8uZ2V0KGl0ZW0sICd3aWRnZXREYXRhLmNvbnRlbnQuaWRlbnRpZmllcicpXG4gIH1cblxuICBhc3luYyBmZXRjaEFsbFRvcENvbnRlbnQoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBpZiAoc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LnRvcENvbnRlbnQgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC50b3BDb250ZW50KS5sZW5ndGgpIHtcbiAgICAgIGxldCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgICAgaWYgKHN0cmlwLnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC50b3BDb250ZW50ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QudG9wQ29udGVudC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QudG9wQ29udGVudC5yZXF1ZXN0LmZpbHRlcnMpIHtcbiAgICAgICAgb3JpZ2luYWxGaWx0ZXJzID0gc3RyaXAucmVxdWVzdC50b3BDb250ZW50LnJlcXVlc3QuZmlsdGVycztcbiAgICAgICAgc3RyaXAucmVxdWVzdC50b3BDb250ZW50LnJlcXVlc3QuZmlsdGVycyA9IHRoaXMucG9zdE1ldGhvZEZpbHRlcnMoc3RyaXAucmVxdWVzdC50b3BDb250ZW50LnJlcXVlc3QuZmlsdGVycyk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucG9zdFJlcXVlc3RNZXRob2Qoc3RyaXAsIHN0cmlwLnJlcXVlc3QudG9wQ29udGVudCwgc3RyaXAucmVxdWVzdC5hcGlVcmwsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlciAtIHJlc3BvbnNlLCAnLCByZXNwb25zZSlcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdHMpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbGluZyAgYWZ0ZXItLSAnKVxuICAgICAgICAgIGlmIChyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50KSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuY29udGVudCwgc3RyaXApLFxuICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgcmVzcG9uc2Uudmlld01vcmVVcmwsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBmZXRjaEFsbEZlYXR1cmVkQ29udGVudChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudCkubGVuZ3RoKSB7XG4gICAgICBsZXQgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQucmVxdWVzdC5maWx0ZXJzKSB7XG4gICAgICAgIG9yaWdpbmFsRmlsdGVycyA9IHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQucmVxdWVzdC5maWx0ZXJzO1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50LnJlcXVlc3QuZmlsdGVycyA9IHRoaXMuY2hlY2tGb3JEYXRlRmlsdGVycyhzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50LnJlcXVlc3QuZmlsdGVycyk7XG4gICAgICAgIHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQucmVxdWVzdC5maWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRnJvbUFycmF5KFxuICAgICAgICAgIHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQucmVxdWVzdC5maWx0ZXJzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnBvc3RSZXF1ZXN0TWV0aG9kKHN0cmlwLCBzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50LnJlcXVlc3QsIHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQucGF0aCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyIC0gcmVzcG9uc2UsICcsIHJlc3BvbnNlKVxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cykge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlci0tICcpXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmNvbnRlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50LCBzdHJpcCksXG4gICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgICAgLy8gY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHBvc3RSZXF1ZXN0TWV0aG9kKHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICAgIHJlcXVlc3Q6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXRbJ3JlcXVlc3QnXSxcbiAgICBhcGlVcmw6IHN0cmluZyxcbiAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXM6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChyZXF1ZXN0ICYmIHJlcXVlc3QpIHtcbiAgICAgICAgdGhpcy5jb250ZW50U3ZjLnBvc3RBcGlNZXRob2QoYXBpVXJsLHJlcXVlc3QpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgICAgY29uc3Qgc2hvd1ZpZXdNb3JlID0gQm9vbGVhbihcbiAgICAgICAgcmVzdWx0cy5yZXN1bHQuY29udGVudCAmJiByZXN1bHRzLnJlc3VsdC5jb250ZW50Lmxlbmd0aCA+IDUgJiYgc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcucG9zdENhcmRGb3JTZWFyY2gsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHZpZXdNb3JlVXJsID0gc2hvd1ZpZXdNb3JlXG4gICAgICAgID8ge1xuICAgICAgICBwYXRoOiBzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5wYXRoIHx8ICcnLFxuICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICB0YWI6ICdMZWFybicsXG4gICAgICAgIHE6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zLFxuICAgICAgICBmOlxuICAgICAgICByZXF1ZXN0ICYmXG4gICAgICAgIHJlcXVlc3Quc2VhcmNoVjYgJiZcbiAgICAgICAgcmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0ICYmXG4gICAgICAgIHJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzXG4gICAgICAgID8gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgdGhpcy50cmFuc2Zvcm1TZWFyY2hWNkZpbHRlcnNWMihcbiAgICAgICAgICAgIG9yaWdpbmFsRmlsdGVycyxcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgOiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgICA6IG51bGw7XG4gICAgICAgIHJlc29sdmUoeyByZXN1bHRzLCB2aWV3TW9yZVVybCB9KTtcbiAgICAgICAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcG9zdE1ldGhvZEZpbHRlcnMoZmlsdGVyczogYW55KXtcbiAgICBpZiAoZmlsdGVycy5vcmdhbmlzYXRpb24gJiZcbiAgICAgIGZpbHRlcnMub3JnYW5pc2F0aW9uLmluZGV4T2YoJzxvcmdJRD4nKSA+PSAwXG4gICAgKSB7XG4gICAgICBmaWx0ZXJzLm9yZ2FuaXNhdGlvbiA9IHRoaXMucHJvdmlkZXJJZFxuICAgIH1cbiAgICByZXR1cm4gZmlsdGVyc1xuICB9XG59XG4iXX0=