@datorama/core 22.12.7-beta.1 → 22.12.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/datorama-core.umd.js +8 -8
- package/bundles/datorama-core.umd.js.map +1 -1
- package/bundles/datorama-core.umd.min.js +29 -29
- package/bundles/datorama-core.umd.min.js.map +1 -1
- package/datorama-core.metadata.json +1 -1
- package/esm2015/lib/grid-v2/grid/grid-v2.types.js +4 -4
- package/esm2015/lib/grid-v2/grid-controller/grid-controller.component.js +3 -5
- package/esm2015/lib/grid-v2/grid-store/grid.service.js +4 -5
- package/esm2015/lib/grid-v2/grid-store/util.js +4 -1
- package/esm2015/lib/grid-v2/grid-v2.util.js +1 -1
- package/esm2015/lib/icon/icon.types.js +1 -1
- package/esm2015/lib/version.js +1 -1
- package/esm5/lib/grid-v2/grid/grid-v2.types.js +4 -4
- package/esm5/lib/grid-v2/grid-controller/grid-controller.component.js +3 -5
- package/esm5/lib/grid-v2/grid-store/grid.service.js +4 -5
- package/esm5/lib/grid-v2/grid-store/util.js +4 -1
- package/esm5/lib/grid-v2/grid-v2.util.js +1 -1
- package/esm5/lib/icon/icon.types.js +1 -1
- package/esm5/lib/version.js +1 -1
- package/fesm2015/datorama-core.js +8 -8
- package/fesm2015/datorama-core.js.map +1 -1
- package/fesm5/datorama-core.js +8 -8
- package/fesm5/datorama-core.js.map +1 -1
- package/lib/grid-v2/grid-store/util.d.ts +2 -0
- package/lib/grid-v2/grid-v2.util.d.ts +1 -1
- package/package.json +1 -1
|
@@ -9,7 +9,7 @@ import { coerceArray } from '../../utils/coercion';
|
|
|
9
9
|
import { isEmpty, isFunction, isNil, isString } from '../../utils/validators';
|
|
10
10
|
import { validateFilter } from '../grid-filter/filter-validator';
|
|
11
11
|
import { IconRegistry, SvgRegistry } from '../../services/icon-registry';
|
|
12
|
-
import { getVisibleActions, toolbarActionToContextAction } from
|
|
12
|
+
import { getVisibleActions, toolbarActionToContextAction } from '../grid-v2.util';
|
|
13
13
|
import { copyToClipboard } from '../../directives/clipboard.directive';
|
|
14
14
|
import { GridStore } from './grid.store';
|
|
15
15
|
import { DATO_GRID_STORAGE_API } from '../grid-settings';
|
|
@@ -23,7 +23,7 @@ import { OperatorTypes } from '../../operator-toggler/operator-toggler.types';
|
|
|
23
23
|
import { deepmerge } from '../../internal/deep-merge';
|
|
24
24
|
import { combineLatest } from 'rxjs';
|
|
25
25
|
import { triggerWindowResize } from '../../utils/user-agent';
|
|
26
|
-
import { getColField, getColumnsSizes, tryParsePivotValue } from './util';
|
|
26
|
+
import { getColField, getColumnsSizes, isHtmlAllowedForCol, tryParsePivotValue } from './util';
|
|
27
27
|
import { DatoGridMultiSelectColumnHeaderComponent } from '../grid-column-header/grid-multi-select-header/grid-multi-select-header.component';
|
|
28
28
|
var GridService = /** @class */ (function () {
|
|
29
29
|
function GridService(store, gridQuery, translate, iconRegistry, svgRegistry, storageAPI, logger) {
|
|
@@ -298,8 +298,7 @@ var GridService = /** @class */ (function () {
|
|
|
298
298
|
!this.hasCellRenderer(normalized, gridOptions) &&
|
|
299
299
|
gridOptions.enableSearchHighlight) {
|
|
300
300
|
normalized.cellRenderer = function (params) {
|
|
301
|
-
var
|
|
302
|
-
var allowHTML = !gridOptions.disabledHTMLRenderingFields || !gridOptions.disabledHTMLRenderingFields.includes(colField);
|
|
301
|
+
var allowHTML = isHtmlAllowedForCol(gridOptions, params.colDef);
|
|
303
302
|
var isEditable = (isFunction(normalized.editable) && normalized.editable(params)) ||
|
|
304
303
|
(!isFunction(normalized.editable) && normalized.editable);
|
|
305
304
|
return isEditable
|
|
@@ -1158,4 +1157,4 @@ var GridService = /** @class */ (function () {
|
|
|
1158
1157
|
return GridService;
|
|
1159
1158
|
}());
|
|
1160
1159
|
export { GridService };
|
|
1161
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2NvcmUvIiwic291cmNlcyI6WyJsaWIvZ3JpZC12Mi9ncmlkLXN0b3JlL2dyaWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQXdCLE1BQU0sZUFBZSxDQUFDO0FBZXpFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUNMLG9CQUFvQixFQUtwQixzQkFBc0IsRUFRdkIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBU2xGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBa0IsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RSxPQUFPLEVBSUwsbUJBQW1CLEVBT25CLHVDQUF1QyxFQUN2QyxhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLDJCQUEy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QztZQUM3RCxJQUFNLGVBQWUsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsVUFBQSxHQUFHLElBQUksT0FBQSxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQXRDLENBQXNDLENBQUMsQ0FBQztZQUVoRyxPQUFPLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNyRDtRQUVELE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDWixDQUFDOztnQkEvcENnQixTQUFTO2dCQUNMLFNBQVM7Z0JBQ1Qsb0JBQW9CO2dCQUNqQixZQUFZO2dCQUNiLFdBQVc7Z0RBQy9CLE1BQU0sU0FBQyxxQkFBcUI7Z0RBQzVCLE1BQU0sU0FBQyxnQkFBZ0I7O0lBaENmLFdBQVc7UUFEdkIsVUFBVSxFQUFFO1FBZ0NSLFdBQUEsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUE7UUFDN0IsV0FBQSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTt5Q0FOVixTQUFTO1lBQ0wsU0FBUztZQUNULG9CQUFvQjtZQUNqQixZQUFZO1lBQ2IsV0FBVztPQTlCdkIsV0FBVyxDQTByQ3ZCO0lBQUQsa0JBQUM7Q0FBQSxBQTFyQ0QsSUEwckNDO1NBMXJDWSxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0b0dyaWRBcGkgfSBmcm9tICcuLi9ncmlkLWNvbnRyb2xsZXIvZ3JpZC1jb250cm9sbGVyLnR5cGVzJztcbmltcG9ydCB7XG4gIENlbGxDbGFzc1BhcmFtcyxcbiAgQ29sR3JvdXBEZWYsXG4gIENvbHVtbixcbiAgR2V0Q29udGV4dE1lbnVJdGVtc1BhcmFtcyxcbiAgR3JpZE9wdGlvbnMsXG4gIElDZWxsUmVuZGVyZXJQYXJhbXMsXG4gIElHZXRSb3dzUGFyYW1zLFxuICBSb3dOb2RlLFxuICBSb3dOb2RlVHJhbnNhY3Rpb24sXG4gIFJvd1NlbGVjdGVkRXZlbnRcbn0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuaW1wb3J0IHsgUm93RGF0YVRyYW5zYWN0aW9uIH0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHkvZGlzdC9saWIvcm93TW9kZWxzL2NsaWVudFNpZGUvY2xpZW50U2lkZVJvd01vZGVsJztcbmltcG9ydCB7IEdyaWRRdWVyeSB9IGZyb20gJy4vZ3JpZC5xdWVyeSc7XG5pbXBvcnQgeyBEYXRvQ29yZUVycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3JzJztcbmltcG9ydCB7IERhdG9UcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0b0N1c3RvbUhlYWRlclRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZC1jdXN0b20taGVhZGVyL2N1c3RvbS1oZWFkZXItdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBEYXRvRmlsdGVyQ29uZGl0aW9ucyxcbiAgRGF0b0dyaWRDb25kaXRpb25hbEZpbHRlcixcbiAgRGF0b0dyaWRFeHRlcm5hbEZpbHRlcixcbiAgRGF0b0dyaWRGaWx0ZXIsXG4gIERhdG9HcmlkRmlsdGVyQ29uZGl0aW9uLFxuICBEYXRvR3JpZEZpbHRlclNlY3Rpb25zLFxuICBEYXRvR3JpZEZpbHRlcnNNYXAsXG4gIERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb24sXG4gIFNlcnZlclNpZGVQYWdpbmF0aW9uQ29uZGl0aW9uLFxuICBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlcixcbiAgU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXJzLFxuICBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkxpc3RDb25kaXRpb24sXG4gIFNlcnZlclNpZGVQYWdpbmF0aW9uUmFuZ2VDb25kaXRpb25cbn0gZnJvbSAnLi4vZ3JpZC1maWx0ZXIvZ3JpZC1maWx0ZXIudHlwZXMnO1xuaW1wb3J0IHsgY29lcmNlQXJyYXkgfSBmcm9tICcuLi8uLi91dGlscy9jb2VyY2lvbic7XG5pbXBvcnQgeyBpc0VtcHR5LCBpc0Z1bmN0aW9uLCBpc05pbCwgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscy92YWxpZGF0b3JzJztcbmltcG9ydCB7IHZhbGlkYXRlRmlsdGVyIH0gZnJvbSAnLi4vZ3JpZC1maWx0ZXIvZmlsdGVyLXZhbGlkYXRvcic7XG5pbXBvcnQgeyBBZ0dyaWROZzIgfSBmcm9tICdhZy1ncmlkLWFuZ3VsYXInO1xuaW1wb3J0IHsgSWNvblJlZ2lzdHJ5LCBTdmdSZWdpc3RyeSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ljb24tcmVnaXN0cnknO1xuaW1wb3J0IHsgZ2V0VmlzaWJsZUFjdGlvbnMsIHRvb2xiYXJBY3Rpb25Ub0NvbnRleHRBY3Rpb24gfSBmcm9tIFwiLi4vZ3JpZC12Mi51dGlsXCI7XG5pbXBvcnQge1xuICBEYXRvR3JpZFNldHRpbmdzLFxuICBOb3JtYWxpemVPcHRpb25zUGFyYW1zLFxuICBQaXZvdENvbHVtbkRhdGEsXG4gIFNlcnZlclNpZGVQYWdpbmF0aW9uQ29uZmlnLFxuICBTdWNjZXNzV3JhcHBlclBhcmFtc1xufSBmcm9tICcuL2dyaWQuc3RvcmUudHlwZXMnO1xuaW1wb3J0IHsgUm93QWN0aW9uIH0gZnJvbSAnLi4vZ3JpZC10b29sYmFyL2dyaWQtdG9vbGJhci50eXBlcyc7XG5pbXBvcnQgeyBjb3B5VG9DbGlwYm9hcmQgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2NsaXBib2FyZC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgR3JpZFN0b3JlIH0gZnJvbSAnLi9ncmlkLnN0b3JlJztcbmltcG9ydCB7IERBVE9fR1JJRF9TVE9SQUdFX0FQSSwgR3JpZFN0b3JhZ2VBUEkgfSBmcm9tICcuLi9ncmlkLXNldHRpbmdzJztcbmltcG9ydCB7XG4gIEFjdGlvbkNvbnZlcnRlclBhcmFtcyxcbiAgRGF0b0dyaWRBbGlnbm1lbnQsXG4gIERhdG9HcmlkQ29sdW1uRGVmLFxuICBEYXRvR3JpZENvbHVtblR5cGVzLFxuICBEYXRvR3JpZEdldFJvd3NQYXJhbXMsXG4gIERhdG9HcmlkT3B0aW9ucyxcbiAgRGF0b0dyaWRTZXJ2ZXJTb3J0LFxuICBEYXRvR3JpZFNlcnZlclNvcnREaXJlY3Rpb24sXG4gIERhdG9HcmlkU29ydCxcbiAgRGF0b0dyaWRUcmVlQ29uZmlnLFxuICBlZGl0YWJsZUNlbGxSZW5kZXJlcldpdGhTZWFyY2hIaWdobGlnaHQsXG4gIEdyaWRNaW5XaWR0aHMsXG4gIEdyaWRSb3dTZWxlY3Rpb25UeXBlLFxuICBzZWFyY2hIaWdobGlnaHRDZWxsUmVuZGVyZXJcbn0gZnJvbSAnLi4vZ3JpZC9ncmlkLXYyLnR5cGVzJztcblxuaW1wb3J0IHsgY29udmVydFRvVHJlZURhdGEsIGRlZmF1bHRHcmlkT3B0aW9ucywgZGVmYXVsdEdyaWRUcmVlTGFiZWwgfSBmcm9tICcuLi9ncmlkL2dyaWQtdjIuY29uZmlnJztcbmltcG9ydCB7IGRpZmYgfSBmcm9tICcuLi8uLi91dGlscy9vYmplY3QnO1xuaW1wb3J0IHsgdW50aWxEZXN0cm95ZWQgfSBmcm9tICduZ3gtdGFrZS11bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IENvcmVFdmVudExvZ2dlciwgQ29yZUV2ZW50VHlwZXMsIERBVE9fQ09SRV9MT0dHRVIgfSBmcm9tICcuLi8uLi9ldmVudC1sb2dnZXInO1xuaW1wb3J0IHsgSGFzaE1hcCB9IGZyb20gJy4uLy4uL3V0aWxzL3R5cGVzJztcbmltcG9ydCB7IHNpemUgfSBmcm9tICcuLi8uLi91dGlscy9jb2xsZWN0aW9uJztcbmltcG9ydCB7IE9wZXJhdG9yVHlwZXMgfSBmcm9tICcuLi8uLi9vcGVyYXRvci10b2dnbGVyL29wZXJhdG9yLXRvZ2dsZXIudHlwZXMnO1xuaW1wb3J0IHsgZGVlcG1lcmdlIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvZGVlcC1tZXJnZSc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0cmlnZ2VyV2luZG93UmVzaXplIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXNlci1hZ2VudCc7XG5pbXBvcnQgeyBnZXRDb2xGaWVsZCwgZ2V0Q29sdW1uc1NpemVzLCB0cnlQYXJzZVBpdm90VmFsdWUgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgRGF0b0dyaWRNdWx0aVNlbGVjdENvbHVtbkhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2dyaWQtY29sdW1uLWhlYWRlci9ncmlkLW11bHRpLXNlbGVjdC1oZWFkZXIvZ3JpZC1tdWx0aS1zZWxlY3QtaGVhZGVyLmNvbXBvbmVudCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBHcmlkU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIGFwaTogRGF0b0dyaWRBcGk7XG4gIHRyZWVDb25maWc6IERhdG9HcmlkVHJlZUNvbmZpZyA9IGRlZmF1bHRHcmlkVHJlZUxhYmVsO1xuICBpc1Bpdm90TW9kZTogYm9vbGVhbjtcblxuICAvKiogQGludGVybmFsIC0gdXNlZCBmb3Igc2VydmVyIHNpZGUgYnkgdmFsdWUgZmlsdGVyICovXG4gIF9vcmlnaW5hbEdldFJvd3M6IChwYXJhbXM6IERhdG9HcmlkR2V0Um93c1BhcmFtcykgPT4gdm9pZDtcbiAgcHJpdmF0ZSBpbml0aWFsU2V0dGluZ3M6IERhdG9HcmlkU2V0dGluZ3M7XG4gIHByaXZhdGUgZ3JpZE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBncmlkUmVmOiBBZ0dyaWROZzI7XG4gIHByaXZhdGUgY3VzdG9tSGVhZGVyc1RlbXBsYXRlczogUXVlcnlMaXN0PERhdG9DdXN0b21IZWFkZXJUZW1wbGF0ZUNvbXBvbmVudD47XG4gIHByaXZhdGUgaXNUcmVlRGF0YTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBwYWdlTnVtYmVyVG9SZXR1cm5BZnRlclJlZnJlc2ggPSAtMTtcbiAgcHJpdmF0ZSBsYXN0VG90YWxSb3dzOiBudW1iZXI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBDSEVDS0JPWF9TRUxFQ1RJT05fQ09MX0lEID0gJ2dyaWQtY2hlY2tib3gtc2VsZWN0aW9uJztcblxuICBzZXQgdHJlZURhdGEoaXNUcmVlRGF0YTogYm9vbGVhbikge1xuICAgIHRoaXMuaXNUcmVlRGF0YSA9IGlzVHJlZURhdGE7XG4gIH1cblxuICBnZXQgdHJlZURhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNUcmVlRGF0YTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RvcmU6IEdyaWRTdG9yZSxcbiAgICBwcml2YXRlIGdyaWRRdWVyeTogR3JpZFF1ZXJ5LFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBEYXRvVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGljb25SZWdpc3RyeTogSWNvblJlZ2lzdHJ5LFxuICAgIHByaXZhdGUgc3ZnUmVnaXN0cnk6IFN2Z1JlZ2lzdHJ5LFxuICAgIEBJbmplY3QoREFUT19HUklEX1NUT1JBR0VfQVBJKSBwcml2YXRlIHN0b3JhZ2VBUEk6IEdyaWRTdG9yYWdlQVBJLFxuICAgIEBJbmplY3QoREFUT19DT1JFX0xPR0dFUikgcHJpdmF0ZSBsb2dnZXI6IENvcmVFdmVudExvZ2dlclxuICApIHt9XG5cbiAgbmdPbkRlc3Ryb3koKSB7fVxuXG4gIC8qKiBAaW50ZXJuYWwgLSB1c2VkIHRvIGluaXQgdGhlIHNlcnZpY2UgKi9cbiAgX3NldEFwaShhcGk6IERhdG9HcmlkQXBpLCBncmlkUmVmOiBBZ0dyaWROZzIpIHtcbiAgICB0aGlzLmFwaSA9IGFwaTtcbiAgICB0aGlzLmdyaWRSZWYgPSBncmlkUmVmO1xuICAgIHRoaXMuZ3JpZE5hbWUgPSAoZ3JpZFJlZi5ncmlkT3B0aW9ucyBhcyBEYXRvR3JpZE9wdGlvbnMpLmdyaWROYW1lO1xuICAgIHRoaXMuc2V0U2VydmVyU2lkZVBhZ2luYXRpb24oe1xuICAgICAgZW5hYmxlZDogdGhpcy5pc1NlcnZlclNpZGVQYWdpbmF0aW9uKGdyaWRSZWYuZ3JpZE9wdGlvbnMpXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzU2VydmVyU2lkZVBhZ2luYXRpb24oZ3JpZE9wdGlvbnM6IEdyaWRPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGdyaWRPcHRpb25zLnJvd01vZGVsVHlwZSA9PT0gJ2luZmluaXRlJztcbiAgfVxuXG4gIHVwZGF0ZUdyaWRDb250ZXh0KGNvbnRleHQgPSB7fSwgcmVwbGFjZSA9IGZhbHNlKSB7XG4gICAgdGhpcy5ncmlkUXVlcnkuZ2V0R3JpZE9wdGlvbnMoKS5jb250ZXh0ID0gcmVwbGFjZVxuICAgICAgPyBjb250ZXh0XG4gICAgICA6IGRlZXBtZXJnZSh0aGlzLmdyaWRSZWYuZ3JpZE9wdGlvbnMuY29udGV4dCB8fCB7fSwgY29udGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIHNlbGVjdFJvd3MgaW5zdGVhZFxuICAgKiBAcGFyYW0gcm93XG4gICAqL1xuICBzZXRTZWxlY3RlZFJvd3M8VD4ocm93OiAoVCAmIFJvd05vZGUpIHwgKFRbXSAmIFJvd05vZGVbXSkpIHtcbiAgICB0aGlzLnNlbGVjdFJvd3Mocm93KTtcbiAgfVxuXG4gIHNlbGVjdFJvd3M8VD4ocm93OiAoVCAmIFJvd05vZGUpIHwgKFRbXSAmIFJvd05vZGVbXSkpIHtcbiAgICBjb25zdCByb3dOb2RlcyA9IGNvZXJjZUFycmF5KHJvdykuZmlsdGVyKHJvd05vZGUgPT4gIXJvd05vZGUuaXNTZWxlY3RlZCgpKTtcbiAgICBjb25zdCBsYXN0Tm9kZSA9IHJvd05vZGVzLnBvcCgpO1xuICAgIHJvd05vZGVzLmZvckVhY2gocm93Tm9kZSA9PiByb3dOb2RlLnNldFNlbGVjdGVkKHRydWUsIGZhbHNlLCB0cnVlKSk7XG4gICAgaWYgKGxhc3ROb2RlKSB7XG4gICAgICBsYXN0Tm9kZS5zZXRTZWxlY3RlZCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBkZXNlbGVjdFJvd3M8VD4ocm93OiAoVCAmIFJvd05vZGUpIHwgKFRbXSAmIFJvd05vZGVbXSkpIHtcbiAgICBjb25zdCByb3dOb2RlcyA9IGNvZXJjZUFycmF5KHJvdykuZmlsdGVyKHJvd05vZGUgPT4gcm93Tm9kZS5pc1NlbGVjdGVkKCkpO1xuICAgIGNvbnN0IGxhc3ROb2RlID0gcm93Tm9kZXMucG9wKCk7XG4gICAgcm93Tm9kZXMuZm9yRWFjaChyb3dOb2RlID0+IHJvd05vZGUuc2V0U2VsZWN0ZWQoZmFsc2UsIGZhbHNlLCB0cnVlKSk7XG4gICAgaWYgKGxhc3ROb2RlKSB7XG4gICAgICBsYXN0Tm9kZS5zZXRTZWxlY3RlZChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgc2V0Um93czxUPihkYXRhOiBUW10sIGZpdENvbnRhaW5lciA9IGZhbHNlLCB0cmVlQ29uZmlnOiBQYXJ0aWFsPERhdG9HcmlkVHJlZUNvbmZpZz4gPSB7fSkge1xuICAgIHRoaXMuZ3JpZFF1ZXJ5LmdyaWRSZWFkeSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNUcmVlRGF0YSkge1xuICAgICAgICB0aGlzLnRyZWVDb25maWcgPSB7XG4gICAgICAgICAgLi4uZGVmYXVsdEdyaWRUcmVlTGFiZWwsXG4gICAgICAgICAgLi4udHJlZUNvbmZpZ1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0cmVlRGF0ZSA9IGNvbnZlcnRUb1RyZWVEYXRhKGRhdGEsIHRoaXMudHJlZUNvbmZpZyk7XG4gICAgICAgIHRoaXMuYXBpLmdyaWQuc2V0Um93RGF0YSh0cmVlRGF0ZSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNQaXZvdE1vZGUpIHtcbiAgICAgICAgdGhpcy5zZXRQaXZvdE1vZGVSb3dzPFQ+KGRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hcGkuZ3JpZC5zZXRSb3dEYXRhKGRhdGEpO1xuICAgICAgfVxuICAgICAgaWYgKGZpdENvbnRhaW5lcikge1xuICAgICAgICB0aGlzLmZpdEdyaWQoJ2NvbnRhaW5lcicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJpZ2dlcldpbmRvd1Jlc2l6ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0RGF0YXNvdXJjZShnZXRSb3dzOiAocGFyYW1zOiBEYXRvR3JpZEdldFJvd3NQYXJhbXMpID0+IHZvaWQsIHJldHVyblRvQ3VycmVudFBhZ2UgPSBmYWxzZSwgc2hvd0xvYWRpbmcgPSBmYWxzZSkge1xuICAgIHJldHVyblRvQ3VycmVudFBhZ2UgJiYgdGhpcy51cGRhdGVQYWdlVG9LZWVwT25SZWZyZXNoU2VydmVyRGF0YSgpO1xuICAgIHNob3dMb2FkaW5nICYmIHRoaXMuc2V0TG9hZGluZyh0cnVlKTtcbiAgICB0aGlzLl9vcmlnaW5hbEdldFJvd3MgPSBnZXRSb3dzO1xuICAgIHRoaXMuYXBpLmdyaWQuc2V0RGF0YXNvdXJjZSh7IGdldFJvd3M6IHRoaXMud3JhcEdldFJvd3ModGhpcy5ncmlkUXVlcnkuZ2V0R3JpZE9wdGlvbnMoKSwgZ2V0Um93cykgfSk7XG4gIH1cblxuICByZWZyZXNoU2VydmVyRGF0YShrZWVwQ3VycmVudFBhZ2UgPSBmYWxzZSwgc2hvd0xvYWRpbmcgPSBmYWxzZSkge1xuICAgIGtlZXBDdXJyZW50UGFnZSAmJiB0aGlzLnVwZGF0ZVBhZ2VUb0tlZXBPblJlZnJlc2hTZXJ2ZXJEYXRhKCk7XG4gICAgc2hvd0xvYWRpbmcgJiYgdGhpcy5zZXRMb2FkaW5nKHRydWUpO1xuICAgIHRoaXMuYXBpLmdyaWQuc2V0RGF0YXNvdXJjZSh7IGdldFJvd3M6IHRoaXMuZ3JpZFF1ZXJ5LmdldEdyaWRPcHRpb25zKCkuZGF0YXNvdXJjZS5nZXRSb3dzIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVQYWdlVG9LZWVwT25SZWZyZXNoU2VydmVyRGF0YSgpIHtcbiAgICAvLyBLZWVwaW5nIHRoZSBjdXJyZW50IHBhZ2Ugb24gc2VydmVyIHJlZnJlc2ggaXMgY3VycmVudGx5IGF2YWlsYWJsZSBvbmx5IHdoZW4gbm8gcGFnZSBjbGllbnQgY2FjaGluZyBpcyBlbmFibGVkXG4gICAgaWYgKHRoaXMuZ3JpZFF1ZXJ5LmdldEdyaWRPcHRpb25zKCkubWF4QmxvY2tzSW5DYWNoZSA9PT0gMSkge1xuICAgICAgdGhpcy5wYWdlTnVtYmVyVG9SZXR1cm5BZnRlclJlZnJlc2ggPSB0aGlzLmFwaS5ncmlkLnBhZ2luYXRpb25HZXRDdXJyZW50UGFnZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFkZFJvd3M8VD4ocm93OiBULCBpbmRleD86IG51bWJlcik6IFJvd05vZGVUcmFuc2FjdGlvbiB7XG4gICAgY29uc3Qgcm93cyA9IGNvZXJjZUFycmF5KHJvdyk7XG4gICAgY29uc3QgZGF0YTogUm93RGF0YVRyYW5zYWN0aW9uID0geyBhZGQ6IHJvd3MgfTtcbiAgICBpZiAoIWlzTmlsKGluZGV4KSkge1xuICAgICAgZGF0YS5hZGRJbmRleCA9IGluZGV4O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hcGkuZ3JpZC51cGRhdGVSb3dEYXRhKGRhdGEpO1xuICB9XG5cbiAgdXBkYXRlUm93czxUPihyb3c6IFRbXSk6IGFueSB7XG4gICAgY29uc3Qgcm93cyA9IGNvZXJjZUFycmF5KHJvdyk7XG4gICAgcmV0dXJuIHRoaXMuYXBpLmdyaWQudXBkYXRlUm93RGF0YSh7IHVwZGF0ZTogcm93cyB9KTtcbiAgfVxuXG4gIHVwZGF0ZVJvd1ZhbHVlPFQ+KHJvdzogUm93Tm9kZSwga2V5OiBzdHJpbmcsIG5ld1ZhbHVlOiBUKTtcbiAgdXBkYXRlUm93VmFsdWU8VD4oaWQ6IHN0cmluZywga2V5OiBzdHJpbmcsIG5ld1ZhbHVlOiBUKTtcbiAgdXBkYXRlUm93VmFsdWU8VD4ocm93OiBzdHJpbmcgfCBSb3dOb2RlLCBrZXk6IHN0cmluZywgbmV3VmFsdWU6IFQpIHtcbiAgICBjb25zdCByb3dOb2RlID0gaXNTdHJpbmcocm93KSA/IHRoaXMuYXBpLmdyaWQuZ2V0Um93Tm9kZShyb3cpIDogcm93O1xuICAgIHJvd05vZGUuc2V0RGF0YVZhbHVlKGtleSwgbmV3VmFsdWUpO1xuICB9XG5cbiAgcmVtb3ZlUm93cyhyb3c6IFJvd05vZGUgfCBSb3dOb2RlW10pOiBSb3dOb2RlVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHJvd3MgPSBjb2VyY2VBcnJheShyb3cpLm1hcCgoeyBkYXRhIH0pID0+IGRhdGEpO1xuICAgIHJldHVybiB0aGlzLmFwaS5ncmlkLnVwZGF0ZVJvd0RhdGEoeyByZW1vdmU6IHJvd3MgfSk7XG4gIH1cblxuICByZW1vdmVTZWxlY3RlZFJvd3MoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gdGhpcy5ncmlkUXVlcnkuZ2V0U2VsZWN0ZWRSb3dOb2RlcygpO1xuICAgIHJldHVybiB0aGlzLnJlbW92ZVJvd3Moc2VsZWN0ZWRSb3dzKTtcbiAgfVxuXG4gIGNsZWFyVGFibGUoKSB7XG4gICAgdGhpcy5zZXRSb3dzKFtdKTtcbiAgfVxuXG4gIHVwZGF0ZUNvbHVtbnMoY29sRGVmczogRGF0b0dyaWRDb2x1bW5EZWYgfCBEYXRvR3JpZENvbHVtbkRlZltdLCByZWxvYWRTZXR0aW5ncyA9IGZhbHNlKSB7XG4gICAgaWYgKCFjb2xEZWZzKSB7XG4gICAgICB0aHJvdyBuZXcgRGF0b0NvcmVFcnJvcignTm8gY29sdW1uRGVmcyB3ZXJlIHByb3ZpZGVkLiDwn5W18J+Pu+KAjeKZgO+4jycpO1xuICAgIH1cbiAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5ub3JtYWxpemVDb2x1bW5zKGNvZXJjZUFycmF5KGNvbERlZnMpKTtcbiAgICBjb25zdCBzYXZlZFNldHRpbmdzID0gcmVsb2FkU2V0dGluZ3MgJiYgdGhpcy5ncmlkUXVlcnkuZ2V0Q3VycmVudEdyaWRTZXR0aW5ncygpO1xuICAgIHRoaXMuYXBpLmdyaWQuc2V0Q29sdW1uRGVmcyhub3JtYWxpemVkKTtcbiAgICBpZiAoc2F2ZWRTZXR0aW5ncykge1xuICAgICAgdGhpcy5sb2FkU2F2ZWRTZXR0aW5ncyhzYXZlZFNldHRpbmdzKTtcbiAgICB9XG4gIH1cblxuICBub3JtYWxpemVPcHRpb25zKHBhcmFtczogTm9ybWFsaXplT3B0aW9uc1BhcmFtcykge1xuICAgIHRoaXMuY3VzdG9tSGVhZGVyc1RlbXBsYXRlcyA9IHBhcmFtcy5jdXN0b21IZWFkZXJzVGVtcGxhdGVzO1xuICAgIGNvbnN0IGhlYWRlckNvbXBvbmVudFBhcmFtcyA9IHsgZ3JpZFNlcnZpY2U6IHRoaXMsIGdyaWRRdWVyeTogdGhpcy5ncmlkUXVlcnkgfTtcbiAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuYXV0b0dyb3VwQ29sdW1uRGVmID0ge1xuICAgICAgLi4uaGVhZGVyQ29tcG9uZW50UGFyYW1zLFxuICAgICAgLi4ucGFyYW1zLmdyaWRPcHRpb25zLmF1dG9Hcm91cENvbHVtbkRlZlxuICAgIH07XG5cbiAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZGVmYXVsdENvbERlZiA9IHtcbiAgICAgIC4uLnBhcmFtcy5ncmlkT3B0aW9ucy5kZWZhdWx0Q29sRGVmLFxuICAgICAgaGVhZGVyQ29tcG9uZW50UGFyYW1zXG4gICAgfTtcbiAgICBpZiAodHlwZW9mIHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVTZWFyY2ggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlU2VhcmNoID0gcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZVYyXzE7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZUJhY2tncm91bmQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlQmFja2dyb3VuZCA9IHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVWMl8xO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHBhcmFtcy5ncmlkT3B0aW9ucy5zaG93TXVsdGlTZWxlY3Rpb25DaGVja2JveGVzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLnNob3dNdWx0aVNlbGVjdGlvbkNoZWNrYm94ZXMgPVxuICAgICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlVjJfMSAmJiBwYXJhbXMuZ3JpZE9wdGlvbnMucm93U2VsZWN0aW9uICE9PSBHcmlkUm93U2VsZWN0aW9uVHlwZS5TSU5HTEU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZVNlYXJjaEhpZ2hsaWdodCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVTZWFyY2hIaWdobGlnaHQgPVxuICAgICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlU2VhcmNoICYmIGRlZmF1bHRHcmlkT3B0aW9ucy5lbmFibGVTZWFyY2hIaWdobGlnaHQ7XG4gICAgfVxuICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5jb2x1bW5EZWZzID0gdGhpcy5ub3JtYWxpemVDb2x1bW5zKHBhcmFtcy5ncmlkT3B0aW9ucy5jb2x1bW5EZWZzLCBwYXJhbXMuZ3JpZE9wdGlvbnMpO1xuXG4gICAgLyoqIEFkZCBjb3JlIGZpbHRlcnMgKi9cbiAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuaXNFeHRlcm5hbEZpbHRlclByZXNlbnQgPSAoKSA9PiB0cnVlO1xuICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5kb2VzRXh0ZXJuYWxGaWx0ZXJQYXNzID0gKHJvdzogUm93Tm9kZSkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdmFsaWRhdGVGaWx0ZXIoeyByb3csIGFwaTogdGhpcy5ncmlkUXVlcnkuYXBpLmdyaWQgfSwgdGhpcy5ncmlkUXVlcnkuZ2V0RmlsdGVyKCkpICYmIHRoaXMucm93TWF0Y2hlc1NlYXJjaChyb3cpXG4gICAgICApO1xuICAgIH07XG5cbiAgICAvKiogV3JhcCB0aGUgc2VydmVyIHNpZGUgcGFnaW5hdGlvbiBnZXQgcm93cyBmdW5jdGlvbiAqL1xuICAgIGlmICh0aGlzLmlzU2VydmVyU2lkZVBhZ2luYXRpb24ocGFyYW1zLmdyaWRPcHRpb25zKSkge1xuICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLmJsb2NrTG9hZERlYm91bmNlTWlsbGlzID0gMzAwO1xuICAgICAgdGhpcy5fb3JpZ2luYWxHZXRSb3dzID0gcGFyYW1zLmdyaWRPcHRpb25zLmRhdGFzb3VyY2UuZ2V0Um93cztcbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5kYXRhc291cmNlLmdldFJvd3MgPSB0aGlzLndyYXBHZXRSb3dzKHBhcmFtcy5ncmlkT3B0aW9ucyk7XG4gICAgICAvKiBUaGUgY2FjaGUgc2l6ZSBpcyBzeW5jZWQgd2l0aCB0aGUgcGFnaW5hdGlvbiBwYWdlIHNpemUgKi9cbiAgICAgIGNvbnN0IGNhY2hlU2l6ZSA9IHBhcmFtcy5ncmlkT3B0aW9ucy5wYWdpbmF0aW9uUGFnZVNpemU7XG4gICAgICBpZiAoY2FjaGVTaXplKSB7XG4gICAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5jYWNoZUJsb2NrU2l6ZSA9IGNhY2hlU2l6ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRWRpdGFibGUgY2VsbCAqL1xuICAgIHRoaXMuaW5pdEVkaXRhYmxlQ29sdW1uc0NlbGxDbGFzcyhwYXJhbXMpO1xuXG4gICAgLyoqIFdyYXAgY29udGV4dCBtZW51ICovXG4gICAgcGFyYW1zLmdyaWRPcHRpb25zLmdldENvbnRleHRNZW51SXRlbXMgPSB0aGlzLndyYXBDb250ZXh0TWVudUJ1aWxkZXIocGFyYW1zKTtcblxuICAgIC8qKiBTYXZlIGdyaWQgc2V0dGluZ3MgKi9cbiAgICBjb25zdCB7IHNhdmVTZXR0aW5ncywgZ3JpZE5hbWUgfSA9IHBhcmFtcy5ncmlkT3B0aW9ucztcbiAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuc2F2ZVNldHRpbmdzID0gc2F2ZVNldHRpbmdzICE9PSBmYWxzZSAmJiAhaXNOaWwoZ3JpZE5hbWUpO1xuXG4gICAgLyoqIFNlcnZlciBTaWRlIFBhZ2luYXRpb24gZm9yIHNlbGVjdCBhbGwgb3B0aW9uICovXG4gICAgdGhpcy5pbml0T25Sb3dTZWxlY3RlZEZvclNlcnZlclNpZGVQYWdpbmF0aW9uKHBhcmFtcyk7XG5cbiAgICAvKiogQWRkIHBpdm90IHNwZWNpZmljIHJlcXVpcmVkIHNldHRpbmdzICovXG4gICAgaWYgKHBhcmFtcy5ncmlkT3B0aW9ucy5waXZvdE1vZGUpIHtcbiAgICAgIHRoaXMuaW5pdFBpdm90U2Vjb25kYXJ5Q29sc1Byb2Nlc3MocGFyYW1zKTtcbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5zYXZlU2V0dGluZ3MgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmdyaWRPcHRpb25zLnVzZVBpdm90R3JpZFN0eWxlKSB7XG4gICAgICBjb25zdCByb3dIZWlnaHQgPSAzMDtcblxuICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLnJvd0hlaWdodCA9IHJvd0hlaWdodDtcbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5kZWZhdWx0Q29sRGVmID0ge1xuICAgICAgICAuLi5wYXJhbXMuZ3JpZE9wdGlvbnMuZGVmYXVsdENvbERlZixcbiAgICAgICAgY2VsbENsYXNzUnVsZXM6IHRoaXMuZ2V0UGl2b3RNb2RlQ2VsbENsYXNzUnVsZXMoKSxcbiAgICAgICAgaGVhZGVyQ2xhc3M6IHRoaXMuZ2V0UGl2b3RIZWFkZXJDbGFzcy5iaW5kKHRoaXMpLFxuICAgICAgICBjZWxsU3R5bGU6IHBhcmFtcyA9PiB7XG4gICAgICAgICAgY29uc3Qgc3R5bGU6IGFueSA9IHsgbGluZUhlaWdodDogYCR7cm93SGVpZ2h0fXB4YCB9O1xuXG4gICAgICAgICAgaWYgKHBhcmFtcy5jb2xEZWYudHlwZSA9PT0gRGF0b0dyaWRDb2x1bW5UeXBlcy5OdW1iZXIpIHtcbiAgICAgICAgICAgIHN0eWxlLnRleHRBbGlnbiA9ICdlbmQnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLmF1dG9Hcm91cENvbHVtbkRlZiA9IHtcbiAgICAgICAgLi4ucGFyYW1zLmdyaWRPcHRpb25zLmF1dG9Hcm91cENvbHVtbkRlZixcbiAgICAgICAgY2VsbENsYXNzUnVsZXM6IHRoaXMuZ2V0UGl2b3RNb2RlQ2VsbENsYXNzUnVsZXMoKSxcbiAgICAgICAgaGVhZGVyQ2xhc3M6IHRoaXMuZ2V0UGl2b3RIZWFkZXJDbGFzcy5iaW5kKHRoaXMpXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXMuZ3JpZE9wdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGdldFBpdm90SGVhZGVyQ2xhc3MocGFyYW1zKSB7XG4gICAgY29uc3QgZ3JpZFF1ZXJ5ID0gcGFyYW1zLmNvbERlZi5oZWFkZXJDb21wb25lbnRQYXJhbXMuZ3JpZFF1ZXJ5O1xuICAgIGxldCBjZWxsQ2xhc3MgPSAnJztcblxuICAgIGlmIChncmlkUXVlcnkgJiYgZ3JpZFF1ZXJ5LmFwaSkge1xuICAgICAgY29uc3QgeyBjb2x1bW5zIH0gPSBncmlkUXVlcnkuYXBpIGFzIERhdG9HcmlkQXBpO1xuICAgICAgLyoqIFVzZSBnZXRQaXZvdFJlc3VsdENvbHVtbnMgZnJvbSB2ZXIgMjggKi9cbiAgICAgIGNvbnN0IHBpdm90Q29sdW1ucyA9IGNvbHVtbnMuZ2V0U2Vjb25kYXJ5Q29sdW1ucygpO1xuXG4gICAgICBpZiAocGl2b3RDb2x1bW5zICYmIHBpdm90Q29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNlbGxDbGFzcyArPSAndG9wLWJvcmRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNlbGxDbGFzcztcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplQ29sdW1ucyhjb2xEZWZzOiBEYXRvR3JpZENvbHVtbkRlZltdLCBncmlkT3B0aW9uczogRGF0b0dyaWRPcHRpb25zID0gbnVsbCk6IERhdG9HcmlkQ29sdW1uRGVmW10ge1xuICAgIGlmICghZ3JpZE9wdGlvbnMpIHtcbiAgICAgIGdyaWRPcHRpb25zID0gdGhpcy5ncmlkUXVlcnkuZ2V0R3JpZE9wdGlvbnMoKTtcbiAgICB9XG4gICAgY29uc3QgdXBkYXRlZENvbERlZnMgPSBjb2xEZWZzLm1hcCgoY29sOiBEYXRvR3JpZENvbHVtbkRlZikgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IHtcbiAgICAgICAgLi4uY29sLFxuICAgICAgICBoZWFkZXJOYW1lOiB0aGlzLnRyYW5zbGF0ZS50cmFuc2Zvcm0oY29sLmhlYWRlck5hbWUpXG4gICAgICB9O1xuICAgICAgLyoqIEFkanVzdCB0aGUgd2lkdGggaW4gY2FzZSB0aGUgY29sdW1uIGhhcyBpbmZvICovXG4gICAgICBpZiAoY29sLmluZm8pIHtcbiAgICAgICAgbm9ybWFsaXplZC5taW5XaWR0aCA9IGNvbC5taW5XaWR0aCB8fCBHcmlkTWluV2lkdGhzLldpdGhfSW5mbztcbiAgICAgIH1cbiAgICAgIGlmICghY29sLmNvbElkKSB7XG4gICAgICAgIG5vcm1hbGl6ZWQuY29sSWQgPSBjb2wuZmllbGQ7XG4gICAgICB9XG4gICAgICBpZiAobm9ybWFsaXplZC50eXBlID09PSBEYXRvR3JpZENvbHVtblR5cGVzLkl0ZW1zICYmICFub3JtYWxpemVkLmZpbHRlcnNDb25maWcpIHtcbiAgICAgICAgbm9ybWFsaXplZC5maWx0ZXJzQ29uZmlnID0geyBzZWN0aW9uczogRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCB9O1xuICAgICAgfVxuICAgICAgdGhpcy5ub3JtYWxpemVDb2x1bW5TZWFyY2hDb25maWcoZ3JpZE9wdGlvbnMsIGNvbCwgbm9ybWFsaXplZCk7XG4gICAgICByZXR1cm4gbm9ybWFsaXplZDtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmFkZE11bHRpU2VsZWN0SGVhZGVyQ29sdW1uSWZSZXF1aXJlZCh1cGRhdGVkQ29sRGVmcywgZ3JpZE9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVDb2x1bW5TZWFyY2hDb25maWcoXG4gICAgZ3JpZE9wdGlvbnM6IERhdG9HcmlkT3B0aW9ucyxcbiAgICBjb2w6IERhdG9HcmlkQ29sdW1uRGVmLFxuICAgIG5vcm1hbGl6ZWQ6IERhdG9HcmlkQ29sdW1uRGVmXG4gICkge1xuICAgIC8qKiBDaGVjayBpZiBjb2x1bW4gc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gc2VhcmNoICoqL1xuICAgIGNvbnN0IGlzU2VydmVyUGFnaW5hdGlvbiA9IHRoaXMuaXNTZXJ2ZXJTaWRlUGFnaW5hdGlvbihncmlkT3B0aW9ucyk7XG4gICAgaWYgKHR5cGVvZiBjb2wuaW5jbHVkZUluU2VhcmNoID09PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKGlzU2VydmVyUGFnaW5hdGlvbiAmJiBjb2wudHlwZSA9PT0gRGF0b0dyaWRDb2x1bW5UeXBlcy5EYXRlKSB7XG4gICAgICAgIG5vcm1hbGl6ZWQuaW5jbHVkZUluU2VhcmNoID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub3JtYWxpemVkLmluY2x1ZGVJblNlYXJjaCA9XG4gICAgICAgICAgdHlwZW9mIGdyaWRPcHRpb25zLmNvbHVtbnNJbmNsdWRlZEluU2VhcmNoQnlEZWZhdWx0ICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgPyBncmlkT3B0aW9ucy5jb2x1bW5zSW5jbHVkZWRJblNlYXJjaEJ5RGVmYXVsdFxuICAgICAgICAgICAgOiBkZWZhdWx0R3JpZE9wdGlvbnMuY29sdW1uc0luY2x1ZGVkSW5TZWFyY2hCeURlZmF1bHQ7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIG5vcm1hbGl6ZWQuaW5jbHVkZUluU2VhcmNoICYmXG4gICAgICAhdGhpcy5oYXNDZWxsUmVuZGVyZXIobm9ybWFsaXplZCwgZ3JpZE9wdGlvbnMpICYmXG4gICAgICBncmlkT3B0aW9ucy5lbmFibGVTZWFyY2hIaWdobGlnaHRcbiAgICApIHtcbiAgICAgIG5vcm1hbGl6ZWQuY2VsbFJlbmRlcmVyID0gKHBhcmFtczogSUNlbGxSZW5kZXJlclBhcmFtcykgPT4ge1xuICAgICAgICBjb25zdCBjb2xGaWVsZCA9IGdldENvbEZpZWxkKHBhcmFtcy5jb2xEZWYpO1xuICAgICAgICBjb25zdCBhbGxvd0hUTUwgPSAhZ3JpZE9wdGlvbnMuZGlzYWJsZWRIVE1MUmVuZGVyaW5nRmllbGRzIHx8ICFncmlkT3B0aW9ucy5kaXNhYmxlZEhUTUxSZW5kZXJpbmdGaWVsZHMuaW5jbHVkZXMoY29sRmllbGQpO1xuICAgICAgICBjb25zdCBpc0VkaXRhYmxlID1cbiAgICAgICAgICAoaXNGdW5jdGlvbihub3JtYWxpemVkLmVkaXRhYmxlKSAmJiBub3JtYWxpemVkLmVkaXRhYmxlKHBhcmFtcykpIHx8XG4gICAgICAgICAgKCFpc0Z1bmN0aW9uKG5vcm1hbGl6ZWQuZWRpdGFibGUpICYmIG5vcm1hbGl6ZWQuZWRpdGFibGUpO1xuXG4gICAgICAgIHJldHVybiBpc0VkaXRhYmxlXG4gICAgICAgICAgPyBlZGl0YWJsZUNlbGxSZW5kZXJlcldpdGhTZWFyY2hIaWdobGlnaHQocGFyYW1zLCB0aGlzLmdyaWRRdWVyeS5nZXRTZWFyY2hUZXJtKCksIGFsbG93SFRNTClcbiAgICAgICAgICA6IHNlYXJjaEhpZ2hsaWdodENlbGxSZW5kZXJlcihwYXJhbXMsIHRoaXMuZ3JpZFF1ZXJ5LmdldFNlYXJjaFRlcm0oKSwgYWxsb3dIVE1MKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYXNDZWxsUmVuZGVyZXIoY29sdW1uOiBEYXRvR3JpZENvbHVtbkRlZiwgZ3JpZE9wdGlvbnM6IERhdG9HcmlkT3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgIGlmIChjb2x1bW4uY2VsbFJlbmRlcmVyKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgdHlwZSA9IGNvbHVtbi50eXBlIGFzIHN0cmluZztcbiAgICBjb25zdCBjb2x1bW5UeXBlSGFzQ2VsbFJlbmRlcmVyID0gKG9wdGlvbnM6IFBhcnRpYWw8RGF0b0dyaWRPcHRpb25zPik6IGJvb2xlYW4gPT5cbiAgICAgIG9wdGlvbnMuY29sdW1uVHlwZXMgJiYgISFvcHRpb25zLmNvbHVtblR5cGVzW3R5cGVdICYmICEhb3B0aW9ucy5jb2x1bW5UeXBlc1t0eXBlXS5jZWxsUmVuZGVyZXI7XG5cbiAgICByZXR1cm4gY29sdW1uVHlwZUhhc0NlbGxSZW5kZXJlcihncmlkT3B0aW9ucykgfHwgY29sdW1uVHlwZUhhc0NlbGxSZW5kZXJlcihkZWZhdWx0R3JpZE9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRNdWx0aVNlbGVjdEhlYWRlckNvbHVtbklmUmVxdWlyZWQoXG4gICAgY29sdW1uRGVmczogRGF0b0dyaWRDb2x1bW5EZWZbXSxcbiAgICBncmlkT3B0aW9uczogRGF0b0dyaWRPcHRpb25zXG4gICk6IERhdG9HcmlkQ29sdW1uRGVmW10ge1xuICAgIGNvbnN0IHNob3dNdWx0aVNlbGVjdGlvbkNoZWNrYm94ZXMgPSBncmlkT3B0aW9ucyAmJiBncmlkT3B0aW9ucy5zaG93TXVsdGlTZWxlY3Rpb25DaGVja2JveGVzO1xuICAgIGNvbnN0IHJvd1NlbGVjdGlvbiA9XG4gICAgICBncmlkT3B0aW9ucyAmJiBncmlkT3B0aW9ucy5yb3dTZWxlY3Rpb24gPyBncmlkT3B0aW9ucy5yb3dTZWxlY3Rpb24gOiBkZWZhdWx0R3JpZE9wdGlvbnMucm93U2VsZWN0aW9uO1xuXG4gICAgaWYgKHNob3dNdWx0aVNlbGVjdGlvbkNoZWNrYm94ZXMgJiYgcm93U2VsZWN0aW9uID09PSBHcmlkUm93U2VsZWN0aW9uVHlwZS5NVUxUSVBMRSkge1xuICAgICAgY29uc3QgY2hlY2tib3hlc0NvbHVtbjogRGF0b0dyaWRDb2x1bW5EZWYgPSB7XG4gICAgICAgIGNvbElkOiB0aGlzLkNIRUNLQk9YX1NFTEVDVElPTl9DT0xfSUQsXG4gICAgICAgIGNoZWNrYm94U2VsZWN0aW9uOiB0cnVlLFxuICAgICAgICBoZWFkZXJDb21wb25lbnRGcmFtZXdvcms6IERhdG9HcmlkTXVsdGlTZWxlY3RDb2x1bW5IZWFkZXJDb21wb25lbnQsXG4gICAgICAgIHdpZHRoOiAzMCxcbiAgICAgICAgbWF4V2lkdGg6IDMwLFxuICAgICAgICBzdXBwcmVzc1NpemVUb0ZpdDogdHJ1ZSxcbiAgICAgICAgY2VsbENsYXNzOiAnY2hlY2tib3gtc2VsZWN0aW9uLWNlbGwnLFxuICAgICAgICBoZWFkZXJDbGFzczogJ2hlYWRlci1jaGVja2JveC1zZWxlY3Rpb24tY2VsbCcsXG4gICAgICAgIHJlc2l6YWJsZTogZmFsc2UsXG4gICAgICAgIHBpbm5lZDogJ2xlZnQnLFxuICAgICAgICBsb2NrUG9zaXRpb246IHRydWUsXG4gICAgICAgIGluY2x1ZGVJblNlYXJjaDogZmFsc2VcbiAgICAgIH07XG4gICAgICByZXR1cm4gW2NoZWNrYm94ZXNDb2x1bW4sIC4uLmNvbHVtbkRlZnNdO1xuICAgIH1cbiAgICByZXR1cm4gY29sdW1uRGVmcztcbiAgfVxuXG4gIHByaXZhdGUgaW5pdE9uUm93U2VsZWN0ZWRGb3JTZXJ2ZXJTaWRlUGFnaW5hdGlvbih7IGdyaWRPcHRpb25zIH06IE5vcm1hbGl6ZU9wdGlvbnNQYXJhbXMpIHtcbiAgICBpZiAoIXRoaXMuaXNTZXJ2ZXJTaWRlUGFnaW5hdGlvbihncmlkT3B0aW9ucykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXh0ZXJuYWxPblJvd1NlbGVjdGVkID0gZ3JpZE9wdGlvbnMub25Sb3dTZWxlY3RlZDtcbiAgICBncmlkT3B0aW9ucy5vblJvd1NlbGVjdGVkID0gKGV2dDogUm93U2VsZWN0ZWRFdmVudCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JpZFF1ZXJ5LmlzU2VydmVyU2VsZWN0QWxsUm93c0VuYWJsZWQpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGV2dC5ub2RlO1xuICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gbm9kZS5pc1NlbGVjdGVkKCk7XG4gICAgICAgIGNvbnN0IHsgZXhjbHVkZWRGcm9tU2VsZWN0QWxsIH0gPSB0aGlzLmdyaWRRdWVyeS5zZXJ2ZXJTaWRlQ29uZmlnO1xuICAgICAgICBjb25zdCBpc0V4Y2x1ZGVkID0gZXhjbHVkZWRGcm9tU2VsZWN0QWxsLmluY2x1ZGVzKG5vZGUuaWQpO1xuICAgICAgICBpZiAoaXNTZWxlY3RlZCAmJiBpc0V4Y2x1ZGVkKSB7XG4gICAgICAgICAgdGhpcy5zZXRTZXJ2ZXJTaWRlUGFnaW5hdGlvbih7XG4gICAgICAgICAgICBleGNsdWRlZEZyb21TZWxlY3RBbGw6IGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbC5maWx0ZXIoKG5vZGVJZDogc3RyaW5nKSA9PiBub2RlSWQgIT09IG5vZGUuaWQpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzU2VsZWN0ZWQgJiYgIWlzRXhjbHVkZWQpIHtcbiAgICAgICAgICB0aGlzLnNldFNlcnZlclNpZGVQYWdpbmF0aW9uKHsgZXhjbHVkZWRGcm9tU2VsZWN0QWxsOiBbLi4uZXhjbHVkZWRGcm9tU2VsZWN0QWxsLCBub2RlLmlkXSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGV4dGVybmFsT25Sb3dTZWxlY3RlZCkge1xuICAgICAgICBleHRlcm5hbE9uUm93U2VsZWN0ZWQoZXZ0KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByb3dNYXRjaGVzU2VhcmNoKHJvdzogUm93Tm9kZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlYXJjaFRlcm0gPSAodGhpcy5ncmlkUXVlcnkuZ2V0U2VhcmNoVGVybSgpIHx8ICcnKS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBpZiAoaXNFbXB0eShzZWFyY2hUZXJtKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpLmluY2x1ZGVIaWRkZW5Db2x1bW5zSW5TZWFyY2hcbiAgICAgID8gdGhpcy5ncmlkUXVlcnkuZ2V0QWxsQ29sdW1ucygpXG4gICAgICA6IHRoaXMuZ3JpZFF1ZXJ5LmdldEFsbERpc3BsYXllZENvbHVtbnMoKTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICBjb25zdCBjb2xEZWYgPSB0aGlzLmFwaS5ncmlkLmdldENvbHVtbkRlZihjb2wuZ2V0Q29sSWQoKSkgYXMgRGF0b0dyaWRDb2x1bW5EZWY7XG4gICAgICBpZiAoIWNvbERlZi5pbmNsdWRlSW5TZWFyY2gpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByb3dWYWx1ZSA9ICh0aGlzLmFwaS5ncmlkLmdldFZhbHVlKGNvbC5nZXRDb2xJZCgpLCByb3cpIHx8ICcnKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAocm93VmFsdWUuaW5jbHVkZXMoc2VhcmNoVGVybSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgZml0R3JpZCgnY29udGFpbmVyJykgaW5zdGVhZFxuICAgKi9cbiAgZml0VG9Db250YWluZXIoKSB7XG4gICAgdGhpcy5hcGkuZ3JpZC5zaXplQ29sdW1uc1RvRml0KCk7XG4gIH1cblxuICBnZXRDdXN0b21IZWFkZXIoZmllbGQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmN1c3RvbUhlYWRlcnNUZW1wbGF0ZXMpIHtcbiAgICAgIGNvbnN0IHNwZWNpZmljID0gdGhpcy5jdXN0b21IZWFkZXJzVGVtcGxhdGVzLmZpbmQoKHsgY29sdW1uIH0pID0+IGNvbHVtbiA9PT0gZmllbGQpO1xuICAgICAgY29uc3QgY29tbW9uID0gdGhpcy5jdXN0b21IZWFkZXJzVGVtcGxhdGVzLmZpbmQoKHsgY29sdW1uIH0pID0+ICFjb2x1bW4pO1xuICAgICAgaWYgKHNwZWNpZmljIHx8IGNvbW1vbikge1xuICAgICAgICBjb25zdCB7IG1vcmVNZW51LCBjdXN0b21IZWFkZXIgfSA9IHtcbiAgICAgICAgICBtb3JlTWVudTogKHNwZWNpZmljICYmIHNwZWNpZmljLm1vcmVNZW51KSB8fCAoY29tbW9uICYmIGNvbW1vbi5tb3JlTWVudSksXG4gICAgICAgICAgY3VzdG9tSGVhZGVyOiAoc3BlY2lmaWMgJiYgc3BlY2lmaWMuY3VzdG9tSGVhZGVyKSB8fCAoY29tbW9uICYmIGNvbW1vbi5jdXN0b21IZWFkZXIpXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7IG1vcmVNZW51OiBtb3JlTWVudSAmJiBtb3JlTWVudS50cGwsIGN1c3RvbUhlYWRlcjogY3VzdG9tSGVhZGVyICYmIGN1c3RvbUhlYWRlci50cGwgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjbGVhckFsbEZpbHRlcnMoKSB7XG4gICAgdGhpcy5zdG9yZS51cGRhdGUoc3RhdGUgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5zZXR0aW5ncyxcbiAgICAgICAgICBmaWx0ZXI6IHt9LFxuICAgICAgICAgIHNlYXJjaFRlcm06IG51bGxcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLm5vdGlmeUZpbHRlclVwZGF0ZSgpO1xuICB9XG5cbiAgY2xlYXJDb2x1bW5GaWx0ZXIoY29sdW1uRmllbGQ6IHN0cmluZykge1xuICAgIGNvbnN0IHsgW2NvbHVtbkZpZWxkXTogZGVsZXRlZCwgLi4uZmlsdGVyIH0gPSB0aGlzLmdyaWRRdWVyeS5nZXRGaWx0ZXIoKTtcbiAgICB0aGlzLnN0b3JlLnVwZGF0ZShzdGF0ZSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXR0aW5nczoge1xuICAgICAgICAgIC4uLnN0YXRlLnNldHRpbmdzLFxuICAgICAgICAgIGZpbHRlclxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMubm90aWZ5RmlsdGVyVXBkYXRlKCk7XG4gIH1cblxuICBzZXRDb2x1bW5GaWx0ZXIoY29sdW1uOiBDb2x1bW4sIGZpbHRlcjogRGF0b0dyaWRGaWx0ZXIsIG5vdGlmeUdyaWQgPSB0cnVlKSB7XG4gICAgdGhpcy5fbG9nRXZlbnQoQ29yZUV2ZW50VHlwZXMuR1JJRF9GSUxURVJfQVBQTElFRCwge1xuICAgICAgY29sdW1uOiBjb2x1bW4uZ2V0Q29sSWQoKSxcbiAgICAgIG51bU9mQ29uZGl0aW9uczogKGZpbHRlci5jb25kaXRpb25hbCAmJiBmaWx0ZXIuY29uZGl0aW9uYWwuY29uZGl0aW9ucy5sZW5ndGgpIHx8IDAsXG4gICAgICBieVZhbHVlOiAhIWZpbHRlci5ieVZhbHVlID8gJ1llcycgOiAnTm8nXG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZUZpbHRlcihjb2x1bW4sIGZpbHRlcik7XG5cbiAgICBpZiAobm90aWZ5R3JpZCkge1xuICAgICAgdGhpcy5ub3RpZnlGaWx0ZXJVcGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICBzZXRHcmlkRmlsdGVycyhmaWx0ZXJzOiBEYXRvR3JpZEV4dGVybmFsRmlsdGVyW10pIHtcbiAgICBpZiAodGhpcy5hcGkgJiYgZmlsdGVycykge1xuICAgICAgbGV0IGFwcGxpZWRGaWx0ZXIgPSB7fTtcblxuICAgICAgZm9yIChjb25zdCB7IGZpbHRlciwgZmllbGQgfSBvZiBmaWx0ZXJzKSB7XG4gICAgICAgIGFwcGxpZWRGaWx0ZXJbZmllbGRdID0gZmlsdGVyO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVNldHRpbmdzKHsgZmlsdGVyOiBhcHBsaWVkRmlsdGVyIH0pO1xuICAgICAgdGhpcy5ub3RpZnlGaWx0ZXJVcGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICBzZXRTb3J0QnlDb2x1bW4oY29sSWQsIHNvcnQpIHtcbiAgICBjb25zdCBzb3J0VG9TZXQgPSB0aGlzLmdyaWRRdWVyeS5nZXRTb3J0KHsgY29sSWQsIHNvcnQgfSk7XG5cbiAgICB0aGlzLnNldEdyaWRTb3J0KHNvcnRUb1NldCk7XG4gIH1cblxuICBzZXRHcmlkU29ydChncmlkU29ydDogRGF0b0dyaWRTb3J0KSB7XG4gICAgaWYgKGdyaWRTb3J0ICYmIHRoaXMuYXBpICYmIHRoaXMuYXBpLmdyaWQuZ2V0RGlzcGxheWVkUm93Q291bnQoKSA+IDApIHtcbiAgICAgIGNvbnN0IHsgY29sSWQsIHNvcnQsIHNvcnRJbmRleCB9ID0gZ3JpZFNvcnQ7XG4gICAgICBjb25zdCBncmlkQ29sdW1ucyA9IHRoaXMuYXBpLmNvbHVtbnMuZ2V0QWxsR3JpZENvbHVtbnMoKTtcblxuICAgICAgaWYgKGdyaWRDb2x1bW5zKSB7XG4gICAgICAgIGxldCBzb3J0VG9BcHBseSA9IGdyaWRTb3J0O1xuICAgICAgICAvKiogU29ydCBieSBjb2x1bW4gaWQgKi9cbiAgICAgICAgY29uc3QgY29sdW1uQnlJZCA9IGdyaWRDb2x1bW5zLmZpbmQoKGNvbDogQ29sdW1uKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChjb2wuZ2V0Q29sRGVmKCkuc2hvd1Jvd0dyb3VwIHx8IGNvbC5nZXRDb2xJZCgpKSA9PT0gY29sSWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChjb2x1bW5CeUlkKSB7XG4gICAgICAgICAgc29ydFRvQXBwbHkgPSB7IGNvbElkOiBjb2x1bW5CeUlkLmdldENvbElkKCksIHNvcnQgfTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNOaWwoc29ydEluZGV4KSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlQ29sdW1ucyA9IHRoaXMuYXBpLmNvbHVtbnMuZ2V0VmFsdWVDb2x1bW5zKCk7XG4gICAgICAgICAgY29uc3QgdmFsdWVDb2x1bW4gPSB2YWx1ZUNvbHVtbnMuZmluZCgoY29sOiBDb2x1bW4pID0+IGNvbC5nZXRDb2xJZCgpID09PSBjb2xJZCk7XG4gICAgICAgICAgY29uc3QgaXNQaXZvdENvbElkID0gY29sSWQuc3RhcnRzV2l0aCgncGl2b3QnKTtcblxuICAgICAgICAgIGlmIChpc1Bpdm90Q29sSWQgfHwgdmFsdWVDb2x1bW4pIHtcbiAgICAgICAgICAgIC8qKiBDb2x1bW4gaXMgcGl2b3QgdmFsdWUgY29sdW1uLCBzb3J0IGJ5IGluZGV4ICovXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5CeUluZGV4ID0gZ3JpZENvbHVtbnNbc29ydEluZGV4XTtcblxuICAgICAgICAgICAgc29ydFRvQXBwbHkgPSB7IGNvbElkOiBjb2x1bW5CeUluZGV4LmdldENvbElkKCksIHNvcnQsIHNvcnRJbmRleCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlU2V0dGluZ3MoeyBzb3J0OiBzb3J0VG9BcHBseSB9KTtcbiAgICAgICAgdGhpcy5hcGkuZ3JpZC5zZXRTb3J0TW9kZWwoW3NvcnRUb0FwcGx5XSk7XG5cbiAgICAgICAgaWYgKCh0aGlzLmdyaWRSZWYuZ3JpZE9wdGlvbnMgYXMgRGF0b0dyaWRPcHRpb25zKS51c2VQaXZvdEdyaWRTdHlsZSkge1xuICAgICAgICAgIHRoaXMuYXBpLmdyaWQucmVkcmF3Um93cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGaWx0ZXIoY29sdW1uOiBDb2x1bW4sIGZpbHRlcjogRGF0b0dyaWRGaWx0ZXIpIHtcbiAgICBjb25zdCBjb2xGaWVsZCA9IGdldENvbEZpZWxkKGNvbHVtbi5nZXRDb2xEZWYoKSk7XG5cbiAgICB0aGlzLnN0b3JlLnVwZGF0ZShzdGF0ZSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXR0aW5nczoge1xuICAgICAgICAgIC4uLnN0YXRlLnNldHRpbmdzLFxuICAgICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgICAgLi4uc3RhdGUuc2V0dGluZ3MuZmlsdGVyLFxuICAgICAgICAgICAgW2NvbEZpZWxkXTogZmlsdGVyXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgc2V0U2VhcmNoVGVybShzZWFyY2hUZXJtOiBzdHJpbmcpIHtcbiAgICB0aGlzLnN0b3JlLnVwZGF0ZShzdGF0ZSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXR0aW5nczoge1xuICAgICAgICAgIC4uLnN0YXRlLnNldHRpbmdzLFxuICAgICAgICAgIHNlYXJjaFRlcm1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLm5vdGlmeUZpbHRlclVwZGF0ZSgpO1xuICB9XG5cbiAgc2V0U2VydmVyU2lkZVBhZ2luYXRpb24oY29uZmlnOiBQYXJ0aWFsPFNlcnZlclNpZGVQYWdpbmF0aW9uQ29uZmlnPikge1xuICAgIHRoaXMuc3RvcmUudXBkYXRlKHN0YXRlID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNlcnZlclNpZGVQYWdpbmF0aW9uOiB7XG4gICAgICAgICAgLi4uc3RhdGUuc2VydmVyU2lkZVBhZ2luYXRpb24sXG4gICAgICAgICAgLi4uY29uZmlnXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBzZXRMb2FkaW5nKHNob3c6IGJvb2xlYW4pIHtcbiAgICBpZiAoc2hvdykge1xuICAgICAgdGhpcy5hcGkuZ3JpZC5zaG93TG9hZGluZ092ZXJsYXkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hcGkuZ3JpZC5nZXREaXNwbGF5ZWRSb3dDb3VudCgpID09PSAwID8gdGhpcy5zZXRPdmVybGF5KHRydWUpIDogdGhpcy5zZXRPdmVybGF5KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIHNldE92ZXJsYXkgaW5zdGVhZFxuICAgKiBAcGFyYW0gc2hvd1xuICAgKi9cbiAgc2V0Tm9EYXRhKHNob3c6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldE92ZXJsYXkoc2hvdyk7XG4gIH1cblxuICBzZXRPdmVybGF5KHNob3c6IGJvb2xlYW4pIHtcbiAgICBzaG93ID8gdGhpcy5hcGkuZ3JpZC5zaG93Tm9Sb3dzT3ZlcmxheSgpIDogdGhpcy5hcGkuZ3JpZC5oaWRlT3ZlcmxheSgpO1xuICB9XG5cbiAgdXBkYXRlU2V0dGluZ3Moc2V0dGluZ3M6IFBhcnRpYWw8RGF0b0dyaWRTZXR0aW5ncz4pIHtcbiAgICB0aGlzLnN0b3JlLnVwZGF0ZShzdGF0ZSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXR0aW5nczoge1xuICAgICAgICAgIC4uLnN0YXRlLnNldHRpbmdzLFxuICAgICAgICAgIC4uLnNldHRpbmdzXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBmaXRHcmlkKHRvOiAnY29udGFpbmVyJyB8ICdjb250ZW50Jykge1xuICAgIHRvID09PSAnY29udGFpbmVyJyA/IHRoaXMuYXBpLmdyaWQuc2l6ZUNvbHVtbnNUb0ZpdCgpIDogdGhpcy5hcGkuY29sdW1ucy5hdXRvU2l6ZUFsbENvbHVtbnMoKTtcbiAgICBjb25zdCBncmlkQWxpZ25tZW50ID0gdG8gPT09ICdjb250YWluZXInID8gRGF0b0dyaWRBbGlnbm1lbnQuRklUX1RPX0NPTlRBSU5FUiA6IERhdG9HcmlkQWxpZ25tZW50LkZJVF9UT19DT05URU5UO1xuICAgIHRoaXMudXBkYXRlU2V0dGluZ3MoeyBncmlkQWxpZ25tZW50LCBjb2x1bW5zU2l6ZXM6IG51bGwgfSk7XG4gIH1cblxuICBzYXZlU2V0dGluZ3NUb1NlcnZlcihzZXR0aW5nczogUGFydGlhbDxEYXRvR3JpZFNldHRpbmdzPikge1xuICAgIHRoaXMuc3RvcmFnZUFQSS5zZXQodGhpcy5ncmlkTmFtZSwgc2V0dGluZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbCB1c2VkIHRvIGxvZyBncmlkIGV2ZW50cyB0byB0aGUgcGxhdGZvcm0ncyBsb2dnaW5nIHNlcnZpY2VcbiAgICovXG4gIF9sb2dFdmVudChldmVudFR5cGU6IENvcmVFdmVudFR5cGVzLCBldmVudFByb3BlcnRpZXM/OiBIYXNoTWFwPGFueT4pIHtcbiAgICB0aGlzLmxvZ2dlci5sb2dFdmVudChldmVudFR5cGUsIHsgdGFibGU6IHRoaXMuZ3JpZE5hbWUsIC4uLmV2ZW50UHJvcGVydGllcyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgd3JhcFN1Y2Nlc3NDYWxsYmFjayh7IHN1Y2Nlc3NDYiwgcGFnZU51bWJlciwgaXNQZW5kaW5nUmV0dXJuVG9QYWdlIH06IFN1Y2Nlc3NXcmFwcGVyUGFyYW1zKSB7XG4gICAgcmV0dXJuIChyb3dzVGhpc0Jsb2NrOiBhbnlbXSwgdG90YWxSb3dzOiBudW1iZXIpID0+IHtcbiAgICAgIHRoaXMuc2V0U2VydmVyU2lkZVBhZ2luYXRpb24oeyB0b3RhbFJvd3MsIGhhc0Vycm9yOiBmYWxzZSB9KTtcbiAgICAgIHN1Y2Nlc3NDYihyb3dzVGhpc0Jsb2NrLCB0b3RhbFJvd3MpO1xuICAgICAgdGhpcy5ncmlkUXVlcnkuX3NlcnZlckRhdGFMb2FkZWQubmV4dCh7XG4gICAgICAgIGFwaTogdGhpcy5hcGkuZ3JpZCxcbiAgICAgICAgY29sdW1uQXBpOiB0aGlzLmFwaS5jb2x1bW5zLFxuICAgICAgICB0eXBlOiAnU2VydmVyRGF0YUxvYWRlZCcsXG4gICAgICAgIHBhZ2luYXRpb25QYWdlOiBwYWdlTnVtYmVyXG4gICAgICB9KTtcbiAgICAgIGlmICghaXNQZW5kaW5nUmV0dXJuVG9QYWdlKSB7XG4gICAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgIC8qKiBzbyB0aGUgZ3JpZCBmaXRzIGluIGV2ZXJ5IG5ldyBkYXRhIGlucHV0ICovXG4gICAgICAgIHRyaWdnZXJXaW5kb3dSZXNpemUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGFzdFRvdGFsUm93cyA9IHRvdGFsUm93cztcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB3cmFwR2V0Um93cyhvcHRpb25zOiBEYXRvR3JpZE9wdGlvbnMsIGdldFJvd3M/OiAocGFyYW1zOiBEYXRvR3JpZEdldFJvd3NQYXJhbXMpID0+IHZvaWQpIHtcbiAgICBjb25zdCBnZXRSb3dzQ2IgPSBnZXRSb3dzIHx8IG9wdGlvbnMuZGF0YXNvdXJjZS5nZXRSb3dzO1xuICAgIHJldHVybiAoZ2V0Um93c1BhcmFtczogSUdldFJvd3NQYXJhbXMpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RhcnRSb3csIGVuZFJvdywgc29ydE1vZGVsLCBzdWNjZXNzQ2FsbGJhY2sgfSA9IGdldFJvd3NQYXJhbXM7XG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IG9wdGlvbnMucGFnaW5hdGlvblBhZ2VTaXplIHx8IDEwMDtcbiAgICAgIGNvbnN0IGlzUmV0dXJuVG9DdXJyZW50UGFnZVJlcXVpcmVkID0gdGhpcy5wYWdlTnVtYmVyVG9SZXR1cm5BZnRlclJlZnJlc2ggPiAwO1xuICAgICAgY29uc3QgaXNQZW5kaW5nUmV0dXJuVG9QYWdlID0gaXNSZXR1cm5Ub0N1cnJlbnRQYWdlUmVxdWlyZWQgJiYgc3RhcnRSb3cgPT09IDA7XG5cbiAgICAgIGNvbnN0IHBhZ2VOdW1iZXIgPSBpc1JldHVyblRvQ3VycmVudFBhZ2VSZXF1aXJlZFxuICAgICAgICA/IHRoaXMucGFnZU51bWJlclRvUmV0dXJuQWZ0ZXJSZWZyZXNoICsgMVxuICAgICAgICA6IE1hdGguY2VpbChlbmRSb3cgLyBwYWdlU2l6ZSk7XG5cbiAgICAgIHRoaXMucGFnZU51bWJlclRvUmV0dXJuQWZ0ZXJSZWZyZXNoID0gLTE7XG5cbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEZpbHRlcigpO1xuICAgICAgY29uc3QgbmV3UGFyYW1zOiBEYXRvR3JpZEdldFJvd3NQYXJhbXMgPSB7XG4gICAgICAgIC4uLmdldFJvd3NQYXJhbXMsXG4gICAgICAgIGZhaWxDYWxsYmFjazogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0U2VydmVyU2lkZVBhZ2luYXRpb24oeyBoYXNFcnJvcjogdHJ1ZSB9KTtcbiAgICAgICAgICB0aGlzLnNldE92ZXJsYXkodHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHN1Y2Nlc3NDYWxsYmFjazogdGhpcy53cmFwU3VjY2Vzc0NhbGxiYWNrKHsgcGFnZU51bWJlciwgc3VjY2Vzc0NiOiBzdWNjZXNzQ2FsbGJhY2ssIGlzUGVuZGluZ1JldHVyblRvUGFnZSB9KSxcbiAgICAgICAgc2VydmVyQ29uZmlnOiB7XG4gICAgICAgICAgcGFnZVNpemUsXG4gICAgICAgICAgcGFnZU51bWJlcixcbiAgICAgICAgICBjb2x1bW5GaWx0ZXJzOiBpc0VtcHR5KGZpbHRlcikgfHwgb3B0aW9ucy5lbmFibGVWMl8xID8gbnVsbCA6IHRoaXMuYnVpbGRTZXJ2ZXJSZXF1ZXN0RmlsdGVycyhmaWx0ZXIpLFxuICAgICAgICAgIGZpbHRlcjogb3B0aW9ucy5lbmFibGVWMl8xID8gdGhpcy5idWlsZFNlcnZlclJlcXVlc3RGaWx0ZXJzX3YyXzEob3B0aW9ucy5jb2x1bW5EZWZzKSA6IG51bGwsXG4gICAgICAgICAgc29ydDogdGhpcy5idWlsZFNlcnZlclJlcXVlc3RTb3J0KHNvcnRNb2RlbClcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChpc1BlbmRpbmdSZXR1cm5Ub1BhZ2UpIHtcbiAgICAgICAgLy8gU2NlbmFyaW8gdGhlIGZvbGxvd2luZyBoYW5kbGVzIC0gc2VydmVyIHJlZnJlc2ggd2hlcmUgaXQgd2FzIHJlcXVlc3RlZCB0byBrZWVwIHRoZSBjdXJyZW50IHBhZ2UuXG4gICAgICAgIC8vIFRoZSBwcm9ibGVtIC0gZ2V0Um93cyB3aWxsIGluaXRpYWxseSBiZSBjYWxsZWQgZm9yIHBhZ2UgMSAoYXV0b21hdGljYWxseSBoYXBwZW5zIHdoZW4gY2FsbGluZyBhZy1ncmlkJ3Mgc2V0RGF0YVNvdXJjZSkuXG4gICAgICAgIC8vIEluIG9yZGVyIHRvIHRyaWdnZXIgaXQgYWdhaW4sIHN1Y2Nlc3NDYWxsYmFjayBpcyBjYWxsZWQgd2l0aCB0aGUgZGVzaXJlZCBwYWdlLlxuICAgICAgICAvLyBmYWtlR2V0Um93cyBpcyB1c2VkIGluIG9yZGVyIHRvIGF2b2lkIHJldHJpZXZpbmcgdGhlIHVubmVjZXNzYXJ5IHJlYWwgZGF0YSBmb3IgcGFnZSAxLlxuICAgICAgICBjb25zdCBmYWtlR2V0Um93cyA9ICh7IHN1Y2Nlc3NDYWxsYmFjayB9OiBEYXRvR3JpZEdldFJvd3NQYXJhbXMpID0+IHtcbiAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2soW10sIHRoaXMubGFzdFRvdGFsUm93cyk7XG4gICAgICAgIH07XG4gICAgICAgIGZha2VHZXRSb3dzKG5ld1BhcmFtcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZXRSb3dzQ2IobmV3UGFyYW1zKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0RWRpdGFibGVDb2x1bW5zQ2VsbENsYXNzKHBhcmFtczogTm9ybWFsaXplT3B0aW9uc1BhcmFtcykge1xuICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5jb2x1bW5EZWZzLmZvckVhY2goY29sRGVmID0+IHtcbiAgICAgIGlmIChjb2xEZWYuZWRpdGFibGUpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY29sRGVmLmVkaXRhYmxlKSkge1xuICAgICAgICAgIGNvbnN0IGluaXRpYWxDZWxsQ2xhc3MgPSBjb2xEZWYuY2VsbENsYXNzO1xuICAgICAgICAgIGNvbERlZi5jZWxsQ2xhc3MgPSAoY2VsbENsYXNzUGFyYW1zOiBDZWxsQ2xhc3NQYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzRWRpdGFibGUgPSAoY29sRGVmLmVkaXRhYmxlIGFzIEZ1bmN0aW9uKShjZWxsQ2xhc3NQYXJhbXMgYXMgYW55KTtcbiAgICAgICAgICAgIGlmIChpc0VkaXRhYmxlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVkaXRhYmxlUmVzdWx0ID0gdGhpcy5hZGRFZGl0YWJsZUNlbGxDbGFzcyhpbml0aWFsQ2VsbENsYXNzKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZWRpdGFibGVSZXN1bHQpID8gZWRpdGFibGVSZXN1bHQoY2VsbENsYXNzUGFyYW1zKSA6IGVkaXRhYmxlUmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5pdGlhbENlbGxDbGFzcykgPyBpbml0aWFsQ2VsbENsYXNzKGNlbGxDbGFzc1BhcmFtcykgOiBpbml0aWFsQ2VsbENsYXNzO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sRGVmLmNlbGxDbGFzcyA9IHRoaXMuYWRkRWRpdGFibGVDZWxsQ2xhc3MoY29sRGVmLmNlbGxDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgd3JhcENvbnRleHRNZW51QnVpbGRlcihwYXJhbXM6IE5vcm1hbGl6ZU9wdGlvbnNQYXJhbXMpIHtcbiAgICBjb25zdCB7IGN1c3RvbUNvbnRleHRNZW51IH0gPSBwYXJhbXMuZ3JpZE9wdGlvbnM7XG4gICAgY29uc3QgYWxsQWN0aW9ucyA9IGlzRnVuY3Rpb24oY3VzdG9tQ29udGV4dE1lbnUpID8gY3VzdG9tQ29udGV4dE1lbnUocGFyYW1zLnJvd0FjdGlvbnMpIDogcGFyYW1zLnJvd0FjdGlvbnM7XG4gICAgdGhpcy50cmFuc2xhdGVBY3Rpb25MYWJlbHMoYWxsQWN0aW9ucyk7XG4gICAgY29uc3QgY29weUFjdGlvbjogUm93QWN0aW9uID0ge1xuICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSgnY29yZS5jb3B5LWNlbGwnKSxcbiAgICAgIGljb246ICdjb3B5JyxcbiAgICAgIGtleTogJ0NvcHkgQ2VsbCdcbiAgICB9O1xuICAgIHJldHVybiAoeyBub2RlLCBjb2x1bW4sIGNvbnRleHQgfTogR2V0Q29udGV4dE1lbnVJdGVtc1BhcmFtcykgPT4ge1xuICAgICAgY29uc3Qgb25Ib3ZlckFjdGlvbk1lbnUgPSBjb250ZXh0ICYmIGNvbnRleHQuY29udGV4dE1lbnUgJiYgY29udGV4dC5jb250ZXh0TWVudS5mcm9tT25Ib3ZlcjtcbiAgICAgIGlmICghbm9kZSkgcmV0dXJuIFtdO1xuICAgICAgbGV0IHNlbGVjdGVkID0gW25vZGVdO1xuICAgICAgbGV0IHJvd3NDb3VudCA9IDE7XG4gICAgICBpZiAob25Ib3ZlckFjdGlvbk1lbnUpIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmlkQ29udGV4dCh7IGNvbnRleHRNZW51OiB7IGZyb21PbkhvdmVyOiBmYWxzZSB9IH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29weUFjdGlvbi5vbkNsaWNrID0gKFtyb3ddKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmF3VmFsdWUgPSB0aGlzLmFwaS5ncmlkLmdldFZhbHVlKGNvbHVtbi5nZXRDb2xJZCgpLCByb3cpO1xuICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGNvbHVtbi5nZXRDb2xEZWYoKS52YWx1ZUZvcm1hdHRlcjtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZvcm1hdHRlciA/IGZvcm1hdHRlcihyYXdWYWx1ZSkgOiByYXdWYWx1ZTtcbiAgICAgICAgICBjb3B5VG9DbGlwYm9hcmQodmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAobm9kZS5pc1NlbGVjdGVkKCkpIHtcbiAgICAgICAgICBzZWxlY3RlZCA9IHRoaXMuZ3JpZFF1ZXJ5LmdldFNlbGVjdGVkUm93Tm9kZXMoKTtcbiAgICAgICAgICByb3dzQ291bnQgPSBzaXplKHNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgdmlzaWJsZUFjdGlvbnMgPSBnZXRWaXNpYmxlQWN0aW9ucyhcbiAgICAgICAgYWxsQWN0aW9ucyxcbiAgICAgICAgcm93c0NvdW50LFxuICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgdGhpcy5ncmlkUXVlcnkuaXNTZXJ2ZXJTZWxlY3RBbGxSb3dzRW5hYmxlZFxuICAgICAgKS5maWx0ZXIoKHsgdmlzaWJsZSB9KSA9PiB2aXNpYmxlKTtcbiAgICAgIGxldCB0b29sYmFyQWN0aW9ucyA9IFtjb3B5QWN0aW9uXTtcbiAgICAgIGlmIChvbkhvdmVyQWN0aW9uTWVudSkge1xuICAgICAgICB0b29sYmFyQWN0aW9ucyA9IHZpc2libGVBY3Rpb25zO1xuICAgICAgfSBlbHNlIGlmICh2aXNpYmxlQWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRvb2xiYXJBY3Rpb25zID0gW3sgLi4uY29weUFjdGlvbiwgc2VwYXJhdG9yOiB0cnVlIH0sIC4uLnZpc2libGVBY3Rpb25zXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnZlcnRlclBhcmFtczogQWN0aW9uQ29udmVydGVyUGFyYW1zID0ge1xuICAgICAgICB0b29sYmFyQWN0aW9ucyxcbiAgICAgICAgc2VsZWN0ZWRSb3dzOiBzZWxlY3RlZCxcbiAgICAgICAgaWNvblJlZ2lzdHJ5OiB0aGlzLnN2Z1JlZ2lzdHJ5LFxuICAgICAgICBub2RlLFxuICAgICAgICBsb2dnZXI6IHtcbiAgICAgICAgICBsb2c6IHRoaXMuX2xvZ0V2ZW50LmJpbmQodGhpcyksXG4gICAgICAgICAgZXZlbnRPcmlnaW46IG9uSG92ZXJBY3Rpb25NZW51ID8gJ09uIEhvdmVyJyA6ICdDb250ZXh0IE1lbnUnXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gdG9vbGJhckFjdGlvblRvQ29udGV4dEFjdGlvbihjb252ZXJ0ZXJQYXJhbXMpO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHRyYW5zbGF0ZUFjdGlvbkxhYmVscyhhbGxBY3Rpb25zOiBSb3dBY3Rpb25bXSkge1xuICAgIGFsbEFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgICAgYWN0aW9uLmxhYmVsID0gdGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKGFjdGlvbi5sYWJlbCk7XG4gICAgICBpZiAoYWN0aW9uLnN1Yk1lbnUpIHtcbiAgICAgICAgdGhpcy50cmFuc2xhdGVBY3Rpb25MYWJlbHMoYWN0aW9uLnN1Yk1lbnUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbG9hZFNhdmVkU2V0dGluZ3Moc2V0dGluZ3M6IFBhcnRpYWw8RGF0b0dyaWRTZXR0aW5ncz4pIHtcbiAgICBjb25zdCB7XG4gICAgICBzb3J0LFxuICAgICAgaGlkZGVuQ29sdW1ucyxcbiAgICAgIGZpbHRlcixcbiAgICAgIGdyb3VwZWRDb2x1bW5zLFxuICAgICAgY29sdW1uc1NpemVzLFxuICAgICAgcGlubmVkQ29sdW1ucyxcbiAgICAgIGNvbHVtbnNPcmRlcixcbiAgICAgIGdyaWRBbGlnbm1lbnRcbiAgICB9ID0gc2V0dGluZ3M7XG4gICAgY29uc3QgeyBncmlkLCBjb2x1bW5zIH0gPSB0aGlzLmFwaTtcbiAgICAvKiBIaWRlIGNvbHVtbnMgKi9cbiAgICAvKiBOT1RFOiBjb2x1bW5zIG9yZGVyIGFyZSB0cmVhdGVkIGFzIHRoZSBjdXJyZW50bHkgdmlzaWJsZSBjb2x1bW5zICovXG4gICAgY29sdW1ucy5zZXRDb2x1bW5zVmlzaWJsZSh0aGlzLmluaXRpYWxTZXR0aW5ncy5jb2x1bW5zT3JkZXIsIHRydWUpO1xuICAgIGNvbnN0IGNvbHVtblRvSGlkZSA9ICFpc05pbChoaWRkZW5Db2x1bW5zKSA/IGhpZGRlbkNvbHVtbnMgOiB0aGlzLmluaXRpYWxTZXR0aW5ncy5oaWRkZW5Db2x1bW5zO1xuICAgIGNvbHVtbnMuc2V0Q29sdW1uc1Zpc2libGUoY29sdW1uVG9IaWRlLCBmYWxzZSk7XG5cbiAgICAvKiBBcHBseSBmaWx0ZXJzICovXG4gICAgaWYgKGZpbHRlcikge1xuICAgICAgZ3JpZC5vbkZpbHRlckNoYW5nZWQoKTtcbiAgICB9XG5cbiAgICAvKiBHcm91cCBjb2x1bW5zICovXG4gICAgY29uc3QgYWxsR3JvdXBlZENvbHVtbnMgPSBjb2x1bW5zLmdldFJvd0dyb3VwQ29sdW1ucygpO1xuICAgIGxldCByZW1vdmVHcm91cGVkO1xuICAgIGlmIChncm91cGVkQ29sdW1ucykge1xuICAgICAgcmVtb3ZlR3JvdXBlZCA9IGFsbEdyb3VwZWRDb2x1bW5zLmZpbHRlcihjb2wgPT4gIWdyb3VwZWRDb2x1bW5zLmluY2x1ZGVzKGNvbC5nZXRDb2xJZCgpKSk7XG4gICAgICBjb2x1bW5zLmFkZFJvd0dyb3VwQ29sdW1ucyhncm91cGVkQ29sdW1ucyk7XG4gICAgICBjb2x1bW5zLnNldENvbHVtbnNWaXNpYmxlKGdyb3VwZWRDb2x1bW5zLCBmYWxzZSk7XG4gICAgfVxuICAgIGNvbHVtbnMucmVtb3ZlUm93R3JvdXBDb2x1bW5zKHJlbW92ZUdyb3VwZWQpO1xuICAgIGNvbHVtbnMuc2V0Q29sdW1uc1Zpc2libGUocmVtb3ZlR3JvdXBlZCwgdHJ1ZSk7XG5cbiAgICAvKiBBcHBseSBzb3J0ICovXG4gICAgY29uc3QgZ3JpZFNvcnQgPSBzb3J0IHx8IHRoaXMuaW5pdGlhbFNldHRpbmdzLnNvcnQ7XG4gICAgZ3JpZC5zZXRTb3J0TW9kZWwoZ3JpZFNvcnQgPyBbZ3JpZFNvcnRdIDogbnVsbCk7XG5cbiAgICAvKiBBbGlnbiBncmlkICovXG4gICAgaWYgKGdyaWRBbGlnbm1lbnQgPT09IERhdG9HcmlkQWxpZ25tZW50LkNVU1RPTSkge1xuICAgICAgLyogU2V0IGNvbHVtbiBzaXplcyAqL1xuICAgICAgY29sdW1uc1NpemVzICYmXG4gICAgICAgIE9iamVjdC5rZXlzKGNvbHVtbnNTaXplcykuZm9yRWFjaChjb2xJZCA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbnNTaXplc1tjb2xJZF0gPT09IERhdG9HcmlkQWxpZ25tZW50LkZJVF9UT19DT05URU5UKSB7XG4gICAgICAgICAgICBjb2x1bW5zLmF1dG9TaXplQ29sdW1uKGNvbElkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29sdW1ucy5zZXRDb2x1bW5XaWR0aChjb2xJZCwgY29sdW1uc1NpemVzW2NvbElkXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JpZEFsaWdubWVudCA9PT0gRGF0b0dyaWRBbGlnbm1lbnQuRklUX1RPX0NPTlRFTlQgPyBjb2x1bW5zLmF1dG9TaXplQWxsQ29sdW1ucygpIDogZ3JpZC5zaXplQ29sdW1uc1RvRml0KCk7XG4gICAgfVxuXG4gICAgLyogUGluIGNvbHVtbnMgbGVmdCAqL1xuICAgIGNvbnN0IGZpbHRlcmVkUGlubmVkQ29sdW1ucyA9IHBpbm5lZENvbHVtbnNcbiAgICAgID8gcGlubmVkQ29sdW1ucy5maWx0ZXIoKGNvbDogc3RyaW5nKSA9PiBjb2wgIT09IHRoaXMuQ0hFQ0tCT1hfU0VMRUNUSU9OX0NPTF9JRClcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSBjb2x1bW5zT3JkZXJcbiAgICAgID8gY29sdW1uc09yZGVyLmZpbHRlcigoY29sOiBzdHJpbmcpID0+IGNvbCAhPT0gdGhpcy5DSEVDS0JPWF9TRUxFQ1RJT05fQ09MX0lEKVxuICAgICAgOiBudWxsO1xuICAgIHNpemUoZmlsdGVyZWRQaW5uZWRDb2x1bW5zKSA+IDBcbiAgICAgID8gY29sdW1ucy5zZXRDb2x1bW5zUGlubmVkKGZpbHRlcmVkUGlubmVkQ29sdW1ucywgJ2xlZnQnKVxuICAgICAgOiBmaWx0ZXJlZENvbHVtbnMgJiYgY29sdW1ucy5zZXRDb2x1bW5zUGlubmVkKGZpbHRlcmVkQ29sdW1ucywgbnVsbCk7XG5cbiAgICAvKiBPcmRlciBjb2x1bW5zICovXG4gICAgY29sdW1uc09yZGVyICYmIGNvbHVtbnMubW92ZUNvbHVtbnMoY29sdW1uc09yZGVyLCAwKTtcbiAgfVxuXG4gIGdldFNldHRpbmdzRGlmZigpOiBQYXJ0aWFsPERhdG9HcmlkU2V0dGluZ3M+IHtcbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLmdyaWRRdWVyeS5nZXRDdXJyZW50R3JpZFNldHRpbmdzKCk7XG4gICAgcmV0dXJuIGRpZmYoY3VycmVudFN0YXRlLCB0aGlzLmluaXRpYWxTZXR0aW5ncyk7XG4gIH1cblxuICByZXNldFRhYmxlU2V0dGluZ3MoKSB7XG4gICAgY29uc3QgeyBmaWx0ZXIsIC4uLnJlc3QgfSA9IHRoaXMuaW5pdGlhbFNldHRpbmdzO1xuICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gdGhpcy5hcGk7XG4gICAgY29uc3Qgb3JpZ2luYWxDb2xTaXplcyA9IGdldENvbHVtbnNTaXplcyhjb2x1bW5zLmdldEFsbEdyaWRDb2x1bW5zKCksIHRydWUpO1xuICAgIGNvbnN0IGdyaWRBbGlnbm1lbnQgPSBpc0VtcHR5KG9yaWdpbmFsQ29sU2l6ZXMpID8gcmVzdC5ncmlkQWxpZ25tZW50IDogRGF0b0dyaWRBbGlnbm1lbnQuQ1VTVE9NO1xuICAgIGNvbnN0IG5ld1NldHRpbmdzID0geyAuLi5yZXN0LCBjb2x1bW5zU2l6ZXM6IG9yaWdpbmFsQ29sU2l6ZXMsIGdyaWRBbGlnbm1lbnQgfTtcbiAgICB0aGlzLnVwZGF0ZVNldHRpbmdzKG5ld1NldHRpbmdzKTtcbiAgICB0aGlzLmxvYWRTYXZlZFNldHRpbmdzKG5ld1NldHRpbmdzKTtcbiAgICB0aGlzLnNhdmVTZXR0aW5nc1RvU2VydmVyKHsgZmlsdGVyIH0pO1xuICB9XG5cbiAgaW5pdFNldHRpbmdzKHNhdmVkU2V0dGluZ3M6IFBhcnRpYWw8RGF0b0dyaWRTZXR0aW5ncz4pIHtcbiAgICB0aGlzLmluaXRpYWxTZXR0aW5ncyA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEN1cnJlbnRHcmlkU2V0dGluZ3MoKTtcbiAgICB0aGlzLnVwZGF0ZVNldHRpbmdzKHNhdmVkU2V0dGluZ3MpO1xuICAgIHRoaXMubG9hZFNhdmVkU2V0dGluZ3Moc2F2ZWRTZXR0aW5ncyk7XG4gIH1cblxuICBub3RpZnlGaWx0ZXJVcGRhdGUoKSB7XG4gICAgY29uc3Qgd2F0Y2ggPSBbdGhpcy5ncmlkUmVmLmZpbHRlckNoYW5nZWQuYXNPYnNlcnZhYmxlKCldO1xuICAgIGlmICh0aGlzLmdyaWRRdWVyeS5pc1NlcnZlclNpZGUpIHtcbiAgICAgIHdhdGNoLnB1c2godGhpcy5ncmlkUXVlcnkuc2VydmVyRGF0YUxvYWRlZCQpO1xuICAgICAgdGhpcy5zZXRMb2FkaW5nKHRydWUpO1xuICAgIH1cbiAgICBjb21iaW5lTGF0ZXN0KHdhdGNoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgY29uc3Qgcm93c0FmdGVyRmlsdGVyID0gdGhpcy5hcGkuZ3JpZC5nZXREaXNwbGF5ZWRSb3dDb3VudCgpO1xuICAgICAgICB0aGlzLnNldE92ZXJsYXkocm93c0FmdGVyRmlsdGVyID09PSAwKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuYXBpLmdyaWQub25GaWx0ZXJDaGFuZ2VkKCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VydmVyUmVxdWVzdEZpbHRlcnMoZmlsdGVyOiBEYXRvR3JpZEZpbHRlcnNNYXApOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlcnMge1xuICAgIGNvbnN0IGNvbHVtbnNGaWx0ZXJzOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlcnMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtjb2x1bW4sIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmaWx0ZXIpKSB7XG4gICAgICBjb25zdCB7IGJ5VmFsdWUsIGNvbmRpdGlvbmFsIH0gPSB2YWx1ZTtcbiAgICAgIGlmIChieVZhbHVlKSB7XG4gICAgICAgIGNvbHVtbnNGaWx0ZXJzW2NvbHVtbl0gPSB7XG4gICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELFxuICAgICAgICAgIGZpbHRlcnM6IFtieVZhbHVlXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKGNvbmRpdGlvbmFsKSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbmFsRmlsdGVyID0ge1xuICAgICAgICAgIG9wZXJhdG9yOiBjb25kaXRpb25hbC5vcGVyYXRvcixcbiAgICAgICAgICBmaWx0ZXJzOiBjb25kaXRpb25hbC5jb25kaXRpb25zLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgY29uZGl0aW9uLCB2YWx1ZSB9ID0gaXRlbTtcbiAgICAgICAgICAgIGlmIChjb25kaXRpb24gPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX1JBTkdFKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29uZGl0aW9uLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiB2YWx1ZSxcbiAgICAgICAgICAgICAgICBlbmQ6IChpdGVtIGFzIERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb24pLnJhbmdlRW5kXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXRlbSBhcyBEYXRvR3JpZEZpbHRlckNvbmRpdGlvbjtcbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgICBpZiAoYnlWYWx1ZSkge1xuICAgICAgICAgIGNvbHVtbnNGaWx0ZXJzW2NvbHVtbl0uZmlsdGVycy5wdXNoKGNvbmRpdGlvbmFsRmlsdGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2x1bW5zRmlsdGVyc1tjb2x1bW5dID0gY29uZGl0aW9uYWxGaWx0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29sdW1uc0ZpbHRlcnM7XG4gIH1cblxuICBidWlsZFNlcnZlclJlcXVlc3RGaWx0ZXJzX3YyXzEoZ3JpZENvbHVtbnM6IERhdG9HcmlkQ29sdW1uRGVmW10pOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlciB7XG4gICAgY29uc3QgZmlsdGVyID0gdGhpcy5ncmlkUXVlcnkuZ2V0RmlsdGVyKCk7XG4gICAgY29uc3Qgc2VhcmNoVGVybSA9IHRoaXMuZ3JpZFF1ZXJ5LmdldFNlYXJjaFRlcm0oKTtcblxuICAgIGxldCBjb2x1bW5GaWx0ZXJzID0gdGhpcy5idWlsZFNlcnZlckNvbHVtbkZpbHRlcnNfdjJfMShmaWx0ZXIpO1xuICAgIGlmIChjb2x1bW5GaWx0ZXJzLmV2ZXJ5KCh7IG9wZXJhdG9yIH06IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyKSA9PiBvcGVyYXRvciA9PT0gT3BlcmF0b3JUeXBlcy5BTkQpKSB7XG4gICAgICBjb25zdCBmbGF0dGVuZWRGaWx0ZXJzID0gY29sdW1uRmlsdGVyc1xuICAgICAgICAubWFwKCh7IGZpbHRlcnMgfTogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXIpID0+IGZpbHRlcnMpXG4gICAgICAgIC5yZWR1Y2UoKGFyciwgcmVzKSA9PiByZXMuY29uY2F0KGFyciksIFtdKTtcbiAgICAgIGNvbHVtbkZpbHRlcnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5BTkQsXG4gICAgICAgICAgZmlsdGVyczogZmxhdHRlbmVkRmlsdGVyc1xuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW5GaWx0ZXI6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyID1cbiAgICAgIHNpemUoY29sdW1uRmlsdGVycykgPiAxXG4gICAgICAgID8geyBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5BTkQsIGZpbHRlcnM6IGNvbHVtbkZpbHRlcnMgfVxuICAgICAgICA6IHNpemUoY29sdW1uRmlsdGVycykgPT09IDFcbiAgICAgICAgPyBjb2x1bW5GaWx0ZXJzWzBdXG4gICAgICAgIDogbnVsbDtcbiAgICBpZiAoIXNlYXJjaFRlcm0pIHtcbiAgICAgIHJldHVybiBjb2x1bW5GaWx0ZXI7XG4gICAgfVxuICAgIGNvbnN0IHsgaW5jbHVkZUhpZGRlbkNvbHVtbnNJblNlYXJjaCB9ID0gdGhpcy5ncmlkUXVlcnkuZ2V0R3JpZE9wdGlvbnMoKTtcbiAgICBjb25zdCBzZWFyY2hhYmxlQ29sdW1ucyA9IGdyaWRDb2x1bW5zLmZpbHRlcigoY29sRGVmOiBEYXRvR3JpZENvbHVtbkRlZikgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgY29sRGVmLmluY2x1ZGVJblNlYXJjaCAmJiAoaW5jbHVkZUhpZGRlbkNvbHVtbnNJblNlYXJjaCB8fCB0aGlzLmFwaS5jb2x1bW5zLmdldENvbHVtbihjb2xEZWYuY29sSWQpLmlzVmlzaWJsZSgpKVxuICAgICAgKTtcbiAgICB9KTtcbiAgICBjb25zdCBzZWFyY2hGaWx0ZXJzOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmRpdGlvbltdID0gc2VhcmNoYWJsZUNvbHVtbnMubWFwKCh7IGZpZWxkIH06IERhdG9HcmlkQ29sdW1uRGVmKSA9PiAoe1xuICAgICAgY29uZGl0aW9uOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5DT05UQUlOUyxcbiAgICAgIHZhbHVlOiBzZWFyY2hUZXJtLFxuICAgICAgY29sdW1uOiBmaWVsZFxuICAgIH0pKTtcbiAgICBjb25zdCBzZWFyY2hGaWx0ZXI6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyID1cbiAgICAgIHNpemUoc2VhcmNoRmlsdGVycykgPiAwID8geyBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5PUiwgZmlsdGVyczogc2VhcmNoRmlsdGVycyB9IDogbnVsbDtcbiAgICBpZiAoIWNvbHVtbkZpbHRlcikge1xuICAgICAgcmV0dXJuIHNlYXJjaEZpbHRlcjtcbiAgICB9XG4gICAgcmV0dXJuIHsgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELCBmaWx0ZXJzOiBbY29sdW1uRmlsdGVyLCBzZWFyY2hGaWx0ZXJdIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VydmVyQ29sdW1uRmlsdGVyc192Ml8xKGZpbHRlcjogRGF0b0dyaWRGaWx0ZXJzTWFwKTogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXJbXSB7XG4gICAgbGV0IGNvbHVtbkZpbHRlcnM6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2NvbHVtbiwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZpbHRlcikpIHtcbiAgICAgIGxldCBjb2x1bW5GaWx0ZXI6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyID0gbnVsbDtcbiAgICAgIGNvbnN0IHsgYnlWYWx1ZSwgY29uZGl0aW9uYWwgfSA9IHZhbHVlO1xuICAgICAgaWYgKGJ5VmFsdWUpIHtcbiAgICAgICAgY29sdW1uRmlsdGVyID0ge1xuICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvclR5cGVzLkFORCxcbiAgICAgICAgICBmaWx0ZXJzOiBbeyBjb2x1bW4sIC4uLmJ5VmFsdWUgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChjb25kaXRpb25hbCkge1xuICAgICAgICBjb25zdCBjb25kaXRpb25hbEZpbHRlcjogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXIgPSB0aGlzLmdldFNlcnZlckNvbmRpdGlvbmFsRmlsdGVyKGNvbmRpdGlvbmFsLCBjb2x1bW4pO1xuICAgICAgICBpZiAoY29sdW1uRmlsdGVyKSB7XG4gICAgICAgICAgY29sdW1uRmlsdGVyLmZpbHRlcnMucHVzaChjb25kaXRpb25hbEZpbHRlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sdW1uRmlsdGVyID0gY29uZGl0aW9uYWxGaWx0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbHVtbkZpbHRlcnMucHVzaChjb2x1bW5GaWx0ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gY29sdW1uRmlsdGVycztcbiAgfVxuXG4gIGdldEZpbHRlckZvclNlcnZlckFjdGlvbk9uU2VsZWN0QWxsKCk6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyIHtcbiAgICBjb25zdCB7IGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbCB9ID0gdGhpcy5ncmlkUXVlcnkuc2VydmVyU2lkZUNvbmZpZztcbiAgICBjb25zdCB7IGNvbHVtbkRlZnMsIGlkQ29sdW1uS2V5IH0gPSB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpO1xuICAgIGNvbnN0IG1haW5GaWx0ZXIgPSB0aGlzLmJ1aWxkU2VydmVyUmVxdWVzdEZpbHRlcnNfdjJfMShjb2x1bW5EZWZzKTtcbiAgICBpZiAoaXNFbXB0eShleGNsdWRlZEZyb21TZWxlY3RBbGwpKSB7XG4gICAgICByZXR1cm4gbWFpbkZpbHRlcjtcbiAgICB9XG4gICAgY29uc3QgZXhjbHVkZWRSb3dzRmlsdGVyOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkxpc3RDb25kaXRpb24gPSB7XG4gICAgICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNULFxuICAgICAgdmFsdWVzOiBleGNsdWRlZEZyb21TZWxlY3RBbGwsXG4gICAgICBjb2x1bW46IGlkQ29sdW1uS2V5XG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXJzID0gbWFpbkZpbHRlciA/IFttYWluRmlsdGVyLCBleGNsdWRlZFJvd3NGaWx0ZXJdIDogW2V4Y2x1ZGVkUm93c0ZpbHRlcl07XG4gICAgcmV0dXJuIHsgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELCBmaWx0ZXJzIH07XG4gIH1cblxuICBwcml2YXRlIGdldFNlcnZlckNvbmRpdGlvbmFsRmlsdGVyKFxuICAgIGNvbmRpdGlvbmFsRmlsdGVyOiBEYXRvR3JpZENvbmRpdGlvbmFsRmlsdGVyLFxuICAgIGNvbHVtbjogc3RyaW5nXG4gICk6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3BlcmF0b3I6IGNvbmRpdGlvbmFsRmlsdGVyLm9wZXJhdG9yLFxuICAgICAgZmlsdGVyczogY29uZGl0aW9uYWxGaWx0ZXIuY29uZGl0aW9ucy5tYXAoaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29uZGl0aW9uLCB2YWx1ZSB9ID0gaXRlbTtcbiAgICAgICAgaWYgKGNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0UpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29uZGl0aW9uLFxuICAgICAgICAgICAgc3RhcnQ6IHZhbHVlLFxuICAgICAgICAgICAgZW5kOiAoaXRlbSBhcyBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uKS5yYW5nZUVuZCxcbiAgICAgICAgICAgIGNvbHVtblxuICAgICAgICAgIH0gYXMgU2VydmVyU2lkZVBhZ2luYXRpb25SYW5nZUNvbmRpdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZGl0aW9uID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JU19FTVBUWSB8fCBjb25kaXRpb24gPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9FTVBUWSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLklTX0VNUFRZLFxuICAgICAgICAgICAgdmFsdWU6IGNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSVNfRU1QVFkgPyAndHJ1ZScgOiAnZmFsc2UnLFxuICAgICAgICAgICAgY29sdW1uXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZGl0aW9uID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JU19OVUxMIHx8IGNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX05VTEwpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29uZGl0aW9uOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JU19OVUxMLFxuICAgICAgICAgICAgdmFsdWU6IGNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSVNfTlVMTCA/ICd0cnVlJyA6ICdmYWxzZScsXG4gICAgICAgICAgICBjb2x1bW5cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IC4uLml0ZW0sIGNvbHVtbiB9IGFzIFNlcnZlclNpZGVQYWdpbmF0aW9uQ29uZGl0aW9uO1xuICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFNlcnZlclJlcXVlc3RTb3J0KHNvcnRNb2RlbDogRGF0b0dyaWRTb3J0W10pOiBEYXRvR3JpZFNlcnZlclNvcnRbXSB7XG4gICAgcmV0dXJuIHNvcnRNb2RlbC5tYXAoKHsgY29sSWQsIHNvcnQgfSkgPT4gKHtcbiAgICAgIGNvbHVtbjogY29sSWQsXG4gICAgICBzb3J0T3JkZXI6IHNvcnQudG9VcHBlckNhc2UoKSBhcyBEYXRvR3JpZFNlcnZlclNvcnREaXJlY3Rpb25cbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGFkZEVkaXRhYmxlQ2VsbENsYXNzKFxuICAgIGNlbGxDbGFzc1ZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8ICgoY2VsbENsYXNzUGFyYW1zOiBDZWxsQ2xhc3NQYXJhbXMpID0+IHN0cmluZyB8IHN0cmluZ1tdKVxuICApIHtcbiAgICBpZiAoaXNOaWwoY2VsbENsYXNzVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ2RhdG8tZWRpdGFibGUtY2VsbCc7XG4gICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKGNlbGxDbGFzc1ZhbHVlKSkge1xuICAgICAgcmV0dXJuIGNlbGxDbGFzc1BhcmFtcyA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEVkaXRhYmxlQ2xhc3NBcnJheShjZWxsQ2xhc3NWYWx1ZShjZWxsQ2xhc3NQYXJhbXMpKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldEVkaXRhYmxlQ2xhc3NBcnJheShjZWxsQ2xhc3NWYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGdldEVkaXRhYmxlQ2xhc3NBcnJheShjdXJyZW50Q2xhc3M6IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNlbGxDbGFzcyA9IGNvZXJjZUFycmF5KGN1cnJlbnRDbGFzcyk7XG4gICAgY2VsbENsYXNzLnB1c2goJ2RhdG8tZWRpdGFibGUtY2VsbCcpO1xuICAgIHJldHVybiBjZWxsQ2xhc3M7XG4gIH1cblxuICBzZWxlY3RBbGxDdXJyZW50UGFnZVJvd3MoaXNTZWxlY3RlZCA9IHRydWUsIGNvbnNpZGVyRXhjbHVkZWQgPSBmYWxzZSkge1xuICAgIGxldCByb3dzRm9yU2VsZWN0aW9uID0gdGhpcy5ncmlkUXVlcnkuZ2V0Q3VycmVudFBhZ2VSb3dzKCk7XG4gICAgaWYgKGNvbnNpZGVyRXhjbHVkZWQpIHtcbiAgICAgIGNvbnN0IHsgZXhjbHVkZWRGcm9tU2VsZWN0QWxsIH0gPSB0aGlzLmdyaWRRdWVyeS5zZXJ2ZXJTaWRlQ29uZmlnO1xuICAgICAgaWYgKCFpc0VtcHR5KGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbCkpIHtcbiAgICAgICAgcm93c0ZvclNlbGVjdGlvbiA9IHJvd3NGb3JTZWxlY3Rpb24uZmlsdGVyKCh7IGlkIH06IFJvd05vZGUpID0+ICFleGNsdWRlZEZyb21TZWxlY3RBbGwuaW5jbHVkZXMoaWQpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaXNTZWxlY3RlZCA/IHRoaXMuc2VsZWN0Um93cyhyb3dzRm9yU2VsZWN0aW9uKSA6IHRoaXMuZGVzZWxlY3RSb3dzKHJvd3NGb3JTZWxlY3Rpb24pO1xuICB9XG5cbiAgZGVzZWxlY3RBbGxSb3dzKCkge1xuICAgIHRoaXMuYXBpLmdyaWQuZGVzZWxlY3RBbGwoKTtcbiAgICBpZiAodGhpcy5ncmlkUXVlcnkuaXNTZXJ2ZXJTZWxlY3RBbGxSb3dzRW5hYmxlZCkge1xuICAgICAgdGhpcy5zZXRTZXJ2ZXJTaWRlUGFnaW5hdGlvbih7IHNlbGVjdEFsbFJvd3NFbmFibGVkOiBmYWxzZSwgZXhjbHVkZWRGcm9tU2VsZWN0QWxsOiBbXSB9KTtcbiAgICB9XG4gIH1cblxuICByZXNvbHZlUm93QWN0aW9uc1Zpc2liaWxpdHkoKSB7XG4gICAgdGhpcy5ncmlkUXVlcnkuX3Jvd0FjdGlvblZpc2liaWxpdHlDaGFuZ2VkLm5leHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIHBpdm90aW5nLFxuICAgKiB3ZSBhZGQgdGhlIGZpZWxkIG5hbWUgdG8gdGhlIGNvbHVtbiBoZWFkZXIgY2xhc3MgaW4gb3JkZXIgdG8gYWNjZXNzIGl0IHRocm91Z2ggdGhlIGF1dG8gZ2VuZXJhdGVkIHBpdm90IGNvbHVtbi5cbiAgICovXG4gIHByaXZhdGUgaW5pdFBpdm90U2Vjb25kYXJ5Q29sc1Byb2Nlc3MoeyBncmlkT3B0aW9ucyB9OiBOb3JtYWxpemVPcHRpb25zUGFyYW1zKSB7XG4gICAgLyoqIFVzZSBwcm9jZXNzUGl2b3RSZXN1bHRDb2xEZWYgZnJvbSB2ZXIgMjggKi9cbiAgICBncmlkT3B0aW9ucy5wcm9jZXNzU2Vjb25kYXJ5Q29sRGVmID0gY29sRGVmID0+IHtcbiAgICAgIGNvbnN0IHVzZXJQcm92aWRlZENvbERlZiA9IGNvbERlZi5waXZvdFZhbHVlQ29sdW1uICYmIGNvbERlZi5waXZvdFZhbHVlQ29sdW1uLmdldFVzZXJQcm92aWRlZENvbERlZigpO1xuXG4gICAgICBpZiAodXNlclByb3ZpZGVkQ29sRGVmKSB7XG4gICAgICAgIGNvbERlZi5maWx0ZXIgPSB1c2VyUHJvdmlkZWRDb2xEZWYuZmlsdGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sRGVmLnBpdm90S2V5cykge1xuICAgICAgICBjb2xEZWYucGl2b3RLZXlzID0gY29sRGVmLnBpdm90S2V5cy5tYXAoa2V5ID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJzZWRLZXkgPSB0cnlQYXJzZVBpdm90VmFsdWUoa2V5KTtcblxuICAgICAgICAgIHJldHVybiAocGFyc2VkS2V5ICYmIHBhcnNlZEtleS52YWx1ZSkgfHwgJyc7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvKiogVXNlIHByb2Nlc3NQaXZvdFJlc3VsdENvbEdyb3VwRGUgZnJvbSB2ZXIgMjggKi9cbiAgICBncmlkT3B0aW9ucy5wcm9jZXNzU2Vjb25kYXJ5Q29sR3JvdXBEZWYgPSAoY29sR3JvdXBEZWY6IENvbEdyb3VwRGVmKSA9PiB7XG4gICAgICBpZiAoY29sR3JvdXBEZWYuaGVhZGVyTmFtZSkge1xuICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHRyeVBhcnNlUGl2b3RWYWx1ZShjb2xHcm91cERlZi5oZWFkZXJOYW1lKTtcblxuICAgICAgICBpZiAocGFyc2VkVmFsdWUpIHtcbiAgICAgICAgICBjb25zdCB7IGZpZWxkLCB2YWx1ZSB9ID0gcGFyc2VkVmFsdWU7XG5cbiAgICAgICAgICBjb2xHcm91cERlZi5oZWFkZXJDbGFzcyA9IFtmaWVsZF07XG4gICAgICAgICAgY29sR3JvdXBEZWYuaGVhZGVyTmFtZSA9IHZhbHVlO1xuXG4gICAgICAgICAgaWYgKGNvbEdyb3VwRGVmLmNoaWxkcmVuICYmIGNvbEdyb3VwRGVmLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbEdyb3VwRGVmLmhlYWRlckNsYXNzLnB1c2goJ2dyb3VwLXBpdm90LWNlbGwnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29sR3JvdXBEZWYuY2hpbGRyZW4pIHtcbiAgICAgICAgY29uc3QgW2NvbENoaWxkXTogYW55ID0gY29sR3JvdXBEZWYuY2hpbGRyZW47XG4gICAgICAgIGNvbnN0IHBpdm90VG90YWxDb2x1bW5JZHMgPSBjb2xDaGlsZCAmJiBjb2xDaGlsZC5waXZvdFRvdGFsQ29sdW1uSWRzO1xuXG4gICAgICAgIGlmIChwaXZvdFRvdGFsQ29sdW1uSWRzICYmIHBpdm90VG90YWxDb2x1bW5JZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbEdyb3VwRGVmLmhlYWRlckNsYXNzID0gWyd0b3RhbC1waXZvdC1jZWxsJ107XG4gICAgICAgICAgY29sR3JvdXBEZWYuaGVhZGVyTmFtZSA9IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSgnY29yZS50b3RhbCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2xHcm91cERlZi5oZWFkZXJDbGFzcyA9IFsnZW1wdHktcGl2b3QtaGVhZGVyJ107XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2xHcm91cERlZi5waXZvdEtleXMpIHtcbiAgICAgICAgY29sR3JvdXBEZWYucGl2b3RLZXlzID0gY29sR3JvdXBEZWYucGl2b3RLZXlzLm1hcChrZXkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZEtleSA9IHRyeVBhcnNlUGl2b3RWYWx1ZShrZXkpO1xuXG4gICAgICAgICAgcmV0dXJuIChwYXJzZWRLZXkgJiYgcGFyc2VkS2V5LnZhbHVlKSB8fCAnJztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UGl2b3RNb2RlUm93czxUPihkYXRhOiBUW10pIHtcbiAgICBjb25zdCBwaXZvdENvbHVtbnMgPSB0aGlzLmdyaWRRdWVyeS5nZXRBbGxQaXZvdENvbHVtbnMoKTtcbiAgICBjb25zdCBjb252ZXJ0ZWREYXRhID0gZGF0YS5tYXAoKGN1cnJlbnRWYWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG1hcHBlZFZhbHVlcyA9IHsgLi4uY3VycmVudFZhbHVlIH07XG5cbiAgICAgIGZvciAoY29uc3QgY29sIG9mIHBpdm90Q29sdW1ucykge1xuICAgICAgICBjb25zdCBmaWVsZCA9IGNvbC5nZXRDb2xEZWYoKS5maWVsZDtcbiAgICAgICAgY29uc3QgcGl2b3RWYWx1ZTogUGl2b3RDb2x1bW5EYXRhID0geyBmaWVsZCwgdmFsdWU6IGN1cnJlbnRWYWx1ZVtmaWVsZF0gfTtcblxuICAgICAgICBtYXBwZWRWYWx1ZXNbZmllbGRdID0gSlNPTi5zdHJpbmdpZnkocGl2b3RWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtYXBwZWRWYWx1ZXM7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFwaS5ncmlkLnNldFJvd0RhdGEoY29udmVydGVkRGF0YSk7XG4gIH1cblxuICAvKiogTm8gZGVjbGFyZWQgaW50ZXJmYWNlIGluIGN1cnJlbnQgZ3JpZCB2ZXJzaW9uIHlldC5cbiAgICogIFJlZmVyIGRvY3MgLSBodHRwczovL3d3dy5hZy1ncmlkLmNvbS9hbmd1bGFyLWRhdGEtZ3JpZC9jZWxsLXN0eWxlcy8jY2VsbC1jbGFzcy1ydWxlcyAqL1xuICBwcml2YXRlIGdldFBpdm90TW9kZUNlbGxDbGFzc1J1bGVzKCkge1xuICAgIHJldHVybiB7XG4gICAgICAncHJpbWFyeS0wLWJhY2tncm91bmQtY29sb3InOiB0aGlzLmlzTGVhZkdyb3VwRXZlbkNlbGwuYmluZCh0aGlzKSxcbiAgICAgICdwcmltYXJ5LTEwMC1iYWNrZ3JvdW5kLWNvbG9yIHBvaW50ZXIgZGF0by1zaW1wbGUtYm9sZCc6IHRoaXMuaXNSb3dHcm91cFZhbHVlZENlbGwuYmluZCh0aGlzKVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGlzTGVhZkdyb3VwRXZlbkNlbGwocGFyYW1zOiBDZWxsQ2xhc3NQYXJhbXMpOiBib29sZWFuIHtcbiAgICBjb25zdCB7IGxlYWZHcm91cCwgY2hpbGRJbmRleCwgcm93R3JvdXBJbmRleCB9ID0gcGFyYW1zLm5vZGU7XG4gICAgY29uc3QgY29sSW5kZXggPSB0aGlzLmdldENlbGxDbGFzc1J1bGVDb2xJbmRleChwYXJhbXMpO1xuXG4gICAgcmV0dXJuIHJvd0dyb3VwSW5kZXggPD0gY29sSW5kZXggJiYgbGVhZkdyb3VwICYmIGNoaWxkSW5kZXggJSAyID09PSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1Jvd0dyb3VwVmFsdWVkQ2VsbChwYXJhbXM6IENlbGxDbGFzc1BhcmFtcyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHsgbGVhZkdyb3VwLCByb3dHcm91cEluZGV4IH0gPSBwYXJhbXMubm9kZTtcbiAgICBjb25zdCBjb2xJbmRleCA9IHRoaXMuZ2V0Q2VsbENsYXNzUnVsZUNvbEluZGV4KHBhcmFtcyk7XG5cbiAgICByZXR1cm4gcm93R3JvdXBJbmRleCA8PSBjb2xJbmRleCAmJiAhbGVhZkdyb3VwO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDZWxsQ2xhc3NSdWxlQ29sSW5kZXgocGFyYW1zOiBDZWxsQ2xhc3NQYXJhbXMpOiBudW1iZXIge1xuICAgIGNvbnN0IGdyaWRRdWVyeSA9IHBhcmFtcy5jb2xEZWYuaGVhZGVyQ29tcG9uZW50UGFyYW1zLmdyaWRRdWVyeTtcblxuICAgIGlmIChncmlkUXVlcnkgJiYgZ3JpZFF1ZXJ5LmFwaSkge1xuICAgICAgY29uc3QgeyBjb2x1bW5zIH0gPSBncmlkUXVlcnkuYXBpIGFzIERhdG9HcmlkQXBpO1xuICAgICAgY29uc3QgYWxsRGlzcGxheWVkQ29sdW1ucyA9IGNvbHVtbnMuZ2V0QWxsRGlzcGxheWVkQ29sdW1ucygpO1xuICAgICAgY29uc3QgZGlzcGxheWVkQ29sdW1uID0gYWxsRGlzcGxheWVkQ29sdW1ucy5maW5kKGNvbCA9PiBjb2wuZ2V0Q29sSWQoKSA9PT0gcGFyYW1zLmNvbERlZi5jb2xJZCk7XG5cbiAgICAgIHJldHVybiBhbGxEaXNwbGF5ZWRDb2x1bW5zLmluZGV4T2YoZGlzcGxheWVkQ29sdW1uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gLTE7XG4gIH1cbn1cbiJdfQ==
|
|
1160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2NvcmUvIiwic291cmNlcyI6WyJsaWIvZ3JpZC12Mi9ncmlkLXN0b3JlL2dyaWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQXdCLE1BQU0sZUFBZSxDQUFDO0FBZXpFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUNMLG9CQUFvQixFQUtwQixzQkFBc0IsRUFRdkIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBU2xGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBa0IsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RSxPQUFPLEVBSUwsbUJBQW1CLEVBT25CLHVDQUF1QyxFQUN2QyxhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLDJCQUEy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QVEsRUFBRSxLQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUF0QyxDQUFzQyxDQUFDLENBQUM7WUFFaEcsT0FBTyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDckQ7UUFFRCxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQzs7Z0JBOXBDZ0IsU0FBUztnQkFDTCxTQUFTO2dCQUNULG9CQUFvQjtnQkFDakIsWUFBWTtnQkFDYixXQUFXO2dEQUMvQixNQUFNLFNBQUMscUJBQXFCO2dEQUM1QixNQUFNLFNBQUMsZ0JBQWdCOztJQWhDZixXQUFXO1FBRHZCLFVBQVUsRUFBRTtRQWdDUixXQUFBLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO1FBQzdCLFdBQUEsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7eUNBTlYsU0FBUztZQUNMLFNBQVM7WUFDVCxvQkFBb0I7WUFDakIsWUFBWTtZQUNiLFdBQVc7T0E5QnZCLFdBQVcsQ0F5ckN2QjtJQUFELGtCQUFDO0NBQUEsQUF6ckNELElBeXJDQztTQXpyQ1ksV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBRdWVyeUxpc3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdG9HcmlkQXBpIH0gZnJvbSAnLi4vZ3JpZC1jb250cm9sbGVyL2dyaWQtY29udHJvbGxlci50eXBlcyc7XG5pbXBvcnQge1xuICBDZWxsQ2xhc3NQYXJhbXMsXG4gIENvbEdyb3VwRGVmLFxuICBDb2x1bW4sXG4gIEdldENvbnRleHRNZW51SXRlbXNQYXJhbXMsXG4gIEdyaWRPcHRpb25zLFxuICBJQ2VsbFJlbmRlcmVyUGFyYW1zLFxuICBJR2V0Um93c1BhcmFtcyxcbiAgUm93Tm9kZSxcbiAgUm93Tm9kZVRyYW5zYWN0aW9uLFxuICBSb3dTZWxlY3RlZEV2ZW50XG59IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcbmltcG9ydCB7IFJvd0RhdGFUcmFuc2FjdGlvbiB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5L2Rpc3QvbGliL3Jvd01vZGVscy9jbGllbnRTaWRlL2NsaWVudFNpZGVSb3dNb2RlbCc7XG5pbXBvcnQgeyBHcmlkUXVlcnkgfSBmcm9tICcuL2dyaWQucXVlcnknO1xuaW1wb3J0IHsgRGF0b0NvcmVFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9ycyc7XG5pbXBvcnQgeyBEYXRvVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IERhdG9DdXN0b21IZWFkZXJUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2dyaWQtY3VzdG9tLWhlYWRlci9jdXN0b20taGVhZGVyLXRlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMsXG4gIERhdG9HcmlkQ29uZGl0aW9uYWxGaWx0ZXIsXG4gIERhdG9HcmlkRXh0ZXJuYWxGaWx0ZXIsXG4gIERhdG9HcmlkRmlsdGVyLFxuICBEYXRvR3JpZEZpbHRlckNvbmRpdGlvbixcbiAgRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucyxcbiAgRGF0b0dyaWRGaWx0ZXJzTWFwLFxuICBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uLFxuICBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmRpdGlvbixcbiAgU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXIsXG4gIFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVycyxcbiAgU2VydmVyU2lkZVBhZ2luYXRpb25MaXN0Q29uZGl0aW9uLFxuICBTZXJ2ZXJTaWRlUGFnaW5hdGlvblJhbmdlQ29uZGl0aW9uXG59IGZyb20gJy4uL2dyaWQtZmlsdGVyL2dyaWQtZmlsdGVyLnR5cGVzJztcbmltcG9ydCB7IGNvZXJjZUFycmF5IH0gZnJvbSAnLi4vLi4vdXRpbHMvY29lcmNpb24nO1xuaW1wb3J0IHsgaXNFbXB0eSwgaXNGdW5jdGlvbiwgaXNOaWwsIGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMvdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUZpbHRlciB9IGZyb20gJy4uL2dyaWQtZmlsdGVyL2ZpbHRlci12YWxpZGF0b3InO1xuaW1wb3J0IHsgQWdHcmlkTmcyIH0gZnJvbSAnYWctZ3JpZC1hbmd1bGFyJztcbmltcG9ydCB7IEljb25SZWdpc3RyeSwgU3ZnUmVnaXN0cnkgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9pY29uLXJlZ2lzdHJ5JztcbmltcG9ydCB7IGdldFZpc2libGVBY3Rpb25zLCB0b29sYmFyQWN0aW9uVG9Db250ZXh0QWN0aW9uIH0gZnJvbSAnLi4vZ3JpZC12Mi51dGlsJztcbmltcG9ydCB7XG4gIERhdG9HcmlkU2V0dGluZ3MsXG4gIE5vcm1hbGl6ZU9wdGlvbnNQYXJhbXMsXG4gIFBpdm90Q29sdW1uRGF0YSxcbiAgU2VydmVyU2lkZVBhZ2luYXRpb25Db25maWcsXG4gIFN1Y2Nlc3NXcmFwcGVyUGFyYW1zXG59IGZyb20gJy4vZ3JpZC5zdG9yZS50eXBlcyc7XG5pbXBvcnQgeyBSb3dBY3Rpb24gfSBmcm9tICcuLi9ncmlkLXRvb2xiYXIvZ3JpZC10b29sYmFyLnR5cGVzJztcbmltcG9ydCB7IGNvcHlUb0NsaXBib2FyZCB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY2xpcGJvYXJkLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBHcmlkU3RvcmUgfSBmcm9tICcuL2dyaWQuc3RvcmUnO1xuaW1wb3J0IHsgREFUT19HUklEX1NUT1JBR0VfQVBJLCBHcmlkU3RvcmFnZUFQSSB9IGZyb20gJy4uL2dyaWQtc2V0dGluZ3MnO1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29udmVydGVyUGFyYW1zLFxuICBEYXRvR3JpZEFsaWdubWVudCxcbiAgRGF0b0dyaWRDb2x1bW5EZWYsXG4gIERhdG9HcmlkQ29sdW1uVHlwZXMsXG4gIERhdG9HcmlkR2V0Um93c1BhcmFtcyxcbiAgRGF0b0dyaWRPcHRpb25zLFxuICBEYXRvR3JpZFNlcnZlclNvcnQsXG4gIERhdG9HcmlkU2VydmVyU29ydERpcmVjdGlvbixcbiAgRGF0b0dyaWRTb3J0LFxuICBEYXRvR3JpZFRyZWVDb25maWcsXG4gIGVkaXRhYmxlQ2VsbFJlbmRlcmVyV2l0aFNlYXJjaEhpZ2hsaWdodCxcbiAgR3JpZE1pbldpZHRocyxcbiAgR3JpZFJvd1NlbGVjdGlvblR5cGUsXG4gIHNlYXJjaEhpZ2hsaWdodENlbGxSZW5kZXJlclxufSBmcm9tICcuLi9ncmlkL2dyaWQtdjIudHlwZXMnO1xuXG5pbXBvcnQgeyBjb252ZXJ0VG9UcmVlRGF0YSwgZGVmYXVsdEdyaWRPcHRpb25zLCBkZWZhdWx0R3JpZFRyZWVMYWJlbCB9IGZyb20gJy4uL2dyaWQvZ3JpZC12Mi5jb25maWcnO1xuaW1wb3J0IHsgZGlmZiB9IGZyb20gJy4uLy4uL3V0aWxzL29iamVjdCc7XG5pbXBvcnQgeyB1bnRpbERlc3Ryb3llZCB9IGZyb20gJ25neC10YWtlLXVudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHsgQ29yZUV2ZW50TG9nZ2VyLCBDb3JlRXZlbnRUeXBlcywgREFUT19DT1JFX0xPR0dFUiB9IGZyb20gJy4uLy4uL2V2ZW50LWxvZ2dlcic7XG5pbXBvcnQgeyBIYXNoTWFwIH0gZnJvbSAnLi4vLi4vdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHsgc2l6ZSB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbGxlY3Rpb24nO1xuaW1wb3J0IHsgT3BlcmF0b3JUeXBlcyB9IGZyb20gJy4uLy4uL29wZXJhdG9yLXRvZ2dsZXIvb3BlcmF0b3ItdG9nZ2xlci50eXBlcyc7XG5pbXBvcnQgeyBkZWVwbWVyZ2UgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC9kZWVwLW1lcmdlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRyaWdnZXJXaW5kb3dSZXNpemUgfSBmcm9tICcuLi8uLi91dGlscy91c2VyLWFnZW50JztcbmltcG9ydCB7IGdldENvbEZpZWxkLCBnZXRDb2x1bW5zU2l6ZXMsIGlzSHRtbEFsbG93ZWRGb3JDb2wsIHRyeVBhcnNlUGl2b3RWYWx1ZSB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBEYXRvR3JpZE11bHRpU2VsZWN0Q29sdW1uSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZC1jb2x1bW4taGVhZGVyL2dyaWQtbXVsdGktc2VsZWN0LWhlYWRlci9ncmlkLW11bHRpLXNlbGVjdC1oZWFkZXIuY29tcG9uZW50JztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEdyaWRTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgYXBpOiBEYXRvR3JpZEFwaTtcbiAgdHJlZUNvbmZpZzogRGF0b0dyaWRUcmVlQ29uZmlnID0gZGVmYXVsdEdyaWRUcmVlTGFiZWw7XG4gIGlzUGl2b3RNb2RlOiBib29sZWFuO1xuXG4gIC8qKiBAaW50ZXJuYWwgLSB1c2VkIGZvciBzZXJ2ZXIgc2lkZSBieSB2YWx1ZSBmaWx0ZXIgKi9cbiAgX29yaWdpbmFsR2V0Um93czogKHBhcmFtczogRGF0b0dyaWRHZXRSb3dzUGFyYW1zKSA9PiB2b2lkO1xuICBwcml2YXRlIGluaXRpYWxTZXR0aW5nczogRGF0b0dyaWRTZXR0aW5ncztcbiAgcHJpdmF0ZSBncmlkTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIGdyaWRSZWY6IEFnR3JpZE5nMjtcbiAgcHJpdmF0ZSBjdXN0b21IZWFkZXJzVGVtcGxhdGVzOiBRdWVyeUxpc3Q8RGF0b0N1c3RvbUhlYWRlclRlbXBsYXRlQ29tcG9uZW50PjtcbiAgcHJpdmF0ZSBpc1RyZWVEYXRhOiBib29sZWFuO1xuICBwcml2YXRlIHBhZ2VOdW1iZXJUb1JldHVybkFmdGVyUmVmcmVzaCA9IC0xO1xuICBwcml2YXRlIGxhc3RUb3RhbFJvd3M6IG51bWJlcjtcblxuICBwcml2YXRlIHJlYWRvbmx5IENIRUNLQk9YX1NFTEVDVElPTl9DT0xfSUQgPSAnZ3JpZC1jaGVja2JveC1zZWxlY3Rpb24nO1xuXG4gIHNldCB0cmVlRGF0YShpc1RyZWVEYXRhOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc1RyZWVEYXRhID0gaXNUcmVlRGF0YTtcbiAgfVxuXG4gIGdldCB0cmVlRGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1RyZWVEYXRhO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzdG9yZTogR3JpZFN0b3JlLFxuICAgIHByaXZhdGUgZ3JpZFF1ZXJ5OiBHcmlkUXVlcnksXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IERhdG9UcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgaWNvblJlZ2lzdHJ5OiBJY29uUmVnaXN0cnksXG4gICAgcHJpdmF0ZSBzdmdSZWdpc3RyeTogU3ZnUmVnaXN0cnksXG4gICAgQEluamVjdChEQVRPX0dSSURfU1RPUkFHRV9BUEkpIHByaXZhdGUgc3RvcmFnZUFQSTogR3JpZFN0b3JhZ2VBUEksXG4gICAgQEluamVjdChEQVRPX0NPUkVfTE9HR0VSKSBwcml2YXRlIGxvZ2dlcjogQ29yZUV2ZW50TG9nZ2VyXG4gICkge31cblxuICBuZ09uRGVzdHJveSgpIHt9XG5cbiAgLyoqIEBpbnRlcm5hbCAtIHVzZWQgdG8gaW5pdCB0aGUgc2VydmljZSAqL1xuICBfc2V0QXBpKGFwaTogRGF0b0dyaWRBcGksIGdyaWRSZWY6IEFnR3JpZE5nMikge1xuICAgIHRoaXMuYXBpID0gYXBpO1xuICAgIHRoaXMuZ3JpZFJlZiA9IGdyaWRSZWY7XG4gICAgdGhpcy5ncmlkTmFtZSA9IChncmlkUmVmLmdyaWRPcHRpb25zIGFzIERhdG9HcmlkT3B0aW9ucykuZ3JpZE5hbWU7XG4gICAgdGhpcy5zZXRTZXJ2ZXJTaWRlUGFnaW5hdGlvbih7XG4gICAgICBlbmFibGVkOiB0aGlzLmlzU2VydmVyU2lkZVBhZ2luYXRpb24oZ3JpZFJlZi5ncmlkT3B0aW9ucylcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNTZXJ2ZXJTaWRlUGFnaW5hdGlvbihncmlkT3B0aW9uczogR3JpZE9wdGlvbnMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZ3JpZE9wdGlvbnMucm93TW9kZWxUeXBlID09PSAnaW5maW5pdGUnO1xuICB9XG5cbiAgdXBkYXRlR3JpZENvbnRleHQoY29udGV4dCA9IHt9LCByZXBsYWNlID0gZmFsc2UpIHtcbiAgICB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpLmNvbnRleHQgPSByZXBsYWNlXG4gICAgICA/IGNvbnRleHRcbiAgICAgIDogZGVlcG1lcmdlKHRoaXMuZ3JpZFJlZi5ncmlkT3B0aW9ucy5jb250ZXh0IHx8IHt9LCBjb250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2Ugc2VsZWN0Um93cyBpbnN0ZWFkXG4gICAqIEBwYXJhbSByb3dcbiAgICovXG4gIHNldFNlbGVjdGVkUm93czxUPihyb3c6IChUICYgUm93Tm9kZSkgfCAoVFtdICYgUm93Tm9kZVtdKSkge1xuICAgIHRoaXMuc2VsZWN0Um93cyhyb3cpO1xuICB9XG5cbiAgc2VsZWN0Um93czxUPihyb3c6IChUICYgUm93Tm9kZSkgfCAoVFtdICYgUm93Tm9kZVtdKSkge1xuICAgIGNvbnN0IHJvd05vZGVzID0gY29lcmNlQXJyYXkocm93KS5maWx0ZXIocm93Tm9kZSA9PiAhcm93Tm9kZS5pc1NlbGVjdGVkKCkpO1xuICAgIGNvbnN0IGxhc3ROb2RlID0gcm93Tm9kZXMucG9wKCk7XG4gICAgcm93Tm9kZXMuZm9yRWFjaChyb3dOb2RlID0+IHJvd05vZGUuc2V0U2VsZWN0ZWQodHJ1ZSwgZmFsc2UsIHRydWUpKTtcbiAgICBpZiAobGFzdE5vZGUpIHtcbiAgICAgIGxhc3ROb2RlLnNldFNlbGVjdGVkKHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGRlc2VsZWN0Um93czxUPihyb3c6IChUICYgUm93Tm9kZSkgfCAoVFtdICYgUm93Tm9kZVtdKSkge1xuICAgIGNvbnN0IHJvd05vZGVzID0gY29lcmNlQXJyYXkocm93KS5maWx0ZXIocm93Tm9kZSA9PiByb3dOb2RlLmlzU2VsZWN0ZWQoKSk7XG4gICAgY29uc3QgbGFzdE5vZGUgPSByb3dOb2Rlcy5wb3AoKTtcbiAgICByb3dOb2Rlcy5mb3JFYWNoKHJvd05vZGUgPT4gcm93Tm9kZS5zZXRTZWxlY3RlZChmYWxzZSwgZmFsc2UsIHRydWUpKTtcbiAgICBpZiAobGFzdE5vZGUpIHtcbiAgICAgIGxhc3ROb2RlLnNldFNlbGVjdGVkKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBzZXRSb3dzPFQ+KGRhdGE6IFRbXSwgZml0Q29udGFpbmVyID0gZmFsc2UsIHRyZWVDb25maWc6IFBhcnRpYWw8RGF0b0dyaWRUcmVlQ29uZmlnPiA9IHt9KSB7XG4gICAgdGhpcy5ncmlkUXVlcnkuZ3JpZFJlYWR5JC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1RyZWVEYXRhKSB7XG4gICAgICAgIHRoaXMudHJlZUNvbmZpZyA9IHtcbiAgICAgICAgICAuLi5kZWZhdWx0R3JpZFRyZWVMYWJlbCxcbiAgICAgICAgICAuLi50cmVlQ29uZmlnXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHRyZWVEYXRlID0gY29udmVydFRvVHJlZURhdGEoZGF0YSwgdGhpcy50cmVlQ29uZmlnKTtcbiAgICAgICAgdGhpcy5hcGkuZ3JpZC5zZXRSb3dEYXRhKHRyZWVEYXRlKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1Bpdm90TW9kZSkge1xuICAgICAgICB0aGlzLnNldFBpdm90TW9kZVJvd3M8VD4oZGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFwaS5ncmlkLnNldFJvd0RhdGEoZGF0YSk7XG4gICAgICB9XG4gICAgICBpZiAoZml0Q29udGFpbmVyKSB7XG4gICAgICAgIHRoaXMuZml0R3JpZCgnY29udGFpbmVyJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmlnZ2VyV2luZG93UmVzaXplKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXREYXRhc291cmNlKGdldFJvd3M6IChwYXJhbXM6IERhdG9HcmlkR2V0Um93c1BhcmFtcykgPT4gdm9pZCwgcmV0dXJuVG9DdXJyZW50UGFnZSA9IGZhbHNlLCBzaG93TG9hZGluZyA9IGZhbHNlKSB7XG4gICAgcmV0dXJuVG9DdXJyZW50UGFnZSAmJiB0aGlzLnVwZGF0ZVBhZ2VUb0tlZXBPblJlZnJlc2hTZXJ2ZXJEYXRhKCk7XG4gICAgc2hvd0xvYWRpbmcgJiYgdGhpcy5zZXRMb2FkaW5nKHRydWUpO1xuICAgIHRoaXMuX29yaWdpbmFsR2V0Um93cyA9IGdldFJvd3M7XG4gICAgdGhpcy5hcGkuZ3JpZC5zZXREYXRhc291cmNlKHsgZ2V0Um93czogdGhpcy53cmFwR2V0Um93cyh0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpLCBnZXRSb3dzKSB9KTtcbiAgfVxuXG4gIHJlZnJlc2hTZXJ2ZXJEYXRhKGtlZXBDdXJyZW50UGFnZSA9IGZhbHNlLCBzaG93TG9hZGluZyA9IGZhbHNlKSB7XG4gICAga2VlcEN1cnJlbnRQYWdlICYmIHRoaXMudXBkYXRlUGFnZVRvS2VlcE9uUmVmcmVzaFNlcnZlckRhdGEoKTtcbiAgICBzaG93TG9hZGluZyAmJiB0aGlzLnNldExvYWRpbmcodHJ1ZSk7XG4gICAgdGhpcy5hcGkuZ3JpZC5zZXREYXRhc291cmNlKHsgZ2V0Um93czogdGhpcy5ncmlkUXVlcnkuZ2V0R3JpZE9wdGlvbnMoKS5kYXRhc291cmNlLmdldFJvd3MgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBhZ2VUb0tlZXBPblJlZnJlc2hTZXJ2ZXJEYXRhKCkge1xuICAgIC8vIEtlZXBpbmcgdGhlIGN1cnJlbnQgcGFnZSBvbiBzZXJ2ZXIgcmVmcmVzaCBpcyBjdXJyZW50bHkgYXZhaWxhYmxlIG9ubHkgd2hlbiBubyBwYWdlIGNsaWVudCBjYWNoaW5nIGlzIGVuYWJsZWRcbiAgICBpZiAodGhpcy5ncmlkUXVlcnkuZ2V0R3JpZE9wdGlvbnMoKS5tYXhCbG9ja3NJbkNhY2hlID09PSAxKSB7XG4gICAgICB0aGlzLnBhZ2VOdW1iZXJUb1JldHVybkFmdGVyUmVmcmVzaCA9IHRoaXMuYXBpLmdyaWQucGFnaW5hdGlvbkdldEN1cnJlbnRQYWdlKCk7XG4gICAgfVxuICB9XG5cbiAgYWRkUm93czxUPihyb3c6IFQsIGluZGV4PzogbnVtYmVyKTogUm93Tm9kZVRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCByb3dzID0gY29lcmNlQXJyYXkocm93KTtcbiAgICBjb25zdCBkYXRhOiBSb3dEYXRhVHJhbnNhY3Rpb24gPSB7IGFkZDogcm93cyB9O1xuICAgIGlmICghaXNOaWwoaW5kZXgpKSB7XG4gICAgICBkYXRhLmFkZEluZGV4ID0gaW5kZXg7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFwaS5ncmlkLnVwZGF0ZVJvd0RhdGEoZGF0YSk7XG4gIH1cblxuICB1cGRhdGVSb3dzPFQ+KHJvdzogVFtdKTogYW55IHtcbiAgICBjb25zdCByb3dzID0gY29lcmNlQXJyYXkocm93KTtcbiAgICByZXR1cm4gdGhpcy5hcGkuZ3JpZC51cGRhdGVSb3dEYXRhKHsgdXBkYXRlOiByb3dzIH0pO1xuICB9XG5cbiAgdXBkYXRlUm93VmFsdWU8VD4ocm93OiBSb3dOb2RlLCBrZXk6IHN0cmluZywgbmV3VmFsdWU6IFQpO1xuICB1cGRhdGVSb3dWYWx1ZTxUPihpZDogc3RyaW5nLCBrZXk6IHN0cmluZywgbmV3VmFsdWU6IFQpO1xuICB1cGRhdGVSb3dWYWx1ZTxUPihyb3c6IHN0cmluZyB8IFJvd05vZGUsIGtleTogc3RyaW5nLCBuZXdWYWx1ZTogVCkge1xuICAgIGNvbnN0IHJvd05vZGUgPSBpc1N0cmluZyhyb3cpID8gdGhpcy5hcGkuZ3JpZC5nZXRSb3dOb2RlKHJvdykgOiByb3c7XG4gICAgcm93Tm9kZS5zZXREYXRhVmFsdWUoa2V5LCBuZXdWYWx1ZSk7XG4gIH1cblxuICByZW1vdmVSb3dzKHJvdzogUm93Tm9kZSB8IFJvd05vZGVbXSk6IFJvd05vZGVUcmFuc2FjdGlvbiB7XG4gICAgY29uc3Qgcm93cyA9IGNvZXJjZUFycmF5KHJvdykubWFwKCh7IGRhdGEgfSkgPT4gZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMuYXBpLmdyaWQudXBkYXRlUm93RGF0YSh7IHJlbW92ZTogcm93cyB9KTtcbiAgfVxuXG4gIHJlbW92ZVNlbGVjdGVkUm93cygpIHtcbiAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmdyaWRRdWVyeS5nZXRTZWxlY3RlZFJvd05vZGVzKCk7XG4gICAgcmV0dXJuIHRoaXMucmVtb3ZlUm93cyhzZWxlY3RlZFJvd3MpO1xuICB9XG5cbiAgY2xlYXJUYWJsZSgpIHtcbiAgICB0aGlzLnNldFJvd3MoW10pO1xuICB9XG5cbiAgdXBkYXRlQ29sdW1ucyhjb2xEZWZzOiBEYXRvR3JpZENvbHVtbkRlZiB8IERhdG9HcmlkQ29sdW1uRGVmW10sIHJlbG9hZFNldHRpbmdzID0gZmFsc2UpIHtcbiAgICBpZiAoIWNvbERlZnMpIHtcbiAgICAgIHRocm93IG5ldyBEYXRvQ29yZUVycm9yKCdObyBjb2x1bW5EZWZzIHdlcmUgcHJvdmlkZWQuIPCflbXwn4+74oCN4pmA77iPJyk7XG4gICAgfVxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0aGlzLm5vcm1hbGl6ZUNvbHVtbnMoY29lcmNlQXJyYXkoY29sRGVmcykpO1xuICAgIGNvbnN0IHNhdmVkU2V0dGluZ3MgPSByZWxvYWRTZXR0aW5ncyAmJiB0aGlzLmdyaWRRdWVyeS5nZXRDdXJyZW50R3JpZFNldHRpbmdzKCk7XG4gICAgdGhpcy5hcGkuZ3JpZC5zZXRDb2x1bW5EZWZzKG5vcm1hbGl6ZWQpO1xuICAgIGlmIChzYXZlZFNldHRpbmdzKSB7XG4gICAgICB0aGlzLmxvYWRTYXZlZFNldHRpbmdzKHNhdmVkU2V0dGluZ3MpO1xuICAgIH1cbiAgfVxuXG4gIG5vcm1hbGl6ZU9wdGlvbnMocGFyYW1zOiBOb3JtYWxpemVPcHRpb25zUGFyYW1zKSB7XG4gICAgdGhpcy5jdXN0b21IZWFkZXJzVGVtcGxhdGVzID0gcGFyYW1zLmN1c3RvbUhlYWRlcnNUZW1wbGF0ZXM7XG4gICAgY29uc3QgaGVhZGVyQ29tcG9uZW50UGFyYW1zID0geyBncmlkU2VydmljZTogdGhpcywgZ3JpZFF1ZXJ5OiB0aGlzLmdyaWRRdWVyeSB9O1xuICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5hdXRvR3JvdXBDb2x1bW5EZWYgPSB7XG4gICAgICAuLi5oZWFkZXJDb21wb25lbnRQYXJhbXMsXG4gICAgICAuLi5wYXJhbXMuZ3JpZE9wdGlvbnMuYXV0b0dyb3VwQ29sdW1uRGVmXG4gICAgfTtcblxuICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5kZWZhdWx0Q29sRGVmID0ge1xuICAgICAgLi4ucGFyYW1zLmdyaWRPcHRpb25zLmRlZmF1bHRDb2xEZWYsXG4gICAgICBoZWFkZXJDb21wb25lbnRQYXJhbXNcbiAgICB9O1xuICAgIGlmICh0eXBlb2YgcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZVNlYXJjaCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVTZWFyY2ggPSBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlVjJfMTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlQmFja2dyb3VuZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVCYWNrZ3JvdW5kID0gcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZVYyXzE7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcGFyYW1zLmdyaWRPcHRpb25zLnNob3dNdWx0aVNlbGVjdGlvbkNoZWNrYm94ZXMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuc2hvd011bHRpU2VsZWN0aW9uQ2hlY2tib3hlcyA9XG4gICAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVWMl8xICYmIHBhcmFtcy5ncmlkT3B0aW9ucy5yb3dTZWxlY3Rpb24gIT09IEdyaWRSb3dTZWxlY3Rpb25UeXBlLlNJTkdMRTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlU2VhcmNoSGlnaGxpZ2h0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZVNlYXJjaEhpZ2hsaWdodCA9XG4gICAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVTZWFyY2ggJiYgZGVmYXVsdEdyaWRPcHRpb25zLmVuYWJsZVNlYXJjaEhpZ2hsaWdodDtcbiAgICB9XG4gICAgcGFyYW1zLmdyaWRPcHRpb25zLmNvbHVtbkRlZnMgPSB0aGlzLm5vcm1hbGl6ZUNvbHVtbnMocGFyYW1zLmdyaWRPcHRpb25zLmNvbHVtbkRlZnMsIHBhcmFtcy5ncmlkT3B0aW9ucyk7XG5cbiAgICAvKiogQWRkIGNvcmUgZmlsdGVycyAqL1xuICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5pc0V4dGVybmFsRmlsdGVyUHJlc2VudCA9ICgpID0+IHRydWU7XG4gICAgcGFyYW1zLmdyaWRPcHRpb25zLmRvZXNFeHRlcm5hbEZpbHRlclBhc3MgPSAocm93OiBSb3dOb2RlKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB2YWxpZGF0ZUZpbHRlcih7IHJvdywgYXBpOiB0aGlzLmdyaWRRdWVyeS5hcGkuZ3JpZCB9LCB0aGlzLmdyaWRRdWVyeS5nZXRGaWx0ZXIoKSkgJiYgdGhpcy5yb3dNYXRjaGVzU2VhcmNoKHJvdylcbiAgICAgICk7XG4gICAgfTtcblxuICAgIC8qKiBXcmFwIHRoZSBzZXJ2ZXIgc2lkZSBwYWdpbmF0aW9uIGdldCByb3dzIGZ1bmN0aW9uICovXG4gICAgaWYgKHRoaXMuaXNTZXJ2ZXJTaWRlUGFnaW5hdGlvbihwYXJhbXMuZ3JpZE9wdGlvbnMpKSB7XG4gICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuYmxvY2tMb2FkRGVib3VuY2VNaWxsaXMgPSAzMDA7XG4gICAgICB0aGlzLl9vcmlnaW5hbEdldFJvd3MgPSBwYXJhbXMuZ3JpZE9wdGlvbnMuZGF0YXNvdXJjZS5nZXRSb3dzO1xuICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLmRhdGFzb3VyY2UuZ2V0Um93cyA9IHRoaXMud3JhcEdldFJvd3MocGFyYW1zLmdyaWRPcHRpb25zKTtcbiAgICAgIC8qIFRoZSBjYWNoZSBzaXplIGlzIHN5bmNlZCB3aXRoIHRoZSBwYWdpbmF0aW9uIHBhZ2Ugc2l6ZSAqL1xuICAgICAgY29uc3QgY2FjaGVTaXplID0gcGFyYW1zLmdyaWRPcHRpb25zLnBhZ2luYXRpb25QYWdlU2l6ZTtcbiAgICAgIGlmIChjYWNoZVNpemUpIHtcbiAgICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLmNhY2hlQmxvY2tTaXplID0gY2FjaGVTaXplO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBFZGl0YWJsZSBjZWxsICovXG4gICAgdGhpcy5pbml0RWRpdGFibGVDb2x1bW5zQ2VsbENsYXNzKHBhcmFtcyk7XG5cbiAgICAvKiogV3JhcCBjb250ZXh0IG1lbnUgKi9cbiAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZ2V0Q29udGV4dE1lbnVJdGVtcyA9IHRoaXMud3JhcENvbnRleHRNZW51QnVpbGRlcihwYXJhbXMpO1xuXG4gICAgLyoqIFNhdmUgZ3JpZCBzZXR0aW5ncyAqL1xuICAgIGNvbnN0IHsgc2F2ZVNldHRpbmdzLCBncmlkTmFtZSB9ID0gcGFyYW1zLmdyaWRPcHRpb25zO1xuICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5zYXZlU2V0dGluZ3MgPSBzYXZlU2V0dGluZ3MgIT09IGZhbHNlICYmICFpc05pbChncmlkTmFtZSk7XG5cbiAgICAvKiogU2VydmVyIFNpZGUgUGFnaW5hdGlvbiBmb3Igc2VsZWN0IGFsbCBvcHRpb24gKi9cbiAgICB0aGlzLmluaXRPblJvd1NlbGVjdGVkRm9yU2VydmVyU2lkZVBhZ2luYXRpb24ocGFyYW1zKTtcblxuICAgIC8qKiBBZGQgcGl2b3Qgc3BlY2lmaWMgcmVxdWlyZWQgc2V0dGluZ3MgKi9cbiAgICBpZiAocGFyYW1zLmdyaWRPcHRpb25zLnBpdm90TW9kZSkge1xuICAgICAgdGhpcy5pbml0UGl2b3RTZWNvbmRhcnlDb2xzUHJvY2VzcyhwYXJhbXMpO1xuICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLnNhdmVTZXR0aW5ncyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuZ3JpZE9wdGlvbnMudXNlUGl2b3RHcmlkU3R5bGUpIHtcbiAgICAgIGNvbnN0IHJvd0hlaWdodCA9IDMwO1xuXG4gICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMucm93SGVpZ2h0ID0gcm93SGVpZ2h0O1xuICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLmRlZmF1bHRDb2xEZWYgPSB7XG4gICAgICAgIC4uLnBhcmFtcy5ncmlkT3B0aW9ucy5kZWZhdWx0Q29sRGVmLFxuICAgICAgICBjZWxsQ2xhc3NSdWxlczogdGhpcy5nZXRQaXZvdE1vZGVDZWxsQ2xhc3NSdWxlcygpLFxuICAgICAgICBoZWFkZXJDbGFzczogdGhpcy5nZXRQaXZvdEhlYWRlckNsYXNzLmJpbmQodGhpcyksXG4gICAgICAgIGNlbGxTdHlsZTogcGFyYW1zID0+IHtcbiAgICAgICAgICBjb25zdCBzdHlsZTogYW55ID0geyBsaW5lSGVpZ2h0OiBgJHtyb3dIZWlnaHR9cHhgIH07XG5cbiAgICAgICAgICBpZiAocGFyYW1zLmNvbERlZi50eXBlID09PSBEYXRvR3JpZENvbHVtblR5cGVzLk51bWJlcikge1xuICAgICAgICAgICAgc3R5bGUudGV4dEFsaWduID0gJ2VuZCc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuYXV0b0dyb3VwQ29sdW1uRGVmID0ge1xuICAgICAgICAuLi5wYXJhbXMuZ3JpZE9wdGlvbnMuYXV0b0dyb3VwQ29sdW1uRGVmLFxuICAgICAgICBjZWxsQ2xhc3NSdWxlczogdGhpcy5nZXRQaXZvdE1vZGVDZWxsQ2xhc3NSdWxlcygpLFxuICAgICAgICBoZWFkZXJDbGFzczogdGhpcy5nZXRQaXZvdEhlYWRlckNsYXNzLmJpbmQodGhpcylcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcy5ncmlkT3B0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGl2b3RIZWFkZXJDbGFzcyhwYXJhbXMpIHtcbiAgICBjb25zdCBncmlkUXVlcnkgPSBwYXJhbXMuY29sRGVmLmhlYWRlckNvbXBvbmVudFBhcmFtcy5ncmlkUXVlcnk7XG4gICAgbGV0IGNlbGxDbGFzcyA9ICcnO1xuXG4gICAgaWYgKGdyaWRRdWVyeSAmJiBncmlkUXVlcnkuYXBpKSB7XG4gICAgICBjb25zdCB7IGNvbHVtbnMgfSA9IGdyaWRRdWVyeS5hcGkgYXMgRGF0b0dyaWRBcGk7XG4gICAgICAvKiogVXNlIGdldFBpdm90UmVzdWx0Q29sdW1ucyBmcm9tIHZlciAyOCAqL1xuICAgICAgY29uc3QgcGl2b3RDb2x1bW5zID0gY29sdW1ucy5nZXRTZWNvbmRhcnlDb2x1bW5zKCk7XG5cbiAgICAgIGlmIChwaXZvdENvbHVtbnMgJiYgcGl2b3RDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY2VsbENsYXNzICs9ICd0b3AtYm9yZGVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2VsbENsYXNzO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVDb2x1bW5zKGNvbERlZnM6IERhdG9HcmlkQ29sdW1uRGVmW10sIGdyaWRPcHRpb25zOiBEYXRvR3JpZE9wdGlvbnMgPSBudWxsKTogRGF0b0dyaWRDb2x1bW5EZWZbXSB7XG4gICAgaWYgKCFncmlkT3B0aW9ucykge1xuICAgICAgZ3JpZE9wdGlvbnMgPSB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGVkQ29sRGVmcyA9IGNvbERlZnMubWFwKChjb2w6IERhdG9HcmlkQ29sdW1uRGVmKSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkID0ge1xuICAgICAgICAuLi5jb2wsXG4gICAgICAgIGhlYWRlck5hbWU6IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybShjb2wuaGVhZGVyTmFtZSlcbiAgICAgIH07XG4gICAgICAvKiogQWRqdXN0IHRoZSB3aWR0aCBpbiBjYXNlIHRoZSBjb2x1bW4gaGFzIGluZm8gKi9cbiAgICAgIGlmIChjb2wuaW5mbykge1xuICAgICAgICBub3JtYWxpemVkLm1pbldpZHRoID0gY29sLm1pbldpZHRoIHx8IEdyaWRNaW5XaWR0aHMuV2l0aF9JbmZvO1xuICAgICAgfVxuICAgICAgaWYgKCFjb2wuY29sSWQpIHtcbiAgICAgICAgbm9ybWFsaXplZC5jb2xJZCA9IGNvbC5maWVsZDtcbiAgICAgIH1cbiAgICAgIGlmIChub3JtYWxpemVkLnR5cGUgPT09IERhdG9HcmlkQ29sdW1uVHlwZXMuSXRlbXMgJiYgIW5vcm1hbGl6ZWQuZmlsdGVyc0NvbmZpZykge1xuICAgICAgICBub3JtYWxpemVkLmZpbHRlcnNDb25maWcgPSB7IHNlY3Rpb25zOiBEYXRvR3JpZEZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsIH07XG4gICAgICB9XG4gICAgICB0aGlzLm5vcm1hbGl6ZUNvbHVtblNlYXJjaENvbmZpZyhncmlkT3B0aW9ucywgY29sLCBub3JtYWxpemVkKTtcbiAgICAgIHJldHVybiBub3JtYWxpemVkO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuYWRkTXVsdGlTZWxlY3RIZWFkZXJDb2x1bW5JZlJlcXVpcmVkKHVwZGF0ZWRDb2xEZWZzLCBncmlkT3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZUNvbHVtblNlYXJjaENvbmZpZyhcbiAgICBncmlkT3B0aW9uczogRGF0b0dyaWRPcHRpb25zLFxuICAgIGNvbDogRGF0b0dyaWRDb2x1bW5EZWYsXG4gICAgbm9ybWFsaXplZDogRGF0b0dyaWRDb2x1bW5EZWZcbiAgKSB7XG4gICAgLyoqIENoZWNrIGlmIGNvbHVtbiBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSBzZWFyY2ggKiovXG4gICAgY29uc3QgaXNTZXJ2ZXJQYWdpbmF0aW9uID0gdGhpcy5pc1NlcnZlclNpZGVQYWdpbmF0aW9uKGdyaWRPcHRpb25zKTtcbiAgICBpZiAodHlwZW9mIGNvbC5pbmNsdWRlSW5TZWFyY2ggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAoaXNTZXJ2ZXJQYWdpbmF0aW9uICYmIGNvbC50eXBlID09PSBEYXRvR3JpZENvbHVtblR5cGVzLkRhdGUpIHtcbiAgICAgICAgbm9ybWFsaXplZC5pbmNsdWRlSW5TZWFyY2ggPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vcm1hbGl6ZWQuaW5jbHVkZUluU2VhcmNoID1cbiAgICAgICAgICB0eXBlb2YgZ3JpZE9wdGlvbnMuY29sdW1uc0luY2x1ZGVkSW5TZWFyY2hCeURlZmF1bHQgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICA/IGdyaWRPcHRpb25zLmNvbHVtbnNJbmNsdWRlZEluU2VhcmNoQnlEZWZhdWx0XG4gICAgICAgICAgICA6IGRlZmF1bHRHcmlkT3B0aW9ucy5jb2x1bW5zSW5jbHVkZWRJblNlYXJjaEJ5RGVmYXVsdDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgbm9ybWFsaXplZC5pbmNsdWRlSW5TZWFyY2ggJiZcbiAgICAgICF0aGlzLmhhc0NlbGxSZW5kZXJlcihub3JtYWxpemVkLCBncmlkT3B0aW9ucykgJiZcbiAgICAgIGdyaWRPcHRpb25zLmVuYWJsZVNlYXJjaEhpZ2hsaWdodFxuICAgICkge1xuICAgICAgbm9ybWFsaXplZC5jZWxsUmVuZGVyZXIgPSAocGFyYW1zOiBJQ2VsbFJlbmRlcmVyUGFyYW1zKSA9PiB7XG4gICAgICAgIGNvbnN0IGFsbG93SFRNTCA9IGlzSHRtbEFsbG93ZWRGb3JDb2woZ3JpZE9wdGlvbnMsIHBhcmFtcy5jb2xEZWYpO1xuICAgICAgICBjb25zdCBpc0VkaXRhYmxlID1cbiAgICAgICAgICAoaXNGdW5jdGlvbihub3JtYWxpemVkLmVkaXRhYmxlKSAmJiBub3JtYWxpemVkLmVkaXRhYmxlKHBhcmFtcykpIHx8XG4gICAgICAgICAgKCFpc0Z1bmN0aW9uKG5vcm1hbGl6ZWQuZWRpdGFibGUpICYmIG5vcm1hbGl6ZWQuZWRpdGFibGUpO1xuXG4gICAgICAgIHJldHVybiBpc0VkaXRhYmxlXG4gICAgICAgICAgPyBlZGl0YWJsZUNlbGxSZW5kZXJlcldpdGhTZWFyY2hIaWdobGlnaHQocGFyYW1zLCB0aGlzLmdyaWRRdWVyeS5nZXRTZWFyY2hUZXJtKCksIGFsbG93SFRNTClcbiAgICAgICAgICA6IHNlYXJjaEhpZ2hsaWdodENlbGxSZW5kZXJlcihwYXJhbXMsIHRoaXMuZ3JpZFF1ZXJ5LmdldFNlYXJjaFRlcm0oKSwgYWxsb3dIVE1MKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYXNDZWxsUmVuZGVyZXIoY29sdW1uOiBEYXRvR3JpZENvbHVtbkRlZiwgZ3JpZE9wdGlvbnM6IERhdG9HcmlkT3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgIGlmIChjb2x1bW4uY2VsbFJlbmRlcmVyKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgdHlwZSA9IGNvbHVtbi50eXBlIGFzIHN0cmluZztcbiAgICBjb25zdCBjb2x1bW5UeXBlSGFzQ2VsbFJlbmRlcmVyID0gKG9wdGlvbnM6IFBhcnRpYWw8RGF0b0dyaWRPcHRpb25zPik6IGJvb2xlYW4gPT5cbiAgICAgIG9wdGlvbnMuY29sdW1uVHlwZXMgJiYgISFvcHRpb25zLmNvbHVtblR5cGVzW3R5cGVdICYmICEhb3B0aW9ucy5jb2x1bW5UeXBlc1t0eXBlXS5jZWxsUmVuZGVyZXI7XG5cbiAgICByZXR1cm4gY29sdW1uVHlwZUhhc0NlbGxSZW5kZXJlcihncmlkT3B0aW9ucykgfHwgY29sdW1uVHlwZUhhc0NlbGxSZW5kZXJlcihkZWZhdWx0R3JpZE9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRNdWx0aVNlbGVjdEhlYWRlckNvbHVtbklmUmVxdWlyZWQoXG4gICAgY29sdW1uRGVmczogRGF0b0dyaWRDb2x1bW5EZWZbXSxcbiAgICBncmlkT3B0aW9uczogRGF0b0dyaWRPcHRpb25zXG4gICk6IERhdG9HcmlkQ29sdW1uRGVmW10ge1xuICAgIGNvbnN0IHNob3dNdWx0aVNlbGVjdGlvbkNoZWNrYm94ZXMgPSBncmlkT3B0aW9ucyAmJiBncmlkT3B0aW9ucy5zaG93TXVsdGlTZWxlY3Rpb25DaGVja2JveGVzO1xuICAgIGNvbnN0IHJvd1NlbGVjdGlvbiA9XG4gICAgICBncmlkT3B0aW9ucyAmJiBncmlkT3B0aW9ucy5yb3dTZWxlY3Rpb24gPyBncmlkT3B0aW9ucy5yb3dTZWxlY3Rpb24gOiBkZWZhdWx0R3JpZE9wdGlvbnMucm93U2VsZWN0aW9uO1xuXG4gICAgaWYgKHNob3dNdWx0aVNlbGVjdGlvbkNoZWNrYm94ZXMgJiYgcm93U2VsZWN0aW9uID09PSBHcmlkUm93U2VsZWN0aW9uVHlwZS5NVUxUSVBMRSkge1xuICAgICAgY29uc3QgY2hlY2tib3hlc0NvbHVtbjogRGF0b0dyaWRDb2x1bW5EZWYgPSB7XG4gICAgICAgIGNvbElkOiB0aGlzLkNIRUNLQk9YX1NFTEVDVElPTl9DT0xfSUQsXG4gICAgICAgIGNoZWNrYm94U2VsZWN0aW9uOiB0cnVlLFxuICAgICAgICBoZWFkZXJDb21wb25lbnRGcmFtZXdvcms6IERhdG9HcmlkTXVsdGlTZWxlY3RDb2x1bW5IZWFkZXJDb21wb25lbnQsXG4gICAgICAgIHdpZHRoOiAzMCxcbiAgICAgICAgbWF4V2lkdGg6IDMwLFxuICAgICAgICBzdXBwcmVzc1NpemVUb0ZpdDogdHJ1ZSxcbiAgICAgICAgY2VsbENsYXNzOiAnY2hlY2tib3gtc2VsZWN0aW9uLWNlbGwnLFxuICAgICAgICBoZWFkZXJDbGFzczogJ2hlYWRlci1jaGVja2JveC1zZWxlY3Rpb24tY2VsbCcsXG4gICAgICAgIHJlc2l6YWJsZTogZmFsc2UsXG4gICAgICAgIHBpbm5lZDogJ2xlZnQnLFxuICAgICAgICBsb2NrUG9zaXRpb246IHRydWUsXG4gICAgICAgIGluY2x1ZGVJblNlYXJjaDogZmFsc2VcbiAgICAgIH07XG4gICAgICByZXR1cm4gW2NoZWNrYm94ZXNDb2x1bW4sIC4uLmNvbHVtbkRlZnNdO1xuICAgIH1cbiAgICByZXR1cm4gY29sdW1uRGVmcztcbiAgfVxuXG4gIHByaXZhdGUgaW5pdE9uUm93U2VsZWN0ZWRGb3JTZXJ2ZXJTaWRlUGFnaW5hdGlvbih7IGdyaWRPcHRpb25zIH06IE5vcm1hbGl6ZU9wdGlvbnNQYXJhbXMpIHtcbiAgICBpZiAoIXRoaXMuaXNTZXJ2ZXJTaWRlUGFnaW5hdGlvbihncmlkT3B0aW9ucykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXh0ZXJuYWxPblJvd1NlbGVjdGVkID0gZ3JpZE9wdGlvbnMub25Sb3dTZWxlY3RlZDtcbiAgICBncmlkT3B0aW9ucy5vblJvd1NlbGVjdGVkID0gKGV2dDogUm93U2VsZWN0ZWRFdmVudCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JpZFF1ZXJ5LmlzU2VydmVyU2VsZWN0QWxsUm93c0VuYWJsZWQpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGV2dC5ub2RlO1xuICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gbm9kZS5pc1NlbGVjdGVkKCk7XG4gICAgICAgIGNvbnN0IHsgZXhjbHVkZWRGcm9tU2VsZWN0QWxsIH0gPSB0aGlzLmdyaWRRdWVyeS5zZXJ2ZXJTaWRlQ29uZmlnO1xuICAgICAgICBjb25zdCBpc0V4Y2x1ZGVkID0gZXhjbHVkZWRGcm9tU2VsZWN0QWxsLmluY2x1ZGVzKG5vZGUuaWQpO1xuICAgICAgICBpZiAoaXNTZWxlY3RlZCAmJiBpc0V4Y2x1ZGVkKSB7XG4gICAgICAgICAgdGhpcy5zZXRTZXJ2ZXJTaWRlUGFnaW5hdGlvbih7XG4gICAgICAgICAgICBleGNsdWRlZEZyb21TZWxlY3RBbGw6IGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbC5maWx0ZXIoKG5vZGVJZDogc3RyaW5nKSA9PiBub2RlSWQgIT09IG5vZGUuaWQpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzU2VsZWN0ZWQgJiYgIWlzRXhjbHVkZWQpIHtcbiAgICAgICAgICB0aGlzLnNldFNlcnZlclNpZGVQYWdpbmF0aW9uKHsgZXhjbHVkZWRGcm9tU2VsZWN0QWxsOiBbLi4uZXhjbHVkZWRGcm9tU2VsZWN0QWxsLCBub2RlLmlkXSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGV4dGVybmFsT25Sb3dTZWxlY3RlZCkge1xuICAgICAgICBleHRlcm5hbE9uUm93U2VsZWN0ZWQoZXZ0KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByb3dNYXRjaGVzU2VhcmNoKHJvdzogUm93Tm9kZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlYXJjaFRlcm0gPSAodGhpcy5ncmlkUXVlcnkuZ2V0U2VhcmNoVGVybSgpIHx8ICcnKS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBpZiAoaXNFbXB0eShzZWFyY2hUZXJtKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpLmluY2x1ZGVIaWRkZW5Db2x1bW5zSW5TZWFyY2hcbiAgICAgID8gdGhpcy5ncmlkUXVlcnkuZ2V0QWxsQ29sdW1ucygpXG4gICAgICA6IHRoaXMuZ3JpZFF1ZXJ5LmdldEFsbERpc3BsYXllZENvbHVtbnMoKTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICBjb25zdCBjb2xEZWYgPSB0aGlzLmFwaS5ncmlkLmdldENvbHVtbkRlZihjb2wuZ2V0Q29sSWQoKSkgYXMgRGF0b0dyaWRDb2x1bW5EZWY7XG4gICAgICBpZiAoIWNvbERlZi5pbmNsdWRlSW5TZWFyY2gpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByb3dWYWx1ZSA9ICh0aGlzLmFwaS5ncmlkLmdldFZhbHVlKGNvbC5nZXRDb2xJZCgpLCByb3cpIHx8ICcnKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAocm93VmFsdWUuaW5jbHVkZXMoc2VhcmNoVGVybSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgZml0R3JpZCgnY29udGFpbmVyJykgaW5zdGVhZFxuICAgKi9cbiAgZml0VG9Db250YWluZXIoKSB7XG4gICAgdGhpcy5hcGkuZ3JpZC5zaXplQ29sdW1uc1RvRml0KCk7XG4gIH1cblxuICBnZXRDdXN0b21IZWFkZXIoZmllbGQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmN1c3RvbUhlYWRlcnNUZW1wbGF0ZXMpIHtcbiAgICAgIGNvbnN0IHNwZWNpZmljID0gdGhpcy5jdXN0b21IZWFkZXJzVGVtcGxhdGVzLmZpbmQoKHsgY29sdW1uIH0pID0+IGNvbHVtbiA9PT0gZmllbGQpO1xuICAgICAgY29uc3QgY29tbW9uID0gdGhpcy5jdXN0b21IZWFkZXJzVGVtcGxhdGVzLmZpbmQoKHsgY29sdW1uIH0pID0+ICFjb2x1bW4pO1xuICAgICAgaWYgKHNwZWNpZmljIHx8IGNvbW1vbikge1xuICAgICAgICBjb25zdCB7IG1vcmVNZW51LCBjdXN0b21IZWFkZXIgfSA9IHtcbiAgICAgICAgICBtb3JlTWVudTogKHNwZWNpZmljICYmIHNwZWNpZmljLm1vcmVNZW51KSB8fCAoY29tbW9uICYmIGNvbW1vbi5tb3JlTWVudSksXG4gICAgICAgICAgY3VzdG9tSGVhZGVyOiAoc3BlY2lmaWMgJiYgc3BlY2lmaWMuY3VzdG9tSGVhZGVyKSB8fCAoY29tbW9uICYmIGNvbW1vbi5jdXN0b21IZWFkZXIpXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7IG1vcmVNZW51OiBtb3JlTWVudSAmJiBtb3JlTWVudS50cGwsIGN1c3RvbUhlYWRlcjogY3VzdG9tSGVhZGVyICYmIGN1c3RvbUhlYWRlci50cGwgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjbGVhckFsbEZpbHRlcnMoKSB7XG4gICAgdGhpcy5zdG9yZS51cGRhdGUoc3RhdGUgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5zZXR0aW5ncyxcbiAgICAgICAgICBmaWx0ZXI6IHt9LFxuICAgICAgICAgIHNlYXJjaFRlcm06IG51bGxcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLm5vdGlmeUZpbHRlclVwZGF0ZSgpO1xuICB9XG5cbiAgY2xlYXJDb2x1bW5GaWx0ZXIoY29sdW1uRmllbGQ6IHN0cmluZykge1xuICAgIGNvbnN0IHsgW2NvbHVtbkZpZWxkXTogZGVsZXRlZCwgLi4uZmlsdGVyIH0gPSB0aGlzLmdyaWRRdWVyeS5nZXRGaWx0ZXIoKTtcbiAgICB0aGlzLnN0b3JlLnVwZGF0ZShzdGF0ZSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXR0aW5nczoge1xuICAgICAgICAgIC4uLnN0YXRlLnNldHRpbmdzLFxuICAgICAgICAgIGZpbHRlclxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMubm90aWZ5RmlsdGVyVXBkYXRlKCk7XG4gIH1cblxuICBzZXRDb2x1bW5GaWx0ZXIoY29sdW1uOiBDb2x1bW4sIGZpbHRlcjogRGF0b0dyaWRGaWx0ZXIsIG5vdGlmeUdyaWQgPSB0cnVlKSB7XG4gICAgdGhpcy5fbG9nRXZlbnQoQ29yZUV2ZW50VHlwZXMuR1JJRF9GSUxURVJfQVBQTElFRCwge1xuICAgICAgY29sdW1uOiBjb2x1bW4uZ2V0Q29sSWQoKSxcbiAgICAgIG51bU9mQ29uZGl0aW9uczogKGZpbHRlci5jb25kaXRpb25hbCAmJiBmaWx0ZXIuY29uZGl0aW9uYWwuY29uZGl0aW9ucy5sZW5ndGgpIHx8IDAsXG4gICAgICBieVZhbHVlOiAhIWZpbHRlci5ieVZhbHVlID8gJ1llcycgOiAnTm8nXG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZUZpbHRlcihjb2x1bW4sIGZpbHRlcik7XG5cbiAgICBpZiAobm90aWZ5R3JpZCkge1xuICAgICAgdGhpcy5ub3RpZnlGaWx0ZXJVcGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICBzZXRHcmlkRmlsdGVycyhmaWx0ZXJzOiBEYXRvR3JpZEV4dGVybmFsRmlsdGVyW10pIHtcbiAgICBpZiAodGhpcy5hcGkgJiYgZmlsdGVycykge1xuICAgICAgbGV0IGFwcGxpZWRGaWx0ZXIgPSB7fTtcblxuICAgICAgZm9yIChjb25zdCB7IGZpbHRlciwgZmllbGQgfSBvZiBmaWx0ZXJzKSB7XG4gICAgICAgIGFwcGxpZWRGaWx0ZXJbZmllbGRdID0gZmlsdGVyO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVNldHRpbmdzKHsgZmlsdGVyOiBhcHBsaWVkRmlsdGVyIH0pO1xuICAgICAgdGhpcy5ub3RpZnlGaWx0ZXJVcGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICBzZXRTb3J0QnlDb2x1bW4oY29sSWQsIHNvcnQpIHtcbiAgICBjb25zdCBzb3J0VG9TZXQgPSB0aGlzLmdyaWRRdWVyeS5nZXRTb3J0KHsgY29sSWQsIHNvcnQgfSk7XG5cbiAgICB0aGlzLnNldEdyaWRTb3J0KHNvcnRUb1NldCk7XG4gIH1cblxuICBzZXRHcmlkU29ydChncmlkU29ydDogRGF0b0dyaWRTb3J0KSB7XG4gICAgaWYgKGdyaWRTb3J0ICYmIHRoaXMuYXBpICYmIHRoaXMuYXBpLmdyaWQuZ2V0RGlzcGxheWVkUm93Q291bnQoKSA+IDApIHtcbiAgICAgIGNvbnN0IHsgY29sSWQsIHNvcnQsIHNvcnRJbmRleCB9ID0gZ3JpZFNvcnQ7XG4gICAgICBjb25zdCBncmlkQ29sdW1ucyA9IHRoaXMuYXBpLmNvbHVtbnMuZ2V0QWxsR3JpZENvbHVtbnMoKTtcblxuICAgICAgaWYgKGdyaWRDb2x1bW5zKSB7XG4gICAgICAgIGxldCBzb3J0VG9BcHBseSA9IGdyaWRTb3J0O1xuICAgICAgICAvKiogU29ydCBieSBjb2x1bW4gaWQgKi9cbiAgICAgICAgY29uc3QgY29sdW1uQnlJZCA9IGdyaWRDb2x1bW5zLmZpbmQoKGNvbDogQ29sdW1uKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChjb2wuZ2V0Q29sRGVmKCkuc2hvd1Jvd0dyb3VwIHx8IGNvbC5nZXRDb2xJZCgpKSA9PT0gY29sSWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChjb2x1bW5CeUlkKSB7XG4gICAgICAgICAgc29ydFRvQXBwbHkgPSB7IGNvbElkOiBjb2x1bW5CeUlkLmdldENvbElkKCksIHNvcnQgfTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNOaWwoc29ydEluZGV4KSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlQ29sdW1ucyA9IHRoaXMuYXBpLmNvbHVtbnMuZ2V0VmFsdWVDb2x1bW5zKCk7XG4gICAgICAgICAgY29uc3QgdmFsdWVDb2x1bW4gPSB2YWx1ZUNvbHVtbnMuZmluZCgoY29sOiBDb2x1bW4pID0+IGNvbC5nZXRDb2xJZCgpID09PSBjb2xJZCk7XG4gICAgICAgICAgY29uc3QgaXNQaXZvdENvbElkID0gY29sSWQuc3RhcnRzV2l0aCgncGl2b3QnKTtcblxuICAgICAgICAgIGlmIChpc1Bpdm90Q29sSWQgfHwgdmFsdWVDb2x1bW4pIHtcbiAgICAgICAgICAgIC8qKiBDb2x1bW4gaXMgcGl2b3QgdmFsdWUgY29sdW1uLCBzb3J0IGJ5IGluZGV4ICovXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5CeUluZGV4ID0gZ3JpZENvbHVtbnNbc29ydEluZGV4XTtcblxuICAgICAgICAgICAgc29ydFRvQXBwbHkgPSB7IGNvbElkOiBjb2x1bW5CeUluZGV4LmdldENvbElkKCksIHNvcnQsIHNvcnRJbmRleCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlU2V0dGluZ3MoeyBzb3J0OiBzb3J0VG9BcHBseSB9KTtcbiAgICAgICAgdGhpcy5hcGkuZ3JpZC5zZXRTb3J0TW9kZWwoW3NvcnRUb0FwcGx5XSk7XG5cbiAgICAgICAgaWYgKCh0aGlzLmdyaWRSZWYuZ3JpZE9wdGlvbnMgYXMgRGF0b0dyaWRPcHRpb25zKS51c2VQaXZvdEdyaWRTdHlsZSkge1xuICAgICAgICAgIHRoaXMuYXBpLmdyaWQucmVkcmF3Um93cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGaWx0ZXIoY29sdW1uOiBDb2x1bW4sIGZpbHRlcjogRGF0b0dyaWRGaWx0ZXIpIHtcbiAgICBjb25zdCBjb2xGaWVsZCA9IGdldENvbEZpZWxkKGNvbHVtbi5nZXRDb2xEZWYoKSk7XG5cbiAgICB0aGlzLnN0b3JlLnVwZGF0ZShzdGF0ZSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXR0aW5nczoge1xuICAgICAgICAgIC4uLnN0YXRlLnNldHRpbmdzLFxuICAgICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgICAgLi4uc3RhdGUuc2V0dGluZ3MuZmlsdGVyLFxuICAgICAgICAgICAgW2NvbEZpZWxkXTogZmlsdGVyXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgc2V0U2VhcmNoVGVybShzZWFyY2hUZXJtOiBzdHJpbmcpIHtcbiAgICB0aGlzLnN0b3JlLnVwZGF0ZShzdGF0ZSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXR0aW5nczoge1xuICAgICAgICAgIC4uLnN0YXRlLnNldHRpbmdzLFxuICAgICAgICAgIHNlYXJjaFRlcm1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLm5vdGlmeUZpbHRlclVwZGF0ZSgpO1xuICB9XG5cbiAgc2V0U2VydmVyU2lkZVBhZ2luYXRpb24oY29uZmlnOiBQYXJ0aWFsPFNlcnZlclNpZGVQYWdpbmF0aW9uQ29uZmlnPikge1xuICAgIHRoaXMuc3RvcmUudXBkYXRlKHN0YXRlID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNlcnZlclNpZGVQYWdpbmF0aW9uOiB7XG4gICAgICAgICAgLi4uc3RhdGUuc2VydmVyU2lkZVBhZ2luYXRpb24sXG4gICAgICAgICAgLi4uY29uZmlnXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBzZXRMb2FkaW5nKHNob3c6IGJvb2xlYW4pIHtcbiAgICBpZiAoc2hvdykge1xuICAgICAgdGhpcy5hcGkuZ3JpZC5zaG93TG9hZGluZ092ZXJsYXkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hcGkuZ3JpZC5nZXREaXNwbGF5ZWRSb3dDb3VudCgpID09PSAwID8gdGhpcy5zZXRPdmVybGF5KHRydWUpIDogdGhpcy5zZXRPdmVybGF5KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIHNldE92ZXJsYXkgaW5zdGVhZFxuICAgKiBAcGFyYW0gc2hvd1xuICAgKi9cbiAgc2V0Tm9EYXRhKHNob3c6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldE92ZXJsYXkoc2hvdyk7XG4gIH1cblxuICBzZXRPdmVybGF5KHNob3c6IGJvb2xlYW4pIHtcbiAgICBzaG93ID8gdGhpcy5hcGkuZ3JpZC5zaG93Tm9Sb3dzT3ZlcmxheSgpIDogdGhpcy5hcGkuZ3JpZC5oaWRlT3ZlcmxheSgpO1xuICB9XG5cbiAgdXBkYXRlU2V0dGluZ3Moc2V0dGluZ3M6IFBhcnRpYWw8RGF0b0dyaWRTZXR0aW5ncz4pIHtcbiAgICB0aGlzLnN0b3JlLnVwZGF0ZShzdGF0ZSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXR0aW5nczoge1xuICAgICAgICAgIC4uLnN0YXRlLnNldHRpbmdzLFxuICAgICAgICAgIC4uLnNldHRpbmdzXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBmaXRHcmlkKHRvOiAnY29udGFpbmVyJyB8ICdjb250ZW50Jykge1xuICAgIHRvID09PSAnY29udGFpbmVyJyA/IHRoaXMuYXBpLmdyaWQuc2l6ZUNvbHVtbnNUb0ZpdCgpIDogdGhpcy5hcGkuY29sdW1ucy5hdXRvU2l6ZUFsbENvbHVtbnMoKTtcbiAgICBjb25zdCBncmlkQWxpZ25tZW50ID0gdG8gPT09ICdjb250YWluZXInID8gRGF0b0dyaWRBbGlnbm1lbnQuRklUX1RPX0NPTlRBSU5FUiA6IERhdG9HcmlkQWxpZ25tZW50LkZJVF9UT19DT05URU5UO1xuICAgIHRoaXMudXBkYXRlU2V0dGluZ3MoeyBncmlkQWxpZ25tZW50LCBjb2x1bW5zU2l6ZXM6IG51bGwgfSk7XG4gIH1cblxuICBzYXZlU2V0dGluZ3NUb1NlcnZlcihzZXR0aW5nczogUGFydGlhbDxEYXRvR3JpZFNldHRpbmdzPikge1xuICAgIHRoaXMuc3RvcmFnZUFQSS5zZXQodGhpcy5ncmlkTmFtZSwgc2V0dGluZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbCB1c2VkIHRvIGxvZyBncmlkIGV2ZW50cyB0byB0aGUgcGxhdGZvcm0ncyBsb2dnaW5nIHNlcnZpY2VcbiAgICovXG4gIF9sb2dFdmVudChldmVudFR5cGU6IENvcmVFdmVudFR5cGVzLCBldmVudFByb3BlcnRpZXM/OiBIYXNoTWFwPGFueT4pIHtcbiAgICB0aGlzLmxvZ2dlci5sb2dFdmVudChldmVudFR5cGUsIHsgdGFibGU6IHRoaXMuZ3JpZE5hbWUsIC4uLmV2ZW50UHJvcGVydGllcyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgd3JhcFN1Y2Nlc3NDYWxsYmFjayh7IHN1Y2Nlc3NDYiwgcGFnZU51bWJlciwgaXNQZW5kaW5nUmV0dXJuVG9QYWdlIH06IFN1Y2Nlc3NXcmFwcGVyUGFyYW1zKSB7XG4gICAgcmV0dXJuIChyb3dzVGhpc0Jsb2NrOiBhbnlbXSwgdG90YWxSb3dzOiBudW1iZXIpID0+IHtcbiAgICAgIHRoaXMuc2V0U2VydmVyU2lkZVBhZ2luYXRpb24oeyB0b3RhbFJvd3MsIGhhc0Vycm9yOiBmYWxzZSB9KTtcbiAgICAgIHN1Y2Nlc3NDYihyb3dzVGhpc0Jsb2NrLCB0b3RhbFJvd3MpO1xuICAgICAgdGhpcy5ncmlkUXVlcnkuX3NlcnZlckRhdGFMb2FkZWQubmV4dCh7XG4gICAgICAgIGFwaTogdGhpcy5hcGkuZ3JpZCxcbiAgICAgICAgY29sdW1uQXBpOiB0aGlzLmFwaS5jb2x1bW5zLFxuICAgICAgICB0eXBlOiAnU2VydmVyRGF0YUxvYWRlZCcsXG4gICAgICAgIHBhZ2luYXRpb25QYWdlOiBwYWdlTnVtYmVyXG4gICAgICB9KTtcbiAgICAgIGlmICghaXNQZW5kaW5nUmV0dXJuVG9QYWdlKSB7XG4gICAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgIC8qKiBzbyB0aGUgZ3JpZCBmaXRzIGluIGV2ZXJ5IG5ldyBkYXRhIGlucHV0ICovXG4gICAgICAgIHRyaWdnZXJXaW5kb3dSZXNpemUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGFzdFRvdGFsUm93cyA9IHRvdGFsUm93cztcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB3cmFwR2V0Um93cyhvcHRpb25zOiBEYXRvR3JpZE9wdGlvbnMsIGdldFJvd3M/OiAocGFyYW1zOiBEYXRvR3JpZEdldFJvd3NQYXJhbXMpID0+IHZvaWQpIHtcbiAgICBjb25zdCBnZXRSb3dzQ2IgPSBnZXRSb3dzIHx8IG9wdGlvbnMuZGF0YXNvdXJjZS5nZXRSb3dzO1xuICAgIHJldHVybiAoZ2V0Um93c1BhcmFtczogSUdldFJvd3NQYXJhbXMpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RhcnRSb3csIGVuZFJvdywgc29ydE1vZGVsLCBzdWNjZXNzQ2FsbGJhY2sgfSA9IGdldFJvd3NQYXJhbXM7XG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IG9wdGlvbnMucGFnaW5hdGlvblBhZ2VTaXplIHx8IDEwMDtcbiAgICAgIGNvbnN0IGlzUmV0dXJuVG9DdXJyZW50UGFnZVJlcXVpcmVkID0gdGhpcy5wYWdlTnVtYmVyVG9SZXR1cm5BZnRlclJlZnJlc2ggPiAwO1xuICAgICAgY29uc3QgaXNQZW5kaW5nUmV0dXJuVG9QYWdlID0gaXNSZXR1cm5Ub0N1cnJlbnRQYWdlUmVxdWlyZWQgJiYgc3RhcnRSb3cgPT09IDA7XG5cbiAgICAgIGNvbnN0IHBhZ2VOdW1iZXIgPSBpc1JldHVyblRvQ3VycmVudFBhZ2VSZXF1aXJlZFxuICAgICAgICA/IHRoaXMucGFnZU51bWJlclRvUmV0dXJuQWZ0ZXJSZWZyZXNoICsgMVxuICAgICAgICA6IE1hdGguY2VpbChlbmRSb3cgLyBwYWdlU2l6ZSk7XG5cbiAgICAgIHRoaXMucGFnZU51bWJlclRvUmV0dXJuQWZ0ZXJSZWZyZXNoID0gLTE7XG5cbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEZpbHRlcigpO1xuICAgICAgY29uc3QgbmV3UGFyYW1zOiBEYXRvR3JpZEdldFJvd3NQYXJhbXMgPSB7XG4gICAgICAgIC4uLmdldFJvd3NQYXJhbXMsXG4gICAgICAgIGZhaWxDYWxsYmFjazogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0U2VydmVyU2lkZVBhZ2luYXRpb24oeyBoYXNFcnJvcjogdHJ1ZSB9KTtcbiAgICAgICAgICB0aGlzLnNldE92ZXJsYXkodHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHN1Y2Nlc3NDYWxsYmFjazogdGhpcy53cmFwU3VjY2Vzc0NhbGxiYWNrKHsgcGFnZU51bWJlciwgc3VjY2Vzc0NiOiBzdWNjZXNzQ2FsbGJhY2ssIGlzUGVuZGluZ1JldHVyblRvUGFnZSB9KSxcbiAgICAgICAgc2VydmVyQ29uZmlnOiB7XG4gICAgICAgICAgcGFnZVNpemUsXG4gICAgICAgICAgcGFnZU51bWJlcixcbiAgICAgICAgICBjb2x1bW5GaWx0ZXJzOiBpc0VtcHR5KGZpbHRlcikgfHwgb3B0aW9ucy5lbmFibGVWMl8xID8gbnVsbCA6IHRoaXMuYnVpbGRTZXJ2ZXJSZXF1ZXN0RmlsdGVycyhmaWx0ZXIpLFxuICAgICAgICAgIGZpbHRlcjogb3B0aW9ucy5lbmFibGVWMl8xID8gdGhpcy5idWlsZFNlcnZlclJlcXVlc3RGaWx0ZXJzX3YyXzEob3B0aW9ucy5jb2x1bW5EZWZzKSA6IG51bGwsXG4gICAgICAgICAgc29ydDogdGhpcy5idWlsZFNlcnZlclJlcXVlc3RTb3J0KHNvcnRNb2RlbClcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChpc1BlbmRpbmdSZXR1cm5Ub1BhZ2UpIHtcbiAgICAgICAgLy8gU2NlbmFyaW8gdGhlIGZvbGxvd2luZyBoYW5kbGVzIC0gc2VydmVyIHJlZnJlc2ggd2hlcmUgaXQgd2FzIHJlcXVlc3RlZCB0byBrZWVwIHRoZSBjdXJyZW50IHBhZ2UuXG4gICAgICAgIC8vIFRoZSBwcm9ibGVtIC0gZ2V0Um93cyB3aWxsIGluaXRpYWxseSBiZSBjYWxsZWQgZm9yIHBhZ2UgMSAoYXV0b21hdGljYWxseSBoYXBwZW5zIHdoZW4gY2FsbGluZyBhZy1ncmlkJ3Mgc2V0RGF0YVNvdXJjZSkuXG4gICAgICAgIC8vIEluIG9yZGVyIHRvIHRyaWdnZXIgaXQgYWdhaW4sIHN1Y2Nlc3NDYWxsYmFjayBpcyBjYWxsZWQgd2l0aCB0aGUgZGVzaXJlZCBwYWdlLlxuICAgICAgICAvLyBmYWtlR2V0Um93cyBpcyB1c2VkIGluIG9yZGVyIHRvIGF2b2lkIHJldHJpZXZpbmcgdGhlIHVubmVjZXNzYXJ5IHJlYWwgZGF0YSBmb3IgcGFnZSAxLlxuICAgICAgICBjb25zdCBmYWtlR2V0Um93cyA9ICh7IHN1Y2Nlc3NDYWxsYmFjayB9OiBEYXRvR3JpZEdldFJvd3NQYXJhbXMpID0+IHtcbiAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2soW10sIHRoaXMubGFzdFRvdGFsUm93cyk7XG4gICAgICAgIH07XG4gICAgICAgIGZha2VHZXRSb3dzKG5ld1BhcmFtcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZXRSb3dzQ2IobmV3UGFyYW1zKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0RWRpdGFibGVDb2x1bW5zQ2VsbENsYXNzKHBhcmFtczogTm9ybWFsaXplT3B0aW9uc1BhcmFtcykge1xuICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5jb2x1bW5EZWZzLmZvckVhY2goY29sRGVmID0+IHtcbiAgICAgIGlmIChjb2xEZWYuZWRpdGFibGUpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY29sRGVmLmVkaXRhYmxlKSkge1xuICAgICAgICAgIGNvbnN0IGluaXRpYWxDZWxsQ2xhc3MgPSBjb2xEZWYuY2VsbENsYXNzO1xuICAgICAgICAgIGNvbERlZi5jZWxsQ2xhc3MgPSAoY2VsbENsYXNzUGFyYW1zOiBDZWxsQ2xhc3NQYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzRWRpdGFibGUgPSAoY29sRGVmLmVkaXRhYmxlIGFzIEZ1bmN0aW9uKShjZWxsQ2xhc3NQYXJhbXMgYXMgYW55KTtcbiAgICAgICAgICAgIGlmIChpc0VkaXRhYmxlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVkaXRhYmxlUmVzdWx0ID0gdGhpcy5hZGRFZGl0YWJsZUNlbGxDbGFzcyhpbml0aWFsQ2VsbENsYXNzKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZWRpdGFibGVSZXN1bHQpID8gZWRpdGFibGVSZXN1bHQoY2VsbENsYXNzUGFyYW1zKSA6IGVkaXRhYmxlUmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5pdGlhbENlbGxDbGFzcykgPyBpbml0aWFsQ2VsbENsYXNzKGNlbGxDbGFzc1BhcmFtcykgOiBpbml0aWFsQ2VsbENsYXNzO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sRGVmLmNlbGxDbGFzcyA9IHRoaXMuYWRkRWRpdGFibGVDZWxsQ2xhc3MoY29sRGVmLmNlbGxDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgd3JhcENvbnRleHRNZW51QnVpbGRlcihwYXJhbXM6IE5vcm1hbGl6ZU9wdGlvbnNQYXJhbXMpIHtcbiAgICBjb25zdCB7IGN1c3RvbUNvbnRleHRNZW51IH0gPSBwYXJhbXMuZ3JpZE9wdGlvbnM7XG4gICAgY29uc3QgYWxsQWN0aW9ucyA9IGlzRnVuY3Rpb24oY3VzdG9tQ29udGV4dE1lbnUpID8gY3VzdG9tQ29udGV4dE1lbnUocGFyYW1zLnJvd0FjdGlvbnMpIDogcGFyYW1zLnJvd0FjdGlvbnM7XG4gICAgdGhpcy50cmFuc2xhdGVBY3Rpb25MYWJlbHMoYWxsQWN0aW9ucyk7XG4gICAgY29uc3QgY29weUFjdGlvbjogUm93QWN0aW9uID0ge1xuICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSgnY29yZS5jb3B5LWNlbGwnKSxcbiAgICAgIGljb246ICdjb3B5JyxcbiAgICAgIGtleTogJ0NvcHkgQ2VsbCdcbiAgICB9O1xuICAgIHJldHVybiAoeyBub2RlLCBjb2x1bW4sIGNvbnRleHQgfTogR2V0Q29udGV4dE1lbnVJdGVtc1BhcmFtcykgPT4ge1xuICAgICAgY29uc3Qgb25Ib3ZlckFjdGlvbk1lbnUgPSBjb250ZXh0ICYmIGNvbnRleHQuY29udGV4dE1lbnUgJiYgY29udGV4dC5jb250ZXh0TWVudS5mcm9tT25Ib3ZlcjtcbiAgICAgIGlmICghbm9kZSkgcmV0dXJuIFtdO1xuICAgICAgbGV0IHNlbGVjdGVkID0gW25vZGVdO1xuICAgICAgbGV0IHJvd3NDb3VudCA9IDE7XG4gICAgICBpZiAob25Ib3ZlckFjdGlvbk1lbnUpIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmlkQ29udGV4dCh7IGNvbnRleHRNZW51OiB7IGZyb21PbkhvdmVyOiBmYWxzZSB9IH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29weUFjdGlvbi5vbkNsaWNrID0gKFtyb3ddKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmF3VmFsdWUgPSB0aGlzLmFwaS5ncmlkLmdldFZhbHVlKGNvbHVtbi5nZXRDb2xJZCgpLCByb3cpO1xuICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGNvbHVtbi5nZXRDb2xEZWYoKS52YWx1ZUZvcm1hdHRlcjtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZvcm1hdHRlciA/IGZvcm1hdHRlcihyYXdWYWx1ZSkgOiByYXdWYWx1ZTtcbiAgICAgICAgICBjb3B5VG9DbGlwYm9hcmQodmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAobm9kZS5pc1NlbGVjdGVkKCkpIHtcbiAgICAgICAgICBzZWxlY3RlZCA9IHRoaXMuZ3JpZFF1ZXJ5LmdldFNlbGVjdGVkUm93Tm9kZXMoKTtcbiAgICAgICAgICByb3dzQ291bnQgPSBzaXplKHNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgdmlzaWJsZUFjdGlvbnMgPSBnZXRWaXNpYmxlQWN0aW9ucyhcbiAgICAgICAgYWxsQWN0aW9ucyxcbiAgICAgICAgcm93c0NvdW50LFxuICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgdGhpcy5ncmlkUXVlcnkuaXNTZXJ2ZXJTZWxlY3RBbGxSb3dzRW5hYmxlZFxuICAgICAgKS5maWx0ZXIoKHsgdmlzaWJsZSB9KSA9PiB2aXNpYmxlKTtcbiAgICAgIGxldCB0b29sYmFyQWN0aW9ucyA9IFtjb3B5QWN0aW9uXTtcbiAgICAgIGlmIChvbkhvdmVyQWN0aW9uTWVudSkge1xuICAgICAgICB0b29sYmFyQWN0aW9ucyA9IHZpc2libGVBY3Rpb25zO1xuICAgICAgfSBlbHNlIGlmICh2aXNpYmxlQWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRvb2xiYXJBY3Rpb25zID0gW3sgLi4uY29weUFjdGlvbiwgc2VwYXJhdG9yOiB0cnVlIH0sIC4uLnZpc2libGVBY3Rpb25zXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnZlcnRlclBhcmFtczogQWN0aW9uQ29udmVydGVyUGFyYW1zID0ge1xuICAgICAgICB0b29sYmFyQWN0aW9ucyxcbiAgICAgICAgc2VsZWN0ZWRSb3dzOiBzZWxlY3RlZCxcbiAgICAgICAgaWNvblJlZ2lzdHJ5OiB0aGlzLnN2Z1JlZ2lzdHJ5LFxuICAgICAgICBub2RlLFxuICAgICAgICBsb2dnZXI6IHtcbiAgICAgICAgICBsb2c6IHRoaXMuX2xvZ0V2ZW50LmJpbmQodGhpcyksXG4gICAgICAgICAgZXZlbnRPcmlnaW46IG9uSG92ZXJBY3Rpb25NZW51ID8gJ09uIEhvdmVyJyA6ICdDb250ZXh0IE1lbnUnXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gdG9vbGJhckFjdGlvblRvQ29udGV4dEFjdGlvbihjb252ZXJ0ZXJQYXJhbXMpO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHRyYW5zbGF0ZUFjdGlvbkxhYmVscyhhbGxBY3Rpb25zOiBSb3dBY3Rpb25bXSkge1xuICAgIGFsbEFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgICAgYWN0aW9uLmxhYmVsID0gdGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKGFjdGlvbi5sYWJlbCk7XG4gICAgICBpZiAoYWN0aW9uLnN1Yk1lbnUpIHtcbiAgICAgICAgdGhpcy50cmFuc2xhdGVBY3Rpb25MYWJlbHMoYWN0aW9uLnN1Yk1lbnUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbG9hZFNhdmVkU2V0dGluZ3Moc2V0dGluZ3M6IFBhcnRpYWw8RGF0b0dyaWRTZXR0aW5ncz4pIHtcbiAgICBjb25zdCB7XG4gICAgICBzb3J0LFxuICAgICAgaGlkZGVuQ29sdW1ucyxcbiAgICAgIGZpbHRlcixcbiAgICAgIGdyb3VwZWRDb2x1bW5zLFxuICAgICAgY29sdW1uc1NpemVzLFxuICAgICAgcGlubmVkQ29sdW1ucyxcbiAgICAgIGNvbHVtbnNPcmRlcixcbiAgICAgIGdyaWRBbGlnbm1lbnRcbiAgICB9ID0gc2V0dGluZ3M7XG4gICAgY29uc3QgeyBncmlkLCBjb2x1bW5zIH0gPSB0aGlzLmFwaTtcbiAgICAvKiBIaWRlIGNvbHVtbnMgKi9cbiAgICAvKiBOT1RFOiBjb2x1bW5zIG9yZGVyIGFyZSB0cmVhdGVkIGFzIHRoZSBjdXJyZW50bHkgdmlzaWJsZSBjb2x1bW5zICovXG4gICAgY29sdW1ucy5zZXRDb2x1bW5zVmlzaWJsZSh0aGlzLmluaXRpYWxTZXR0aW5ncy5jb2x1bW5zT3JkZXIsIHRydWUpO1xuICAgIGNvbnN0IGNvbHVtblRvSGlkZSA9ICFpc05pbChoaWRkZW5Db2x1bW5zKSA/IGhpZGRlbkNvbHVtbnMgOiB0aGlzLmluaXRpYWxTZXR0aW5ncy5oaWRkZW5Db2x1bW5zO1xuICAgIGNvbHVtbnMuc2V0Q29sdW1uc1Zpc2libGUoY29sdW1uVG9IaWRlLCBmYWxzZSk7XG5cbiAgICAvKiBBcHBseSBmaWx0ZXJzICovXG4gICAgaWYgKGZpbHRlcikge1xuICAgICAgZ3JpZC5vbkZpbHRlckNoYW5nZWQoKTtcbiAgICB9XG5cbiAgICAvKiBHcm91cCBjb2x1bW5zICovXG4gICAgY29uc3QgYWxsR3JvdXBlZENvbHVtbnMgPSBjb2x1bW5zLmdldFJvd0dyb3VwQ29sdW1ucygpO1xuICAgIGxldCByZW1vdmVHcm91cGVkO1xuICAgIGlmIChncm91cGVkQ29sdW1ucykge1xuICAgICAgcmVtb3ZlR3JvdXBlZCA9IGFsbEdyb3VwZWRDb2x1bW5zLmZpbHRlcihjb2wgPT4gIWdyb3VwZWRDb2x1bW5zLmluY2x1ZGVzKGNvbC5nZXRDb2xJZCgpKSk7XG4gICAgICBjb2x1bW5zLmFkZFJvd0dyb3VwQ29sdW1ucyhncm91cGVkQ29sdW1ucyk7XG4gICAgICBjb2x1bW5zLnNldENvbHVtbnNWaXNpYmxlKGdyb3VwZWRDb2x1bW5zLCBmYWxzZSk7XG4gICAgfVxuICAgIGNvbHVtbnMucmVtb3ZlUm93R3JvdXBDb2x1bW5zKHJlbW92ZUdyb3VwZWQpO1xuICAgIGNvbHVtbnMuc2V0Q29sdW1uc1Zpc2libGUocmVtb3ZlR3JvdXBlZCwgdHJ1ZSk7XG5cbiAgICAvKiBBcHBseSBzb3J0ICovXG4gICAgY29uc3QgZ3JpZFNvcnQgPSBzb3J0IHx8IHRoaXMuaW5pdGlhbFNldHRpbmdzLnNvcnQ7XG4gICAgZ3JpZC5zZXRTb3J0TW9kZWwoZ3JpZFNvcnQgPyBbZ3JpZFNvcnRdIDogbnVsbCk7XG5cbiAgICAvKiBBbGlnbiBncmlkICovXG4gICAgaWYgKGdyaWRBbGlnbm1lbnQgPT09IERhdG9HcmlkQWxpZ25tZW50LkNVU1RPTSkge1xuICAgICAgLyogU2V0IGNvbHVtbiBzaXplcyAqL1xuICAgICAgY29sdW1uc1NpemVzICYmXG4gICAgICAgIE9iamVjdC5rZXlzKGNvbHVtbnNTaXplcykuZm9yRWFjaChjb2xJZCA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbnNTaXplc1tjb2xJZF0gPT09IERhdG9HcmlkQWxpZ25tZW50LkZJVF9UT19DT05URU5UKSB7XG4gICAgICAgICAgICBjb2x1bW5zLmF1dG9TaXplQ29sdW1uKGNvbElkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29sdW1ucy5zZXRDb2x1bW5XaWR0aChjb2xJZCwgY29sdW1uc1NpemVzW2NvbElkXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JpZEFsaWdubWVudCA9PT0gRGF0b0dyaWRBbGlnbm1lbnQuRklUX1RPX0NPTlRFTlQgPyBjb2x1bW5zLmF1dG9TaXplQWxsQ29sdW1ucygpIDogZ3JpZC5zaXplQ29sdW1uc1RvRml0KCk7XG4gICAgfVxuXG4gICAgLyogUGluIGNvbHVtbnMgbGVmdCAqL1xuICAgIGNvbnN0IGZpbHRlcmVkUGlubmVkQ29sdW1ucyA9IHBpbm5lZENvbHVtbnNcbiAgICAgID8gcGlubmVkQ29sdW1ucy5maWx0ZXIoKGNvbDogc3RyaW5nKSA9PiBjb2wgIT09IHRoaXMuQ0hFQ0tCT1hfU0VMRUNUSU9OX0NPTF9JRClcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSBjb2x1bW5zT3JkZXJcbiAgICAgID8gY29sdW1uc09yZGVyLmZpbHRlcigoY29sOiBzdHJpbmcpID0+IGNvbCAhPT0gdGhpcy5DSEVDS0JPWF9TRUxFQ1RJT05fQ09MX0lEKVxuICAgICAgOiBudWxsO1xuICAgIHNpemUoZmlsdGVyZWRQaW5uZWRDb2x1bW5zKSA+IDBcbiAgICAgID8gY29sdW1ucy5zZXRDb2x1bW5zUGlubmVkKGZpbHRlcmVkUGlubmVkQ29sdW1ucywgJ2xlZnQnKVxuICAgICAgOiBmaWx0ZXJlZENvbHVtbnMgJiYgY29sdW1ucy5zZXRDb2x1bW5zUGlubmVkKGZpbHRlcmVkQ29sdW1ucywgbnVsbCk7XG5cbiAgICAvKiBPcmRlciBjb2x1bW5zICovXG4gICAgY29sdW1uc09yZGVyICYmIGNvbHVtbnMubW92ZUNvbHVtbnMoY29sdW1uc09yZGVyLCAwKTtcbiAgfVxuXG4gIGdldFNldHRpbmdzRGlmZigpOiBQYXJ0aWFsPERhdG9HcmlkU2V0dGluZ3M+IHtcbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLmdyaWRRdWVyeS5nZXRDdXJyZW50R3JpZFNldHRpbmdzKCk7XG4gICAgcmV0dXJuIGRpZmYoY3VycmVudFN0YXRlLCB0aGlzLmluaXRpYWxTZXR0aW5ncyk7XG4gIH1cblxuICByZXNldFRhYmxlU2V0dGluZ3MoKSB7XG4gICAgY29uc3QgeyBmaWx0ZXIsIC4uLnJlc3QgfSA9IHRoaXMuaW5pdGlhbFNldHRpbmdzO1xuICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gdGhpcy5hcGk7XG4gICAgY29uc3Qgb3JpZ2luYWxDb2xTaXplcyA9IGdldENvbHVtbnNTaXplcyhjb2x1bW5zLmdldEFsbEdyaWRDb2x1bW5zKCksIHRydWUpO1xuICAgIGNvbnN0IGdyaWRBbGlnbm1lbnQgPSBpc0VtcHR5KG9yaWdpbmFsQ29sU2l6ZXMpID8gcmVzdC5ncmlkQWxpZ25tZW50IDogRGF0b0dyaWRBbGlnbm1lbnQuQ1VTVE9NO1xuICAgIGNvbnN0IG5ld1NldHRpbmdzID0geyAuLi5yZXN0LCBjb2x1bW5zU2l6ZXM6IG9yaWdpbmFsQ29sU2l6ZXMsIGdyaWRBbGlnbm1lbnQgfTtcbiAgICB0aGlzLnVwZGF0ZVNldHRpbmdzKG5ld1NldHRpbmdzKTtcbiAgICB0aGlzLmxvYWRTYXZlZFNldHRpbmdzKG5ld1NldHRpbmdzKTtcbiAgICB0aGlzLnNhdmVTZXR0aW5nc1RvU2VydmVyKHsgZmlsdGVyIH0pO1xuICB9XG5cbiAgaW5pdFNldHRpbmdzKHNhdmVkU2V0dGluZ3M6IFBhcnRpYWw8RGF0b0dyaWRTZXR0aW5ncz4pIHtcbiAgICB0aGlzLmluaXRpYWxTZXR0aW5ncyA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEN1cnJlbnRHcmlkU2V0dGluZ3MoKTtcbiAgICB0aGlzLnVwZGF0ZVNldHRpbmdzKHNhdmVkU2V0dGluZ3MpO1xuICAgIHRoaXMubG9hZFNhdmVkU2V0dGluZ3Moc2F2ZWRTZXR0aW5ncyk7XG4gIH1cblxuICBub3RpZnlGaWx0ZXJVcGRhdGUoKSB7XG4gICAgY29uc3Qgd2F0Y2ggPSBbdGhpcy5ncmlkUmVmLmZpbHRlckNoYW5nZWQuYXNPYnNlcnZhYmxlKCldO1xuICAgIGlmICh0aGlzLmdyaWRRdWVyeS5pc1NlcnZlclNpZGUpIHtcbiAgICAgIHdhdGNoLnB1c2godGhpcy5ncmlkUXVlcnkuc2VydmVyRGF0YUxvYWRlZCQpO1xuICAgICAgdGhpcy5zZXRMb2FkaW5nKHRydWUpO1xuICAgIH1cbiAgICBjb21iaW5lTGF0ZXN0KHdhdGNoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgY29uc3Qgcm93c0FmdGVyRmlsdGVyID0gdGhpcy5hcGkuZ3JpZC5nZXREaXNwbGF5ZWRSb3dDb3VudCgpO1xuICAgICAgICB0aGlzLnNldE92ZXJsYXkocm93c0FmdGVyRmlsdGVyID09PSAwKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuYXBpLmdyaWQub25GaWx0ZXJDaGFuZ2VkKCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VydmVyUmVxdWVzdEZpbHRlcnMoZmlsdGVyOiBEYXRvR3JpZEZpbHRlcnNNYXApOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlcnMge1xuICAgIGNvbnN0IGNvbHVtbnNGaWx0ZXJzOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlcnMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtjb2x1bW4sIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmaWx0ZXIpKSB7XG4gICAgICBjb25zdCB7IGJ5VmFsdWUsIGNvbmRpdGlvbmFsIH0gPSB2YWx1ZTtcbiAgICAgIGlmIChieVZhbHVlKSB7XG4gICAgICAgIGNvbHVtbnNGaWx0ZXJzW2NvbHVtbl0gPSB7XG4gICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELFxuICAgICAgICAgIGZpbHRlcnM6IFtieVZhbHVlXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKGNvbmRpdGlvbmFsKSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbmFsRmlsdGVyID0ge1xuICAgICAgICAgIG9wZXJhdG9yOiBjb25kaXRpb25hbC5vcGVyYXRvcixcbiAgICAgICAgICBmaWx0ZXJzOiBjb25kaXRpb25hbC5jb25kaXRpb25zLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgY29uZGl0aW9uLCB2YWx1ZSB9ID0gaXRlbTtcbiAgICAgICAgICAgIGlmIChjb25kaXRpb24gPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX1JBTkdFKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29uZGl0aW9uLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiB2YWx1ZSxcbiAgICAgICAgICAgICAgICBlbmQ6IChpdGVtIGFzIERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb24pLnJhbmdlRW5kXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXRlbSBhcyBEYXRvR3JpZEZpbHRlckNvbmRpdGlvbjtcbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgICBpZiAoYnlWYWx1ZSkge1xuICAgICAgICAgIGNvbHVtbnNGaWx0ZXJzW2NvbHVtbl0uZmlsdGVycy5wdXNoKGNvbmRpdGlvbmFsRmlsdGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2x1bW5zRmlsdGVyc1tjb2x1bW5dID0gY29uZGl0aW9uYWxGaWx0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29sdW1uc0ZpbHRlcnM7XG4gIH1cblxuICBidWlsZFNlcnZlclJlcXVlc3RGaWx0ZXJzX3YyXzEoZ3JpZENvbHVtbnM6IERhdG9HcmlkQ29sdW1uRGVmW10pOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlciB7XG4gICAgY29uc3QgZmlsdGVyID0gdGhpcy5ncmlkUXVlcnkuZ2V0RmlsdGVyKCk7XG4gICAgY29uc3Qgc2VhcmNoVGVybSA9IHRoaXMuZ3JpZFF1ZXJ5LmdldFNlYXJjaFRlcm0oKTtcblxuICAgIGxldCBjb2x1bW5GaWx0ZXJzID0gdGhpcy5idWlsZFNlcnZlckNvbHVtbkZpbHRlcnNfdjJfMShmaWx0ZXIpO1xuICAgIGlmIChjb2x1bW5GaWx0ZXJzLmV2ZXJ5KCh7IG9wZXJhdG9yIH06IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyKSA9PiBvcGVyYXRvciA9PT0gT3BlcmF0b3JUeXBlcy5BTkQpKSB7XG4gICAgICBjb25zdCBmbGF0dGVuZWRGaWx0ZXJzID0gY29sdW1uRmlsdGVyc1xuICAgICAgICAubWFwKCh7IGZpbHRlcnMgfTogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXIpID0+IGZpbHRlcnMpXG4gICAgICAgIC5yZWR1Y2UoKGFyciwgcmVzKSA9PiByZXMuY29uY2F0KGFyciksIFtdKTtcbiAgICAgIGNvbHVtbkZpbHRlcnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5BTkQsXG4gICAgICAgICAgZmlsdGVyczogZmxhdHRlbmVkRmlsdGVyc1xuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW5GaWx0ZXI6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyID1cbiAgICAgIHNpemUoY29sdW1uRmlsdGVycykgPiAxXG4gICAgICAgID8geyBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5BTkQsIGZpbHRlcnM6IGNvbHVtbkZpbHRlcnMgfVxuICAgICAgICA6IHNpemUoY29sdW1uRmlsdGVycykgPT09IDFcbiAgICAgICAgPyBjb2x1bW5GaWx0ZXJzWzBdXG4gICAgICAgIDogbnVsbDtcbiAgICBpZiAoIXNlYXJjaFRlcm0pIHtcbiAgICAgIHJldHVybiBjb2x1bW5GaWx0ZXI7XG4gICAgfVxuICAgIGNvbnN0IHsgaW5jbHVkZUhpZGRlbkNvbHVtbnNJblNlYXJjaCB9ID0gdGhpcy5ncmlkUXVlcnkuZ2V0R3JpZE9wdGlvbnMoKTtcbiAgICBjb25zdCBzZWFyY2hhYmxlQ29sdW1ucyA9IGdyaWRDb2x1bW5zLmZpbHRlcigoY29sRGVmOiBEYXRvR3JpZENvbHVtbkRlZikgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgY29sRGVmLmluY2x1ZGVJblNlYXJjaCAmJiAoaW5jbHVkZUhpZGRlbkNvbHVtbnNJblNlYXJjaCB8fCB0aGlzLmFwaS5jb2x1bW5zLmdldENvbHVtbihjb2xEZWYuY29sSWQpLmlzVmlzaWJsZSgpKVxuICAgICAgKTtcbiAgICB9KTtcbiAgICBjb25zdCBzZWFyY2hGaWx0ZXJzOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmRpdGlvbltdID0gc2VhcmNoYWJsZUNvbHVtbnMubWFwKCh7IGZpZWxkIH06IERhdG9HcmlkQ29sdW1uRGVmKSA9PiAoe1xuICAgICAgY29uZGl0aW9uOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5DT05UQUlOUyxcbiAgICAgIHZhbHVlOiBzZWFyY2hUZXJtLFxuICAgICAgY29sdW1uOiBmaWVsZFxuICAgIH0pKTtcbiAgICBjb25zdCBzZWFyY2hGaWx0ZXI6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyID1cbiAgICAgIHNpemUoc2VhcmNoRmlsdGVycykgPiAwID8geyBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5PUiwgZmlsdGVyczogc2VhcmNoRmlsdGVycyB9IDogbnVsbDtcbiAgICBpZiAoIWNvbHVtbkZpbHRlcikge1xuICAgICAgcmV0dXJuIHNlYXJjaEZpbHRlcjtcbiAgICB9XG4gICAgcmV0dXJuIHsgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELCBmaWx0ZXJzOiBbY29sdW1uRmlsdGVyLCBzZWFyY2hGaWx0ZXJdIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VydmVyQ29sdW1uRmlsdGVyc192Ml8xKGZpbHRlcjogRGF0b0dyaWRGaWx0ZXJzTWFwKTogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXJbXSB7XG4gICAgbGV0IGNvbHVtbkZpbHRlcnM6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2NvbHVtbiwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZpbHRlcikpIHtcbiAgICAgIGxldCBjb2x1bW5GaWx0ZXI6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyID0gbnVsbDtcbiAgICAgIGNvbnN0IHsgYnlWYWx1ZSwgY29uZGl0aW9uYWwgfSA9IHZhbHVlO1xuICAgICAgaWYgKGJ5VmFsdWUpIHtcbiAgICAgICAgY29sdW1uRmlsdGVyID0ge1xuICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvclR5cGVzLkFORCxcbiAgICAgICAgICBmaWx0ZXJzOiBbeyBjb2x1bW4sIC4uLmJ5VmFsdWUgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChjb25kaXRpb25hbCkge1xuICAgICAgICBjb25zdCBjb25kaXRpb25hbEZpbHRlcjogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXIgPSB0aGlzLmdldFNlcnZlckNvbmRpdGlvbmFsRmlsdGVyKGNvbmRpdGlvbmFsLCBjb2x1bW4pO1xuICAgICAgICBpZiAoY29sdW1uRmlsdGVyKSB7XG4gICAgICAgICAgY29sdW1uRmlsdGVyLmZpbHRlcnMucHVzaChjb25kaXRpb25hbEZpbHRlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sdW1uRmlsdGVyID0gY29uZGl0aW9uYWxGaWx0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbHVtbkZpbHRlcnMucHVzaChjb2x1bW5GaWx0ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gY29sdW1uRmlsdGVycztcbiAgfVxuXG4gIGdldEZpbHRlckZvclNlcnZlckFjdGlvbk9uU2VsZWN0QWxsKCk6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyIHtcbiAgICBjb25zdCB7IGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbCB9ID0gdGhpcy5ncmlkUXVlcnkuc2VydmVyU2lkZUNvbmZpZztcbiAgICBjb25zdCB7IGNvbHVtbkRlZnMsIGlkQ29sdW1uS2V5IH0gPSB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpO1xuICAgIGNvbnN0IG1haW5GaWx0ZXIgPSB0aGlzLmJ1aWxkU2VydmVyUmVxdWVzdEZpbHRlcnNfdjJfMShjb2x1bW5EZWZzKTtcbiAgICBpZiAoaXNFbXB0eShleGNsdWRlZEZyb21TZWxlY3RBbGwpKSB7XG4gICAgICByZXR1cm4gbWFpbkZpbHRlcjtcbiAgICB9XG4gICAgY29uc3QgZXhjbHVkZWRSb3dzRmlsdGVyOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkxpc3RDb25kaXRpb24gPSB7XG4gICAgICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNULFxuICAgICAgdmFsdWVzOiBleGNsdWRlZEZyb21TZWxlY3RBbGwsXG4gICAgICBjb2x1bW46IGlkQ29sdW1uS2V5XG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXJzID0gbWFpbkZpbHRlciA/IFttYWluRmlsdGVyLCBleGNsdWRlZFJvd3NGaWx0ZXJdIDogW2V4Y2x1ZGVkUm93c0ZpbHRlcl07XG4gICAgcmV0dXJuIHsgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELCBmaWx0ZXJzIH07XG4gIH1cblxuICBwcml2YXRlIGdldFNlcnZlckNvbmRpdGlvbmFsRmlsdGVyKFxuICAgIGNvbmRpdGlvbmFsRmlsdGVyOiBEYXRvR3JpZENvbmRpdGlvbmFsRmlsdGVyLFxuICAgIGNvbHVtbjogc3RyaW5nXG4gICk6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3BlcmF0b3I6IGNvbmRpdGlvbmFsRmlsdGVyLm9wZXJhdG9yLFxuICAgICAgZmlsdGVyczogY29uZGl0aW9uYWxGaWx0ZXIuY29uZGl0aW9ucy5tYXAoaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29uZGl0aW9uLCB2YWx1ZSB9ID0gaXRlbTtcbiAgICAgICAgaWYgKGNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0UpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29uZGl0aW9uLFxuICAgICAgICAgICAgc3RhcnQ6IHZhbHVlLFxuICAgICAgICAgICAgZW5kOiAoaXRlbSBhcyBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uKS5yYW5nZUVuZCxcbiAgICAgICAgICAgIGNvbHVtblxuICAgICAgICAgIH0gYXMgU2VydmVyU2lkZVBhZ2luYXRpb25SYW5nZUNvbmRpdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZGl0aW9uID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JU19FTVBUWSB8fCBjb25kaXRpb24gPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9FTVBUWSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLklTX0VNUFRZLFxuICAgICAgICAgICAgdmFsdWU6IGNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSVNfRU1QVFkgPyAndHJ1ZScgOiAnZmFsc2UnLFxuICAgICAgICAgICAgY29sdW1uXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZGl0aW9uID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JU19OVUxMIHx8IGNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX05VTEwpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29uZGl0aW9uOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JU19OVUxMLFxuICAgICAgICAgICAgdmFsdWU6IGNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSVNfTlVMTCA/ICd0cnVlJyA6ICdmYWxzZScsXG4gICAgICAgICAgICBjb2x1bW5cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IC4uLml0ZW0sIGNvbHVtbiB9IGFzIFNlcnZlclNpZGVQYWdpbmF0aW9uQ29uZGl0aW9uO1xuICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFNlcnZlclJlcXVlc3RTb3J0KHNvcnRNb2RlbDogRGF0b0dyaWRTb3J0W10pOiBEYXRvR3JpZFNlcnZlclNvcnRbXSB7XG4gICAgcmV0dXJuIHNvcnRNb2RlbC5tYXAoKHsgY29sSWQsIHNvcnQgfSkgPT4gKHtcbiAgICAgIGNvbHVtbjogY29sSWQsXG4gICAgICBzb3J0T3JkZXI6IHNvcnQudG9VcHBlckNhc2UoKSBhcyBEYXRvR3JpZFNlcnZlclNvcnREaXJlY3Rpb25cbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGFkZEVkaXRhYmxlQ2VsbENsYXNzKFxuICAgIGNlbGxDbGFzc1ZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8ICgoY2VsbENsYXNzUGFyYW1zOiBDZWxsQ2xhc3NQYXJhbXMpID0+IHN0cmluZyB8IHN0cmluZ1tdKVxuICApIHtcbiAgICBpZiAoaXNOaWwoY2VsbENsYXNzVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ2RhdG8tZWRpdGFibGUtY2VsbCc7XG4gICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKGNlbGxDbGFzc1ZhbHVlKSkge1xuICAgICAgcmV0dXJuIGNlbGxDbGFzc1BhcmFtcyA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEVkaXRhYmxlQ2xhc3NBcnJheShjZWxsQ2xhc3NWYWx1ZShjZWxsQ2xhc3NQYXJhbXMpKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldEVkaXRhYmxlQ2xhc3NBcnJheShjZWxsQ2xhc3NWYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGdldEVkaXRhYmxlQ2xhc3NBcnJheShjdXJyZW50Q2xhc3M6IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNlbGxDbGFzcyA9IGNvZXJjZUFycmF5KGN1cnJlbnRDbGFzcyk7XG4gICAgY2VsbENsYXNzLnB1c2goJ2RhdG8tZWRpdGFibGUtY2VsbCcpO1xuICAgIHJldHVybiBjZWxsQ2xhc3M7XG4gIH1cblxuICBzZWxlY3RBbGxDdXJyZW50UGFnZVJvd3MoaXNTZWxlY3RlZCA9IHRydWUsIGNvbnNpZGVyRXhjbHVkZWQgPSBmYWxzZSkge1xuICAgIGxldCByb3dzRm9yU2VsZWN0aW9uID0gdGhpcy5ncmlkUXVlcnkuZ2V0Q3VycmVudFBhZ2VSb3dzKCk7XG4gICAgaWYgKGNvbnNpZGVyRXhjbHVkZWQpIHtcbiAgICAgIGNvbnN0IHsgZXhjbHVkZWRGcm9tU2VsZWN0QWxsIH0gPSB0aGlzLmdyaWRRdWVyeS5zZXJ2ZXJTaWRlQ29uZmlnO1xuICAgICAgaWYgKCFpc0VtcHR5KGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbCkpIHtcbiAgICAgICAgcm93c0ZvclNlbGVjdGlvbiA9IHJvd3NGb3JTZWxlY3Rpb24uZmlsdGVyKCh7IGlkIH06IFJvd05vZGUpID0+ICFleGNsdWRlZEZyb21TZWxlY3RBbGwuaW5jbHVkZXMoaWQpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaXNTZWxlY3RlZCA/IHRoaXMuc2VsZWN0Um93cyhyb3dzRm9yU2VsZWN0aW9uKSA6IHRoaXMuZGVzZWxlY3RSb3dzKHJvd3NGb3JTZWxlY3Rpb24pO1xuICB9XG5cbiAgZGVzZWxlY3RBbGxSb3dzKCkge1xuICAgIHRoaXMuYXBpLmdyaWQuZGVzZWxlY3RBbGwoKTtcbiAgICBpZiAodGhpcy5ncmlkUXVlcnkuaXNTZXJ2ZXJTZWxlY3RBbGxSb3dzRW5hYmxlZCkge1xuICAgICAgdGhpcy5zZXRTZXJ2ZXJTaWRlUGFnaW5hdGlvbih7IHNlbGVjdEFsbFJvd3NFbmFibGVkOiBmYWxzZSwgZXhjbHVkZWRGcm9tU2VsZWN0QWxsOiBbXSB9KTtcbiAgICB9XG4gIH1cblxuICByZXNvbHZlUm93QWN0aW9uc1Zpc2liaWxpdHkoKSB7XG4gICAgdGhpcy5ncmlkUXVlcnkuX3Jvd0FjdGlvblZpc2liaWxpdHlDaGFuZ2VkLm5leHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIHBpdm90aW5nLFxuICAgKiB3ZSBhZGQgdGhlIGZpZWxkIG5hbWUgdG8gdGhlIGNvbHVtbiBoZWFkZXIgY2xhc3MgaW4gb3JkZXIgdG8gYWNjZXNzIGl0IHRocm91Z2ggdGhlIGF1dG8gZ2VuZXJhdGVkIHBpdm90IGNvbHVtbi5cbiAgICovXG4gIHByaXZhdGUgaW5pdFBpdm90U2Vjb25kYXJ5Q29sc1Byb2Nlc3MoeyBncmlkT3B0aW9ucyB9OiBOb3JtYWxpemVPcHRpb25zUGFyYW1zKSB7XG4gICAgLyoqIFVzZSBwcm9jZXNzUGl2b3RSZXN1bHRDb2xEZWYgZnJvbSB2ZXIgMjggKi9cbiAgICBncmlkT3B0aW9ucy5wcm9jZXNzU2Vjb25kYXJ5Q29sRGVmID0gY29sRGVmID0+IHtcbiAgICAgIGNvbnN0IHVzZXJQcm92aWRlZENvbERlZiA9IGNvbERlZi5waXZvdFZhbHVlQ29sdW1uICYmIGNvbERlZi5waXZvdFZhbHVlQ29sdW1uLmdldFVzZXJQcm92aWRlZENvbERlZigpO1xuXG4gICAgICBpZiAodXNlclByb3ZpZGVkQ29sRGVmKSB7XG4gICAgICAgIGNvbERlZi5maWx0ZXIgPSB1c2VyUHJvdmlkZWRDb2xEZWYuZmlsdGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sRGVmLnBpdm90S2V5cykge1xuICAgICAgICBjb2xEZWYucGl2b3RLZXlzID0gY29sRGVmLnBpdm90S2V5cy5tYXAoa2V5ID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJzZWRLZXkgPSB0cnlQYXJzZVBpdm90VmFsdWUoa2V5KTtcblxuICAgICAgICAgIHJldHVybiAocGFyc2VkS2V5ICYmIHBhcnNlZEtleS52YWx1ZSkgfHwgJyc7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvKiogVXNlIHByb2Nlc3NQaXZvdFJlc3VsdENvbEdyb3VwRGUgZnJvbSB2ZXIgMjggKi9cbiAgICBncmlkT3B0aW9ucy5wcm9jZXNzU2Vjb25kYXJ5Q29sR3JvdXBEZWYgPSAoY29sR3JvdXBEZWY6IENvbEdyb3VwRGVmKSA9PiB7XG4gICAgICBpZiAoY29sR3JvdXBEZWYuaGVhZGVyTmFtZSkge1xuICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHRyeVBhcnNlUGl2b3RWYWx1ZShjb2xHcm91cERlZi5oZWFkZXJOYW1lKTtcblxuICAgICAgICBpZiAocGFyc2VkVmFsdWUpIHtcbiAgICAgICAgICBjb25zdCB7IGZpZWxkLCB2YWx1ZSB9ID0gcGFyc2VkVmFsdWU7XG5cbiAgICAgICAgICBjb2xHcm91cERlZi5oZWFkZXJDbGFzcyA9IFtmaWVsZF07XG4gICAgICAgICAgY29sR3JvdXBEZWYuaGVhZGVyTmFtZSA9IHZhbHVlO1xuXG4gICAgICAgICAgaWYgKGNvbEdyb3VwRGVmLmNoaWxkcmVuICYmIGNvbEdyb3VwRGVmLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbEdyb3VwRGVmLmhlYWRlckNsYXNzLnB1c2goJ2dyb3VwLXBpdm90LWNlbGwnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29sR3JvdXBEZWYuY2hpbGRyZW4pIHtcbiAgICAgICAgY29uc3QgW2NvbENoaWxkXTogYW55ID0gY29sR3JvdXBEZWYuY2hpbGRyZW47XG4gICAgICAgIGNvbnN0IHBpdm90VG90YWxDb2x1bW5JZHMgPSBjb2xDaGlsZCAmJiBjb2xDaGlsZC5waXZvdFRvdGFsQ29sdW1uSWRzO1xuXG4gICAgICAgIGlmIChwaXZvdFRvdGFsQ29sdW1uSWRzICYmIHBpdm90VG90YWxDb2x1bW5JZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbEdyb3VwRGVmLmhlYWRlckNsYXNzID0gWyd0b3RhbC1waXZvdC1jZWxsJ107XG4gICAgICAgICAgY29sR3JvdXBEZWYuaGVhZGVyTmFtZSA9IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSgnY29yZS50b3RhbCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2xHcm91cERlZi5oZWFkZXJDbGFzcyA9IFsnZW1wdHktcGl2b3QtaGVhZGVyJ107XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2xHcm91cERlZi5waXZvdEtleXMpIHtcbiAgICAgICAgY29sR3JvdXBEZWYucGl2b3RLZXlzID0gY29sR3JvdXBEZWYucGl2b3RLZXlzLm1hcChrZXkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZEtleSA9IHRyeVBhcnNlUGl2b3RWYWx1ZShrZXkpO1xuXG4gICAgICAgICAgcmV0dXJuIChwYXJzZWRLZXkgJiYgcGFyc2VkS2V5LnZhbHVlKSB8fCAnJztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UGl2b3RNb2RlUm93czxUPihkYXRhOiBUW10pIHtcbiAgICBjb25zdCBwaXZvdENvbHVtbnMgPSB0aGlzLmdyaWRRdWVyeS5nZXRBbGxQaXZvdENvbHVtbnMoKTtcbiAgICBjb25zdCBjb252ZXJ0ZWREYXRhID0gZGF0YS5tYXAoKGN1cnJlbnRWYWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG1hcHBlZFZhbHVlcyA9IHsgLi4uY3VycmVudFZhbHVlIH07XG5cbiAgICAgIGZvciAoY29uc3QgY29sIG9mIHBpdm90Q29sdW1ucykge1xuICAgICAgICBjb25zdCBmaWVsZCA9IGNvbC5nZXRDb2xEZWYoKS5maWVsZDtcbiAgICAgICAgY29uc3QgcGl2b3RWYWx1ZTogUGl2b3RDb2x1bW5EYXRhID0geyBmaWVsZCwgdmFsdWU6IGN1cnJlbnRWYWx1ZVtmaWVsZF0gfTtcblxuICAgICAgICBtYXBwZWRWYWx1ZXNbZmllbGRdID0gSlNPTi5zdHJpbmdpZnkocGl2b3RWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtYXBwZWRWYWx1ZXM7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFwaS5ncmlkLnNldFJvd0RhdGEoY29udmVydGVkRGF0YSk7XG4gIH1cblxuICAvKiogTm8gZGVjbGFyZWQgaW50ZXJmYWNlIGluIGN1cnJlbnQgZ3JpZCB2ZXJzaW9uIHlldC5cbiAgICogIFJlZmVyIGRvY3MgLSBodHRwczovL3d3dy5hZy1ncmlkLmNvbS9hbmd1bGFyLWRhdGEtZ3JpZC9jZWxsLXN0eWxlcy8jY2VsbC1jbGFzcy1ydWxlcyAqL1xuICBwcml2YXRlIGdldFBpdm90TW9kZUNlbGxDbGFzc1J1bGVzKCkge1xuICAgIHJldHVybiB7XG4gICAgICAncHJpbWFyeS0wLWJhY2tncm91bmQtY29sb3InOiB0aGlzLmlzTGVhZkdyb3VwRXZlbkNlbGwuYmluZCh0aGlzKSxcbiAgICAgICdwcmltYXJ5LTEwMC1iYWNrZ3JvdW5kLWNvbG9yIHBvaW50ZXIgZGF0by1zaW1wbGUtYm9sZCc6IHRoaXMuaXNSb3dHcm91cFZhbHVlZENlbGwuYmluZCh0aGlzKVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGlzTGVhZkdyb3VwRXZlbkNlbGwocGFyYW1zOiBDZWxsQ2xhc3NQYXJhbXMpOiBib29sZWFuIHtcbiAgICBjb25zdCB7IGxlYWZHcm91cCwgY2hpbGRJbmRleCwgcm93R3JvdXBJbmRleCB9ID0gcGFyYW1zLm5vZGU7XG4gICAgY29uc3QgY29sSW5kZXggPSB0aGlzLmdldENlbGxDbGFzc1J1bGVDb2xJbmRleChwYXJhbXMpO1xuXG4gICAgcmV0dXJuIHJvd0dyb3VwSW5kZXggPD0gY29sSW5kZXggJiYgbGVhZkdyb3VwICYmIGNoaWxkSW5kZXggJSAyID09PSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1Jvd0dyb3VwVmFsdWVkQ2VsbChwYXJhbXM6IENlbGxDbGFzc1BhcmFtcyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHsgbGVhZkdyb3VwLCByb3dHcm91cEluZGV4IH0gPSBwYXJhbXMubm9kZTtcbiAgICBjb25zdCBjb2xJbmRleCA9IHRoaXMuZ2V0Q2VsbENsYXNzUnVsZUNvbEluZGV4KHBhcmFtcyk7XG5cbiAgICByZXR1cm4gcm93R3JvdXBJbmRleCA8PSBjb2xJbmRleCAmJiAhbGVhZkdyb3VwO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDZWxsQ2xhc3NSdWxlQ29sSW5kZXgocGFyYW1zOiBDZWxsQ2xhc3NQYXJhbXMpOiBudW1iZXIge1xuICAgIGNvbnN0IGdyaWRRdWVyeSA9IHBhcmFtcy5jb2xEZWYuaGVhZGVyQ29tcG9uZW50UGFyYW1zLmdyaWRRdWVyeTtcblxuICAgIGlmIChncmlkUXVlcnkgJiYgZ3JpZFF1ZXJ5LmFwaSkge1xuICAgICAgY29uc3QgeyBjb2x1bW5zIH0gPSBncmlkUXVlcnkuYXBpIGFzIERhdG9HcmlkQXBpO1xuICAgICAgY29uc3QgYWxsRGlzcGxheWVkQ29sdW1ucyA9IGNvbHVtbnMuZ2V0QWxsRGlzcGxheWVkQ29sdW1ucygpO1xuICAgICAgY29uc3QgZGlzcGxheWVkQ29sdW1uID0gYWxsRGlzcGxheWVkQ29sdW1ucy5maW5kKGNvbCA9PiBjb2wuZ2V0Q29sSWQoKSA9PT0gcGFyYW1zLmNvbERlZi5jb2xJZCk7XG5cbiAgICAgIHJldHVybiBhbGxEaXNwbGF5ZWRDb2x1bW5zLmluZGV4T2YoZGlzcGxheWVkQ29sdW1uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gLTE7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -24,4 +24,7 @@ export function tryParsePivotValue(str) {
|
|
|
24
24
|
}
|
|
25
25
|
return value;
|
|
26
26
|
}
|
|
27
|
-
|
|
27
|
+
export function isHtmlAllowedForCol(gridOptions, colDef) {
|
|
28
|
+
return (!gridOptions.disabledHTMLRenderingFields || !gridOptions.disabledHTMLRenderingFields.includes(getColField(colDef)));
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2dyaWQtdjIvZ3JpZC1zdG9yZS91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE1BQU0sVUFBVSxlQUFlLENBQUMsT0FBaUIsRUFBRSxRQUFrQjtJQUNuRSxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBQyxPQUFPLEVBQUUsVUFBVTtRQUN4QyxJQUFJLE1BQU0sR0FBUSxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDekMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNuSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDVCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsTUFBYztJQUNoQyxJQUFBLG9CQUFLLEVBQUUsa0NBQVksRUFBRSwwQ0FBZ0IsQ0FBWTtJQUV6RCxPQUFPLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFLLFlBQXVCLENBQUM7QUFDNUYsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxHQUFXO0lBQzVDLElBQUksS0FBSyxDQUFDO0lBRVYsSUFBSTtRQUNGLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3pCO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDVixhQUFhO0tBQ2Q7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsV0FBNEIsRUFBRSxNQUF5QjtJQUN6RixPQUFPLENBQ0wsQ0FBQyxXQUFXLENBQUMsMkJBQTJCLElBQUksQ0FBQyxXQUFXLENBQUMsMkJBQTJCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUNuSCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbERlZiwgQ29sdW1uIH0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuaW1wb3J0IHsgSGFzaE1hcCB9IGZyb20gJy4uLy4uL3V0aWxzL3R5cGVzJztcbmltcG9ydCB7IFBpdm90Q29sdW1uRGF0YSB9IGZyb20gJy4vZ3JpZC5zdG9yZS50eXBlcyc7XG5pbXBvcnQgeyBEYXRvR3JpZENvbHVtbkRlZiwgRGF0b0dyaWRPcHRpb25zIH0gZnJvbSAnLi4vZ3JpZC9ncmlkLXYyLnR5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbHVtbnNTaXplcyhjb2x1bW5zOiBDb2x1bW5bXSwgb3JpZ2luYWw/OiBib29sZWFuKTogSGFzaE1hcDxudW1iZXI+IHtcbiAgcmV0dXJuIGNvbHVtbnMucmVkdWNlKChzaXplTWFwLCBjdXJyZW50Q29sKSA9PiB7XG4gICAgbGV0IGNvbERlZjogYW55ID0gY3VycmVudENvbC5nZXRDb2xEZWYoKTtcbiAgICBzaXplTWFwW2N1cnJlbnRDb2wuZ2V0Q29sSWQoKV0gPSAob3JpZ2luYWwgJiYgY29sRGVmLm9yaWdpbmFsV2lkdGgpIHx8IGNvbERlZi53aWR0aCB8fCBjdXJyZW50Q29sLmdldEFjdHVhbFdpZHRoKCk7XG4gICAgcmV0dXJuIHNpemVNYXA7XG4gIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBUYWtlIHBpdm90ZWQgdmFsdWUgZmllbGQgaWYgcGl2b3QgY29sdW1uLFxuICogb3IgZmllbGQgb2YgdGhlIGNvbERlZixcbiAqIG9yIGdyb3VwIGZpZWxkIGZvcm0gc2hvd1Jvd0dyb3VwIGlmIGl0cyBhZ2cgY29sdW1uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2xGaWVsZChjb2xEZWY6IENvbERlZik6IHN0cmluZyB7XG4gIGNvbnN0IHsgZmllbGQsIHNob3dSb3dHcm91cCwgcGl2b3RWYWx1ZUNvbHVtbiB9ID0gY29sRGVmO1xuXG4gIHJldHVybiBwaXZvdFZhbHVlQ29sdW1uID8gcGl2b3RWYWx1ZUNvbHVtbi5nZXRDb2xJZCgpIDogZmllbGQgfHwgKHNob3dSb3dHcm91cCBhcyBzdHJpbmcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJ5UGFyc2VQaXZvdFZhbHVlKHN0cjogc3RyaW5nKTogUGl2b3RDb2x1bW5EYXRhIHwgdW5kZWZpbmVkIHtcbiAgbGV0IHZhbHVlO1xuXG4gIHRyeSB7XG4gICAgdmFsdWUgPSBKU09OLnBhcnNlKHN0cik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0h0bWxBbGxvd2VkRm9yQ29sKGdyaWRPcHRpb25zOiBEYXRvR3JpZE9wdGlvbnMsIGNvbERlZjogRGF0b0dyaWRDb2x1bW5EZWYpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICAhZ3JpZE9wdGlvbnMuZGlzYWJsZWRIVE1MUmVuZGVyaW5nRmllbGRzIHx8ICFncmlkT3B0aW9ucy5kaXNhYmxlZEhUTUxSZW5kZXJpbmdGaWVsZHMuaW5jbHVkZXMoZ2V0Q29sRmllbGQoY29sRGVmKSlcbiAgKTtcbn1cbiJdfQ==
|