ngx-histaff-alpha 4.2.6 → 4.2.8
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.
- package/esm2022/lib/app/libraries/core-page-list/core-page-list.component.mjs +3 -3
- package/esm2022/lib/app/libraries/core-param-control/core-param-control/core-param-control.component.mjs +3 -3
- package/esm2022/lib/app/libraries/core-table/core-table.component.mjs +3 -3
- package/fesm2022/ngx-histaff-alpha.mjs +6 -6
- package/fesm2022/ngx-histaff-alpha.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1822,7 +1822,7 @@ export class CorePageListComponent extends CoreFormControlBaseComponent {
|
|
|
1822
1822
|
useExisting: CorePageListComponent,
|
|
1823
1823
|
},
|
|
1824
1824
|
CorePageListState,
|
|
1825
|
-
], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "corePageListContainer", first: true, predicate: ["corePageListContainer"], descendants: true }, { propertyName: "paginationContainer", first: true, predicate: ["paginationContainer"], descendants: true }, { propertyName: "fileImport", first: true, predicate: ["fileImport"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #container class=\"core-page-list-container p-relative\" #corePageListContainer\r\n [ngStyle]=\"{ height: height + 'px' }\">\r\n\r\n @if (!hideHeader) {\r\n <core-page-header [instanceNumber]=\"corePageListInstanceNumber\" [title]=\"title\"\r\n (buttonClick)=\"onCorePageHeaderButtonClick($event)\"\r\n [hideButtonGroup]=\"!!seekerMode || !!hideButtonGroup\"></core-page-header>\r\n }\r\n\r\n <input #fileImport type=\"file\" name=\"name\"\r\n accept=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\r\n style=\"display: none;\" (change)='inputFile($event)' />\r\n\r\n <!--\r\n Khi \u0111\u00E3 t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao compositionHeight c\u1EE7a core-composition\r\n C\u1EA7n t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao coreTableHeight c\u1EE7a CoreTable\r\n N\u1EBFu ph\u1EA7n top c\u1EE7a composition c\u1ED1 \u0111\u1ECBnh (v\u00ED d\u1EE5 khi s\u1EED d\u1EE5ng CoreParamKit) th\u00EC ph\u00E9p tr\u1EEB \u0111\u01A1n gi\u1EA3n\r\n Nh\u01B0ng n\u1EBFu ph\u1EA7n top \u0111\u01B0\u1EE3c customize, ta ph\u1EA3i s\u1EED d\u1EE5ng extraManualOffset\r\n -->\r\n <core-composition [coreCompositionInstanceNumber]=\"corePageListInstanceNumber\" [top]=\"topPlace\"\r\n [left]=\"!!hideLeft? undefined :left\" [main]=\"coreTable\" [height]=\"compositionHeight\">\r\n </core-composition>\r\n\r\n <router-outlet name=\"corePageListAux\"></router-outlet>\r\n\r\n <!-- @if (!!tabMode && showFilterKit) {\r\n <div class = \"filter-kit-dropdown\" [ngStyle]=\"{\r\n zIndex: filterKitZIndex\r\n }\">\r\n <core-common-param-kit [hiddenMode]=\"true\" [datePeriodComparisonFor]=\"datePeriodComparisonFor\"\r\n [enableTimeZoneConverterForDateTimePeriodParameters]=\"enableTimeZoneConverterForDateTimePeriodParameters\"\r\n [datePeriodComparisonForLabelKey]=\"datePeriodComparisonForLabelKey\"\r\n [statusInclusionFor]=\"statusInclusionFor\" [statusInclusionForLabelKey]=\"statusInclusionForLabelKey\"\r\n [statusOptionsApi]=\"statusOptionsApi\" [statusOptions$]=\"statusOptions$\" [showOrgParam]=\"showOrgParam\"\r\n [hideGeneralSearch]=\"hideGeneralSearch\" [hideDatePeriodComparison]=\"hideDatePeriodComparison\"\r\n [hideStatusInclusion]=\"hideStatusInclusion\"\r\n (onChange)=\"onParamKitValueChange($event)\"></core-common-param-kit>\r\n </div>\r\n } -->\r\n\r\n @if (!disableFilterHub && showFilter && !!paramRows) {\r\n <core-filter-hub [paramRows]=\"paramRows\"></core-filter-hub>\r\n }\r\n\r\n</div>\r\n\r\n<ng-template #topPlace>\r\n\r\n @if (!tabMode) {\r\n @if (!!showParamKit) {\r\n <div>\r\n <core-common-param-kit [hiddenMode]=\"false\" [datePeriodComparisonFor]=\"datePeriodComparisonFor\"\r\n [enableTimeZoneConverterForDateTimePeriodParameters]=\"enableTimeZoneConverterForDateTimePeriodParameters\"\r\n [datePeriodComparisonForLabelKey]=\"datePeriodComparisonForLabelKey\"\r\n [statusInclusionFor]=\"statusInclusionFor\" [statusInclusionForLabelKey]=\"statusInclusionForLabelKey\"\r\n [statusOptionsApi]=\"statusOptionsApi\" [statusOptions$]=\"statusOptions$\" [showOrgParam]=\"showOrgParam\"\r\n [hideGeneralSearch]=\"hideGeneralSearch\" [hideDatePeriodComparison]=\"hideDatePeriodComparison\"\r\n [hideStatusInclusion]=\"hideStatusInclusion\"\r\n (onChange)=\"onParamKitValueChange($event)\"></core-common-param-kit>\r\n </div>\r\n }\r\n\r\n <!-- @if (enableFilterKit) {\r\n <core-filter-kit \r\n [datePeriodComparisonFor]=\"datePeriodComparisonFor\"\r\n [enableTimeZoneConverterForDateTimePeriodParameters]=\"enableTimeZoneConverterForDateTimePeriodParameters\"\r\n [datePeriodComparisonForLabelKey]=\"datePeriodComparisonForLabelKey\"\r\n [statusInclusionFor]=\"statusInclusionFor\" \r\n [statusInclusionForLabelKey]=\"statusInclusionForLabelKey\"\r\n [statusOptionsApi]=\"statusOptionsApi\" \r\n [statusOptions$]=\"statusOptions$\" \r\n [showOrgParam]=\"showOrgParam\"\r\n [showOrgParamDropdown]=\"showOrgParamDropdown\"\r\n [hideGeneralSearch]=\"hideGeneralSearch\"\r\n [hideDatePeriodComparison]=\"hideDatePeriodComparison\"\r\n [hideStatusInclusion]=\"hideStatusInclusion\"\r\n (onChange)=\"onParamKitValueChange($event)\"\r\n ></core-filter-kit> \r\n } -->\r\n } @else {\r\n <core-tabs [headers]=\"tabHeaders\" [contents]=\"[]\" [height]=\"45\" [headerLineHeight]=\"45\"\r\n (onHeaderClick)=\"onCoreTabsHeaderClick($event)\">\r\n </core-tabs>\r\n <!-- <core-filter-kit \r\n [datePeriodComparisonFor]=\"datePeriodComparisonFor\"\r\n [enableTimeZoneConverterForDateTimePeriodParameters]=\"enableTimeZoneConverterForDateTimePeriodParameters\"\r\n [datePeriodComparisonForLabelKey]=\"datePeriodComparisonForLabelKey\"\r\n [statusInclusionFor]=\"statusInclusionFor\" \r\n [statusInclusionForLabelKey]=\"statusInclusionForLabelKey\"\r\n [statusOptionsApi]=\"statusOptionsApi\" \r\n [statusOptions$]=\"statusOptions$\" \r\n [showOrgParam]=\"showOrgParam\"\r\n [showOrgParamDropdown]=\"showOrgParamDropdown\"\r\n [hideGeneralSearch]=\"hideGeneralSearch\"\r\n [hideDatePeriodComparison]=\"hideDatePeriodComparison\"\r\n [hideStatusInclusion]=\"hideStatusInclusion\"\r\n (onChange)=\"onParamKitValueChange($event)\"\r\n ></core-filter-kit> -->\r\n }\r\n\r\n <ng-container *ngTemplateOutlet=\"top\">\r\n </ng-container>\r\n\r\n</ng-template>\r\n\r\n<ng-template #coreTable>\r\n\r\n <div [class.opacity0]=\"!!!geometricDone\">\r\n\r\n <!--\r\n Khi \u0111\u00E3 t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao compositionHeight c\u1EE7a core-composition\r\n C\u1EA7n t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao coreTableHeight c\u1EE7a CoreTable\r\n N\u1EBFu ph\u1EA7n top c\u1EE7a composition c\u1ED1 \u0111\u1ECBnh (v\u00ED d\u1EE5 khi s\u1EED d\u1EE5ng CoreParamKit) th\u00EC ph\u00E9p tr\u1EEB \u0111\u01A1n gi\u1EA3n\r\n Nh\u01B0ng n\u1EBFu ph\u1EA7n top \u0111\u01B0\u1EE3c customize, ta ph\u1EA3i s\u1EED d\u1EE5ng extraManualOffset\r\n\r\n C\u1EA7n t\u00EDnh tableHeight nh\u01B0 th\u1EBF n\u00E0o?\r\n -->\r\n <core-table #coreTableAlone width=\"100%\" [height]=\"tableHeight\" [rowHeight]=\"rowHeight || '46px'\" [wrap]=\"wrap\"\r\n [columns]=\"columns\" [data]=\"list\" [showCheckbox]=\"!!!hideCheck\" headerHeight=\"60px\"\r\n [showTools]=\"showListInlineTools\" [tools]=\"inlineTools\" (onToolClick)=\"onToolClick($event)\"\r\n (onRowClick)=\"onRowClick($event)\" (onRowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (onSelectedIdsChange)=\"onSelectedIdsChange($event)\" (onSelectedDataChange)=\"onSelectedDataChange($event)\"\r\n [frozen]=\"frozen || 1\" (onSearching)=\"onSearching($event)\"\r\n (onColumnCaptionClick)=\"onColumnCaptionClick($event)\"\r\n [corePageListInstanceNumber]=\"corePageListInstanceNumber\" [loading]=\"loading\"\r\n [columnSearchDefaultOpen]=\"columnSearchDefaultOpen\" [lazyLoading]=\"true\" [headerWrap]=\"headerWrap\"\r\n [headerFirstRowHeight]=\"headerFirstRowHeight\" [noPaddingCell]=\"noPaddingCell\"\r\n [disableHighlightOnClick]=\"disableHighlightOnClick\" [primaryKey]=\"primaryKey\"></core-table>\r\n\r\n <div class=\"d-flex d-flex-between pagination-wrapper w-100\" #paginationContainer>\r\n <core-pagination-full [height]=\"paginationHeight\" [currentPage$]=\"currentPage$\" [pageSize$]=\"pageSize$\"\r\n [pageCount]=\"pageCount\" [innerBodyCount$]=\"innerBodyCount$\" [pagination$]=\"pagination$\"\r\n [loading]=\"loading\" [fixedPageSize]=\"fixedPageSize\" [background]=\"'#848484'\"></core-pagination-full>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n</ng-template>\r\n\r\n<core-api-progress *ngIf=\"longApiRunning\" (onClose)=\"onProgressWindowClose($event)\"></core-api-progress>\r\n\r\n<app-fullscreen-modal-loader *ngIf=\"prefetchLoading\"></app-fullscreen-modal-loader>", styles: [".core-page-list-container{--height: auto;box-sizing:border-box!important;border:none!important;height:var(--height)}.core-page-list-container *{box-sizing:border-box}.core-page-list-container .column-caption{text-align:center}.core-page-list-container core-pagination-full{width:100%}.core-page-list-container .filter-kit-dropdown{top:120px;right:120px;position:fixed;box-shadow:0 1rem 3rem #0000002e}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i20.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i20.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i20.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i4.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: CoreTableComponent, selector: "core-table", inputs: ["id", "width", "height", "showCheckbox", "checkboxSize", "outerButtons", "showTools", "tools", "checkingResetFlag", "borderRadius", "headerColor", "headerBackgroundColor", "headerWrap", "headerFirstRowHeight", "headerSecondRowHeight", "wrap", "allowCellScrollY", "loading", "rowHeight", "frozen", "footer", "columns", "data", "selectedIds", "corePageListInstanceNumber", "disableHighlightOnClick", "freeMode", "searchSwitchDisabled", "disableSorting", "inlineToolItems", "columnSearchDefaultOpen", "lazyLoading", "primaryKey", "rowHoverBgColor", "noPaddingCell"], outputs: ["onSearching", "onToolClick", "onRowClick", "onRowDoubleClick", "onSelectedIdsChange", "onSelectedDataChange", "onColumnCaptionClick"] }, { kind: "component", type: CorePaginationFullComponent, selector: "core-pagination-full", inputs: ["currentPage$", "height", "pageCount", "loading", "showAdd", "background", "pageSize$", "innerBodyCount$", "pagination$", "fixedPageSize"], outputs: ["onClickAdd", "onCurrentPageChange"] }, { kind: "component", type: CorePageHeaderComponent, selector: "core-page-header", inputs: ["instanceNumber", "shownItems", "title", "hideButtonGroup"], outputs: ["buttonClick"] }, { kind: "component", type: CoreCompositionComponent, selector: "core-composition", inputs: ["coreCompositionInstanceNumber", "top", "left", "leftWidth", "main", "height", "defaultResizeOff"] }, { kind: "component", type: CoreCommonParamKitComponent, selector: "core-common-param-kit", inputs: ["hiddenMode", "enableTimeZoneConverterForDateTimePeriodParameters", "datePeriodComparisonFor", "datePeriodComparisonForLabelKey", "statusInclusionFor", "statusInclusionForLabelKey", "statusOptionsApi", "showOrgParam", "showOrgParamDropdown", "hideDatePeriodComparison", "hideStatusInclusion", "hideGeneralSearch", "statusOptions$"], outputs: ["onChange"] }, { kind: "component", type: CoreApiProgressComponent, selector: "core-api-progress", outputs: ["onClose"] }, { kind: "component", type: FullscreenModalLoaderComponent, selector: "app-fullscreen-modal-loader", inputs: ["content"] }, { kind: "component", type: CoreTabsComponent, selector: "core-tabs", inputs: ["headers", "contents", "headerTools", "height", "headerLineHeight"], outputs: ["onHeaderClick", "onToolItemClick"] }, { kind: "component", type: CoreFilterHubComponent, selector: "core-filter-hub", inputs: ["paramRows", "showButton"], outputs: ["onButtonClick"] }] }); }
|
|
1825
|
+
], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "corePageListContainer", first: true, predicate: ["corePageListContainer"], descendants: true }, { propertyName: "paginationContainer", first: true, predicate: ["paginationContainer"], descendants: true }, { propertyName: "fileImport", first: true, predicate: ["fileImport"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #container class=\"core-page-list-container p-relative\" #corePageListContainer\r\n [ngStyle]=\"{ height: height + 'px' }\">\r\n\r\n @if (!hideHeader) {\r\n <core-page-header [instanceNumber]=\"corePageListInstanceNumber\" [title]=\"title\"\r\n (buttonClick)=\"onCorePageHeaderButtonClick($event)\"\r\n [hideButtonGroup]=\"!!seekerMode || !!hideButtonGroup\"></core-page-header>\r\n }\r\n\r\n <input #fileImport type=\"file\" name=\"name\"\r\n accept=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\r\n style=\"display: none;\" (change)='inputFile($event)' />\r\n\r\n <!--\r\n Khi \u0111\u00E3 t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao compositionHeight c\u1EE7a core-composition\r\n C\u1EA7n t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao coreTableHeight c\u1EE7a CoreTable\r\n N\u1EBFu ph\u1EA7n top c\u1EE7a composition c\u1ED1 \u0111\u1ECBnh (v\u00ED d\u1EE5 khi s\u1EED d\u1EE5ng CoreParamKit) th\u00EC ph\u00E9p tr\u1EEB \u0111\u01A1n gi\u1EA3n\r\n Nh\u01B0ng n\u1EBFu ph\u1EA7n top \u0111\u01B0\u1EE3c customize, ta ph\u1EA3i s\u1EED d\u1EE5ng extraManualOffset\r\n -->\r\n <core-composition [coreCompositionInstanceNumber]=\"corePageListInstanceNumber\" [top]=\"topPlace\"\r\n [left]=\"!!hideLeft? undefined :left\" [main]=\"coreTable\" [height]=\"compositionHeight\">\r\n </core-composition>\r\n\r\n <router-outlet name=\"corePageListAux\"></router-outlet>\r\n\r\n <!-- @if (!!tabMode && showFilterKit) {\r\n <div class = \"filter-kit-dropdown\" [ngStyle]=\"{\r\n zIndex: filterKitZIndex\r\n }\">\r\n <core-common-param-kit [hiddenMode]=\"true\" [datePeriodComparisonFor]=\"datePeriodComparisonFor\"\r\n [enableTimeZoneConverterForDateTimePeriodParameters]=\"enableTimeZoneConverterForDateTimePeriodParameters\"\r\n [datePeriodComparisonForLabelKey]=\"datePeriodComparisonForLabelKey\"\r\n [statusInclusionFor]=\"statusInclusionFor\" [statusInclusionForLabelKey]=\"statusInclusionForLabelKey\"\r\n [statusOptionsApi]=\"statusOptionsApi\" [statusOptions$]=\"statusOptions$\" [showOrgParam]=\"showOrgParam\"\r\n [hideGeneralSearch]=\"hideGeneralSearch\" [hideDatePeriodComparison]=\"hideDatePeriodComparison\"\r\n [hideStatusInclusion]=\"hideStatusInclusion\"\r\n (onChange)=\"onParamKitValueChange($event)\"></core-common-param-kit>\r\n </div>\r\n } -->\r\n\r\n @if (!disableFilterHub && showFilter && !!paramRows) {\r\n <core-filter-hub [paramRows]=\"paramRows\"></core-filter-hub>\r\n }\r\n\r\n</div>\r\n\r\n<ng-template #topPlace>\r\n\r\n @if (!tabMode) {\r\n @if (!!showParamKit) {\r\n <div>\r\n <core-common-param-kit [hiddenMode]=\"false\" [datePeriodComparisonFor]=\"datePeriodComparisonFor\"\r\n [enableTimeZoneConverterForDateTimePeriodParameters]=\"enableTimeZoneConverterForDateTimePeriodParameters\"\r\n [datePeriodComparisonForLabelKey]=\"datePeriodComparisonForLabelKey\"\r\n [statusInclusionFor]=\"statusInclusionFor\" [statusInclusionForLabelKey]=\"statusInclusionForLabelKey\"\r\n [statusOptionsApi]=\"statusOptionsApi\" [statusOptions$]=\"statusOptions$\" [showOrgParam]=\"showOrgParam\"\r\n [hideGeneralSearch]=\"hideGeneralSearch\" [hideDatePeriodComparison]=\"hideDatePeriodComparison\"\r\n [hideStatusInclusion]=\"hideStatusInclusion\"\r\n (onChange)=\"onParamKitValueChange($event)\"></core-common-param-kit>\r\n </div>\r\n }\r\n\r\n <!-- @if (enableFilterKit) {\r\n <core-filter-kit \r\n [datePeriodComparisonFor]=\"datePeriodComparisonFor\"\r\n [enableTimeZoneConverterForDateTimePeriodParameters]=\"enableTimeZoneConverterForDateTimePeriodParameters\"\r\n [datePeriodComparisonForLabelKey]=\"datePeriodComparisonForLabelKey\"\r\n [statusInclusionFor]=\"statusInclusionFor\" \r\n [statusInclusionForLabelKey]=\"statusInclusionForLabelKey\"\r\n [statusOptionsApi]=\"statusOptionsApi\" \r\n [statusOptions$]=\"statusOptions$\" \r\n [showOrgParam]=\"showOrgParam\"\r\n [showOrgParamDropdown]=\"showOrgParamDropdown\"\r\n [hideGeneralSearch]=\"hideGeneralSearch\"\r\n [hideDatePeriodComparison]=\"hideDatePeriodComparison\"\r\n [hideStatusInclusion]=\"hideStatusInclusion\"\r\n (onChange)=\"onParamKitValueChange($event)\"\r\n ></core-filter-kit> \r\n } -->\r\n } @else {\r\n <core-tabs [headers]=\"tabHeaders\" [contents]=\"[]\" [height]=\"45\" [headerLineHeight]=\"45\"\r\n (onHeaderClick)=\"onCoreTabsHeaderClick($event)\">\r\n </core-tabs>\r\n <!-- <core-filter-kit \r\n [datePeriodComparisonFor]=\"datePeriodComparisonFor\"\r\n [enableTimeZoneConverterForDateTimePeriodParameters]=\"enableTimeZoneConverterForDateTimePeriodParameters\"\r\n [datePeriodComparisonForLabelKey]=\"datePeriodComparisonForLabelKey\"\r\n [statusInclusionFor]=\"statusInclusionFor\" \r\n [statusInclusionForLabelKey]=\"statusInclusionForLabelKey\"\r\n [statusOptionsApi]=\"statusOptionsApi\" \r\n [statusOptions$]=\"statusOptions$\" \r\n [showOrgParam]=\"showOrgParam\"\r\n [showOrgParamDropdown]=\"showOrgParamDropdown\"\r\n [hideGeneralSearch]=\"hideGeneralSearch\"\r\n [hideDatePeriodComparison]=\"hideDatePeriodComparison\"\r\n [hideStatusInclusion]=\"hideStatusInclusion\"\r\n (onChange)=\"onParamKitValueChange($event)\"\r\n ></core-filter-kit> -->\r\n }\r\n\r\n <ng-container *ngTemplateOutlet=\"top\">\r\n </ng-container>\r\n\r\n</ng-template>\r\n\r\n<ng-template #coreTable>\r\n\r\n <div [class.opacity0]=\"!!!geometricDone\">\r\n\r\n <!--\r\n Khi \u0111\u00E3 t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao compositionHeight c\u1EE7a core-composition\r\n C\u1EA7n t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao coreTableHeight c\u1EE7a CoreTable\r\n N\u1EBFu ph\u1EA7n top c\u1EE7a composition c\u1ED1 \u0111\u1ECBnh (v\u00ED d\u1EE5 khi s\u1EED d\u1EE5ng CoreParamKit) th\u00EC ph\u00E9p tr\u1EEB \u0111\u01A1n gi\u1EA3n\r\n Nh\u01B0ng n\u1EBFu ph\u1EA7n top \u0111\u01B0\u1EE3c customize, ta ph\u1EA3i s\u1EED d\u1EE5ng extraManualOffset\r\n\r\n C\u1EA7n t\u00EDnh tableHeight nh\u01B0 th\u1EBF n\u00E0o?\r\n -->\r\n <core-table #coreTableAlone width=\"100%\" [height]=\"tableHeight\" [rowHeight]=\"rowHeight || '46px'\" [wrap]=\"wrap\"\r\n [primaryKey]=\"primaryKey\"\r\n [columns]=\"columns\" [data]=\"list\" [showCheckbox]=\"!!!hideCheck\" headerHeight=\"60px\"\r\n [showTools]=\"showListInlineTools\" [tools]=\"inlineTools\" (onToolClick)=\"onToolClick($event)\"\r\n (onRowClick)=\"onRowClick($event)\" (onRowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (onSelectedIdsChange)=\"onSelectedIdsChange($event)\" (onSelectedDataChange)=\"onSelectedDataChange($event)\"\r\n [frozen]=\"frozen || 1\" (onSearching)=\"onSearching($event)\"\r\n (onColumnCaptionClick)=\"onColumnCaptionClick($event)\"\r\n [corePageListInstanceNumber]=\"corePageListInstanceNumber\" [loading]=\"loading\"\r\n [columnSearchDefaultOpen]=\"columnSearchDefaultOpen\" [lazyLoading]=\"true\" [headerWrap]=\"headerWrap\"\r\n [headerFirstRowHeight]=\"headerFirstRowHeight\" [noPaddingCell]=\"noPaddingCell\"\r\n [disableHighlightOnClick]=\"disableHighlightOnClick\" [primaryKey]=\"primaryKey\"></core-table>\r\n\r\n <div class=\"d-flex d-flex-between pagination-wrapper w-100\" #paginationContainer>\r\n <core-pagination-full [height]=\"paginationHeight\" [currentPage$]=\"currentPage$\" [pageSize$]=\"pageSize$\"\r\n [pageCount]=\"pageCount\" [innerBodyCount$]=\"innerBodyCount$\" [pagination$]=\"pagination$\"\r\n [loading]=\"loading\" [fixedPageSize]=\"fixedPageSize\" [background]=\"'#848484'\"></core-pagination-full>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n</ng-template>\r\n\r\n<core-api-progress *ngIf=\"longApiRunning\" (onClose)=\"onProgressWindowClose($event)\"></core-api-progress>\r\n\r\n<app-fullscreen-modal-loader *ngIf=\"prefetchLoading\"></app-fullscreen-modal-loader>", styles: [".core-page-list-container{--height: auto;box-sizing:border-box!important;border:none!important;height:var(--height)}.core-page-list-container *{box-sizing:border-box}.core-page-list-container .column-caption{text-align:center}.core-page-list-container core-pagination-full{width:100%}.core-page-list-container .filter-kit-dropdown{top:120px;right:120px;position:fixed;box-shadow:0 1rem 3rem #0000002e}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i20.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i20.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i20.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i4.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: CoreTableComponent, selector: "core-table", inputs: ["id", "width", "height", "showCheckbox", "checkboxSize", "outerButtons", "showTools", "tools", "checkingResetFlag", "borderRadius", "headerColor", "headerBackgroundColor", "headerWrap", "headerFirstRowHeight", "headerSecondRowHeight", "wrap", "allowCellScrollY", "loading", "rowHeight", "frozen", "footer", "columns", "data", "selectedIds", "corePageListInstanceNumber", "disableHighlightOnClick", "freeMode", "searchSwitchDisabled", "disableSorting", "inlineToolItems", "columnSearchDefaultOpen", "lazyLoading", "primaryKey", "rowHoverBgColor", "noPaddingCell"], outputs: ["onSearching", "onToolClick", "onRowClick", "onRowDoubleClick", "onSelectedIdsChange", "onSelectedDataChange", "onColumnCaptionClick"] }, { kind: "component", type: CorePaginationFullComponent, selector: "core-pagination-full", inputs: ["currentPage$", "height", "pageCount", "loading", "showAdd", "background", "pageSize$", "innerBodyCount$", "pagination$", "fixedPageSize"], outputs: ["onClickAdd", "onCurrentPageChange"] }, { kind: "component", type: CorePageHeaderComponent, selector: "core-page-header", inputs: ["instanceNumber", "shownItems", "title", "hideButtonGroup"], outputs: ["buttonClick"] }, { kind: "component", type: CoreCompositionComponent, selector: "core-composition", inputs: ["coreCompositionInstanceNumber", "top", "left", "leftWidth", "main", "height", "defaultResizeOff"] }, { kind: "component", type: CoreCommonParamKitComponent, selector: "core-common-param-kit", inputs: ["hiddenMode", "enableTimeZoneConverterForDateTimePeriodParameters", "datePeriodComparisonFor", "datePeriodComparisonForLabelKey", "statusInclusionFor", "statusInclusionForLabelKey", "statusOptionsApi", "showOrgParam", "showOrgParamDropdown", "hideDatePeriodComparison", "hideStatusInclusion", "hideGeneralSearch", "statusOptions$"], outputs: ["onChange"] }, { kind: "component", type: CoreApiProgressComponent, selector: "core-api-progress", outputs: ["onClose"] }, { kind: "component", type: FullscreenModalLoaderComponent, selector: "app-fullscreen-modal-loader", inputs: ["content"] }, { kind: "component", type: CoreTabsComponent, selector: "core-tabs", inputs: ["headers", "contents", "headerTools", "height", "headerLineHeight"], outputs: ["onHeaderClick", "onToolItemClick"] }, { kind: "component", type: CoreFilterHubComponent, selector: "core-filter-hub", inputs: ["paramRows", "showButton"], outputs: ["onButtonClick"] }] }); }
|
|
1826
1826
|
}
|
|
1827
1827
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CorePageListComponent, decorators: [{
|
|
1828
1828
|
type: Component,
|
|
@@ -1846,7 +1846,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
1846
1846
|
useExisting: CorePageListComponent,
|
|
1847
1847
|
},
|
|
1848
1848
|
CorePageListState,
|
|
1849
|
-
], template: "<div #container class=\"core-page-list-container p-relative\" #corePageListContainer\r\n [ngStyle]=\"{ height: height + 'px' }\">\r\n\r\n @if (!hideHeader) {\r\n <core-page-header [instanceNumber]=\"corePageListInstanceNumber\" [title]=\"title\"\r\n (buttonClick)=\"onCorePageHeaderButtonClick($event)\"\r\n [hideButtonGroup]=\"!!seekerMode || !!hideButtonGroup\"></core-page-header>\r\n }\r\n\r\n <input #fileImport type=\"file\" name=\"name\"\r\n accept=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\r\n style=\"display: none;\" (change)='inputFile($event)' />\r\n\r\n <!--\r\n Khi \u0111\u00E3 t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao compositionHeight c\u1EE7a core-composition\r\n C\u1EA7n t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao coreTableHeight c\u1EE7a CoreTable\r\n N\u1EBFu ph\u1EA7n top c\u1EE7a composition c\u1ED1 \u0111\u1ECBnh (v\u00ED d\u1EE5 khi s\u1EED d\u1EE5ng CoreParamKit) th\u00EC ph\u00E9p tr\u1EEB \u0111\u01A1n gi\u1EA3n\r\n Nh\u01B0ng n\u1EBFu ph\u1EA7n top \u0111\u01B0\u1EE3c customize, ta ph\u1EA3i s\u1EED d\u1EE5ng extraManualOffset\r\n -->\r\n <core-composition [coreCompositionInstanceNumber]=\"corePageListInstanceNumber\" [top]=\"topPlace\"\r\n [left]=\"!!hideLeft? undefined :left\" [main]=\"coreTable\" [height]=\"compositionHeight\">\r\n </core-composition>\r\n\r\n <router-outlet name=\"corePageListAux\"></router-outlet>\r\n\r\n <!-- @if (!!tabMode && showFilterKit) {\r\n <div class = \"filter-kit-dropdown\" [ngStyle]=\"{\r\n zIndex: filterKitZIndex\r\n }\">\r\n <core-common-param-kit [hiddenMode]=\"true\" [datePeriodComparisonFor]=\"datePeriodComparisonFor\"\r\n [enableTimeZoneConverterForDateTimePeriodParameters]=\"enableTimeZoneConverterForDateTimePeriodParameters\"\r\n [datePeriodComparisonForLabelKey]=\"datePeriodComparisonForLabelKey\"\r\n [statusInclusionFor]=\"statusInclusionFor\" [statusInclusionForLabelKey]=\"statusInclusionForLabelKey\"\r\n [statusOptionsApi]=\"statusOptionsApi\" [statusOptions$]=\"statusOptions$\" [showOrgParam]=\"showOrgParam\"\r\n [hideGeneralSearch]=\"hideGeneralSearch\" [hideDatePeriodComparison]=\"hideDatePeriodComparison\"\r\n [hideStatusInclusion]=\"hideStatusInclusion\"\r\n (onChange)=\"onParamKitValueChange($event)\"></core-common-param-kit>\r\n </div>\r\n } -->\r\n\r\n @if (!disableFilterHub && showFilter && !!paramRows) {\r\n <core-filter-hub [paramRows]=\"paramRows\"></core-filter-hub>\r\n }\r\n\r\n</div>\r\n\r\n<ng-template #topPlace>\r\n\r\n @if (!tabMode) {\r\n @if (!!showParamKit) {\r\n <div>\r\n <core-common-param-kit [hiddenMode]=\"false\" [datePeriodComparisonFor]=\"datePeriodComparisonFor\"\r\n [enableTimeZoneConverterForDateTimePeriodParameters]=\"enableTimeZoneConverterForDateTimePeriodParameters\"\r\n [datePeriodComparisonForLabelKey]=\"datePeriodComparisonForLabelKey\"\r\n [statusInclusionFor]=\"statusInclusionFor\" [statusInclusionForLabelKey]=\"statusInclusionForLabelKey\"\r\n [statusOptionsApi]=\"statusOptionsApi\" [statusOptions$]=\"statusOptions$\" [showOrgParam]=\"showOrgParam\"\r\n [hideGeneralSearch]=\"hideGeneralSearch\" [hideDatePeriodComparison]=\"hideDatePeriodComparison\"\r\n [hideStatusInclusion]=\"hideStatusInclusion\"\r\n (onChange)=\"onParamKitValueChange($event)\"></core-common-param-kit>\r\n </div>\r\n }\r\n\r\n <!-- @if (enableFilterKit) {\r\n <core-filter-kit \r\n [datePeriodComparisonFor]=\"datePeriodComparisonFor\"\r\n [enableTimeZoneConverterForDateTimePeriodParameters]=\"enableTimeZoneConverterForDateTimePeriodParameters\"\r\n [datePeriodComparisonForLabelKey]=\"datePeriodComparisonForLabelKey\"\r\n [statusInclusionFor]=\"statusInclusionFor\" \r\n [statusInclusionForLabelKey]=\"statusInclusionForLabelKey\"\r\n [statusOptionsApi]=\"statusOptionsApi\" \r\n [statusOptions$]=\"statusOptions$\" \r\n [showOrgParam]=\"showOrgParam\"\r\n [showOrgParamDropdown]=\"showOrgParamDropdown\"\r\n [hideGeneralSearch]=\"hideGeneralSearch\"\r\n [hideDatePeriodComparison]=\"hideDatePeriodComparison\"\r\n [hideStatusInclusion]=\"hideStatusInclusion\"\r\n (onChange)=\"onParamKitValueChange($event)\"\r\n ></core-filter-kit> \r\n } -->\r\n } @else {\r\n <core-tabs [headers]=\"tabHeaders\" [contents]=\"[]\" [height]=\"45\" [headerLineHeight]=\"45\"\r\n (onHeaderClick)=\"onCoreTabsHeaderClick($event)\">\r\n </core-tabs>\r\n <!-- <core-filter-kit \r\n [datePeriodComparisonFor]=\"datePeriodComparisonFor\"\r\n [enableTimeZoneConverterForDateTimePeriodParameters]=\"enableTimeZoneConverterForDateTimePeriodParameters\"\r\n [datePeriodComparisonForLabelKey]=\"datePeriodComparisonForLabelKey\"\r\n [statusInclusionFor]=\"statusInclusionFor\" \r\n [statusInclusionForLabelKey]=\"statusInclusionForLabelKey\"\r\n [statusOptionsApi]=\"statusOptionsApi\" \r\n [statusOptions$]=\"statusOptions$\" \r\n [showOrgParam]=\"showOrgParam\"\r\n [showOrgParamDropdown]=\"showOrgParamDropdown\"\r\n [hideGeneralSearch]=\"hideGeneralSearch\"\r\n [hideDatePeriodComparison]=\"hideDatePeriodComparison\"\r\n [hideStatusInclusion]=\"hideStatusInclusion\"\r\n (onChange)=\"onParamKitValueChange($event)\"\r\n ></core-filter-kit> -->\r\n }\r\n\r\n <ng-container *ngTemplateOutlet=\"top\">\r\n </ng-container>\r\n\r\n</ng-template>\r\n\r\n<ng-template #coreTable>\r\n\r\n <div [class.opacity0]=\"!!!geometricDone\">\r\n\r\n <!--\r\n Khi \u0111\u00E3 t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao compositionHeight c\u1EE7a core-composition\r\n C\u1EA7n t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao coreTableHeight c\u1EE7a CoreTable\r\n N\u1EBFu ph\u1EA7n top c\u1EE7a composition c\u1ED1 \u0111\u1ECBnh (v\u00ED d\u1EE5 khi s\u1EED d\u1EE5ng CoreParamKit) th\u00EC ph\u00E9p tr\u1EEB \u0111\u01A1n gi\u1EA3n\r\n Nh\u01B0ng n\u1EBFu ph\u1EA7n top \u0111\u01B0\u1EE3c customize, ta ph\u1EA3i s\u1EED d\u1EE5ng extraManualOffset\r\n\r\n C\u1EA7n t\u00EDnh tableHeight nh\u01B0 th\u1EBF n\u00E0o?\r\n -->\r\n <core-table #coreTableAlone width=\"100%\" [height]=\"tableHeight\" [rowHeight]=\"rowHeight || '46px'\" [wrap]=\"wrap\"\r\n [columns]=\"columns\" [data]=\"list\" [showCheckbox]=\"!!!hideCheck\" headerHeight=\"60px\"\r\n [showTools]=\"showListInlineTools\" [tools]=\"inlineTools\" (onToolClick)=\"onToolClick($event)\"\r\n (onRowClick)=\"onRowClick($event)\" (onRowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (onSelectedIdsChange)=\"onSelectedIdsChange($event)\" (onSelectedDataChange)=\"onSelectedDataChange($event)\"\r\n [frozen]=\"frozen || 1\" (onSearching)=\"onSearching($event)\"\r\n (onColumnCaptionClick)=\"onColumnCaptionClick($event)\"\r\n [corePageListInstanceNumber]=\"corePageListInstanceNumber\" [loading]=\"loading\"\r\n [columnSearchDefaultOpen]=\"columnSearchDefaultOpen\" [lazyLoading]=\"true\" [headerWrap]=\"headerWrap\"\r\n [headerFirstRowHeight]=\"headerFirstRowHeight\" [noPaddingCell]=\"noPaddingCell\"\r\n [disableHighlightOnClick]=\"disableHighlightOnClick\" [primaryKey]=\"primaryKey\"></core-table>\r\n\r\n <div class=\"d-flex d-flex-between pagination-wrapper w-100\" #paginationContainer>\r\n <core-pagination-full [height]=\"paginationHeight\" [currentPage$]=\"currentPage$\" [pageSize$]=\"pageSize$\"\r\n [pageCount]=\"pageCount\" [innerBodyCount$]=\"innerBodyCount$\" [pagination$]=\"pagination$\"\r\n [loading]=\"loading\" [fixedPageSize]=\"fixedPageSize\" [background]=\"'#848484'\"></core-pagination-full>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n</ng-template>\r\n\r\n<core-api-progress *ngIf=\"longApiRunning\" (onClose)=\"onProgressWindowClose($event)\"></core-api-progress>\r\n\r\n<app-fullscreen-modal-loader *ngIf=\"prefetchLoading\"></app-fullscreen-modal-loader>", styles: [".core-page-list-container{--height: auto;box-sizing:border-box!important;border:none!important;height:var(--height)}.core-page-list-container *{box-sizing:border-box}.core-page-list-container .column-caption{text-align:center}.core-page-list-container core-pagination-full{width:100%}.core-page-list-container .filter-kit-dropdown{top:120px;right:120px;position:fixed;box-shadow:0 1rem 3rem #0000002e}\n"] }]
|
|
1849
|
+
], template: "<div #container class=\"core-page-list-container p-relative\" #corePageListContainer\r\n [ngStyle]=\"{ height: height + 'px' }\">\r\n\r\n @if (!hideHeader) {\r\n <core-page-header [instanceNumber]=\"corePageListInstanceNumber\" [title]=\"title\"\r\n (buttonClick)=\"onCorePageHeaderButtonClick($event)\"\r\n [hideButtonGroup]=\"!!seekerMode || !!hideButtonGroup\"></core-page-header>\r\n }\r\n\r\n <input #fileImport type=\"file\" name=\"name\"\r\n accept=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\r\n style=\"display: none;\" (change)='inputFile($event)' />\r\n\r\n <!--\r\n Khi \u0111\u00E3 t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao compositionHeight c\u1EE7a core-composition\r\n C\u1EA7n t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao coreTableHeight c\u1EE7a CoreTable\r\n N\u1EBFu ph\u1EA7n top c\u1EE7a composition c\u1ED1 \u0111\u1ECBnh (v\u00ED d\u1EE5 khi s\u1EED d\u1EE5ng CoreParamKit) th\u00EC ph\u00E9p tr\u1EEB \u0111\u01A1n gi\u1EA3n\r\n Nh\u01B0ng n\u1EBFu ph\u1EA7n top \u0111\u01B0\u1EE3c customize, ta ph\u1EA3i s\u1EED d\u1EE5ng extraManualOffset\r\n -->\r\n <core-composition [coreCompositionInstanceNumber]=\"corePageListInstanceNumber\" [top]=\"topPlace\"\r\n [left]=\"!!hideLeft? undefined :left\" [main]=\"coreTable\" [height]=\"compositionHeight\">\r\n </core-composition>\r\n\r\n <router-outlet name=\"corePageListAux\"></router-outlet>\r\n\r\n <!-- @if (!!tabMode && showFilterKit) {\r\n <div class = \"filter-kit-dropdown\" [ngStyle]=\"{\r\n zIndex: filterKitZIndex\r\n }\">\r\n <core-common-param-kit [hiddenMode]=\"true\" [datePeriodComparisonFor]=\"datePeriodComparisonFor\"\r\n [enableTimeZoneConverterForDateTimePeriodParameters]=\"enableTimeZoneConverterForDateTimePeriodParameters\"\r\n [datePeriodComparisonForLabelKey]=\"datePeriodComparisonForLabelKey\"\r\n [statusInclusionFor]=\"statusInclusionFor\" [statusInclusionForLabelKey]=\"statusInclusionForLabelKey\"\r\n [statusOptionsApi]=\"statusOptionsApi\" [statusOptions$]=\"statusOptions$\" [showOrgParam]=\"showOrgParam\"\r\n [hideGeneralSearch]=\"hideGeneralSearch\" [hideDatePeriodComparison]=\"hideDatePeriodComparison\"\r\n [hideStatusInclusion]=\"hideStatusInclusion\"\r\n (onChange)=\"onParamKitValueChange($event)\"></core-common-param-kit>\r\n </div>\r\n } -->\r\n\r\n @if (!disableFilterHub && showFilter && !!paramRows) {\r\n <core-filter-hub [paramRows]=\"paramRows\"></core-filter-hub>\r\n }\r\n\r\n</div>\r\n\r\n<ng-template #topPlace>\r\n\r\n @if (!tabMode) {\r\n @if (!!showParamKit) {\r\n <div>\r\n <core-common-param-kit [hiddenMode]=\"false\" [datePeriodComparisonFor]=\"datePeriodComparisonFor\"\r\n [enableTimeZoneConverterForDateTimePeriodParameters]=\"enableTimeZoneConverterForDateTimePeriodParameters\"\r\n [datePeriodComparisonForLabelKey]=\"datePeriodComparisonForLabelKey\"\r\n [statusInclusionFor]=\"statusInclusionFor\" [statusInclusionForLabelKey]=\"statusInclusionForLabelKey\"\r\n [statusOptionsApi]=\"statusOptionsApi\" [statusOptions$]=\"statusOptions$\" [showOrgParam]=\"showOrgParam\"\r\n [hideGeneralSearch]=\"hideGeneralSearch\" [hideDatePeriodComparison]=\"hideDatePeriodComparison\"\r\n [hideStatusInclusion]=\"hideStatusInclusion\"\r\n (onChange)=\"onParamKitValueChange($event)\"></core-common-param-kit>\r\n </div>\r\n }\r\n\r\n <!-- @if (enableFilterKit) {\r\n <core-filter-kit \r\n [datePeriodComparisonFor]=\"datePeriodComparisonFor\"\r\n [enableTimeZoneConverterForDateTimePeriodParameters]=\"enableTimeZoneConverterForDateTimePeriodParameters\"\r\n [datePeriodComparisonForLabelKey]=\"datePeriodComparisonForLabelKey\"\r\n [statusInclusionFor]=\"statusInclusionFor\" \r\n [statusInclusionForLabelKey]=\"statusInclusionForLabelKey\"\r\n [statusOptionsApi]=\"statusOptionsApi\" \r\n [statusOptions$]=\"statusOptions$\" \r\n [showOrgParam]=\"showOrgParam\"\r\n [showOrgParamDropdown]=\"showOrgParamDropdown\"\r\n [hideGeneralSearch]=\"hideGeneralSearch\"\r\n [hideDatePeriodComparison]=\"hideDatePeriodComparison\"\r\n [hideStatusInclusion]=\"hideStatusInclusion\"\r\n (onChange)=\"onParamKitValueChange($event)\"\r\n ></core-filter-kit> \r\n } -->\r\n } @else {\r\n <core-tabs [headers]=\"tabHeaders\" [contents]=\"[]\" [height]=\"45\" [headerLineHeight]=\"45\"\r\n (onHeaderClick)=\"onCoreTabsHeaderClick($event)\">\r\n </core-tabs>\r\n <!-- <core-filter-kit \r\n [datePeriodComparisonFor]=\"datePeriodComparisonFor\"\r\n [enableTimeZoneConverterForDateTimePeriodParameters]=\"enableTimeZoneConverterForDateTimePeriodParameters\"\r\n [datePeriodComparisonForLabelKey]=\"datePeriodComparisonForLabelKey\"\r\n [statusInclusionFor]=\"statusInclusionFor\" \r\n [statusInclusionForLabelKey]=\"statusInclusionForLabelKey\"\r\n [statusOptionsApi]=\"statusOptionsApi\" \r\n [statusOptions$]=\"statusOptions$\" \r\n [showOrgParam]=\"showOrgParam\"\r\n [showOrgParamDropdown]=\"showOrgParamDropdown\"\r\n [hideGeneralSearch]=\"hideGeneralSearch\"\r\n [hideDatePeriodComparison]=\"hideDatePeriodComparison\"\r\n [hideStatusInclusion]=\"hideStatusInclusion\"\r\n (onChange)=\"onParamKitValueChange($event)\"\r\n ></core-filter-kit> -->\r\n }\r\n\r\n <ng-container *ngTemplateOutlet=\"top\">\r\n </ng-container>\r\n\r\n</ng-template>\r\n\r\n<ng-template #coreTable>\r\n\r\n <div [class.opacity0]=\"!!!geometricDone\">\r\n\r\n <!--\r\n Khi \u0111\u00E3 t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao compositionHeight c\u1EE7a core-composition\r\n C\u1EA7n t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao coreTableHeight c\u1EE7a CoreTable\r\n N\u1EBFu ph\u1EA7n top c\u1EE7a composition c\u1ED1 \u0111\u1ECBnh (v\u00ED d\u1EE5 khi s\u1EED d\u1EE5ng CoreParamKit) th\u00EC ph\u00E9p tr\u1EEB \u0111\u01A1n gi\u1EA3n\r\n Nh\u01B0ng n\u1EBFu ph\u1EA7n top \u0111\u01B0\u1EE3c customize, ta ph\u1EA3i s\u1EED d\u1EE5ng extraManualOffset\r\n\r\n C\u1EA7n t\u00EDnh tableHeight nh\u01B0 th\u1EBF n\u00E0o?\r\n -->\r\n <core-table #coreTableAlone width=\"100%\" [height]=\"tableHeight\" [rowHeight]=\"rowHeight || '46px'\" [wrap]=\"wrap\"\r\n [primaryKey]=\"primaryKey\"\r\n [columns]=\"columns\" [data]=\"list\" [showCheckbox]=\"!!!hideCheck\" headerHeight=\"60px\"\r\n [showTools]=\"showListInlineTools\" [tools]=\"inlineTools\" (onToolClick)=\"onToolClick($event)\"\r\n (onRowClick)=\"onRowClick($event)\" (onRowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (onSelectedIdsChange)=\"onSelectedIdsChange($event)\" (onSelectedDataChange)=\"onSelectedDataChange($event)\"\r\n [frozen]=\"frozen || 1\" (onSearching)=\"onSearching($event)\"\r\n (onColumnCaptionClick)=\"onColumnCaptionClick($event)\"\r\n [corePageListInstanceNumber]=\"corePageListInstanceNumber\" [loading]=\"loading\"\r\n [columnSearchDefaultOpen]=\"columnSearchDefaultOpen\" [lazyLoading]=\"true\" [headerWrap]=\"headerWrap\"\r\n [headerFirstRowHeight]=\"headerFirstRowHeight\" [noPaddingCell]=\"noPaddingCell\"\r\n [disableHighlightOnClick]=\"disableHighlightOnClick\" [primaryKey]=\"primaryKey\"></core-table>\r\n\r\n <div class=\"d-flex d-flex-between pagination-wrapper w-100\" #paginationContainer>\r\n <core-pagination-full [height]=\"paginationHeight\" [currentPage$]=\"currentPage$\" [pageSize$]=\"pageSize$\"\r\n [pageCount]=\"pageCount\" [innerBodyCount$]=\"innerBodyCount$\" [pagination$]=\"pagination$\"\r\n [loading]=\"loading\" [fixedPageSize]=\"fixedPageSize\" [background]=\"'#848484'\"></core-pagination-full>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n</ng-template>\r\n\r\n<core-api-progress *ngIf=\"longApiRunning\" (onClose)=\"onProgressWindowClose($event)\"></core-api-progress>\r\n\r\n<app-fullscreen-modal-loader *ngIf=\"prefetchLoading\"></app-fullscreen-modal-loader>", styles: [".core-page-list-container{--height: auto;box-sizing:border-box!important;border:none!important;height:var(--height)}.core-page-list-container *{box-sizing:border-box}.core-page-list-container .column-caption{text-align:center}.core-page-list-container core-pagination-full{width:100%}.core-page-list-container .filter-kit-dropdown{top:120px;right:120px;position:fixed;box-shadow:0 1rem 3rem #0000002e}\n"] }]
|
|
1850
1850
|
}], ctorParameters: () => [{ type: i1.CorePageListService }, { type: i2.CorePageListState }, { type: i3.CorePageEditService }, { type: i4.Router }, { type: i4.ActivatedRoute }, { type: i5.MultiLanguageService }, { type: i6.AlertService }, { type: i7.AuthService }, { type: i8.AppService }, { type: i9.DialogService }, { type: i10.RoutingService }, { type: i11.LongTaskService }, { type: i12.LayoutService }, { type: i13.CoreCompositionService }, { type: i14.CoreButtonGroupService }, { type: i15.JsonService }, { type: i16.WorkShiftDndService }, { type: i17.DomService }, { type: i18.FilterKitService }, { type: i19.CoreFilterHubService }], propDecorators: { normalMode: [{
|
|
1851
1851
|
type: Input
|
|
1852
1852
|
}], hideHeader: [{
|
|
@@ -2012,4 +2012,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
2012
2012
|
type: ViewChild,
|
|
2013
2013
|
args: ['fileImport']
|
|
2014
2014
|
}] } });
|
|
2015
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1wYWdlLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtcGFnZS1saXN0L2NvcmUtcGFnZS1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXBhZ2UtbGlzdC9jb3JlLXBhZ2UtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBb0MsU0FBUyxFQUFlLE1BQU0sRUFBRSxZQUFZLEVBQTRCLFNBQVMsR0FBRyxNQUFNLGVBQWUsQ0FBQztBQUNuTCxPQUFPLEVBQTBCLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsR0FBNEQsTUFBTSxvQ0FBb0MsQ0FBQztBQUlsSSxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBZ0IsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsR0FBRyxNQUFNLE1BQU0sQ0FBQztBQUN6SSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQztBQUM3RyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsMkJBQTJCLEVBQXVDLE1BQU0sZ0ZBQWdGLENBQUM7QUFLbEssT0FBTyxFQUFFLGtCQUFrQixFQUF3RixNQUFNLG9DQUFvQyxDQUFD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Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLDZCQUE2QjtzQkFBckMsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUkseUJBQXlCO3NCQUFsQyxNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRywwQkFBMEI7c0JBQW5DLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFFaUIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNjLHFCQUFxQjtzQkFBeEQsU0FBUzt1QkFBQyx1QkFBdUI7Z0JBQ0EsbUJBQW1CO3NCQUFwRCxTQUFTO3VCQUFDLHFCQUFxQjtnQkFDUCxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgVmlld0NoaWxkLCBUZW1wbGF0ZVJlZiwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgaXNEZXZNb2RlLCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBDb3JlVGFibGVDb21wb25lbnQsIElDb3JlVGFibGVUb29sQ2xpY2tFdmVudEVtaXR0ZXJEYXRhLCBJQ29yZVRhYmxlVG9vbEl0ZW0sIH0gZnJvbSAnLi4vY29yZS10YWJsZS9jb3JlLXRhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVQYWdlTGlzdFNlcnZpY2UsIElHZW5lcmF0ZVRlbXBsYXRlUmVxdWVzdCwgSUltcG9ydFhsc3hUb0RiUmVxdWVzdCB9IGZyb20gJy4vY29yZS1wYWdlLWxpc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVQYWdlRWRpdFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlLXBhZ2UtZWRpdC9jb3JlLXBhZ2UtZWRpdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZyb21FdmVudCwgbWFwLCBzd2l0Y2hNYXAsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvcmVQYWdlTGlzdFN0YXRlIH0gZnJvbSAnLi9jb3JlLXBhZ2UtbGlzdC5zdGF0ZSc7XHJcbmltcG9ydCB7IElDb3JlQnV0dG9uVk5TIH0gZnJvbSAnLi4vY29yZS1idXR0b24tZ3JvdXAtdm5zL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9JQ29yZUJ1dHRvblZOUyc7XHJcbmltcG9ydCB7IEVudW1Db3JlQnV0dG9uVk5TQ29kZSB9IGZyb20gJy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvRW51bUNvcmVCdXR0b25WTlNDb2RlJztcclxuaW1wb3J0IHsgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtZm9ybS1jb250cm9sLWJhc2UvY29yZS1mb3JtLWNvbnRyb2wtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29yZUNvbW1vblBhcmFtS2l0Q29tcG9uZW50LCBJQ29yZUNvbW1vblBhcmFtS2l0RXZlbnRFbWl0dGVyRGF0YSB9IGZyb20gJy4uL2NvcmUtY29tbW9uLXBhcmFtLWtpdC9jb3JlLWNvbW1vbi1wYXJhbS1raXQvY29yZS1jb21tb24tcGFyYW0ta2l0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExvbmdUYXNrU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvbmctdGFzay5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZUNvbXBvc2l0aW9uU2VydmljZSB9IGZyb20gJy4uL2NvcmUtY29tcG9zaXRpb24vY29yZS1jb21wb3NpdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZUJ1dHRvbkdyb3VwU2VydmljZSB9IGZyb20gJy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC1zZXJ2aWNlJztcclxuaW1wb3J0IHsgSUNvcmVCdXR0b25Hcm91cFN0YXR1cyB9IGZyb20gJy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC1zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW51bUZpbHRlck9wZXJhdG9yLCBJRmlsdGVyT3BlcmF0b3IsIElJbk9wZXJhdG9yLCBJUGFnaW5hdGlvbiwgSVF1ZXJ5TGlzdFJlcXVlc3QsIElTZWFyY2hJdGVtLCBJU29ydEl0ZW0gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lRdWVyeUxpc3RSZXF1ZXN0JztcclxuaW1wb3J0IHsgYXBpIH0gZnJvbSBcImFscGhhLWdsb2JhbC1jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgRW51bVRyYW5zbGF0ZUtleSB9IGZyb20gXCJhbHBoYS1nbG9iYWwtY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbXVsdGktbGFuZ3VhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBwU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUm91dGluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yb3V0aW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGF5b3V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBKc29uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2pzb24uc2VydmljZSc7XHJcbmltcG9ydCB7IGFsZXJ0T3B0aW9ucywgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvYWxlcnRPcHRpb25zJztcclxuaW1wb3J0IHsgSUZvcm1hdGVkUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lGb3JtYXRlZFJlc3BvbnNlJztcclxuaW1wb3J0IHsgSVF1ZXJ5TGlzdFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUXVlcnlMaXN0UmVzcG9uc2UnO1xyXG5pbXBvcnQgeyBkZWZhdWx0UGFnaW5nIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2RlZmF1bHRQYWdpbmcnO1xyXG5pbXBvcnQgeyBJSWRzUmVxdWVzdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSUlkc1JlcXVlc3QnO1xyXG5pbXBvcnQgeyBJVG9nZ2xlQWN0aXZlSWRzUmVxdWVzdCwgSVRvZ2dsZUFwcHJvdmVJZHNSZXF1ZXN0LCBJVG9uZ2xlVW5BcHByb3ZlSWRzUmVxdWVzdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVRvZ2dsZUFjdGl2ZUlkc1JlcXVlc3QnO1xyXG5pbXBvcnQgeyBFbnVtU29ydERpcmVjdGlvbiB9IGZyb20gJy4uLy4uL2VudW0vRW51bVNvcnREaXJlY3Rpb24nO1xyXG5pbXBvcnQgeyBJU3lzTXV0YXRpb25Mb2dCZWZvcmVBZnRlclJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lTeXNNdXRhdGlvbkxvZ0JlZm9yZUFmdGVyUmVxdWVzdCc7XHJcbmltcG9ydCB7IElDb3JlVGFibGVDb2x1bW5JdGVtIH0gZnJvbSAnLi4vY29yZS10YWJsZS9JQ29yZVRhYmxlQ29sdW1uSXRlbSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvcmVQYWdpbmF0aW9uRnVsbENvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtcGFnaW5hdGlvbi1mdWxsL2NvcmUtcGFnaW5hdGlvbi1mdWxsL2NvcmUtcGFnaW5hdGlvbi1mdWxsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVQYWdlSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1wYWdlLWhlYWRlci9jb3JlLXBhZ2UtaGVhZGVyL2NvcmUtcGFnZS1oZWFkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZUNvbXBvc2l0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1jb21wb3NpdGlvbi9jb3JlLWNvbXBvc2l0aW9uL2NvcmUtY29tcG9zaXRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZUFwaVByb2dyZXNzQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1hcGktcHJvZ3Jlc3MvY29yZS1hcGktcHJvZ3Jlc3MvY29yZS1hcGktcHJvZ3Jlc3MuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRnVsbHNjcmVlbk1vZGFsTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZnVsbHNjcmVlbi1tb2RhbC1sb2FkZXIvZnVsbHNjcmVlbi1tb2RhbC1sb2FkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSUNvcmVDaGVja2xpc3RPcHRpb24gfSBmcm9tICcuLi9jb3JlLWNoZWNrbGlzdC9jb3JlLWNoZWNrbGlzdC9jb3JlLWNoZWNrbGlzdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBXb3JrU2hpZnREbmRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvd29yay1zaGlmdC1kbmQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVUYWJzQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS10YWJzL2NvcmUtdGFicy9jb3JlLXRhYnMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRG9tU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RvbS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZUZpbHRlcktpdENvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtZmlsdGVyLWtpdC9jb3JlLWZpbHRlci1raXQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRmlsdGVyS2l0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpbHRlci1raXQuc2VydmljZSc7XHJcbmltcG9ydCB7IElDb3JlUGFyYW1Db250cm9sIH0gZnJvbSAnLi4vY29yZS1oZWFkZXItcGFyYW1zL2VudW0tYW5kLWludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb3JlRmlsdGVySHViU2VydmljZSB9IGZyb20gJy4uL2NvcmUtZmlsdGVyLWh1Yi9jb3JlLWZpbHRlci1odWIuc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVGaWx0ZXJIdWJDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlLWZpbHRlci1odWIvY29yZS1maWx0ZXItaHViLmNvbXBvbmVudCc7XHJcblxyXG4vKiBLaGkga2jDtG5nIGPDsyBkw7JuZyBuw6BvIMSRxrDhu6NjIHRpY2sgY2jhu41uLCBjw6FjIG7DunQgc2F1IHPhur0gxJHGsOG7o2Mg4bqpbiDEkWk6ICovXHJcbmNvbnN0IEVNUFRZX1NFTEVDVElPTl9ISURERU5fQlVUVE9OOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGVbXSA9IFtcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0VESVQsIC8vIFPhu61hXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9MT0NLLCAvLyBLaMOzYVxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVU5MT0NLLCAvLyBN4bufIGtow7NhXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9BQ1RJVkFURSwgLy8gw4FwIGThu6VuZ1xyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfSU5BQ1RJVkFURSwgLy8gTmfhu6tuZyDDoXAgZOG7pW5nXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9SRVNFVCwgLy8gUmVzZXQgKG3huq10IGto4bqpdSlcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NPUFksIC8vIFNhbyBjaMOpcFxyXG5cclxuICAvLyBDw6FjIHRo4buDIGxv4bqhaSBpblxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfUFJJTlQsXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9QUklOVF8yQyxcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1BSSU5UXzJDXzIwMDgsXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9QUklOVF8yQ185OCxcclxuICAvL1xyXG5cclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURSwgLy8geMOzYVxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQVBQUk9WRSwgLy8gcGjDqiBkdXnhu4d0XHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9SRUpFQ1QsIC8vIHThu6sgY2jhu5FpXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VTkFQUFJPVkUsIC8vIGLhu48gcGjDqiBkdXnhu4d0XHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9QRU5ESU5HX0FQUFJPVkUsIC8vIG3hu58gY2jhu50gcGjDqiBkdXnhu4d0XHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9MSVFVSURBVEVfQ09OVFJBQ1QsIC8vIHRoYW5oIGzDvSBo4bujcCDEkeG7k25nXHJcbl1cclxuXHJcbi8vZGVjbGFyZSBsZXQgY29yZUZpbGVVdGlsczogYW55O1xyXG4vL2ltcG9ydCB7IGNvcmVGaWxlVXRpbHMgfSBmcm9tICcuLi8uLi8uLi9hc3NldHMvanMvY29yZUZpbGVVdGlscyc7XHJcbi8vY29uc3QgYmxvYlRvQmFzZTY0ID0gY29yZUZpbGVVdGlscy5wcm90b3R5cGUuYmxvYlRvQmFzZTY0O1xyXG5cclxuY29uc3QgYmxvYlRvQmFzZTY0ID0gYXN5bmMgKGJsb2IpID0+IHtcclxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIF8pID0+IHtcclxuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcclxuICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiByZXNvbHZlKHJlYWRlci5yZXN1bHQpXHJcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKVxyXG4gIH0pXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVQYWdlTGlzdEFwaURlZmluaXRpb24ge1xyXG4gIHF1ZXJ5TGlzdFJlbGF0aXZlUGF0aDogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDb3JlUGFnZUxpc3RTZWFyY2hPYmplY3Qge1xyXG4gIHByZXZpb3VzOiBJU2VhcmNoSXRlbVtdO1xyXG4gIGN1cnJlbnQ6IElTZWFyY2hJdGVtW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVQYWdlTGlzdEVkaXRSb3V0aW5nIHtcclxuICBhdXhpbGlhcnk6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ29yZVBhZ2VMaXN0Q1JVRCB7XHJcbiAgZGVsZXRlSWRzPzogYXBpO1xyXG4gIHRvZ2dsZUFjdGl2ZUlkcz86IGFwaTtcclxuICB0b2dnbGVBcHByb3ZlSWRzPzogYXBpO1xyXG4gIHRvZ2dsZVVuYXBwcm92ZUlkcz86IGFwaTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJWGxzeEltcG9ydE9iamVjdCB7XHJcbiAgeGxzeFNpZDogc3RyaW5nLFxyXG4gIHhsc3hFeENvZGU6IHN0cmluZyxcclxuICB4bHN4U2Vzc2lvbjogbnVtYmVyLFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDb3JlUGFnZUxpc3RTdGF0dXNUYWIge1xyXG4gIGlkOiBudW1iZXIgfCBudWxsO1xyXG4gIGludGxDb2RlPzogc3RyaW5nO1xyXG4gIHRleHQ6IHN0cmluZztcclxuICBjb3VudDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDb3JlVGFibGVGbGF0Q29sdW1uSXRlbSB7XHJcbiAgY2FwdGlvbjogc3RyaW5nO1xyXG4gIGZpZWxkOiBzdHJpbmc7XHJcbiAgdHlwZT86IHN0cmluZztcclxuICBwaXBlPzogc3RyaW5nO1xyXG4gIGFsaWduPzogc3RyaW5nO1xyXG4gIHdpZHRoPzogbnVtYmVyO1xyXG4gIGhpZGRlbj86IGJvb2xlYW47XHJcbn1cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3JlLXBhZ2UtbGlzdCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBSb3V0ZXJNb2R1bGUsXHJcbiAgICBDb3JlVGFibGVDb21wb25lbnQsXHJcbiAgICBDb3JlUGFnaW5hdGlvbkZ1bGxDb21wb25lbnQsXHJcbiAgICBDb3JlUGFnZUhlYWRlckNvbXBvbmVudCxcclxuICAgIENvcmVDb21wb3NpdGlvbkNvbXBvbmVudCxcclxuICAgIENvcmVDb21tb25QYXJhbUtpdENvbXBvbmVudCxcclxuICAgIENvcmVBcGlQcm9ncmVzc0NvbXBvbmVudCxcclxuICAgIEZ1bGxzY3JlZW5Nb2RhbExvYWRlckNvbXBvbmVudCxcclxuICAgIENvcmVUYWJzQ29tcG9uZW50LFxyXG4gICAgQ29yZUZpbHRlcktpdENvbXBvbmVudCxcclxuICAgIENvcmVGaWx0ZXJIdWJDb21wb25lbnQsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29yZS1wYWdlLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvcmUtcGFnZS1saXN0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgICAgdXNlRXhpc3Rpbmc6IENvcmVQYWdlTGlzdENvbXBvbmVudCxcclxuICAgIH0sXHJcbiAgICBDb3JlUGFnZUxpc3RTdGF0ZSxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29yZVBhZ2VMaXN0Q29tcG9uZW50IGV4dGVuZHMgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIC8qIFdIRU4gWU9VIERPIE5PVCBXQU5UIFBPUFVQLCBwYXNzIFtub3JtYWxNb2RlXT1cInRydWVcIiAqL1xyXG4gIEBJbnB1dCgpIG5vcm1hbE1vZGUhOiBib29sZWFuO1xyXG4gIC8qIFNUQVJUOiBTb21lIHJvdXRlZCBjb21wb25lbnRzLCBzdWNoIGFzIFN0YWZmUHJvZmlsZSwgbWF5IGJlIHJldXNlZCBhcyByZWFkb25seSBmb3Igc2Vla2luZyAqL1xyXG4gIEBJbnB1dCgpIGhpZGVIZWFkZXIhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGhpZGVCdXR0b25Hcm91cCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2Vla2VyTW9kZSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgbWNjTW9kZSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaGVpZ2h0ITogbnVtYmVyO1xyXG4gIC8qIEVORDogU29tZSByb3V0ZWQgY29tcG9uZW50cywgc3VjaCBhcyBTdGFmZlByb2ZpbGUsIG1heSBiZSByZXVzZWQgYXMgcmVhZG9ubHkgZm9yIHNlZWtpbmcgKi9cclxuXHJcbiAgLyogY2hhbmdlIHRoZXNlIDIgcHJvcHMgdG8gd3JhcCBoZWFkZXIgdGV4dHMgKi9cclxuICBASW5wdXQoKSBoZWFkZXJXcmFwITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBoZWFkZXJGaXJzdFJvd0hlaWdodCE6IG51bWJlcjtcclxuICAvKiogKi9cclxuXHJcbiAgLyoqU2hvdyBQYXJhbUtpdCAqL1xyXG4gIEBJbnB1dCgpIGVuYWJsZVRpbWVab25lQ29udmVydGVyRm9yRGF0ZVRpbWVQZXJpb2RQYXJhbWV0ZXJzITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzaG93UGFyYW1LaXQhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGVuYWJsZUZpbHRlcktpdCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3IhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3JMYWJlbEtleSE6IEVudW1UcmFuc2xhdGVLZXk7XHJcbiAgQElucHV0KCkgc3RhdHVzSW5jbHVzaW9uRm9yITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHN0YXR1c0luY2x1c2lvbkZvckxhYmVsS2V5ITogRW51bVRyYW5zbGF0ZUtleTtcclxuICBASW5wdXQoKSBzdGF0dXNPcHRpb25zQXBpITogYXBpO1xyXG4gIEBJbnB1dCgpIHN0YXR1c09wdGlvbnMkOiBCZWhhdmlvclN1YmplY3Q8SUNvcmVDaGVja2xpc3RPcHRpb25bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElDb3JlQ2hlY2tsaXN0T3B0aW9uW10+KFtdKTtcclxuICBASW5wdXQoKSBzaG93T3JnUGFyYW0hOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHNob3dPcmdQYXJhbURyb3Bkb3duITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBoaWRlR2VuZXJhbFNlYXJjaCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaGlkZURhdGVQZXJpb2RDb21wYXJpc29uITogYm9vbGVhbjsgLy8gaWYgd2Ugd2FudCBub3QgdG8gdXNlIGRhdGUgcCBmaWx0ZXJcclxuICBASW5wdXQoKSBoaWRlU3RhdHVzSW5jbHVzaW9uITogYm9vbGVhbjsgLy8gaWYgd2Ugd2FudCBub3QgdG8gdXNlIHN0YXQgdXMgZmlsdGVyXHJcblxyXG4gIEBJbnB1dCgpIGZpbHRlck9wZXJhdG9ycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElGaWx0ZXJPcGVyYXRvcltdPihbXSk7XHJcblxyXG4gIEBJbnB1dCgpIGNhbWVsQ2FzZUR0b1N0YXR1c0lkRmllbGQhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZ3JpZFN0YXR1c0NvbHVtbiE6IHN0cmluZztcclxuXHJcbiAgLyoqRW5kIFNob3cgUGFyYW1LaXQgKi9cclxuXHJcbiAgQElucHV0KCkgdGl0bGUhOiBFbnVtVHJhbnNsYXRlS2V5O1xyXG4gIEBJbnB1dCgpIGhhc0lkT2ZTdHJpbmdUeXBlITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBoaWRlQ2hlY2shOiBib29sZWFuO1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGFwaURlZmluaXRpb24hOiBJQ29yZVBhZ2VMaXN0QXBpRGVmaW5pdGlvbjtcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBjb2x1bW5zITogSUNvcmVUYWJsZUNvbHVtbkl0ZW1bXTtcclxuICBASW5wdXQoKSBmcm96ZW4hOiBudW1iZXI7XHJcbiAgQElucHV0KCkgaW5saW5lVG9vbHMhOiBJQ29yZVRhYmxlVG9vbEl0ZW1bXTtcclxuICBASW5wdXQoKSBpbmxpbmVUb29sSXRlbXMhOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGVbXTtcclxuICBASW5wdXQoKSBlZGl0Um91dGUhOiBJQ29yZVBhZ2VMaXN0RWRpdFJvdXRpbmc7XHJcbiAgQElucHV0KCkgY3J1ZCE6IElDb3JlUGFnZUxpc3RDUlVEO1xyXG4gIEBJbnB1dCgpIHNob3dMaXN0SW5saW5lVG9vbHMhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHRvcCE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgbGVmdCE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgaGlkZUxlZnQhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIG91dGVyUGFyYW0kITogQmVoYXZpb3JTdWJqZWN0PGFueT47XHJcbiAgQElucHV0KCkgb3V0ZXJGaWx0ZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJRmlsdGVyT3BlcmF0b3JbXSB8IHVuZGVmaW5lZD4oW10pO1xyXG4gIEBJbnB1dCgpIG91dGVyU29ydCE6IElTb3J0SXRlbVtdO1xyXG4gIEBJbnB1dCgpIG91dGVyRmlsdGVyT3BlcmF0b3JzITogSUZpbHRlck9wZXJhdG9yW107XHJcbiAgQElucHV0KCkgb3V0ZXJJbk9wZXJhdG9ycyE6IElJbk9wZXJhdG9yW10gfCBudWxsO1xyXG4gIEBJbnB1dCgpIGF1dG9SZXNpemVXaXRoV2luZG93ITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBleHRyYU1hbnVhbE9mZnNldCE6IG51bWJlcjtcclxuICBASW5wdXQoKSB3cmFwITogYm9vbGVhbjtcclxuICBASW5wdXQoKSByb3dIZWlnaHQhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2VsZlJlc29sdmVDb3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrITogYm9vbGVhbjsgLy8gVGhlIGNhbGxlciB3aWxsIGl0c2VsZiByZXNvbHZlIGV2ZW50cyBlbW1pdGVkIGJ5IENvcmVQYWdlSGVhZGVyIGJ1dHRvbnMgKGZvciBzb21lKVxyXG4gIEBJbnB1dCgpIGNsZWFyRGF0YSQhOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XHJcbiAgQElucHV0KCkgZGVsZXRlVmFsaWRhdGVGbiE6IEZ1bmN0aW9uO1xyXG4gIEBJbnB1dCgpIGdlbmVyYXRlVGVtcGxhdGVSZXF1ZXN0ITogSUdlbmVyYXRlVGVtcGxhdGVSZXF1ZXN0O1xyXG4gIEBJbnB1dCgpIGltcG9ydFByZXZpZXdQYXRoITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGNvbHVtblNlYXJjaERlZmF1bHRPcGVuITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBmaXhlZFBhZ2VTaXplITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVEb3VibGVDbGljayE6IGJvb2xlYW47XHJcblxyXG4gIEBJbnB1dCgpIG5vUGFkZGluZ0NlbGwhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVIaWdobGlnaHRPbkNsaWNrITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBsb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIEBJbnB1dCgpIGV4Y2x1ZGVkSWRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyW10+KFtdKTtcclxuXHJcbiAgQElucHV0KCkgZGlzYWJsZURpYWxvZ0luZm9ybWF0aW9uTGluZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgY2hhbmdlVHJhY2tpbmchOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHByaW1hcnlLZXk6IHN0cmluZyA9ICdpZCc7IC8vICdpZCcgb3IgJ3ZpcnR1YWxJZCdcclxuICBASW5wdXQoKSBjaGFuZ2VkSXRlbXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xyXG5cclxuICBASW5wdXQoKSB0YWJNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcGFyYW1Sb3dzITogSUNvcmVQYXJhbUNvbnRyb2xbXVtdO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVGaWx0ZXJIdWIhOiBib29sZWFuO1xyXG5cclxuICBAT3V0cHV0KCkgY29yZVBhZ2VIZWFkZXJCdXR0b25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8SUNvcmVCdXR0b25WTlM+KCk7XHJcbiAgQE91dHB1dCgpIHJvd0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSByb3dEb3VibGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWRJZHNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkRGF0YUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25JbnN0YW5jZUNyZWF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuICBAT3V0cHV0KCkgb25JbnB1dEZpbGVCYXNlNjREYXRhUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGxpc3RDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xyXG5cclxuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXIhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2NvcmVQYWdlTGlzdENvbnRhaW5lcicpIGNvcmVQYWdlTGlzdENvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgncGFnaW5hdGlvbkNvbnRhaW5lcicpIHBhZ2luYXRpb25Db250YWluZXIhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2ZpbGVJbXBvcnQnKSBmaWxlSW1wb3J0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgZ2VvbWV0cmljRG9uZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBoZWlnaHRSZXNpemluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhlaWdodCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgdG9wUGxhY2VIZWlnaHQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG5cclxuICByZXNpemVIZWlnaHRGbGFnJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBwYWdpbmF0aW9uSGVpZ2h0ITogbnVtYmVyO1xyXG4gIGNvbXBvc2l0aW9uSGVpZ2h0ITogbnVtYmVyO1xyXG4gIGNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyITogbnVtYmVyO1xyXG4gIGRpYWxvZ0luc3RhbmNlTnVtYmVyITogbnVtYmVyO1xyXG5cclxuICByZXNpemVTdHJlYW0kID0gZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpO1xyXG5cclxuICBjbGlja0dlbmVyYXRlVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG5cclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHF1ZXJ5TGlzdFN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcclxuICBsb2FkaW5nITogYm9vbGVhbjtcclxuXHJcbiAgc2VsZWN0ZWRJZHM6IHN0cmluZ1tdIHwgbnVtYmVyW10gPSBbXTtcclxuICBzZWxlY3RlZERhdGE6IGFueVtdID0gW107XHJcblxyXG4gIGlzQWRtaW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgdmlld0luaXREb25lITogYm9vbGVhbjtcclxuXHJcbiAgLyogc3RhcnQ6IHBhc3NpbmcgdGhpcyB2YXIgdG8gUGFnaW5hdGlvbiAqL1xyXG5cclxuICBwYWdlQ291bnQhOiBudW1iZXI7XHJcblxyXG4gIC8vIFBhc3NpbmcgQmVoYXZpb3JTdWJqZWN0IHRvIG90aGVyIGNvbXBvbmVudCBpcyBsaWtlIHVzaW5nIGEgc2VydmljZSAodGhhdCBob2xkcyB0aGlzIEJlaGF2aW9yU3ViamVjdCkgaW5qZWN0ZWQgdG8gYm90aCBjb21wb25lbnRzXHJcbiAgY3VycmVudFBhZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDEpO1xyXG5cclxuICAvKiBlbmQ6IHBhc3NpbmcgdGhpcyB2YXIgdG8gUGFnaW5hdGlvbiAqL1xyXG5cclxuICBwYWdlU2l6ZSQhOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPjtcclxuXHJcbiAgZmlsdGVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcclxuXHJcbiAgaW5PcGVyYXRvcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJSW5PcGVyYXRvcltdPihbXSk7XHJcbiAgZ2VuZXJhbFNlYXJjaCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xyXG4gIHNlYXJjaCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElDb3JlUGFnZUxpc3RTZWFyY2hPYmplY3QgfCBudWxsPihudWxsKTtcclxuICBzb3J0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVNvcnRJdGVtW10+KFtdKTtcclxuICBwYWdpbmF0aW9uJCE6IEJlaGF2aW9yU3ViamVjdDxJUGFnaW5hdGlvbj47XHJcbiAgZm9yY2VSZWxvYWRpbmdGbGFnJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHF1ZXJ5TGlzdFJlcXVlc3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJUXVlcnlMaXN0UmVxdWVzdD4oeyBsYW5nOiAndmknLCBkdG9TdGF0dXNJZEZpZWxkOiB0aGlzLmNhbWVsQ2FzZUR0b1N0YXR1c0lkRmllbGQgfSk7XHJcbiAgcXVlcnlMaXN0U3RyZWFtJCE6IE9ic2VydmFibGU8YW55PjtcclxuICBpbm5lckJvZHlDb3VudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMSk7XHJcblxyXG4gIHBhdXNlU3Vic2N0aXB0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbGlzdCE6IGFueVtdO1xyXG4gIC8vY2hhbmdlZExpc3Q6IGFueVtdID0gW107XHJcbiAgdGFibGVIZWlnaHQhOiBudW1iZXI7XHJcbiAgYXZhaWxhYmxlQ29sdW1uc0ZvckdlbmVyYWxTZWFyY2ghOiBzdHJpbmdbXTtcclxuICBkYXRhSW1wb3J0ITogYW55O1xyXG4gIHBlbmRpbmdBY3Rpb24hOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGUgfCBudWxsO1xyXG4gIGlkU3RhdGU6IGFueTtcclxuICB0ZW1wbGF0ZUZpbGVOYW1lITogc3RyaW5nO1xyXG5cclxuICBsb25nQXBpUnVubmluZyE6IGJvb2xlYW47XHJcbiAgcHJlZmV0Y2hMb2FkaW5nITogYm9vbGVhbjtcclxuXHJcbiAgYnV0dG9uR3JvdXBTdGF0dXMhOiBJQ29yZUJ1dHRvbkdyb3VwU3RhdHVzO1xyXG5cclxuICBleHBvcnRDb3JlUGFnZUxpc3RHcmlkVG9FeGNlbFN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgc3RhdHVzVGFiczogTWFwPG51bWJlciwgSUNvcmVQYWdlTGlzdFN0YXR1c1RhYj4gPSBuZXcgTWFwKCk7XHJcbiAgdGFiSGVhZGVyczogc3RyaW5nW10gPSBbXTtcclxuICBmaWx0ZXJLaXRaSW5kZXghOiBudW1iZXI7XHJcblxyXG4gIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uZmlybWF0aW9uQ29sdW1ucyE6IElDb3JlVGFibGVDb2x1bW5JdGVtW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjb3JlUGFnZUxpc3RTZXJ2aWNlOiBDb3JlUGFnZUxpc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlUGFnZUxpc3RTdGF0ZTogQ29yZVBhZ2VMaXN0U3RhdGUsXHJcbiAgICBwcml2YXRlIGNvcmVQYWdlRWRpdFNlcnZpY2U6IENvcmVQYWdlRWRpdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIG1sczogTXVsdGlMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFwcFNlcnZpY2U6IEFwcFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRpbmdTZXJ2aWNlOiBSb3V0aW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgbG9uZ1Rhc2tTZXJ2aWNlOiBMb25nVGFza1NlcnZpY2UsXHJcbiAgICBwdWJsaWMgbGF5b3V0U2VydmljZTogTGF5b3V0U2VydmljZSxcclxuICAgIHByaXZhdGUgY29yZUNvbXBvc2l0aW9uU2VydmljZTogQ29yZUNvbXBvc2l0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgY29yZUJ1dHRvbkdyb3VwU2VydmljZTogQ29yZUJ1dHRvbkdyb3VwU2VydmljZSxcclxuICAgIHByaXZhdGUganNvblNlcnZpY2U6IEpzb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB3b3JrU2hpZnREbmRTZXJ2aWNlOiBXb3JrU2hpZnREbmRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkb21TZXJ2aWNlOiBEb21TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmaWx0ZXJLaXRTZXJ2aWNlOiBGaWx0ZXJLaXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlRmlsdGVySHViU2VydmljZTogQ29yZUZpbHRlckh1YlNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcblxyXG4gICAgaWYgKCEhIXRoaXMuaW5saW5lVG9vbEl0ZW1zKSB7XHJcbiAgICAgIHRoaXMuaW5saW5lVG9vbEl0ZW1zID0gW1xyXG4gICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRURJVCxcclxuICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURVxyXG4gICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG5hdmlnYXRpb24gPSB0aGlzLnJvdXRlcj8uZ2V0Q3VycmVudE5hdmlnYXRpb24oKVxyXG4gICAgaWYgKG5hdmlnYXRpb24pIHtcclxuICAgICAgY29uc3QgZXh0cmFzID0gbmF2aWdhdGlvbi5leHRyYXM7XHJcbiAgICAgIGlmICghIWV4dHJhcyAmJiAnc3RhdGUnIGluIGV4dHJhcykge1xyXG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbyhgQ29yZVBhZ2VMaXN0IGlzIHVzaW5nIG9sZCBpbnN0YW5jZSBudW1iZXIgJHt0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyfWAsIGFsZXJ0T3B0aW9ucylcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCEhZXh0cmFzLnN0YXRlICYmICdpZCcgaW4gZXh0cmFzLnN0YXRlISkge1xyXG4gICAgICAgICAgdGhpcy5pZFN0YXRlID0gZXh0cmFzLnN0YXRlWydpZCddO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoISFleHRyYXMuc3RhdGUgJiYgJ2luc3RhbmNlTnVtYmVyJyBpbiBleHRyYXMuc3RhdGUhKSB7XHJcbiAgICAgICAgICB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyID0gZXh0cmFzLnN0YXRlWydpbnN0YW5jZU51bWJlciddO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiBUSElTIENPREUgV0lMTCBERUZJTkUgb3V0ZXJQYXJhbSQgRklMVEVSIGZvciBpbXBvcnQgcHJldmlldyB0YXNrICovXHJcbiAgICBpZiAobmF2aWdhdGlvbj8uZXh0cmFzPy5zdGF0ZSkge1xyXG4gICAgICBjb25zdCBpbXBvcnRQcmV2aWV3T3V0ZXJQYXJhbSA9IG5hdmlnYXRpb24/LmV4dHJhcz8uc3RhdGUhW1wiaW1wb3J0UHJldmlld091dGVyUGFyYW1cIl1cclxuICAgICAgaWYgKCEhdGhpcy5vdXRlclBhcmFtJCkge1xyXG4gICAgICAgIGlmICghIXRoaXMub3V0ZXJQYXJhbSQ/LnZhbHVlKSB7XHJcbiAgICAgICAgICBpZiAoISFpbXBvcnRQcmV2aWV3T3V0ZXJQYXJhbSkge1xyXG4gICAgICAgICAgICBsZXQgbmV3T3V0ZXJQYXJhbSA9IHRoaXMub3V0ZXJQYXJhbSQudmFsdWU7XHJcbiAgICAgICAgICAgIG5ld091dGVyUGFyYW0gPSB7XHJcbiAgICAgICAgICAgICAgLi4ubmV3T3V0ZXJQYXJhbSxcclxuICAgICAgICAgICAgICAuLi5pbXBvcnRQcmV2aWV3T3V0ZXJQYXJhbSxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm91dGVyUGFyYW0kLm5leHQobmV3T3V0ZXJQYXJhbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICghIWltcG9ydFByZXZpZXdPdXRlclBhcmFtKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3V0ZXJQYXJhbSQubmV4dChpbXBvcnRQcmV2aWV3T3V0ZXJQYXJhbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghIWltcG9ydFByZXZpZXdPdXRlclBhcmFtKSB7XHJcbiAgICAgICAgICB0aGlzLm91dGVyUGFyYW0kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KGltcG9ydFByZXZpZXdPdXRlclBhcmFtKVxyXG4gICAgICAgICAgdGhpcy5vdXRlclBhcmFtU3Vic2NyaWJlRm4oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcbiAgICBpZiAoISEhdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcikgdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmluc3RhbmNlcy5wdXNoKHtcclxuICAgICAgaW5zdGFuY2VOdW1iZXI6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIsXHJcbiAgICAgIHJlbG9hZEZsYWckOiBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKSxcclxuICAgICAgaWQkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCksXHJcbiAgICAgIHZpcnR1YWxJZCQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKSxcclxuICAgICAgdGJvZHlIZWlnaHQkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCksXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoISF0aGlzLmlkU3RhdGUpIHtcclxuICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgIGlkOiB0aGlzLmlkU3RhdGVcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRlbXBsYXRlRmlsZU5hbWUgPSB0aGlzLmdlbmVyYXRlVGVtcGxhdGVSZXF1ZXN0Py5leENvZGU7XHJcblxyXG4gICAgaWYgKCEhdGhpcy5vdXRlckZpbHRlciQpIHtcclxuICAgICAgdGhpcy5vdXRlckZpbHRlciQuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgIHRoaXMub3V0ZXJGaWx0ZXJPcGVyYXRvcnMgPSB4IHx8IFtdO1xyXG4gICAgICAgIHRoaXMubWVyZ2VGaWx0ZXJPcGVyYXRvcigpO1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydvdXRlckluT3BlcmF0b3JzJ10pIHtcclxuICAgICAgY29uc3QgY3VycmVudEluT3BlcmF0b3JzOiBJSW5PcGVyYXRvcltdID0gdGhpcy5pbk9wZXJhdG9ycyQudmFsdWU7XHJcbiAgICAgIGNvbnN0IGNoYW5nZWRJbk9wZXJhdG9yczogSUluT3BlcmF0b3JbXSA9IGNoYW5nZXNbJ291dGVySW5PcGVyYXRvcnMnXS5jdXJyZW50VmFsdWUgfHwgW107XHJcbiAgICAgIGNvbnN0IHJlbWFpbkluT3BlcmF0b3JzID0gY3VycmVudEluT3BlcmF0b3JzLmZpbHRlcih4ID0+ICEhIWNoYW5nZWRJbk9wZXJhdG9ycy5maWx0ZXIoeSA9PiB5LmZpZWxkID09PSB4LmZpZWxkKS5sZW5ndGgpO1xyXG4gICAgICBjb25zdCBuZXdJbk9wZXJhdG9ycyA9IFsuLi5yZW1haW5Jbk9wZXJhdG9ycywgLi4uY2hhbmdlZEluT3BlcmF0b3JzXTtcclxuXHJcbiAgICAgIHRoaXMuaW5PcGVyYXRvcnMkLm5leHQobmV3SW5PcGVyYXRvcnMpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2NhbWVsQ2FzZUR0b1N0YXR1c0lkRmllbGQnXSkge1xyXG4gICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgZHRvU3RhdHVzSWRGaWVsZDogY2hhbmdlc1snY2FtZWxDYXNlRHRvU3RhdHVzSWRGaWVsZCddLmN1cnJlbnRWYWx1ZVxyXG4gICAgICB9KVxyXG5cclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydjb2x1bW5zJ10pIHtcclxuICAgICAgdGhpcy5jb25maXJtYXRpb25Db2x1bW5zID0gY2hhbmdlc1snY29sdW1ucyddLmN1cnJlbnRWYWx1ZT8uZmlsdGVyKHggPT4gISF4LnNob3dGb3JDb25maXJtYXRpb24pIHx8IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzWydoZWlnaHQnXSkge1xyXG5cclxuICAgICAgLy8gS2jDtG5nIHRo4buDIHTDrW5oIMSRxrDhu6NjIHPhu5EgxJFvIGjDrG5oIGjhu41jIG7hur91IEFmdGVyVmlld0luaXQgY2jGsGEgY2jhuqF5XHJcbiAgICAgIC8vIE7Dqm4g4bufIMSRw6J5IHRhIGNo4buJIMSRxqFuIGdp4bqjbiBsw6AgZ8OhbiB0aGF5IMSR4buVaSBj4bunYSBoZWlnaHQgdsOgbyBoZWlnaHQkXHJcbiAgICAgIHRoaXMuaGVpZ2h0JC5uZXh0KGNoYW5nZXNbJ2hlaWdodCddLmN1cnJlbnRWYWx1ZSk7XHJcblxyXG4gICAgICBpZiAoISFjaGFuZ2VzWydoZWlnaHQnXSkge1xyXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlVGFibGVIZWlnaHRCYXNlZE9uSGVpZ2h0QW5kVG9wUmVmSGVpZ2h0KGNoYW5nZXNbJ2hlaWdodCddLmN1cnJlbnRWYWx1ZSwgdGhpcy50b3BQbGFjZUhlaWdodCQudmFsdWUpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qXHJcbiAgICAgIGlmICghIWNoYW5nZXNbJ2hlaWdodCddLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgIC8vIE7hur91IGNoaeG7gXUgY2FvIGPhu6dhIENvcmVQYWdlTGlzdCDEkcaw4bujYyB0cnV54buBbiB2w6BvXHJcbiAgICAgICAgLy8gVGjDrCBj4bqnbiB0w61uaCBjaGnhu4F1IGNhbyBj4bunYSBDb3JlQ29tcG9zaXRpb24gPSB0aGlzLmhlaWdodFxyXG4gICAgICAgIC8vIE7hur91IGhp4buDbiB0aOG7iyBDb3JlUGFnZUhlYWRlciB0aMOsIGPhuqduIHRy4burIHRp4bq/cCDEkWkgY29yZVBhZ2VIZWFkZXJIZWlnaHRcclxuICAgICAgICB0aGlzLmNvbXBvc2l0aW9uSGVpZ2h0ID0gY2hhbmdlc1snaGVpZ2h0J10uY3VycmVudFZhbHVlIC0gKCEhdGhpcy5oaWRlSGVhZGVyID8gMCA6IHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnZUhlYWRlckhlaWdodCk7XHJcbiAgICAgICAgLy8gVMOtbmggbHXDtG4gY2hp4buBdSBjYW8gdGFibGVIZWlnaHRcclxuICAgICAgICAvLyBO4bq/dSBleHRyYU1hbnVhbE9mZnNldCDEkcaw4bujYyB0cnV54buBbiB2w6BvIG3hu5l0IGPDoWNoIHRo4bunIGPDtG5nXHJcbiAgICAgICAgaWYgKCEhdGhpcy5leHRyYU1hbnVhbE9mZnNldCkge1xyXG4gICAgICAgICAgdGhpcy50YWJsZUhlaWdodCA9IGNoYW5nZXNbJ2hlaWdodCddLmN1cnJlbnRWYWx1ZSAtIHRoaXMuZXggdHJhTWFudWFsT2Zmc2V0IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdpbmF0aW9uSGVpZ2h0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBD4bqnbiB0w61uaCBjaGnhu4F1IGNhbyBj4bunYSBwaOG6p24gdG9wIGtoaSBob29rIEFmdGVyVmlld0luaXQgxJHGsOG7o2Mga8OtY2ggaG/huqF0XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgICovXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXNbJ291dGVyRmlsdGVyT3BlcmF0b3JzJ10pIHtcclxuICAgICAgdGhpcy5tZXJnZUZpbHRlck9wZXJhdG9yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5xdWVyeUxpc3RTdWJzY3JpYmUoKTtcclxuXHJcbiAgfVxyXG5cclxuICAvKiBRdWVyeUxpc3Qgc3ViICovXHJcbiAgc3Vic2NyaWJlUXVlcnlMaXN0KHg6IGFueSkge1xyXG4gICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgY29uc3QgaW5uZXJCb2R5OiBJUXVlcnlMaXN0UmVzcG9uc2UgPSBib2R5LmlubmVyQm9keTtcclxuICAgICAgICBpZiAoISFpbm5lckJvZHkpIHtcclxuXHJcbiAgICAgICAgICAvKiAjcmVnaW9uIFRyaWNraWx5IHJlc2V0IGlkJCwgdG1wRmlsdGVyJCBhbmQgdG1wSW5PcGVyYXRvcnMkICovXHJcbiAgICAgICAgICB0aGlzLnBhdXNlU3Vic2N0aXB0aW9uID0gdHJ1ZTsgLy8gPD09IFBhdXNlXHJcblxyXG4gICAgICAgICAgY29uc3QgbmV3UXVlcnlMaXN0UmVxdWVzdCA9IHRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWU7XHJcblxyXG4gICAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTdGF0ZS5pZCQubmV4dChudWxsKVxyXG4gICAgICAgICAgbmV3UXVlcnlMaXN0UmVxdWVzdC5pZCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgLyogVGhpcyBjb2RlIGJsb2NrIHJhaXNlcyBhIGJ1ZyBnZW5lcmFsbHkgKi9cclxuICAgICAgICAgIC8vIGlmICghIXRoaXMuY29yZVBhZ2VMaXN0U3RhdGUuaWQkLnZhbHVlKSB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuY29yZVBhZ2VMaXN0U3RhdGUuaWQkLm5leHQobnVsbClcclxuICAgICAgICAgIC8vICAgbmV3UXVlcnlMaXN0UmVxdWVzdC5pZCA9IG51bGw7XHJcbiAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gICBuZXdRdWVyeUxpc3RSZXF1ZXN0LmlkID0gbnVsbDtcclxuICAgICAgICAgIC8vIH07XHJcblxyXG4gICAgICAgICAgaWYgKCEhdGhpcy50bXBGaWx0ZXJBY3RpdmUpIHtcclxuICAgICAgICAgICAgY29uc3Qgb2xkRmlsdGVyID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnByaW1hcnlGaWx0ZXIpKTtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXIkLm5leHQob2xkRmlsdGVyKTtcclxuICAgICAgICAgICAgbmV3UXVlcnlMaXN0UmVxdWVzdC5maWx0ZXIgPSBvbGRGaWx0ZXI7XHJcbiAgICAgICAgICAgIHRoaXMucHJpbWFyeUZpbHRlciA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy50bXBGaWx0ZXJBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoISF0aGlzLnRtcEluT3BlcmF0b3JzQWN0aXZlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9sZEluT3BlcnRvcnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMucHJpbWFyeUluT3BlcmF0b3JzKSk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5PcGVyYXRvcnMkLm5leHQob2xkSW5PcGVydG9ycyk7XHJcbiAgICAgICAgICAgIG5ld1F1ZXJ5TGlzdFJlcXVlc3QuaW5PcGVyYXRvcnMgPSBvbGRJbk9wZXJ0b3JzO1xyXG4gICAgICAgICAgICB0aGlzLnByaW1hcnlJbk9wZXJhdG9ycyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcEluT3BlcmF0b3JzQWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KG5ld1F1ZXJ5TGlzdFJlcXVlc3QpO1xyXG5cclxuICAgICAgICAgIHRoaXMucGF1c2VTdWJzY3RpcHRpb24gPSBmYWxzZTsgLy8gPD09IEFjdGl2ZSBiYWNrIGFnYWluXHJcblxyXG4gICAgICAgICAgLyogI2VuZHJlZ2lvbiBUcmlja2lseSByZXNldCBpZCQsIHRtcEZpbHRlciQgYW5kIHRtcEluT3BlcmF0b3JzJCAqL1xyXG5cclxuICAgICAgICAgIHRoaXMubGlzdCA9IGlubmVyQm9keS5saXN0IHx8IFtdO1xyXG5cclxuICAgICAgICAgIC8vIHNlbGVjdCB0aG9zZSBsaW5lcyBtYXJrZWQgYXMgY2hhbmdlZCBmcm9tIHRoZSBjYWNoZSBhbmQgdXBkYXRlIHRoZSBuZXcgbGlzdFxyXG4gICAgICAgICAgaWYgKCEhdGhpcy5jaGFuZ2VUcmFja2luZykge1xyXG4gICAgICAgICAgICB0aGlzLmxpc3QubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRyeUZpbmQgPSB0aGlzLmNoYW5nZWRJdGVtcyQudmFsdWUuZmlsdGVyKHggPT4geFt0aGlzLnByaW1hcnlLZXldID09PSBpdGVtW3RoaXMucHJpbWFyeUtleV0pO1xyXG4gICAgICAgICAgICAgIGlmICh0cnlGaW5kLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0W2luZGV4XSA9IHRyeUZpbmRbMF07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLndvcmtTaGlmdERuZFNlcnZpY2Uuc2hpZnRDb2xsZWN0aW9uT3BlbiQubmV4dChmYWxzZSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5saXN0Q2hhbmdlLmVtaXQodGhpcy5saXN0KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmlubmVyQm9keUNvdW50JC5uZXh0KGlubmVyQm9keS5jb3VudCEpO1xyXG4gICAgICAgICAgdGhpcy5wYWdlQ291bnQgPSBNYXRoLmNlaWwoaW5uZXJCb2R5LmNvdW50ISAvIHRoaXMucGFnZVNpemUkLnZhbHVlKTtcclxuXHJcbiAgICAgICAgICBpZiAoaW5uZXJCb2R5LnBhZ2UgIT09IHRoaXMuY3VycmVudFBhZ2UkLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGF1c2VTdWJzY3RpcHRpb24gPSB0cnVlOyAvLyA8PT0gUGF1c2VcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSQubmV4dChpbm5lckJvZHkucGFnZSEpO1xyXG4gICAgICAgICAgICB0aGlzLnBhdXNlU3Vic2N0aXB0aW9uID0gZmFsc2U7IC8vIDw9PSBBY3RpdmUgYmFjayBhZ2FpblxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFVwZGF0ZSB0YWJIZWFkZXJzXHJcbiAgICAgICAgICBpZiAodGhpcy50YWJNb2RlICYmIGlubmVyQm9keS5zdGF0dXNDb3VudHMpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3VGFiSGVhZGVyczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXNUYWJzLmZvckVhY2goc3RhdHVzVGFiID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IGlubmVyQm9keS5zdGF0dXNDb3VudHNbc3RhdHVzVGFiLmlkIS50b1N0cmluZygpXSB8fCAwO1xyXG4gICAgICAgICAgICAgIHN0YXR1c1RhYi5jb3VudCA9IGNvdW50O1xyXG4gICAgICAgICAgICAgIG5ld1RhYkhlYWRlcnMucHVzaChgJHtzdGF0dXNUYWIudGV4dH0gKCR7Y291bnR9KWApO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGlzLnRhYkhlYWRlcnMgPSBuZXdUYWJIZWFkZXJzO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5saXN0ID0gW107XHJcbiAgICAgICAgICB0aGlzLmxpc3RDaGFuZ2UuZW1pdChbXSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5wYWdlQ291bnQgPSAwO1xyXG4gICAgICAgICAgLy90aGlzLnJlc3BvbnNlU2VydmljZS5yZXNvbHZlKGJvZHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLmxpc3RDaGFuZ2UuZW1pdChbXSk7XHJcblxyXG4gICAgICAgIHRoaXMucGFnZUNvdW50ID0gMDtcclxuICAgICAgICAvL3RoaXMucmVzcG9uc2VTZXJ2aWNlLnJlc29sdmUoYm9keSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAvLyAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAvLyAgICAgSlNPTi5zdHJpbmdpZnkoeCwgbnVsbCwgMiksXHJcbiAgICAgIC8vICAgICBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9uc1xyXG4gICAgICAvLyAgICk7XHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG1lcmdlRmlsdGVyT3BlcmF0b3IoKTogdm9pZCB7XHJcbiAgICAvKiBTVEFSVDogTWVyZ2UgZmlsdGVyT3BlcmF0b3Igd2l0aCBvdXRlciBvbmUgKi9cclxuICAgIGlmICghIXRoaXMub3V0ZXJGaWx0ZXJPcGVyYXRvcnMpIHtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyT3BlcmF0b3JzJC52YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRGaWx0ZXJPcGVyYXRvcnM6IElGaWx0ZXJPcGVyYXRvcltdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlck9wZXJhdG9ycyQudmFsdWUpKTtcclxuICAgICAgICB0aGlzLm91dGVyRmlsdGVyT3BlcmF0b3JzLm1hcCgob2ZvKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBjdXJyZW50RmlsdGVyT3BlcmF0b3JzLmZpbHRlcigobykgPT4gby5maWVsZCA9PT0gb2ZvLmZpZWxkICYmIG8ub3BlcmF0b3IgPT09IG9mby5vcGVyYXRvcik7XHJcbiAgICAgICAgICAvLyBvcHRpbWlzdGljYWxseSBmaWx0ZXIubGVuZ3RoID09PSAxXHJcbiAgICAgICAgICBpZiAoISFmaWx0ZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZpbHRlclswXS5kYXRlVGltZVZhbHVlID0gb2ZvLmRhdGVUaW1lVmFsdWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjdXJyZW50RmlsdGVyT3BlcmF0b3JzLnB1c2gob2ZvKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmZpbHRlck9wZXJhdG9ycyQubmV4dChjdXJyZW50RmlsdGVyT3BlcmF0b3JzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZpbHRlck9wZXJhdG9ycyQubmV4dCh0aGlzLm91dGVyRmlsdGVyT3BlcmF0b3JzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyogRU5EOiBDcmVhdGUvTWVyZ2UvT3ZlcndyaXRlIGZpbHRlck9wZXJhdG9yIHdpdGggb3V0ZXIgb25lICovXHJcbiAgfVxyXG4gIHRtcEZpbHRlckFjdGl2ZSE6IGJvb2xlYW47XHJcbiAgdG1wSW5PcGVyYXRvcnNBY3RpdmUhOiBib29sZWFuO1xyXG4gIHByaW1hcnlGaWx0ZXIhOiBhbnk7XHJcbiAgcHJpbWFyeUluT3BlcmF0b3JzITogSUluT3BlcmF0b3JbXTtcclxuXHJcbiAgb3V0ZXJQYXJhbVN1YnNjcmliZUZuKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMub3V0ZXJQYXJhbSQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgLy8gbWVyZ2Ugb3Igb3ZlcndyaXJlIGN1cnJlbnQgZmlsdGVyXHJcbiAgICAgICAgY29uc3QgY3VycmVudEZpbHRlciA9IHRoaXMuZmlsdGVyJC52YWx1ZTtcclxuICAgICAgICBpZiAoISFjdXJyZW50RmlsdGVyKSB7XHJcbiAgICAgICAgICBjb25zdCBuZXdGaWx0ZXIgPSB7XHJcbiAgICAgICAgICAgIC4uLmN1cnJlbnRGaWx0ZXIsXHJcbiAgICAgICAgICAgIC4uLngsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXIkLm5leHQobmV3RmlsdGVyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXIkLm5leHQoeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgIC8vIGNoZWNrIGZvciBzaG93Rm9yQ29uZmlybWF0aW9uXHJcbiAgICBjb25zdCBjaGVjayA9IHRoaXMuY29sdW1ucy5maWx0ZXIoeCA9PiAhIXguc2hvd0ZvckNvbmZpcm1hdGlvbik7XHJcbiAgICBpZiAoY2hlY2subGVuZ3RoID09PSAwICYmIGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKHRoaXMubWxzLnRyYW5zKHRoaXMudGl0bGUpICsgXCIgY+G6p24gdOG7k24gdOG6oWkgw610IG5o4bqldCAxIGPhu5l0IGPDsyB0aHXhu5ljIHTDrW5oICdzaG93Rm9yQ29uZmlybWF0aW9uOiB0cnVlJ1wiLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuY2xpY2tHZW5lcmF0ZVRlbXBsYXRlJC5waXBlKFxyXG4gICAgICAgIG1hcCh4ID0+IHtcclxuICAgICAgICAgIHJldHVybiB4O1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGZpbHRlcih4ID0+IHtcclxuICAgICAgICAgIHJldHVybiAhIXhcclxuICAgICAgICB9KSxcclxuICAgICAgICBzd2l0Y2hNYXAoeCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvbmdBcGlSdW5uaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudGVtcGxhdGVGaWxlTmFtZSA9IHRoaXMuZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3Q/LmV4Q29kZSArIFwiX1wiICsgeCArIFwiLnhsc3hcIlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5nZW5lcmF0ZVRlbXBsYXRlKHRoaXMuZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3QpXHJcbiAgICAgICAgfSlcclxuICAgICAgKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgdGhpcy5sb25nQXBpUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuXHJcbiAgICAgICAgICBpZiAoeC5ib2R5LnN0YXR1c0NvZGUgPT09IDQwMCkgcmV0dXJuXHJcblxyXG4gICAgICAgICAgbGV0IGRvd25sb2FkTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgZG93bmxvYWRMaW5rLmhyZWYgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbeC5ib2R5XSkpXHJcbiAgICAgICAgICBkb3dubG9hZExpbmsuc2V0QXR0cmlidXRlKFwiZG93bmxvYWRcIiwgdGhpcy50ZW1wbGF0ZUZpbGVOYW1lKTtcclxuICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG93bmxvYWRMaW5rKTtcclxuICAgICAgICAgIGRvd25sb2FkTGluay5jbGljaygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKFwiRG93bmxvYWQgZmFpbGVkLiBQbGVhc2UgY29udGFjdCB5b3VyIGRldmVsb3BlciB0ZWFtIHRvIHJlc29sdmVcIiwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KSlcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLnRtcEZpbHRlciQucGlwZShmaWx0ZXIoeCA9PiAhIXggJiYgISEhdGhpcy50bXBGaWx0ZXJBY3RpdmUpKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgdGhpcy5wcmltYXJ5RmlsdGVyID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlciQudmFsdWUpKTtcclxuICAgICAgICB0aGlzLmZpbHRlciQubmV4dCh4KTtcclxuICAgICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UudG1wRmlsdGVyJC5uZXh0KG51bGwpO1xyXG4gICAgICAgIHRoaXMudG1wRmlsdGVyQWN0aXZlID0gdHJ1ZTtcclxuICAgICAgfSlcclxuICAgIClcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UudG1wSW5PcGVyYXRvcnMkLnBpcGUoZmlsdGVyKHggPT4gISF4Lmxlbmd0aCAmJiAhISF0aGlzLnRtcEluT3BlcmF0b3JzQWN0aXZlKSkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgIHRoaXMucHJpbWFyeUluT3BlcmF0b3JzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmluT3BlcmF0b3JzJC52YWx1ZSkpO1xyXG4gICAgICAgIHRoaXMuaW5PcGVyYXRvcnMkLm5leHQoeCk7XHJcbiAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLnRtcEluT3BlcmF0b3JzJC5uZXh0KFtdKTtcclxuICAgICAgICB0aGlzLnRtcEluT3BlcmF0b3JzQWN0aXZlID0gdHJ1ZTtcclxuICAgICAgfSlcclxuICAgIClcclxuICAgIGlmICghIXRoaXMub3V0ZXJTb3J0KSB7XHJcbiAgICAgIHRoaXMuc29ydCQubmV4dCh0aGlzLm91dGVyU29ydCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vbkluc3RhbmNlQ3JlYXRlZC5lbWl0KHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIpO1xyXG5cclxuICAgIGlmICghIXRoaXMuZml4ZWRQYWdlU2l6ZSkge1xyXG4gICAgICB0aGlzLnBhZ2VTaXplJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPih0aGlzLmZpeGVkUGFnZVNpemUpO1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJUGFnaW5hdGlvbj4oe1xyXG4gICAgICAgIHNraXA6IDAsXHJcbiAgICAgICAgdGFrZTogdGhpcy5maXhlZFBhZ2VTaXplLFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGFnZVNpemUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KGRlZmF1bHRQYWdpbmcudGFrZSk7XHJcbiAgICAgIHRoaXMucGFnaW5hdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElQYWdpbmF0aW9uPih7XHJcbiAgICAgICAgc2tpcDogMCxcclxuICAgICAgICB0YWtlOiBkZWZhdWx0UGFnaW5nLnRha2UsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuZXdBdmFpbGFibGVDb2x1bW5zRm9yR2VuZXJhbFNlYXJjaDogc3RyaW5nW10gPSBbXTtcclxuICAgIHRoaXMuY29sdW1ucy5tYXAoKHgpID0+IHtcclxuICAgICAgLy8gaWYgKHgudHlwZSA9PT0gJ3RleHQnIHx8IHgudHlwZSA9PT0gJ3N0cmluZycgfHwgeC50eXBlID09PSAnZGF0ZScgfHwgeC50eXBlID09PSAnZGF0ZXRpbWUnKSB7XHJcbiAgICAgIC8vIGlmICh4LnR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICBpZiAoeC50eXBlID09PSAndGV4dCcgfHwgeC50eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIG5ld0F2YWlsYWJsZUNvbHVtbnNGb3JHZW5lcmFsU2VhcmNoLnB1c2goeC5maWVsZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5hdmFpbGFibGVDb2x1bW5zRm9yR2VuZXJhbFNlYXJjaCA9IG5ld0F2YWlsYWJsZUNvbHVtbnNGb3JHZW5lcmFsU2VhcmNoO1xyXG5cclxuICAgIGlmICghIXRoaXMuY2xlYXJEYXRhJCkge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmNsZWFyRGF0YSRcclxuICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICBmaWx0ZXIoKHgpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gISF4O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoXykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxpc3QgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5saXN0Q2hhbmdlLmVtaXQoW10pO1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyRGF0YSQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGFnaW5hdGlvbkhlaWdodCA9IE51bWJlcihcclxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXHJcbiAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0tc2l6ZS1jb3JlLXBhZ2luYXRpb24taGVpZ2h0JylcclxuICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcclxuICAgICk7XHJcblxyXG4gICAgLy8gc2V0IGRlZmF1bHQgc29ydCBkaXJlY3Rpb25cclxuXHJcbiAgICBjb25zdCBuZXdTb3J0OiBJU29ydEl0ZW1bXSA9IFtdO1xyXG4gICAgdGhpcy5jb2x1bW5zLmZpbHRlcih4ID0+IHguZmllbGQgIT09IFwiaWRcIikubWFwKChjKSA9PiB7XHJcbiAgICAgIG5ld1NvcnQucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6IGMuZmllbGQsXHJcbiAgICAgICAgc29ydERpcmVjdGlvbjogRW51bVNvcnREaXJlY3Rpb24uTk9ORSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIC8vIGFjY2VwdCBkZWZhdWx0c29ydCBwYXJhbVxyXG4gICAgdGhpcy5zb3J0JC5uZXh0KG5ld1NvcnQubWFwKHQxID0+ICh7IC4uLnQxLCAuLi50aGlzLnNvcnQkLnZhbHVlLmZpbmQodDIgPT4gdDIuZmllbGQgPT09IHQxLmZpZWxkKSB9KSkpO1xyXG5cclxuICAgIC8qIFNUQVJUOiBNZXJnZSBmaWx0ZXJPcGVyYXRvciB3aXRoIG91dGVyIG9uZSAqL1xyXG4gICAgaWYgKCEhdGhpcy5vdXRlckZpbHRlck9wZXJhdG9ycykge1xyXG4gICAgICBpZiAodGhpcy5maWx0ZXJPcGVyYXRvcnMkLnZhbHVlKSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEZpbHRlck9wZXJhdG9yczogSUZpbHRlck9wZXJhdG9yW10gPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXJPcGVyYXRvcnMkLnZhbHVlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5vdXRlckZpbHRlck9wZXJhdG9ycy5tYXAoKG9mbykgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZmlsdGVyID0gY3VycmVudEZpbHRlck9wZXJhdG9ycy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChvKSA9PiBvLmZpZWxkID09PSBvZm8uZmllbGQgJiYgby5vcGVyYXRvciA9PT0gb2ZvLm9wZXJhdG9yXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgLy8gb3B0aW1pc3RpY2FsbHkgZmlsdGVyLmxlbmd0aCA9PT0gMVxyXG4gICAgICAgICAgaWYgKGZpbHRlci5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgZmlsdGVyWzBdLm9wZXJhdG9yID0gb2ZvLm9wZXJhdG9yO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRGaWx0ZXJPcGVyYXRvcnMucHVzaChvZm8pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIm91dGVyRmlsdGVyT3BlcmF0b3JzIHdlcmUgaW52YWxpZFwiKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyT3BlcmF0b3JzJC5uZXh0KGN1cnJlbnRGaWx0ZXJPcGVyYXRvcnMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyT3BlcmF0b3JzJC5uZXh0KHRoaXMub3V0ZXJGaWx0ZXJPcGVyYXRvcnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvKiBFTkQ6IENyZWF0ZS9NZXJnZS9PdmVyd3JpdGUgZmlsdGVyT3BlcmF0b3Igd2l0aCBvdXRlciBvbmUgKi9cclxuXHJcbiAgICAvKiBTVEFSVDogU3Vic2NyaXB0aW9uIGZvciBvdXRlclBhcmFtJCAqL1xyXG4gICAgLy8gU29tZSBzaW1wbGUgbWFzdGVyIGRhdGEgZG8gbm90IGhhdmUgb3V0ZXJQYXJhbSQgSU1QT1JUQU5UISEhXHJcbiAgICBpZiAoISF0aGlzLm91dGVyUGFyYW0kKSB7XHJcbiAgICAgIHRoaXMub3V0ZXJQYXJhbVN1YnNjcmliZUZuKCk7XHJcbiAgICB9XHJcbiAgICAvKiBFTkQ6IFN1YnNjcmlwdGlvbiBmb3Igb3V0ZXJQYXJhbSQgKi9cclxuXHJcbiAgICAvKiBTVEFSVDogU3Vic2NyaXB0aW9ucyBmb3IgcXVlcnlMaXN0UmVxdWVzdCQgKi9cclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5tbHMubGFuZyQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICBsYW5nOiB4LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5leGNsdWRlZElkcyQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICBleGNsdWRlZElkczogeFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5nZW5lcmFsU2VhcmNoJFxyXG4gICAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICAgIGdlbmVyYWxTZWFyY2g6IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLmdlbmVyYWxTZWFyY2gsXHJcbiAgICAgICAgICAgICAgc2VhcmNoRm9yOiB4LFxyXG4gICAgICAgICAgICAgIGF2YWlsYWJsZUNvbHVtbnM6IHRoaXMuYXZhaWxhYmxlQ29sdW1uc0ZvckdlbmVyYWxTZWFyY2gsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5maWx0ZXIkLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgZmlsdGVyOiB4LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5maWx0ZXJPcGVyYXRvcnMkLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgZmlsdGVyT3BlcmF0b3JzOiB4LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5pbk9wZXJhdG9ycyQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICBpbk9wZXJhdG9yczogeCxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAndGhpcy5xdWVyeUxpc3RSZXF1ZXN0JCBjaGFuZ2VkOiAnLFxyXG4gICAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLnNlYXJjaCRcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIGRlYm91bmNlVGltZSg1MDApLFxyXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXYsIGN1cnIpID0+IHtcclxuICAgICAgICAgICAgbGV0IGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoISFwcmV2IHx8ICEhY3Vycikge1xyXG4gICAgICAgICAgICAgIGNvbmRpdGlvbiA9IEpTT04uc3RyaW5naWZ5KHByZXYpID09PSBKU09OLnN0cmluZ2lmeShjdXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gY29uZGl0aW9uO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSxcclxuICAgICAgICAgICAgc2VhcmNoOiAhIXg/LmN1cnJlbnRcclxuICAgICAgICAgICAgICA/IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoeD8uY3VycmVudCkpXHJcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5zb3J0JC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgLi4uSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlKSksXHJcbiAgICAgICAgICBzb3J0OiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHgpKSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMucGFnaW5hdGlvbiQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICBwYWdpbmF0aW9uOiB4LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmluc3RhbmNlc1xyXG4gICAgICAgIC5maWx0ZXIoKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIpWzBdXHJcbiAgICAgICAgLnJlbG9hZEZsYWckIS5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCd0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQgaXMgYmVpbmcgY2hhbmdlZC4uLicsIHgpO1xyXG4gICAgICAgICAgdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLm5leHQoeCk7XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSxcclxuICAgICAgICAgIGZvcmNlUmVsb2FkaW5nRmxhZzogeCxcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UkXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpIC8vIElNUE9SVEFOVCFcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJjdXJyZW50UGFnZSBjaGFuZ2UgdG9cIiwgeClcclxuICAgICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlPy5wYWdpbmF0aW9uISxcclxuICAgICAgICAgICAgICBza2lwOiAoeCAtIDEpICogdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZT8ucGFnaW5hdGlvbj8udGFrZSEsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmxvYWRpbmckLnN1YnNjcmliZSh4ID0+IHRoaXMubG9hZGluZyA9IHgpXHJcbiAgICApXHJcblxyXG4gICAgLyogRU5EOiBTdWJzY3JpcHRpb25zIGZvciBxdWVyeUxpc3RSZXF1ZXN0JCAqL1xyXG5cclxuICAgIC8vIFF1YW4gdHLhu41uZzogQ29yZVBhZ2VMaXN0IGPhuqduIGJp4bq/dCBjaMOtbmggeMOhYyBjaGnhu4F1IGNhb1xyXG4gICAgLy8gVHV5IG5oacOqbiBjw7Mgbmhp4buBdSB0csaw4budbmcgaOG7o3AgY2hp4buBdSBjYW8gbsOgeSBraMO0bmcgxJHGsOG7o2MgdHJ1eeG7gW4gdsOgbyBraGkgdHJp4buDbiBraGFpXHJcbiAgICAvLyBYw6l0IHRyxrDhu51uZyBo4bujcCBjw6FjIGZvcm0gZGFuaCBt4bulYyBjxqEgYuG6o25cclxuICAgIC8vIGNvbnRlbnQtY29udGFpbmVyID0+IGNvbnN1bWUgY29tcG9uZW50ID0+IGNvcmUtcGFnZS1saXN0ID0+IGNvcmUtcGFnZS1oZWFkZXIgPT4gY29yZS1jb21wb3NpdGlvbiA9PiB0b3BSZWYgKyB0YWJsZSArIHBhZ2luYXRpb25cclxuICAgIC8vIHRhIGPDsyB0aOG7gyB0w61uaCBz4buRIG3hurdjIMSR4buLbmggKG7hur91IGhlaWdodCBraMO0bmcgxJHGsOG7o2MgdHJ1eeG7gW4gdsOgbylcclxuICAgIGlmICh0aGlzLmhlaWdodCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMubGF5b3V0U2VydmljZS5jb250ZW50Q29udGFpbmVySGVpZ2h0JC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICAvLyBiYXNpY1NwYWNpbmcgbMOgIHBhZGRpbmdCb3R0b20gY+G7p2EgbOG7m3AgY29udGVudC1jb250YWluZXJcclxuICAgICAgICAgIHRoaXMuaGVpZ2h0ID0geCAtIHRoaXMubGF5b3V0U2VydmljZS5iYXNpY1NwYWNpbmc7XHJcbiAgICAgICAgICB0aGlzLmhlaWdodCQubmV4dCh4IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmJhc2ljU3BhY2luZylcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgb25Sb3dEb3VibGVDbGljayhldmVudDogYW55KSB7XHJcbiAgICBpZiAoISF0aGlzLnNlZWtlck1vZGUgfHwgISF0aGlzLm1jY01vZGUgfHwgISF0aGlzLmRpc2FibGVEb3VibGVDbGljaykge1xyXG4gICAgICB0aGlzLnJvd0RvdWJsZUNsaWNrLmVtaXQoZXZlbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCEhIXRoaXMuc2VsZlJlc29sdmVDb3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrKSB7XHJcbiAgICAgICAgdGhpcy5jb3JlUGFnZUVkaXRTZXJ2aWNlLmZyb21VcmwgPSB0aGlzLnJvdXRlci51cmw7XHJcbiAgICAgICAgaWYgKCEhdGhpcy5ub3JtYWxNb2RlKSB7XHJcbiAgICAgICAgICBpZiAoISF0aGlzLmhhc0lkT2ZTdHJpbmdUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgIGJ0b2EoZXZlbnQuaWQpLFxyXG4gICAgICAgICAgICAgICAgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUucGFyZW50LFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgIGJ0b2EoZXZlbnQuaWQudG9TdHJpbmcoKSksXHJcbiAgICAgICAgICAgICAgICB7IGxpc3RJbnN0YW5jZTogdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciB9LFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZS5wYXJlbnQsXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoISF0aGlzLmhhc0lkT2ZTdHJpbmdUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgb3V0bGV0czoge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcmVQYWdlTGlzdEF1eDogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnRvYShldmVudC5pZCksXHJcbiAgICAgICAgICAgICAgICAgICAgICB7IGxpc3RJbnN0YW5jZTogdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciB9LFxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgb3V0bGV0czoge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcmVQYWdlTGlzdEF1eDogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnRvYShldmVudC5pZC50b1N0cmluZygpKSxcclxuICAgICAgICAgICAgICAgICAgICAgIHsgbGlzdEluc3RhbmNlOiB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJvd0RvdWJsZUNsaWNrLmVtaXQoZXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblJvd0NsaWNrKGU6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coJ0NvclBhZ2VMaXN0IG9uUm93Q2xpY2sgZScsIGUpO1xyXG4gICAgaWYgKCEhZS5pZCkge1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKGUuaWQpO1xyXG4gICAgfSBlbHNlIGlmICghIWUudmlydHVhbElkKSB7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UoZS52aXJ0dWFsSWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgXCJCb3RoICdpZCcgYW5kICd2aXJ0dWFsSWQnIGNvbHVtbnMgYXJlIG51bGwuIFBsZWFzZSBjaGVjayB3aHlcIixcclxuICAgICAgICBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9uc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yb3dDbGljay5lbWl0KGUpO1xyXG4gIH1cclxuXHJcbiAgb25Ub29sQ2xpY2soZXZlbnQ6IElDb3JlVGFibGVUb29sQ2xpY2tFdmVudEVtaXR0ZXJEYXRhKSB7IH1cclxuXHJcbiAgb25TZWFyY2hpbmcoZTogSVNlYXJjaEl0ZW1bXSk6IHZvaWQge1xyXG4gICAgY29uc3QgcHJldiA9ICEhdGhpcy5zZWFyY2gkLnZhbHVlPy5jdXJyZW50XHJcbiAgICAgID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlYXJjaCQudmFsdWU/LmN1cnJlbnQpKVxyXG4gICAgICA6IG51bGw7XHJcbiAgICB0aGlzLnNlYXJjaCQubmV4dCh7XHJcbiAgICAgIHByZXZpb3VzOiBwcmV2ISxcclxuICAgICAgY3VycmVudDogZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNpemVIZWlnaHRXaGVuQ29udGFpbmVySGFzRml4ZWRIZWlnaHQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgIGNvbnN0IHBhZ2luYXRpb25IZWlnaHQgPSBOdW1iZXIoXHJcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxyXG4gICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtY29yZS1wYWdpbmF0aW9uLWhlaWdodCcpXHJcbiAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICApO1xyXG4gICAgY29uc3QgdGFibGVCb3JkZXJUb3AgPSBOdW1iZXIoXHJcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxyXG4gICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtY29yZS10YWJsZS1ib3JkZXItdG9wJylcclxuICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgYmxvY2tDZWxsU3BhY2luZyA9IE51bWJlcihcclxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXHJcbiAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0tc2l6ZS1sYXlvdXQtYmxvY2stY2VsbC1zcGFjaW5nJylcclxuICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jb3JlUGFnZUxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcclxuICAgICAgJy0taGVpZ2h0JyxcclxuICAgICAgY29udGFpbmVySGVpZ2h0ICsgJ3B4J1xyXG4gICAgKTtcclxuICAgIGNvbnN0IHJlbGF0ZWRUYWJsZUZpbHRlciA9IHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZXMuZmlsdGVyKFxyXG4gICAgICAoeCkgPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlclxyXG4gICAgKTtcclxuICAgIGlmICghIXJlbGF0ZWRUYWJsZUZpbHRlci5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgcmVsYXRlZFRhYmxlID0gcmVsYXRlZFRhYmxlRmlsdGVyWzBdLmNvcmVUYWJsZVJlZjtcclxuICAgICAgaWYgKCEhcmVsYXRlZFRhYmxlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1JlbGF0ZWQgQ29yZVRhYmxlQ29tcG9uZW50UmVmIEZPVU5EISEhJyk7XHJcbiAgICAgICAgLy9zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBmZWF0dXJlSGVpZ2h0ID1cclxuICAgICAgICAgIGNvbnRhaW5lckhlaWdodCAtXHJcbiAgICAgICAgICBwYWdpbmF0aW9uSGVpZ2h0IC1cclxuICAgICAgICAgIHRhYmxlQm9yZGVyVG9wIC1cclxuICAgICAgICAgIDIgKiBibG9ja0NlbGxTcGFjaW5nICogMCAvKiBwYWRkaW5nIGluY2x1ZWQgaW4gb2JqZWN0IGl0c2VsZiAqLyAtXHJcbiAgICAgICAgICAodGhpcy5leHRyYU1hbnVhbE9mZnNldCB8fCAwKTtcclxuICAgICAgICByZWxhdGVkVGFibGUubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcclxuICAgICAgICAgICctLWhlaWdodCcsXHJcbiAgICAgICAgICBmZWF0dXJlSGVpZ2h0ICsgJ3B4J1xyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpcnN0SGVhZGVyUm93SGVpZ2h0ID0gTnVtYmVyKFxyXG4gICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShyZWxhdGVkVGFibGUubmF0aXZlRWxlbWVudClcclxuICAgICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0taGVhZGVyLTFzdC1yb3ctaGVpZ2h0JylcclxuICAgICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBzZWNvbmRIZWFkZXJSb3dIZWlnaHQgPSBOdW1iZXIoXHJcbiAgICAgICAgICBnZXRDb21wdXRlZFN0eWxlKHJlbGF0ZWRUYWJsZS5uYXRpdmVFbGVtZW50KVxyXG4gICAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1oZWFkZXItMm5kLXJvdy1oZWlnaHQnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBmZWF0dXJlVGJvZHlIZWlnaHQgPVxyXG4gICAgICAgICAgZmVhdHVyZUhlaWdodCAtIGZpcnN0SGVhZGVyUm93SGVpZ2h0IC0gc2Vjb25kSGVhZGVyUm93SGVpZ2h0O1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZygnZmVhdHVyZVRib2R5SGVpZ2h0JywgZmVhdHVyZVRib2R5SGVpZ2h0KTtcclxuXHJcbiAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmluc3RhbmNlc1xyXG4gICAgICAgICAgLmZpbHRlcihcclxuICAgICAgICAgICAgKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJcclxuICAgICAgICAgIClbMF1cclxuICAgICAgICAgIC50Ym9keUhlaWdodCQubmV4dChmZWF0dXJlVGJvZHlIZWlnaHQpO1xyXG4gICAgICAgIC8vfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignUmVsYXRlZCBDb3JlVGFibGVDb21wb25lbnRSZWYgd2FzIHVuZGVmaW5lZCcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcignTm8gcmVsYXRlZCBDb3JlVGFibGVDb21wb25lbnRSZWYgZm91bmQnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzaXplSGVpZ2h0V2hlbkNvbnRhaW5lckhhc1VuZGVmaW5lZEhlaWdodCgpOiB2b2lkIHtcclxuXHJcbiAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB0aGlzLmxheW91dFNlcnZpY2UuY29udGVudENvbnRhaW5lckhlaWdodCQudmFsdWU7XHJcbiAgICBjb25zdCBwYWdlSGVhZGVySGVpZ2h0ID0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdlSGVhZGVySGVpZ2h0O1xyXG4gICAgY29uc3QgcGFnaW5hdGlvbkhlaWdodCA9IHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnaW5hdGlvbkhlaWdodDtcclxuICAgIGNvbnN0IHRhYmxlQm9yZGVyVG9wID0gdGhpcy5sYXlvdXRTZXJ2aWNlLnRhYmxlQm9yZGVyVG9wO1xyXG4gICAgY29uc3QgYmFzaWNTcGFjaW5nID0gdGhpcy5sYXlvdXRTZXJ2aWNlLmJhc2ljU3BhY2luZztcclxuXHJcbiAgICB0aGlzLmNvcmVQYWdlTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxyXG4gICAgICAnLS1oZWlnaHQnLFxyXG4gICAgICBjb250YWluZXJIZWlnaHQgLSAyICogYmFzaWNTcGFjaW5nICsgJ3B4J1xyXG4gICAgKTtcclxuICAgIGNvbnN0IHJlbGF0ZWRUYWJsZUZpbHRlciA9IHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZXMuZmlsdGVyKFxyXG4gICAgICAoeCkgPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlclxyXG4gICAgKTtcclxuICAgIGlmICghIXJlbGF0ZWRUYWJsZUZpbHRlci5sZW5ndGgpIHtcclxuXHJcbiAgICAgIGlmICghIXRoaXMuYXV0b1Jlc2l6ZVdpdGhXaW5kb3cpIHtcclxuXHJcbiAgICAgICAgY29uc3QgcmVsYXRlZFRhYmxlID0gcmVsYXRlZFRhYmxlRmlsdGVyWzBdLmNvcmVUYWJsZVJlZjtcclxuICAgICAgICBpZiAoISFyZWxhdGVkVGFibGUpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdSZWxhdGVkIENvcmVUYWJsZUNvbXBvbmVudFJlZiBGT1VORCEhIScpO1xyXG4gICAgICAgICAgLy9zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGZlYXR1cmVIZWlnaHQgPVxyXG4gICAgICAgICAgICBjb250YWluZXJIZWlnaHQgLVxyXG4gICAgICAgICAgICBwYWdlSGVhZGVySGVpZ2h0IC1cclxuICAgICAgICAgICAgcGFnaW5hdGlvbkhlaWdodCAtXHJcbiAgICAgICAgICAgIHRhYmxlQm9yZGVyVG9wIC1cclxuICAgICAgICAgICAgMiAqIGJhc2ljU3BhY2luZyAtXHJcbiAgICAgICAgICAgICh0aGlzLmV4dHJhTWFudWFsT2Zmc2V0IHx8IDApO1xyXG4gICAgICAgICAgcmVsYXRlZFRhYmxlLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAgICAgICAgICctLWhlaWdodCcsXHJcbiAgICAgICAgICAgIGZlYXR1cmVIZWlnaHQgKyAncHgnXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGZpcnN0SGVhZGVyUm93SGVpZ2h0ID0gTnVtYmVyKFxyXG4gICAgICAgICAgICBnZXRDb21wdXRlZFN0eWxlKHJlbGF0ZWRUYWJsZS5uYXRpdmVFbGVtZW50KVxyXG4gICAgICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLWhlYWRlci0xc3Qtcm93LWhlaWdodCcpXHJcbiAgICAgICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3Qgc2Vjb25kSGVhZGVyUm93SGVpZ2h0ID0gTnVtYmVyKFxyXG4gICAgICAgICAgICBnZXRDb21wdXRlZFN0eWxlKHJlbGF0ZWRUYWJsZS5uYXRpdmVFbGVtZW50KVxyXG4gICAgICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLWhlYWRlci0ybmQtcm93LWhlaWdodCcpXHJcbiAgICAgICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGZlYXR1cmVUYm9keUhlaWdodCA9XHJcbiAgICAgICAgICAgIGZlYXR1cmVIZWlnaHQgLSBmaXJzdEhlYWRlclJvd0hlaWdodCAtIHNlY29uZEhlYWRlclJvd0hlaWdodDtcclxuXHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnZmVhdHVyZVRib2R5SGVpZ2h0JywgZmVhdHVyZVRib2R5SGVpZ2h0KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzXHJcbiAgICAgICAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJcclxuICAgICAgICAgICAgKVswXVxyXG4gICAgICAgICAgICAudGJvZHlIZWlnaHQkLm5leHQoZmVhdHVyZVRib2R5SGVpZ2h0KTtcclxuICAgICAgICAgIC8vfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1JlbGF0ZWQgQ29yZVRhYmxlQ29tcG9uZW50UmVmIHdhcyB1bmRlZmluZWQnKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgfVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHJlbGF0ZWQgQ29yZVRhYmxlQ29tcG9uZW50UmVmIGZvdW5kJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2l6ZUhlaWdodCQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XHJcbiAgICAgIHRoaXMuaGVpZ2h0UmVzaXppbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLnJlc2l6ZUhlaWdodCgpO1xyXG4gICAgICB0aGlzLmhlaWdodFJlc2l6aW5nID0gZmFsc2U7XHJcbiAgICAgIG9ic2VydmVyLm5leHQobmV3IERhdGUoKS5nZXRUaW1lKCkpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNpemVIZWlnaHQoKTogdm9pZCB7XHJcbiAgICBpZiAoISEhdGhpcy5zZWVrZXJNb2RlKSB7XHJcbiAgICAgIC8qICNzdGFydCBFRElUSU5HIENPREUgQkxPQ0sgQkVMTE9XIE9OTFkgSUYgWU9VIEtOT1cgQUxMIFRIRSBBUFAgREVTSUdOIEZMT1dTICovXHJcbiAgICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXHJcbiAgICAgIGlmICghIXRoaXMuaGVpZ2h0KSB7XHJcbiAgICAgICAgdGhpcy5yZXNpemVIZWlnaHRXaGVuQ29udGFpbmVySGFzRml4ZWRIZWlnaHQoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlc2l6ZUhlaWdodFdoZW5Db250YWluZXJIYXNVbmRlZmluZWRIZWlnaHQoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gdG8gZG8gc210aCBtYXliZVxyXG4gICAgfVxyXG4gICAgLyogI2VuZCBFRElUSU5HIENPREUgQkxPQ0sgQkVMTE9XIE9OTFkgSUYgWU9VIEtOT1cgQUxMIFRIRSBBUFAgREVTSUdOIEZMT1dTICovXHJcbiAgfVxyXG5cclxuICBxdWVyeUxpc3RTdWJzY3JpYmUoKTogdm9pZCB7XHJcbiAgICBpZiAoISEhdGhpcy5xdWVyeUxpc3RTdWJzY3JpcHRpb24gJiYgISF0aGlzLnF1ZXJ5TGlzdFN0cmVhbSQpIHtcclxuICAgICAgdGhpcy5xdWVyeUxpc3RTdWJzY3JpcHRpb24gPSB0aGlzLnF1ZXJ5TGlzdFN0cmVhbSQuc3Vic2NyaWJlKHggPT4gdGhpcy5zdWJzY3JpYmVRdWVyeUxpc3QoeCkpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYWxjdWxhdGVUYWJsZUhlaWdodEJhc2VkT25IZWlnaHRBbmRUb3BSZWZIZWlnaHQoaGVpZ2h0OiBudW1iZXIsIHRvcFJlZkhlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQgfHwgdG9wUmVmSGVpZ2h0ID09PSB1bmRlZmluZWQpIHJldHVybjtcclxuICAgIHRoaXMuY29tcG9zaXRpb25IZWlnaHQgPSBoZWlnaHQgLSAoISF0aGlzLmhpZGVIZWFkZXIgPyAwIDogdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdlSGVhZGVySGVpZ2h0KTtcclxuICAgIC8vICghdG9wUmVmSGVpZ2h0ID8gMTUgOiAwKSA9PiBO4bq/dSBjw7MgcGjhuqduIFRvcCBz4bq9IGPDsyB0aMOqbSBtYXJnaW5Cb3R0b20gMTVweCBj4bunYSBuw7MuXHJcbiAgICBpZiAoIXRoaXMudGFiTW9kZSkge1xyXG4gICAgICB0aGlzLnRhYmxlSGVpZ2h0ID0gaGVpZ2h0IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdlSGVhZGVySGVpZ2h0IC0gdG9wUmVmSGVpZ2h0IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdpbmF0aW9uSGVpZ2h0IC0gKCEhdG9wUmVmSGVpZ2h0ID8gMTUgOiAwKSAgLy8gMTVweCBpcyBtYXJnaW5Cb3R0b20gb2YgdG9wUmVmXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRhYmxlSGVpZ2h0ID0gaGVpZ2h0IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdlSGVhZGVySGVpZ2h0IC0gKDQ1KSAtIHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnaW5hdGlvbkhlaWdodCAvLyA8Y29yZS10YWJzIFtoZWlnaHRdPVwiNTVcIi4uLj5cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAvKiogU1RBUlQgc2V0VGltZW91dCAqL1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICB0aGlzLmZpbHRlcktpdFpJbmRleCA9IHRoaXMuZG9tU2VydmljZS5nZXRNYXhaSW5kZXgoKSArIDE7XHJcblxyXG4gICAgICBjb25zdCB0cnlGaW5kID0gdGhpcy5jb3JlQnV0dG9uR3JvdXBTZXJ2aWNlLmluc3RhbmNlcy5maWx0ZXIoeCA9PiB4Lmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyKTtcclxuICAgICAgaWYgKCEhdHJ5RmluZC5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmJ1dHRvbkdyb3VwU3RhdHVzID0gdHJ5RmluZFswXTtcclxuICAgICAgICBjb25zdCBleGlzdGluZ0hpZGRlbkl0ZW1zID0gdGhpcy5idXR0b25Hcm91cFN0YXR1cy5tdXN0QmVIaWRkZW4kLnZhbHVlXHJcbiAgICAgICAgdGhpcy5idXR0b25Hcm91cFN0YXR1cy5tdXN0QmVIaWRkZW4kLm5leHQoW1xyXG4gICAgICAgICAgLi4uZXhpc3RpbmdIaWRkZW5JdGVtcyxcclxuICAgICAgICAgIC4uLkVNUFRZX1NFTEVDVElPTl9ISURERU5fQlVUVE9OXHJcbiAgICAgICAgXSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoaXNEZXZNb2RlKCkgJiYgISghdGhpcy5zZWVrZXJNb2RlIHx8ICF0aGlzLmhpZGVCdXR0b25Hcm91cCkpIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLndhcm4oXCJLaMO0bmcgdMOsbSB0aOG6pXkgaW5zdGFuY2UgbnVtYmVyIGPhu6dhIGLhu5kgbsO6dCDEkWnhu4F1IGtoaeG7g25cIiwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoISF0aGlzLnRhYk1vZGUgJiYgISF0aGlzLnN0YXR1c09wdGlvbnNBcGkpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgIHRoaXMubWxzLmxhbmckLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLmdldCh0aGlzLnN0YXR1c09wdGlvbnNBcGkgKyAnP2xhbmc9JyArIHgpLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCAmJiB4LmJvZHk/LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgY291bnRTdGF0ZTogeyBpZDogbnVtYmVyIHwgbnVsbCwgY291bnQ6IG51bWJlciB9W10gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNUYWJzLmZvckVhY2goaSA9PiBjb3VudFN0YXRlLnB1c2goeyBpZDogaS5pZCwgY291bnQ6IGkuY291bnQgfSkpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c1RhYnMuY2xlYXIoKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy50YWJIZWFkZXJzID0gW107XHJcbiAgICAgICAgICAgICAgICAgIGJvZHkuaW5uZXJCb2R5LmZvckVhY2goKG06IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudEZpbHRlciA9IGNvdW50U3RhdGUuZmlsdGVyKG8gPT4gby5pZCA9PT0gbS5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudENvdW50ID0gISFjdXJyZW50Q291bnRGaWx0ZXIubGVuZ3RoID8gY3VycmVudENvdW50RmlsdGVyWzBdLmNvdW50IDogMFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzVGFicy5zZXQoaW5kZXgsIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlkOiBtLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaW50bENvZGU6IG0uTmFtZUludGxDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dDogbS50ZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgY291bnQ6IGN1cnJlbnRDb3VudFxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJIZWFkZXJzLnB1c2goYCR7bS50ZXh0fSAoJHtjdXJyZW50Q291bnR9KWApO1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgY29tcG9zaXRpb25GaWx0ZXIgPSB0aGlzLmNvcmVDb21wb3NpdGlvblNlcnZpY2UuaW5zdGFuY2VzLmZpbHRlcih4ID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIpO1xyXG4gICAgICBpZiAoISFjb21wb3NpdGlvbkZpbHRlci5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgIGNvbXBvc2l0aW9uRmlsdGVyWzBdLnRvcFJlZiQuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRvcFBsYWNlSGVpZ2h0JC5uZXh0KHgubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF0aGlzLmRpc2FibGVGaWx0ZXJIdWIpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgIHRoaXMuY29yZUZpbHRlckh1YlNlcnZpY2Uub3BlbiQuc3Vic2NyaWJlKHggPT4gdGhpcy5zaG93RmlsdGVyID0geClcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMubG9uZ1Rhc2tTZXJ2aWNlLmxvbmdBcGlSdW5uaW5nJC5zdWJzY3JpYmUoeCA9PiB0aGlzLmxvbmdBcGlSdW5uaW5nID0geClcclxuICAgICAgKVxyXG5cclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMuaGVpZ2h0JC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVRhYmxlSGVpZ2h0QmFzZWRPbkhlaWdodEFuZFRvcFJlZkhlaWdodCh4LCB0aGlzLnRvcFBsYWNlSGVpZ2h0JC52YWx1ZSlcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLnRvcFBsYWNlSGVpZ2h0JC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVRhYmxlSGVpZ2h0QmFzZWRPbkhlaWdodEFuZFRvcFJlZkhlaWdodCh0aGlzLmhlaWdodCQudmFsdWUsIHgpXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5yZXNpemVIZWlnaHRGbGFnJC5waXBlKFxyXG4gICAgICAgICAgc3dpdGNoTWFwKF8gPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdlb21ldHJpY0RvbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzaXplSGVpZ2h0JCgpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJyZXNpemVIZWlnaHRGbGFnJCBzd2l0Y2hNYXAgZmluYWwgdmFsdWVcIiwgeClcclxuICAgICAgICAgIGlmICghISF0aGlzLmhlaWdodFJlc2l6aW5nKSB0aGlzLmdlb21ldHJpY0RvbmUgPSB0cnVlO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICApXHJcbiAgICAgIC8vIHRoaXMuY2FsY3VsYXRlVGFibGVIZWlnaHQoKTtcclxuXHJcbiAgICAgIGlmICghIXRoaXMuc2hvd1BhcmFtS2l0KSB7XHJcbiAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgLy8gY2FsY3VsYXRpbmcgb2Zmc2V0IG9mIHRoZSB0b3BcclxuICAgICAgICBjb25zdCB0cnlGaW5kQ29yZUhlYWRlclBhcmFtc0VsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICAgICAgJy5jb3JlLWhlYWRlci1wYXJhbXMtY29udGFpbmVyJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKEFycmF5LmZyb20odHJ5RmluZENvcmVIZWFkZXJQYXJhbXNFbGVtZW50KS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBBcnJheS5mcm9tKHRyeUZpbmRDb3JlSGVhZGVyUGFyYW1zRWxlbWVudClbMF07XHJcbiAgICAgICAgICBjb25zdCByZWN0ID0gaXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgIHRoaXMuZXh0cmFNYW51YWxPZmZzZXQgPSByZWN0LmhlaWdodCArIDE1OyAvLyBtYjE1IGlzIG1hcmdpbi1ib3R0b20gMTVweCBvZiBmb3JtIHJvd1xyXG5cclxuICAgICAgICAgIHRoaXMucmVzaXplSGVpZ2h0RmxhZyQubmV4dCghISF0aGlzLnJlc2l6ZUhlaWdodEZsYWckLnZhbHVlKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICghISF0aGlzLmV4dHJhTWFudWFsT2Zmc2V0KSB0aGlzLmV4dHJhTWFudWFsT2Zmc2V0ID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVzaXplSGVpZ2h0RmxhZyQubmV4dCghISF0aGlzLnJlc2l6ZUhlaWdodEZsYWckLnZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoISEhdGhpcy5leHRyYU1hbnVhbE9mZnNldCkgdGhpcy5leHRyYU1hbnVhbE9mZnNldCA9IDA7XHJcbiAgICAgICAgdGhpcy5yZXNpemVIZWlnaHRGbGFnJC5uZXh0KCEhIXRoaXMucmVzaXplSGVpZ2h0RmxhZyQudmFsdWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB0cnlGaWx0ZXIgPSB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzXHJcbiAgICAgICAgLmZpbHRlcigoeCkgPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcik7XHJcbiAgICAgIGlmICghISF0cnlGaWx0ZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihgQ29yZVBhZ2VMaXN0IGluc3RhbmNlcyBkbyBub3QgaW5jbHVkZSBudW1iZXIgJHt0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyfWAsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZXNcclxuICAgICAgICAgICAgLmZpbHRlcigoeCkgPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcilbMF1cclxuICAgICAgICAgICAgLmlkJC5waXBlKFxyXG4gICAgICAgICAgICAgIGZpbHRlcihfID0+ICEhIXRoaXMuaWRTdGF0ZSlcclxuICAgICAgICAgICAgKS5zdWJzY3JpYmUoKHg6IGFueSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZSBpZCQgaGFzIGNoYW5nZWQsIHggPSAnLCB4KTtcclxuICAgICAgICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSxcclxuICAgICAgICAgICAgICAgIGlkOiB4LFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKCAvLyBvdXRlci1wdXNoXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbmZpcm1lZCQucGlwZShcclxuICAgICAgICAgIGZpbHRlcihpID0+ICEhIXRoaXMuZGlhbG9nU2VydmljZS5idXN5ICYmICEhaT8uY29uZmlybWVkICYmIGkuaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuZGlhbG9nSW5zdGFuY2VOdW1iZXIpXHJcbiAgICAgICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5yZXNldFNlcnZpY2UoKVxyXG5cclxuICAgICAgICAgIHN3aXRjaCAodGhpcy5wZW5kaW5nQWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VUExPQUQ6XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJOb3cgdXBsb2FkaW5nLi4uIFwiLCB0aGlzLmRhdGFJbXBvcnQpO1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKCAvLyBtaWRkZW0tcHVzaFxyXG4gICAgICAgICAgICAgIC8vIClcclxuICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb24gPSBudWxsO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFOlxyXG4gICAgICAgICAgICAgIGNvbnN0IHN5c011dGF0aW9uTG9nQmVmb3JlQWZ0ZXJSZXF1ZXN0OiBJU3lzTXV0YXRpb25Mb2dCZWZvcmVBZnRlclJlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgICAgICBzeXNGdW5jdGlvbkNvZGU6IHRoaXMucm91dGluZ1NlcnZpY2UuY3VycmVudEZ1bmN0aW9uJC52YWx1ZT8uY29kZSEsXHJcbiAgICAgICAgICAgICAgICBzeXNBY3Rpb25Db2RlOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURSxcclxuICAgICAgICAgICAgICAgIGJlZm9yZTogSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZERhdGEpLFxyXG4gICAgICAgICAgICAgICAgYWZ0ZXI6ICdcIlwiJyxcclxuICAgICAgICAgICAgICAgIHVzZXJuYW1lOiB0aGlzLmF1dGhTZXJ2aWNlLmRhdGEkLnZhbHVlPy51c2VyTmFtZSFcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3Q6IElJZHNSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICAgICAgaWRzOiB0aGlzLnNlbGVjdGVkSWRzIGFzIG51bWJlcltdLFxyXG4gICAgICAgICAgICAgICAgc3lzTXV0YXRpb25Mb2dCZWZvcmVBZnRlclJlcXVlc3RcclxuICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAuZGVsZXRlSWRzKHJlcXVlc3QsIHRoaXMuY3J1ZC5kZWxldGVJZHMhKVxyXG4gICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDAgfHwgeC5ib2R5LnN0YXR1c0NvZGUgPT0gJzIwMCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLm5leHQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgISEhdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuaWRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gNDAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQWN0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0FDVElWQVRFOlxyXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGl2YXRlUmVxdWVzdDogSVRvZ2dsZUFjdGl2ZUlkc1JlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZVRvQmluZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGlkczogdGhpcy5zZWxlY3RlZElkcyBhcyBudW1iZXJbXSxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIGlmICghIXRoaXMuY3J1ZC50b2dnbGVBY3RpdmVJZHMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UucG9zdCh0aGlzLmNydWQudG9nZ2xlQWN0aXZlSWRzLCBhY3RpdmF0ZVJlcXVlc3QpXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwIHx8IHguYm9keS5zdGF0dXNDb2RlID09ICcyMDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLm5leHQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhISF0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQudmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2YXRlUmVxdWVzdC5pZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uud2Fybih0aGlzLm1scy50cmFucyhFbnVtVHJhbnNsYXRlS2V5Lk5PX0FQSV9FTkRfUE9JTlRfUFJPVklERURfRk9SX0FDVElWQVRJT04pLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9JTkFDVElWQVRFOlxyXG4gICAgICAgICAgICAgIGNvbnN0IGluYWN0aXZhdGVSZXF1ZXN0OiBJVG9nZ2xlQWN0aXZlSWRzUmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgICAgIHZhbHVlVG9CaW5kOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGlkczogdGhpcy5zZWxlY3RlZElkcyBhcyBudW1iZXJbXSxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIGlmICghIXRoaXMuY3J1ZC50b2dnbGVBY3RpdmVJZHMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UucG9zdCh0aGlzLmNydWQudG9nZ2xlQWN0aXZlSWRzLCBpbmFjdGl2YXRlUmVxdWVzdClcclxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDAgfHwgeC5ib2R5LnN0YXR1c0NvZGUgPT0gJzIwMCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQubmV4dChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEhIXRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5hY3RpdmF0ZVJlcXVlc3QuaWRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLndhcm4odGhpcy5tbHMudHJhbnMoRW51bVRyYW5zbGF0ZUtleS5OT19BUElfRU5EX1BPSU5UX1BST1ZJREVEX0ZPUl9BQ1RJVkFUSU9OKSwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVU5BUFBST1ZFOlxyXG4gICAgICAgICAgICAgIGNvbnN0IHN5c011dGF0aW9uTG9nQmVmb3JlQWZ0ZXJTZW5kVW5hcHByb3ZlOiBJU3lzTXV0YXRpb25Mb2dCZWZvcmVBZnRlclJlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgICAgICBzeXNGdW5jdGlvbkNvZGU6IHRoaXMucm91dGluZ1NlcnZpY2UuY3VycmVudEZ1bmN0aW9uJC52YWx1ZT8uY29kZSEsXHJcbiAgICAgICAgICAgICAgICBzeXNBY3Rpb25Db2RlOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VOQVBQUk9WRSxcclxuICAgICAgICAgICAgICAgIGJlZm9yZTogSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZERhdGEpLFxyXG4gICAgICAgICAgICAgICAgYWZ0ZXI6ICdcIlwiJyxcclxuICAgICAgICAgICAgICAgIHVzZXJuYW1lOiB0aGlzLmF1dGhTZXJ2aWNlLmRhdGEkLnZhbHVlPy51c2VyTmFtZSFcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHNlbmRSZXF1ZXN0OiBJVG9uZ2xlVW5BcHByb3ZlSWRzUmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgICAgIHJlYXNvbjogdGhpcy5kaWFsb2dTZXJ2aWNlLnJlYXNvbiQudmFsdWUsXHJcbiAgICAgICAgICAgICAgICBpZHM6IHRoaXMuc2VsZWN0ZWRJZHMgYXMgbnVtYmVyW10sXHJcbiAgICAgICAgICAgICAgICB2YWx1ZVRvQmluZDogZmFsc2VcclxuICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgIHRoaXMuYXBwU2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAucG9zdCh0aGlzLmNydWQudG9nZ2xlVW5hcHByb3ZlSWRzISwgc2VuZFJlcXVlc3QpXHJcbiAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCB8fCB4LmJvZHkuc3RhdHVzQ29kZSA9PSAnMjAwJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQubmV4dChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAhISF0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQudmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5pZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYm9keS5zdGF0dXNDb2RlID09PSA0MDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb24gPSBudWxsO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcblxyXG4gICAgICBpZiAodGhpcy5hdXRvUmVzaXplV2l0aFdpbmRvdykge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5yZXNpemVTdHJlYW0kLnBpcGUoZGVib3VuY2VUaW1lKDIwMCkpLnN1YnNjcmliZSgoXzogYW55KSA9PiB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlc2l6ZUhlaWdodEZsYWckLm5leHQoISEhdGhpcy5yZXNpemVIZWlnaHRGbGFnJC52YWx1ZSk7XHJcblxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL3NldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvKiBTVEFSVDogU3Vic2NyaXB0aW9uIGZvciBsaXN0ICovXHJcblxyXG4gICAgICB0aGlzLnF1ZXJ5TGlzdFN0cmVhbSQgPSB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnBpcGUoXHJcbiAgICAgICAgbWFwKHggPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJtYXAgeCA9PiBcIiwgeClcclxuICAgICAgICAgIGNvbnN0IGZpbHRlcjFDb25kaXRpb24gPSAhIXggJiYgLyohIXguc29ydCAmJiAqLyAhIXgucGFnaW5hdGlvblxyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJtYXAgZmlsdGVyMUNvbmRpdGlvbiA9PiBcIiwgZmlsdGVyMUNvbmRpdGlvbilcclxuICAgICAgICAgIHJldHVybiB4XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgZmlsdGVyKCh4OiBJUXVlcnlMaXN0UmVxdWVzdCkgPT4gISF4ICYmIC8qISF4LnNvcnQgJiYgKi8gISF4LnBhZ2luYXRpb24pLFxyXG4gICAgICAgIGZpbHRlcigoXykgPT4gIXRoaXMucGF1c2VTdWJzY3RpcHRpb24pLFxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2LCBjdXJyKSA9PiB7XHJcblxyXG4gICAgICAgICAgLyogU1RBUlQ6IEFzc2ltaWxhdGlvbiBudWxsIGFuZCBub3QtZXhpc3RpbmcgcHJvcGVydHkgKi9cclxuICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICBsYW5nOiBzdHJpbmc7XHJcbiAgICAgICAgICAgICAgICBnZW5lcmFsU2VhcmNoPzogSUdlbmVyYWxTZWFyY2g7XHJcbiAgICAgICAgICAgICAgICBzb3J0PzogSVNvcnRJdGVtW107XHJcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uPzogSVBhZ2luYXRpb247XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXI/OiBhbnk7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJPcGVyYXRvcnM/OiBJRmlsdGVyT3BlcmF0b3JbXTtcclxuICAgICAgICAgICAgICAgIGluT3BlcmF0b3JzPzogSUluT3BlcmF0b3JbXTtcclxuICAgICAgICAgICAgICAgIHNlYXJjaD86IElTZWFyY2hJdGVtW107XHJcbiAgICAgICAgICAgICAgICBpZD86IG51bWJlciB8IHN0cmluZyB8IG51bGwsXHJcbiAgICAgICAgICAgICAgICBmb3JjZVJlbG9hZGluZ0ZsYWc/OiBib29sZWFuO1xyXG4gICAgICAgICAgICAqL1xyXG5cclxuICAgICAgICAgIC8vZ2VuZXJhbFNlYXJjaFxyXG4gICAgICAgICAgaWYgKCEhIXByZXYuZ2VuZXJhbFNlYXJjaD8uc2VhcmNoRm9yKSBwcmV2LmdlbmVyYWxTZWFyY2ggPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICBpZiAoISEhY3Vyci5nZW5lcmFsU2VhcmNoPy5zZWFyY2hGb3IpIGN1cnIuZ2VuZXJhbFNlYXJjaCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgICAvLyBzb3J0XHJcbiAgICAgICAgICBpZiAoISFwcmV2LnNvcnQpIHtcclxuICAgICAgICAgICAgaWYgKHByZXYuc29ydC5sZW5ndGggPT09IDApIHByZXYuc29ydCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghIWN1cnIuc29ydCkge1xyXG4gICAgICAgICAgICBpZiAoY3Vyci5zb3J0Lmxlbmd0aCA9PT0gMCkgY3Vyci5zb3J0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIHNlYXJjaFxyXG4gICAgICAgICAgaWYgKCEhcHJldi5zZWFyY2gpIHtcclxuICAgICAgICAgICAgaWYgKHByZXYuc2VhcmNoLmxlbmd0aCA9PT0gMCkgcHJldi5zZWFyY2ggPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoISFjdXJyLnNlYXJjaCkge1xyXG4gICAgICAgICAgICBpZiAoY3Vyci5zZWFyY2gubGVuZ3RoID09PSAwKSBjdXJyLnNlYXJjaCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBpZFxyXG4gICAgICAgICAgaWYgKCEhIXByZXYuaWQpIHByZXYuaWQgPSBudWxsO1xyXG4gICAgICAgICAgaWYgKCEhIWN1cnIuaWQpIGN1cnIuaWQgPSBudWxsO1xyXG5cclxuICAgICAgICAgIC8qIEVORDogQXNzaW1pbGF0aW9uIG51bGwgYW5kIG5vdC1leGlzdGluZyBwcm9wZXJ0eSAqL1xyXG5cclxuICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IEpTT04uc3RyaW5naWZ5KHByZXYpID09PSBKU09OLnN0cmluZ2lmeShjdXJyKTtcclxuXHJcbiAgICAgICAgICBpZiAoISEhY29uZGl0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXAoJ0NPTVBBUklTT04nKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3ByZXYnLCBwcmV2KTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2N1cnInLCBjdXJyKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2NvbmRpdGlvbicsIGNvbmRpdGlvbik7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBjb25kaXRpb247XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgLypcclxuICAgICAgICAgIC8qIFNUQVJUOiB1c2Ugc3dpdGNoTWFwIGZvciBjYW5jZWxsYXRpb25cclxuICAgICAgICAgICovXHJcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmdyb3VwKCdzd2l0Y2hNYXAgdHJpZ2dlcmVkJyk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInguaWQgPSBcIiwgeC5pZClcclxuICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmFwaURlZmluaXRpb24ucXVlcnlMaXN0UmVsYXRpdmVQYXRoICsgXCI/Y29tcHV0aW5nV2l0aExvY2FsVGltZVpvbmU9dHJ1ZVwiO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5xdWVyeUxpc3QoeCwgdXJsKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgLyogRU5EOiB1c2Ugc3dpdGNoTWFwIGZvciBjYW5jZWxsYXRpb25cclxuICAgICAgICAqL1xyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5xdWVyeUxpc3RTdWJzY3JpYmUoKTtcclxuXHJcbiAgICAgIC8qIEVORDogU3Vic2NyaXB0aW9uIGZvciBsaXN0ICovXHJcbiAgICAgIC8vfSk7XHJcbiAgICB9KVxyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZXNpemVIZWlnaHRGbGFnJC5uZXh0KCEhIXRoaXMucmVzaXplSGVpZ2h0RmxhZyQudmFsdWUpLCA1MDApXHJcblxyXG4gICAgLyoqIEVORCBzZXRUaW1lb3V0Ki9cclxuICB9XHJcblxyXG4gIG9uUGFyYW1LaXRWYWx1ZUNoYW5nZShkYXRhOiBJQ29yZUNvbW1vblBhcmFtS2l0RXZlbnRFbWl0dGVyRGF0YSk6IHZvaWQge1xyXG4gICAgc3dpdGNoIChkYXRhLmZpZWxkKSB7XHJcbiAgICAgIGNhc2UgJ29yZ0lkcyc6XHJcbiAgICAgICAgY29uc3QgbmV3T3JnSW5PcGVyYXRvcnM6IElJbk9wZXJhdG9yW10gPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5pbk9wZXJhdG9ycyQudmFsdWUpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBpbk9yZ2ZpbHRlciA9IG5ld09yZ0luT3BlcmF0b3JzLmZpbHRlcihcclxuICAgICAgICAgICh4KSA9PiB4LmZpZWxkID09PSAnb3JnSWQnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaW5PcmdmaWx0ZXIubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBpbk9yZ2ZpbHRlclswXS52YWx1ZXMgPSBkYXRhLnZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaW5PcmdmaWx0ZXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICBuZXdPcmdJbk9wZXJhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgZmllbGQ6ICdvcmdJZCcsXHJcbiAgICAgICAgICAgIHZhbHVlczogZGF0YS52YWx1ZSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgYEluT3BlcmF0b3JzIGVycm9yIGZvciAke2RhdGEuZmllbGR9OiBmaWVsZCBuYW1lIGlzIG5vdCB1bmlxdWUgaW4gdGhlIGFycmF5YFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5pbk9wZXJhdG9ycyQubmV4dChuZXdPcmdJbk9wZXJhdG9ycykpXHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdnZW5lcmFsU2VhcmNoJzpcclxuICAgICAgICB0aGlzLmdlbmVyYWxTZWFyY2gkLm5leHQoZGF0YS52YWx1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2RhdGVGcm9tJzpcclxuICAgICAgICBsZXQgbmV3RnJvbUZpbHRlck9wZXJhdG9yczogSUZpbHRlck9wZXJhdG9yW10gPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXJPcGVyYXRvcnMkLnZhbHVlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyRnJvbSA9IG5ld0Zyb21GaWx0ZXJPcGVyYXRvcnMuZmlsdGVyKFxyXG4gICAgICAgICAgKHgpID0+XHJcbiAgICAgICAgICAgIHguZmllbGQgPT09IHRoaXMuZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3IgJiZcclxuICAgICAgICAgICAgeC5vcGVyYXRvciA9PT0gRW51bUZpbHRlck9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGZpbHRlckZyb20ubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBpZiAoISFkYXRhLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGZpbHRlckZyb21bMF0uZGF0ZVRpbWVWYWx1ZSA9IG5ldyBEYXRlKFxyXG4gICAgICAgICAgICAgIChkYXRhLnZhbHVlIGFzIERhdGUpLnNldEhvdXJzKDAsIDAsIDAsIDApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaWx0ZXJGcm9tWzBdLmRhdGVUaW1lVmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyRnJvbS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIGlmICghIWRhdGEudmFsdWUpIHtcclxuICAgICAgICAgICAgbmV3RnJvbUZpbHRlck9wZXJhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgICBmaWVsZDogdGhpcy5kYXRlUGVyaW9kQ29tcGFyaXNvbkZvcixcclxuICAgICAgICAgICAgICBvcGVyYXRvcjogRW51bUZpbHRlck9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTCxcclxuICAgICAgICAgICAgICBkYXRlVGltZVZhbHVlOiBuZXcgRGF0ZShcclxuICAgICAgICAgICAgICAgIChkYXRhLnZhbHVlIGFzIERhdGUpLnNldEhvdXJzKDAsIDAsIDAsIDApXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICBgRmlsdGVyT3BlcmF0b3JzIGVycm9yIGZvciAke2RhdGEuZmllbGR9OiBjb21iaW5hdGlvbiBvZiBmaWVsZCBuYW1lIGFuZCBvcGVyYXRvciBuYW1lIGlzIG5vdCB1bmlxdWUgaW4gdGhlIGFycmF5YFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGZyb20gbmV3RnJvbUZpbHRlck9wZXJhdG9ycywgcmVtb3ZlIHRob3NlIGl0ZW1zIHdpdGggaGF2ZSBkYXRlVGltZVZhbHVlID09PSBudWxsXHJcbiAgICAgICAgbmV3RnJvbUZpbHRlck9wZXJhdG9ycyA9IG5ld0Zyb21GaWx0ZXJPcGVyYXRvcnMuZmlsdGVyKHggPT4geC5kYXRlVGltZVZhbHVlICE9PSBudWxsKVxyXG5cclxuICAgICAgICB0aGlzLmZpbHRlck9wZXJhdG9ycyQubmV4dChuZXdGcm9tRmlsdGVyT3BlcmF0b3JzKTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2RhdGVUbyc6XHJcbiAgICAgICAgbGV0IG5ld1RvRmlsdGVyT3BlcmF0b3JzOiBJRmlsdGVyT3BlcmF0b3JbXSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlck9wZXJhdG9ycyQudmFsdWUpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBmaWx0ZXJUbyA9IG5ld1RvRmlsdGVyT3BlcmF0b3JzLmZpbHRlcihcclxuICAgICAgICAgICh4KSA9PlxyXG4gICAgICAgICAgICB4LmZpZWxkID09PSB0aGlzLmRhdGVQZXJpb2RDb21wYXJpc29uRm9yICYmXHJcbiAgICAgICAgICAgIHgub3BlcmF0b3IgPT09IEVudW1GaWx0ZXJPcGVyYXRvci5MRVNTX1RIQU5fT1JfRVFVQUxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChmaWx0ZXJUby5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIGlmICghIWRhdGEudmFsdWUpIHtcclxuICAgICAgICAgICAgZmlsdGVyVG9bMF0uZGF0ZVRpbWVWYWx1ZSA9IG5ldyBEYXRlKFxyXG4gICAgICAgICAgICAgIChkYXRhLnZhbHVlIGFzIERhdGUpLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZpbHRlclRvWzBdLmRhdGVUaW1lVmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyVG8ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICBpZiAoISFkYXRhLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIG5ld1RvRmlsdGVyT3BlcmF0b3JzLnB1c2goe1xyXG4gICAgICAgICAgICAgIGZpZWxkOiB0aGlzLmRhdGVQZXJpb2RDb21wYXJpc29uRm9yLFxyXG4gICAgICAgICAgICAgIG9wZXJhdG9yOiBFbnVtRmlsdGVyT3BlcmF0b3IuTEVTU19USEFOX09SX0VRVUFMLFxyXG4gICAgICAgICAgICAgIGRhdGVUaW1lVmFsdWU6IG5ldyBEYXRlKFxyXG4gICAgICAgICAgICAgICAgKGRhdGEudmFsdWUgYXMgRGF0ZSkuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgYEZpbHRlck9wZXJhdG9ycyBlcnJvciBmb3IgJHtkYXRhLmZpZWxkfTogY29tYmluYXRpb24gb2YgZmllbGQgbmFtZSBhbmQgb3BlcmF0b3IgbmFtZSBpcyBub3QgdW5pcXVlIGluIHRoZSBhcnJheWBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBmcm9tIG5ld0Zyb21GaWx0ZXJPcGVyYXRvcnMsIHJlbW92ZSB0aG9zZSBpdGVtcyB3aXRoIGhhdmUgZGF0ZVRpbWVWYWx1ZSA9PT0gbnVsbFxyXG4gICAgICAgIG5ld1RvRmlsdGVyT3BlcmF0b3JzID0gbmV3VG9GaWx0ZXJPcGVyYXRvcnMuZmlsdGVyKHggPT4geC5kYXRlVGltZVZhbHVlICE9PSBudWxsKVxyXG5cclxuICAgICAgICB0aGlzLmZpbHRlck9wZXJhdG9ycyQubmV4dChuZXdUb0ZpbHRlck9wZXJhdG9ycyk7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdzdGF0dXNJZHMnOlxyXG4gICAgICAgIGNvbnN0IG5ld0luT3BlcmF0b3JzOiBJSW5PcGVyYXRvcltdID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuaW5PcGVyYXRvcnMkLnZhbHVlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgaW5maWx0ZXIgPSBuZXdJbk9wZXJhdG9ycy5maWx0ZXIoXHJcbiAgICAgICAgICAoeCkgPT4geC5maWVsZCA9PT0gdGhpcy5zdGF0dXNJbmNsdXNpb25Gb3JcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChpbmZpbHRlci5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIGluZmlsdGVyWzBdLnZhbHVlcyA9IGRhdGEudmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpbmZpbHRlci5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIG5ld0luT3BlcmF0b3JzLnB1c2goe1xyXG4gICAgICAgICAgICBmaWVsZDogdGhpcy5zdGF0dXNJbmNsdXNpb25Gb3IsXHJcbiAgICAgICAgICAgIHZhbHVlczogZGF0YS52YWx1ZSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgYEluT3BlcmF0b3JzIGVycm9yIGZvciAke2RhdGEuZmllbGR9OiBmaWVsZCBuYW1lIGlzIG5vdCB1bmlxdWUgaW4gdGhlIGFycmF5YFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5pbk9wZXJhdG9ycyQubmV4dChuZXdJbk9wZXJhdG9ycykpXHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0VG9FeGNlbCgpOiB2b2lkIHtcclxuICAgIC8qIFBoxrDGoW5nIHBow6FwIHh14bqldCBDU1YgKi9cclxuICAgIC8qIEPhuqduIHRoYXkgYuG6sW5nIHh14bqldCBFWENFTCBi4bqxbmcgQmFja2VuZCAqL1xyXG4gICAgLypcclxuICAgIGNvbnN0IGNzdkRhdGE6IGFueVtdW10gPSBbXTtcclxuXHJcbiAgICBsZXQgcm93MTogYW55W10gPSBbXTtcclxuICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKHgpID0+IHguZmllbGQgIT0gJ2lkJyk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLmNvbHVtbnMpXHJcbiAgICB0aGlzLmNvbHVtbnMubWFwKCh4KSA9PiB7XHJcbiAgICAgIHJvdzEucHVzaCh0aGlzLm1scy50cmFucyh4LmNhcHRpb24pKTtcclxuICAgIH0pO1xyXG4gICAgY3N2RGF0YS5wdXNoKHJvdzEpO1xyXG5cclxuICAgIHRoaXMubGlzdC5tYXAoKHJvdywgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3QgY3VycmVudFJvdzogYW55W10gPSBbXTtcclxuICAgICAgdGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi5maWVsZCAhPSAnaWQnKSB7XHJcbiAgICAgICAgICBsZXQgY3VycmVudENlbGwgPSByb3dbY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudENlbGw/LnJlcGxhY2VBbGwgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgY3VycmVudENlbGwgPSBjdXJyZW50Q2VsbC5yZXBsYWNlQWxsKCcsJywgJzsnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGN1cnJlbnRSb3cucHVzaChjdXJyZW50Q2VsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNzdkRhdGEucHVzaChjdXJyZW50Um93KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBjc3ZDb250ZW50ID0gY3N2RGF0YS5tYXAoKGUpID0+IGUuam9pbignLCcpKS5qb2luKCdcXG4nKTtcclxuXHJcbiAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGxpbmsuc2V0QXR0cmlidXRlKFxyXG4gICAgICAnaHJlZicsXHJcbiAgICAgICdkYXRhOnRleHQvY3N2O2NoYXJzZXQ9dXRmLTgsJUVGJUJCJUJGJyArIGVuY29kZVVSSShjc3ZDb250ZW50KVxyXG4gICAgKTtcclxuICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsICdFeHBvcnRFeGVsLmNzdicpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgIGxpbmsuY2xpY2soKTtcclxuICAgICovXHJcbiAgICAvKlxyXG4gICAgQuG6r3QgxJHhuqd1IHh14bqldCBFeGNlbCBi4bqxbmcgQmFja2VuZFxyXG4gICAgKi9cclxuXHJcbiAgICAvLyBUaHUgdGjhuq1wIG5oacOqbiBsaeG7h3VcclxuXHJcbiAgICBpZiAoIXRoaXMuaW5uZXJCb2R5Q291bnQkLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8odGhpcy5tbHMudHJhbnMoJ1hMU1hfTk9fUkVTVUxUX1RPX0VYUE9SVCcpLCBhbGVydE9wdGlvbnMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdXJsID0gdGhpcy5hcGlEZWZpbml0aW9uLnF1ZXJ5TGlzdFJlbGF0aXZlUGF0aDtcclxuICAgIGNvbnN0IHggPSB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlOyAvLyBD4bqnbiBsb+G6oWkgYuG7jyBwYWdpbmcga2jhu49pIMSR4buRaSB0xrDhu6NuZyBuw6B5XHJcblxyXG4gICAgeC5wYWdpbmF0aW9uID0ge1xyXG4gICAgICBza2lwOiAwLFxyXG4gICAgICB0YWtlOiB0aGlzLmlubmVyQm9keUNvdW50JC52YWx1ZVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBhcGlTdHJlYW0kOiBPYnNlcnZhYmxlPGFueT47XHJcbiAgICAvLyBO4bq/dSBjw7MgZMOybmcgZOG7ryBsaeG7h3UgY2hlY2tlZCB0aMOsIGNo4buJIHh14bqldCBjw6FjIGTDsm5nIG7DoHlcclxuICAgIGlmICghIXRoaXMuc2VsZWN0ZWREYXRhLmxlbmd0aCkge1xyXG4gICAgICBhcGlTdHJlYW0kID0gbmV3IE9ic2VydmFibGU8YW55PihvYnNlcnZlciA9PiB7XHJcbiAgICAgICAgb2JzZXJ2ZXIubmV4dCh7XHJcbiAgICAgICAgICBvazogdHJ1ZSxcclxuICAgICAgICAgIHN0YXR1czogMjAwLFxyXG4gICAgICAgICAgYm9keToge1xyXG4gICAgICAgICAgICBzdGF0dXNDb2RlOiAyMDAsXHJcbiAgICAgICAgICAgIGlubmVyQm9keToge1xyXG4gICAgICAgICAgICAgIGxpc3Q6IHRoaXMuc2VsZWN0ZWREYXRhXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFRyw6FpIGzhuqFpLCB4deG6pXQgMTAwJSBzYXUga2hpIMSRw6MgbOG7jWMgKHRvw6BuIGLhu5kgY8OhYyB0cmFuZylcclxuICAgICAgYXBpU3RyZWFtJCA9IHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5xdWVyeUxpc3QoeCwgdXJsKTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIEl0J3MgdGltZSB0byBzdWJzY3JpYmUgYXBpU3RyZWFtJFxyXG4gICAgdGhpcy5wcmVmZXRjaExvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIGFwaVN0cmVhbSQuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgIHRoaXMucHJlZmV0Y2hMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgLy90aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGAke2JvZHkuaW5uZXJCb2R5LmNvdW50fSByb3dzIG9mIGRhdGEgZmV0Y2hlZC4gSXQgaXMgdGltZSB0byBkbyB3aXRoIGJhY2tlbmQgZXhjZWwgZXhwb3J0aW5nYCwgYWxlcnRPcHRpb25zKVxyXG5cclxuICAgICAgICAgICAgY29uc3QgYXBpUG9pbnQgPSBhcGkuWExTWF9FWFBPUlRfQ09SRV9QQUdFX0xJU1RfVE9fRVhDRUw7XHJcbiAgICAgICAgICAgIGNvbnN0IGZsYXRDb2x1bW5zOiBJQ29yZVRhYmxlRmxhdENvbHVtbkl0ZW1bXSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb2x1bW5zLmZpbHRlcih4ID0+ICF4LmhpZGRlbikubWFwKGMgPT4ge1xyXG4gICAgICAgICAgICAgIGZsYXRDb2x1bW5zLnB1c2goXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIGNhcHRpb246IGMuY2FwdGlvbixcclxuICAgICAgICAgICAgICAgICAgZmllbGQ6IGMuZmllbGQsXHJcbiAgICAgICAgICAgICAgICAgIHR5cGU6IGMudHlwZSxcclxuICAgICAgICAgICAgICAgICAgcGlwZTogYy5waXBlLFxyXG4gICAgICAgICAgICAgICAgICBhbGlnbjogYy5hbGlnbixcclxuICAgICAgICAgICAgICAgICAgd2lkdGg6IGMud2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgIGhpZGRlbjogYy5oaWRkZW5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICBjb25zdCBmbGF0RGF0YTogYW55W10gPSBbXTtcclxuICAgICAgICAgICAgY29uc3Qga2V5czogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICAgICAgZmxhdENvbHVtbnMubWFwKGMgPT4ga2V5cy5wdXNoKGMuZmllbGQpKTtcclxuICAgICAgICAgICAgYm9keS5pbm5lckJvZHkubGlzdC5tYXAoKHJvdzogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZTogYW55ID0ge307XHJcbiAgICAgICAgICAgICAga2V5cy5tYXAoayA9PiB7XHJcbiAgICAgICAgICAgICAgICBlW2tdID0gcm93W2tdO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgZmxhdERhdGEucHVzaChlKTtcclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHtcclxuICAgICAgICAgICAgICBjb2x1bW5zOiBmbGF0Q29sdW1ucyxcclxuICAgICAgICAgICAgICBkYXRhOiBmbGF0RGF0YVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5qc29uU2VydmljZS5zdHJpbmdpZnkob2JqKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubG9uZ0FwaVJ1bm5pbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5leHBvcnRDb3JlUGFnZUxpc3RHcmlkVG9FeGNlbFN1YnNjcmlwdGlvbiA9IHRoaXMuYXBwU2VydmljZS5ibG9iUG9zdChhcGlQb2ludCwgcGF5bG9hZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmxvbmdBcGlSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmJvZHkuc3RhdHVzQ29kZSA9PT0gNDAwKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgICAgbGV0IGRvd25sb2FkTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICAgIGRvd25sb2FkTGluay5ocmVmID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW3Jlc3BvbnNlLmJvZHldKSlcclxuICAgICAgICAgICAgICBkb3dubG9hZExpbmsuc2V0QXR0cmlidXRlKFwiZG93bmxvYWRcIiwgdGhpcy5tbHMudHJhbnModGhpcy50aXRsZSkgKyBcIi54bHN4XCIpO1xyXG4gICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG93bmxvYWRMaW5rKTtcclxuICAgICAgICAgICAgICBkb3dubG9hZExpbmsuY2xpY2soKTtcclxuICAgICAgICAgICAgfSlcclxuXHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIClcclxuXHJcbiAgfVxyXG5cclxuICBvbkNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2soZTogSUNvcmVCdXR0b25WTlMpOiB2b2lkIHtcclxuICAgIHRoaXMuY29yZVBhZ2VIZWFkZXJCdXR0b25DbGljay5lbWl0KGUpO1xyXG5cclxuICAgIHN3aXRjaCAoZS5jb2RlKSB7XHJcblxyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRklMVEVSOlxyXG4gICAgICAgIC8vdGhpcy5maWx0ZXJLaXRTZXJ2aWNlLm9wZW4kLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5jb3JlRmlsdGVySHViU2VydmljZS5vcGVuJC5uZXh0KCF0aGlzLmNvcmVGaWx0ZXJIdWJTZXJ2aWNlLm9wZW4kLnZhbHVlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NSRUFURTpcclxuXHJcbiAgICAgICAgaWYgKCEhIXRoaXMuc2VsZlJlc29sdmVDb3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrKSB7XHJcblxyXG4gICAgICAgICAgdGhpcy5jb3JlUGFnZUVkaXRTZXJ2aWNlLmZyb21VcmwgPSB0aGlzLnJvdXRlci51cmw7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMubm9ybWFsTW9kZSkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgW2J0b2EoJzAnKSwgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfV0sXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZS5wYXJlbnQsXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBvdXRsZXRzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZVBhZ2VMaXN0QXV4OiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICBidG9hKCcwJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICB7IGxpc3RJbnN0YW5jZTogdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciB9LFxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRURJVDpcclxuICAgICAgICBpZiAoISEhdGhpcy5zZWxmUmVzb2x2ZUNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2spIHtcclxuXHJcbiAgICAgICAgICB0aGlzLmNvcmVQYWdlRWRpdFNlcnZpY2UuZnJvbVVybCA9IHRoaXMucm91dGVyLnVybDtcclxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IodGhpcy5tbHMudHJhbnMoJ1NFTEVDVF9PTkxZX09ORV9SRUNPUkRfVE9fRURJVCcpLCBhbGVydE9wdGlvbnMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCEhdGhpcy5ub3JtYWxNb2RlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgICAgIFtidG9hKCcnICsgdGhpcy5zZWxlY3RlZElkc1swXSksIHsgbGlzdEluc3RhbmNlOiB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyIH1dLFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZS5wYXJlbnQsXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgb3V0bGV0czoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JlUGFnZUxpc3RBdXg6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBidG9hKCcnICsgdGhpcy5zZWxlY3RlZElkc1swXSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKHRoaXMubWxzLnRyYW5zKCdOT19TRUxFQ1RFRF9JRF9UT19FRElUJyksIGFsZXJ0T3B0aW9ucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9BQ1RJVkFURTpcclxuICAgICAgICBpZiAoISF0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWxlY3RlZElkc1swXSAhPT0gJ251bWJlcidcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKFxyXG4gICAgICAgICAgICAgICAgRW51bVRyYW5zbGF0ZUtleS5DT1JFX1BBR0VfTElTVF9BQ1RJVkVfSURTX01FVEhPRF9TVVBPUlRTX09OTFlfTlVNQkVSX1RZUEVcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ05PX1NFTEVDVEVEX0lEX1RPX0FDVElWQVRFJyksXHJcbiAgICAgICAgICAgIGFsZXJ0T3B0aW9uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGxpc3RJZHNUb0FjdGl2ZTogYW55W10gPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YS5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgbGlzdElkc1RvQWN0aXZlLnB1c2godGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmdldFVuaXF1ZVN0cmluZyh4LCB0aGlzLmNvbmZpcm1hdGlvbkNvbHVtbnMpKVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb24gPSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0FDVElWQVRFXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNyZWF0ZU5ldyhcclxuICAgICAgICAgIEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9DT05GSVJNQVRJT04sXHJcbiAgICAgICAgICBFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfQ09ORklSTV9ESUFMT0dfQlVUVE9OX0NPTkZJUk0sXHJcbiAgICAgICAgICBFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfQ09ORklSTV9ESUFMT0dfQlVUVE9OX0NBTkNFTCxcclxuICAgICAgICAgIGZhbHNlLFxyXG4gICAgICAgICAgRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0RJQUxPR19TRVJWSUNFX0FSRV9ZT1VfU1VSRV9UT19BQ1RJVkUsXHJcbiAgICAgICAgICBsaXN0SWRzVG9BY3RpdmVcclxuICAgICAgICApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9JTkFDVElWQVRFOlxyXG4gICAgICAgIGlmICghIXRoaXMuc2VsZWN0ZWRJZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNlbGVjdGVkSWRzWzBdICE9PSAnbnVtYmVyJ1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8oXHJcbiAgICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoXHJcbiAgICAgICAgICAgICAgICBFbnVtVHJhbnNsYXRlS2V5LkNPUkVfUEFHRV9MSVNUX0FDVElWRV9JRFNfTUVUSE9EX1NVUE9SVFNfT05MWV9OVU1CRVJfVFlQRVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICB0aGlzLm1scy50cmFucygnTk9fU0VMRUNURURfSURfVE9fQUNUSVZBVEUnKSxcclxuICAgICAgICAgICAgYWxlcnRPcHRpb25zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbGlzdElkc1RvSW5hY3RpdmU6IGFueVtdID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgIGxpc3RJZHNUb0luYWN0aXZlLnB1c2godGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmdldFVuaXF1ZVN0cmluZyh4LCB0aGlzLmNvbmZpcm1hdGlvbkNvbHVtbnMpKVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb24gPSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0lOQUNUSVZBVEVcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY3JlYXRlTmV3KFxyXG4gICAgICAgICAgRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0RJQUxPR19TRVJWSUNFX0NPTkZJUk1BVElPTixcclxuICAgICAgICAgIEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fQ09ORklSTSxcclxuICAgICAgICAgIEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fQ0FOQ0VMLFxyXG4gICAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgICBFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfRElBTE9HX1NFUlZJQ0VfQVJFX1lPVV9TVVJFX1RPX0lOQUNUSVZFLFxyXG4gICAgICAgICAgbGlzdElkc1RvSW5hY3RpdmVcclxuICAgICAgICApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEU6XHJcbiAgICAgICAgaWYgKCEhdGhpcy5zZWxlY3RlZElkcy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2VsZWN0ZWRJZHNbMF0gIT09ICdudW1iZXInICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNlbGVjdGVkSWRzWzBdICE9PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8oXHJcbiAgICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoXHJcbiAgICAgICAgICAgICAgICAnQ09SRV9QQUdFX0xJU1RfREVMRVRFX0lEU19NRVRIT0RfU1VQT1JUU19PTkxZX05VTUJFUl9BTkRfU1RSSU5HX1RZUEVTJ1xyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICB0aGlzLm1scy50cmFucygnTk9fU0VMRUNURURfSURfVE9fREVMRVRFJyksXHJcbiAgICAgICAgICAgIGFsZXJ0T3B0aW9uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCEhdGhpcy5kZWxldGVWYWxpZGF0ZUZuKSB7XHJcblxyXG4gICAgICAgICAgY29uc3QgdmFsaWRhdGVkOiBib29sZWFuID0gdGhpcy5kZWxldGVWYWxpZGF0ZUZuKHRoaXMuc2VsZWN0ZWREYXRhKTtcclxuICAgICAgICAgIGlmICghISF2YWxpZGF0ZWQpIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVuZGluZ0FjdGlvbiA9IEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRpdGxlJC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9DT05GSVJNQVRJT04pXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLm9rQnV0dG9uVGV4dCQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfQ09ORklSTV9ESUFMT0dfQlVUVE9OX0NPTkZJUk0pXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNhbmNlbEJ1dHRvblRleHQkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0NPTkZJUk1fRElBTE9HX0JVVFRPTl9DQU5DRUwpXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dDYW5jZWxPbmx5JC5uZXh0KGZhbHNlKTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJvZHkkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0RJQUxPR19TRVJWSUNFX0FSRV9ZT1VfU1VSRV9UT19ERUxFVEUpO1xyXG4gICAgICAgIGxldCBsaXN0RGVsZXRlSWRzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpcm1hdGlvbkNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKHggPT4gISF4LnNob3dGb3JDb25maXJtYXRpb24pO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICBsaXN0RGVsZXRlSWRzLnB1c2godGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmdldFVuaXF1ZVN0cmluZyh4LCBjb25maXJtYXRpb25Db2x1bW5zKSlcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZURpYWxvZ0luZm9ybWF0aW9uTGluZXMpIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5pbmZvcm1hdGlvbkxpbmVzJC5uZXh0KGxpc3REZWxldGVJZHMpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5pbmZvcm1hdGlvbkxpbmVzJC5uZXh0KFtdKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dDb25maXJtRGlhbG9nJC5uZXh0KHRydWUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VOQVBQUk9WRTpcclxuICAgICAgICBpZiAoISF0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWxlY3RlZElkc1swXSAhPT0gJ251bWJlcicgJiZcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2VsZWN0ZWRJZHNbMF0gIT09ICdzdHJpbmcnXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbyhcclxuICAgICAgICAgICAgICB0aGlzLm1scy50cmFucyhcclxuICAgICAgICAgICAgICAgICdDT1JFX1BBR0VfTElTVF9ERUxFVEVfSURTX01FVEhPRF9TVVBPUlRTX09OTFlfTlVNQkVSX0FORF9TVFJJTkdfVFlQRVMnXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKCdOT19TRUxFQ1RFRF9JRF9UT19ERUxFVEUnKSxcclxuICAgICAgICAgICAgYWxlcnRPcHRpb25zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoISF0aGlzLmRlbGV0ZVZhbGlkYXRlRm4pIHtcclxuXHJcbiAgICAgICAgICBjb25zdCB2YWxpZGF0ZWQ6IGJvb2xlYW4gPSB0aGlzLmRlbGV0ZVZhbGlkYXRlRm4odGhpcy5zZWxlY3RlZERhdGEpO1xyXG4gICAgICAgICAgaWYgKCEhIXZhbGlkYXRlZCkgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wZW5kaW5nQWN0aW9uID0gRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VTkFQUFJPVkVcclxuICAgICAgICAvLyB0aGlzLmRpYWxvZ1NlcnZpY2UudGl0bGUkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0RJQUxPR19TRVJWSUNFX0NPTkZJUk1BVElPTilcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub2tCdXR0b25UZXh0JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fQ09ORklSTSlcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2FuY2VsQnV0dG9uVGV4dCQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfQ09ORklSTV9ESUFMT0dfQlVUVE9OX0NBTkNFTClcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0NhbmNlbE9ubHkkLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5idXN5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYm9keSQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfRElBTE9HX1NFUlZJQ0VfQVJFX1lPVV9VTkFQUFJPVkVfSU5QVVRfUkVBU09OKTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd2luZ1VwJC5uZXh0KHRydWUpXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dDb25maXJtRGlhbG9nJC5uZXh0KHRydWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQVBQUk9WRTpcclxuICAgICAgICBpZiAoISF0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWxlY3RlZElkc1swXSAhPT0gJ251bWJlcidcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKFxyXG4gICAgICAgICAgICAgICAgRW51bVRyYW5zbGF0ZUtleS5DT1JFX1BBR0VfTElTVF9BQ1RJVkVfSURTX01FVEhPRF9TVVBPUlRTX09OTFlfTlVNQkVSX1RZUEVcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ05PX1NFTEVDVEVEX0lEX1RPX0FQUFJPVkUnKSxcclxuICAgICAgICAgICAgYWxlcnRPcHRpb25zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlcXVlc3RBcHByb3ZlOiBJVG9nZ2xlQXBwcm92ZUlkc1JlcXVlc3QgPSB7XHJcbiAgICAgICAgICB2YWx1ZVRvQmluZDogdHJ1ZSxcclxuICAgICAgICAgIGlkczogdGhpcy5zZWxlY3RlZElkcyBhcyBudW1iZXJbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGNvbmZpcm1BcHByb3ZlID0gd2luZG93LmNvbmZpcm0oXHJcbiAgICAgICAgICB0aGlzLm1scy50cmFucygnY29tbW9uLmNvbmZpcm0uYXBwcm92ZS5wcmVmaXgnKSArXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkSWRzKSArXHJcbiAgICAgICAgICAnPydcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChjb25maXJtQXBwcm92ZSkge1xyXG4gICAgICAgICAgaWYgKCEhdGhpcy5jcnVkLnRvZ2dsZUFwcHJvdmVJZHMpIHtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLnBvc3QodGhpcy5jcnVkLnRvZ2dsZUFwcHJvdmVJZHMsIHJlcXVlc3RBcHByb3ZlKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwIHx8IHguYm9keS5zdGF0dXNDb2RlID09ICcyMDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQubmV4dChcclxuICAgICAgICAgICAgICAgICAgICAgICAgISEhdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFwcHJvdmUuaWRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uud2Fybih0aGlzLm1scy50cmFucyhFbnVtVHJhbnNsYXRlS2V5Lk5PX0FQSV9FTkRfUE9JTlRfUFJPVklERURfRk9SX0FDVElWQVRJT04pLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1BFTkRJTkdfQVBQUk9WRTpcclxuICAgICAgICBpZiAoISF0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWxlY3RlZElkc1swXSAhPT0gJ251bWJlcidcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKFxyXG4gICAgICAgICAgICAgICAgRW51bVRyYW5zbGF0ZUtleS5DT1JFX1BBR0VfTElTVF9BQ1RJVkVfSURTX01FVEhPRF9TVVBPUlRTX09OTFlfTlVNQkVSX1RZUEVcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ05PX1NFTEVDVEVEX0lEX1RPX1BFTkRJTkdfQVBQUk9WRScpLFxyXG4gICAgICAgICAgICBhbGVydE9wdGlvbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVxdWVzdFBlbmRpbmdBcHByb3ZlOiBJVG9nZ2xlQXBwcm92ZUlkc1JlcXVlc3QgPSB7XHJcbiAgICAgICAgICB2YWx1ZVRvQmluZDogZmFsc2UsXHJcbiAgICAgICAgICBpZHM6IHRoaXMuc2VsZWN0ZWRJZHMgYXMgbnVtYmVyW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBjb25maXJtUGVuZGluZ0FwcHJvdmUgPSB3aW5kb3cuY29uZmlybShcclxuICAgICAgICAgIHRoaXMubWxzLnRyYW5zKCdjb21tb24uY29uZmlybS5wZW5kaW5nLmFwcHJvdmUucHJlZml4JykgK1xyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZElkcykgK1xyXG4gICAgICAgICAgJz8nXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoY29uZmlybVBlbmRpbmdBcHByb3ZlKSB7XHJcbiAgICAgICAgICBpZiAoISF0aGlzLmNydWQudG9nZ2xlQXBwcm92ZUlkcykge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UucG9zdCh0aGlzLmNydWQudG9nZ2xlQXBwcm92ZUlkcywgcmVxdWVzdFBlbmRpbmdBcHByb3ZlKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwIHx8IHguYm9keS5zdGF0dXNDb2RlID09ICcyMDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQubmV4dChcclxuICAgICAgICAgICAgICAgICAgICAgICAgISEhdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBlbmRpbmdBcHByb3ZlLmlkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLndhcm4odGhpcy5tbHMudHJhbnMoRW51bVRyYW5zbGF0ZUtleS5OT19BUElfRU5EX1BPSU5UX1BST1ZJREVEX0ZPUl9BQ1RJVkFUSU9OKSwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9FWFBPUlRFWEVMOlxyXG5cclxuICAgICAgICB0aGlzLmV4cG9ydFRvRXhjZWwoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RPV05MT0FEOlxyXG4gICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiSEVBREVSX0RPV05MT0FEIGNsaWNrZWRcIiwgbm93KTtcclxuICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgaW1wb3J0LXNhbGFyeS1iYWNrZGF0ZWApISA8IDBcclxuICAgICAgICAgICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYHNhbGFyeS1pbXBvcnRgKSEgPCAwXHJcbiAgICAgICAgICAmJiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGBpbXBvcnQtYWRkYCkhIDwgMFxyXG4gICAgICAgICAgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgaW1wb3J0LW1vbnRobHktdGF4YCkhIDwgMFxyXG4gICAgICAgICAgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgc2hpZnRzb3J0YCkhIDwgMFxyXG4gICAgICAgICAgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgZGVjbGFyZXN1bnBlcmApISA8IDBcclxuICAgICAgICAgICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYHJlZ2lzdGVybGVhdmVgKSEgPCAwXHJcbiAgICAgICAgICAmJiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGBvdmVydGltZWApISA8IDBcclxuICAgICAgICAgICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYGltcG9ydC10YXgtYW5udWFsYCkhIDwgMFxyXG4gICAgICAgICAgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgY21zL3Byb2ZpbGUvbGlzdC9ldmFsdWF0ZWApISA8IDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuY2xpY2tHZW5lcmF0ZVRlbXBsYXRlJC5uZXh0KG5vdyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVVBMT0FEOlxyXG4gICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGBjbXMvcHJvZmlsZS9saXN0L2V2YWx1YXRlYCkgPj0gMCkge1xyXG4gICAgICAgICAgdGhpcy5jb3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrLmVtaXQoZSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5icm93c2VGaWxlSW5wdXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9MT0NLOlxyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVU5MT0NLOlxyXG4gICAgICAgIHRoaXMuY29yZVBhZ2VIZWFkZXJCdXR0b25DbGljay5lbWl0KGUpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY29uc29sZS5sb2coZS5jb2RlKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RlZElkc0NoYW5nZShlOiBzdHJpbmdbXSB8IG51bWJlcltdKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSWRzID0gZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJZHNDaGFuZ2UuZW1pdChlKTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0ZWREYXRhQ2hhbmdlKGU6IGFueVtdKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IGU7XHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0YUNoYW5nZS5lbWl0KGUpO1xyXG4gICAgaWYgKCEhZS5sZW5ndGgpIHtcclxuICAgICAgaWYgKGUubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIHRoaXMuYnV0dG9uR3JvdXBTdGF0dXM/Lm11c3RCZUhpZGRlbiQubmV4dChbXHJcbiAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0VESVQsXHJcbiAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0xJUVVJREFURV9DT05UUkFDVFxyXG4gICAgICAgIF0pXHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIGlmICghIWVbMF0uaXNMb2NrKSB7XHJcbiAgICAgICAgICB0aGlzLmJ1dHRvbkdyb3VwU3RhdHVzPy5tdXN0QmVIaWRkZW4kLm5leHQoW0VudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfTE9DS10pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYnV0dG9uR3JvdXBTdGF0dXM/Lm11c3RCZUhpZGRlbiQubmV4dChbRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VTkxPQ0tdKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYnV0dG9uR3JvdXBTdGF0dXM/Lm11c3RCZUhpZGRlbiQubmV4dChFTVBUWV9TRUxFQ1RJT05fSElEREVOX0JVVFRPTilcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBvbkNvbHVtbkNhcHRpb25DbGljayhlOiBJQ29yZVRhYmxlQ29sdW1uSXRlbSkge1xyXG4gICAgY29uc3QgbmV3U29ydDogSVNvcnRJdGVtW10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuc29ydCQudmFsdWUpKTtcclxuICAgIG5ld1NvcnQubWFwKChjKSA9PiB7XHJcbiAgICAgIGlmIChjLmZpZWxkID09PSBlLmZpZWxkKSB7XHJcbiAgICAgICAgaWYgKGMuc29ydERpcmVjdGlvbiA9PT0gRW51bVNvcnREaXJlY3Rpb24uTk9ORSkge1xyXG4gICAgICAgICAgYy5zb3J0RGlyZWN0aW9uID0gRW51bVNvcnREaXJlY3Rpb24uQVNDO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYy5zb3J0RGlyZWN0aW9uID09PSBFbnVtU29ydERpcmVjdGlvbi5BU0MpIHtcclxuICAgICAgICAgIGMuc29ydERpcmVjdGlvbiA9IEVudW1Tb3J0RGlyZWN0aW9uLkRFU0M7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGMuc29ydERpcmVjdGlvbiA9IEVudW1Tb3J0RGlyZWN0aW9uLk5PTkU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGMuc29ydERpcmVjdGlvbiA9IEVudW1Tb3J0RGlyZWN0aW9uLk5PTkU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5zb3J0JC5uZXh0KG5ld1NvcnQpO1xyXG4gIH1cclxuXHJcbiAgaW5wdXRGaWxlID0gYXN5bmMgKGU6IGFueSkgPT4ge1xyXG4gICAgY29uc29sZS5sb2coXCJpbnB1dEZpbGUgZVwiLCBlKVxyXG4gICAgY29uc3QgZmlsZXMgPSBlLnRhcmdldC5maWxlcztcclxuICAgIGNvbnN0IGZpbGUgPSBmaWxlc1swXTtcclxuICAgIGxldCBmaWxlTmFtZSA9IGZpbGUubmFtZTtcclxuXHJcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2ZpbGVdKTtcclxuXHJcbiAgICBibG9iVG9CYXNlNjQoYmxvYikudGhlbigoYmFzZTY0OiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5vbklucHV0RmlsZUJhc2U2NERhdGFSZWFkeS5lbWl0KGJhc2U2NCk7XHJcblxyXG4gICAgICAvLyBO4bq/dSB0aGFtIHPhu5EgZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3QgxJHGsOG7o2MgdHJ1eeG7gW4gdsOgb1xyXG4gICAgICAvLyBJbXBvcnQgc+G6vSB0aOG7sWMgdGhpIHRoZW8gcXV5IHRyw6xuaCBDb3JlXHJcbiAgICAgIGlmICh0aGlzLmdlbmVyYXRlVGVtcGxhdGVSZXF1ZXN0KSB7XHJcbiAgICAgICAgY29uc3QgaW1wb3J0WGxzeFRvRGJSZXF1ZXN0OiBJSW1wb3J0WGxzeFRvRGJSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgZmlsZU5hbWUsXHJcbiAgICAgICAgICBleENvZGU6IHRoaXMuZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3QuZXhDb2RlLFxyXG4gICAgICAgICAgYmFzZTY0U3RyaW5nOiBiYXNlNjRcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb25nQXBpUnVubmluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW1wb3J0WGxzeFRvRGIoaW1wb3J0WGxzeFRvRGJSZXF1ZXN0KS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSBOdW1iZXIodGhpcy5sb25nVGFza1NlcnZpY2UuZGF0YSQudmFsdWU/Lm91dGVyTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHRoaXMubG9uZ0FwaVJ1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgIGxldCBkb3dubG9hZExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgICAgICAgICAgICBkb3dubG9hZExpbmsuaHJlZiA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFt4LmJvZHldKSlcclxuICAgICAgICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnNwbGl0KFwiLnhsc3hcIilbMF0gKyBcIl9wcm9jZXNzZWRfXCIgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIFwiLnhsc3hcIjtcclxuICAgICAgICAgICAgICBkb3dubG9hZExpbmsuc2V0QXR0cmlidXRlKFwiZG93bmxvYWRcIiwgZmlsZU5hbWUpO1xyXG4gICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG93bmxvYWRMaW5rKTtcclxuICAgICAgICAgICAgICBkb3dubG9hZExpbmsuY2xpY2soKTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgaW1wb3J0UHJldmlld091dGVyUGFyYW06IElYbHN4SW1wb3J0T2JqZWN0ID0ge1xyXG4gICAgICAgICAgICAgICAgeGxzeFNpZDogdGhpcy5hdXRoU2VydmljZS5kYXRhJC52YWx1ZT8uaWQhLFxyXG4gICAgICAgICAgICAgICAgeGxzeEV4Q29kZTogdGhpcy5nZW5lcmF0ZVRlbXBsYXRlUmVxdWVzdC5leENvZGUsXHJcbiAgICAgICAgICAgICAgICB4bHN4U2Vzc2lvbjogc2Vzc2lvblxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKCEhIXRoaXMuaW1wb3J0UHJldmlld1BhdGgpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXCInaW1wb3J0UHJldmlld1BhdGgnIGlucHV0IHByb3BlcnR5IHdhcyBtaXNzaW5nIVwiLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgb3V0bGV0czoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JlUGFnZUxpc3RBdXg6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmltcG9ydFByZXZpZXdQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGlzdEluc3RhbmNlOiB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLCBzdGF0ZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbixcclxuICAgICAgICAgICAgICAgICAgICAgIGltcG9ydFByZXZpZXdPdXRlclBhcmFtXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG5cclxuXHJcbiAgfTtcclxuXHJcbiAgYnJvd3NlRmlsZUlucHV0KCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coXCJicm93c2VGaWxlSW5wdXRcIilcclxuICAgIHRoaXMuZmlsZUltcG9ydC5uYXRpdmVFbGVtZW50LnZhbHVlID0gbnVsbDtcclxuICAgIHRoaXMuZmlsZUltcG9ydC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICBvblByb2dyZXNzV2luZG93Q2xvc2UoXzogYW55KSB7XHJcbiAgICB0aGlzLmxvbmdBcGlSdW5uaW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLmV4cG9ydENvcmVQYWdlTGlzdEdyaWRUb0V4Y2VsU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpXHJcbiAgfVxyXG5cclxuICBvbkNvcmVUYWJzSGVhZGVyQ2xpY2soZTogYW55KTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhcIm9uQ29yZVRhYnNIZWFkZXJDbGlja1wiLCBlKTtcclxuICAgIGNvbnN0IHRhYiA9IHRoaXMuc3RhdHVzVGFicy5nZXQoZS5pbmRleCk7XHJcblxyXG4gICAgbGV0IG5ld0ZpbHRlck9wZXJhdG9yczogSUZpbHRlck9wZXJhdG9yW10gPSBKU09OLnBhcnNlKFxyXG4gICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlck9wZXJhdG9ycyQudmFsdWUpXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBuZXdPdXRlclBhcmFtOiBhbnk7XHJcblxyXG4gICAgaWYgKHRhYj8uaWQgPT09IDApIHsgLy8gQWxsXHJcblxyXG4gICAgICAvLyBzaG93IHN0YXR1cyBjb2x1bW5cclxuICAgICAgY29uc3QgdHJ5RmluZCA9IHRoaXMuY29sdW1ucy5maWx0ZXIoeCA9PiB4LmZpZWxkID09PSB0aGlzLmdyaWRTdGF0dXNDb2x1bW4pO1xyXG4gICAgICBpZiAodHJ5RmluZC5sZW5ndGgpIHtcclxuICAgICAgICB0cnlGaW5kWzBdLmhpZGRlbiA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29sdW1ucyA9IFsuLi50aGlzLmNvbHVtbnNdO1xyXG5cclxuICAgICAgbmV3T3V0ZXJQYXJhbSA9IHRoaXMub3V0ZXJQYXJhbSQudmFsdWU7XHJcblxyXG4gICAgICAvL0RlbGV0aW5nIGEgcHJvcGVydHkgZnJvbSBhbiBvYmplY3QgY2FuIGNhdXNlIGlzc3VlcyB3aGVuIG1lcmdpbmcgb2JqZWN0cyBsYXRlclxyXG4gICAgICAvL2RlbGV0ZSBuZXdPdXRlclBhcmFtW3RoaXMuY2FtZWxDYXNlRHRvU3RhdHVzSWRGaWVsZF07XHJcblxyXG4gICAgICAvL1NldHRpbmcgdGhlIFByb3BlcnR5IHRvIG51bGw6XHJcbiAgICAgIG5ld091dGVyUGFyYW1bdGhpcy5jYW1lbENhc2VEdG9TdGF0dXNJZEZpZWxkXSA9IG51bGw7XHJcblxyXG4gICAgICBuZXdGaWx0ZXJPcGVyYXRvcnMgPSBuZXdGaWx0ZXJPcGVyYXRvcnMuZmlsdGVyKHggPT4geC5maWVsZCAhPT0gdGhpcy5jYW1lbENhc2VEdG9TdGF0dXNJZEZpZWxkKVxyXG5cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAvLyBoaWRlIHN0YXR1cyBjb2x1bW5cclxuICAgICAgY29uc3QgdHJ5RmluZCA9IHRoaXMuY29sdW1ucy5maWx0ZXIoeCA9PiB4LmZpZWxkID09PSB0aGlzLmdyaWRTdGF0dXNDb2x1bW4pO1xyXG4gICAgICBpZiAodHJ5RmluZC5sZW5ndGgpIHtcclxuICAgICAgICB0cnlGaW5kWzBdLmhpZGRlbiA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb2x1bW5zID0gWy4uLnRoaXMuY29sdW1uc107XHJcblxyXG4gICAgICBpZiAodGFiPy5pZCA9PT0gLTEpIHsgLy8gVW5kZWZpbmVkXHJcbiAgICAgICAgbmV3T3V0ZXJQYXJhbSA9IHtcclxuICAgICAgICAgIC4uLnRoaXMub3V0ZXJQYXJhbSQudmFsdWUsXHJcbiAgICAgICAgICBbdGhpcy5jYW1lbENhc2VEdG9TdGF0dXNJZEZpZWxkXTogbnVsbFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ld091dGVyUGFyYW0gPSB7XHJcbiAgICAgICAgICAuLi50aGlzLm91dGVyUGFyYW0kLnZhbHVlLFxyXG4gICAgICAgICAgW3RoaXMuY2FtZWxDYXNlRHRvU3RhdHVzSWRGaWVsZF06IHRhYj8uaWQgLy8gVXNlIGJyYWNrZXQgbm90YXRpb24gZm9yIGR5bmFtaWMgcHJvcGVydHlcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZmlsdGVyU3RhdHVzID0gbmV3RmlsdGVyT3BlcmF0b3JzLmZpbHRlcigoeCkgPT4geC5maWVsZCA9PT0gdGhpcy5jYW1lbENhc2VEdG9TdGF0dXNJZEZpZWxkICYmIHgub3BlcmF0b3IgPT09IEVudW1GaWx0ZXJPcGVyYXRvci5FUVVBTCk7XHJcbiAgICAgIGlmICghZmlsdGVyU3RhdHVzLmxlbmd0aCkge1xyXG4gICAgICAgIGZpbHRlclN0YXR1cy5wdXNoKHtcclxuICAgICAgICAgIGZpZWxkOiB0aGlzLmNhbWVsQ2FzZUR0b1N0YXR1c0lkRmllbGQsXHJcbiAgICAgICAgICBvcGVyYXRvcjogRW51bUZpbHRlck9wZXJhdG9yLkVRVUFMLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKGZpbHRlclN0YXR1cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICBgRmlsdGVyT3BlcmF0b3JzIGVycm9yIGZvciAke3RoaXMuY2FtZWxDYXNlRHRvU3RhdHVzSWRGaWVsZH06IGNvbWJpbmF0aW9uIG9mIGZpZWxkIG5hbWUgYW5kIG9wZXJhdG9yIG5hbWUgaXMgbm90IHVuaXF1ZSBpbiB0aGUgYXJyYXlgXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBuZXdGaWx0ZXJPcGVyYXRvcnMgPSBbXHJcbiAgICAgICAgLi4ubmV3RmlsdGVyT3BlcmF0b3JzLmZpbHRlcih4ID0+IHguZmllbGQgIT09IHRoaXMuY2FtZWxDYXNlRHRvU3RhdHVzSWRGaWVsZCksXHJcbiAgICAgICAgLi4uZmlsdGVyU3RhdHVzXHJcbiAgICAgIF1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wYXVzZVN1YnNjdGlwdGlvbiA9IHRydWVcclxuICAgIHRoaXMub3V0ZXJQYXJhbSQubmV4dChuZXdPdXRlclBhcmFtKTtcclxuICAgIHRoaXMucGF1c2VTdWJzY3RpcHRpb24gPSBmYWxzZTtcclxuICAgIHRoaXMuZmlsdGVyT3BlcmF0b3JzJC5uZXh0KG5ld0ZpbHRlck9wZXJhdG9ycyk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5tYXAoKHgpID0+IHg/LnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgaWYgKCEhdGhpcy5xdWVyeUxpc3RTdWJzY3JpcHRpb24pIHRoaXMucXVlcnlMaXN0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgI2NvbnRhaW5lciBjbGFzcz1cImNvcmUtcGFnZS1saXN0LWNvbnRhaW5lciBwLXJlbGF0aXZlXCIgI2NvcmVQYWdlTGlzdENvbnRhaW5lclxyXG4gICAgW25nU3R5bGVdPVwieyBoZWlnaHQ6IGhlaWdodCArICdweCcgfVwiPlxyXG5cclxuICAgIEBpZiAoIWhpZGVIZWFkZXIpIHtcclxuICAgIDxjb3JlLXBhZ2UtaGVhZGVyIFtpbnN0YW5jZU51bWJlcl09XCJjb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlclwiIFt0aXRsZV09XCJ0aXRsZVwiXHJcbiAgICAgICAgKGJ1dHRvbkNsaWNrKT1cIm9uQ29yZVBhZ2VIZWFkZXJCdXR0b25DbGljaygkZXZlbnQpXCJcclxuICAgICAgICBbaGlkZUJ1dHRvbkdyb3VwXT1cIiEhc2Vla2VyTW9kZSB8fCAhIWhpZGVCdXR0b25Hcm91cFwiPjwvY29yZS1wYWdlLWhlYWRlcj5cclxuICAgIH1cclxuXHJcbiAgICA8aW5wdXQgI2ZpbGVJbXBvcnQgdHlwZT1cImZpbGVcIiBuYW1lPVwibmFtZVwiXHJcbiAgICAgICAgYWNjZXB0PVwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQsIGFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbFwiXHJcbiAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIChjaGFuZ2UpPSdpbnB1dEZpbGUoJGV2ZW50KScgLz5cclxuXHJcbiAgICA8IS0tXHJcbiAgICAgICAgS2hpIMSRw6MgdMOtbmggxJHGsOG7o2MgY2jDrW5oIHjDoWMgY2hp4buBdSBjYW8gY29tcG9zaXRpb25IZWlnaHQgY+G7p2EgY29yZS1jb21wb3NpdGlvblxyXG4gICAgICAgIEPhuqduIHTDrW5oIMSRxrDhu6NjIGNow61uaCB4w6FjIGNoaeG7gXUgY2FvIGNvcmVUYWJsZUhlaWdodCBj4bunYSBDb3JlVGFibGVcclxuICAgICAgICBO4bq/dSBwaOG6p24gdG9wIGPhu6dhIGNvbXBvc2l0aW9uIGPhu5EgxJHhu4tuaCAodsOtIGThu6Uga2hpIHPhu60gZOG7pW5nIENvcmVQYXJhbUtpdCkgdGjDrCBwaMOpcCB0cuG7qyDEkcahbiBnaeG6o25cclxuICAgICAgICBOaMawbmcgbuG6v3UgcGjhuqduIHRvcCDEkcaw4bujYyBjdXN0b21pemUsIHRhIHBo4bqjaSBz4butIGThu6VuZyBleHRyYU1hbnVhbE9mZnNldFxyXG4gICAgLS0+XHJcbiAgICA8Y29yZS1jb21wb3NpdGlvbiBbY29yZUNvbXBvc2l0aW9uSW5zdGFuY2VOdW1iZXJdPVwiY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJcIiBbdG9wXT1cInRvcFBsYWNlXCJcclxuICAgICAgICBbbGVmdF09XCIhIWhpZGVMZWZ0PyB1bmRlZmluZWQgOmxlZnRcIiBbbWFpbl09XCJjb3JlVGFibGVcIiBbaGVpZ2h0XT1cImNvbXBvc2l0aW9uSGVpZ2h0XCI+XHJcbiAgICA8L2NvcmUtY29tcG9zaXRpb24+XHJcblxyXG4gICAgPHJvdXRlci1vdXRsZXQgbmFtZT1cImNvcmVQYWdlTGlzdEF1eFwiPjwvcm91dGVyLW91dGxldD5cclxuXHJcbiAgICA8IS0tIEBpZiAoISF0YWJNb2RlICYmIHNob3dGaWx0ZXJLaXQpIHtcclxuICAgICAgICA8ZGl2IGNsYXNzID0gXCJmaWx0ZXIta2l0LWRyb3Bkb3duXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICB6SW5kZXg6IGZpbHRlcktpdFpJbmRleFxyXG4gICAgICAgIH1cIj5cclxuICAgICAgICAgICAgPGNvcmUtY29tbW9uLXBhcmFtLWtpdCBbaGlkZGVuTW9kZV09XCJ0cnVlXCIgW2RhdGVQZXJpb2RDb21wYXJpc29uRm9yXT1cImRhdGVQZXJpb2RDb21wYXJpc29uRm9yXCJcclxuICAgICAgICAgICAgICAgIFtlbmFibGVUaW1lWm9uZUNvbnZlcnRlckZvckRhdGVUaW1lUGVyaW9kUGFyYW1ldGVyc109XCJlbmFibGVUaW1lWm9uZUNvbnZlcnRlckZvckRhdGVUaW1lUGVyaW9kUGFyYW1ldGVyc1wiXHJcbiAgICAgICAgICAgICAgICBbZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3JMYWJlbEtleV09XCJkYXRlUGVyaW9kQ29tcGFyaXNvbkZvckxhYmVsS2V5XCJcclxuICAgICAgICAgICAgICAgIFtzdGF0dXNJbmNsdXNpb25Gb3JdPVwic3RhdHVzSW5jbHVzaW9uRm9yXCIgW3N0YXR1c0luY2x1c2lvbkZvckxhYmVsS2V5XT1cInN0YXR1c0luY2x1c2lvbkZvckxhYmVsS2V5XCJcclxuICAgICAgICAgICAgICAgIFtzdGF0dXNPcHRpb25zQXBpXT1cInN0YXR1c09wdGlvbnNBcGlcIiBbc3RhdHVzT3B0aW9ucyRdPVwic3RhdHVzT3B0aW9ucyRcIiBbc2hvd09yZ1BhcmFtXT1cInNob3dPcmdQYXJhbVwiXHJcbiAgICAgICAgICAgICAgICBbaGlkZUdlbmVyYWxTZWFyY2hdPVwiaGlkZUdlbmVyYWxTZWFyY2hcIiBbaGlkZURhdGVQZXJpb2RDb21wYXJpc29uXT1cImhpZGVEYXRlUGVyaW9kQ29tcGFyaXNvblwiXHJcbiAgICAgICAgICAgICAgICBbaGlkZVN0YXR1c0luY2x1c2lvbl09XCJoaWRlU3RhdHVzSW5jbHVzaW9uXCJcclxuICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvblBhcmFtS2l0VmFsdWVDaGFuZ2UoJGV2ZW50KVwiPjwvY29yZS1jb21tb24tcGFyYW0ta2l0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgfSAtLT5cclxuXHJcbiAgICBAaWYgKCFkaXNhYmxlRmlsdGVySHViICYmIHNob3dGaWx0ZXIgJiYgISFwYXJhbVJvd3MpIHtcclxuICAgICAgICA8Y29yZS1maWx0ZXItaHViIFtwYXJhbVJvd3NdPVwicGFyYW1Sb3dzXCI+PC9jb3JlLWZpbHRlci1odWI+XHJcbiAgICB9XHJcblxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjdG9wUGxhY2U+XHJcblxyXG4gICAgQGlmICghdGFiTW9kZSkge1xyXG4gICAgICAgIEBpZiAoISFzaG93UGFyYW1LaXQpIHtcclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxjb3JlLWNvbW1vbi1wYXJhbS1raXQgW2hpZGRlbk1vZGVdPVwiZmFsc2VcIiBbZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3JdPVwiZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtlbmFibGVUaW1lWm9uZUNvbnZlcnRlckZvckRhdGVUaW1lUGVyaW9kUGFyYW1ldGVyc109XCJlbmFibGVUaW1lWm9uZUNvbnZlcnRlckZvckRhdGVUaW1lUGVyaW9kUGFyYW1ldGVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2RhdGVQZXJpb2RDb21wYXJpc29uRm9yTGFiZWxLZXldPVwiZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3JMYWJlbEtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0YXR1c0luY2x1c2lvbkZvcl09XCJzdGF0dXNJbmNsdXNpb25Gb3JcIiBbc3RhdHVzSW5jbHVzaW9uRm9yTGFiZWxLZXldPVwic3RhdHVzSW5jbHVzaW9uRm9yTGFiZWxLZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdGF0dXNPcHRpb25zQXBpXT1cInN0YXR1c09wdGlvbnNBcGlcIiBbc3RhdHVzT3B0aW9ucyRdPVwic3RhdHVzT3B0aW9ucyRcIiBbc2hvd09yZ1BhcmFtXT1cInNob3dPcmdQYXJhbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2hpZGVHZW5lcmFsU2VhcmNoXT1cImhpZGVHZW5lcmFsU2VhcmNoXCIgW2hpZGVEYXRlUGVyaW9kQ29tcGFyaXNvbl09XCJoaWRlRGF0ZVBlcmlvZENvbXBhcmlzb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtoaWRlU3RhdHVzSW5jbHVzaW9uXT1cImhpZGVTdGF0dXNJbmNsdXNpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvblBhcmFtS2l0VmFsdWVDaGFuZ2UoJGV2ZW50KVwiPjwvY29yZS1jb21tb24tcGFyYW0ta2l0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDwhLS0gQGlmIChlbmFibGVGaWx0ZXJLaXQpIHtcclxuICAgICAgICAgICAgPGNvcmUtZmlsdGVyLWtpdCBcclxuICAgICAgICAgICAgW2RhdGVQZXJpb2RDb21wYXJpc29uRm9yXT1cImRhdGVQZXJpb2RDb21wYXJpc29uRm9yXCJcclxuICAgICAgICAgICAgW2VuYWJsZVRpbWVab25lQ29udmVydGVyRm9yRGF0ZVRpbWVQZXJpb2RQYXJhbWV0ZXJzXT1cImVuYWJsZVRpbWVab25lQ29udmVydGVyRm9yRGF0ZVRpbWVQZXJpb2RQYXJhbWV0ZXJzXCJcclxuICAgICAgICAgICAgW2RhdGVQZXJpb2RDb21wYXJpc29uRm9yTGFiZWxLZXldPVwiZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3JMYWJlbEtleVwiXHJcbiAgICAgICAgICAgIFtzdGF0dXNJbmNsdXNpb25Gb3JdPVwic3RhdHVzSW5jbHVzaW9uRm9yXCIgXHJcbiAgICAgICAgICAgIFtzdGF0dXNJbmNsdXNpb25Gb3JMYWJlbEtleV09XCJzdGF0dXNJbmNsdXNpb25Gb3JMYWJlbEtleVwiXHJcbiAgICAgICAgICAgIFtzdGF0dXNPcHRpb25zQXBpXT1cInN0YXR1c09wdGlvbnNBcGlcIiBcclxuICAgICAgICAgICAgW3N0YXR1c09wdGlvbnMkXT1cInN0YXR1c09wdGlvbnMkXCIgXHJcbiAgICAgICAgICAgIFtzaG93T3JnUGFyYW1dPVwic2hvd09yZ1BhcmFtXCJcclxuICAgICAgICAgICAgW3Nob3dPcmdQYXJhbURyb3Bkb3duXT1cInNob3dPcmdQYXJhbURyb3Bkb3duXCJcclxuICAgICAgICAgICAgW2hpZGVHZW5lcmFsU2VhcmNoXT1cImhpZGVHZW5lcmFsU2VhcmNoXCJcclxuICAgICAgICAgICAgW2hpZGVEYXRlUGVyaW9kQ29tcGFyaXNvbl09XCJoaWRlRGF0ZVBlcmlvZENvbXBhcmlzb25cIlxyXG4gICAgICAgICAgICBbaGlkZVN0YXR1c0luY2x1c2lvbl09XCJoaWRlU3RhdHVzSW5jbHVzaW9uXCJcclxuICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uUGFyYW1LaXRWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICA+PC9jb3JlLWZpbHRlci1raXQ+ICAgICAgICAgICAgXHJcbiAgICAgICAgfSAtLT5cclxuICAgIH0gQGVsc2Uge1xyXG4gICAgPGNvcmUtdGFicyBbaGVhZGVyc109XCJ0YWJIZWFkZXJzXCIgW2NvbnRlbnRzXT1cIltdXCIgW2hlaWdodF09XCI0NVwiIFtoZWFkZXJMaW5lSGVpZ2h0XT1cIjQ1XCJcclxuICAgICAgICAob25IZWFkZXJDbGljayk9XCJvbkNvcmVUYWJzSGVhZGVyQ2xpY2soJGV2ZW50KVwiPlxyXG4gICAgPC9jb3JlLXRhYnM+XHJcbiAgICA8IS0tIDxjb3JlLWZpbHRlci1raXQgXHJcbiAgICAgICAgW2RhdGVQZXJpb2RDb21wYXJpc29uRm9yXT1cImRhdGVQZXJpb2RDb21wYXJpc29uRm9yXCJcclxuICAgICAgICBbZW5hYmxlVGltZVpvbmVDb252ZXJ0ZXJGb3JEYXRlVGltZVBlcmlvZFBhcmFtZXRlcnNdPVwiZW5hYmxlVGltZVpvbmVDb252ZXJ0ZXJGb3JEYXRlVGltZVBlcmlvZFBhcmFtZXRlcnNcIlxyXG4gICAgICAgIFtkYXRlUGVyaW9kQ29tcGFyaXNvbkZvckxhYmVsS2V5XT1cImRhdGVQZXJpb2RDb21wYXJpc29uRm9yTGFiZWxLZXlcIlxyXG4gICAgICAgIFtzdGF0dXNJbmNsdXNpb25Gb3JdPVwic3RhdHVzSW5jbHVzaW9uRm9yXCIgXHJcbiAgICAgICAgW3N0YXR1c0luY2x1c2lvbkZvckxhYmVsS2V5XT1cInN0YXR1c0luY2x1c2lvbkZvckxhYmVsS2V5XCJcclxuICAgICAgICBbc3RhdHVzT3B0aW9uc0FwaV09XCJzdGF0dXNPcHRpb25zQXBpXCIgXHJcbiAgICAgICAgW3N0YXR1c09wdGlvbnMkXT1cInN0YXR1c09wdGlvbnMkXCIgXHJcbiAgICAgICAgW3Nob3dPcmdQYXJhbV09XCJzaG93T3JnUGFyYW1cIlxyXG4gICAgICAgIFtzaG93T3JnUGFyYW1Ecm9wZG93bl09XCJzaG93T3JnUGFyYW1Ecm9wZG93blwiXHJcbiAgICAgICAgW2hpZGVHZW5lcmFsU2VhcmNoXT1cImhpZGVHZW5lcmFsU2VhcmNoXCJcclxuICAgICAgICBbaGlkZURhdGVQZXJpb2RDb21wYXJpc29uXT1cImhpZGVEYXRlUGVyaW9kQ29tcGFyaXNvblwiXHJcbiAgICAgICAgW2hpZGVTdGF0dXNJbmNsdXNpb25dPVwiaGlkZVN0YXR1c0luY2x1c2lvblwiXHJcbiAgICAgICAgKG9uQ2hhbmdlKT1cIm9uUGFyYW1LaXRWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgID48L2NvcmUtZmlsdGVyLWtpdD4gLS0+XHJcbiAgICB9XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvcFwiPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjb3JlVGFibGU+XHJcblxyXG4gICAgPGRpdiBbY2xhc3Mub3BhY2l0eTBdPVwiISEhZ2VvbWV0cmljRG9uZVwiPlxyXG5cclxuICAgICAgICA8IS0tXHJcbiAgICAgICAgICAgIEtoaSDEkcOjIHTDrW5oIMSRxrDhu6NjIGNow61uaCB4w6FjIGNoaeG7gXUgY2FvIGNvbXBvc2l0aW9uSGVpZ2h0IGPhu6dhIGNvcmUtY29tcG9zaXRpb25cclxuICAgICAgICAgICAgQ+G6p24gdMOtbmggxJHGsOG7o2MgY2jDrW5oIHjDoWMgY2hp4buBdSBjYW8gY29yZVRhYmxlSGVpZ2h0IGPhu6dhIENvcmVUYWJsZVxyXG4gICAgICAgICAgICBO4bq/dSBwaOG6p24gdG9wIGPhu6dhIGNvbXBvc2l0aW9uIGPhu5EgxJHhu4tuaCAodsOtIGThu6Uga2hpIHPhu60gZOG7pW5nIENvcmVQYXJhbUtpdCkgdGjDrCBwaMOpcCB0cuG7qyDEkcahbiBnaeG6o25cclxuICAgICAgICAgICAgTmjGsG5nIG7hur91IHBo4bqnbiB0b3AgxJHGsOG7o2MgY3VzdG9taXplLCB0YSBwaOG6o2kgc+G7rSBk4bulbmcgZXh0cmFNYW51YWxPZmZzZXRcclxuXHJcbiAgICAgICAgICAgIEPhuqduIHTDrW5oIHRhYmxlSGVpZ2h0IG5oxrAgdGjhur8gbsOgbz9cclxuICAgICAgICAtLT5cclxuICAgICAgICA8Y29yZS10YWJsZSAjY29yZVRhYmxlQWxvbmUgd2lkdGg9XCIxMDAlXCIgW2hlaWdodF09XCJ0YWJsZUhlaWdodFwiIFtyb3dIZWlnaHRdPVwicm93SGVpZ2h0IHx8ICc0NnB4J1wiIFt3cmFwXT1cIndyYXBcIlxyXG4gICAgICAgICAgICBbY29sdW1uc109XCJjb2x1bW5zXCIgW2RhdGFdPVwibGlzdFwiIFtzaG93Q2hlY2tib3hdPVwiISEhaGlkZUNoZWNrXCIgaGVhZGVySGVpZ2h0PVwiNjBweFwiXHJcbiAgICAgICAgICAgIFtzaG93VG9vbHNdPVwic2hvd0xpc3RJbmxpbmVUb29sc1wiIFt0b29sc109XCJpbmxpbmVUb29sc1wiIChvblRvb2xDbGljayk9XCJvblRvb2xDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgKG9uUm93Q2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQpXCIgKG9uUm93RG91YmxlQ2xpY2spPVwib25Sb3dEb3VibGVDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgKG9uU2VsZWN0ZWRJZHNDaGFuZ2UpPVwib25TZWxlY3RlZElkc0NoYW5nZSgkZXZlbnQpXCIgKG9uU2VsZWN0ZWREYXRhQ2hhbmdlKT1cIm9uU2VsZWN0ZWREYXRhQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICBbZnJvemVuXT1cImZyb3plbiB8fCAxXCIgKG9uU2VhcmNoaW5nKT1cIm9uU2VhcmNoaW5nKCRldmVudClcIlxyXG4gICAgICAgICAgICAob25Db2x1bW5DYXB0aW9uQ2xpY2spPVwib25Db2x1bW5DYXB0aW9uQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFtjb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcl09XCJjb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlclwiIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxyXG4gICAgICAgICAgICBbY29sdW1uU2VhcmNoRGVmYXVsdE9wZW5dPVwiY29sdW1uU2VhcmNoRGVmYXVsdE9wZW5cIiBbbGF6eUxvYWRpbmddPVwidHJ1ZVwiIFtoZWFkZXJXcmFwXT1cImhlYWRlcldyYXBcIlxyXG4gICAgICAgICAgICBbaGVhZGVyRmlyc3RSb3dIZWlnaHRdPVwiaGVhZGVyRmlyc3RSb3dIZWlnaHRcIiBbbm9QYWRkaW5nQ2VsbF09XCJub1BhZGRpbmdDZWxsXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVIaWdobGlnaHRPbkNsaWNrXT1cImRpc2FibGVIaWdobGlnaHRPbkNsaWNrXCIgW3ByaW1hcnlLZXldPVwicHJpbWFyeUtleVwiPjwvY29yZS10YWJsZT5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBkLWZsZXgtYmV0d2VlbiBwYWdpbmF0aW9uLXdyYXBwZXIgdy0xMDBcIiAjcGFnaW5hdGlvbkNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPGNvcmUtcGFnaW5hdGlvbi1mdWxsIFtoZWlnaHRdPVwicGFnaW5hdGlvbkhlaWdodFwiIFtjdXJyZW50UGFnZSRdPVwiY3VycmVudFBhZ2UkXCIgW3BhZ2VTaXplJF09XCJwYWdlU2l6ZSRcIlxyXG4gICAgICAgICAgICAgICAgW3BhZ2VDb3VudF09XCJwYWdlQ291bnRcIiBbaW5uZXJCb2R5Q291bnQkXT1cImlubmVyQm9keUNvdW50JFwiIFtwYWdpbmF0aW9uJF09XCJwYWdpbmF0aW9uJFwiXHJcbiAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJsb2FkaW5nXCIgW2ZpeGVkUGFnZVNpemVdPVwiZml4ZWRQYWdlU2l6ZVwiIFtiYWNrZ3JvdW5kXT1cIicjODQ4NDg0J1wiPjwvY29yZS1wYWdpbmF0aW9uLWZ1bGw+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxjb3JlLWFwaS1wcm9ncmVzcyAqbmdJZj1cImxvbmdBcGlSdW5uaW5nXCIgKG9uQ2xvc2UpPVwib25Qcm9ncmVzc1dpbmRvd0Nsb3NlKCRldmVudClcIj48L2NvcmUtYXBpLXByb2dyZXNzPlxyXG5cclxuPGFwcC1mdWxsc2NyZWVuLW1vZGFsLWxvYWRlciAqbmdJZj1cInByZWZldGNoTG9hZGluZ1wiPjwvYXBwLWZ1bGxzY3JlZW4tbW9kYWwtbG9hZGVyPiJdfQ==
|
|
2015
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1wYWdlLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtcGFnZS1saXN0L2NvcmUtcGFnZS1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXBhZ2UtbGlzdC9jb3JlLXBhZ2UtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBb0MsU0FBUyxFQUFlLE1BQU0sRUFBRSxZQUFZLEVBQTRCLFNBQVMsR0FBRyxNQUFNLGVBQWUsQ0FBQztBQUNuTCxPQUFPLEVBQTBCLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsR0FBNEQsTUFBTSxvQ0FBb0MsQ0FBQztBQUlsSSxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBZ0IsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsR0FBRyxNQUFNLE1BQU0sQ0FBQztBQUN6SSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQztBQUM3RyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsMkJBQTJCLEVBQXVDLE1BQU0sZ0ZBQWdGLENBQUM7QUFLbEssT0FBTyxFQUFFLGtCQUFrQixFQUF3RixNQUFNLG9DQUFvQyxDQUFD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Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLDZCQUE2QjtzQkFBckMsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUkseUJBQXlCO3NCQUFsQyxNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRywwQkFBMEI7c0JBQW5DLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFFaUIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNjLHFCQUFxQjtzQkFBeEQsU0FBUzt1QkFBQyx1QkFBdUI7Z0JBQ0EsbUJBQW1CO3NCQUFwRCxTQUFTO3VCQUFDLHFCQUFxQjtnQkFDUCxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgVmlld0NoaWxkLCBUZW1wbGF0ZVJlZiwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgaXNEZXZNb2RlLCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBDb3JlVGFibGVDb21wb25lbnQsIElDb3JlVGFibGVUb29sQ2xpY2tFdmVudEVtaXR0ZXJEYXRhLCBJQ29yZVRhYmxlVG9vbEl0ZW0sIH0gZnJvbSAnLi4vY29yZS10YWJsZS9jb3JlLXRhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVQYWdlTGlzdFNlcnZpY2UsIElHZW5lcmF0ZVRlbXBsYXRlUmVxdWVzdCwgSUltcG9ydFhsc3hUb0RiUmVxdWVzdCB9IGZyb20gJy4vY29yZS1wYWdlLWxpc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVQYWdlRWRpdFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlLXBhZ2UtZWRpdC9jb3JlLXBhZ2UtZWRpdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZyb21FdmVudCwgbWFwLCBzd2l0Y2hNYXAsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvcmVQYWdlTGlzdFN0YXRlIH0gZnJvbSAnLi9jb3JlLXBhZ2UtbGlzdC5zdGF0ZSc7XHJcbmltcG9ydCB7IElDb3JlQnV0dG9uVk5TIH0gZnJvbSAnLi4vY29yZS1idXR0b24tZ3JvdXAtdm5zL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9JQ29yZUJ1dHRvblZOUyc7XHJcbmltcG9ydCB7IEVudW1Db3JlQnV0dG9uVk5TQ29kZSB9IGZyb20gJy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvRW51bUNvcmVCdXR0b25WTlNDb2RlJztcclxuaW1wb3J0IHsgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtZm9ybS1jb250cm9sLWJhc2UvY29yZS1mb3JtLWNvbnRyb2wtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29yZUNvbW1vblBhcmFtS2l0Q29tcG9uZW50LCBJQ29yZUNvbW1vblBhcmFtS2l0RXZlbnRFbWl0dGVyRGF0YSB9IGZyb20gJy4uL2NvcmUtY29tbW9uLXBhcmFtLWtpdC9jb3JlLWNvbW1vbi1wYXJhbS1raXQvY29yZS1jb21tb24tcGFyYW0ta2l0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExvbmdUYXNrU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvbmctdGFzay5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZUNvbXBvc2l0aW9uU2VydmljZSB9IGZyb20gJy4uL2NvcmUtY29tcG9zaXRpb24vY29yZS1jb21wb3NpdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZUJ1dHRvbkdyb3VwU2VydmljZSB9IGZyb20gJy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC1zZXJ2aWNlJztcclxuaW1wb3J0IHsgSUNvcmVCdXR0b25Hcm91cFN0YXR1cyB9IGZyb20gJy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC1zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW51bUZpbHRlck9wZXJhdG9yLCBJRmlsdGVyT3BlcmF0b3IsIElJbk9wZXJhdG9yLCBJUGFnaW5hdGlvbiwgSVF1ZXJ5TGlzdFJlcXVlc3QsIElTZWFyY2hJdGVtLCBJU29ydEl0ZW0gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lRdWVyeUxpc3RSZXF1ZXN0JztcclxuaW1wb3J0IHsgYXBpIH0gZnJvbSBcImFscGhhLWdsb2JhbC1jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgRW51bVRyYW5zbGF0ZUtleSB9IGZyb20gXCJhbHBoYS1nbG9iYWwtY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbXVsdGktbGFuZ3VhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBwU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUm91dGluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yb3V0aW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGF5b3V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBKc29uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2pzb24uc2VydmljZSc7XHJcbmltcG9ydCB7IGFsZXJ0T3B0aW9ucywgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvYWxlcnRPcHRpb25zJztcclxuaW1wb3J0IHsgSUZvcm1hdGVkUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lGb3JtYXRlZFJlc3BvbnNlJztcclxuaW1wb3J0IHsgSVF1ZXJ5TGlzdFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUXVlcnlMaXN0UmVzcG9uc2UnO1xyXG5pbXBvcnQgeyBkZWZhdWx0UGFnaW5nIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2RlZmF1bHRQYWdpbmcnO1xyXG5pbXBvcnQgeyBJSWRzUmVxdWVzdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSUlkc1JlcXVlc3QnO1xyXG5pbXBvcnQgeyBJVG9nZ2xlQWN0aXZlSWRzUmVxdWVzdCwgSVRvZ2dsZUFwcHJvdmVJZHNSZXF1ZXN0LCBJVG9uZ2xlVW5BcHByb3ZlSWRzUmVxdWVzdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVRvZ2dsZUFjdGl2ZUlkc1JlcXVlc3QnO1xyXG5pbXBvcnQgeyBFbnVtU29ydERpcmVjdGlvbiB9IGZyb20gJy4uLy4uL2VudW0vRW51bVNvcnREaXJlY3Rpb24nO1xyXG5pbXBvcnQgeyBJU3lzTXV0YXRpb25Mb2dCZWZvcmVBZnRlclJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lTeXNNdXRhdGlvbkxvZ0JlZm9yZUFmdGVyUmVxdWVzdCc7XHJcbmltcG9ydCB7IElDb3JlVGFibGVDb2x1bW5JdGVtIH0gZnJvbSAnLi4vY29yZS10YWJsZS9JQ29yZVRhYmxlQ29sdW1uSXRlbSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvcmVQYWdpbmF0aW9uRnVsbENvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtcGFnaW5hdGlvbi1mdWxsL2NvcmUtcGFnaW5hdGlvbi1mdWxsL2NvcmUtcGFnaW5hdGlvbi1mdWxsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVQYWdlSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1wYWdlLWhlYWRlci9jb3JlLXBhZ2UtaGVhZGVyL2NvcmUtcGFnZS1oZWFkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZUNvbXBvc2l0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1jb21wb3NpdGlvbi9jb3JlLWNvbXBvc2l0aW9uL2NvcmUtY29tcG9zaXRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZUFwaVByb2dyZXNzQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1hcGktcHJvZ3Jlc3MvY29yZS1hcGktcHJvZ3Jlc3MvY29yZS1hcGktcHJvZ3Jlc3MuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRnVsbHNjcmVlbk1vZGFsTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZnVsbHNjcmVlbi1tb2RhbC1sb2FkZXIvZnVsbHNjcmVlbi1tb2RhbC1sb2FkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSUNvcmVDaGVja2xpc3RPcHRpb24gfSBmcm9tICcuLi9jb3JlLWNoZWNrbGlzdC9jb3JlLWNoZWNrbGlzdC9jb3JlLWNoZWNrbGlzdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBXb3JrU2hpZnREbmRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvd29yay1zaGlmdC1kbmQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVUYWJzQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS10YWJzL2NvcmUtdGFicy9jb3JlLXRhYnMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRG9tU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RvbS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZUZpbHRlcktpdENvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtZmlsdGVyLWtpdC9jb3JlLWZpbHRlci1raXQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRmlsdGVyS2l0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpbHRlci1raXQuc2VydmljZSc7XHJcbmltcG9ydCB7IElDb3JlUGFyYW1Db250cm9sIH0gZnJvbSAnLi4vY29yZS1oZWFkZXItcGFyYW1zL2VudW0tYW5kLWludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb3JlRmlsdGVySHViU2VydmljZSB9IGZyb20gJy4uL2NvcmUtZmlsdGVyLWh1Yi9jb3JlLWZpbHRlci1odWIuc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVGaWx0ZXJIdWJDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlLWZpbHRlci1odWIvY29yZS1maWx0ZXItaHViLmNvbXBvbmVudCc7XHJcblxyXG4vKiBLaGkga2jDtG5nIGPDsyBkw7JuZyBuw6BvIMSRxrDhu6NjIHRpY2sgY2jhu41uLCBjw6FjIG7DunQgc2F1IHPhur0gxJHGsOG7o2Mg4bqpbiDEkWk6ICovXHJcbmNvbnN0IEVNUFRZX1NFTEVDVElPTl9ISURERU5fQlVUVE9OOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGVbXSA9IFtcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0VESVQsIC8vIFPhu61hXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9MT0NLLCAvLyBLaMOzYVxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVU5MT0NLLCAvLyBN4bufIGtow7NhXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9BQ1RJVkFURSwgLy8gw4FwIGThu6VuZ1xyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfSU5BQ1RJVkFURSwgLy8gTmfhu6tuZyDDoXAgZOG7pW5nXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9SRVNFVCwgLy8gUmVzZXQgKG3huq10IGto4bqpdSlcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NPUFksIC8vIFNhbyBjaMOpcFxyXG5cclxuICAvLyBDw6FjIHRo4buDIGxv4bqhaSBpblxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfUFJJTlQsXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9QUklOVF8yQyxcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1BSSU5UXzJDXzIwMDgsXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9QUklOVF8yQ185OCxcclxuICAvL1xyXG5cclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURSwgLy8geMOzYVxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQVBQUk9WRSwgLy8gcGjDqiBkdXnhu4d0XHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9SRUpFQ1QsIC8vIHThu6sgY2jhu5FpXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VTkFQUFJPVkUsIC8vIGLhu48gcGjDqiBkdXnhu4d0XHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9QRU5ESU5HX0FQUFJPVkUsIC8vIG3hu58gY2jhu50gcGjDqiBkdXnhu4d0XHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9MSVFVSURBVEVfQ09OVFJBQ1QsIC8vIHRoYW5oIGzDvSBo4bujcCDEkeG7k25nXHJcbl1cclxuXHJcbi8vZGVjbGFyZSBsZXQgY29yZUZpbGVVdGlsczogYW55O1xyXG4vL2ltcG9ydCB7IGNvcmVGaWxlVXRpbHMgfSBmcm9tICcuLi8uLi8uLi9hc3NldHMvanMvY29yZUZpbGVVdGlscyc7XHJcbi8vY29uc3QgYmxvYlRvQmFzZTY0ID0gY29yZUZpbGVVdGlscy5wcm90b3R5cGUuYmxvYlRvQmFzZTY0O1xyXG5cclxuY29uc3QgYmxvYlRvQmFzZTY0ID0gYXN5bmMgKGJsb2IpID0+IHtcclxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIF8pID0+IHtcclxuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcclxuICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiByZXNvbHZlKHJlYWRlci5yZXN1bHQpXHJcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKVxyXG4gIH0pXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVQYWdlTGlzdEFwaURlZmluaXRpb24ge1xyXG4gIHF1ZXJ5TGlzdFJlbGF0aXZlUGF0aDogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDb3JlUGFnZUxpc3RTZWFyY2hPYmplY3Qge1xyXG4gIHByZXZpb3VzOiBJU2VhcmNoSXRlbVtdO1xyXG4gIGN1cnJlbnQ6IElTZWFyY2hJdGVtW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVQYWdlTGlzdEVkaXRSb3V0aW5nIHtcclxuICBhdXhpbGlhcnk6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ29yZVBhZ2VMaXN0Q1JVRCB7XHJcbiAgZGVsZXRlSWRzPzogYXBpO1xyXG4gIHRvZ2dsZUFjdGl2ZUlkcz86IGFwaTtcclxuICB0b2dnbGVBcHByb3ZlSWRzPzogYXBpO1xyXG4gIHRvZ2dsZVVuYXBwcm92ZUlkcz86IGFwaTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJWGxzeEltcG9ydE9iamVjdCB7XHJcbiAgeGxzeFNpZDogc3RyaW5nLFxyXG4gIHhsc3hFeENvZGU6IHN0cmluZyxcclxuICB4bHN4U2Vzc2lvbjogbnVtYmVyLFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDb3JlUGFnZUxpc3RTdGF0dXNUYWIge1xyXG4gIGlkOiBudW1iZXIgfCBudWxsO1xyXG4gIGludGxDb2RlPzogc3RyaW5nO1xyXG4gIHRleHQ6IHN0cmluZztcclxuICBjb3VudDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDb3JlVGFibGVGbGF0Q29sdW1uSXRlbSB7XHJcbiAgY2FwdGlvbjogc3RyaW5nO1xyXG4gIGZpZWxkOiBzdHJpbmc7XHJcbiAgdHlwZT86IHN0cmluZztcclxuICBwaXBlPzogc3RyaW5nO1xyXG4gIGFsaWduPzogc3RyaW5nO1xyXG4gIHdpZHRoPzogbnVtYmVyO1xyXG4gIGhpZGRlbj86IGJvb2xlYW47XHJcbn1cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3JlLXBhZ2UtbGlzdCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBSb3V0ZXJNb2R1bGUsXHJcbiAgICBDb3JlVGFibGVDb21wb25lbnQsXHJcbiAgICBDb3JlUGFnaW5hdGlvbkZ1bGxDb21wb25lbnQsXHJcbiAgICBDb3JlUGFnZUhlYWRlckNvbXBvbmVudCxcclxuICAgIENvcmVDb21wb3NpdGlvbkNvbXBvbmVudCxcclxuICAgIENvcmVDb21tb25QYXJhbUtpdENvbXBvbmVudCxcclxuICAgIENvcmVBcGlQcm9ncmVzc0NvbXBvbmVudCxcclxuICAgIEZ1bGxzY3JlZW5Nb2RhbExvYWRlckNvbXBvbmVudCxcclxuICAgIENvcmVUYWJzQ29tcG9uZW50LFxyXG4gICAgQ29yZUZpbHRlcktpdENvbXBvbmVudCxcclxuICAgIENvcmVGaWx0ZXJIdWJDb21wb25lbnQsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29yZS1wYWdlLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvcmUtcGFnZS1saXN0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgICAgdXNlRXhpc3Rpbmc6IENvcmVQYWdlTGlzdENvbXBvbmVudCxcclxuICAgIH0sXHJcbiAgICBDb3JlUGFnZUxpc3RTdGF0ZSxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29yZVBhZ2VMaXN0Q29tcG9uZW50IGV4dGVuZHMgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIC8qIFdIRU4gWU9VIERPIE5PVCBXQU5UIFBPUFVQLCBwYXNzIFtub3JtYWxNb2RlXT1cInRydWVcIiAqL1xyXG4gIEBJbnB1dCgpIG5vcm1hbE1vZGUhOiBib29sZWFuO1xyXG4gIC8qIFNUQVJUOiBTb21lIHJvdXRlZCBjb21wb25lbnRzLCBzdWNoIGFzIFN0YWZmUHJvZmlsZSwgbWF5IGJlIHJldXNlZCBhcyByZWFkb25seSBmb3Igc2Vla2luZyAqL1xyXG4gIEBJbnB1dCgpIGhpZGVIZWFkZXIhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGhpZGVCdXR0b25Hcm91cCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2Vla2VyTW9kZSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgbWNjTW9kZSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaGVpZ2h0ITogbnVtYmVyO1xyXG4gIC8qIEVORDogU29tZSByb3V0ZWQgY29tcG9uZW50cywgc3VjaCBhcyBTdGFmZlByb2ZpbGUsIG1heSBiZSByZXVzZWQgYXMgcmVhZG9ubHkgZm9yIHNlZWtpbmcgKi9cclxuXHJcbiAgLyogY2hhbmdlIHRoZXNlIDIgcHJvcHMgdG8gd3JhcCBoZWFkZXIgdGV4dHMgKi9cclxuICBASW5wdXQoKSBoZWFkZXJXcmFwITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBoZWFkZXJGaXJzdFJvd0hlaWdodCE6IG51bWJlcjtcclxuICAvKiogKi9cclxuXHJcbiAgLyoqU2hvdyBQYXJhbUtpdCAqL1xyXG4gIEBJbnB1dCgpIGVuYWJsZVRpbWVab25lQ29udmVydGVyRm9yRGF0ZVRpbWVQZXJpb2RQYXJhbWV0ZXJzITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzaG93UGFyYW1LaXQhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGVuYWJsZUZpbHRlcktpdCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3IhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3JMYWJlbEtleSE6IEVudW1UcmFuc2xhdGVLZXk7XHJcbiAgQElucHV0KCkgc3RhdHVzSW5jbHVzaW9uRm9yITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHN0YXR1c0luY2x1c2lvbkZvckxhYmVsS2V5ITogRW51bVRyYW5zbGF0ZUtleTtcclxuICBASW5wdXQoKSBzdGF0dXNPcHRpb25zQXBpITogYXBpO1xyXG4gIEBJbnB1dCgpIHN0YXR1c09wdGlvbnMkOiBCZWhhdmlvclN1YmplY3Q8SUNvcmVDaGVja2xpc3RPcHRpb25bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElDb3JlQ2hlY2tsaXN0T3B0aW9uW10+KFtdKTtcclxuICBASW5wdXQoKSBzaG93T3JnUGFyYW0hOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHNob3dPcmdQYXJhbURyb3Bkb3duITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBoaWRlR2VuZXJhbFNlYXJjaCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaGlkZURhdGVQZXJpb2RDb21wYXJpc29uITogYm9vbGVhbjsgLy8gaWYgd2Ugd2FudCBub3QgdG8gdXNlIGRhdGUgcCBmaWx0ZXJcclxuICBASW5wdXQoKSBoaWRlU3RhdHVzSW5jbHVzaW9uITogYm9vbGVhbjsgLy8gaWYgd2Ugd2FudCBub3QgdG8gdXNlIHN0YXQgdXMgZmlsdGVyXHJcblxyXG4gIEBJbnB1dCgpIGZpbHRlck9wZXJhdG9ycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElGaWx0ZXJPcGVyYXRvcltdPihbXSk7XHJcblxyXG4gIEBJbnB1dCgpIGNhbWVsQ2FzZUR0b1N0YXR1c0lkRmllbGQhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZ3JpZFN0YXR1c0NvbHVtbiE6IHN0cmluZztcclxuXHJcbiAgLyoqRW5kIFNob3cgUGFyYW1LaXQgKi9cclxuXHJcbiAgQElucHV0KCkgdGl0bGUhOiBFbnVtVHJhbnNsYXRlS2V5O1xyXG4gIEBJbnB1dCgpIGhhc0lkT2ZTdHJpbmdUeXBlITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBoaWRlQ2hlY2shOiBib29sZWFuO1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGFwaURlZmluaXRpb24hOiBJQ29yZVBhZ2VMaXN0QXBpRGVmaW5pdGlvbjtcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBjb2x1bW5zITogSUNvcmVUYWJsZUNvbHVtbkl0ZW1bXTtcclxuICBASW5wdXQoKSBmcm96ZW4hOiBudW1iZXI7XHJcbiAgQElucHV0KCkgaW5saW5lVG9vbHMhOiBJQ29yZVRhYmxlVG9vbEl0ZW1bXTtcclxuICBASW5wdXQoKSBpbmxpbmVUb29sSXRlbXMhOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGVbXTtcclxuICBASW5wdXQoKSBlZGl0Um91dGUhOiBJQ29yZVBhZ2VMaXN0RWRpdFJvdXRpbmc7XHJcbiAgQElucHV0KCkgY3J1ZCE6IElDb3JlUGFnZUxpc3RDUlVEO1xyXG4gIEBJbnB1dCgpIHNob3dMaXN0SW5saW5lVG9vbHMhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHRvcCE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgbGVmdCE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgaGlkZUxlZnQhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIG91dGVyUGFyYW0kITogQmVoYXZpb3JTdWJqZWN0PGFueT47XHJcbiAgQElucHV0KCkgb3V0ZXJGaWx0ZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJRmlsdGVyT3BlcmF0b3JbXSB8IHVuZGVmaW5lZD4oW10pO1xyXG4gIEBJbnB1dCgpIG91dGVyU29ydCE6IElTb3J0SXRlbVtdO1xyXG4gIEBJbnB1dCgpIG91dGVyRmlsdGVyT3BlcmF0b3JzITogSUZpbHRlck9wZXJhdG9yW107XHJcbiAgQElucHV0KCkgb3V0ZXJJbk9wZXJhdG9ycyE6IElJbk9wZXJhdG9yW10gfCBudWxsO1xyXG4gIEBJbnB1dCgpIGF1dG9SZXNpemVXaXRoV2luZG93ITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBleHRyYU1hbnVhbE9mZnNldCE6IG51bWJlcjtcclxuICBASW5wdXQoKSB3cmFwITogYm9vbGVhbjtcclxuICBASW5wdXQoKSByb3dIZWlnaHQhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2VsZlJlc29sdmVDb3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrITogYm9vbGVhbjsgLy8gVGhlIGNhbGxlciB3aWxsIGl0c2VsZiByZXNvbHZlIGV2ZW50cyBlbW1pdGVkIGJ5IENvcmVQYWdlSGVhZGVyIGJ1dHRvbnMgKGZvciBzb21lKVxyXG4gIEBJbnB1dCgpIGNsZWFyRGF0YSQhOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XHJcbiAgQElucHV0KCkgZGVsZXRlVmFsaWRhdGVGbiE6IEZ1bmN0aW9uO1xyXG4gIEBJbnB1dCgpIGdlbmVyYXRlVGVtcGxhdGVSZXF1ZXN0ITogSUdlbmVyYXRlVGVtcGxhdGVSZXF1ZXN0O1xyXG4gIEBJbnB1dCgpIGltcG9ydFByZXZpZXdQYXRoITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGNvbHVtblNlYXJjaERlZmF1bHRPcGVuITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBmaXhlZFBhZ2VTaXplITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVEb3VibGVDbGljayE6IGJvb2xlYW47XHJcblxyXG4gIEBJbnB1dCgpIG5vUGFkZGluZ0NlbGwhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVIaWdobGlnaHRPbkNsaWNrITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBsb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIEBJbnB1dCgpIGV4Y2x1ZGVkSWRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyW10+KFtdKTtcclxuXHJcbiAgQElucHV0KCkgZGlzYWJsZURpYWxvZ0luZm9ybWF0aW9uTGluZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgY2hhbmdlVHJhY2tpbmchOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHByaW1hcnlLZXk6IHN0cmluZyA9ICdpZCc7IC8vICdpZCcgb3IgJ3ZpcnR1YWxJZCdcclxuICBASW5wdXQoKSBjaGFuZ2VkSXRlbXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xyXG5cclxuICBASW5wdXQoKSB0YWJNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcGFyYW1Sb3dzITogSUNvcmVQYXJhbUNvbnRyb2xbXVtdO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVGaWx0ZXJIdWIhOiBib29sZWFuO1xyXG5cclxuICBAT3V0cHV0KCkgY29yZVBhZ2VIZWFkZXJCdXR0b25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8SUNvcmVCdXR0b25WTlM+KCk7XHJcbiAgQE91dHB1dCgpIHJvd0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSByb3dEb3VibGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWRJZHNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkRGF0YUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25JbnN0YW5jZUNyZWF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuICBAT3V0cHV0KCkgb25JbnB1dEZpbGVCYXNlNjREYXRhUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGxpc3RDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xyXG5cclxuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXIhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2NvcmVQYWdlTGlzdENvbnRhaW5lcicpIGNvcmVQYWdlTGlzdENvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgncGFnaW5hdGlvbkNvbnRhaW5lcicpIHBhZ2luYXRpb25Db250YWluZXIhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2ZpbGVJbXBvcnQnKSBmaWxlSW1wb3J0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgZ2VvbWV0cmljRG9uZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBoZWlnaHRSZXNpemluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhlaWdodCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgdG9wUGxhY2VIZWlnaHQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG5cclxuICByZXNpemVIZWlnaHRGbGFnJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBwYWdpbmF0aW9uSGVpZ2h0ITogbnVtYmVyO1xyXG4gIGNvbXBvc2l0aW9uSGVpZ2h0ITogbnVtYmVyO1xyXG4gIGNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyITogbnVtYmVyO1xyXG4gIGRpYWxvZ0luc3RhbmNlTnVtYmVyITogbnVtYmVyO1xyXG5cclxuICByZXNpemVTdHJlYW0kID0gZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpO1xyXG5cclxuICBjbGlja0dlbmVyYXRlVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG5cclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHF1ZXJ5TGlzdFN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcclxuICBsb2FkaW5nITogYm9vbGVhbjtcclxuXHJcbiAgc2VsZWN0ZWRJZHM6IHN0cmluZ1tdIHwgbnVtYmVyW10gPSBbXTtcclxuICBzZWxlY3RlZERhdGE6IGFueVtdID0gW107XHJcblxyXG4gIGlzQWRtaW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgdmlld0luaXREb25lITogYm9vbGVhbjtcclxuXHJcbiAgLyogc3RhcnQ6IHBhc3NpbmcgdGhpcyB2YXIgdG8gUGFnaW5hdGlvbiAqL1xyXG5cclxuICBwYWdlQ291bnQhOiBudW1iZXI7XHJcblxyXG4gIC8vIFBhc3NpbmcgQmVoYXZpb3JTdWJqZWN0IHRvIG90aGVyIGNvbXBvbmVudCBpcyBsaWtlIHVzaW5nIGEgc2VydmljZSAodGhhdCBob2xkcyB0aGlzIEJlaGF2aW9yU3ViamVjdCkgaW5qZWN0ZWQgdG8gYm90aCBjb21wb25lbnRzXHJcbiAgY3VycmVudFBhZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDEpO1xyXG5cclxuICAvKiBlbmQ6IHBhc3NpbmcgdGhpcyB2YXIgdG8gUGFnaW5hdGlvbiAqL1xyXG5cclxuICBwYWdlU2l6ZSQhOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPjtcclxuXHJcbiAgZmlsdGVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcclxuXHJcbiAgaW5PcGVyYXRvcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJSW5PcGVyYXRvcltdPihbXSk7XHJcbiAgZ2VuZXJhbFNlYXJjaCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xyXG4gIHNlYXJjaCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElDb3JlUGFnZUxpc3RTZWFyY2hPYmplY3QgfCBudWxsPihudWxsKTtcclxuICBzb3J0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVNvcnRJdGVtW10+KFtdKTtcclxuICBwYWdpbmF0aW9uJCE6IEJlaGF2aW9yU3ViamVjdDxJUGFnaW5hdGlvbj47XHJcbiAgZm9yY2VSZWxvYWRpbmdGbGFnJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHF1ZXJ5TGlzdFJlcXVlc3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJUXVlcnlMaXN0UmVxdWVzdD4oeyBsYW5nOiAndmknLCBkdG9TdGF0dXNJZEZpZWxkOiB0aGlzLmNhbWVsQ2FzZUR0b1N0YXR1c0lkRmllbGQgfSk7XHJcbiAgcXVlcnlMaXN0U3RyZWFtJCE6IE9ic2VydmFibGU8YW55PjtcclxuICBpbm5lckJvZHlDb3VudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMSk7XHJcblxyXG4gIHBhdXNlU3Vic2N0aXB0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbGlzdCE6IGFueVtdO1xyXG4gIC8vY2hhbmdlZExpc3Q6IGFueVtdID0gW107XHJcbiAgdGFibGVIZWlnaHQhOiBudW1iZXI7XHJcbiAgYXZhaWxhYmxlQ29sdW1uc0ZvckdlbmVyYWxTZWFyY2ghOiBzdHJpbmdbXTtcclxuICBkYXRhSW1wb3J0ITogYW55O1xyXG4gIHBlbmRpbmdBY3Rpb24hOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGUgfCBudWxsO1xyXG4gIGlkU3RhdGU6IGFueTtcclxuICB0ZW1wbGF0ZUZpbGVOYW1lITogc3RyaW5nO1xyXG5cclxuICBsb25nQXBpUnVubmluZyE6IGJvb2xlYW47XHJcbiAgcHJlZmV0Y2hMb2FkaW5nITogYm9vbGVhbjtcclxuXHJcbiAgYnV0dG9uR3JvdXBTdGF0dXMhOiBJQ29yZUJ1dHRvbkdyb3VwU3RhdHVzO1xyXG5cclxuICBleHBvcnRDb3JlUGFnZUxpc3RHcmlkVG9FeGNlbFN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgc3RhdHVzVGFiczogTWFwPG51bWJlciwgSUNvcmVQYWdlTGlzdFN0YXR1c1RhYj4gPSBuZXcgTWFwKCk7XHJcbiAgdGFiSGVhZGVyczogc3RyaW5nW10gPSBbXTtcclxuICBmaWx0ZXJLaXRaSW5kZXghOiBudW1iZXI7XHJcblxyXG4gIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uZmlybWF0aW9uQ29sdW1ucyE6IElDb3JlVGFibGVDb2x1bW5JdGVtW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjb3JlUGFnZUxpc3RTZXJ2aWNlOiBDb3JlUGFnZUxpc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlUGFnZUxpc3RTdGF0ZTogQ29yZVBhZ2VMaXN0U3RhdGUsXHJcbiAgICBwcml2YXRlIGNvcmVQYWdlRWRpdFNlcnZpY2U6IENvcmVQYWdlRWRpdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIG1sczogTXVsdGlMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFwcFNlcnZpY2U6IEFwcFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRpbmdTZXJ2aWNlOiBSb3V0aW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgbG9uZ1Rhc2tTZXJ2aWNlOiBMb25nVGFza1NlcnZpY2UsXHJcbiAgICBwdWJsaWMgbGF5b3V0U2VydmljZTogTGF5b3V0U2VydmljZSxcclxuICAgIHByaXZhdGUgY29yZUNvbXBvc2l0aW9uU2VydmljZTogQ29yZUNvbXBvc2l0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgY29yZUJ1dHRvbkdyb3VwU2VydmljZTogQ29yZUJ1dHRvbkdyb3VwU2VydmljZSxcclxuICAgIHByaXZhdGUganNvblNlcnZpY2U6IEpzb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB3b3JrU2hpZnREbmRTZXJ2aWNlOiBXb3JrU2hpZnREbmRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkb21TZXJ2aWNlOiBEb21TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmaWx0ZXJLaXRTZXJ2aWNlOiBGaWx0ZXJLaXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlRmlsdGVySHViU2VydmljZTogQ29yZUZpbHRlckh1YlNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcblxyXG4gICAgaWYgKCEhIXRoaXMuaW5saW5lVG9vbEl0ZW1zKSB7XHJcbiAgICAgIHRoaXMuaW5saW5lVG9vbEl0ZW1zID0gW1xyXG4gICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRURJVCxcclxuICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURVxyXG4gICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG5hdmlnYXRpb24gPSB0aGlzLnJvdXRlcj8uZ2V0Q3VycmVudE5hdmlnYXRpb24oKVxyXG4gICAgaWYgKG5hdmlnYXRpb24pIHtcclxuICAgICAgY29uc3QgZXh0cmFzID0gbmF2aWdhdGlvbi5leHRyYXM7XHJcbiAgICAgIGlmICghIWV4dHJhcyAmJiAnc3RhdGUnIGluIGV4dHJhcykge1xyXG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbyhgQ29yZVBhZ2VMaXN0IGlzIHVzaW5nIG9sZCBpbnN0YW5jZSBudW1iZXIgJHt0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyfWAsIGFsZXJ0T3B0aW9ucylcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCEhZXh0cmFzLnN0YXRlICYmICdpZCcgaW4gZXh0cmFzLnN0YXRlISkge1xyXG4gICAgICAgICAgdGhpcy5pZFN0YXRlID0gZXh0cmFzLnN0YXRlWydpZCddO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoISFleHRyYXMuc3RhdGUgJiYgJ2luc3RhbmNlTnVtYmVyJyBpbiBleHRyYXMuc3RhdGUhKSB7XHJcbiAgICAgICAgICB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyID0gZXh0cmFzLnN0YXRlWydpbnN0YW5jZU51bWJlciddO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiBUSElTIENPREUgV0lMTCBERUZJTkUgb3V0ZXJQYXJhbSQgRklMVEVSIGZvciBpbXBvcnQgcHJldmlldyB0YXNrICovXHJcbiAgICBpZiAobmF2aWdhdGlvbj8uZXh0cmFzPy5zdGF0ZSkge1xyXG4gICAgICBjb25zdCBpbXBvcnRQcmV2aWV3T3V0ZXJQYXJhbSA9IG5hdmlnYXRpb24/LmV4dHJhcz8uc3RhdGUhW1wiaW1wb3J0UHJldmlld091dGVyUGFyYW1cIl1cclxuICAgICAgaWYgKCEhdGhpcy5vdXRlclBhcmFtJCkge1xyXG4gICAgICAgIGlmICghIXRoaXMub3V0ZXJQYXJhbSQ/LnZhbHVlKSB7XHJcbiAgICAgICAgICBpZiAoISFpbXBvcnRQcmV2aWV3T3V0ZXJQYXJhbSkge1xyXG4gICAgICAgICAgICBsZXQgbmV3T3V0ZXJQYXJhbSA9IHRoaXMub3V0ZXJQYXJhbSQudmFsdWU7XHJcbiAgICAgICAgICAgIG5ld091dGVyUGFyYW0gPSB7XHJcbiAgICAgICAgICAgICAgLi4ubmV3T3V0ZXJQYXJhbSxcclxuICAgICAgICAgICAgICAuLi5pbXBvcnRQcmV2aWV3T3V0ZXJQYXJhbSxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm91dGVyUGFyYW0kLm5leHQobmV3T3V0ZXJQYXJhbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICghIWltcG9ydFByZXZpZXdPdXRlclBhcmFtKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3V0ZXJQYXJhbSQubmV4dChpbXBvcnRQcmV2aWV3T3V0ZXJQYXJhbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghIWltcG9ydFByZXZpZXdPdXRlclBhcmFtKSB7XHJcbiAgICAgICAgICB0aGlzLm91dGVyUGFyYW0kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KGltcG9ydFByZXZpZXdPdXRlclBhcmFtKVxyXG4gICAgICAgICAgdGhpcy5vdXRlclBhcmFtU3Vic2NyaWJlRm4oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcbiAgICBpZiAoISEhdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcikgdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmluc3RhbmNlcy5wdXNoKHtcclxuICAgICAgaW5zdGFuY2VOdW1iZXI6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIsXHJcbiAgICAgIHJlbG9hZEZsYWckOiBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKSxcclxuICAgICAgaWQkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCksXHJcbiAgICAgIHZpcnR1YWxJZCQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKSxcclxuICAgICAgdGJvZHlIZWlnaHQkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCksXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoISF0aGlzLmlkU3RhdGUpIHtcclxuICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgIGlkOiB0aGlzLmlkU3RhdGVcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRlbXBsYXRlRmlsZU5hbWUgPSB0aGlzLmdlbmVyYXRlVGVtcGxhdGVSZXF1ZXN0Py5leENvZGU7XHJcblxyXG4gICAgaWYgKCEhdGhpcy5vdXRlckZpbHRlciQpIHtcclxuICAgICAgdGhpcy5vdXRlckZpbHRlciQuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgIHRoaXMub3V0ZXJGaWx0ZXJPcGVyYXRvcnMgPSB4IHx8IFtdO1xyXG4gICAgICAgIHRoaXMubWVyZ2VGaWx0ZXJPcGVyYXRvcigpO1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydvdXRlckluT3BlcmF0b3JzJ10pIHtcclxuICAgICAgY29uc3QgY3VycmVudEluT3BlcmF0b3JzOiBJSW5PcGVyYXRvcltdID0gdGhpcy5pbk9wZXJhdG9ycyQudmFsdWU7XHJcbiAgICAgIGNvbnN0IGNoYW5nZWRJbk9wZXJhdG9yczogSUluT3BlcmF0b3JbXSA9IGNoYW5nZXNbJ291dGVySW5PcGVyYXRvcnMnXS5jdXJyZW50VmFsdWUgfHwgW107XHJcbiAgICAgIGNvbnN0IHJlbWFpbkluT3BlcmF0b3JzID0gY3VycmVudEluT3BlcmF0b3JzLmZpbHRlcih4ID0+ICEhIWNoYW5nZWRJbk9wZXJhdG9ycy5maWx0ZXIoeSA9PiB5LmZpZWxkID09PSB4LmZpZWxkKS5sZW5ndGgpO1xyXG4gICAgICBjb25zdCBuZXdJbk9wZXJhdG9ycyA9IFsuLi5yZW1haW5Jbk9wZXJhdG9ycywgLi4uY2hhbmdlZEluT3BlcmF0b3JzXTtcclxuXHJcbiAgICAgIHRoaXMuaW5PcGVyYXRvcnMkLm5leHQobmV3SW5PcGVyYXRvcnMpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2NhbWVsQ2FzZUR0b1N0YXR1c0lkRmllbGQnXSkge1xyXG4gICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgZHRvU3RhdHVzSWRGaWVsZDogY2hhbmdlc1snY2FtZWxDYXNlRHRvU3RhdHVzSWRGaWVsZCddLmN1cnJlbnRWYWx1ZVxyXG4gICAgICB9KVxyXG5cclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydjb2x1bW5zJ10pIHtcclxuICAgICAgdGhpcy5jb25maXJtYXRpb25Db2x1bW5zID0gY2hhbmdlc1snY29sdW1ucyddLmN1cnJlbnRWYWx1ZT8uZmlsdGVyKHggPT4gISF4LnNob3dGb3JDb25maXJtYXRpb24pIHx8IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzWydoZWlnaHQnXSkge1xyXG5cclxuICAgICAgLy8gS2jDtG5nIHRo4buDIHTDrW5oIMSRxrDhu6NjIHPhu5EgxJFvIGjDrG5oIGjhu41jIG7hur91IEFmdGVyVmlld0luaXQgY2jGsGEgY2jhuqF5XHJcbiAgICAgIC8vIE7Dqm4g4bufIMSRw6J5IHRhIGNo4buJIMSRxqFuIGdp4bqjbiBsw6AgZ8OhbiB0aGF5IMSR4buVaSBj4bunYSBoZWlnaHQgdsOgbyBoZWlnaHQkXHJcbiAgICAgIHRoaXMuaGVpZ2h0JC5uZXh0KGNoYW5nZXNbJ2hlaWdodCddLmN1cnJlbnRWYWx1ZSk7XHJcblxyXG4gICAgICBpZiAoISFjaGFuZ2VzWydoZWlnaHQnXSkge1xyXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlVGFibGVIZWlnaHRCYXNlZE9uSGVpZ2h0QW5kVG9wUmVmSGVpZ2h0KGNoYW5nZXNbJ2hlaWdodCddLmN1cnJlbnRWYWx1ZSwgdGhpcy50b3BQbGFjZUhlaWdodCQudmFsdWUpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qXHJcbiAgICAgIGlmICghIWNoYW5nZXNbJ2hlaWdodCddLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgIC8vIE7hur91IGNoaeG7gXUgY2FvIGPhu6dhIENvcmVQYWdlTGlzdCDEkcaw4bujYyB0cnV54buBbiB2w6BvXHJcbiAgICAgICAgLy8gVGjDrCBj4bqnbiB0w61uaCBjaGnhu4F1IGNhbyBj4bunYSBDb3JlQ29tcG9zaXRpb24gPSB0aGlzLmhlaWdodFxyXG4gICAgICAgIC8vIE7hur91IGhp4buDbiB0aOG7iyBDb3JlUGFnZUhlYWRlciB0aMOsIGPhuqduIHRy4burIHRp4bq/cCDEkWkgY29yZVBhZ2VIZWFkZXJIZWlnaHRcclxuICAgICAgICB0aGlzLmNvbXBvc2l0aW9uSGVpZ2h0ID0gY2hhbmdlc1snaGVpZ2h0J10uY3VycmVudFZhbHVlIC0gKCEhdGhpcy5oaWRlSGVhZGVyID8gMCA6IHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnZUhlYWRlckhlaWdodCk7XHJcbiAgICAgICAgLy8gVMOtbmggbHXDtG4gY2hp4buBdSBjYW8gdGFibGVIZWlnaHRcclxuICAgICAgICAvLyBO4bq/dSBleHRyYU1hbnVhbE9mZnNldCDEkcaw4bujYyB0cnV54buBbiB2w6BvIG3hu5l0IGPDoWNoIHRo4bunIGPDtG5nXHJcbiAgICAgICAgaWYgKCEhdGhpcy5leHRyYU1hbnVhbE9mZnNldCkge1xyXG4gICAgICAgICAgdGhpcy50YWJsZUhlaWdodCA9IGNoYW5nZXNbJ2hlaWdodCddLmN1cnJlbnRWYWx1ZSAtIHRoaXMuZXggdHJhTWFudWFsT2Zmc2V0IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdpbmF0aW9uSGVpZ2h0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBD4bqnbiB0w61uaCBjaGnhu4F1IGNhbyBj4bunYSBwaOG6p24gdG9wIGtoaSBob29rIEFmdGVyVmlld0luaXQgxJHGsOG7o2Mga8OtY2ggaG/huqF0XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgICovXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXNbJ291dGVyRmlsdGVyT3BlcmF0b3JzJ10pIHtcclxuICAgICAgdGhpcy5tZXJnZUZpbHRlck9wZXJhdG9yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5xdWVyeUxpc3RTdWJzY3JpYmUoKTtcclxuXHJcbiAgfVxyXG5cclxuICAvKiBRdWVyeUxpc3Qgc3ViICovXHJcbiAgc3Vic2NyaWJlUXVlcnlMaXN0KHg6IGFueSkge1xyXG4gICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgY29uc3QgaW5uZXJCb2R5OiBJUXVlcnlMaXN0UmVzcG9uc2UgPSBib2R5LmlubmVyQm9keTtcclxuICAgICAgICBpZiAoISFpbm5lckJvZHkpIHtcclxuXHJcbiAgICAgICAgICAvKiAjcmVnaW9uIFRyaWNraWx5IHJlc2V0IGlkJCwgdG1wRmlsdGVyJCBhbmQgdG1wSW5PcGVyYXRvcnMkICovXHJcbiAgICAgICAgICB0aGlzLnBhdXNlU3Vic2N0aXB0aW9uID0gdHJ1ZTsgLy8gPD09IFBhdXNlXHJcblxyXG4gICAgICAgICAgY29uc3QgbmV3UXVlcnlMaXN0UmVxdWVzdCA9IHRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWU7XHJcblxyXG4gICAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTdGF0ZS5pZCQubmV4dChudWxsKVxyXG4gICAgICAgICAgbmV3UXVlcnlMaXN0UmVxdWVzdC5pZCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgLyogVGhpcyBjb2RlIGJsb2NrIHJhaXNlcyBhIGJ1ZyBnZW5lcmFsbHkgKi9cclxuICAgICAgICAgIC8vIGlmICghIXRoaXMuY29yZVBhZ2VMaXN0U3RhdGUuaWQkLnZhbHVlKSB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuY29yZVBhZ2VMaXN0U3RhdGUuaWQkLm5leHQobnVsbClcclxuICAgICAgICAgIC8vICAgbmV3UXVlcnlMaXN0UmVxdWVzdC5pZCA9IG51bGw7XHJcbiAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gICBuZXdRdWVyeUxpc3RSZXF1ZXN0LmlkID0gbnVsbDtcclxuICAgICAgICAgIC8vIH07XHJcblxyXG4gICAgICAgICAgaWYgKCEhdGhpcy50bXBGaWx0ZXJBY3RpdmUpIHtcclxuICAgICAgICAgICAgY29uc3Qgb2xkRmlsdGVyID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnByaW1hcnlGaWx0ZXIpKTtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXIkLm5leHQob2xkRmlsdGVyKTtcclxuICAgICAgICAgICAgbmV3UXVlcnlMaXN0UmVxdWVzdC5maWx0ZXIgPSBvbGRGaWx0ZXI7XHJcbiAgICAgICAgICAgIHRoaXMucHJpbWFyeUZpbHRlciA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy50bXBGaWx0ZXJBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoISF0aGlzLnRtcEluT3BlcmF0b3JzQWN0aXZlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9sZEluT3BlcnRvcnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMucHJpbWFyeUluT3BlcmF0b3JzKSk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5PcGVyYXRvcnMkLm5leHQob2xkSW5PcGVydG9ycyk7XHJcbiAgICAgICAgICAgIG5ld1F1ZXJ5TGlzdFJlcXVlc3QuaW5PcGVyYXRvcnMgPSBvbGRJbk9wZXJ0b3JzO1xyXG4gICAgICAgICAgICB0aGlzLnByaW1hcnlJbk9wZXJhdG9ycyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcEluT3BlcmF0b3JzQWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KG5ld1F1ZXJ5TGlzdFJlcXVlc3QpO1xyXG5cclxuICAgICAgICAgIHRoaXMucGF1c2VTdWJzY3RpcHRpb24gPSBmYWxzZTsgLy8gPD09IEFjdGl2ZSBiYWNrIGFnYWluXHJcblxyXG4gICAgICAgICAgLyogI2VuZHJlZ2lvbiBUcmlja2lseSByZXNldCBpZCQsIHRtcEZpbHRlciQgYW5kIHRtcEluT3BlcmF0b3JzJCAqL1xyXG5cclxuICAgICAgICAgIHRoaXMubGlzdCA9IGlubmVyQm9keS5saXN0IHx8IFtdO1xyXG5cclxuICAgICAgICAgIC8vIHNlbGVjdCB0aG9zZSBsaW5lcyBtYXJrZWQgYXMgY2hhbmdlZCBmcm9tIHRoZSBjYWNoZSBhbmQgdXBkYXRlIHRoZSBuZXcgbGlzdFxyXG4gICAgICAgICAgaWYgKCEhdGhpcy5jaGFuZ2VUcmFja2luZykge1xyXG4gICAgICAgICAgICB0aGlzLmxpc3QubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRyeUZpbmQgPSB0aGlzLmNoYW5nZWRJdGVtcyQudmFsdWUuZmlsdGVyKHggPT4geFt0aGlzLnByaW1hcnlLZXldID09PSBpdGVtW3RoaXMucHJpbWFyeUtleV0pO1xyXG4gICAgICAgICAgICAgIGlmICh0cnlGaW5kLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0W2luZGV4XSA9IHRyeUZpbmRbMF07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLndvcmtTaGlmdERuZFNlcnZpY2Uuc2hpZnRDb2xsZWN0aW9uT3BlbiQubmV4dChmYWxzZSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5saXN0Q2hhbmdlLmVtaXQodGhpcy5saXN0KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmlubmVyQm9keUNvdW50JC5uZXh0KGlubmVyQm9keS5jb3VudCEpO1xyXG4gICAgICAgICAgdGhpcy5wYWdlQ291bnQgPSBNYXRoLmNlaWwoaW5uZXJCb2R5LmNvdW50ISAvIHRoaXMucGFnZVNpemUkLnZhbHVlKTtcclxuXHJcbiAgICAgICAgICBpZiAoaW5uZXJCb2R5LnBhZ2UgIT09IHRoaXMuY3VycmVudFBhZ2UkLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGF1c2VTdWJzY3RpcHRpb24gPSB0cnVlOyAvLyA8PT0gUGF1c2VcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSQubmV4dChpbm5lckJvZHkucGFnZSEpO1xyXG4gICAgICAgICAgICB0aGlzLnBhdXNlU3Vic2N0aXB0aW9uID0gZmFsc2U7IC8vIDw9PSBBY3RpdmUgYmFjayBhZ2FpblxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFVwZGF0ZSB0YWJIZWFkZXJzXHJcbiAgICAgICAgICBpZiAodGhpcy50YWJNb2RlICYmIGlubmVyQm9keS5zdGF0dXNDb3VudHMpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3VGFiSGVhZGVyczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXNUYWJzLmZvckVhY2goc3RhdHVzVGFiID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IGlubmVyQm9keS5zdGF0dXNDb3VudHNbc3RhdHVzVGFiLmlkIS50b1N0cmluZygpXSB8fCAwO1xyXG4gICAgICAgICAgICAgIHN0YXR1c1RhYi5jb3VudCA9IGNvdW50O1xyXG4gICAgICAgICAgICAgIG5ld1RhYkhlYWRlcnMucHVzaChgJHtzdGF0dXNUYWIudGV4dH0gKCR7Y291bnR9KWApO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGlzLnRhYkhlYWRlcnMgPSBuZXdUYWJIZWFkZXJzO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5saXN0ID0gW107XHJcbiAgICAgICAgICB0aGlzLmxpc3RDaGFuZ2UuZW1pdChbXSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5wYWdlQ291bnQgPSAwO1xyXG4gICAgICAgICAgLy90aGlzLnJlc3BvbnNlU2VydmljZS5yZXNvbHZlKGJvZHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLmxpc3RDaGFuZ2UuZW1pdChbXSk7XHJcblxyXG4gICAgICAgIHRoaXMucGFnZUNvdW50ID0gMDtcclxuICAgICAgICAvL3RoaXMucmVzcG9uc2VTZXJ2aWNlLnJlc29sdmUoYm9keSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAvLyAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAvLyAgICAgSlNPTi5zdHJpbmdpZnkoeCwgbnVsbCwgMiksXHJcbiAgICAgIC8vICAgICBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9uc1xyXG4gICAgICAvLyAgICk7XHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG1lcmdlRmlsdGVyT3BlcmF0b3IoKTogdm9pZCB7XHJcbiAgICAvKiBTVEFSVDogTWVyZ2UgZmlsdGVyT3BlcmF0b3Igd2l0aCBvdXRlciBvbmUgKi9cclxuICAgIGlmICghIXRoaXMub3V0ZXJGaWx0ZXJPcGVyYXRvcnMpIHtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyT3BlcmF0b3JzJC52YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRGaWx0ZXJPcGVyYXRvcnM6IElGaWx0ZXJPcGVyYXRvcltdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlck9wZXJhdG9ycyQudmFsdWUpKTtcclxuICAgICAgICB0aGlzLm91dGVyRmlsdGVyT3BlcmF0b3JzLm1hcCgob2ZvKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBjdXJyZW50RmlsdGVyT3BlcmF0b3JzLmZpbHRlcigobykgPT4gby5maWVsZCA9PT0gb2ZvLmZpZWxkICYmIG8ub3BlcmF0b3IgPT09IG9mby5vcGVyYXRvcik7XHJcbiAgICAgICAgICAvLyBvcHRpbWlzdGljYWxseSBmaWx0ZXIubGVuZ3RoID09PSAxXHJcbiAgICAgICAgICBpZiAoISFmaWx0ZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZpbHRlclswXS5kYXRlVGltZVZhbHVlID0gb2ZvLmRhdGVUaW1lVmFsdWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjdXJyZW50RmlsdGVyT3BlcmF0b3JzLnB1c2gob2ZvKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmZpbHRlck9wZXJhdG9ycyQubmV4dChjdXJyZW50RmlsdGVyT3BlcmF0b3JzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZpbHRlck9wZXJhdG9ycyQubmV4dCh0aGlzLm91dGVyRmlsdGVyT3BlcmF0b3JzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyogRU5EOiBDcmVhdGUvTWVyZ2UvT3ZlcndyaXRlIGZpbHRlck9wZXJhdG9yIHdpdGggb3V0ZXIgb25lICovXHJcbiAgfVxyXG4gIHRtcEZpbHRlckFjdGl2ZSE6IGJvb2xlYW47XHJcbiAgdG1wSW5PcGVyYXRvcnNBY3RpdmUhOiBib29sZWFuO1xyXG4gIHByaW1hcnlGaWx0ZXIhOiBhbnk7XHJcbiAgcHJpbWFyeUluT3BlcmF0b3JzITogSUluT3BlcmF0b3JbXTtcclxuXHJcbiAgb3V0ZXJQYXJhbVN1YnNjcmliZUZuKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMub3V0ZXJQYXJhbSQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgLy8gbWVyZ2Ugb3Igb3ZlcndyaXJlIGN1cnJlbnQgZmlsdGVyXHJcbiAgICAgICAgY29uc3QgY3VycmVudEZpbHRlciA9IHRoaXMuZmlsdGVyJC52YWx1ZTtcclxuICAgICAgICBpZiAoISFjdXJyZW50RmlsdGVyKSB7XHJcbiAgICAgICAgICBjb25zdCBuZXdGaWx0ZXIgPSB7XHJcbiAgICAgICAgICAgIC4uLmN1cnJlbnRGaWx0ZXIsXHJcbiAgICAgICAgICAgIC4uLngsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXIkLm5leHQobmV3RmlsdGVyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXIkLm5leHQoeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgIC8vIGNoZWNrIGZvciBzaG93Rm9yQ29uZmlybWF0aW9uXHJcbiAgICBjb25zdCBjaGVjayA9IHRoaXMuY29sdW1ucy5maWx0ZXIoeCA9PiAhIXguc2hvd0ZvckNvbmZpcm1hdGlvbik7XHJcbiAgICBpZiAoY2hlY2subGVuZ3RoID09PSAwICYmIGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKHRoaXMubWxzLnRyYW5zKHRoaXMudGl0bGUpICsgXCIgY+G6p24gdOG7k24gdOG6oWkgw610IG5o4bqldCAxIGPhu5l0IGPDsyB0aHXhu5ljIHTDrW5oICdzaG93Rm9yQ29uZmlybWF0aW9uOiB0cnVlJ1wiLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuY2xpY2tHZW5lcmF0ZVRlbXBsYXRlJC5waXBlKFxyXG4gICAgICAgIG1hcCh4ID0+IHtcclxuICAgICAgICAgIHJldHVybiB4O1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGZpbHRlcih4ID0+IHtcclxuICAgICAgICAgIHJldHVybiAhIXhcclxuICAgICAgICB9KSxcclxuICAgICAgICBzd2l0Y2hNYXAoeCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvbmdBcGlSdW5uaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudGVtcGxhdGVGaWxlTmFtZSA9IHRoaXMuZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3Q/LmV4Q29kZSArIFwiX1wiICsgeCArIFwiLnhsc3hcIlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5nZW5lcmF0ZVRlbXBsYXRlKHRoaXMuZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3QpXHJcbiAgICAgICAgfSlcclxuICAgICAgKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgdGhpcy5sb25nQXBpUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuXHJcbiAgICAgICAgICBpZiAoeC5ib2R5LnN0YXR1c0NvZGUgPT09IDQwMCkgcmV0dXJuXHJcblxyXG4gICAgICAgICAgbGV0IGRvd25sb2FkTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgZG93bmxvYWRMaW5rLmhyZWYgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbeC5ib2R5XSkpXHJcbiAgICAgICAgICBkb3dubG9hZExpbmsuc2V0QXR0cmlidXRlKFwiZG93bmxvYWRcIiwgdGhpcy50ZW1wbGF0ZUZpbGVOYW1lKTtcclxuICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG93bmxvYWRMaW5rKTtcclxuICAgICAgICAgIGRvd25sb2FkTGluay5jbGljaygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKFwiRG93bmxvYWQgZmFpbGVkLiBQbGVhc2UgY29udGFjdCB5b3VyIGRldmVsb3BlciB0ZWFtIHRvIHJlc29sdmVcIiwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KSlcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLnRtcEZpbHRlciQucGlwZShmaWx0ZXIoeCA9PiAhIXggJiYgISEhdGhpcy50bXBGaWx0ZXJBY3RpdmUpKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgdGhpcy5wcmltYXJ5RmlsdGVyID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlciQudmFsdWUpKTtcclxuICAgICAgICB0aGlzLmZpbHRlciQubmV4dCh4KTtcclxuICAgICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UudG1wRmlsdGVyJC5uZXh0KG51bGwpO1xyXG4gICAgICAgIHRoaXMudG1wRmlsdGVyQWN0aXZlID0gdHJ1ZTtcclxuICAgICAgfSlcclxuICAgIClcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UudG1wSW5PcGVyYXRvcnMkLnBpcGUoZmlsdGVyKHggPT4gISF4Lmxlbmd0aCAmJiAhISF0aGlzLnRtcEluT3BlcmF0b3JzQWN0aXZlKSkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgIHRoaXMucHJpbWFyeUluT3BlcmF0b3JzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmluT3BlcmF0b3JzJC52YWx1ZSkpO1xyXG4gICAgICAgIHRoaXMuaW5PcGVyYXRvcnMkLm5leHQoeCk7XHJcbiAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLnRtcEluT3BlcmF0b3JzJC5uZXh0KFtdKTtcclxuICAgICAgICB0aGlzLnRtcEluT3BlcmF0b3JzQWN0aXZlID0gdHJ1ZTtcclxuICAgICAgfSlcclxuICAgIClcclxuICAgIGlmICghIXRoaXMub3V0ZXJTb3J0KSB7XHJcbiAgICAgIHRoaXMuc29ydCQubmV4dCh0aGlzLm91dGVyU29ydCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vbkluc3RhbmNlQ3JlYXRlZC5lbWl0KHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIpO1xyXG5cclxuICAgIGlmICghIXRoaXMuZml4ZWRQYWdlU2l6ZSkge1xyXG4gICAgICB0aGlzLnBhZ2VTaXplJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPih0aGlzLmZpeGVkUGFnZVNpemUpO1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJUGFnaW5hdGlvbj4oe1xyXG4gICAgICAgIHNraXA6IDAsXHJcbiAgICAgICAgdGFrZTogdGhpcy5maXhlZFBhZ2VTaXplLFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGFnZVNpemUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KGRlZmF1bHRQYWdpbmcudGFrZSk7XHJcbiAgICAgIHRoaXMucGFnaW5hdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElQYWdpbmF0aW9uPih7XHJcbiAgICAgICAgc2tpcDogMCxcclxuICAgICAgICB0YWtlOiBkZWZhdWx0UGFnaW5nLnRha2UsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuZXdBdmFpbGFibGVDb2x1bW5zRm9yR2VuZXJhbFNlYXJjaDogc3RyaW5nW10gPSBbXTtcclxuICAgIHRoaXMuY29sdW1ucy5tYXAoKHgpID0+IHtcclxuICAgICAgLy8gaWYgKHgudHlwZSA9PT0gJ3RleHQnIHx8IHgudHlwZSA9PT0gJ3N0cmluZycgfHwgeC50eXBlID09PSAnZGF0ZScgfHwgeC50eXBlID09PSAnZGF0ZXRpbWUnKSB7XHJcbiAgICAgIC8vIGlmICh4LnR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICBpZiAoeC50eXBlID09PSAndGV4dCcgfHwgeC50eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIG5ld0F2YWlsYWJsZUNvbHVtbnNGb3JHZW5lcmFsU2VhcmNoLnB1c2goeC5maWVsZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5hdmFpbGFibGVDb2x1bW5zRm9yR2VuZXJhbFNlYXJjaCA9IG5ld0F2YWlsYWJsZUNvbHVtbnNGb3JHZW5lcmFsU2VhcmNoO1xyXG5cclxuICAgIGlmICghIXRoaXMuY2xlYXJEYXRhJCkge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmNsZWFyRGF0YSRcclxuICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICBmaWx0ZXIoKHgpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gISF4O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoXykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxpc3QgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5saXN0Q2hhbmdlLmVtaXQoW10pO1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyRGF0YSQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGFnaW5hdGlvbkhlaWdodCA9IE51bWJlcihcclxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXHJcbiAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0tc2l6ZS1jb3JlLXBhZ2luYXRpb24taGVpZ2h0JylcclxuICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcclxuICAgICk7XHJcblxyXG4gICAgLy8gc2V0IGRlZmF1bHQgc29ydCBkaXJlY3Rpb25cclxuXHJcbiAgICBjb25zdCBuZXdTb3J0OiBJU29ydEl0ZW1bXSA9IFtdO1xyXG4gICAgdGhpcy5jb2x1bW5zLmZpbHRlcih4ID0+IHguZmllbGQgIT09IFwiaWRcIikubWFwKChjKSA9PiB7XHJcbiAgICAgIG5ld1NvcnQucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6IGMuZmllbGQsXHJcbiAgICAgICAgc29ydERpcmVjdGlvbjogRW51bVNvcnREaXJlY3Rpb24uTk9ORSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIC8vIGFjY2VwdCBkZWZhdWx0c29ydCBwYXJhbVxyXG4gICAgdGhpcy5zb3J0JC5uZXh0KG5ld1NvcnQubWFwKHQxID0+ICh7IC4uLnQxLCAuLi50aGlzLnNvcnQkLnZhbHVlLmZpbmQodDIgPT4gdDIuZmllbGQgPT09IHQxLmZpZWxkKSB9KSkpO1xyXG5cclxuICAgIC8qIFNUQVJUOiBNZXJnZSBmaWx0ZXJPcGVyYXRvciB3aXRoIG91dGVyIG9uZSAqL1xyXG4gICAgaWYgKCEhdGhpcy5vdXRlckZpbHRlck9wZXJhdG9ycykge1xyXG4gICAgICBpZiAodGhpcy5maWx0ZXJPcGVyYXRvcnMkLnZhbHVlKSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEZpbHRlck9wZXJhdG9yczogSUZpbHRlck9wZXJhdG9yW10gPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXJPcGVyYXRvcnMkLnZhbHVlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5vdXRlckZpbHRlck9wZXJhdG9ycy5tYXAoKG9mbykgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZmlsdGVyID0gY3VycmVudEZpbHRlck9wZXJhdG9ycy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChvKSA9PiBvLmZpZWxkID09PSBvZm8uZmllbGQgJiYgby5vcGVyYXRvciA9PT0gb2ZvLm9wZXJhdG9yXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgLy8gb3B0aW1pc3RpY2FsbHkgZmlsdGVyLmxlbmd0aCA9PT0gMVxyXG4gICAgICAgICAgaWYgKGZpbHRlci5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgZmlsdGVyWzBdLm9wZXJhdG9yID0gb2ZvLm9wZXJhdG9yO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRGaWx0ZXJPcGVyYXRvcnMucHVzaChvZm8pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIm91dGVyRmlsdGVyT3BlcmF0b3JzIHdlcmUgaW52YWxpZFwiKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyT3BlcmF0b3JzJC5uZXh0KGN1cnJlbnRGaWx0ZXJPcGVyYXRvcnMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyT3BlcmF0b3JzJC5uZXh0KHRoaXMub3V0ZXJGaWx0ZXJPcGVyYXRvcnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvKiBFTkQ6IENyZWF0ZS9NZXJnZS9PdmVyd3JpdGUgZmlsdGVyT3BlcmF0b3Igd2l0aCBvdXRlciBvbmUgKi9cclxuXHJcbiAgICAvKiBTVEFSVDogU3Vic2NyaXB0aW9uIGZvciBvdXRlclBhcmFtJCAqL1xyXG4gICAgLy8gU29tZSBzaW1wbGUgbWFzdGVyIGRhdGEgZG8gbm90IGhhdmUgb3V0ZXJQYXJhbSQgSU1QT1JUQU5UISEhXHJcbiAgICBpZiAoISF0aGlzLm91dGVyUGFyYW0kKSB7XHJcbiAgICAgIHRoaXMub3V0ZXJQYXJhbVN1YnNjcmliZUZuKCk7XHJcbiAgICB9XHJcbiAgICAvKiBFTkQ6IFN1YnNjcmlwdGlvbiBmb3Igb3V0ZXJQYXJhbSQgKi9cclxuXHJcbiAgICAvKiBTVEFSVDogU3Vic2NyaXB0aW9ucyBmb3IgcXVlcnlMaXN0UmVxdWVzdCQgKi9cclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5tbHMubGFuZyQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICBsYW5nOiB4LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5leGNsdWRlZElkcyQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICBleGNsdWRlZElkczogeFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5nZW5lcmFsU2VhcmNoJFxyXG4gICAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICAgIGdlbmVyYWxTZWFyY2g6IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLmdlbmVyYWxTZWFyY2gsXHJcbiAgICAgICAgICAgICAgc2VhcmNoRm9yOiB4LFxyXG4gICAgICAgICAgICAgIGF2YWlsYWJsZUNvbHVtbnM6IHRoaXMuYXZhaWxhYmxlQ29sdW1uc0ZvckdlbmVyYWxTZWFyY2gsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5maWx0ZXIkLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgZmlsdGVyOiB4LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5maWx0ZXJPcGVyYXRvcnMkLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgZmlsdGVyT3BlcmF0b3JzOiB4LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5pbk9wZXJhdG9ycyQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICBpbk9wZXJhdG9yczogeCxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAndGhpcy5xdWVyeUxpc3RSZXF1ZXN0JCBjaGFuZ2VkOiAnLFxyXG4gICAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLnNlYXJjaCRcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIGRlYm91bmNlVGltZSg1MDApLFxyXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXYsIGN1cnIpID0+IHtcclxuICAgICAgICAgICAgbGV0IGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoISFwcmV2IHx8ICEhY3Vycikge1xyXG4gICAgICAgICAgICAgIGNvbmRpdGlvbiA9IEpTT04uc3RyaW5naWZ5KHByZXYpID09PSBKU09OLnN0cmluZ2lmeShjdXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gY29uZGl0aW9uO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSxcclxuICAgICAgICAgICAgc2VhcmNoOiAhIXg/LmN1cnJlbnRcclxuICAgICAgICAgICAgICA/IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoeD8uY3VycmVudCkpXHJcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5zb3J0JC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgLi4uSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlKSksXHJcbiAgICAgICAgICBzb3J0OiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHgpKSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMucGFnaW5hdGlvbiQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICBwYWdpbmF0aW9uOiB4LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmluc3RhbmNlc1xyXG4gICAgICAgIC5maWx0ZXIoKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIpWzBdXHJcbiAgICAgICAgLnJlbG9hZEZsYWckIS5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCd0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQgaXMgYmVpbmcgY2hhbmdlZC4uLicsIHgpO1xyXG4gICAgICAgICAgdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLm5leHQoeCk7XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSxcclxuICAgICAgICAgIGZvcmNlUmVsb2FkaW5nRmxhZzogeCxcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UkXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpIC8vIElNUE9SVEFOVCFcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJjdXJyZW50UGFnZSBjaGFuZ2UgdG9cIiwgeClcclxuICAgICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlPy5wYWdpbmF0aW9uISxcclxuICAgICAgICAgICAgICBza2lwOiAoeCAtIDEpICogdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZT8ucGFnaW5hdGlvbj8udGFrZSEsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmxvYWRpbmckLnN1YnNjcmliZSh4ID0+IHRoaXMubG9hZGluZyA9IHgpXHJcbiAgICApXHJcblxyXG4gICAgLyogRU5EOiBTdWJzY3JpcHRpb25zIGZvciBxdWVyeUxpc3RSZXF1ZXN0JCAqL1xyXG5cclxuICAgIC8vIFF1YW4gdHLhu41uZzogQ29yZVBhZ2VMaXN0IGPhuqduIGJp4bq/dCBjaMOtbmggeMOhYyBjaGnhu4F1IGNhb1xyXG4gICAgLy8gVHV5IG5oacOqbiBjw7Mgbmhp4buBdSB0csaw4budbmcgaOG7o3AgY2hp4buBdSBjYW8gbsOgeSBraMO0bmcgxJHGsOG7o2MgdHJ1eeG7gW4gdsOgbyBraGkgdHJp4buDbiBraGFpXHJcbiAgICAvLyBYw6l0IHRyxrDhu51uZyBo4bujcCBjw6FjIGZvcm0gZGFuaCBt4bulYyBjxqEgYuG6o25cclxuICAgIC8vIGNvbnRlbnQtY29udGFpbmVyID0+IGNvbnN1bWUgY29tcG9uZW50ID0+IGNvcmUtcGFnZS1saXN0ID0+IGNvcmUtcGFnZS1oZWFkZXIgPT4gY29yZS1jb21wb3NpdGlvbiA9PiB0b3BSZWYgKyB0YWJsZSArIHBhZ2luYXRpb25cclxuICAgIC8vIHRhIGPDsyB0aOG7gyB0w61uaCBz4buRIG3hurdjIMSR4buLbmggKG7hur91IGhlaWdodCBraMO0bmcgxJHGsOG7o2MgdHJ1eeG7gW4gdsOgbylcclxuICAgIGlmICh0aGlzLmhlaWdodCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMubGF5b3V0U2VydmljZS5jb250ZW50Q29udGFpbmVySGVpZ2h0JC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICAvLyBiYXNpY1NwYWNpbmcgbMOgIHBhZGRpbmdCb3R0b20gY+G7p2EgbOG7m3AgY29udGVudC1jb250YWluZXJcclxuICAgICAgICAgIHRoaXMuaGVpZ2h0ID0geCAtIHRoaXMubGF5b3V0U2VydmljZS5iYXNpY1NwYWNpbmc7XHJcbiAgICAgICAgICB0aGlzLmhlaWdodCQubmV4dCh4IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmJhc2ljU3BhY2luZylcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgb25Sb3dEb3VibGVDbGljayhldmVudDogYW55KSB7XHJcbiAgICBpZiAoISF0aGlzLnNlZWtlck1vZGUgfHwgISF0aGlzLm1jY01vZGUgfHwgISF0aGlzLmRpc2FibGVEb3VibGVDbGljaykge1xyXG4gICAgICB0aGlzLnJvd0RvdWJsZUNsaWNrLmVtaXQoZXZlbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCEhIXRoaXMuc2VsZlJlc29sdmVDb3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrKSB7XHJcbiAgICAgICAgdGhpcy5jb3JlUGFnZUVkaXRTZXJ2aWNlLmZyb21VcmwgPSB0aGlzLnJvdXRlci51cmw7XHJcbiAgICAgICAgaWYgKCEhdGhpcy5ub3JtYWxNb2RlKSB7XHJcbiAgICAgICAgICBpZiAoISF0aGlzLmhhc0lkT2ZTdHJpbmdUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgIGJ0b2EoZXZlbnQuaWQpLFxyXG4gICAgICAgICAgICAgICAgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUucGFyZW50LFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgIGJ0b2EoZXZlbnQuaWQudG9TdHJpbmcoKSksXHJcbiAgICAgICAgICAgICAgICB7IGxpc3RJbnN0YW5jZTogdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciB9LFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZS5wYXJlbnQsXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoISF0aGlzLmhhc0lkT2ZTdHJpbmdUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgb3V0bGV0czoge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcmVQYWdlTGlzdEF1eDogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnRvYShldmVudC5pZCksXHJcbiAgICAgICAgICAgICAgICAgICAgICB7IGxpc3RJbnN0YW5jZTogdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciB9LFxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgb3V0bGV0czoge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcmVQYWdlTGlzdEF1eDogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnRvYShldmVudC5pZC50b1N0cmluZygpKSxcclxuICAgICAgICAgICAgICAgICAgICAgIHsgbGlzdEluc3RhbmNlOiB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJvd0RvdWJsZUNsaWNrLmVtaXQoZXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblJvd0NsaWNrKGU6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coJ0NvclBhZ2VMaXN0IG9uUm93Q2xpY2sgZScsIGUpO1xyXG4gICAgaWYgKCEhZS5pZCkge1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKGUuaWQpO1xyXG4gICAgfSBlbHNlIGlmICghIWUudmlydHVhbElkKSB7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UoZS52aXJ0dWFsSWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgXCJCb3RoICdpZCcgYW5kICd2aXJ0dWFsSWQnIGNvbHVtbnMgYXJlIG51bGwuIFBsZWFzZSBjaGVjayB3aHlcIixcclxuICAgICAgICBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9uc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yb3dDbGljay5lbWl0KGUpO1xyXG4gIH1cclxuXHJcbiAgb25Ub29sQ2xpY2soZXZlbnQ6IElDb3JlVGFibGVUb29sQ2xpY2tFdmVudEVtaXR0ZXJEYXRhKSB7IH1cclxuXHJcbiAgb25TZWFyY2hpbmcoZTogSVNlYXJjaEl0ZW1bXSk6IHZvaWQge1xyXG4gICAgY29uc3QgcHJldiA9ICEhdGhpcy5zZWFyY2gkLnZhbHVlPy5jdXJyZW50XHJcbiAgICAgID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlYXJjaCQudmFsdWU/LmN1cnJlbnQpKVxyXG4gICAgICA6IG51bGw7XHJcbiAgICB0aGlzLnNlYXJjaCQubmV4dCh7XHJcbiAgICAgIHByZXZpb3VzOiBwcmV2ISxcclxuICAgICAgY3VycmVudDogZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNpemVIZWlnaHRXaGVuQ29udGFpbmVySGFzRml4ZWRIZWlnaHQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgIGNvbnN0IHBhZ2luYXRpb25IZWlnaHQgPSBOdW1iZXIoXHJcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxyXG4gICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtY29yZS1wYWdpbmF0aW9uLWhlaWdodCcpXHJcbiAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICApO1xyXG4gICAgY29uc3QgdGFibGVCb3JkZXJUb3AgPSBOdW1iZXIoXHJcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxyXG4gICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtY29yZS10YWJsZS1ib3JkZXItdG9wJylcclxuICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgYmxvY2tDZWxsU3BhY2luZyA9IE51bWJlcihcclxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXHJcbiAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0tc2l6ZS1sYXlvdXQtYmxvY2stY2VsbC1zcGFjaW5nJylcclxuICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jb3JlUGFnZUxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcclxuICAgICAgJy0taGVpZ2h0JyxcclxuICAgICAgY29udGFpbmVySGVpZ2h0ICsgJ3B4J1xyXG4gICAgKTtcclxuICAgIGNvbnN0IHJlbGF0ZWRUYWJsZUZpbHRlciA9IHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZXMuZmlsdGVyKFxyXG4gICAgICAoeCkgPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlclxyXG4gICAgKTtcclxuICAgIGlmICghIXJlbGF0ZWRUYWJsZUZpbHRlci5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgcmVsYXRlZFRhYmxlID0gcmVsYXRlZFRhYmxlRmlsdGVyWzBdLmNvcmVUYWJsZVJlZjtcclxuICAgICAgaWYgKCEhcmVsYXRlZFRhYmxlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1JlbGF0ZWQgQ29yZVRhYmxlQ29tcG9uZW50UmVmIEZPVU5EISEhJyk7XHJcbiAgICAgICAgLy9zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBmZWF0dXJlSGVpZ2h0ID1cclxuICAgICAgICAgIGNvbnRhaW5lckhlaWdodCAtXHJcbiAgICAgICAgICBwYWdpbmF0aW9uSGVpZ2h0IC1cclxuICAgICAgICAgIHRhYmxlQm9yZGVyVG9wIC1cclxuICAgICAgICAgIDIgKiBibG9ja0NlbGxTcGFjaW5nICogMCAvKiBwYWRkaW5nIGluY2x1ZWQgaW4gb2JqZWN0IGl0c2VsZiAqLyAtXHJcbiAgICAgICAgICAodGhpcy5leHRyYU1hbnVhbE9mZnNldCB8fCAwKTtcclxuICAgICAgICByZWxhdGVkVGFibGUubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcclxuICAgICAgICAgICctLWhlaWdodCcsXHJcbiAgICAgICAgICBmZWF0dXJlSGVpZ2h0ICsgJ3B4J1xyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpcnN0SGVhZGVyUm93SGVpZ2h0ID0gTnVtYmVyKFxyXG4gICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShyZWxhdGVkVGFibGUubmF0aXZlRWxlbWVudClcclxuICAgICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0taGVhZGVyLTFzdC1yb3ctaGVpZ2h0JylcclxuICAgICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBzZWNvbmRIZWFkZXJSb3dIZWlnaHQgPSBOdW1iZXIoXHJcbiAgICAgICAgICBnZXRDb21wdXRlZFN0eWxlKHJlbGF0ZWRUYWJsZS5uYXRpdmVFbGVtZW50KVxyXG4gICAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1oZWFkZXItMm5kLXJvdy1oZWlnaHQnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBmZWF0dXJlVGJvZHlIZWlnaHQgPVxyXG4gICAgICAgICAgZmVhdHVyZUhlaWdodCAtIGZpcnN0SGVhZGVyUm93SGVpZ2h0IC0gc2Vjb25kSGVhZGVyUm93SGVpZ2h0O1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZygnZmVhdHVyZVRib2R5SGVpZ2h0JywgZmVhdHVyZVRib2R5SGVpZ2h0KTtcclxuXHJcbiAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmluc3RhbmNlc1xyXG4gICAgICAgICAgLmZpbHRlcihcclxuICAgICAgICAgICAgKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJcclxuICAgICAgICAgIClbMF1cclxuICAgICAgICAgIC50Ym9keUhlaWdodCQubmV4dChmZWF0dXJlVGJvZHlIZWlnaHQpO1xyXG4gICAgICAgIC8vfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignUmVsYXRlZCBDb3JlVGFibGVDb21wb25lbnRSZWYgd2FzIHVuZGVmaW5lZCcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcignTm8gcmVsYXRlZCBDb3JlVGFibGVDb21wb25lbnRSZWYgZm91bmQnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzaXplSGVpZ2h0V2hlbkNvbnRhaW5lckhhc1VuZGVmaW5lZEhlaWdodCgpOiB2b2lkIHtcclxuXHJcbiAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB0aGlzLmxheW91dFNlcnZpY2UuY29udGVudENvbnRhaW5lckhlaWdodCQudmFsdWU7XHJcbiAgICBjb25zdCBwYWdlSGVhZGVySGVpZ2h0ID0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdlSGVhZGVySGVpZ2h0O1xyXG4gICAgY29uc3QgcGFnaW5hdGlvbkhlaWdodCA9IHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnaW5hdGlvbkhlaWdodDtcclxuICAgIGNvbnN0IHRhYmxlQm9yZGVyVG9wID0gdGhpcy5sYXlvdXRTZXJ2aWNlLnRhYmxlQm9yZGVyVG9wO1xyXG4gICAgY29uc3QgYmFzaWNTcGFjaW5nID0gdGhpcy5sYXlvdXRTZXJ2aWNlLmJhc2ljU3BhY2luZztcclxuXHJcbiAgICB0aGlzLmNvcmVQYWdlTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxyXG4gICAgICAnLS1oZWlnaHQnLFxyXG4gICAgICBjb250YWluZXJIZWlnaHQgLSAyICogYmFzaWNTcGFjaW5nICsgJ3B4J1xyXG4gICAgKTtcclxuICAgIGNvbnN0IHJlbGF0ZWRUYWJsZUZpbHRlciA9IHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZXMuZmlsdGVyKFxyXG4gICAgICAoeCkgPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlclxyXG4gICAgKTtcclxuICAgIGlmICghIXJlbGF0ZWRUYWJsZUZpbHRlci5sZW5ndGgpIHtcclxuXHJcbiAgICAgIGlmICghIXRoaXMuYXV0b1Jlc2l6ZVdpdGhXaW5kb3cpIHtcclxuXHJcbiAgICAgICAgY29uc3QgcmVsYXRlZFRhYmxlID0gcmVsYXRlZFRhYmxlRmlsdGVyWzBdLmNvcmVUYWJsZVJlZjtcclxuICAgICAgICBpZiAoISFyZWxhdGVkVGFibGUpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdSZWxhdGVkIENvcmVUYWJsZUNvbXBvbmVudFJlZiBGT1VORCEhIScpO1xyXG4gICAgICAgICAgLy9zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGZlYXR1cmVIZWlnaHQgPVxyXG4gICAgICAgICAgICBjb250YWluZXJIZWlnaHQgLVxyXG4gICAgICAgICAgICBwYWdlSGVhZGVySGVpZ2h0IC1cclxuICAgICAgICAgICAgcGFnaW5hdGlvbkhlaWdodCAtXHJcbiAgICAgICAgICAgIHRhYmxlQm9yZGVyVG9wIC1cclxuICAgICAgICAgICAgMiAqIGJhc2ljU3BhY2luZyAtXHJcbiAgICAgICAgICAgICh0aGlzLmV4dHJhTWFudWFsT2Zmc2V0IHx8IDApO1xyXG4gICAgICAgICAgcmVsYXRlZFRhYmxlLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAgICAgICAgICctLWhlaWdodCcsXHJcbiAgICAgICAgICAgIGZlYXR1cmVIZWlnaHQgKyAncHgnXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGZpcnN0SGVhZGVyUm93SGVpZ2h0ID0gTnVtYmVyKFxyXG4gICAgICAgICAgICBnZXRDb21wdXRlZFN0eWxlKHJlbGF0ZWRUYWJsZS5uYXRpdmVFbGVtZW50KVxyXG4gICAgICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLWhlYWRlci0xc3Qtcm93LWhlaWdodCcpXHJcbiAgICAgICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3Qgc2Vjb25kSGVhZGVyUm93SGVpZ2h0ID0gTnVtYmVyKFxyXG4gICAgICAgICAgICBnZXRDb21wdXRlZFN0eWxlKHJlbGF0ZWRUYWJsZS5uYXRpdmVFbGVtZW50KVxyXG4gICAgICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLWhlYWRlci0ybmQtcm93LWhlaWdodCcpXHJcbiAgICAgICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGZlYXR1cmVUYm9keUhlaWdodCA9XHJcbiAgICAgICAgICAgIGZlYXR1cmVIZWlnaHQgLSBmaXJzdEhlYWRlclJvd0hlaWdodCAtIHNlY29uZEhlYWRlclJvd0hlaWdodDtcclxuXHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnZmVhdHVyZVRib2R5SGVpZ2h0JywgZmVhdHVyZVRib2R5SGVpZ2h0KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzXHJcbiAgICAgICAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJcclxuICAgICAgICAgICAgKVswXVxyXG4gICAgICAgICAgICAudGJvZHlIZWlnaHQkLm5leHQoZmVhdHVyZVRib2R5SGVpZ2h0KTtcclxuICAgICAgICAgIC8vfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1JlbGF0ZWQgQ29yZVRhYmxlQ29tcG9uZW50UmVmIHdhcyB1bmRlZmluZWQnKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgfVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHJlbGF0ZWQgQ29yZVRhYmxlQ29tcG9uZW50UmVmIGZvdW5kJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2l6ZUhlaWdodCQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XHJcbiAgICAgIHRoaXMuaGVpZ2h0UmVzaXppbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLnJlc2l6ZUhlaWdodCgpO1xyXG4gICAgICB0aGlzLmhlaWdodFJlc2l6aW5nID0gZmFsc2U7XHJcbiAgICAgIG9ic2VydmVyLm5leHQobmV3IERhdGUoKS5nZXRUaW1lKCkpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNpemVIZWlnaHQoKTogdm9pZCB7XHJcbiAgICBpZiAoISEhdGhpcy5zZWVrZXJNb2RlKSB7XHJcbiAgICAgIC8qICNzdGFydCBFRElUSU5HIENPREUgQkxPQ0sgQkVMTE9XIE9OTFkgSUYgWU9VIEtOT1cgQUxMIFRIRSBBUFAgREVTSUdOIEZMT1dTICovXHJcbiAgICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXHJcbiAgICAgIGlmICghIXRoaXMuaGVpZ2h0KSB7XHJcbiAgICAgICAgdGhpcy5yZXNpemVIZWlnaHRXaGVuQ29udGFpbmVySGFzRml4ZWRIZWlnaHQoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlc2l6ZUhlaWdodFdoZW5Db250YWluZXJIYXNVbmRlZmluZWRIZWlnaHQoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gdG8gZG8gc210aCBtYXliZVxyXG4gICAgfVxyXG4gICAgLyogI2VuZCBFRElUSU5HIENPREUgQkxPQ0sgQkVMTE9XIE9OTFkgSUYgWU9VIEtOT1cgQUxMIFRIRSBBUFAgREVTSUdOIEZMT1dTICovXHJcbiAgfVxyXG5cclxuICBxdWVyeUxpc3RTdWJzY3JpYmUoKTogdm9pZCB7XHJcbiAgICBpZiAoISEhdGhpcy5xdWVyeUxpc3RTdWJzY3JpcHRpb24gJiYgISF0aGlzLnF1ZXJ5TGlzdFN0cmVhbSQpIHtcclxuICAgICAgdGhpcy5xdWVyeUxpc3RTdWJzY3JpcHRpb24gPSB0aGlzLnF1ZXJ5TGlzdFN0cmVhbSQuc3Vic2NyaWJlKHggPT4gdGhpcy5zdWJzY3JpYmVRdWVyeUxpc3QoeCkpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYWxjdWxhdGVUYWJsZUhlaWdodEJhc2VkT25IZWlnaHRBbmRUb3BSZWZIZWlnaHQoaGVpZ2h0OiBudW1iZXIsIHRvcFJlZkhlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQgfHwgdG9wUmVmSGVpZ2h0ID09PSB1bmRlZmluZWQpIHJldHVybjtcclxuICAgIHRoaXMuY29tcG9zaXRpb25IZWlnaHQgPSBoZWlnaHQgLSAoISF0aGlzLmhpZGVIZWFkZXIgPyAwIDogdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdlSGVhZGVySGVpZ2h0KTtcclxuICAgIC8vICghdG9wUmVmSGVpZ2h0ID8gMTUgOiAwKSA9PiBO4bq/dSBjw7MgcGjhuqduIFRvcCBz4bq9IGPDsyB0aMOqbSBtYXJnaW5Cb3R0b20gMTVweCBj4bunYSBuw7MuXHJcbiAgICBpZiAoIXRoaXMudGFiTW9kZSkge1xyXG4gICAgICB0aGlzLnRhYmxlSGVpZ2h0ID0gaGVpZ2h0IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdlSGVhZGVySGVpZ2h0IC0gdG9wUmVmSGVpZ2h0IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdpbmF0aW9uSGVpZ2h0IC0gKCEhdG9wUmVmSGVpZ2h0ID8gMTUgOiAwKSAgLy8gMTVweCBpcyBtYXJnaW5Cb3R0b20gb2YgdG9wUmVmXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRhYmxlSGVpZ2h0ID0gaGVpZ2h0IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdlSGVhZGVySGVpZ2h0IC0gKDQ1KSAtIHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnaW5hdGlvbkhlaWdodCAvLyA8Y29yZS10YWJzIFtoZWlnaHRdPVwiNTVcIi4uLj5cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAvKiogU1RBUlQgc2V0VGltZW91dCAqL1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICB0aGlzLmZpbHRlcktpdFpJbmRleCA9IHRoaXMuZG9tU2VydmljZS5nZXRNYXhaSW5kZXgoKSArIDE7XHJcblxyXG4gICAgICBjb25zdCB0cnlGaW5kID0gdGhpcy5jb3JlQnV0dG9uR3JvdXBTZXJ2aWNlLmluc3RhbmNlcy5maWx0ZXIoeCA9PiB4Lmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyKTtcclxuICAgICAgaWYgKCEhdHJ5RmluZC5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmJ1dHRvbkdyb3VwU3RhdHVzID0gdHJ5RmluZFswXTtcclxuICAgICAgICBjb25zdCBleGlzdGluZ0hpZGRlbkl0ZW1zID0gdGhpcy5idXR0b25Hcm91cFN0YXR1cy5tdXN0QmVIaWRkZW4kLnZhbHVlXHJcbiAgICAgICAgdGhpcy5idXR0b25Hcm91cFN0YXR1cy5tdXN0QmVIaWRkZW4kLm5leHQoW1xyXG4gICAgICAgICAgLi4uZXhpc3RpbmdIaWRkZW5JdGVtcyxcclxuICAgICAgICAgIC4uLkVNUFRZX1NFTEVDVElPTl9ISURERU5fQlVUVE9OXHJcbiAgICAgICAgXSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoaXNEZXZNb2RlKCkgJiYgISghdGhpcy5zZWVrZXJNb2RlIHx8ICF0aGlzLmhpZGVCdXR0b25Hcm91cCkpIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLndhcm4oXCJLaMO0bmcgdMOsbSB0aOG6pXkgaW5zdGFuY2UgbnVtYmVyIGPhu6dhIGLhu5kgbsO6dCDEkWnhu4F1IGtoaeG7g25cIiwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoISF0aGlzLnRhYk1vZGUgJiYgISF0aGlzLnN0YXR1c09wdGlvbnNBcGkpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgIHRoaXMubWxzLmxhbmckLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLmdldCh0aGlzLnN0YXR1c09wdGlvbnNBcGkgKyAnP2xhbmc9JyArIHgpLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCAmJiB4LmJvZHk/LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgY291bnRTdGF0ZTogeyBpZDogbnVtYmVyIHwgbnVsbCwgY291bnQ6IG51bWJlciB9W10gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNUYWJzLmZvckVhY2goaSA9PiBjb3VudFN0YXRlLnB1c2goeyBpZDogaS5pZCwgY291bnQ6IGkuY291bnQgfSkpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c1RhYnMuY2xlYXIoKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy50YWJIZWFkZXJzID0gW107XHJcbiAgICAgICAgICAgICAgICAgIGJvZHkuaW5uZXJCb2R5LmZvckVhY2goKG06IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudEZpbHRlciA9IGNvdW50U3RhdGUuZmlsdGVyKG8gPT4gby5pZCA9PT0gbS5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudENvdW50ID0gISFjdXJyZW50Q291bnRGaWx0ZXIubGVuZ3RoID8gY3VycmVudENvdW50RmlsdGVyWzBdLmNvdW50IDogMFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzVGFicy5zZXQoaW5kZXgsIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlkOiBtLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaW50bENvZGU6IG0uTmFtZUludGxDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dDogbS50ZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgY291bnQ6IGN1cnJlbnRDb3VudFxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJIZWFkZXJzLnB1c2goYCR7bS50ZXh0fSAoJHtjdXJyZW50Q291bnR9KWApO1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgY29tcG9zaXRpb25GaWx0ZXIgPSB0aGlzLmNvcmVDb21wb3NpdGlvblNlcnZpY2UuaW5zdGFuY2VzLmZpbHRlcih4ID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIpO1xyXG4gICAgICBpZiAoISFjb21wb3NpdGlvbkZpbHRlci5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgIGNvbXBvc2l0aW9uRmlsdGVyWzBdLnRvcFJlZiQuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRvcFBsYWNlSGVpZ2h0JC5uZXh0KHgubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF0aGlzLmRpc2FibGVGaWx0ZXJIdWIpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgIHRoaXMuY29yZUZpbHRlckh1YlNlcnZpY2Uub3BlbiQuc3Vic2NyaWJlKHggPT4gdGhpcy5zaG93RmlsdGVyID0geClcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMubG9uZ1Rhc2tTZXJ2aWNlLmxvbmdBcGlSdW5uaW5nJC5zdWJzY3JpYmUoeCA9PiB0aGlzLmxvbmdBcGlSdW5uaW5nID0geClcclxuICAgICAgKVxyXG5cclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMuaGVpZ2h0JC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVRhYmxlSGVpZ2h0QmFzZWRPbkhlaWdodEFuZFRvcFJlZkhlaWdodCh4LCB0aGlzLnRvcFBsYWNlSGVpZ2h0JC52YWx1ZSlcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLnRvcFBsYWNlSGVpZ2h0JC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVRhYmxlSGVpZ2h0QmFzZWRPbkhlaWdodEFuZFRvcFJlZkhlaWdodCh0aGlzLmhlaWdodCQudmFsdWUsIHgpXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5yZXNpemVIZWlnaHRGbGFnJC5waXBlKFxyXG4gICAgICAgICAgc3dpdGNoTWFwKF8gPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdlb21ldHJpY0RvbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzaXplSGVpZ2h0JCgpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJyZXNpemVIZWlnaHRGbGFnJCBzd2l0Y2hNYXAgZmluYWwgdmFsdWVcIiwgeClcclxuICAgICAgICAgIGlmICghISF0aGlzLmhlaWdodFJlc2l6aW5nKSB0aGlzLmdlb21ldHJpY0RvbmUgPSB0cnVlO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICApXHJcbiAgICAgIC8vIHRoaXMuY2FsY3VsYXRlVGFibGVIZWlnaHQoKTtcclxuXHJcbiAgICAgIGlmICghIXRoaXMuc2hvd1BhcmFtS2l0KSB7XHJcbiAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgLy8gY2FsY3VsYXRpbmcgb2Zmc2V0IG9mIHRoZSB0b3BcclxuICAgICAgICBjb25zdCB0cnlGaW5kQ29yZUhlYWRlclBhcmFtc0VsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICAgICAgJy5jb3JlLWhlYWRlci1wYXJhbXMtY29udGFpbmVyJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKEFycmF5LmZyb20odHJ5RmluZENvcmVIZWFkZXJQYXJhbXNFbGVtZW50KS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBBcnJheS5mcm9tKHRyeUZpbmRDb3JlSGVhZGVyUGFyYW1zRWxlbWVudClbMF07XHJcbiAgICAgICAgICBjb25zdCByZWN0ID0gaXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgIHRoaXMuZXh0cmFNYW51YWxPZmZzZXQgPSByZWN0LmhlaWdodCArIDE1OyAvLyBtYjE1IGlzIG1hcmdpbi1ib3R0b20gMTVweCBvZiBmb3JtIHJvd1xyXG5cclxuICAgICAgICAgIHRoaXMucmVzaXplSGVpZ2h0RmxhZyQubmV4dCghISF0aGlzLnJlc2l6ZUhlaWdodEZsYWckLnZhbHVlKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICghISF0aGlzLmV4dHJhTWFudWFsT2Zmc2V0KSB0aGlzLmV4dHJhTWFudWFsT2Zmc2V0ID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVzaXplSGVpZ2h0RmxhZyQubmV4dCghISF0aGlzLnJlc2l6ZUhlaWdodEZsYWckLnZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoISEhdGhpcy5leHRyYU1hbnVhbE9mZnNldCkgdGhpcy5leHRyYU1hbnVhbE9mZnNldCA9IDA7XHJcbiAgICAgICAgdGhpcy5yZXNpemVIZWlnaHRGbGFnJC5uZXh0KCEhIXRoaXMucmVzaXplSGVpZ2h0RmxhZyQudmFsdWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB0cnlGaWx0ZXIgPSB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzXHJcbiAgICAgICAgLmZpbHRlcigoeCkgPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcik7XHJcbiAgICAgIGlmICghISF0cnlGaWx0ZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihgQ29yZVBhZ2VMaXN0IGluc3RhbmNlcyBkbyBub3QgaW5jbHVkZSBudW1iZXIgJHt0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyfWAsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZXNcclxuICAgICAgICAgICAgLmZpbHRlcigoeCkgPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcilbMF1cclxuICAgICAgICAgICAgLmlkJC5waXBlKFxyXG4gICAgICAgICAgICAgIGZpbHRlcihfID0+ICEhIXRoaXMuaWRTdGF0ZSlcclxuICAgICAgICAgICAgKS5zdWJzY3JpYmUoKHg6IGFueSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZSBpZCQgaGFzIGNoYW5nZWQsIHggPSAnLCB4KTtcclxuICAgICAgICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSxcclxuICAgICAgICAgICAgICAgIGlkOiB4LFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKCAvLyBvdXRlci1wdXNoXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbmZpcm1lZCQucGlwZShcclxuICAgICAgICAgIGZpbHRlcihpID0+ICEhIXRoaXMuZGlhbG9nU2VydmljZS5idXN5ICYmICEhaT8uY29uZmlybWVkICYmIGkuaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuZGlhbG9nSW5zdGFuY2VOdW1iZXIpXHJcbiAgICAgICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5yZXNldFNlcnZpY2UoKVxyXG5cclxuICAgICAgICAgIHN3aXRjaCAodGhpcy5wZW5kaW5nQWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VUExPQUQ6XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJOb3cgdXBsb2FkaW5nLi4uIFwiLCB0aGlzLmRhdGFJbXBvcnQpO1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKCAvLyBtaWRkZW0tcHVzaFxyXG4gICAgICAgICAgICAgIC8vIClcclxuICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb24gPSBudWxsO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFOlxyXG4gICAgICAgICAgICAgIGNvbnN0IHN5c011dGF0aW9uTG9nQmVmb3JlQWZ0ZXJSZXF1ZXN0OiBJU3lzTXV0YXRpb25Mb2dCZWZvcmVBZnRlclJlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgICAgICBzeXNGdW5jdGlvbkNvZGU6IHRoaXMucm91dGluZ1NlcnZpY2UuY3VycmVudEZ1bmN0aW9uJC52YWx1ZT8uY29kZSEsXHJcbiAgICAgICAgICAgICAgICBzeXNBY3Rpb25Db2RlOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURSxcclxuICAgICAgICAgICAgICAgIGJlZm9yZTogSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZERhdGEpLFxyXG4gICAgICAgICAgICAgICAgYWZ0ZXI6ICdcIlwiJyxcclxuICAgICAgICAgICAgICAgIHVzZXJuYW1lOiB0aGlzLmF1dGhTZXJ2aWNlLmRhdGEkLnZhbHVlPy51c2VyTmFtZSFcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3Q6IElJZHNSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICAgICAgaWRzOiB0aGlzLnNlbGVjdGVkSWRzIGFzIG51bWJlcltdLFxyXG4gICAgICAgICAgICAgICAgc3lzTXV0YXRpb25Mb2dCZWZvcmVBZnRlclJlcXVlc3RcclxuICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAuZGVsZXRlSWRzKHJlcXVlc3QsIHRoaXMuY3J1ZC5kZWxldGVJZHMhKVxyXG4gICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDAgfHwgeC5ib2R5LnN0YXR1c0NvZGUgPT0gJzIwMCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLm5leHQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgISEhdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuaWRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gNDAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQWN0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0FDVElWQVRFOlxyXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGl2YXRlUmVxdWVzdDogSVRvZ2dsZUFjdGl2ZUlkc1JlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZVRvQmluZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGlkczogdGhpcy5zZWxlY3RlZElkcyBhcyBudW1iZXJbXSxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIGlmICghIXRoaXMuY3J1ZC50b2dnbGVBY3RpdmVJZHMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UucG9zdCh0aGlzLmNydWQudG9nZ2xlQWN0aXZlSWRzLCBhY3RpdmF0ZVJlcXVlc3QpXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwIHx8IHguYm9keS5zdGF0dXNDb2RlID09ICcyMDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLm5leHQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhISF0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQudmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2YXRlUmVxdWVzdC5pZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uud2Fybih0aGlzLm1scy50cmFucyhFbnVtVHJhbnNsYXRlS2V5Lk5PX0FQSV9FTkRfUE9JTlRfUFJPVklERURfRk9SX0FDVElWQVRJT04pLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9JTkFDVElWQVRFOlxyXG4gICAgICAgICAgICAgIGNvbnN0IGluYWN0aXZhdGVSZXF1ZXN0OiBJVG9nZ2xlQWN0aXZlSWRzUmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgICAgIHZhbHVlVG9CaW5kOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGlkczogdGhpcy5zZWxlY3RlZElkcyBhcyBudW1iZXJbXSxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIGlmICghIXRoaXMuY3J1ZC50b2dnbGVBY3RpdmVJZHMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UucG9zdCh0aGlzLmNydWQudG9nZ2xlQWN0aXZlSWRzLCBpbmFjdGl2YXRlUmVxdWVzdClcclxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDAgfHwgeC5ib2R5LnN0YXR1c0NvZGUgPT0gJzIwMCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQubmV4dChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEhIXRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5hY3RpdmF0ZVJlcXVlc3QuaWRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLndhcm4odGhpcy5tbHMudHJhbnMoRW51bVRyYW5zbGF0ZUtleS5OT19BUElfRU5EX1BPSU5UX1BST1ZJREVEX0ZPUl9BQ1RJVkFUSU9OKSwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVU5BUFBST1ZFOlxyXG4gICAgICAgICAgICAgIGNvbnN0IHN5c011dGF0aW9uTG9nQmVmb3JlQWZ0ZXJTZW5kVW5hcHByb3ZlOiBJU3lzTXV0YXRpb25Mb2dCZWZvcmVBZnRlclJlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgICAgICBzeXNGdW5jdGlvbkNvZGU6IHRoaXMucm91dGluZ1NlcnZpY2UuY3VycmVudEZ1bmN0aW9uJC52YWx1ZT8uY29kZSEsXHJcbiAgICAgICAgICAgICAgICBzeXNBY3Rpb25Db2RlOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VOQVBQUk9WRSxcclxuICAgICAgICAgICAgICAgIGJlZm9yZTogSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZERhdGEpLFxyXG4gICAgICAgICAgICAgICAgYWZ0ZXI6ICdcIlwiJyxcclxuICAgICAgICAgICAgICAgIHVzZXJuYW1lOiB0aGlzLmF1dGhTZXJ2aWNlLmRhdGEkLnZhbHVlPy51c2VyTmFtZSFcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHNlbmRSZXF1ZXN0OiBJVG9uZ2xlVW5BcHByb3ZlSWRzUmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgICAgIHJlYXNvbjogdGhpcy5kaWFsb2dTZXJ2aWNlLnJlYXNvbiQudmFsdWUsXHJcbiAgICAgICAgICAgICAgICBpZHM6IHRoaXMuc2VsZWN0ZWRJZHMgYXMgbnVtYmVyW10sXHJcbiAgICAgICAgICAgICAgICB2YWx1ZVRvQmluZDogZmFsc2VcclxuICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgIHRoaXMuYXBwU2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAucG9zdCh0aGlzLmNydWQudG9nZ2xlVW5hcHByb3ZlSWRzISwgc2VuZFJlcXVlc3QpXHJcbiAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCB8fCB4LmJvZHkuc3RhdHVzQ29kZSA9PSAnMjAwJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQubmV4dChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAhISF0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQudmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5pZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYm9keS5zdGF0dXNDb2RlID09PSA0MDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb24gPSBudWxsO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcblxyXG4gICAgICBpZiAodGhpcy5hdXRvUmVzaXplV2l0aFdpbmRvdykge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5yZXNpemVTdHJlYW0kLnBpcGUoZGVib3VuY2VUaW1lKDIwMCkpLnN1YnNjcmliZSgoXzogYW55KSA9PiB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlc2l6ZUhlaWdodEZsYWckLm5leHQoISEhdGhpcy5yZXNpemVIZWlnaHRGbGFnJC52YWx1ZSk7XHJcblxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL3NldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvKiBTVEFSVDogU3Vic2NyaXB0aW9uIGZvciBsaXN0ICovXHJcblxyXG4gICAgICB0aGlzLnF1ZXJ5TGlzdFN0cmVhbSQgPSB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnBpcGUoXHJcbiAgICAgICAgbWFwKHggPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJtYXAgeCA9PiBcIiwgeClcclxuICAgICAgICAgIGNvbnN0IGZpbHRlcjFDb25kaXRpb24gPSAhIXggJiYgLyohIXguc29ydCAmJiAqLyAhIXgucGFnaW5hdGlvblxyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJtYXAgZmlsdGVyMUNvbmRpdGlvbiA9PiBcIiwgZmlsdGVyMUNvbmRpdGlvbilcclxuICAgICAgICAgIHJldHVybiB4XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgZmlsdGVyKCh4OiBJUXVlcnlMaXN0UmVxdWVzdCkgPT4gISF4ICYmIC8qISF4LnNvcnQgJiYgKi8gISF4LnBhZ2luYXRpb24pLFxyXG4gICAgICAgIGZpbHRlcigoXykgPT4gIXRoaXMucGF1c2VTdWJzY3RpcHRpb24pLFxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2LCBjdXJyKSA9PiB7XHJcblxyXG4gICAgICAgICAgLyogU1RBUlQ6IEFzc2ltaWxhdGlvbiBudWxsIGFuZCBub3QtZXhpc3RpbmcgcHJvcGVydHkgKi9cclxuICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICBsYW5nOiBzdHJpbmc7XHJcbiAgICAgICAgICAgICAgICBnZW5lcmFsU2VhcmNoPzogSUdlbmVyYWxTZWFyY2g7XHJcbiAgICAgICAgICAgICAgICBzb3J0PzogSVNvcnRJdGVtW107XHJcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uPzogSVBhZ2luYXRpb247XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXI/OiBhbnk7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJPcGVyYXRvcnM/OiBJRmlsdGVyT3BlcmF0b3JbXTtcclxuICAgICAgICAgICAgICAgIGluT3BlcmF0b3JzPzogSUluT3BlcmF0b3JbXTtcclxuICAgICAgICAgICAgICAgIHNlYXJjaD86IElTZWFyY2hJdGVtW107XHJcbiAgICAgICAgICAgICAgICBpZD86IG51bWJlciB8IHN0cmluZyB8IG51bGwsXHJcbiAgICAgICAgICAgICAgICBmb3JjZVJlbG9hZGluZ0ZsYWc/OiBib29sZWFuO1xyXG4gICAgICAgICAgICAqL1xyXG5cclxuICAgICAgICAgIC8vZ2VuZXJhbFNlYXJjaFxyXG4gICAgICAgICAgaWYgKCEhIXByZXYuZ2VuZXJhbFNlYXJjaD8uc2VhcmNoRm9yKSBwcmV2LmdlbmVyYWxTZWFyY2ggPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICBpZiAoISEhY3Vyci5nZW5lcmFsU2VhcmNoPy5zZWFyY2hGb3IpIGN1cnIuZ2VuZXJhbFNlYXJjaCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgICAvLyBzb3J0XHJcbiAgICAgICAgICBpZiAoISFwcmV2LnNvcnQpIHtcclxuICAgICAgICAgICAgaWYgKHByZXYuc29ydC5sZW5ndGggPT09IDApIHByZXYuc29ydCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghIWN1cnIuc29ydCkge1xyXG4gICAgICAgICAgICBpZiAoY3Vyci5zb3J0Lmxlbmd0aCA9PT0gMCkgY3Vyci5zb3J0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIHNlYXJjaFxyXG4gICAgICAgICAgaWYgKCEhcHJldi5zZWFyY2gpIHtcclxuICAgICAgICAgICAgaWYgKHByZXYuc2VhcmNoLmxlbmd0aCA9PT0gMCkgcHJldi5zZWFyY2ggPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoISFjdXJyLnNlYXJjaCkge1xyXG4gICAgICAgICAgICBpZiAoY3Vyci5zZWFyY2gubGVuZ3RoID09PSAwKSBjdXJyLnNlYXJjaCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBpZFxyXG4gICAgICAgICAgaWYgKCEhIXByZXYuaWQpIHByZXYuaWQgPSBudWxsO1xyXG4gICAgICAgICAgaWYgKCEhIWN1cnIuaWQpIGN1cnIuaWQgPSBudWxsO1xyXG5cclxuICAgICAgICAgIC8qIEVORDogQXNzaW1pbGF0aW9uIG51bGwgYW5kIG5vdC1leGlzdGluZyBwcm9wZXJ0eSAqL1xyXG5cclxuICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IEpTT04uc3RyaW5naWZ5KHByZXYpID09PSBKU09OLnN0cmluZ2lmeShjdXJyKTtcclxuXHJcbiAgICAgICAgICBpZiAoISEhY29uZGl0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXAoJ0NPTVBBUklTT04nKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3ByZXYnLCBwcmV2KTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2N1cnInLCBjdXJyKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2NvbmRpdGlvbicsIGNvbmRpdGlvbik7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBjb25kaXRpb247XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgLypcclxuICAgICAgICAgIC8qIFNUQVJUOiB1c2Ugc3dpdGNoTWFwIGZvciBjYW5jZWxsYXRpb25cclxuICAgICAgICAgICovXHJcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmdyb3VwKCdzd2l0Y2hNYXAgdHJpZ2dlcmVkJyk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInguaWQgPSBcIiwgeC5pZClcclxuICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmFwaURlZmluaXRpb24ucXVlcnlMaXN0UmVsYXRpdmVQYXRoICsgXCI/Y29tcHV0aW5nV2l0aExvY2FsVGltZVpvbmU9dHJ1ZVwiO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5xdWVyeUxpc3QoeCwgdXJsKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgLyogRU5EOiB1c2Ugc3dpdGNoTWFwIGZvciBjYW5jZWxsYXRpb25cclxuICAgICAgICAqL1xyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5xdWVyeUxpc3RTdWJzY3JpYmUoKTtcclxuXHJcbiAgICAgIC8qIEVORDogU3Vic2NyaXB0aW9uIGZvciBsaXN0ICovXHJcbiAgICAgIC8vfSk7XHJcbiAgICB9KVxyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZXNpemVIZWlnaHRGbGFnJC5uZXh0KCEhIXRoaXMucmVzaXplSGVpZ2h0RmxhZyQudmFsdWUpLCA1MDApXHJcblxyXG4gICAgLyoqIEVORCBzZXRUaW1lb3V0Ki9cclxuICB9XHJcblxyXG4gIG9uUGFyYW1LaXRWYWx1ZUNoYW5nZShkYXRhOiBJQ29yZUNvbW1vblBhcmFtS2l0RXZlbnRFbWl0dGVyRGF0YSk6IHZvaWQge1xyXG4gICAgc3dpdGNoIChkYXRhLmZpZWxkKSB7XHJcbiAgICAgIGNhc2UgJ29yZ0lkcyc6XHJcbiAgICAgICAgY29uc3QgbmV3T3JnSW5PcGVyYXRvcnM6IElJbk9wZXJhdG9yW10gPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5pbk9wZXJhdG9ycyQudmFsdWUpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBpbk9yZ2ZpbHRlciA9IG5ld09yZ0luT3BlcmF0b3JzLmZpbHRlcihcclxuICAgICAgICAgICh4KSA9PiB4LmZpZWxkID09PSAnb3JnSWQnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaW5PcmdmaWx0ZXIubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBpbk9yZ2ZpbHRlclswXS52YWx1ZXMgPSBkYXRhLnZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaW5PcmdmaWx0ZXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICBuZXdPcmdJbk9wZXJhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgZmllbGQ6ICdvcmdJZCcsXHJcbiAgICAgICAgICAgIHZhbHVlczogZGF0YS52YWx1ZSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgYEluT3BlcmF0b3JzIGVycm9yIGZvciAke2RhdGEuZmllbGR9OiBmaWVsZCBuYW1lIGlzIG5vdCB1bmlxdWUgaW4gdGhlIGFycmF5YFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5pbk9wZXJhdG9ycyQubmV4dChuZXdPcmdJbk9wZXJhdG9ycykpXHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdnZW5lcmFsU2VhcmNoJzpcclxuICAgICAgICB0aGlzLmdlbmVyYWxTZWFyY2gkLm5leHQoZGF0YS52YWx1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2RhdGVGcm9tJzpcclxuICAgICAgICBsZXQgbmV3RnJvbUZpbHRlck9wZXJhdG9yczogSUZpbHRlck9wZXJhdG9yW10gPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXJPcGVyYXRvcnMkLnZhbHVlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyRnJvbSA9IG5ld0Zyb21GaWx0ZXJPcGVyYXRvcnMuZmlsdGVyKFxyXG4gICAgICAgICAgKHgpID0+XHJcbiAgICAgICAgICAgIHguZmllbGQgPT09IHRoaXMuZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3IgJiZcclxuICAgICAgICAgICAgeC5vcGVyYXRvciA9PT0gRW51bUZpbHRlck9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGZpbHRlckZyb20ubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBpZiAoISFkYXRhLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGZpbHRlckZyb21bMF0uZGF0ZVRpbWVWYWx1ZSA9IG5ldyBEYXRlKFxyXG4gICAgICAgICAgICAgIChkYXRhLnZhbHVlIGFzIERhdGUpLnNldEhvdXJzKDAsIDAsIDAsIDApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaWx0ZXJGcm9tWzBdLmRhdGVUaW1lVmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyRnJvbS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIGlmICghIWRhdGEudmFsdWUpIHtcclxuICAgICAgICAgICAgbmV3RnJvbUZpbHRlck9wZXJhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgICBmaWVsZDogdGhpcy5kYXRlUGVyaW9kQ29tcGFyaXNvbkZvcixcclxuICAgICAgICAgICAgICBvcGVyYXRvcjogRW51bUZpbHRlck9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTCxcclxuICAgICAgICAgICAgICBkYXRlVGltZVZhbHVlOiBuZXcgRGF0ZShcclxuICAgICAgICAgICAgICAgIChkYXRhLnZhbHVlIGFzIERhdGUpLnNldEhvdXJzKDAsIDAsIDAsIDApXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICBgRmlsdGVyT3BlcmF0b3JzIGVycm9yIGZvciAke2RhdGEuZmllbGR9OiBjb21iaW5hdGlvbiBvZiBmaWVsZCBuYW1lIGFuZCBvcGVyYXRvciBuYW1lIGlzIG5vdCB1bmlxdWUgaW4gdGhlIGFycmF5YFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGZyb20gbmV3RnJvbUZpbHRlck9wZXJhdG9ycywgcmVtb3ZlIHRob3NlIGl0ZW1zIHdpdGggaGF2ZSBkYXRlVGltZVZhbHVlID09PSBudWxsXHJcbiAgICAgICAgbmV3RnJvbUZpbHRlck9wZXJhdG9ycyA9IG5ld0Zyb21GaWx0ZXJPcGVyYXRvcnMuZmlsdGVyKHggPT4geC5kYXRlVGltZVZhbHVlICE9PSBudWxsKVxyXG5cclxuICAgICAgICB0aGlzLmZpbHRlck9wZXJhdG9ycyQubmV4dChuZXdGcm9tRmlsdGVyT3BlcmF0b3JzKTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2RhdGVUbyc6XHJcbiAgICAgICAgbGV0IG5ld1RvRmlsdGVyT3BlcmF0b3JzOiBJRmlsdGVyT3BlcmF0b3JbXSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlck9wZXJhdG9ycyQudmFsdWUpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBmaWx0ZXJUbyA9IG5ld1RvRmlsdGVyT3BlcmF0b3JzLmZpbHRlcihcclxuICAgICAgICAgICh4KSA9PlxyXG4gICAgICAgICAgICB4LmZpZWxkID09PSB0aGlzLmRhdGVQZXJpb2RDb21wYXJpc29uRm9yICYmXHJcbiAgICAgICAgICAgIHgub3BlcmF0b3IgPT09IEVudW1GaWx0ZXJPcGVyYXRvci5MRVNTX1RIQU5fT1JfRVFVQUxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChmaWx0ZXJUby5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIGlmICghIWRhdGEudmFsdWUpIHtcclxuICAgICAgICAgICAgZmlsdGVyVG9bMF0uZGF0ZVRpbWVWYWx1ZSA9IG5ldyBEYXRlKFxyXG4gICAgICAgICAgICAgIChkYXRhLnZhbHVlIGFzIERhdGUpLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZpbHRlclRvWzBdLmRhdGVUaW1lVmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyVG8ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICBpZiAoISFkYXRhLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIG5ld1RvRmlsdGVyT3BlcmF0b3JzLnB1c2goe1xyXG4gICAgICAgICAgICAgIGZpZWxkOiB0aGlzLmRhdGVQZXJpb2RDb21wYXJpc29uRm9yLFxyXG4gICAgICAgICAgICAgIG9wZXJhdG9yOiBFbnVtRmlsdGVyT3BlcmF0b3IuTEVTU19USEFOX09SX0VRVUFMLFxyXG4gICAgICAgICAgICAgIGRhdGVUaW1lVmFsdWU6IG5ldyBEYXRlKFxyXG4gICAgICAgICAgICAgICAgKGRhdGEudmFsdWUgYXMgRGF0ZSkuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgYEZpbHRlck9wZXJhdG9ycyBlcnJvciBmb3IgJHtkYXRhLmZpZWxkfTogY29tYmluYXRpb24gb2YgZmllbGQgbmFtZSBhbmQgb3BlcmF0b3IgbmFtZSBpcyBub3QgdW5pcXVlIGluIHRoZSBhcnJheWBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBmcm9tIG5ld0Zyb21GaWx0ZXJPcGVyYXRvcnMsIHJlbW92ZSB0aG9zZSBpdGVtcyB3aXRoIGhhdmUgZGF0ZVRpbWVWYWx1ZSA9PT0gbnVsbFxyXG4gICAgICAgIG5ld1RvRmlsdGVyT3BlcmF0b3JzID0gbmV3VG9GaWx0ZXJPcGVyYXRvcnMuZmlsdGVyKHggPT4geC5kYXRlVGltZVZhbHVlICE9PSBudWxsKVxyXG5cclxuICAgICAgICB0aGlzLmZpbHRlck9wZXJhdG9ycyQubmV4dChuZXdUb0ZpbHRlck9wZXJhdG9ycyk7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdzdGF0dXNJZHMnOlxyXG4gICAgICAgIGNvbnN0IG5ld0luT3BlcmF0b3JzOiBJSW5PcGVyYXRvcltdID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuaW5PcGVyYXRvcnMkLnZhbHVlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgaW5maWx0ZXIgPSBuZXdJbk9wZXJhdG9ycy5maWx0ZXIoXHJcbiAgICAgICAgICAoeCkgPT4geC5maWVsZCA9PT0gdGhpcy5zdGF0dXNJbmNsdXNpb25Gb3JcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChpbmZpbHRlci5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIGluZmlsdGVyWzBdLnZhbHVlcyA9IGRhdGEudmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpbmZpbHRlci5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIG5ld0luT3BlcmF0b3JzLnB1c2goe1xyXG4gICAgICAgICAgICBmaWVsZDogdGhpcy5zdGF0dXNJbmNsdXNpb25Gb3IsXHJcbiAgICAgICAgICAgIHZhbHVlczogZGF0YS52YWx1ZSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgYEluT3BlcmF0b3JzIGVycm9yIGZvciAke2RhdGEuZmllbGR9OiBmaWVsZCBuYW1lIGlzIG5vdCB1bmlxdWUgaW4gdGhlIGFycmF5YFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5pbk9wZXJhdG9ycyQubmV4dChuZXdJbk9wZXJhdG9ycykpXHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0VG9FeGNlbCgpOiB2b2lkIHtcclxuICAgIC8qIFBoxrDGoW5nIHBow6FwIHh14bqldCBDU1YgKi9cclxuICAgIC8qIEPhuqduIHRoYXkgYuG6sW5nIHh14bqldCBFWENFTCBi4bqxbmcgQmFja2VuZCAqL1xyXG4gICAgLypcclxuICAgIGNvbnN0IGNzdkRhdGE6IGFueVtdW10gPSBbXTtcclxuXHJcbiAgICBsZXQgcm93MTogYW55W10gPSBbXTtcclxuICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKHgpID0+IHguZmllbGQgIT0gJ2lkJyk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLmNvbHVtbnMpXHJcbiAgICB0aGlzLmNvbHVtbnMubWFwKCh4KSA9PiB7XHJcbiAgICAgIHJvdzEucHVzaCh0aGlzLm1scy50cmFucyh4LmNhcHRpb24pKTtcclxuICAgIH0pO1xyXG4gICAgY3N2RGF0YS5wdXNoKHJvdzEpO1xyXG5cclxuICAgIHRoaXMubGlzdC5tYXAoKHJvdywgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3QgY3VycmVudFJvdzogYW55W10gPSBbXTtcclxuICAgICAgdGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi5maWVsZCAhPSAnaWQnKSB7XHJcbiAgICAgICAgICBsZXQgY3VycmVudENlbGwgPSByb3dbY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudENlbGw/LnJlcGxhY2VBbGwgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgY3VycmVudENlbGwgPSBjdXJyZW50Q2VsbC5yZXBsYWNlQWxsKCcsJywgJzsnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGN1cnJlbnRSb3cucHVzaChjdXJyZW50Q2VsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNzdkRhdGEucHVzaChjdXJyZW50Um93KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBjc3ZDb250ZW50ID0gY3N2RGF0YS5tYXAoKGUpID0+IGUuam9pbignLCcpKS5qb2luKCdcXG4nKTtcclxuXHJcbiAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGxpbmsuc2V0QXR0cmlidXRlKFxyXG4gICAgICAnaHJlZicsXHJcbiAgICAgICdkYXRhOnRleHQvY3N2O2NoYXJzZXQ9dXRmLTgsJUVGJUJCJUJGJyArIGVuY29kZVVSSShjc3ZDb250ZW50KVxyXG4gICAgKTtcclxuICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsICdFeHBvcnRFeGVsLmNzdicpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgIGxpbmsuY2xpY2soKTtcclxuICAgICovXHJcbiAgICAvKlxyXG4gICAgQuG6r3QgxJHhuqd1IHh14bqldCBFeGNlbCBi4bqxbmcgQmFja2VuZFxyXG4gICAgKi9cclxuXHJcbiAgICAvLyBUaHUgdGjhuq1wIG5oacOqbiBsaeG7h3VcclxuXHJcbiAgICBpZiAoIXRoaXMuaW5uZXJCb2R5Q291bnQkLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8odGhpcy5tbHMudHJhbnMoJ1hMU1hfTk9fUkVTVUxUX1RPX0VYUE9SVCcpLCBhbGVydE9wdGlvbnMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdXJsID0gdGhpcy5hcGlEZWZpbml0aW9uLnF1ZXJ5TGlzdFJlbGF0aXZlUGF0aDtcclxuICAgIGNvbnN0IHggPSB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlOyAvLyBD4bqnbiBsb+G6oWkgYuG7jyBwYWdpbmcga2jhu49pIMSR4buRaSB0xrDhu6NuZyBuw6B5XHJcblxyXG4gICAgeC5wYWdpbmF0aW9uID0ge1xyXG4gICAgICBza2lwOiAwLFxyXG4gICAgICB0YWtlOiB0aGlzLmlubmVyQm9keUNvdW50JC52YWx1ZVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBhcGlTdHJlYW0kOiBPYnNlcnZhYmxlPGFueT47XHJcbiAgICAvLyBO4bq/dSBjw7MgZMOybmcgZOG7ryBsaeG7h3UgY2hlY2tlZCB0aMOsIGNo4buJIHh14bqldCBjw6FjIGTDsm5nIG7DoHlcclxuICAgIGlmICghIXRoaXMuc2VsZWN0ZWREYXRhLmxlbmd0aCkge1xyXG4gICAgICBhcGlTdHJlYW0kID0gbmV3IE9ic2VydmFibGU8YW55PihvYnNlcnZlciA9PiB7XHJcbiAgICAgICAgb2JzZXJ2ZXIubmV4dCh7XHJcbiAgICAgICAgICBvazogdHJ1ZSxcclxuICAgICAgICAgIHN0YXR1czogMjAwLFxyXG4gICAgICAgICAgYm9keToge1xyXG4gICAgICAgICAgICBzdGF0dXNDb2RlOiAyMDAsXHJcbiAgICAgICAgICAgIGlubmVyQm9keToge1xyXG4gICAgICAgICAgICAgIGxpc3Q6IHRoaXMuc2VsZWN0ZWREYXRhXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFRyw6FpIGzhuqFpLCB4deG6pXQgMTAwJSBzYXUga2hpIMSRw6MgbOG7jWMgKHRvw6BuIGLhu5kgY8OhYyB0cmFuZylcclxuICAgICAgYXBpU3RyZWFtJCA9IHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5xdWVyeUxpc3QoeCwgdXJsKTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIEl0J3MgdGltZSB0byBzdWJzY3JpYmUgYXBpU3RyZWFtJFxyXG4gICAgdGhpcy5wcmVmZXRjaExvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIGFwaVN0cmVhbSQuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgIHRoaXMucHJlZmV0Y2hMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgLy90aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGAke2JvZHkuaW5uZXJCb2R5LmNvdW50fSByb3dzIG9mIGRhdGEgZmV0Y2hlZC4gSXQgaXMgdGltZSB0byBkbyB3aXRoIGJhY2tlbmQgZXhjZWwgZXhwb3J0aW5nYCwgYWxlcnRPcHRpb25zKVxyXG5cclxuICAgICAgICAgICAgY29uc3QgYXBpUG9pbnQgPSBhcGkuWExTWF9FWFBPUlRfQ09SRV9QQUdFX0xJU1RfVE9fRVhDRUw7XHJcbiAgICAgICAgICAgIGNvbnN0IGZsYXRDb2x1bW5zOiBJQ29yZVRhYmxlRmxhdENvbHVtbkl0ZW1bXSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb2x1bW5zLmZpbHRlcih4ID0+ICF4LmhpZGRlbikubWFwKGMgPT4ge1xyXG4gICAgICAgICAgICAgIGZsYXRDb2x1bW5zLnB1c2goXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIGNhcHRpb246IGMuY2FwdGlvbixcclxuICAgICAgICAgICAgICAgICAgZmllbGQ6IGMuZmllbGQsXHJcbiAgICAgICAgICAgICAgICAgIHR5cGU6IGMudHlwZSxcclxuICAgICAgICAgICAgICAgICAgcGlwZTogYy5waXBlLFxyXG4gICAgICAgICAgICAgICAgICBhbGlnbjogYy5hbGlnbixcclxuICAgICAgICAgICAgICAgICAgd2lkdGg6IGMud2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgIGhpZGRlbjogYy5oaWRkZW5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICBjb25zdCBmbGF0RGF0YTogYW55W10gPSBbXTtcclxuICAgICAgICAgICAgY29uc3Qga2V5czogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICAgICAgZmxhdENvbHVtbnMubWFwKGMgPT4ga2V5cy5wdXNoKGMuZmllbGQpKTtcclxuICAgICAgICAgICAgYm9keS5pbm5lckJvZHkubGlzdC5tYXAoKHJvdzogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZTogYW55ID0ge307XHJcbiAgICAgICAgICAgICAga2V5cy5tYXAoayA9PiB7XHJcbiAgICAgICAgICAgICAgICBlW2tdID0gcm93W2tdO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgZmxhdERhdGEucHVzaChlKTtcclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHtcclxuICAgICAgICAgICAgICBjb2x1bW5zOiBmbGF0Q29sdW1ucyxcclxuICAgICAgICAgICAgICBkYXRhOiBmbGF0RGF0YVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5qc29uU2VydmljZS5zdHJpbmdpZnkob2JqKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubG9uZ0FwaVJ1bm5pbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5leHBvcnRDb3JlUGFnZUxpc3RHcmlkVG9FeGNlbFN1YnNjcmlwdGlvbiA9IHRoaXMuYXBwU2VydmljZS5ibG9iUG9zdChhcGlQb2ludCwgcGF5bG9hZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmxvbmdBcGlSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmJvZHkuc3RhdHVzQ29kZSA9PT0gNDAwKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgICAgbGV0IGRvd25sb2FkTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICAgIGRvd25sb2FkTGluay5ocmVmID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW3Jlc3BvbnNlLmJvZHldKSlcclxuICAgICAgICAgICAgICBkb3dubG9hZExpbmsuc2V0QXR0cmlidXRlKFwiZG93bmxvYWRcIiwgdGhpcy5tbHMudHJhbnModGhpcy50aXRsZSkgKyBcIi54bHN4XCIpO1xyXG4gICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG93bmxvYWRMaW5rKTtcclxuICAgICAgICAgICAgICBkb3dubG9hZExpbmsuY2xpY2soKTtcclxuICAgICAgICAgICAgfSlcclxuXHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIClcclxuXHJcbiAgfVxyXG5cclxuICBvbkNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2soZTogSUNvcmVCdXR0b25WTlMpOiB2b2lkIHtcclxuICAgIHRoaXMuY29yZVBhZ2VIZWFkZXJCdXR0b25DbGljay5lbWl0KGUpO1xyXG5cclxuICAgIHN3aXRjaCAoZS5jb2RlKSB7XHJcblxyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRklMVEVSOlxyXG4gICAgICAgIC8vdGhpcy5maWx0ZXJLaXRTZXJ2aWNlLm9wZW4kLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5jb3JlRmlsdGVySHViU2VydmljZS5vcGVuJC5uZXh0KCF0aGlzLmNvcmVGaWx0ZXJIdWJTZXJ2aWNlLm9wZW4kLnZhbHVlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NSRUFURTpcclxuXHJcbiAgICAgICAgaWYgKCEhIXRoaXMuc2VsZlJlc29sdmVDb3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrKSB7XHJcblxyXG4gICAgICAgICAgdGhpcy5jb3JlUGFnZUVkaXRTZXJ2aWNlLmZyb21VcmwgPSB0aGlzLnJvdXRlci51cmw7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMubm9ybWFsTW9kZSkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgW2J0b2EoJzAnKSwgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfV0sXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZS5wYXJlbnQsXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBvdXRsZXRzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZVBhZ2VMaXN0QXV4OiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICBidG9hKCcwJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICB7IGxpc3RJbnN0YW5jZTogdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciB9LFxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRURJVDpcclxuICAgICAgICBpZiAoISEhdGhpcy5zZWxmUmVzb2x2ZUNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2spIHtcclxuXHJcbiAgICAgICAgICB0aGlzLmNvcmVQYWdlRWRpdFNlcnZpY2UuZnJvbVVybCA9IHRoaXMucm91dGVyLnVybDtcclxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IodGhpcy5tbHMudHJhbnMoJ1NFTEVDVF9PTkxZX09ORV9SRUNPUkRfVE9fRURJVCcpLCBhbGVydE9wdGlvbnMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCEhdGhpcy5ub3JtYWxNb2RlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgICAgIFtidG9hKCcnICsgdGhpcy5zZWxlY3RlZElkc1swXSksIHsgbGlzdEluc3RhbmNlOiB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyIH1dLFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZS5wYXJlbnQsXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgb3V0bGV0czoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JlUGFnZUxpc3RBdXg6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBidG9hKCcnICsgdGhpcy5zZWxlY3RlZElkc1swXSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKHRoaXMubWxzLnRyYW5zKCdOT19TRUxFQ1RFRF9JRF9UT19FRElUJyksIGFsZXJ0T3B0aW9ucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9BQ1RJVkFURTpcclxuICAgICAgICBpZiAoISF0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWxlY3RlZElkc1swXSAhPT0gJ251bWJlcidcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKFxyXG4gICAgICAgICAgICAgICAgRW51bVRyYW5zbGF0ZUtleS5DT1JFX1BBR0VfTElTVF9BQ1RJVkVfSURTX01FVEhPRF9TVVBPUlRTX09OTFlfTlVNQkVSX1RZUEVcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ05PX1NFTEVDVEVEX0lEX1RPX0FDVElWQVRFJyksXHJcbiAgICAgICAgICAgIGFsZXJ0T3B0aW9uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGxpc3RJZHNUb0FjdGl2ZTogYW55W10gPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YS5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgbGlzdElkc1RvQWN0aXZlLnB1c2godGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmdldFVuaXF1ZVN0cmluZyh4LCB0aGlzLmNvbmZpcm1hdGlvbkNvbHVtbnMpKVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb24gPSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0FDVElWQVRFXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNyZWF0ZU5ldyhcclxuICAgICAgICAgIEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9DT05GSVJNQVRJT04sXHJcbiAgICAgICAgICBFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfQ09ORklSTV9ESUFMT0dfQlVUVE9OX0NPTkZJUk0sXHJcbiAgICAgICAgICBFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfQ09ORklSTV9ESUFMT0dfQlVUVE9OX0NBTkNFTCxcclxuICAgICAgICAgIGZhbHNlLFxyXG4gICAgICAgICAgRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0RJQUxPR19TRVJWSUNFX0FSRV9ZT1VfU1VSRV9UT19BQ1RJVkUsXHJcbiAgICAgICAgICBsaXN0SWRzVG9BY3RpdmVcclxuICAgICAgICApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9JTkFDVElWQVRFOlxyXG4gICAgICAgIGlmICghIXRoaXMuc2VsZWN0ZWRJZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNlbGVjdGVkSWRzWzBdICE9PSAnbnVtYmVyJ1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8oXHJcbiAgICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoXHJcbiAgICAgICAgICAgICAgICBFbnVtVHJhbnNsYXRlS2V5LkNPUkVfUEFHRV9MSVNUX0FDVElWRV9JRFNfTUVUSE9EX1NVUE9SVFNfT05MWV9OVU1CRVJfVFlQRVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICB0aGlzLm1scy50cmFucygnTk9fU0VMRUNURURfSURfVE9fQUNUSVZBVEUnKSxcclxuICAgICAgICAgICAgYWxlcnRPcHRpb25zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbGlzdElkc1RvSW5hY3RpdmU6IGFueVtdID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgIGxpc3RJZHNUb0luYWN0aXZlLnB1c2godGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmdldFVuaXF1ZVN0cmluZyh4LCB0aGlzLmNvbmZpcm1hdGlvbkNvbHVtbnMpKVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb24gPSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0lOQUNUSVZBVEVcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY3JlYXRlTmV3KFxyXG4gICAgICAgICAgRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0RJQUxPR19TRVJWSUNFX0NPTkZJUk1BVElPTixcclxuICAgICAgICAgIEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fQ09ORklSTSxcclxuICAgICAgICAgIEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fQ0FOQ0VMLFxyXG4gICAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgICBFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfRElBTE9HX1NFUlZJQ0VfQVJFX1lPVV9TVVJFX1RPX0lOQUNUSVZFLFxyXG4gICAgICAgICAgbGlzdElkc1RvSW5hY3RpdmVcclxuICAgICAgICApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEU6XHJcbiAgICAgICAgaWYgKCEhdGhpcy5zZWxlY3RlZElkcy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2VsZWN0ZWRJZHNbMF0gIT09ICdudW1iZXInICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNlbGVjdGVkSWRzWzBdICE9PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8oXHJcbiAgICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoXHJcbiAgICAgICAgICAgICAgICAnQ09SRV9QQUdFX0xJU1RfREVMRVRFX0lEU19NRVRIT0RfU1VQT1JUU19PTkxZX05VTUJFUl9BTkRfU1RSSU5HX1RZUEVTJ1xyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICB0aGlzLm1scy50cmFucygnTk9fU0VMRUNURURfSURfVE9fREVMRVRFJyksXHJcbiAgICAgICAgICAgIGFsZXJ0T3B0aW9uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCEhdGhpcy5kZWxldGVWYWxpZGF0ZUZuKSB7XHJcblxyXG4gICAgICAgICAgY29uc3QgdmFsaWRhdGVkOiBib29sZWFuID0gdGhpcy5kZWxldGVWYWxpZGF0ZUZuKHRoaXMuc2VsZWN0ZWREYXRhKTtcclxuICAgICAgICAgIGlmICghISF2YWxpZGF0ZWQpIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVuZGluZ0FjdGlvbiA9IEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRpdGxlJC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9DT05GSVJNQVRJT04pXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLm9rQnV0dG9uVGV4dCQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfQ09ORklSTV9ESUFMT0dfQlVUVE9OX0NPTkZJUk0pXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNhbmNlbEJ1dHRvblRleHQkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0NPTkZJUk1fRElBTE9HX0JVVFRPTl9DQU5DRUwpXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dDYW5jZWxPbmx5JC5uZXh0KGZhbHNlKTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJvZHkkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0RJQUxPR19TRVJWSUNFX0FSRV9ZT1VfU1VSRV9UT19ERUxFVEUpO1xyXG4gICAgICAgIGxldCBsaXN0RGVsZXRlSWRzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpcm1hdGlvbkNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKHggPT4gISF4LnNob3dGb3JDb25maXJtYXRpb24pO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICBsaXN0RGVsZXRlSWRzLnB1c2godGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmdldFVuaXF1ZVN0cmluZyh4LCBjb25maXJtYXRpb25Db2x1bW5zKSlcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZURpYWxvZ0luZm9ybWF0aW9uTGluZXMpIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5pbmZvcm1hdGlvbkxpbmVzJC5uZXh0KGxpc3REZWxldGVJZHMpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5pbmZvcm1hdGlvbkxpbmVzJC5uZXh0KFtdKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dDb25maXJtRGlhbG9nJC5uZXh0KHRydWUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VOQVBQUk9WRTpcclxuICAgICAgICBpZiAoISF0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWxlY3RlZElkc1swXSAhPT0gJ251bWJlcicgJiZcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2VsZWN0ZWRJZHNbMF0gIT09ICdzdHJpbmcnXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbyhcclxuICAgICAgICAgICAgICB0aGlzLm1scy50cmFucyhcclxuICAgICAgICAgICAgICAgICdDT1JFX1BBR0VfTElTVF9ERUxFVEVfSURTX01FVEhPRF9TVVBPUlRTX09OTFlfTlVNQkVSX0FORF9TVFJJTkdfVFlQRVMnXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKCdOT19TRUxFQ1RFRF9JRF9UT19ERUxFVEUnKSxcclxuICAgICAgICAgICAgYWxlcnRPcHRpb25zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoISF0aGlzLmRlbGV0ZVZhbGlkYXRlRm4pIHtcclxuXHJcbiAgICAgICAgICBjb25zdCB2YWxpZGF0ZWQ6IGJvb2xlYW4gPSB0aGlzLmRlbGV0ZVZhbGlkYXRlRm4odGhpcy5zZWxlY3RlZERhdGEpO1xyXG4gICAgICAgICAgaWYgKCEhIXZhbGlkYXRlZCkgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wZW5kaW5nQWN0aW9uID0gRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VTkFQUFJPVkVcclxuICAgICAgICAvLyB0aGlzLmRpYWxvZ1NlcnZpY2UudGl0bGUkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0RJQUxPR19TRVJWSUNFX0NPTkZJUk1BVElPTilcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub2tCdXR0b25UZXh0JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fQ09ORklSTSlcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2FuY2VsQnV0dG9uVGV4dCQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfQ09ORklSTV9ESUFMT0dfQlVUVE9OX0NBTkNFTClcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0NhbmNlbE9ubHkkLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5idXN5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYm9keSQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfRElBTE9HX1NFUlZJQ0VfQVJFX1lPVV9VTkFQUFJPVkVfSU5QVVRfUkVBU09OKTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd2luZ1VwJC5uZXh0KHRydWUpXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dDb25maXJtRGlhbG9nJC5uZXh0KHRydWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQVBQUk9WRTpcclxuICAgICAgICBpZiAoISF0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWxlY3RlZElkc1swXSAhPT0gJ251bWJlcidcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKFxyXG4gICAgICAgICAgICAgICAgRW51bVRyYW5zbGF0ZUtleS5DT1JFX1BBR0VfTElTVF9BQ1RJVkVfSURTX01FVEhPRF9TVVBPUlRTX09OTFlfTlVNQkVSX1RZUEVcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ05PX1NFTEVDVEVEX0lEX1RPX0FQUFJPVkUnKSxcclxuICAgICAgICAgICAgYWxlcnRPcHRpb25zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlcXVlc3RBcHByb3ZlOiBJVG9nZ2xlQXBwcm92ZUlkc1JlcXVlc3QgPSB7XHJcbiAgICAgICAgICB2YWx1ZVRvQmluZDogdHJ1ZSxcclxuICAgICAgICAgIGlkczogdGhpcy5zZWxlY3RlZElkcyBhcyBudW1iZXJbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGNvbmZpcm1BcHByb3ZlID0gd2luZG93LmNvbmZpcm0oXHJcbiAgICAgICAgICB0aGlzLm1scy50cmFucygnY29tbW9uLmNvbmZpcm0uYXBwcm92ZS5wcmVmaXgnKSArXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkSWRzKSArXHJcbiAgICAgICAgICAnPydcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChjb25maXJtQXBwcm92ZSkge1xyXG4gICAgICAgICAgaWYgKCEhdGhpcy5jcnVkLnRvZ2dsZUFwcHJvdmVJZHMpIHtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLnBvc3QodGhpcy5jcnVkLnRvZ2dsZUFwcHJvdmVJZHMsIHJlcXVlc3RBcHByb3ZlKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwIHx8IHguYm9keS5zdGF0dXNDb2RlID09ICcyMDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQubmV4dChcclxuICAgICAgICAgICAgICAgICAgICAgICAgISEhdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFwcHJvdmUuaWRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uud2Fybih0aGlzLm1scy50cmFucyhFbnVtVHJhbnNsYXRlS2V5Lk5PX0FQSV9FTkRfUE9JTlRfUFJPVklERURfRk9SX0FDVElWQVRJT04pLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1BFTkRJTkdfQVBQUk9WRTpcclxuICAgICAgICBpZiAoISF0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWxlY3RlZElkc1swXSAhPT0gJ251bWJlcidcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKFxyXG4gICAgICAgICAgICAgICAgRW51bVRyYW5zbGF0ZUtleS5DT1JFX1BBR0VfTElTVF9BQ1RJVkVfSURTX01FVEhPRF9TVVBPUlRTX09OTFlfTlVNQkVSX1RZUEVcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ05PX1NFTEVDVEVEX0lEX1RPX1BFTkRJTkdfQVBQUk9WRScpLFxyXG4gICAgICAgICAgICBhbGVydE9wdGlvbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVxdWVzdFBlbmRpbmdBcHByb3ZlOiBJVG9nZ2xlQXBwcm92ZUlkc1JlcXVlc3QgPSB7XHJcbiAgICAgICAgICB2YWx1ZVRvQmluZDogZmFsc2UsXHJcbiAgICAgICAgICBpZHM6IHRoaXMuc2VsZWN0ZWRJZHMgYXMgbnVtYmVyW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBjb25maXJtUGVuZGluZ0FwcHJvdmUgPSB3aW5kb3cuY29uZmlybShcclxuICAgICAgICAgIHRoaXMubWxzLnRyYW5zKCdjb21tb24uY29uZmlybS5wZW5kaW5nLmFwcHJvdmUucHJlZml4JykgK1xyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZElkcykgK1xyXG4gICAgICAgICAgJz8nXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoY29uZmlybVBlbmRpbmdBcHByb3ZlKSB7XHJcbiAgICAgICAgICBpZiAoISF0aGlzLmNydWQudG9nZ2xlQXBwcm92ZUlkcykge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UucG9zdCh0aGlzLmNydWQudG9nZ2xlQXBwcm92ZUlkcywgcmVxdWVzdFBlbmRpbmdBcHByb3ZlKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwIHx8IHguYm9keS5zdGF0dXNDb2RlID09ICcyMDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQubmV4dChcclxuICAgICAgICAgICAgICAgICAgICAgICAgISEhdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBlbmRpbmdBcHByb3ZlLmlkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLndhcm4odGhpcy5tbHMudHJhbnMoRW51bVRyYW5zbGF0ZUtleS5OT19BUElfRU5EX1BPSU5UX1BST1ZJREVEX0ZPUl9BQ1RJVkFUSU9OKSwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9FWFBPUlRFWEVMOlxyXG5cclxuICAgICAgICB0aGlzLmV4cG9ydFRvRXhjZWwoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RPV05MT0FEOlxyXG4gICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiSEVBREVSX0RPV05MT0FEIGNsaWNrZWRcIiwgbm93KTtcclxuICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgaW1wb3J0LXNhbGFyeS1iYWNrZGF0ZWApISA8IDBcclxuICAgICAgICAgICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYHNhbGFyeS1pbXBvcnRgKSEgPCAwXHJcbiAgICAgICAgICAmJiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGBpbXBvcnQtYWRkYCkhIDwgMFxyXG4gICAgICAgICAgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgaW1wb3J0LW1vbnRobHktdGF4YCkhIDwgMFxyXG4gICAgICAgICAgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgc2hpZnRzb3J0YCkhIDwgMFxyXG4gICAgICAgICAgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgZGVjbGFyZXN1bnBlcmApISA8IDBcclxuICAgICAgICAgICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYHJlZ2lzdGVybGVhdmVgKSEgPCAwXHJcbiAgICAgICAgICAmJiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGBvdmVydGltZWApISA8IDBcclxuICAgICAgICAgICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYGltcG9ydC10YXgtYW5udWFsYCkhIDwgMFxyXG4gICAgICAgICAgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgY21zL3Byb2ZpbGUvbGlzdC9ldmFsdWF0ZWApISA8IDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuY2xpY2tHZW5lcmF0ZVRlbXBsYXRlJC5uZXh0KG5vdyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVVBMT0FEOlxyXG4gICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGBjbXMvcHJvZmlsZS9saXN0L2V2YWx1YXRlYCkgPj0gMCkge1xyXG4gICAgICAgICAgdGhpcy5jb3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrLmVtaXQoZSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5icm93c2VGaWxlSW5wdXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9MT0NLOlxyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVU5MT0NLOlxyXG4gICAgICAgIHRoaXMuY29yZVBhZ2VIZWFkZXJCdXR0b25DbGljay5lbWl0KGUpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY29uc29sZS5sb2coZS5jb2RlKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RlZElkc0NoYW5nZShlOiBzdHJpbmdbXSB8IG51bWJlcltdKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSWRzID0gZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJZHNDaGFuZ2UuZW1pdChlKTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0ZWREYXRhQ2hhbmdlKGU6IGFueVtdKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IGU7XHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0YUNoYW5nZS5lbWl0KGUpO1xyXG4gICAgaWYgKCEhZS5sZW5ndGgpIHtcclxuICAgICAgaWYgKGUubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIHRoaXMuYnV0dG9uR3JvdXBTdGF0dXM/Lm11c3RCZUhpZGRlbiQubmV4dChbXHJcbiAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0VESVQsXHJcbiAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0xJUVVJREFURV9DT05UUkFDVFxyXG4gICAgICAgIF0pXHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIGlmICghIWVbMF0uaXNMb2NrKSB7XHJcbiAgICAgICAgICB0aGlzLmJ1dHRvbkdyb3VwU3RhdHVzPy5tdXN0QmVIaWRkZW4kLm5leHQoW0VudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfTE9DS10pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYnV0dG9uR3JvdXBTdGF0dXM/Lm11c3RCZUhpZGRlbiQubmV4dChbRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VTkxPQ0tdKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYnV0dG9uR3JvdXBTdGF0dXM/Lm11c3RCZUhpZGRlbiQubmV4dChFTVBUWV9TRUxFQ1RJT05fSElEREVOX0JVVFRPTilcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBvbkNvbHVtbkNhcHRpb25DbGljayhlOiBJQ29yZVRhYmxlQ29sdW1uSXRlbSkge1xyXG4gICAgY29uc3QgbmV3U29ydDogSVNvcnRJdGVtW10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuc29ydCQudmFsdWUpKTtcclxuICAgIG5ld1NvcnQubWFwKChjKSA9PiB7XHJcbiAgICAgIGlmIChjLmZpZWxkID09PSBlLmZpZWxkKSB7XHJcbiAgICAgICAgaWYgKGMuc29ydERpcmVjdGlvbiA9PT0gRW51bVNvcnREaXJlY3Rpb24uTk9ORSkge1xyXG4gICAgICAgICAgYy5zb3J0RGlyZWN0aW9uID0gRW51bVNvcnREaXJlY3Rpb24uQVNDO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYy5zb3J0RGlyZWN0aW9uID09PSBFbnVtU29ydERpcmVjdGlvbi5BU0MpIHtcclxuICAgICAgICAgIGMuc29ydERpcmVjdGlvbiA9IEVudW1Tb3J0RGlyZWN0aW9uLkRFU0M7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGMuc29ydERpcmVjdGlvbiA9IEVudW1Tb3J0RGlyZWN0aW9uLk5PTkU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGMuc29ydERpcmVjdGlvbiA9IEVudW1Tb3J0RGlyZWN0aW9uLk5PTkU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5zb3J0JC5uZXh0KG5ld1NvcnQpO1xyXG4gIH1cclxuXHJcbiAgaW5wdXRGaWxlID0gYXN5bmMgKGU6IGFueSkgPT4ge1xyXG4gICAgY29uc29sZS5sb2coXCJpbnB1dEZpbGUgZVwiLCBlKVxyXG4gICAgY29uc3QgZmlsZXMgPSBlLnRhcmdldC5maWxlcztcclxuICAgIGNvbnN0IGZpbGUgPSBmaWxlc1swXTtcclxuICAgIGxldCBmaWxlTmFtZSA9IGZpbGUubmFtZTtcclxuXHJcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2ZpbGVdKTtcclxuXHJcbiAgICBibG9iVG9CYXNlNjQoYmxvYikudGhlbigoYmFzZTY0OiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5vbklucHV0RmlsZUJhc2U2NERhdGFSZWFkeS5lbWl0KGJhc2U2NCk7XHJcblxyXG4gICAgICAvLyBO4bq/dSB0aGFtIHPhu5EgZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3QgxJHGsOG7o2MgdHJ1eeG7gW4gdsOgb1xyXG4gICAgICAvLyBJbXBvcnQgc+G6vSB0aOG7sWMgdGhpIHRoZW8gcXV5IHRyw6xuaCBDb3JlXHJcbiAgICAgIGlmICh0aGlzLmdlbmVyYXRlVGVtcGxhdGVSZXF1ZXN0KSB7XHJcbiAgICAgICAgY29uc3QgaW1wb3J0WGxzeFRvRGJSZXF1ZXN0OiBJSW1wb3J0WGxzeFRvRGJSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgZmlsZU5hbWUsXHJcbiAgICAgICAgICBleENvZGU6IHRoaXMuZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3QuZXhDb2RlLFxyXG4gICAgICAgICAgYmFzZTY0U3RyaW5nOiBiYXNlNjRcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb25nQXBpUnVubmluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW1wb3J0WGxzeFRvRGIoaW1wb3J0WGxzeFRvRGJSZXF1ZXN0KS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSBOdW1iZXIodGhpcy5sb25nVGFza1NlcnZpY2UuZGF0YSQudmFsdWU/Lm91dGVyTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHRoaXMubG9uZ0FwaVJ1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgIGxldCBkb3dubG9hZExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgICAgICAgICAgICBkb3dubG9hZExpbmsuaHJlZiA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFt4LmJvZHldKSlcclxuICAgICAgICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnNwbGl0KFwiLnhsc3hcIilbMF0gKyBcIl9wcm9jZXNzZWRfXCIgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIFwiLnhsc3hcIjtcclxuICAgICAgICAgICAgICBkb3dubG9hZExpbmsuc2V0QXR0cmlidXRlKFwiZG93bmxvYWRcIiwgZmlsZU5hbWUpO1xyXG4gICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG93bmxvYWRMaW5rKTtcclxuICAgICAgICAgICAgICBkb3dubG9hZExpbmsuY2xpY2soKTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgaW1wb3J0UHJldmlld091dGVyUGFyYW06IElYbHN4SW1wb3J0T2JqZWN0ID0ge1xyXG4gICAgICAgICAgICAgICAgeGxzeFNpZDogdGhpcy5hdXRoU2VydmljZS5kYXRhJC52YWx1ZT8uaWQhLFxyXG4gICAgICAgICAgICAgICAgeGxzeEV4Q29kZTogdGhpcy5nZW5lcmF0ZVRlbXBsYXRlUmVxdWVzdC5leENvZGUsXHJcbiAgICAgICAgICAgICAgICB4bHN4U2Vzc2lvbjogc2Vzc2lvblxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKCEhIXRoaXMuaW1wb3J0UHJldmlld1BhdGgpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXCInaW1wb3J0UHJldmlld1BhdGgnIGlucHV0IHByb3BlcnR5IHdhcyBtaXNzaW5nIVwiLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgb3V0bGV0czoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JlUGFnZUxpc3RBdXg6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmltcG9ydFByZXZpZXdQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGlzdEluc3RhbmNlOiB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLCBzdGF0ZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbixcclxuICAgICAgICAgICAgICAgICAgICAgIGltcG9ydFByZXZpZXdPdXRlclBhcmFtXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG5cclxuXHJcbiAgfTtcclxuXHJcbiAgYnJvd3NlRmlsZUlucHV0KCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coXCJicm93c2VGaWxlSW5wdXRcIilcclxuICAgIHRoaXMuZmlsZUltcG9ydC5uYXRpdmVFbGVtZW50LnZhbHVlID0gbnVsbDtcclxuICAgIHRoaXMuZmlsZUltcG9ydC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICBvblByb2dyZXNzV2luZG93Q2xvc2UoXzogYW55KSB7XHJcbiAgICB0aGlzLmxvbmdBcGlSdW5uaW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLmV4cG9ydENvcmVQYWdlTGlzdEdyaWRUb0V4Y2VsU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpXHJcbiAgfVxyXG5cclxuICBvbkNvcmVUYWJzSGVhZGVyQ2xpY2soZTogYW55KTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhcIm9uQ29yZVRhYnNIZWFkZXJDbGlja1wiLCBlKTtcclxuICAgIGNvbnN0IHRhYiA9IHRoaXMuc3RhdHVzVGFicy5nZXQoZS5pbmRleCk7XHJcblxyXG4gICAgbGV0IG5ld0ZpbHRlck9wZXJhdG9yczogSUZpbHRlck9wZXJhdG9yW10gPSBKU09OLnBhcnNlKFxyXG4gICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlck9wZXJhdG9ycyQudmFsdWUpXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBuZXdPdXRlclBhcmFtOiBhbnk7XHJcblxyXG4gICAgaWYgKHRhYj8uaWQgPT09IDApIHsgLy8gQWxsXHJcblxyXG4gICAgICAvLyBzaG93IHN0YXR1cyBjb2x1bW5cclxuICAgICAgY29uc3QgdHJ5RmluZCA9IHRoaXMuY29sdW1ucy5maWx0ZXIoeCA9PiB4LmZpZWxkID09PSB0aGlzLmdyaWRTdGF0dXNDb2x1bW4pO1xyXG4gICAgICBpZiAodHJ5RmluZC5sZW5ndGgpIHtcclxuICAgICAgICB0cnlGaW5kWzBdLmhpZGRlbiA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29sdW1ucyA9IFsuLi50aGlzLmNvbHVtbnNdO1xyXG5cclxuICAgICAgbmV3T3V0ZXJQYXJhbSA9IHRoaXMub3V0ZXJQYXJhbSQudmFsdWU7XHJcblxyXG4gICAgICAvL0RlbGV0aW5nIGEgcHJvcGVydHkgZnJvbSBhbiBvYmplY3QgY2FuIGNhdXNlIGlzc3VlcyB3aGVuIG1lcmdpbmcgb2JqZWN0cyBsYXRlclxyXG4gICAgICAvL2RlbGV0ZSBuZXdPdXRlclBhcmFtW3RoaXMuY2FtZWxDYXNlRHRvU3RhdHVzSWRGaWVsZF07XHJcblxyXG4gICAgICAvL1NldHRpbmcgdGhlIFByb3BlcnR5IHRvIG51bGw6XHJcbiAgICAgIG5ld091dGVyUGFyYW1bdGhpcy5jYW1lbENhc2VEdG9TdGF0dXNJZEZpZWxkXSA9IG51bGw7XHJcblxyXG4gICAgICBuZXdGaWx0ZXJPcGVyYXRvcnMgPSBuZXdGaWx0ZXJPcGVyYXRvcnMuZmlsdGVyKHggPT4geC5maWVsZCAhPT0gdGhpcy5jYW1lbENhc2VEdG9TdGF0dXNJZEZpZWxkKVxyXG5cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAvLyBoaWRlIHN0YXR1cyBjb2x1bW5cclxuICAgICAgY29uc3QgdHJ5RmluZCA9IHRoaXMuY29sdW1ucy5maWx0ZXIoeCA9PiB4LmZpZWxkID09PSB0aGlzLmdyaWRTdGF0dXNDb2x1bW4pO1xyXG4gICAgICBpZiAodHJ5RmluZC5sZW5ndGgpIHtcclxuICAgICAgICB0cnlGaW5kWzBdLmhpZGRlbiA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb2x1bW5zID0gWy4uLnRoaXMuY29sdW1uc107XHJcblxyXG4gICAgICBpZiAodGFiPy5pZCA9PT0gLTEpIHsgLy8gVW5kZWZpbmVkXHJcbiAgICAgICAgbmV3T3V0ZXJQYXJhbSA9IHtcclxuICAgICAgICAgIC4uLnRoaXMub3V0ZXJQYXJhbSQudmFsdWUsXHJcbiAgICAgICAgICBbdGhpcy5jYW1lbENhc2VEdG9TdGF0dXNJZEZpZWxkXTogbnVsbFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ld091dGVyUGFyYW0gPSB7XHJcbiAgICAgICAgICAuLi50aGlzLm91dGVyUGFyYW0kLnZhbHVlLFxyXG4gICAgICAgICAgW3RoaXMuY2FtZWxDYXNlRHRvU3RhdHVzSWRGaWVsZF06IHRhYj8uaWQgLy8gVXNlIGJyYWNrZXQgbm90YXRpb24gZm9yIGR5bmFtaWMgcHJvcGVydHlcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZmlsdGVyU3RhdHVzID0gbmV3RmlsdGVyT3BlcmF0b3JzLmZpbHRlcigoeCkgPT4geC5maWVsZCA9PT0gdGhpcy5jYW1lbENhc2VEdG9TdGF0dXNJZEZpZWxkICYmIHgub3BlcmF0b3IgPT09IEVudW1GaWx0ZXJPcGVyYXRvci5FUVVBTCk7XHJcbiAgICAgIGlmICghZmlsdGVyU3RhdHVzLmxlbmd0aCkge1xyXG4gICAgICAgIGZpbHRlclN0YXR1cy5wdXNoKHtcclxuICAgICAgICAgIGZpZWxkOiB0aGlzLmNhbWVsQ2FzZUR0b1N0YXR1c0lkRmllbGQsXHJcbiAgICAgICAgICBvcGVyYXRvcjogRW51bUZpbHRlck9wZXJhdG9yLkVRVUFMLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKGZpbHRlclN0YXR1cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICBgRmlsdGVyT3BlcmF0b3JzIGVycm9yIGZvciAke3RoaXMuY2FtZWxDYXNlRHRvU3RhdHVzSWRGaWVsZH06IGNvbWJpbmF0aW9uIG9mIGZpZWxkIG5hbWUgYW5kIG9wZXJhdG9yIG5hbWUgaXMgbm90IHVuaXF1ZSBpbiB0aGUgYXJyYXlgXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBuZXdGaWx0ZXJPcGVyYXRvcnMgPSBbXHJcbiAgICAgICAgLi4ubmV3RmlsdGVyT3BlcmF0b3JzLmZpbHRlcih4ID0+IHguZmllbGQgIT09IHRoaXMuY2FtZWxDYXNlRHRvU3RhdHVzSWRGaWVsZCksXHJcbiAgICAgICAgLi4uZmlsdGVyU3RhdHVzXHJcbiAgICAgIF1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wYXVzZVN1YnNjdGlwdGlvbiA9IHRydWVcclxuICAgIHRoaXMub3V0ZXJQYXJhbSQubmV4dChuZXdPdXRlclBhcmFtKTtcclxuICAgIHRoaXMucGF1c2VTdWJzY3RpcHRpb24gPSBmYWxzZTtcclxuICAgIHRoaXMuZmlsdGVyT3BlcmF0b3JzJC5uZXh0KG5ld0ZpbHRlck9wZXJhdG9ycyk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5tYXAoKHgpID0+IHg/LnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgaWYgKCEhdGhpcy5xdWVyeUxpc3RTdWJzY3JpcHRpb24pIHRoaXMucXVlcnlMaXN0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgI2NvbnRhaW5lciBjbGFzcz1cImNvcmUtcGFnZS1saXN0LWNvbnRhaW5lciBwLXJlbGF0aXZlXCIgI2NvcmVQYWdlTGlzdENvbnRhaW5lclxyXG4gICAgW25nU3R5bGVdPVwieyBoZWlnaHQ6IGhlaWdodCArICdweCcgfVwiPlxyXG5cclxuICAgIEBpZiAoIWhpZGVIZWFkZXIpIHtcclxuICAgIDxjb3JlLXBhZ2UtaGVhZGVyIFtpbnN0YW5jZU51bWJlcl09XCJjb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlclwiIFt0aXRsZV09XCJ0aXRsZVwiXHJcbiAgICAgICAgKGJ1dHRvbkNsaWNrKT1cIm9uQ29yZVBhZ2VIZWFkZXJCdXR0b25DbGljaygkZXZlbnQpXCJcclxuICAgICAgICBbaGlkZUJ1dHRvbkdyb3VwXT1cIiEhc2Vla2VyTW9kZSB8fCAhIWhpZGVCdXR0b25Hcm91cFwiPjwvY29yZS1wYWdlLWhlYWRlcj5cclxuICAgIH1cclxuXHJcbiAgICA8aW5wdXQgI2ZpbGVJbXBvcnQgdHlwZT1cImZpbGVcIiBuYW1lPVwibmFtZVwiXHJcbiAgICAgICAgYWNjZXB0PVwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQsIGFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbFwiXHJcbiAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIChjaGFuZ2UpPSdpbnB1dEZpbGUoJGV2ZW50KScgLz5cclxuXHJcbiAgICA8IS0tXHJcbiAgICAgICAgS2hpIMSRw6MgdMOtbmggxJHGsOG7o2MgY2jDrW5oIHjDoWMgY2hp4buBdSBjYW8gY29tcG9zaXRpb25IZWlnaHQgY+G7p2EgY29yZS1jb21wb3NpdGlvblxyXG4gICAgICAgIEPhuqduIHTDrW5oIMSRxrDhu6NjIGNow61uaCB4w6FjIGNoaeG7gXUgY2FvIGNvcmVUYWJsZUhlaWdodCBj4bunYSBDb3JlVGFibGVcclxuICAgICAgICBO4bq/dSBwaOG6p24gdG9wIGPhu6dhIGNvbXBvc2l0aW9uIGPhu5EgxJHhu4tuaCAodsOtIGThu6Uga2hpIHPhu60gZOG7pW5nIENvcmVQYXJhbUtpdCkgdGjDrCBwaMOpcCB0cuG7qyDEkcahbiBnaeG6o25cclxuICAgICAgICBOaMawbmcgbuG6v3UgcGjhuqduIHRvcCDEkcaw4bujYyBjdXN0b21pemUsIHRhIHBo4bqjaSBz4butIGThu6VuZyBleHRyYU1hbnVhbE9mZnNldFxyXG4gICAgLS0+XHJcbiAgICA8Y29yZS1jb21wb3NpdGlvbiBbY29yZUNvbXBvc2l0aW9uSW5zdGFuY2VOdW1iZXJdPVwiY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJcIiBbdG9wXT1cInRvcFBsYWNlXCJcclxuICAgICAgICBbbGVmdF09XCIhIWhpZGVMZWZ0PyB1bmRlZmluZWQgOmxlZnRcIiBbbWFpbl09XCJjb3JlVGFibGVcIiBbaGVpZ2h0XT1cImNvbXBvc2l0aW9uSGVpZ2h0XCI+XHJcbiAgICA8L2NvcmUtY29tcG9zaXRpb24+XHJcblxyXG4gICAgPHJvdXRlci1vdXRsZXQgbmFtZT1cImNvcmVQYWdlTGlzdEF1eFwiPjwvcm91dGVyLW91dGxldD5cclxuXHJcbiAgICA8IS0tIEBpZiAoISF0YWJNb2RlICYmIHNob3dGaWx0ZXJLaXQpIHtcclxuICAgICAgICA8ZGl2IGNsYXNzID0gXCJmaWx0ZXIta2l0LWRyb3Bkb3duXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICB6SW5kZXg6IGZpbHRlcktpdFpJbmRleFxyXG4gICAgICAgIH1cIj5cclxuICAgICAgICAgICAgPGNvcmUtY29tbW9uLXBhcmFtLWtpdCBbaGlkZGVuTW9kZV09XCJ0cnVlXCIgW2RhdGVQZXJpb2RDb21wYXJpc29uRm9yXT1cImRhdGVQZXJpb2RDb21wYXJpc29uRm9yXCJcclxuICAgICAgICAgICAgICAgIFtlbmFibGVUaW1lWm9uZUNvbnZlcnRlckZvckRhdGVUaW1lUGVyaW9kUGFyYW1ldGVyc109XCJlbmFibGVUaW1lWm9uZUNvbnZlcnRlckZvckRhdGVUaW1lUGVyaW9kUGFyYW1ldGVyc1wiXHJcbiAgICAgICAgICAgICAgICBbZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3JMYWJlbEtleV09XCJkYXRlUGVyaW9kQ29tcGFyaXNvbkZvckxhYmVsS2V5XCJcclxuICAgICAgICAgICAgICAgIFtzdGF0dXNJbmNsdXNpb25Gb3JdPVwic3RhdHVzSW5jbHVzaW9uRm9yXCIgW3N0YXR1c0luY2x1c2lvbkZvckxhYmVsS2V5XT1cInN0YXR1c0luY2x1c2lvbkZvckxhYmVsS2V5XCJcclxuICAgICAgICAgICAgICAgIFtzdGF0dXNPcHRpb25zQXBpXT1cInN0YXR1c09wdGlvbnNBcGlcIiBbc3RhdHVzT3B0aW9ucyRdPVwic3RhdHVzT3B0aW9ucyRcIiBbc2hvd09yZ1BhcmFtXT1cInNob3dPcmdQYXJhbVwiXHJcbiAgICAgICAgICAgICAgICBbaGlkZUdlbmVyYWxTZWFyY2hdPVwiaGlkZUdlbmVyYWxTZWFyY2hcIiBbaGlkZURhdGVQZXJpb2RDb21wYXJpc29uXT1cImhpZGVEYXRlUGVyaW9kQ29tcGFyaXNvblwiXHJcbiAgICAgICAgICAgICAgICBbaGlkZVN0YXR1c0luY2x1c2lvbl09XCJoaWRlU3RhdHVzSW5jbHVzaW9uXCJcclxuICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvblBhcmFtS2l0VmFsdWVDaGFuZ2UoJGV2ZW50KVwiPjwvY29yZS1jb21tb24tcGFyYW0ta2l0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgfSAtLT5cclxuXHJcbiAgICBAaWYgKCFkaXNhYmxlRmlsdGVySHViICYmIHNob3dGaWx0ZXIgJiYgISFwYXJhbVJvd3MpIHtcclxuICAgICAgICA8Y29yZS1maWx0ZXItaHViIFtwYXJhbVJvd3NdPVwicGFyYW1Sb3dzXCI+PC9jb3JlLWZpbHRlci1odWI+XHJcbiAgICB9XHJcblxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjdG9wUGxhY2U+XHJcblxyXG4gICAgQGlmICghdGFiTW9kZSkge1xyXG4gICAgICAgIEBpZiAoISFzaG93UGFyYW1LaXQpIHtcclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxjb3JlLWNvbW1vbi1wYXJhbS1raXQgW2hpZGRlbk1vZGVdPVwiZmFsc2VcIiBbZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3JdPVwiZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtlbmFibGVUaW1lWm9uZUNvbnZlcnRlckZvckRhdGVUaW1lUGVyaW9kUGFyYW1ldGVyc109XCJlbmFibGVUaW1lWm9uZUNvbnZlcnRlckZvckRhdGVUaW1lUGVyaW9kUGFyYW1ldGVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2RhdGVQZXJpb2RDb21wYXJpc29uRm9yTGFiZWxLZXldPVwiZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3JMYWJlbEtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0YXR1c0luY2x1c2lvbkZvcl09XCJzdGF0dXNJbmNsdXNpb25Gb3JcIiBbc3RhdHVzSW5jbHVzaW9uRm9yTGFiZWxLZXldPVwic3RhdHVzSW5jbHVzaW9uRm9yTGFiZWxLZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdGF0dXNPcHRpb25zQXBpXT1cInN0YXR1c09wdGlvbnNBcGlcIiBbc3RhdHVzT3B0aW9ucyRdPVwic3RhdHVzT3B0aW9ucyRcIiBbc2hvd09yZ1BhcmFtXT1cInNob3dPcmdQYXJhbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2hpZGVHZW5lcmFsU2VhcmNoXT1cImhpZGVHZW5lcmFsU2VhcmNoXCIgW2hpZGVEYXRlUGVyaW9kQ29tcGFyaXNvbl09XCJoaWRlRGF0ZVBlcmlvZENvbXBhcmlzb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtoaWRlU3RhdHVzSW5jbHVzaW9uXT1cImhpZGVTdGF0dXNJbmNsdXNpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvblBhcmFtS2l0VmFsdWVDaGFuZ2UoJGV2ZW50KVwiPjwvY29yZS1jb21tb24tcGFyYW0ta2l0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDwhLS0gQGlmIChlbmFibGVGaWx0ZXJLaXQpIHtcclxuICAgICAgICAgICAgPGNvcmUtZmlsdGVyLWtpdCBcclxuICAgICAgICAgICAgW2RhdGVQZXJpb2RDb21wYXJpc29uRm9yXT1cImRhdGVQZXJpb2RDb21wYXJpc29uRm9yXCJcclxuICAgICAgICAgICAgW2VuYWJsZVRpbWVab25lQ29udmVydGVyRm9yRGF0ZVRpbWVQZXJpb2RQYXJhbWV0ZXJzXT1cImVuYWJsZVRpbWVab25lQ29udmVydGVyRm9yRGF0ZVRpbWVQZXJpb2RQYXJhbWV0ZXJzXCJcclxuICAgICAgICAgICAgW2RhdGVQZXJpb2RDb21wYXJpc29uRm9yTGFiZWxLZXldPVwiZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3JMYWJlbEtleVwiXHJcbiAgICAgICAgICAgIFtzdGF0dXNJbmNsdXNpb25Gb3JdPVwic3RhdHVzSW5jbHVzaW9uRm9yXCIgXHJcbiAgICAgICAgICAgIFtzdGF0dXNJbmNsdXNpb25Gb3JMYWJlbEtleV09XCJzdGF0dXNJbmNsdXNpb25Gb3JMYWJlbEtleVwiXHJcbiAgICAgICAgICAgIFtzdGF0dXNPcHRpb25zQXBpXT1cInN0YXR1c09wdGlvbnNBcGlcIiBcclxuICAgICAgICAgICAgW3N0YXR1c09wdGlvbnMkXT1cInN0YXR1c09wdGlvbnMkXCIgXHJcbiAgICAgICAgICAgIFtzaG93T3JnUGFyYW1dPVwic2hvd09yZ1BhcmFtXCJcclxuICAgICAgICAgICAgW3Nob3dPcmdQYXJhbURyb3Bkb3duXT1cInNob3dPcmdQYXJhbURyb3Bkb3duXCJcclxuICAgICAgICAgICAgW2hpZGVHZW5lcmFsU2VhcmNoXT1cImhpZGVHZW5lcmFsU2VhcmNoXCJcclxuICAgICAgICAgICAgW2hpZGVEYXRlUGVyaW9kQ29tcGFyaXNvbl09XCJoaWRlRGF0ZVBlcmlvZENvbXBhcmlzb25cIlxyXG4gICAgICAgICAgICBbaGlkZVN0YXR1c0luY2x1c2lvbl09XCJoaWRlU3RhdHVzSW5jbHVzaW9uXCJcclxuICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uUGFyYW1LaXRWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICA+PC9jb3JlLWZpbHRlci1raXQ+ICAgICAgICAgICAgXHJcbiAgICAgICAgfSAtLT5cclxuICAgIH0gQGVsc2Uge1xyXG4gICAgPGNvcmUtdGFicyBbaGVhZGVyc109XCJ0YWJIZWFkZXJzXCIgW2NvbnRlbnRzXT1cIltdXCIgW2hlaWdodF09XCI0NVwiIFtoZWFkZXJMaW5lSGVpZ2h0XT1cIjQ1XCJcclxuICAgICAgICAob25IZWFkZXJDbGljayk9XCJvbkNvcmVUYWJzSGVhZGVyQ2xpY2soJGV2ZW50KVwiPlxyXG4gICAgPC9jb3JlLXRhYnM+XHJcbiAgICA8IS0tIDxjb3JlLWZpbHRlci1raXQgXHJcbiAgICAgICAgW2RhdGVQZXJpb2RDb21wYXJpc29uRm9yXT1cImRhdGVQZXJpb2RDb21wYXJpc29uRm9yXCJcclxuICAgICAgICBbZW5hYmxlVGltZVpvbmVDb252ZXJ0ZXJGb3JEYXRlVGltZVBlcmlvZFBhcmFtZXRlcnNdPVwiZW5hYmxlVGltZVpvbmVDb252ZXJ0ZXJGb3JEYXRlVGltZVBlcmlvZFBhcmFtZXRlcnNcIlxyXG4gICAgICAgIFtkYXRlUGVyaW9kQ29tcGFyaXNvbkZvckxhYmVsS2V5XT1cImRhdGVQZXJpb2RDb21wYXJpc29uRm9yTGFiZWxLZXlcIlxyXG4gICAgICAgIFtzdGF0dXNJbmNsdXNpb25Gb3JdPVwic3RhdHVzSW5jbHVzaW9uRm9yXCIgXHJcbiAgICAgICAgW3N0YXR1c0luY2x1c2lvbkZvckxhYmVsS2V5XT1cInN0YXR1c0luY2x1c2lvbkZvckxhYmVsS2V5XCJcclxuICAgICAgICBbc3RhdHVzT3B0aW9uc0FwaV09XCJzdGF0dXNPcHRpb25zQXBpXCIgXHJcbiAgICAgICAgW3N0YXR1c09wdGlvbnMkXT1cInN0YXR1c09wdGlvbnMkXCIgXHJcbiAgICAgICAgW3Nob3dPcmdQYXJhbV09XCJzaG93T3JnUGFyYW1cIlxyXG4gICAgICAgIFtzaG93T3JnUGFyYW1Ecm9wZG93bl09XCJzaG93T3JnUGFyYW1Ecm9wZG93blwiXHJcbiAgICAgICAgW2hpZGVHZW5lcmFsU2VhcmNoXT1cImhpZGVHZW5lcmFsU2VhcmNoXCJcclxuICAgICAgICBbaGlkZURhdGVQZXJpb2RDb21wYXJpc29uXT1cImhpZGVEYXRlUGVyaW9kQ29tcGFyaXNvblwiXHJcbiAgICAgICAgW2hpZGVTdGF0dXNJbmNsdXNpb25dPVwiaGlkZVN0YXR1c0luY2x1c2lvblwiXHJcbiAgICAgICAgKG9uQ2hhbmdlKT1cIm9uUGFyYW1LaXRWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgID48L2NvcmUtZmlsdGVyLWtpdD4gLS0+XHJcbiAgICB9XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvcFwiPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjb3JlVGFibGU+XHJcblxyXG4gICAgPGRpdiBbY2xhc3Mub3BhY2l0eTBdPVwiISEhZ2VvbWV0cmljRG9uZVwiPlxyXG5cclxuICAgICAgICA8IS0tXHJcbiAgICAgICAgICAgIEtoaSDEkcOjIHTDrW5oIMSRxrDhu6NjIGNow61uaCB4w6FjIGNoaeG7gXUgY2FvIGNvbXBvc2l0aW9uSGVpZ2h0IGPhu6dhIGNvcmUtY29tcG9zaXRpb25cclxuICAgICAgICAgICAgQ+G6p24gdMOtbmggxJHGsOG7o2MgY2jDrW5oIHjDoWMgY2hp4buBdSBjYW8gY29yZVRhYmxlSGVpZ2h0IGPhu6dhIENvcmVUYWJsZVxyXG4gICAgICAgICAgICBO4bq/dSBwaOG6p24gdG9wIGPhu6dhIGNvbXBvc2l0aW9uIGPhu5EgxJHhu4tuaCAodsOtIGThu6Uga2hpIHPhu60gZOG7pW5nIENvcmVQYXJhbUtpdCkgdGjDrCBwaMOpcCB0cuG7qyDEkcahbiBnaeG6o25cclxuICAgICAgICAgICAgTmjGsG5nIG7hur91IHBo4bqnbiB0b3AgxJHGsOG7o2MgY3VzdG9taXplLCB0YSBwaOG6o2kgc+G7rSBk4bulbmcgZXh0cmFNYW51YWxPZmZzZXRcclxuXHJcbiAgICAgICAgICAgIEPhuqduIHTDrW5oIHRhYmxlSGVpZ2h0IG5oxrAgdGjhur8gbsOgbz9cclxuICAgICAgICAtLT5cclxuICAgICAgICA8Y29yZS10YWJsZSAjY29yZVRhYmxlQWxvbmUgd2lkdGg9XCIxMDAlXCIgW2hlaWdodF09XCJ0YWJsZUhlaWdodFwiIFtyb3dIZWlnaHRdPVwicm93SGVpZ2h0IHx8ICc0NnB4J1wiIFt3cmFwXT1cIndyYXBcIlxyXG4gICAgICAgICAgICBbcHJpbWFyeUtleV09XCJwcmltYXJ5S2V5XCJcclxuICAgICAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiIFtkYXRhXT1cImxpc3RcIiBbc2hvd0NoZWNrYm94XT1cIiEhIWhpZGVDaGVja1wiIGhlYWRlckhlaWdodD1cIjYwcHhcIlxyXG4gICAgICAgICAgICBbc2hvd1Rvb2xzXT1cInNob3dMaXN0SW5saW5lVG9vbHNcIiBbdG9vbHNdPVwiaW5saW5lVG9vbHNcIiAob25Ub29sQ2xpY2spPVwib25Ub29sQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChvblJvd0NsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50KVwiIChvblJvd0RvdWJsZUNsaWNrKT1cIm9uUm93RG91YmxlQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChvblNlbGVjdGVkSWRzQ2hhbmdlKT1cIm9uU2VsZWN0ZWRJZHNDaGFuZ2UoJGV2ZW50KVwiIChvblNlbGVjdGVkRGF0YUNoYW5nZSk9XCJvblNlbGVjdGVkRGF0YUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgW2Zyb3plbl09XCJmcm96ZW4gfHwgMVwiIChvblNlYXJjaGluZyk9XCJvblNlYXJjaGluZygkZXZlbnQpXCJcclxuICAgICAgICAgICAgKG9uQ29sdW1uQ2FwdGlvbkNsaWNrKT1cIm9uQ29sdW1uQ2FwdGlvbkNsaWNrKCRldmVudClcIlxyXG4gICAgICAgICAgICBbY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJdPVwiY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJcIiBbbG9hZGluZ109XCJsb2FkaW5nXCJcclxuICAgICAgICAgICAgW2NvbHVtblNlYXJjaERlZmF1bHRPcGVuXT1cImNvbHVtblNlYXJjaERlZmF1bHRPcGVuXCIgW2xhenlMb2FkaW5nXT1cInRydWVcIiBbaGVhZGVyV3JhcF09XCJoZWFkZXJXcmFwXCJcclxuICAgICAgICAgICAgW2hlYWRlckZpcnN0Um93SGVpZ2h0XT1cImhlYWRlckZpcnN0Um93SGVpZ2h0XCIgW25vUGFkZGluZ0NlbGxdPVwibm9QYWRkaW5nQ2VsbFwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlSGlnaGxpZ2h0T25DbGlja109XCJkaXNhYmxlSGlnaGxpZ2h0T25DbGlja1wiIFtwcmltYXJ5S2V5XT1cInByaW1hcnlLZXlcIj48L2NvcmUtdGFibGU+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZC1mbGV4LWJldHdlZW4gcGFnaW5hdGlvbi13cmFwcGVyIHctMTAwXCIgI3BhZ2luYXRpb25Db250YWluZXI+XHJcbiAgICAgICAgICAgIDxjb3JlLXBhZ2luYXRpb24tZnVsbCBbaGVpZ2h0XT1cInBhZ2luYXRpb25IZWlnaHRcIiBbY3VycmVudFBhZ2UkXT1cImN1cnJlbnRQYWdlJFwiIFtwYWdlU2l6ZSRdPVwicGFnZVNpemUkXCJcclxuICAgICAgICAgICAgICAgIFtwYWdlQ291bnRdPVwicGFnZUNvdW50XCIgW2lubmVyQm9keUNvdW50JF09XCJpbm5lckJvZHlDb3VudCRcIiBbcGFnaW5hdGlvbiRdPVwicGFnaW5hdGlvbiRcIlxyXG4gICAgICAgICAgICAgICAgW2xvYWRpbmddPVwibG9hZGluZ1wiIFtmaXhlZFBhZ2VTaXplXT1cImZpeGVkUGFnZVNpemVcIiBbYmFja2dyb3VuZF09XCInIzg0ODQ4NCdcIj48L2NvcmUtcGFnaW5hdGlvbi1mdWxsPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48Y29yZS1hcGktcHJvZ3Jlc3MgKm5nSWY9XCJsb25nQXBpUnVubmluZ1wiIChvbkNsb3NlKT1cIm9uUHJvZ3Jlc3NXaW5kb3dDbG9zZSgkZXZlbnQpXCI+PC9jb3JlLWFwaS1wcm9ncmVzcz5cclxuXHJcbjxhcHAtZnVsbHNjcmVlbi1tb2RhbC1sb2FkZXIgKm5nSWY9XCJwcmVmZXRjaExvYWRpbmdcIj48L2FwcC1mdWxsc2NyZWVuLW1vZGFsLWxvYWRlcj4iXX0=
|