@po-ui/ng-templates 16.0.0-next.1 → 16.0.0
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/README.md +2 -2
- package/esm2022/lib/components/po-page-dynamic-search/po-advanced-filter/po-advanced-filter-base.component.mjs +6 -9
- package/esm2022/lib/components/po-page-dynamic-search/po-page-dynamic-search-base.component.mjs +8 -18
- package/esm2022/lib/components/po-page-dynamic-table/po-page-dynamic-table.component.mjs +13 -28
- package/fesm2022/po-ui-ng-templates.mjs +76 -104
- package/fesm2022/po-ui-ng-templates.mjs.map +1 -1
- package/lib/components/po-page-dynamic-search/po-advanced-filter/po-advanced-filter-base.component.d.ts +3 -2
- package/lib/components/po-page-dynamic-search/po-page-dynamic-search-base.component.d.ts +6 -3
- package/lib/components/po-page-dynamic-table/po-page-dynamic-table.component.d.ts +14 -9
- package/package.json +4 -4
- package/po-ui-ng-templates-16.0.0.tgz +0 -0
- package/schematics/ng-add/index.js +1 -1
- package/po-ui-ng-templates-16.0.0-next.1.tgz +0 -0
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
1
|
import { Component, Input } from '@angular/core';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { EMPTY, Subscription, of } from 'rxjs';
|
|
3
|
+
import { map, switchMap, tap } from 'rxjs/operators';
|
|
4
|
+
import { PoTableColumnSortType, poLocaleDefault } from '@po-ui/ng-components';
|
|
6
5
|
import * as util from '../../utils/util';
|
|
6
|
+
import { convertToBoolean } from '../../utils/util';
|
|
7
7
|
import { PoPageDynamicDetailComponent } from '../po-page-dynamic-detail/po-page-dynamic-detail.component';
|
|
8
|
-
import { poPageDynamicTableLiteralsDefault } from './po-page-dynamic-table-literals';
|
|
9
|
-
import { PoPageDynamicListBaseComponent } from './po-page-dynamic-list-base.component';
|
|
10
8
|
import { PoPageDynamicService } from '../../services/po-page-dynamic/po-page-dynamic.service';
|
|
11
9
|
import { isExternalLink, openExternalLink, removeDuplicateItemsWithArrayKey } from '../../utils/util';
|
|
10
|
+
import { PoPageDynamicListBaseComponent } from './po-page-dynamic-list-base.component';
|
|
11
|
+
import { poPageDynamicTableLiteralsDefault } from './po-page-dynamic-table-literals';
|
|
12
12
|
import * as i0 from "@angular/core";
|
|
13
13
|
import * as i1 from "@angular/router";
|
|
14
14
|
import * as i2 from "@po-ui/ng-components";
|
|
@@ -1077,7 +1077,7 @@ export class PoPageDynamicTableComponent extends PoPageDynamicListBaseComponent
|
|
|
1077
1077
|
this.tableActions = newTableActions;
|
|
1078
1078
|
}
|
|
1079
1079
|
static ɵfac = function PoPageDynamicTableComponent_Factory(t) { return new (t || PoPageDynamicTableComponent)(i0.ɵɵdirectiveInject(i1.Router), i0.ɵɵdirectiveInject(i1.ActivatedRoute), i0.ɵɵdirectiveInject(i2.PoDialogService), i0.ɵɵdirectiveInject(i2.PoNotificationService), i0.ɵɵdirectiveInject(i3.PoPageDynamicService), i0.ɵɵdirectiveInject(i4.PoPageCustomizationService), i0.ɵɵdirectiveInject(i5.PoPageDynamicTableActionsService), i0.ɵɵdirectiveInject(i2.PoLanguageService)); };
|
|
1080
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoPageDynamicTableComponent, selectors: [["po-page-dynamic-table"]], inputs: { onLoad: ["p-load", "onLoad"], keepFilters: ["p-keep-filters", "keepFilters"], actionRight: ["p-actions-right", "actionRight"], concatFilters: ["p-concat-filters", "concatFilters"], hideRemoveAllDisclaimer: ["p-hide-remove-all-disclaimer", "hideRemoveAllDisclaimer"], infiniteScroll: ["p-infinite-scroll", "infiniteScroll"], actions: ["p-actions", "actions"], pageCustomActions: ["p-page-custom-actions", "pageCustomActions"], tableCustomActions: ["p-table-custom-actions", "tableCustomActions"], quickSearchWidth: ["p-quick-search-width", "quickSearchWidth"], height: ["p-height", "height"], hideCloseDisclaimers: ["p-hide-close-disclaimers", "hideCloseDisclaimers"], quickSearchParam: ["p-quick-search-param", "quickSearchParam"], quickSearchValue: ["p-quick-search-value", "quickSearchValue"], searchLiterals: ["p-literals", "searchLiterals"], draggable: ["p-draggable", "draggable"] }, features: [i0.ɵɵProvidersFeature([PoPageDynamicService]), i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 23, consts: [[3, "p-actions", "p-breadcrumb", "p-hide-close-disclaimers", "p-filters", "p-keep-filters", "p-literals", "p-concat-filters", "p-hide-remove-all-disclaimer", "p-quick-search-width", "p-title", "p-quick-search-value", "p-advanced-search", "p-change-disclaimers", "p-quick-search"], [3, "p-sort", "p-hide-table-search", "p-actions", "p-actions-right", "p-selectable", "p-columns", "p-items", "p-height", "p-hide-batch-actions", "p-infinite-scroll", "p-show-more-disabled", "p-draggable", "p-show-more", "p-sort-by", "p-change-visible-columns", "p-restore-column-manager"]], template: function PoPageDynamicTableComponent_Template(rf, ctx) { if (rf & 1) {
|
|
1080
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoPageDynamicTableComponent, selectors: [["po-page-dynamic-table"]], inputs: { onLoad: ["p-load", "onLoad"], keepFilters: ["p-keep-filters", "keepFilters", convertToBoolean], actionRight: ["p-actions-right", "actionRight", convertToBoolean], concatFilters: ["p-concat-filters", "concatFilters", convertToBoolean], hideRemoveAllDisclaimer: ["p-hide-remove-all-disclaimer", "hideRemoveAllDisclaimer", convertToBoolean], infiniteScroll: ["p-infinite-scroll", "infiniteScroll", convertToBoolean], actions: ["p-actions", "actions"], pageCustomActions: ["p-page-custom-actions", "pageCustomActions"], tableCustomActions: ["p-table-custom-actions", "tableCustomActions"], quickSearchWidth: ["p-quick-search-width", "quickSearchWidth"], height: ["p-height", "height"], hideCloseDisclaimers: ["p-hide-close-disclaimers", "hideCloseDisclaimers"], quickSearchParam: ["p-quick-search-param", "quickSearchParam"], quickSearchValue: ["p-quick-search-value", "quickSearchValue"], searchLiterals: ["p-literals", "searchLiterals"], draggable: ["p-draggable", "draggable"] }, features: [i0.ɵɵProvidersFeature([PoPageDynamicService]), i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 23, consts: [[3, "p-actions", "p-breadcrumb", "p-hide-close-disclaimers", "p-filters", "p-keep-filters", "p-literals", "p-concat-filters", "p-hide-remove-all-disclaimer", "p-quick-search-width", "p-title", "p-quick-search-value", "p-advanced-search", "p-change-disclaimers", "p-quick-search"], [3, "p-sort", "p-hide-table-search", "p-actions", "p-actions-right", "p-selectable", "p-columns", "p-items", "p-height", "p-hide-batch-actions", "p-infinite-scroll", "p-show-more-disabled", "p-draggable", "p-show-more", "p-sort-by", "p-change-visible-columns", "p-restore-column-manager"]], template: function PoPageDynamicTableComponent_Template(rf, ctx) { if (rf & 1) {
|
|
1081
1081
|
i0.ɵɵelementStart(0, "po-page-dynamic-search", 0);
|
|
1082
1082
|
i0.ɵɵlistener("p-advanced-search", function PoPageDynamicTableComponent_Template_po_page_dynamic_search_p_advanced_search_0_listener($event) { return ctx.onAdvancedSearch($event); })("p-change-disclaimers", function PoPageDynamicTableComponent_Template_po_page_dynamic_search_p_change_disclaimers_0_listener($event) { return ctx.onChangeDisclaimers($event); })("p-quick-search", function PoPageDynamicTableComponent_Template_po_page_dynamic_search_p_quick_search_0_listener($event) { return ctx.onQuickSearch($event); });
|
|
1083
1083
|
i0.ɵɵelementStart(1, "po-table", 1);
|
|
@@ -1089,21 +1089,6 @@ export class PoPageDynamicTableComponent extends PoPageDynamicListBaseComponent
|
|
|
1089
1089
|
i0.ɵɵproperty("p-sort", true)("p-hide-table-search", true)("p-actions", ctx.tableActions)("p-actions-right", ctx.actionRight)("p-selectable", ctx.enableSelectionTable)("p-columns", ctx.columns)("p-items", ctx.items)("p-height", ctx.height)("p-hide-batch-actions", true)("p-infinite-scroll", ctx.infiniteScroll)("p-show-more-disabled", !ctx.hasNext)("p-draggable", ctx.draggable);
|
|
1090
1090
|
} }, dependencies: [i2.PoTableComponent, i6.PoPageDynamicSearchComponent], encapsulation: 2 });
|
|
1091
1091
|
}
|
|
1092
|
-
__decorate([
|
|
1093
|
-
InputBoolean()
|
|
1094
|
-
], PoPageDynamicTableComponent.prototype, "keepFilters", void 0);
|
|
1095
|
-
__decorate([
|
|
1096
|
-
InputBoolean()
|
|
1097
|
-
], PoPageDynamicTableComponent.prototype, "actionRight", void 0);
|
|
1098
|
-
__decorate([
|
|
1099
|
-
InputBoolean()
|
|
1100
|
-
], PoPageDynamicTableComponent.prototype, "concatFilters", void 0);
|
|
1101
|
-
__decorate([
|
|
1102
|
-
InputBoolean()
|
|
1103
|
-
], PoPageDynamicTableComponent.prototype, "hideRemoveAllDisclaimer", void 0);
|
|
1104
|
-
__decorate([
|
|
1105
|
-
InputBoolean()
|
|
1106
|
-
], PoPageDynamicTableComponent.prototype, "infiniteScroll", void 0);
|
|
1107
1092
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoPageDynamicTableComponent, [{
|
|
1108
1093
|
type: Component,
|
|
1109
1094
|
args: [{ selector: 'po-page-dynamic-table', providers: [PoPageDynamicService], template: "<po-page-dynamic-search\r\n [p-actions]=\"pageActions\"\r\n [p-breadcrumb]=\"breadcrumb\"\r\n [p-hide-close-disclaimers]=\"hideCloseDisclaimers\"\r\n [p-filters]=\"filters\"\r\n [p-keep-filters]=\"keepFilters\"\r\n [p-literals]=\"searchLiterals\"\r\n [p-concat-filters]=\"concatFilters\"\r\n [p-hide-remove-all-disclaimer]=\"hideRemoveAllDisclaimer\"\r\n [p-quick-search-width]=\"quickSearchWidth\"\r\n [p-title]=\"title\"\r\n (p-advanced-search)=\"onAdvancedSearch($event)\"\r\n (p-change-disclaimers)=\"onChangeDisclaimers($event)\"\r\n (p-quick-search)=\"onQuickSearch($event)\"\r\n [p-quick-search-value]=\"quickSearchValue || ''\"\r\n>\r\n <po-table\r\n [p-sort]=\"true\"\r\n [p-hide-table-search]=\"true\"\r\n [p-actions]=\"tableActions\"\r\n [p-actions-right]=\"actionRight\"\r\n [p-selectable]=\"enableSelectionTable\"\r\n [p-columns]=\"columns\"\r\n [p-items]=\"items\"\r\n [p-height]=\"height\"\r\n [p-hide-batch-actions]=\"true\"\r\n [p-infinite-scroll]=\"infiniteScroll\"\r\n [p-show-more-disabled]=\"!hasNext\"\r\n (p-show-more)=\"showMore()\"\r\n (p-sort-by)=\"onSort($event)\"\r\n (p-change-visible-columns)=\"onChangeVisibleColumns($event)\"\r\n (p-restore-column-manager)=\"onColumnRestoreManager($event)\"\r\n (p-sort-by)=\"onSortBy($event)\"\r\n [p-draggable]=\"draggable\"\r\n >\r\n </po-table>\r\n</po-page-dynamic-search>\r\n" }]
|
|
@@ -1112,19 +1097,19 @@ __decorate([
|
|
|
1112
1097
|
args: ['p-load']
|
|
1113
1098
|
}], keepFilters: [{
|
|
1114
1099
|
type: Input,
|
|
1115
|
-
args: ['p-keep-filters']
|
|
1100
|
+
args: [{ alias: 'p-keep-filters', transform: convertToBoolean }]
|
|
1116
1101
|
}], actionRight: [{
|
|
1117
1102
|
type: Input,
|
|
1118
|
-
args: ['p-actions-right']
|
|
1103
|
+
args: [{ alias: 'p-actions-right', transform: convertToBoolean }]
|
|
1119
1104
|
}], concatFilters: [{
|
|
1120
1105
|
type: Input,
|
|
1121
|
-
args: ['p-concat-filters']
|
|
1106
|
+
args: [{ alias: 'p-concat-filters', transform: convertToBoolean }]
|
|
1122
1107
|
}], hideRemoveAllDisclaimer: [{
|
|
1123
1108
|
type: Input,
|
|
1124
|
-
args: ['p-hide-remove-all-disclaimer']
|
|
1109
|
+
args: [{ alias: 'p-hide-remove-all-disclaimer', transform: convertToBoolean }]
|
|
1125
1110
|
}], infiniteScroll: [{
|
|
1126
1111
|
type: Input,
|
|
1127
|
-
args: ['p-infinite-scroll']
|
|
1112
|
+
args: [{ alias: 'p-infinite-scroll', transform: convertToBoolean }]
|
|
1128
1113
|
}], actions: [{
|
|
1129
1114
|
type: Input,
|
|
1130
1115
|
args: ['p-actions']
|
|
@@ -1156,4 +1141,4 @@ __decorate([
|
|
|
1156
1141
|
type: Input,
|
|
1157
1142
|
args: ['p-draggable']
|
|
1158
1143
|
}] }); })();
|
|
1159
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tcGFnZS1keW5hbWljLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RlbXBsYXRlcy9zcmMvbGliL2NvbXBvbmVudHMvcG8tcGFnZS1keW5hbWljLXRhYmxlL3BvLXBhZ2UtZHluYW1pYy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90ZW1wbGF0ZXMvc3JjL2xpYi9jb21wb25lbnRzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS9wby1wYWdlLWR5bmFtaWMtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUVwRSxPQUFPLEVBQUUsWUFBWSxFQUFjLEtBQUssRUFBVSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkUsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckQsT0FBTyxFQUNMLFlBQVksRUFRWixxQkFBcUIsRUFDckIsZUFBZSxFQUNoQixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sS0FBSyxJQUFJLE1BQU0sa0JBQWtCLENBQUM7QUFFekMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFFMUcsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFlOUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7OztBQUd0RyxNQUFNLGlCQUFpQixHQUFHLEVB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Z0JBQWdCO1lBY3ZCLFdBQVc7a0JBRFYsS0FBSzttQkFBQyxpQkFBaUI7WUEyQnhCLGFBQWE7a0JBRFosS0FBSzttQkFBQyxrQkFBa0I7WUFnQnpCLHVCQUF1QjtrQkFEdEIsS0FBSzttQkFBQyw4QkFBOEI7WUFrQnJDLGNBQWM7a0JBRGIsS0FBSzttQkFBQyxtQkFBbUI7WUE2REYsT0FBTztrQkFBOUIsS0FBSzttQkFBQyxXQUFXO1lBOEJrQixpQkFBaUI7a0JBQXBELEtBQUs7bUJBQUMsdUJBQXVCO1lBNEJPLGtCQUFrQjtrQkFBdEQsS0FBSzttQkFBQyx3QkFBd0I7WUFtQkksZ0JBQWdCO2tCQUFsRCxLQUFLO21CQUFDLHNCQUFzQjtZQWVOLE1BQU07a0JBQTVCLEtBQUs7bUJBQUMsVUFBVTtZQXFCc0Isb0JBQW9CO2tCQUExRCxLQUFLO21CQUFDLDBCQUEwQjtZQWlCRSxnQkFBZ0I7a0JBQWxELEtBQUs7bUJBQUMsc0JBQXNCO1lBZ0JNLGdCQUFnQjtrQkFBbEQsS0FBSzttQkFBQyxzQkFBc0I7WUE4Q1IsY0FBYztrQkFBbEMsS0FBSzttQkFBQyxZQUFZO1lBVU8sU0FBUztrQkFBbEMsS0FBSzttQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBPYnNlcnZhYmxlLCBFTVBUWSwgY29uY2F0LCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YXAsIHN3aXRjaE1hcCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHtcclxuICBJbnB1dEJvb2xlYW4sXHJcbiAgUG9EaWFsb2dDb25maXJtT3B0aW9ucyxcclxuICBQb0RpYWxvZ1NlcnZpY2UsXHJcbiAgUG9MYW5ndWFnZVNlcnZpY2UsXHJcbiAgUG9Ob3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gIFBvUGFnZUFjdGlvbixcclxuICBQb1RhYmxlQWN0aW9uLFxyXG4gIFBvVGFibGVDb2x1bW5Tb3J0LFxyXG4gIFBvVGFibGVDb2x1bW5Tb3J0VHlwZSxcclxuICBwb0xvY2FsZURlZmF1bHRcclxufSBmcm9tICdAcG8tdWkvbmctY29tcG9uZW50cyc7XHJcblxyXG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uLy4uL3V0aWxzL3V0aWwnO1xyXG5cclxuaW1wb3J0IHsgUG9QYWdlRHluYW1pY0RldGFpbENvbXBvbmVudCB9IGZyb20gJy4uL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwvcG8tcGFnZS1keW5hbWljLWRldGFpbC5jb21wb25lbnQnO1xyXG5cclxuaW1wb3J0IHsgcG9QYWdlRHluYW1pY1RhYmxlTGl0ZXJhbHNEZWZhdWx0IH0gZnJvbSAnLi9wby1wYWdlLWR5bmFtaWMtdGFibGUtbGl0ZXJhbHMnO1xyXG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljTGlzdEJhc2VDb21wb25lbnQgfSBmcm9tICcuL3BvLXBhZ2UtZHluYW1pYy1saXN0LWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wby1wYWdlLWR5bmFtaWMvcG8tcGFnZS1keW5hbWljLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1hY3Rpb25zLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZU9wdGlvbnMgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLW9wdGlvbnMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUG9QYWdlQ3VzdG9taXphdGlvblNlcnZpY2UgfSBmcm9tICcuLy4uLy4uL3NlcnZpY2VzL3BvLXBhZ2UtY3VzdG9taXphdGlvbi9wby1wYWdlLWN1c3RvbWl6YXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNPcHRpb25zU2NoZW1hIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9wby1wYWdlLWN1c3RvbWl6YXRpb24vcG8tcGFnZS1keW5hbWljLW9wdGlvbnMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlTWV0YURhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLW1ldGFkYXRhLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi9wby1wYWdlLWR5bmFtaWMtdGFibGUtYWN0aW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlRWRpdCB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtYmVmb3JlLWVkaXQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlTmV3IH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1iZWZvcmUtbmV3LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZVJlbW92ZSB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtYmVmb3JlLXJlbW92ZS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVEZXRhaWwgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLWJlZm9yZS1kZXRhaWwuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlRHVwbGljYXRlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1iZWZvcmUtZHVwbGljYXRlLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZVJlbW92ZUFsbCB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtYmVmb3JlLXJlbW92ZS1hbGwuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tQWN0aW9uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1jdXN0b20tYWN0aW9uLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbVRhYmxlQWN0aW9uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1jdXN0b20tdGFibGUtYWN0aW9uLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IGlzRXh0ZXJuYWxMaW5rLCBvcGVuRXh0ZXJuYWxMaW5rLCByZW1vdmVEdXBsaWNhdGVJdGVtc1dpdGhBcnJheUtleSB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWwnO1xyXG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljU2VhcmNoTGl0ZXJhbHMgfSBmcm9tICcuLi9wby1wYWdlLWR5bmFtaWMtc2VhcmNoL3BvLXBhZ2UtZHluYW1pYy1zZWFyY2gtbGl0ZXJhbHMuaW50ZXJmYWNlJztcclxuXHJcbmNvbnN0IFBBR0VfU0laRV9ERUZBVUxUID0gMTA7XHJcblxyXG50eXBlIFVybE9yUG9DdXN0b21pemF0aW9uRnVuY3Rpb24gPSBzdHJpbmcgfCAoKCkgPT4gUG9QYWdlRHluYW1pY1RhYmxlT3B0aW9ucyk7XHJcblxyXG4vKipcclxuICogQGRvY3NFeHRlbmRzIFBvUGFnZUR5bmFtaWNMaXN0QmFzZUNvbXBvbmVudFxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICpcclxuICogTyBgcG8tcGFnZS1keW5hbWljLXRhYmxlYCDDqSB1bWEgcMOhZ2luYSBxdWUgZXhpYmUgdW1hIGxpc3RhIGRlIHJlZ2lzdHJvcyBlbSB1bWEgdGFiZWxhIGJhc2VhZG8gZW0gdW1hIGxpc3RhIGRlIGZpZWxkcyxcclxuICogbyBtZXNtbyB0YW1iw6ltIHN1cG9ydGEgbWV0YWRhZG9zIGNvbmZvcm1lIGVzcGVjaWZpY2FkbyBuYSBkb2N1bWVudGHDp8Ojby5cclxuICpcclxuICogIyMjIFV0aWxpemHDp8OjbyB2aWEgcm90YVxyXG4gKlxyXG4gKiBBbyB1dGlsaXphciBhcyByb3RhcyBwYXJhIGNhcnJlZ2FyIG8gdGVtcGxhdGUsIG8gYHBhZ2UtZHluYW1pYy10YWJsZWAgZGlzcG9uaWJpbGl6YSBwcm9wcmllZGFkZXMgcGFyYVxyXG4gKiBwb2RlciBlc3BlY2lmaWNhciBvIGVuZHBvaW50IGRvcyBkYWRvcyBlIGRvcyBtZXRhZGFkb3MuIEV4ZW1wbG8gZGUgdXRpbGl6YcOnw6NvOlxyXG4gKlxyXG4gKiBPIGNvbXBvbmVudGUgcHJpbWVpcm8gaXLDoSBjYXJyZWdhciBvIG1ldGFkYWRvIGRhIHJvdGEgZGVmaW5pZGEgbmEgcHJvcHJpZWRhZGUgc2VydmljZU1ldGFkYXRhQXBpXHJcbiAqIGUgZGVwb2lzIGlyw6EgYnVzY2FyIGRhIHJvdGEgZGVmaW5pZGEgbmEgcHJvcHJpZWRhZGUgc2VydmljZUxvYWRBcGlcclxuICpcclxuICogPiBDYXNvIG8gc2Vydmlkb3IgcmV0b3JuYXIgdW0gZXJybyBhbyByZWN1cGVyYXIgbyBtZXRhZGFkb3MsIHNlcsOhIHJlcGFzc2FkbyBvIG1ldGFkYWRvcyBzYWx2byBlbSBjYWNoZSxcclxuICogc2UgbyBjYWNoZSBuw6NvIGV4aXN0ZSBzZXLDoSBkaXNwYXJhZG8gdW1hIG5vdGlmaWNhw6fDo28uXHJcbiAqXHJcbiAqIGBgYFxyXG4gKiB7XHJcbiAqICAgcGF0aDogJ3Blb3BsZScsXHJcbiAqICAgY29tcG9uZW50OiBQb1BhZ2VEeW5hbWljVGFibGVDb21wb25lbnQsXHJcbiAqICAgZGF0YToge1xyXG4gKiAgICAgc2VydmljZUFwaTogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC92MS9wZW9wbGUnLCAvLyBlbmRwb2ludCBkb3MgZGFkb3NcclxuICogICAgIHNlcnZpY2VNZXRhZGF0YUFwaTogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC92MS9tZXRhZGF0YScsIC8vIGVuZHBvaW50IGRvcyBtZXRhZGFkb3MgdXRpbGl6YW5kbyBvIG3DqXRvZG8gSFRUUCBHZXRcclxuICogICAgIHNlcnZpY2VMb2FkQXBpOiAnaHR0cDovL2xvY2FsaG9zdDozMDAwL2xvYWQtbWV0YWRhdGEnIC8vIGVuZHBvaW50IGRlIGN1c3RvbWl6YcOnw7VlcyBkb3MgbWV0YWRhZG9zIHV0aWxpemFuZG8gbyBtw6l0b2RvIEhUVFAgUG9zdFxyXG4gKiAgIH1cclxuICogfVxyXG4gKlxyXG4gKiBgYGBcclxuICpcclxuICogQSByZXF1aXNpw6fDo28gZG9zIG1ldGFkYWRvcyDDqSBmZWl0YSBuYSBpbmljaWFsaXphw6fDo28gZG8gdGVtcGxhdGUgcGFyYSBidXNjYXIgb3MgbWV0YWRhZG9zIGRhIHDDoWdpbmEgcGFzc2FuZG8gb1xyXG4gKiB0aXBvIGRvIG1ldGFkYWRvIGVzcGVyYWRvIGUgYSB2ZXJzw6NvIGNhY2hlYWRhIHBlbG8gYnJvd3Nlci5cclxuICpcclxuICogTyBmb3JtYXRvIGVzcGVyYWRvIG5hIHJlc3Bvc3RhIGRhIHJlcXVpc2nDp8OjbyBlc3TDoSBlc3BlY2lmaWNhZG8gbmEgaW50ZXJmYWNlXHJcbiAqIFtQb1BhZ2VEeW5hbWljVGFibGVNZXRhZGF0YV0oL2RvY3VtZW50YXRpb24vcG8tcGFnZS1keW5hbWljLXRhYmxlI3BvLXBhZ2UtZHluYW1pYy10YWJsZS1tZXRhZGF0YSkuIFBvciBleGVtcGxvOlxyXG4gKlxyXG4gKiBgYGBcclxuICogIHtcclxuICogICB2ZXJzaW9uOiAxLFxyXG4gKiAgIHRpdGxlOiAnUGVyc29uIFRhYmxlJyxcclxuICogICBmaWVsZHM6IFtcclxuICogICAgIHsgcHJvcGVydHk6ICdpZCcsIGtleTogdHJ1ZSwgZGlzYWJsZWQ6IHRydWUgfSxcclxuICogICAgIHsgcHJvcGVydHk6ICdzdGF0dXMnIH0sXHJcbiAqICAgICB7IHByb3BlcnR5OiAnbmFtZScgfSxcclxuICogICAgIHsgcHJvcGVydHk6ICduaWNrbmFtZScgfSxcclxuICogICAgIHsgcHJvcGVydHk6ICdiaXJ0aGRhdGUnLCBsYWJlbDogJ0JpcnRoIGRhdGUnIH0sXHJcbiAqICAgICB7IHByb3BlcnR5OiAnZ2VucmUnIH0sXHJcbiAqICAgICB7IHByb3BlcnR5OiAnY2l0eScgfSxcclxuICogICAgIHsgcHJvcGVydHk6ICdjb3VudHJ5JyB9XHJcbiAqICAgXSxcclxuICogICBrZWVwRmlsdGVyczogdHJ1ZVxyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiA+IENhc28gbyBlbmRwb2ludCBkb3MgbWV0YWRhZG9zIG7Do28gc2VqYSBlc3BlY2lmaWNhZG8sIHNlcsOhIGZlaXRvIHVtYSByZXF1aXNpw6fDo28gdXRpbGl6YW5kbyBvIGBzZXJ2aWNlQXBpYCBkYSBzZWd1aW50ZSBmb3JtYTpcclxuICogYGBgXHJcbiAqIEdFVCB7ZW5kLXBvaW50fS9tZXRhZGF0YT90eXBlPWxpc3QmdmVyc2lvbj17dmVyc2lvbn1cclxuICogYGBgXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1wYWdlLWR5bmFtaWMtdGFibGUtYmFzaWNcIiB0aXRsZT1cIlBPIFBhZ2UgRHluYW1pYyBUYWJsZSBCYXNpY1wiPlxyXG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtYmFzaWMvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS1iYXNpYy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XHJcbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS1iYXNpYy9zYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLWJhc2ljLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XHJcbiAqIDwvZXhhbXBsZT5cclxuICpcclxuICogPGV4YW1wbGUgbmFtZT1cInBvLXBhZ2UtZHluYW1pYy10YWJsZS1wZW9wbGVcIiB0aXRsZT1cIlBPIFBhZ2UgRHluYW1pYyBUYWJsZSAtIFBlb3BsZVwiPlxyXG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtcGVvcGxlL3NhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtcGVvcGxlLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cclxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLXBlb3BsZS9zYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLXBlb3BsZS5jb21wb25lbnQudHNcIj4gPC9maWxlPlxyXG4gKiA8L2V4YW1wbGU+XHJcbiAqXHJcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1wYWdlLWR5bmFtaWMtdGFibGUtdXNlcnNcIiB0aXRsZT1cIlBPIFBhZ2UgRHluYW1pYyBUYWJsZSAtIFVzZXJzXCI+XHJcbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS11c2Vycy9zYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLXVzZXJzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cclxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLXVzZXJzL3NhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtdXNlcnMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cclxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLXVzZXJzL3NhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtdXNlcnMuc2VydmljZS50c1wiPiA8L2ZpbGU+XHJcbiAqIDwvZXhhbXBsZT5cclxuICpcclxuICogPGV4YW1wbGUgbmFtZT1cInBvLXBhZ2UtZHluYW1pYy10YWJsZS1ob3RlbHNcIiB0aXRsZT1cIlBPIFBhZ2UgRHluYW1pYyBUYWJsZSAtIEhvdGVsc1wiPlxyXG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtaG90ZWxzL3NhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtaG90ZWxzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cclxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLWhvdGVscy9zYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLWhvdGVscy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxyXG4gKiA8L2V4YW1wbGU+XHJcbiAqXHJcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1wYWdlLWR5bmFtaWMtdGFibGUtZHJhZy1hbmQtZHJvcFwiIHRpdGxlPVwiUE8gUGFnZSBEeW5hbWljIFRhYmxlIC0gRHJhZyBhbmQgRHJvcFwiPlxyXG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtZHJhZy1hbmQtZHJvcC9zYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLWRyYWctYW5kLWRyb3AuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxyXG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtZHJhZy1hbmQtZHJvcC9zYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLWRyYWctYW5kLWRyb3AuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cclxuICogPC9leGFtcGxlPlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdwby1wYWdlLWR5bmFtaWMtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wby1wYWdlLWR5bmFtaWMtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHByb3ZpZGVyczogW1BvUGFnZUR5bmFtaWNTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUG9QYWdlRHluYW1pY1RhYmxlQ29tcG9uZW50IGV4dGVuZHMgUG9QYWdlRHluYW1pY0xpc3RCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIC8qKlxyXG4gICAqIEZ1bsOnw6NvIG91IHNlcnZpw6dvIHF1ZSBzZXLDoSBleGVjdXRhZG8gbmEgaW5pY2lhbGl6YcOnw6NvIGRvIGNvbXBvbmVudGUuXHJcbiAgICpcclxuICAgKiBBIHByb3ByaWVkYWRlIGFjZWl0YSBvcyBzZWd1aW50ZXMgdGlwb3M6XHJcbiAgICogLSBgc3RyaW5nYDogKkVuZHBvaW50KiB1c2FkbyBwZWxvIGNvbXBvbmVudGUgcGFyYSByZXF1aXNpw6fDo28gdmlhIGBQT1NUYC5cclxuICAgKiAtIGBmdW5jdGlvbmA6IE3DqXRvZG8gcXVlIHNlcsOhIGV4ZWN1dGFkby5cclxuICAgKlxyXG4gICAqIE8gcmV0b3JubyBkZXN0YSBmdW7Dp8OjbyBkZXZlIHNlciBkbyB0aXBvIGBQb1BhZ2VEeW5hbWljVGFibGVPcHRpb25zYCxcclxuICAgKiBvbmRlIG8gdXN1w6FyaW8gcG9kZXLDoSBjdXN0b21pemFyIG5vdm9zIGNhbXBvcywgYnJlYWRjcnVtYiwgdGl0bGUgZSBhY3Rpb25zXHJcbiAgICpcclxuICAgKiBQb3IgZXhlbXBsbzpcclxuICAgKlxyXG4gICAqIGBgYFxyXG4gICAqIGdldFBhZ2VPcHRpb25zKCk6IFBvUGFnZUR5bmFtaWNUYWJsZU9wdGlvbnMge1xyXG4gICAqIHJldHVybiB7XHJcbiAgICogICBhY3Rpb25zOlxyXG4gICAqICAgICB7IG5ldzogJ25ldycsIGVkaXQ6ICdlZGl0LzppZCcsIHJlbW92ZTogdHJ1ZSB9LFxyXG4gICAqICAgZmllbGRzOiBbXHJcbiAgICogICAgIHsgcHJvcGVydHk6ICdpZENhcmQnLCBncmlkQ29sdW1uczogNiB9XHJcbiAgICogICBdXHJcbiAgICogfTtcclxuICAgKiB9XHJcbiAgICpcclxuICAgKiBgYGBcclxuICAgKiBQYXJhIHJlZmVyZW5jaWFyIGEgc3VhIGZ1bsOnw6NvIHV0aWxpemUgYSBwcm9wcmllZGFkZSBgYmluZGAsIHBvciBleGVtcGxvOlxyXG4gICAqIGBgYFxyXG4gICAqICBbcC1sb2FkXT1cIm9uTG9hZE9wdGlvbnMuYmluZCh0aGlzKVwiXHJcbiAgICogYGBgXHJcbiAgICovXHJcbiAgQElucHV0KCdwLWxvYWQnKSBvbkxvYWQ6IHN0cmluZyB8ICgoKSA9PiBQb1BhZ2VEeW5hbWljVGFibGVPcHRpb25zKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQG9wdGlvbmFsXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKlxyXG4gICAqIE1hbnTDqW0gbmEgbW9kYWwgZGUgYEJ1c2NhIEF2YW7Dp2FkYWAgb3MgdmFsb3JlcyBwcmVlbmNoaWRvcyBkbyDDumx0aW1vIGZpbHRybyByZWFsaXphZG8gcGVsbyB1c3XDoXJpby5cclxuICAgKlxyXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcclxuICAgKi9cclxuICBASW5wdXRCb29sZWFuKClcclxuICBASW5wdXQoJ3Ata2VlcC1maWx0ZXJzJylcclxuICBrZWVwRmlsdGVyczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBAb3B0aW9uYWxcclxuICAgKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqXHJcbiAgICogRGVmaW5lIHF1ZSBhIGNvbHVuYSBkZSBhw6fDtWVzIGZpY2Fyw6Egbm8gbGFkbyBkaXJlaXRvIGRhIHRhYmVsYS5cclxuICAgKlxyXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcclxuICAgKi9cclxuICBASW5wdXRCb29sZWFuKClcclxuICBASW5wdXQoJ3AtYWN0aW9ucy1yaWdodCcpXHJcbiAgYWN0aW9uUmlnaHQ/OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBvcHRpb25hbFxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICpcclxuICAgKiBQZXJtaXRlIGEgdXRpbGl6YcOnw6NvIGRhIHBlc3F1aXNhIHLDoXBpZGEganVudG8gY29tIGEgcGVzcXVpc2EgYXZhbsOnYWRhLlxyXG4gICAqXHJcbiAgICogRGVzdGEgZm9ybWEsIGFvIHRlciB1bWEgcGVzcXVpc2EgYXZhbsOnYWRhIGVzdGFiZWxlY2lkYSBlIHNlclxyXG4gICAqIHByZWVuY2hpZG8gYSBwZXNxdWlzYSByw6FwaWRhLCBvIGZpbHRybyBzZXLDoSBjb25jYXRlbmFkbyBhZGljaW9uYW5kbyBhIHBlc3F1aXNhXHJcbiAgICogcsOhcGlkYSB0YW1iw6ltIG5hIGxpc3RhIGRlIGBkaXNjbGFpbWVyc2AgYSBhcGxpY2FuZG8gdW1hIG5vdmEgYnVzY2EgY29tIGEgY29uY2F0ZW5hw6fDo28uXHJcbiAgICpcclxuICAgKiBQb3IgZXhlbXBsbywgY29tIG9zIHNlZ3VpbnRlcyBmaWx0cm9zIGFwbGljYWRvczpcclxuICAgKiAgIC0gZmlsdHJvIGF2YW7Dp2FkbzogYHsgbmFtZTogJ01pa2UnLCBhZ2U6ICcxMicgfWBcclxuICAgKiAgIC0gZmlsdHJvIHLDoXBpZG86IGB7IHNlYXJjaDogJ3BhcGVyJyB9YFxyXG4gICAqXHJcbiAgICogQSByZXF1aXNpw6fDo28gZG9zIGRhZG9zIG5hIEFQSSBmaWNhcsOhIGNvbSBvcyBwYXLDom1ldHJvczpcclxuICAgKiBgYGBcclxuICAgKiBwYWdlPTEmcGFnZVNpemU9MTAmbmFtZT1NaWtlJmFnZT0xMiZzZWFyY2g9cGFwZXJcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcclxuICAgKi9cclxuICBASW5wdXRCb29sZWFuKClcclxuICBASW5wdXQoJ3AtY29uY2F0LWZpbHRlcnMnKVxyXG4gIGNvbmNhdEZpbHRlcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogQG9wdGlvbmFsXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKlxyXG4gICAqIE9jdWx0YSBvIGJvdMOjbyBwYXJhIHJlbW92ZXIgdG9kb3Mgb3MgKmRpc2NsYWltZXJzKiBkbyBncnVwby5cclxuICAgKlxyXG4gICAqID4gUG9yIHBhZHLDo28sIG8gbWVzbW8gw6kgZXhpYmlkbyDDoCBwYXJ0aXIgZGUgZG9pcyBvdSBtYWlzICpkaXNjbGFpbWVycyogY29tIGEgb3DDp8OjbyBgaGlkZUNsb3NlYCBoYWJpbGl0YWRhLlxyXG4gICAqXHJcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxyXG4gICAqL1xyXG4gIEBJbnB1dEJvb2xlYW4oKVxyXG4gIEBJbnB1dCgncC1oaWRlLXJlbW92ZS1hbGwtZGlzY2xhaW1lcicpXHJcbiAgaGlkZVJlbW92ZUFsbERpc2NsYWltZXI/OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBvcHRpb25hbFxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICpcclxuICAgKiBTZSB2ZXJkYWRlaXJvLCBhdGl2YSBhIGZ1bmNpb25hbGlkYWRlIGRlIHNjcm9sbCBpbmZpbml0byBwYXJhIGEgdGFiZWxhIGUgbyBib3TDo28gXCJDYXJyZWdhciBNYWlzXCIgZGVpeGFyw6EgZGUgc2VyIGV4aWJpZG8uIEFvIGNoZWdhciBubyBmaW0gZGEgdGFiZWxhXHJcbiAgICogZXhlY3V0YXLDoSBhIGZ1bsOnw6NvIGBwLXNob3ctbW9yZWAuXHJcbiAgICpcclxuICAgKiAqKlJlZ3JhcyBkZSB1dGlsaXphw6fDo286KipcclxuICAgKiAgLSBPIHNjcm9sbCBpbmZpbml0byBzw7MgZnVuY2lvbmEgcGFyYSB0YWJlbGFzIHF1ZSB1dGlsaXphbSBhIHByb3ByaWVkYWRlIGBwLWhlaWdodGAgZSBxdWUgcG9zc3VlbSBvIHNjcm9sbCBqw6EgbmEgY2FyZ2EgaW5pY2lhbCBkb3MgZGFkb3MuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXHJcbiAgICovXHJcbiAgQElucHV0Qm9vbGVhbigpXHJcbiAgQElucHV0KCdwLWluZmluaXRlLXNjcm9sbCcpXHJcbiAgaW5maW5pdGVTY3JvbGw/OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGhhc05leHQgPSBmYWxzZTtcclxuICBpdGVtcyA9IFtdO1xyXG4gIGxpdGVyYWxzO1xyXG4gIHBhZ2VBY3Rpb25zOiBBcnJheTxQb1BhZ2VBY3Rpb24+ID0gW107XHJcbiAgdGFibGVBY3Rpb25zOiBBcnJheTxQb1RhYmxlQWN0aW9uPiA9IFtdO1xyXG5cclxuICBwcml2YXRlIF9hY3Rpb25zOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zID0ge307XHJcbiAgcHJpdmF0ZSBfcGFnZUN1c3RvbUFjdGlvbnM6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbUFjdGlvbj4gPSBbXTtcclxuICBwcml2YXRlIF9oZWlnaHQ6IG51bWJlcjtcclxuICBwcml2YXRlIF9vbGRRdWlja1NlYXJjaFBhcmFtOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfcXVpY2tTZWFyY2hQYXJhbTogc3RyaW5nID0gJ3NlYXJjaCc7XHJcbiAgcHJpdmF0ZSBfcXVpY2tTZWFyY2hWYWx1ZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX3F1aWNrU2VhcmNoV2lkdGg6IG51bWJlcjtcclxuICBwcml2YXRlIF90YWJsZUN1c3RvbUFjdGlvbnM6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbVRhYmxlQWN0aW9uPiA9IFtdO1xyXG5cclxuICBwcml2YXRlIHBhZ2U6IG51bWJlciA9IDE7XHJcbiAgcHJpdmF0ZSBjdXJyZW50UGFnZTogbnVtYmVyID0gMTtcclxuICBwcml2YXRlIGl0ZW1TZWxlY3RlZEFjdGlvbjtcclxuICBwcml2YXRlIHBhcmFtcyA9IHt9O1xyXG4gIHByaXZhdGUgc29ydGVkQ29sdW1uOiBQb1RhYmxlQ29sdW1uU29ydDtcclxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgcHJpdmF0ZSBoYXNDdXN0b21BY3Rpb25XaXRoU2VsZWN0YWJsZSA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9jdXN0b21QYWdlTGlzdEFjdGlvbnM6IEFycmF5PFBvUGFnZUFjdGlvbj4gPSBbXTtcclxuICBwcml2YXRlIF9jdXN0b21UYWJsZUFjdGlvbnM6IEFycmF5PFBvVGFibGVBY3Rpb24+ID0gW107XHJcbiAgcHJpdmF0ZSBfZGVmYXVsdFBhZ2VBY3Rpb25zOiBBcnJheTxQb1BhZ2VBY3Rpb24+ID0gW107XHJcbiAgcHJpdmF0ZSBfZGVmYXVsdFRhYmxlQWN0aW9uczogQXJyYXk8UG9UYWJsZUFjdGlvbj4gPSBbXTtcclxuICBwcml2YXRlIF9oaWRlQ2xvc2VEaXNjbGFpbWVyczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG4gIHByaXZhdGUgX2RyYWdnYWJsZSA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIHNldCBkZWZhdWx0UGFnZUFjdGlvbnModmFsdWU6IEFycmF5PFBvUGFnZUFjdGlvbj4pIHtcclxuICAgIHRoaXMuX2RlZmF1bHRQYWdlQWN0aW9ucyA9IHZhbHVlO1xyXG4gICAgdGhpcy51cGRhdGVQYWdlQWN0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXQgZGVmYXVsdFRhYmxlQWN0aW9ucyh2YWx1ZTogQXJyYXk8UG9UYWJsZUFjdGlvbj4pIHtcclxuICAgIHRoaXMuX2RlZmF1bHRUYWJsZUFjdGlvbnMgPSB2YWx1ZTtcclxuICAgIHRoaXMudXBkYXRlVGFibGVBY3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldCBjdXN0b21QYWdlTGlzdEFjdGlvbnModmFsdWU6IEFycmF5PFBvUGFnZUFjdGlvbj4pIHtcclxuICAgIHRoaXMuX2N1c3RvbVBhZ2VMaXN0QWN0aW9ucyA9IHZhbHVlO1xyXG4gICAgdGhpcy51cGRhdGVQYWdlQWN0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXQgY3VzdG9tVGFibGVBY3Rpb25zKHZhbHVlOiBBcnJheTxQb1RhYmxlQWN0aW9uPikge1xyXG4gICAgdGhpcy5fY3VzdG9tVGFibGVBY3Rpb25zID0gdmFsdWU7XHJcbiAgICB0aGlzLnVwZGF0ZVRhYmxlQWN0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQG9wdGlvbmFsXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKlxyXG4gICAqIEHDp8O1ZXMgZGEgcMOhZ2luYSBlIGRhIHRhYmVsYS5cclxuICAgKiA+IENhc28gdXRpbGl6YXIgYSBhw6fDo28gcGFkcsOjbyBkZSBleGNsdWlyLCBhIG1lc21hIHNlcsOhIGV4aWJpZGEgcG9yIMO6bHRpbW8gbmEgdGFiZWxhLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgncC1hY3Rpb25zJykgc2V0IGFjdGlvbnModmFsdWU6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnMpIHtcclxuICAgIHRoaXMuX2FjdGlvbnMgPSB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPiAwID8gdmFsdWUgOiB7fTtcclxuXHJcbiAgICB0aGlzLnNldFBhZ2VBY3Rpb25zKHRoaXMuYWN0aW9ucyk7XHJcbiAgICB0aGlzLnNldFJlbW92ZUFsbEFjdGlvbigpO1xyXG4gICAgdGhpcy5zZXRUYWJsZUFjdGlvbnModGhpcy5hY3Rpb25zKTtcclxuICB9XHJcblxyXG4gIGdldCBhY3Rpb25zKCk6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnMge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdGlvbnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAb3B0aW9uYWxcclxuICAgKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqXHJcbiAgICogTGlzdGEgZGUgYcOnw7VlcyBjdXN0b21pemFkYXMgZGEgcMOhZ2luYSBxdWUgc2Vyw6NvIGluY29ycG9yYWRhcyDDoHMgYcOnw7Vlc1xyXG4gICAqIGluZm9ybWFkYXMgYXRyYXbDqXMgZGEgcHJvcHJpZWRhZGUgYHAtYWN0aW9uc2AuXHJcbiAgICpcclxuICAgKiBFc3NhcyBhw6fDtWVzIGZpY2FtIGxvY2FsaXphZGFzIG5hIHBhcnRlIHN1cGVyaW9yIGRhIHDDoWdpbmEgZW0gYm90w7VlcyBjb20gYcOnw7Vlcy5cclxuICAgKlxyXG4gICAqIEV4ZW1wbG8gZGUgdXRpbGl6YcOnw6NvOlxyXG4gICAqIGBgYFxyXG4gICAqIFtcclxuICAgKiAgeyBsYWJlbDogJ0V4cG9ydCcsIGFjdGlvbjogdGhpcy5leHBvcnQuYmluZCh0aGlzKSB9LFxyXG4gICAqICB7IGxhYmVsOiAnUHJpbnQnLCBhY3Rpb246IHRoaXMucHJpbnQuYmluZCh0aGlzKSB9XHJcbiAgICogXTtcclxuICAgKiBgYGBcclxuICAgKi9cclxuICBASW5wdXQoJ3AtcGFnZS1jdXN0b20tYWN0aW9ucycpIHNldCBwYWdlQ3VzdG9tQWN0aW9ucyh2YWx1ZTogQXJyYXk8UG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tQWN0aW9uPikge1xyXG4gICAgdGhpcy5fcGFnZUN1c3RvbUFjdGlvbnMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW107XHJcblxyXG4gICAgdGhpcy5jdXN0b21QYWdlTGlzdEFjdGlvbnMgPSB0aGlzLnRyYW5zZm9ybUN1c3RvbUFjdGlvbnNUb1BhZ2VMaXN0QWN0aW9uKHRoaXMucGFnZUN1c3RvbUFjdGlvbnMpO1xyXG4gICAgdGhpcy5oYXNDdXN0b21BY3Rpb25XaXRoU2VsZWN0YWJsZSA9IHRoaXMucGFnZUN1c3RvbUFjdGlvbnMuc29tZShjdXN0b21BY3Rpb24gPT4gY3VzdG9tQWN0aW9uLnNlbGVjdGFibGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBhZ2VDdXN0b21BY3Rpb25zKCk6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbUFjdGlvbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VDdXN0b21BY3Rpb25zO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQG9wdGlvbmFsXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKlxyXG4gICAqIExpc3RhIGRlIGHDp8O1ZXMgY3VzdG9taXphZGFzIG5hIHRhYmVsYSBkYSBww6FnaW5hIHF1ZSBzZXLDo28gaW5jb3Jwb3JhZGFzIMOgcyBhw6fDtWVzXHJcbiAgICogaW5mb3JtYWRhcyBhdHJhdsOpcyBkYSBwcm9wcmllZGFkZSBgcC1hY3Rpb25zYC5cclxuICAgKlxyXG4gICAqIEV4ZW1wbG8gZGUgdXRpbGl6YcOnw6NvOlxyXG4gICAqIGBgYFxyXG4gICAqIFtcclxuICAgKiAgeyBsYWJlbDogJ0FwcGx5IGRpc2NvdW50JywgYWN0aW9uOiB0aGlzLmFwcGx5RGlzY291bnQuYmluZCh0aGlzKSB9LFxyXG4gICAqICB7IGxhYmVsOiAnRGV0YWlscycsIGFjdGlvbjogdGhpcy5kZXRhaWxzLmJpbmQodGhpcykgfVxyXG4gICAqIF07XHJcbiAgICogYGBgXHJcbiAgICogPiBDYXNvIHV0aWxpemFyIGEgYcOnw6NvIHBhZHLDo28gZGUgZXhjbHVpciwgYSBtZXNtYSBzZXLDoSBleGliaWRhIHBvciDDumx0aW1vIG5hIHRhYmVsYS5cclxuICAgKi9cclxuICBASW5wdXQoJ3AtdGFibGUtY3VzdG9tLWFjdGlvbnMnKSBzZXQgdGFibGVDdXN0b21BY3Rpb25zKHZhbHVlOiBBcnJheTxQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21UYWJsZUFjdGlvbj4pIHtcclxuICAgIHRoaXMuX3RhYmxlQ3VzdG9tQWN0aW9ucyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXTtcclxuXHJcbiAgICB0aGlzLmN1c3RvbVRhYmxlQWN0aW9ucyA9IHRoaXMudHJhbnNmb3JtVGFibGVDdXN0b21BY3Rpb25zVG9UYWJsZUFjdGlvbnModGhpcy50YWJsZUN1c3RvbUFjdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRhYmxlQ3VzdG9tQWN0aW9ucygpOiBBcnJheTxQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21UYWJsZUFjdGlvbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlQ3VzdG9tQWN0aW9ucztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBvcHRpb25hbFxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICpcclxuICAgKiBMYXJndXJhIGRvIGNhbXBvIGRlIGJ1c2NhLCB1dGlsaXphbmRvIG8gKkdyaWQgU3lzdGVtKixcclxuICAgKiBlIGxpbWl0YWRvIGFvIG3DoXhpbW8gZGUgNiBjb2x1bmFzLiBPIHRhbWFuaG8gbcOtbmltbyDDqSBjb250cm9sYWRvXHJcbiAgICogY29uZm9ybWUgcmVzb2x1w6fDo28gZGUgdGVsYSBwYXJhIG1hbnRlciBhIGNvbnNpc3TDqm5jaWEgZG8gbGF5b3V0LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgncC1xdWljay1zZWFyY2gtd2lkdGgnKSBzZXQgcXVpY2tTZWFyY2hXaWR0aCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9xdWlja1NlYXJjaFdpZHRoID0gdXRpbC5jb252ZXJ0VG9JbnQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHF1aWNrU2VhcmNoV2lkdGgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9xdWlja1NlYXJjaFdpZHRoO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQG9wdGlvbmFsXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKlxyXG4gICAqIERlZmluZSBhIGFsdHVyYSBkYSB0YWJlbGEgZW0gKnBpeGVscyogZSBmaXhhIG8gY2FiZcOnYWxoby5cclxuICAgKi9cclxuICBASW5wdXQoJ3AtaGVpZ2h0Jykgc2V0IGhlaWdodCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9oZWlnaHQgPSB1dGlsLmNvbnZlcnRUb0ludCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBnZXQgaGVpZ2h0KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQG9wdGlvbmFsXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKlxyXG4gICAqIExpc3RhIGRlIGZpbHRyb3MgcXVlIHRlcsOjbyBhIG9ww6fDo28gZGUgZmVjaGFyIG9jdWx0YWRhXHJcbiAgICogZW0gc2V1IHJlc3BlY3Rpdm8gZGlzY2xhaW1lci4gVXRpbGl6YXIgbyBhdHJpYnV0byBgcHJvcGVydHlgIGRvIGNhbXBvLlxyXG4gICAqXHJcbiAgICogRXhlbXBsbyBkZSB1dGlsaXphw6fDo286XHJcbiAgICogYGBgXHJcbiAgICogWydjaXR5JywnbmFtZSddO1xyXG4gICAqIGBgYFxyXG4gICAqL1xyXG4gIEBJbnB1dCgncC1oaWRlLWNsb3NlLWRpc2NsYWltZXJzJykgc2V0IGhpZGVDbG9zZURpc2NsYWltZXJzKHZhbHVlOiBBcnJheTxzdHJpbmc+KSB7XHJcbiAgICB0aGlzLl9oaWRlQ2xvc2VEaXNjbGFpbWVycyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXTtcclxuICB9XHJcblxyXG4gIGdldCBoaWRlQ2xvc2VEaXNjbGFpbWVycygpOiBBcnJheTxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLl9oaWRlQ2xvc2VEaXNjbGFpbWVycztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBvcHRpb25hbFxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICpcclxuICAgKiBJZGVudGlmaWNhZG9yIGRvIHBhcsOibWV0cm8gZW52aWFkbyBhbyBzZXJ2acOnbyBhbyByZWFsaXphciB1bWEgYnVzY2EgcsOhcGlkYS5cclxuICAgKlxyXG4gICAqIEBkZWZhdWx0ICdzZWFyY2gnXHJcbiAgICovXHJcbiAgQElucHV0KCdwLXF1aWNrLXNlYXJjaC1wYXJhbScpIHNldCBxdWlja1NlYXJjaFBhcmFtKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3F1aWNrU2VhcmNoUGFyYW0gPSB2YWx1ZSA/PyAnc2VhcmNoJztcclxuICB9XHJcblxyXG4gIGdldCBxdWlja1NlYXJjaFBhcmFtKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcXVpY2tTZWFyY2hQYXJhbTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBvcHRpb25hbFxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICpcclxuICAgKiBWYWxvciBwYWRyw6NvIG5hIGJ1c2NhIHLDoXBpZGEgYW8gaW5pY2lhbGl6YXIgbyBjb21wb25lbnRlXHJcbiAgICpcclxuICAgKi9cclxuICBASW5wdXQoJ3AtcXVpY2stc2VhcmNoLXZhbHVlJykgc2V0IHF1aWNrU2VhcmNoVmFsdWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fcXVpY2tTZWFyY2hWYWx1ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHF1aWNrU2VhcmNoVmFsdWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9xdWlja1NlYXJjaFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQG9wdGlvbmFsXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKlxyXG4gICAqIE9iamV0byBjb20gYXMgbGl0ZXJhaXMgdXNhZGFzIG5vIGBwby1wYWdlLWR5bmFtaWMtdGFibGVgLlxyXG4gICAqXHJcbiAgICogRXhpc3RlbSBkdWFzIG1hbmVpcmFzIGRlIGN1c3RvbWl6YXIgbyBjb21wb25lbnRlLCBwYXNzYW5kbyB1bSBvYmpldG8gY29tIHRvZGFzIGFzIGxpdGVyYWlzIGRpc3BvbsOtdmVpczpcclxuICAgKlxyXG4gICAqIGBgYFxyXG4gICAqICBjb25zdCBjdXN0b21MaXRlcmFsczogUG9QYWdlRHluYW1pY1NlYXJjaExpdGVyYWxzID0ge1xyXG4gICAqICAgIGRpc2NsYWltZXJHcm91cFRpdGxlOiAnRmlsdHJvcyBhcGxpY2Fkb3M6JyxcclxuICAgKiAgICBmaWx0ZXJUaXRsZTogJ0ZpbHRybyBhdmFuw6dhZG8nLFxyXG4gICAqICAgIGZpbHRlckNhbmNlbExhYmVsOiAnRmVjaGFyJyxcclxuICAgKiAgICBmaWx0ZXJDb25maXJtTGFiZWw6ICdBcGxpY2FyJyxcclxuICAgKiAgICBxdWlja1NlYXJjaExhYmVsOiAnVmFsb3IgcGVzcXVpc2FkbzonLFxyXG4gICAqICAgIHNlYXJjaFBsYWNlaG9sZGVyOiAnUGVzcXVpc2UgYXF1aSdcclxuICAgKiAgfTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIE91IHBhc3NhbmRvIGFwZW5hcyBhcyBsaXRlcmFpcyBxdWUgZGVzZWphIGN1c3RvbWl6YXI6XHJcbiAgICpcclxuICAgKiBgYGBcclxuICAgKiAgY29uc3QgY3VzdG9tTGl0ZXJhbHM6IFBvUGFnZUR5bmFtaWNTZWFyY2hMaXRlcmFscyA9IHtcclxuICAgKiAgICBmaWx0ZXJUaXRsZTogJ0ZpbHRybyBhdmFuw6dhZG8nXHJcbiAgICogIH07XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBFIHBhcmEgY2FycmVnYXIgYXMgbGl0ZXJhaXMgY3VzdG9taXphZGFzLCBiYXN0YSBhcGVuYXMgcGFzc2FyIG8gb2JqZXRvIHBhcmEgbyBjb21wb25lbnRlLlxyXG4gICAqXHJcbiAgICogYGBgXHJcbiAgICogPHBvLXBhZ2UtZHluYW1pYy10YWJsZVxyXG4gICAqICAgW3AtbGl0ZXJhbHNdPVwiY3VzdG9tTGl0ZXJhbHNcIj5cclxuICAgKiA8L3BvLXBhZ2UtZHluYW1pYy10YWJsZT5cclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqID4gTyB2YWxvciBwYWRyw6NvIHNlcsOhIHRyYWR1emlkbyBkZSBhY29yZG8gY29tIG8gaWRpb21hIGNvbmZpZ3VyYWRvIG5vIFtgUG9JMThuU2VydmljZWBdKC9kb2N1bWVudGF0aW9uL3BvLWkxOG4pIG91ICpicm93c2VyKi5cclxuICAgKi9cclxuICBASW5wdXQoJ3AtbGl0ZXJhbHMnKSBzZWFyY2hMaXRlcmFsczogUG9QYWdlRHluYW1pY1NlYXJjaExpdGVyYWxzO1xyXG5cclxuICAvKipcclxuICAgKiBAb3B0aW9uYWxcclxuICAgKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqXHJcbiAgICogSGFiaWxpdGEgbyBtb2RvIGRyYWcgYW5kIGRyb3AgcGFyYSBhcyBjb2x1bmFzIGRhIHRhYmVsYS5cclxuICAgKlxyXG4gICAqL1xyXG4gIEBJbnB1dCgncC1kcmFnZ2FibGUnKSBzZXQgZHJhZ2dhYmxlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9kcmFnZ2FibGUgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBkcmFnZ2FibGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZHJhZ2dhYmxlO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHBvRGlhbG9nU2VydmljZTogUG9EaWFsb2dTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwb05vdGlmaWNhdGlvbjogUG9Ob3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwb1BhZ2VEeW5hbWljU2VydmljZTogUG9QYWdlRHluYW1pY1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBvUGFnZUN1c3RvbWl6YXRpb25TZXJ2aWNlOiBQb1BhZ2VDdXN0b21pemF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgcG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2U6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlLFxyXG4gICAgbGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuXHJcbiAgICBjb25zdCBsYW5ndWFnZSA9IGxhbmd1YWdlU2VydmljZS5nZXRTaG9ydExhbmd1YWdlKCk7XHJcblxyXG4gICAgdGhpcy5saXRlcmFscyA9IHtcclxuICAgICAgLi4ucG9QYWdlRHluYW1pY1RhYmxlTGl0ZXJhbHNEZWZhdWx0W3BvTG9jYWxlRGVmYXVsdF0sXHJcbiAgICAgIC4uLnBvUGFnZUR5bmFtaWNUYWJsZUxpdGVyYWxzRGVmYXVsdFtsYW5ndWFnZV1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubG9hZERhdGFGcm9tQVBJKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgb25BZHZhbmNlZFNlYXJjaChmaWx0ZXIpIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5sb2FkRGF0YSh7IHBhZ2U6IDEsIC4uLmZpbHRlciB9KS5zdWJzY3JpYmUoKSk7XHJcbiAgICB0aGlzLnBhcmFtcyA9IGZpbHRlcjtcclxuXHJcbiAgICBpZiAodGhpcy5rZWVwRmlsdGVycykge1xyXG4gICAgICB0aGlzLnVwZGF0ZUZpbHRlclZhbHVlKGZpbHRlcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZURpc2NsYWltZXJzKGRpc2NsYWltZXJzKSB7XHJcbiAgICBjb25zdCBmaWx0ZXIgPSB7fTtcclxuXHJcbiAgICBkaXNjbGFpbWVycy5mb3JFYWNoKGRpc2NsYWltZXIgPT4ge1xyXG4gICAgICBmaWx0ZXJbZGlzY2xhaW1lci5wcm9wZXJ0eV0gPSBkaXNjbGFpbWVyLnZhbHVlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5vbkFkdmFuY2VkU2VhcmNoKGZpbHRlcik7XHJcbiAgfVxyXG5cclxuICBvblF1aWNrU2VhcmNoKHRlcm1UeXBlZEluUXVpY2tTZWFyY2gpIHtcclxuICAgIGNvbnN0IHF1aWNrU2VhcmNoUGFyYW0gPSB0ZXJtVHlwZWRJblF1aWNrU2VhcmNoID8geyBbdGhpcy5xdWlja1NlYXJjaFBhcmFtXTogdGVybVR5cGVkSW5RdWlja1NlYXJjaCB9IDoge307XHJcbiAgICB0aGlzLnBhcmFtcyA9IHRoaXMuY29uY2F0RmlsdGVycyA/IHsgLi4udGhpcy5wYXJhbXMsIC4uLnF1aWNrU2VhcmNoUGFyYW0gfSA6IHsgLi4ucXVpY2tTZWFyY2hQYXJhbSB9O1xyXG5cclxuICAgIGlmICh0aGlzLl9vbGRRdWlja1NlYXJjaFBhcmFtIGluIHRoaXMucGFyYW1zICYmIHRoaXMuX29sZFF1aWNrU2VhcmNoUGFyYW0gIT09IHRoaXMucXVpY2tTZWFyY2hQYXJhbSkge1xyXG4gICAgICBkZWxldGUgdGhpcy5wYXJhbXNbdGhpcy5fb2xkUXVpY2tTZWFyY2hQYXJhbV07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fb2xkUXVpY2tTZWFyY2hQYXJhbSA9IHRoaXMucXVpY2tTZWFyY2hQYXJhbTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5sb2FkRGF0YSh0ZXJtVHlwZWRJblF1aWNrU2VhcmNoID8geyBwYWdlOiAxLCAuLi50aGlzLnBhcmFtcyB9IDogdW5kZWZpbmVkKS5zdWJzY3JpYmUoKSk7XHJcbiAgfVxyXG5cclxuICBvblNvcnQoc29ydGVkQ29sdW1uOiBQb1RhYmxlQ29sdW1uU29ydCkge1xyXG4gICAgaWYgKHRoaXMuaGVpZ2h0KSB7XHJcbiAgICAgIGNvbnN0IG9yZGVyID0gc29ydGVkQ29sdW1uLnR5cGUgPT09ICdhc2NlbmRpbmcnID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICB1dGlsLnNvcnRBcnJheU9mT2JqZWN0cyh0aGlzLml0ZW1zLCBzb3J0ZWRDb2x1bW4uY29sdW1uLnByb3BlcnR5LCBvcmRlcik7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNvcnRlZENvbHVtbiA9IHNvcnRlZENvbHVtbjtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlVmlzaWJsZUNvbHVtbnModmFsdWUpIHtcclxuICAgIHRoaXMuY2hhbmdlVmlzaWJsZUNvbHVtbnMuZW1pdCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBvbkNvbHVtblJlc3RvcmVNYW5hZ2VyKHZhbHVlOiBBcnJheTxTdHJpbmc+KSB7XHJcbiAgICB0aGlzLmNvbHVtblJlc3RvcmVNYW5hZ2VyLmVtaXQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgb25Tb3J0Qnkoc29ydGVkQ29sdW1uOiBQb1RhYmxlQ29sdW1uU29ydCkge1xyXG4gICAgdGhpcy5zb3J0QnkuZW1pdChzb3J0ZWRDb2x1bW4pO1xyXG4gIH1cclxuXHJcbiAgc2hvd01vcmUoKSB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMubG9hZERhdGEoeyBwYWdlOiArK3RoaXMucGFnZSwgLi4udGhpcy5wYXJhbXMgfSkuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVuYWJsZVNlbGVjdGlvblRhYmxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFzQWN0aW9uUmVtb3ZlQWxsIHx8IHRoaXMuaGFzQ3VzdG9tQWN0aW9uV2l0aFNlbGVjdGFibGU7XHJcbiAgfVxyXG5cclxuICBnZXQgaGFzQWN0aW9uUmVtb3ZlQWxsKCkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5hY3Rpb25zLnJlbW92ZUFsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bsOnw6NvIHF1ZSByZWFsaXphIGEgYXR1YWxpemHDp8OjbyBkb3MgZGFkb3MgZGEgdGFiZWxhLlxyXG4gICAqXHJcbiAgICogUGFyYSB1dGlsaXrDoS1sYSDDqSBuZWNlc3PDoXJpbyBjYXB0dXJhciBhIGluc3TDom5jaWEgZG8gYHBhZ2UgZHluYW1pYyB0YWJsZWAsIGNvbW8gcG9yIGV4ZW1wbG86XHJcbiAgICpcclxuICAgKiBgYGAgaHRtbFxyXG4gICAqIDxwby1wYWdlLWR5bmFtaWMtdGFibGUgI2R5bmFtaWNUYWJsZSBbcC1zZXJ2aWNlLWFwaV09XCJzZXJ2aWNlQXBpXCI+PC9wby1wYWdlLWR5bmFtaWMtdGFibGU+XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBgYGAgamF2YXNjcmlwdFxyXG4gICAqIGltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUNvbXBvbmVudCwgUG9EeW5hbWljRm9ybUZpZWxkIH0gZnJvbSAnQHBvLXVpL25nLWNvbXBvbmVudHMnO1xyXG4gICAqXHJcbiAgICogLi4uXHJcbiAgICpcclxuICAgKiBAVmlld0NoaWxkKCdkeW5hbWljVGFibGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBkeW5hbWljVGFibGU6IFBvUGFnZUR5bmFtaWNUYWJsZUNvbXBvbmVudDtcclxuICAgKlxyXG4gICAqIHBhZ2VDdXN0b21BY3Rpb25zOiBBcnJheTxQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21BY3Rpb24+ID0gW1xyXG4gICAqIHtcclxuICAgKiAgIGxhYmVsOiAnVXBkYXRlJyxcclxuICAgKiAgIGFjdGlvbjogdGhpcy51cGRhdGVUYWJsZS5iaW5kKHRoaXMpLFxyXG4gICAqICAgaWNvbjogJ3BvLWljb24tcmVmcmVzaCdcclxuICAgKiB9XVxyXG4gICAqXHJcbiAgICogdXBkYXRlVGFibGUoKSB7XHJcbiAgICogICB0aGlzLmR5bmFtaWNUYWJsZS51cGRhdGVEYXRhVGFibGUoKTtcclxuICAgKiB9XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7e3BhZ2U6IG51bWJlciwga2V5OiB2YWx1ZSB9fSBmaWx0ZXIgUHJvcHJpZWRhZGUgcGFyYSBlbnZpbyBkZSB1bSBmaWx0cm8gY3VzdG9taXphZG8uXHJcbiAgICogRXhlbXBsbyBkZSBlbnZpbzpcclxuICAgKlxyXG4gICAqYGBgXHJcbiAgICogdGhpcy5keW5hbWljVGFibGUudXBkYXRlRGF0YVRhYmxlKHtwYWdlOiAzLCBzZWFyY2g6ICdCcmFzaWwnfSk7XHJcbiAgICogYGBgXHJcbiAgICogQ2FzbyBuw6NvIHNlamEgcGFzc2FkbyB1bSBmaWx0cm8gY3VzdG9taXphZG8gcGFyYSBvIG3DqXRvZG8gYHVwZGF0ZURhdGFUYWJsZWAgYSB0YWJlbGEgc2Vyw6EgYXR1YWxpemFkYSBjb25mb3JtZSBhIHDDoWdpbmEgZG8gdWx0aW1vIGl0ZW0gbW9kaWZpY2Fkby5cclxuICAgKi9cclxuICBwdWJsaWMgdXBkYXRlRGF0YVRhYmxlKGZpbHRlcj86IGFueSkge1xyXG4gICAgY29uc3QgaW5kZXhJdGVtU2VsZWN0ZWQgPSB0aGlzLml0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0gPT09IHRoaXMuaXRlbVNlbGVjdGVkQWN0aW9uKTtcclxuICAgIGNvbnN0IHBhZ2VOdW1iZXIgPSBNYXRoLmZsb29yKGluZGV4SXRlbVNlbGVjdGVkIC8gUEFHRV9TSVpFX0RFRkFVTFQpO1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2VOdW1iZXIgPCAwID8gdGhpcy5jdXJyZW50UGFnZSA6IHBhZ2VOdW1iZXIgKyAxO1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZmlsdGVyKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5sb2FkRGF0YShmaWx0ZXIpLnN1YnNjcmliZSgpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5sb2FkRGF0YSh7IHBhZ2U6IHRoaXMuY3VycmVudFBhZ2UsIC4uLnRoaXMucGFyYW1zIH0pLnN1YnNjcmliZSgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uZmlybVJlbW92ZShcclxuICAgIGFjdGlvblJlbW92ZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1sncmVtb3ZlJ10sXHJcbiAgICBhY3Rpb25CZWZvcmVSZW1vdmU6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ2JlZm9yZVJlbW92ZSddLFxyXG4gICAgaXRlbVxyXG4gICkge1xyXG4gICAgY29uc3QgY29uZmlybU9wdGlvbnM6IFBvRGlhbG9nQ29uZmlybU9wdGlvbnMgPSB7XHJcbiAgICAgIHRpdGxlOiB0aGlzLmxpdGVyYWxzLmNvbmZpcm1SZW1vdmVUaXRsZSxcclxuICAgICAgbWVzc2FnZTogdGhpcy5saXRlcmFscy5jb25maXJtUmVtb3ZlTWVzc2FnZSxcclxuICAgICAgY29uZmlybTogdGhpcy5yZW1vdmUuYmluZCh0aGlzLCBpdGVtLCBhY3Rpb25SZW1vdmUsIGFjdGlvbkJlZm9yZVJlbW92ZSlcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5wb0RpYWxvZ1NlcnZpY2UuY29uZmlybShjb25maXJtT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbmZpcm1SZW1vdmVBbGwoXHJcbiAgICBhY3Rpb25SZW1vdmVBbGw6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ3JlbW92ZSddLFxyXG4gICAgYWN0aW9uQmVmb3JlUmVtb3ZlQWxsOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydiZWZvcmVSZW1vdmUnXVxyXG4gICkge1xyXG4gICAgY29uc3QgY29uZmlybU9wdGlvbnM6IFBvRGlhbG9nQ29uZmlybU9wdGlvbnMgPSB7XHJcbiAgICAgIHRpdGxlOiB0aGlzLmxpdGVyYWxzLmNvbmZpcm1SZW1vdmVBbGxUaXRsZSxcclxuICAgICAgbWVzc2FnZTogdGhpcy5saXRlcmFscy5jb25maXJtUmVtb3ZlQWxsTWVzc2FnZSxcclxuICAgICAgY29uZmlybTogdGhpcy5yZW1vdmVBbGwuYmluZCh0aGlzLCBhY3Rpb25SZW1vdmVBbGwsIGFjdGlvbkJlZm9yZVJlbW92ZUFsbClcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5wb0RpYWxvZ1NlcnZpY2UuY29uZmlybShjb25maXJtT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdFVuaXF1ZUtleShpdGVtKSB7XHJcbiAgICBjb25zdCBrZXlzID0gdXRpbC5tYXBPYmplY3RCeVByb3BlcnRpZXMoaXRlbSwgdGhpcy5rZXlzKTtcclxuXHJcbiAgICByZXR1cm4gdXRpbC52YWx1ZXNGcm9tT2JqZWN0KGtleXMpLmpvaW4oJ3wnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0T3JkZXJQYXJhbShzb3J0ZWRDb2x1bW46IFBvVGFibGVDb2x1bW5Tb3J0ID0geyB0eXBlOiB1bmRlZmluZWQgfSkge1xyXG4gICAgY29uc3QgeyBjb2x1bW4sIHR5cGUgfSA9IHNvcnRlZENvbHVtbjtcclxuXHJcbiAgICBpZiAoIWNvbHVtbikge1xyXG4gICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFBvVGFibGVDb2x1bW5Tb3J0VHlwZS5EZXNjZW5kaW5nKSB7XHJcbiAgICAgIHJldHVybiB7IG9yZGVyOiBgLSR7Y29sdW1uLnByb3BlcnR5fWAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geyBvcmRlcjogYCR7Y29sdW1uLnByb3BlcnR5fWAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZERhdGEocGFyYW1zOiB7IHBhZ2U/OiBudW1iZXI7IHNlYXJjaD86IHN0cmluZyB9ID0ge30pIHtcclxuICAgIGlmICghdGhpcy5zZXJ2aWNlQXBpKSB7XHJcbiAgICAgIHRoaXMucG9Ob3RpZmljYXRpb24uZXJyb3IodGhpcy5saXRlcmFscy5sb2FkRGF0YUVycm9yTm90aWZpY2F0aW9uKTtcclxuICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG9yZGVyUGFyYW0gPSB0aGlzLmdldE9yZGVyUGFyYW0odGhpcy5zb3J0ZWRDb2x1bW4pO1xyXG4gICAgY29uc3QgZGVmYXVsdFBhcmFtczogYW55ID0geyBwYWdlOiAxLCBwYWdlU2l6ZTogUEFHRV9TSVpFX0RFRkFVTFQgfTtcclxuICAgIGNvbnN0IGZ1bGxQYXJhbXM6IGFueSA9IHsgLi4uZGVmYXVsdFBhcmFtcywgLi4ucGFyYW1zLCAuLi5vcmRlclBhcmFtIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2UuZ2V0UmVzb3VyY2VzKGZ1bGxQYXJhbXMpLnBpcGUoXHJcbiAgICAgIHRhcChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgbGV0IG5ld0FycmF5O1xyXG4gICAgICAgIGlmIChmdWxsUGFyYW1zLnBhZ2UgPT09IDEpIHtcclxuICAgICAgICAgIG5ld0FycmF5ID0gcmVtb3ZlRHVwbGljYXRlSXRlbXNXaXRoQXJyYXlLZXkocmVzcG9uc2UuaXRlbXMsIHJlc3BvbnNlLml0ZW1zLCB0aGlzLmtleXMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBuZXdBcnJheSA9IHJlbW92ZUR1cGxpY2F0ZUl0ZW1zV2l0aEFycmF5S2V5KHRoaXMuaXRlbXMsIHJlc3BvbnNlLml0ZW1zLCB0aGlzLmtleXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLml0ZW1zID0gbmV3QXJyYXkgPyBbLi4ubmV3QXJyYXldIDogdGhpcy5pdGVtcztcclxuICAgICAgICB0aGlzLnBhZ2UgPSBmdWxsUGFyYW1zLnBhZ2U7XHJcbiAgICAgICAgdGhpcy5oYXNOZXh0ID0gcmVzcG9uc2UuaGFzTmV4dDtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE1ldGFkYXRhKFxyXG4gICAgc2VydmljZUFwaUZyb21Sb3V0ZTogc3RyaW5nLFxyXG4gICAgb25Mb2FkOiBVcmxPclBvQ3VzdG9taXphdGlvbkZ1bmN0aW9uXHJcbiAgKTogT2JzZXJ2YWJsZTxQb1BhZ2VEeW5hbWljVGFibGVNZXRhRGF0YT4ge1xyXG4gICAgaWYgKHNlcnZpY2VBcGlGcm9tUm91dGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2UuZ2V0TWV0YWRhdGE8UG9QYWdlRHluYW1pY1RhYmxlTWV0YURhdGE+KCkucGlwZShcclxuICAgICAgICB0YXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgdGhpcy5hdXRvUm91dGVyID0gcmVzcG9uc2UuYXV0b1JvdXRlciB8fCB0aGlzLmF1dG9Sb3V0ZXI7XHJcbiAgICAgICAgICB0aGlzLmFjdGlvbnMgPSByZXNwb25zZS5hY3Rpb25zIHx8IHRoaXMuYWN0aW9ucztcclxuICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYiA9IHJlc3BvbnNlLmJyZWFkY3J1bWIgfHwgdGhpcy5icmVhZGNydW1iO1xyXG4gICAgICAgICAgdGhpcy5maWVsZHMgPSByZXNwb25zZS5maWVsZHMgfHwgdGhpcy5maWVsZHM7XHJcbiAgICAgICAgICB0aGlzLnRpdGxlID0gcmVzcG9uc2UudGl0bGUgfHwgdGhpcy50aXRsZTtcclxuICAgICAgICAgIHRoaXMucGFnZUN1c3RvbUFjdGlvbnMgPSByZXNwb25zZS5wYWdlQ3VzdG9tQWN0aW9ucyB8fCB0aGlzLnBhZ2VDdXN0b21BY3Rpb25zO1xyXG4gICAgICAgICAgdGhpcy50YWJsZUN1c3RvbUFjdGlvbnMgPSByZXNwb25zZS50YWJsZUN1c3RvbUFjdGlvbnMgfHwgdGhpcy50YWJsZUN1c3RvbUFjdGlvbnM7XHJcbiAgICAgICAgICB0aGlzLmtlZXBGaWx0ZXJzID0gcmVzcG9uc2Uua2VlcEZpbHRlcnMgfHwgdGhpcy5rZWVwRmlsdGVycztcclxuICAgICAgICAgIHRoaXMuY29uY2F0RmlsdGVycyA9IHJlc3BvbnNlLmNvbmNhdEZpbHRlcnMgfHwgdGhpcy5jb25jYXRGaWx0ZXJzO1xyXG4gICAgICAgICAgdGhpcy5oaWRlUmVtb3ZlQWxsRGlzY2xhaW1lciA9IHJlc3BvbnNlLmhpZGVSZW1vdmVBbGxEaXNjbGFpbWVyIHx8IHRoaXMuaGlkZVJlbW92ZUFsbERpc2NsYWltZXI7XHJcbiAgICAgICAgICB0aGlzLmhpZGVDbG9zZURpc2NsYWltZXJzID0gcmVzcG9uc2UuaGlkZUNsb3NlRGlzY2xhaW1lcnMgfHwgdGhpcy5oaWRlQ2xvc2VEaXNjbGFpbWVycztcclxuICAgICAgICAgIHRoaXMucXVpY2tTZWFyY2hXaWR0aCA9IHJlc3BvbnNlLnF1aWNrU2VhcmNoV2lkdGggfHwgdGhpcy5xdWlja1NlYXJjaFdpZHRoO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmxvYWRPcHRpb25zT25Jbml0aWFsaXplKG9uTG9hZCkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMubG9hZE9wdGlvbnNPbkluaXRpYWxpemUob25Mb2FkKTtcclxuICB9XHJcblxyXG4gIC8vIEB0b2RvIFZhbGlkYXIgcm90YXMgbmEgbcOjbyBwb2lzIHNlIGV4aXN0aXIgdW1hIHJvdGEgJyoqJyBvIGNhdGNoIGRvIG5hdmlnYXRpb24gbsOjbyBmdW5jaW9uYS5cclxuICBwcml2YXRlIG5hdmlnYXRlVG8oXHJcbiAgICByb3V0ZTogeyBwYXRoOiBzdHJpbmc7IGNvbXBvbmVudD87IHVybD86IHN0cmluZzsgcGFyYW1zPzogYW55IH0sXHJcbiAgICBmb3JjZVN0b3BBdXRvUm91dGVyOiBib29sZWFuID0gZmFsc2VcclxuICApIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtyb3V0ZS51cmwgfHwgcm91dGUucGF0aF0sIHsgcXVlcnlQYXJhbXM6IHJvdXRlLnBhcmFtcyB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgIGlmIChmb3JjZVN0b3BBdXRvUm91dGVyIHx8ICF0aGlzLmF1dG9Sb3V0ZXIpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucm91dGVyLmNvbmZpZy51bnNoaWZ0KDxSb3V0ZT57XHJcbiAgICAgICAgcGF0aDogcm91dGUucGF0aCxcclxuICAgICAgICBjb21wb25lbnQ6IHJvdXRlLmNvbXBvbmVudCxcclxuICAgICAgICBkYXRhOiB7IHNlcnZpY2VBcGk6IHRoaXMuc2VydmljZUFwaSwgYXV0b1JvdXRlcjogdHJ1ZSB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5uYXZpZ2F0ZVRvKHJvdXRlLCB0cnVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVDb25jYXRlbmF0ZWRVcmwoY29uY2F0S2V5czogYm9vbGVhbiwgdXJsOiBzdHJpbmcsIHNlbGVjdGVkSXRlbSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBrZXlzID0gdGhpcy5rZXlzLm1hcChrZXkgPT4gZW5jb2RlVVJJQ29tcG9uZW50KHNlbGVjdGVkSXRlbVtrZXldKSkuam9pbigpO1xyXG4gICAgcmV0dXJuIGNvbmNhdEtleXMgPyBgJHt1cmx9LyR7a2V5c31gIDogdXJsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvcGVuRGV0YWlsKGFjdGlvbjogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snZGV0YWlsJ10sIGl0ZW0pIHtcclxuICAgIGNvbnN0IGlkID0gdGhpcy5mb3JtYXRVbmlxdWVLZXkoaXRlbSk7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxyXG4gICAgICB0aGlzLnBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlXHJcbiAgICAgICAgLmJlZm9yZURldGFpbCh0aGlzLmFjdGlvbnMuYmVmb3JlRGV0YWlsLCBpZCwgaXRlbSlcclxuICAgICAgICAuc3Vic2NyaWJlKChiZWZvcmVEZXRhaWxSZXN1bHQ6IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZURldGFpbCkgPT5cclxuICAgICAgICAgIHRoaXMuZXhlY3V0ZURldGFpbChhY3Rpb24sIGJlZm9yZURldGFpbFJlc3VsdCwgaWQsIGl0ZW0pXHJcbiAgICAgICAgKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhlY3V0ZURldGFpbChcclxuICAgIGFjdGlvbjogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snZGV0YWlsJ10sXHJcbiAgICBiZWZvcmVEZXRhaWxSZXN1bHQ/OiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVOZXcsXHJcbiAgICBpZD86IHN0cmluZyxcclxuICAgIGl0ZW0/OiBhbnlcclxuICApIHtcclxuICAgIGNvbnN0IGJlZm9yZSA9IGJlZm9yZURldGFpbFJlc3VsdCA/PyB7fTtcclxuICAgIGNvbnN0IGFsbG93QWN0aW9uID0gdHlwZW9mIGJlZm9yZS5hbGxvd0FjdGlvbiA9PT0gJ2Jvb2xlYW4nID8gYmVmb3JlLmFsbG93QWN0aW9uIDogdHJ1ZTtcclxuICAgIGNvbnN0IHsgbmV3VXJsIH0gPSBiZWZvcmU7XHJcblxyXG4gICAgaWYgKGFsbG93QWN0aW9uICYmIGFjdGlvbikge1xyXG4gICAgICBpZiAobmV3VXJsKSB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZ2V0UGF0aEZyb21OZXdVcmwobmV3VXJsLCBpZCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVUbyh7IHBhdGggfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMucmVzb2x2ZVVybChpdGVtLCBhY3Rpb24pO1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGVUbyh7IHBhdGg6IGFjdGlvbiwgdXJsLCBjb21wb25lbnQ6IFBvUGFnZUR5bmFtaWNEZXRhaWxDb21wb25lbnQgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYWN0aW9uKGlkLCBpdGVtKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYXRoRnJvbU5ld1VybChuZXdVcmw6IHN0cmluZywgaWQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAobmV3VXJsLmluY2x1ZGVzKCc6aWQnKSkge1xyXG4gICAgICByZXR1cm4gbmV3VXJsLnJlcGxhY2UoLzppZC9nLCBpZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3VXJsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvcGVuRHVwbGljYXRlKGFjdGlvbkR1cGxpY2F0ZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snZHVwbGljYXRlJ10sIGl0ZW06IGFueSkge1xyXG4gICAgY29uc3QgaWQgPSB0aGlzLmZvcm1hdFVuaXF1ZUtleShpdGVtKTtcclxuICAgIGNvbnN0IGR1cGxpY2F0ZXMgPSB1dGlsLnJlbW92ZUtleXNQcm9wZXJ0aWVzKHRoaXMua2V5cywgdXRpbC5tYXBPYmplY3RCeVByb3BlcnRpZXMoaXRlbSwgdGhpcy5kdXBsaWNhdGVzKSk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcclxuICAgICAgdGhpcy5wb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZVxyXG4gICAgICAgIC5iZWZvcmVEdXBsaWNhdGUodGhpcy5hY3Rpb25zLmJlZm9yZUR1cGxpY2F0ZSwgaWQsIGR1cGxpY2F0ZXMpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoYmVmb3JlRHVwbGljYXRlUmVzdWx0OiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVEdXBsaWNhdGUpID0+XHJcbiAgICAgICAgICB0aGlzLmV4ZWN1dGVEdXBsaWNhdGUoYWN0aW9uRHVwbGljYXRlLCBiZWZvcmVEdXBsaWNhdGVSZXN1bHQsIGR1cGxpY2F0ZXMpXHJcbiAgICAgICAgKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhlY3V0ZUR1cGxpY2F0ZShcclxuICAgIGFjdGlvbkR1cGxpY2F0ZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snZHVwbGljYXRlJ10sXHJcbiAgICBiZWZvcmVEdXBsaWNhdGVSZXN1bHQ6IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZUR1cGxpY2F0ZSxcclxuICAgIGR1cGxpY2F0ZXM6IGFueVxyXG4gICkge1xyXG4gICAgY29uc3QgYmVmb3JlID0gYmVmb3JlRHVwbGljYXRlUmVzdWx0ID8/IHt9O1xyXG4gICAgY29uc3QgYWxsb3dBY3Rpb24gPSB0eXBlb2YgYmVmb3JlLmFsbG93QWN0aW9uID09PSAnYm9vbGVhbicgPyBiZWZvcmUuYWxsb3dBY3Rpb24gOiB0cnVlO1xyXG4gICAgY29uc3QgYmVmb3JlRHVwbGljYXRlUmVzb3VyY2UgPSBiZWZvcmUucmVzb3VyY2U7XHJcbiAgICBjb25zdCBuZXdBY3Rpb24gPSBiZWZvcmUubmV3VXJsID8/IGFjdGlvbkR1cGxpY2F0ZTtcclxuXHJcbiAgICBpZiAoYWxsb3dBY3Rpb24gJiYgYWN0aW9uRHVwbGljYXRlKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgYmVmb3JlRHVwbGljYXRlUmVzb3VyY2UgPT09ICdvYmplY3QnICYmIGJlZm9yZUR1cGxpY2F0ZVJlc291cmNlICE9PSBudWxsKSB7XHJcbiAgICAgICAgZHVwbGljYXRlcyA9IHV0aWwucmVtb3ZlS2V5c1Byb3BlcnRpZXModGhpcy5rZXlzLCBiZWZvcmVEdXBsaWNhdGVSZXNvdXJjZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlb2YgbmV3QWN0aW9uID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoOiBuZXdBY3Rpb24sIHBhcmFtczogeyBkdXBsaWNhdGU6IEpTT04uc3RyaW5naWZ5KGR1cGxpY2F0ZXMpIH0gfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBuZXdBY3Rpb24oZHVwbGljYXRlcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9wZW5FZGl0KGFjdGlvbkVkaXQ6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ2VkaXQnXSwgaXRlbSkge1xyXG4gICAgY29uc3QgaWQgPSB0aGlzLmZvcm1hdFVuaXF1ZUtleShpdGVtKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxyXG4gICAgICB0aGlzLnBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlXHJcbiAgICAgICAgLmJlZm9yZUVkaXQodGhpcy5hY3Rpb25zLmJlZm9yZUVkaXQsIGlkLCBpdGVtKVxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgc3dpdGNoTWFwKChiZWZvcmVFZGl0UmVzdWx0OiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVFZGl0KSA9PlxyXG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVFZGl0QWN0aW9uKGFjdGlvbkVkaXQsIGJlZm9yZUVkaXRSZXN1bHQsIGl0ZW0sIGlkKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIClcclxuICAgICAgICAuc3Vic2NyaWJlKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4ZWN1dGVFZGl0QWN0aW9uKFxyXG4gICAgYWN0aW9uOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydlZGl0J10sXHJcbiAgICBiZWZvcmVFZGl0UmVzdWx0OiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVFZGl0LFxyXG4gICAgaXRlbTogYW55LFxyXG4gICAgaWQ6IHN0cmluZ1xyXG4gICkge1xyXG4gICAgY29uc3QgbmV3RWRpdEFjdGlvbiA9IGJlZm9yZUVkaXRSZXN1bHQ/Lm5ld1VybCA/PyBhY3Rpb247XHJcbiAgICBjb25zdCBhbGxvd0FjdGlvbiA9IGJlZm9yZUVkaXRSZXN1bHQ/LmFsbG93QWN0aW9uID8/IHRydWU7XHJcblxyXG4gICAgaWYgKCFhbGxvd0FjdGlvbikge1xyXG4gICAgICByZXR1cm4gRU1QVFk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBuZXdFZGl0QWN0aW9uID09PSAnc3RyaW5nJykge1xyXG4gICAgICB0aGlzLm9wZW5FZGl0VXJsKG5ld0VkaXRBY3Rpb24sIGl0ZW0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgdXBkYXRlZEl0ZW0gPSBuZXdFZGl0QWN0aW9uKGlkLCBpdGVtKTtcclxuICAgICAgaWYgKHR5cGVvZiB1cGRhdGVkSXRlbSA9PT0gJ29iamVjdCcgJiYgdXBkYXRlZEl0ZW0gIT09IG51bGwpIHtcclxuICAgICAgICB0aGlzLm1vZGlmeVVJVGFibGVJdGVtKGl0ZW0sIHV0aWwucmVtb3ZlS2V5c1Byb3BlcnRpZXModGhpcy5rZXlzLCB1cGRhdGVkSXRlbSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIEVNUFRZO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvcGVuRWRpdFVybChwYXRoOiBzdHJpbmcsIGl0ZW0pIHtcclxuICAgIGNvbnN0IHVybCA9IHRoaXMucmVzb2x2ZVVybChpdGVtLCBwYXRoKTtcclxuXHJcbiAgICB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoLCB1cmwgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1vZGlmeVVJVGFibGVJdGVtKGN1cnJlbnRJdGVtLCBuZXdJdGVtVmFsdWUpIHtcclxuICAgIGNvbnN0IHRhYmxlSXRlbSA9IHRoaXMuaXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gY3VycmVudEl0ZW0pO1xyXG4gICAgdGhpcy5pdGVtc1t0YWJsZUl0ZW1dID0geyAuLi5jdXJyZW50SXRlbSwgLi4ubmV3SXRlbVZhbHVlIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9wZW5OZXcoYWN0aW9uTmV3OiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWyduZXcnXSkge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcclxuICAgICAgdGhpcy5wb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZVxyXG4gICAgICAgIC5iZWZvcmVOZXcodGhpcy5hY3Rpb25zLmJlZm9yZU5ldylcclxuICAgICAgICAuc3Vic2NyaWJlKChiZWZvcmVOZXdSZXN1bHQ6IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZU5ldykgPT4gdGhpcy5leGVjdXRlTmV3KGFjdGlvbk5ldywgYmVmb3JlTmV3UmVzdWx0KSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4ZWN1dGVOZXcoYWN0aW9uTmV3OiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWyduZXcnXSwgYmVmb3JlTmV3UmVzdWx0PzogUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlTmV3KSB7XHJcbiAgICBjb25zdCBiZWZvcmUgPSBiZWZvcmVOZXdSZXN1bHQgPz8ge307XHJcbiAgICBjb25zdCBhbGxvd0FjdGlvbiA9IHR5cGVvZiBiZWZvcmUuYWxsb3dBY3Rpb24gPT09ICdib29sZWFuJyA/IGJlZm9yZS5hbGxvd0FjdGlvbiA6IHRydWU7XHJcbiAgICBjb25zdCB7IG5ld1VybCB9ID0gYmVmb3JlO1xyXG5cclxuICAgIGlmIChhbGxvd0FjdGlvbiAmJiBhY3Rpb25OZXcpIHtcclxuICAgICAgaWYgKG5ld1VybCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoOiBuZXdVcmwgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlb2YgYWN0aW9uTmV3ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoOiBhY3Rpb25OZXcgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBhY3Rpb25OZXcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhc28gZXhpc3RhIG1haXMgZGUgdW0gaWRlbnRpZmljYWRvciwgc2Vyw6EgY29uY2F0ZW5hZG8gY29tICd8Jy5cclxuICAgKlxyXG4gICAqIEV4OiB7IGlkOiAxLCBjb21wYW55OiAncG8nIH1cclxuICAgKlxyXG4gICAqIFBhcmEgbyBlbmRwb2ludCAvcmVzb3VyY2VzLzppZCBzZXLDoSBleGVjdXRhZGEgYSB1cmwgL3Jlc291cmNlcy8xfHBvXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZW1vdmUoXHJcbiAgICBpdGVtLFxyXG4gICAgYWN0aW9uUmVtb3ZlOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydyZW1vdmUnXSxcclxuICAgIGFjdGlvbkJlZm9yZVJlbW92ZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snYmVmb3JlUmVtb3ZlJ11cclxuICApIHtcclxuICAgIGNvbnN0IHVuaXF1ZUtleSA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KGl0ZW0pO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXHJcbiAgICAgIHRoaXMucG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2VcclxuICAgICAgICAuYmVmb3JlUmVtb3ZlKGFjdGlvbkJlZm9yZVJlbW92ZSwgdW5pcXVlS2V5LCBpdGVtKVxyXG4gICAgICAgIC5waXBlKHN3aXRjaE1hcChiZWZvcmVSZW1vdmUgPT4gdGhpcy5kZWxldGVBY3Rpb24oaXRlbSwgYWN0aW9uUmVtb3ZlLCBiZWZvcmVSZW1vdmUpKSlcclxuICAgICAgICAuc3Vic2NyaWJlKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRlbGV0ZUFjdGlvbihcclxuICAgIGl0ZW0sXHJcbiAgICBhY3Rpb25SZW1vdmU6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ3JlbW92ZSddLFxyXG4gICAgYmVmb3JlUmVtb3ZlOiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVSZW1vdmVcclxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgeyBhbGxvd0FjdGlvbiwgbmV3VXJsIH0gPSBiZWZvcmVSZW1vdmUgfHwge307XHJcbiAgICBjb25zdCBhbGxvdyA9IGFsbG93QWN0aW9uID8/IHRydWU7XHJcblxyXG4gICAgaWYgKGFsbG93KSB7XHJcbiAgICAgIGxldCB1bmlxdWVLZXkgPSB0aGlzLmZvcm1hdFVuaXF1ZUtleShpdGVtKTtcclxuICAgICAgY29uc3QgcmVzb3VyY2VUb1JlbW92ZUtleSA9IHRoaXMucmV0dXJuUmVzb3VyY2VzS2V5cyhbaXRlbV0pO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBhY3Rpb25SZW1vdmUgPT09ICdib29sZWFuJyB8fCBuZXdVcmwpIHtcclxuICAgICAgICB1bmlxdWVLZXkgPSBuZXdVcmwgPyB1bmRlZmluZWQgOiB1bmlxdWVLZXk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2VcclxuICAgICAgICAgIC5kZWxldGVSZXNvdXJjZSh1bmlxdWVLZXksIG5ld1VybClcclxuICAgICAgICAgIC5waXBlKG1hcCgoKSA9PiB0aGlzLnJlbW92ZUZyb21VSShyZXNvdXJjZVRvUmVtb3ZlS2V5LCB0aGlzLmxpdGVyYWxzLnJlbW92ZVN1Y2Nlc3NOb3RpZmljYXRpb24pKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBvZihhY3Rpb25SZW1vdmUodW5pcXVlS2V5LCBpdGVtKSkucGlwZShcclxuICAgICAgICB0YXAocmVtb3ZlID0+IHtcclxuICAgICAgICAgIGNvbnN0IHJlbW92ZUl0ZW0gPSByZW1vdmUgPz8gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnJlbW92ZUZyb21VSShyZXNvdXJjZVRvUmVtb3ZlS2V5LCB0aGlzLmxpdGVyYWxzLnJlbW92ZVN1Y2Nlc3NOb3RpZmljYXRpb24sIHJlbW92ZUl0ZW0pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9mKHt9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlRnJvbVVJKGl0ZW1zOiBBcnJheTxhbnk+LCBtZXNzYWdlOiBzdHJpbmcsIHJlbW92ZSA9IHRydWUpIHtcclxuICAgIGlmIChyZW1vdmUgPT09IHRydWUgJiYgaXRlbXM/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnJlbW92ZUxvY2FsSXRlbXMoaXRlbXMpO1xyXG4gICAgICB0aGlzLnBvTm90aWZpY2F0aW9uLnN1Y2Nlc3MobWVzc2FnZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZUFsbChcclxuICAgIGFjdGlvblJlbW92ZUFsbDogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1sncmVtb3ZlQWxsJ10sXHJcbiAgICBhY3Rpb25CZWZvcmVSZW1vdmVBbGw6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ2JlZm9yZVJlbW92ZUFsbCddXHJcbiAgKSB7XHJcbiAgICBjb25zdCBvcmlnaW5hbFJlc291cmNlc0tleXMgPSB0aGlzLmdldFNlbGVjdGVkSXRlbXNLZXlzKCk7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxyXG4gICAgICB0aGlzLnBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlXHJcbiAgICAgICAgLmJlZm9yZVJlbW92ZUFsbChhY3Rpb25CZWZvcmVSZW1vdmVBbGwsIG9yaWdpbmFsUmVzb3VyY2VzS2V5cylcclxuICAgICAgICAucGlwZShzd2l0Y2hNYXAoYmVmb3JlUmVtb3ZlID0+IHRoaXMuZGVsZXRlQWxsQWN0aW9uKGFjdGlvblJlbW92ZUFsbCwgYmVmb3JlUmVtb3ZlLCBvcmlnaW5hbFJlc291cmNlc0tleXMpKSlcclxuICAgICAgICAuc3Vic2NyaWJlKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFNlbGVjdGVkSXRlbXNLZXlzKCkge1xyXG4gICAgY29uc3QgcmVzb3VyY2VzID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLiRzZWxlY3RlZCk7XHJcblxyXG4gICAgaWYgKHJlc291cmNlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMucmV0dXJuUmVzb3VyY2VzS2V5cyhyZXNvdXJjZXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXR1cm5SZXNvdXJjZXNLZXlzKHJlc291cmNlcykge1xyXG4gICAgcmV0dXJuIHV0aWwubWFwQXJyYXlCeVByb3BlcnRpZXMocmVzb3VyY2VzLCB0aGlzLmtleXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkZWxldGVBbGxBY3Rpb24oXHJcbiAgICBhY3Rpb25SZW1vdmVBbGw6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ3JlbW92ZUFsbCddLFxyXG4gICAgYmVmb3JlUmVtb3ZlQWxsOiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVSZW1vdmVBbGwsXHJcbiAgICBvcmlnaW5hbFJlc291cmNlczogQXJyYXk8YW55PlxyXG4gICkge1xyXG4gICAgY29uc3QgeyBhbGxvd0FjdGlvbiwgbmV3VXJsLCByZXNvdXJjZXMgfSA9IGJlZm9yZVJlbW92ZUFsbCA/PyB7fTtcclxuICAgIGNvbnN0IGFsbG93ID0gYWxsb3dBY3Rpb24gPz8gdHJ1ZTtcclxuICAgIGNvbnN0IHJlc291cmNlc3RvRGVsZXRlID0gcmVzb3VyY2VzID8/IG9yaWdpbmFsUmVzb3VyY2VzO1xyXG5cclxuICAgIGlmIChhbGxvdyAmJiBBcnJheS5pc0FycmF5KHJlc291cmNlc3RvRGVsZXRlKSkge1xyXG4gICAgICBpZiAodHlwZW9mIGFjdGlvblJlbW92ZUFsbCA9PT0gJ2Jvb2xlYW4nIHx8IG5ld1VybCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvUGFnZUR5bmFtaWNTZXJ2aWNlLmRlbGV0ZVJlc291cmNlcyhyZXNvdXJjZXN0b0RlbGV0ZSwgbmV3VXJsKS5waXBlKFxyXG4gICAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVGcm9tVUkocmVzb3VyY2VzdG9EZWxldGUsIHRoaXMubGl0ZXJhbHMucmVtb3ZlQWxsU3VjY2Vzc05vdGlmaWNhdGlvbik7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG9mKGFjdGlvblJlbW92ZUFsbChyZXNvdXJjZXN0b0RlbGV0ZSkpLnBpcGUoXHJcbiAgICAgICAgdGFwKHJlbW92ZUl0ZW1zID0+IHRoaXMucmVtb3ZlRnJvbVVJKHJlbW92ZUl0ZW1zLCB0aGlzLmxpdGVyYWxzLnJlbW92ZVN1Y2Nlc3NOb3RpZmljYXRpb24pKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvZih7fSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZUxvY2FsSXRlbXMoaXRlbXNLZXlzVG9SZW1vdmUgPSBbXSkge1xyXG4gICAgaWYgKGl0ZW1zS2V5c1RvUmVtb3ZlLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLml0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXRlbUtleSA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KGl0ZW0pO1xyXG4gICAgICAgIHJldHVybiAhaXRlbXNLZXlzVG9SZW1vdmUuZmluZChpdGVtS2V5VG9SZW1vdmUgPT4gdXRpbC52YWx1ZXNGcm9tT2JqZWN0KGl0ZW1LZXlUb1JlbW92ZSkuam9pbignfCcpID09PSBpdGVtS2V5KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc29sdmVVcmwoaXRlbTogYW55LCBwYXRoOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHVuaXF1ZUtleSA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KGl0ZW0pO1xyXG5cclxuICAgIHJldHVybiBwYXRoLnJlcGxhY2UoLzppZC9nLCB1bmlxdWVLZXkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRQYWdlQWN0aW9ucyhhY3Rpb25zOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zKSB7XHJcbiAgICBpZiAoYWN0aW9ucz8ubmV3KSB7XHJcbiAgICAgIHRoaXMuZGVmYXVsdFBhZ2VBY3Rpb25zID0gW3sgbGFiZWw6IHRoaXMubGl0ZXJhbHMucGFnZUFjdGlvbiwgYWN0aW9uOiB0aGlzLm9wZW5OZXcuYmluZCh0aGlzLCBhY3Rpb25zLm5ldykgfV07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRyYW5zZm9ybUN1c3RvbUFjdGlvbnNUb1BhZ2VMaXN0QWN0aW9uKFxyXG4gICAgY3VzdG9tQWN0aW9uczogQXJyYXk8UG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tQWN0aW9uPlxyXG4gICk6IEFycmF5PFBvUGFnZUFjdGlvbj4ge1xyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgIHJldHVybiBjdXN0b21BY3Rpb25zLm1hcChjdXN0b21BY3Rpb24gPT4gKHtcclxuICAgICAgbGFiZWw6IGN1c3RvbUFjdGlvbi5sYWJlbCxcclxuICAgICAgYWN0aW9uOiB0aGlzLmNhbGxQYWdlQ3VzdG9tQWN0aW9uLmJpbmQodGhpcywgY3VzdG9tQWN0aW9uKSxcclxuICAgICAgZGlzYWJsZWQ6IHRoaXMuaXNEaXNhYmxlUGFnZUN1c3RvbUFjdGlvbi5iaW5kKHRoaXMsIGN1c3RvbUFjdGlvbiksXHJcbiAgICAgIC4uLihjdXN0b21BY3Rpb24uaWNvbiAmJiB7IGljb246IGN1c3RvbUFjdGlvbi5pY29uIH0pLFxyXG4gICAgICB2aXNpYmxlOiBjdXN0b21BY3Rpb24udmlzaWJsZVxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cmFuc2Zvcm1UYWJsZUN1c3RvbUFjdGlvbnNUb1RhYmxlQWN0aW9ucyhcclxuICAgIHRhYmxlQ3VzdG9tQWN0aW9uczogQXJyYXk8UG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tVGFibGVBY3Rpb24+XHJcbiAgKTogQXJyYXk8UG9UYWJsZUFjdGlvbj4ge1xyXG4gICAgcmV0dXJuIHRhYmxlQ3VzdG9tQWN0aW9ucy5tYXAodGFibGVDdXN0b21BY3Rpb24gPT4gKHtcclxuICAgICAgbGFiZWw6IHRhYmxlQ3VzdG9tQWN0aW9uLmxhYmVsLFxyXG4gICAgICBpY29uOiB0YWJsZUN1c3RvbUFjdGlvbi5pY29uLFxyXG4gICAgICBhY3Rpb246IHRoaXMuY2FsbFRhYmxlQ3VzdG9tQWN0aW9uLmJpbmQodGhpcywgdGFibGVDdXN0b21BY3Rpb24pLFxyXG4gICAgICBkaXNhYmxlZDogdGFibGVDdXN0b21BY3Rpb24uZGlzYWJsZWQsXHJcbiAgICAgIHZpc2libGU6IHRhYmxlQ3VzdG9tQWN0aW9uLnZpc2libGVcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNEaXNhYmxlUGFnZUN1c3RvbUFjdGlvbihjdXN0b21BY3Rpb24pOiBib29sZWFuIHtcclxuICAgIHJldHVybiBjdXN0b21BY3Rpb24uc2VsZWN0YWJsZSAmJiAhdGhpcy5nZXRTZWxlY3RlZEl0ZW1zS2V5cygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxsUGFnZUN1c3RvbUFjdGlvbihjdXN0b21BY3Rpb246IFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbUFjdGlvbikge1xyXG4gICAgaWYgKGN1c3RvbUFjdGlvbi5hY3Rpb24pIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IGN1c3RvbUFjdGlvbi5zZWxlY3RhYmxlID8gdGhpcy5nZXRTZWxlY3RlZEl0ZW1zS2V5cygpIDogdW5kZWZpbmVkO1xyXG5cclxuICAgICAgY29uc3Qgc2VuZEN1c3RvbUFjdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMucG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2VcclxuICAgICAgICAuY3VzdG9tQWN0aW9uKGN1c3RvbUFjdGlvbi5hY3Rpb24sIHNlbGVjdGVkSXRlbXMpXHJcbiAgICAgICAgLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChzZW5kQ3VzdG9tQWN0aW9uU3Vic2NyaXB0aW9uKTtcclxuICAgIH0gZWxzZSBpZiAoY3VzdG9tQWN0aW9uLnVybCkge1xyXG4gICAgICB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoOiBjdXN0b21BY3Rpb24udXJsIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxsVGFibGVDdXN0b21BY3Rpb24oY3VzdG9tQWN0aW9uOiBQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21UYWJsZUFjdGlvbiwgc2VsZWN0ZWRJdGVtKSB7XHJcbiAgICB0aGlzLml0ZW1TZWxlY3RlZEFjdGlvbiA9IHNlbGVjdGVkSXRlbTtcclxuICAgIGlmIChjdXN0b21BY3Rpb24uYWN0aW9uKSB7XHJcbiAgICAgIGNvbnN0IHNlbmRDdXN0b21BY3Rpb25TdWJzY3JpcHRpb24gPSB0aGlzLnBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlXHJcbiAgICAgICAgLmN1c3RvbUFjdGlvbihjdXN0b21BY3Rpb24uYWN0aW9uLCBzZWxlY3RlZEl0ZW0pXHJcbiAgICAgICAgLnN1YnNjcmliZSh1cGRhdGVkSXRlbSA9PiB7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIHVwZGF0ZWRJdGVtID09PSAnb2JqZWN0JyAmJiB1cGRhdGVkSXRlbSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGlmeVVJVGFibGVJdGVtKHNlbGVjdGVkSXRlbSwgdXRpbC5yZW1vdmVLZXlzUHJvcGVydGllcyh0aGlzLmtleXMsIHVwZGF0ZWRJdGVtKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHNlbmRDdXN0b21BY3Rpb25TdWJzY3JpcHRpb24pO1xyXG4gICAgfSBlbHNlIGlmIChjdXN0b21BY3Rpb24udXJsKSB7XHJcbiAgICAgIGlmIChpc0V4dGVybmFsTGluayhjdXN0b21BY3Rpb24udXJsKSkge1xyXG4gICAgICAgIG9wZW5FeHRlcm5hbExpbmsodGhpcy5jcmVhdGVDb25jYXRlbmF0ZWRVcmwoY3VzdG9tQWN0aW9uLmNvbmNhdEtleXMsIGN1c3RvbUFjdGlvbi51cmwsIHNlbGVjdGVkSXRlbSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGVUbyh7XHJcbiAgICAgICAgICBwYXRoOiB0aGlzLmNyZWF0ZUNvbmNhdGVuYXRlZFVybChjdXN0b21BY3Rpb24uY29uY2F0S2V5cywgY3VzdG9tQWN0aW9uLnVybCwgc2VsZWN0ZWRJdGVtKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFJlbW92ZUFsbEFjdGlvbigpIHtcclxuICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX2FjdGlvbnM7XHJcbiAgICBpZiAodGhpcy5zaG93UmVtb3ZlKGFjdGlvbi5yZW1vdmVBbGwpKSB7XHJcbiAgICAgIHRoaXMuZGVmYXVsdFBhZ2VBY3Rpb25zID0gW1xyXG4gICAgICAgIC4uLnRoaXMuX2RlZmF1bHRQYWdlQWN0aW9ucyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsYWJlbDogdGhpcy5saXRlcmFscy5wYWdlQWN0aW9uUmVtb3ZlQWxsLFxyXG4gICAgICAgICAgYWN0aW9uOiB0aGlzLmNvbmZpcm1SZW1vdmVBbGwuYmluZCh0aGlzLCBhY3Rpb24ucmVtb3ZlQWxsLCBhY3Rpb24uYmVmb3JlUmVtb3ZlQWxsKSxcclxuICAgICAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVSZW1vdmVBbGwuYmluZCh0aGlzKVxyXG4gICAgICAgIH1cclxuICAgICAgXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGlzYWJsZVJlbW92ZUFsbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5nZXRTZWxlY3RlZEl0ZW1zS2V5cygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRUYWJsZUFjdGlvbnMoYWN0aW9uczogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9ucykge1xyXG4gICAgaWYgKGFjdGlvbnMpIHtcclxuICAgICAgY29uc3QgdmlzaWJsZVJlbW92ZSA9IHRoaXMuc2hvd1JlbW92ZShhY3Rpb25zLnJlbW92ZSk7XHJcbiAgICAgIHRoaXMuZGVmYXVsdFRhYmxlQWN0aW9ucyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBhY3Rpb246IHRoaXMub3BlbkRldGFpbC5iaW5kKHRoaXMsIGFjdGlvbnMuZGV0YWlsKSxcclxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxpdGVyYWxzLnRhYmxlQWN0aW9uVmlldyxcclxuICAgICAgICAgIHZpc2libGU6ICEhdGhpcy5fYWN0aW9ucy5kZXRhaWxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGFjdGlvbjogdGhpcy5vcGVuRWRpdC5iaW5kKHRoaXMsIGFjdGlvbnMuZWRpdCksXHJcbiAgICAgICAgICBsYWJlbDogdGhpcy5saXRlcmFscy50YWJsZUFjdGlvbkVkaXQsXHJcbiAgICAgICAgICB2aXNpYmxlOiAhIXRoaXMuX2FjdGlvbnMuZWRpdFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgYWN0aW9uOiB0aGlzLm9wZW5EdXBsaWNhdGUuYmluZCh0aGlzLCBhY3Rpb25zLmR1cGxpY2F0ZSksXHJcbiAgICAgICAgICBsYWJlbDogdGhpcy5saXRlcmFscy50YWJsZUFjdGlvbkR1cGxpY2F0ZSxcclxuICAgICAgICAgIHZpc2libGU6ICEhdGhpcy5fYWN0aW9ucy5kdXBsaWNhdGVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGFjdGlvbjogdGhpcy5jb25maXJtUmVtb3ZlLmJpbmQodGhpcywgYWN0aW9ucy5yZW1vdmUsIGFjdGlvbnMuYmVmb3JlUmVtb3ZlKSxcclxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxpdGVyYWxzLnRhYmxlQWN0aW9uRGVsZXRlLFxyXG4gICAgICAgICAgc2VwYXJhdG9yOiB0cnVlLFxyXG4gICAgICAgICAgdHlwZTogJ2RhbmdlcicsXHJcbiAgICAgICAgICB2aXNpYmxlOiB2aXNpYmxlUmVtb3ZlXHJcbiAgICAgICAgfVxyXG4gICAgICBdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkRGF0YUZyb21BUEkoKSB7XHJcbiAgICBjb25zdCB7IHNlcnZpY2VBcGk6IHNlcnZpY2VBcGlGcm9tUm91dGUsIHNlcnZpY2VNZXRhZGF0YUFwaSwgc2VydmljZUxvYWRBcGkgfSA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YTtcclxuXHJcbiAgICBjb25zdCBvbkxvYWQgPSBzZXJ2aWNlTG9hZEFwaSB8fCB0aGlzLm9uTG9hZDtcclxuICAgIHRoaXMuc2VydmljZUFwaSA9IHNlcnZpY2VBcGlGcm9tUm91dGUgfHwgdGhpcy5zZXJ2aWNlQXBpO1xyXG5cclxuICAgIHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2UuY29uZmlnU2VydmljZUFwaSh7IGVuZHBvaW50OiB0aGlzLnNlcnZpY2VBcGksIG1ldGFkYXRhOiBzZXJ2aWNlTWV0YWRhdGFBcGkgfSk7XHJcblxyXG4gICAgY29uc3QgbWV0YWRhdGEkID0gdGhpcy5nZXRNZXRhZGF0YShzZXJ2aWNlQXBpRnJvbVJvdXRlLCBvbkxvYWQpO1xyXG4gICAgbGV0IGRhdGEkO1xyXG4gICAgaWYgKHRoaXMucXVpY2tTZWFyY2hWYWx1ZSkge1xyXG4gICAgICBjb25zdCBwYXJhbXNRdWlja1NlYXJjaFZhbHVlID0geyBbdGhpcy5xdWlja1NlYXJjaFBhcmFtXTogdGhpcy5xdWlja1NlYXJjaFZhbHVlIH07XHJcbiAgICAgIGRhdGEkID0gdGhpcy5sb2FkRGF0YShwYXJhbXNRdWlja1NlYXJjaFZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRhdGEkID0gdGhpcy5sb2FkRGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXHJcbiAgICAgIG1ldGFkYXRhJFxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5pdGlhbEZpbHRlcnMgPSB0aGlzLmdldEluaXRpYWxWYWx1ZXNGcm9tRmlsdGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIU9iamVjdC5rZXlzKGluaXRpYWxGaWx0ZXJzKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZGF0YSQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBFTVBUWTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SW5pdGlhbFZhbHVlc0Zyb21GaWx0ZXIoKSB7XHJcbiAgICBjb25zdCBpbml0aWFsRmlsdGVycyA9IHRoaXMuZmlsdGVycy5yZWR1Y2UoXHJcbiAgICAgIChyZXN1bHQsIGl0ZW0pID0+IE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7IFtpdGVtLnByb3BlcnR5XTogaXRlbS5pbml0VmFsdWUgfSksXHJcbiAgICAgIHt9XHJcbiAgICApO1xyXG5cclxuICAgIE9iamVjdC5rZXlzKGluaXRpYWxGaWx0ZXJzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgIGlmICghaW5pdGlhbEZpbHRlcnNba2V5XSkge1xyXG4gICAgICAgIGRlbGV0ZSBpbml0aWFsRmlsdGVyc1trZXldO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gaW5pdGlhbEZpbHRlcnM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRPcHRpb25zT25Jbml0aWFsaXplKG9uTG9hZDogVXJsT3JQb0N1c3RvbWl6YXRpb25GdW5jdGlvbikge1xyXG4gICAgaWYgKG9uTG9hZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRQb0R5bmFtaWNQYWdlT3B0aW9ucyhvbkxvYWQpLnBpcGUoXHJcbiAgICAgICAgdGFwKHJlc3BvbnNlUG9PcHRpb24gPT5cclxuICAgICAgICAgIHRoaXMucG9QYWdlQ3VzdG9taXphdGlvblNlcnZpY2UuY2hhbmdlT3JpZ2luYWxPcHRpb25zVG9OZXdPcHRpb25zKHRoaXMsIHJlc3BvbnNlUG9PcHRpb24pXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvZihudWxsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UG9EeW5hbWljUGFnZU9wdGlvbnMob25Mb2FkOiBVcmxPclBvQ3VzdG9taXphdGlvbkZ1bmN0aW9uKTogT2JzZXJ2YWJsZTxQb1BhZ2VEeW5hbWljVGFibGVPcHRpb25zPiB7XHJcbiAgICBjb25zdCBvcmlnaW5hbE9wdGlvbjogUG9QYWdlRHluYW1pY1RhYmxlT3B0aW9ucyA9IHtcclxuICAgICAgZmllbGRzOiB0aGlzLmZpZWxkcyxcclxuICAgICAgYWN0aW9uczogdGhpcy5hY3Rpb25zLFxyXG4gICAgICBicmVhZGNydW1iOiB0aGlzLmJyZWFkY3J1bWIsXHJcbiAgICAgIHRpdGxlOiB0aGlzLnRpdGxlLFxyXG4gICAgICBrZWVwRmlsdGVyczogdGhpcy5rZWVwRmlsdGVycyxcclxuICAgICAgY29uY2F0RmlsdGVyczogdGhpcy5jb25jYXRGaWx0ZXJzLFxyXG4gICAgICBoaWRlUmVtb3ZlQWxsRGlzY2xhaW1lcjogdGhpcy5oaWRlUmVtb3ZlQWxsRGlzY2xhaW1lcixcclxuICAgICAgaGlkZUNsb3NlRGlzY2xhaW1lcnM6IHRoaXMuaGlkZUNsb3NlRGlzY2xhaW1lcnMsXHJcbiAgICAgIHBhZ2VDdXN0b21BY3Rpb25zOiB0aGlzLnBhZ2VDdXN0b21BY3Rpb25zLFxyXG4gICAgICB0YWJsZUN1c3RvbUFjdGlvbnM6IHRoaXMudGFibGVDdXN0b21BY3Rpb25zLFxyXG4gICAgICBxdWlja1NlYXJjaFdpZHRoOiB0aGlzLnF1aWNrU2VhcmNoV2lkdGhcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcGFnZU9wdGlvblNjaGVtYTogUG9QYWdlRHluYW1pY09wdGlvbnNTY2hlbWE8UG9QYWdlRHluYW1pY1RhYmxlT3B0aW9ucz4gPSB7XHJcbiAgICAgIHNjaGVtYTogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWVQcm9wOiAnZmllbGRzJyxcclxuICAgICAgICAgIG1lcmdlOiB0cnVlLFxyXG4gICAgICAgICAga2V5Rm9yTWVyZ2U6ICdwcm9wZXJ0eSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWVQcm9wOiAnYWN0aW9ucycsXHJcbiAgICAgICAgICBtZXJnZTogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZVByb3A6ICdicmVhZGNydW1iJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZVByb3A6ICd0aXRsZSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWVQcm9wOiAna2VlcEZpbHRlcnMnXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lUHJvcDogJ3F1aWNrU2VhcmNoV2lkdGgnXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lUHJvcDogJ2NvbmNhdEZpbHRlcnMnXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lUHJvcDogJ2hpZGVSZW1vdmVBbGxEaXNjbGFpbWVyJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZVByb3A6ICdoaWRlQ2xvc2VEaXNjbGFpbWVycydcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWVQcm9wOiAncGFnZUN1c3RvbUFjdGlvbnMnLFxyXG4gICAgICAgICAgbWVyZ2U6IHRydWUsXHJcbiAgICAgICAgICBrZXlGb3JNZXJnZTogJ2xhYmVsJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZVByb3A6ICd0YWJsZUN1c3RvbUFjdGlvbnMnLFxyXG4gICAgICAgICAgbWVyZ2U6IHRydWUsXHJcbiAgICAgICAgICBrZXlGb3JNZXJnZTogJ2xhYmVsJ1xyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5wb1BhZ2VDdXN0b21pemF0aW9uU2VydmljZS5nZXRDdXN0b21PcHRpb25zKG9uTG9hZCwgb3JpZ2luYWxPcHRpb24sIHBhZ2VPcHRpb25TY2hlbWEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzaG93UmVtb3ZlPFQ+KGFjdGlvblJlbW92ZTogVCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgYWN0aW9uID0gYWN0aW9uUmVtb3ZlID8/IGZhbHNlO1xyXG4gICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09ICdib29sZWFuJykge1xyXG4gICAgICByZXR1cm4gYWN0aW9uO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUZpbHRlclZhbHVlKGZpbHRlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuZmllbGRzLm1hcChpdGVtID0+IHtcclxuICAgICAgaWYgKGZpbHRlci5oYXNPd25Qcm9wZXJ0eShpdGVtLnByb3BlcnR5KSkge1xyXG4gICAgICAgIGl0ZW0uaW5pdFZhbHVlID0gZmlsdGVyW2l0ZW0ucHJvcGVydHldO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUGFnZUFjdGlvbnMoKSB7XHJcbiAgICB0aGlzLnBhZ2VBY3Rpb25zID0gWy4uLnRoaXMuX2RlZmF1bHRQYWdlQWN0aW9ucywgLi4udGhpcy5fY3VzdG9tUGFnZUxpc3RBY3Rpb25zXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlVGFibGVBY3Rpb25zKCkge1xyXG4gICAgY29uc3QgZGVmYXVsdFRhYmxlQWN0aW9uc1dpdGhvdXRBY3Rpb25EZWxldGUgPSB0aGlzLl9kZWZhdWx0VGFibGVBY3Rpb25zLmZpbHRlcihcclxuICAgICAgdGFibGVBY3Rpb24gPT4gdGFibGVBY3Rpb24ubGFiZWwgIT09IHRoaXMubGl0ZXJhbHMudGFibGVBY3Rpb25EZWxldGVcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgdGFibGVBY3Rpb25EZWxldGUgPSB0aGlzLl9kZWZhdWx0VGFibGVBY3Rpb25zLmZpbmQoXHJcbiAgICAgIHRhYmxlQWN0aW9uID0+IHRhYmxlQWN0aW9uLmxhYmVsID09PSB0aGlzLmxpdGVyYWxzLnRhYmxlQWN0aW9uRGVsZXRlXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IG5ld1RhYmxlQWN0aW9ucyA9IFsuLi5kZWZhdWx0VGFibGVBY3Rpb25zV2l0aG91dEFjdGlvbkRlbGV0ZSwgLi4udGhpcy5fY3VzdG9tVGFibGVBY3Rpb25zXTtcclxuXHJcbiAgICBpZiAodGFibGVBY3Rpb25EZWxldGUpIHtcclxuICAgICAgbmV3VGFibGVBY3Rpb25zLnB1c2godGFibGVBY3Rpb25EZWxldGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudGFibGVBY3Rpb25zID0gbmV3VGFibGVBY3Rpb25zO1xyXG4gIH1cclxufVxyXG4iLCI8cG8tcGFnZS1keW5hbWljLXNlYXJjaFxyXG4gIFtwLWFjdGlvbnNdPVwicGFnZUFjdGlvbnNcIlxyXG4gIFtwLWJyZWFkY3J1bWJdPVwiYnJlYWRjcnVtYlwiXHJcbiAgW3AtaGlkZS1jbG9zZS1kaXNjbGFpbWVyc109XCJoaWRlQ2xvc2VEaXNjbGFpbWVyc1wiXHJcbiAgW3AtZmlsdGVyc109XCJmaWx0ZXJzXCJcclxuICBbcC1rZWVwLWZpbHRlcnNdPVwia2VlcEZpbHRlcnNcIlxyXG4gIFtwLWxpdGVyYWxzXT1cInNlYXJjaExpdGVyYWxzXCJcclxuICBbcC1jb25jYXQtZmlsdGVyc109XCJjb25jYXRGaWx0ZXJzXCJcclxuICBbcC1oaWRlLXJlbW92ZS1hbGwtZGlzY2xhaW1lcl09XCJoaWRlUmVtb3ZlQWxsRGlzY2xhaW1lclwiXHJcbiAgW3AtcXVpY2stc2VhcmNoLXdpZHRoXT1cInF1aWNrU2VhcmNoV2lkdGhcIlxyXG4gIFtwLXRpdGxlXT1cInRpdGxlXCJcclxuICAocC1hZHZhbmNlZC1zZWFyY2gpPVwib25BZHZhbmNlZFNlYXJjaCgkZXZlbnQpXCJcclxuICAocC1jaGFuZ2UtZGlzY2xhaW1lcnMpPVwib25DaGFuZ2VEaXNjbGFpbWVycygkZXZlbnQpXCJcclxuICAocC1xdWljay1zZWFyY2gpPVwib25RdWlja1NlYXJjaCgkZXZlbnQpXCJcclxuICBbcC1xdWljay1zZWFyY2gtdmFsdWVdPVwicXVpY2tTZWFyY2hWYWx1ZSB8fCAnJ1wiXHJcbj5cclxuICA8cG8tdGFibGVcclxuICAgIFtwLXNvcnRdPVwidHJ1ZVwiXHJcbiAgICBbcC1oaWRlLXRhYmxlLXNlYXJjaF09XCJ0cnVlXCJcclxuICAgIFtwLWFjdGlvbnNdPVwidGFibGVBY3Rpb25zXCJcclxuICAgIFtwLWFjdGlvbnMtcmlnaHRdPVwiYWN0aW9uUmlnaHRcIlxyXG4gICAgW3Atc2VsZWN0YWJsZV09XCJlbmFibGVTZWxlY3Rpb25UYWJsZVwiXHJcbiAgICBbcC1jb2x1bW5zXT1cImNvbHVtbnNcIlxyXG4gICAgW3AtaXRlbXNdPVwiaXRlbXNcIlxyXG4gICAgW3AtaGVpZ2h0XT1cImhlaWdodFwiXHJcbiAgICBbcC1oaWRlLWJhdGNoLWFjdGlvbnNdPVwidHJ1ZVwiXHJcbiAgICBbcC1pbmZpbml0ZS1zY3JvbGxdPVwiaW5maW5pdGVTY3JvbGxcIlxyXG4gICAgW3Atc2hvdy1tb3JlLWRpc2FibGVkXT1cIiFoYXNOZXh0XCJcclxuICAgIChwLXNob3ctbW9yZSk9XCJzaG93TW9yZSgpXCJcclxuICAgIChwLXNvcnQtYnkpPVwib25Tb3J0KCRldmVudClcIlxyXG4gICAgKHAtY2hhbmdlLXZpc2libGUtY29sdW1ucyk9XCJvbkNoYW5nZVZpc2libGVDb2x1bW5zKCRldmVudClcIlxyXG4gICAgKHAtcmVzdG9yZS1jb2x1bW4tbWFuYWdlcik9XCJvbkNvbHVtblJlc3RvcmVNYW5hZ2VyKCRldmVudClcIlxyXG4gICAgKHAtc29ydC1ieSk9XCJvblNvcnRCeSgkZXZlbnQpXCJcclxuICAgIFtwLWRyYWdnYWJsZV09XCJkcmFnZ2FibGVcIlxyXG4gID5cclxuICA8L3BvLXRhYmxlPlxyXG48L3BvLXBhZ2UtZHluYW1pYy1zZWFyY2g+XHJcbiJdfQ==
|
|
1144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tcGFnZS1keW5hbWljLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RlbXBsYXRlcy9zcmMvbGliL2NvbXBvbmVudHMvcG8tcGFnZS1keW5hbWljLXRhYmxlL3BvLXBhZ2UtZHluYW1pYy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90ZW1wbGF0ZXMvc3JjL2xpYi9jb21wb25lbnRzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS9wby1wYWdlLWR5bmFtaWMtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBR3BFLE9BQU8sRUFBRSxLQUFLLEVBQWMsWUFBWSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRCxPQUFPLEVBUUwscUJBQXFCLEVBQ3JCLGVBQWUsRUFDaEIsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEtBQUssSUFBSSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXBELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBRTFHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQWV0RyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUV2RixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxrQ0FBa0MsQ0FB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RUFBRSxnQkFBZ0IsRUFBRTtZQVdHLFdBQVc7a0JBQTVFLEtBQUs7bUJBQUMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO1lBd0JHLGFBQWE7a0JBQS9FLEtBQUs7bUJBQUMsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO1lBY2pFLHVCQUF1QjtrQkFEdEIsS0FBSzttQkFBQyxFQUFFLEtBQUssRUFBRSw4QkFBOEIsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7WUFnQlQsY0FBYztrQkFBakYsS0FBSzttQkFBQyxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7WUE0RDFDLE9BQU87a0JBQTlCLEtBQUs7bUJBQUMsV0FBVztZQThCa0IsaUJBQWlCO2tCQUFwRCxLQUFLO21CQUFDLHVCQUF1QjtZQTRCTyxrQkFBa0I7a0JBQXRELEtBQUs7bUJBQUMsd0JBQXdCO1lBbUJJLGdCQUFnQjtrQkFBbEQsS0FBSzttQkFBQyxzQkFBc0I7WUFlTixNQUFNO2tCQUE1QixLQUFLO21CQUFDLFVBQVU7WUFxQnNCLG9CQUFvQjtrQkFBMUQsS0FBSzttQkFBQywwQkFBMEI7WUFpQkUsZ0JBQWdCO2tCQUFsRCxLQUFLO21CQUFDLHNCQUFzQjtZQWdCTSxnQkFBZ0I7a0JBQWxELEtBQUs7bUJBQUMsc0JBQXNCO1lBOENSLGNBQWM7a0JBQWxDLEtBQUs7bUJBQUMsWUFBWTtZQVVPLFNBQVM7a0JBQWxDLEtBQUs7bUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7IEVNUFRZLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFBvRGlhbG9nQ29uZmlybU9wdGlvbnMsXHJcbiAgUG9EaWFsb2dTZXJ2aWNlLFxyXG4gIFBvTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gIFBvTm90aWZpY2F0aW9uU2VydmljZSxcclxuICBQb1BhZ2VBY3Rpb24sXHJcbiAgUG9UYWJsZUFjdGlvbixcclxuICBQb1RhYmxlQ29sdW1uU29ydCxcclxuICBQb1RhYmxlQ29sdW1uU29ydFR5cGUsXHJcbiAgcG9Mb2NhbGVEZWZhdWx0XHJcbn0gZnJvbSAnQHBvLXVpL25nLWNvbXBvbmVudHMnO1xyXG5cclxuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi8uLi91dGlscy91dGlsJztcclxuaW1wb3J0IHsgY29udmVydFRvQm9vbGVhbiB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWwnO1xyXG5cclxuaW1wb3J0IHsgUG9QYWdlRHluYW1pY0RldGFpbENvbXBvbmVudCB9IGZyb20gJy4uL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwvcG8tcGFnZS1keW5hbWljLWRldGFpbC5jb21wb25lbnQnO1xyXG5cclxuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wby1wYWdlLWR5bmFtaWMvcG8tcGFnZS1keW5hbWljLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBpc0V4dGVybmFsTGluaywgb3BlbkV4dGVybmFsTGluaywgcmVtb3ZlRHVwbGljYXRlSXRlbXNXaXRoQXJyYXlLZXkgfSBmcm9tICcuLi8uLi91dGlscy91dGlsJztcclxuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1NlYXJjaExpdGVyYWxzIH0gZnJvbSAnLi4vcG8tcGFnZS1keW5hbWljLXNlYXJjaC9wby1wYWdlLWR5bmFtaWMtc2VhcmNoLWxpdGVyYWxzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFBvUGFnZUN1c3RvbWl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9wby1wYWdlLWN1c3RvbWl6YXRpb24vcG8tcGFnZS1jdXN0b21pemF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljT3B0aW9uc1NjaGVtYSB9IGZyb20gJy4vLi4vLi4vc2VydmljZXMvcG8tcGFnZS1jdXN0b21pemF0aW9uL3BvLXBhZ2UtZHluYW1pYy1vcHRpb25zLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnMgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLWFjdGlvbnMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlRGV0YWlsIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1iZWZvcmUtZGV0YWlsLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZUR1cGxpY2F0ZSB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtYmVmb3JlLWR1cGxpY2F0ZS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVFZGl0IH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1iZWZvcmUtZWRpdC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVOZXcgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLWJlZm9yZS1uZXcuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlUmVtb3ZlQWxsIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1iZWZvcmUtcmVtb3ZlLWFsbC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVSZW1vdmUgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLWJlZm9yZS1yZW1vdmUuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tQWN0aW9uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1jdXN0b20tYWN0aW9uLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbVRhYmxlQWN0aW9uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1jdXN0b20tdGFibGUtYWN0aW9uLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZU1ldGFEYXRhIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1tZXRhZGF0YS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVPcHRpb25zIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1vcHRpb25zLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNMaXN0QmFzZUNvbXBvbmVudCB9IGZyb20gJy4vcG8tcGFnZS1keW5hbWljLWxpc3QtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZSB9IGZyb20gJy4vcG8tcGFnZS1keW5hbWljLXRhYmxlLWFjdGlvbnMuc2VydmljZSc7XHJcbmltcG9ydCB7IHBvUGFnZUR5bmFtaWNUYWJsZUxpdGVyYWxzRGVmYXVsdCB9IGZyb20gJy4vcG8tcGFnZS1keW5hbWljLXRhYmxlLWxpdGVyYWxzJztcclxuXHJcbmNvbnN0IFBBR0VfU0laRV9ERUZBVUxUID0gMTA7XHJcblxyXG50eXBlIFVybE9yUG9DdXN0b21pemF0aW9uRnVuY3Rpb24gPSBzdHJpbmcgfCAoKCkgPT4gUG9QYWdlRHluYW1pY1RhYmxlT3B0aW9ucyk7XHJcblxyXG4vKipcclxuICogQGRvY3NFeHRlbmRzIFBvUGFnZUR5bmFtaWNMaXN0QmFzZUNvbXBvbmVudFxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICpcclxuICogTyBgcG8tcGFnZS1keW5hbWljLXRhYmxlYCDDqSB1bWEgcMOhZ2luYSBxdWUgZXhpYmUgdW1hIGxpc3RhIGRlIHJlZ2lzdHJvcyBlbSB1bWEgdGFiZWxhIGJhc2VhZG8gZW0gdW1hIGxpc3RhIGRlIGZpZWxkcyxcclxuICogbyBtZXNtbyB0YW1iw6ltIHN1cG9ydGEgbWV0YWRhZG9zIGNvbmZvcm1lIGVzcGVjaWZpY2FkbyBuYSBkb2N1bWVudGHDp8Ojby5cclxuICpcclxuICogIyMjIFV0aWxpemHDp8OjbyB2aWEgcm90YVxyXG4gKlxyXG4gKiBBbyB1dGlsaXphciBhcyByb3RhcyBwYXJhIGNhcnJlZ2FyIG8gdGVtcGxhdGUsIG8gYHBhZ2UtZHluYW1pYy10YWJsZWAgZGlzcG9uaWJpbGl6YSBwcm9wcmllZGFkZXMgcGFyYVxyXG4gKiBwb2RlciBlc3BlY2lmaWNhciBvIGVuZHBvaW50IGRvcyBkYWRvcyBlIGRvcyBtZXRhZGFkb3MuIEV4ZW1wbG8gZGUgdXRpbGl6YcOnw6NvOlxyXG4gKlxyXG4gKiBPIGNvbXBvbmVudGUgcHJpbWVpcm8gaXLDoSBjYXJyZWdhciBvIG1ldGFkYWRvIGRhIHJvdGEgZGVmaW5pZGEgbmEgcHJvcHJpZWRhZGUgc2VydmljZU1ldGFkYXRhQXBpXHJcbiAqIGUgZGVwb2lzIGlyw6EgYnVzY2FyIGRhIHJvdGEgZGVmaW5pZGEgbmEgcHJvcHJpZWRhZGUgc2VydmljZUxvYWRBcGlcclxuICpcclxuICogPiBDYXNvIG8gc2Vydmlkb3IgcmV0b3JuYXIgdW0gZXJybyBhbyByZWN1cGVyYXIgbyBtZXRhZGFkb3MsIHNlcsOhIHJlcGFzc2FkbyBvIG1ldGFkYWRvcyBzYWx2byBlbSBjYWNoZSxcclxuICogc2UgbyBjYWNoZSBuw6NvIGV4aXN0ZSBzZXLDoSBkaXNwYXJhZG8gdW1hIG5vdGlmaWNhw6fDo28uXHJcbiAqXHJcbiAqIGBgYFxyXG4gKiB7XHJcbiAqICAgcGF0aDogJ3Blb3BsZScsXHJcbiAqICAgY29tcG9uZW50OiBQb1BhZ2VEeW5hbWljVGFibGVDb21wb25lbnQsXHJcbiAqICAgZGF0YToge1xyXG4gKiAgICAgc2VydmljZUFwaTogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC92MS9wZW9wbGUnLCAvLyBlbmRwb2ludCBkb3MgZGFkb3NcclxuICogICAgIHNlcnZpY2VNZXRhZGF0YUFwaTogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC92MS9tZXRhZGF0YScsIC8vIGVuZHBvaW50IGRvcyBtZXRhZGFkb3MgdXRpbGl6YW5kbyBvIG3DqXRvZG8gSFRUUCBHZXRcclxuICogICAgIHNlcnZpY2VMb2FkQXBpOiAnaHR0cDovL2xvY2FsaG9zdDozMDAwL2xvYWQtbWV0YWRhdGEnIC8vIGVuZHBvaW50IGRlIGN1c3RvbWl6YcOnw7VlcyBkb3MgbWV0YWRhZG9zIHV0aWxpemFuZG8gbyBtw6l0b2RvIEhUVFAgUG9zdFxyXG4gKiAgIH1cclxuICogfVxyXG4gKlxyXG4gKiBgYGBcclxuICpcclxuICogQSByZXF1aXNpw6fDo28gZG9zIG1ldGFkYWRvcyDDqSBmZWl0YSBuYSBpbmljaWFsaXphw6fDo28gZG8gdGVtcGxhdGUgcGFyYSBidXNjYXIgb3MgbWV0YWRhZG9zIGRhIHDDoWdpbmEgcGFzc2FuZG8gb1xyXG4gKiB0aXBvIGRvIG1ldGFkYWRvIGVzcGVyYWRvIGUgYSB2ZXJzw6NvIGNhY2hlYWRhIHBlbG8gYnJvd3Nlci5cclxuICpcclxuICogTyBmb3JtYXRvIGVzcGVyYWRvIG5hIHJlc3Bvc3RhIGRhIHJlcXVpc2nDp8OjbyBlc3TDoSBlc3BlY2lmaWNhZG8gbmEgaW50ZXJmYWNlXHJcbiAqIFtQb1BhZ2VEeW5hbWljVGFibGVNZXRhZGF0YV0oL2RvY3VtZW50YXRpb24vcG8tcGFnZS1keW5hbWljLXRhYmxlI3BvLXBhZ2UtZHluYW1pYy10YWJsZS1tZXRhZGF0YSkuIFBvciBleGVtcGxvOlxyXG4gKlxyXG4gKiBgYGBcclxuICogIHtcclxuICogICB2ZXJzaW9uOiAxLFxyXG4gKiAgIHRpdGxlOiAnUGVyc29uIFRhYmxlJyxcclxuICogICBmaWVsZHM6IFtcclxuICogICAgIHsgcHJvcGVydHk6ICdpZCcsIGtleTogdHJ1ZSwgZGlzYWJsZWQ6IHRydWUgfSxcclxuICogICAgIHsgcHJvcGVydHk6ICdzdGF0dXMnIH0sXHJcbiAqICAgICB7IHByb3BlcnR5OiAnbmFtZScgfSxcclxuICogICAgIHsgcHJvcGVydHk6ICduaWNrbmFtZScgfSxcclxuICogICAgIHsgcHJvcGVydHk6ICdiaXJ0aGRhdGUnLCBsYWJlbDogJ0JpcnRoIGRhdGUnIH0sXHJcbiAqICAgICB7IHByb3BlcnR5OiAnZ2VucmUnIH0sXHJcbiAqICAgICB7IHByb3BlcnR5OiAnY2l0eScgfSxcclxuICogICAgIHsgcHJvcGVydHk6ICdjb3VudHJ5JyB9XHJcbiAqICAgXSxcclxuICogICBrZWVwRmlsdGVyczogdHJ1ZVxyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiA+IENhc28gbyBlbmRwb2ludCBkb3MgbWV0YWRhZG9zIG7Do28gc2VqYSBlc3BlY2lmaWNhZG8sIHNlcsOhIGZlaXRvIHVtYSByZXF1aXNpw6fDo28gdXRpbGl6YW5kbyBvIGBzZXJ2aWNlQXBpYCBkYSBzZWd1aW50ZSBmb3JtYTpcclxuICogYGBgXHJcbiAqIEdFVCB7ZW5kLXBvaW50fS9tZXRhZGF0YT90eXBlPWxpc3QmdmVyc2lvbj17dmVyc2lvbn1cclxuICogYGBgXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1wYWdlLWR5bmFtaWMtdGFibGUtYmFzaWNcIiB0aXRsZT1cIlBPIFBhZ2UgRHluYW1pYyBUYWJsZSBCYXNpY1wiPlxyXG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtYmFzaWMvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS1iYXNpYy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XHJcbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS1iYXNpYy9zYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLWJhc2ljLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XHJcbiAqIDwvZXhhbXBsZT5cclxuICpcclxuICogPGV4YW1wbGUgbmFtZT1cInBvLXBhZ2UtZHluYW1pYy10YWJsZS1wZW9wbGVcIiB0aXRsZT1cIlBPIFBhZ2UgRHluYW1pYyBUYWJsZSAtIFBlb3BsZVwiPlxyXG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtcGVvcGxlL3NhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtcGVvcGxlLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cclxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLXBlb3BsZS9zYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLXBlb3BsZS5jb21wb25lbnQudHNcIj4gPC9maWxlPlxyXG4gKiA8L2V4YW1wbGU+XHJcbiAqXHJcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1wYWdlLWR5bmFtaWMtdGFibGUtdXNlcnNcIiB0aXRsZT1cIlBPIFBhZ2UgRHluYW1pYyBUYWJsZSAtIFVzZXJzXCI+XHJcbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS11c2Vycy9zYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLXVzZXJzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cclxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLXVzZXJzL3NhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtdXNlcnMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cclxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLXVzZXJzL3NhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtdXNlcnMuc2VydmljZS50c1wiPiA8L2ZpbGU+XHJcbiAqIDwvZXhhbXBsZT5cclxuICpcclxuICogPGV4YW1wbGUgbmFtZT1cInBvLXBhZ2UtZHluYW1pYy10YWJsZS1ob3RlbHNcIiB0aXRsZT1cIlBPIFBhZ2UgRHluYW1pYyBUYWJsZSAtIEhvdGVsc1wiPlxyXG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtaG90ZWxzL3NhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtaG90ZWxzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cclxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLWhvdGVscy9zYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLWhvdGVscy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxyXG4gKiA8L2V4YW1wbGU+XHJcbiAqXHJcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1wYWdlLWR5bmFtaWMtdGFibGUtZHJhZy1hbmQtZHJvcFwiIHRpdGxlPVwiUE8gUGFnZSBEeW5hbWljIFRhYmxlIC0gRHJhZyBhbmQgRHJvcFwiPlxyXG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtZHJhZy1hbmQtZHJvcC9zYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLWRyYWctYW5kLWRyb3AuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxyXG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtZHJhZy1hbmQtZHJvcC9zYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLWRyYWctYW5kLWRyb3AuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cclxuICogPC9leGFtcGxlPlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdwby1wYWdlLWR5bmFtaWMtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wby1wYWdlLWR5bmFtaWMtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHByb3ZpZGVyczogW1BvUGFnZUR5bmFtaWNTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUG9QYWdlRHluYW1pY1RhYmxlQ29tcG9uZW50IGV4dGVuZHMgUG9QYWdlRHluYW1pY0xpc3RCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIC8qKlxyXG4gICAqIEZ1bsOnw6NvIG91IHNlcnZpw6dvIHF1ZSBzZXLDoSBleGVjdXRhZG8gbmEgaW5pY2lhbGl6YcOnw6NvIGRvIGNvbXBvbmVudGUuXHJcbiAgICpcclxuICAgKiBBIHByb3ByaWVkYWRlIGFjZWl0YSBvcyBzZWd1aW50ZXMgdGlwb3M6XHJcbiAgICogLSBgc3RyaW5nYDogKkVuZHBvaW50KiB1c2FkbyBwZWxvIGNvbXBvbmVudGUgcGFyYSByZXF1aXNpw6fDo28gdmlhIGBQT1NUYC5cclxuICAgKiAtIGBmdW5jdGlvbmA6IE3DqXRvZG8gcXVlIHNlcsOhIGV4ZWN1dGFkby5cclxuICAgKlxyXG4gICAqIE8gcmV0b3JubyBkZXN0YSBmdW7Dp8OjbyBkZXZlIHNlciBkbyB0aXBvIGBQb1BhZ2VEeW5hbWljVGFibGVPcHRpb25zYCxcclxuICAgKiBvbmRlIG8gdXN1w6FyaW8gcG9kZXLDoSBjdXN0b21pemFyIG5vdm9zIGNhbXBvcywgYnJlYWRjcnVtYiwgdGl0bGUgZSBhY3Rpb25zXHJcbiAgICpcclxuICAgKiBQb3IgZXhlbXBsbzpcclxuICAgKlxyXG4gICAqIGBgYFxyXG4gICAqIGdldFBhZ2VPcHRpb25zKCk6IFBvUGFnZUR5bmFtaWNUYWJsZU9wdGlvbnMge1xyXG4gICAqIHJldHVybiB7XHJcbiAgICogICBhY3Rpb25zOlxyXG4gICAqICAgICB7IG5ldzogJ25ldycsIGVkaXQ6ICdlZGl0LzppZCcsIHJlbW92ZTogdHJ1ZSB9LFxyXG4gICAqICAgZmllbGRzOiBbXHJcbiAgICogICAgIHsgcHJvcGVydHk6ICdpZENhcmQnLCBncmlkQ29sdW1uczogNiB9XHJcbiAgICogICBdXHJcbiAgICogfTtcclxuICAgKiB9XHJcbiAgICpcclxuICAgKiBgYGBcclxuICAgKiBQYXJhIHJlZmVyZW5jaWFyIGEgc3VhIGZ1bsOnw6NvIHV0aWxpemUgYSBwcm9wcmllZGFkZSBgYmluZGAsIHBvciBleGVtcGxvOlxyXG4gICAqIGBgYFxyXG4gICAqICBbcC1sb2FkXT1cIm9uTG9hZE9wdGlvbnMuYmluZCh0aGlzKVwiXHJcbiAgICogYGBgXHJcbiAgICovXHJcbiAgQElucHV0KCdwLWxvYWQnKSBvbkxvYWQ6IHN0cmluZyB8ICgoKSA9PiBQb1BhZ2VEeW5hbWljVGFibGVPcHRpb25zKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQG9wdGlvbmFsXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKlxyXG4gICAqIE1hbnTDqW0gbmEgbW9kYWwgZGUgYEJ1c2NhIEF2YW7Dp2FkYWAgb3MgdmFsb3JlcyBwcmVlbmNoaWRvcyBkbyDDumx0aW1vIGZpbHRybyByZWFsaXphZG8gcGVsbyB1c3XDoXJpby5cclxuICAgKlxyXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcclxuICAgKi9cclxuICBASW5wdXQoeyBhbGlhczogJ3Ata2VlcC1maWx0ZXJzJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIGtlZXBGaWx0ZXJzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBvcHRpb25hbFxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICpcclxuICAgKiBEZWZpbmUgcXVlIGEgY29sdW5hIGRlIGHDp8O1ZXMgZmljYXLDoSBubyBsYWRvIGRpcmVpdG8gZGEgdGFiZWxhLlxyXG4gICAqXHJcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxyXG4gICAqL1xyXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1hY3Rpb25zLXJpZ2h0JywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIGFjdGlvblJpZ2h0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBvcHRpb25hbFxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICpcclxuICAgKiBQZXJtaXRlIGEgdXRpbGl6YcOnw6NvIGRhIHBlc3F1aXNhIHLDoXBpZGEganVudG8gY29tIGEgcGVzcXVpc2EgYXZhbsOnYWRhLlxyXG4gICAqXHJcbiAgICogRGVzdGEgZm9ybWEsIGFvIHRlciB1bWEgcGVzcXVpc2EgYXZhbsOnYWRhIGVzdGFiZWxlY2lkYSBlIHNlclxyXG4gICAqIHByZWVuY2hpZG8gYSBwZXNxdWlzYSByw6FwaWRhLCBvIGZpbHRybyBzZXLDoSBjb25jYXRlbmFkbyBhZGljaW9uYW5kbyBhIHBlc3F1aXNhXHJcbiAgICogcsOhcGlkYSB0YW1iw6ltIG5hIGxpc3RhIGRlIGBkaXNjbGFpbWVyc2AgYSBhcGxpY2FuZG8gdW1hIG5vdmEgYnVzY2EgY29tIGEgY29uY2F0ZW5hw6fDo28uXHJcbiAgICpcclxuICAgKiBQb3IgZXhlbXBsbywgY29tIG9zIHNlZ3VpbnRlcyBmaWx0cm9zIGFwbGljYWRvczpcclxuICAgKiAgIC0gZmlsdHJvIGF2YW7Dp2FkbzogYHsgbmFtZTogJ01pa2UnLCBhZ2U6ICcxMicgfWBcclxuICAgKiAgIC0gZmlsdHJvIHLDoXBpZG86IGB7IHNlYXJjaDogJ3BhcGVyJyB9YFxyXG4gICAqXHJcbiAgICogQSByZXF1aXNpw6fDo28gZG9zIGRhZG9zIG5hIEFQSSBmaWNhcsOhIGNvbSBvcyBwYXLDom1ldHJvczpcclxuICAgKiBgYGBcclxuICAgKiBwYWdlPTEmcGFnZVNpemU9MTAmbmFtZT1NaWtlJmFnZT0xMiZzZWFyY2g9cGFwZXJcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcclxuICAgKi9cclxuICBASW5wdXQoeyBhbGlhczogJ3AtY29uY2F0LWZpbHRlcnMnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgY29uY2F0RmlsdGVyczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBAb3B0aW9uYWxcclxuICAgKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqXHJcbiAgICogT2N1bHRhIG8gYm90w6NvIHBhcmEgcmVtb3ZlciB0b2RvcyBvcyAqZGlzY2xhaW1lcnMqIGRvIGdydXBvLlxyXG4gICAqXHJcbiAgICogPiBQb3IgcGFkcsOjbywgbyBtZXNtbyDDqSBleGliaWRvIMOgIHBhcnRpciBkZSBkb2lzIG91IG1haXMgKmRpc2NsYWltZXJzKiBjb20gYSBvcMOnw6NvIGBoaWRlQ2xvc2VgIGhhYmlsaXRhZGEuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXHJcbiAgICovXHJcbiAgQElucHV0KHsgYWxpYXM6ICdwLWhpZGUtcmVtb3ZlLWFsbC1kaXNjbGFpbWVyJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pXHJcbiAgaGlkZVJlbW92ZUFsbERpc2NsYWltZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogQG9wdGlvbmFsXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKlxyXG4gICAqIFNlIHZlcmRhZGVpcm8sIGF0aXZhIGEgZnVuY2lvbmFsaWRhZGUgZGUgc2Nyb2xsIGluZmluaXRvIHBhcmEgYSB0YWJlbGEgZSBvIGJvdMOjbyBcIkNhcnJlZ2FyIE1haXNcIiBkZWl4YXLDoSBkZSBzZXIgZXhpYmlkby4gQW8gY2hlZ2FyIG5vIGZpbSBkYSB0YWJlbGFcclxuICAgKiBleGVjdXRhcsOhIGEgZnVuw6fDo28gYHAtc2hvdy1tb3JlYC5cclxuICAgKlxyXG4gICAqICoqUmVncmFzIGRlIHV0aWxpemHDp8OjbzoqKlxyXG4gICAqICAtIE8gc2Nyb2xsIGluZmluaXRvIHPDsyBmdW5jaW9uYSBwYXJhIHRhYmVsYXMgcXVlIHV0aWxpemFtIGEgcHJvcHJpZWRhZGUgYHAtaGVpZ2h0YCBlIHF1ZSBwb3NzdWVtIG8gc2Nyb2xsIGrDoSBuYSBjYXJnYSBpbmljaWFsIGRvcyBkYWRvcy5cclxuICAgKlxyXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcclxuICAgKi9cclxuICBASW5wdXQoeyBhbGlhczogJ3AtaW5maW5pdGUtc2Nyb2xsJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIGluZmluaXRlU2Nyb2xsOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGhhc05leHQgPSBmYWxzZTtcclxuICBpdGVtcyA9IFtdO1xyXG4gIGxpdGVyYWxzO1xyXG4gIHBhZ2VBY3Rpb25zOiBBcnJheTxQb1BhZ2VBY3Rpb24+ID0gW107XHJcbiAgdGFibGVBY3Rpb25zOiBBcnJheTxQb1RhYmxlQWN0aW9uPiA9IFtdO1xyXG5cclxuICBwcml2YXRlIF9hY3Rpb25zOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zID0ge307XHJcbiAgcHJpdmF0ZSBfcGFnZUN1c3RvbUFjdGlvbnM6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbUFjdGlvbj4gPSBbXTtcclxuICBwcml2YXRlIF9oZWlnaHQ6IG51bWJlcjtcclxuICBwcml2YXRlIF9vbGRRdWlja1NlYXJjaFBhcmFtOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfcXVpY2tTZWFyY2hQYXJhbTogc3RyaW5nID0gJ3NlYXJjaCc7XHJcbiAgcHJpdmF0ZSBfcXVpY2tTZWFyY2hWYWx1ZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX3F1aWNrU2VhcmNoV2lkdGg6IG51bWJlcjtcclxuICBwcml2YXRlIF90YWJsZUN1c3RvbUFjdGlvbnM6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbVRhYmxlQWN0aW9uPiA9IFtdO1xyXG5cclxuICBwcml2YXRlIHBhZ2U6IG51bWJlciA9IDE7XHJcbiAgcHJpdmF0ZSBjdXJyZW50UGFnZTogbnVtYmVyID0gMTtcclxuICBwcml2YXRlIGl0ZW1TZWxlY3RlZEFjdGlvbjtcclxuICBwcml2YXRlIHBhcmFtcyA9IHt9O1xyXG4gIHByaXZhdGUgc29ydGVkQ29sdW1uOiBQb1RhYmxlQ29sdW1uU29ydDtcclxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgcHJpdmF0ZSBoYXNDdXN0b21BY3Rpb25XaXRoU2VsZWN0YWJsZSA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9jdXN0b21QYWdlTGlzdEFjdGlvbnM6IEFycmF5PFBvUGFnZUFjdGlvbj4gPSBbXTtcclxuICBwcml2YXRlIF9jdXN0b21UYWJsZUFjdGlvbnM6IEFycmF5PFBvVGFibGVBY3Rpb24+ID0gW107XHJcbiAgcHJpdmF0ZSBfZGVmYXVsdFBhZ2VBY3Rpb25zOiBBcnJheTxQb1BhZ2VBY3Rpb24+ID0gW107XHJcbiAgcHJpdmF0ZSBfZGVmYXVsdFRhYmxlQWN0aW9uczogQXJyYXk8UG9UYWJsZUFjdGlvbj4gPSBbXTtcclxuICBwcml2YXRlIF9oaWRlQ2xvc2VEaXNjbGFpbWVyczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG4gIHByaXZhdGUgX2RyYWdnYWJsZSA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIHNldCBkZWZhdWx0UGFnZUFjdGlvbnModmFsdWU6IEFycmF5PFBvUGFnZUFjdGlvbj4pIHtcclxuICAgIHRoaXMuX2RlZmF1bHRQYWdlQWN0aW9ucyA9IHZhbHVlO1xyXG4gICAgdGhpcy51cGRhdGVQYWdlQWN0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXQgZGVmYXVsdFRhYmxlQWN0aW9ucyh2YWx1ZTogQXJyYXk8UG9UYWJsZUFjdGlvbj4pIHtcclxuICAgIHRoaXMuX2RlZmF1bHRUYWJsZUFjdGlvbnMgPSB2YWx1ZTtcclxuICAgIHRoaXMudXBkYXRlVGFibGVBY3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldCBjdXN0b21QYWdlTGlzdEFjdGlvbnModmFsdWU6IEFycmF5PFBvUGFnZUFjdGlvbj4pIHtcclxuICAgIHRoaXMuX2N1c3RvbVBhZ2VMaXN0QWN0aW9ucyA9IHZhbHVlO1xyXG4gICAgdGhpcy51cGRhdGVQYWdlQWN0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXQgY3VzdG9tVGFibGVBY3Rpb25zKHZhbHVlOiBBcnJheTxQb1RhYmxlQWN0aW9uPikge1xyXG4gICAgdGhpcy5fY3VzdG9tVGFibGVBY3Rpb25zID0gdmFsdWU7XHJcbiAgICB0aGlzLnVwZGF0ZVRhYmxlQWN0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQG9wdGlvbmFsXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKlxyXG4gICAqIEHDp8O1ZXMgZGEgcMOhZ2luYSBlIGRhIHRhYmVsYS5cclxuICAgKiA+IENhc28gdXRpbGl6YXIgYSBhw6fDo28gcGFkcsOjbyBkZSBleGNsdWlyLCBhIG1lc21hIHNlcsOhIGV4aWJpZGEgcG9yIMO6bHRpbW8gbmEgdGFiZWxhLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgncC1hY3Rpb25zJykgc2V0IGFjdGlvbnModmFsdWU6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnMpIHtcclxuICAgIHRoaXMuX2FjdGlvbnMgPSB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPiAwID8gdmFsdWUgOiB7fTtcclxuXHJcbiAgICB0aGlzLnNldFBhZ2VBY3Rpb25zKHRoaXMuYWN0aW9ucyk7XHJcbiAgICB0aGlzLnNldFJlbW92ZUFsbEFjdGlvbigpO1xyXG4gICAgdGhpcy5zZXRUYWJsZUFjdGlvbnModGhpcy5hY3Rpb25zKTtcclxuICB9XHJcblxyXG4gIGdldCBhY3Rpb25zKCk6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnMge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdGlvbnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAb3B0aW9uYWxcclxuICAgKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqXHJcbiAgICogTGlzdGEgZGUgYcOnw7VlcyBjdXN0b21pemFkYXMgZGEgcMOhZ2luYSBxdWUgc2Vyw6NvIGluY29ycG9yYWRhcyDDoHMgYcOnw7Vlc1xyXG4gICAqIGluZm9ybWFkYXMgYXRyYXbDqXMgZGEgcHJvcHJpZWRhZGUgYHAtYWN0aW9uc2AuXHJcbiAgICpcclxuICAgKiBFc3NhcyBhw6fDtWVzIGZpY2FtIGxvY2FsaXphZGFzIG5hIHBhcnRlIHN1cGVyaW9yIGRhIHDDoWdpbmEgZW0gYm90w7VlcyBjb20gYcOnw7Vlcy5cclxuICAgKlxyXG4gICAqIEV4ZW1wbG8gZGUgdXRpbGl6YcOnw6NvOlxyXG4gICAqIGBgYFxyXG4gICAqIFtcclxuICAgKiAgeyBsYWJlbDogJ0V4cG9ydCcsIGFjdGlvbjogdGhpcy5leHBvcnQuYmluZCh0aGlzKSB9LFxyXG4gICAqICB7IGxhYmVsOiAnUHJpbnQnLCBhY3Rpb246IHRoaXMucHJpbnQuYmluZCh0aGlzKSB9XHJcbiAgICogXTtcclxuICAgKiBgYGBcclxuICAgKi9cclxuICBASW5wdXQoJ3AtcGFnZS1jdXN0b20tYWN0aW9ucycpIHNldCBwYWdlQ3VzdG9tQWN0aW9ucyh2YWx1ZTogQXJyYXk8UG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tQWN0aW9uPikge1xyXG4gICAgdGhpcy5fcGFnZUN1c3RvbUFjdGlvbnMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW107XHJcblxyXG4gICAgdGhpcy5jdXN0b21QYWdlTGlzdEFjdGlvbnMgPSB0aGlzLnRyYW5zZm9ybUN1c3RvbUFjdGlvbnNUb1BhZ2VMaXN0QWN0aW9uKHRoaXMucGFnZUN1c3RvbUFjdGlvbnMpO1xyXG4gICAgdGhpcy5oYXNDdXN0b21BY3Rpb25XaXRoU2VsZWN0YWJsZSA9IHRoaXMucGFnZUN1c3RvbUFjdGlvbnMuc29tZShjdXN0b21BY3Rpb24gPT4gY3VzdG9tQWN0aW9uLnNlbGVjdGFibGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBhZ2VDdXN0b21BY3Rpb25zKCk6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbUFjdGlvbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VDdXN0b21BY3Rpb25zO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQG9wdGlvbmFsXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKlxyXG4gICAqIExpc3RhIGRlIGHDp8O1ZXMgY3VzdG9taXphZGFzIG5hIHRhYmVsYSBkYSBww6FnaW5hIHF1ZSBzZXLDo28gaW5jb3Jwb3JhZGFzIMOgcyBhw6fDtWVzXHJcbiAgICogaW5mb3JtYWRhcyBhdHJhdsOpcyBkYSBwcm9wcmllZGFkZSBgcC1hY3Rpb25zYC5cclxuICAgKlxyXG4gICAqIEV4ZW1wbG8gZGUgdXRpbGl6YcOnw6NvOlxyXG4gICAqIGBgYFxyXG4gICAqIFtcclxuICAgKiAgeyBsYWJlbDogJ0FwcGx5IGRpc2NvdW50JywgYWN0aW9uOiB0aGlzLmFwcGx5RGlzY291bnQuYmluZCh0aGlzKSB9LFxyXG4gICAqICB7IGxhYmVsOiAnRGV0YWlscycsIGFjdGlvbjogdGhpcy5kZXRhaWxzLmJpbmQodGhpcykgfVxyXG4gICAqIF07XHJcbiAgICogYGBgXHJcbiAgICogPiBDYXNvIHV0aWxpemFyIGEgYcOnw6NvIHBhZHLDo28gZGUgZXhjbHVpciwgYSBtZXNtYSBzZXLDoSBleGliaWRhIHBvciDDumx0aW1vIG5hIHRhYmVsYS5cclxuICAgKi9cclxuICBASW5wdXQoJ3AtdGFibGUtY3VzdG9tLWFjdGlvbnMnKSBzZXQgdGFibGVDdXN0b21BY3Rpb25zKHZhbHVlOiBBcnJheTxQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21UYWJsZUFjdGlvbj4pIHtcclxuICAgIHRoaXMuX3RhYmxlQ3VzdG9tQWN0aW9ucyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXTtcclxuXHJcbiAgICB0aGlzLmN1c3RvbVRhYmxlQWN0aW9ucyA9IHRoaXMudHJhbnNmb3JtVGFibGVDdXN0b21BY3Rpb25zVG9UYWJsZUFjdGlvbnModGhpcy50YWJsZUN1c3RvbUFjdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRhYmxlQ3VzdG9tQWN0aW9ucygpOiBBcnJheTxQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21UYWJsZUFjdGlvbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlQ3VzdG9tQWN0aW9ucztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBvcHRpb25hbFxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICpcclxuICAgKiBMYXJndXJhIGRvIGNhbXBvIGRlIGJ1c2NhLCB1dGlsaXphbmRvIG8gKkdyaWQgU3lzdGVtKixcclxuICAgKiBlIGxpbWl0YWRvIGFvIG3DoXhpbW8gZGUgNiBjb2x1bmFzLiBPIHRhbWFuaG8gbcOtbmltbyDDqSBjb250cm9sYWRvXHJcbiAgICogY29uZm9ybWUgcmVzb2x1w6fDo28gZGUgdGVsYSBwYXJhIG1hbnRlciBhIGNvbnNpc3TDqm5jaWEgZG8gbGF5b3V0LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgncC1xdWljay1zZWFyY2gtd2lkdGgnKSBzZXQgcXVpY2tTZWFyY2hXaWR0aCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9xdWlja1NlYXJjaFdpZHRoID0gdXRpbC5jb252ZXJ0VG9JbnQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHF1aWNrU2VhcmNoV2lkdGgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9xdWlja1NlYXJjaFdpZHRoO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQG9wdGlvbmFsXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKlxyXG4gICAqIERlZmluZSBhIGFsdHVyYSBkYSB0YWJlbGEgZW0gKnBpeGVscyogZSBmaXhhIG8gY2FiZcOnYWxoby5cclxuICAgKi9cclxuICBASW5wdXQoJ3AtaGVpZ2h0Jykgc2V0IGhlaWdodCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9oZWlnaHQgPSB1dGlsLmNvbnZlcnRUb0ludCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBnZXQgaGVpZ2h0KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQG9wdGlvbmFsXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKlxyXG4gICAqIExpc3RhIGRlIGZpbHRyb3MgcXVlIHRlcsOjbyBhIG9ww6fDo28gZGUgZmVjaGFyIG9jdWx0YWRhXHJcbiAgICogZW0gc2V1IHJlc3BlY3Rpdm8gZGlzY2xhaW1lci4gVXRpbGl6YXIgbyBhdHJpYnV0byBgcHJvcGVydHlgIGRvIGNhbXBvLlxyXG4gICAqXHJcbiAgICogRXhlbXBsbyBkZSB1dGlsaXphw6fDo286XHJcbiAgICogYGBgXHJcbiAgICogWydjaXR5JywnbmFtZSddO1xyXG4gICAqIGBgYFxyXG4gICAqL1xyXG4gIEBJbnB1dCgncC1oaWRlLWNsb3NlLWRpc2NsYWltZXJzJykgc2V0IGhpZGVDbG9zZURpc2NsYWltZXJzKHZhbHVlOiBBcnJheTxzdHJpbmc+KSB7XHJcbiAgICB0aGlzLl9oaWRlQ2xvc2VEaXNjbGFpbWVycyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXTtcclxuICB9XHJcblxyXG4gIGdldCBoaWRlQ2xvc2VEaXNjbGFpbWVycygpOiBBcnJheTxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLl9oaWRlQ2xvc2VEaXNjbGFpbWVycztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBvcHRpb25hbFxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICpcclxuICAgKiBJZGVudGlmaWNhZG9yIGRvIHBhcsOibWV0cm8gZW52aWFkbyBhbyBzZXJ2acOnbyBhbyByZWFsaXphciB1bWEgYnVzY2EgcsOhcGlkYS5cclxuICAgKlxyXG4gICAqIEBkZWZhdWx0ICdzZWFyY2gnXHJcbiAgICovXHJcbiAgQElucHV0KCdwLXF1aWNrLXNlYXJjaC1wYXJhbScpIHNldCBxdWlja1NlYXJjaFBhcmFtKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3F1aWNrU2VhcmNoUGFyYW0gPSB2YWx1ZSA/PyAnc2VhcmNoJztcclxuICB9XHJcblxyXG4gIGdldCBxdWlja1NlYXJjaFBhcmFtKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcXVpY2tTZWFyY2hQYXJhbTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBvcHRpb25hbFxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICpcclxuICAgKiBWYWxvciBwYWRyw6NvIG5hIGJ1c2NhIHLDoXBpZGEgYW8gaW5pY2lhbGl6YXIgbyBjb21wb25lbnRlXHJcbiAgICpcclxuICAgKi9cclxuICBASW5wdXQoJ3AtcXVpY2stc2VhcmNoLXZhbHVlJykgc2V0IHF1aWNrU2VhcmNoVmFsdWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fcXVpY2tTZWFyY2hWYWx1ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHF1aWNrU2VhcmNoVmFsdWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9xdWlja1NlYXJjaFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQG9wdGlvbmFsXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKlxyXG4gICAqIE9iamV0byBjb20gYXMgbGl0ZXJhaXMgdXNhZGFzIG5vIGBwby1wYWdlLWR5bmFtaWMtdGFibGVgLlxyXG4gICAqXHJcbiAgICogRXhpc3RlbSBkdWFzIG1hbmVpcmFzIGRlIGN1c3RvbWl6YXIgbyBjb21wb25lbnRlLCBwYXNzYW5kbyB1bSBvYmpldG8gY29tIHRvZGFzIGFzIGxpdGVyYWlzIGRpc3BvbsOtdmVpczpcclxuICAgKlxyXG4gICAqIGBgYFxyXG4gICAqICBjb25zdCBjdXN0b21MaXRlcmFsczogUG9QYWdlRHluYW1pY1NlYXJjaExpdGVyYWxzID0ge1xyXG4gICAqICAgIGRpc2NsYWltZXJHcm91cFRpdGxlOiAnRmlsdHJvcyBhcGxpY2Fkb3M6JyxcclxuICAgKiAgICBmaWx0ZXJUaXRsZTogJ0ZpbHRybyBhdmFuw6dhZG8nLFxyXG4gICAqICAgIGZpbHRlckNhbmNlbExhYmVsOiAnRmVjaGFyJyxcclxuICAgKiAgICBmaWx0ZXJDb25maXJtTGFiZWw6ICdBcGxpY2FyJyxcclxuICAgKiAgICBxdWlja1NlYXJjaExhYmVsOiAnVmFsb3IgcGVzcXVpc2FkbzonLFxyXG4gICAqICAgIHNlYXJjaFBsYWNlaG9sZGVyOiAnUGVzcXVpc2UgYXF1aSdcclxuICAgKiAgfTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIE91IHBhc3NhbmRvIGFwZW5hcyBhcyBsaXRlcmFpcyBxdWUgZGVzZWphIGN1c3RvbWl6YXI6XHJcbiAgICpcclxuICAgKiBgYGBcclxuICAgKiAgY29uc3QgY3VzdG9tTGl0ZXJhbHM6IFBvUGFnZUR5bmFtaWNTZWFyY2hMaXRlcmFscyA9IHtcclxuICAgKiAgICBmaWx0ZXJUaXRsZTogJ0ZpbHRybyBhdmFuw6dhZG8nXHJcbiAgICogIH07XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBFIHBhcmEgY2FycmVnYXIgYXMgbGl0ZXJhaXMgY3VzdG9taXphZGFzLCBiYXN0YSBhcGVuYXMgcGFzc2FyIG8gb2JqZXRvIHBhcmEgbyBjb21wb25lbnRlLlxyXG4gICAqXHJcbiAgICogYGBgXHJcbiAgICogPHBvLXBhZ2UtZHluYW1pYy10YWJsZVxyXG4gICAqICAgW3AtbGl0ZXJhbHNdPVwiY3VzdG9tTGl0ZXJhbHNcIj5cclxuICAgKiA8L3BvLXBhZ2UtZHluYW1pYy10YWJsZT5cclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqID4gTyB2YWxvciBwYWRyw6NvIHNlcsOhIHRyYWR1emlkbyBkZSBhY29yZG8gY29tIG8gaWRpb21hIGNvbmZpZ3VyYWRvIG5vIFtgUG9JMThuU2VydmljZWBdKC9kb2N1bWVudGF0aW9uL3BvLWkxOG4pIG91ICpicm93c2VyKi5cclxuICAgKi9cclxuICBASW5wdXQoJ3AtbGl0ZXJhbHMnKSBzZWFyY2hMaXRlcmFsczogUG9QYWdlRHluYW1pY1NlYXJjaExpdGVyYWxzO1xyXG5cclxuICAvKipcclxuICAgKiBAb3B0aW9uYWxcclxuICAgKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqXHJcbiAgICogSGFiaWxpdGEgbyBtb2RvIGRyYWcgYW5kIGRyb3AgcGFyYSBhcyBjb2x1bmFzIGRhIHRhYmVsYS5cclxuICAgKlxyXG4gICAqL1xyXG4gIEBJbnB1dCgncC1kcmFnZ2FibGUnKSBzZXQgZHJhZ2dhYmxlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9kcmFnZ2FibGUgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBkcmFnZ2FibGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZHJhZ2dhYmxlO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHBvRGlhbG9nU2VydmljZTogUG9EaWFsb2dTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwb05vdGlmaWNhdGlvbjogUG9Ob3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwb1BhZ2VEeW5hbWljU2VydmljZTogUG9QYWdlRHluYW1pY1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBvUGFnZUN1c3RvbWl6YXRpb25TZXJ2aWNlOiBQb1BhZ2VDdXN0b21pemF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgcG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2U6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlLFxyXG4gICAgbGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuXHJcbiAgICBjb25zdCBsYW5ndWFnZSA9IGxhbmd1YWdlU2VydmljZS5nZXRTaG9ydExhbmd1YWdlKCk7XHJcblxyXG4gICAgdGhpcy5saXRlcmFscyA9IHtcclxuICAgICAgLi4ucG9QYWdlRHluYW1pY1RhYmxlTGl0ZXJhbHNEZWZhdWx0W3BvTG9jYWxlRGVmYXVsdF0sXHJcbiAgICAgIC4uLnBvUGFnZUR5bmFtaWNUYWJsZUxpdGVyYWxzRGVmYXVsdFtsYW5ndWFnZV1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubG9hZERhdGFGcm9tQVBJKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgb25BZHZhbmNlZFNlYXJjaChmaWx0ZXIpIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5sb2FkRGF0YSh7IHBhZ2U6IDEsIC4uLmZpbHRlciB9KS5zdWJzY3JpYmUoKSk7XHJcbiAgICB0aGlzLnBhcmFtcyA9IGZpbHRlcjtcclxuXHJcbiAgICBpZiAodGhpcy5rZWVwRmlsdGVycykge1xyXG4gICAgICB0aGlzLnVwZGF0ZUZpbHRlclZhbHVlKGZpbHRlcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZURpc2NsYWltZXJzKGRpc2NsYWltZXJzKSB7XHJcbiAgICBjb25zdCBmaWx0ZXIgPSB7fTtcclxuXHJcbiAgICBkaXNjbGFpbWVycy5mb3JFYWNoKGRpc2NsYWltZXIgPT4ge1xyXG4gICAgICBmaWx0ZXJbZGlzY2xhaW1lci5wcm9wZXJ0eV0gPSBkaXNjbGFpbWVyLnZhbHVlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5vbkFkdmFuY2VkU2VhcmNoKGZpbHRlcik7XHJcbiAgfVxyXG5cclxuICBvblF1aWNrU2VhcmNoKHRlcm1UeXBlZEluUXVpY2tTZWFyY2gpIHtcclxuICAgIGNvbnN0IHF1aWNrU2VhcmNoUGFyYW0gPSB0ZXJtVHlwZWRJblF1aWNrU2VhcmNoID8geyBbdGhpcy5xdWlja1NlYXJjaFBhcmFtXTogdGVybVR5cGVkSW5RdWlja1NlYXJjaCB9IDoge307XHJcbiAgICB0aGlzLnBhcmFtcyA9IHRoaXMuY29uY2F0RmlsdGVycyA/IHsgLi4udGhpcy5wYXJhbXMsIC4uLnF1aWNrU2VhcmNoUGFyYW0gfSA6IHsgLi4ucXVpY2tTZWFyY2hQYXJhbSB9O1xyXG5cclxuICAgIGlmICh0aGlzLl9vbGRRdWlja1NlYXJjaFBhcmFtIGluIHRoaXMucGFyYW1zICYmIHRoaXMuX29sZFF1aWNrU2VhcmNoUGFyYW0gIT09IHRoaXMucXVpY2tTZWFyY2hQYXJhbSkge1xyXG4gICAgICBkZWxldGUgdGhpcy5wYXJhbXNbdGhpcy5fb2xkUXVpY2tTZWFyY2hQYXJhbV07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fb2xkUXVpY2tTZWFyY2hQYXJhbSA9IHRoaXMucXVpY2tTZWFyY2hQYXJhbTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5sb2FkRGF0YSh0ZXJtVHlwZWRJblF1aWNrU2VhcmNoID8geyBwYWdlOiAxLCAuLi50aGlzLnBhcmFtcyB9IDogdW5kZWZpbmVkKS5zdWJzY3JpYmUoKSk7XHJcbiAgfVxyXG5cclxuICBvblNvcnQoc29ydGVkQ29sdW1uOiBQb1RhYmxlQ29sdW1uU29ydCkge1xyXG4gICAgaWYgKHRoaXMuaGVpZ2h0KSB7XHJcbiAgICAgIGNvbnN0IG9yZGVyID0gc29ydGVkQ29sdW1uLnR5cGUgPT09ICdhc2NlbmRpbmcnID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICB1dGlsLnNvcnRBcnJheU9mT2JqZWN0cyh0aGlzLml0ZW1zLCBzb3J0ZWRDb2x1bW4uY29sdW1uLnByb3BlcnR5LCBvcmRlcik7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNvcnRlZENvbHVtbiA9IHNvcnRlZENvbHVtbjtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlVmlzaWJsZUNvbHVtbnModmFsdWUpIHtcclxuICAgIHRoaXMuY2hhbmdlVmlzaWJsZUNvbHVtbnMuZW1pdCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBvbkNvbHVtblJlc3RvcmVNYW5hZ2VyKHZhbHVlOiBBcnJheTxTdHJpbmc+KSB7XHJcbiAgICB0aGlzLmNvbHVtblJlc3RvcmVNYW5hZ2VyLmVtaXQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgb25Tb3J0Qnkoc29ydGVkQ29sdW1uOiBQb1RhYmxlQ29sdW1uU29ydCkge1xyXG4gICAgdGhpcy5zb3J0QnkuZW1pdChzb3J0ZWRDb2x1bW4pO1xyXG4gIH1cclxuXHJcbiAgc2hvd01vcmUoKSB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMubG9hZERhdGEoeyBwYWdlOiArK3RoaXMucGFnZSwgLi4udGhpcy5wYXJhbXMgfSkuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVuYWJsZVNlbGVjdGlvblRhYmxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFzQWN0aW9uUmVtb3ZlQWxsIHx8IHRoaXMuaGFzQ3VzdG9tQWN0aW9uV2l0aFNlbGVjdGFibGU7XHJcbiAgfVxyXG5cclxuICBnZXQgaGFzQWN0aW9uUmVtb3ZlQWxsKCkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5hY3Rpb25zLnJlbW92ZUFsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bsOnw6NvIHF1ZSByZWFsaXphIGEgYXR1YWxpemHDp8OjbyBkb3MgZGFkb3MgZGEgdGFiZWxhLlxyXG4gICAqXHJcbiAgICogUGFyYSB1dGlsaXrDoS1sYSDDqSBuZWNlc3PDoXJpbyBjYXB0dXJhciBhIGluc3TDom5jaWEgZG8gYHBhZ2UgZHluYW1pYyB0YWJsZWAsIGNvbW8gcG9yIGV4ZW1wbG86XHJcbiAgICpcclxuICAgKiBgYGAgaHRtbFxyXG4gICAqIDxwby1wYWdlLWR5bmFtaWMtdGFibGUgI2R5bmFtaWNUYWJsZSBbcC1zZXJ2aWNlLWFwaV09XCJzZXJ2aWNlQXBpXCI+PC9wby1wYWdlLWR5bmFtaWMtdGFibGU+XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBgYGAgamF2YXNjcmlwdFxyXG4gICAqIGltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUNvbXBvbmVudCwgUG9EeW5hbWljRm9ybUZpZWxkIH0gZnJvbSAnQHBvLXVpL25nLWNvbXBvbmVudHMnO1xyXG4gICAqXHJcbiAgICogLi4uXHJcbiAgICpcclxuICAgKiBAVmlld0NoaWxkKCdkeW5hbWljVGFibGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBkeW5hbWljVGFibGU6IFBvUGFnZUR5bmFtaWNUYWJsZUNvbXBvbmVudDtcclxuICAgKlxyXG4gICAqIHBhZ2VDdXN0b21BY3Rpb25zOiBBcnJheTxQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21BY3Rpb24+ID0gW1xyXG4gICAqIHtcclxuICAgKiAgIGxhYmVsOiAnVXBkYXRlJyxcclxuICAgKiAgIGFjdGlvbjogdGhpcy51cGRhdGVUYWJsZS5iaW5kKHRoaXMpLFxyXG4gICAqICAgaWNvbjogJ3BvLWljb24tcmVmcmVzaCdcclxuICAgKiB9XVxyXG4gICAqXHJcbiAgICogdXBkYXRlVGFibGUoKSB7XHJcbiAgICogICB0aGlzLmR5bmFtaWNUYWJsZS51cGRhdGVEYXRhVGFibGUoKTtcclxuICAgKiB9XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7e3BhZ2U6IG51bWJlciwga2V5OiB2YWx1ZSB9fSBmaWx0ZXIgUHJvcHJpZWRhZGUgcGFyYSBlbnZpbyBkZSB1bSBmaWx0cm8gY3VzdG9taXphZG8uXHJcbiAgICogRXhlbXBsbyBkZSBlbnZpbzpcclxuICAgKlxyXG4gICAqYGBgXHJcbiAgICogdGhpcy5keW5hbWljVGFibGUudXBkYXRlRGF0YVRhYmxlKHtwYWdlOiAzLCBzZWFyY2g6ICdCcmFzaWwnfSk7XHJcbiAgICogYGBgXHJcbiAgICogQ2FzbyBuw6NvIHNlamEgcGFzc2FkbyB1bSBmaWx0cm8gY3VzdG9taXphZG8gcGFyYSBvIG3DqXRvZG8gYHVwZGF0ZURhdGFUYWJsZWAgYSB0YWJlbGEgc2Vyw6EgYXR1YWxpemFkYSBjb25mb3JtZSBhIHDDoWdpbmEgZG8gdWx0aW1vIGl0ZW0gbW9kaWZpY2Fkby5cclxuICAgKi9cclxuICBwdWJsaWMgdXBkYXRlRGF0YVRhYmxlKGZpbHRlcj86IGFueSkge1xyXG4gICAgY29uc3QgaW5kZXhJdGVtU2VsZWN0ZWQgPSB0aGlzLml0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0gPT09IHRoaXMuaXRlbVNlbGVjdGVkQWN0aW9uKTtcclxuICAgIGNvbnN0IHBhZ2VOdW1iZXIgPSBNYXRoLmZsb29yKGluZGV4SXRlbVNlbGVjdGVkIC8gUEFHRV9TSVpFX0RFRkFVTFQpO1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2VOdW1iZXIgPCAwID8gdGhpcy5jdXJyZW50UGFnZSA6IHBhZ2VOdW1iZXIgKyAxO1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZmlsdGVyKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5sb2FkRGF0YShmaWx0ZXIpLnN1YnNjcmliZSgpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5sb2FkRGF0YSh7IHBhZ2U6IHRoaXMuY3VycmVudFBhZ2UsIC4uLnRoaXMucGFyYW1zIH0pLnN1YnNjcmliZSgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uZmlybVJlbW92ZShcclxuICAgIGFjdGlvblJlbW92ZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1sncmVtb3ZlJ10sXHJcbiAgICBhY3Rpb25CZWZvcmVSZW1vdmU6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ2JlZm9yZVJlbW92ZSddLFxyXG4gICAgaXRlbVxyXG4gICkge1xyXG4gICAgY29uc3QgY29uZmlybU9wdGlvbnM6IFBvRGlhbG9nQ29uZmlybU9wdGlvbnMgPSB7XHJcbiAgICAgIHRpdGxlOiB0aGlzLmxpdGVyYWxzLmNvbmZpcm1SZW1vdmVUaXRsZSxcclxuICAgICAgbWVzc2FnZTogdGhpcy5saXRlcmFscy5jb25maXJtUmVtb3ZlTWVzc2FnZSxcclxuICAgICAgY29uZmlybTogdGhpcy5yZW1vdmUuYmluZCh0aGlzLCBpdGVtLCBhY3Rpb25SZW1vdmUsIGFjdGlvbkJlZm9yZVJlbW92ZSlcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5wb0RpYWxvZ1NlcnZpY2UuY29uZmlybShjb25maXJtT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbmZpcm1SZW1vdmVBbGwoXHJcbiAgICBhY3Rpb25SZW1vdmVBbGw6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ3JlbW92ZSddLFxyXG4gICAgYWN0aW9uQmVmb3JlUmVtb3ZlQWxsOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydiZWZvcmVSZW1vdmUnXVxyXG4gICkge1xyXG4gICAgY29uc3QgY29uZmlybU9wdGlvbnM6IFBvRGlhbG9nQ29uZmlybU9wdGlvbnMgPSB7XHJcbiAgICAgIHRpdGxlOiB0aGlzLmxpdGVyYWxzLmNvbmZpcm1SZW1vdmVBbGxUaXRsZSxcclxuICAgICAgbWVzc2FnZTogdGhpcy5saXRlcmFscy5jb25maXJtUmVtb3ZlQWxsTWVzc2FnZSxcclxuICAgICAgY29uZmlybTogdGhpcy5yZW1vdmVBbGwuYmluZCh0aGlzLCBhY3Rpb25SZW1vdmVBbGwsIGFjdGlvbkJlZm9yZVJlbW92ZUFsbClcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5wb0RpYWxvZ1NlcnZpY2UuY29uZmlybShjb25maXJtT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdFVuaXF1ZUtleShpdGVtKSB7XHJcbiAgICBjb25zdCBrZXlzID0gdXRpbC5tYXBPYmplY3RCeVByb3BlcnRpZXMoaXRlbSwgdGhpcy5rZXlzKTtcclxuXHJcbiAgICByZXR1cm4gdXRpbC52YWx1ZXNGcm9tT2JqZWN0KGtleXMpLmpvaW4oJ3wnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0T3JkZXJQYXJhbShzb3J0ZWRDb2x1bW46IFBvVGFibGVDb2x1bW5Tb3J0ID0geyB0eXBlOiB1bmRlZmluZWQgfSkge1xyXG4gICAgY29uc3QgeyBjb2x1bW4sIHR5cGUgfSA9IHNvcnRlZENvbHVtbjtcclxuXHJcbiAgICBpZiAoIWNvbHVtbikge1xyXG4gICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFBvVGFibGVDb2x1bW5Tb3J0VHlwZS5EZXNjZW5kaW5nKSB7XHJcbiAgICAgIHJldHVybiB7IG9yZGVyOiBgLSR7Y29sdW1uLnByb3BlcnR5fWAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geyBvcmRlcjogYCR7Y29sdW1uLnByb3BlcnR5fWAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZERhdGEocGFyYW1zOiB7IHBhZ2U/OiBudW1iZXI7IHNlYXJjaD86IHN0cmluZyB9ID0ge30pIHtcclxuICAgIGlmICghdGhpcy5zZXJ2aWNlQXBpKSB7XHJcbiAgICAgIHRoaXMucG9Ob3RpZmljYXRpb24uZXJyb3IodGhpcy5saXRlcmFscy5sb2FkRGF0YUVycm9yTm90aWZpY2F0aW9uKTtcclxuICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG9yZGVyUGFyYW0gPSB0aGlzLmdldE9yZGVyUGFyYW0odGhpcy5zb3J0ZWRDb2x1bW4pO1xyXG4gICAgY29uc3QgZGVmYXVsdFBhcmFtczogYW55ID0geyBwYWdlOiAxLCBwYWdlU2l6ZTogUEFHRV9TSVpFX0RFRkFVTFQgfTtcclxuICAgIGNvbnN0IGZ1bGxQYXJhbXM6IGFueSA9IHsgLi4uZGVmYXVsdFBhcmFtcywgLi4ucGFyYW1zLCAuLi5vcmRlclBhcmFtIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2UuZ2V0UmVzb3VyY2VzKGZ1bGxQYXJhbXMpLnBpcGUoXHJcbiAgICAgIHRhcChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgbGV0IG5ld0FycmF5O1xyXG4gICAgICAgIGlmIChmdWxsUGFyYW1zLnBhZ2UgPT09IDEpIHtcclxuICAgICAgICAgIG5ld0FycmF5ID0gcmVtb3ZlRHVwbGljYXRlSXRlbXNXaXRoQXJyYXlLZXkocmVzcG9uc2UuaXRlbXMsIHJlc3BvbnNlLml0ZW1zLCB0aGlzLmtleXMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBuZXdBcnJheSA9IHJlbW92ZUR1cGxpY2F0ZUl0ZW1zV2l0aEFycmF5S2V5KHRoaXMuaXRlbXMsIHJlc3BvbnNlLml0ZW1zLCB0aGlzLmtleXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLml0ZW1zID0gbmV3QXJyYXkgPyBbLi4ubmV3QXJyYXldIDogdGhpcy5pdGVtcztcclxuICAgICAgICB0aGlzLnBhZ2UgPSBmdWxsUGFyYW1zLnBhZ2U7XHJcbiAgICAgICAgdGhpcy5oYXNOZXh0ID0gcmVzcG9uc2UuaGFzTmV4dDtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE1ldGFkYXRhKFxyXG4gICAgc2VydmljZUFwaUZyb21Sb3V0ZTogc3RyaW5nLFxyXG4gICAgb25Mb2FkOiBVcmxPclBvQ3VzdG9taXphdGlvbkZ1bmN0aW9uXHJcbiAgKTogT2JzZXJ2YWJsZTxQb1BhZ2VEeW5hbWljVGFibGVNZXRhRGF0YT4ge1xyXG4gICAgaWYgKHNlcnZpY2VBcGlGcm9tUm91dGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2UuZ2V0TWV0YWRhdGE8UG9QYWdlRHluYW1pY1RhYmxlTWV0YURhdGE+KCkucGlwZShcclxuICAgICAgICB0YXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgdGhpcy5hdXRvUm91dGVyID0gcmVzcG9uc2UuYXV0b1JvdXRlciB8fCB0aGlzLmF1dG9Sb3V0ZXI7XHJcbiAgICAgICAgICB0aGlzLmFjdGlvbnMgPSByZXNwb25zZS5hY3Rpb25zIHx8IHRoaXMuYWN0aW9ucztcclxuICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYiA9IHJlc3BvbnNlLmJyZWFkY3J1bWIgfHwgdGhpcy5icmVhZGNydW1iO1xyXG4gICAgICAgICAgdGhpcy5maWVsZHMgPSByZXNwb25zZS5maWVsZHMgfHwgdGhpcy5maWVsZHM7XHJcbiAgICAgICAgICB0aGlzLnRpdGxlID0gcmVzcG9uc2UudGl0bGUgfHwgdGhpcy50aXRsZTtcclxuICAgICAgICAgIHRoaXMucGFnZUN1c3RvbUFjdGlvbnMgPSByZXNwb25zZS5wYWdlQ3VzdG9tQWN0aW9ucyB8fCB0aGlzLnBhZ2VDdXN0b21BY3Rpb25zO1xyXG4gICAgICAgICAgdGhpcy50YWJsZUN1c3RvbUFjdGlvbnMgPSByZXNwb25zZS50YWJsZUN1c3RvbUFjdGlvbnMgfHwgdGhpcy50YWJsZUN1c3RvbUFjdGlvbnM7XHJcbiAgICAgICAgICB0aGlzLmtlZXBGaWx0ZXJzID0gcmVzcG9uc2Uua2VlcEZpbHRlcnMgfHwgdGhpcy5rZWVwRmlsdGVycztcclxuICAgICAgICAgIHRoaXMuY29uY2F0RmlsdGVycyA9IHJlc3BvbnNlLmNvbmNhdEZpbHRlcnMgfHwgdGhpcy5jb25jYXRGaWx0ZXJzO1xyXG4gICAgICAgICAgdGhpcy5oaWRlUmVtb3ZlQWxsRGlzY2xhaW1lciA9IHJlc3BvbnNlLmhpZGVSZW1vdmVBbGxEaXNjbGFpbWVyIHx8IHRoaXMuaGlkZVJlbW92ZUFsbERpc2NsYWltZXI7XHJcbiAgICAgICAgICB0aGlzLmhpZGVDbG9zZURpc2NsYWltZXJzID0gcmVzcG9uc2UuaGlkZUNsb3NlRGlzY2xhaW1lcnMgfHwgdGhpcy5oaWRlQ2xvc2VEaXNjbGFpbWVycztcclxuICAgICAgICAgIHRoaXMucXVpY2tTZWFyY2hXaWR0aCA9IHJlc3BvbnNlLnF1aWNrU2VhcmNoV2lkdGggfHwgdGhpcy5xdWlja1NlYXJjaFdpZHRoO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmxvYWRPcHRpb25zT25Jbml0aWFsaXplKG9uTG9hZCkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMubG9hZE9wdGlvbnNPbkluaXRpYWxpemUob25Mb2FkKTtcclxuICB9XHJcblxyXG4gIC8vIEB0b2RvIFZhbGlkYXIgcm90YXMgbmEgbcOjbyBwb2lzIHNlIGV4aXN0aXIgdW1hIHJvdGEgJyoqJyBvIGNhdGNoIGRvIG5hdmlnYXRpb24gbsOjbyBmdW5jaW9uYS5cclxuICBwcml2YXRlIG5hdmlnYXRlVG8oXHJcbiAgICByb3V0ZTogeyBwYXRoOiBzdHJpbmc7IGNvbXBvbmVudD87IHVybD86IHN0cmluZzsgcGFyYW1zPzogYW55IH0sXHJcbiAgICBmb3JjZVN0b3BBdXRvUm91dGVyOiBib29sZWFuID0gZmFsc2VcclxuICApIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtyb3V0ZS51cmwgfHwgcm91dGUucGF0aF0sIHsgcXVlcnlQYXJhbXM6IHJvdXRlLnBhcmFtcyB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgIGlmIChmb3JjZVN0b3BBdXRvUm91dGVyIHx8ICF0aGlzLmF1dG9Sb3V0ZXIpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucm91dGVyLmNvbmZpZy51bnNoaWZ0KDxSb3V0ZT57XHJcbiAgICAgICAgcGF0aDogcm91dGUucGF0aCxcclxuICAgICAgICBjb21wb25lbnQ6IHJvdXRlLmNvbXBvbmVudCxcclxuICAgICAgICBkYXRhOiB7IHNlcnZpY2VBcGk6IHRoaXMuc2VydmljZUFwaSwgYXV0b1JvdXRlcjogdHJ1ZSB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5uYXZpZ2F0ZVRvKHJvdXRlLCB0cnVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVDb25jYXRlbmF0ZWRVcmwoY29uY2F0S2V5czogYm9vbGVhbiwgdXJsOiBzdHJpbmcsIHNlbGVjdGVkSXRlbSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBrZXlzID0gdGhpcy5rZXlzLm1hcChrZXkgPT4gZW5jb2RlVVJJQ29tcG9uZW50KHNlbGVjdGVkSXRlbVtrZXldKSkuam9pbigpO1xyXG4gICAgcmV0dXJuIGNvbmNhdEtleXMgPyBgJHt1cmx9LyR7a2V5c31gIDogdXJsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvcGVuRGV0YWlsKGFjdGlvbjogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snZGV0YWlsJ10sIGl0ZW0pIHtcclxuICAgIGNvbnN0IGlkID0gdGhpcy5mb3JtYXRVbmlxdWVLZXkoaXRlbSk7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxyXG4gICAgICB0aGlzLnBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlXHJcbiAgICAgICAgLmJlZm9yZURldGFpbCh0aGlzLmFjdGlvbnMuYmVmb3JlRGV0YWlsLCBpZCwgaXRlbSlcclxuICAgICAgICAuc3Vic2NyaWJlKChiZWZvcmVEZXRhaWxSZXN1bHQ6IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZURldGFpbCkgPT5cclxuICAgICAgICAgIHRoaXMuZXhlY3V0ZURldGFpbChhY3Rpb24sIGJlZm9yZURldGFpbFJlc3VsdCwgaWQsIGl0ZW0pXHJcbiAgICAgICAgKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhlY3V0ZURldGFpbChcclxuICAgIGFjdGlvbjogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snZGV0YWlsJ10sXHJcbiAgICBiZWZvcmVEZXRhaWxSZXN1bHQ/OiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVOZXcsXHJcbiAgICBpZD86IHN0cmluZyxcclxuICAgIGl0ZW0/OiBhbnlcclxuICApIHtcclxuICAgIGNvbnN0IGJlZm9yZSA9IGJlZm9yZURldGFpbFJlc3VsdCA/PyB7fTtcclxuICAgIGNvbnN0IGFsbG93QWN0aW9uID0gdHlwZW9mIGJlZm9yZS5hbGxvd0FjdGlvbiA9PT0gJ2Jvb2xlYW4nID8gYmVmb3JlLmFsbG93QWN0aW9uIDogdHJ1ZTtcclxuICAgIGNvbnN0IHsgbmV3VXJsIH0gPSBiZWZvcmU7XHJcblxyXG4gICAgaWYgKGFsbG93QWN0aW9uICYmIGFjdGlvbikge1xyXG4gICAgICBpZiAobmV3VXJsKSB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZ2V0UGF0aEZyb21OZXdVcmwobmV3VXJsLCBpZCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVUbyh7IHBhdGggfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMucmVzb2x2ZVVybChpdGVtLCBhY3Rpb24pO1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGVUbyh7IHBhdGg6IGFjdGlvbiwgdXJsLCBjb21wb25lbnQ6IFBvUGFnZUR5bmFtaWNEZXRhaWxDb21wb25lbnQgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYWN0aW9uKGlkLCBpdGVtKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYXRoRnJvbU5ld1VybChuZXdVcmw6IHN0cmluZywgaWQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAobmV3VXJsLmluY2x1ZGVzKCc6aWQnKSkge1xyXG4gICAgICByZXR1cm4gbmV3VXJsLnJlcGxhY2UoLzppZC9nLCBpZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3VXJsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvcGVuRHVwbGljYXRlKGFjdGlvbkR1cGxpY2F0ZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snZHVwbGljYXRlJ10sIGl0ZW06IGFueSkge1xyXG4gICAgY29uc3QgaWQgPSB0aGlzLmZvcm1hdFVuaXF1ZUtleShpdGVtKTtcclxuICAgIGNvbnN0IGR1cGxpY2F0ZXMgPSB1dGlsLnJlbW92ZUtleXNQcm9wZXJ0aWVzKHRoaXMua2V5cywgdXRpbC5tYXBPYmplY3RCeVByb3BlcnRpZXMoaXRlbSwgdGhpcy5kdXBsaWNhdGVzKSk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcclxuICAgICAgdGhpcy5wb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZVxyXG4gICAgICAgIC5iZWZvcmVEdXBsaWNhdGUodGhpcy5hY3Rpb25zLmJlZm9yZUR1cGxpY2F0ZSwgaWQsIGR1cGxpY2F0ZXMpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoYmVmb3JlRHVwbGljYXRlUmVzdWx0OiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVEdXBsaWNhdGUpID0+XHJcbiAgICAgICAgICB0aGlzLmV4ZWN1dGVEdXBsaWNhdGUoYWN0aW9uRHVwbGljYXRlLCBiZWZvcmVEdXBsaWNhdGVSZXN1bHQsIGR1cGxpY2F0ZXMpXHJcbiAgICAgICAgKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhlY3V0ZUR1cGxpY2F0ZShcclxuICAgIGFjdGlvbkR1cGxpY2F0ZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snZHVwbGljYXRlJ10sXHJcbiAgICBiZWZvcmVEdXBsaWNhdGVSZXN1bHQ6IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZUR1cGxpY2F0ZSxcclxuICAgIGR1cGxpY2F0ZXM6IGFueVxyXG4gICkge1xyXG4gICAgY29uc3QgYmVmb3JlID0gYmVmb3JlRHVwbGljYXRlUmVzdWx0ID8/IHt9O1xyXG4gICAgY29uc3QgYWxsb3dBY3Rpb24gPSB0eXBlb2YgYmVmb3JlLmFsbG93QWN0aW9uID09PSAnYm9vbGVhbicgPyBiZWZvcmUuYWxsb3dBY3Rpb24gOiB0cnVlO1xyXG4gICAgY29uc3QgYmVmb3JlRHVwbGljYXRlUmVzb3VyY2UgPSBiZWZvcmUucmVzb3VyY2U7XHJcbiAgICBjb25zdCBuZXdBY3Rpb24gPSBiZWZvcmUubmV3VXJsID8/IGFjdGlvbkR1cGxpY2F0ZTtcclxuXHJcbiAgICBpZiAoYWxsb3dBY3Rpb24gJiYgYWN0aW9uRHVwbGljYXRlKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgYmVmb3JlRHVwbGljYXRlUmVzb3VyY2UgPT09ICdvYmplY3QnICYmIGJlZm9yZUR1cGxpY2F0ZVJlc291cmNlICE9PSBudWxsKSB7XHJcbiAgICAgICAgZHVwbGljYXRlcyA9IHV0aWwucmVtb3ZlS2V5c1Byb3BlcnRpZXModGhpcy5rZXlzLCBiZWZvcmVEdXBsaWNhdGVSZXNvdXJjZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlb2YgbmV3QWN0aW9uID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoOiBuZXdBY3Rpb24sIHBhcmFtczogeyBkdXBsaWNhdGU6IEpTT04uc3RyaW5naWZ5KGR1cGxpY2F0ZXMpIH0gfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBuZXdBY3Rpb24oZHVwbGljYXRlcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9wZW5FZGl0KGFjdGlvbkVkaXQ6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ2VkaXQnXSwgaXRlbSkge1xyXG4gICAgY29uc3QgaWQgPSB0aGlzLmZvcm1hdFVuaXF1ZUtleShpdGVtKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxyXG4gICAgICB0aGlzLnBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlXHJcbiAgICAgICAgLmJlZm9yZUVkaXQodGhpcy5hY3Rpb25zLmJlZm9yZUVkaXQsIGlkLCBpdGVtKVxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgc3dpdGNoTWFwKChiZWZvcmVFZGl0UmVzdWx0OiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVFZGl0KSA9PlxyXG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVFZGl0QWN0aW9uKGFjdGlvbkVkaXQsIGJlZm9yZUVkaXRSZXN1bHQsIGl0ZW0sIGlkKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIClcclxuICAgICAgICAuc3Vic2NyaWJlKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4ZWN1dGVFZGl0QWN0aW9uKFxyXG4gICAgYWN0aW9uOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydlZGl0J10sXHJcbiAgICBiZWZvcmVFZGl0UmVzdWx0OiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVFZGl0LFxyXG4gICAgaXRlbTogYW55LFxyXG4gICAgaWQ6IHN0cmluZ1xyXG4gICkge1xyXG4gICAgY29uc3QgbmV3RWRpdEFjdGlvbiA9IGJlZm9yZUVkaXRSZXN1bHQ/Lm5ld1VybCA/PyBhY3Rpb247XHJcbiAgICBjb25zdCBhbGxvd0FjdGlvbiA9IGJlZm9yZUVkaXRSZXN1bHQ/LmFsbG93QWN0aW9uID8/IHRydWU7XHJcblxyXG4gICAgaWYgKCFhbGxvd0FjdGlvbikge1xyXG4gICAgICByZXR1cm4gRU1QVFk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBuZXdFZGl0QWN0aW9uID09PSAnc3RyaW5nJykge1xyXG4gICAgICB0aGlzLm9wZW5FZGl0VXJsKG5ld0VkaXRBY3Rpb24sIGl0ZW0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgdXBkYXRlZEl0ZW0gPSBuZXdFZGl0QWN0aW9uKGlkLCBpdGVtKTtcclxuICAgICAgaWYgKHR5cGVvZiB1cGRhdGVkSXRlbSA9PT0gJ29iamVjdCcgJiYgdXBkYXRlZEl0ZW0gIT09IG51bGwpIHtcclxuICAgICAgICB0aGlzLm1vZGlmeVVJVGFibGVJdGVtKGl0ZW0sIHV0aWwucmVtb3ZlS2V5c1Byb3BlcnRpZXModGhpcy5rZXlzLCB1cGRhdGVkSXRlbSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIEVNUFRZO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvcGVuRWRpdFVybChwYXRoOiBzdHJpbmcsIGl0ZW0pIHtcclxuICAgIGNvbnN0IHVybCA9IHRoaXMucmVzb2x2ZVVybChpdGVtLCBwYXRoKTtcclxuXHJcbiAgICB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoLCB1cmwgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1vZGlmeVVJVGFibGVJdGVtKGN1cnJlbnRJdGVtLCBuZXdJdGVtVmFsdWUpIHtcclxuICAgIGNvbnN0IHRhYmxlSXRlbSA9IHRoaXMuaXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gY3VycmVudEl0ZW0pO1xyXG4gICAgdGhpcy5pdGVtc1t0YWJsZUl0ZW1dID0geyAuLi5jdXJyZW50SXRlbSwgLi4ubmV3SXRlbVZhbHVlIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9wZW5OZXcoYWN0aW9uTmV3OiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWyduZXcnXSkge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcclxuICAgICAgdGhpcy5wb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZVxyXG4gICAgICAgIC5iZWZvcmVOZXcodGhpcy5hY3Rpb25zLmJlZm9yZU5ldylcclxuICAgICAgICAuc3Vic2NyaWJlKChiZWZvcmVOZXdSZXN1bHQ6IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZU5ldykgPT4gdGhpcy5leGVjdXRlTmV3KGFjdGlvbk5ldywgYmVmb3JlTmV3UmVzdWx0KSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4ZWN1dGVOZXcoYWN0aW9uTmV3OiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWyduZXcnXSwgYmVmb3JlTmV3UmVzdWx0PzogUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlTmV3KSB7XHJcbiAgICBjb25zdCBiZWZvcmUgPSBiZWZvcmVOZXdSZXN1bHQgPz8ge307XHJcbiAgICBjb25zdCBhbGxvd0FjdGlvbiA9IHR5cGVvZiBiZWZvcmUuYWxsb3dBY3Rpb24gPT09ICdib29sZWFuJyA/IGJlZm9yZS5hbGxvd0FjdGlvbiA6IHRydWU7XHJcbiAgICBjb25zdCB7IG5ld1VybCB9ID0gYmVmb3JlO1xyXG5cclxuICAgIGlmIChhbGxvd0FjdGlvbiAmJiBhY3Rpb25OZXcpIHtcclxuICAgICAgaWYgKG5ld1VybCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoOiBuZXdVcmwgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlb2YgYWN0aW9uTmV3ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoOiBhY3Rpb25OZXcgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBhY3Rpb25OZXcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhc28gZXhpc3RhIG1haXMgZGUgdW0gaWRlbnRpZmljYWRvciwgc2Vyw6EgY29uY2F0ZW5hZG8gY29tICd8Jy5cclxuICAgKlxyXG4gICAqIEV4OiB7IGlkOiAxLCBjb21wYW55OiAncG8nIH1cclxuICAgKlxyXG4gICAqIFBhcmEgbyBlbmRwb2ludCAvcmVzb3VyY2VzLzppZCBzZXLDoSBleGVjdXRhZGEgYSB1cmwgL3Jlc291cmNlcy8xfHBvXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZW1vdmUoXHJcbiAgICBpdGVtLFxyXG4gICAgYWN0aW9uUmVtb3ZlOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydyZW1vdmUnXSxcclxuICAgIGFjdGlvbkJlZm9yZVJlbW92ZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snYmVmb3JlUmVtb3ZlJ11cclxuICApIHtcclxuICAgIGNvbnN0IHVuaXF1ZUtleSA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KGl0ZW0pO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXHJcbiAgICAgIHRoaXMucG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2VcclxuICAgICAgICAuYmVmb3JlUmVtb3ZlKGFjdGlvbkJlZm9yZVJlbW92ZSwgdW5pcXVlS2V5LCBpdGVtKVxyXG4gICAgICAgIC5waXBlKHN3aXRjaE1hcChiZWZvcmVSZW1vdmUgPT4gdGhpcy5kZWxldGVBY3Rpb24oaXRlbSwgYWN0aW9uUmVtb3ZlLCBiZWZvcmVSZW1vdmUpKSlcclxuICAgICAgICAuc3Vic2NyaWJlKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRlbGV0ZUFjdGlvbihcclxuICAgIGl0ZW0sXHJcbiAgICBhY3Rpb25SZW1vdmU6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ3JlbW92ZSddLFxyXG4gICAgYmVmb3JlUmVtb3ZlOiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVSZW1vdmVcclxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgeyBhbGxvd0FjdGlvbiwgbmV3VXJsIH0gPSBiZWZvcmVSZW1vdmUgfHwge307XHJcbiAgICBjb25zdCBhbGxvdyA9IGFsbG93QWN0aW9uID8/IHRydWU7XHJcblxyXG4gICAgaWYgKGFsbG93KSB7XHJcbiAgICAgIGxldCB1bmlxdWVLZXkgPSB0aGlzLmZvcm1hdFVuaXF1ZUtleShpdGVtKTtcclxuICAgICAgY29uc3QgcmVzb3VyY2VUb1JlbW92ZUtleSA9IHRoaXMucmV0dXJuUmVzb3VyY2VzS2V5cyhbaXRlbV0pO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBhY3Rpb25SZW1vdmUgPT09ICdib29sZWFuJyB8fCBuZXdVcmwpIHtcclxuICAgICAgICB1bmlxdWVLZXkgPSBuZXdVcmwgPyB1bmRlZmluZWQgOiB1bmlxdWVLZXk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2VcclxuICAgICAgICAgIC5kZWxldGVSZXNvdXJjZSh1bmlxdWVLZXksIG5ld1VybClcclxuICAgICAgICAgIC5waXBlKG1hcCgoKSA9PiB0aGlzLnJlbW92ZUZyb21VSShyZXNvdXJjZVRvUmVtb3ZlS2V5LCB0aGlzLmxpdGVyYWxzLnJlbW92ZVN1Y2Nlc3NOb3RpZmljYXRpb24pKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBvZihhY3Rpb25SZW1vdmUodW5pcXVlS2V5LCBpdGVtKSkucGlwZShcclxuICAgICAgICB0YXAocmVtb3ZlID0+IHtcclxuICAgICAgICAgIGNvbnN0IHJlbW92ZUl0ZW0gPSByZW1vdmUgPz8gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnJlbW92ZUZyb21VSShyZXNvdXJjZVRvUmVtb3ZlS2V5LCB0aGlzLmxpdGVyYWxzLnJlbW92ZVN1Y2Nlc3NOb3RpZmljYXRpb24sIHJlbW92ZUl0ZW0pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9mKHt9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlRnJvbVVJKGl0ZW1zOiBBcnJheTxhbnk+LCBtZXNzYWdlOiBzdHJpbmcsIHJlbW92ZSA9IHRydWUpIHtcclxuICAgIGlmIChyZW1vdmUgPT09IHRydWUgJiYgaXRlbXM/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnJlbW92ZUxvY2FsSXRlbXMoaXRlbXMpO1xyXG4gICAgICB0aGlzLnBvTm90aWZpY2F0aW9uLnN1Y2Nlc3MobWVzc2FnZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZUFsbChcclxuICAgIGFjdGlvblJlbW92ZUFsbDogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1sncmVtb3ZlQWxsJ10sXHJcbiAgICBhY3Rpb25CZWZvcmVSZW1vdmVBbGw6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ2JlZm9yZVJlbW92ZUFsbCddXHJcbiAgKSB7XHJcbiAgICBjb25zdCBvcmlnaW5hbFJlc291cmNlc0tleXMgPSB0aGlzLmdldFNlbGVjdGVkSXRlbXNLZXlzKCk7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxyXG4gICAgICB0aGlzLnBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlXHJcbiAgICAgICAgLmJlZm9yZVJlbW92ZUFsbChhY3Rpb25CZWZvcmVSZW1vdmVBbGwsIG9yaWdpbmFsUmVzb3VyY2VzS2V5cylcclxuICAgICAgICAucGlwZShzd2l0Y2hNYXAoYmVmb3JlUmVtb3ZlID0+IHRoaXMuZGVsZXRlQWxsQWN0aW9uKGFjdGlvblJlbW92ZUFsbCwgYmVmb3JlUmVtb3ZlLCBvcmlnaW5hbFJlc291cmNlc0tleXMpKSlcclxuICAgICAgICAuc3Vic2NyaWJlKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFNlbGVjdGVkSXRlbXNLZXlzKCkge1xyXG4gICAgY29uc3QgcmVzb3VyY2VzID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLiRzZWxlY3RlZCk7XHJcblxyXG4gICAgaWYgKHJlc291cmNlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMucmV0dXJuUmVzb3VyY2VzS2V5cyhyZXNvdXJjZXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXR1cm5SZXNvdXJjZXNLZXlzKHJlc291cmNlcykge1xyXG4gICAgcmV0dXJuIHV0aWwubWFwQXJyYXlCeVByb3BlcnRpZXMocmVzb3VyY2VzLCB0aGlzLmtleXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkZWxldGVBbGxBY3Rpb24oXHJcbiAgICBhY3Rpb25SZW1vdmVBbGw6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ3JlbW92ZUFsbCddLFxyXG4gICAgYmVmb3JlUmVtb3ZlQWxsOiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVSZW1vdmVBbGwsXHJcbiAgICBvcmlnaW5hbFJlc291cmNlczogQXJyYXk8YW55PlxyXG4gICkge1xyXG4gICAgY29uc3QgeyBhbGxvd0FjdGlvbiwgbmV3VXJsLCByZXNvdXJjZXMgfSA9IGJlZm9yZVJlbW92ZUFsbCA/PyB7fTtcclxuICAgIGNvbnN0IGFsbG93ID0gYWxsb3dBY3Rpb24gPz8gdHJ1ZTtcclxuICAgIGNvbnN0IHJlc291cmNlc3RvRGVsZXRlID0gcmVzb3VyY2VzID8/IG9yaWdpbmFsUmVzb3VyY2VzO1xyXG5cclxuICAgIGlmIChhbGxvdyAmJiBBcnJheS5pc0FycmF5KHJlc291cmNlc3RvRGVsZXRlKSkge1xyXG4gICAgICBpZiAodHlwZW9mIGFjdGlvblJlbW92ZUFsbCA9PT0gJ2Jvb2xlYW4nIHx8IG5ld1VybCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvUGFnZUR5bmFtaWNTZXJ2aWNlLmRlbGV0ZVJlc291cmNlcyhyZXNvdXJjZXN0b0RlbGV0ZSwgbmV3VXJsKS5waXBlKFxyXG4gICAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVGcm9tVUkocmVzb3VyY2VzdG9EZWxldGUsIHRoaXMubGl0ZXJhbHMucmVtb3ZlQWxsU3VjY2Vzc05vdGlmaWNhdGlvbik7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG9mKGFjdGlvblJlbW92ZUFsbChyZXNvdXJjZXN0b0RlbGV0ZSkpLnBpcGUoXHJcbiAgICAgICAgdGFwKHJlbW92ZUl0ZW1zID0+IHRoaXMucmVtb3ZlRnJvbVVJKHJlbW92ZUl0ZW1zLCB0aGlzLmxpdGVyYWxzLnJlbW92ZVN1Y2Nlc3NOb3RpZmljYXRpb24pKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvZih7fSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZUxvY2FsSXRlbXMoaXRlbXNLZXlzVG9SZW1vdmUgPSBbXSkge1xyXG4gICAgaWYgKGl0ZW1zS2V5c1RvUmVtb3ZlLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLml0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXRlbUtleSA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KGl0ZW0pO1xyXG4gICAgICAgIHJldHVybiAhaXRlbXNLZXlzVG9SZW1vdmUuZmluZChpdGVtS2V5VG9SZW1vdmUgPT4gdXRpbC52YWx1ZXNGcm9tT2JqZWN0KGl0ZW1LZXlUb1JlbW92ZSkuam9pbignfCcpID09PSBpdGVtS2V5KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc29sdmVVcmwoaXRlbTogYW55LCBwYXRoOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHVuaXF1ZUtleSA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KGl0ZW0pO1xyXG5cclxuICAgIHJldHVybiBwYXRoLnJlcGxhY2UoLzppZC9nLCB1bmlxdWVLZXkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRQYWdlQWN0aW9ucyhhY3Rpb25zOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zKSB7XHJcbiAgICBpZiAoYWN0aW9ucz8ubmV3KSB7XHJcbiAgICAgIHRoaXMuZGVmYXVsdFBhZ2VBY3Rpb25zID0gW3sgbGFiZWw6IHRoaXMubGl0ZXJhbHMucGFnZUFjdGlvbiwgYWN0aW9uOiB0aGlzLm9wZW5OZXcuYmluZCh0aGlzLCBhY3Rpb25zLm5ldykgfV07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRyYW5zZm9ybUN1c3RvbUFjdGlvbnNUb1BhZ2VMaXN0QWN0aW9uKFxyXG4gICAgY3VzdG9tQWN0aW9uczogQXJyYXk8UG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tQWN0aW9uPlxyXG4gICk6IEFycmF5PFBvUGFnZUFjdGlvbj4ge1xyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgIHJldHVybiBjdXN0b21BY3Rpb25zLm1hcChjdXN0b21BY3Rpb24gPT4gKHtcclxuICAgICAgbGFiZWw6IGN1c3RvbUFjdGlvbi5sYWJlbCxcclxuICAgICAgYWN0aW9uOiB0aGlzLmNhbGxQYWdlQ3VzdG9tQWN0aW9uLmJpbmQodGhpcywgY3VzdG9tQWN0aW9uKSxcclxuICAgICAgZGlzYWJsZWQ6IHRoaXMuaXNEaXNhYmxlUGFnZUN1c3RvbUFjdGlvbi5iaW5kKHRoaXMsIGN1c3RvbUFjdGlvbiksXHJcbiAgICAgIC4uLihjdXN0b21BY3Rpb24uaWNvbiAmJiB7IGljb246IGN1c3RvbUFjdGlvbi5pY29uIH0pLFxyXG4gICAgICB2aXNpYmxlOiBjdXN0b21BY3Rpb24udmlzaWJsZVxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cmFuc2Zvcm1UYWJsZUN1c3RvbUFjdGlvbnNUb1RhYmxlQWN0aW9ucyhcclxuICAgIHRhYmxlQ3VzdG9tQWN0aW9uczogQXJyYXk8UG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tVGFibGVBY3Rpb24+XHJcbiAgKTogQXJyYXk8UG9UYWJsZUFjdGlvbj4ge1xyXG4gICAgcmV0dXJuIHRhYmxlQ3VzdG9tQWN0aW9ucy5tYXAodGFibGVDdXN0b21BY3Rpb24gPT4gKHtcclxuICAgICAgbGFiZWw6IHRhYmxlQ3VzdG9tQWN0aW9uLmxhYmVsLFxyXG4gICAgICBpY29uOiB0YWJsZUN1c3RvbUFjdGlvbi5pY29uLFxyXG4gICAgICBhY3Rpb246IHRoaXMuY2FsbFRhYmxlQ3VzdG9tQWN0aW9uLmJpbmQodGhpcywgdGFibGVDdXN0b21BY3Rpb24pLFxyXG4gICAgICBkaXNhYmxlZDogdGFibGVDdXN0b21BY3Rpb24uZGlzYWJsZWQsXHJcbiAgICAgIHZpc2libGU6IHRhYmxlQ3VzdG9tQWN0aW9uLnZpc2libGVcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNEaXNhYmxlUGFnZUN1c3RvbUFjdGlvbihjdXN0b21BY3Rpb24pOiBib29sZWFuIHtcclxuICAgIHJldHVybiBjdXN0b21BY3Rpb24uc2VsZWN0YWJsZSAmJiAhdGhpcy5nZXRTZWxlY3RlZEl0ZW1zS2V5cygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxsUGFnZUN1c3RvbUFjdGlvbihjdXN0b21BY3Rpb246IFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbUFjdGlvbikge1xyXG4gICAgaWYgKGN1c3RvbUFjdGlvbi5hY3Rpb24pIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IGN1c3RvbUFjdGlvbi5zZWxlY3RhYmxlID8gdGhpcy5nZXRTZWxlY3RlZEl0ZW1zS2V5cygpIDogdW5kZWZpbmVkO1xyXG5cclxuICAgICAgY29uc3Qgc2VuZEN1c3RvbUFjdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMucG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2VcclxuICAgICAgICAuY3VzdG9tQWN0aW9uKGN1c3RvbUFjdGlvbi5hY3Rpb24sIHNlbGVjdGVkSXRlbXMpXHJcbiAgICAgICAgLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChzZW5kQ3VzdG9tQWN0aW9uU3Vic2NyaXB0aW9uKTtcclxuICAgIH0gZWxzZSBpZiAoY3VzdG9tQWN0aW9uLnVybCkge1xyXG4gICAgICB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoOiBjdXN0b21BY3Rpb24udXJsIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxsVGFibGVDdXN0b21BY3Rpb24oY3VzdG9tQWN0aW9uOiBQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21UYWJsZUFjdGlvbiwgc2VsZWN0ZWRJdGVtKSB7XHJcbiAgICB0aGlzLml0ZW1TZWxlY3RlZEFjdGlvbiA9IHNlbGVjdGVkSXRlbTtcclxuICAgIGlmIChjdXN0b21BY3Rpb24uYWN0aW9uKSB7XHJcbiAgICAgIGNvbnN0IHNlbmRDdXN0b21BY3Rpb25TdWJzY3JpcHRpb24gPSB0aGlzLnBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlXHJcbiAgICAgICAgLmN1c3RvbUFjdGlvbihjdXN0b21BY3Rpb24uYWN0aW9uLCBzZWxlY3RlZEl0ZW0pXHJcbiAgICAgICAgLnN1YnNjcmliZSh1cGRhdGVkSXRlbSA9PiB7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIHVwZGF0ZWRJdGVtID09PSAnb2JqZWN0JyAmJiB1cGRhdGVkSXRlbSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGlmeVVJVGFibGVJdGVtKHNlbGVjdGVkSXRlbSwgdXRpbC5yZW1vdmVLZXlzUHJvcGVydGllcyh0aGlzLmtleXMsIHVwZGF0ZWRJdGVtKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHNlbmRDdXN0b21BY3Rpb25TdWJzY3JpcHRpb24pO1xyXG4gICAgfSBlbHNlIGlmIChjdXN0b21BY3Rpb24udXJsKSB7XHJcbiAgICAgIGlmIChpc0V4dGVybmFsTGluayhjdXN0b21BY3Rpb24udXJsKSkge1xyXG4gICAgICAgIG9wZW5FeHRlcm5hbExpbmsodGhpcy5jcmVhdGVDb25jYXRlbmF0ZWRVcmwoY3VzdG9tQWN0aW9uLmNvbmNhdEtleXMsIGN1c3RvbUFjdGlvbi51cmwsIHNlbGVjdGVkSXRlbSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGVUbyh7XHJcbiAgICAgICAgICBwYXRoOiB0aGlzLmNyZWF0ZUNvbmNhdGVuYXRlZFVybChjdXN0b21BY3Rpb24uY29uY2F0S2V5cywgY3VzdG9tQWN0aW9uLnVybCwgc2VsZWN0ZWRJdGVtKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFJlbW92ZUFsbEFjdGlvbigpIHtcclxuICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX2FjdGlvbnM7XHJcbiAgICBpZiAodGhpcy5zaG93UmVtb3ZlKGFjdGlvbi5yZW1vdmVBbGwpKSB7XHJcbiAgICAgIHRoaXMuZGVmYXVsdFBhZ2VBY3Rpb25zID0gW1xyXG4gICAgICAgIC4uLnRoaXMuX2RlZmF1bHRQYWdlQWN0aW9ucyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsYWJlbDogdGhpcy5saXRlcmFscy5wYWdlQWN0aW9uUmVtb3ZlQWxsLFxyXG4gICAgICAgICAgYWN0aW9uOiB0aGlzLmNvbmZpcm1SZW1vdmVBbGwuYmluZCh0aGlzLCBhY3Rpb24ucmVtb3ZlQWxsLCBhY3Rpb24uYmVmb3JlUmVtb3ZlQWxsKSxcclxuICAgICAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVSZW1vdmVBbGwuYmluZCh0aGlzKVxyXG4gICAgICAgIH1cclxuICAgICAgXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGlzYWJsZVJlbW92ZUFsbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5nZXRTZWxlY3RlZEl0ZW1zS2V5cygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRUYWJsZUFjdGlvbnMoYWN0aW9uczogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9ucykge1xyXG4gICAgaWYgKGFjdGlvbnMpIHtcclxuICAgICAgY29uc3QgdmlzaWJsZVJlbW92ZSA9IHRoaXMuc2hvd1JlbW92ZShhY3Rpb25zLnJlbW92ZSk7XHJcbiAgICAgIHRoaXMuZGVmYXVsdFRhYmxlQWN0aW9ucyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBhY3Rpb246IHRoaXMub3BlbkRldGFpbC5iaW5kKHRoaXMsIGFjdGlvbnMuZGV0YWlsKSxcclxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxpdGVyYWxzLnRhYmxlQWN0aW9uVmlldyxcclxuICAgICAgICAgIHZpc2libGU6ICEhdGhpcy5fYWN0aW9ucy5kZXRhaWxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGFjdGlvbjogdGhpcy5vcGVuRWRpdC5iaW5kKHRoaXMsIGFjdGlvbnMuZWRpdCksXHJcbiAgICAgICAgICBsYWJlbDogdGhpcy5saXRlcmFscy50YWJsZUFjdGlvbkVkaXQsXHJcbiAgICAgICAgICB2aXNpYmxlOiAhIXRoaXMuX2FjdGlvbnMuZWRpdFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgYWN0aW9uOiB0aGlzLm9wZW5EdXBsaWNhdGUuYmluZCh0aGlzLCBhY3Rpb25zLmR1cGxpY2F0ZSksXHJcbiAgICAgICAgICBsYWJlbDogdGhpcy5saXRlcmFscy50YWJsZUFjdGlvbkR1cGxpY2F0ZSxcclxuICAgICAgICAgIHZpc2libGU6ICEhdGhpcy5fYWN0aW9ucy5kdXBsaWNhdGVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGFjdGlvbjogdGhpcy5jb25maXJtUmVtb3ZlLmJpbmQodGhpcywgYWN0aW9ucy5yZW1vdmUsIGFjdGlvbnMuYmVmb3JlUmVtb3ZlKSxcclxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxpdGVyYWxzLnRhYmxlQWN0aW9uRGVsZXRlLFxyXG4gICAgICAgICAgc2VwYXJhdG9yOiB0cnVlLFxyXG4gICAgICAgICAgdHlwZTogJ2RhbmdlcicsXHJcbiAgICAgICAgICB2aXNpYmxlOiB2aXNpYmxlUmVtb3ZlXHJcbiAgICAgICAgfVxyXG4gICAgICBdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkRGF0YUZyb21BUEkoKSB7XHJcbiAgICBjb25zdCB7IHNlcnZpY2VBcGk6IHNlcnZpY2VBcGlGcm9tUm91dGUsIHNlcnZpY2VNZXRhZGF0YUFwaSwgc2VydmljZUxvYWRBcGkgfSA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YTtcclxuXHJcbiAgICBjb25zdCBvbkxvYWQgPSBzZXJ2aWNlTG9hZEFwaSB8fCB0aGlzLm9uTG9hZDtcclxuICAgIHRoaXMuc2VydmljZUFwaSA9IHNlcnZpY2VBcGlGcm9tUm91dGUgfHwgdGhpcy5zZXJ2aWNlQXBpO1xyXG5cclxuICAgIHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2UuY29uZmlnU2VydmljZUFwaSh7IGVuZHBvaW50OiB0aGlzLnNlcnZpY2VBcGksIG1ldGFkYXRhOiBzZXJ2aWNlTWV0YWRhdGFBcGkgfSk7XHJcblxyXG4gICAgY29uc3QgbWV0YWRhdGEkID0gdGhpcy5nZXRNZXRhZGF0YShzZXJ2aWNlQXBpRnJvbVJvdXRlLCBvbkxvYWQpO1xyXG4gICAgbGV0IGRhdGEkO1xyXG4gICAgaWYgKHRoaXMucXVpY2tTZWFyY2hWYWx1ZSkge1xyXG4gICAgICBjb25zdCBwYXJhbXNRdWlja1NlYXJjaFZhbHVlID0geyBbdGhpcy5xdWlja1NlYXJjaFBhcmFtXTogdGhpcy5xdWlja1NlYXJjaFZhbHVlIH07XHJcbiAgICAgIGRhdGEkID0gdGhpcy5sb2FkRGF0YShwYXJhbXNRdWlja1NlYXJjaFZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRhdGEkID0gdGhpcy5sb2FkRGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXHJcbiAgICAgIG1ldGFkYXRhJFxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5pdGlhbEZpbHRlcnMgPSB0aGlzLmdldEluaXRpYWxWYWx1ZXNGcm9tRmlsdGVyKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIU9iamVjdC5rZXlzKGluaXRpYWxGaWx0ZXJzKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZGF0YSQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBFTVBUWTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SW5pdGlhbFZhbHVlc0Zyb21GaWx0ZXIoKSB7XHJcbiAgICBjb25zdCBpbml0aWFsRmlsdGVycyA9IHRoaXMuZmlsdGVycy5yZWR1Y2UoXHJcbiAgICAgIChyZXN1bHQsIGl0ZW0pID0+IE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7IFtpdGVtLnByb3BlcnR5XTogaXRlbS5pbml0VmFsdWUgfSksXHJcbiAgICAgIHt9XHJcbiAgICApO1xyXG5cclxuICAgIE9iamVjdC5rZXlzKGluaXRpYWxGaWx0ZXJzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgIGlmICghaW5pdGlhbEZpbHRlcnNba2V5XSkge1xyXG4gICAgICAgIGRlbGV0ZSBpbml0aWFsRmlsdGVyc1trZXldO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gaW5pdGlhbEZpbHRlcnM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRPcHRpb25zT25Jbml0aWFsaXplKG9uTG9hZDogVXJsT3JQb0N1c3RvbWl6YXRpb25GdW5jdGlvbikge1xyXG4gICAgaWYgKG9uTG9hZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRQb0R5bmFtaWNQYWdlT3B0aW9ucyhvbkxvYWQpLnBpcGUoXHJcbiAgICAgICAgdGFwKHJlc3BvbnNlUG9PcHRpb24gPT5cclxuICAgICAgICAgIHRoaXMucG9QYWdlQ3VzdG9taXphdGlvblNlcnZpY2UuY2hhbmdlT3JpZ2luYWxPcHRpb25zVG9OZXdPcHRpb25zKHRoaXMsIHJlc3BvbnNlUG9PcHRpb24pXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvZihudWxsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UG9EeW5hbWljUGFnZU9wdGlvbnMob25Mb2FkOiBVcmxPclBvQ3VzdG9taXphdGlvbkZ1bmN0aW9uKTogT2JzZXJ2YWJsZTxQb1BhZ2VEeW5hbWljVGFibGVPcHRpb25zPiB7XHJcbiAgICBjb25zdCBvcmlnaW5hbE9wdGlvbjogUG9QYWdlRHluYW1pY1RhYmxlT3B0aW9ucyA9IHtcclxuICAgICAgZmllbGRzOiB0aGlzLmZpZWxkcyxcclxuICAgICAgYWN0aW9uczogdGhpcy5hY3Rpb25zLFxyXG4gICAgICBicmVhZGNydW1iOiB0aGlzLmJyZWFkY3J1bWIsXHJcbiAgICAgIHRpdGxlOiB0aGlzLnRpdGxlLFxyXG4gICAgICBrZWVwRmlsdGVyczogdGhpcy5rZWVwRmlsdGVycyxcclxuICAgICAgY29uY2F0RmlsdGVyczogdGhpcy5jb25jYXRGaWx0ZXJzLFxyXG4gICAgICBoaWRlUmVtb3ZlQWxsRGlzY2xhaW1lcjogdGhpcy5oaWRlUmVtb3ZlQWxsRGlzY2xhaW1lcixcclxuICAgICAgaGlkZUNsb3NlRGlzY2xhaW1lcnM6IHRoaXMuaGlkZUNsb3NlRGlzY2xhaW1lcnMsXHJcbiAgICAgIHBhZ2VDdXN0b21BY3Rpb25zOiB0aGlzLnBhZ2VDdXN0b21BY3Rpb25zLFxyXG4gICAgICB0YWJsZUN1c3RvbUFjdGlvbnM6IHRoaXMudGFibGVDdXN0b21BY3Rpb25zLFxyXG4gICAgICBxdWlja1NlYXJjaFdpZHRoOiB0aGlzLnF1aWNrU2VhcmNoV2lkdGhcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcGFnZU9wdGlvblNjaGVtYTogUG9QYWdlRHluYW1pY09wdGlvbnNTY2hlbWE8UG9QYWdlRHluYW1pY1RhYmxlT3B0aW9ucz4gPSB7XHJcbiAgICAgIHNjaGVtYTogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWVQcm9wOiAnZmllbGRzJyxcclxuICAgICAgICAgIG1lcmdlOiB0cnVlLFxyXG4gICAgICAgICAga2V5Rm9yTWVyZ2U6ICdwcm9wZXJ0eSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWVQcm9wOiAnYWN0aW9ucycsXHJcbiAgICAgICAgICBtZXJnZTogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZVByb3A6ICdicmVhZGNydW1iJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZVByb3A6ICd0aXRsZSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWVQcm9wOiAna2VlcEZpbHRlcnMnXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lUHJvcDogJ3F1aWNrU2VhcmNoV2lkdGgnXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lUHJvcDogJ2NvbmNhdEZpbHRlcnMnXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lUHJvcDogJ2hpZGVSZW1vdmVBbGxEaXNjbGFpbWVyJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZVByb3A6ICdoaWRlQ2xvc2VEaXNjbGFpbWVycydcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWVQcm9wOiAncGFnZUN1c3RvbUFjdGlvbnMnLFxyXG4gICAgICAgICAgbWVyZ2U6IHRydWUsXHJcbiAgICAgICAgICBrZXlGb3JNZXJnZTogJ2xhYmVsJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZVByb3A6ICd0YWJsZUN1c3RvbUFjdGlvbnMnLFxyXG4gICAgICAgICAgbWVyZ2U6IHRydWUsXHJcbiAgICAgICAgICBrZXlGb3JNZXJnZTogJ2xhYmVsJ1xyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5wb1BhZ2VDdXN0b21pemF0aW9uU2VydmljZS5nZXRDdXN0b21PcHRpb25zKG9uTG9hZCwgb3JpZ2luYWxPcHRpb24sIHBhZ2VPcHRpb25TY2hlbWEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzaG93UmVtb3ZlPFQ+KGFjdGlvblJlbW92ZTogVCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgYWN0aW9uID0gYWN0aW9uUmVtb3ZlID8/IGZhbHNlO1xyXG4gICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09ICdib29sZWFuJykge1xyXG4gICAgICByZXR1cm4gYWN0aW9uO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUZpbHRlclZhbHVlKGZpbHRlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuZmllbGRzLm1hcChpdGVtID0+IHtcclxuICAgICAgaWYgKGZpbHRlci5oYXNPd25Qcm9wZXJ0eShpdGVtLnByb3BlcnR5KSkge1xyXG4gICAgICAgIGl0ZW0uaW5pdFZhbHVlID0gZmlsdGVyW2l0ZW0ucHJvcGVydHldO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUGFnZUFjdGlvbnMoKSB7XHJcbiAgICB0aGlzLnBhZ2VBY3Rpb25zID0gWy4uLnRoaXMuX2RlZmF1bHRQYWdlQWN0aW9ucywgLi4udGhpcy5fY3VzdG9tUGFnZUxpc3RBY3Rpb25zXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlVGFibGVBY3Rpb25zKCkge1xyXG4gICAgY29uc3QgZGVmYXVsdFRhYmxlQWN0aW9uc1dpdGhvdXRBY3Rpb25EZWxldGUgPSB0aGlzLl9kZWZhdWx0VGFibGVBY3Rpb25zLmZpbHRlcihcclxuICAgICAgdGFibGVBY3Rpb24gPT4gdGFibGVBY3Rpb24ubGFiZWwgIT09IHRoaXMubGl0ZXJhbHMudGFibGVBY3Rpb25EZWxldGVcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgdGFibGVBY3Rpb25EZWxldGUgPSB0aGlzLl9kZWZhdWx0VGFibGVBY3Rpb25zLmZpbmQoXHJcbiAgICAgIHRhYmxlQWN0aW9uID0+IHRhYmxlQWN0aW9uLmxhYmVsID09PSB0aGlzLmxpdGVyYWxzLnRhYmxlQWN0aW9uRGVsZXRlXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IG5ld1RhYmxlQWN0aW9ucyA9IFsuLi5kZWZhdWx0VGFibGVBY3Rpb25zV2l0aG91dEFjdGlvbkRlbGV0ZSwgLi4udGhpcy5fY3VzdG9tVGFibGVBY3Rpb25zXTtcclxuXHJcbiAgICBpZiAodGFibGVBY3Rpb25EZWxldGUpIHtcclxuICAgICAgbmV3VGFibGVBY3Rpb25zLnB1c2godGFibGVBY3Rpb25EZWxldGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudGFibGVBY3Rpb25zID0gbmV3VGFibGVBY3Rpb25zO1xyXG4gIH1cclxufVxyXG4iLCI8cG8tcGFnZS1keW5hbWljLXNlYXJjaFxyXG4gIFtwLWFjdGlvbnNdPVwicGFnZUFjdGlvbnNcIlxyXG4gIFtwLWJyZWFkY3J1bWJdPVwiYnJlYWRjcnVtYlwiXHJcbiAgW3AtaGlkZS1jbG9zZS1kaXNjbGFpbWVyc109XCJoaWRlQ2xvc2VEaXNjbGFpbWVyc1wiXHJcbiAgW3AtZmlsdGVyc109XCJmaWx0ZXJzXCJcclxuICBbcC1rZWVwLWZpbHRlcnNdPVwia2VlcEZpbHRlcnNcIlxyXG4gIFtwLWxpdGVyYWxzXT1cInNlYXJjaExpdGVyYWxzXCJcclxuICBbcC1jb25jYXQtZmlsdGVyc109XCJjb25jYXRGaWx0ZXJzXCJcclxuICBbcC1oaWRlLXJlbW92ZS1hbGwtZGlzY2xhaW1lcl09XCJoaWRlUmVtb3ZlQWxsRGlzY2xhaW1lclwiXHJcbiAgW3AtcXVpY2stc2VhcmNoLXdpZHRoXT1cInF1aWNrU2VhcmNoV2lkdGhcIlxyXG4gIFtwLXRpdGxlXT1cInRpdGxlXCJcclxuICAocC1hZHZhbmNlZC1zZWFyY2gpPVwib25BZHZhbmNlZFNlYXJjaCgkZXZlbnQpXCJcclxuICAocC1jaGFuZ2UtZGlzY2xhaW1lcnMpPVwib25DaGFuZ2VEaXNjbGFpbWVycygkZXZlbnQpXCJcclxuICAocC1xdWljay1zZWFyY2gpPVwib25RdWlja1NlYXJjaCgkZXZlbnQpXCJcclxuICBbcC1xdWljay1zZWFyY2gtdmFsdWVdPVwicXVpY2tTZWFyY2hWYWx1ZSB8fCAnJ1wiXHJcbj5cclxuICA8cG8tdGFibGVcclxuICAgIFtwLXNvcnRdPVwidHJ1ZVwiXHJcbiAgICBbcC1oaWRlLXRhYmxlLXNlYXJjaF09XCJ0cnVlXCJcclxuICAgIFtwLWFjdGlvbnNdPVwidGFibGVBY3Rpb25zXCJcclxuICAgIFtwLWFjdGlvbnMtcmlnaHRdPVwiYWN0aW9uUmlnaHRcIlxyXG4gICAgW3Atc2VsZWN0YWJsZV09XCJlbmFibGVTZWxlY3Rpb25UYWJsZVwiXHJcbiAgICBbcC1jb2x1bW5zXT1cImNvbHVtbnNcIlxyXG4gICAgW3AtaXRlbXNdPVwiaXRlbXNcIlxyXG4gICAgW3AtaGVpZ2h0XT1cImhlaWdodFwiXHJcbiAgICBbcC1oaWRlLWJhdGNoLWFjdGlvbnNdPVwidHJ1ZVwiXHJcbiAgICBbcC1pbmZpbml0ZS1zY3JvbGxdPVwiaW5maW5pdGVTY3JvbGxcIlxyXG4gICAgW3Atc2hvdy1tb3JlLWRpc2FibGVkXT1cIiFoYXNOZXh0XCJcclxuICAgIChwLXNob3ctbW9yZSk9XCJzaG93TW9yZSgpXCJcclxuICAgIChwLXNvcnQtYnkpPVwib25Tb3J0KCRldmVudClcIlxyXG4gICAgKHAtY2hhbmdlLXZpc2libGUtY29sdW1ucyk9XCJvbkNoYW5nZVZpc2libGVDb2x1bW5zKCRldmVudClcIlxyXG4gICAgKHAtcmVzdG9yZS1jb2x1bW4tbWFuYWdlcik9XCJvbkNvbHVtblJlc3RvcmVNYW5hZ2VyKCRldmVudClcIlxyXG4gICAgKHAtc29ydC1ieSk9XCJvblNvcnRCeSgkZXZlbnQpXCJcclxuICAgIFtwLWRyYWdnYWJsZV09XCJkcmFnZ2FibGVcIlxyXG4gID5cclxuICA8L3BvLXRhYmxlPlxyXG48L3BvLXBhZ2UtZHluYW1pYy1zZWFyY2g+XHJcbiJdfQ==
|