@wavemaker/app-ng-runtime 11.6.0-next.140456 → 11.6.0-next.140457
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.
- app-ng-runtime/build-task/bundles/index.umd.js +1 -1
- app-ng-runtime/build-task/esm2022/data/form/form-field/form-field.build.mjs +3 -3
- app-ng-runtime/build-task/fesm2022/index.mjs +1 -1
- app-ng-runtime/build-task/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/chart/bundles/index.umd.js +1 -1
- app-ng-runtime/components/chart/esm2022/chart.utils.mjs +2 -2
- app-ng-runtime/components/chart/fesm2022/index.mjs +1 -1
- app-ng-runtime/components/chart/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/data/form/bundles/index.umd.js +41 -24
- app-ng-runtime/components/data/form/esm2022/form-field/form-field.directive.mjs +31 -22
- app-ng-runtime/components/data/form/esm2022/form.component.mjs +22 -10
- app-ng-runtime/components/data/form/fesm2022/index.mjs +45 -24
- app-ng-runtime/components/data/form/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/data/form/form-field/form-field.directive.d.ts +3 -1
- app-ng-runtime/components/data/form/form.component.d.ts +2 -2
- app-ng-runtime/components/data/table/bundles/index.umd.js +6 -2
- app-ng-runtime/components/data/table/esm2022/table.component.mjs +10 -7
- app-ng-runtime/components/data/table/fesm2022/index.mjs +6 -2
- app-ng-runtime/components/data/table/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/data/table/table.component.d.ts +4 -4
- app-ng-runtime/components/input/calendar/bundles/index.umd.js +6 -0
- app-ng-runtime/components/input/calendar/calendar.component.d.ts +1 -1
- app-ng-runtime/components/input/calendar/esm2022/calendar.component.mjs +8 -2
- app-ng-runtime/components/input/calendar/fesm2022/index.mjs +6 -0
- app-ng-runtime/components/input/calendar/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/default/bundles/index.umd.js +52 -30
- app-ng-runtime/components/input/default/caption-position.directive.d.ts +1 -1
- app-ng-runtime/components/input/default/esm2022/caption-position.directive.mjs +2 -2
- app-ng-runtime/components/input/default/esm2022/select/select.component.mjs +60 -37
- app-ng-runtime/components/input/default/fesm2022/index.mjs +53 -31
- app-ng-runtime/components/input/default/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/default/select/select.component.d.ts +4 -1
- app-ng-runtime/components/input/epoch/base-date-time.component.d.ts +11 -11
- app-ng-runtime/components/input/epoch/bundles/index.umd.js +112 -87
- app-ng-runtime/components/input/epoch/esm2022/base-date-time.component.mjs +100 -78
- app-ng-runtime/components/input/epoch/esm2022/date/date.component.mjs +5 -5
- app-ng-runtime/components/input/epoch/esm2022/date-time/date-time.component.mjs +6 -5
- app-ng-runtime/components/input/epoch/esm2022/time/time.component.mjs +7 -5
- app-ng-runtime/components/input/epoch/fesm2022/index.mjs +112 -87
- app-ng-runtime/components/input/epoch/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/navigation/menu/bundles/index.umd.js +15 -5
- app-ng-runtime/components/navigation/menu/esm2022/menu.component.mjs +14 -6
- app-ng-runtime/components/navigation/menu/esm2022/menu.props.mjs +2 -1
- app-ng-runtime/components/navigation/menu/esm2022/nav/nav.component.mjs +3 -3
- app-ng-runtime/components/navigation/menu/esm2022/nav/nav.props.mjs +2 -1
- app-ng-runtime/components/navigation/menu/fesm2022/index.mjs +15 -5
- app-ng-runtime/components/navigation/menu/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/navigation/menu/menu.component.d.ts +3 -0
- app-ng-runtime/components/navigation/menu/nav/nav.component.d.ts +1 -0
- app-ng-runtime/components/navigation/popover/bundles/index.umd.js +8 -8
- app-ng-runtime/components/navigation/popover/esm2022/popover.component.mjs +11 -11
- app-ng-runtime/components/navigation/popover/fesm2022/index.mjs +8 -8
- app-ng-runtime/components/navigation/popover/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/core/bundles/index.umd.js +2 -1
- app-ng-runtime/core/esm2022/utils/utils.mjs +4 -3
- app-ng-runtime/core/fesm2022/index.mjs +2 -1
- app-ng-runtime/core/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/package.json +1 -1
- app-ng-runtime/runtime/base/bundles/index.umd.js +4 -0
- app-ng-runtime/runtime/base/components/base-page.component.d.ts +2 -3
- app-ng-runtime/runtime/base/esm2022/components/base-page.component.mjs +7 -4
- app-ng-runtime/runtime/base/fesm2022/index.mjs +5 -1
- app-ng-runtime/runtime/base/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/scripts/@wavemaker/nvd3/build/nv.d3.min.js +1 -1
- app-ng-runtime/scripts/datatable/datatable.js +5 -2
- app-ng-runtime/variables/bundles/index.umd.js +13 -7
- app-ng-runtime/variables/esm2022/util/variable/variables.utils.mjs +15 -9
- app-ng-runtime/variables/fesm2022/index.mjs +13 -7
- app-ng-runtime/variables/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/variables/util/variable/variables.utils.d.ts +1 -1
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { Attribute, Component,
|
|
1
|
+
import { Attribute, Component, ContentChild, ContentChildren, ElementRef, HostListener, Injector, NgZone, Optional, QueryList, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';
|
|
2
2
|
import { FormBuilder, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
-
import {
|
|
3
|
+
import { $appDigest, $invokeWatchers, $parseEvent, $unwatch, $watch, App, closePopover, DataSource, DynamicComponentRefProvider, extendProto, getClonedObject, getDatasourceFromExpr, getValidJSON, isDataSourceEqual, isDefined, isMobile, PaginationService, StatePersistence, triggerFn, Viewport } from '@wm/core';
|
|
4
4
|
import { Subject } from 'rxjs';
|
|
5
|
-
import {
|
|
6
|
-
import { EDIT_MODE, getConditionalClasses, getOrderByExpr, getRowOperationsColumn, prepareFieldDefs, provideAs, provideAsWidgetRef, StylableComponent, styler, transformData, TrustAsPipe, extractDataSourceName, DEBOUNCE_TIMES, NAVIGATION_TYPE, unsupportedStatePersistenceTypes } from '@wm/components/base';
|
|
5
|
+
import { DEBOUNCE_TIMES, EDIT_MODE, extractDataSourceName, getConditionalClasses, getOrderByExpr, getRowOperationsColumn, NAVIGATION_TYPE, prepareFieldDefs, provideAs, provideAsWidgetRef, StylableComponent, styler, transformData, TrustAsPipe, unsupportedStatePersistenceTypes } from '@wm/components/base';
|
|
7
6
|
import { PaginationComponent } from '@wm/components/data/pagination';
|
|
8
7
|
import { ListComponent } from '@wm/components/data/list';
|
|
9
8
|
import { registerProps } from './table.props';
|
|
@@ -287,6 +286,7 @@ export class TableComponent extends StylableComponent {
|
|
|
287
286
|
this.items = [];
|
|
288
287
|
this.rowActions = [];
|
|
289
288
|
this.shownavigation = false;
|
|
289
|
+
this.showFirstRow = false;
|
|
290
290
|
this.documentClickBind = noop;
|
|
291
291
|
this.prevFilterExpression = [];
|
|
292
292
|
this.fieldDefs = [];
|
|
@@ -453,7 +453,7 @@ export class TableComponent extends StylableComponent {
|
|
|
453
453
|
});
|
|
454
454
|
},
|
|
455
455
|
// assigns the items on capture phase of the click handler.
|
|
456
|
-
assignSelectedItems: (row, e,
|
|
456
|
+
assignSelectedItems: (row, e, rowInfo) => {
|
|
457
457
|
this.ngZone.run(() => {
|
|
458
458
|
/*
|
|
459
459
|
* in case of single select, update the items with out changing the reference.
|
|
@@ -461,8 +461,11 @@ export class TableComponent extends StylableComponent {
|
|
|
461
461
|
*/
|
|
462
462
|
if (this.multiselect) {
|
|
463
463
|
//Fix for [WMS-25110]: Add row to items list only if the row is selected
|
|
464
|
-
if (_.findIndex(this.items, row) === -1 && (
|
|
464
|
+
if (_.findIndex(this.items, row) === -1 && (rowInfo?._selected === undefined || rowInfo?._selected == true || (this.gridfirstrowselect && rowInfo?.rowId == 0 && !this.showFirstRow))) {
|
|
465
465
|
this.items.push(row);
|
|
466
|
+
if (rowInfo?.rowId == 0) {
|
|
467
|
+
this.showFirstRow = true;
|
|
468
|
+
}
|
|
466
469
|
}
|
|
467
470
|
}
|
|
468
471
|
else {
|
|
@@ -2182,4 +2185,4 @@ export class TableComponent extends StylableComponent {
|
|
|
2182
2185
|
type: HostListener,
|
|
2183
2186
|
args: ['keypress', ['$event']]
|
|
2184
2187
|
}] }); })();
|
|
2185
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2RhdGEvdGFibGUvc3JjL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3RhYmxlL3NyYy90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLFNBQVMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQWEsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVOLE9BQU8sRUFBd0IsV0FBVyxFQUFhLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakcsT0FBTyxFQUFDLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUV2RSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE9BQU8sRUFDSCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFFBQVEsRUFDUixNQUFNLEVBQ04sR0FBRyxFQUNILFlBQVksRUFDWixVQUFVLEVBQ1YsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixZQUFZLEVBRVosaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsU0FBUyxFQUNULDJCQUEyQixFQUMzQixXQUFXLEVBQ1gsZUFBZSxFQUNsQixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixFQUFFLGNBQWMsRUFBRSxzQkFBc0IsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxF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QUNXLHlCQUF5QjtrQkFBdkcsU0FBUzttQkFBQyx3QkFBd0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBRVIsZUFBZTtrQkFBbkYsU0FBUzttQkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQWsxQjdCLFVBQVU7a0JBQS9DLFlBQVk7bUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQXR0cmlidXRlLCBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgQ29udGVudENoaWxkLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIEluamVjdG9yLCBOZ1pvbmUsIE9uRGVzdHJveSwgT3B0aW9uYWwsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtWaWV3cG9ydCwgU3RhdGVQZXJzaXN0ZW5jZSwgUGFnaW5hdGlvblNlcnZpY2V9IGZyb20gJ0B3bS9jb3JlJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICAgICRhcHBEaWdlc3QsXG4gICAgJHBhcnNlRXZlbnQsXG4gICAgJHVud2F0Y2gsXG4gICAgJHdhdGNoLFxuICAgIEFwcCxcbiAgICBjbG9zZVBvcG92ZXIsXG4gICAgRGF0YVNvdXJjZSxcbiAgICBnZXRDbG9uZWRPYmplY3QsXG4gICAgZ2V0RGF0YXNvdXJjZUZyb21FeHByLFxuICAgIGdldFZhbGlkSlNPTixcbiAgICBJREdlbmVyYXRvcixcbiAgICBpc0RhdGFTb3VyY2VFcXVhbCxcbiAgICBpc0RlZmluZWQsXG4gICAgaXNNb2JpbGUsXG4gICAgdHJpZ2dlckZuLFxuICAgIER5bmFtaWNDb21wb25lbnRSZWZQcm92aWRlcixcbiAgICBleHRlbmRQcm90byxcbiAgICAkaW52b2tlV2F0Y2hlcnNcbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgRURJVF9NT0RFLCBnZXRDb25kaXRpb25hbENsYXNzZXMsIGdldE9yZGVyQnlFeHByLCBnZXRSb3dPcGVyYXRpb25zQ29sdW1uLCBwcmVwYXJlRmllbGREZWZzLCBwcm92aWRlQXMsIHByb3ZpZGVBc1dpZGdldFJlZiwgU3R5bGFibGVDb21wb25lbnQsIHN0eWxlciwgdHJhbnNmb3JtRGF0YSwgVHJ1c3RBc1BpcGUsIGV4dHJhY3REYXRhU291cmNlTmFtZSwgREVCT1VOQ0VfVElNRVMsIE5BVklHQVRJT05fVFlQRSwgdW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXMgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7IFBhZ2luYXRpb25Db21wb25lbnQgfSBmcm9tICdAd20vY29tcG9uZW50cy9kYXRhL3BhZ2luYXRpb24nO1xuXG5pbXBvcnQgeyBMaXN0Q29tcG9uZW50IH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvZGF0YS9saXN0JztcbmltcG9ydCB7IHJlZ2lzdGVyUHJvcHMgfSBmcm9tICcuL3RhYmxlLnByb3BzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZGVjbGFyZSBjb25zdCBfLCAkO1xuXG5jb25zdCBERUZBVUxUX0NMUyA9ICdhcHAtZ3JpZCBhcHAtcGFuZWwgcGFuZWwnO1xuY29uc3QgV0lER0VUX0NPTkZJRyA9IHt3aWRnZXRUeXBlOiAnd20tdGFibGUnLCBob3N0Q2xhc3M6IERFRkFVTFRfQ0xTfTtcblxuY29uc3QgZXhwb3J0SWNvbk1hcHBpbmcgPSB7XG4gICAgRVhDRUw6ICdmYSBmYS1maWxlLWV4Y2VsLW8nLFxuICAgIENTVjogJ2ZhIGZhLWZpbGUtdGV4dC1vJ1xufTtcblxuY29uc3QgUk9XX09QU19GSUVMRCA9ICdyb3dPcGVyYXRpb25zJztcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5jb25zdCBpc0lucHV0Qm9keVdyYXBwZXIgPSB0YXJnZXQgPT4ge1xuICAgIGNvbnN0IGNsYXNzZXMgPSBbJy5kcm9wZG93bi1tZW51JywgJy51aWItdHlwZWFoZWFkLW1hdGNoJywgJy5tb2RhbC1kaWFsb2cnLCAnLnRvYXN0J107XG4gICAgbGV0IGlzSW5wdXQgPSBmYWxzZTtcbiAgICBjbGFzc2VzLmZvckVhY2goY2xzID0+IHtcbiAgICAgICAgaWYgKHRhcmdldC5jbG9zZXN0KGNscykubGVuZ3RoKSB7XG4gICAgICAgICAgICBpc0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGF0dHJzID0gWydic2RhdGVwaWNrZXJkYXlkZWNvcmF0b3InXTtcbiAgICBpZiAoIWlzSW5wdXQpIHtcbiAgICAgICAgYXR0cnMuZm9yRWFjaChhdHRyID0+IHtcbiAgICAgICAgICAgIGlmICh0YXJnZXRbMF0uaGFzQXR0cmlidXRlKGF0dHIpKSB7XG4gICAgICAgICAgICAgICAgaXNJbnB1dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGlzSW5wdXQ7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ1t3bVRhYmxlXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzKFRhYmxlQ29tcG9uZW50LCBOR19WQUxVRV9BQ0NFU1NPUiwgdHJ1ZSksXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihUYWJsZUNvbXBvbmVudClcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50IGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuICAgIEBWaWV3Q2hpbGQoUGFnaW5hdGlvbkNvbXBvbmVudCwge3N0YXRpYzogdHJ1ZX0pIGRhdGFOYXZpZ2F0b3I7XG5cbiAgICBAVmlld0NoaWxkKCdkYXRhZ3JpZEVsZW1lbnQnLCB7c3RhdGljOiB0cnVlfSkgcHJpdmF0ZSBfdGFibGVFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbigncm93QWN0aW9uVG1wbCcsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgcm93QWN0aW9uVG1wbDogUXVlcnlMaXN0PGFueT47XG4gICAgQFZpZXdDaGlsZCgncm93QWN0aW9uc1ZpZXcnLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSByb3dBY3Rpb25zVmlld1JlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oJ2ZpbHRlclRtcGwnLCB7ZGVzY2VuZGFudHM6IHRydWV9KSBmaWx0ZXJUbXBsOiBRdWVyeUxpc3Q8YW55PjtcbiAgICBAVmlld0NoaWxkKCdtdWx0aUNvbHVtbkZpbHRlclZpZXcnLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBmaWx0ZXJWaWV3UmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbignaW5saW5lV2lkZ2V0VG1wbCcsIHtkZXNjZW5kYW50czogdHJ1ZX0pIGlubGluZVdpZGdldFRtcGw6IFF1ZXJ5TGlzdDxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ2lubGluZUVkaXRWaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgaW5saW5lRWRpdFZpZXdSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKCdpbmxpbmVXaWRnZXRUbXBsTmV3Jywge2Rlc2NlbmRhbnRzOiB0cnVlfSkgaW5saW5lV2lkZ2V0TmV3VG1wbDogUXVlcnlMaXN0PGFueT47XG4gICAgQFZpZXdDaGlsZCgnaW5saW5lRWRpdE5ld1ZpZXcnLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBpbmxpbmVFZGl0TmV3Vmlld1JlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oJ2N1c3RvbUV4cHJUbXBsJywge2Rlc2NlbmRhbnRzOiB0cnVlfSkgY3VzdG9tRXhwclRtcGw6IFF1ZXJ5TGlzdDxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ2N1c3RvbUV4cHJWaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgY3VzdG9tRXhwclZpZXdSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKCdyb3dFeHBhbnNpb25BY3Rpb25UbXBsJywgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSByb3dFeHBhbnNpb25BY3Rpb25UbXBsOiBRdWVyeUxpc3Q8YW55PjtcbiAgICBAQ29udGVudENoaWxkKCdyb3dFeHBhbnNpb25UbXBsJykgcm93RXhwYW5zaW9uVG1wbDogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAVmlld0NoaWxkKCdyb3dEZXRhaWxWaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgcm93RGV0YWlsVmlld1JlZjogVmlld0NvbnRhaW5lclJlZjtcbiAgICBAVmlld0NoaWxkKCdyb3dFeHBhbnNpb25BY3Rpb25WaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgcm93RXhwYW5zaW9uQWN0aW9uVmlld1JlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIEBWaWV3Q2hpbGQoJ2R5bmFtaWNUYWJsZScsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGR5bmFtaWNUYWJsZVJlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIHByaXZhdGUgcm93QWN0aW9uc0NvbXBpbGVkVGw6IGFueSAgPSB7fTtcbiAgICBwcml2YXRlIHJvd0ZpbHRlckNvbXBsaWVkVGw6IGFueSA9IHt9O1xuICAgIHByaXZhdGUgaW5saW5lQ29tcGxpZWRUbDogYW55ID0ge307XG4gICAgcHJpdmF0ZSBpbmxpbmVOZXdDb21wbGllZFRsOiBhbnkgPSB7fTtcbiAgICBwcml2YXRlIGN1c3RvbUV4cHJDb21waWxlZFRsOiBhbnkgPSB7fTtcbiAgICBwcml2YXRlIGN1c3RvbUV4cHJDb21waWxlZFN1bW1hcnlUbDogYW55ID0ge307XG4gICAgcHJpdmF0ZSByb3dEZWZJbnN0YW5jZXMgPSB7fTtcbiAgICBwcml2YXRlIHJvd0RlZk1hcCA9IHt9O1xuICAgIHByaXZhdGUgcm93RXhwYW5zaW9uQWN0aW9uVGw6IGFueSA9IHt9O1xuXG4gICAgY29sdW1ucyA9IHt9O1xuICAgIGZvcm1maWVsZHMgPSB7fTtcbiAgICBkYXRhZ3JpZEVsZW1lbnQ7XG4gICAgZGF0YXNvdXJjZTtcbiAgICBlZGl0bW9kZTtcbiAgICBlbmFibGVjb2x1bW5zZWxlY3Rpb247XG4gICAgZW5hYmxlc29ydCA9IHRydWU7XG4gICAgZmlsdGVybW9kZTtcbiAgICBzZWFyY2hsYWJlbDtcbiAgICBmb3JtcG9zaXRpb247XG4gICAgZ3JpZGNsYXNzO1xuICAgIGdyaWRmaXJzdHJvd3NlbGVjdDtcbiAgICBpY29uY2xhc3M7XG4gICAgb25kZW1hbmRtZXNzYWdlO1xuICAgIHZpZXdsZXNzbWVzc2FnZTtcbiAgICBzaG93dmlld2xlc3NidXR0b24gPSBmYWxzZTtcbiAgICBfdHJpZ2dlcmVkQnlVc2VyO1xuICAgIGlzR3JpZEVkaXRNb2RlO1xuICAgIGxvYWRpbmdkYXRhbXNnO1xuICAgIG11bHRpc2VsZWN0O1xuICAgIG5hbWU7XG4gICAgX2lzRGVwZW5kZW50O1xuICAgIG5hdmlnYXRpb247XG4gICAgbmF2aWdhdGlvblNpemU7XG4gICAgbmF2aWdhdGlvbmFsaWduO1xuICAgIG5vZGF0YW1lc3NhZ2U7XG4gICAgcGFnZXNpemU7XG4gICAgcHJldkRhdGE7XG4gICAgcHJpbWFyeUtleSA9IFtdO1xuICAgIHJhZGlvc2VsZWN0O1xuICAgIHJvd2NsYXNzO1xuICAgIHJvd25nY2xhc3M7XG4gICAgc2VsZWN0ZWRJdGVtcyA9IFtdO1xuICAgIHNob3doZWFkZXI7XG4gICAgc2hvd3JlY29yZGNvdW50O1xuICAgIHNob3dyb3dpbmRleDtcbiAgICBzdWJoZWFkaW5nO1xuICAgIHRpdGxlO1xuICAgIHNob3duZXdyb3c7XG4gICAgZGVsZXRlb2t0ZXh0O1xuICAgIGRlbGV0ZWNhbmNlbHRleHQ7XG4gICAgb25FcnJvcjtcbiAgICBvblJvd2luc2VydDtcbiAgICBvblJvd3VwZGF0ZTtcbiAgICBvblJvd2RlbGV0ZTtcbiAgICBzdGF0ZWhhbmRsZXI7XG4gICAgc2VsZWN0ZWRJdGVtQ2hhbmdlID0gbmV3IFN1YmplY3QoKTtcbiAgICBzZWxlY3RlZEl0ZW1DaGFuZ2UkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLnNlbGVjdGVkSXRlbUNoYW5nZS5hc09ic2VydmFibGUoKTtcblxuICAgIGFjdGlvbnMgPSBbXTtcbiAgICBfYWN0aW9ucyA9IHtcbiAgICAgICAgJ2hlYWRlcic6IFtdLFxuICAgICAgICAnZm9vdGVyJzogW11cbiAgICB9O1xuICAgIGV4cG9ydE9wdGlvbnMgPSBbXTtcbiAgICBleHBvcnRkYXRhc2l6ZTtcbiAgICBmb3JtV2lkZ2V0cztcbiAgICBoZWFkZXJDb25maWcgPSBbXTtcbiAgICBpdGVtcyA9IFtdO1xuICAgIG5hdkNvbnRyb2xzO1xuICAgIHJvd0FjdGlvbnMgPSBbXTtcbiAgICBzZWxlY3RlZENvbHVtbnM7XG4gICAgc2hvd25hdmlnYXRpb24gPSBmYWxzZTtcbiAgICBkYXRhc2V0O1xuICAgIF9saXZlVGFibGVQYXJlbnQ7XG4gICAgaXNQYXJ0T2ZMaXZlR3JpZDtcbiAgICBncmlkRWxlbWVudDtcbiAgICBpc05ld1Jvd0luc2VydGVkO1xuICAgIGlzTW9iaWxlO1xuICAgIGlzTG9hZGluZztcbiAgICBpc1Jvd0RlbGV0ZWQ7XG4gICAgZG9jdW1lbnRDbGlja0JpbmQgPSBub29wO1xuICAgIGFjdGlvblJvd0luZGV4O1xuICAgIGFjdGlvblJvd1BhZ2U7XG4gICAgcHJldkZpbHRlckV4cHJlc3Npb246IGFueSA9IFtdO1xuICAgIGZpZWxkRGVmcyA9IFtdO1xuICAgIHJvd0RlZjogYW55ID0ge307XG4gICAgcm93SW5zdGFuY2U6IGFueSA9IHt9O1xuXG4gICAgcHJpdmF0ZSBmdWxsRmllbGREZWZzID0gW107XG4gICAgcHJpdmF0ZSBfX2Z1bGxEYXRhO1xuICAgIHByaXZhdGUgZGF0YU5hdmlnYXRvcldhdGNoZWQ7XG4gICAgcHJpdmF0ZSBuYXZpZ2F0b3JSZXN1bHRXYXRjaDtcbiAgICBwcml2YXRlIG5hdmlnYXRvck1heFJlc3VsdFdhdGNoO1xuICAgIHByaXZhdGUgZmlsdGVySW5mbztcbiAgICBwcml2YXRlIHNvcnRJbmZvO1xuICAgIHByaXZhdGUgc2VydmVyRGF0YTtcbiAgICBwcml2YXRlIGZpbHRlcm51bGxyZWNvcmRzO1xuICAgIHByaXZhdGUgdmFyaWFibGVJbmZsaWdodCA9IHRydWU7XG4gICAgcHJpdmF0ZSBpc2R5bmFtaWN0YWJsZTtcbiAgICBwcml2YXRlIF9keW5hbWljQ29udGV4dDtcbiAgICBwcml2YXRlIG5vT2ZDb2x1bW5zO1xuICAgIHB1YmxpYyBvbkRlbWFuZExvYWQ7XG4gICAgcHVibGljIGluZlNjcm9sbDtcbiAgICBwcml2YXRlIGlzRGF0YUxvYWRpbmc7XG4gICAgcHJpdmF0ZSBjdXJyZW50UGFnZTtcbiAgICBwcml2YXRlIGFwcGx5UHJvcHMgPSBuZXcgTWFwKCk7XG5cbiAgICByZWRyYXcgPSBfLmRlYm91bmNlKHRoaXMuX3JlZHJhdywgMTUwKTtcbiAgICBkZWJvdW5jZWRIYW5kbGVMb2FkaW5nID0gXy5kZWJvdW5jZSh0aGlzLmhhbmRsZUxvYWRpbmcsIDM1MCk7XG5cbiAgICAvLyBGaWx0ZXIgYW5kIFNvcnQgTWV0aG9kc1xuICAgIHJvd0ZpbHRlcjogYW55ID0ge307XG4gICAgbWF0Y2hNb2RlVHlwZXNNYXA7XG4gICAgbWF0Y2hNb2RlTXNncztcbiAgICBlbXB0eU1hdGNoTW9kZXM7XG4gICAgX3NlYXJjaFNvcnRIYW5kbGVyID0gbm9vcDtcbiAgICBzZWFyY2hTb3J0SGFuZGxlciA9ICguLi5hcmdzKSA9PiB7IHRoaXMuX3NlYXJjaFNvcnRIYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3MpOyB9O1xuICAgIF9pc1BhZ2VTZWFyY2g7XG4gICAgX2lzQ2xpZW50U2VhcmNoO1xuICAgIGNoZWNrRmlsdGVyc0FwcGxpZWQ6IEZ1bmN0aW9uO1xuICAgIGdldFNlYXJjaFJlc3VsdDogRnVuY3Rpb247XG4gICAgZ2V0U29ydFJlc3VsdDogRnVuY3Rpb247XG4gICAgZ2V0RmlsdGVyRmllbGRzOiBGdW5jdGlvbjtcbiAgICBvblJvd0ZpbHRlckNoYW5nZSA9IG5vb3A7XG4gICAgb25GaWx0ZXJDb25kaXRpb25TZWxlY3QgPSBub29wO1xuICAgIHNob3dDbGVhckljb24gPSBub29wO1xuICAgIGNsZWFyUm93RmlsdGVyID0gbm9vcDtcbiAgICBhZGp1c3RDb250YWluZXIgPSBub29wO1xuICAgIGdldE5hdmlnYXRpb25UYXJnZXRCeVNvcnRJbmZvOiBGdW5jdGlvbjtcbiAgICByZWZyZXNoRGF0YTogRnVuY3Rpb247XG4gICAgY2xlYXJGaWx0ZXI6IEZ1bmN0aW9uO1xuXG4gICAgLy8gSW5saW5lIEVkaXRcbiAgICBuZ2Zvcm06IEZvcm1Hcm91cDtcbiAgICB1cGRhdGVWYXJpYWJsZTogRnVuY3Rpb247XG4gICAgdXBkYXRlUmVjb3JkOiBGdW5jdGlvbjtcbiAgICBkZWxldGVSZWNvcmQ6IEZ1bmN0aW9uO1xuICAgIGluc2VydFJlY29yZDogRnVuY3Rpb247XG4gICAgZWRpdFJvdzogRnVuY3Rpb247XG4gICAgYWRkTmV3Um93OiBGdW5jdGlvbjtcbiAgICBhZGRSb3c6IEZ1bmN0aW9uO1xuICAgIGRlbGV0ZVJvdzogRnVuY3Rpb247XG4gICAgb25SZWNvcmREZWxldGU6IEZ1bmN0aW9uO1xuICAgIGluaXRpYXRlU2VsZWN0SXRlbTogRnVuY3Rpb247XG4gICAgaGlkZUVkaXRSb3c6IEZ1bmN0aW9uO1xuICAgIHNhdmVSb3c6IEZ1bmN0aW9uO1xuICAgIGNhbmNlbFJvdzogRnVuY3Rpb247XG4gICAgcHJpdmF0ZSBfcGFnZUxvYWQgPSB0cnVlO1xuXG4gICAgcHVibGljIGdyaWRPcHRpb25zID0ge1xuICAgICAgICBkYXRhOiBbXSxcbiAgICAgICAgY29sRGVmczogW10sXG4gICAgICAgIHN0YXJ0Um93SW5kZXg6IDEsXG4gICAgICAgIG1vZGU6ICcnLFxuICAgICAgICBzb3J0SW5mbzoge1xuICAgICAgICAgICAgZmllbGQ6ICcnLFxuICAgICAgICAgICAgZGlyZWN0aW9uOiAnJ1xuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJtb2RlOiAnJyxcbiAgICAgICAgc2VhcmNoTGFiZWw6ICcnLFxuICAgICAgICByb3dBY3Rpb25zOiBbXSxcbiAgICAgICAgaGVhZGVyQ29uZmlnOiBbXSxcbiAgICAgICAgcm93Q2xhc3M6ICcnLFxuICAgICAgICBlZGl0bW9kZTogJycsXG4gICAgICAgIGZvcm1Qb3NpdGlvbjogJycsXG4gICAgICAgIGlzTW9iaWxlOiBmYWxzZSxcbiAgICAgICAgcm93RXhwYW5zaW9uRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHJvd0RlZjoge1xuICAgICAgICAgICAgcG9zaXRpb246ICcwJ1xuICAgICAgICB9LFxuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgbWVzc2FnZXM6IHtcbiAgICAgICAgICAgIHNlbGVjdEZpZWxkOiAnU2VsZWN0IEZpZWxkJ1xuICAgICAgICB9LFxuICAgICAgICBzZWN1cml0eVV0aWxzOiB7XG4gICAgICAgICAgICBwaXBlVHJhbnNmb3JtIDoge31cbiAgICAgICAgfSxcbiAgICAgICAgbmF2aWdhdGlvbjogJycsXG4gICAgICAgIGlzZHluYW1pY3RhYmxlOiAnJyxcbiAgICAgICAgZGVsZXRlZFJvd0luZGV4OiAtMSxcbiAgICAgICAgbGFzdEFjdGlvblBlcmZvcm1lZDogJ3Njcm9sbCcsXG4gICAgICAgIGlzU2VhcmNoVHJpZ2VycmVkOiBmYWxzZSxcbiAgICAgICAgaXNEYXRhc2V0VXBkYXRlZDogZmFsc2UsXG4gICAgICAgIGlzRGF0YVVwZGF0ZWRCeVVzZXI6IGZhbHNlLFxuICAgICAgICBzaG93dmlld2xlc3NidXR0b246IGZhbHNlLFxuICAgICAgICBvbmRlbWFuZG1lc3NhZ2U6ICcnLFxuICAgICAgICB2aWV3bGVzc21lc3NhZ2U6ICcnLFxuICAgICAgICBsb2FkaW5nZGF0YW1zZzogJycsXG4gICAgICAgIGlzTmV4dFBhZ2VEYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIEFDVElPTlM6IHtcbiAgICAgICAgICAgICdERUxFVEUnOiAnZGVsZXRlJyxcbiAgICAgICAgICAgICdFRElUJzogJ2VkaXQnLFxuICAgICAgICAgICAgJ1NFQVJDSF9PUl9TT1JUJzogJ3NlYXJjaF9vcl9zb3J0JyxcbiAgICAgICAgICAgICdERUZBVUxUJzogJ3Njcm9sbCcsXG4gICAgICAgICAgICAnRklMVEVSX0NSSVRFUklBJyA6ICdmaWx0ZXInLFxuICAgICAgICAgICAgJ0RBVEFTRVRfVVBEQVRFJzogJ2RhdGFzZXRfdXBkYXRlJ1xuICAgICAgICB9LFxuICAgICAgICBhY3Rpb25Sb3dJbmRleDogdW5kZWZpbmVkLFxuICAgICAgICBhY3Rpb25Sb3dQYWdlOiB1bmRlZmluZWQsXG4gICAgICAgIGlzTGFzdFBhZ2UgOiBmYWxzZSxcbiAgICAgICAgLy8gZ2V0IHRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyXG4gICAgICAgIGdldEN1cnJlbnRQYWdlOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gXy5nZXQodGhpcy5kYXRhTmF2aWdhdG9yLCAnZG4uY3VycmVudFBhZ2UnKSB8fCAxO1xuICAgICAgICB9LFxuICAgICAgICAvLyBzZXQgdGhlIHBhZ2UgbnVtYmVyXG4gICAgICAgIHNldEN1cnJlbnRQYWdlOiAocGFnZU51bSkgPT4ge1xuICAgICAgICAgICAgXy5zZXQodGhpcy5kYXRhTmF2aWdhdG9yLCAnZG4uY3VycmVudFBhZ2UnLCBwYWdlTnVtIHx8IDEpO1xuICAgICAgICB9LFxuICAgICAgICBnZXREYXRhU291cmNlOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlO1xuICAgICAgICB9LFxuICAgICAgICAvLyBnZXQgdGhlIHBhZ2UgbGltaXRcbiAgICAgICAgZ2V0UGFnZVNpemU6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhZ2VzaXplO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldFBhZ2VDb3VudCA6ICgpID0+e1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YU5hdmlnYXRvci5wYWdlQ291bnQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVuYWJsZU5hdmlnYXRpb246ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3Iud2lkZ2V0LmlzRGlzYWJsZU5leHQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3Iud2lkZ2V0LmlzRGlzYWJsZUxhc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLm1vZGUgPSAndmlld2xlc3MnO1xuICAgICAgICB9LFxuICAgICAgICAvLyBzZXQgdGhlIGRlbGV0ZWQgcm93IGluZGV4XG4gICAgICAgIHNldERlbGV0ZWRSb3dJbmRleDogKGlkKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdkZWxldGVkUm93SW5kZXgnLCBpZCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHNldHMgdGhlIGxhc3QgYWN0aW9uIHBlcmZvcm1lZCBsaWtlIGVkaXQsIGRlbGV0ZSBldGMuXG4gICAgICAgIHNldExhc3RBY3Rpb25QZXJmb3JtZWQ6IChhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2xhc3RBY3Rpb25QZXJmb3JtZWQnLCBhY3Rpb24gfHwgdGhpcy5ncmlkT3B0aW9ucy5sYXN0QWN0aW9uUGVyZm9ybWVkKTtcbiAgICAgICAgfSxcbiAgICAgICAgaXNOYXZUeXBlU2Nyb2xsT3JPbmRlbWFuZDogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZE9wdGlvbnMubmF2aWdhdGlvbiA9PT0gJ1Njcm9sbCcgfHwgdGhpcy5ncmlkT3B0aW9ucy5uYXZpZ2F0aW9uID09PSAnT24tRGVtYW5kJztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0SXNTZWFyY2hUcmlnZXJyZWQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignaXNTZWFyY2hUcmlnZXJyZWQnLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldElzRGF0YXNldFVwZGF0ZWQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignaXNEYXRhc2V0VXBkYXRlZCcsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gIEZpeCBmb3IgW1dNUy0yMzI2M106ICdpc05leHRQYWdlRGF0YScgZmxhZyBpcyBzZXQgdG8gdHJ1ZSAtPiBpZiB1c2VyIGZldGNoaW5nIHRoZSBuZXh0IHBhZ2UgZGF0YSBieSBjbGlja2luZyBvbkxvYWQgbW9yZSBvciBzY3JvbGxcbiAgICAgICAgc2V0SXNOZXh0UGFnZURhdGE6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignaXNOZXh0UGFnZURhdGEnLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vICBGaXggZm9yIFtXTVMtMjMyNjNdOiAnaXNEYXRhVXBkYXRlZEJ5VXNlcicgZmxhZyBpcyBzZXQgdG8gdHJ1ZSAtPiBpZiB1c2VyIGNoYW5nZXMgdGhlIGRhdGFzZXQgZnJvbSBzY3JpcHRcbiAgICAgICAgc2V0SXNEYXRhVXBkYXRlZEJ5VXNlcjogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdpc0RhdGFVcGRhdGVkQnlVc2VyJywgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBvbkRhdGFSZW5kZXI6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZERhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnZGF0YXJlbmRlcicsIHskZGF0YTogdGhpcy5ncmlkRGF0YSwgZGF0YTogdGhpcy5ncmlkRGF0YX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBzZWxlY3Qgcm93cyBzZWxlY3RlZCBpbiBwcmV2aW91cyBwYWdlcy4gKE5vdCBmaW5kaW5nIGludGVyc2VjdGlvbiBvZiBkYXRhIGFuZCBzZWxlY3RlZGl0ZW1zIGFzIGl0IHdpbGwgYmUgaGVhdnkpXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NlbGVjdFJvd3MnLCB0aGlzLml0ZW1zKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnZ2V0U2VsZWN0ZWRSb3dzJyk7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUNoYW5nZS5uZXh0KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIE9uIHJlbmRlciwgYXBwbHkgdGhlIGZpbHRlcnMgc2V0IGZvciBxdWVyeSBzZXJ2aWNlIHZhcmlhYmxlXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzUGFnZVNlYXJjaCAmJiB0aGlzLmZpbHRlckluZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTb3J0SGFuZGxlcih0aGlzLmZpbHRlckluZm8sIHVuZGVmaW5lZCwgJ3NlYXJjaCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBvblJvd1NlbGVjdDogKHJvdywgZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnZ2V0U2VsZWN0ZWRSb3dzJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1DaGFuZ2UubmV4dCh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByb3dEYXRhID0gdGhpcy5hZGRSb3dJbmRleChyb3cpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoICYmIHJvd0RhdGEuJGluZGV4ICYmIHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJyAmJiB0aGlzLmRhdGFOYXZpZ2F0b3IgJiYgdW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXMuaW5kZXhPZih0aGlzLm5hdmlnYXRpb24pIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvYmogPSB7cGFnZTogdGhpcy5kYXRhTmF2aWdhdG9yLmRuLmN1cnJlbnRQYWdlLCBpbmRleDogcm93RGF0YS4kaW5kZXggLSAxfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpICAmJiB0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV8uc29tZSh3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0sIG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0ucHVzaChvYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLnNldFdpZGdldFN0YXRlKHRoaXMsIHsnc2VsZWN0ZWRJdGVtJzogd2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcywgeydzZWxlY3RlZEl0ZW0nOiBbb2JqXX0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdSZXRhaW4gU3RhdGUgaGFuZGxpbmcgb24gV2lkZ2V0ICcgKyB0aGlzLm5hbWUgKyAnIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGN1cnJlbnQgcGFnaW5hdGlvbiB0eXBlLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd3NlbGVjdCcsIHskZGF0YTogcm93RGF0YSwgJGV2ZW50OiBlLCByb3c6IHJvd0RhdGF9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAvLyBhc3NpZ25zIHRoZSBpdGVtcyBvbiBjYXB0dXJlIHBoYXNlIG9mIHRoZSBjbGljayBoYW5kbGVyLlxuICAgICAgICBhc3NpZ25TZWxlY3RlZEl0ZW1zOiAocm93LCBlLCBpc1Jvd1NlbGVjdGVkKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICogaW4gY2FzZSBvZiBzaW5nbGUgc2VsZWN0LCB1cGRhdGUgdGhlIGl0ZW1zIHdpdGggb3V0IGNoYW5naW5nIHRoZSByZWZlcmVuY2UuXG4gICAgICAgICAgICAgICAgICogZm9yIG11bHRpIHNlbGVjdCwga2VlcCBvbGQgc2VsZWN0ZWQgaXRlbXMgaW4gdGFjdFxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vRml4IGZvciBbV01TLTI1MTEwXTogQWRkIHJvdyB0byBpdGVtcyBsaXN0IG9ubHkgaWYgdGhlIHJvdyBpcyBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICBpZiAoXy5maW5kSW5kZXgodGhpcy5pdGVtcywgcm93KSA9PT0gLTEgJiYgKGlzUm93U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCB8fCBpc1Jvd1NlbGVjdGVkID09IHRydWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2gocm93KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKHJvdyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUm93RGJsQ2xpY2s6IChyb3csIGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvd0RhdGEgPSB0aGlzLmFkZFJvd0luZGV4KHJvdyk7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd2RibGNsaWNrJywgeyRkYXRhOiByb3dEYXRhLCAkZXZlbnQ6IGUsIHJvdzogcm93RGF0YX0pO1xuICAgICAgICB9LFxuICAgICAgICBvblJvd0Rlc2VsZWN0OiAocm93LCBlKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMgPSBfLnB1bGxBbGxXaXRoKHRoaXMuaXRlbXMsIFtyb3ddLCBfLmlzRXF1YWwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnZ2V0U2VsZWN0ZWRSb3dzJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygncm93ZGVzZWxlY3QnLCB7JGRhdGE6IHJvdywgJGV2ZW50OiBlLCByb3d9KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93RGF0YSA9IHRoaXMuYWRkUm93SW5kZXgocm93KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJyAmJiB1bnN1cHBvcnRlZFN0YXRlUGVyc2lzdGVuY2VUeXBlcy5pbmRleE9mKHRoaXMubmF2aWdhdGlvbikgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvYmogPSB7cGFnZTogdGhpcy5kYXRhTmF2aWdhdG9yLmRuLmN1cnJlbnRQYWdlLCBpbmRleDogcm93RGF0YS4kaW5kZXggLSAxfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZGdldFN0YXRlID0gdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLmdldFdpZGdldFN0YXRlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAnc2VsZWN0ZWRJdGVtJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLnJlbW92ZSh3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0sIGZ1bmN0aW9uKHNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXy5pc0VxdWFsKHNlbGVjdGVkSXRlbSwgb2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2UucmVtb3ZlV2lkZ2V0U3RhdGUodGhpcywgJ3NlbGVjdGVkSXRlbScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcywgeydzZWxlY3RlZEl0ZW0nOiB3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW19KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JldGFpbiBTdGF0ZSBoYW5kbGluZyBvbiBXaWRnZXQgJyArIHRoaXMubmFtZSArICcgaXMgbm90IHN1cHBvcnRlZCBmb3IgY3VycmVudCBwYWdpbmF0aW9uIHR5cGUuJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBjYWxsT25Sb3dEZXNlbGVjdEV2ZW50OiAocm93LCBlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2dldFNlbGVjdGVkUm93cycpO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdyb3dkZXNlbGVjdCcsIHskZGF0YTogcm93LCAkZXZlbnQ6IGUsIHJvd30pO1xuICAgICAgICB9LFxuICAgICAgICBjYWxsT25Sb3dDbGlja0V2ZW50OiAocm93LCBlKSA9PiB7XG4gICAgICAgICAgICAvLyBXTVMtMTg3NzQ6IElmIHdlIGludm9rZSBuYXZpZ2F0aW9uIGFjdGlvbiB2YXJpYWJsZSBvbiByb3djbGljayBjYWxsYmFjaywgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmluZyBvdXRzaWRlIGFuZ3VsYXIgem9uZSBzbyBhZGRpbmcgbmdab25lLnJ1blxuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBDYWxsIHJvdyBjbGljayBvbmx5IGlmIGNsaWNrIGlzIHRyaWdnZXJlZCBieSB1c2VyXG4gICAgICAgICAgICAgICAgaWYgKGUgJiYgZS5oYXNPd25Qcm9wZXJ0eSgnb3JpZ2luYWxFdmVudCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0RhdGEgPSB0aGlzLmFkZFJvd0luZGV4KHJvdyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygncm93Y2xpY2snLCB7JGRhdGE6IHJvd0RhdGEsICRldmVudDogZSwgcm93OiByb3dEYXRhfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGNsb3NlUG9wb3ZlcjogY2xvc2VQb3BvdmVyLFxuICAgICAgICBvbkNvbHVtblNlbGVjdDogKGNvbCwgZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnZ2V0U2VsZWN0ZWRDb2x1bW5zJyk7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NvbHVtbnNlbGVjdCcsIHskZGF0YTogY29sLCAkZXZlbnQ6IGV9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Db2x1bW5EZXNlbGVjdDogKGNvbCwgZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnZ2V0U2VsZWN0ZWRDb2x1bW5zJyk7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NvbHVtbmRlc2VsZWN0JywgeyRkYXRhOiBjb2wsICRldmVudDogZX0pO1xuICAgICAgICB9LFxuICAgICAgICBvbkhlYWRlckNsaWNrOiAoY29sLCBlKSA9PiB7XG4gICAgICAgICAgICAvLyBpZiBvblNvcnQgZnVuY3Rpb24gaXMgcmVnaXN0ZXJlZCBpbnZva2UgaXQgd2hlbiB0aGUgY29sdW1uIGhlYWRlciBpcyBjbGlja2VkXG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2hlYWRlcmNsaWNrJywgeyRldmVudDogZSwgJGRhdGE6IGNvbCwgY29sdW1uOiBjb2x9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Sb3dEZWxldGU6IChyb3csIGNhbmNlbFJvd0RlbGV0ZUNhbGxiYWNrLCBlLCBjYWxsQmFjaywgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVJlY29yZChfLmV4dGVuZCh7fSwgb3B0aW9ucywge3JvdywgJ2NhbmNlbFJvd0RlbGV0ZUNhbGxiYWNrJzogY2FuY2VsUm93RGVsZXRlQ2FsbGJhY2ssICdldnQnOiBlLCAnY2FsbEJhY2snOiBjYWxsQmFja30pKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBvblJvd0luc2VydDogKHJvdywgZSwgY2FsbEJhY2ssIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0UmVjb3JkKF8uZXh0ZW5kKHt9LCBvcHRpb25zLCB7cm93LCBldmVudDogZSwgJ2NhbGxCYWNrJzogY2FsbEJhY2t9KSk7XG4gICAgICAgIH0sXG4gICAgICAgIGJlZm9yZVJvd1VwZGF0ZTogKHJvdywgZXZlbnROYW1lPykgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2xpdmVUYWJsZVBhcmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xpdmVUYWJsZVBhcmVudC51cGRhdGVSb3cocm93LCBldmVudE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wcmV2RGF0YSA9IGdldENsb25lZE9iamVjdChyb3cpO1xuICAgICAgICB9LFxuICAgICAgICBhZnRlclJvd1VwZGF0ZTogKHJvdywgZSwgY2FsbEJhY2ssIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUmVjb3JkKF8uZXh0ZW5kKHt9LCBvcHRpb25zLCB7cm93LCAncHJldkRhdGEnOiB0aGlzLnByZXZEYXRhLCAnZXZlbnQnOiBlLCAnY2FsbEJhY2snOiBjYWxsQmFja30pKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25CZWZvcmVSb3dVcGRhdGU6IChyb3csIGUsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXJvd3VwZGF0ZScsIHskZXZlbnQ6IGUsICRkYXRhOiByb3csIHJvdywgb3B0aW9uczogb3B0aW9uc30pO1xuICAgICAgICB9LFxuICAgICAgICBvbkJlZm9yZVJvd0luc2VydDogKHJvdywgZSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3Jlcm93aW5zZXJ0JywgeyRldmVudDogZSwgJGRhdGE6IHJvdywgcm93LCBvcHRpb25zOiBvcHRpb25zfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQmVmb3JlUm93RGVsZXRlOiAocm93LCBlLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3dEYXRhID0gdGhpcy5hZGRSb3dJbmRleChyb3cpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3Jlcm93ZGVsZXRlJywgeyRldmVudDogZSwgcm93OiByb3dEYXRhLCBvcHRpb25zOiBvcHRpb25zfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRm9ybVJlbmRlcjogKCRyb3csIGUsIG9wZXJhdGlvbiwgYWx3YXlzTmV3Um93KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB3aWRnZXQgPSBhbHdheXNOZXdSb3cgPyAnaW5saW5lSW5zdGFuY2VOZXcnIDogJ2lubGluZUluc3RhbmNlJztcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybVdpZGdldHMgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkRGVmcy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xbd2lkZ2V0XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtV2lkZ2V0c1tjb2wuZmllbGRdID0gY29sW3dpZGdldF07XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGRpbmcgZm9ybXdpZGdldHMgdG8gdGhlIGNvbnRleHQgZm9yIGlubGluZWluc3RhbmNlIHdpZGdldCB3aGVuIGZpZWxkRGVmcyB3ZXJlIHJlYWR5XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sW3dpZGdldF0uY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFt3aWRnZXRdLmNvbnRleHQuZm9ybVdpZGdldHMgPSB0aGlzLmZvcm1XaWRnZXRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREaXNhYmxlZE9uRmllbGQob3BlcmF0aW9uLCBjb2wsIHdpZGdldCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2Zvcm1yZW5kZXInLCB7JGV2ZW50OiBlLCBmb3JtV2lkZ2V0czogdGhpcy5mb3JtV2lkZ2V0cywgJG9wZXJhdGlvbjogb3BlcmF0aW9ufSk7XG4gICAgICAgICAgICB9LCAyNTApO1xuICAgICAgICB9LFxuICAgICAgICBvbkJlZm9yZUZvcm1SZW5kZXI6IChyb3csIGUsIG9wZXJhdGlvbikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3JlZm9ybXJlbmRlcicsIHskZXZlbnQ6IGUsIHJvdywgJG9wZXJhdGlvbjogb3BlcmF0aW9ufSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZ2lzdGVyUm93TmdDbGFzc1dhdGNoZXI6IChyb3dEYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJvd25nY2xhc3MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldENsb25lZFJvd09iamVjdChyb3dEYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IHdhdGNoTmFtZSA9IGAke3RoaXMud2lkZ2V0SWR9X3Jvd05nQ2xhc3NfJHtpbmRleH1gO1xuICAgICAgICAgICAgJHVud2F0Y2god2F0Y2hOYW1lKTtcbiAgICAgICAgICAgIC8vW1RvZG8tQ1NQXTogZ2VuZXJhdGUgd2F0Y2hlciBleHByIGluIHBhZ2UgaWYgcm93bmdjbGFzcyBhdHRyIGlzIHByZXNlbnQgZm9yIHRhYmxlXG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCR3YXRjaCh0aGlzLnJvd25nY2xhc3MsIHRoaXMudmlld1BhcmVudCwge3Jvd30sIChudiwgb3YpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnYXBwbHlSb3dOZ0NsYXNzJywgZ2V0Q29uZGl0aW9uYWxDbGFzc2VzKG52LCBvdiksIGluZGV4KTtcbiAgICAgICAgICAgIH0sIHdhdGNoTmFtZSkpO1xuICAgICAgICB9LFxuICAgICAgICByZWdpc3RlckNvbE5nQ2xhc3NXYXRjaGVyOiAocm93RGF0YSwgY29sRGVmLCByb3dJbmRleCwgY29sSW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICghY29sRGVmWydjb2wtbmctY2xhc3MnXSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Q2xvbmVkUm93T2JqZWN0KHJvd0RhdGEpO1xuICAgICAgICAgICAgY29uc3Qgd2F0Y2hOYW1lID0gYCR7dGhpcy53aWRnZXRJZH1fY29sTmdDbGFzc18ke3Jvd0luZGV4fV8ke2NvbEluZGV4fWA7XG4gICAgICAgICAgICAkdW53YXRjaCh3YXRjaE5hbWUpO1xuICAgICAgICAgICAgLy9bVG9kby1DU1BdOiBnZW5lcmF0ZSB3YXRjaGVyIGV4cHIgaW4gcGFnZSBpZiBjb2wtbmctY2xhc3MgYXR0ciBpcyBwcmVzZW50IGZvciB0YWJsZVxuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigkd2F0Y2goY29sRGVmWydjb2wtbmctY2xhc3MnXSwgdGhpcy52aWV3UGFyZW50LCB7cm93fSwgKG52LCBvdikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdhcHBseUNvbE5nQ2xhc3MnLCBnZXRDb25kaXRpb25hbENsYXNzZXMobnYsIG92KSwgcm93SW5kZXgsIGNvbEluZGV4KTtcbiAgICAgICAgICAgIH0sIHdhdGNoTmFtZSkpO1xuICAgICAgICB9LFxuICAgICAgICBjbGVhckN1c3RvbUV4cHJlc3Npb246ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRXhwclZpZXdSZWYuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRXhwckNvbXBpbGVkVGwgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRXhwckNvbXBpbGVkU3VtbWFyeVRsID0ge307XG4gICAgICAgIH0sXG4gICAgICAgIGNsZWFyUm93RGV0YWlsRXhwcmVzc2lvbjogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yb3dEZXRhaWxWaWV3UmVmLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLnJvd0RlZk1hcCA9IHt9O1xuICAgICAgICAgICAgdGhpcy5yb3dEZWZJbnN0YW5jZXMgPSB7fTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2VuZXJhdGVDdXN0b21FeHByZXNzaW9uczogKHJvd0RhdGEsIGluZGV4LCBzdW1tYXJ5Um93PykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRDbG9uZWRSb3dPYmplY3Qocm93RGF0YSk7XG4gICAgICAgICAgICBjb25zdCBjb21waWxlVGVtcGxhdGUgPSAodG1wbCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdG1wbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbERlZiA9IHt9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgICAgY29sRGVmXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEV2ZW50c1RvQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXN0b21FeHByVmlldyA9IHRoaXMuY3VzdG9tRXhwclZpZXdSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRtcGwsIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvb3ROb2RlID0gY3VzdG9tRXhwclZpZXcucm9vdE5vZGVzWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHJvb3ROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1jb2wtaWRlbnRpZmllcicpO1xuICAgICAgICAgICAgICAgIF8uZXh0ZW5kKGNvbERlZiwgdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0pO1xuICAgICAgICAgICAgICAgIGlmICghc3VtbWFyeVJvdykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUV4cHJDb21waWxlZFRsW2ZpZWxkTmFtZSArIGluZGV4XSA9IHJvb3ROb2RlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tRXhwckNvbXBpbGVkU3VtbWFyeVRsW2ZpZWxkTmFtZSArIGluZGV4XSA9IHJvb3ROb2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGhpcy5pc2R5bmFtaWN0YWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmllbGREZWZzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGlsZVRlbXBsYXRlKGNvbC5jdXN0b21FeHByVG1wbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRm9yIGFsbCB0aGUgY29sdW1ucyBpbnNpZGUgdGhlIHRhYmxlLCBnZW5lcmF0ZSB0aGUgY3VzdG9tIGV4cHJlc3Npb25cbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRXhwclRtcGwuZm9yRWFjaChjb21waWxlVGVtcGxhdGUuYmluZCh0aGlzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdlbmVyYXRlUm93RXhwYW5zaW9uQ2VsbDogKHJvd0RhdGEsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldENsb25lZFJvd09iamVjdChyb3dEYXRhKTtcbiAgICAgICAgICAgIC8vIEZvciBhbGwgdGhlIGNvbHVtbnMgaW5zaWRlIHRoZSB0YWJsZSwgZ2VuZXJhdGUgdGhlIGlubGluZSB3aWRnZXRcbiAgICAgICAgICAgIHRoaXMucm93RXhwYW5zaW9uQWN0aW9uVG1wbC5mb3JFYWNoKCh0bXBsKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dFeHBhbnNpb25BY3Rpb25UbFtpbmRleF0gPSB0aGlzLnJvd0V4cGFuc2lvbkFjdGlvblZpZXdSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRtcGwsIHtyb3d9KS5yb290Tm9kZXM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0Um93RXhwYW5zaW9uQWN0aW9uOiAoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvd0V4cGFuc2lvbkFjdGlvblRsW2luZGV4XTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2VuZXJhdGVSb3dEZXRhaWxWaWV3OiAoJGV2ZW50LCByb3dEYXRhLCByb3dJZCwgJHRhcmdldCwgJG92ZXJsYXksIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldENsb25lZFJvd09iamVjdChyb3dEYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IHJvd0RlZiA9IGdldENsb25lZE9iamVjdCh0aGlzLnJvd0RlZik7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3dJbnN0YW5jZS5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVyb3dleHBhbmQnLCB7JGV2ZW50LCAkZGF0YTogcm93RGVmLCByb3d9KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJvd0RlZi5jb250ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRXhwYW5kIHRoZSByb3cgZGV0YWlsXG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgLy8gUm93IGlzIGFscmVhZHkgcmVuZGVyZWQuIFJldHVybiBoZXJlXG4gICAgICAgICAgICBpZiAodGhpcy5yb3dEZWZNYXBbcm93SWRdICYmIHRoaXMucm93RGVmTWFwW3Jvd0lkXS5jb250ZW50ID09PSByb3dEZWYuY29udGVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMucm93SW5zdGFuY2UuaW52b2tlRXZlbnRDYWxsYmFjaygncm93ZXhwYW5kJywgeyRldmVudCwgcm93LCAkZGF0YTogdGhpcy5yb3dEZWZJbnN0YW5jZXNbcm93SWRdfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yb3dEZWZNYXBbcm93SWRdID0gcm93RGVmO1xuICAgICAgICAgICAgJHRhcmdldC5lbXB0eSgpO1xuICAgICAgICAgICAgJHRhcmdldC5oaWRlKCk7XG4gICAgICAgICAgICAkb3ZlcmxheS5zaG93KCk7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgICAgIHJvd0RlZixcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyTG9hZDogKHdpZGdldCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJG92ZXJsYXkuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YXJnZXQuc2hvdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm93RGVmSW5zdGFuY2VzW3Jvd0lkXSA9IHdpZGdldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0luc3RhbmNlLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd2V4cGFuZCcsIHskZXZlbnQsIHJvdywgJGRhdGE6IHdpZGdldH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICAgICAgICAgICAgfX07XG4gICAgICAgICAgICBjb25zdCByb290Tm9kZSA9IHRoaXMucm93RGV0YWlsVmlld1JlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5yb3dFeHBhbnNpb25UbXBsLCBjb250ZXh0KS5yb290Tm9kZXNbMF07XG4gICAgICAgICAgICAkdGFyZ2V0WzBdLmFwcGVuZENoaWxkKHJvb3ROb2RlKTtcbiAgICAgICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25CZWZvcmVSb3dDb2xsYXBzZTogKCRldmVudCwgcm93LCByb3dJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm93SW5zdGFuY2UuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3Jlcm93Y29sbGFwc2UnLCB7JGV2ZW50LCByb3csICRkYXRhOiB0aGlzLnJvd0RlZkluc3RhbmNlc1tyb3dJZF19KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Sb3dDb2xsYXBzZTogKCRldmVudCwgcm93KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJvd0luc3RhbmNlLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd2NvbGxhcHNlJywgeyRldmVudCwgcm93fSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldEN1c3RvbUV4cHJlc3Npb246IChmaWVsZE5hbWUsIGluZGV4LCBzdW1tYXJ5Um93PykgPT4ge1xuICAgICAgICAgICAgbGV0IGN1c3RvbUV4cHJlc3Npb247XG4gICAgICAgICAgICBpZiAoIXN1bW1hcnlSb3cpIHtcbiAgICAgICAgICAgICAgICBjdXN0b21FeHByZXNzaW9uID0gdGhpcy5jdXN0b21FeHByQ29tcGlsZWRUbFtmaWVsZE5hbWUgKyBpbmRleF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN1c3RvbUV4cHJlc3Npb24gPSB0aGlzLmN1c3RvbUV4cHJDb21waWxlZFN1bW1hcnlUbFtmaWVsZE5hbWUgKyBpbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VzdG9tRXhwcmVzc2lvbiB8fCAnJztcbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXJSb3dBY3Rpb25zOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJvd0FjdGlvbnNWaWV3UmVmLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLnJvd0FjdGlvbnNDb21waWxlZFRsID0ge307XG4gICAgICAgICAgICB0aGlzLnJvd0V4cGFuc2lvbkFjdGlvblZpZXdSZWYuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMucm93RXhwYW5zaW9uQWN0aW9uVGwgPSB7fTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2VuZXJhdGVSb3dBY3Rpb25zOiAocm93RGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Q2xvbmVkUm93T2JqZWN0KHJvd0RhdGEpO1xuICAgICAgICAgICAgdGhpcy5yb3dBY3Rpb25zQ29tcGlsZWRUbFtpbmRleF0gPSBbXTtcbiAgICAgICAgICAgIC8vIEZvciBhbGwgdGhlIGNvbHVtbnMgaW5zaWRlIHRoZSB0YWJsZSwgZ2VuZXJhdGUgdGhlIGlubGluZSB3aWRnZXRcbiAgICAgICAgICAgIHRoaXMucm93QWN0aW9uVG1wbC5mb3JFYWNoKCh0bXBsKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dBY3Rpb25zQ29tcGlsZWRUbFtpbmRleF0ucHVzaCguLi50aGlzLnJvd0FjdGlvbnNWaWV3UmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0bXBsLCB7cm93fSkucm9vdE5vZGVzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBnZXRSb3dBY3Rpb246IChpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm93QWN0aW9uc0NvbXBpbGVkVGxbaW5kZXhdO1xuICAgICAgICB9LFxuICAgICAgICBnZW5lcmF0ZUlubGluZUVkaXRSb3c6IChyb3dEYXRhLCBhbHdheXNOZXdSb3cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Q2xvbmVkUm93T2JqZWN0KHJvd0RhdGEpO1xuICAgICAgICAgICAgaWYgKGFsd2F5c05ld1Jvdykge1xuICAgICAgICAgICAgICAgIC8vIENsZWFyIHRoZSB2aWV3IGNvbnRhaW5lciByZWZcbiAgICAgICAgICAgICAgICB0aGlzLmlubGluZUVkaXROZXdWaWV3UmVmLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmxpbmVOZXdDb21wbGllZFRsID0ge307XG4gICAgICAgICAgICAgICAgLy8gRm9yIGFsbCB0aGUgY29sdW1ucyBpbnNpZGUgdGhlIHRhYmxlLCBnZW5lcmF0ZSB0aGUgaW5saW5lIHdpZGdldFxuICAgICAgICAgICAgICAgIHRoaXMuaW5saW5lV2lkZ2V0TmV3VG1wbC5mb3JFYWNoKHRtcGwgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGROYW1lO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29udHJvbDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5nZm9ybS5jb250cm9sc1tmaWVsZE5hbWUgKyAnX25ldyddIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFZhbGlkYXRpb25NZXNzYWdlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdICYmIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdLnZhbGlkYXRpb25tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFBlbmRpbmdTcGlubmVyU3RhdHVzTmV3OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdICYmIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdLnNob3dQZW5kaW5nU3Bpbm5lck5ldztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSB0aGlzLmlubGluZUVkaXROZXdWaWV3UmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0bXBsLCBjb250ZXh0KS5yb290Tm9kZXNbMF07XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9IHJvb3ROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1jb2wtaWRlbnRpZmllcicpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlubGluZU5ld0NvbXBsaWVkVGxbZmllbGROYW1lXSA9IHJvb3ROb2RlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJGb3JtKHRydWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENsZWFyIHRoZSB2aWV3IGNvbnRhaW5lciByZWZcbiAgICAgICAgICAgIHRoaXMuaW5saW5lRWRpdFZpZXdSZWYuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuaW5saW5lQ29tcGxpZWRUbCA9IHt9O1xuICAgICAgICAgICAgdGhpcy5jbGVhckZvcm0oKTtcbiAgICAgICAgICAgIC8vIEZvciBhbGwgdGhlIGNvbHVtbnMgaW5zaWRlIHRoZSB0YWJsZSwgZ2VuZXJhdGUgdGhlIGlubGluZSB3aWRnZXRcbiAgICAgICAgICAgIHRoaXMuaW5saW5lV2lkZ2V0VG1wbC5mb3JFYWNoKHRtcGwgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBmaWVsZE5hbWU7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgICAgICBnZXRDb250cm9sOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uZ2Zvcm0uY29udHJvbHNbZmllbGROYW1lXSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0VmFsaWRhdGlvbk1lc3NhZ2U6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXSAmJiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXS52YWxpZGF0aW9ubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGVuZGluZ1NwaW5uZXJTdGF0dXM6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXSAmJiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXS5zaG93UGVuZGluZ1NwaW5uZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCByb290Tm9kZSA9IHRoaXMuaW5saW5lRWRpdFZpZXdSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRtcGwsIGNvbnRleHQpLnJvb3ROb2Rlc1swXTtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSByb290Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29sLWlkZW50aWZpZXInKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlubGluZUNvbXBsaWVkVGxbZmllbGROYW1lXSA9IHJvb3ROb2RlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldElubGluZUVkaXRXaWRnZXQ6IChmaWVsZE5hbWUsIHZhbHVlLCBhbHdheXNOZXdSb3cpID0+IHtcbiAgICAgICAgICAgIGlmIChhbHdheXNOZXdSb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldEZpZWxkVmFsdWUoZmllbGROYW1lICsgJ19uZXcnLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5saW5lTmV3Q29tcGxpZWRUbFtmaWVsZE5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRGaWVsZFZhbHVlKGZpZWxkTmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5saW5lQ29tcGxpZWRUbFtmaWVsZE5hbWVdO1xuICAgICAgICB9LFxuICAgICAgICBzZXRGaWVsZFZhbHVlOiAoZmllbGROYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMubmdmb3JtLmNvbnRyb2xzICYmIHRoaXMubmdmb3JtLmNvbnRyb2xzW2ZpZWxkTmFtZV07XG4gICAgICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZXRGaWVsZFZhbHVlOiBmaWVsZE5hbWUgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMubmdmb3JtLmNvbnRyb2xzICYmIHRoaXMubmdmb3JtLmNvbnRyb2xzW2ZpZWxkTmFtZV07XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbCAmJiBjb250cm9sLnZhbHVlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIGZ1bmN0aW9uIHRvIGFkZCBsb2FkIG1vcmUgYnV0dG9uIHRvIHRhYmxlXG4gICAgICAgIGFkZExvYWRNb3JlQnRuOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2FkZExvYWRNb3JlQnRuJywgdGhpcy5vbmRlbWFuZG1lc3NhZ2UsIHRoaXMubG9hZGluZ2RhdGFtc2csICgkZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0SXNOZXh0UGFnZURhdGEodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldElzRGF0YVVwZGF0ZWRCeVVzZXIoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbnMubW9kZSA9PT0gJ3ZpZXdsZXNzJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5uYXZpZ2F0ZVBhZ2UoJ2ZpcnN0JywgJGV2ZW50LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLm1vZGUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLm5hdmlnYXRlUGFnZSgnbmV4dCcsICRldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCB0aGlzLmluZlNjcm9sbCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGZ1bmN0aW9uIHRvIGJpbmQgc2Nyb2xsIGV2ZW50XG4gICAgICAgIGJpbmRTY3JvbGxFdnQ6ICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9ncmlkRGF0YSAmJiB0aGlzLl9ncmlkRGF0YS5sZW5ndGggJiYgdGhpcy5pbmZTY3JvbGwpIHtcbiAgICAgICAgICAgICAgICAvLyBzbW9vdGhzY3JvbGwgZXZlbnRzIHdpbGwgYmUgYmluZGVkLlxuICAgICAgICAgICAgICAgIC8vIEFkZGVkIHRpbWVvdXQgYXMgdGhlIHRhYmxlIGh0bWwgaXMgcmVuZGVyZWQgYXQgcnVudGltZVxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmJpbmRTY3JvbGxFdnQodGhpcywgJ3Rib2R5JywgREVCT1VOQ0VfVElNRVMuUEFHSU5BVElPTl9ERUJPVU5DRV9USU1FKTtcbiAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2VuZXJhdGVGaWx0ZXJSb3c6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIENsZWFyIHRoZSB2aWV3IGNvbnRhaW5lciByZWZcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyVmlld1JlZi5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5yb3dGaWx0ZXJDb21wbGllZFRsID0ge307XG4gICAgICAgICAgICAvLyBGb3IgYWxsIHRoZSBjb2x1bW5zIGluc2lkZSB0aGUgdGFibGUsIGdlbmVyYXRlIHRoZSBjb21waWxlZCBmaWx0ZXIgdGVtcGxhdGVcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyVG1wbC5mb3JFYWNoKCh0bXBsKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSB0aGlzLmZpbHRlclZpZXdSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRtcGwsIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlRm46IHRoaXMub25Sb3dGaWx0ZXJDaGFuZ2UuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZDogKGZpZWxkTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW1wdHlNYXRjaE1vZGVzLmluZGV4T2YodGhpcy5yb3dGaWx0ZXJbZmllbGROYW1lXSAmJiB0aGlzLnJvd0ZpbHRlcltmaWVsZE5hbWVdLm1hdGNoTW9kZSkgPiAtMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLnJvb3ROb2Rlc1swXTtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd0ZpbHRlckNvbXBsaWVkVGxbcm9vdE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbC1pZGVudGlmaWVyJyldID0gcm9vdE5vZGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0RmlsdGVyV2lkZ2V0OiAoZmllbGROYW1lKSA9PiB7XG4gICAgICAgICAgICAvLyBNb3ZlIHRoZSBnZW5lcmF0ZWQgZmlsdGVyIHRlbXBsYXRlIHRvIHRoZSBmaWx0ZXIgcm93XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb3dGaWx0ZXJDb21wbGllZFRsW2ZpZWxkTmFtZV07XG4gICAgICAgIH0sXG4gICAgICAgIHNldEdyaWRFZGl0TW9kZTogKHZhbCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzR3JpZEVkaXRNb2RlID0gdmFsO1xuICAgICAgICAgICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBzZXRHcmlkU3RhdGU6ICh2YWwpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdmFsID09PSAnbG9hZGluZyc7XG4gICAgICAgIH0sXG4gICAgICAgIC8qXG4gICAgICAgICAgICBzZXQgYWN0aW9uUm93SW5kZXggYW5kIGFjdGlvblJvd1BhZ2UgdmFsdWVzXG4gICAgICAgICAgICBhY3Rpb25Sb3dJbmRleCB3aWxsIGhhdmUgdGhlIHJvdyBpbmRleCBpbiB0aGUgZGF0YXNldCBvbiB3aGljaCBlZGl0L2RlbGV0ZSBvcGVyYXRpb24gaXMgYmVpbmcgcGVyZm9ybWVkXG4gICAgICAgICAgICBhY3Rpb25Sb3dQYWdlIHdpbGwgaGF2ZSBwYWdlIG51bWJlciBpbiB3aGljaCB0aGUgYWN0aW9uIHJvdyBpbmRleCBpcyBwcmVzZW50XG4gICAgICAgICAqL1xuICAgICAgICBzZXRBY3Rpb25Sb3dJbmRleDogKHZhbCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbnMuaXNOYXZUeXBlU2Nyb2xsT3JPbmRlbWFuZCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3Rpb25Sb3dJbmRleCA9IHBhcnNlSW50KHZhbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignYWN0aW9uUm93SW5kZXgnLCB0aGlzLmFjdGlvblJvd0luZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAoIV8uaXNOYU4odGhpcy5hY3Rpb25Sb3dJbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3Rpb25Sb3dQYWdlID0gTWF0aC5mbG9vcih0aGlzLmFjdGlvblJvd0luZGV4IC8gdGhpcy5wYWdlc2l6ZSkgKyAxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdhY3Rpb25Sb3dQYWdlJywgdGhpcy5hY3Rpb25Sb3dQYWdlIHx8IHRoaXMuZ3JpZE9wdGlvbnMuYWN0aW9uUm93UGFnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjbGVhckFjdGlvblJvd0luZGV4OiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNSb3dEZWxldGVkICYmICh0aGlzLmluZlNjcm9sbCB8fCB0aGlzLm9uRGVtYW5kTG9hZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyQWN0aW9uUm93VmFycygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBub0NoYW5nZXNEZXRlY3RlZDogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVNZXNzYWdlKHRydWUsICdpbmZvJywgJ05vIENoYW5nZXMgRGV0ZWN0ZWQnLCAnJyk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIEZ1bmN0aW9uIHRvIHJlZHJhdyB0aGUgd2lkZ2V0cyBvbiByZXNpemUgb2YgY29sdW1uc1xuICAgICAgICByZWRyYXdXaWRnZXRzOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmcy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckZuKGNvbC5pbmxpbmVJbnN0YW5jZSAmJiBjb2wuaW5saW5lSW5zdGFuY2UucmVkcmF3KTtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRm4oY29sLmlubGluZUluc3RhbmNlTmV3ICYmIGNvbC5pbmxpbmVJbnN0YW5jZU5ldy5yZWRyYXcpO1xuICAgICAgICAgICAgICAgIHRyaWdnZXJGbihjb2wuZmlsdGVySW5zdGFuY2UgJiYgY29sLmZpbHRlckluc3RhbmNlLnJlZHJhdyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2VhcmNoSGFuZGxlcjogdGhpcy5zZWFyY2hTb3J0SGFuZGxlci5iaW5kKHRoaXMpLFxuICAgICAgICBzb3J0SGFuZGxlcjogdGhpcy5zZWFyY2hTb3J0SGFuZGxlci5iaW5kKHRoaXMpLFxuICAgICAgICB0aW1lb3V0Q2FsbDogKGZuLCBkZWxheSkgPT4ge1xuICAgICAgICAgICAgc2V0VGltZW91dChmbiwgZGVsYXkpO1xuICAgICAgICB9LFxuICAgICAgICBydW5Jbk5nWm9uZTogZm4gPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKGZuKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2FmZUFwcGx5OiAoKSA9PiB7XG4gICAgICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldFRvdWNoZWQ6IChuYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdHJsID0gdGhpcy5uZ2Zvcm0uY29udHJvbHNbbmFtZV07XG4gICAgICAgICAgICBpZiAoY3RybCkge1xuICAgICAgICAgICAgICAgIGN0cmwubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjbGVhckZvcm06IHRoaXMuY2xlYXJGb3JtLmJpbmQodGhpcyksXG4gICAgICAgIGNhbGxMb2FkSW5saW5lV2lkZ2V0RGF0YTogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mdWxsRmllbGREZWZzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChjb2wuaXNEYXRhU2V0Qm91bmQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJGbihjb2wubG9hZElubGluZVdpZGdldERhdGEgJiYgY29sLmxvYWRJbmxpbmVXaWRnZXREYXRhLmJpbmQoY29sKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIEZ1bmN0aW9uIHRvIGFwcGx5IHZhbGlkYXRvcnMgdG8gSW5saW5lIGZvcm0gY29udHJvbHNcbiAgICAgICAgYXBwbHlWYWxpZGF0aW9uczogKGNvbCwgYWx3YXlzTmV3Um93KSA9PiB7XG4gICAgICAgICAgICBpZiAoYWx3YXlzTmV3Um93KSB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckZuKGNvbC5hcHBseU5ld1Jvd1ZhbGlkYXRpb25zICYmIGNvbC5hcHBseU5ld1Jvd1ZhbGlkYXRpb25zLmJpbmQoY29sKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJGbihjb2wuYXBwbHlWYWxpZGF0aW9ucyAmJiBjb2wuYXBwbHlWYWxpZGF0aW9ucy5iaW5kKGNvbCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBGdW5jdGlvbiB0byByZW1vdmUgdmFsaWRhdG9ycyBhbmQgc2V0IGZvcm0gc3RhdGUgdG8gdW50b3VjaGVkIGZvciBpbmxpbmUgZm9ybSBjb250cm9sXG4gICAgICAgIHJlbW92ZVZhbGlkYXRpb25zOiAoYWx3YXlzTmV3Um93KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZ1bGxGaWVsZERlZnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY29sLnJlYWRvbmx5ICYmIGNvbC5iaW5kaW5nICE9PSAncm93T3BlcmF0aW9ucycpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFsd2F5c05ld1Jvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckZuKGNvbC5yZW1vdmVOZXdSb3dWYWxpZGF0aW9ucyAmJiBjb2wucmVtb3ZlTmV3Um93VmFsaWRhdGlvbnMuYmluZChjb2wpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJGbihjb2wucmVtb3ZlVmFsaWRhdGlvbnMgJiYgY29sLnJlbW92ZVZhbGlkYXRpb25zLmJpbmQoY29sKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIF9ncmlkRGF0YTtcbiAgICBwcml2YXRlIF9zZWxlY3RlZEl0ZW1zRXhpc3QgPSBmYWxzZTtcbiAgICBzZXQgZ3JpZERhdGEobmV3VmFsdWUpIHtcbiAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yNDAxMl06IGhpZGUgbm8gZGF0YWZvdW5kIG1zZyB3aGVuIHZhcmlhYmxlSW5mbGlnaHQgaXMgdHJ1ZSBhbmQgZGF0YXNldCBpcyBlbXB0eVxuICAgICAgICBpZiAodGhpcy52YXJpYWJsZUluZmxpZ2h0ICYmIF8uaXNFbXB0eShuZXdWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhcmlhYmxlSW5mbGlnaHQgPSBmYWxzZTtcbiAgICAgICAgLy8gRml4IGZvciBbV01TLTI0MTA4XTogQ2hhbmdlIHRoZSBzdGF0dXMgdG8gcmVhZHkgb3Igbm9kYXRhIGZvdW5kIHdoZW4gdmFyaWFibGVJbmZsaWdodCBpcyBmYWxzZShhZnRlciBnZXR0aW5nIHRoZSBkYXRhKVxuICAgICAgICBpZiAobmV3VmFsdWUgJiYgKG5ld1ZhbHVlLmxlbmd0aCkgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbm9kYXRhJywgdGhpcy5ub2RhdGFtZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAncmVhZHknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy5pc05hdlR5cGVTY3JvbGxPck9uZGVtYW5kKCkpIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgX2dyaWREYXRhIGZpZWxkIHdpdGggdGhlIG5leHQgc2V0IG9mIGl0ZW1zIGFuZCBtb2RpZnkgdGhlIGN1cnJlbnQgcGFnZVxuICAgICAgICAgICAgW3RoaXMuX2dyaWREYXRhLCB0aGlzLmN1cnJlbnRQYWdlXSA9IHRoaXMucGFnaW5hdGlvblNlcnZpY2UudXBkYXRlRmllbGRzT25QYWdpbmF0aW9uKHRoaXMsIG5ld1ZhbHVlKTtcblxuICAgICAgICAgICAgLy8gV2hlbiBlZGl0IGFjdGlvbiBpcyBwZXJmb3JtZWQgb24gcHJldmlvdXMgcGFnZSwgdXBkYXRlIHRoZSBfZ3JpZERhdGEgZmllbGQgd2l0aCB0aGUgbW9kaWZpZWQgcm93IGRhdGFcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLmxhc3RBY3Rpb25QZXJmb3JtZWQgPT09IHRoaXMuZ3JpZE9wdGlvbnMuQUNUSU9OUy5FRElUKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93SW5kZXggPSBfLmZsb29yKHRoaXMuYWN0aW9uUm93SW5kZXggJSB0aGlzLnBhZ2VzaXplKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9ncmlkRGF0YS5zcGxpY2UodGhpcy5hY3Rpb25Sb3dJbmRleCwgMSAsIG5ld1ZhbHVlW3Jvd0luZGV4XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdpc0xhc3RQYWdlJywgISEodGhpcy5kYXRhTmF2aWdhdG9yLmlzRGlzYWJsZU5leHQpKTtcbiAgICAgICAgICAgIC8vIEluIGNhc2Ugb2Ygb24gZGVtYW5kIHBhZ2luYXRpb24sIGNyZWF0ZSB0aGUgbG9hZCBtb3JlIGJ1dHRvbiBvbmx5IG9uY2UgYW5kIHNob3cgdGhlIGJ1dHRvbiB1bnRpbCBuZXh0IHBhZ2UgaXMgbm90IGRpc2FibGVkXG4gICAgICAgICAgICBpZiAoIXRoaXMuJGVsZW1lbnQuZmluZCgnLm9uLWRlbWFuZC1kYXRhZ3JpZCcpLmxlbmd0aCAmJiAhdGhpcy5kYXRhTmF2aWdhdG9yLmlzRGlzYWJsZU5leHQgJiYgdGhpcy5vbkRlbWFuZExvYWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmFkZExvYWRNb3JlQnRuKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCh0aGlzLl9ncmlkRGF0YSAmJiB0aGlzLl9ncmlkRGF0YS5sZW5ndGgpICYmICh0aGlzLmRhdGFOYXZpZ2F0b3IuaXNEaXNhYmxlTmV4dCB8fCAhdGhpcy5pc0RhdGFMb2FkaW5nKSkge1xuICAgICAgICAgICAgICAgIC8vIHdoZW4gdGhlIG5leHQgcGFnZSBpcyBkaXNhYmxlZCBvciB3aGVuIHRoZSBkYXRhIGlzIG5vdCBsb2FkaW5nIHJlbW92ZSB0aGUgbG9hZGluZy9sb2FkIG1vcmUgYnV0dG9uIGFjY29yZGluZ2x5XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2hpZGVMb2FkaW5nSW5kaWNhdG9yJywgdGhpcy5kYXRhTmF2aWdhdG9yLmlzRGlzYWJsZU5leHQsIHRoaXMuaW5mU2Nyb2xsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2dyaWREYXRhID0gbmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0YXJ0Um93SW5kZXggPSAwO1xuICAgICAgICBsZXQgZ3JpZE9wdGlvbnM7XG5cbiAgICAgICAgdGhpcy5fb25DaGFuZ2UodGhpcy5fZ3JpZERhdGEpO1xuICAgICAgICB0aGlzLl9vblRvdWNoZWQoKTtcblxuICAgICAgICBpZiAoaXNEZWZpbmVkKG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5iaW5kU2Nyb2xsRXZ0KCk7XG5cbiAgICAgICAgICAgIC8qU2V0dGluZyB0aGUgc2VyaWFsIG5vJ3Mgb25seSB3aGVuIHNob3cgbmF2aWdhdGlvbiBpcyBlbmFibGVkIGFuZCBkYXRhIG5hdmlnYXRvciBpcyBjb21waWxlZFxuICAgICAgICAgICAgIGFuZCBpdHMgY3VycmVudCBwYWdlIGlzIHNldCBwcm9wZXJseSovXG4gICAgICAgICAgICBpZiAodGhpcy5pc05hdmlnYXRpb25FbmFibGVkKCkgJiYgdGhpcy5kYXRhTmF2aWdhdG9yLmRuLmN1cnJlbnRQYWdlKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRSb3dJbmRleCA9ICgodGhpcy5kYXRhTmF2aWdhdG9yLmRuLmN1cnJlbnRQYWdlIC0gMSkgKiAodGhpcy5kYXRhTmF2aWdhdG9yLm1heFJlc3VsdHMgfHwgMSkpICsgMTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdzdGFydFJvd0luZGV4Jywgc3RhcnRSb3dJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBJZiBjb2xEZWZzIGFyZSBhdmFpbGFibGUsIGJ1dCBub3QgYWxyZWFkeSBzZXQgb24gdGhlIGRhdGFncmlkLCB0aGVuIHNldCB0aGVtLlxuICAgICAgICAgICAgICogVGhpcyB3aWxsIGhhcHBlbiB3aGlsZSBzd2l0Y2hpbmcgZnJvbSBtYXJrdXAgdG8gZGVzaWduIHRhYi4gKi9cbiAgICAgICAgICAgIGdyaWRPcHRpb25zID0gdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2dldE9wdGlvbnMnKTtcblxuICAgICAgICAgICAgaWYgKCFncmlkT3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFncmlkT3B0aW9ucy5jb2xEZWZzLmxlbmd0aCAmJiB0aGlzLmZpZWxkRGVmcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdjb2xEZWZzJywgZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuZmllbGREZWZzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiBkYXRhIGFuZCBjb2xEZWZzIGFyZSBwcmVzZW50LCBjYWxsIG9uIGJlZm9yZSBkYXRhIHJlbmRlciBldmVudFxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzZHluYW1pY3RhYmxlICYmICFfLmlzRW1wdHkobmV3VmFsdWUpICYmIGdyaWRPcHRpb25zLmNvbERlZnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVkYXRhcmVuZGVyJywgeyRkYXRhOiB0aGlzLl9ncmlkRGF0YSwgJGNvbHVtbnM6IHRoaXMuY29sdW1ucywgZGF0YTogdGhpcy5fZ3JpZERhdGEsIGNvbHVtbnM6IHRoaXMuY29sdW1uc30pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignZGF0YScsIGdldENsb25lZE9iamVjdCh0aGlzLl9ncmlkRGF0YSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGdyaWREYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ3JpZERhdGEgfHwgW107XG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGVkaXRlbSgpIHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRDbG9uZWRPYmplY3QodGhpcy5pdGVtcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaXNFbXB0eSh0aGlzLml0ZW1zKSkge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXRDbG9uZWRPYmplY3QodGhpcy5pdGVtc1swXSk7XG4gICAgfVxuXG4gICAgc2V0IHNlbGVjdGVkaXRlbSh2YWwpIHtcbiAgICAgICAgLy8gU2VsZWN0IHRoZSByb3dzIGluIHRoZSB0YWJsZSBiYXNlZCBvbiB0aGUgbmV3IHNlbGVjdGVkIGl0ZW1zIHBhc3NlZFxuICAgICAgICB0aGlzLml0ZW1zLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZWxlY3RSb3dzJywgdmFsKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdrZXlwcmVzcycsIFsnJGV2ZW50J10pIG9uS2V5UHJlc3MgKCRldmVudDogYW55KSB7XG4gICAgICAgIGlmICgkZXZlbnQud2hpY2ggPT09IDEzKSB7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2VudGVya2V5cHJlc3MnLCB7JGV2ZW50LCAkZGF0YTogdGhpcy5ncmlkRGF0YX0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBpbmo6IEluamVjdG9yLFxuICAgICAgICBwdWJsaWMgZmI6IEZvcm1CdWlsZGVyLFxuICAgICAgICBwcml2YXRlIGFwcDogQXBwLFxuICAgICAgICBwcml2YXRlIGR5bmFtaWNDb21wb25lbnRQcm92aWRlcjogRHluYW1pY0NvbXBvbmVudFJlZlByb3ZpZGVyLFxuICAgICAgICBwcml2YXRlIHN0YXRlUGVyc2lzdGVuY2U6IFN0YXRlUGVyc2lzdGVuY2UsXG4gICAgICAgIHByaXZhdGUgcGFnaW5hdGlvblNlcnZpY2U6IFBhZ2luYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHZpZXdwb3J0OiBWaWV3cG9ydCxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHVibGljIHBhcmVudExpc3Q6IExpc3RDb21wb25lbnQsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2RhdGFzZXQuYmluZCcpIHB1YmxpYyBiaW5kZGF0YXNldCxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGF0YXNvdXJjZS5iaW5kJykgcHVibGljIGJpbmRkYXRhc291cmNlLFxuICAgICAgICBAQXR0cmlidXRlKCdyZWFkb25seWdyaWQnKSBwdWJsaWMgcmVhZG9ubHlncmlkLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIHRydXN0QXNQaXBlOiBUcnVzdEFzUGlwZVxuICAgICkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsKTtcbiAgICAgICAgc3R5bGVyKHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5uZ2Zvcm0gPSBmYi5ncm91cCh7fSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRzVG9Db250ZXh0KHRoaXMuY29udGV4dCk7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVyc1RvUmVtb3ZlID0gW1xuICAgICAgICAgICAgLy8gVXBkYXRlcyBwYWdpbmF0aW9uLCBmaWx0ZXIsIHNvcnQgZXRjIG9wdGlvbnMgZm9yIHNlcnZpY2UgYW5kIGNydWQgdmFyaWFibGVzXG4gICAgICAgICAgICB0aGlzLmFwcC5zdWJzY3JpYmUoJ2NoZWNrLXN0YXRlLXBlcnNpc3RlbmNlLW9wdGlvbnMnLCBvcHRpb25zID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZGF0YVNvdXJjZU5hbWUgPSBfLmdldCh0aGlzLmRhdGFzb3VyY2UsICduYW1lJyk7XG4gICAgICAgICAgICAgICAgLy8gaW4gUHJlZmFicywgdGhpcy5kYXRhc291cmNlIGlzIG5vdCByZXNvbHZlZCBhdCB0aGUgdGltZSBvZiB2YXJpYWJsZSBpbnZvY2F0aW9uLCBzbyBhZGRpdGlvbmFsIGNoZWNrIGlzIHJlcXVpcmVkLlxuICAgICAgICAgICAgICAgIGlmICghZGF0YVNvdXJjZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZU5hbWUgPSBleHRyYWN0RGF0YVNvdXJjZU5hbWUodGhpcy5iaW5kZGF0YXNvdXJjZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChfLmdldChvcHRpb25zLCAndmFyaWFibGUubmFtZScpICE9PSBkYXRhU291cmNlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wYWdlTG9hZCAmJiB0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGFnZUxvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aWRnZXRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHRoaXMuaGFuZGxlU3RhdGVQYXJhbXMod2lkZ2V0U3RhdGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9ICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ3NlbGVjdEZpcnN0Um93JywgdGhpcy5ncmlkZmlyc3Ryb3dzZWxlY3QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG5cbiAgICAgICAgICAgIC8vIFNob3cgbG9hZGluZyBzdGF0dXMgYmFzZWQgb24gdGhlIHZhcmlhYmxlIGxpZmUgY3ljbGVcbiAgICAgICAgICAgIHRoaXMuYXBwLnN1YnNjcmliZSgndG9nZ2xlLXZhcmlhYmxlLXN0YXRlJywgb3B0aW9ucyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YXNvdXJjZSAmJiB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5JU19BUElfQVdBUkUpICYmIGlzRGF0YVNvdXJjZUVxdWFsKG9wdGlvbnMudmFyaWFibGUsIHRoaXMuZGF0YXNvdXJjZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3BhZ2VMb2FkICYmIHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGFnZUxvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZGdldFN0YXRlID0gdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLmdldFdpZGdldFN0YXRlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZGdldFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHRoaXMuaGFuZGxlU3RhdGVQYXJhbXMod2lkZ2V0U3RhdGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdzZWxlY3RGaXJzdFJvdycsIHRoaXMuZ3JpZGZpcnN0cm93c2VsZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpc0RlZmluZWQodGhpcy52YXJpYWJsZUluZmxpZ2h0KSA/IHRoaXMuZGVib3VuY2VkSGFuZGxlTG9hZGluZyhvcHRpb25zKSA6IHRoaXMuaGFuZGxlTG9hZGluZyhvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcblxuICAgICAgICAgICAgdGhpcy5hcHAuc3Vic2NyaWJlKCdzZXR1cC1jdWQtbGlzdGVuZXInLCBwYXJhbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubmFtZSAhPT0gcGFyYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9pc0RlcGVuZGVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1DaGFuZ2UkXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgyNTApKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMudHJpZ2dlcldNRXZlbnQuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuXG4gICAgICAgIGxpc3RlbmVyc1RvUmVtb3ZlLmZvckVhY2goIGwgPT4gdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcihsKSApO1xuXG4gICAgICAgIHRoaXMuZGVsZXRlb2t0ZXh0ID0gdGhpcy5hcHBMb2NhbGUuTEFCRUxfT0s7XG4gICAgICAgIHRoaXMuZGVsZXRlY2FuY2VsdGV4dCA9IHRoaXMuYXBwTG9jYWxlLkxBQkVMX0NBTkNFTDtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJDb250ZW50SW5pdCgpO1xuICAgICAgICB0aGlzLmhlYWRlckNvbmZpZyA9IHRoaXMuaGVhZGVyQ29uZmlnLmZpbHRlcih0aGlzLmZpbHRlckVtcHR5VmFsdWVzLmJpbmQodGhpcykpO1xuICAgICAgICBfLnJlbW92ZSh0aGlzLmZpZWxkRGVmcywgZiA9PiBmID09PSB1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCBydW5Nb2RlSW5pdGlhbFByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICBzaG93cm93aW5kZXg6ICdzaG93Um93SW5kZXgnLFxuICAgICAgICAgICAgbXVsdGlzZWxlY3Q6ICdtdWx0aXNlbGVjdCcsXG4gICAgICAgICAgICByYWRpb3NlbGVjdDogJ3Nob3dSYWRpb0NvbHVtbicsXG4gICAgICAgICAgICBmaWx0ZXJudWxscmVjb3JkczogJ2ZpbHRlck51bGxSZWNvcmRzJyxcbiAgICAgICAgICAgIGVuYWJsZXNvcnQ6ICdlbmFibGVTb3J0JyxcbiAgICAgICAgICAgIHNob3doZWFkZXI6ICdzaG93SGVhZGVyJyxcbiAgICAgICAgICAgIGVuYWJsZWNvbHVtbnNlbGVjdGlvbjogJ2VuYWJsZUNvbHVtblNlbGVjdGlvbicsXG4gICAgICAgICAgICBzaG93bmV3cm93OiAnc2hvd05ld1JvdycsXG4gICAgICAgICAgICBncmlkZmlyc3Ryb3dzZWxlY3Q6ICdzZWxlY3RGaXJzdFJvdydcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5fbGl2ZVRhYmxlUGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLmlzUGFydE9mTGl2ZUdyaWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHlncmlkIHx8ICF0aGlzLmVkaXRtb2RlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWFkb25seWdyaWQgPT09ICd0cnVlJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG1vZGUgPSAnJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNQYXJ0T2ZMaXZlR3JpZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRtb2RlID0gdGhpcy5pc1BhcnRPZkxpdmVHcmlkLmZvcm1sYXlvdXQgPT09ICdpbmxpbmUnID8gRURJVF9NT0RFLkZPUk0gOiBFRElUX01PREUuRElBTE9HO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG1vZGUgPSB0aGlzLnJlYWRvbmx5Z3JpZCA/IEVESVRfTU9ERS5JTkxJTkUgOiAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmNvbERlZnMgPSB0aGlzLmZ1bGxGaWVsZERlZnM7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMucm93QWN0aW9ucyA9IHRoaXMucm93QWN0aW9ucztcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5oZWFkZXJDb25maWcgPSB0aGlzLmhlYWRlckNvbmZpZztcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5yb3dDbGFzcyA9IHRoaXMucm93Y2xhc3M7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuZWRpdG1vZGUgPSB0aGlzLmVkaXRtb2RlO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmZvcm1Qb3NpdGlvbiA9IHRoaXMuZm9ybXBvc2l0aW9uO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmZpbHRlcm1vZGUgPSB0aGlzLmZpbHRlcm1vZGU7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2VhcmNoTGFiZWwgPSB0aGlzLnNlYXJjaGxhYmVsO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmlzTW9iaWxlID0gaXNNb2JpbGUoKTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5uYW1lID0gdGhpcy5uYW1lO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNlY3VyaXR5VXRpbHMucGlwZVRyYW5zZm9ybSA9IHRoaXMudHJ1c3RBc1BpcGU7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMubmF2aWdhdGlvbiA9IHRoaXMubmF2aWdhdGlvbjtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5pc2R5bmFtaWN0YWJsZSA9IHRoaXMuaXNkeW5hbWljdGFibGU7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2hvd3ZpZXdsZXNzYnV0dG9uID0gdGhpcy5zaG93dmlld2xlc3NidXR0b247XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMub25kZW1hbmRtZXNzYWdlID0gdGhpcy5vbmRlbWFuZG1lc3NhZ2U7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMudmlld2xlc3NtZXNzYWdlID0gdGhpcy52aWV3bGVzc21lc3NhZ2U7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMubG9hZGluZ2RhdGFtc2cgPSB0aGlzLmxvYWRpbmdkYXRhbXNnO1xuXG4gICAgICAgIC8vIFdoZW4gbG9hZG9uZGVtYW5kIHByb3BlcnR5IGlzIGVuYWJsZWQoZGVmZXJsb2FkPVwidHJ1ZVwiKSBhbmQgc2hvdyBpcyB0cnVlLCBvbmx5IHRoZSBjb2x1bW4gdGl0bGVzIG9mIHRoZSBkYXRhdGFibGUgYXJlIHJlbmRlcmVkLCB0aGUgZGF0YShib2R5IG9mIHRoZSBkYXRhdGFibGUpIGlzIG5vdCBhdCBhbGwgcmVuZGVyZWQuXG4gICAgICAgIC8vIEJlY2F1c2UgdGhlIGdyaWRkYXRhIGlzIHNldHRpbmcgYmVmb3JlIHRoZSBkYXRhdGFibGUgZG9tIGlzIHJlbmRlcmVkIGJ1dCB3ZSBhcmUgc2VuZGluZyBlbXB0eSBkYXRhIHRvIHRoZSBkYXRhdGFibGUuXG4gICAgICAgIGlmICghXy5pc0VtcHR5KHRoaXMuZ3JpZERhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmRhdGEgPSBnZXRDbG9uZWRPYmplY3QodGhpcy5ncmlkRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5tZXNzYWdlcyA9IHtcbiAgICAgICAgICAgICdzZWxlY3RGaWVsZCc6IHRoaXMuYXBwTG9jYWxlLk1FU1NBR0VfU0VMRUNUX0ZJRUxEXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZGF0YWdyaWRFbGVtZW50ID0gJCh0aGlzLl90YWJsZUVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgdGhpcy5ncmlkRWxlbWVudCA9IHRoaXMuJGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuY3NzKHsncG9zaXRpb24nOiAncmVsYXRpdmUnfSk7XG5cbiAgICAgICAgXy5mb3JFYWNoKHJ1bk1vZGVJbml0aWFsUHJvcGVydGllcywgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodGhpc1trZXldKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnNbdmFsdWVdID0gKHRoaXNba2V5XSA9PT0gJ3RydWUnIHx8IHRoaXNba2V5XSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5zdGF0ZWhhbmRsZXIgIT09ICdub25lJykge1xuICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9uc1snc2VsZWN0Rmlyc3RSb3cnXSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW5kZXJPcGVyYXRpb25Db2x1bW5zKCk7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuY29sRGVmcyA9IHRoaXMuZmllbGREZWZzO1xuXG4gICAgICAgIHRoaXMuZGF0YWdyaWRFbGVtZW50LmRhdGF0YWJsZSh0aGlzLmdyaWRPcHRpb25zKTtcbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdsb2FkaW5nJywgdGhpcy5sb2FkaW5nZGF0YW1zZyk7XG4gICAgICAgIC8vIGlmKHRoaXMuZ3JpZE9wdGlvbnMuZGF0YS5sZW5ndGggfHwgdGhpcy52YXJpYWJsZUluZmxpZ2h0KSB7XG4gICAgICAgIC8vICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ2xvYWRpbmcnLCB0aGlzLmxvYWRpbmdkYXRhbXNnKTtcbiAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgLy8gICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbm9kYXRhJywgdGhpcy5ub2RhdGFtZXNzYWdlKTtcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIHRoaXMuYXBwbHlQcm9wcy5mb3JFYWNoKGFyZ3MgPT4gdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoLi4uYXJncykpO1xuXG4gICAgICAgIGlmICh0aGlzLmVkaXRtb2RlID09PSBFRElUX01PREUuUVVJQ0tfRURJVCkge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudENsaWNrQmluZCA9IHRoaXMuX2RvY3VtZW50Q2xpY2tCaW5kLmJpbmQodGhpcyk7XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuZG9jdW1lbnRDbGlja0JpbmQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgZ2V0Q29uZmlndXJlZFN0YXRlKCkge1xuICAgICAgICBjb25zdCBtb2RlID0gdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLmNvbXB1dGVNb2RlKHRoaXMuc3RhdGVoYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIG1vZGUgJiYgbW9kZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlU3RhdGVQYXJhbXMod2lkZ2V0U3RhdGUsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAnc2VsZWN0ZWRJdGVtJykpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkSXRlbXNFeGlzdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5vcHRpb25zID0gb3B0aW9ucy5vcHRpb25zIHx8IHt9O1xuICAgICAgICBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdwYWdpbmF0aW9uJykpIHtcbiAgICAgICAgICAgIG9wdGlvbnMub3B0aW9ucy5wYWdlID0gd2lkZ2V0U3RhdGUucGFnaW5hdGlvbjtcbiAgICAgICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc29ydFN0YXRlSGFuZGxlcih3aWRnZXRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vcHRpb25zLm9yZGVyQnkgPSBfLmdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQuZmllbGQnKSArICcgJyArIF8uZ2V0KHdpZGdldFN0YXRlLCAnc29ydC5kaXJlY3Rpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NlYXJjaCcpKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFN0YXRlSGFuZGxlcih3aWRnZXRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9wdGlvbnMuZmlsdGVyRmllbGRzID0gdGhpcy5nZXRGaWx0ZXJGaWVsZHMod2lkZ2V0U3RhdGUuc2VhcmNoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnMub3B0aW9ucy5wYWdlID0gMTtcbiAgICAgICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NlYXJjaCcpKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFN0YXRlSGFuZGxlcih3aWRnZXRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9wdGlvbnMuZmlsdGVyRmllbGRzID0gdGhpcy5nZXRGaWx0ZXJGaWVsZHMod2lkZ2V0U3RhdGUuc2VhcmNoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc29ydFN0YXRlSGFuZGxlcih3aWRnZXRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vcHRpb25zLm9yZGVyQnkgPSBfLmdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQuZmllbGQnKSArICcgJyArIF8uZ2V0KHdpZGdldFN0YXRlLCAnc29ydC5kaXJlY3Rpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICBwcml2YXRlIHRyaWdnZXJXTUV2ZW50KG5ld1ZhbCkge1xuICAgICAgICBpZiAodGhpcy5lZGl0bW9kZSA9PT0gJ2RpYWxvZycpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAkaW52b2tlV2F0Y2hlcnModHJ1ZSk7XG4gICAgICAgIHRoaXMuYXBwLm5vdGlmeSgnd20tZXZlbnQnLCB7ZXZlbnROYW1lOiAnc2VsZWN0ZWRJdGVtQ2hhbmdlJywgd2lkZ2V0TmFtZTogdGhpcy5uYW1lLCByb3c6IG5ld1ZhbCwgdGFibGU6IHRoaXN9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNvcnRTdGF0ZUhhbmRsZXIod2lkZ2V0U3RhdGUpIHtcbiAgICAgICAgY29uc3QgJGdyaWRFbGVtZW50ID0gdGhpcy5kYXRhZ3JpZEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0ICRzb3J0SWNvbiA9ICAkZ3JpZEVsZW1lbnQuZmluZCgndGhbZGF0YS1jb2wtZmllbGQ9XCInICsgXy5nZXQod2lkZ2V0U3RhdGUsICdzb3J0LmZpZWxkJykgKyAnXCJdIC5zb3J0LWljb24nKTtcbiAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAnc29ydC5kaXJlY3Rpb24nKSA9PT0gJ2FzYycgJiYgJHNvcnRJY29uLmxlbmd0aCkgIHtcbiAgICAgICAgICAgICRzb3J0SWNvbi5hZGRDbGFzcygnYXNjIHdpIHdpLWxvbmctYXJyb3ctdXAnKTtcbiAgICAgICAgfSBlbHNlIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQuZGlyZWN0aW9uJykgPT09ICdkZXNjJyAgJiYgJHNvcnRJY29uLmxlbmd0aCkge1xuICAgICAgICAgICAgJHNvcnRJY29uLmFkZENsYXNzKCdkZXNjIHdpIHdpLWxvbmctYXJyb3ctZG93bicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWFyY2hTdGF0ZUhhbmRsZXIod2lkZ2V0U3RhdGUpIHtcbiAgICAgICAgaWYgKF8uaXNBcnJheSh3aWRnZXRTdGF0ZS5zZWFyY2gpKSB7XG4gICAgICAgICAgICBfLmZvckVhY2goIHdpZGdldFN0YXRlLnNlYXJjaCwgKGZpbHRlck9iaikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvd0ZpbHRlcltmaWx0ZXJPYmouZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93RmlsdGVyW2ZpbHRlck9iai5maWVsZF0udmFsdWUgPSBmaWx0ZXJPYmoudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93RmlsdGVyW2ZpbHRlck9iai5maWVsZF0ubWF0Y2hNb2RlID0gZmlsdGVyT2JqLm1hdGNoTW9kZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dGaWx0ZXJbZmlsdGVyT2JqLmZpZWxkXS50eXBlID0gZmlsdGVyT2JqLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkKHRoaXMucm93RmlsdGVyQ29tcGxpZWRUbFtmaWx0ZXJPYmouZmllbGRdKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IGZpbHRlck9iai50eXBlID09PSAnaW50ZWdlcicgPyBwYXJzZUludChmaWx0ZXJPYmoudmFsdWUpIDogZmlsdGVyT2JqLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzLnJvd0ZpbHRlckNvbXBsaWVkVGxbZmlsdGVyT2JqLmZpZWxkXSkuZmluZCgnaW5wdXQnKS52YWwoZmlsdGVyT2JqLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgJGdyaWRFbGVtZW50ID0gdGhpcy5kYXRhZ3JpZEVsZW1lbnQ7XG4gICAgICAgICAgICAkZ3JpZEVsZW1lbnQuZmluZCgnW2RhdGEtZWxlbWVudD1cImRnU2VhcmNoVGV4dFwiXScpLnZhbCh3aWRnZXRTdGF0ZS5zZWFyY2gudmFsdWUpO1xuICAgICAgICAgICAgJGdyaWRFbGVtZW50LmZpbmQoJ1tkYXRhLWVsZW1lbnQ9XCJkZ0ZpbHRlclZhbHVlXCJdJykudmFsKHdpZGdldFN0YXRlLnNlYXJjaC5maWVsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZW1vdmVzIGVtcHR5IHZhbHVlcyBpbiBoZWFkZXJDb25maWcgYXJyYXkuXG4gICAgZmlsdGVyRW1wdHlWYWx1ZXMoaXRlbSkge1xuICAgICAgICBpZiAoaXRlbS5jb2x1bW5zKSB7XG4gICAgICAgICAgICBpdGVtLmNvbHVtbnMgPSBpdGVtLmNvbHVtbnMuZmlsdGVyKHRoaXMuZmlsdGVyRW1wdHlWYWx1ZXMuYmluZCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW0gIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gQ29tcGFyZXMgdGhlIHByZXZGaWx0ZXJDcml0ZXJpYSBSdWxlcyB3aXRoIHRoZSBuZXcgcnVsZXNcbiAgICBjb21wYXJlRmlsdGVyRXhwcmVzc2lvbnMocHJldkZpbHRlcnMsIG5ld0ZpbHRlcnMpIHtcbiAgICAgICAgcmV0dXJuICEhKChwcmV2RmlsdGVycy5sZW5ndGggPT09IG5ld0ZpbHRlcnMubGVuZ3RoKSAmJiAoXy5pc0VxdWFsKHByZXZGaWx0ZXJzLCBuZXdGaWx0ZXJzKSkpO1xuICAgIH1cblxuICAgIC8vIFNldCB0aGUgdGFibGUgbGFzdEFjdGlvblBlcmZvcm1lZCB0byBGaWx0ZXIgQ3JpdGVyaWEgYW5kIG1haW50YWluIHRoZSBwcmV2RmlsdGVyRXhwcmVzc2lvblxuICAgIHNldExhc3RBY3Rpb25Ub0ZpbHRlckNyaXRlcmlhKCkge1xuICAgICAgICB0aGlzLnByZXZGaWx0ZXJFeHByZXNzaW9uID0gXy5nZXQodGhpcy5kYXRhc291cmNlLCAnZmlsdGVyRXhwcmVzc2lvbnMucnVsZXMnKSA/IGdldENsb25lZE9iamVjdCh0aGlzLmRhdGFzb3VyY2UuZmlsdGVyRXhwcmVzc2lvbnMucnVsZXMpIDogZ2V0Q2xvbmVkT2JqZWN0KFtdLmNvbmNhdCh0aGlzLmRhdGFzb3VyY2UuZGF0YUJpbmRpbmcpKTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRMYXN0QWN0aW9uUGVyZm9ybWVkKHRoaXMuZ3JpZE9wdGlvbnMuQUNUSU9OUy5GSUxURVJfQ1JJVEVSSUEpO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldElzU2VhcmNoVHJpZ2VycmVkKHRydWUpO1xuICAgIH1cblxuICAgIC8vIFNldCB0aGUgdGFibGUgbGFzdEFjdGlvblBlcmZvcm1lZCB0byBEYXRhc2V0IHVwZGF0ZSBhbmQgc2V0IGlzRGF0YXNldFVwZGF0ZWQgdG8gdHJ1ZVxuICAgIC8vIEZpeCBmb3IgW1dNUy0yMjMyM10tdGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gZGF0YXNldCBpcyBiZWluZyB1cGRhdGVkXG4gICAgc2V0TGFzdEFjdGlvblRvRGF0YXNldFVwZGF0ZSgpIHtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRMYXN0QWN0aW9uUGVyZm9ybWVkKHRoaXMuZ3JpZE9wdGlvbnMuQUNUSU9OUy5EQVRBU0VUX1VQREFURSk7XG4gICAgICAgIC8vICBGaXggZm9yIFtXTVMtMjMyNjNdOiByZXNldCBjdXJyZW50UGFnZSB0byAxIGFzIGRhdGFzZXQgaXMgYmVpbmcgY2hhbmdlZFxuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldEN1cnJlbnRQYWdlKDEpO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldElzRGF0YXNldFVwZGF0ZWQodHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSBsYXN0QWN0aW9uUGVyZm9ybWVkIHRvIEZpbHRlcl9Dcml0ZXJpYSwgd2hlbiB0aGVyZSBpcyBjaGFuZ2UgaW4gdGhlIFZhcmlhYmxlIGZpbHRlciBjcml0ZXJpYSBydWxlc1xuICAgIGNoZWNrSWZWYXJGaWx0ZXJzQXBwbGllZCgpIHtcbiAgICAgICAgaWYgKCFfLmlzRW1wdHkoXy5nZXQodGhpcy5kYXRhc291cmNlLCAnZmlsdGVyRXhwcmVzc2lvbnMucnVsZXMnKSkgfHwgIV8uaXNFbXB0eShfLmdldCh0aGlzLmRhdGFzb3VyY2UsICdkYXRhQmluZGluZycpKSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEZpbHRlckV4cHIgPSBfLmdldCh0aGlzLmRhdGFzb3VyY2UsICdmaWx0ZXJFeHByZXNzaW9ucy5ydWxlcycpID8gdGhpcy5kYXRhc291cmNlLmZpbHRlckV4cHJlc3Npb25zLnJ1bGVzIDogW10uY29uY2F0KHRoaXMuZGF0YXNvdXJjZS5kYXRhQmluZGluZyk7XG4gICAgICAgICAgICBjb25zdCBpc0VxdWFsID0gdGhpcy5jb21wYXJlRmlsdGVyRXhwcmVzc2lvbnModGhpcy5wcmV2RmlsdGVyRXhwcmVzc2lvbiwgY3VycmVudEZpbHRlckV4cHIpO1xuICAgICAgICAgICAgaWYgKCFpc0VxdWFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRMYXN0QWN0aW9uVG9GaWx0ZXJDcml0ZXJpYSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgd2F0Y2hWYXJpYWJsZURhdGFTZXQobmV3VmFsKSB7XG4gICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgIC8vIENoZWNrIGZvciBWYXJpYWJsZSBmaWx0ZXJzIGlmIGFwcGxpZWRcbiAgICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbnMuaXNOYXZUeXBlU2Nyb2xsT3JPbmRlbWFuZCgpKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrSWZWYXJGaWx0ZXJzQXBwbGllZCgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFN0YXRlIGhhbmRsaW5nIGZvciBzdGF0aWMgdmFyaWFibGVzXG4gICAgICAgIGlmIChfLmdldCh0aGlzLmRhdGFzb3VyY2UsICdjYXRlZ29yeScpID09PSAnd20uVmFyaWFibGUnICYmIHRoaXMuX3BhZ2VMb2FkICYmIHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJykge1xuICAgICAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgICAgICB0aGlzLl9wYWdlTG9hZCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAnc2VsZWN0ZWRJdGVtJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zRXhpc3QgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdzZWxlY3RGaXJzdFJvdycsIHRoaXMuZ3JpZGZpcnN0cm93c2VsZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NlYXJjaCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTdGF0ZUhhbmRsZXIod2lkZ2V0U3RhdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU29ydEhhbmRsZXIod2lkZ2V0U3RhdGUuc2VhcmNoLCB1bmRlZmluZWQsICdzZWFyY2gnLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQnKSkge1xuICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTb3J0SGFuZGxlcih3aWRnZXRTdGF0ZS5zb3J0LCB1bmRlZmluZWQsICdzb3J0JywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zb3J0U3RhdGVIYW5kbGVyKHdpZGdldFN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3BhZ2luYXRpb24nKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5wYWdlQ2hhbmdlZCh7cGFnZTogd2lkZ2V0U3RhdGUucGFnaW5hdGlvbn0sIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEFmdGVyIHRoZSBzZXR0aW5nIHRoZSB3YXRjaCBvbiBuYXZpZ2F0b3IsIGRhdGFzZXQgaXMgdHJpZ2dlcmVkIHdpdGggdW5kZWZpbmVkLiBJbiB0aGlzIGNhc2UsIHJldHVybiBoZXJlLlxuICAgICAgICBpZiAodGhpcy5kYXRhTmF2aWdhdG9yV2F0Y2hlZCAmJiBfLmlzVW5kZWZpbmVkKG5ld1ZhbCkgJiYgdGhpcy5fX2Z1bGxEYXRhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdmFyaWFibGUgaXMgaW4gbG9hZGluZyBzdGF0ZSwgc2hvdyBsb2FkaW5nIGljb25cbiAgICAgICAgaWYgKHRoaXMudmFyaWFibGVJbmZsaWdodCAmJiAhdGhpcy5pbmZTY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbG9hZGluZycsIHRoaXMubG9hZGluZ2RhdGFtc2cpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0ID0gZ2V0VmFsaWRKU09OKG5ld1ZhbCk7XG5cbiAgICAgICAgLy8gQ29udmVydGluZyBuZXd2YWwgdG8gb2JqZWN0IGlmIGl0IGlzIGFuIE9iamVjdCB0aGF0IGNvbWVzIGFzIGEgc3RyaW5nIFwie1wiZGF0YVwiIDogMX1cIlxuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICBuZXdWYWwgPSByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzb3J0RXhwID0gdGhpcy5nZXRTb3J0RXhwcigpO1xuICAgICAgICBjb25zdCBzb3J0RXhwQXJyID0gc29ydEV4cC5zcGxpdCgnICcpO1xuICAgICAgICBpZiAoc29ydEV4cCAmJiBzb3J0RXhwQXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zb3J0SW5mbyA9IHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gOiBzb3J0RXhwQXJyWzFdLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAgc29ydEV4cEFyclswXVxuXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLypSZXR1cm4gaWYgZGF0YSBpcyBpbnZhbGlkLiovXG4gICAgICAgIGlmICghdGhpcy5pc0RhdGFWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB2YWx1ZSBpcyBlbXB0eSBvciBpbiBzdHVkaW8gbW9kZSwgZG9udCBlbmFibGUgdGhlIG5hdmlnYXRpb25cbiAgICAgICAgaWYgKG5ld1ZhbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd25hdmlnYXRpb24gJiYgIXRoaXMuZGF0YU5hdmlnYXRvcldhdGNoZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZVBhZ2VOYXZpZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXNldFBhZ2VOYXZpZ2F0aW9uKCk7XG4gICAgICAgICAgICAvLyBJZiB0aGUgZGF0YXNldCBpcyB1bmRlZmluZWQgb3IgZW1wdHkgb3IgdGFibGUgaXMgYm91bmQgdG8gc3RhdGljIHZhcmlhYmxlIHRoZW4gc2V0IHZhcmlhYmxlSW5mbGlnaHQgdG8gZmFsc2UgaW5vcmRlciB0byB1cGRhdGUgdGhlIHN0YXR1c1xuICAgICAgICAgICAgaWYgKG5ld1ZhbCA9PT0gJycgfHwgbmV3VmFsID09PSB1bmRlZmluZWQgfHwgXy5nZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSA9PT0gJ3dtLlZhcmlhYmxlJykge1xuICAgICAgICAgICAgICAgIHRoaXMudmFyaWFibGVJbmZsaWdodCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLypmb3IgcnVuIG1vZGUsIGRpc2FibGluZyB0aGUgbG9hZGVyIGFuZCBzaG93aW5nIG5vIGRhdGEgZm91bmQgbWVzc2FnZSBpZiBkYXRhc2V0IGlzIG5vdCB2YWxpZCovXG4gICAgICAgICAgICBpZiAoIXRoaXMudmFyaWFibGVJbmZsaWdodCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbm9kYXRhJywgdGhpcy5ub2RhdGFtZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ3NlbGVjdEZpcnN0Um93JywgdGhpcy5ncmlkZmlyc3Ryb3dzZWxlY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzTmF2aWdhdGlvbkVuYWJsZWQoKSAmJiBuZXdWYWwpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tGaWx0ZXJzQXBwbGllZCh0aGlzLmdldFNvcnRFeHByKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfLmlzT2JqZWN0KG5ld1ZhbCkgfHwgbmV3VmFsID09PSAnJyB8fCAobmV3VmFsICYmIG5ld1ZhbC5kYXRhVmFsdWUgPT09ICcnKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnZhcmlhYmxlSW5mbGlnaHQpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB2YXJpYWJsZSBoYXMgZmluaXNoZWQgbG9hZGluZyBhbmQgcmVzdWx0U2V0IGlzIGVtcHR5LCBlbmRlciBlbXB0eSBkYXRhXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRHcmlkRGF0YShbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld1ZhbCkge1xuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZUdyaWREYXRhKG5ld1ZhbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmRvY3VtZW50Q2xpY2tCaW5kKTtcbiAgICAgICAgaWYgKHRoaXMubmF2aWdhdG9yUmVzdWx0V2F0Y2gpIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yUmVzdWx0V2F0Y2gudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaCkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxuXG4gICAgYWRkUm93SW5kZXgocm93KSB7XG4gICAgICAgIGNvbnN0IHJvd0RhdGEgPSBnZXRDbG9uZWRPYmplY3Qocm93KTtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSBfLmluZGV4T2YodGhpcy5ncmlkT3B0aW9ucy5kYXRhLCByb3cpO1xuICAgICAgICBpZiAocm93SW5kZXggPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcm93O1xuICAgICAgICB9XG4gICAgICAgIHJvd0RhdGEuJGluZGV4ID0gcm93SW5kZXggKyAxO1xuICAgICAgICByb3dEYXRhLiRpc0ZpcnN0ID0gcm93RGF0YS4kaW5kZXggPT09IDE7XG4gICAgICAgIHJvd0RhdGEuJGlzTGFzdCA9IHRoaXMuZ3JpZERhdGEubGVuZ3RoID09PSByb3dEYXRhLiRpbmRleDtcbiAgICAgICAgcmV0dXJuIHJvd0RhdGE7XG4gICAgfVxuXG4gICAgYWRkRXZlbnRzVG9Db250ZXh0KGNvbnRleHQpIHtcbiAgICAgICAgY29udGV4dC5hZGROZXdSb3cgPSAoKSA9PiB0aGlzLmFkZE5ld1JvdygpO1xuICAgICAgICBjb250ZXh0LmRlbGV0ZVJvdyA9ICgpID0+IHRoaXMuZGVsZXRlUm93KCk7XG4gICAgICAgIGNvbnRleHQuZWRpdFJvdyA9ICgpID0+IHRoaXMuZWRpdFJvdygpO1xuICAgIH1cblxuICAgIGV4ZWN1dGUob3BlcmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChbRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfQVBJX0FXQVJFLCBEYXRhU291cmNlLk9wZXJhdGlvbi5JU19QQUdFQUJMRSwgRGF0YVNvdXJjZS5PcGVyYXRpb24uU1VQUE9SVFNfU0VSVkVSX0ZJTFRFUl0uaW5jbHVkZXMob3BlcmF0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2UgPyB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShvcGVyYXRpb24sIG9wdGlvbnMpIDoge307XG4gICAgfVxuXG4gICAgaXNOYXZpZ2F0aW9uRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd25hdmlnYXRpb24gJiYgdGhpcy5kYXRhTmF2aWdhdG9yICYmIHRoaXMuZGF0YU5hdmlnYXRvcldhdGNoZWQ7XG4gICAgfVxuXG4gICAgZ2V0Q2xvbmVkUm93T2JqZWN0KHJvd0RhdGEpIHtcbiAgICAgICAgY29uc3Qgcm93ID0gZ2V0Q2xvbmVkT2JqZWN0KHJvd0RhdGEpO1xuICAgICAgICByb3cuZ2V0UHJvcGVydHkgPSBmaWVsZCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gXy5nZXQocm93LCBmaWVsZCk7XG4gICAgICAgIH07XG4gICAgICAgIHJvdy4kaXNGaXJzdCA9IHJvdy4kaW5kZXggPT09IDE7XG4gICAgICAgIHJvdy4kaXNMYXN0ID0gdGhpcy5ncmlkRGF0YS5sZW5ndGggPT09IHJvdy4kaW5kZXg7XG4gICAgICAgIGRlbGV0ZSByb3cuJCRpbmRleDtcbiAgICAgICAgZGVsZXRlIHJvdy4kJHBrO1xuICAgICAgICByZXR1cm4gcm93O1xuICAgIH1cblxuICAgIGhhbmRsZUxvYWRpbmcoZGF0YSkge1xuICAgICAgICB0aGlzLnZhcmlhYmxlSW5mbGlnaHQgPSBkYXRhLmFjdGl2ZTtcbiAgICAgICAgLy8gYmFzZWQgb24gdGhlIGFjdGl2ZSBzdGF0ZSBhbmQgcmVzcG9uc2UgdG9nZ2xpbmcgdGhlICdsb2FkaW5nIGRhdGEuLi4nIGFuZCAnbm8gZGF0YSBmb3VuZCcgbWVzc2FnZXMuXG4gICAgICAgIGlmIChkYXRhLmFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdsb2FkaW5nJywgdGhpcy5sb2FkaW5nZGF0YW1zZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJZiBncmlkIGlzIGluIGVkaXQgbW9kZSBvciBncmlkIGhhcyBkYXRhLCBkb250IHNob3cgdGhlIG5vIGRhdGEgbWVzc2FnZVxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzR3JpZEVkaXRNb2RlICYmIF8uaXNFbXB0eSh0aGlzLmRhdGFzZXQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdub2RhdGEnLCB0aGlzLm5vZGF0YW1lc3NhZ2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ3JlYWR5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXREaXNhYmxlZE9uRmllbGQob3BlcmF0aW9uLCBjb2xEZWYsIHdpZGdldFR5cGUpIHtcbiAgICAgICAgaWYgKG9wZXJhdGlvbiAhPT0gJ25ldycgJiYgY29sRGVmWydwcmltYXJ5LWtleSddICYmIGNvbERlZi5nZW5lcmF0b3IgPT09ICdhc3NpZ25lZCcgJiYgIWNvbERlZlsncmVsYXRlZC1lbnRpdHktbmFtZSddICYmICFjb2xEZWYucGVyaW9kKSB7XG4gICAgICAgICAgICBjb2xEZWZbd2lkZ2V0VHlwZV0uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRGb3JtQ29udHJvbChjdHJsKSB7XG4gICAgICAgIGN0cmwubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICAgIGN0cmwubWFya0FzUHJpc3RpbmUoKTtcbiAgICB9XG5cbiAgICBjbGVhckZvcm0obmV3Um93Pykge1xuICAgICAgICBjb25zdCBjdHJscyA9IHRoaXMubmdmb3JtLmNvbnRyb2xzO1xuICAgICAgICBfLmtleXModGhpcy5uZ2Zvcm0uY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIC8vIElmIG5ldyByb3csIGNsZWFyIHRoZSBjb250cm9scyBpbiB0aGUgbmV3IHJvdy4gRWxzZSwgY2xlYXIgdGhlIGNvbnRyb2xzIGluIGVkaXQgcm93XG4gICAgICAgICAgICBpZiAoIWtleS5lbmRzV2l0aCgnX2ZpbHRlcicpICYmICgoa2V5LmVuZHNXaXRoKCdfbmV3JykgJiYgbmV3Um93KSB8fCAoIWtleS5lbmRzV2l0aCgnX25ldycpICYmICFuZXdSb3cpKSkge1xuICAgICAgICAgICAgICAgIGN0cmxzW2tleV0uc2V0VmFsdWUoJycpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRGb3JtQ29udHJvbChjdHJsc1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2hvd0ZpZWxkQmFzZWRPblNjcmVlblR5cGUoZmllbGQpIHtcbiAgICAgICAgbGV0IHNob3dGaWVsZDtcbiAgICAgICAgaWYgKGlzTW9iaWxlKCkgJiYgdGhpcy52aWV3cG9ydC5pc01vYmlsZVR5cGUpIHtcbiAgICAgICAgICAgIHNob3dGaWVsZCA9IGZpZWxkLm1vYmlsZURpc3BsYXk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52aWV3cG9ydC5pc1RhYmxldFR5cGUpIHtcbiAgICAgICAgICAgIHNob3dGaWVsZCA9IGZpZWxkLnRhYmxldERpc3BsYXk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzaG93RmllbGQgPSBmaWVsZC5wY0Rpc3BsYXk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNob3dGaWVsZDtcbiAgICB9XG5cbiAgICAvKiBDaGVjayB3aGV0aGVyIGl0IGlzIG5vbi1lbXB0eSByb3cuICovXG4gICAgaXNFbXB0eVJlY29yZChyZWNvcmQpIHtcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHJlY29yZCk7XG4gICAgICAgIGxldCBkYXRhLFxuICAgICAgICAgICAgaXNEaXNwbGF5ZWQ7XG5cbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXMuZXZlcnkoKHByb3AsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBkYXRhID0gcmVjb3JkW3Byb3BdO1xuICAgICAgICAgICAgLyogSWYgZmllbGREZWZzIGFyZSBtaXNzaW5nLCBzaG93IGFsbCBjb2x1bW5zIGluIGRhdGEuICovXG4gICAgICAgICAgICBpc0Rpc3BsYXllZCA9ICh0aGlzLmZpZWxkRGVmcy5sZW5ndGggJiYgaXNEZWZpbmVkKHRoaXMuZmllbGREZWZzW2luZGV4XSkgJiYgdGhpcy5zaG93RmllbGRCYXNlZE9uU2NyZWVuVHlwZSh0aGlzLmZpZWxkRGVmc1tpbmRleF0pKSB8fCB0cnVlO1xuICAgICAgICAgICAgLypWYWxpZGF0aW5nIG9ubHkgdGhlIGRpc3BsYXllZCBmaWVsZHMqL1xuICAgICAgICAgICAgaWYgKGlzRGlzcGxheWVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChkYXRhID09PSBudWxsIHx8IGRhdGEgPT09IHVuZGVmaW5lZCB8fCBkYXRhID09PSAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyogRnVuY3Rpb24gdG8gcmVtb3ZlIHRoZSBlbXB0eSBkYXRhLiAqL1xuICAgIHJlbW92ZUVtcHR5UmVjb3JkcyhzZXJ2aWNlRGF0YSkge1xuICAgICAgICBjb25zdCBhbGxSZWNvcmRzID0gc2VydmljZURhdGE7XG4gICAgICAgIGxldCBmaWx0ZXJlZERhdGEgPSBbXTtcbiAgICAgICAgaWYgKGFsbFJlY29yZHMgJiYgYWxsUmVjb3Jkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8qQ29tcGFyaW5nIGFuZCBwdXNoaW5nIHRoZSBub24tZW1wdHkgZGF0YSBjb2x1bW5zKi9cbiAgICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGFsbFJlY29yZHMuZmlsdGVyKHJlY29yZCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlY29yZCAmJiAhdGhpcy5pc0VtcHR5UmVjb3JkKHJlY29yZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyZWREYXRhO1xuICAgIH1cblxuICAgIHNldEdyaWREYXRhKHNlcnZlckRhdGEpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZmlsdGVybnVsbHJlY29yZHMgPyAgdGhpcy5yZW1vdmVFbXB0eVJlY29yZHMoc2VydmVyRGF0YSkgOiBzZXJ2ZXJEYXRhO1xuICAgICAgICAvLyBmaXggZm9yIFtXTVMtMjQwMTJdIHNldCB2YXJpYWJsZWluZmxpZ2h0IGZsYWcgdG8gZmFsc2UgZm9yIHN0YXRpYyB2YXJpYWJsZXNcbiAgICAgICAgLy8gSWYgdGhlIHRhYmxlIGlzIGJvdW5kIHRvIHNvbWUgd2lkZ2V0IGFuZCBub3QgYm91bmQgdG8gYW55IHZhcmlhYmxlIChleDogVGFibGUxLnNlbGVjdGVkSXRlbSkgdGhlbiBzZXQgdmFyaWFibGVJbmZsaWdodCB0byBmYWxzZVxuICAgICAgICBpZiAoXy5nZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSA9PT0gJ3dtLlZhcmlhYmxlJyB8fCBfLmdldCh0aGlzLmRhdGFzb3VyY2UsICdjYXRlZ29yeScpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVJbmZsaWdodCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy52YXJpYWJsZUluZmxpZ2h0KSB7XG4gICAgICAgICAgICBpZiAoZGF0YSAmJiAoZGF0YS5sZW5ndGgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdub2RhdGEnLCB0aGlzLm5vZGF0YW1lc3NhZ2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ3JlYWR5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkRGF0YSA9IGRhdGE7XG4gICAgfVxuXG4gICAgc2V0RGF0YUdyaWRPcHRpb24ob3B0aW9uTmFtZSwgbmV3VmFsLCBmb3JjZVNldCA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghdGhpcy5kYXRhZ3JpZEVsZW1lbnQgfHwgIXRoaXMuZGF0YWdyaWRFbGVtZW50LmRhdGF0YWJsZSB8fCAhdGhpcy5kYXRhZ3JpZEVsZW1lbnQuZGF0YXRhYmxlKCdpbnN0YW5jZScpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9uID0ge307XG4gICAgICAgIGlmIChpc0RlZmluZWQgJiYgKCFfLmlzRXF1YWwobmV3VmFsLCB0aGlzLmdyaWRPcHRpb25zW29wdGlvbk5hbWVdKSB8fCBmb3JjZVNldCkpIHtcbiAgICAgICAgICAgIG9wdGlvbltvcHRpb25OYW1lXSA9IG5ld1ZhbDtcbiAgICAgICAgICAgIHRoaXMuZGF0YWdyaWRFbGVtZW50LmRhdGF0YWJsZSgnb3B0aW9uJywgb3B0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnNbb3B0aW9uTmFtZV0gPSBuZXdWYWw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYWxsRGF0YUdyaWRNZXRob2QoLi4uYXJncykge1xuICAgICAgICBpZiAoIXRoaXMuZGF0YWdyaWRFbGVtZW50IHx8ICF0aGlzLmRhdGFncmlkRWxlbWVudC5kYXRhdGFibGUoJ2luc3RhbmNlJykpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlQcm9wcy5zZXQoYXJnc1sxXSwgYXJncyk7XG4gICAgICAgICAgICByZXR1cm47IC8vIElmIGRhdGFncmlkIGlzIG5vdCBpbml0aWxpYXplZCBvciBkZXN0cm95ZWQsIHJldHVybiBoZXJlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YWdyaWRFbGVtZW50LmRhdGF0YWJsZS5hcHBseSh0aGlzLmRhdGFncmlkRWxlbWVudCwgYXJncyk7XG4gICAgfVxuXG4gICAgcmVuZGVyT3BlcmF0aW9uQ29sdW1ucygpIHtcbiAgICAgICAgbGV0IHJvd0FjdGlvbkNvbCxcbiAgICAgICAgICAgIGluc2VydFBvc2l0aW9uO1xuXG4gICAgICAgIGNvbnN0IHJvd09wZXJhdGlvbnNDb2x1bW4gPSBnZXRSb3dPcGVyYXRpb25zQ29sdW1uKCksXG4gICAgICAgICAgICBjb25maWcgPSB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiByb3dPcGVyYXRpb25zQ29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgICdmaWVsZCc6IHJvd09wZXJhdGlvbnNDb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgJ2lzUHJlZGVmaW5lZCc6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIC8vIFJldHVybiBpZiBubyBmaWVsZERlZnMgYXJlIHByZXNlbnRcbiAgICAgICAgaWYgKCF0aGlzLmZpZWxkRGVmcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvd0FjdGlvbkNvbCA9IF8uZmluZCh0aGlzLmZ1bGxGaWVsZERlZnMsIHsnZmllbGQnOiBST1dfT1BTX0ZJRUxELCB0eXBlOiAnY3VzdG9tJ30pOyAvLyBDaGVjayBpZiBjb2x1bW4gaXMgZmV0Y2hlZCBmcm9tIG1hcmt1cFxuICAgICAgICBfLnJlbW92ZSh0aGlzLmZpZWxkRGVmcywge3R5cGU6ICdjdXN0b20nLCBmaWVsZDogUk9XX09QU19GSUVMRH0pOyAvLyBSZW1vdmluZyBvcGVyYXRpb25zIGNvbHVtblxuICAgICAgICBfLnJlbW92ZSh0aGlzLmhlYWRlckNvbmZpZywge2ZpZWxkOiByb3dPcGVyYXRpb25zQ29sdW1uLmZpZWxkfSk7XG5cbiAgICAgICAgLypBZGQgdGhlIGNvbHVtbiBmb3Igcm93IG9wZXJhdGlvbnMgb25seSBpZiBhdC1sZWFzdCBvbmUgb3BlcmF0aW9uIGhhcyBiZWVuIGVuYWJsZWQuKi9cbiAgICAgICAgaWYgKHRoaXMucm93QWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChyb3dBY3Rpb25Db2wpIHsgLy8gSWYgY29sdW1uIGlzIHByZXNlbnQgaW4gbWFya3VwLCBwdXNoIHRoZSBjb2x1bW4gb3IgcHVzaCB0aGUgZGVmYXVsdCBjb2x1bW5cbiAgICAgICAgICAgICAgICBpbnNlcnRQb3NpdGlvbiA9IHJvd0FjdGlvbkNvbC5yb3dhY3Rpb25zcG9zaXRpb24gPyBfLnRvTnVtYmVyKHJvd0FjdGlvbkNvbC5yb3dhY3Rpb25zcG9zaXRpb24pIDogdGhpcy5maWVsZERlZnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHRoaXMuZmllbGREZWZzLnNwbGljZShpbnNlcnRQb3NpdGlvbiwgMCwgcm93QWN0aW9uQ29sKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0UG9zaXRpb24gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJDb25maWcudW5zaGlmdChjb25maWcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyQ29uZmlnLnB1c2goY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZmllbGREZWZzLnB1c2gocm93T3BlcmF0aW9uc0NvbHVtbik7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJDb25maWcucHVzaChjb25maWcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2hlYWRlckNvbmZpZycsIHRoaXMuaGVhZGVyQ29uZmlnKTtcbiAgICB9XG5cbiAgICBlbmFibGVQYWdlTmF2aWdhdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YXNldCAmJiB0aGlzLmJpbmRkYXRhc2V0ICYmIHRoaXMuZGF0YU5hdmlnYXRvcikge1xuICAgICAgICAgICAgLypDaGVjayBmb3Igc2FuaXR5Ki9cbiAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvcldhdGNoZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0b3JSZXN1bHRXYXRjaCkge1xuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yUmVzdWx0V2F0Y2gudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qUmVnaXN0ZXIgYSB3YXRjaCBvbiB0aGUgXCJyZXN1bHRcIiBwcm9wZXJ0eSBvZiB0aGUgXCJkYXRhTmF2aWdhdG9yXCIgc28gdGhhdCB0aGUgcGFnaW5hdGVkIGRhdGEgaXMgZGlzcGxheWVkIGluIHRoZSBsaXZlLWxpc3QuKi9cbiAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yUmVzdWx0V2F0Y2ggPSB0aGlzLmRhdGFOYXZpZ2F0b3IucmVzdWx0RW1pdHRlci5zdWJzY3JpYmUoKG5ld1ZhbCkgPT4ge1xuICAgICAgICAgICAgICAgIC8qIENoZWNrIGZvciBzYW5pdHkuICovXG4gICAgICAgICAgICAgICAgaWYgKGlzRGVmaW5lZChuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdhdGNoIHdpbGwgbm90IGJlIHRyaWdnZXJlZCBpZiBkYXRhc2V0IGFuZCBuZXcgdmFsdWUgYXJlIGVxdWFsLiBTbyB0cmlnZ2VyIHRoZSBwcm9wZXJ0eSBjaGFuZ2UgaGFuZGxlciBtYW51YWxseVxuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGhhcHBlbnMgaW4gY2FzZSwgaWYgZGF0YXNldCBpcyBkaXJlY3RseSB1cGRhdGVkLlxuICAgICAgICAgICAgICAgICAgICBpZiAoXy5pc0VxdWFsKHRoaXMuZGF0YXNldCwgbmV3VmFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53YXRjaFZhcmlhYmxlRGF0YVNldChuZXdWYWwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF8uaXNBcnJheShuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53aWRnZXQuZGF0YXNldCA9IFtdLmNvbmNhdChuZXdWYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfLmlzT2JqZWN0KG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZGdldC5kYXRhc2V0ID0gXy5leHRlbmQoe30sIG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LmRhdGFzZXQgPSBuZXdWYWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndpZGdldC5kYXRhc2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgICAgLypEZS1yZWdpc3RlciB0aGUgd2F0Y2ggaWYgaXQgaXMgZXhpc3RzICovXG4gICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaCkge1xuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yTWF4UmVzdWx0V2F0Y2gudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qUmVnaXN0ZXIgYSB3YXRjaCBvbiB0aGUgXCJtYXhSZXN1bHRzXCIgcHJvcGVydHkgb2YgdGhlIFwiZGF0YU5hdmlnYXRvclwiIHNvIHRoYXQgdGhlIFwicGFnZVNpemVcIiBpcyBkaXNwbGF5ZWQgaW4gdGhlIGxpdmUtbGlzdC4qL1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaCA9IHRoaXMuZGF0YU5hdmlnYXRvci5tYXhSZXN1bHRzRW1pdHRlci5zdWJzY3JpYmUoKG5ld1ZhbCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucGFnZXNpemUgPSBuZXdWYWw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIElmIGRhdGFzZXQgaXMgYSBwYWdlYWJsZSBvYmplY3QsIGRhdGEgaXMgcHJlc2VudCBpbnNpZGUgdGhlIGNvbnRlbnQgcHJvcGVydHlcbiAgICAgICAgICAgIHRoaXMuX19mdWxsRGF0YSA9IHRoaXMuZGF0YXNldDtcblxuICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLndpZGdldC5tYXhSZXN1bHRzID0gdGhpcy5wYWdlc2l6ZSB8fCA1O1xuICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgbWF4UmVzdWx0czogdGhpcy5wYWdlc2l6ZSB8fCA1XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVQcm9wZXJ0eUJpbmRpbmcoJ2RhdGFzZXQnKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5zZXRCaW5kRGF0YVNldCh0aGlzLmJpbmRkYXRhc2V0LCB0aGlzLnZpZXdQYXJlbnQsIHRoaXMuZGF0YXNvdXJjZSwgdGhpcy5kYXRhc2V0LCB0aGlzLmJpbmRkYXRhc291cmNlLCB1bmRlZmluZWQsIHRoaXMuc3RhdGVoYW5kbGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0UGFnZU5hdmlnYXRpb24oKSB7XG4gICAgICAgIC8qQ2hlY2sgZm9yIHNhbml0eSovXG4gICAgICAgIGlmICh0aGlzLmRhdGFOYXZpZ2F0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5yZXNldFBhZ2VOYXZpZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0RhdGFWYWxpZCgpIHtcbiAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICBjb25zdCBkYXRhc2V0ID0gdGhpcy5kYXRhc2V0IHx8IHt9O1xuXG4gICAgICAgIC8qSW4gY2FzZSBcImRhdGFcIiBjb250YWlucyBcImVycm9yXCIgJiBcImVycm9yTWVzc2FnZVwiLCB0aGVuIGRpc3BsYXkgdGhlIGVycm9yIG1lc3NhZ2UgaW4gdGhlIGdyaWQuKi9cbiAgICAgICAgaWYgKGRhdGFzZXQuZXJyb3IpIHtcbiAgICAgICAgICAgIGVycm9yID0gZGF0YXNldC5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YXNldC5kYXRhICYmIGRhdGFzZXQuZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgaWYgKGRhdGFzZXQuZGF0YS5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IGRhdGFzZXQuZGF0YS5lcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLnNldEdyaWREYXRhKFtdKTtcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnZXJyb3InLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRnVuY3Rpb24gdG8gcG9wdWxhdGUgdGhlIGdyaWQgd2l0aCBkYXRhLlxuICAgIHBvcHVsYXRlR3JpZERhdGEoc2VydmljZURhdGEpIHtcbiAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgIHNlcnZpY2VEYXRhID0gdHJhbnNmb3JtRGF0YShzZXJ2aWNlRGF0YSwgdGhpcy5uYW1lKTtcbiAgICAgICAgLy8gQXBwbHkgZmlsdGVyIGFuZCBzb3J0LCBpZiBkYXRhIGlzIHJlZnJlc2hlZCB0aHJvdWdoIFJlZnJlc2ggZGF0YSBtZXRob2RcbiAgICAgICAgaWYgKCF0aGlzLmlzTmF2aWdhdGlvbkVuYWJsZWQoKSAmJiB0aGlzLl9pc0NsaWVudFNlYXJjaCkge1xuICAgICAgICAgICAgZGF0YSA9IGdldENsb25lZE9iamVjdChzZXJ2aWNlRGF0YSk7XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRTZWFyY2hSZXN1bHQoZGF0YSwgdGhpcy5maWx0ZXJJbmZvKTtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmdldFNvcnRSZXN1bHQoZGF0YSwgdGhpcy5zb3J0SW5mbyk7XG4gICAgICAgICAgICB0aGlzLnNlcnZlckRhdGEgPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJEYXRhID0gc2VydmljZURhdGE7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZmllbGRkZWZzIGFyZSBub3QgcHJlc2VudCwgZ2VuZXJhdGUgZmllbGRkZWZzIGZyb20gZGF0YVxuICAgICAgICAvLyBSZW1vdmluZyBmaWVsZGRlZnMgY2hlY2sgYmVjYXVzZSBXaGVuIGxvYWRvbmRlbWFuZCBwcm9wZXJ0eSBpcyBlbmFibGVkKGRlZmVybG9hZD1cInRydWVcIiksIHRoZSBkYXRhc2V0IHByb3BlcnR5Y2hhbmdlaGFubGRlciBpcyB0cmlnZ2VyZWQgZmlyc3QgYmVmb3JlIHRoZSBkb20gaXMgZ2V0dGluZyByZW5kZXJlZC5cbiAgICAgICAgLy8gU28gYXQgdGhhdCB0aW1lIGZpZWxkZGVmcyBsZW5ndGggaXMgemVybywgZHVlIHRvIHRoaXMgdGhlIGNvbHVtbnMgYXJlIGNyZWF0ZWQgZHluYW1pY2FsbHkuXG4gICAgICAgIGlmICh0aGlzLmlzZHluYW1pY3RhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUdyaWRDb2x1bW5zKHRoaXMuc2VydmVyRGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldEdyaWREYXRhKHRoaXMuc2VydmVyRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJyAmJiB0aGlzLl9zZWxlY3RlZEl0ZW1zRXhpc3QgJiYgc2VydmljZURhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgIGxldCBjdXJyZW50UGFnZUl0ZW1zO1xuICAgICAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAnc2VsZWN0ZWRJdGVtJykpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZUl0ZW1zID0gd2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLmZpbHRlcih2YWwgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsLnBhZ2UgPT09IHRoaXMuZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zRXhpc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBpZiBhbiBpdGVtIGlzIGFscmVhZHkgc2VsZWN0ZWQsIGRvbid0IHRyaWdnZXIgb25TZWxlY3QgZXZlbnQgZm9yIGl0IGFnYWluXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQYWdlSXRlbXMubGVuZ3RoICYmIHRoaXMuc2VsZWN0ZWRpdGVtLmxlbmd0aCAhPT0gd2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCByZWFzc2lnbiB0aGlzLnNlbGVjdGVkaXRlbSBpZiBzZWxlY3RlZCBpdGVtcyBhbHJlYWR5IGV4aXN0LlxuICAgICAgICAgICAgICAgICAgICBpZiAoXy5pc0FycmF5KHRoaXMuc2VsZWN0ZWRpdGVtKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhZ2VJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJdGVtKGl0ZW0uaW5kZXgsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRpdGVtID0gY3VycmVudFBhZ2VJdGVtcy5tYXAoZnVuY3Rpb24odmFsKSB7cmV0dXJuIHZhbC5pbmRleDsgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiB0byBnZW5lcmF0ZSBhbmQgY29tcGlsZSB0aGUgZm9ybSBmaWVsZHMgZnJvbSB0aGUgbWV0YWRhdGFcbiAgICBhc3luYyBnZW5lcmF0ZUR5bmFtaWNDb2x1bW5zKGNvbHVtbnMpIHtcbiAgICAgICAgdGhpcy5maWVsZERlZnMgPSBbXTsgLy8gZW1wdHkgdGhlIGZvcm0gZmllbGRzXG4gICAgICAgIC8vIGVtcHR5IHRoZSBmaWx0ZXIgZmllbGQgdGVtcGxhdGUgcmVmcy5cbiAgICAgICAgKHRoaXMuZmlsdGVyVG1wbCBhcyBhbnkpLl9yZXN1bHRzID0gW107XG5cbiAgICAgICAgaWYgKF8uaXNFbXB0eShjb2x1bW5zKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRtcGwgPSAnJztcbiAgICAgICAgY29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICBsZXQgYXR0cnNUbXBsID0gJyc7XG4gICAgICAgICAgICBsZXQgY3VzdG9tVG1wbCA9ICcnO1xuICAgICAgICAgICAgXy5mb3JFYWNoKGNvbCwgKHZhbCwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiBjdXN0b20gZXhwcmVzc2lvbiBpcyBwcmVzZW50LCBrZWVwIGl0IGluc2lkZSB0YWJsZSBjb2x1bW4uIEVsc2UsIGtlZXAgYXMgYXR0cmlidXRlXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdjdXN0b21FeHByZXNzaW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tVG1wbCA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzVG1wbCArPSBgICR7a2V5fT1cIiR7dmFsfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdG1wbCArPSBgPHdtLXRhYmxlLWNvbHVtbiAke2F0dHJzVG1wbH0gdGFibGVOYW1lPVwiJHt0aGlzLm5hbWV9JHsodGhpcyBhcyBhbnkpLiRhdHRycy5nZXQoJ3RhYmxlX3JlZmVyZW5jZScpfVwiPiR7Y3VzdG9tVG1wbH08L3dtLXRhYmxlLWNvbHVtbj5gO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5keW5hbWljVGFibGVSZWYuY2xlYXIoKTtcbiAgICAgICAgaWYgKCF0aGlzLl9keW5hbWljQ29udGV4dCkge1xuICAgICAgICAgICAgdGhpcy5fZHluYW1pY0NvbnRleHQgPSBPYmplY3QuY3JlYXRlKHRoaXMudmlld1BhcmVudCk7XG4gICAgICAgICAgICB0aGlzLl9keW5hbWljQ29udGV4dFt0aGlzLmdldEF0dHIoJ3dtVGFibGUnKV0gPSB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubm9PZkNvbHVtbnMgPSBjb2x1bW5zLmxlbmd0aDtcbiAgICAgICAgY29uc3QgY29tcG9uZW50RmFjdG9yeVJlZiA9IGF3YWl0IHRoaXMuZHluYW1pY0NvbXBvbmVudFByb3ZpZGVyLmdldENvbXBvbmVudEZhY3RvcnlSZWYoXG4gICAgICAgICAgICAnYXBwLXRhYmxlLWR5bmFtaWMtJyArIHRoaXMud2lkZ2V0SWQsXG4gICAgICAgICAgICB0bXBsLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5vQ2FjaGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdHJhbnNwaWxlOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5keW5hbWljVGFibGVSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudEZhY3RvcnlSZWYsIDAsIHRoaXMuaW5qKTtcbiAgICAgICAgZXh0ZW5kUHJvdG8oY29tcG9uZW50Lmluc3RhbmNlLCB0aGlzLl9keW5hbWljQ29udGV4dCk7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnLmR5bmFtaWMtdGFibGUtY29udGFpbmVyJylbMF0uYXBwZW5kQ2hpbGQoY29tcG9uZW50LmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByZXBhcmVDb2xEZWZzKGRhdGEpIHtcbiAgICAgICAgbGV0IGRlZmF1bHRGaWVsZERlZnM7XG4gICAgICAgIGxldCBwcm9wZXJ0aWVzO1xuICAgICAgICBsZXQgY29sdW1uSW5kZXggPSAwO1xuICAgICAgICBsZXQgaGVhZGVySW5kZXggPSAwO1xuXG4gICAgICAgIHRoaXMuZmllbGREZWZzID0gW107XG4gICAgICAgIHRoaXMuaGVhZGVyQ29uZmlnID0gW107XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IHt9O1xuICAgICAgICAvKiBpZiBwcm9wZXJ0aWVzIG1hcCBpcyBleGlzdGVkIHRoZW4gZmV0Y2ggdGhlIGNvbHVtbiBjb25maWd1cmF0aW9uIGZvciBhbGwgbmVzdGVkIGxldmVscyB1c2luZyB1dGlsIGZ1bmN0aW9uICovXG4gICAgICAgIHByb3BlcnRpZXMgPSBkYXRhO1xuICAgICAgICAvKmNhbGwgdXRpbGl0eSBmdW5jdGlvbiB0byBwcmVwYXJlIGZpZWxkRGVmcyBmb3IgZ3JpZCBhZ2FpbnN0IGdpdmVuIGRhdGEgKEEgTUFYIE9GIDEwIENPTFVNTlMgT05MWSkqL1xuICAgICAgICBkZWZhdWx0RmllbGREZWZzID0gcHJlcGFyZUZpZWxkRGVmcyhwcm9wZXJ0aWVzKTtcblxuICAgICAgICAvKmFwcGVuZCBhZGRpdGlvbmFsIHByb3BlcnRpZXMqL1xuICAgICAgICBfLmZvckVhY2goZGVmYXVsdEZpZWxkRGVmcywgY29sdW1uRGVmID0+IHtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5iaW5kaW5nID0gY29sdW1uRGVmLmZpZWxkO1xuICAgICAgICAgICAgY29sdW1uRGVmLmNhcHRpb24gPSBjb2x1bW5EZWYuZGlzcGxheU5hbWU7XG4gICAgICAgICAgICBjb2x1bW5EZWYucGNEaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5tb2JpbGVEaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbHVtbkRlZi50YWJsZXREaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5zZWFyY2hhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5zaG93aW5maWx0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgY29sdW1uRGVmLnR5cGUgID0gJ3N0cmluZyc7XG4gICAgICAgICAgICAvLyBGaXggZm9yIFtXTVMtMTk2NjhdIGFuZCBbV01TLTE5NjY5XS0gQWRkaW5nIGluZGV4IGFuZCBoZWFkZXJJbmRleCBmb3IgRHluYW1pYyBEQiBjb2x1bW5zLlxuICAgICAgICAgICAgLy8gTm90ZTogd2UgZG9uJ3QgaGF2ZSBjb2x1bW4gZ3JvdXBzIGZvciBEeW5hbWljIERCXG4gICAgICAgICAgICBjb2x1bW5EZWYuaW5kZXggPSBjb2x1bW5JbmRleDtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmRleCA9IGhlYWRlckluZGV4O1xuICAgICAgICAgICAgY29sdW1uSW5kZXgrKztcbiAgICAgICAgICAgIGhlYWRlckluZGV4Kys7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlZmF1bHRGaWVsZERlZnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zW2NvbC5maWVsZF0gPSBjb2w7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3JlZGF0YXJlbmRlcicsIHskZGF0YTogZGF0YSwgJGNvbHVtbnM6IHRoaXMuY29sdW1ucywgZGF0YTogZGF0YSwgY29sdW1uczogdGhpcy5jb2x1bW5zfSk7XG5cbiAgICAgICAgZGVmYXVsdEZpZWxkRGVmcyA9IFtdO1xuICAgICAgICAvLyBBcHBseSB0aGUgY2hhbmdlcyBtYWRlIGJ5IHRoZSB1c2VyXG4gICAgICAgIF8uZm9yRWFjaCh0aGlzLmNvbHVtbnMsIHZhbCA9PiB7XG4gICAgICAgICAgICBkZWZhdWx0RmllbGREZWZzLnB1c2godmFsKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5nZW5lcmF0ZUR5bmFtaWNDb2x1bW5zKGRlZmF1bHRGaWVsZERlZnMpO1xuICAgIH1cblxuICAgIGNyZWF0ZUdyaWRDb2x1bW5zKGRhdGEpIHtcbiAgICAgICAgLyogdGhpcyBjYWxsIGJhY2sgZnVuY3Rpb24gcmVjZWl2ZXMgdGhlIGRhdGEgZnJvbSB0aGUgdmFyaWFibGUgKi9cbiAgICAgICAgLyogY2hlY2sgd2hldGhlciBkYXRhIGlzIHZhbGlkIG9yIG5vdCAqL1xuICAgICAgICBjb25zdCBkYXRhVmFsaWQgPSBkYXRhICYmICFkYXRhLmVycm9yO1xuICAgICAgICAvKmlmIHRoZSBkYXRhIGlzIHR5cGUganNvbiBvYmplY3QsIG1ha2UgaXQgYW4gYXJyYXkgb2YgdGhlIG9iamVjdCovXG4gICAgICAgIGlmIChkYXRhVmFsaWQgJiYgIV8uaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgfVxuICAgICAgICAvKiBpZiB0aGUgZGF0YSBpcyBlbXB0eSwgc2hvdyBub2RhdGFtZXNzYWdlICovXG4gICAgICAgIGlmIChfLmlzRW1wdHkoZGF0YSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0R3JpZERhdGEoZGF0YSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRhdGFWYWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8qIGlmIG5ldyBjb2x1bW5zIHRvIGJlIHJlbmRlcmVkLCBwcmVwYXJlIGRlZmF1bHQgZmllbGREZWZzIGZvciB0aGUgZGF0YSBwcm92aWRlZCovXG4gICAgICAgIHRoaXMucHJlcGFyZUNvbERlZnMoZGF0YSk7XG5cbiAgICAgICAgdGhpcy5zZXJ2ZXJEYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5zZXRHcmlkRGF0YSh0aGlzLnNlcnZlckRhdGEpO1xuICAgIH1cblxuICAgIGdldFNvcnRFeHByKCkge1xuICAgICAgICBsZXQgc29ydEV4cDtcbiAgICAgICAgbGV0IHBhZ2luZ09wdGlvbnM7XG4gICAgICAgIGlmICh0aGlzLmRhdGFzb3VyY2UgJiYgdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfUEFHRUFCTEUpKSB7XG4gICAgICAgICAgICBwYWdpbmdPcHRpb25zID0gdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX1BBR0lOR19PUFRJT05TKTtcbiAgICAgICAgICAgIHNvcnRFeHAgPSBfLmlzRW1wdHkocGFnaW5nT3B0aW9ucykgPyAnJyA6IGdldE9yZGVyQnlFeHByKHBhZ2luZ09wdGlvbnMuc29ydCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNvcnRFeHAgfHwgJyc7XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXk6IHN0cmluZywgbnY6IGFueSwgb3Y/OiBhbnkpIHtcbiAgICAgICAgbGV0IGVuYWJsZU5ld1JvdztcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2RhdGFzb3VyY2UnOlxuICAgICAgICAgICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yMzY1M10gd2hlbiBzdGFydFVwZGF0ZSBpcyBmYWxzZSAocmVxdWVzdCBvbiBwYWdlIGxvYWQgcHJvcGVydHkgaXMgdW5jaGVja2VkKSxcbiAgICAgICAgICAgICAgICAvLyB0aGVuIHNldCBzdGF0dXMgbXNnIGFzIFwiTm8gZGF0YSBmb3VuZFwiXG4gICAgICAgICAgICAgICAgaWYgKG52LnN0YXJ0VXBkYXRlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhcmlhYmxlSW5mbGlnaHQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdub2RhdGEnLCB0aGlzLm5vZGF0YW1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLndhdGNoVmFyaWFibGVEYXRhU2V0KHRoaXMuZGF0YXNldCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRhdGFTb3VyY2VDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RhdGFzZXQnOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLmlzTmF2VHlwZVNjcm9sbE9yT25kZW1hbmQoKSAmJiB0aGlzLmdyaWRPcHRpb25zLmdldEN1cnJlbnRQYWdlKCkgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRJc05leHRQYWdlRGF0YShmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmJpbmRkYXRhc291cmNlICYmICF0aGlzLmRhdGFzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBpZiB0YWJsZSBpcyBpbnNpZGUgbGlzdCB0aGVuIHRhYmxlIGRhdGFzZXQgd2lsbCBiZSBzZXQgYXMgXCJpdGVtLlhYWFwiIGFuZCB0aGVyZSBpcyBubyBkYXRhc291cmNlLlxuICAgICAgICAgICAgICAgIC8vIFNvIGV4dHJhY3RpbmcgZGF0YXNvdXJjZSBmcm9tIHRoZSBkYXRzZXQgYm91bmQgZXhwcmVzc2lvbi5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wYXJlbnRMaXN0ICYmICF0aGlzLmRhdGFzb3VyY2UgJiYgXy5zdGFydHNXaXRoKHRoaXMuYmluZGRhdGFzZXQsICdpdGVtJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlID0gZ2V0RGF0YXNvdXJjZUZyb21FeHByKHRoaXMud2lkZ2V0LiRhdHRycy5nZXQoJ2RhdGFzZXRib3VuZGV4cHInKSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLmlzTmF2VHlwZVNjcm9sbE9yT25kZW1hbmQoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy5pc05leHRQYWdlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBmZXRjaGluZyBuZXh0IHBhZ2UgZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRJc0RhdGFVcGRhdGVkQnlVc2VyKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gZGF0YXNldCBpcyB1cGRhdGVkIGZyb20gc2NyaXB0XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldElzRGF0YVVwZGF0ZWRCeVVzZXIodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExhc3RBY3Rpb25Ub0RhdGFzZXRVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0SXNOZXh0UGFnZURhdGEoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGZvciBTdGF0aWMgVmFyaWFibGVzIHdpdGggUmV0YWluIFN0YXRlIGVuYWJsZWQsIHByZXZlbnQgVGFibGUgZnJvbSByZW5kZXJpbmcgbW9yZSB0aGFuIG9uY2VcbiAgICAgICAgICAgICAgICBpZiAoIShfLmdldCh0aGlzLmRhdGFzb3VyY2UsICdjYXRlZ29yeScpID09PSAnd20uVmFyaWFibGUnICYmIHRoaXMuX3BhZ2VMb2FkICYmIHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53YXRjaFZhcmlhYmxlRGF0YVNldChudik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZmlsdGVybW9kZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignZmlsdGVybW9kZScsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlYXJjaGxhYmVsJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdzZWFyY2hMYWJlbCcsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ25hdmlnYXRpb24nOlxuICAgICAgICAgICAgICAgIGlmIChudiA9PT0gJ0FkdmFuY2VkJykgeyAvLyBTdXBwb3J0IGZvciBvbGRlciBwcm9qZWN0cyB3aGVyZSBuYXZpZ2F0aW9uIHR5cGUgd2FzIGFkdmFuY2VkIGluc3RlYWQgb2YgY2xhc2ljXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbiA9ICdDbGFzc2ljJztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobnYgIT09ICdOb25lJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3duYXZpZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignbmF2aWdhdGlvbicsIHRoaXMubmF2aWdhdGlvbik7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRlbWFuZExvYWQgPSBudiA9PT0gTkFWSUdBVElPTl9UWVBFLk9OREVNQU5EID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5mU2Nyb2xsID0gbnYgPT09IE5BVklHQVRJT05fVFlQRS5TQ1JPTEwgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXZDb250cm9scyA9IG52O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZ3JpZGZpcnN0cm93c2VsZWN0JzpcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdzZWxlY3RGaXJzdFJvdycsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2dyaWRjbGFzcyc6XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ29wdGlvbicsICdjc3NDbGFzc05hbWVzLmdyaWQnLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdub2RhdGFtZXNzYWdlJzpcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnb3B0aW9uJywgJ2RhdGFTdGF0ZXMubm9kYXRhJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbG9hZGluZ2RhdGFtc2cnOlxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdvcHRpb24nLCAnZGF0YVN0YXRlcy5sb2FkaW5nJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbG9hZGluZ2ljb24nOlxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdvcHRpb24nLCAnbG9hZGluZ2ljb24nLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzcGFjaW5nJzpcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnb3B0aW9uJywgJ3NwYWNpbmcnLCBudik7XG4gICAgICAgICAgICAgICAgaWYgKG52ID09PSAnY29uZGVuc2VkJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TaXplID0gJ3NtYWxsJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TaXplID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZXhwb3J0Zm9ybWF0JzpcbiAgICAgICAgICAgICAgICB0aGlzLmV4cG9ydE9wdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAobnYpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUG9wdWxhdGUgb3B0aW9ucyBmb3IgZXhwb3J0IGRyb3AgZG93biBtZW51XG4gICAgICAgICAgICAgICAgICAgIF8uZm9yRWFjaChfLnNwbGl0KG52LCAnLCcpLCB0eXBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwb3J0T3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBleHBvcnRJY29uTWFwcGluZ1t0eXBlXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Nob3duZXdyb3cnOlxuICAgICAgICAgICAgICAgIC8vIEVuYWJsZSBuZXcgcm93IGlmIHNob3duZXcgaXMgdHJ1ZSBvciBhZGROZXdSb3cgYnV0b24gaXMgcHJlc2VudFxuICAgICAgICAgICAgICAgIGVuYWJsZU5ld1JvdyA9IG52IHx8IF8uc29tZSh0aGlzLmFjdGlvbnMsIGFjdCA9PiBfLmluY2x1ZGVzKGFjdC5hY3Rpb24sICdhZGROZXdSb3coKScpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnb3B0aW9uJywgJ2FjdGlvbnNFbmFibGVkLm5ldycsIGVuYWJsZU5ld1Jvdyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwYWdlc2l6ZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIG1heFJlc3VsdHM6IG52XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3Iud2lkZ2V0Lm1heFJlc3VsdHMgPSBudjtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3IubWF4UmVzdWx0cyA9IG52O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnb25kZW1hbmRtZXNzYWdlJzpcbiAgICAgICAgICAgICAgICBpZiAobnYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCcub24tZGVtYW5kLWRhdGFncmlkID4gYScpLnRleHQobnYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLm9uZGVtYW5kbWVzc2FnZSA9IG52O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndmlld2xlc3NtZXNzYWdlJzpcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnZpZXdsZXNzbWVzc2FnZSA9IG52O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2hvdyc6XG4gICAgICAgICAgICAgICAgaWYgKG52KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc2hvdycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnaGlkZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRhdGFTb3VyY2VDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuZmllbGREZWZzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgdHJpZ2dlckZuKGNvbC5vbkRhdGFTb3VyY2VDaGFuZ2UgJiYgY29sLm9uRGF0YVNvdXJjZUNoYW5nZS5iaW5kKGNvbCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyQWN0aW9uUm93VmFycygpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25Sb3dJbmRleCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5hY3Rpb25Sb3dQYWdlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdhY3Rpb25Sb3dJbmRleCcsIHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2FjdGlvblJvd1BhZ2UnLCB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIG9uU3R5bGVDaGFuZ2Uoa2V5LCBudiwgb3YpIHtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3dpZHRoJzpcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0R3JpZERpbWVuc2lvbnMnLCAnd2lkdGgnLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdoZWlnaHQnOlxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRHcmlkRGltZW5zaW9ucycsICdoZWlnaHQnLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlci5vblN0eWxlQ2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICB9XG5cbiAgICBwb3B1bGF0ZUFjdGlvbnMoKSB7XG4gICAgICAgIHRoaXMuX2FjdGlvbnMuaGVhZGVyID0gW107XG4gICAgICAgIHRoaXMuX2FjdGlvbnMuZm9vdGVyID0gW107XG4gICAgICAgIF8uZm9yRWFjaCh0aGlzLmFjdGlvbnMsIChhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmIChfLmluY2x1ZGVzKGFjdGlvbi5wb3NpdGlvbiwgJ2hlYWRlcicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWN0aW9ucy5oZWFkZXIucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF8uaW5jbHVkZXMoYWN0aW9uLnBvc2l0aW9uLCAnZm9vdGVyJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hY3Rpb25zLmZvb3Rlci5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHRoaXMgbWV0aG9kIHdpbGwgcmVuZGVyIHRoZSBmaWx0ZXIgcm93LlxuICAgIHJlbmRlckR5bmFtaWNGaWx0ZXJDb2x1bW4oZmlsdGVUZW1SZWYpIHtcbiAgICAgICAgLy8gRm9yIGR5bmFtaWMgdGFibGUgbWFudWFsbHkgcHVzaGluZyB0aGUgZmlsdGVydGVtcGxhdGVSZWYgYXMgdGVtcGxhdGVSZWYgd2lsbCBub3QgYmUgYXZhaWxhYmxlIHByaW9yLlxuICAgICAgICBpZiAodGhpcy5pc2R5bmFtaWN0YWJsZSkge1xuICAgICAgICAgICAgKHRoaXMuZmlsdGVyVG1wbCBhcyBhbnkpLl9yZXN1bHRzLnB1c2goZmlsdGVUZW1SZWYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJDb2x1bW5zKHRhYmxlQ29sdW1uLCBjb2xJbmRleCkge1xuICAgICAgICBpZiAoaXNNb2JpbGUoKSAmJiB0aGlzLnZpZXdwb3J0LmlzTW9iaWxlVHlwZSkge1xuICAgICAgICAgICAgaWYgKCF0YWJsZUNvbHVtbi5tb2JpbGVEaXNwbGF5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld3BvcnQuaXNUYWJsZXRUeXBlKSB7XG4gICAgICAgICAgICBpZiAoIXRhYmxlQ29sdW1uLnRhYmxldERpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRhYmxlQ29sdW1uLnBjRGlzcGxheSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGFibGVDb2x1bW5bJ3ByaW1hcnkta2V5J10pIHtcbiAgICAgICAgICAgIHRoaXMucHJpbWFyeUtleS5wdXNoKHRhYmxlQ29sdW1uLmZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpZWxkRGVmc1tjb2xJbmRleF0gPSB0YWJsZUNvbHVtbjtcbiAgICAgICAgY29uc3QgY29sQ291bnQgPSB0aGlzLmZpZWxkRGVmcy5sZW5ndGg7XG4gICAgICAgIHRoaXMuZnVsbEZpZWxkRGVmcy5wdXNoKHRhYmxlQ29sdW1uKTtcbiAgICAgICAgdGhpcy5yb3dGaWx0ZXJbdGFibGVDb2x1bW4uZmllbGRdID0ge1xuICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmZpZWxkRGVmcy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNbY29sLmZpZWxkXSA9IGNvbDtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIElmIGR5bmFtaWMgZGF0YXRhYmxlIGFuZCBsYXN0IGNvbHVtbiwgcGFzcyB0aGUgY29sdW1ucyB0byBqcXVlcnkgZGF0YXRhYmxlXG4gICAgICAgIGlmICh0aGlzLmlzZHluYW1pY3RhYmxlICYmIGNvbENvdW50ID09PSB0aGlzLm5vT2ZDb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlck9wZXJhdGlvbkNvbHVtbnMoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2NvbERlZnMnLCB0aGlzLmZpZWxkRGVmcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3RlckZvcm1GaWVsZChuYW1lLCBmb3JtRmllbGQpIHtcbiAgICAgICAgdGhpcy5mb3JtZmllbGRzW25hbWVdID0gZm9ybUZpZWxkO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyQWN0aW9ucyh0YWJsZUFjdGlvbikge1xuICAgICAgICB0aGlzLmFjdGlvbnMucHVzaCh0YWJsZUFjdGlvbik7XG4gICAgICAgIHRoaXMucG9wdWxhdGVBY3Rpb25zKCk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJSb3codGFibGVSb3csIHJvd0luc3RhbmNlKSB7XG4gICAgICAgIHRoaXMucm93RGVmID0gdGFibGVSb3c7XG4gICAgICAgIHRoaXMucm93SW5zdGFuY2UgPSByb3dJbnN0YW5jZTtcbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ29wdGlvbicsICdjc3NDbGFzc05hbWVzLnJvd0V4cGFuZEljb24nLCB0aGlzLnJvd0RlZi5leHBhbmRpY29uKTtcbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ29wdGlvbicsICdjc3NDbGFzc05hbWVzLnJvd0NvbGxhcHNlSWNvbicsIHRoaXMucm93RGVmLmNvbGxhcHNlaWNvbik7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMucm93RXhwYW5zaW9uRW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMucm93RGVmID0gdGhpcy5yb3dEZWY7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJSb3dBY3Rpb25zKHRhYmxlUm93QWN0aW9uKSB7XG4gICAgICAgIHRoaXMucm93QWN0aW9ucy5wdXNoKHRhYmxlUm93QWN0aW9uKTtcbiAgICB9XG5cbiAgICBzZWxlY3RJdGVtKGl0ZW0sIGRhdGEpIHtcbiAgICAgICAgLyogc2VydmVyIGlzIG5vdCB1cGRhdGluZyBpbW1lZGlhdGVseSwgc28gc2V0IHRoZSBzZXJ2ZXIgZGF0YSB0byBzdWNjZXNzIGNhbGxiYWNrIGRhdGEgKi9cbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuc2VydmVyRGF0YSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaXNPYmplY3QoaXRlbSkpIHtcbiAgICAgICAgICAgIGl0ZW0gPSBfLm9taXRCeShpdGVtLCAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXy5pc0FycmF5KHZhbHVlKSAmJiBfLmlzRW1wdHkodmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NlbGVjdFJvdycsIGl0ZW0sIHRydWUpO1xuICAgIH1cbiAgICAvKiBkZXNlbGVjdCB0aGUgZ2l2ZW4gaXRlbSovXG4gICAgZGVzZWxlY3RJdGVtKGl0ZW0pIHtcbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2Rlc2VsZWN0Um93JywgaXRlbSk7XG4gICAgfVxuXG4gICAgb25EYXRhTmF2aWdhdG9yRGF0YVNldENoYW5nZShudikge1xuICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgdGhpcy5fX2Z1bGxEYXRhID0gbnY7XG4gICAgICAgIHRoaXMuY2hlY2tGaWx0ZXJzQXBwbGllZCh0aGlzLmdldFNvcnRFeHByKCkpO1xuICAgICAgICBpZiAodGhpcy5faXNDbGllbnRTZWFyY2gpIHtcbiAgICAgICAgICAgIGRhdGEgPSBnZXRDbG9uZWRPYmplY3QodGhpcy5fX2Z1bGxEYXRhKTtcbiAgICAgICAgICAgIGlmIChfLmlzT2JqZWN0KGRhdGEpICYmICFfLmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YSA9IHRoaXMuZ2V0U2VhcmNoUmVzdWx0KGRhdGEsIHRoaXMuZmlsdGVySW5mbyk7XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRTb3J0UmVzdWx0KGRhdGEsIHRoaXMuc29ydEluZm8pO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG52O1xuICAgIH1cblxuICAgIHRvZ2dsZU1lc3NhZ2Uoc2hvdywgdHlwZSwgbXNnLCBoZWFkZXI/KSB7XG4gICAgICAgIGlmIChzaG93ICYmIG1zZykge1xuICAgICAgICAgICAgdGhpcy5hcHAubm90aWZ5QXBwKG1zZywgdHlwZSwgaGVhZGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4cG9ydCgkaXRlbSkge1xuICAgICAgICBsZXQgZmlsdGVyRmllbGRzO1xuICAgICAgICBjb25zdCBzb3J0T3B0aW9ucyA9IF8uaXNFbXB0eSh0aGlzLnNvcnRJbmZvKSA/ICcnIDogdGhpcy5zb3J0SW5mby5maWVsZCArICcgJyArIHRoaXMuc29ydEluZm8uZGlyZWN0aW9uO1xuICAgICAgICBjb25zdCBjb2x1bW5zID0ge307XG4gICAgICAgIGxldCBpc1ZhbGlkO1xuICAgICAgICBsZXQgcmVxdWVzdERhdGE7XG4gICAgICAgIHRoaXMuZmllbGREZWZzLmZvckVhY2goZmllbGREZWYgPT4ge1xuICAgICAgICAgICAgLy8gRG8gbm90IGFkZCB0aGUgcm93IG9wZXJhdGlvbiBhY3Rpb25zIGNvbHVtbiB0byB0aGUgZXhwb3J0ZWQgZmlsZS5cbiAgICAgICAgICAgIGlmIChmaWVsZERlZi5maWVsZCA9PT0gUk9XX09QU19GSUVMRCB8fCAhZmllbGREZWYuc2hvdykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAnaGVhZGVyJzogZmllbGREZWYuZGlzcGxheU5hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBJZiBjb2x1bW4gaGFzIGV4cG9ydGV4cHJlc3Npb24sIHRoZW4gc2VuZCBmb3JtIHRoZSBleHByZXNzaW9uIGFzIHJlcXVpcmVkIGJ5IGJhY2tlbmQuXG4gICAgICAgICAgICAvLyBvdGhlcndpc2Ugc2VuZCB0aGUgZmllbGQgbmFtZS5cbiAgICAgICAgICAgIGlmIChmaWVsZERlZi5leHBvcnRleHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgKDxhbnk+b3B0aW9uKS5leHByZXNzaW9uID0gZmllbGREZWYuZXhwb3J0ZXhwcmVzc2lvbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgKDxhbnk+b3B0aW9uKS5maWVsZCA9IGZpZWxkRGVmLmZpZWxkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29sdW1uc1tmaWVsZERlZi5maWVsZF0gPSBvcHRpb247XG4gICAgICAgIH0pO1xuICAgICAgICBmaWx0ZXJGaWVsZHMgPSB0aGlzLmdldEZpbHRlckZpZWxkcyh0aGlzLmZpbHRlckluZm8pO1xuICAgICAgICByZXF1ZXN0RGF0YSA9IHtcbiAgICAgICAgICAgIG1hdGNoTW9kZSA6ICdhbnl3aGVyZWlnbm9yZWNhc2UnLFxuICAgICAgICAgICAgZmlsdGVyRmllbGRzIDogZmlsdGVyRmllbGRzLFxuICAgICAgICAgICAgb3JkZXJCeSA6IHNvcnRPcHRpb25zLFxuICAgICAgICAgICAgZXhwb3J0VHlwZSA6ICRpdGVtLmxhYmVsLFxuICAgICAgICAgICAgbG9naWNhbE9wIDogJ0FORCcsXG4gICAgICAgICAgICBleHBvcnRTaXplIDogdGhpcy5leHBvcnRkYXRhc2l6ZSxcbiAgICAgICAgICAgIGNvbHVtbnMgOiBjb2x1bW5zXG4gICAgICAgIH07XG4gICAgICAgIGlzVmFsaWQgPSB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZWV4cG9ydCcsIHskZGF0YTogcmVxdWVzdERhdGF9KTtcbiAgICAgICAgaWYgKGlzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdERhdGEuZmllbGRzID0gXy52YWx1ZXMocmVxdWVzdERhdGEuY29sdW1ucyk7XG4gICAgICAgIHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkRPV05MT0FELCB7ZGF0YTogcmVxdWVzdERhdGF9KTtcbiAgICB9XG5cbiAgICBleHBhbmRSb3cocm93SWQpIHtcbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2V4cGFuZFJvdycsIHJvd0lkKTtcbiAgICB9XG5cbiAgICBjb2xsYXBzZVJvdyhyb3dJZCkge1xuICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnY29sbGFwc2VSb3cnLCByb3dJZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZG9jdW1lbnRDbGlja0JpbmQoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgJHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgLy8gSWYgY2xpY2sgdHJpZ2dlcmVkIGZyb20gc2FtZSBncmlkIG9yIGEgZGlhbG9nLCBkbyBub3Qgc2F2ZSB0aGUgcm93XG4gICAgICAgIGlmICh0aGlzLiRlbGVtZW50WzBdLmNvbnRhaW5zKCR0YXJnZXQpIHx8IGV2ZW50LnRhcmdldC5kb2N0eXBlIHx8IGlzSW5wdXRCb2R5V3JhcHBlcigkKCR0YXJnZXQpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzYXZlUm93Jyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVkcmF3KGZvcmNlUmVuZGVyKSB7XG4gICAgICAgIGlmIChmb3JjZVJlbmRlcikge1xuICAgICAgICAgICAgdGhpcy5kYXRhZ3JpZEVsZW1lbnQuZGF0YXRhYmxlKHRoaXMuZ3JpZE9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldENvbEdyb3VwV2lkdGhzJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2FkZE9yUmVtb3ZlU2Nyb2xsJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGludm9rZUFjdGlvbkV2ZW50KCRldmVudCwgZXhwcmVzc2lvbjogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZuID0gJHBhcnNlRXZlbnQoZXhwcmVzc2lvbik7XG4gICAgICAgIGZuKHRoaXMudmlld1BhcmVudCwgT2JqZWN0LmFzc2lnbih0aGlzLmNvbnRleHQsIHskZXZlbnR9KSk7XG4gICAgfVxuXG4gICAgLy8gY2hhbmdlIGFuZCBibHVyIGV2ZW50cyBhcmUgYWRkZWQgZnJvbSB0aGUgdGVtcGxhdGVcbiAgICBwcm90ZWN0ZWQgaGFuZGxlRXZlbnQobm9kZTogSFRNTEVsZW1lbnQsIGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24sIGxvY2FsczogYW55KSB7XG4gICAgICAgIGlmIChldmVudE5hbWUgIT09ICdzZWxlY3QnKSB7XG4gICAgICAgICAgICBzdXBlci5oYW5kbGVFdmVudCh0aGlzLm5hdGl2ZUVsZW1lbnQsIGV2ZW50TmFtZSwgY2FsbGJhY2ssIGxvY2Fscyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0cmlnZ2VyVXBsb2FkRXZlbnQoJGV2ZW50LCBldmVudE5hbWUsIGZpZWxkTmFtZSwgcm93KSB7XG4gICAgICAgIGNvbnN0IHBhcmFtczogYW55ID0geyRldmVudCwgcm93fTtcbiAgICAgICAgaWYgKCF0aGlzLmNvbHVtbnNbZmllbGROYW1lXSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudE5hbWUgPT09ICdjaGFuZ2UnKSB7XG4gICAgICAgICAgICBwYXJhbXMubmV3VmFsID0gJGV2ZW50LnRhcmdldC5maWxlcztcbiAgICAgICAgICAgIHBhcmFtcy5vbGRWYWwgPSB0aGlzLmNvbHVtbnNbZmllbGROYW1lXS5fb2xkVXBsb2FkVmFsO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0uX29sZFVwbG9hZFZhbCA9IHBhcmFtcy5uZXdWYWw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0uaW52b2tlRXZlbnRDYWxsYmFjayhldmVudE5hbWUsIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJGb3JtV2lkZ2V0KCkge31cblxuICAgIC8vIEZvcm0gY29udHJvbCBhY2Nlc3NvciBtZXRob2RzLiBUaGlzIHdpbGwgYmUgdXNlZCBmb3IgdGFibGUgaW5zaWRlIGZvcm1cbiAgICB3cml0ZVZhbHVlKCkge31cblxuICAgIHByaXZhdGUgX29uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgICBwcml2YXRlIF9vblRvdWNoZWQ6IGFueSA9ICgpID0+IHt9O1xuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbikge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICAgIH1cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbikge1xuICAgICAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICBuZ09uRGV0YWNoKCkge1xuICAgICAgICBzdXBlci5uZ09uRGV0YWNoKCk7XG4gICAgICAgIGlmIChfLmdldCh0aGlzLmRhdGFzb3VyY2UsICdjYXRlZ29yeScpID09PSAnd20uVmFyaWFibGUnICYmIHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJykge1xuICAgICAgICAgICAgdGhpcy5fcGFnZUxvYWQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwYW5lbC1oZWFkaW5nXCIgKm5nSWY9XCJ0aXRsZSB8fCBzdWJoZWFkaW5nIHx8IGljb25jbGFzcyB8fCBleHBvcnRPcHRpb25zLmxlbmd0aCB8fCBfYWN0aW9ucy5oZWFkZXIubGVuZ3RoXCI+XG4gICAgPGgzIGNsYXNzPVwicGFuZWwtdGl0bGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdFwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJhcHAtaWNvbiBwYW5lbC1pY29uIHt7aWNvbmNsYXNzfX1cIiAqbmdJZj1cImljb25jbGFzc1wiPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nXCIgW2lubmVySFRNTF09XCJ0aXRsZVwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCIgW2lubmVySFRNTF09XCJzdWJoZWFkaW5nXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtYWN0aW9ucyBhcHAtZGF0YWdyaWQtYWN0aW9uc1wiICpuZ0lmPVwiZXhwb3J0T3B0aW9ucy5sZW5ndGggfHwgX2FjdGlvbnMuaGVhZGVyLmxlbmd0aFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnRuIG9mIF9hY3Rpb25zLmhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJ0bi53aWRnZXRUeXBlID09PSAnYnV0dG9uJyA/IGJ1dHRvblJlZiA6IGFuY2hvclJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7YnRuOmJ0bn1cIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGRpdiB3bU1lbnUgZHJvcGRvd24gY2FwdGlvbi5iaW5kPVwiYXBwTG9jYWxlLkxBQkVMX0VYUE9SVFwiICpuZ0lmPVwiZXhwb3J0T3B0aW9ucy5sZW5ndGhcIiAgYXV0b2Nsb3NlPVwiYWx3YXlzXCIgYXR0ci5uYW1lPVwie3tuYW1lfX0tZXhwb3J0XCJcbiAgICAgICAgICAgICAgICBkYXRhc2V0LmJpbmQ9XCJleHBvcnRPcHRpb25zXCIgc2VsZWN0LmV2ZW50PVwiZXhwb3J0KCRpdGVtKVwiIG1lbnVwb3NpdGlvbj1cImRvd24sbGVmdFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2gzPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiYXBwLWRhdGFncmlkXCIgI2RhdGFncmlkRWxlbWVudD48L2Rpdj5cblxuPGRpdiBjbGFzcz1cInBhbmVsLWZvb3RlciBjbGVhcmZpeFwiIFtoaWRkZW5dPVwiIV9hY3Rpb25zLmZvb3Rlci5sZW5ndGggJiYgKCFzaG93bmF2aWdhdGlvbiB8fCAob25EZW1hbmRMb2FkICYmIGRhdGFOYXZpZ2F0b3IuaXNEaXNhYmxlTmV4dCkgfHwgZGF0YU5hdmlnYXRvcj8uZGF0YVNpemUgPD0gcGFnZXNpemUpXCI+XG4gICAgPGRpdiBjbGFzcz1cImFwcC1kYXRhZ3JpZC1wYWdpbmF0b3JcIiBbaGlkZGVuXT1cIighZGF0YU5hdmlnYXRvcj8uZGF0YVNpemUgJiYgIWRhdGFOYXZpZ2F0b3IuZGF0YXNvdXJjZT8ucGFnaW5hdGlvbj8ubmV4dCkgfHwgIXNob3duYXZpZ2F0aW9uIHx8IChvbkRlbWFuZExvYWQgJiYgZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0KSB8fCBkYXRhTmF2aWdhdG9yPy5kYXRhU2l6ZSA8PSBwYWdlc2l6ZVwiPlxuICAgICAgICA8bmF2IHdtUGFnaW5hdGlvbiBzaG93LmJpbmQ9XCJzaG93bmF2aWdhdGlvblwiIG5hdmlnYXRpb25hbGlnbi5iaW5kPVwibmF2aWdhdGlvbmFsaWduXCJcbiAgICAgICAgICAgICBuYXZpZ2F0aW9uc2l6ZS5iaW5kPVwibmF2aWdhdGlvblNpemVcIlxuICAgICAgICAgICAgIG5hdmlnYXRpb24uYmluZD1cIm5hdkNvbnRyb2xzXCIgc2hvd3JlY29yZGNvdW50LmJpbmQ9XCJzaG93cmVjb3JkY291bnRcIiBtYXhzaXplLmJpbmQ9XCJtYXhzaXplXCJcbiAgICAgICAgICAgICBib3VuZGFyeWxpbmtzLmJpbmQ9XCJib3VuZGFyeWxpbmtzXCJcbiAgICAgICAgICAgICBmb3JjZWVsbGlwc2VzLmJpbmQ9XCJmb3JjZWVsbGlwc2VzXCIgZGlyZWN0aW9ubGlua3MuYmluZD1cImRpcmVjdGlvbmxpbmtzXCI+PC9uYXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImFwcC1kYXRhZ3JpZC1hY3Rpb25zXCIgKm5nSWY9XCJfYWN0aW9ucy5mb290ZXIubGVuZ3RoXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ0biBvZiBfYWN0aW9ucy5mb290ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJ0bi53aWRnZXRUeXBlID09PSAnYnV0dG9uJyA/IGJ1dHRvblJlZiA6IGFuY2hvclJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7YnRuOmJ0bn1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNidXR0b25SZWYgbGV0LWJ0bj1cImJ0blwiPlxuICAgIDxidXR0b24gd21CdXR0b24gY2FwdGlvbi5iaW5kPVwiYnRuLmRpc3BsYXlOYW1lXCIgc2hvdy5iaW5kPVwiYnRuLnNob3dcIiBjbGFzcy5iaW5kPVwiYnRuLmNsYXNzXCIgIGljb25jbGFzcy5iaW5kPVwiYnRuLmljb25jbGFzc1wiIChjbGljayk9XCJpbnZva2VBY3Rpb25FdmVudCgkZXZlbnQsIGJ0bi5hY3Rpb24pXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYnRuLXNtJzogc3BhY2luZyA9PT0gJ2NvbmRlbnNlZCcsICdkaXNhYmxlZC1uZXcnOiBidG4ua2V5ID09PSAnYWRkTmV3Um93JyAmJiAoaXNHcmlkRWRpdE1vZGUgfHwgaXNMb2FkaW5nKX1cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIHNob3J0Y3V0a2V5LmJpbmQ9XCJidG4uc2hvcnRjdXRrZXlcIiB0YWJpbmRleC5iaW5kPVwiYnRuLnRhYmluZGV4XCIgaGludC5iaW5kPVwiYnRuLnRpdGxlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJidG4uZGlzcGxheU5hbWVcIiBkaXNhYmxlZC5iaW5kPVwiYnRuLmRpc2FibGVkXCIgY29uZGl0aW9uYWxjbGFzcy5iaW5kPVwiYnRuLmNvbmRpdGlvbmFsY2xhc3NcIiBjb25kaXRpb25hbHN0eWxlLmJpbmQ9XCJidG4uY29uZGl0aW9uYWxzdHlsZVwiPjwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhbmNob3JSZWYgbGV0LWJ0bj1cImJ0blwiPlxuICAgIDxhIHdtQW5jaG9yIGNhcHRpb24uYmluZD1cImJ0bi5kaXNwbGF5TmFtZVwiIHNob3cuYmluZD1cImJ0bi5zaG93XCIgY2xhc3MuYmluZD1cImJ0bi5jbGFzc1wiICBpY29uY2xhc3MuYmluZD1cImJ0bi5pY29uY2xhc3NcIiAoY2xpY2spPVwiaW52b2tlQWN0aW9uRXZlbnQoJGV2ZW50LCBidG4uYWN0aW9uKVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J2J0bi1zbSc6IHNwYWNpbmcgPT09ICdjb25kZW5zZWQnLCAnZGlzYWJsZWQtbmV3JzogYnRuLmtleSA9PT0gJ2FkZE5ld1JvdycgJiYgKGlzR3JpZEVkaXRNb2RlIHx8IGlzTG9hZGluZyl9XCJcbiAgICAgICAgICAgIHNob3J0Y3V0a2V5LmJpbmQ9XCJidG4uc2hvcnRjdXRrZXlcIiB0YWJpbmRleC5iaW5kPVwiYnRuLnRhYmluZGV4XCIgaGludC5iaW5kPVwiYnRuLnRpdGxlXCJcbiAgICAgICAgICAgIGh5cGVybGluay5iaW5kPVwiYnRuLmh5cGVybGlua1wiIHRhcmdldC5iaW5kPVwiYnRuLnRhcmdldFwiIGNvbmRpdGlvbmFsY2xhc3MuYmluZD1cImJ0bi5jb25kaXRpb25hbGNsYXNzXCIgY29uZGl0aW9uYWxzdHlsZS5iaW5kPVwiYnRuLmNvbmRpdGlvbmFsc3R5bGVcIj48L2E+XG48L25nLXRlbXBsYXRlPlxuXG48ZGl2IGhpZGRlbj5cbiAgICA8bmctY29udGFpbmVyICNtdWx0aUNvbHVtbkZpbHRlclZpZXc+PC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICNpbmxpbmVFZGl0Vmlldz48L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgI2lubGluZUVkaXROZXdWaWV3PjwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAjcm93QWN0aW9uc1ZpZXc+PC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICNyb3dFeHBhbnNpb25BY3Rpb25WaWV3PjwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAjY3VzdG9tRXhwclZpZXc+PC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICNkeW5hbWljVGFibGU+PC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICNyb3dEZXRhaWxWaWV3PjwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdGFibGUtY29udGFpbmVyXCI+PC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
2188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2RhdGEvdGFibGUvc3JjL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3RhYmxlL3NyYy90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osUUFBUSxFQUNSLE1BQU0sRUFFTixRQUFRLEVBQ1IsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBdUIsV0FBVyxFQUFhLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0YsT0FBTyxFQUNILFVBQVUsRUFDVixlQUFlLEVBQ2YsV0FBVyxFQUNYLFFBQVEsRUFDUixNQUFNLEVBQ04sR0FBRyxFQUNILFlBQVksRUFDWixVQUFVLEVBQ1YsMkJBQTJCLEVBQzNCLFdBQVcsRUFDWCxlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLFlBQVksRUFDWixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFFBQVEsRUFDUixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxRQUFRLEVBQ1gsTUFBTSxVQUFVLENBQUM7QUFFbEIsT0FBTyxFQUFhLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQ0gsY0FBYyxFQUNkLFNBQVMsRUFDVCxxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLGNBQWMsRUFDZCxzQkFBc0IsRUFDdEIsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNq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QUU7WUFFSCxzQkFBc0I7a0JBQXZGLGVBQWU7bUJBQUMsd0JBQXdCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO1lBQzlCLGdCQUFnQjtrQkFBakQsWUFBWTttQkFBQyxrQkFBa0I7WUFDc0MsZ0JBQWdCO2tCQUFyRixTQUFTO21CQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQ1cseUJBQXlCO2tCQUF2RyxTQUFTO21CQUFDLHdCQUF3QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFFUixlQUFlO2tCQUFuRixTQUFTO21CQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBczFCN0IsVUFBVTtrQkFBL0MsWUFBWTttQkFBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQXR0cmlidXRlLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdG9yLFxuICAgIE5nWm9uZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3B0aW9uYWwsXG4gICAgUXVlcnlMaXN0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgJGFwcERpZ2VzdCxcbiAgICAkaW52b2tlV2F0Y2hlcnMsXG4gICAgJHBhcnNlRXZlbnQsXG4gICAgJHVud2F0Y2gsXG4gICAgJHdhdGNoLFxuICAgIEFwcCxcbiAgICBjbG9zZVBvcG92ZXIsXG4gICAgRGF0YVNvdXJjZSxcbiAgICBEeW5hbWljQ29tcG9uZW50UmVmUHJvdmlkZXIsXG4gICAgZXh0ZW5kUHJvdG8sXG4gICAgZ2V0Q2xvbmVkT2JqZWN0LFxuICAgIGdldERhdGFzb3VyY2VGcm9tRXhwcixcbiAgICBnZXRWYWxpZEpTT04sXG4gICAgaXNEYXRhU291cmNlRXF1YWwsXG4gICAgaXNEZWZpbmVkLFxuICAgIGlzTW9iaWxlLFxuICAgIFBhZ2luYXRpb25TZXJ2aWNlLFxuICAgIFN0YXRlUGVyc2lzdGVuY2UsXG4gICAgdHJpZ2dlckZuLFxuICAgIFZpZXdwb3J0XG59IGZyb20gJ0B3bS9jb3JlJztcblxuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgREVCT1VOQ0VfVElNRVMsXG4gICAgRURJVF9NT0RFLFxuICAgIGV4dHJhY3REYXRhU291cmNlTmFtZSxcbiAgICBnZXRDb25kaXRpb25hbENsYXNzZXMsXG4gICAgZ2V0T3JkZXJCeUV4cHIsXG4gICAgZ2V0Um93T3BlcmF0aW9uc0NvbHVtbixcbiAgICBOQVZJR0FUSU9OX1RZUEUsXG4gICAgcHJlcGFyZUZpZWxkRGVmcyxcbiAgICBwcm92aWRlQXMsXG4gICAgcHJvdmlkZUFzV2lkZ2V0UmVmLFxuICAgIFN0eWxhYmxlQ29tcG9uZW50LFxuICAgIHN0eWxlcixcbiAgICB0cmFuc2Zvcm1EYXRhLFxuICAgIFRydXN0QXNQaXBlLFxuICAgIHVuc3VwcG9ydGVkU3RhdGVQZXJzaXN0ZW5jZVR5cGVzXG59IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuaW1wb3J0IHtQYWdpbmF0aW9uQ29tcG9uZW50fSBmcm9tICdAd20vY29tcG9uZW50cy9kYXRhL3BhZ2luYXRpb24nO1xuXG5pbXBvcnQge0xpc3RDb21wb25lbnR9IGZyb20gJ0B3bS9jb21wb25lbnRzL2RhdGEvbGlzdCc7XG5pbXBvcnQge3JlZ2lzdGVyUHJvcHN9IGZyb20gJy4vdGFibGUucHJvcHMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZGVjbGFyZSBjb25zdCBfLCAkO1xuXG5jb25zdCBERUZBVUxUX0NMUyA9ICdhcHAtZ3JpZCBhcHAtcGFuZWwgcGFuZWwnO1xuY29uc3QgV0lER0VUX0NPTkZJRyA9IHt3aWRnZXRUeXBlOiAnd20tdGFibGUnLCBob3N0Q2xhc3M6IERFRkFVTFRfQ0xTfTtcblxuY29uc3QgZXhwb3J0SWNvbk1hcHBpbmcgPSB7XG4gICAgRVhDRUw6ICdmYSBmYS1maWxlLWV4Y2VsLW8nLFxuICAgIENTVjogJ2ZhIGZhLWZpbGUtdGV4dC1vJ1xufTtcblxuY29uc3QgUk9XX09QU19GSUVMRCA9ICdyb3dPcGVyYXRpb25zJztcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5jb25zdCBpc0lucHV0Qm9keVdyYXBwZXIgPSB0YXJnZXQgPT4ge1xuICAgIGNvbnN0IGNsYXNzZXMgPSBbJy5kcm9wZG93bi1tZW51JywgJy51aWItdHlwZWFoZWFkLW1hdGNoJywgJy5tb2RhbC1kaWFsb2cnLCAnLnRvYXN0J107XG4gICAgbGV0IGlzSW5wdXQgPSBmYWxzZTtcbiAgICBjbGFzc2VzLmZvckVhY2goY2xzID0+IHtcbiAgICAgICAgaWYgKHRhcmdldC5jbG9zZXN0KGNscykubGVuZ3RoKSB7XG4gICAgICAgICAgICBpc0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGF0dHJzID0gWydic2RhdGVwaWNrZXJkYXlkZWNvcmF0b3InXTtcbiAgICBpZiAoIWlzSW5wdXQpIHtcbiAgICAgICAgYXR0cnMuZm9yRWFjaChhdHRyID0+IHtcbiAgICAgICAgICAgIGlmICh0YXJnZXRbMF0uaGFzQXR0cmlidXRlKGF0dHIpKSB7XG4gICAgICAgICAgICAgICAgaXNJbnB1dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGlzSW5wdXQ7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ1t3bVRhYmxlXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzKFRhYmxlQ29tcG9uZW50LCBOR19WQUxVRV9BQ0NFU1NPUiwgdHJ1ZSksXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihUYWJsZUNvbXBvbmVudClcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50IGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuICAgIEBWaWV3Q2hpbGQoUGFnaW5hdGlvbkNvbXBvbmVudCwge3N0YXRpYzogdHJ1ZX0pIGRhdGFOYXZpZ2F0b3I7XG5cbiAgICBAVmlld0NoaWxkKCdkYXRhZ3JpZEVsZW1lbnQnLCB7c3RhdGljOiB0cnVlfSkgcHJpdmF0ZSBfdGFibGVFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbigncm93QWN0aW9uVG1wbCcsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgcm93QWN0aW9uVG1wbDogUXVlcnlMaXN0PGFueT47XG4gICAgQFZpZXdDaGlsZCgncm93QWN0aW9uc1ZpZXcnLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSByb3dBY3Rpb25zVmlld1JlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oJ2ZpbHRlclRtcGwnLCB7ZGVzY2VuZGFudHM6IHRydWV9KSBmaWx0ZXJUbXBsOiBRdWVyeUxpc3Q8YW55PjtcbiAgICBAVmlld0NoaWxkKCdtdWx0aUNvbHVtbkZpbHRlclZpZXcnLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBmaWx0ZXJWaWV3UmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbignaW5saW5lV2lkZ2V0VG1wbCcsIHtkZXNjZW5kYW50czogdHJ1ZX0pIGlubGluZVdpZGdldFRtcGw6IFF1ZXJ5TGlzdDxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ2lubGluZUVkaXRWaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgaW5saW5lRWRpdFZpZXdSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKCdpbmxpbmVXaWRnZXRUbXBsTmV3Jywge2Rlc2NlbmRhbnRzOiB0cnVlfSkgaW5saW5lV2lkZ2V0TmV3VG1wbDogUXVlcnlMaXN0PGFueT47XG4gICAgQFZpZXdDaGlsZCgnaW5saW5lRWRpdE5ld1ZpZXcnLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBpbmxpbmVFZGl0TmV3Vmlld1JlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oJ2N1c3RvbUV4cHJUbXBsJywge2Rlc2NlbmRhbnRzOiB0cnVlfSkgY3VzdG9tRXhwclRtcGw6IFF1ZXJ5TGlzdDxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ2N1c3RvbUV4cHJWaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgY3VzdG9tRXhwclZpZXdSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKCdyb3dFeHBhbnNpb25BY3Rpb25UbXBsJywgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSByb3dFeHBhbnNpb25BY3Rpb25UbXBsOiBRdWVyeUxpc3Q8YW55PjtcbiAgICBAQ29udGVudENoaWxkKCdyb3dFeHBhbnNpb25UbXBsJykgcm93RXhwYW5zaW9uVG1wbDogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAVmlld0NoaWxkKCdyb3dEZXRhaWxWaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgcm93RGV0YWlsVmlld1JlZjogVmlld0NvbnRhaW5lclJlZjtcbiAgICBAVmlld0NoaWxkKCdyb3dFeHBhbnNpb25BY3Rpb25WaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgcm93RXhwYW5zaW9uQWN0aW9uVmlld1JlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIEBWaWV3Q2hpbGQoJ2R5bmFtaWNUYWJsZScsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGR5bmFtaWNUYWJsZVJlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIHByaXZhdGUgcm93QWN0aW9uc0NvbXBpbGVkVGw6IGFueSAgPSB7fTtcbiAgICBwcml2YXRlIHJvd0ZpbHRlckNvbXBsaWVkVGw6IGFueSA9IHt9O1xuICAgIHByaXZhdGUgaW5saW5lQ29tcGxpZWRUbDogYW55ID0ge307XG4gICAgcHJpdmF0ZSBpbmxpbmVOZXdDb21wbGllZFRsOiBhbnkgPSB7fTtcbiAgICBwcml2YXRlIGN1c3RvbUV4cHJDb21waWxlZFRsOiBhbnkgPSB7fTtcbiAgICBwcml2YXRlIGN1c3RvbUV4cHJDb21waWxlZFN1bW1hcnlUbDogYW55ID0ge307XG4gICAgcHJpdmF0ZSByb3dEZWZJbnN0YW5jZXMgPSB7fTtcbiAgICBwcml2YXRlIHJvd0RlZk1hcCA9IHt9O1xuICAgIHByaXZhdGUgcm93RXhwYW5zaW9uQWN0aW9uVGw6IGFueSA9IHt9O1xuXG4gICAgY29sdW1ucyA9IHt9O1xuICAgIGZvcm1maWVsZHMgPSB7fTtcbiAgICBkYXRhZ3JpZEVsZW1lbnQ7XG4gICAgZGF0YXNvdXJjZTtcbiAgICBlZGl0bW9kZTtcbiAgICBlbmFibGVjb2x1bW5zZWxlY3Rpb247XG4gICAgZW5hYmxlc29ydCA9IHRydWU7XG4gICAgZmlsdGVybW9kZTtcbiAgICBzZWFyY2hsYWJlbDtcbiAgICBmb3JtcG9zaXRpb247XG4gICAgZ3JpZGNsYXNzO1xuICAgIGdyaWRmaXJzdHJvd3NlbGVjdDtcbiAgICBpY29uY2xhc3M7XG4gICAgb25kZW1hbmRtZXNzYWdlO1xuICAgIHZpZXdsZXNzbWVzc2FnZTtcbiAgICBzaG93dmlld2xlc3NidXR0b24gPSBmYWxzZTtcbiAgICBfdHJpZ2dlcmVkQnlVc2VyO1xuICAgIGlzR3JpZEVkaXRNb2RlO1xuICAgIGxvYWRpbmdkYXRhbXNnO1xuICAgIG11bHRpc2VsZWN0O1xuICAgIG5hbWU7XG4gICAgX2lzRGVwZW5kZW50O1xuICAgIG5hdmlnYXRpb247XG4gICAgbmF2aWdhdGlvblNpemU7XG4gICAgbmF2aWdhdGlvbmFsaWduO1xuICAgIG5vZGF0YW1lc3NhZ2U7XG4gICAgcGFnZXNpemU7XG4gICAgcHJldkRhdGE7XG4gICAgcHJpbWFyeUtleSA9IFtdO1xuICAgIHJhZGlvc2VsZWN0O1xuICAgIHJvd2NsYXNzO1xuICAgIHJvd25nY2xhc3M7XG4gICAgc2VsZWN0ZWRJdGVtcyA9IFtdO1xuICAgIHNob3doZWFkZXI7XG4gICAgc2hvd3JlY29yZGNvdW50O1xuICAgIHNob3dyb3dpbmRleDtcbiAgICBzdWJoZWFkaW5nO1xuICAgIHRpdGxlO1xuICAgIHNob3duZXdyb3c7XG4gICAgZGVsZXRlb2t0ZXh0O1xuICAgIGRlbGV0ZWNhbmNlbHRleHQ7XG4gICAgb25FcnJvcjtcbiAgICBvblJvd2luc2VydDtcbiAgICBvblJvd3VwZGF0ZTtcbiAgICBvblJvd2RlbGV0ZTtcbiAgICBzdGF0ZWhhbmRsZXI7XG4gICAgc2VsZWN0ZWRJdGVtQ2hhbmdlID0gbmV3IFN1YmplY3QoKTtcbiAgICBzZWxlY3RlZEl0ZW1DaGFuZ2UkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLnNlbGVjdGVkSXRlbUNoYW5nZS5hc09ic2VydmFibGUoKTtcblxuICAgIGFjdGlvbnMgPSBbXTtcbiAgICBfYWN0aW9ucyA9IHtcbiAgICAgICAgJ2hlYWRlcic6IFtdLFxuICAgICAgICAnZm9vdGVyJzogW11cbiAgICB9O1xuICAgIGV4cG9ydE9wdGlvbnMgPSBbXTtcbiAgICBleHBvcnRkYXRhc2l6ZTtcbiAgICBmb3JtV2lkZ2V0cztcbiAgICBoZWFkZXJDb25maWcgPSBbXTtcbiAgICBpdGVtcyA9IFtdO1xuICAgIG5hdkNvbnRyb2xzO1xuICAgIHJvd0FjdGlvbnMgPSBbXTtcbiAgICBzZWxlY3RlZENvbHVtbnM7XG4gICAgc2hvd25hdmlnYXRpb24gPSBmYWxzZTtcbiAgICBzaG93Rmlyc3RSb3cgPSBmYWxzZTtcbiAgICBkYXRhc2V0O1xuICAgIF9saXZlVGFibGVQYXJlbnQ7XG4gICAgaXNQYXJ0T2ZMaXZlR3JpZDtcbiAgICBncmlkRWxlbWVudDtcbiAgICBpc05ld1Jvd0luc2VydGVkO1xuICAgIGlzTW9iaWxlO1xuICAgIGlzTG9hZGluZztcbiAgICBpc1Jvd0RlbGV0ZWQ7XG4gICAgZG9jdW1lbnRDbGlja0JpbmQgPSBub29wO1xuICAgIGFjdGlvblJvd0luZGV4O1xuICAgIGFjdGlvblJvd1BhZ2U7XG4gICAgcHJldkZpbHRlckV4cHJlc3Npb246IGFueSA9IFtdO1xuICAgIGZpZWxkRGVmcyA9IFtdO1xuICAgIHJvd0RlZjogYW55ID0ge307XG4gICAgcm93SW5zdGFuY2U6IGFueSA9IHt9O1xuXG4gICAgcHJpdmF0ZSBmdWxsRmllbGREZWZzID0gW107XG4gICAgcHJpdmF0ZSBfX2Z1bGxEYXRhO1xuICAgIHByaXZhdGUgZGF0YU5hdmlnYXRvcldhdGNoZWQ7XG4gICAgcHJpdmF0ZSBuYXZpZ2F0b3JSZXN1bHRXYXRjaDtcbiAgICBwcml2YXRlIG5hdmlnYXRvck1heFJlc3VsdFdhdGNoO1xuICAgIHByaXZhdGUgZmlsdGVySW5mbztcbiAgICBwcml2YXRlIHNvcnRJbmZvO1xuICAgIHByaXZhdGUgc2VydmVyRGF0YTtcbiAgICBwcml2YXRlIGZpbHRlcm51bGxyZWNvcmRzO1xuICAgIHByaXZhdGUgdmFyaWFibGVJbmZsaWdodCA9IHRydWU7XG4gICAgcHJpdmF0ZSBpc2R5bmFtaWN0YWJsZTtcbiAgICBwcml2YXRlIF9keW5hbWljQ29udGV4dDtcbiAgICBwcml2YXRlIG5vT2ZDb2x1bW5zO1xuICAgIHB1YmxpYyBvbkRlbWFuZExvYWQ7XG4gICAgcHVibGljIGluZlNjcm9sbDtcbiAgICBwcml2YXRlIGlzRGF0YUxvYWRpbmc7XG4gICAgcHJpdmF0ZSBjdXJyZW50UGFnZTtcbiAgICBwcml2YXRlIGFwcGx5UHJvcHMgPSBuZXcgTWFwKCk7XG5cbiAgICByZWRyYXcgPSBfLmRlYm91bmNlKHRoaXMuX3JlZHJhdywgMTUwKTtcbiAgICBkZWJvdW5jZWRIYW5kbGVMb2FkaW5nID0gXy5kZWJvdW5jZSh0aGlzLmhhbmRsZUxvYWRpbmcsIDM1MCk7XG5cbiAgICAvLyBGaWx0ZXIgYW5kIFNvcnQgTWV0aG9kc1xuICAgIHJvd0ZpbHRlcjogYW55ID0ge307XG4gICAgbWF0Y2hNb2RlVHlwZXNNYXA7XG4gICAgbWF0Y2hNb2RlTXNncztcbiAgICBlbXB0eU1hdGNoTW9kZXM7XG4gICAgX3NlYXJjaFNvcnRIYW5kbGVyID0gbm9vcDtcbiAgICBzZWFyY2hTb3J0SGFuZGxlciA9ICguLi5hcmdzKSA9PiB7IHRoaXMuX3NlYXJjaFNvcnRIYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3MpOyB9O1xuICAgIF9pc1BhZ2VTZWFyY2g7XG4gICAgX2lzQ2xpZW50U2VhcmNoO1xuICAgIGNoZWNrRmlsdGVyc0FwcGxpZWQ6IEZ1bmN0aW9uO1xuICAgIGdldFNlYXJjaFJlc3VsdDogRnVuY3Rpb247XG4gICAgZ2V0U29ydFJlc3VsdDogRnVuY3Rpb247XG4gICAgZ2V0RmlsdGVyRmllbGRzOiBGdW5jdGlvbjtcbiAgICBvblJvd0ZpbHRlckNoYW5nZSA9IG5vb3A7XG4gICAgb25GaWx0ZXJDb25kaXRpb25TZWxlY3QgPSBub29wO1xuICAgIHNob3dDbGVhckljb24gPSBub29wO1xuICAgIGNsZWFyUm93RmlsdGVyID0gbm9vcDtcbiAgICBhZGp1c3RDb250YWluZXIgPSBub29wO1xuICAgIGdldE5hdmlnYXRpb25UYXJnZXRCeVNvcnRJbmZvOiBGdW5jdGlvbjtcbiAgICByZWZyZXNoRGF0YTogRnVuY3Rpb247XG4gICAgY2xlYXJGaWx0ZXI6IEZ1bmN0aW9uO1xuXG4gICAgLy8gSW5saW5lIEVkaXRcbiAgICBuZ2Zvcm06IEZvcm1Hcm91cDtcbiAgICB1cGRhdGVWYXJpYWJsZTogRnVuY3Rpb247XG4gICAgdXBkYXRlUmVjb3JkOiBGdW5jdGlvbjtcbiAgICBkZWxldGVSZWNvcmQ6IEZ1bmN0aW9uO1xuICAgIGluc2VydFJlY29yZDogRnVuY3Rpb247XG4gICAgZWRpdFJvdzogRnVuY3Rpb247XG4gICAgYWRkTmV3Um93OiBGdW5jdGlvbjtcbiAgICBhZGRSb3c6IEZ1bmN0aW9uO1xuICAgIGRlbGV0ZVJvdzogRnVuY3Rpb247XG4gICAgb25SZWNvcmREZWxldGU6IEZ1bmN0aW9uO1xuICAgIGluaXRpYXRlU2VsZWN0SXRlbTogRnVuY3Rpb247XG4gICAgaGlkZUVkaXRSb3c6IEZ1bmN0aW9uO1xuICAgIHNhdmVSb3c6IEZ1bmN0aW9uO1xuICAgIGNhbmNlbFJvdzogRnVuY3Rpb247XG4gICAgcHJpdmF0ZSBfcGFnZUxvYWQgPSB0cnVlO1xuXG4gICAgcHVibGljIGdyaWRPcHRpb25zID0ge1xuICAgICAgICBkYXRhOiBbXSxcbiAgICAgICAgY29sRGVmczogW10sXG4gICAgICAgIHN0YXJ0Um93SW5kZXg6IDEsXG4gICAgICAgIG1vZGU6ICcnLFxuICAgICAgICBzb3J0SW5mbzoge1xuICAgICAgICAgICAgZmllbGQ6ICcnLFxuICAgICAgICAgICAgZGlyZWN0aW9uOiAnJ1xuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJtb2RlOiAnJyxcbiAgICAgICAgc2VhcmNoTGFiZWw6ICcnLFxuICAgICAgICByb3dBY3Rpb25zOiBbXSxcbiAgICAgICAgaGVhZGVyQ29uZmlnOiBbXSxcbiAgICAgICAgcm93Q2xhc3M6ICcnLFxuICAgICAgICBlZGl0bW9kZTogJycsXG4gICAgICAgIGZvcm1Qb3NpdGlvbjogJycsXG4gICAgICAgIGlzTW9iaWxlOiBmYWxzZSxcbiAgICAgICAgcm93RXhwYW5zaW9uRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHJvd0RlZjoge1xuICAgICAgICAgICAgcG9zaXRpb246ICcwJ1xuICAgICAgICB9LFxuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgbWVzc2FnZXM6IHtcbiAgICAgICAgICAgIHNlbGVjdEZpZWxkOiAnU2VsZWN0IEZpZWxkJ1xuICAgICAgICB9LFxuICAgICAgICBzZWN1cml0eVV0aWxzOiB7XG4gICAgICAgICAgICBwaXBlVHJhbnNmb3JtIDoge31cbiAgICAgICAgfSxcbiAgICAgICAgbmF2aWdhdGlvbjogJycsXG4gICAgICAgIGlzZHluYW1pY3RhYmxlOiAnJyxcbiAgICAgICAgZGVsZXRlZFJvd0luZGV4OiAtMSxcbiAgICAgICAgbGFzdEFjdGlvblBlcmZvcm1lZDogJ3Njcm9sbCcsXG4gICAgICAgIGlzU2VhcmNoVHJpZ2VycmVkOiBmYWxzZSxcbiAgICAgICAgaXNEYXRhc2V0VXBkYXRlZDogZmFsc2UsXG4gICAgICAgIGlzRGF0YVVwZGF0ZWRCeVVzZXI6IGZhbHNlLFxuICAgICAgICBzaG93dmlld2xlc3NidXR0b246IGZhbHNlLFxuICAgICAgICBvbmRlbWFuZG1lc3NhZ2U6ICcnLFxuICAgICAgICB2aWV3bGVzc21lc3NhZ2U6ICcnLFxuICAgICAgICBsb2FkaW5nZGF0YW1zZzogJycsXG4gICAgICAgIGlzTmV4dFBhZ2VEYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIEFDVElPTlM6IHtcbiAgICAgICAgICAgICdERUxFVEUnOiAnZGVsZXRlJyxcbiAgICAgICAgICAgICdFRElUJzogJ2VkaXQnLFxuICAgICAgICAgICAgJ1NFQVJDSF9PUl9TT1JUJzogJ3NlYXJjaF9vcl9zb3J0JyxcbiAgICAgICAgICAgICdERUZBVUxUJzogJ3Njcm9sbCcsXG4gICAgICAgICAgICAnRklMVEVSX0NSSVRFUklBJyA6ICdmaWx0ZXInLFxuICAgICAgICAgICAgJ0RBVEFTRVRfVVBEQVRFJzogJ2RhdGFzZXRfdXBkYXRlJ1xuICAgICAgICB9LFxuICAgICAgICBhY3Rpb25Sb3dJbmRleDogdW5kZWZpbmVkLFxuICAgICAgICBhY3Rpb25Sb3dQYWdlOiB1bmRlZmluZWQsXG4gICAgICAgIGlzTGFzdFBhZ2UgOiBmYWxzZSxcbiAgICAgICAgLy8gZ2V0IHRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyXG4gICAgICAgIGdldEN1cnJlbnRQYWdlOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gXy5nZXQodGhpcy5kYXRhTmF2aWdhdG9yLCAnZG4uY3VycmVudFBhZ2UnKSB8fCAxO1xuICAgICAgICB9LFxuICAgICAgICAvLyBzZXQgdGhlIHBhZ2UgbnVtYmVyXG4gICAgICAgIHNldEN1cnJlbnRQYWdlOiAocGFnZU51bSkgPT4ge1xuICAgICAgICAgICAgXy5zZXQodGhpcy5kYXRhTmF2aWdhdG9yLCAnZG4uY3VycmVudFBhZ2UnLCBwYWdlTnVtIHx8IDEpO1xuICAgICAgICB9LFxuICAgICAgICBnZXREYXRhU291cmNlOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlO1xuICAgICAgICB9LFxuICAgICAgICAvLyBnZXQgdGhlIHBhZ2UgbGltaXRcbiAgICAgICAgZ2V0UGFnZVNpemU6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhZ2VzaXplO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldFBhZ2VDb3VudCA6ICgpID0+e1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YU5hdmlnYXRvci5wYWdlQ291bnQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVuYWJsZU5hdmlnYXRpb246ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3Iud2lkZ2V0LmlzRGlzYWJsZU5leHQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3Iud2lkZ2V0LmlzRGlzYWJsZUxhc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLm1vZGUgPSAndmlld2xlc3MnO1xuICAgICAgICB9LFxuICAgICAgICAvLyBzZXQgdGhlIGRlbGV0ZWQgcm93IGluZGV4XG4gICAgICAgIHNldERlbGV0ZWRSb3dJbmRleDogKGlkKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdkZWxldGVkUm93SW5kZXgnLCBpZCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHNldHMgdGhlIGxhc3QgYWN0aW9uIHBlcmZvcm1lZCBsaWtlIGVkaXQsIGRlbGV0ZSBldGMuXG4gICAgICAgIHNldExhc3RBY3Rpb25QZXJmb3JtZWQ6IChhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2xhc3RBY3Rpb25QZXJmb3JtZWQnLCBhY3Rpb24gfHwgdGhpcy5ncmlkT3B0aW9ucy5sYXN0QWN0aW9uUGVyZm9ybWVkKTtcbiAgICAgICAgfSxcbiAgICAgICAgaXNOYXZUeXBlU2Nyb2xsT3JPbmRlbWFuZDogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZE9wdGlvbnMubmF2aWdhdGlvbiA9PT0gJ1Njcm9sbCcgfHwgdGhpcy5ncmlkT3B0aW9ucy5uYXZpZ2F0aW9uID09PSAnT24tRGVtYW5kJztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0SXNTZWFyY2hUcmlnZXJyZWQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignaXNTZWFyY2hUcmlnZXJyZWQnLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldElzRGF0YXNldFVwZGF0ZWQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignaXNEYXRhc2V0VXBkYXRlZCcsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gIEZpeCBmb3IgW1dNUy0yMzI2M106ICdpc05leHRQYWdlRGF0YScgZmxhZyBpcyBzZXQgdG8gdHJ1ZSAtPiBpZiB1c2VyIGZldGNoaW5nIHRoZSBuZXh0IHBhZ2UgZGF0YSBieSBjbGlja2luZyBvbkxvYWQgbW9yZSBvciBzY3JvbGxcbiAgICAgICAgc2V0SXNOZXh0UGFnZURhdGE6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignaXNOZXh0UGFnZURhdGEnLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vICBGaXggZm9yIFtXTVMtMjMyNjNdOiAnaXNEYXRhVXBkYXRlZEJ5VXNlcicgZmxhZyBpcyBzZXQgdG8gdHJ1ZSAtPiBpZiB1c2VyIGNoYW5nZXMgdGhlIGRhdGFzZXQgZnJvbSBzY3JpcHRcbiAgICAgICAgc2V0SXNEYXRhVXBkYXRlZEJ5VXNlcjogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdpc0RhdGFVcGRhdGVkQnlVc2VyJywgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBvbkRhdGFSZW5kZXI6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZERhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnZGF0YXJlbmRlcicsIHskZGF0YTogdGhpcy5ncmlkRGF0YSwgZGF0YTogdGhpcy5ncmlkRGF0YX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBzZWxlY3Qgcm93cyBzZWxlY3RlZCBpbiBwcmV2aW91cyBwYWdlcy4gKE5vdCBmaW5kaW5nIGludGVyc2VjdGlvbiBvZiBkYXRhIGFuZCBzZWxlY3RlZGl0ZW1zIGFzIGl0IHdpbGwgYmUgaGVhdnkpXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NlbGVjdFJvd3MnLCB0aGlzLml0ZW1zKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnZ2V0U2VsZWN0ZWRSb3dzJyk7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUNoYW5nZS5uZXh0KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIE9uIHJlbmRlciwgYXBwbHkgdGhlIGZpbHRlcnMgc2V0IGZvciBxdWVyeSBzZXJ2aWNlIHZhcmlhYmxlXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzUGFnZVNlYXJjaCAmJiB0aGlzLmZpbHRlckluZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTb3J0SGFuZGxlcih0aGlzLmZpbHRlckluZm8sIHVuZGVmaW5lZCwgJ3NlYXJjaCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBvblJvd1NlbGVjdDogKHJvdywgZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnZ2V0U2VsZWN0ZWRSb3dzJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1DaGFuZ2UubmV4dCh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByb3dEYXRhID0gdGhpcy5hZGRSb3dJbmRleChyb3cpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoICYmIHJvd0RhdGEuJGluZGV4ICYmIHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJyAmJiB0aGlzLmRhdGFOYXZpZ2F0b3IgJiYgdW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXMuaW5kZXhPZih0aGlzLm5hdmlnYXRpb24pIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvYmogPSB7cGFnZTogdGhpcy5kYXRhTmF2aWdhdG9yLmRuLmN1cnJlbnRQYWdlLCBpbmRleDogcm93RGF0YS4kaW5kZXggLSAxfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpICAmJiB0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV8uc29tZSh3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0sIG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0ucHVzaChvYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLnNldFdpZGdldFN0YXRlKHRoaXMsIHsnc2VsZWN0ZWRJdGVtJzogd2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcywgeydzZWxlY3RlZEl0ZW0nOiBbb2JqXX0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdSZXRhaW4gU3RhdGUgaGFuZGxpbmcgb24gV2lkZ2V0ICcgKyB0aGlzLm5hbWUgKyAnIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGN1cnJlbnQgcGFnaW5hdGlvbiB0eXBlLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd3NlbGVjdCcsIHskZGF0YTogcm93RGF0YSwgJGV2ZW50OiBlLCByb3c6IHJvd0RhdGF9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAvLyBhc3NpZ25zIHRoZSBpdGVtcyBvbiBjYXB0dXJlIHBoYXNlIG9mIHRoZSBjbGljayBoYW5kbGVyLlxuICAgICAgICBhc3NpZ25TZWxlY3RlZEl0ZW1zOiAocm93LCBlLCByb3dJbmZvKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICogaW4gY2FzZSBvZiBzaW5nbGUgc2VsZWN0LCB1cGRhdGUgdGhlIGl0ZW1zIHdpdGggb3V0IGNoYW5naW5nIHRoZSByZWZlcmVuY2UuXG4gICAgICAgICAgICAgICAgICogZm9yIG11bHRpIHNlbGVjdCwga2VlcCBvbGQgc2VsZWN0ZWQgaXRlbXMgaW4gdGFjdFxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vRml4IGZvciBbV01TLTI1MTEwXTogQWRkIHJvdyB0byBpdGVtcyBsaXN0IG9ubHkgaWYgdGhlIHJvdyBpcyBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICBpZiAoXy5maW5kSW5kZXgodGhpcy5pdGVtcywgcm93KSA9PT0gLTEgJiYgKHJvd0luZm8/Ll9zZWxlY3RlZCA9PT0gdW5kZWZpbmVkIHx8IHJvd0luZm8/Ll9zZWxlY3RlZCA9PSB0cnVlIHx8ICh0aGlzLmdyaWRmaXJzdHJvd3NlbGVjdCAmJiByb3dJbmZvPy5yb3dJZCA9PSAwICYmICF0aGlzLnNob3dGaXJzdFJvdykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2gocm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3dJbmZvPy5yb3dJZCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93Rmlyc3RSb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2gocm93KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Sb3dEYmxDbGljazogKHJvdywgZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93RGF0YSA9IHRoaXMuYWRkUm93SW5kZXgocm93KTtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygncm93ZGJsY2xpY2snLCB7JGRhdGE6IHJvd0RhdGEsICRldmVudDogZSwgcm93OiByb3dEYXRhfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUm93RGVzZWxlY3Q6IChyb3csIGUpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcyA9IF8ucHVsbEFsbFdpdGgodGhpcy5pdGVtcywgW3Jvd10sIF8uaXNFcXVhbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdnZXRTZWxlY3RlZFJvd3MnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdyb3dkZXNlbGVjdCcsIHskZGF0YTogcm93LCAkZXZlbnQ6IGUsIHJvd30pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dEYXRhID0gdGhpcy5hZGRSb3dJbmRleChyb3cpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnICYmIHVuc3VwcG9ydGVkU3RhdGVQZXJzaXN0ZW5jZVR5cGVzLmluZGV4T2YodGhpcy5uYXZpZ2F0aW9uKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IHtwYWdlOiB0aGlzLmRhdGFOYXZpZ2F0b3IuZG4uY3VycmVudFBhZ2UsIGluZGV4OiByb3dEYXRhLiRpbmRleCAtIDF9O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdzZWxlY3RlZEl0ZW0nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8ucmVtb3ZlKHdpZGdldFN0YXRlLnNlbGVjdGVkSXRlbSwgZnVuY3Rpb24oc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfLmlzRXF1YWwoc2VsZWN0ZWRJdGVtLCBvYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5yZW1vdmVXaWRnZXRTdGF0ZSh0aGlzLCAnc2VsZWN0ZWRJdGVtJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZGdldFN0YXRlLnNlbGVjdGVkSXRlbS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5zZXRXaWRnZXRTdGF0ZSh0aGlzLCB7J3NlbGVjdGVkSXRlbSc6IHdpZGdldFN0YXRlLnNlbGVjdGVkSXRlbX0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUmV0YWluIFN0YXRlIGhhbmRsaW5nIG9uIFdpZGdldCAnICsgdGhpcy5uYW1lICsgJyBpcyBub3Qgc3VwcG9ydGVkIGZvciBjdXJyZW50IHBhZ2luYXRpb24gdHlwZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGNhbGxPblJvd0Rlc2VsZWN0RXZlbnQ6IChyb3csIGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnZ2V0U2VsZWN0ZWRSb3dzJyk7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd2Rlc2VsZWN0JywgeyRkYXRhOiByb3csICRldmVudDogZSwgcm93fSk7XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGxPblJvd0NsaWNrRXZlbnQ6IChyb3csIGUpID0+IHtcbiAgICAgICAgICAgIC8vIFdNUy0xODc3NDogSWYgd2UgaW52b2tlIG5hdmlnYXRpb24gYWN0aW9uIHZhcmlhYmxlIG9uIHJvd2NsaWNrIGNhbGxiYWNrLCB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyaW5nIG91dHNpZGUgYW5ndWxhciB6b25lIHNvIGFkZGluZyBuZ1pvbmUucnVuXG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIENhbGwgcm93IGNsaWNrIG9ubHkgaWYgY2xpY2sgaXMgdHJpZ2dlcmVkIGJ5IHVzZXJcbiAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLmhhc093blByb3BlcnR5KCdvcmlnaW5hbEV2ZW50JykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93RGF0YSA9IHRoaXMuYWRkUm93SW5kZXgocm93KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdyb3djbGljaycsIHskZGF0YTogcm93RGF0YSwgJGV2ZW50OiBlLCByb3c6IHJvd0RhdGF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xvc2VQb3BvdmVyOiBjbG9zZVBvcG92ZXIsXG4gICAgICAgIG9uQ29sdW1uU2VsZWN0OiAoY29sLCBlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdnZXRTZWxlY3RlZENvbHVtbnMnKTtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnY29sdW1uc2VsZWN0JywgeyRkYXRhOiBjb2wsICRldmVudDogZX0pO1xuICAgICAgICB9LFxuICAgICAgICBvbkNvbHVtbkRlc2VsZWN0OiAoY29sLCBlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdnZXRTZWxlY3RlZENvbHVtbnMnKTtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnY29sdW1uZGVzZWxlY3QnLCB7JGRhdGE6IGNvbCwgJGV2ZW50OiBlfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uSGVhZGVyQ2xpY2s6IChjb2wsIGUpID0+IHtcbiAgICAgICAgICAgIC8vIGlmIG9uU29ydCBmdW5jdGlvbiBpcyByZWdpc3RlcmVkIGludm9rZSBpdCB3aGVuIHRoZSBjb2x1bW4gaGVhZGVyIGlzIGNsaWNrZWRcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnaGVhZGVyY2xpY2snLCB7JGV2ZW50OiBlLCAkZGF0YTogY29sLCBjb2x1bW46IGNvbH0pO1xuICAgICAgICB9LFxuICAgICAgICBvblJvd0RlbGV0ZTogKHJvdywgY2FuY2VsUm93RGVsZXRlQ2FsbGJhY2ssIGUsIGNhbGxCYWNrLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlUmVjb3JkKF8uZXh0ZW5kKHt9LCBvcHRpb25zLCB7cm93LCAnY2FuY2VsUm93RGVsZXRlQ2FsbGJhY2snOiBjYW5jZWxSb3dEZWxldGVDYWxsYmFjaywgJ2V2dCc6IGUsICdjYWxsQmFjayc6IGNhbGxCYWNrfSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUm93SW5zZXJ0OiAocm93LCBlLCBjYWxsQmFjaywgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRSZWNvcmQoXy5leHRlbmQoe30sIG9wdGlvbnMsIHtyb3csIGV2ZW50OiBlLCAnY2FsbEJhY2snOiBjYWxsQmFja30pKTtcbiAgICAgICAgfSxcbiAgICAgICAgYmVmb3JlUm93VXBkYXRlOiAocm93LCBldmVudE5hbWU/KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbGl2ZVRhYmxlUGFyZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGl2ZVRhYmxlUGFyZW50LnVwZGF0ZVJvdyhyb3csIGV2ZW50TmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnByZXZEYXRhID0gZ2V0Q2xvbmVkT2JqZWN0KHJvdyk7XG4gICAgICAgIH0sXG4gICAgICAgIGFmdGVyUm93VXBkYXRlOiAocm93LCBlLCBjYWxsQmFjaywgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVSZWNvcmQoXy5leHRlbmQoe30sIG9wdGlvbnMsIHtyb3csICdwcmV2RGF0YSc6IHRoaXMucHJldkRhdGEsICdldmVudCc6IGUsICdjYWxsQmFjayc6IGNhbGxCYWNrfSkpO1xuICAgICAgICB9LFxuICAgICAgICBvbkJlZm9yZVJvd1VwZGF0ZTogKHJvdywgZSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3Jlcm93dXBkYXRlJywgeyRldmVudDogZSwgJGRhdGE6IHJvdywgcm93LCBvcHRpb25zOiBvcHRpb25zfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQmVmb3JlUm93SW5zZXJ0OiAocm93LCBlLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVyb3dpbnNlcnQnLCB7JGV2ZW50OiBlLCAkZGF0YTogcm93LCByb3csIG9wdGlvbnM6IG9wdGlvbnN9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25CZWZvcmVSb3dEZWxldGU6IChyb3csIGUsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvd0RhdGEgPSB0aGlzLmFkZFJvd0luZGV4KHJvdyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVyb3dkZWxldGUnLCB7JGV2ZW50OiBlLCByb3c6IHJvd0RhdGEsIG9wdGlvbnM6IG9wdGlvbnN9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Gb3JtUmVuZGVyOiAoJHJvdywgZSwgb3BlcmF0aW9uLCBhbHdheXNOZXdSb3cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHdpZGdldCA9IGFsd2F5c05ld1JvdyA/ICdpbmxpbmVJbnN0YW5jZU5ldycgOiAnaW5saW5lSW5zdGFuY2UnO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtV2lkZ2V0cyA9IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMuZmllbGREZWZzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbFt3aWRnZXRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1XaWRnZXRzW2NvbC5maWVsZF0gPSBjb2xbd2lkZ2V0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZGluZyBmb3Jtd2lkZ2V0cyB0byB0aGUgY29udGV4dCBmb3IgaW5saW5laW5zdGFuY2Ugd2lkZ2V0IHdoZW4gZmllbGREZWZzIHdlcmUgcmVhZHlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xbd2lkZ2V0XS5jb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sW3dpZGdldF0uY29udGV4dC5mb3JtV2lkZ2V0cyA9IHRoaXMuZm9ybVdpZGdldHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERpc2FibGVkT25GaWVsZChvcGVyYXRpb24sIGNvbCwgd2lkZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnZm9ybXJlbmRlcicsIHskZXZlbnQ6IGUsIGZvcm1XaWRnZXRzOiB0aGlzLmZvcm1XaWRnZXRzLCAkb3BlcmF0aW9uOiBvcGVyYXRpb259KTtcbiAgICAgICAgICAgIH0sIDI1MCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQmVmb3JlRm9ybVJlbmRlcjogKHJvdywgZSwgb3BlcmF0aW9uKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVmb3JtcmVuZGVyJywgeyRldmVudDogZSwgcm93LCAkb3BlcmF0aW9uOiBvcGVyYXRpb259KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVnaXN0ZXJSb3dOZ0NsYXNzV2F0Y2hlcjogKHJvd0RhdGEsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucm93bmdjbGFzcykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Q2xvbmVkUm93T2JqZWN0KHJvd0RhdGEpO1xuICAgICAgICAgICAgY29uc3Qgd2F0Y2hOYW1lID0gYCR7dGhpcy53aWRnZXRJZH1fcm93TmdDbGFzc18ke2luZGV4fWA7XG4gICAgICAgICAgICAkdW53YXRjaCh3YXRjaE5hbWUpO1xuICAgICAgICAgICAgLy9bVG9kby1DU1BdOiBnZW5lcmF0ZSB3YXRjaGVyIGV4cHIgaW4gcGFnZSBpZiByb3duZ2NsYXNzIGF0dHIgaXMgcHJlc2VudCBmb3IgdGFibGVcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoJHdhdGNoKHRoaXMucm93bmdjbGFzcywgdGhpcy52aWV3UGFyZW50LCB7cm93fSwgKG52LCBvdikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdhcHBseVJvd05nQ2xhc3MnLCBnZXRDb25kaXRpb25hbENsYXNzZXMobnYsIG92KSwgaW5kZXgpO1xuICAgICAgICAgICAgfSwgd2F0Y2hOYW1lKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZ2lzdGVyQ29sTmdDbGFzc1dhdGNoZXI6IChyb3dEYXRhLCBjb2xEZWYsIHJvd0luZGV4LCBjb2xJbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFjb2xEZWZbJ2NvbC1uZy1jbGFzcyddKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRDbG9uZWRSb3dPYmplY3Qocm93RGF0YSk7XG4gICAgICAgICAgICBjb25zdCB3YXRjaE5hbWUgPSBgJHt0aGlzLndpZGdldElkfV9jb2xOZ0NsYXNzXyR7cm93SW5kZXh9XyR7Y29sSW5kZXh9YDtcbiAgICAgICAgICAgICR1bndhdGNoKHdhdGNoTmFtZSk7XG4gICAgICAgICAgICAvL1tUb2RvLUNTUF06IGdlbmVyYXRlIHdhdGNoZXIgZXhwciBpbiBwYWdlIGlmIGNvbC1uZy1jbGFzcyBhdHRyIGlzIHByZXNlbnQgZm9yIHRhYmxlXG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCR3YXRjaChjb2xEZWZbJ2NvbC1uZy1jbGFzcyddLCB0aGlzLnZpZXdQYXJlbnQsIHtyb3d9LCAobnYsIG92KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2FwcGx5Q29sTmdDbGFzcycsIGdldENvbmRpdGlvbmFsQ2xhc3Nlcyhudiwgb3YpLCByb3dJbmRleCwgY29sSW5kZXgpO1xuICAgICAgICAgICAgfSwgd2F0Y2hOYW1lKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGNsZWFyQ3VzdG9tRXhwcmVzc2lvbjogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jdXN0b21FeHByVmlld1JlZi5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5jdXN0b21FeHByQ29tcGlsZWRUbCA9IHt9O1xuICAgICAgICAgICAgdGhpcy5jdXN0b21FeHByQ29tcGlsZWRTdW1tYXJ5VGwgPSB7fTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXJSb3dEZXRhaWxFeHByZXNzaW9uOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJvd0RldGFpbFZpZXdSZWYuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMucm93RGVmTWFwID0ge307XG4gICAgICAgICAgICB0aGlzLnJvd0RlZkluc3RhbmNlcyA9IHt9O1xuICAgICAgICB9LFxuICAgICAgICBnZW5lcmF0ZUN1c3RvbUV4cHJlc3Npb25zOiAocm93RGF0YSwgaW5kZXgsIHN1bW1hcnlSb3c/KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldENsb25lZFJvd09iamVjdChyb3dEYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBpbGVUZW1wbGF0ZSA9ICh0bXBsKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0bXBsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY29sRGVmID0ge307XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgICAgICBjb2xEZWZcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRXZlbnRzVG9Db250ZXh0KGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1c3RvbUV4cHJWaWV3ID0gdGhpcy5jdXN0b21FeHByVmlld1JlZi5jcmVhdGVFbWJlZGRlZFZpZXcodG1wbCwgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSBjdXN0b21FeHByVmlldy5yb290Tm9kZXNbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGROYW1lID0gcm9vdE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbC1pZGVudGlmaWVyJyk7XG4gICAgICAgICAgICAgICAgXy5leHRlbmQoY29sRGVmLCB0aGlzLmNvbHVtbnNbZmllbGROYW1lXSk7XG4gICAgICAgICAgICAgICAgaWYgKCFzdW1tYXJ5Um93KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tRXhwckNvbXBpbGVkVGxbZmllbGROYW1lICsgaW5kZXhdID0gcm9vdE5vZGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXN0b21FeHByQ29tcGlsZWRTdW1tYXJ5VGxbZmllbGROYW1lICsgaW5kZXhdID0gcm9vdE5vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzZHluYW1pY3RhYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZERlZnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb21waWxlVGVtcGxhdGUoY29sLmN1c3RvbUV4cHJUbXBsKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBGb3IgYWxsIHRoZSBjb2x1bW5zIGluc2lkZSB0aGUgdGFibGUsIGdlbmVyYXRlIHRoZSBjdXN0b20gZXhwcmVzc2lvblxuICAgICAgICAgICAgdGhpcy5jdXN0b21FeHByVG1wbC5mb3JFYWNoKGNvbXBpbGVUZW1wbGF0ZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2VuZXJhdGVSb3dFeHBhbnNpb25DZWxsOiAocm93RGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Q2xvbmVkUm93T2JqZWN0KHJvd0RhdGEpO1xuICAgICAgICAgICAgLy8gRm9yIGFsbCB0aGUgY29sdW1ucyBpbnNpZGUgdGhlIHRhYmxlLCBnZW5lcmF0ZSB0aGUgaW5saW5lIHdpZGdldFxuICAgICAgICAgICAgdGhpcy5yb3dFeHBhbnNpb25BY3Rpb25UbXBsLmZvckVhY2goKHRtcGwpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd0V4cGFuc2lvbkFjdGlvblRsW2luZGV4XSA9IHRoaXMucm93RXhwYW5zaW9uQWN0aW9uVmlld1JlZi5jcmVhdGVFbWJlZGRlZFZpZXcodG1wbCwge3Jvd30pLnJvb3ROb2RlcztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBnZXRSb3dFeHBhbnNpb25BY3Rpb246IChpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm93RXhwYW5zaW9uQWN0aW9uVGxbaW5kZXhdO1xuICAgICAgICB9LFxuICAgICAgICBnZW5lcmF0ZVJvd0RldGFpbFZpZXc6ICgkZXZlbnQsIHJvd0RhdGEsIHJvd0lkLCAkdGFyZ2V0LCAkb3ZlcmxheSwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Q2xvbmVkUm93T2JqZWN0KHJvd0RhdGEpO1xuICAgICAgICAgICAgY29uc3Qgcm93RGVmID0gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMucm93RGVmKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnJvd0luc3RhbmNlLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXJvd2V4cGFuZCcsIHskZXZlbnQsICRkYXRhOiByb3dEZWYsIHJvd30pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcm93RGVmLmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBFeHBhbmQgdGhlIHJvdyBkZXRhaWxcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAvLyBSb3cgaXMgYWxyZWFkeSByZW5kZXJlZC4gUmV0dXJuIGhlcmVcbiAgICAgICAgICAgIGlmICh0aGlzLnJvd0RlZk1hcFtyb3dJZF0gJiYgdGhpcy5yb3dEZWZNYXBbcm93SWRdLmNvbnRlbnQgPT09IHJvd0RlZi5jb250ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dJbnN0YW5jZS5pbnZva2VFdmVudENhbGxiYWNrKCdyb3dleHBhbmQnLCB7JGV2ZW50LCByb3csICRkYXRhOiB0aGlzLnJvd0RlZkluc3RhbmNlc1tyb3dJZF19KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJvd0RlZk1hcFtyb3dJZF0gPSByb3dEZWY7XG4gICAgICAgICAgICAkdGFyZ2V0LmVtcHR5KCk7XG4gICAgICAgICAgICAkdGFyZ2V0LmhpZGUoKTtcbiAgICAgICAgICAgICRvdmVybGF5LnNob3coKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgICAgcm93RGVmLFxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJMb2FkOiAod2lkZ2V0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3ZlcmxheS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRhcmdldC5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dEZWZJbnN0YW5jZXNbcm93SWRdID0gd2lkZ2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm93SW5zdGFuY2UuaW52b2tlRXZlbnRDYWxsYmFjaygncm93ZXhwYW5kJywgeyRldmVudCwgcm93LCAkZGF0YTogd2lkZ2V0fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgICAgICAgICAgICB9fTtcbiAgICAgICAgICAgIGNvbnN0IHJvb3ROb2RlID0gdGhpcy5yb3dEZXRhaWxWaWV3UmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnJvd0V4cGFuc2lvblRtcGwsIGNvbnRleHQpLnJvb3ROb2Rlc1swXTtcbiAgICAgICAgICAgICR0YXJnZXRbMF0uYXBwZW5kQ2hpbGQocm9vdE5vZGUpO1xuICAgICAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgICAgICB9LFxuICAgICAgICBvbkJlZm9yZVJvd0NvbGxhcHNlOiAoJGV2ZW50LCByb3csIHJvd0lkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb3dJbnN0YW5jZS5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVyb3djb2xsYXBzZScsIHskZXZlbnQsIHJvdywgJGRhdGE6IHRoaXMucm93RGVmSW5zdGFuY2VzW3Jvd0lkXX0pO1xuICAgICAgICB9LFxuICAgICAgICBvblJvd0NvbGxhcHNlOiAoJGV2ZW50LCByb3cpID0+IHtcbiAgICAgICAgICAgIHRoaXMucm93SW5zdGFuY2UuaW52b2tlRXZlbnRDYWxsYmFjaygncm93Y29sbGFwc2UnLCB7JGV2ZW50LCByb3d9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0Q3VzdG9tRXhwcmVzc2lvbjogKGZpZWxkTmFtZSwgaW5kZXgsIHN1bW1hcnlSb3c/KSA9PiB7XG4gICAgICAgICAgICBsZXQgY3VzdG9tRXhwcmVzc2lvbjtcbiAgICAgICAgICAgIGlmICghc3VtbWFyeVJvdykge1xuICAgICAgICAgICAgICAgIGN1c3RvbUV4cHJlc3Npb24gPSB0aGlzLmN1c3RvbUV4cHJDb21waWxlZFRsW2ZpZWxkTmFtZSArIGluZGV4XTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3VzdG9tRXhwcmVzc2lvbiA9IHRoaXMuY3VzdG9tRXhwckNvbXBpbGVkU3VtbWFyeVRsW2ZpZWxkTmFtZSArIGluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjdXN0b21FeHByZXNzaW9uIHx8ICcnO1xuICAgICAgICB9LFxuICAgICAgICBjbGVhclJvd0FjdGlvbnM6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucm93QWN0aW9uc1ZpZXdSZWYuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMucm93QWN0aW9uc0NvbXBpbGVkVGwgPSB7fTtcbiAgICAgICAgICAgIHRoaXMucm93RXhwYW5zaW9uQWN0aW9uVmlld1JlZi5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5yb3dFeHBhbnNpb25BY3Rpb25UbCA9IHt9O1xuICAgICAgICB9LFxuICAgICAgICBnZW5lcmF0ZVJvd0FjdGlvbnM6IChyb3dEYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRDbG9uZWRSb3dPYmplY3Qocm93RGF0YSk7XG4gICAgICAgICAgICB0aGlzLnJvd0FjdGlvbnNDb21waWxlZFRsW2luZGV4XSA9IFtdO1xuICAgICAgICAgICAgLy8gRm9yIGFsbCB0aGUgY29sdW1ucyBpbnNpZGUgdGhlIHRhYmxlLCBnZW5lcmF0ZSB0aGUgaW5saW5lIHdpZGdldFxuICAgICAgICAgICAgdGhpcy5yb3dBY3Rpb25UbXBsLmZvckVhY2goKHRtcGwpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd0FjdGlvbnNDb21waWxlZFRsW2luZGV4XS5wdXNoKC4uLnRoaXMucm93QWN0aW9uc1ZpZXdSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRtcGwsIHtyb3d9KS5yb290Tm9kZXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldFJvd0FjdGlvbjogKGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb3dBY3Rpb25zQ29tcGlsZWRUbFtpbmRleF07XG4gICAgICAgIH0sXG4gICAgICAgIGdlbmVyYXRlSW5saW5lRWRpdFJvdzogKHJvd0RhdGEsIGFsd2F5c05ld1JvdykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRDbG9uZWRSb3dPYmplY3Qocm93RGF0YSk7XG4gICAgICAgICAgICBpZiAoYWx3YXlzTmV3Um93KSB7XG4gICAgICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIHZpZXcgY29udGFpbmVyIHJlZlxuICAgICAgICAgICAgICAgIHRoaXMuaW5saW5lRWRpdE5ld1ZpZXdSZWYuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlubGluZU5ld0NvbXBsaWVkVGwgPSB7fTtcbiAgICAgICAgICAgICAgICAvLyBGb3IgYWxsIHRoZSBjb2x1bW5zIGluc2lkZSB0aGUgdGFibGUsIGdlbmVyYXRlIHRoZSBpbmxpbmUgd2lkZ2V0XG4gICAgICAgICAgICAgICAgdGhpcy5pbmxpbmVXaWRnZXROZXdUbXBsLmZvckVhY2godG1wbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZE5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRDb250cm9sOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmdmb3JtLmNvbnRyb2xzW2ZpZWxkTmFtZSArICdfbmV3J10gfHwge307XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VmFsaWRhdGlvbk1lc3NhZ2U6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0gJiYgdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0udmFsaWRhdGlvbm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UGVuZGluZ1NwaW5uZXJTdGF0dXNOZXc6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0gJiYgdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0uc2hvd1BlbmRpbmdTcGlubmVyTmV3O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb290Tm9kZSA9IHRoaXMuaW5saW5lRWRpdE5ld1ZpZXdSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRtcGwsIGNvbnRleHQpLnJvb3ROb2Rlc1swXTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gcm9vdE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbC1pZGVudGlmaWVyJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5saW5lTmV3Q29tcGxpZWRUbFtmaWVsZE5hbWVdID0gcm9vdE5vZGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckZvcm0odHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIHZpZXcgY29udGFpbmVyIHJlZlxuICAgICAgICAgICAgdGhpcy5pbmxpbmVFZGl0Vmlld1JlZi5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5pbmxpbmVDb21wbGllZFRsID0ge307XG4gICAgICAgICAgICB0aGlzLmNsZWFyRm9ybSgpO1xuICAgICAgICAgICAgLy8gRm9yIGFsbCB0aGUgY29sdW1ucyBpbnNpZGUgdGhlIHRhYmxlLCBnZW5lcmF0ZSB0aGUgaW5saW5lIHdpZGdldFxuICAgICAgICAgICAgdGhpcy5pbmxpbmVXaWRnZXRUbXBsLmZvckVhY2godG1wbCA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGZpZWxkTmFtZTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgICAgIGdldENvbnRyb2w6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5nZm9ybS5jb250cm9sc1tmaWVsZE5hbWVdIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBnZXRWYWxpZGF0aW9uTWVzc2FnZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdICYmIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdLnZhbGlkYXRpb25tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBnZXRQZW5kaW5nU3Bpbm5lclN0YXR1czogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdICYmIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdLnNob3dQZW5kaW5nU3Bpbm5lcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvb3ROb2RlID0gdGhpcy5pbmxpbmVFZGl0Vmlld1JlZi5jcmVhdGVFbWJlZGRlZFZpZXcodG1wbCwgY29udGV4dCkucm9vdE5vZGVzWzBdO1xuICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9IHJvb3ROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1jb2wtaWRlbnRpZmllcicpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5saW5lQ29tcGxpZWRUbFtmaWVsZE5hbWVdID0gcm9vdE5vZGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0SW5saW5lRWRpdFdpZGdldDogKGZpZWxkTmFtZSwgdmFsdWUsIGFsd2F5c05ld1JvdykgPT4ge1xuICAgICAgICAgICAgaWYgKGFsd2F5c05ld1Jvdykge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0RmllbGRWYWx1ZShmaWVsZE5hbWUgKyAnX25ldycsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbmxpbmVOZXdDb21wbGllZFRsW2ZpZWxkTmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldEZpZWxkVmFsdWUoZmllbGROYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbmxpbmVDb21wbGllZFRsW2ZpZWxkTmFtZV07XG4gICAgICAgIH0sXG4gICAgICAgIHNldEZpZWxkVmFsdWU6IChmaWVsZE5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5uZ2Zvcm0uY29udHJvbHMgJiYgdGhpcy5uZ2Zvcm0uY29udHJvbHNbZmllbGROYW1lXTtcbiAgICAgICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdldEZpZWxkVmFsdWU6IGZpZWxkTmFtZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5uZ2Zvcm0uY29udHJvbHMgJiYgdGhpcy5uZ2Zvcm0uY29udHJvbHNbZmllbGROYW1lXTtcbiAgICAgICAgICAgIHJldHVybiBjb250cm9sICYmIGNvbnRyb2wudmFsdWU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gZnVuY3Rpb24gdG8gYWRkIGxvYWQgbW9yZSBidXR0b24gdG8gdGFibGVcbiAgICAgICAgYWRkTG9hZE1vcmVCdG46ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnYWRkTG9hZE1vcmVCdG4nLCB0aGlzLm9uZGVtYW5kbWVzc2FnZSwgdGhpcy5sb2FkaW5nZGF0YW1zZywgKCRldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRJc05leHRQYWdlRGF0YSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0SXNEYXRhVXBkYXRlZEJ5VXNlcihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy5tb2RlID09PSAndmlld2xlc3MnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLm5hdmlnYXRlUGFnZSgnZmlyc3QnLCAkZXZlbnQsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMubW9kZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3IubmF2aWdhdGVQYWdlKCduZXh0JywgJGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIHRoaXMuaW5mU2Nyb2xsKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gZnVuY3Rpb24gdG8gYmluZCBzY3JvbGwgZXZlbnRcbiAgICAgICAgYmluZFNjcm9sbEV2dDogKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2dyaWREYXRhICYmIHRoaXMuX2dyaWREYXRhLmxlbmd0aCAmJiB0aGlzLmluZlNjcm9sbCkge1xuICAgICAgICAgICAgICAgIC8vIHNtb290aHNjcm9sbCBldmVudHMgd2lsbCBiZSBiaW5kZWQuXG4gICAgICAgICAgICAgICAgLy8gQWRkZWQgdGltZW91dCBhcyB0aGUgdGFibGUgaHRtbCBpcyByZW5kZXJlZCBhdCBydW50aW1lXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UuYmluZFNjcm9sbEV2dCh0aGlzLCAndGJvZHknLCBERUJPVU5DRV9USU1FUy5QQUdJTkFUSU9OX0RFQk9VTkNFX1RJTUUpO1xuICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZW5lcmF0ZUZpbHRlclJvdzogKCkgPT4ge1xuICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIHZpZXcgY29udGFpbmVyIHJlZlxuICAgICAgICAgICAgdGhpcy5maWx0ZXJWaWV3UmVmLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLnJvd0ZpbHRlckNvbXBsaWVkVGwgPSB7fTtcbiAgICAgICAgICAgIC8vIEZvciBhbGwgdGhlIGNvbHVtbnMgaW5zaWRlIHRoZSB0YWJsZSwgZ2VuZXJhdGUgdGhlIGNvbXBpbGVkIGZpbHRlciB0ZW1wbGF0ZVxuICAgICAgICAgICAgdGhpcy5maWx0ZXJUbXBsLmZvckVhY2goKHRtcGwpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByb290Tm9kZSA9IHRoaXMuZmlsdGVyVmlld1JlZi5jcmVhdGVFbWJlZGRlZFZpZXcodG1wbCwge1xuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VGbjogdGhpcy5vblJvd0ZpbHRlckNoYW5nZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkOiAoZmllbGROYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbXB0eU1hdGNoTW9kZXMuaW5kZXhPZih0aGlzLnJvd0ZpbHRlcltmaWVsZE5hbWVdICYmIHRoaXMucm93RmlsdGVyW2ZpZWxkTmFtZV0ubWF0Y2hNb2RlKSA+IC0xO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkucm9vdE5vZGVzWzBdO1xuICAgICAgICAgICAgICAgIHRoaXMucm93RmlsdGVyQ29tcGxpZWRUbFtyb290Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29sLWlkZW50aWZpZXInKV0gPSByb290Tm9kZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBnZXRGaWx0ZXJXaWRnZXQ6IChmaWVsZE5hbWUpID0+IHtcbiAgICAgICAgICAgIC8vIE1vdmUgdGhlIGdlbmVyYXRlZCBmaWx0ZXIgdGVtcGxhdGUgdG8gdGhlIGZpbHRlciByb3dcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvd0ZpbHRlckNvbXBsaWVkVGxbZmllbGROYW1lXTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0R3JpZEVkaXRNb2RlOiAodmFsKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNHcmlkRWRpdE1vZGUgPSB2YWw7XG4gICAgICAgICAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldEdyaWRTdGF0ZTogKHZhbCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB2YWwgPT09ICdsb2FkaW5nJztcbiAgICAgICAgfSxcbiAgICAgICAgLypcbiAgICAgICAgICAgIHNldCBhY3Rpb25Sb3dJbmRleCBhbmQgYWN0aW9uUm93UGFnZSB2YWx1ZXNcbiAgICAgICAgICAgIGFjdGlvblJvd0luZGV4IHdpbGwgaGF2ZSB0aGUgcm93IGluZGV4IGluIHRoZSBkYXRhc2V0IG9uIHdoaWNoIGVkaXQvZGVsZXRlIG9wZXJhdGlvbiBpcyBiZWluZyBwZXJmb3JtZWRcbiAgICAgICAgICAgIGFjdGlvblJvd1BhZ2Ugd2lsbCBoYXZlIHBhZ2UgbnVtYmVyIGluIHdoaWNoIHRoZSBhY3Rpb24gcm93IGluZGV4IGlzIHByZXNlbnRcbiAgICAgICAgICovXG4gICAgICAgIHNldEFjdGlvblJvd0luZGV4OiAodmFsKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy5pc05hdlR5cGVTY3JvbGxPck9uZGVtYW5kKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGlvblJvd0luZGV4ID0gcGFyc2VJbnQodmFsKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdhY3Rpb25Sb3dJbmRleCcsIHRoaXMuYWN0aW9uUm93SW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmICghXy5pc05hTih0aGlzLmFjdGlvblJvd0luZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGlvblJvd1BhZ2UgPSBNYXRoLmZsb29yKHRoaXMuYWN0aW9uUm93SW5kZXggLyB0aGlzLnBhZ2VzaXplKSArIDE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2FjdGlvblJvd1BhZ2UnLCB0aGlzLmFjdGlvblJvd1BhZ2UgfHwgdGhpcy5ncmlkT3B0aW9ucy5hY3Rpb25Sb3dQYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNsZWFyQWN0aW9uUm93SW5kZXg6ICgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1Jvd0RlbGV0ZWQgJiYgKHRoaXMuaW5mU2Nyb2xsIHx8IHRoaXMub25EZW1hbmRMb2FkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJBY3Rpb25Sb3dWYXJzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG5vQ2hhbmdlc0RldGVjdGVkOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZU1lc3NhZ2UodHJ1ZSwgJ2luZm8nLCAnTm8gQ2hhbmdlcyBEZXRlY3RlZCcsICcnKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gRnVuY3Rpb24gdG8gcmVkcmF3IHRoZSB3aWRnZXRzIG9uIHJlc2l6ZSBvZiBjb2x1bW5zXG4gICAgICAgIHJlZHJhd1dpZGdldHM6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRm4oY29sLmlubGluZUluc3RhbmNlICYmIGNvbC5pbmxpbmVJbnN0YW5jZS5yZWRyYXcpO1xuICAgICAgICAgICAgICAgIHRyaWdnZXJGbihjb2wuaW5saW5lSW5zdGFuY2VOZXcgJiYgY29sLmlubGluZUluc3RhbmNlTmV3LnJlZHJhdyk7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckZuKGNvbC5maWx0ZXJJbnN0YW5jZSAmJiBjb2wuZmlsdGVySW5zdGFuY2UucmVkcmF3KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBzZWFyY2hIYW5kbGVyOiB0aGlzLnNlYXJjaFNvcnRIYW5kbGVyLmJpbmQodGhpcyksXG4gICAgICAgIHNvcnRIYW5kbGVyOiB0aGlzLnNlYXJjaFNvcnRIYW5kbGVyLmJpbmQodGhpcyksXG4gICAgICAgIHRpbWVvdXRDYWxsOiAoZm4sIGRlbGF5KSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZuLCBkZWxheSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJ1bkluTmdab25lOiBmbiA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oZm4pO1xuICAgICAgICB9LFxuICAgICAgICBzYWZlQXBwbHk6ICgpID0+IHtcbiAgICAgICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0VG91Y2hlZDogKG5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN0cmwgPSB0aGlzLm5nZm9ybS5jb250cm9sc1tuYW1lXTtcbiAgICAgICAgICAgIGlmIChjdHJsKSB7XG4gICAgICAgICAgICAgICAgY3RybC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNsZWFyRm9ybTogdGhpcy5jbGVhckZvcm0uYmluZCh0aGlzKSxcbiAgICAgICAgY2FsbExvYWRJbmxpbmVXaWRnZXREYXRhOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZ1bGxGaWVsZERlZnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChfLmlzVW5kZWZpbmVkKGNvbC5pc0RhdGFTZXRCb3VuZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckZuKGNvbC5sb2FkSW5saW5lV2lkZ2V0RGF0YSAmJiBjb2wubG9hZElubGluZVdpZGdldERhdGEuYmluZChjb2wpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gRnVuY3Rpb24gdG8gYXBwbHkgdmFsaWRhdG9ycyB0byBJbmxpbmUgZm9ybSBjb250cm9sc1xuICAgICAgICBhcHBseVZhbGlkYXRpb25zOiAoY29sLCBhbHdheXNOZXdSb3cpID0+IHtcbiAgICAgICAgICAgIGlmIChhbHdheXNOZXdSb3cpIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRm4oY29sLmFwcGx5TmV3Um93VmFsaWRhdGlvbnMgJiYgY29sLmFwcGx5TmV3Um93VmFsaWRhdGlvbnMuYmluZChjb2wpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckZuKGNvbC5hcHBseVZhbGlkYXRpb25zICYmIGNvbC5hcHBseVZhbGlkYXRpb25zLmJpbmQoY29sKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIEZ1bmN0aW9uIHRvIHJlbW92ZSB2YWxpZGF0b3JzIGFuZCBzZXQgZm9ybSBzdGF0ZSB0byB1bnRvdWNoZWQgZm9yIGlubGluZSBmb3JtIGNvbnRyb2xcbiAgICAgICAgcmVtb3ZlVmFsaWRhdGlvbnM6IChhbHdheXNOZXdSb3cpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZnVsbEZpZWxkRGVmcy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb2wucmVhZG9ubHkgJiYgY29sLmJpbmRpbmcgIT09ICdyb3dPcGVyYXRpb25zJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWx3YXlzTmV3Um93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRm4oY29sLnJlbW92ZU5ld1Jvd1ZhbGlkYXRpb25zICYmIGNvbC5yZW1vdmVOZXdSb3dWYWxpZGF0aW9ucy5iaW5kKGNvbCkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckZuKGNvbC5yZW1vdmVWYWxpZGF0aW9ucyAmJiBjb2wucmVtb3ZlVmFsaWRhdGlvbnMuYmluZChjb2wpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgX2dyaWREYXRhO1xuICAgIHByaXZhdGUgX3NlbGVjdGVkSXRlbXNFeGlzdCA9IGZhbHNlO1xuICAgIHNldCBncmlkRGF0YShuZXdWYWx1ZSkge1xuICAgICAgICB0aGlzLmlzRGF0YUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgLy8gRml4IGZvciBbV01TLTI0MDEyXTogaGlkZSBubyBkYXRhZm91bmQgbXNnIHdoZW4gdmFyaWFibGVJbmZsaWdodCBpcyB0cnVlIGFuZCBkYXRhc2V0IGlzIGVtcHR5XG4gICAgICAgIGlmICh0aGlzLnZhcmlhYmxlSW5mbGlnaHQgJiYgXy5pc0VtcHR5KG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFyaWFibGVJbmZsaWdodCA9IGZhbHNlO1xuICAgICAgICAvLyBGaXggZm9yIFtXTVMtMjQxMDhdOiBDaGFuZ2UgdGhlIHN0YXR1cyB0byByZWFkeSBvciBub2RhdGEgZm91bmQgd2hlbiB2YXJpYWJsZUluZmxpZ2h0IGlzIGZhbHNlKGFmdGVyIGdldHRpbmcgdGhlIGRhdGEpXG4gICAgICAgIGlmIChuZXdWYWx1ZSAmJiAobmV3VmFsdWUubGVuZ3RoKSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdub2RhdGEnLCB0aGlzLm5vZGF0YW1lc3NhZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdyZWFkeScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLmlzTmF2VHlwZVNjcm9sbE9yT25kZW1hbmQoKSkge1xuICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBfZ3JpZERhdGEgZmllbGQgd2l0aCB0aGUgbmV4dCBzZXQgb2YgaXRlbXMgYW5kIG1vZGlmeSB0aGUgY3VycmVudCBwYWdlXG4gICAgICAgICAgICBbdGhpcy5fZ3JpZERhdGEsIHRoaXMuY3VycmVudFBhZ2VdID0gdGhpcy5wYWdpbmF0aW9uU2VydmljZS51cGRhdGVGaWVsZHNPblBhZ2luYXRpb24odGhpcywgbmV3VmFsdWUpO1xuXG4gICAgICAgICAgICAvLyBXaGVuIGVkaXQgYWN0aW9uIGlzIHBlcmZvcm1lZCBvbiBwcmV2aW91cyBwYWdlLCB1cGRhdGUgdGhlIF9ncmlkRGF0YSBmaWVsZCB3aXRoIHRoZSBtb2RpZmllZCByb3cgZGF0YVxuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbnMubGFzdEFjdGlvblBlcmZvcm1lZCA9PT0gdGhpcy5ncmlkT3B0aW9ucy5BQ1RJT05TLkVESVQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dJbmRleCA9IF8uZmxvb3IodGhpcy5hY3Rpb25Sb3dJbmRleCAlIHRoaXMucGFnZXNpemUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dyaWREYXRhLnNwbGljZSh0aGlzLmFjdGlvblJvd0luZGV4LCAxICwgbmV3VmFsdWVbcm93SW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2lzTGFzdFBhZ2UnLCAhISh0aGlzLmRhdGFOYXZpZ2F0b3IuaXNEaXNhYmxlTmV4dCkpO1xuICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBvbiBkZW1hbmQgcGFnaW5hdGlvbiwgY3JlYXRlIHRoZSBsb2FkIG1vcmUgYnV0dG9uIG9ubHkgb25jZSBhbmQgc2hvdyB0aGUgYnV0dG9uIHVudGlsIG5leHQgcGFnZSBpcyBub3QgZGlzYWJsZWRcbiAgICAgICAgICAgIGlmICghdGhpcy4kZWxlbWVudC5maW5kKCcub24tZGVtYW5kLWRhdGFncmlkJykubGVuZ3RoICYmICF0aGlzLmRhdGFOYXZpZ2F0b3IuaXNEaXNhYmxlTmV4dCAmJiB0aGlzLm9uRGVtYW5kTG9hZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuYWRkTG9hZE1vcmVCdG4oKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKHRoaXMuX2dyaWREYXRhICYmIHRoaXMuX2dyaWREYXRhLmxlbmd0aCkgJiYgKHRoaXMuZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0IHx8ICF0aGlzLmlzRGF0YUxvYWRpbmcpKSB7XG4gICAgICAgICAgICAgICAgLy8gd2hlbiB0aGUgbmV4dCBwYWdlIGlzIGRpc2FibGVkIG9yIHdoZW4gdGhlIGRhdGEgaXMgbm90IGxvYWRpbmcgcmVtb3ZlIHRoZSBsb2FkaW5nL2xvYWQgbW9yZSBidXR0b24gYWNjb3JkaW5nbHlcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnaGlkZUxvYWRpbmdJbmRpY2F0b3InLCB0aGlzLmRhdGFOYXZpZ2F0b3IuaXNEaXNhYmxlTmV4dCwgdGhpcy5pbmZTY3JvbGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZ3JpZERhdGEgPSBuZXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3RhcnRSb3dJbmRleCA9IDA7XG4gICAgICAgIGxldCBncmlkT3B0aW9ucztcblxuICAgICAgICB0aGlzLl9vbkNoYW5nZSh0aGlzLl9ncmlkRGF0YSk7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZCgpO1xuXG4gICAgICAgIGlmIChpc0RlZmluZWQobmV3VmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmJpbmRTY3JvbGxFdnQoKTtcblxuICAgICAgICAgICAgLypTZXR0aW5nIHRoZSBzZXJpYWwgbm8ncyBvbmx5IHdoZW4gc2hvdyBuYXZpZ2F0aW9uIGlzIGVuYWJsZWQgYW5kIGRhdGEgbmF2aWdhdG9yIGlzIGNvbXBpbGVkXG4gICAgICAgICAgICAgYW5kIGl0cyBjdXJyZW50IHBhZ2UgaXMgc2V0IHByb3Blcmx5Ki9cbiAgICAgICAgICAgIGlmICh0aGlzLmlzTmF2aWdhdGlvbkVuYWJsZWQoKSAmJiB0aGlzLmRhdGFOYXZpZ2F0b3IuZG4uY3VycmVudFBhZ2UpIHtcbiAgICAgICAgICAgICAgICBzdGFydFJvd0luZGV4ID0gKCh0aGlzLmRhdGFOYXZpZ2F0b3IuZG4uY3VycmVudFBhZ2UgLSAxKSAqICh0aGlzLmRhdGFOYXZpZ2F0b3IubWF4UmVzdWx0cyB8fCAxKSkgKyAxO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ3N0YXJ0Um93SW5kZXgnLCBzdGFydFJvd0luZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIElmIGNvbERlZnMgYXJlIGF2YWlsYWJsZSwgYnV0IG5vdCBhbHJlYWR5IHNldCBvbiB0aGUgZGF0YWdyaWQsIHRoZW4gc2V0IHRoZW0uXG4gICAgICAgICAgICAgKiBUaGlzIHdpbGwgaGFwcGVuIHdoaWxlIHN3aXRjaGluZyBmcm9tIG1hcmt1cCB0byBkZXNpZ24gdGFiLiAqL1xuICAgICAgICAgICAgZ3JpZE9wdGlvbnMgPSB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnZ2V0T3B0aW9ucycpO1xuXG4gICAgICAgICAgICBpZiAoIWdyaWRPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWdyaWRPcHRpb25zLmNvbERlZnMubGVuZ3RoICYmIHRoaXMuZmllbGREZWZzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2NvbERlZnMnLCBnZXRDbG9uZWRPYmplY3QodGhpcy5maWVsZERlZnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIGRhdGEgYW5kIGNvbERlZnMgYXJlIHByZXNlbnQsIGNhbGwgb24gYmVmb3JlIGRhdGEgcmVuZGVyIGV2ZW50XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNkeW5hbWljdGFibGUgJiYgIV8uaXNFbXB0eShuZXdWYWx1ZSkgJiYgZ3JpZE9wdGlvbnMuY29sRGVmcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZWRhdGFyZW5kZXInLCB7JGRhdGE6IHRoaXMuX2dyaWREYXRhLCAkY29sdW1uczogdGhpcy5jb2x1bW5zLCBkYXRhOiB0aGlzLl9ncmlkRGF0YSwgY29sdW1uczogdGhpcy5jb2x1bW5zfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdkYXRhJywgZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuX2dyaWREYXRhKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgZ3JpZERhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ncmlkRGF0YSB8fCBbXTtcbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0ZWRpdGVtKCkge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENsb25lZE9iamVjdCh0aGlzLml0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXy5pc0VtcHR5KHRoaXMuaXRlbXMpKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldENsb25lZE9iamVjdCh0aGlzLml0ZW1zWzBdKTtcbiAgICB9XG5cbiAgICBzZXQgc2VsZWN0ZWRpdGVtKHZhbCkge1xuICAgICAgICAvLyBTZWxlY3QgdGhlIHJvd3MgaW4gdGhlIHRhYmxlIGJhc2VkIG9uIHRoZSBuZXcgc2VsZWN0ZWQgaXRlbXMgcGFzc2VkXG4gICAgICAgIHRoaXMuaXRlbXMubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NlbGVjdFJvd3MnLCB2YWwpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleXByZXNzJywgWyckZXZlbnQnXSkgb25LZXlQcmVzcyAoJGV2ZW50OiBhbnkpIHtcbiAgICAgICAgaWYgKCRldmVudC53aGljaCA9PT0gMTMpIHtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnZW50ZXJrZXlwcmVzcycsIHskZXZlbnQsICRkYXRhOiB0aGlzLmdyaWREYXRhfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGluajogSW5qZWN0b3IsXG4gICAgICAgIHB1YmxpYyBmYjogRm9ybUJ1aWxkZXIsXG4gICAgICAgIHByaXZhdGUgYXBwOiBBcHAsXG4gICAgICAgIHByaXZhdGUgZHluYW1pY0NvbXBvbmVudFByb3ZpZGVyOiBEeW5hbWljQ29tcG9uZW50UmVmUHJvdmlkZXIsXG4gICAgICAgIHByaXZhdGUgc3RhdGVQZXJzaXN0ZW5jZTogU3RhdGVQZXJzaXN0ZW5jZSxcbiAgICAgICAgcHJpdmF0ZSBwYWdpbmF0aW9uU2VydmljZTogUGFnaW5hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdmlld3BvcnQ6IFZpZXdwb3J0LFxuICAgICAgICBAT3B0aW9uYWwoKSBwdWJsaWMgcGFyZW50TGlzdDogTGlzdENvbXBvbmVudCxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGF0YXNldC5iaW5kJykgcHVibGljIGJpbmRkYXRhc2V0LFxuICAgICAgICBAQXR0cmlidXRlKCdkYXRhc291cmNlLmJpbmQnKSBwdWJsaWMgYmluZGRhdGFzb3VyY2UsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ3JlYWRvbmx5Z3JpZCcpIHB1YmxpYyByZWFkb25seWdyaWQsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgdHJ1c3RBc1BpcGU6IFRydXN0QXNQaXBlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRywpO1xuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzKTtcblxuICAgICAgICB0aGlzLm5nZm9ybSA9IGZiLmdyb3VwKHt9KTtcbiAgICAgICAgdGhpcy5hZGRFdmVudHNUb0NvbnRleHQodGhpcy5jb250ZXh0KTtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzVG9SZW1vdmUgPSBbXG4gICAgICAgICAgICAvLyBVcGRhdGVzIHBhZ2luYXRpb24sIGZpbHRlciwgc29ydCBldGMgb3B0aW9ucyBmb3Igc2VydmljZSBhbmQgY3J1ZCB2YXJpYWJsZXNcbiAgICAgICAgICAgIHRoaXMuYXBwLnN1YnNjcmliZSgnY2hlY2stc3RhdGUtcGVyc2lzdGVuY2Utb3B0aW9ucycsIG9wdGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBkYXRhU291cmNlTmFtZSA9IF8uZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ25hbWUnKTtcbiAgICAgICAgICAgICAgICAvLyBpbiBQcmVmYWJzLCB0aGlzLmRhdGFzb3VyY2UgaXMgbm90IHJlc29sdmVkIGF0IHRoZSB0aW1lIG9mIHZhcmlhYmxlIGludm9jYXRpb24sIHNvIGFkZGl0aW9uYWwgY2hlY2sgaXMgcmVxdWlyZWQuXG4gICAgICAgICAgICAgICAgaWYgKCFkYXRhU291cmNlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlTmFtZSA9IGV4dHJhY3REYXRhU291cmNlTmFtZSh0aGlzLmJpbmRkYXRhc291cmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF8uZ2V0KG9wdGlvbnMsICd2YXJpYWJsZS5uYW1lJykgIT09IGRhdGFTb3VyY2VOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3BhZ2VMb2FkICYmIHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYWdlTG9hZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpZGdldFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0gdGhpcy5oYW5kbGVTdGF0ZVBhcmFtcyh3aWRnZXRTdGF0ZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH0gIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignc2VsZWN0Rmlyc3RSb3cnLCB0aGlzLmdyaWRmaXJzdHJvd3NlbGVjdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcblxuICAgICAgICAgICAgLy8gU2hvdyBsb2FkaW5nIHN0YXR1cyBiYXNlZCBvbiB0aGUgdmFyaWFibGUgbGlmZSBjeWNsZVxuICAgICAgICAgICAgdGhpcy5hcHAuc3Vic2NyaWJlKCd0b2dnbGUtdmFyaWFibGUtc3RhdGUnLCBvcHRpb25zID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhc291cmNlICYmIHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLklTX0FQSV9BV0FSRSkgJiYgaXNEYXRhU291cmNlRXF1YWwob3B0aW9ucy52YXJpYWJsZSwgdGhpcy5kYXRhc291cmNlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcGFnZUxvYWQgJiYgdGhpcy5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYWdlTG9hZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkZ2V0U3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0gdGhpcy5oYW5kbGVTdGF0ZVBhcmFtcyh3aWRnZXRTdGF0ZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ3NlbGVjdEZpcnN0Um93JywgdGhpcy5ncmlkZmlyc3Ryb3dzZWxlY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlzRGVmaW5lZCh0aGlzLnZhcmlhYmxlSW5mbGlnaHQpID8gdGhpcy5kZWJvdW5jZWRIYW5kbGVMb2FkaW5nKG9wdGlvbnMpIDogdGhpcy5oYW5kbGVMb2FkaW5nKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgICB0aGlzLmFwcC5zdWJzY3JpYmUoJ3NldHVwLWN1ZC1saXN0ZW5lcicsIHBhcmFtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5uYW1lICE9PSBwYXJhbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2lzRGVwZW5kZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUNoYW5nZSRcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDI1MCkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy50cmlnZ2VyV01FdmVudC5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG5cbiAgICAgICAgbGlzdGVuZXJzVG9SZW1vdmUuZm9yRWFjaCggbCA9PiB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKGwpICk7XG5cbiAgICAgICAgdGhpcy5kZWxldGVva3RleHQgPSB0aGlzLmFwcExvY2FsZS5MQUJFTF9PSztcbiAgICAgICAgdGhpcy5kZWxldGVjYW5jZWx0ZXh0ID0gdGhpcy5hcHBMb2NhbGUuTEFCRUxfQ0FOQ0VMO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlckNvbnRlbnRJbml0KCk7XG4gICAgICAgIHRoaXMuaGVhZGVyQ29uZmlnID0gdGhpcy5oZWFkZXJDb25maWcuZmlsdGVyKHRoaXMuZmlsdGVyRW1wdHlWYWx1ZXMuYmluZCh0aGlzKSk7XG4gICAgICAgIF8ucmVtb3ZlKHRoaXMuZmllbGREZWZzLCBmID0+IGYgPT09IHVuZGVmaW5lZCk7XG4gICAgICAgIGNvbnN0IHJ1bk1vZGVJbml0aWFsUHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgIHNob3dyb3dpbmRleDogJ3Nob3dSb3dJbmRleCcsXG4gICAgICAgICAgICBtdWx0aXNlbGVjdDogJ211bHRpc2VsZWN0JyxcbiAgICAgICAgICAgIHJhZGlvc2VsZWN0OiAnc2hvd1JhZGlvQ29sdW1uJyxcbiAgICAgICAgICAgIGZpbHRlcm51bGxyZWNvcmRzOiAnZmlsdGVyTnVsbFJlY29yZHMnLFxuICAgICAgICAgICAgZW5hYmxlc29ydDogJ2VuYWJsZVNvcnQnLFxuICAgICAgICAgICAgc2hvd2hlYWRlcjogJ3Nob3dIZWFkZXInLFxuICAgICAgICAgICAgZW5hYmxlY29sdW1uc2VsZWN0aW9uOiAnZW5hYmxlQ29sdW1uU2VsZWN0aW9uJyxcbiAgICAgICAgICAgIHNob3duZXdyb3c6ICdzaG93TmV3Um93JyxcbiAgICAgICAgICAgIGdyaWRmaXJzdHJvd3NlbGVjdDogJ3NlbGVjdEZpcnN0Um93J1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLl9saXZlVGFibGVQYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNQYXJ0T2ZMaXZlR3JpZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5yZWFkb25seWdyaWQgfHwgIXRoaXMuZWRpdG1vZGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlYWRvbmx5Z3JpZCA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0bW9kZSA9ICcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1BhcnRPZkxpdmVHcmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG1vZGUgPSB0aGlzLmlzUGFydE9mTGl2ZUdyaWQuZm9ybWxheW91dCA9PT0gJ2lubGluZScgPyBFRElUX01PREUuRk9STSA6IEVESVRfTU9ERS5ESUFMT0c7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0bW9kZSA9IHRoaXMucmVhZG9ubHlncmlkID8gRURJVF9NT0RFLklOTElORSA6ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuY29sRGVmcyA9IHRoaXMuZnVsbEZpZWxkRGVmcztcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5yb3dBY3Rpb25zID0gdGhpcy5yb3dBY3Rpb25zO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmhlYWRlckNvbmZpZyA9IHRoaXMuaGVhZGVyQ29uZmlnO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnJvd0NsYXNzID0gdGhpcy5yb3djbGFzcztcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5lZGl0bW9kZSA9IHRoaXMuZWRpdG1vZGU7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuZm9ybVBvc2l0aW9uID0gdGhpcy5mb3JtcG9zaXRpb247XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuZmlsdGVybW9kZSA9IHRoaXMuZmlsdGVybW9kZTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZWFyY2hMYWJlbCA9IHRoaXMuc2VhcmNobGFiZWw7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuaXNNb2JpbGUgPSBpc01vYmlsZSgpO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLm5hbWUgPSB0aGlzLm5hbWU7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2VjdXJpdHlVdGlscy5waXBlVHJhbnNmb3JtID0gdGhpcy50cnVzdEFzUGlwZTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5uYXZpZ2F0aW9uID0gdGhpcy5uYXZpZ2F0aW9uO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmlzZHluYW1pY3RhYmxlID0gdGhpcy5pc2R5bmFtaWN0YWJsZTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zaG93dmlld2xlc3NidXR0b24gPSB0aGlzLnNob3d2aWV3bGVzc2J1dHRvbjtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5vbmRlbWFuZG1lc3NhZ2UgPSB0aGlzLm9uZGVtYW5kbWVzc2FnZTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy52aWV3bGVzc21lc3NhZ2UgPSB0aGlzLnZpZXdsZXNzbWVzc2FnZTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5sb2FkaW5nZGF0YW1zZyA9IHRoaXMubG9hZGluZ2RhdGFtc2c7XG5cbiAgICAgICAgLy8gV2hlbiBsb2Fkb25kZW1hbmQgcHJvcGVydHkgaXMgZW5hYmxlZChkZWZlcmxvYWQ9XCJ0cnVlXCIpIGFuZCBzaG93IGlzIHRydWUsIG9ubHkgdGhlIGNvbHVtbiB0aXRsZXMgb2YgdGhlIGRhdGF0YWJsZSBhcmUgcmVuZGVyZWQsIHRoZSBkYXRhKGJvZHkgb2YgdGhlIGRhdGF0YWJsZSkgaXMgbm90IGF0IGFsbCByZW5kZXJlZC5cbiAgICAgICAgLy8gQmVjYXVzZSB0aGUgZ3JpZGRhdGEgaXMgc2V0dGluZyBiZWZvcmUgdGhlIGRhdGF0YWJsZSBkb20gaXMgcmVuZGVyZWQgYnV0IHdlIGFyZSBzZW5kaW5nIGVtcHR5IGRhdGEgdG8gdGhlIGRhdGF0YWJsZS5cbiAgICAgICAgaWYgKCFfLmlzRW1wdHkodGhpcy5ncmlkRGF0YSkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuZGF0YSA9IGdldENsb25lZE9iamVjdCh0aGlzLmdyaWREYXRhKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLm1lc3NhZ2VzID0ge1xuICAgICAgICAgICAgJ3NlbGVjdEZpZWxkJzogdGhpcy5hcHBMb2NhbGUuTUVTU0FHRV9TRUxFQ1RfRklFTERcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kYXRhZ3JpZEVsZW1lbnQgPSAkKHRoaXMuX3RhYmxlRWxlbWVudC5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgICB0aGlzLmdyaWRFbGVtZW50ID0gdGhpcy4kZWxlbWVudDtcbiAgICAgICAgdGhpcy4kZWxlbWVudC5jc3Moeydwb3NpdGlvbic6ICdyZWxhdGl2ZSd9KTtcblxuICAgICAgICBfLmZvckVhY2gocnVuTW9kZUluaXRpYWxQcm9wZXJ0aWVzLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh0aGlzW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9uc1t2YWx1ZV0gPSAodGhpc1trZXldID09PSAndHJ1ZScgfHwgdGhpc1trZXldID09PSB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlaGFuZGxlciAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zWydzZWxlY3RGaXJzdFJvdyddID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlbmRlck9wZXJhdGlvbkNvbHVtbnMoKTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5jb2xEZWZzID0gdGhpcy5maWVsZERlZnM7XG5cbiAgICAgICAgdGhpcy5kYXRhZ3JpZEVsZW1lbnQuZGF0YXRhYmxlKHRoaXMuZ3JpZE9wdGlvbnMpO1xuICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ2xvYWRpbmcnLCB0aGlzLmxvYWRpbmdkYXRhbXNnKTtcbiAgICAgICAgLy8gaWYodGhpcy5ncmlkT3B0aW9ucy5kYXRhLmxlbmd0aCB8fCB0aGlzLnZhcmlhYmxlSW5mbGlnaHQpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbG9hZGluZycsIHRoaXMubG9hZGluZ2RhdGFtc2cpO1xuICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdub2RhdGEnLCB0aGlzLm5vZGF0YW1lc3NhZ2UpO1xuICAgICAgICAvLyB9XG5cbiAgICAgICAgdGhpcy5hcHBseVByb3BzLmZvckVhY2goYXJncyA9PiB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCguLi5hcmdzKSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZWRpdG1vZGUgPT09IEVESVRfTU9ERS5RVUlDS19FRElUKSB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50Q2xpY2tCaW5kID0gdGhpcy5fZG9jdW1lbnRDbGlja0JpbmQuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5kb2N1bWVudENsaWNrQmluZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpdmF0ZSBnZXRDb25maWd1cmVkU3RhdGUoKSB7XG4gICAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuY29tcHV0ZU1vZGUodGhpcy5zdGF0ZWhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gbW9kZSAmJiBtb2RlLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVTdGF0ZVBhcmFtcyh3aWRnZXRTdGF0ZSwgb3B0aW9ucykge1xuICAgICAgICBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdzZWxlY3RlZEl0ZW0nKSkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtc0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLm9wdGlvbnMgPSBvcHRpb25zLm9wdGlvbnMgfHwge307XG4gICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3BhZ2luYXRpb24nKSkge1xuICAgICAgICAgICAgb3B0aW9ucy5vcHRpb25zLnBhZ2UgPSB3aWRnZXRTdGF0ZS5wYWdpbmF0aW9uO1xuICAgICAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAnc29ydCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zb3J0U3RhdGVIYW5kbGVyKHdpZGdldFN0YXRlKTtcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9wdGlvbnMub3JkZXJCeSA9IF8uZ2V0KHdpZGdldFN0YXRlLCAnc29ydC5maWVsZCcpICsgJyAnICsgXy5nZXQod2lkZ2V0U3RhdGUsICdzb3J0LmRpcmVjdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAnc2VhcmNoJykpIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU3RhdGVIYW5kbGVyKHdpZGdldFN0YXRlKTtcbiAgICAgICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMub3B0aW9ucy5maWx0ZXJGaWVsZHMgPSB0aGlzLmdldEZpbHRlckZpZWxkcyh3aWRnZXRTdGF0ZS5zZWFyY2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9ucy5vcHRpb25zLnBhZ2UgPSAxO1xuICAgICAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAnc2VhcmNoJykpIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU3RhdGVIYW5kbGVyKHdpZGdldFN0YXRlKTtcbiAgICAgICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMub3B0aW9ucy5maWx0ZXJGaWVsZHMgPSB0aGlzLmdldEZpbHRlckZpZWxkcyh3aWRnZXRTdGF0ZS5zZWFyY2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAnc29ydCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zb3J0U3RhdGVIYW5kbGVyKHdpZGdldFN0YXRlKTtcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9wdGlvbnMub3JkZXJCeSA9IF8uZ2V0KHdpZGdldFN0YXRlLCAnc29ydC5maWVsZCcpICsgJyAnICsgXy5nZXQod2lkZ2V0U3RhdGUsICdzb3J0LmRpcmVjdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJpZ2dlcldNRXZlbnQobmV3VmFsKSB7XG4gICAgICAgIGlmICh0aGlzLmVkaXRtb2RlID09PSAnZGlhbG9nJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgICRpbnZva2VXYXRjaGVycyh0cnVlKTtcbiAgICAgICAgdGhpcy5hcHAubm90aWZ5KCd3bS1ldmVudCcsIHtldmVudE5hbWU6ICdzZWxlY3RlZEl0ZW1DaGFuZ2UnLCB3aWRnZXROYW1lOiB0aGlzLm5hbWUsIHJvdzogbmV3VmFsLCB0YWJsZTogdGhpc30pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc29ydFN0YXRlSGFuZGxlcih3aWRnZXRTdGF0ZSkge1xuICAgICAgICBjb25zdCAkZ3JpZEVsZW1lbnQgPSB0aGlzLmRhdGFncmlkRWxlbWVudDtcbiAgICAgICAgY29uc3QgJHNvcnRJY29uID0gICRncmlkRWxlbWVudC5maW5kKCd0aFtkYXRhLWNvbC1maWVsZD1cIicgKyBfLmdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQuZmllbGQnKSArICdcIl0gLnNvcnQtaWNvbicpO1xuICAgICAgICBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdzb3J0LmRpcmVjdGlvbicpID09PSAnYXNjJyAmJiAkc29ydEljb24ubGVuZ3RoKSAge1xuICAgICAgICAgICAgJHNvcnRJY29uLmFkZENsYXNzKCdhc2Mgd2kgd2ktbG9uZy1hcnJvdy11cCcpO1xuICAgICAgICB9IGVsc2UgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAnc29ydC5kaXJlY3Rpb24nKSA9PT0gJ2Rlc2MnICAmJiAkc29ydEljb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICAkc29ydEljb24uYWRkQ2xhc3MoJ2Rlc2Mgd2kgd2ktbG9uZy1hcnJvdy1kb3duJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNlYXJjaFN0YXRlSGFuZGxlcih3aWRnZXRTdGF0ZSkge1xuICAgICAgICBpZiAoXy5pc0FycmF5KHdpZGdldFN0YXRlLnNlYXJjaCkpIHtcbiAgICAgICAgICAgIF8uZm9yRWFjaCggd2lkZ2V0U3RhdGUuc2VhcmNoLCAoZmlsdGVyT2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucm93RmlsdGVyW2ZpbHRlck9iai5maWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dGaWx0ZXJbZmlsdGVyT2JqLmZpZWxkXS52YWx1ZSA9IGZpbHRlck9iai52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dGaWx0ZXJbZmlsdGVyT2JqLmZpZWxkXS5tYXRjaE1vZGUgPSBmaWx0ZXJPYmoubWF0Y2hNb2RlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0ZpbHRlcltmaWx0ZXJPYmouZmllbGRdLnR5cGUgPSBmaWx0ZXJPYmoudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQodGhpcy5yb3dGaWx0ZXJDb21wbGllZFRsW2ZpbHRlck9iai5maWVsZF0pLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gZmlsdGVyT2JqLnR5cGUgPT09ICdpbnRlZ2VyJyA/IHBhcnNlSW50KGZpbHRlck9iai52YWx1ZSkgOiBmaWx0ZXJPYmoudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMucm93RmlsdGVyQ29tcGxpZWRUbFtmaWx0ZXJPYmouZmllbGRdKS5maW5kKCdpbnB1dCcpLnZhbChmaWx0ZXJPYmoudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCAkZ3JpZEVsZW1lbnQgPSB0aGlzLmRhdGFncmlkRWxlbWVudDtcbiAgICAgICAgICAgICRncmlkRWxlbWVudC5maW5kKCdbZGF0YS1lbGVtZW50PVwiZGdTZWFyY2hUZXh0XCJdJykudmFsKHdpZGdldFN0YXRlLnNlYXJjaC52YWx1ZSk7XG4gICAgICAgICAgICAkZ3JpZEVsZW1lbnQuZmluZCgnW2RhdGEtZWxlbWVudD1cImRnRmlsdGVyVmFsdWVcIl0nKS52YWwod2lkZ2V0U3RhdGUuc2VhcmNoLmZpZWxkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZXMgZW1wdHkgdmFsdWVzIGluIGhlYWRlckNvbmZpZyBhcnJheS5cbiAgICBmaWx0ZXJFbXB0eVZhbHVlcyhpdGVtKSB7XG4gICAgICAgIGlmIChpdGVtLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIGl0ZW0uY29sdW1ucyA9IGl0ZW0uY29sdW1ucy5maWx0ZXIodGhpcy5maWx0ZXJFbXB0eVZhbHVlcy5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbSAhPT0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBDb21wYXJlcyB0aGUgcHJldkZpbHRlckNyaXRlcmlhIFJ1bGVzIHdpdGggdGhlIG5ldyBydWxlc1xuICAgIGNvbXBhcmVGaWx0ZXJFeHByZXNzaW9ucyhwcmV2RmlsdGVycywgbmV3RmlsdGVycykge1xuICAgICAgICByZXR1cm4gISEoKHByZXZGaWx0ZXJzLmxlbmd0aCA9PT0gbmV3RmlsdGVycy5sZW5ndGgpICYmIChfLmlzRXF1YWwocHJldkZpbHRlcnMsIG5ld0ZpbHRlcnMpKSk7XG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSB0YWJsZSBsYXN0QWN0aW9uUGVyZm9ybWVkIHRvIEZpbHRlciBDcml0ZXJpYSBhbmQgbWFpbnRhaW4gdGhlIHByZXZGaWx0ZXJFeHByZXNzaW9uXG4gICAgc2V0TGFzdEFjdGlvblRvRmlsdGVyQ3JpdGVyaWEoKSB7XG4gICAgICAgIHRoaXMucHJldkZpbHRlckV4cHJlc3Npb24gPSBfLmdldCh0aGlzLmRhdGFzb3VyY2UsICdmaWx0ZXJFeHByZXNzaW9ucy5ydWxlcycpID8gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuZGF0YXNvdXJjZS5maWx0ZXJFeHByZXNzaW9ucy5ydWxlcykgOiBnZXRDbG9uZWRPYmplY3QoW10uY29uY2F0KHRoaXMuZGF0YXNvdXJjZS5kYXRhQmluZGluZykpO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldExhc3RBY3Rpb25QZXJmb3JtZWQodGhpcy5ncmlkT3B0aW9ucy5BQ1RJT05TLkZJTFRFUl9DUklURVJJQSk7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0SXNTZWFyY2hUcmlnZXJyZWQodHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSB0YWJsZSBsYXN0QWN0aW9uUGVyZm9ybWVkIHRvIERhdGFzZXQgdXBkYXRlIGFuZCBzZXQgaXNEYXRhc2V0VXBkYXRlZCB0byB0cnVlXG4gICAgLy8gRml4IGZvciBbV01TLTIyMzIzXS10aGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBkYXRhc2V0IGlzIGJlaW5nIHVwZGF0ZWRcbiAgICBzZXRMYXN0QWN0aW9uVG9EYXRhc2V0VXBkYXRlKCkge1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldExhc3RBY3Rpb25QZXJmb3JtZWQodGhpcy5ncmlkT3B0aW9ucy5BQ1RJT05TLkRBVEFTRVRfVVBEQVRFKTtcbiAgICAgICAgLy8gIEZpeCBmb3IgW1dNUy0yMzI2M106IHJlc2V0IGN1cnJlbnRQYWdlIHRvIDEgYXMgZGF0YXNldCBpcyBiZWluZyBjaGFuZ2VkXG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0Q3VycmVudFBhZ2UoMSk7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0SXNEYXRhc2V0VXBkYXRlZCh0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIGxhc3RBY3Rpb25QZXJmb3JtZWQgdG8gRmlsdGVyX0NyaXRlcmlhLCB3aGVuIHRoZXJlIGlzIGNoYW5nZSBpbiB0aGUgVmFyaWFibGUgZmlsdGVyIGNyaXRlcmlhIHJ1bGVzXG4gICAgY2hlY2tJZlZhckZpbHRlcnNBcHBsaWVkKCkge1xuICAgICAgICBpZiAoIV8uaXNFbXB0eShfLmdldCh0aGlzLmRhdGFzb3VyY2UsICdmaWx0ZXJFeHByZXNzaW9ucy5ydWxlcycpKSB8fCAhXy5pc0VtcHR5KF8uZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ2RhdGFCaW5kaW5nJykpKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RmlsdGVyRXhwciA9IF8uZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ2ZpbHRlckV4cHJlc3Npb25zLnJ1bGVzJykgPyB0aGlzLmRhdGFzb3VyY2UuZmlsdGVyRXhwcmVzc2lvbnMucnVsZXMgOiBbXS5jb25jYXQodGhpcy5kYXRhc291cmNlLmRhdGFCaW5kaW5nKTtcbiAgICAgICAgICAgIGNvbnN0IGlzRXF1YWwgPSB0aGlzLmNvbXBhcmVGaWx0ZXJFeHByZXNzaW9ucyh0aGlzLnByZXZGaWx0ZXJFeHByZXNzaW9uLCBjdXJyZW50RmlsdGVyRXhwcik7XG4gICAgICAgICAgICBpZiAoIWlzRXF1YWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldExhc3RBY3Rpb25Ub0ZpbHRlckNyaXRlcmlhKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB3YXRjaFZhcmlhYmxlRGF0YVNldChuZXdWYWwpIHtcbiAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgLy8gQ2hlY2sgZm9yIFZhcmlhYmxlIGZpbHRlcnMgaWYgYXBwbGllZFxuICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy5pc05hdlR5cGVTY3JvbGxPck9uZGVtYW5kKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhckZpbHRlcnNBcHBsaWVkKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU3RhdGUgaGFuZGxpbmcgZm9yIHN0YXRpYyB2YXJpYWJsZXNcbiAgICAgICAgaWYgKF8uZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ2NhdGVnb3J5JykgPT09ICd3bS5WYXJpYWJsZScgJiYgdGhpcy5fcGFnZUxvYWQgJiYgdGhpcy5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdzZWxlY3RlZEl0ZW0nKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkSXRlbXNFeGlzdCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ3NlbGVjdEZpcnN0Um93JywgdGhpcy5ncmlkZmlyc3Ryb3dzZWxlY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAnc2VhcmNoJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFN0YXRlSGFuZGxlcih3aWRnZXRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTb3J0SGFuZGxlcih3aWRnZXRTdGF0ZS5zZWFyY2gsIHVuZGVmaW5lZCwgJ3NlYXJjaCcsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAnc29ydCcpKSB7XG4gICAgICAgICAgICAgICB0aGlzLnNlYXJjaFNvcnRIYW5kbGVyKHdpZGdldFN0YXRlLnNvcnQsIHVuZGVmaW5lZCwgJ3NvcnQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRTdGF0ZUhhbmRsZXIod2lkZ2V0U3RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAncGFnaW5hdGlvbicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLnBhZ2VDaGFuZ2VkKHtwYWdlOiB3aWRnZXRTdGF0ZS5wYWdpbmF0aW9ufSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWZ0ZXIgdGhlIHNldHRpbmcgdGhlIHdhdGNoIG9uIG5hdmlnYXRvciwgZGF0YXNldCBpcyB0cmlnZ2VyZWQgd2l0aCB1bmRlZmluZWQuIEluIHRoaXMgY2FzZSwgcmV0dXJuIGhlcmUuXG4gICAgICAgIGlmICh0aGlzLmRhdGFOYXZpZ2F0b3JXYXRjaGVkICYmIF8uaXNVbmRlZmluZWQobmV3VmFsKSAmJiB0aGlzLl9fZnVsbERhdGEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB2YXJpYWJsZSBpcyBpbiBsb2FkaW5nIHN0YXRlLCBzaG93IGxvYWRpbmcgaWNvblxuICAgICAgICBpZiAodGhpcy52YXJpYWJsZUluZmxpZ2h0ICYmICF0aGlzLmluZlNjcm9sbCkge1xuICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdsb2FkaW5nJywgdGhpcy5sb2FkaW5nZGF0YW1zZyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQgPSBnZXRWYWxpZEpTT04obmV3VmFsKTtcblxuICAgICAgICAvLyBDb252ZXJ0aW5nIG5ld3ZhbCB0byBvYmplY3QgaWYgaXQgaXMgYW4gT2JqZWN0IHRoYXQgY29tZXMgYXMgYSBzdHJpbmcgXCJ7XCJkYXRhXCIgOiAxfVwiXG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIG5ld1ZhbCA9IHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNvcnRFeHAgPSB0aGlzLmdldFNvcnRFeHByKCk7XG4gICAgICAgIGNvbnN0IHNvcnRFeHBBcnIgPSBzb3J0RXhwLnNwbGl0KCcgJyk7XG4gICAgICAgIGlmIChzb3J0RXhwICYmIHNvcnRFeHBBcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnNvcnRJbmZvID0ge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA6IHNvcnRFeHBBcnJbMV0sXG4gICAgICAgICAgICAgICAgZmllbGQ6ICBzb3J0RXhwQXJyWzBdXG5cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvKlJldHVybiBpZiBkYXRhIGlzIGludmFsaWQuKi9cbiAgICAgICAgaWYgKCF0aGlzLmlzRGF0YVZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHZhbHVlIGlzIGVtcHR5IG9yIGluIHN0dWRpbyBtb2RlLCBkb250IGVuYWJsZSB0aGUgbmF2aWdhdGlvblxuICAgICAgICBpZiAobmV3VmFsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zaG93bmF2aWdhdGlvbiAmJiAhdGhpcy5kYXRhTmF2aWdhdG9yV2F0Y2hlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlUGFnZU5hdmlnYXRpb24oKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0UGFnZU5hdmlnYXRpb24oKTtcbiAgICAgICAgICAgIC8vIElmIHRoZSBkYXRhc2V0IGlzIHVuZGVmaW5lZCBvciBlbXB0eSBvciB0YWJsZSBpcyBib3VuZCB0byBzdGF0aWMgdmFyaWFibGUgdGhlbiBzZXQgdmFyaWFibGVJbmZsaWdodCB0byBmYWxzZSBpbm9yZGVyIHRvIHVwZGF0ZSB0aGUgc3RhdHVzXG4gICAgICAgICAgICBpZiAobmV3VmFsID09PSAnJyB8fCBuZXdWYWwgPT09IHVuZGVmaW5lZCB8fCBfLmdldCh0aGlzLmRhdGFzb3VyY2UsICdjYXRlZ29yeScpID09PSAnd20uVmFyaWFibGUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YXJpYWJsZUluZmxpZ2h0ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKmZvciBydW4gbW9kZSwgZGlzYWJsaW5nIHRoZSBsb2FkZXIgYW5kIHNob3dpbmcgbm8gZGF0YSBmb3VuZCBtZXNzYWdlIGlmIGRhdGFzZXQgaXMgbm90IHZhbGlkKi9cbiAgICAgICAgICAgIGlmICghdGhpcy52YXJpYWJsZUluZmxpZ2h0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdub2RhdGEnLCB0aGlzLm5vZGF0YW1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignc2VsZWN0Rmlyc3RSb3cnLCB0aGlzLmdyaWRmaXJzdHJvd3NlbGVjdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaXNOYXZpZ2F0aW9uRW5hYmxlZCgpICYmIG5ld1ZhbCkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0ZpbHRlcnNBcHBsaWVkKHRoaXMuZ2V0U29ydEV4cHIoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8uaXNPYmplY3QobmV3VmFsKSB8fCBuZXdWYWwgPT09ICcnIHx8IChuZXdWYWwgJiYgbmV3VmFsLmRhdGFWYWx1ZSA9PT0gJycpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudmFyaWFibGVJbmZsaWdodCkge1xuICAgICAgICAgICAgICAgIC8vIElmIHZhcmlhYmxlIGhhcyBmaW5pc2hlZCBsb2FkaW5nIGFuZCByZXN1bHRTZXQgaXMgZW1wdHksIGVuZGVyIGVtcHR5IGRhdGFcbiAgICAgICAgICAgICAgICB0aGlzLnNldEdyaWREYXRhKFtdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3VmFsKSB7XG4gICAgICAgICAgICB0aGlzLnBvcHVsYXRlR3JpZERhdGEobmV3VmFsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuZG9jdW1lbnRDbGlja0JpbmQpO1xuICAgICAgICBpZiAodGhpcy5uYXZpZ2F0b3JSZXN1bHRXYXRjaCkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JSZXN1bHRXYXRjaC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm5hdmlnYXRvck1heFJlc3VsdFdhdGNoKSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvck1heFJlc3VsdFdhdGNoLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBhZGRSb3dJbmRleChyb3cpIHtcbiAgICAgICAgY29uc3Qgcm93RGF0YSA9IGdldENsb25lZE9iamVjdChyb3cpO1xuICAgICAgICBjb25zdCByb3dJbmRleCA9IF8uaW5kZXhPZih0aGlzLmdyaWRPcHRpb25zLmRhdGEsIHJvdyk7XG4gICAgICAgIGlmIChyb3dJbmRleCA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiByb3c7XG4gICAgICAgIH1cbiAgICAgICAgcm93RGF0YS4kaW5kZXggPSByb3dJbmRleCArIDE7XG4gICAgICAgIHJvd0RhdGEuJGlzRmlyc3QgPSByb3dEYXRhLiRpbmRleCA9PT0gMTtcbiAgICAgICAgcm93RGF0YS4kaXNMYXN0ID0gdGhpcy5ncmlkRGF0YS5sZW5ndGggPT09IHJvd0RhdGEuJGluZGV4O1xuICAgICAgICByZXR1cm4gcm93RGF0YTtcbiAgICB9XG5cbiAgICBhZGRFdmVudHNUb0NvbnRleHQoY29udGV4dCkge1xuICAgICAgICBjb250ZXh0LmFkZE5ld1JvdyA9ICgpID0+IHRoaXMuYWRkTmV3Um93KCk7XG4gICAgICAgIGNvbnRleHQuZGVsZXRlUm93ID0gKCkgPT4gdGhpcy5kZWxldGVSb3coKTtcbiAgICAgICAgY29udGV4dC5lZGl0Um93ID0gKCkgPT4gdGhpcy5lZGl0Um93KCk7XG4gICAgfVxuXG4gICAgZXhlY3V0ZShvcGVyYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKFtEYXRhU291cmNlLk9wZXJhdGlvbi5JU19BUElfQVdBUkUsIERhdGFTb3VyY2UuT3BlcmF0aW9uLklTX1BBR0VBQkxFLCBEYXRhU291cmNlLk9wZXJhdGlvbi5TVVBQT1JUU19TRVJWRVJfRklMVEVSXS5pbmNsdWRlcyhvcGVyYXRpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZSA/IHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKG9wZXJhdGlvbiwgb3B0aW9ucykgOiB7fTtcbiAgICB9XG5cbiAgICBpc05hdmlnYXRpb25FbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG93bmF2aWdhdGlvbiAmJiB0aGlzLmRhdGFOYXZpZ2F0b3IgJiYgdGhpcy5kYXRhTmF2aWdhdG9yV2F0Y2hlZDtcbiAgICB9XG5cbiAgICBnZXRDbG9uZWRSb3dPYmplY3Qocm93RGF0YSkge1xuICAgICAgICBjb25zdCByb3cgPSBnZXRDbG9uZWRPYmplY3Qocm93RGF0YSk7XG4gICAgICAgIHJvdy5nZXRQcm9wZXJ0eSA9IGZpZWxkID0+IHtcbiAgICAgICAgICAgIHJldHVybiBfLmdldChyb3csIGZpZWxkKTtcbiAgICAgICAgfTtcbiAgICAgICAgcm93LiRpc0ZpcnN0ID0gcm93LiRpbmRleCA9PT0gMTtcbiAgICAgICAgcm93LiRpc0xhc3QgPSB0aGlzLmdyaWREYXRhLmxlbmd0aCA9PT0gcm93LiRpbmRleDtcbiAgICAgICAgZGVsZXRlIHJvdy4kJGluZGV4O1xuICAgICAgICBkZWxldGUgcm93LiQkcGs7XG4gICAgICAgIHJldHVybiByb3c7XG4gICAgfVxuXG4gICAgaGFuZGxlTG9hZGluZyhkYXRhKSB7XG4gICAgICAgIHRoaXMudmFyaWFibGVJbmZsaWdodCA9IGRhdGEuYWN0aXZlO1xuICAgICAgICAvLyBiYXNlZCBvbiB0aGUgYWN0aXZlIHN0YXRlIGFuZCByZXNwb25zZSB0b2dnbGluZyB0aGUgJ2xvYWRpbmcgZGF0YS4uLicgYW5kICdubyBkYXRhIGZvdW5kJyBtZXNzYWdlcy5cbiAgICAgICAgaWYgKGRhdGEuYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ2xvYWRpbmcnLCB0aGlzLmxvYWRpbmdkYXRhbXNnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIGdyaWQgaXMgaW4gZWRpdCBtb2RlIG9yIGdyaWQgaGFzIGRhdGEsIGRvbnQgc2hvdyB0aGUgbm8gZGF0YSBtZXNzYWdlXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNHcmlkRWRpdE1vZGUgJiYgXy5pc0VtcHR5KHRoaXMuZGF0YXNldCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ25vZGF0YScsIHRoaXMubm9kYXRhbWVzc2FnZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAncmVhZHknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldERpc2FibGVkT25GaWVsZChvcGVyYXRpb24sIGNvbERlZiwgd2lkZ2V0VHlwZSkge1xuICAgICAgICBpZiAob3BlcmF0aW9uICE9PSAnbmV3JyAmJiBjb2xEZWZbJ3ByaW1hcnkta2V5J10gJiYgY29sRGVmLmdlbmVyYXRvciA9PT0gJ2Fzc2lnbmVkJyAmJiAhY29sRGVmWydyZWxhdGVkLWVudGl0eS1uYW1lJ10gJiYgIWNvbERlZi5wZXJpb2QpIHtcbiAgICAgICAgICAgIGNvbERlZlt3aWRnZXRUeXBlXS5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldEZvcm1Db250cm9sKGN0cmwpIHtcbiAgICAgICAgY3RybC5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgICAgY3RybC5tYXJrQXNQcmlzdGluZSgpO1xuICAgIH1cblxuICAgIGNsZWFyRm9ybShuZXdSb3c/KSB7XG4gICAgICAgIGNvbnN0IGN0cmxzID0gdGhpcy5uZ2Zvcm0uY29udHJvbHM7XG4gICAgICAgIF8ua2V5cyh0aGlzLm5nZm9ybS5jb250cm9scykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgLy8gSWYgbmV3IHJvdywgY2xlYXIgdGhlIGNvbnRyb2xzIGluIHRoZSBuZXcgcm93LiBFbHNlLCBjbGVhciB0aGUgY29udHJvbHMgaW4gZWRpdCByb3dcbiAgICAgICAgICAgIGlmICgha2V5LmVuZHNXaXRoKCdfZmlsdGVyJykgJiYgKChrZXkuZW5kc1dpdGgoJ19uZXcnKSAmJiBuZXdSb3cpIHx8ICgha2V5LmVuZHNXaXRoKCdfbmV3JykgJiYgIW5ld1JvdykpKSB7XG4gICAgICAgICAgICAgICAgY3RybHNba2V5XS5zZXRWYWx1ZSgnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldEZvcm1Db250cm9sKGN0cmxzW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzaG93RmllbGRCYXNlZE9uU2NyZWVuVHlwZShmaWVsZCkge1xuICAgICAgICBsZXQgc2hvd0ZpZWxkO1xuICAgICAgICBpZiAoaXNNb2JpbGUoKSAmJiB0aGlzLnZpZXdwb3J0LmlzTW9iaWxlVHlwZSkge1xuICAgICAgICAgICAgc2hvd0ZpZWxkID0gZmllbGQubW9iaWxlRGlzcGxheTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZpZXdwb3J0LmlzVGFibGV0VHlwZSkge1xuICAgICAgICAgICAgc2hvd0ZpZWxkID0gZmllbGQudGFibGV0RGlzcGxheTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNob3dGaWVsZCA9IGZpZWxkLnBjRGlzcGxheTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2hvd0ZpZWxkO1xuICAgIH1cblxuICAgIC8qIENoZWNrIHdoZXRoZXIgaXQgaXMgbm9uLWVtcHR5IHJvdy4gKi9cbiAgICBpc0VtcHR5UmVjb3JkKHJlY29yZCkge1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocmVjb3JkKTtcbiAgICAgICAgbGV0IGRhdGEsXG4gICAgICAgICAgICBpc0Rpc3BsYXllZDtcblxuICAgICAgICByZXR1cm4gcHJvcGVydGllcy5ldmVyeSgocHJvcCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGRhdGEgPSByZWNvcmRbcHJvcF07XG4gICAgICAgICAgICAvKiBJZiBmaWVsZERlZnMgYXJlIG1pc3NpbmcsIHNob3cgYWxsIGNvbHVtbnMgaW4gZGF0YS4gKi9cbiAgICAgICAgICAgIGlzRGlzcGxheWVkID0gKHRoaXMuZmllbGREZWZzLmxlbmd0aCAmJiBpc0RlZmluZWQodGhpcy5maWVsZERlZnNbaW5kZXhdKSAmJiB0aGlzLnNob3dGaWVsZEJhc2VkT25TY3JlZW5UeXBlKHRoaXMuZmllbGREZWZzW2luZGV4XSkpIHx8IHRydWU7XG4gICAgICAgICAgICAvKlZhbGlkYXRpbmcgb25seSB0aGUgZGlzcGxheWVkIGZpZWxkcyovXG4gICAgICAgICAgICBpZiAoaXNEaXNwbGF5ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGRhdGEgPT09IG51bGwgfHwgZGF0YSA9PT0gdW5kZWZpbmVkIHx8IGRhdGEgPT09ICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiBGdW5jdGlvbiB0byByZW1vdmUgdGhlIGVtcHR5IGRhdGEuICovXG4gICAgcmVtb3ZlRW1wdHlSZWNvcmRzKHNlcnZpY2VEYXRhKSB7XG4gICAgICAgIGNvbnN0IGFsbFJlY29yZHMgPSBzZXJ2aWNlRGF0YTtcbiAgICAgICAgbGV0IGZpbHRlcmVkRGF0YSA9IFtdO1xuICAgICAgICBpZiAoYWxsUmVjb3JkcyAmJiBhbGxSZWNvcmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgLypDb21wYXJpbmcgYW5kIHB1c2hpbmcgdGhlIG5vbi1lbXB0eSBkYXRhIGNvbHVtbnMqL1xuICAgICAgICAgICAgZmlsdGVyZWREYXRhID0gYWxsUmVjb3Jkcy5maWx0ZXIocmVjb3JkID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVjb3JkICYmICF0aGlzLmlzRW1wdHlSZWNvcmQocmVjb3JkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWx0ZXJlZERhdGE7XG4gICAgfVxuXG4gICAgc2V0R3JpZERhdGEoc2VydmVyRGF0YSkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5maWx0ZXJudWxscmVjb3JkcyA/ICB0aGlzLnJlbW92ZUVtcHR5UmVjb3JkcyhzZXJ2ZXJEYXRhKSA6IHNlcnZlckRhdGE7XG4gICAgICAgIC8vIGZpeCBmb3IgW1dNUy0yNDAxMl0gc2V0IHZhcmlhYmxlaW5mbGlnaHQgZmxhZyB0byBmYWxzZSBmb3Igc3RhdGljIHZhcmlhYmxlc1xuICAgICAgICAvLyBJZiB0aGUgdGFibGUgaXMgYm91bmQgdG8gc29tZSB3aWRnZXQgYW5kIG5vdCBib3VuZCB0byBhbnkgdmFyaWFibGUgKGV4OiBUYWJsZTEuc2VsZWN0ZWRJdGVtKSB0aGVuIHNldCB2YXJpYWJsZUluZmxpZ2h0IHRvIGZhbHNlXG4gICAgICAgIGlmIChfLmdldCh0aGlzLmRhdGFzb3VyY2UsICdjYXRlZ29yeScpID09PSAnd20uVmFyaWFibGUnIHx8IF8uZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ2NhdGVnb3J5JykgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZUluZmxpZ2h0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnZhcmlhYmxlSW5mbGlnaHQpIHtcbiAgICAgICAgICAgIGlmIChkYXRhICYmIChkYXRhLmxlbmd0aCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ25vZGF0YScsIHRoaXMubm9kYXRhbWVzc2FnZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAncmVhZHknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWREYXRhID0gZGF0YTtcbiAgICB9XG5cbiAgICBzZXREYXRhR3JpZE9wdGlvbihvcHRpb25OYW1lLCBuZXdWYWwsIGZvcmNlU2V0ID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRhdGFncmlkRWxlbWVudCB8fCAhdGhpcy5kYXRhZ3JpZEVsZW1lbnQuZGF0YXRhYmxlIHx8ICF0aGlzLmRhdGFncmlkRWxlbWVudC5kYXRhdGFibGUoJ2luc3RhbmNlJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb24gPSB7fTtcbiAgICAgICAgaWYgKGlzRGVmaW5lZCAmJiAoIV8uaXNFcXVhbChuZXdWYWwsIHRoaXMuZ3JpZE9wdGlvbnNbb3B0aW9uTmFtZV0pIHx8IGZvcmNlU2V0KSkge1xuICAgICAgICAgICAgb3B0aW9uW29wdGlvbk5hbWVdID0gbmV3VmFsO1xuICAgICAgICAgICAgdGhpcy5kYXRhZ3JpZEVsZW1lbnQuZGF0YXRhYmxlKCdvcHRpb24nLCBvcHRpb24pO1xuICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9uc1tvcHRpb25OYW1lXSA9IG5ld1ZhbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNhbGxEYXRhR3JpZE1ldGhvZCguLi5hcmdzKSB7XG4gICAgICAgIGlmICghdGhpcy5kYXRhZ3JpZEVsZW1lbnQgfHwgIXRoaXMuZGF0YWdyaWRFbGVtZW50LmRhdGF0YWJsZSgnaW5zdGFuY2UnKSkge1xuICAgICAgICAgICAgdGhpcy5hcHBseVByb3BzLnNldChhcmdzWzFdLCBhcmdzKTtcbiAgICAgICAgICAgIHJldHVybjsgLy8gSWYgZGF0YWdyaWQgaXMgbm90IGluaXRpbGlhemVkIG9yIGRlc3Ryb3llZCwgcmV0dXJuIGhlcmVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhZ3JpZEVsZW1lbnQuZGF0YXRhYmxlLmFwcGx5KHRoaXMuZGF0YWdyaWRFbGVtZW50LCBhcmdzKTtcbiAgICB9XG5cbiAgICByZW5kZXJPcGVyYXRpb25Db2x1bW5zKCkge1xuICAgICAgICBsZXQgcm93QWN0aW9uQ29sLFxuICAgICAgICAgICAgaW5zZXJ0UG9zaXRpb247XG5cbiAgICAgICAgY29uc3Qgcm93T3BlcmF0aW9uc0NvbHVtbiA9IGdldFJvd09wZXJhdGlvbnNDb2x1bW4oKSxcbiAgICAgICAgICAgIGNvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6IHJvd09wZXJhdGlvbnNDb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgJ2ZpZWxkJzogcm93T3BlcmF0aW9uc0NvbHVtbi5maWVsZCxcbiAgICAgICAgICAgICAgICAnaXNQcmVkZWZpbmVkJzogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgLy8gUmV0dXJuIGlmIG5vIGZpZWxkRGVmcyBhcmUgcHJlc2VudFxuICAgICAgICBpZiAoIXRoaXMuZmllbGREZWZzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcm93QWN0aW9uQ29sID0gXy5maW5kKHRoaXMuZnVsbEZpZWxkRGVmcywgeydmaWVsZCc6IFJPV19PUFNfRklFTEQsIHR5cGU6ICdjdXN0b20nfSk7IC8vIENoZWNrIGlmIGNvbHVtbiBpcyBmZXRjaGVkIGZyb20gbWFya3VwXG4gICAgICAgIF8ucmVtb3ZlKHRoaXMuZmllbGREZWZzLCB7dHlwZTogJ2N1c3RvbScsIGZpZWxkOiBST1dfT1BTX0ZJRUxEfSk7IC8vIFJlbW92aW5nIG9wZXJhdGlvbnMgY29sdW1uXG4gICAgICAgIF8ucmVtb3ZlKHRoaXMuaGVhZGVyQ29uZmlnLCB7ZmllbGQ6IHJvd09wZXJhdGlvbnNDb2x1bW4uZmllbGR9KTtcblxuICAgICAgICAvKkFkZCB0aGUgY29sdW1uIGZvciByb3cgb3BlcmF0aW9ucyBvbmx5IGlmIGF0LWxlYXN0IG9uZSBvcGVyYXRpb24gaGFzIGJlZW4gZW5hYmxlZC4qL1xuICAgICAgICBpZiAodGhpcy5yb3dBY3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHJvd0FjdGlvbkNvbCkgeyAvLyBJZiBjb2x1bW4gaXMgcHJlc2VudCBpbiBtYXJrdXAsIHB1c2ggdGhlIGNvbHVtbiBvciBwdXNoIHRoZSBkZWZhdWx0IGNvbHVtblxuICAgICAgICAgICAgICAgIGluc2VydFBvc2l0aW9uID0gcm93QWN0aW9uQ29sLnJvd2FjdGlvbnNwb3NpdGlvbiA/IF8udG9OdW1iZXIocm93QWN0aW9uQ29sLnJvd2FjdGlvbnNwb3NpdGlvbikgOiB0aGlzLmZpZWxkRGVmcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZERlZnMuc3BsaWNlKGluc2VydFBvc2l0aW9uLCAwLCByb3dBY3Rpb25Db2wpO1xuICAgICAgICAgICAgICAgIGlmIChpbnNlcnRQb3NpdGlvbiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhlYWRlckNvbmZpZy51bnNoaWZ0KGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJDb25maWcucHVzaChjb25maWcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZERlZnMucHVzaChyb3dPcGVyYXRpb25zQ29sdW1uKTtcbiAgICAgICAgICAgICAgICB0aGlzLmhlYWRlckNvbmZpZy5wdXNoKGNvbmZpZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignaGVhZGVyQ29uZmlnJywgdGhpcy5oZWFkZXJDb25maWcpO1xuICAgIH1cblxuICAgIGVuYWJsZVBhZ2VOYXZpZ2F0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhc2V0ICYmIHRoaXMuYmluZGRhdGFzZXQgJiYgdGhpcy5kYXRhTmF2aWdhdG9yKSB7XG4gICAgICAgICAgICAvKkNoZWNrIGZvciBzYW5pdHkqL1xuICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yV2F0Y2hlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JSZXN1bHRXYXRjaC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLypSZWdpc3RlciBhIHdhdGNoIG9uIHRoZSBcInJlc3VsdFwiIHByb3BlcnR5IG9mIHRoZSBcImRhdGFOYXZpZ2F0b3JcIiBzbyB0aGF0IHRoZSBwYWdpbmF0ZWQgZGF0YSBpcyBkaXNwbGF5ZWQgaW4gdGhlIGxpdmUtbGlzdC4qL1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JSZXN1bHRXYXRjaCA9IHRoaXMuZGF0YU5hdmlnYXRvci5yZXN1bHRFbWl0dGVyLnN1YnNjcmliZSgobmV3VmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgLyogQ2hlY2sgZm9yIHNhbml0eS4gKi9cbiAgICAgICAgICAgICAgICBpZiAoaXNEZWZpbmVkKG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2F0Y2ggd2lsbCBub3QgYmUgdHJpZ2dlcmVkIGlmIGRhdGFzZXQgYW5kIG5ldyB2YWx1ZSBhcmUgZXF1YWwuIFNvIHRyaWdnZXIgdGhlIHByb3BlcnR5IGNoYW5nZSBoYW5kbGVyIG1hbnVhbGx5XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaGFwcGVucyBpbiBjYXNlLCBpZiBkYXRhc2V0IGlzIGRpcmVjdGx5IHVwZGF0ZWQuXG4gICAgICAgICAgICAgICAgICAgIGlmIChfLmlzRXF1YWwodGhpcy5kYXRhc2V0LCBuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndhdGNoVmFyaWFibGVEYXRhU2V0KG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXy5pc0FycmF5KG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZGdldC5kYXRhc2V0ID0gW10uY29uY2F0KG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF8uaXNPYmplY3QobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LmRhdGFzZXQgPSBfLmV4dGVuZCh7fSwgbmV3VmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53aWRnZXQuZGF0YXNldCA9IG5ld1ZhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LmRhdGFzZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgICAgICAvKkRlLXJlZ2lzdGVyIHRoZSB3YXRjaCBpZiBpdCBpcyBleGlzdHMgKi9cbiAgICAgICAgICAgIGlmICh0aGlzLm5hdmlnYXRvck1heFJlc3VsdFdhdGNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLypSZWdpc3RlciBhIHdhdGNoIG9uIHRoZSBcIm1heFJlc3VsdHNcIiBwcm9wZXJ0eSBvZiB0aGUgXCJkYXRhTmF2aWdhdG9yXCIgc28gdGhhdCB0aGUgXCJwYWdlU2l6ZVwiIGlzIGRpc3BsYXllZCBpbiB0aGUgbGl2ZS1saXN0LiovXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvck1heFJlc3VsdFdhdGNoID0gdGhpcy5kYXRhTmF2aWdhdG9yLm1heFJlc3VsdHNFbWl0dGVyLnN1YnNjcmliZSgobmV3VmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlc2l6ZSA9IG5ld1ZhbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gSWYgZGF0YXNldCBpcyBhIHBhZ2VhYmxlIG9iamVjdCwgZGF0YSBpcyBwcmVzZW50IGluc2lkZSB0aGUgY29udGVudCBwcm9wZXJ0eVxuICAgICAgICAgICAgdGhpcy5fX2Z1bGxEYXRhID0gdGhpcy5kYXRhc2V0O1xuXG4gICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3Iud2lkZ2V0Lm1heFJlc3VsdHMgPSB0aGlzLnBhZ2VzaXplIHx8IDU7XG4gICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3Iub3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBtYXhSZXN1bHRzOiB0aGlzLnBhZ2VzaXplIHx8IDVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVByb3BlcnR5QmluZGluZygnZGF0YXNldCcpO1xuICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLnNldEJpbmREYXRhU2V0KHRoaXMuYmluZGRhdGFzZXQsIHRoaXMudmlld1BhcmVudCwgdGhpcy5kYXRhc291cmNlLCB0aGlzLmRhdGFzZXQsIHRoaXMuYmluZGRhdGFzb3VyY2UsIHVuZGVmaW5lZCwgdGhpcy5zdGF0ZWhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRQYWdlTmF2aWdhdGlvbigpIHtcbiAgICAgICAgLypDaGVjayBmb3Igc2FuaXR5Ki9cbiAgICAgICAgaWYgKHRoaXMuZGF0YU5hdmlnYXRvcikge1xuICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLnJlc2V0UGFnZU5hdmlnYXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzRGF0YVZhbGlkKCkge1xuICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgIGNvbnN0IGRhdGFzZXQgPSB0aGlzLmRhdGFzZXQgfHwge307XG5cbiAgICAgICAgLypJbiBjYXNlIFwiZGF0YVwiIGNvbnRhaW5zIFwiZXJyb3JcIiAmIFwiZXJyb3JNZXNzYWdlXCIsIHRoZW4gZGlzcGxheSB0aGUgZXJyb3IgbWVzc2FnZSBpbiB0aGUgZ3JpZC4qL1xuICAgICAgICBpZiAoZGF0YXNldC5lcnJvcikge1xuICAgICAgICAgICAgZXJyb3IgPSBkYXRhc2V0LmVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhc2V0LmRhdGEgJiYgZGF0YXNldC5kYXRhLmVycm9yKSB7XG4gICAgICAgICAgICBpZiAoZGF0YXNldC5kYXRhLmVycm9yTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGVycm9yID0gZGF0YXNldC5kYXRhLmVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0R3JpZERhdGEoW10pO1xuICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdlcnJvcicsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiB0byBwb3B1bGF0ZSB0aGUgZ3JpZCB3aXRoIGRhdGEuXG4gICAgcG9wdWxhdGVHcmlkRGF0YShzZXJ2aWNlRGF0YSkge1xuICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgc2VydmljZURhdGEgPSB0cmFuc2Zvcm1EYXRhKHNlcnZpY2VEYXRhLCB0aGlzLm5hbWUpO1xuICAgICAgICAvLyBBcHBseSBmaWx0ZXIgYW5kIHNvcnQsIGlmIGRhdGEgaXMgcmVmcmVzaGVkIHRocm91Z2ggUmVmcmVzaCBkYXRhIG1ldGhvZFxuICAgICAgICBpZiAoIXRoaXMuaXNOYXZpZ2F0aW9uRW5hYmxlZCgpICYmIHRoaXMuX2lzQ2xpZW50U2VhcmNoKSB7XG4gICAgICAgICAgICBkYXRhID0gZ2V0Q2xvbmVkT2JqZWN0KHNlcnZpY2VEYXRhKTtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmdldFNlYXJjaFJlc3VsdChkYXRhLCB0aGlzLmZpbHRlckluZm8pO1xuICAgICAgICAgICAgZGF0YSA9IHRoaXMuZ2V0U29ydFJlc3VsdChkYXRhLCB0aGlzLnNvcnRJbmZvKTtcbiAgICAgICAgICAgIHRoaXMuc2VydmVyRGF0YSA9IGRhdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlcnZlckRhdGEgPSBzZXJ2aWNlRGF0YTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBmaWVsZGRlZnMgYXJlIG5vdCBwcmVzZW50LCBnZW5lcmF0ZSBmaWVsZGRlZnMgZnJvbSBkYXRhXG4gICAgICAgIC8vIFJlbW92aW5nIGZpZWxkZGVmcyBjaGVjayBiZWNhdXNlIFdoZW4gbG9hZG9uZGVtYW5kIHByb3BlcnR5IGlzIGVuYWJsZWQoZGVmZXJsb2FkPVwidHJ1ZVwiKSwgdGhlIGRhdGFzZXQgcHJvcGVydHljaGFuZ2VoYW5sZGVyIGlzIHRyaWdnZXJlZCBmaXJzdCBiZWZvcmUgdGhlIGRvbSBpcyBnZXR0aW5nIHJlbmRlcmVkLlxuICAgICAgICAvLyBTbyBhdCB0aGF0IHRpbWUgZmllbGRkZWZzIGxlbmd0aCBpcyB6ZXJvLCBkdWUgdG8gdGhpcyB0aGUgY29sdW1ucyBhcmUgY3JlYXRlZCBkeW5hbWljYWxseS5cbiAgICAgICAgaWYgKHRoaXMuaXNkeW5hbWljdGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlR3JpZENvbHVtbnModGhpcy5zZXJ2ZXJEYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0R3JpZERhdGEodGhpcy5zZXJ2ZXJEYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnICYmIHRoaXMuX3NlbGVjdGVkSXRlbXNFeGlzdCAmJiBzZXJ2aWNlRGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHdpZGdldFN0YXRlID0gdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLmdldFdpZGdldFN0YXRlKHRoaXMpO1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRQYWdlSXRlbXM7XG4gICAgICAgICAgICBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdzZWxlY3RlZEl0ZW0nKSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlSXRlbXMgPSB3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0uZmlsdGVyKHZhbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWwucGFnZSA9PT0gdGhpcy5kYXRhTmF2aWdhdG9yLmRuLmN1cnJlbnRQYWdlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkSXRlbXNFeGlzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIGlmIGFuIGl0ZW0gaXMgYWxyZWFkeSBzZWxlY3RlZCwgZG9uJ3QgdHJpZ2dlciBvblNlbGVjdCBldmVudCBmb3IgaXQgYWdhaW5cbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFBhZ2VJdGVtcy5sZW5ndGggJiYgdGhpcy5zZWxlY3RlZGl0ZW0ubGVuZ3RoICE9PSB3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IHJlYXNzaWduIHRoaXMuc2VsZWN0ZWRpdGVtIGlmIHNlbGVjdGVkIGl0ZW1zIGFscmVhZHkgZXhpc3QuXG4gICAgICAgICAgICAgICAgICAgIGlmIChfLmlzQXJyYXkodGhpcy5zZWxlY3RlZGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZUl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0oaXRlbS5pbmRleCwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZGl0ZW0gPSBjdXJyZW50UGFnZUl0ZW1zLm1hcChmdW5jdGlvbih2YWwpIHtyZXR1cm4gdmFsLmluZGV4OyB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZ1bmN0aW9uIHRvIGdlbmVyYXRlIGFuZCBjb21waWxlIHRoZSBmb3JtIGZpZWxkcyBmcm9tIHRoZSBtZXRhZGF0YVxuICAgIGFzeW5jIGdlbmVyYXRlRHluYW1pY0NvbHVtbnMoY29sdW1ucykge1xuICAgICAgICB0aGlzLmZpZWxkRGVmcyA9IFtdOyAvLyBlbXB0eSB0aGUgZm9ybSBmaWVsZHNcbiAgICAgICAgLy8gZW1wdHkgdGhlIGZpbHRlciBmaWVsZCB0ZW1wbGF0ZSByZWZzLlxuICAgICAgICAodGhpcy5maWx0ZXJUbXBsIGFzIGFueSkuX3Jlc3VsdHMgPSBbXTtcblxuICAgICAgICBpZiAoXy5pc0VtcHR5KGNvbHVtbnMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdG1wbCA9ICcnO1xuICAgICAgICBjb2x1bW5zLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgIGxldCBhdHRyc1RtcGwgPSAnJztcbiAgICAgICAgICAgIGxldCBjdXN0b21UbXBsID0gJyc7XG4gICAgICAgICAgICBfLmZvckVhY2goY29sLCAodmFsLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQodmFsKSAmJiB2YWwgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIGN1c3RvbSBleHByZXNzaW9uIGlzIHByZXNlbnQsIGtlZXAgaXQgaW5zaWRlIHRhYmxlIGNvbHVtbi4gRWxzZSwga2VlcCBhcyBhdHRyaWJ1dGVcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2N1c3RvbUV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21UbXBsID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnNUbXBsICs9IGAgJHtrZXl9PVwiJHt2YWx9XCJgO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBsICs9IGA8d20tdGFibGUtY29sdW1uICR7YXR0cnNUbXBsfSB0YWJsZU5hbWU9XCIke3RoaXMubmFtZX0keyh0aGlzIGFzIGFueSkuJGF0dHJzLmdldCgndGFibGVfcmVmZXJlbmNlJyl9XCI+JHtjdXN0b21UbXBsfTwvd20tdGFibGUtY29sdW1uPmA7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmR5bmFtaWNUYWJsZVJlZi5jbGVhcigpO1xuICAgICAgICBpZiAoIXRoaXMuX2R5bmFtaWNDb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLl9keW5hbWljQ29udGV4dCA9IE9iamVjdC5jcmVhdGUodGhpcy52aWV3UGFyZW50KTtcbiAgICAgICAgICAgIHRoaXMuX2R5bmFtaWNDb250ZXh0W3RoaXMuZ2V0QXR0cignd21UYWJsZScpXSA9IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ub09mQ29sdW1ucyA9IGNvbHVtbnMubGVuZ3RoO1xuICAgICAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5UmVmID0gYXdhaXQgdGhpcy5keW5hbWljQ29tcG9uZW50UHJvdmlkZXIuZ2V0Q29tcG9uZW50RmFjdG9yeVJlZihcbiAgICAgICAgICAgICdhcHAtdGFibGUtZHluYW1pYy0nICsgdGhpcy53aWRnZXRJZCxcbiAgICAgICAgICAgIHRtcGwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbm9DYWNoZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0cmFuc3BpbGU6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmR5bmFtaWNUYWJsZVJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeVJlZiwgMCwgdGhpcy5pbmopO1xuICAgICAgICBleHRlbmRQcm90byhjb21wb25lbnQuaW5zdGFuY2UsIHRoaXMuX2R5bmFtaWNDb250ZXh0KTtcbiAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCcuZHluYW1pYy10YWJsZS1jb250YWluZXInKVswXS5hcHBlbmRDaGlsZChjb21wb25lbnQubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJlcGFyZUNvbERlZnMoZGF0YSkge1xuICAgICAgICBsZXQgZGVmYXVsdEZpZWxkRGVmcztcbiAgICAgICAgbGV0IHByb3BlcnRpZXM7XG4gICAgICAgIGxldCBjb2x1bW5JbmRleCA9IDA7XG4gICAgICAgIGxldCBoZWFkZXJJbmRleCA9IDA7XG5cbiAgICAgICAgdGhpcy5maWVsZERlZnMgPSBbXTtcbiAgICAgICAgdGhpcy5oZWFkZXJDb25maWcgPSBbXTtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0ge307XG4gICAgICAgIC8qIGlmIHByb3BlcnRpZXMgbWFwIGlzIGV4aXN0ZWQgdGhlbiBmZXRjaCB0aGUgY29sdW1uIGNvbmZpZ3VyYXRpb24gZm9yIGFsbCBuZXN0ZWQgbGV2ZWxzIHVzaW5nIHV0aWwgZnVuY3Rpb24gKi9cbiAgICAgICAgcHJvcGVydGllcyA9IGRhdGE7XG4gICAgICAgIC8qY2FsbCB1dGlsaXR5IGZ1bmN0aW9uIHRvIHByZXBhcmUgZmllbGREZWZzIGZvciBncmlkIGFnYWluc3QgZ2l2ZW4gZGF0YSAoQSBNQVggT0YgMTAgQ09MVU1OUyBPTkxZKSovXG4gICAgICAgIGRlZmF1bHRGaWVsZERlZnMgPSBwcmVwYXJlRmllbGREZWZzKHByb3BlcnRpZXMpO1xuXG4gICAgICAgIC8qYXBwZW5kIGFkZGl0aW9uYWwgcHJvcGVydGllcyovXG4gICAgICAgIF8uZm9yRWFjaChkZWZhdWx0RmllbGREZWZzLCBjb2x1bW5EZWYgPT4ge1xuICAgICAgICAgICAgY29sdW1uRGVmLmJpbmRpbmcgPSBjb2x1bW5EZWYuZmllbGQ7XG4gICAgICAgICAgICBjb2x1bW5EZWYuY2FwdGlvbiA9IGNvbHVtbkRlZi5kaXNwbGF5TmFtZTtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5wY0Rpc3BsYXkgPSB0cnVlO1xuICAgICAgICAgICAgY29sdW1uRGVmLm1vYmlsZURpc3BsYXkgPSB0cnVlO1xuICAgICAgICAgICAgY29sdW1uRGVmLnRhYmxldERpc3BsYXkgPSB0cnVlO1xuICAgICAgICAgICAgY29sdW1uRGVmLnNlYXJjaGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgY29sdW1uRGVmLnNob3dpbmZpbHRlciA9IHRydWU7XG4gICAgICAgICAgICBjb2x1bW5EZWYudHlwZSAgPSAnc3RyaW5nJztcbiAgICAgICAgICAgIC8vIEZpeCBmb3IgW1dNUy0xOTY2OF0gYW5kIFtXTVMtMTk2NjldLSBBZGRpbmcgaW5kZXggYW5kIGhlYWRlckluZGV4IGZvciBEeW5hbWljIERCIGNvbHVtbnMuXG4gICAgICAgICAgICAvLyBOb3RlOiB3ZSBkb24ndCBoYXZlIGNvbHVtbiBncm91cHMgZm9yIER5bmFtaWMgREJcbiAgICAgICAgICAgIGNvbHVtbkRlZi5pbmRleCA9IGNvbHVtbkluZGV4O1xuICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZGV4ID0gaGVhZGVySW5kZXg7XG4gICAgICAgICAgICBjb2x1bW5JbmRleCsrO1xuICAgICAgICAgICAgaGVhZGVySW5kZXgrKztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVmYXVsdEZpZWxkRGVmcy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNbY29sLmZpZWxkXSA9IGNvbDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVkYXRhcmVuZGVyJywgeyRkYXRhOiBkYXRhLCAkY29sdW1uczogdGhpcy5jb2x1bW5zLCBkYXRhOiBkYXRhLCBjb2x1bW5zOiB0aGlzLmNvbHVtbnN9KTtcblxuICAgICAgICBkZWZhdWx0RmllbGREZWZzID0gW107XG4gICAgICAgIC8vIEFwcGx5IHRoZSBjaGFuZ2VzIG1hZGUgYnkgdGhlIHVzZXJcbiAgICAgICAgXy5mb3JFYWNoKHRoaXMuY29sdW1ucywgdmFsID0+IHtcbiAgICAgICAgICAgIGRlZmF1bHRGaWVsZERlZnMucHVzaCh2YWwpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmdlbmVyYXRlRHluYW1pY0NvbHVtbnMoZGVmYXVsdEZpZWxkRGVmcyk7XG4gICAgfVxuXG4gICAgY3JlYXRlR3JpZENvbHVtbnMoZGF0YSkge1xuICAgICAgICAvKiB0aGlzIGNhbGwgYmFjayBmdW5jdGlvbiByZWNlaXZlcyB0aGUgZGF0YSBmcm9tIHRoZSB2YXJpYWJsZSAqL1xuICAgICAgICAvKiBjaGVjayB3aGV0aGVyIGRhdGEgaXMgdmFsaWQgb3Igbm90ICovXG4gICAgICAgIGNvbnN0IGRhdGFWYWxpZCA9IGRhdGEgJiYgIWRhdGEuZXJyb3I7XG4gICAgICAgIC8qaWYgdGhlIGRhdGEgaXMgdHlwZSBqc29uIG9iamVjdCwgbWFrZSBpdCBhbiBhcnJheSBvZiB0aGUgb2JqZWN0Ki9cbiAgICAgICAgaWYgKGRhdGFWYWxpZCAmJiAhXy5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICB9XG4gICAgICAgIC8qIGlmIHRoZSBkYXRhIGlzIGVtcHR5LCBzaG93IG5vZGF0YW1lc3NhZ2UgKi9cbiAgICAgICAgaWYgKF8uaXNFbXB0eShkYXRhKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRHcmlkRGF0YShkYXRhKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGF0YVZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLyogaWYgbmV3IGNvbHVtbnMgdG8gYmUgcmVuZGVyZWQsIHByZXBhcmUgZGVmYXVsdCBmaWVsZERlZnMgZm9yIHRoZSBkYXRhIHByb3ZpZGVkKi9cbiAgICAgICAgdGhpcy5wcmVwYXJlQ29sRGVmcyhkYXRhKTtcblxuICAgICAgICB0aGlzLnNlcnZlckRhdGEgPSBkYXRhO1xuICAgICAgICB0aGlzLnNldEdyaWREYXRhKHRoaXMuc2VydmVyRGF0YSk7XG4gICAgfVxuXG4gICAgZ2V0U29ydEV4cHIoKSB7XG4gICAgICAgIGxldCBzb3J0RXhwO1xuICAgICAgICBsZXQgcGFnaW5nT3B0aW9ucztcbiAgICAgICAgaWYgKHRoaXMuZGF0YXNvdXJjZSAmJiB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5JU19QQUdFQUJMRSkpIHtcbiAgICAgICAgICAgIHBhZ2luZ09wdGlvbnMgPSB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfUEFHSU5HX09QVElPTlMpO1xuICAgICAgICAgICAgc29ydEV4cCA9IF8uaXNFbXB0eShwYWdpbmdPcHRpb25zKSA/ICcnIDogZ2V0T3JkZXJCeUV4cHIocGFnaW5nT3B0aW9ucy5zb3J0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc29ydEV4cCB8fCAnJztcbiAgICB9XG5cbiAgICBvblByb3BlcnR5Q2hhbmdlKGtleTogc3RyaW5nLCBudjogYW55LCBvdj86IGFueSkge1xuICAgICAgICBsZXQgZW5hYmxlTmV3Um93O1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnZGF0YXNvdXJjZSc6XG4gICAgICAgICAgICAgICAgLy8gRml4IGZvciBbV01TLTIzNjUzXSB3aGVuIHN0YXJ0VXBkYXRlIGlzIGZhbHNlIChyZXF1ZXN0IG9uIHBhZ2UgbG9hZCBwcm9wZXJ0eSBpcyB1bmNoZWNrZWQpLFxuICAgICAgICAgICAgICAgIC8vIHRoZW4gc2V0IHN0YXR1cyBtc2cgYXMgXCJObyBkYXRhIGZvdW5kXCJcbiAgICAgICAgICAgICAgICBpZiAobnYuc3RhcnRVcGRhdGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFyaWFibGVJbmZsaWdodCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ25vZGF0YScsIHRoaXMubm9kYXRhbWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMud2F0Y2hWYXJpYWJsZURhdGFTZXQodGhpcy5kYXRhc2V0KTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRGF0YVNvdXJjZUNoYW5nZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGF0YXNldCc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbnMuaXNOYXZUeXBlU2Nyb2xsT3JPbmRlbWFuZCgpICYmIHRoaXMuZ3JpZE9wdGlvbnMuZ2V0Q3VycmVudFBhZ2UoKSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldElzTmV4dFBhZ2VEYXRhKGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYmluZGRhdGFzb3VyY2UgJiYgIXRoaXMuZGF0YXNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGlmIHRhYmxlIGlzIGluc2lkZSBsaXN0IHRoZW4gdGFibGUgZGF0YXNldCB3aWxsIGJlIHNldCBhcyBcIml0ZW0uWFhYXCIgYW5kIHRoZXJlIGlzIG5vIGRhdGFzb3VyY2UuXG4gICAgICAgICAgICAgICAgLy8gU28gZXh0cmFjdGluZyBkYXRhc291cmNlIGZyb20gdGhlIGRhdHNldCBib3VuZCBleHByZXNzaW9uLlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudExpc3QgJiYgIXRoaXMuZGF0YXNvdXJjZSAmJiBfLnN0YXJ0c1dpdGgodGhpcy5iaW5kZGF0YXNldCwgJ2l0ZW0nKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UgPSBnZXREYXRhc291cmNlRnJvbUV4cHIodGhpcy53aWRnZXQuJGF0dHJzLmdldCgnZGF0YXNldGJvdW5kZXhwcicpLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbnMuaXNOYXZUeXBlU2Nyb2xsT3JPbmRlbWFuZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLmlzTmV4dFBhZ2VEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIGZldGNoaW5nIG5leHQgcGFnZSBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldElzRGF0YVVwZGF0ZWRCeVVzZXIoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBkYXRhc2V0IGlzIHVwZGF0ZWQgZnJvbSBzY3JpcHRcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0SXNEYXRhVXBkYXRlZEJ5VXNlcih0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TGFzdEFjdGlvblRvRGF0YXNldFVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRJc05leHRQYWdlRGF0YShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZm9yIFN0YXRpYyBWYXJpYWJsZXMgd2l0aCBSZXRhaW4gU3RhdGUgZW5hYmxlZCwgcHJldmVudCBUYWJsZSBmcm9tIHJlbmRlcmluZyBtb3JlIHRoYW4gb25jZVxuICAgICAgICAgICAgICAgIGlmICghKF8uZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ2NhdGVnb3J5JykgPT09ICd3bS5WYXJpYWJsZScgJiYgdGhpcy5fcGFnZUxvYWQgJiYgdGhpcy5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndhdGNoVmFyaWFibGVEYXRhU2V0KG52KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdmaWx0ZXJtb2RlJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdmaWx0ZXJtb2RlJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2VhcmNobGFiZWwnOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ3NlYXJjaExhYmVsJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmF2aWdhdGlvbic6XG4gICAgICAgICAgICAgICAgaWYgKG52ID09PSAnQWR2YW5jZWQnKSB7IC8vIFN1cHBvcnQgZm9yIG9sZGVyIHByb2plY3RzIHdoZXJlIG5hdmlnYXRpb24gdHlwZSB3YXMgYWR2YW5jZWQgaW5zdGVhZCBvZiBjbGFzaWNcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uID0gJ0NsYXNzaWMnO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChudiAhPT0gJ05vbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd25hdmlnYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCduYXZpZ2F0aW9uJywgdGhpcy5uYXZpZ2F0aW9uKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRGVtYW5kTG9hZCA9IG52ID09PSBOQVZJR0FUSU9OX1RZUEUuT05ERU1BTkQgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmZTY3JvbGwgPSBudiA9PT0gTkFWSUdBVElPTl9UWVBFLlNDUk9MTCA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdkNvbnRyb2xzID0gbnY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdncmlkZmlyc3Ryb3dzZWxlY3QnOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ3NlbGVjdEZpcnN0Um93JywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZ3JpZGNsYXNzJzpcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnb3B0aW9uJywgJ2Nzc0NsYXNzTmFtZXMuZ3JpZCcsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ25vZGF0YW1lc3NhZ2UnOlxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdvcHRpb24nLCAnZGF0YVN0YXRlcy5ub2RhdGEnLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsb2FkaW5nZGF0YW1zZyc6XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ29wdGlvbicsICdkYXRhU3RhdGVzLmxvYWRpbmcnLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsb2FkaW5naWNvbic6XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ29wdGlvbicsICdsb2FkaW5naWNvbicsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NwYWNpbmcnOlxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdvcHRpb24nLCAnc3BhY2luZycsIG52KTtcbiAgICAgICAgICAgICAgICBpZiAobnYgPT09ICdjb25kZW5zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblNpemUgPSAnc21hbGwnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblNpemUgPSAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdleHBvcnRmb3JtYXQnOlxuICAgICAgICAgICAgICAgIHRoaXMuZXhwb3J0T3B0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChudikge1xuICAgICAgICAgICAgICAgICAgICAvLyBQb3B1bGF0ZSBvcHRpb25zIGZvciBleHBvcnQgZHJvcCBkb3duIG1lbnVcbiAgICAgICAgICAgICAgICAgICAgXy5mb3JFYWNoKF8uc3BsaXQobnYsICcsJyksIHR5cGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBvcnRPcHRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246IGV4cG9ydEljb25NYXBwaW5nW3R5cGVdXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2hvd25ld3Jvdyc6XG4gICAgICAgICAgICAgICAgLy8gRW5hYmxlIG5ldyByb3cgaWYgc2hvd25ldyBpcyB0cnVlIG9yIGFkZE5ld1JvdyBidXRvbiBpcyBwcmVzZW50XG4gICAgICAgICAgICAgICAgZW5hYmxlTmV3Um93ID0gbnYgfHwgXy5zb21lKHRoaXMuYWN0aW9ucywgYWN0ID0+IF8uaW5jbHVkZXMoYWN0LmFjdGlvbiwgJ2FkZE5ld1JvdygpJykpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdvcHRpb24nLCAnYWN0aW9uc0VuYWJsZWQubmV3JywgZW5hYmxlTmV3Um93KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3BhZ2VzaXplJzpcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3Iub3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgbWF4UmVzdWx0czogbnZcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci53aWRnZXQubWF4UmVzdWx0cyA9IG52O1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5tYXhSZXN1bHRzID0gbnY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvbmRlbWFuZG1lc3NhZ2UnOlxuICAgICAgICAgICAgICAgIGlmIChudikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJy5vbi1kZW1hbmQtZGF0YWdyaWQgPiBhJykudGV4dChudik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMub25kZW1hbmRtZXNzYWdlID0gbnY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd2aWV3bGVzc21lc3NhZ2UnOlxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMudmlld2xlc3NtZXNzYWdlID0gbnY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzaG93JzpcbiAgICAgICAgICAgICAgICBpZiAobnYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzaG93Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdoaWRlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRGF0YVNvdXJjZUNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5maWVsZERlZnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICB0cmlnZ2VyRm4oY29sLm9uRGF0YVNvdXJjZUNoYW5nZSAmJiBjb2wub25EYXRhU291cmNlQ2hhbmdlLmJpbmQoY29sKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJBY3Rpb25Sb3dWYXJzKCkge1xuICAgICAgICB0aGlzLmFjdGlvblJvd0luZGV4ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmFjdGlvblJvd1BhZ2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2FjdGlvblJvd0luZGV4JywgdW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignYWN0aW9uUm93UGFnZScsIHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgb25TdHlsZUNoYW5nZShrZXksIG52LCBvdikge1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnd2lkdGgnOlxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRHcmlkRGltZW5zaW9ucycsICd3aWR0aCcsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hlaWdodCc6XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldEdyaWREaW1lbnNpb25zJywgJ2hlaWdodCcsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLm9uU3R5bGVDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgIH1cblxuICAgIHBvcHVsYXRlQWN0aW9ucygpIHtcbiAgICAgICAgdGhpcy5fYWN0aW9ucy5oZWFkZXIgPSBbXTtcbiAgICAgICAgdGhpcy5fYWN0aW9ucy5mb290ZXIgPSBbXTtcbiAgICAgICAgXy5mb3JFYWNoKHRoaXMuYWN0aW9ucywgKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKF8uaW5jbHVkZXMoYWN0aW9uLnBvc2l0aW9uLCAnaGVhZGVyJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hY3Rpb25zLmhlYWRlci5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhhY3Rpb24ucG9zaXRpb24sICdmb290ZXInKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FjdGlvbnMuZm9vdGVyLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBtZXRob2Qgd2lsbCByZW5kZXIgdGhlIGZpbHRlciByb3cuXG4gICAgcmVuZGVyRHluYW1pY0ZpbHRlckNvbHVtbihmaWx0ZVRlbVJlZikge1xuICAgICAgICAvLyBGb3IgZHluYW1pYyB0YWJsZSBtYW51YWxseSBwdXNoaW5nIHRoZSBmaWx0ZXJ0ZW1wbGF0ZVJlZiBhcyB0ZW1wbGF0ZVJlZiB3aWxsIG5vdCBiZSBhdmFpbGFibGUgcHJpb3IuXG4gICAgICAgIGlmICh0aGlzLmlzZHluYW1pY3RhYmxlKSB7XG4gICAgICAgICAgICAodGhpcy5maWx0ZXJUbXBsIGFzIGFueSkuX3Jlc3VsdHMucHVzaChmaWx0ZVRlbVJlZik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3RlckNvbHVtbnModGFibGVDb2x1bW4sIGNvbEluZGV4KSB7XG4gICAgICAgIGlmIChpc01vYmlsZSgpICYmIHRoaXMudmlld3BvcnQuaXNNb2JpbGVUeXBlKSB7XG4gICAgICAgICAgICBpZiAoIXRhYmxlQ29sdW1uLm1vYmlsZURpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52aWV3cG9ydC5pc1RhYmxldFR5cGUpIHtcbiAgICAgICAgICAgIGlmICghdGFibGVDb2x1bW4udGFibGV0RGlzcGxheSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGFibGVDb2x1bW4ucGNEaXNwbGF5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0YWJsZUNvbHVtblsncHJpbWFyeS1rZXknXSkge1xuICAgICAgICAgICAgdGhpcy5wcmltYXJ5S2V5LnB1c2godGFibGVDb2x1bW4uZmllbGQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmllbGREZWZzW2NvbEluZGV4XSA9IHRhYmxlQ29sdW1uO1xuICAgICAgICBjb25zdCBjb2xDb3VudCA9IHRoaXMuZmllbGREZWZzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5mdWxsRmllbGREZWZzLnB1c2godGFibGVDb2x1bW4pO1xuICAgICAgICB0aGlzLnJvd0ZpbHRlclt0YWJsZUNvbHVtbi5maWVsZF0gPSB7XG4gICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZmllbGREZWZzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc1tjb2wuZmllbGRdID0gY29sO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gSWYgZHluYW1pYyBkYXRhdGFibGUgYW5kIGxhc3QgY29sdW1uLCBwYXNzIHRoZSBjb2x1bW5zIHRvIGpxdWVyeSBkYXRhdGFibGVcbiAgICAgICAgaWYgKHRoaXMuaXNkeW5hbWljdGFibGUgJiYgY29sQ291bnQgPT09IHRoaXMubm9PZkNvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyT3BlcmF0aW9uQ29sdW1ucygpO1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignY29sRGVmcycsIHRoaXMuZmllbGREZWZzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZ2lzdGVyRm9ybUZpZWxkKG5hbWUsIGZvcm1GaWVsZCkge1xuICAgICAgICB0aGlzLmZvcm1maWVsZHNbbmFtZV0gPSBmb3JtRmllbGQ7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJBY3Rpb25zKHRhYmxlQWN0aW9uKSB7XG4gICAgICAgIHRoaXMuYWN0aW9ucy5wdXNoKHRhYmxlQWN0aW9uKTtcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUFjdGlvbnMoKTtcbiAgICB9XG5cbiAgICByZWdpc3RlclJvdyh0YWJsZVJvdywgcm93SW5zdGFuY2UpIHtcbiAgICAgICAgdGhpcy5yb3dEZWYgPSB0YWJsZVJvdztcbiAgICAgICAgdGhpcy5yb3dJbnN0YW5jZSA9IHJvd0luc3RhbmNlO1xuICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnb3B0aW9uJywgJ2Nzc0NsYXNzTmFtZXMucm93RXhwYW5kSWNvbicsIHRoaXMucm93RGVmLmV4cGFuZGljb24pO1xuICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnb3B0aW9uJywgJ2Nzc0NsYXNzTmFtZXMucm93Q29sbGFwc2VJY29uJywgdGhpcy5yb3dEZWYuY29sbGFwc2VpY29uKTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5yb3dFeHBhbnNpb25FbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5yb3dEZWYgPSB0aGlzLnJvd0RlZjtcbiAgICB9XG5cbiAgICByZWdpc3RlclJvd0FjdGlvbnModGFibGVSb3dBY3Rpb24pIHtcbiAgICAgICAgdGhpcy5yb3dBY3Rpb25zLnB1c2godGFibGVSb3dBY3Rpb24pO1xuICAgIH1cblxuICAgIHNlbGVjdEl0ZW0oaXRlbSwgZGF0YSkge1xuICAgICAgICAvKiBzZXJ2ZXIgaXMgbm90IHVwZGF0aW5nIGltbWVkaWF0ZWx5LCBzbyBzZXQgdGhlIHNlcnZlciBkYXRhIHRvIHN1Y2Nlc3MgY2FsbGJhY2sgZGF0YSAqL1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJEYXRhID0gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXy5pc09iamVjdChpdGVtKSkge1xuICAgICAgICAgICAgaXRlbSA9IF8ub21pdEJ5KGl0ZW0sICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBfLmlzQXJyYXkodmFsdWUpICYmIF8uaXNFbXB0eSh2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2VsZWN0Um93JywgaXRlbSwgdHJ1ZSk7XG4gICAgfVxuICAgIC8qIGRlc2VsZWN0IHRoZSBnaXZlbiBpdGVtKi9cbiAgICBkZXNlbGVjdEl0ZW0oaXRlbSkge1xuICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnZGVzZWxlY3RSb3cnLCBpdGVtKTtcbiAgICB9XG5cbiAgICBvbkRhdGFOYXZpZ2F0b3JEYXRhU2V0Q2hhbmdlKG52KSB7XG4gICAgICAgIGxldCBkYXRhO1xuICAgICAgICB0aGlzLl9fZnVsbERhdGEgPSBudjtcbiAgICAgICAgdGhpcy5jaGVja0ZpbHRlcnNBcHBsaWVkKHRoaXMuZ2V0U29ydEV4cHIoKSk7XG4gICAgICAgIGlmICh0aGlzLl9pc0NsaWVudFNlYXJjaCkge1xuICAgICAgICAgICAgZGF0YSA9IGdldENsb25lZE9iamVjdCh0aGlzLl9fZnVsbERhdGEpO1xuICAgICAgICAgICAgaWYgKF8uaXNPYmplY3QoZGF0YSkgJiYgIV8uaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRTZWFyY2hSZXN1bHQoZGF0YSwgdGhpcy5maWx0ZXJJbmZvKTtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmdldFNvcnRSZXN1bHQoZGF0YSwgdGhpcy5zb3J0SW5mbyk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnY7XG4gICAgfVxuXG4gICAgdG9nZ2xlTWVzc2FnZShzaG93LCB0eXBlLCBtc2csIGhlYWRlcj8pIHtcbiAgICAgICAgaWYgKHNob3cgJiYgbXNnKSB7XG4gICAgICAgICAgICB0aGlzLmFwcC5ub3RpZnlBcHAobXNnLCB0eXBlLCBoZWFkZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0KCRpdGVtKSB7XG4gICAgICAgIGxldCBmaWx0ZXJGaWVsZHM7XG4gICAgICAgIGNvbnN0IHNvcnRPcHRpb25zID0gXy5pc0VtcHR5KHRoaXMuc29ydEluZm8pID8gJycgOiB0aGlzLnNvcnRJbmZvLmZpZWxkICsgJyAnICsgdGhpcy5zb3J0SW5mby5kaXJlY3Rpb247XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB7fTtcbiAgICAgICAgbGV0IGlzVmFsaWQ7XG4gICAgICAgIGxldCByZXF1ZXN0RGF0YTtcbiAgICAgICAgdGhpcy5maWVsZERlZnMuZm9yRWFjaChmaWVsZERlZiA9PiB7XG4gICAgICAgICAgICAvLyBEbyBub3QgYWRkIHRoZSByb3cgb3BlcmF0aW9uIGFjdGlvbnMgY29sdW1uIHRvIHRoZSBleHBvcnRlZCBmaWxlLlxuICAgICAgICAgICAgaWYgKGZpZWxkRGVmLmZpZWxkID09PSBST1dfT1BTX0ZJRUxEIHx8ICFmaWVsZERlZi5zaG93KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0ge1xuICAgICAgICAgICAgICAgICdoZWFkZXInOiBmaWVsZERlZi5kaXNwbGF5TmFtZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIElmIGNvbHVtbiBoYXMgZXhwb3J0ZXhwcmVzc2lvbiwgdGhlbiBzZW5kIGZvcm0gdGhlIGV4cHJlc3Npb24gYXMgcmVxdWlyZWQgYnkgYmFja2VuZC5cbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSBzZW5kIHRoZSBmaWVsZCBuYW1lLlxuICAgICAgICAgICAgaWYgKGZpZWxkRGVmLmV4cG9ydGV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgICAoPGFueT5vcHRpb24pLmV4cHJlc3Npb24gPSBmaWVsZERlZi5leHBvcnRleHByZXNzaW9uO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAoPGFueT5vcHRpb24pLmZpZWxkID0gZmllbGREZWYuZmllbGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb2x1bW5zW2ZpZWxkRGVmLmZpZWxkXSA9IG9wdGlvbjtcbiAgICAgICAgfSk7XG4gICAgICAgIGZpbHRlckZpZWxkcyA9IHRoaXMuZ2V0RmlsdGVyRmllbGRzKHRoaXMuZmlsdGVySW5mbyk7XG4gICAgICAgIHJlcXVlc3REYXRhID0ge1xuICAgICAgICAgICAgbWF0Y2hNb2RlIDogJ2FueXdoZXJlaWdub3JlY2FzZScsXG4gICAgICAgICAgICBmaWx0ZXJGaWVsZHMgOiBmaWx0ZXJGaWVsZHMsXG4gICAgICAgICAgICBvcmRlckJ5IDogc29ydE9wdGlvbnMsXG4gICAgICAgICAgICBleHBvcnRUeXBlIDogJGl0ZW0ubGFiZWwsXG4gICAgICAgICAgICBsb2dpY2FsT3AgOiAnQU5EJyxcbiAgICAgICAgICAgIGV4cG9ydFNpemUgOiB0aGlzLmV4cG9ydGRhdGFzaXplLFxuICAgICAgICAgICAgY29sdW1ucyA6IGNvbHVtbnNcbiAgICAgICAgfTtcbiAgICAgICAgaXNWYWxpZCA9IHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3JlZXhwb3J0JywgeyRkYXRhOiByZXF1ZXN0RGF0YX0pO1xuICAgICAgICBpZiAoaXNWYWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXF1ZXN0RGF0YS5maWVsZHMgPSBfLnZhbHVlcyhyZXF1ZXN0RGF0YS5jb2x1bW5zKTtcbiAgICAgICAgdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uRE9XTkxPQUQsIHtkYXRhOiByZXF1ZXN0RGF0YX0pO1xuICAgIH1cblxuICAgIGV4cGFuZFJvdyhyb3dJZCkge1xuICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnZXhwYW5kUm93Jywgcm93SWQpO1xuICAgIH1cblxuICAgIGNvbGxhcHNlUm93KHJvd0lkKSB7XG4gICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdjb2xsYXBzZVJvdycsIHJvd0lkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9kb2N1bWVudENsaWNrQmluZChldmVudCkge1xuICAgICAgICBjb25zdCAkdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICAvLyBJZiBjbGljayB0cmlnZ2VyZWQgZnJvbSBzYW1lIGdyaWQgb3IgYSBkaWFsb2csIGRvIG5vdCBzYXZlIHRoZSByb3dcbiAgICAgICAgaWYgKHRoaXMuJGVsZW1lbnRbMF0uY29udGFpbnMoJHRhcmdldCkgfHwgZXZlbnQudGFyZ2V0LmRvY3R5cGUgfHwgaXNJbnB1dEJvZHlXcmFwcGVyKCQoJHRhcmdldCkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NhdmVSb3cnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZWRyYXcoZm9yY2VSZW5kZXIpIHtcbiAgICAgICAgaWYgKGZvcmNlUmVuZGVyKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFncmlkRWxlbWVudC5kYXRhdGFibGUodGhpcy5ncmlkT3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0Q29sR3JvdXBXaWR0aHMnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnYWRkT3JSZW1vdmVTY3JvbGwnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW52b2tlQWN0aW9uRXZlbnQoJGV2ZW50LCBleHByZXNzaW9uOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZm4gPSAkcGFyc2VFdmVudChleHByZXNzaW9uKTtcbiAgICAgICAgZm4odGhpcy52aWV3UGFyZW50LCBPYmplY3QuYXNzaWduKHRoaXMuY29udGV4dCwgeyRldmVudH0pKTtcbiAgICB9XG5cbiAgICAvLyBjaGFuZ2UgYW5kIGJsdXIgZXZlbnRzIGFyZSBhZGRlZCBmcm9tIHRoZSB0ZW1wbGF0ZVxuICAgIHByb3RlY3RlZCBoYW5kbGVFdmVudChub2RlOiBIVE1MRWxlbWVudCwgZXZlbnROYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbiwgbG9jYWxzOiBhbnkpIHtcbiAgICAgICAgaWYgKGV2ZW50TmFtZSAhPT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgICAgIHN1cGVyLmhhbmRsZUV2ZW50KHRoaXMubmF0aXZlRWxlbWVudCwgZXZlbnROYW1lLCBjYWxsYmFjaywgbG9jYWxzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRyaWdnZXJVcGxvYWRFdmVudCgkZXZlbnQsIGV2ZW50TmFtZSwgZmllbGROYW1lLCByb3cpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7JGV2ZW50LCByb3d9O1xuICAgICAgICBpZiAoIXRoaXMuY29sdW1uc1tmaWVsZE5hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2NoYW5nZScpIHtcbiAgICAgICAgICAgIHBhcmFtcy5uZXdWYWwgPSAkZXZlbnQudGFyZ2V0LmZpbGVzO1xuICAgICAgICAgICAgcGFyYW1zLm9sZFZhbCA9IHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdLl9vbGRVcGxvYWRWYWw7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNbZmllbGROYW1lXS5fb2xkVXBsb2FkVmFsID0gcGFyYW1zLm5ld1ZhbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbHVtbnNbZmllbGROYW1lXS5pbnZva2VFdmVudENhbGxiYWNrKGV2ZW50TmFtZSwgcGFyYW1zKTtcbiAgICB9XG5cbiAgICByZWdpc3RlckZvcm1XaWRnZXQoKSB7fVxuXG4gICAgLy8gRm9ybSBjb250cm9sIGFjY2Vzc29yIG1ldGhvZHMuIFRoaXMgd2lsbCBiZSB1c2VkIGZvciB0YWJsZSBpbnNpZGUgZm9ybVxuICAgIHdyaXRlVmFsdWUoKSB7fVxuXG4gICAgcHJpdmF0ZSBfb25DaGFuZ2U6IGFueSA9ICgpID0+IHt9O1xuICAgIHByaXZhdGUgX29uVG91Y2hlZDogYW55ID0gKCkgPT4ge307XG5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuKSB7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gICAgfVxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuKSB7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIG5nT25EZXRhY2goKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXRhY2goKTtcbiAgICAgICAgaWYgKF8uZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ2NhdGVnb3J5JykgPT09ICd3bS5WYXJpYWJsZScgJiYgdGhpcy5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICB0aGlzLl9wYWdlTG9hZCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcGFnZUxvYWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInBhbmVsLWhlYWRpbmdcIiAqbmdJZj1cInRpdGxlIHx8IHN1YmhlYWRpbmcgfHwgaWNvbmNsYXNzIHx8IGV4cG9ydE9wdGlvbnMubGVuZ3RoIHx8IF9hY3Rpb25zLmhlYWRlci5sZW5ndGhcIj5cbiAgICA8aDMgY2xhc3M9XCJwYW5lbC10aXRsZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImFwcC1pY29uIHBhbmVsLWljb24ge3tpY29uY2xhc3N9fVwiICpuZ0lmPVwiaWNvbmNsYXNzXCI+PC9pPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmdcIiBbaW5uZXJIVE1MXT1cInRpdGxlXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIiBbaW5uZXJIVE1MXT1cInN1YmhlYWRpbmdcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1hY3Rpb25zIGFwcC1kYXRhZ3JpZC1hY3Rpb25zXCIgKm5nSWY9XCJleHBvcnRPcHRpb25zLmxlbmd0aCB8fCBfYWN0aW9ucy5oZWFkZXIubGVuZ3RoXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidG4gb2YgX2FjdGlvbnMuaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYnRuLndpZGdldFR5cGUgPT09ICdidXR0b24nID8gYnV0dG9uUmVmIDogYW5jaG9yUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntidG46YnRufVwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8ZGl2IHdtTWVudSBkcm9wZG93biBjYXB0aW9uLmJpbmQ9XCJhcHBMb2NhbGUuTEFCRUxfRVhQT1JUXCIgKm5nSWY9XCJleHBvcnRPcHRpb25zLmxlbmd0aFwiICBhdXRvY2xvc2U9XCJhbHdheXNcIiBhdHRyLm5hbWU9XCJ7e25hbWV9fS1leHBvcnRcIlxuICAgICAgICAgICAgICAgIGRhdGFzZXQuYmluZD1cImV4cG9ydE9wdGlvbnNcIiBzZWxlY3QuZXZlbnQ9XCJleHBvcnQoJGl0ZW0pXCIgbWVudXBvc2l0aW9uPVwiZG93bixsZWZ0XCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvaDM+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJhcHAtZGF0YWdyaWRcIiAjZGF0YWdyaWRFbGVtZW50PjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwicGFuZWwtZm9vdGVyIGNsZWFyZml4XCIgW2hpZGRlbl09XCIhX2FjdGlvbnMuZm9vdGVyLmxlbmd0aCAmJiAoIXNob3duYXZpZ2F0aW9uIHx8IChvbkRlbWFuZExvYWQgJiYgZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0KSB8fCBkYXRhTmF2aWdhdG9yPy5kYXRhU2l6ZSA8PSBwYWdlc2l6ZSlcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYXBwLWRhdGFncmlkLXBhZ2luYXRvclwiIFtoaWRkZW5dPVwiKCFkYXRhTmF2aWdhdG9yPy5kYXRhU2l6ZSAmJiAhZGF0YU5hdmlnYXRvci5kYXRhc291cmNlPy5wYWdpbmF0aW9uPy5uZXh0KSB8fCAhc2hvd25hdmlnYXRpb24gfHwgKG9uRGVtYW5kTG9hZCAmJiBkYXRhTmF2aWdhdG9yLmlzRGlzYWJsZU5leHQpIHx8IGRhdGFOYXZpZ2F0b3I/LmRhdGFTaXplIDw9IHBhZ2VzaXplXCI+XG4gICAgICAgIDxuYXYgd21QYWdpbmF0aW9uIHNob3cuYmluZD1cInNob3duYXZpZ2F0aW9uXCIgbmF2aWdhdGlvbmFsaWduLmJpbmQ9XCJuYXZpZ2F0aW9uYWxpZ25cIlxuICAgICAgICAgICAgIG5hdmlnYXRpb25zaXplLmJpbmQ9XCJuYXZpZ2F0aW9uU2l6ZVwiXG4gICAgICAgICAgICAgbmF2aWdhdGlvbi5iaW5kPVwibmF2Q29udHJvbHNcIiBzaG93cmVjb3JkY291bnQuYmluZD1cInNob3dyZWNvcmRjb3VudFwiIG1heHNpemUuYmluZD1cIm1heHNpemVcIlxuICAgICAgICAgICAgIGJvdW5kYXJ5bGlua3MuYmluZD1cImJvdW5kYXJ5bGlua3NcIlxuICAgICAgICAgICAgIGZvcmNlZWxsaXBzZXMuYmluZD1cImZvcmNlZWxsaXBzZXNcIiBkaXJlY3Rpb25saW5rcy5iaW5kPVwiZGlyZWN0aW9ubGlua3NcIj48L25hdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiYXBwLWRhdGFncmlkLWFjdGlvbnNcIiAqbmdJZj1cIl9hY3Rpb25zLmZvb3Rlci5sZW5ndGhcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnRuIG9mIF9hY3Rpb25zLmZvb3RlclwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYnRuLndpZGdldFR5cGUgPT09ICdidXR0b24nID8gYnV0dG9uUmVmIDogYW5jaG9yUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntidG46YnRufVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2J1dHRvblJlZiBsZXQtYnRuPVwiYnRuXCI+XG4gICAgPGJ1dHRvbiB3bUJ1dHRvbiBjYXB0aW9uLmJpbmQ9XCJidG4uZGlzcGxheU5hbWVcIiBzaG93LmJpbmQ9XCJidG4uc2hvd1wiIGNsYXNzLmJpbmQ9XCJidG4uY2xhc3NcIiAgaWNvbmNsYXNzLmJpbmQ9XCJidG4uaWNvbmNsYXNzXCIgKGNsaWNrKT1cImludm9rZUFjdGlvbkV2ZW50KCRldmVudCwgYnRuLmFjdGlvbilcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieydidG4tc20nOiBzcGFjaW5nID09PSAnY29uZGVuc2VkJywgJ2Rpc2FibGVkLW5ldyc6IGJ0bi5rZXkgPT09ICdhZGROZXdSb3cnICYmIChpc0dyaWRFZGl0TW9kZSB8fCBpc0xvYWRpbmcpfVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgc2hvcnRjdXRrZXkuYmluZD1cImJ0bi5zaG9ydGN1dGtleVwiIHRhYmluZGV4LmJpbmQ9XCJidG4udGFiaW5kZXhcIiBoaW50LmJpbmQ9XCJidG4udGl0bGVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImJ0bi5kaXNwbGF5TmFtZVwiIGRpc2FibGVkLmJpbmQ9XCJidG4uZGlzYWJsZWRcIiBjb25kaXRpb25hbGNsYXNzLmJpbmQ9XCJidG4uY29uZGl0aW9uYWxjbGFzc1wiIGNvbmRpdGlvbmFsc3R5bGUuYmluZD1cImJ0bi5jb25kaXRpb25hbHN0eWxlXCI+PC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2FuY2hvclJlZiBsZXQtYnRuPVwiYnRuXCI+XG4gICAgPGEgd21BbmNob3IgY2FwdGlvbi5iaW5kPVwiYnRuLmRpc3BsYXlOYW1lXCIgc2hvdy5iaW5kPVwiYnRuLnNob3dcIiBjbGFzcy5iaW5kPVwiYnRuLmNsYXNzXCIgIGljb25jbGFzcy5iaW5kPVwiYnRuLmljb25jbGFzc1wiIChjbGljayk9XCJpbnZva2VBY3Rpb25FdmVudCgkZXZlbnQsIGJ0bi5hY3Rpb24pXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYnRuLXNtJzogc3BhY2luZyA9PT0gJ2NvbmRlbnNlZCcsICdkaXNhYmxlZC1uZXcnOiBidG4ua2V5ID09PSAnYWRkTmV3Um93JyAmJiAoaXNHcmlkRWRpdE1vZGUgfHwgaXNMb2FkaW5nKX1cIlxuICAgICAgICAgICAgc2hvcnRjdXRrZXkuYmluZD1cImJ0bi5zaG9ydGN1dGtleVwiIHRhYmluZGV4LmJpbmQ9XCJidG4udGFiaW5kZXhcIiBoaW50LmJpbmQ9XCJidG4udGl0bGVcIlxuICAgICAgICAgICAgaHlwZXJsaW5rLmJpbmQ9XCJidG4uaHlwZXJsaW5rXCIgdGFyZ2V0LmJpbmQ9XCJidG4udGFyZ2V0XCIgY29uZGl0aW9uYWxjbGFzcy5iaW5kPVwiYnRuLmNvbmRpdGlvbmFsY2xhc3NcIiBjb25kaXRpb25hbHN0eWxlLmJpbmQ9XCJidG4uY29uZGl0aW9uYWxzdHlsZVwiPjwvYT5cbjwvbmctdGVtcGxhdGU+XG5cbjxkaXYgaGlkZGVuPlxuICAgIDxuZy1jb250YWluZXIgI211bHRpQ29sdW1uRmlsdGVyVmlldz48L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgI2lubGluZUVkaXRWaWV3PjwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAjaW5saW5lRWRpdE5ld1ZpZXc+PC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICNyb3dBY3Rpb25zVmlldz48L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgI3Jvd0V4cGFuc2lvbkFjdGlvblZpZXc+PC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICNjdXN0b21FeHByVmlldz48L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgI2R5bmFtaWNUYWJsZT48L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgI3Jvd0RldGFpbFZpZXc+PC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy10YWJsZS1jb250YWluZXJcIj48L2Rpdj5cbjwvZGl2PlxuIl19
|