@datorama/core 22.13.0-beta.3 → 22.13.0-beta.5
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/bundle.scss +2314 -1208
- package/bundles/datorama-core.umd.js +8 -9
- package/bundles/datorama-core.umd.js.map +1 -1
- package/bundles/datorama-core.umd.min.js +50 -50
- package/bundles/datorama-core.umd.min.js.map +1 -1
- package/datorama-core.metadata.json +1 -1
- package/esm2015/lib/grid/grid/grid.component.js +1 -1
- package/esm2015/lib/grid-v2/grid-column-header/grid-multi-select-header/grid-multi-select-header.component.js +4 -3
- package/esm2015/lib/grid-v2/grid-controller/grid-controller.component.js +1 -1
- package/esm2015/lib/grid-v2/grid-pagination/grid-pagination.component.js +2 -2
- package/esm2015/lib/grid-v2/grid-store/grid.service.js +4 -6
- package/esm2015/lib/icon/icon.types.js +1 -1
- package/esm5/lib/grid/grid/grid.component.js +1 -1
- package/esm5/lib/grid-v2/grid-column-header/grid-multi-select-header/grid-multi-select-header.component.js +4 -3
- package/esm5/lib/grid-v2/grid-controller/grid-controller.component.js +1 -1
- package/esm5/lib/grid-v2/grid-pagination/grid-pagination.component.js +2 -2
- package/esm5/lib/grid-v2/grid-store/grid.service.js +4 -6
- package/esm5/lib/icon/icon.types.js +1 -1
- package/fesm2015/datorama-core.js +8 -9
- package/fesm2015/datorama-core.js.map +1 -1
- package/fesm5/datorama-core.js +8 -9
- package/fesm5/datorama-core.js.map +1 -1
- package/lib/grid-v2/grid-controller/grid-controller.component.d.ts +1 -1
- package/lib/icon/icon.types.d.ts +1 -1
- package/package.json +1 -1
|
@@ -228,10 +228,7 @@ var GridService = /** @class */ (function () {
|
|
|
228
228
|
if (this.isTreeData) {
|
|
229
229
|
var inputRowClassRules = params.gridOptions.rowClassRules;
|
|
230
230
|
params.gridOptions.rowClassRules = __assign(__assign({}, inputRowClassRules), { 'ag-empty-folder': function (params) {
|
|
231
|
-
|
|
232
|
-
return size(params.node.childrenAfterGroup) === 0;
|
|
233
|
-
}
|
|
234
|
-
return false;
|
|
231
|
+
return params.data.isFolder && size(params.node.childrenAfterGroup) === 0;
|
|
235
232
|
} });
|
|
236
233
|
}
|
|
237
234
|
/** Add pivot specific required settings */
|
|
@@ -335,6 +332,7 @@ var GridService = /** @class */ (function () {
|
|
|
335
332
|
colId: this.CHECKBOX_SELECTION_COL_ID,
|
|
336
333
|
checkboxSelection: true,
|
|
337
334
|
headerComponentFramework: DatoGridMultiSelectColumnHeaderComponent,
|
|
335
|
+
minWidth: 29,
|
|
338
336
|
width: 29,
|
|
339
337
|
maxWidth: 29,
|
|
340
338
|
suppressSizeToFit: true,
|
|
@@ -686,7 +684,7 @@ var GridService = /** @class */ (function () {
|
|
|
686
684
|
var _b = __read(_a, 1), row = _b[0];
|
|
687
685
|
var rawValue = _this.api.grid.getValue(column.getColId(), row);
|
|
688
686
|
var formatter = column.getColDef().valueFormatter;
|
|
689
|
-
var value = formatter ? formatter(rawValue) : rawValue;
|
|
687
|
+
var value = formatter && typeof formatter !== 'string' ? formatter(rawValue) : rawValue;
|
|
690
688
|
copyToClipboard(value);
|
|
691
689
|
};
|
|
692
690
|
if (node.isSelected()) {
|
|
@@ -1167,4 +1165,4 @@ var GridService = /** @class */ (function () {
|
|
|
1167
1165
|
return GridService;
|
|
1168
1166
|
}());
|
|
1169
1167
|
export { GridService };
|
|
1170
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2NvcmUvIiwic291cmNlcyI6WyJsaWIvZ3JpZC12Mi9ncmlkLXN0b3JlL2dyaWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQXdCLE1BQU0sZUFBZSxDQUFDO0FBZXpFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUNMLG9CQUFvQixFQUtwQixzQkFBc0IsRUFRdkIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBU2xGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBa0IsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RSxPQUFPLEVBSUwsbUJBQW1CLEVBT25CLHVDQUF1QyxFQUN2QyxhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLDJCQUEy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LElBQUksUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ2pELENBQUM7SUFFTyw4Q0FBd0IsR0FBaEMsVUFBaUMsTUFBdUI7UUFDdEQsSUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUM7UUFFaEUsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN0QixJQUFBLCtCQUFPLENBQWtDO1lBQ2pELElBQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDN0QsSUFBTSxlQUFlLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFVBQUEsR0FBRyxJQUFJLE9BQUEsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUF0QyxDQUFzQyxDQUFDLENBQUM7WUFFaEcsT0FBTyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDckQ7UUFFRCxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQzs7Z0JBOXFDZ0IsU0FBUztnQkFDTCxTQUFTO2dCQUNULG9CQUFvQjtnQkFDakIsWUFBWTtnQkFDYixXQUFXO2dEQUMvQixNQUFNLFNBQUMscUJBQXFCO2dEQUM1QixNQUFNLFNBQUMsZ0JBQWdCOztJQWhDZixXQUFXO1FBRHZCLFVBQVUsRUFBRTtRQWdDUixXQUFBLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO1FBQzdCLFdBQUEsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7eUNBTlYsU0FBUztZQUNMLFNBQVM7WUFDVCxvQkFBb0I7WUFDakIsWUFBWTtZQUNiLFdBQVc7T0E5QnZCLFdBQVcsQ0F5c0N2QjtJQUFELGtCQUFDO0NBQUEsQUF6c0NELElBeXNDQztTQXpzQ1ksV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBRdWVyeUxpc3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdG9HcmlkQXBpIH0gZnJvbSAnLi4vZ3JpZC1jb250cm9sbGVyL2dyaWQtY29udHJvbGxlci50eXBlcyc7XG5pbXBvcnQge1xuICBDZWxsQ2xhc3NQYXJhbXMsXG4gIENvbEdyb3VwRGVmLFxuICBDb2x1bW4sXG4gIEdldENvbnRleHRNZW51SXRlbXNQYXJhbXMsXG4gIEdyaWRPcHRpb25zLFxuICBJQ2VsbFJlbmRlcmVyUGFyYW1zLFxuICBJR2V0Um93c1BhcmFtcyxcbiAgUm93Tm9kZSxcbiAgUm93Tm9kZVRyYW5zYWN0aW9uLFxuICBSb3dTZWxlY3RlZEV2ZW50XG59IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcbmltcG9ydCB7IFJvd0RhdGFUcmFuc2FjdGlvbiB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5L2Rpc3QvbGliL3Jvd01vZGVscy9jbGllbnRTaWRlL2NsaWVudFNpZGVSb3dNb2RlbCc7XG5pbXBvcnQgeyBHcmlkUXVlcnkgfSBmcm9tICcuL2dyaWQucXVlcnknO1xuaW1wb3J0IHsgRGF0b0NvcmVFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9ycyc7XG5pbXBvcnQgeyBEYXRvVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IERhdG9DdXN0b21IZWFkZXJUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2dyaWQtY3VzdG9tLWhlYWRlci9jdXN0b20taGVhZGVyLXRlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMsXG4gIERhdG9HcmlkQ29uZGl0aW9uYWxGaWx0ZXIsXG4gIERhdG9HcmlkRXh0ZXJuYWxGaWx0ZXIsXG4gIERhdG9HcmlkRmlsdGVyLFxuICBEYXRvR3JpZEZpbHRlckNvbmRpdGlvbixcbiAgRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucyxcbiAgRGF0b0dyaWRGaWx0ZXJzTWFwLFxuICBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uLFxuICBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmRpdGlvbixcbiAgU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXIsXG4gIFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVycyxcbiAgU2VydmVyU2lkZVBhZ2luYXRpb25MaXN0Q29uZGl0aW9uLFxuICBTZXJ2ZXJTaWRlUGFnaW5hdGlvblJhbmdlQ29uZGl0aW9uXG59IGZyb20gJy4uL2dyaWQtZmlsdGVyL2dyaWQtZmlsdGVyLnR5cGVzJztcbmltcG9ydCB7IGNvZXJjZUFycmF5IH0gZnJvbSAnLi4vLi4vdXRpbHMvY29lcmNpb24nO1xuaW1wb3J0IHsgaXNFbXB0eSwgaXNGdW5jdGlvbiwgaXNOaWwsIGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMvdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUZpbHRlciB9IGZyb20gJy4uL2dyaWQtZmlsdGVyL2ZpbHRlci12YWxpZGF0b3InO1xuaW1wb3J0IHsgQWdHcmlkQW5ndWxhciB9IGZyb20gJ2FnLWdyaWQtYW5ndWxhcic7XG5pbXBvcnQgeyBJY29uUmVnaXN0cnksIFN2Z1JlZ2lzdHJ5IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaWNvbi1yZWdpc3RyeSc7XG5pbXBvcnQgeyBnZXRWaXNpYmxlQWN0aW9ucywgdG9vbGJhckFjdGlvblRvQ29udGV4dEFjdGlvbiB9IGZyb20gJy4uL2dyaWQtdjIudXRpbCc7XG5pbXBvcnQge1xuICBEYXRvR3JpZFNldHRpbmdzLFxuICBOb3JtYWxpemVPcHRpb25zUGFyYW1zLFxuICBQaXZvdENvbHVtbkRhdGEsXG4gIFNlcnZlclNpZGVQYWdpbmF0aW9uQ29uZmlnLFxuICBTdWNjZXNzV3JhcHBlclBhcmFtc1xufSBmcm9tICcuL2dyaWQuc3RvcmUudHlwZXMnO1xuaW1wb3J0IHsgUm93QWN0aW9uIH0gZnJvbSAnLi4vZ3JpZC10b29sYmFyL2dyaWQtdG9vbGJhci50eXBlcyc7XG5pbXBvcnQgeyBjb3B5VG9DbGlwYm9hcmQgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2NsaXBib2FyZC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgR3JpZFN0b3JlIH0gZnJvbSAnLi9ncmlkLnN0b3JlJztcbmltcG9ydCB7IERBVE9fR1JJRF9TVE9SQUdFX0FQSSwgR3JpZFN0b3JhZ2VBUEkgfSBmcm9tICcuLi9ncmlkLXNldHRpbmdzJztcbmltcG9ydCB7XG4gIEFjdGlvbkNvbnZlcnRlclBhcmFtcyxcbiAgRGF0b0dyaWRBbGlnbm1lbnQsXG4gIERhdG9HcmlkQ29sdW1uRGVmLFxuICBEYXRvR3JpZENvbHVtblR5cGVzLFxuICBEYXRvR3JpZEdldFJvd3NQYXJhbXMsXG4gIERhdG9HcmlkT3B0aW9ucyxcbiAgRGF0b0dyaWRTZXJ2ZXJTb3J0LFxuICBEYXRvR3JpZFNlcnZlclNvcnREaXJlY3Rpb24sXG4gIERhdG9HcmlkU29ydCxcbiAgRGF0b0dyaWRUcmVlQ29uZmlnLFxuICBlZGl0YWJsZUNlbGxSZW5kZXJlcldpdGhTZWFyY2hIaWdobGlnaHQsXG4gIEdyaWRNaW5XaWR0aHMsXG4gIEdyaWRSb3dTZWxlY3Rpb25UeXBlLFxuICBzZWFyY2hIaWdobGlnaHRDZWxsUmVuZGVyZXJcbn0gZnJvbSAnLi4vZ3JpZC9ncmlkLXYyLnR5cGVzJztcblxuaW1wb3J0IHsgY29udmVydFRvVHJlZURhdGEsIGRlZmF1bHRHcmlkT3B0aW9ucywgZGVmYXVsdEdyaWRUcmVlTGFiZWwgfSBmcm9tICcuLi9ncmlkL2dyaWQtdjIuY29uZmlnJztcbmltcG9ydCB7IGRpZmYgfSBmcm9tICcuLi8uLi91dGlscy9vYmplY3QnO1xuaW1wb3J0IHsgdW50aWxEZXN0cm95ZWQgfSBmcm9tICduZ3gtdGFrZS11bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IENvcmVFdmVudExvZ2dlciwgQ29yZUV2ZW50VHlwZXMsIERBVE9fQ09SRV9MT0dHRVIgfSBmcm9tICcuLi8uLi9ldmVudC1sb2dnZXInO1xuaW1wb3J0IHsgSGFzaE1hcCB9IGZyb20gJy4uLy4uL3V0aWxzL3R5cGVzJztcbmltcG9ydCB7IHNpemUgfSBmcm9tICcuLi8uLi91dGlscy9jb2xsZWN0aW9uJztcbmltcG9ydCB7IE9wZXJhdG9yVHlwZXMgfSBmcm9tICcuLi8uLi9vcGVyYXRvci10b2dnbGVyL29wZXJhdG9yLXRvZ2dsZXIudHlwZXMnO1xuaW1wb3J0IHsgZGVlcG1lcmdlIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvZGVlcC1tZXJnZSc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0cmlnZ2VyV2luZG93UmVzaXplIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXNlci1hZ2VudCc7XG5pbXBvcnQgeyBnZXRDb2xGaWVsZCwgZ2V0Q29sdW1uc1NpemVzLCBpc0h0bWxBbGxvd2VkRm9yQ29sLCB0cnlQYXJzZVBpdm90VmFsdWUgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgRGF0b0dyaWRNdWx0aVNlbGVjdENvbHVtbkhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2dyaWQtY29sdW1uLWhlYWRlci9ncmlkLW11bHRpLXNlbGVjdC1oZWFkZXIvZ3JpZC1tdWx0aS1zZWxlY3QtaGVhZGVyLmNvbXBvbmVudCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBHcmlkU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIGFwaTogRGF0b0dyaWRBcGk7XG4gIHRyZWVDb25maWc6IERhdG9HcmlkVHJlZUNvbmZpZyA9IGRlZmF1bHRHcmlkVHJlZUxhYmVsO1xuICBpc1Bpdm90TW9kZTogYm9vbGVhbjtcblxuICAvKiogQGludGVybmFsIC0gdXNlZCBmb3Igc2VydmVyIHNpZGUgYnkgdmFsdWUgZmlsdGVyICovXG4gIF9vcmlnaW5hbEdldFJvd3M6IChwYXJhbXM6IERhdG9HcmlkR2V0Um93c1BhcmFtcykgPT4gdm9pZDtcbiAgcHJpdmF0ZSBpbml0aWFsU2V0dGluZ3M6IERhdG9HcmlkU2V0dGluZ3M7XG4gIHByaXZhdGUgZ3JpZE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBncmlkUmVmOiBBZ0dyaWRBbmd1bGFyO1xuICBwcml2YXRlIGN1c3RvbUhlYWRlcnNUZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxEYXRvQ3VzdG9tSGVhZGVyVGVtcGxhdGVDb21wb25lbnQ+O1xuICBwcml2YXRlIGlzVHJlZURhdGE6IGJvb2xlYW47XG4gIHByaXZhdGUgcGFnZU51bWJlclRvUmV0dXJuQWZ0ZXJSZWZyZXNoID0gLTE7XG4gIHByaXZhdGUgbGFzdFRvdGFsUm93czogbnVtYmVyO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgQ0hFQ0tCT1hfU0VMRUNUSU9OX0NPTF9JRCA9ICdncmlkLWNoZWNrYm94LXNlbGVjdGlvbic7XG5cbiAgc2V0IHRyZWVEYXRhKGlzVHJlZURhdGE6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzVHJlZURhdGEgPSBpc1RyZWVEYXRhO1xuICB9XG5cbiAgZ2V0IHRyZWVEYXRhKCkge1xuICAgIHJldHVybiB0aGlzLmlzVHJlZURhdGE7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0b3JlOiBHcmlkU3RvcmUsXG4gICAgcHJpdmF0ZSBncmlkUXVlcnk6IEdyaWRRdWVyeSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogRGF0b1RyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpY29uUmVnaXN0cnk6IEljb25SZWdpc3RyeSxcbiAgICBwcml2YXRlIHN2Z1JlZ2lzdHJ5OiBTdmdSZWdpc3RyeSxcbiAgICBASW5qZWN0KERBVE9fR1JJRF9TVE9SQUdFX0FQSSkgcHJpdmF0ZSBzdG9yYWdlQVBJOiBHcmlkU3RvcmFnZUFQSSxcbiAgICBASW5qZWN0KERBVE9fQ09SRV9MT0dHRVIpIHByaXZhdGUgbG9nZ2VyOiBDb3JlRXZlbnRMb2dnZXJcbiAgKSB7fVxuXG4gIG5nT25EZXN0cm95KCkge31cblxuICAvKiogQGludGVybmFsIC0gdXNlZCB0byBpbml0IHRoZSBzZXJ2aWNlICovXG4gIF9zZXRBcGkoYXBpOiBEYXRvR3JpZEFwaSwgZ3JpZFJlZjogQWdHcmlkQW5ndWxhcikge1xuICAgIHRoaXMuYXBpID0gYXBpO1xuICAgIHRoaXMuZ3JpZFJlZiA9IGdyaWRSZWY7XG4gICAgdGhpcy5ncmlkTmFtZSA9IChncmlkUmVmLmdyaWRPcHRpb25zIGFzIERhdG9HcmlkT3B0aW9ucykuZ3JpZE5hbWU7XG4gICAgdGhpcy5zZXRTZXJ2ZXJTaWRlUGFnaW5hdGlvbih7XG4gICAgICBlbmFibGVkOiB0aGlzLmlzU2VydmVyU2lkZVBhZ2luYXRpb24oZ3JpZFJlZi5ncmlkT3B0aW9ucylcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNTZXJ2ZXJTaWRlUGFnaW5hdGlvbihncmlkT3B0aW9uczogR3JpZE9wdGlvbnMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZ3JpZE9wdGlvbnMucm93TW9kZWxUeXBlID09PSAnaW5maW5pdGUnO1xuICB9XG5cbiAgdXBkYXRlR3JpZENvbnRleHQoY29udGV4dCA9IHt9LCByZXBsYWNlID0gZmFsc2UpIHtcbiAgICB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpLmNvbnRleHQgPSByZXBsYWNlXG4gICAgICA/IGNvbnRleHRcbiAgICAgIDogZGVlcG1lcmdlKHRoaXMuZ3JpZFJlZi5ncmlkT3B0aW9ucy5jb250ZXh0IHx8IHt9LCBjb250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2Ugc2VsZWN0Um93cyBpbnN0ZWFkXG4gICAqIEBwYXJhbSByb3dcbiAgICovXG4gIHNldFNlbGVjdGVkUm93czxUPihyb3c6IChUICYgUm93Tm9kZSkgfCAoVFtdICYgUm93Tm9kZVtdKSkge1xuICAgIHRoaXMuc2VsZWN0Um93cyhyb3cpO1xuICB9XG5cbiAgc2VsZWN0Um93czxUPihyb3c6IChUICYgUm93Tm9kZSkgfCAoVFtdICYgUm93Tm9kZVtdKSkge1xuICAgIGNvbnN0IHJvd05vZGVzID0gY29lcmNlQXJyYXkocm93KS5maWx0ZXIocm93Tm9kZSA9PiAhcm93Tm9kZS5pc1NlbGVjdGVkKCkpO1xuICAgIGNvbnN0IGxhc3ROb2RlID0gcm93Tm9kZXMucG9wKCk7XG4gICAgcm93Tm9kZXMuZm9yRWFjaChyb3dOb2RlID0+IHJvd05vZGUuc2V0U2VsZWN0ZWQodHJ1ZSwgZmFsc2UsIHRydWUpKTtcbiAgICBpZiAobGFzdE5vZGUpIHtcbiAgICAgIGxhc3ROb2RlLnNldFNlbGVjdGVkKHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGRlc2VsZWN0Um93czxUPihyb3c6IChUICYgUm93Tm9kZSkgfCAoVFtdICYgUm93Tm9kZVtdKSkge1xuICAgIGNvbnN0IHJvd05vZGVzID0gY29lcmNlQXJyYXkocm93KS5maWx0ZXIocm93Tm9kZSA9PiByb3dOb2RlLmlzU2VsZWN0ZWQoKSk7XG4gICAgY29uc3QgbGFzdE5vZGUgPSByb3dOb2Rlcy5wb3AoKTtcbiAgICByb3dOb2Rlcy5mb3JFYWNoKHJvd05vZGUgPT4gcm93Tm9kZS5zZXRTZWxlY3RlZChmYWxzZSwgZmFsc2UsIHRydWUpKTtcbiAgICBpZiAobGFzdE5vZGUpIHtcbiAgICAgIGxhc3ROb2RlLnNldFNlbGVjdGVkKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBzZXRSb3dzPFQ+KGRhdGE6IFRbXSwgZml0Q29udGFpbmVyID0gZmFsc2UsIHRyZWVDb25maWc6IFBhcnRpYWw8RGF0b0dyaWRUcmVlQ29uZmlnPiA9IHt9KSB7XG4gICAgdGhpcy5ncmlkUXVlcnkuZ3JpZFJlYWR5JC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1RyZWVEYXRhKSB7XG4gICAgICAgIHRoaXMudHJlZUNvbmZpZyA9IHtcbiAgICAgICAgICAuLi5kZWZhdWx0R3JpZFRyZWVMYWJlbCxcbiAgICAgICAgICAuLi50cmVlQ29uZmlnXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHRyZWVEYXRlID0gY29udmVydFRvVHJlZURhdGEoZGF0YSwgdGhpcy50cmVlQ29uZmlnKTtcbiAgICAgICAgdGhpcy5hcGkuZ3JpZC5zZXRSb3dEYXRhKHRyZWVEYXRlKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1Bpdm90TW9kZSkge1xuICAgICAgICB0aGlzLnNldFBpdm90TW9kZVJvd3M8VD4oZGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFwaS5ncmlkLnNldFJvd0RhdGEoZGF0YSk7XG4gICAgICB9XG4gICAgICBpZiAoZml0Q29udGFpbmVyKSB7XG4gICAgICAgIHRoaXMuZml0R3JpZCgnY29udGFpbmVyJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmlnZ2VyV2luZG93UmVzaXplKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXREYXRhc291cmNlKGdldFJvd3M6IChwYXJhbXM6IERhdG9HcmlkR2V0Um93c1BhcmFtcykgPT4gdm9pZCwgcmV0dXJuVG9DdXJyZW50UGFnZSA9IGZhbHNlLCBzaG93TG9hZGluZyA9IGZhbHNlKSB7XG4gICAgcmV0dXJuVG9DdXJyZW50UGFnZSAmJiB0aGlzLnVwZGF0ZVBhZ2VUb0tlZXBPblJlZnJlc2hTZXJ2ZXJEYXRhKCk7XG4gICAgc2hvd0xvYWRpbmcgJiYgdGhpcy5zZXRMb2FkaW5nKHRydWUpO1xuICAgIHRoaXMuX29yaWdpbmFsR2V0Um93cyA9IGdldFJvd3M7XG4gICAgdGhpcy5hcGkuZ3JpZC5zZXREYXRhc291cmNlKHsgZ2V0Um93czogdGhpcy53cmFwR2V0Um93cyh0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpLCBnZXRSb3dzKSB9KTtcbiAgfVxuXG4gIHJlZnJlc2hTZXJ2ZXJEYXRhKGtlZXBDdXJyZW50UGFnZSA9IGZhbHNlLCBzaG93TG9hZGluZyA9IGZhbHNlKSB7XG4gICAga2VlcEN1cnJlbnRQYWdlICYmIHRoaXMudXBkYXRlUGFnZVRvS2VlcE9uUmVmcmVzaFNlcnZlckRhdGEoKTtcbiAgICBzaG93TG9hZGluZyAmJiB0aGlzLnNldExvYWRpbmcodHJ1ZSk7XG4gICAgdGhpcy5hcGkuZ3JpZC5zZXREYXRhc291cmNlKHsgZ2V0Um93czogdGhpcy5ncmlkUXVlcnkuZ2V0R3JpZE9wdGlvbnMoKS5kYXRhc291cmNlLmdldFJvd3MgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBhZ2VUb0tlZXBPblJlZnJlc2hTZXJ2ZXJEYXRhKCkge1xuICAgIC8vIEtlZXBpbmcgdGhlIGN1cnJlbnQgcGFnZSBvbiBzZXJ2ZXIgcmVmcmVzaCBpcyBjdXJyZW50bHkgYXZhaWxhYmxlIG9ubHkgd2hlbiBubyBwYWdlIGNsaWVudCBjYWNoaW5nIGlzIGVuYWJsZWRcbiAgICBpZiAodGhpcy5ncmlkUXVlcnkuZ2V0R3JpZE9wdGlvbnMoKS5tYXhCbG9ja3NJbkNhY2hlID09PSAxKSB7XG4gICAgICB0aGlzLnBhZ2VOdW1iZXJUb1JldHVybkFmdGVyUmVmcmVzaCA9IHRoaXMuYXBpLmdyaWQucGFnaW5hdGlvbkdldEN1cnJlbnRQYWdlKCk7XG4gICAgfVxuICB9XG5cbiAgYWRkUm93czxUPihyb3c6IFQsIGluZGV4PzogbnVtYmVyKTogUm93Tm9kZVRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCByb3dzID0gY29lcmNlQXJyYXkocm93KTtcbiAgICBjb25zdCBkYXRhOiBSb3dEYXRhVHJhbnNhY3Rpb24gPSB7IGFkZDogcm93cyB9O1xuICAgIGlmICghaXNOaWwoaW5kZXgpKSB7XG4gICAgICBkYXRhLmFkZEluZGV4ID0gaW5kZXg7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFwaS5ncmlkLnVwZGF0ZVJvd0RhdGEoZGF0YSk7XG4gIH1cblxuICB1cGRhdGVSb3dzPFQ+KHJvdzogVFtdKTogYW55IHtcbiAgICBjb25zdCByb3dzID0gY29lcmNlQXJyYXkocm93KTtcbiAgICByZXR1cm4gdGhpcy5hcGkuZ3JpZC51cGRhdGVSb3dEYXRhKHsgdXBkYXRlOiByb3dzIH0pO1xuICB9XG5cbiAgdXBkYXRlUm93VmFsdWU8VD4ocm93OiBSb3dOb2RlLCBrZXk6IHN0cmluZywgbmV3VmFsdWU6IFQpO1xuICB1cGRhdGVSb3dWYWx1ZTxUPihpZDogc3RyaW5nLCBrZXk6IHN0cmluZywgbmV3VmFsdWU6IFQpO1xuICB1cGRhdGVSb3dWYWx1ZTxUPihyb3c6IHN0cmluZyB8IFJvd05vZGUsIGtleTogc3RyaW5nLCBuZXdWYWx1ZTogVCkge1xuICAgIGNvbnN0IHJvd05vZGUgPSBpc1N0cmluZyhyb3cpID8gdGhpcy5hcGkuZ3JpZC5nZXRSb3dOb2RlKHJvdykgOiByb3c7XG4gICAgcm93Tm9kZS5zZXREYXRhVmFsdWUoa2V5LCBuZXdWYWx1ZSk7XG4gIH1cblxuICByZW1vdmVSb3dzKHJvdzogUm93Tm9kZSB8IFJvd05vZGVbXSk6IFJvd05vZGVUcmFuc2FjdGlvbiB7XG4gICAgY29uc3Qgcm93cyA9IGNvZXJjZUFycmF5KHJvdykubWFwKCh7IGRhdGEgfSkgPT4gZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMuYXBpLmdyaWQudXBkYXRlUm93RGF0YSh7IHJlbW92ZTogcm93cyB9KTtcbiAgfVxuXG4gIHJlbW92ZVNlbGVjdGVkUm93cygpIHtcbiAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmdyaWRRdWVyeS5nZXRTZWxlY3RlZFJvd05vZGVzKCk7XG4gICAgcmV0dXJuIHRoaXMucmVtb3ZlUm93cyhzZWxlY3RlZFJvd3MpO1xuICB9XG5cbiAgY2xlYXJUYWJsZSgpIHtcbiAgICB0aGlzLnNldFJvd3MoW10pO1xuICB9XG5cbiAgdXBkYXRlQ29sdW1ucyhjb2xEZWZzOiBEYXRvR3JpZENvbHVtbkRlZiB8IERhdG9HcmlkQ29sdW1uRGVmW10sIHJlbG9hZFNldHRpbmdzID0gZmFsc2UpIHtcbiAgICBpZiAoIWNvbERlZnMpIHtcbiAgICAgIHRocm93IG5ldyBEYXRvQ29yZUVycm9yKCdObyBjb2x1bW5EZWZzIHdlcmUgcHJvdmlkZWQuIPCflbXwn4+74oCN4pmA77iPJyk7XG4gICAgfVxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0aGlzLm5vcm1hbGl6ZUNvbHVtbnMoY29lcmNlQXJyYXkoY29sRGVmcykpO1xuICAgIGNvbnN0IHNhdmVkU2V0dGluZ3MgPSByZWxvYWRTZXR0aW5ncyAmJiB0aGlzLmdyaWRRdWVyeS5nZXRDdXJyZW50R3JpZFNldHRpbmdzKCk7XG4gICAgdGhpcy5hcGkuZ3JpZC5zZXRDb2x1bW5EZWZzKG5vcm1hbGl6ZWQpO1xuICAgIGlmIChzYXZlZFNldHRpbmdzKSB7XG4gICAgICB0aGlzLmxvYWRTYXZlZFNldHRpbmdzKHNhdmVkU2V0dGluZ3MpO1xuICAgIH1cbiAgfVxuXG4gIG5vcm1hbGl6ZU9wdGlvbnMocGFyYW1zOiBOb3JtYWxpemVPcHRpb25zUGFyYW1zKSB7XG4gICAgdGhpcy5jdXN0b21IZWFkZXJzVGVtcGxhdGVzID0gcGFyYW1zLmN1c3RvbUhlYWRlcnNUZW1wbGF0ZXM7XG4gICAgY29uc3QgaGVhZGVyQ29tcG9uZW50UGFyYW1zID0geyBncmlkU2VydmljZTogdGhpcywgZ3JpZFF1ZXJ5OiB0aGlzLmdyaWRRdWVyeSB9O1xuICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5hdXRvR3JvdXBDb2x1bW5EZWYgPSB7XG4gICAgICAuLi5oZWFkZXJDb21wb25lbnRQYXJhbXMsXG4gICAgICAuLi5wYXJhbXMuZ3JpZE9wdGlvbnMuYXV0b0dyb3VwQ29sdW1uRGVmXG4gICAgfTtcblxuICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5kZWZhdWx0Q29sRGVmID0ge1xuICAgICAgLi4ucGFyYW1zLmdyaWRPcHRpb25zLmRlZmF1bHRDb2xEZWYsXG4gICAgICBoZWFkZXJDb21wb25lbnRQYXJhbXNcbiAgICB9O1xuICAgIGlmICh0eXBlb2YgcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZVNlYXJjaCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVTZWFyY2ggPSBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlVjJfMTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlQmFja2dyb3VuZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVCYWNrZ3JvdW5kID0gcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZVYyXzE7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcGFyYW1zLmdyaWRPcHRpb25zLnNob3dNdWx0aVNlbGVjdGlvbkNoZWNrYm94ZXMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuc2hvd011bHRpU2VsZWN0aW9uQ2hlY2tib3hlcyA9XG4gICAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVWMl8xICYmIHBhcmFtcy5ncmlkT3B0aW9ucy5yb3dTZWxlY3Rpb24gIT09IEdyaWRSb3dTZWxlY3Rpb25UeXBlLlNJTkdMRTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlU2VhcmNoSGlnaGxpZ2h0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZVNlYXJjaEhpZ2hsaWdodCA9XG4gICAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVTZWFyY2ggJiYgZGVmYXVsdEdyaWRPcHRpb25zLmVuYWJsZVNlYXJjaEhpZ2hsaWdodDtcbiAgICB9XG4gICAgcGFyYW1zLmdyaWRPcHRpb25zLmNvbHVtbkRlZnMgPSB0aGlzLm5vcm1hbGl6ZUNvbHVtbnMocGFyYW1zLmdyaWRPcHRpb25zLmNvbHVtbkRlZnMsIHBhcmFtcy5ncmlkT3B0aW9ucyk7XG5cbiAgICAvKiogQWRkIGNvcmUgZmlsdGVycyAqL1xuICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5pc0V4dGVybmFsRmlsdGVyUHJlc2VudCA9ICgpID0+IHRydWU7XG4gICAgcGFyYW1zLmdyaWRPcHRpb25zLmRvZXNFeHRlcm5hbEZpbHRlclBhc3MgPSAocm93OiBSb3dOb2RlKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB2YWxpZGF0ZUZpbHRlcih7IHJvdywgYXBpOiB0aGlzLmdyaWRRdWVyeS5hcGkuZ3JpZCB9LCB0aGlzLmdyaWRRdWVyeS5nZXRGaWx0ZXIoKSkgJiYgdGhpcy5yb3dNYXRjaGVzU2VhcmNoKHJvdylcbiAgICAgICk7XG4gICAgfTtcblxuICAgIC8qKiBXcmFwIHRoZSBzZXJ2ZXIgc2lkZSBwYWdpbmF0aW9uIGdldCByb3dzIGZ1bmN0aW9uICovXG4gICAgaWYgKHRoaXMuaXNTZXJ2ZXJTaWRlUGFnaW5hdGlvbihwYXJhbXMuZ3JpZE9wdGlvbnMpKSB7XG4gICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuYmxvY2tMb2FkRGVib3VuY2VNaWxsaXMgPSAzMDA7XG4gICAgICB0aGlzLl9vcmlnaW5hbEdldFJvd3MgPSBwYXJhbXMuZ3JpZE9wdGlvbnMuZGF0YXNvdXJjZS5nZXRSb3dzO1xuICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLmRhdGFzb3VyY2UuZ2V0Um93cyA9IHRoaXMud3JhcEdldFJvd3MocGFyYW1zLmdyaWRPcHRpb25zKTtcbiAgICAgIC8qIFRoZSBjYWNoZSBzaXplIGlzIHN5bmNlZCB3aXRoIHRoZSBwYWdpbmF0aW9uIHBhZ2Ugc2l6ZSAqL1xuICAgICAgY29uc3QgY2FjaGVTaXplID0gcGFyYW1zLmdyaWRPcHRpb25zLnBhZ2luYXRpb25QYWdlU2l6ZTtcbiAgICAgIGlmIChjYWNoZVNpemUpIHtcbiAgICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLmNhY2hlQmxvY2tTaXplID0gY2FjaGVTaXplO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBFZGl0YWJsZSBjZWxsICovXG4gICAgdGhpcy5pbml0RWRpdGFibGVDb2x1bW5zQ2VsbENsYXNzKHBhcmFtcyk7XG5cbiAgICAvKiogV3JhcCBjb250ZXh0IG1lbnUgKi9cbiAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZ2V0Q29udGV4dE1lbnVJdGVtcyA9IHRoaXMud3JhcENvbnRleHRNZW51QnVpbGRlcihwYXJhbXMpO1xuXG4gICAgLyoqIFNhdmUgZ3JpZCBzZXR0aW5ncyAqL1xuICAgIGNvbnN0IHsgc2F2ZVNldHRpbmdzLCBncmlkTmFtZSB9ID0gcGFyYW1zLmdyaWRPcHRpb25zO1xuICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5zYXZlU2V0dGluZ3MgPSBzYXZlU2V0dGluZ3MgIT09IGZhbHNlICYmICFpc05pbChncmlkTmFtZSk7XG5cbiAgICAvKiogU2VydmVyIFNpZGUgUGFnaW5hdGlvbiBmb3Igc2VsZWN0IGFsbCBvcHRpb24gKi9cbiAgICB0aGlzLmluaXRPblJvd1NlbGVjdGVkRm9yU2VydmVyU2lkZVBhZ2luYXRpb24ocGFyYW1zKTtcblxuICAgIC8qKiBBZGQgdHJlZSBncmlkIHNwZWNpZmljIHJlcXVpcmVkIHNldHRpbmdzICovXG4gICAgaWYgKHRoaXMuaXNUcmVlRGF0YSkge1xuICAgICAgY29uc3QgaW5wdXRSb3dDbGFzc1J1bGVzID0gcGFyYW1zLmdyaWRPcHRpb25zLnJvd0NsYXNzUnVsZXM7XG5cbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5yb3dDbGFzc1J1bGVzID0ge1xuICAgICAgICAuLi5pbnB1dFJvd0NsYXNzUnVsZXMsXG4gICAgICAgICdhZy1lbXB0eS1mb2xkZXInOiBwYXJhbXMgPT4ge1xuICAgICAgICAgIGlmIChwYXJhbXMuZGF0YS5pc0ZvbGRlcikge1xuICAgICAgICAgICAgcmV0dXJuIHNpemUocGFyYW1zLm5vZGUuY2hpbGRyZW5BZnRlckdyb3VwKSA9PT0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEFkZCBwaXZvdCBzcGVjaWZpYyByZXF1aXJlZCBzZXR0aW5ncyAqL1xuICAgIGlmICh0aGlzLmlzUGl2b3RNb2RlKSB7XG4gICAgICB0aGlzLmluaXRQaXZvdFNlY29uZGFyeUNvbHNQcm9jZXNzKHBhcmFtcyk7XG4gICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuc2F2ZVNldHRpbmdzID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5ncmlkT3B0aW9ucy51c2VQaXZvdEdyaWRTdHlsZSkge1xuICAgICAgY29uc3Qgcm93SGVpZ2h0ID0gMzA7XG5cbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5yb3dIZWlnaHQgPSByb3dIZWlnaHQ7XG4gICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZGVmYXVsdENvbERlZiA9IHtcbiAgICAgICAgLi4ucGFyYW1zLmdyaWRPcHRpb25zLmRlZmF1bHRDb2xEZWYsXG4gICAgICAgIGNlbGxDbGFzc1J1bGVzOiB0aGlzLmdldFBpdm90TW9kZUNlbGxDbGFzc1J1bGVzKCksXG4gICAgICAgIGhlYWRlckNsYXNzOiB0aGlzLmdldFBpdm90SGVhZGVyQ2xhc3MuYmluZCh0aGlzKSxcbiAgICAgICAgY2VsbFN0eWxlOiBwYXJhbXMgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0eWxlOiBhbnkgPSB7IGxpbmVIZWlnaHQ6IGAke3Jvd0hlaWdodH1weGAgfTtcblxuICAgICAgICAgIGlmIChwYXJhbXMuY29sRGVmLnR5cGUgPT09IERhdG9HcmlkQ29sdW1uVHlwZXMuTnVtYmVyKSB7XG4gICAgICAgICAgICBzdHlsZS50ZXh0QWxpZ24gPSAnZW5kJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5hdXRvR3JvdXBDb2x1bW5EZWYgPSB7XG4gICAgICAgIC4uLnBhcmFtcy5ncmlkT3B0aW9ucy5hdXRvR3JvdXBDb2x1bW5EZWYsXG4gICAgICAgIGNlbGxDbGFzc1J1bGVzOiB0aGlzLmdldFBpdm90TW9kZUNlbGxDbGFzc1J1bGVzKCksXG4gICAgICAgIGhlYWRlckNsYXNzOiB0aGlzLmdldFBpdm90SGVhZGVyQ2xhc3MuYmluZCh0aGlzKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zLmdyaWRPcHRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQaXZvdEhlYWRlckNsYXNzKHBhcmFtcykge1xuICAgIGNvbnN0IGdyaWRRdWVyeSA9IHBhcmFtcy5jb2xEZWYuaGVhZGVyQ29tcG9uZW50UGFyYW1zLmdyaWRRdWVyeTtcbiAgICBsZXQgY2VsbENsYXNzID0gJyc7XG5cbiAgICBpZiAoZ3JpZFF1ZXJ5ICYmIGdyaWRRdWVyeS5hcGkpIHtcbiAgICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gZ3JpZFF1ZXJ5LmFwaSBhcyBEYXRvR3JpZEFwaTtcbiAgICAgIC8qKiBVc2UgZ2V0UGl2b3RSZXN1bHRDb2x1bW5zIGZyb20gdmVyIDI4ICovXG4gICAgICBjb25zdCBwaXZvdENvbHVtbnMgPSBjb2x1bW5zLmdldFNlY29uZGFyeUNvbHVtbnMoKTtcblxuICAgICAgaWYgKHBpdm90Q29sdW1ucyAmJiBwaXZvdENvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBjZWxsQ2xhc3MgKz0gJ3RvcC1ib3JkZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjZWxsQ2xhc3M7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZUNvbHVtbnMoY29sRGVmczogRGF0b0dyaWRDb2x1bW5EZWZbXSwgZ3JpZE9wdGlvbnM6IERhdG9HcmlkT3B0aW9ucyA9IG51bGwpOiBEYXRvR3JpZENvbHVtbkRlZltdIHtcbiAgICBpZiAoIWdyaWRPcHRpb25zKSB7XG4gICAgICBncmlkT3B0aW9ucyA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEdyaWRPcHRpb25zKCk7XG4gICAgfVxuICAgIGNvbnN0IHVwZGF0ZWRDb2xEZWZzID0gY29sRGVmcy5tYXAoKGNvbDogRGF0b0dyaWRDb2x1bW5EZWYpID0+IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB7XG4gICAgICAgIC4uLmNvbCxcbiAgICAgICAgaGVhZGVyTmFtZTogdGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKGNvbC5oZWFkZXJOYW1lKVxuICAgICAgfTtcbiAgICAgIC8qKiBBZGp1c3QgdGhlIHdpZHRoIGluIGNhc2UgdGhlIGNvbHVtbiBoYXMgaW5mbyAqL1xuICAgICAgaWYgKGNvbC5pbmZvKSB7XG4gICAgICAgIG5vcm1hbGl6ZWQubWluV2lkdGggPSBjb2wubWluV2lkdGggfHwgR3JpZE1pbldpZHRocy5XaXRoX0luZm87XG4gICAgICB9XG4gICAgICBpZiAoIWNvbC5jb2xJZCkge1xuICAgICAgICBub3JtYWxpemVkLmNvbElkID0gY29sLmZpZWxkO1xuICAgICAgfVxuICAgICAgaWYgKG5vcm1hbGl6ZWQudHlwZSA9PT0gRGF0b0dyaWRDb2x1bW5UeXBlcy5JdGVtcyAmJiAhbm9ybWFsaXplZC5maWx0ZXJzQ29uZmlnKSB7XG4gICAgICAgIG5vcm1hbGl6ZWQuZmlsdGVyc0NvbmZpZyA9IHsgc2VjdGlvbnM6IERhdG9HcmlkRmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWwgfTtcbiAgICAgIH1cbiAgICAgIHRoaXMubm9ybWFsaXplQ29sdW1uU2VhcmNoQ29uZmlnKGdyaWRPcHRpb25zLCBjb2wsIG5vcm1hbGl6ZWQpO1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5hZGRNdWx0aVNlbGVjdEhlYWRlckNvbHVtbklmUmVxdWlyZWQodXBkYXRlZENvbERlZnMsIGdyaWRPcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplQ29sdW1uU2VhcmNoQ29uZmlnKFxuICAgIGdyaWRPcHRpb25zOiBEYXRvR3JpZE9wdGlvbnMsXG4gICAgY29sOiBEYXRvR3JpZENvbHVtbkRlZixcbiAgICBub3JtYWxpemVkOiBEYXRvR3JpZENvbHVtbkRlZlxuICApIHtcbiAgICAvKiogQ2hlY2sgaWYgY29sdW1uIHNob3VsZCBiZSBleGNsdWRlZCBmcm9tIHNlYXJjaCAqKi9cbiAgICBjb25zdCBpc1NlcnZlclBhZ2luYXRpb24gPSB0aGlzLmlzU2VydmVyU2lkZVBhZ2luYXRpb24oZ3JpZE9wdGlvbnMpO1xuICAgIGlmICh0eXBlb2YgY29sLmluY2x1ZGVJblNlYXJjaCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChpc1NlcnZlclBhZ2luYXRpb24gJiYgY29sLnR5cGUgPT09IERhdG9HcmlkQ29sdW1uVHlwZXMuRGF0ZSkge1xuICAgICAgICBub3JtYWxpemVkLmluY2x1ZGVJblNlYXJjaCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9ybWFsaXplZC5pbmNsdWRlSW5TZWFyY2ggPVxuICAgICAgICAgIHR5cGVvZiBncmlkT3B0aW9ucy5jb2x1bW5zSW5jbHVkZWRJblNlYXJjaEJ5RGVmYXVsdCAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgID8gZ3JpZE9wdGlvbnMuY29sdW1uc0luY2x1ZGVkSW5TZWFyY2hCeURlZmF1bHRcbiAgICAgICAgICAgIDogZGVmYXVsdEdyaWRPcHRpb25zLmNvbHVtbnNJbmNsdWRlZEluU2VhcmNoQnlEZWZhdWx0O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBub3JtYWxpemVkLmluY2x1ZGVJblNlYXJjaCAmJlxuICAgICAgIXRoaXMuaGFzQ2VsbFJlbmRlcmVyKG5vcm1hbGl6ZWQsIGdyaWRPcHRpb25zKSAmJlxuICAgICAgZ3JpZE9wdGlvbnMuZW5hYmxlU2VhcmNoSGlnaGxpZ2h0XG4gICAgKSB7XG4gICAgICBub3JtYWxpemVkLmNlbGxSZW5kZXJlciA9IChwYXJhbXM6IElDZWxsUmVuZGVyZXJQYXJhbXMpID0+IHtcbiAgICAgICAgY29uc3QgYWxsb3dIVE1MID0gaXNIdG1sQWxsb3dlZEZvckNvbChncmlkT3B0aW9ucywgcGFyYW1zLmNvbERlZik7XG4gICAgICAgIGNvbnN0IGlzRWRpdGFibGUgPVxuICAgICAgICAgIChpc0Z1bmN0aW9uKG5vcm1hbGl6ZWQuZWRpdGFibGUpICYmIG5vcm1hbGl6ZWQuZWRpdGFibGUocGFyYW1zKSkgfHxcbiAgICAgICAgICAoIWlzRnVuY3Rpb24obm9ybWFsaXplZC5lZGl0YWJsZSkgJiYgbm9ybWFsaXplZC5lZGl0YWJsZSk7XG5cbiAgICAgICAgcmV0dXJuIGlzRWRpdGFibGVcbiAgICAgICAgICA/IGVkaXRhYmxlQ2VsbFJlbmRlcmVyV2l0aFNlYXJjaEhpZ2hsaWdodChwYXJhbXMsIHRoaXMuZ3JpZFF1ZXJ5LmdldFNlYXJjaFRlcm0oKSwgYWxsb3dIVE1MKVxuICAgICAgICAgIDogc2VhcmNoSGlnaGxpZ2h0Q2VsbFJlbmRlcmVyKHBhcmFtcywgdGhpcy5ncmlkUXVlcnkuZ2V0U2VhcmNoVGVybSgpLCBhbGxvd0hUTUwpO1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhc0NlbGxSZW5kZXJlcihjb2x1bW46IERhdG9HcmlkQ29sdW1uRGVmLCBncmlkT3B0aW9uczogRGF0b0dyaWRPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgaWYgKGNvbHVtbi5jZWxsUmVuZGVyZXIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCB0eXBlID0gY29sdW1uLnR5cGUgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGNvbHVtblR5cGVIYXNDZWxsUmVuZGVyZXIgPSAob3B0aW9uczogUGFydGlhbDxEYXRvR3JpZE9wdGlvbnM+KTogYm9vbGVhbiA9PlxuICAgICAgb3B0aW9ucy5jb2x1bW5UeXBlcyAmJiAhIW9wdGlvbnMuY29sdW1uVHlwZXNbdHlwZV0gJiYgISFvcHRpb25zLmNvbHVtblR5cGVzW3R5cGVdLmNlbGxSZW5kZXJlcjtcblxuICAgIHJldHVybiBjb2x1bW5UeXBlSGFzQ2VsbFJlbmRlcmVyKGdyaWRPcHRpb25zKSB8fCBjb2x1bW5UeXBlSGFzQ2VsbFJlbmRlcmVyKGRlZmF1bHRHcmlkT3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGFkZE11bHRpU2VsZWN0SGVhZGVyQ29sdW1uSWZSZXF1aXJlZChcbiAgICBjb2x1bW5EZWZzOiBEYXRvR3JpZENvbHVtbkRlZltdLFxuICAgIGdyaWRPcHRpb25zOiBEYXRvR3JpZE9wdGlvbnNcbiAgKTogRGF0b0dyaWRDb2x1bW5EZWZbXSB7XG4gICAgY29uc3Qgc2hvd011bHRpU2VsZWN0aW9uQ2hlY2tib3hlcyA9IGdyaWRPcHRpb25zICYmIGdyaWRPcHRpb25zLnNob3dNdWx0aVNlbGVjdGlvbkNoZWNrYm94ZXM7XG4gICAgY29uc3Qgcm93U2VsZWN0aW9uID1cbiAgICAgIGdyaWRPcHRpb25zICYmIGdyaWRPcHRpb25zLnJvd1NlbGVjdGlvbiA/IGdyaWRPcHRpb25zLnJvd1NlbGVjdGlvbiA6IGRlZmF1bHRHcmlkT3B0aW9ucy5yb3dTZWxlY3Rpb247XG5cbiAgICBpZiAoc2hvd011bHRpU2VsZWN0aW9uQ2hlY2tib3hlcyAmJiByb3dTZWxlY3Rpb24gPT09IEdyaWRSb3dTZWxlY3Rpb25UeXBlLk1VTFRJUExFKSB7XG4gICAgICBjb25zdCBjaGVja2JveGVzQ29sdW1uOiBEYXRvR3JpZENvbHVtbkRlZiA9IHtcbiAgICAgICAgY29sSWQ6IHRoaXMuQ0hFQ0tCT1hfU0VMRUNUSU9OX0NPTF9JRCxcbiAgICAgICAgY2hlY2tib3hTZWxlY3Rpb246IHRydWUsXG4gICAgICAgIGhlYWRlckNvbXBvbmVudEZyYW1ld29yazogRGF0b0dyaWRNdWx0aVNlbGVjdENvbHVtbkhlYWRlckNvbXBvbmVudCxcbiAgICAgICAgd2lkdGg6IDI5LFxuICAgICAgICBtYXhXaWR0aDogMjksXG4gICAgICAgIHN1cHByZXNzU2l6ZVRvRml0OiB0cnVlLFxuICAgICAgICBjZWxsQ2xhc3M6ICdjaGVja2JveC1zZWxlY3Rpb24tY2VsbCcsXG4gICAgICAgIGhlYWRlckNsYXNzOiAnaGVhZGVyLWNoZWNrYm94LXNlbGVjdGlvbi1jZWxsJyxcbiAgICAgICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICAgICAgcGlubmVkOiAnbGVmdCcsXG4gICAgICAgIGxvY2tQb3NpdGlvbjogdHJ1ZSxcbiAgICAgICAgaW5jbHVkZUluU2VhcmNoOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHJldHVybiBbY2hlY2tib3hlc0NvbHVtbiwgLi4uY29sdW1uRGVmc107XG4gICAgfVxuICAgIHJldHVybiBjb2x1bW5EZWZzO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0T25Sb3dTZWxlY3RlZEZvclNlcnZlclNpZGVQYWdpbmF0aW9uKHsgZ3JpZE9wdGlvbnMgfTogTm9ybWFsaXplT3B0aW9uc1BhcmFtcykge1xuICAgIGlmICghdGhpcy5pc1NlcnZlclNpZGVQYWdpbmF0aW9uKGdyaWRPcHRpb25zKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBleHRlcm5hbE9uUm93U2VsZWN0ZWQgPSBncmlkT3B0aW9ucy5vblJvd1NlbGVjdGVkO1xuICAgIGdyaWRPcHRpb25zLm9uUm93U2VsZWN0ZWQgPSAoZXZ0OiBSb3dTZWxlY3RlZEV2ZW50KSA9PiB7XG4gICAgICBpZiAodGhpcy5ncmlkUXVlcnkuaXNTZXJ2ZXJTZWxlY3RBbGxSb3dzRW5hYmxlZCkge1xuICAgICAgICBjb25zdCBub2RlID0gZXZ0Lm5vZGU7XG4gICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBub2RlLmlzU2VsZWN0ZWQoKTtcbiAgICAgICAgY29uc3QgeyBleGNsdWRlZEZyb21TZWxlY3RBbGwgfSA9IHRoaXMuZ3JpZFF1ZXJ5LnNlcnZlclNpZGVDb25maWc7XG4gICAgICAgIGNvbnN0IGlzRXhjbHVkZWQgPSBleGNsdWRlZEZyb21TZWxlY3RBbGwuaW5jbHVkZXMobm9kZS5pZCk7XG4gICAgICAgIGlmIChpc1NlbGVjdGVkICYmIGlzRXhjbHVkZWQpIHtcbiAgICAgICAgICB0aGlzLnNldFNlcnZlclNpZGVQYWdpbmF0aW9uKHtcbiAgICAgICAgICAgIGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbDogZXhjbHVkZWRGcm9tU2VsZWN0QWxsLmZpbHRlcigobm9kZUlkOiBzdHJpbmcpID0+IG5vZGVJZCAhPT0gbm9kZS5pZClcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNTZWxlY3RlZCAmJiAhaXNFeGNsdWRlZCkge1xuICAgICAgICAgIHRoaXMuc2V0U2VydmVyU2lkZVBhZ2luYXRpb24oeyBleGNsdWRlZEZyb21TZWxlY3RBbGw6IFsuLi5leGNsdWRlZEZyb21TZWxlY3RBbGwsIG5vZGUuaWRdIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZXh0ZXJuYWxPblJvd1NlbGVjdGVkKSB7XG4gICAgICAgIGV4dGVybmFsT25Sb3dTZWxlY3RlZChldnQpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJvd01hdGNoZXNTZWFyY2gocm93OiBSb3dOb2RlKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2VhcmNoVGVybSA9ICh0aGlzLmdyaWRRdWVyeS5nZXRTZWFyY2hUZXJtKCkgfHwgJycpLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGlmIChpc0VtcHR5KHNlYXJjaFRlcm0pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEdyaWRPcHRpb25zKCkuaW5jbHVkZUhpZGRlbkNvbHVtbnNJblNlYXJjaFxuICAgICAgPyB0aGlzLmdyaWRRdWVyeS5nZXRBbGxDb2x1bW5zKClcbiAgICAgIDogdGhpcy5ncmlkUXVlcnkuZ2V0QWxsRGlzcGxheWVkQ29sdW1ucygpO1xuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHVtbnMpIHtcbiAgICAgIGNvbnN0IGNvbERlZiA9IHRoaXMuYXBpLmdyaWQuZ2V0Q29sdW1uRGVmKGNvbC5nZXRDb2xJZCgpKSBhcyBEYXRvR3JpZENvbHVtbkRlZjtcbiAgICAgIGlmICghY29sRGVmLmluY2x1ZGVJblNlYXJjaCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJvd1ZhbHVlID0gKHRoaXMuYXBpLmdyaWQuZ2V0VmFsdWUoY29sLmdldENvbElkKCksIHJvdykgfHwgJycpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChyb3dWYWx1ZS5pbmNsdWRlcyhzZWFyY2hUZXJtKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBmaXRHcmlkKCdjb250YWluZXInKSBpbnN0ZWFkXG4gICAqL1xuICBmaXRUb0NvbnRhaW5lcigpIHtcbiAgICB0aGlzLmFwaS5ncmlkLnNpemVDb2x1bW5zVG9GaXQoKTtcbiAgfVxuXG4gIGdldEN1c3RvbUhlYWRlcihmaWVsZDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuY3VzdG9tSGVhZGVyc1RlbXBsYXRlcykge1xuICAgICAgY29uc3Qgc3BlY2lmaWMgPSB0aGlzLmN1c3RvbUhlYWRlcnNUZW1wbGF0ZXMuZmluZCgoeyBjb2x1bW4gfSkgPT4gY29sdW1uID09PSBmaWVsZCk7XG4gICAgICBjb25zdCBjb21tb24gPSB0aGlzLmN1c3RvbUhlYWRlcnNUZW1wbGF0ZXMuZmluZCgoeyBjb2x1bW4gfSkgPT4gIWNvbHVtbik7XG4gICAgICBpZiAoc3BlY2lmaWMgfHwgY29tbW9uKSB7XG4gICAgICAgIGNvbnN0IHsgbW9yZU1lbnUsIGN1c3RvbUhlYWRlciB9ID0ge1xuICAgICAgICAgIG1vcmVNZW51OiAoc3BlY2lmaWMgJiYgc3BlY2lmaWMubW9yZU1lbnUpIHx8IChjb21tb24gJiYgY29tbW9uLm1vcmVNZW51KSxcbiAgICAgICAgICBjdXN0b21IZWFkZXI6IChzcGVjaWZpYyAmJiBzcGVjaWZpYy5jdXN0b21IZWFkZXIpIHx8IChjb21tb24gJiYgY29tbW9uLmN1c3RvbUhlYWRlcilcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHsgbW9yZU1lbnU6IG1vcmVNZW51ICYmIG1vcmVNZW51LnRwbCwgY3VzdG9tSGVhZGVyOiBjdXN0b21IZWFkZXIgJiYgY3VzdG9tSGVhZGVyLnRwbCB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNsZWFyQWxsRmlsdGVycygpIHtcbiAgICB0aGlzLnN0b3JlLnVwZGF0ZShzdGF0ZSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXR0aW5nczoge1xuICAgICAgICAgIC4uLnN0YXRlLnNldHRpbmdzLFxuICAgICAgICAgIGZpbHRlcjoge30sXG4gICAgICAgICAgc2VhcmNoVGVybTogbnVsbFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMubm90aWZ5RmlsdGVyVXBkYXRlKCk7XG4gIH1cblxuICBjbGVhckNvbHVtbkZpbHRlcihjb2x1bW5GaWVsZDogc3RyaW5nKSB7XG4gICAgY29uc3QgeyBbY29sdW1uRmllbGRdOiBkZWxldGVkLCAuLi5maWx0ZXIgfSA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEZpbHRlcigpO1xuICAgIHRoaXMuc3RvcmUudXBkYXRlKHN0YXRlID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICAgLi4uc3RhdGUuc2V0dGluZ3MsXG4gICAgICAgICAgZmlsdGVyXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5ub3RpZnlGaWx0ZXJVcGRhdGUoKTtcbiAgfVxuXG4gIHNldENvbHVtbkZpbHRlcihjb2x1bW46IENvbHVtbiwgZmlsdGVyOiBEYXRvR3JpZEZpbHRlciwgbm90aWZ5R3JpZCA9IHRydWUpIHtcbiAgICB0aGlzLl9sb2dFdmVudChDb3JlRXZlbnRUeXBlcy5HUklEX0ZJTFRFUl9BUFBMSUVELCB7XG4gICAgICBjb2x1bW46IGNvbHVtbi5nZXRDb2xJZCgpLFxuICAgICAgbnVtT2ZDb25kaXRpb25zOiAoZmlsdGVyLmNvbmRpdGlvbmFsICYmIGZpbHRlci5jb25kaXRpb25hbC5jb25kaXRpb25zLmxlbmd0aCkgfHwgMCxcbiAgICAgIGJ5VmFsdWU6ICEhZmlsdGVyLmJ5VmFsdWUgPyAnWWVzJyA6ICdObydcbiAgICB9KTtcblxuICAgIHRoaXMudXBkYXRlRmlsdGVyKGNvbHVtbiwgZmlsdGVyKTtcblxuICAgIGlmIChub3RpZnlHcmlkKSB7XG4gICAgICB0aGlzLm5vdGlmeUZpbHRlclVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNldEdyaWRGaWx0ZXJzKGZpbHRlcnM6IERhdG9HcmlkRXh0ZXJuYWxGaWx0ZXJbXSkge1xuICAgIGlmICh0aGlzLmFwaSAmJiBmaWx0ZXJzKSB7XG4gICAgICBsZXQgYXBwbGllZEZpbHRlciA9IHt9O1xuXG4gICAgICBmb3IgKGNvbnN0IHsgZmlsdGVyLCBmaWVsZCB9IG9mIGZpbHRlcnMpIHtcbiAgICAgICAgYXBwbGllZEZpbHRlcltmaWVsZF0gPSBmaWx0ZXI7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlU2V0dGluZ3MoeyBmaWx0ZXI6IGFwcGxpZWRGaWx0ZXIgfSk7XG4gICAgICB0aGlzLm5vdGlmeUZpbHRlclVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNldFNvcnRCeUNvbHVtbihjb2xJZCwgc29ydCkge1xuICAgIGNvbnN0IHNvcnRUb1NldCA9IHRoaXMuZ3JpZFF1ZXJ5LmdldFNvcnQoeyBjb2xJZCwgc29ydCB9KTtcblxuICAgIHRoaXMuc2V0R3JpZFNvcnQoc29ydFRvU2V0KTtcbiAgfVxuXG4gIHNldEdyaWRTb3J0KGdyaWRTb3J0OiBEYXRvR3JpZFNvcnQpIHtcbiAgICBpZiAoZ3JpZFNvcnQgJiYgdGhpcy5hcGkgJiYgdGhpcy5hcGkuZ3JpZC5nZXREaXNwbGF5ZWRSb3dDb3VudCgpID4gMCkge1xuICAgICAgY29uc3QgeyBjb2xJZCwgc29ydCwgc29ydEluZGV4IH0gPSBncmlkU29ydDtcbiAgICAgIGNvbnN0IGdyaWRDb2x1bW5zID0gdGhpcy5hcGkuY29sdW1ucy5nZXRBbGxHcmlkQ29sdW1ucygpO1xuXG4gICAgICBpZiAoZ3JpZENvbHVtbnMpIHtcbiAgICAgICAgbGV0IHNvcnRUb0FwcGx5ID0gZ3JpZFNvcnQ7XG4gICAgICAgIC8qKiBTb3J0IGJ5IGNvbHVtbiBpZCAqL1xuICAgICAgICBjb25zdCBjb2x1bW5CeUlkID0gZ3JpZENvbHVtbnMuZmluZCgoY29sOiBDb2x1bW4pID0+IHtcbiAgICAgICAgICByZXR1cm4gKGNvbC5nZXRDb2xEZWYoKS5zaG93Um93R3JvdXAgfHwgY29sLmdldENvbElkKCkpID09PSBjb2xJZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGNvbHVtbkJ5SWQpIHtcbiAgICAgICAgICBzb3J0VG9BcHBseSA9IHsgY29sSWQ6IGNvbHVtbkJ5SWQuZ2V0Q29sSWQoKSwgc29ydCB9O1xuICAgICAgICB9IGVsc2UgaWYgKCFpc05pbChzb3J0SW5kZXgpKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWVDb2x1bW5zID0gdGhpcy5hcGkuY29sdW1ucy5nZXRWYWx1ZUNvbHVtbnMoKTtcbiAgICAgICAgICBjb25zdCB2YWx1ZUNvbHVtbiA9IHZhbHVlQ29sdW1ucy5maW5kKChjb2w6IENvbHVtbikgPT4gY29sLmdldENvbElkKCkgPT09IGNvbElkKTtcbiAgICAgICAgICBjb25zdCBpc1Bpdm90Q29sSWQgPSBjb2xJZC5zdGFydHNXaXRoKCdwaXZvdCcpO1xuXG4gICAgICAgICAgaWYgKGlzUGl2b3RDb2xJZCB8fCB2YWx1ZUNvbHVtbikge1xuICAgICAgICAgICAgLyoqIENvbHVtbiBpcyBwaXZvdCB2YWx1ZSBjb2x1bW4sIHNvcnQgYnkgaW5kZXggKi9cbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbkJ5SW5kZXggPSBncmlkQ29sdW1uc1tzb3J0SW5kZXhdO1xuXG4gICAgICAgICAgICBzb3J0VG9BcHBseSA9IHsgY29sSWQ6IGNvbHVtbkJ5SW5kZXguZ2V0Q29sSWQoKSwgc29ydCwgc29ydEluZGV4IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVTZXR0aW5ncyh7IHNvcnQ6IHNvcnRUb0FwcGx5IH0pO1xuICAgICAgICB0aGlzLmFwaS5ncmlkLnNldFNvcnRNb2RlbChbc29ydFRvQXBwbHldKTtcblxuICAgICAgICBpZiAoKHRoaXMuZ3JpZFJlZi5ncmlkT3B0aW9ucyBhcyBEYXRvR3JpZE9wdGlvbnMpLnVzZVBpdm90R3JpZFN0eWxlKSB7XG4gICAgICAgICAgdGhpcy5hcGkuZ3JpZC5yZWRyYXdSb3dzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZpbHRlcihjb2x1bW46IENvbHVtbiwgZmlsdGVyOiBEYXRvR3JpZEZpbHRlcikge1xuICAgIGNvbnN0IGNvbEZpZWxkID0gZ2V0Q29sRmllbGQoY29sdW1uLmdldENvbERlZigpKTtcblxuICAgIHRoaXMuc3RvcmUudXBkYXRlKHN0YXRlID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICAgLi4uc3RhdGUuc2V0dGluZ3MsXG4gICAgICAgICAgZmlsdGVyOiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5zZXR0aW5ncy5maWx0ZXIsXG4gICAgICAgICAgICBbY29sRmllbGRdOiBmaWx0ZXJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBzZXRTZWFyY2hUZXJtKHNlYXJjaFRlcm06IHN0cmluZykge1xuICAgIHRoaXMuc3RvcmUudXBkYXRlKHN0YXRlID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICAgLi4uc3RhdGUuc2V0dGluZ3MsXG4gICAgICAgICAgc2VhcmNoVGVybVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMubm90aWZ5RmlsdGVyVXBkYXRlKCk7XG4gIH1cblxuICBzZXRTZXJ2ZXJTaWRlUGFnaW5hdGlvbihjb25maWc6IFBhcnRpYWw8U2VydmVyU2lkZVBhZ2luYXRpb25Db25maWc+KSB7XG4gICAgdGhpcy5zdG9yZS51cGRhdGUoc3RhdGUgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VydmVyU2lkZVBhZ2luYXRpb246IHtcbiAgICAgICAgICAuLi5zdGF0ZS5zZXJ2ZXJTaWRlUGFnaW5hdGlvbixcbiAgICAgICAgICAuLi5jb25maWdcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldExvYWRpbmcoc2hvdzogYm9vbGVhbikge1xuICAgIGlmIChzaG93KSB7XG4gICAgICB0aGlzLmFwaS5ncmlkLnNob3dMb2FkaW5nT3ZlcmxheSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFwaS5ncmlkLmdldERpc3BsYXllZFJvd0NvdW50KCkgPT09IDAgPyB0aGlzLnNldE92ZXJsYXkodHJ1ZSkgOiB0aGlzLnNldE92ZXJsYXkoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2Ugc2V0T3ZlcmxheSBpbnN0ZWFkXG4gICAqIEBwYXJhbSBzaG93XG4gICAqL1xuICBzZXROb0RhdGEoc2hvdzogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0T3ZlcmxheShzaG93KTtcbiAgfVxuXG4gIHNldE92ZXJsYXkoc2hvdzogYm9vbGVhbikge1xuICAgIHNob3cgPyB0aGlzLmFwaS5ncmlkLnNob3dOb1Jvd3NPdmVybGF5KCkgOiB0aGlzLmFwaS5ncmlkLmhpZGVPdmVybGF5KCk7XG4gIH1cblxuICB1cGRhdGVTZXR0aW5ncyhzZXR0aW5nczogUGFydGlhbDxEYXRvR3JpZFNldHRpbmdzPikge1xuICAgIHRoaXMuc3RvcmUudXBkYXRlKHN0YXRlID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICAgLi4uc3RhdGUuc2V0dGluZ3MsXG4gICAgICAgICAgLi4uc2V0dGluZ3NcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGZpdEdyaWQodG86ICdjb250YWluZXInIHwgJ2NvbnRlbnQnKSB7XG4gICAgdG8gPT09ICdjb250YWluZXInID8gdGhpcy5hcGkuZ3JpZC5zaXplQ29sdW1uc1RvRml0KCkgOiB0aGlzLmFwaS5jb2x1bW5zLmF1dG9TaXplQWxsQ29sdW1ucygpO1xuICAgIGNvbnN0IGdyaWRBbGlnbm1lbnQgPSB0byA9PT0gJ2NvbnRhaW5lcicgPyBEYXRvR3JpZEFsaWdubWVudC5GSVRfVE9fQ09OVEFJTkVSIDogRGF0b0dyaWRBbGlnbm1lbnQuRklUX1RPX0NPTlRFTlQ7XG4gICAgdGhpcy51cGRhdGVTZXR0aW5ncyh7IGdyaWRBbGlnbm1lbnQsIGNvbHVtbnNTaXplczogbnVsbCB9KTtcbiAgfVxuXG4gIHNhdmVTZXR0aW5nc1RvU2VydmVyKHNldHRpbmdzOiBQYXJ0aWFsPERhdG9HcmlkU2V0dGluZ3M+KSB7XG4gICAgdGhpcy5zdG9yYWdlQVBJLnNldCh0aGlzLmdyaWROYW1lLCBzZXR0aW5ncyk7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsIHVzZWQgdG8gbG9nIGdyaWQgZXZlbnRzIHRvIHRoZSBwbGF0Zm9ybSdzIGxvZ2dpbmcgc2VydmljZVxuICAgKi9cbiAgX2xvZ0V2ZW50KGV2ZW50VHlwZTogQ29yZUV2ZW50VHlwZXMsIGV2ZW50UHJvcGVydGllcz86IEhhc2hNYXA8YW55Pikge1xuICAgIHRoaXMubG9nZ2VyLmxvZ0V2ZW50KGV2ZW50VHlwZSwgeyB0YWJsZTogdGhpcy5ncmlkTmFtZSwgLi4uZXZlbnRQcm9wZXJ0aWVzIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB3cmFwU3VjY2Vzc0NhbGxiYWNrKHsgc3VjY2Vzc0NiLCBwYWdlTnVtYmVyLCBpc1BlbmRpbmdSZXR1cm5Ub1BhZ2UgfTogU3VjY2Vzc1dyYXBwZXJQYXJhbXMpIHtcbiAgICByZXR1cm4gKHJvd3NUaGlzQmxvY2s6IGFueVtdLCB0b3RhbFJvd3M6IG51bWJlcikgPT4ge1xuICAgICAgdGhpcy5zZXRTZXJ2ZXJTaWRlUGFnaW5hdGlvbih7IHRvdGFsUm93cywgaGFzRXJyb3I6IGZhbHNlIH0pO1xuICAgICAgc3VjY2Vzc0NiKHJvd3NUaGlzQmxvY2ssIHRvdGFsUm93cyk7XG4gICAgICB0aGlzLmdyaWRRdWVyeS5fc2VydmVyRGF0YUxvYWRlZC5uZXh0KHtcbiAgICAgICAgYXBpOiB0aGlzLmFwaS5ncmlkLFxuICAgICAgICBjb2x1bW5BcGk6IHRoaXMuYXBpLmNvbHVtbnMsXG4gICAgICAgIHR5cGU6ICdTZXJ2ZXJEYXRhTG9hZGVkJyxcbiAgICAgICAgcGFnaW5hdGlvblBhZ2U6IHBhZ2VOdW1iZXJcbiAgICAgIH0pO1xuICAgICAgaWYgKCFpc1BlbmRpbmdSZXR1cm5Ub1BhZ2UpIHtcbiAgICAgICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgLyoqIHNvIHRoZSBncmlkIGZpdHMgaW4gZXZlcnkgbmV3IGRhdGEgaW5wdXQgKi9cbiAgICAgICAgdHJpZ2dlcldpbmRvd1Jlc2l6ZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5sYXN0VG90YWxSb3dzID0gdG90YWxSb3dzO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHdyYXBHZXRSb3dzKG9wdGlvbnM6IERhdG9HcmlkT3B0aW9ucywgZ2V0Um93cz86IChwYXJhbXM6IERhdG9HcmlkR2V0Um93c1BhcmFtcykgPT4gdm9pZCkge1xuICAgIGNvbnN0IGdldFJvd3NDYiA9IGdldFJvd3MgfHwgb3B0aW9ucy5kYXRhc291cmNlLmdldFJvd3M7XG4gICAgcmV0dXJuIChnZXRSb3dzUGFyYW1zOiBJR2V0Um93c1BhcmFtcykgPT4ge1xuICAgICAgY29uc3QgeyBzdGFydFJvdywgZW5kUm93LCBzb3J0TW9kZWwsIHN1Y2Nlc3NDYWxsYmFjayB9ID0gZ2V0Um93c1BhcmFtcztcbiAgICAgIGNvbnN0IHBhZ2VTaXplID0gb3B0aW9ucy5wYWdpbmF0aW9uUGFnZVNpemUgfHwgMTAwO1xuICAgICAgY29uc3QgaXNSZXR1cm5Ub0N1cnJlbnRQYWdlUmVxdWlyZWQgPSB0aGlzLnBhZ2VOdW1iZXJUb1JldHVybkFmdGVyUmVmcmVzaCA+IDA7XG4gICAgICBjb25zdCBpc1BlbmRpbmdSZXR1cm5Ub1BhZ2UgPSBpc1JldHVyblRvQ3VycmVudFBhZ2VSZXF1aXJlZCAmJiBzdGFydFJvdyA9PT0gMDtcblxuICAgICAgY29uc3QgcGFnZU51bWJlciA9IGlzUmV0dXJuVG9DdXJyZW50UGFnZVJlcXVpcmVkXG4gICAgICAgID8gdGhpcy5wYWdlTnVtYmVyVG9SZXR1cm5BZnRlclJlZnJlc2ggKyAxXG4gICAgICAgIDogTWF0aC5jZWlsKGVuZFJvdyAvIHBhZ2VTaXplKTtcblxuICAgICAgdGhpcy5wYWdlTnVtYmVyVG9SZXR1cm5BZnRlclJlZnJlc2ggPSAtMTtcblxuICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5ncmlkUXVlcnkuZ2V0RmlsdGVyKCk7XG4gICAgICBjb25zdCBuZXdQYXJhbXM6IERhdG9HcmlkR2V0Um93c1BhcmFtcyA9IHtcbiAgICAgICAgLi4uZ2V0Um93c1BhcmFtcyxcbiAgICAgICAgZmFpbENhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRTZXJ2ZXJTaWRlUGFnaW5hdGlvbih7IGhhc0Vycm9yOiB0cnVlIH0pO1xuICAgICAgICAgIHRoaXMuc2V0T3ZlcmxheSh0cnVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgc3VjY2Vzc0NhbGxiYWNrOiB0aGlzLndyYXBTdWNjZXNzQ2FsbGJhY2soeyBwYWdlTnVtYmVyLCBzdWNjZXNzQ2I6IHN1Y2Nlc3NDYWxsYmFjaywgaXNQZW5kaW5nUmV0dXJuVG9QYWdlIH0pLFxuICAgICAgICBzZXJ2ZXJDb25maWc6IHtcbiAgICAgICAgICBwYWdlU2l6ZSxcbiAgICAgICAgICBwYWdlTnVtYmVyLFxuICAgICAgICAgIGNvbHVtbkZpbHRlcnM6IGlzRW1wdHkoZmlsdGVyKSB8fCBvcHRpb25zLmVuYWJsZVYyXzEgPyBudWxsIDogdGhpcy5idWlsZFNlcnZlclJlcXVlc3RGaWx0ZXJzKGZpbHRlciksXG4gICAgICAgICAgZmlsdGVyOiBvcHRpb25zLmVuYWJsZVYyXzEgPyB0aGlzLmJ1aWxkU2VydmVyUmVxdWVzdEZpbHRlcnNfdjJfMShvcHRpb25zLmNvbHVtbkRlZnMpIDogbnVsbCxcbiAgICAgICAgICBzb3J0OiB0aGlzLmJ1aWxkU2VydmVyUmVxdWVzdFNvcnQoc29ydE1vZGVsKVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKGlzUGVuZGluZ1JldHVyblRvUGFnZSkge1xuICAgICAgICAvLyBTY2VuYXJpbyB0aGUgZm9sbG93aW5nIGhhbmRsZXMgLSBzZXJ2ZXIgcmVmcmVzaCB3aGVyZSBpdCB3YXMgcmVxdWVzdGVkIHRvIGtlZXAgdGhlIGN1cnJlbnQgcGFnZS5cbiAgICAgICAgLy8gVGhlIHByb2JsZW0gLSBnZXRSb3dzIHdpbGwgaW5pdGlhbGx5IGJlIGNhbGxlZCBmb3IgcGFnZSAxIChhdXRvbWF0aWNhbGx5IGhhcHBlbnMgd2hlbiBjYWxsaW5nIGFnLWdyaWQncyBzZXREYXRhU291cmNlKS5cbiAgICAgICAgLy8gSW4gb3JkZXIgdG8gdHJpZ2dlciBpdCBhZ2Fpbiwgc3VjY2Vzc0NhbGxiYWNrIGlzIGNhbGxlZCB3aXRoIHRoZSBkZXNpcmVkIHBhZ2UuXG4gICAgICAgIC8vIGZha2VHZXRSb3dzIGlzIHVzZWQgaW4gb3JkZXIgdG8gYXZvaWQgcmV0cmlldmluZyB0aGUgdW5uZWNlc3NhcnkgcmVhbCBkYXRhIGZvciBwYWdlIDEuXG4gICAgICAgIGNvbnN0IGZha2VHZXRSb3dzID0gKHsgc3VjY2Vzc0NhbGxiYWNrIH06IERhdG9HcmlkR2V0Um93c1BhcmFtcykgPT4ge1xuICAgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhbXSwgdGhpcy5sYXN0VG90YWxSb3dzKTtcbiAgICAgICAgfTtcbiAgICAgICAgZmFrZUdldFJvd3MobmV3UGFyYW1zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdldFJvd3NDYihuZXdQYXJhbXMpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGluaXRFZGl0YWJsZUNvbHVtbnNDZWxsQ2xhc3MocGFyYW1zOiBOb3JtYWxpemVPcHRpb25zUGFyYW1zKSB7XG4gICAgcGFyYW1zLmdyaWRPcHRpb25zLmNvbHVtbkRlZnMuZm9yRWFjaChjb2xEZWYgPT4ge1xuICAgICAgaWYgKGNvbERlZi5lZGl0YWJsZSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihjb2xEZWYuZWRpdGFibGUpKSB7XG4gICAgICAgICAgY29uc3QgaW5pdGlhbENlbGxDbGFzcyA9IGNvbERlZi5jZWxsQ2xhc3M7XG4gICAgICAgICAgY29sRGVmLmNlbGxDbGFzcyA9IChjZWxsQ2xhc3NQYXJhbXM6IENlbGxDbGFzc1BhcmFtcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNFZGl0YWJsZSA9IChjb2xEZWYuZWRpdGFibGUgYXMgRnVuY3Rpb24pKGNlbGxDbGFzc1BhcmFtcyBhcyBhbnkpO1xuICAgICAgICAgICAgaWYgKGlzRWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgY29uc3QgZWRpdGFibGVSZXN1bHQgPSB0aGlzLmFkZEVkaXRhYmxlQ2VsbENsYXNzKGluaXRpYWxDZWxsQ2xhc3MpO1xuICAgICAgICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihlZGl0YWJsZVJlc3VsdCkgPyBlZGl0YWJsZVJlc3VsdChjZWxsQ2xhc3NQYXJhbXMpIDogZWRpdGFibGVSZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihpbml0aWFsQ2VsbENsYXNzKSA/IGluaXRpYWxDZWxsQ2xhc3MoY2VsbENsYXNzUGFyYW1zKSA6IGluaXRpYWxDZWxsQ2xhc3M7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2xEZWYuY2VsbENsYXNzID0gdGhpcy5hZGRFZGl0YWJsZUNlbGxDbGFzcyhjb2xEZWYuY2VsbENsYXNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB3cmFwQ29udGV4dE1lbnVCdWlsZGVyKHBhcmFtczogTm9ybWFsaXplT3B0aW9uc1BhcmFtcykge1xuICAgIGNvbnN0IHsgY3VzdG9tQ29udGV4dE1lbnUgfSA9IHBhcmFtcy5ncmlkT3B0aW9ucztcbiAgICBjb25zdCBhbGxBY3Rpb25zID0gaXNGdW5jdGlvbihjdXN0b21Db250ZXh0TWVudSkgPyBjdXN0b21Db250ZXh0TWVudShwYXJhbXMucm93QWN0aW9ucykgOiBwYXJhbXMucm93QWN0aW9ucztcbiAgICB0aGlzLnRyYW5zbGF0ZUFjdGlvbkxhYmVscyhhbGxBY3Rpb25zKTtcbiAgICBjb25zdCBjb3B5QWN0aW9uOiBSb3dBY3Rpb24gPSB7XG4gICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKCdjb3JlLmNvcHktY2VsbCcpLFxuICAgICAgaWNvbjogJ2NvcHknLFxuICAgICAga2V5OiAnQ29weSBDZWxsJ1xuICAgIH07XG4gICAgcmV0dXJuICh7IG5vZGUsIGNvbHVtbiwgY29udGV4dCB9OiBHZXRDb250ZXh0TWVudUl0ZW1zUGFyYW1zKSA9PiB7XG4gICAgICBjb25zdCBvbkhvdmVyQWN0aW9uTWVudSA9IGNvbnRleHQgJiYgY29udGV4dC5jb250ZXh0TWVudSAmJiBjb250ZXh0LmNvbnRleHRNZW51LmZyb21PbkhvdmVyO1xuICAgICAgaWYgKCFub2RlKSByZXR1cm4gW107XG4gICAgICBsZXQgc2VsZWN0ZWQgPSBbbm9kZV07XG4gICAgICBsZXQgcm93c0NvdW50ID0gMTtcbiAgICAgIGlmIChvbkhvdmVyQWN0aW9uTWVudSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUdyaWRDb250ZXh0KHsgY29udGV4dE1lbnU6IHsgZnJvbU9uSG92ZXI6IGZhbHNlIH0gfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb3B5QWN0aW9uLm9uQ2xpY2sgPSAoW3Jvd10pID0+IHtcbiAgICAgICAgICBjb25zdCByYXdWYWx1ZSA9IHRoaXMuYXBpLmdyaWQuZ2V0VmFsdWUoY29sdW1uLmdldENvbElkKCksIHJvdyk7XG4gICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gY29sdW1uLmdldENvbERlZigpLnZhbHVlRm9ybWF0dGVyO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gZm9ybWF0dGVyID8gZm9ybWF0dGVyKHJhd1ZhbHVlKSA6IHJhd1ZhbHVlO1xuICAgICAgICAgIGNvcHlUb0NsaXBib2FyZCh2YWx1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChub2RlLmlzU2VsZWN0ZWQoKSkge1xuICAgICAgICAgIHNlbGVjdGVkID0gdGhpcy5ncmlkUXVlcnkuZ2V0U2VsZWN0ZWRSb3dOb2RlcygpO1xuICAgICAgICAgIHJvd3NDb3VudCA9IHNpemUoc2VsZWN0ZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB2aXNpYmxlQWN0aW9ucyA9IGdldFZpc2libGVBY3Rpb25zKFxuICAgICAgICBhbGxBY3Rpb25zLFxuICAgICAgICByb3dzQ291bnQsXG4gICAgICAgIHNlbGVjdGVkLFxuICAgICAgICB0aGlzLmdyaWRRdWVyeS5pc1NlcnZlclNlbGVjdEFsbFJvd3NFbmFibGVkXG4gICAgICApLmZpbHRlcigoeyB2aXNpYmxlIH0pID0+IHZpc2libGUpO1xuICAgICAgbGV0IHRvb2xiYXJBY3Rpb25zID0gW2NvcHlBY3Rpb25dO1xuICAgICAgaWYgKG9uSG92ZXJBY3Rpb25NZW51KSB7XG4gICAgICAgIHRvb2xiYXJBY3Rpb25zID0gdmlzaWJsZUFjdGlvbnM7XG4gICAgICB9IGVsc2UgaWYgKHZpc2libGVBY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdG9vbGJhckFjdGlvbnMgPSBbeyAuLi5jb3B5QWN0aW9uLCBzZXBhcmF0b3I6IHRydWUgfSwgLi4udmlzaWJsZUFjdGlvbnNdO1xuICAgICAgfVxuICAgICAgY29uc3QgY29udmVydGVyUGFyYW1zOiBBY3Rpb25Db252ZXJ0ZXJQYXJhbXMgPSB7XG4gICAgICAgIHRvb2xiYXJBY3Rpb25zLFxuICAgICAgICBzZWxlY3RlZFJvd3M6IHNlbGVjdGVkLFxuICAgICAgICBpY29uUmVnaXN0cnk6IHRoaXMuc3ZnUmVnaXN0cnksXG4gICAgICAgIG5vZGUsXG4gICAgICAgIGxvZ2dlcjoge1xuICAgICAgICAgIGxvZzogdGhpcy5fbG9nRXZlbnQuYmluZCh0aGlzKSxcbiAgICAgICAgICBldmVudE9yaWdpbjogb25Ib3ZlckFjdGlvbk1lbnUgPyAnT24gSG92ZXInIDogJ0NvbnRleHQgTWVudSdcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0b29sYmFyQWN0aW9uVG9Db250ZXh0QWN0aW9uKGNvbnZlcnRlclBhcmFtcyk7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNsYXRlQWN0aW9uTGFiZWxzKGFsbEFjdGlvbnM6IFJvd0FjdGlvbltdKSB7XG4gICAgYWxsQWN0aW9ucy5mb3JFYWNoKGFjdGlvbiA9PiB7XG4gICAgICBhY3Rpb24ubGFiZWwgPSB0aGlzLnRyYW5zbGF0ZS50cmFuc2Zvcm0oYWN0aW9uLmxhYmVsKTtcbiAgICAgIGlmIChhY3Rpb24uc3ViTWVudSkge1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZUFjdGlvbkxhYmVscyhhY3Rpb24uc3ViTWVudSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBsb2FkU2F2ZWRTZXR0aW5ncyhzZXR0aW5nczogUGFydGlhbDxEYXRvR3JpZFNldHRpbmdzPikge1xuICAgIGNvbnN0IHtcbiAgICAgIHNvcnQsXG4gICAgICBoaWRkZW5Db2x1bW5zLFxuICAgICAgZmlsdGVyLFxuICAgICAgZ3JvdXBlZENvbHVtbnMsXG4gICAgICBjb2x1bW5zU2l6ZXMsXG4gICAgICBwaW5uZWRDb2x1bW5zLFxuICAgICAgY29sdW1uc09yZGVyLFxuICAgICAgZ3JpZEFsaWdubWVudFxuICAgIH0gPSBzZXR0aW5ncztcbiAgICBjb25zdCB7IGdyaWQsIGNvbHVtbnMgfSA9IHRoaXMuYXBpO1xuICAgIC8qIEhpZGUgY29sdW1ucyAqL1xuICAgIC8qIE5PVEU6IGNvbHVtbnMgb3JkZXIgYXJlIHRyZWF0ZWQgYXMgdGhlIGN1cnJlbnRseSB2aXNpYmxlIGNvbHVtbnMgKi9cbiAgICBjb2x1bW5zLnNldENvbHVtbnNWaXNpYmxlKHRoaXMuaW5pdGlhbFNldHRpbmdzLmNvbHVtbnNPcmRlciwgdHJ1ZSk7XG4gICAgY29uc3QgY29sdW1uVG9IaWRlID0gIWlzTmlsKGhpZGRlbkNvbHVtbnMpID8gaGlkZGVuQ29sdW1ucyA6IHRoaXMuaW5pdGlhbFNldHRpbmdzLmhpZGRlbkNvbHVtbnM7XG4gICAgY29sdW1ucy5zZXRDb2x1bW5zVmlzaWJsZShjb2x1bW5Ub0hpZGUsIGZhbHNlKTtcblxuICAgIC8qIEFwcGx5IGZpbHRlcnMgKi9cbiAgICBpZiAoZmlsdGVyKSB7XG4gICAgICBncmlkLm9uRmlsdGVyQ2hhbmdlZCgpO1xuICAgIH1cblxuICAgIC8qIEdyb3VwIGNvbHVtbnMgKi9cbiAgICBjb25zdCBhbGxHcm91cGVkQ29sdW1ucyA9IGNvbHVtbnMuZ2V0Um93R3JvdXBDb2x1bW5zKCk7XG4gICAgbGV0IHJlbW92ZUdyb3VwZWQ7XG4gICAgaWYgKGdyb3VwZWRDb2x1bW5zKSB7XG4gICAgICByZW1vdmVHcm91cGVkID0gYWxsR3JvdXBlZENvbHVtbnMuZmlsdGVyKGNvbCA9PiAhZ3JvdXBlZENvbHVtbnMuaW5jbHVkZXMoY29sLmdldENvbElkKCkpKTtcbiAgICAgIGNvbHVtbnMuYWRkUm93R3JvdXBDb2x1bW5zKGdyb3VwZWRDb2x1bW5zKTtcbiAgICAgIGNvbHVtbnMuc2V0Q29sdW1uc1Zpc2libGUoZ3JvdXBlZENvbHVtbnMsIGZhbHNlKTtcbiAgICB9XG4gICAgY29sdW1ucy5yZW1vdmVSb3dHcm91cENvbHVtbnMocmVtb3ZlR3JvdXBlZCk7XG4gICAgY29sdW1ucy5zZXRDb2x1bW5zVmlzaWJsZShyZW1vdmVHcm91cGVkLCB0cnVlKTtcblxuICAgIC8qIEFwcGx5IHNvcnQgKi9cbiAgICBjb25zdCBncmlkU29ydCA9IHNvcnQgfHwgdGhpcy5pbml0aWFsU2V0dGluZ3Muc29ydDtcbiAgICBncmlkLnNldFNvcnRNb2RlbChncmlkU29ydCA/IFtncmlkU29ydF0gOiBudWxsKTtcblxuICAgIC8qIEFsaWduIGdyaWQgKi9cbiAgICBpZiAoZ3JpZEFsaWdubWVudCA9PT0gRGF0b0dyaWRBbGlnbm1lbnQuQ1VTVE9NKSB7XG4gICAgICAvKiBTZXQgY29sdW1uIHNpemVzICovXG4gICAgICBjb2x1bW5zU2l6ZXMgJiZcbiAgICAgICAgT2JqZWN0LmtleXMoY29sdW1uc1NpemVzKS5mb3JFYWNoKGNvbElkID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uc1NpemVzW2NvbElkXSA9PT0gRGF0b0dyaWRBbGlnbm1lbnQuRklUX1RPX0NPTlRFTlQpIHtcbiAgICAgICAgICAgIGNvbHVtbnMuYXV0b1NpemVDb2x1bW4oY29sSWQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb2x1bW5zLnNldENvbHVtbldpZHRoKGNvbElkLCBjb2x1bW5zU2l6ZXNbY29sSWRdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncmlkQWxpZ25tZW50ID09PSBEYXRvR3JpZEFsaWdubWVudC5GSVRfVE9fQ09OVEVOVCA/IGNvbHVtbnMuYXV0b1NpemVBbGxDb2x1bW5zKCkgOiBncmlkLnNpemVDb2x1bW5zVG9GaXQoKTtcbiAgICB9XG5cbiAgICAvKiBQaW4gY29sdW1ucyBsZWZ0ICovXG4gICAgY29uc3QgZmlsdGVyZWRQaW5uZWRDb2x1bW5zID0gcGlubmVkQ29sdW1uc1xuICAgICAgPyBwaW5uZWRDb2x1bW5zLmZpbHRlcigoY29sOiBzdHJpbmcpID0+IGNvbCAhPT0gdGhpcy5DSEVDS0JPWF9TRUxFQ1RJT05fQ09MX0lEKVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IGNvbHVtbnNPcmRlclxuICAgICAgPyBjb2x1bW5zT3JkZXIuZmlsdGVyKChjb2w6IHN0cmluZykgPT4gY29sICE9PSB0aGlzLkNIRUNLQk9YX1NFTEVDVElPTl9DT0xfSUQpXG4gICAgICA6IG51bGw7XG4gICAgc2l6ZShmaWx0ZXJlZFBpbm5lZENvbHVtbnMpID4gMFxuICAgICAgPyBjb2x1bW5zLnNldENvbHVtbnNQaW5uZWQoZmlsdGVyZWRQaW5uZWRDb2x1bW5zLCAnbGVmdCcpXG4gICAgICA6IGZpbHRlcmVkQ29sdW1ucyAmJiBjb2x1bW5zLnNldENvbHVtbnNQaW5uZWQoZmlsdGVyZWRDb2x1bW5zLCBudWxsKTtcblxuICAgIC8qIE9yZGVyIGNvbHVtbnMgKi9cbiAgICBjb2x1bW5zT3JkZXIgJiYgY29sdW1ucy5tb3ZlQ29sdW1ucyhjb2x1bW5zT3JkZXIsIDApO1xuICB9XG5cbiAgZ2V0U2V0dGluZ3NEaWZmKCk6IFBhcnRpYWw8RGF0b0dyaWRTZXR0aW5ncz4ge1xuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEN1cnJlbnRHcmlkU2V0dGluZ3MoKTtcbiAgICByZXR1cm4gZGlmZihjdXJyZW50U3RhdGUsIHRoaXMuaW5pdGlhbFNldHRpbmdzKTtcbiAgfVxuXG4gIHJlc2V0VGFibGVTZXR0aW5ncygpIHtcbiAgICBjb25zdCB7IGZpbHRlciwgLi4ucmVzdCB9ID0gdGhpcy5pbml0aWFsU2V0dGluZ3M7XG4gICAgY29uc3QgeyBjb2x1bW5zIH0gPSB0aGlzLmFwaTtcbiAgICBjb25zdCBvcmlnaW5hbENvbFNpemVzID0gZ2V0Q29sdW1uc1NpemVzKGNvbHVtbnMuZ2V0QWxsR3JpZENvbHVtbnMoKSwgdHJ1ZSk7XG4gICAgY29uc3QgZ3JpZEFsaWdubWVudCA9IGlzRW1wdHkob3JpZ2luYWxDb2xTaXplcykgPyByZXN0LmdyaWRBbGlnbm1lbnQgOiBEYXRvR3JpZEFsaWdubWVudC5DVVNUT007XG4gICAgY29uc3QgbmV3U2V0dGluZ3MgPSB7IC4uLnJlc3QsIGNvbHVtbnNTaXplczogb3JpZ2luYWxDb2xTaXplcywgZ3JpZEFsaWdubWVudCB9O1xuICAgIHRoaXMudXBkYXRlU2V0dGluZ3MobmV3U2V0dGluZ3MpO1xuICAgIHRoaXMubG9hZFNhdmVkU2V0dGluZ3MobmV3U2V0dGluZ3MpO1xuICAgIHRoaXMuc2F2ZVNldHRpbmdzVG9TZXJ2ZXIoeyBmaWx0ZXIgfSk7XG4gIH1cblxuICBpbml0U2V0dGluZ3Moc2F2ZWRTZXR0aW5nczogUGFydGlhbDxEYXRvR3JpZFNldHRpbmdzPikge1xuICAgIHRoaXMuaW5pdGlhbFNldHRpbmdzID0gdGhpcy5ncmlkUXVlcnkuZ2V0Q3VycmVudEdyaWRTZXR0aW5ncygpO1xuICAgIHRoaXMudXBkYXRlU2V0dGluZ3Moc2F2ZWRTZXR0aW5ncyk7XG4gICAgdGhpcy5sb2FkU2F2ZWRTZXR0aW5ncyhzYXZlZFNldHRpbmdzKTtcbiAgfVxuXG4gIG5vdGlmeUZpbHRlclVwZGF0ZSgpIHtcbiAgICBjb25zdCB3YXRjaCA9IFt0aGlzLmdyaWRSZWYuZmlsdGVyQ2hhbmdlZC5hc09ic2VydmFibGUoKV07XG4gICAgaWYgKHRoaXMuZ3JpZFF1ZXJ5LmlzU2VydmVyU2lkZSkge1xuICAgICAgd2F0Y2gucHVzaCh0aGlzLmdyaWRRdWVyeS5zZXJ2ZXJEYXRhTG9hZGVkJCk7XG4gICAgICB0aGlzLnNldExvYWRpbmcodHJ1ZSk7XG4gICAgfVxuICAgIGNvbWJpbmVMYXRlc3Qod2F0Y2gpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zdCByb3dzQWZ0ZXJGaWx0ZXIgPSB0aGlzLmFwaS5ncmlkLmdldERpc3BsYXllZFJvd0NvdW50KCk7XG4gICAgICAgIHRoaXMuc2V0T3ZlcmxheShyb3dzQWZ0ZXJGaWx0ZXIgPT09IDApO1xuICAgICAgfSk7XG4gICAgdGhpcy5hcGkuZ3JpZC5vbkZpbHRlckNoYW5nZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTZXJ2ZXJSZXF1ZXN0RmlsdGVycyhmaWx0ZXI6IERhdG9HcmlkRmlsdGVyc01hcCk6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVycyB7XG4gICAgY29uc3QgY29sdW1uc0ZpbHRlcnM6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVycyA9IHt9O1xuICAgIGZvciAoY29uc3QgW2NvbHVtbiwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZpbHRlcikpIHtcbiAgICAgIGNvbnN0IHsgYnlWYWx1ZSwgY29uZGl0aW9uYWwgfSA9IHZhbHVlO1xuICAgICAgaWYgKGJ5VmFsdWUpIHtcbiAgICAgICAgY29sdW1uc0ZpbHRlcnNbY29sdW1uXSA9IHtcbiAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5BTkQsXG4gICAgICAgICAgZmlsdGVyczogW2J5VmFsdWVdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoY29uZGl0aW9uYWwpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uYWxGaWx0ZXIgPSB7XG4gICAgICAgICAgb3BlcmF0b3I6IGNvbmRpdGlvbmFsLm9wZXJhdG9yLFxuICAgICAgICAgIGZpbHRlcnM6IGNvbmRpdGlvbmFsLmNvbmRpdGlvbnMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBjb25kaXRpb24sIHZhbHVlIH0gPSBpdGVtO1xuICAgICAgICAgICAgaWYgKGNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0UpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb25kaXRpb24sXG4gICAgICAgICAgICAgICAgc3RhcnQ6IHZhbHVlLFxuICAgICAgICAgICAgICAgIGVuZDogKGl0ZW0gYXMgRGF0b0dyaWRSYW5nZUZpbHRlckNvbmRpdGlvbikucmFuZ2VFbmRcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpdGVtIGFzIERhdG9HcmlkRmlsdGVyQ29uZGl0aW9uO1xuICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICAgIGlmIChieVZhbHVlKSB7XG4gICAgICAgICAgY29sdW1uc0ZpbHRlcnNbY29sdW1uXS5maWx0ZXJzLnB1c2goY29uZGl0aW9uYWxGaWx0ZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbHVtbnNGaWx0ZXJzW2NvbHVtbl0gPSBjb25kaXRpb25hbEZpbHRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb2x1bW5zRmlsdGVycztcbiAgfVxuXG4gIGJ1aWxkU2VydmVyUmVxdWVzdEZpbHRlcnNfdjJfMShncmlkQ29sdW1uczogRGF0b0dyaWRDb2x1bW5EZWZbXSk6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyIHtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmdyaWRRdWVyeS5nZXRGaWx0ZXIoKTtcbiAgICBjb25zdCBzZWFyY2hUZXJtID0gdGhpcy5ncmlkUXVlcnkuZ2V0U2VhcmNoVGVybSgpO1xuXG4gICAgbGV0IGNvbHVtbkZpbHRlcnMgPSB0aGlzLmJ1aWxkU2VydmVyQ29sdW1uRmlsdGVyc192Ml8xKGZpbHRlcik7XG4gICAgaWYgKGNvbHVtbkZpbHRlcnMuZXZlcnkoKHsgb3BlcmF0b3IgfTogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXIpID0+IG9wZXJhdG9yID09PSBPcGVyYXRvclR5cGVzLkFORCkpIHtcbiAgICAgIGNvbnN0IGZsYXR0ZW5lZEZpbHRlcnMgPSBjb2x1bW5GaWx0ZXJzXG4gICAgICAgIC5tYXAoKHsgZmlsdGVycyB9OiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlcikgPT4gZmlsdGVycylcbiAgICAgICAgLnJlZHVjZSgoYXJyLCByZXMpID0+IHJlcy5jb25jYXQoYXJyKSwgW10pO1xuICAgICAgY29sdW1uRmlsdGVycyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvclR5cGVzLkFORCxcbiAgICAgICAgICBmaWx0ZXJzOiBmbGF0dGVuZWRGaWx0ZXJzXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtbkZpbHRlcjogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXIgPVxuICAgICAgc2l6ZShjb2x1bW5GaWx0ZXJzKSA+IDFcbiAgICAgICAgPyB7IG9wZXJhdG9yOiBPcGVyYXRvclR5cGVzLkFORCwgZmlsdGVyczogY29sdW1uRmlsdGVycyB9XG4gICAgICAgIDogc2l6ZShjb2x1bW5GaWx0ZXJzKSA9PT0gMVxuICAgICAgICA/IGNvbHVtbkZpbHRlcnNbMF1cbiAgICAgICAgOiBudWxsO1xuICAgIGlmICghc2VhcmNoVGVybSkge1xuICAgICAgcmV0dXJuIGNvbHVtbkZpbHRlcjtcbiAgICB9XG4gICAgY29uc3QgeyBpbmNsdWRlSGlkZGVuQ29sdW1uc0luU2VhcmNoIH0gPSB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpO1xuICAgIGNvbnN0IHNlYXJjaGFibGVDb2x1bW5zID0gZ3JpZENvbHVtbnMuZmlsdGVyKChjb2xEZWY6IERhdG9HcmlkQ29sdW1uRGVmKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBjb2xEZWYuaW5jbHVkZUluU2VhcmNoICYmIChpbmNsdWRlSGlkZGVuQ29sdW1uc0luU2VhcmNoIHx8IHRoaXMuYXBpLmNvbHVtbnMuZ2V0Q29sdW1uKGNvbERlZi5jb2xJZCkuaXNWaXNpYmxlKCkpXG4gICAgICApO1xuICAgIH0pO1xuICAgIGNvbnN0IHNlYXJjaEZpbHRlcnM6IFNlcnZlclNpZGVQYWdpbmF0aW9uQ29uZGl0aW9uW10gPSBzZWFyY2hhYmxlQ29sdW1ucy5tYXAoKHsgZmllbGQgfTogRGF0b0dyaWRDb2x1bW5EZWYpID0+ICh7XG4gICAgICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLkNPTlRBSU5TLFxuICAgICAgdmFsdWU6IHNlYXJjaFRlcm0sXG4gICAgICBjb2x1bW46IGZpZWxkXG4gICAgfSkpO1xuICAgIGNvbnN0IHNlYXJjaEZpbHRlcjogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXIgPVxuICAgICAgc2l6ZShzZWFyY2hGaWx0ZXJzKSA+IDAgPyB7IG9wZXJhdG9yOiBPcGVyYXRvclR5cGVzLk9SLCBmaWx0ZXJzOiBzZWFyY2hGaWx0ZXJzIH0gOiBudWxsO1xuICAgIGlmICghY29sdW1uRmlsdGVyKSB7XG4gICAgICByZXR1cm4gc2VhcmNoRmlsdGVyO1xuICAgIH1cbiAgICByZXR1cm4geyBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5BTkQsIGZpbHRlcnM6IFtjb2x1bW5GaWx0ZXIsIHNlYXJjaEZpbHRlcl0gfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTZXJ2ZXJDb2x1bW5GaWx0ZXJzX3YyXzEoZmlsdGVyOiBEYXRvR3JpZEZpbHRlcnNNYXApOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlcltdIHtcbiAgICBsZXQgY29sdW1uRmlsdGVyczogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXJbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBbY29sdW1uLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZmlsdGVyKSkge1xuICAgICAgbGV0IGNvbHVtbkZpbHRlcjogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXIgPSBudWxsO1xuICAgICAgY29uc3QgeyBieVZhbHVlLCBjb25kaXRpb25hbCB9ID0gdmFsdWU7XG4gICAgICBpZiAoYnlWYWx1ZSkge1xuICAgICAgICBjb2x1bW5GaWx0ZXIgPSB7XG4gICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELFxuICAgICAgICAgIGZpbHRlcnM6IFt7IGNvbHVtbiwgLi4uYnlWYWx1ZSB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKGNvbmRpdGlvbmFsKSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbmFsRmlsdGVyOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlciA9IHRoaXMuZ2V0U2VydmVyQ29uZGl0aW9uYWxGaWx0ZXIoY29uZGl0aW9uYWwsIGNvbHVtbik7XG4gICAgICAgIGlmIChjb2x1bW5GaWx0ZXIpIHtcbiAgICAgICAgICBjb2x1bW5GaWx0ZXIuZmlsdGVycy5wdXNoKGNvbmRpdGlvbmFsRmlsdGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2x1bW5GaWx0ZXIgPSBjb25kaXRpb25hbEZpbHRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29sdW1uRmlsdGVycy5wdXNoKGNvbHVtbkZpbHRlcik7XG4gICAgfVxuICAgIHJldHVybiBjb2x1bW5GaWx0ZXJzO1xuICB9XG5cbiAgZ2V0RmlsdGVyRm9yU2VydmVyQWN0aW9uT25TZWxlY3RBbGwoKTogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXIge1xuICAgIGNvbnN0IHsgZXhjbHVkZWRGcm9tU2VsZWN0QWxsIH0gPSB0aGlzLmdyaWRRdWVyeS5zZXJ2ZXJTaWRlQ29uZmlnO1xuICAgIGNvbnN0IHsgY29sdW1uRGVmcywgaWRDb2x1bW5LZXkgfSA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEdyaWRPcHRpb25zKCk7XG4gICAgY29uc3QgbWFpbkZpbHRlciA9IHRoaXMuYnVpbGRTZXJ2ZXJSZXF1ZXN0RmlsdGVyc192Ml8xKGNvbHVtbkRlZnMpO1xuICAgIGlmIChpc0VtcHR5KGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbCkpIHtcbiAgICAgIHJldHVybiBtYWluRmlsdGVyO1xuICAgIH1cbiAgICBjb25zdCBleGNsdWRlZFJvd3NGaWx0ZXI6IFNlcnZlclNpZGVQYWdpbmF0aW9uTGlzdENvbmRpdGlvbiA9IHtcbiAgICAgIGNvbmRpdGlvbjogRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0lOX0xJU1QsXG4gICAgICB2YWx1ZXM6IGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbCxcbiAgICAgIGNvbHVtbjogaWRDb2x1bW5LZXlcbiAgICB9O1xuICAgIGNvbnN0IGZpbHRlcnMgPSBtYWluRmlsdGVyID8gW21haW5GaWx0ZXIsIGV4Y2x1ZGVkUm93c0ZpbHRlcl0gOiBbZXhjbHVkZWRSb3dzRmlsdGVyXTtcbiAgICByZXR1cm4geyBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5BTkQsIGZpbHRlcnMgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VydmVyQ29uZGl0aW9uYWxGaWx0ZXIoXG4gICAgY29uZGl0aW9uYWxGaWx0ZXI6IERhdG9HcmlkQ29uZGl0aW9uYWxGaWx0ZXIsXG4gICAgY29sdW1uOiBzdHJpbmdcbiAgKTogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXIge1xuICAgIHJldHVybiB7XG4gICAgICBvcGVyYXRvcjogY29uZGl0aW9uYWxGaWx0ZXIub3BlcmF0b3IsXG4gICAgICBmaWx0ZXJzOiBjb25kaXRpb25hbEZpbHRlci5jb25kaXRpb25zLm1hcChpdGVtID0+IHtcbiAgICAgICAgY29uc3QgeyBjb25kaXRpb24sIHZhbHVlIH0gPSBpdGVtO1xuICAgICAgICBpZiAoY29uZGl0aW9uID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9SQU5HRSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb25kaXRpb24sXG4gICAgICAgICAgICBzdGFydDogdmFsdWUsXG4gICAgICAgICAgICBlbmQ6IChpdGVtIGFzIERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb24pLnJhbmdlRW5kLFxuICAgICAgICAgICAgY29sdW1uXG4gICAgICAgICAgfSBhcyBTZXJ2ZXJTaWRlUGFnaW5hdGlvblJhbmdlQ29uZGl0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25kaXRpb24gPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLklTX0VNUFRZIHx8IGNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0VNUFRZKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbmRpdGlvbjogRGF0b0ZpbHRlckNvbmRpdGlvbnMuSVNfRU1QVFksXG4gICAgICAgICAgICB2YWx1ZTogY29uZGl0aW9uID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JU19FTVBUWSA/ICd0cnVlJyA6ICdmYWxzZScsXG4gICAgICAgICAgICBjb2x1bW5cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25kaXRpb24gPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLklTX05VTEwgfHwgY29uZGl0aW9uID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfTlVMTCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLklTX05VTEwsXG4gICAgICAgICAgICB2YWx1ZTogY29uZGl0aW9uID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JU19OVUxMID8gJ3RydWUnIDogJ2ZhbHNlJyxcbiAgICAgICAgICAgIGNvbHVtblxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgLi4uaXRlbSwgY29sdW1uIH0gYXMgU2VydmVyU2lkZVBhZ2luYXRpb25Db25kaXRpb247XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VydmVyUmVxdWVzdFNvcnQoc29ydE1vZGVsOiBEYXRvR3JpZFNvcnRbXSk6IERhdG9HcmlkU2VydmVyU29ydFtdIHtcbiAgICByZXR1cm4gc29ydE1vZGVsLm1hcCgoeyBjb2xJZCwgc29ydCB9KSA9PiAoe1xuICAgICAgY29sdW1uOiBjb2xJZCxcbiAgICAgIHNvcnRPcmRlcjogc29ydC50b1VwcGVyQ2FzZSgpIGFzIERhdG9HcmlkU2VydmVyU29ydERpcmVjdGlvblxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRWRpdGFibGVDZWxsQ2xhc3MoXG4gICAgY2VsbENsYXNzVmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdIHwgKChjZWxsQ2xhc3NQYXJhbXM6IENlbGxDbGFzc1BhcmFtcykgPT4gc3RyaW5nIHwgc3RyaW5nW10pXG4gICkge1xuICAgIGlmIChpc05pbChjZWxsQ2xhc3NWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnZGF0by1lZGl0YWJsZS1jZWxsJztcbiAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24oY2VsbENsYXNzVmFsdWUpKSB7XG4gICAgICByZXR1cm4gY2VsbENsYXNzUGFyYW1zID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RWRpdGFibGVDbGFzc0FycmF5KGNlbGxDbGFzc1ZhbHVlKGNlbGxDbGFzc1BhcmFtcykpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0RWRpdGFibGVDbGFzc0FycmF5KGNlbGxDbGFzc1ZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RWRpdGFibGVDbGFzc0FycmF5KGN1cnJlbnRDbGFzczogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgY2VsbENsYXNzID0gY29lcmNlQXJyYXkoY3VycmVudENsYXNzKTtcbiAgICBjZWxsQ2xhc3MucHVzaCgnZGF0by1lZGl0YWJsZS1jZWxsJyk7XG4gICAgcmV0dXJuIGNlbGxDbGFzcztcbiAgfVxuXG4gIHNlbGVjdEFsbEN1cnJlbnRQYWdlUm93cyhpc1NlbGVjdGVkID0gdHJ1ZSwgY29uc2lkZXJFeGNsdWRlZCA9IGZhbHNlKSB7XG4gICAgbGV0IHJvd3NGb3JTZWxlY3Rpb24gPSB0aGlzLmdyaWRRdWVyeS5nZXRDdXJyZW50UGFnZVJvd3MoKTtcbiAgICBpZiAoY29uc2lkZXJFeGNsdWRlZCkge1xuICAgICAgY29uc3QgeyBleGNsdWRlZEZyb21TZWxlY3RBbGwgfSA9IHRoaXMuZ3JpZFF1ZXJ5LnNlcnZlclNpZGVDb25maWc7XG4gICAgICBpZiAoIWlzRW1wdHkoZXhjbHVkZWRGcm9tU2VsZWN0QWxsKSkge1xuICAgICAgICByb3dzRm9yU2VsZWN0aW9uID0gcm93c0ZvclNlbGVjdGlvbi5maWx0ZXIoKHsgaWQgfTogUm93Tm9kZSkgPT4gIWV4Y2x1ZGVkRnJvbVNlbGVjdEFsbC5pbmNsdWRlcyhpZCkpO1xuICAgICAgfVxuICAgIH1cbiAgICBpc1NlbGVjdGVkID8gdGhpcy5zZWxlY3RSb3dzKHJvd3NGb3JTZWxlY3Rpb24pIDogdGhpcy5kZXNlbGVjdFJvd3Mocm93c0ZvclNlbGVjdGlvbik7XG4gIH1cblxuICBkZXNlbGVjdEFsbFJvd3MoKSB7XG4gICAgdGhpcy5hcGkuZ3JpZC5kZXNlbGVjdEFsbCgpO1xuICAgIGlmICh0aGlzLmdyaWRRdWVyeS5pc1NlcnZlclNlbGVjdEFsbFJvd3NFbmFibGVkKSB7XG4gICAgICB0aGlzLnNldFNlcnZlclNpZGVQYWdpbmF0aW9uKHsgc2VsZWN0QWxsUm93c0VuYWJsZWQ6IGZhbHNlLCBleGNsdWRlZEZyb21TZWxlY3RBbGw6IFtdIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJlc29sdmVSb3dBY3Rpb25zVmlzaWJpbGl0eSgpIHtcbiAgICB0aGlzLmdyaWRRdWVyeS5fcm93QWN0aW9uVmlzaWJpbGl0eUNoYW5nZWQubmV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gcGl2b3RpbmcsXG4gICAqIHdlIGFkZCB0aGUgZmllbGQgbmFtZSB0byB0aGUgY29sdW1uIGhlYWRlciBjbGFzcyBpbiBvcmRlciB0byBhY2Nlc3MgaXQgdGhyb3VnaCB0aGUgYXV0byBnZW5lcmF0ZWQgcGl2b3QgY29sdW1uLlxuICAgKi9cbiAgcHJpdmF0ZSBpbml0UGl2b3RTZWNvbmRhcnlDb2xzUHJvY2Vzcyh7IGdyaWRPcHRpb25zIH06IE5vcm1hbGl6ZU9wdGlvbnNQYXJhbXMpIHtcbiAgICAvKiogVXNlIHByb2Nlc3NQaXZvdFJlc3VsdENvbERlZiBmcm9tIHZlciAyOCAqL1xuICAgIGdyaWRPcHRpb25zLnByb2Nlc3NTZWNvbmRhcnlDb2xEZWYgPSBjb2xEZWYgPT4ge1xuICAgICAgY29uc3QgdXNlclByb3ZpZGVkQ29sRGVmID0gY29sRGVmLnBpdm90VmFsdWVDb2x1bW4gJiYgY29sRGVmLnBpdm90VmFsdWVDb2x1bW4uZ2V0VXNlclByb3ZpZGVkQ29sRGVmKCk7XG5cbiAgICAgIGlmICh1c2VyUHJvdmlkZWRDb2xEZWYpIHtcbiAgICAgICAgY29sRGVmLmZpbHRlciA9IHVzZXJQcm92aWRlZENvbERlZi5maWx0ZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2xEZWYucGl2b3RLZXlzKSB7XG4gICAgICAgIGNvbERlZi5waXZvdEtleXMgPSBjb2xEZWYucGl2b3RLZXlzLm1hcChrZXkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZEtleSA9IHRyeVBhcnNlUGl2b3RWYWx1ZShrZXkpO1xuXG4gICAgICAgICAgcmV0dXJuIChwYXJzZWRLZXkgJiYgcGFyc2VkS2V5LnZhbHVlKSB8fCAnJztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qKiBVc2UgcHJvY2Vzc1Bpdm90UmVzdWx0Q29sR3JvdXBEZSBmcm9tIHZlciAyOCAqL1xuICAgIGdyaWRPcHRpb25zLnByb2Nlc3NTZWNvbmRhcnlDb2xHcm91cERlZiA9IChjb2xHcm91cERlZjogQ29sR3JvdXBEZWYpID0+IHtcbiAgICAgIGlmIChjb2xHcm91cERlZi5oZWFkZXJOYW1lKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gdHJ5UGFyc2VQaXZvdFZhbHVlKGNvbEdyb3VwRGVmLmhlYWRlck5hbWUpO1xuXG4gICAgICAgIGlmIChwYXJzZWRWYWx1ZSkge1xuICAgICAgICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlIH0gPSBwYXJzZWRWYWx1ZTtcblxuICAgICAgICAgIGNvbEdyb3VwRGVmLmhlYWRlckNsYXNzID0gW2ZpZWxkXTtcbiAgICAgICAgICBjb2xHcm91cERlZi5oZWFkZXJOYW1lID0gdmFsdWU7XG5cbiAgICAgICAgICBpZiAoY29sR3JvdXBEZWYuY2hpbGRyZW4gJiYgY29sR3JvdXBEZWYuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29sR3JvdXBEZWYuaGVhZGVyQ2xhc3MucHVzaCgnZ3JvdXAtcGl2b3QtY2VsbCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjb2xHcm91cERlZi5jaGlsZHJlbikge1xuICAgICAgICBjb25zdCBbY29sQ2hpbGRdOiBhbnkgPSBjb2xHcm91cERlZi5jaGlsZHJlbjtcbiAgICAgICAgY29uc3QgcGl2b3RUb3RhbENvbHVtbklkcyA9IGNvbENoaWxkICYmIGNvbENoaWxkLnBpdm90VG90YWxDb2x1bW5JZHM7XG5cbiAgICAgICAgaWYgKHBpdm90VG90YWxDb2x1bW5JZHMgJiYgcGl2b3RUb3RhbENvbHVtbklkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29sR3JvdXBEZWYuaGVhZGVyQ2xhc3MgPSBbJ3RvdGFsLXBpdm90LWNlbGwnXTtcbiAgICAgICAgICBjb2xHcm91cERlZi5oZWFkZXJOYW1lID0gdGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKCdjb3JlLnRvdGFsJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbEdyb3VwRGVmLmhlYWRlckNsYXNzID0gWydlbXB0eS1waXZvdC1oZWFkZXInXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbEdyb3VwRGVmLnBpdm90S2V5cykge1xuICAgICAgICBjb2xHcm91cERlZi5waXZvdEtleXMgPSBjb2xHcm91cERlZi5waXZvdEtleXMubWFwKGtleSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkS2V5ID0gdHJ5UGFyc2VQaXZvdFZhbHVlKGtleSk7XG5cbiAgICAgICAgICByZXR1cm4gKHBhcnNlZEtleSAmJiBwYXJzZWRLZXkudmFsdWUpIHx8ICcnO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQaXZvdE1vZGVSb3dzPFQ+KGRhdGE6IFRbXSkge1xuICAgIGNvbnN0IHBpdm90Q29sdW1ucyA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEFsbFBpdm90Q29sdW1ucygpO1xuICAgIGNvbnN0IGNvbnZlcnRlZERhdGEgPSBkYXRhLm1hcCgoY3VycmVudFZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbWFwcGVkVmFsdWVzID0geyAuLi5jdXJyZW50VmFsdWUgfTtcblxuICAgICAgZm9yIChjb25zdCBjb2wgb2YgcGl2b3RDb2x1bW5zKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gY29sLmdldENvbERlZigpLmZpZWxkO1xuICAgICAgICBjb25zdCBwaXZvdFZhbHVlOiBQaXZvdENvbHVtbkRhdGEgPSB7IGZpZWxkLCB2YWx1ZTogY3VycmVudFZhbHVlW2ZpZWxkXSB9O1xuXG4gICAgICAgIG1hcHBlZFZhbHVlc1tmaWVsZF0gPSBKU09OLnN0cmluZ2lmeShwaXZvdFZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1hcHBlZFZhbHVlcztcbiAgICB9KTtcblxuICAgIHRoaXMuYXBpLmdyaWQuc2V0Um93RGF0YShjb252ZXJ0ZWREYXRhKTtcbiAgfVxuXG4gIC8qKiBObyBkZWNsYXJlZCBpbnRlcmZhY2UgaW4gY3VycmVudCBncmlkIHZlcnNpb24geWV0LlxuICAgKiAgUmVmZXIgZG9jcyAtIGh0dHBzOi8vd3d3LmFnLWdyaWQuY29tL2FuZ3VsYXItZGF0YS1ncmlkL2NlbGwtc3R5bGVzLyNjZWxsLWNsYXNzLXJ1bGVzICovXG4gIHByaXZhdGUgZ2V0UGl2b3RNb2RlQ2VsbENsYXNzUnVsZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwcmltYXJ5LTAtYmFja2dyb3VuZC1jb2xvcic6IHRoaXMuaXNMZWFmR3JvdXBFdmVuQ2VsbC5iaW5kKHRoaXMpLFxuICAgICAgJ3ByaW1hcnktMTAwLWJhY2tncm91bmQtY29sb3IgcG9pbnRlciBkYXRvLXNpbXBsZS1ib2xkJzogdGhpcy5pc1Jvd0dyb3VwVmFsdWVkQ2VsbC5iaW5kKHRoaXMpXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgaXNMZWFmR3JvdXBFdmVuQ2VsbChwYXJhbXM6IENlbGxDbGFzc1BhcmFtcyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHsgbGVhZkdyb3VwLCBjaGlsZEluZGV4LCByb3dHcm91cEluZGV4IH0gPSBwYXJhbXMubm9kZTtcbiAgICBjb25zdCBjb2xJbmRleCA9IHRoaXMuZ2V0Q2VsbENsYXNzUnVsZUNvbEluZGV4KHBhcmFtcyk7XG5cbiAgICByZXR1cm4gcm93R3JvdXBJbmRleCA8PSBjb2xJbmRleCAmJiBsZWFmR3JvdXAgJiYgY2hpbGRJbmRleCAlIDIgPT09IDA7XG4gIH1cblxuICBwcml2YXRlIGlzUm93R3JvdXBWYWx1ZWRDZWxsKHBhcmFtczogQ2VsbENsYXNzUGFyYW1zKTogYm9vbGVhbiB7XG4gICAgY29uc3QgeyBsZWFmR3JvdXAsIHJvd0dyb3VwSW5kZXggfSA9IHBhcmFtcy5ub2RlO1xuICAgIGNvbnN0IGNvbEluZGV4ID0gdGhpcy5nZXRDZWxsQ2xhc3NSdWxlQ29sSW5kZXgocGFyYW1zKTtcblxuICAgIHJldHVybiByb3dHcm91cEluZGV4IDw9IGNvbEluZGV4ICYmICFsZWFmR3JvdXA7XG4gIH1cblxuICBwcml2YXRlIGdldENlbGxDbGFzc1J1bGVDb2xJbmRleChwYXJhbXM6IENlbGxDbGFzc1BhcmFtcyk6IG51bWJlciB7XG4gICAgY29uc3QgZ3JpZFF1ZXJ5ID0gcGFyYW1zLmNvbERlZi5oZWFkZXJDb21wb25lbnRQYXJhbXMuZ3JpZFF1ZXJ5O1xuXG4gICAgaWYgKGdyaWRRdWVyeSAmJiBncmlkUXVlcnkuYXBpKSB7XG4gICAgICBjb25zdCB7IGNvbHVtbnMgfSA9IGdyaWRRdWVyeS5hcGkgYXMgRGF0b0dyaWRBcGk7XG4gICAgICBjb25zdCBhbGxEaXNwbGF5ZWRDb2x1bW5zID0gY29sdW1ucy5nZXRBbGxEaXNwbGF5ZWRDb2x1bW5zKCk7XG4gICAgICBjb25zdCBkaXNwbGF5ZWRDb2x1bW4gPSBhbGxEaXNwbGF5ZWRDb2x1bW5zLmZpbmQoY29sID0+IGNvbC5nZXRDb2xJZCgpID09PSBwYXJhbXMuY29sRGVmLmNvbElkKTtcblxuICAgICAgcmV0dXJuIGFsbERpc3BsYXllZENvbHVtbnMuaW5kZXhPZihkaXNwbGF5ZWRDb2x1bW4pO1xuICAgIH1cblxuICAgIHJldHVybiAtMTtcbiAgfVxufVxuIl19
|
|
1168
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2NvcmUvIiwic291cmNlcyI6WyJsaWIvZ3JpZC12Mi9ncmlkLXN0b3JlL2dyaWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQXdCLE1BQU0sZUFBZSxDQUFDO0FBZXpFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUNMLG9CQUFvQixFQUtwQixzQkFBc0IsRUFRdkIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBU2xGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBa0IsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RSxPQUFPLEVBSUwsbUJBQW1CLEVBT25CLHVDQUF1QyxFQUN2QyxhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLDJCQUEy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QU8sYUFBYSxJQUFJLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUNqRCxDQUFDO0lBRU8sOENBQXdCLEdBQWhDLFVBQWlDLE1BQXVCO1FBQ3RELElBQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDO1FBRWhFLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDdEIsSUFBQSwrQkFBTyxDQUFrQztZQUNqRCxJQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQzdELElBQU0sZUFBZSxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxVQUFBLEdBQUcsSUFBSSxPQUFBLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBdEMsQ0FBc0MsQ0FBQyxDQUFDO1lBRWhHLE9BQU8sbUJBQW1CLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNaLENBQUM7O2dCQTNxQ2dCLFNBQVM7Z0JBQ0wsU0FBUztnQkFDVCxvQkFBb0I7Z0JBQ2pCLFlBQVk7Z0JBQ2IsV0FBVztnREFDL0IsTUFBTSxTQUFDLHFCQUFxQjtnREFDNUIsTUFBTSxTQUFDLGdCQUFnQjs7SUFoQ2YsV0FBVztRQUR2QixVQUFVLEVBQUU7UUFnQ1IsV0FBQSxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQTtRQUM3QixXQUFBLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO3lDQU5WLFNBQVM7WUFDTCxTQUFTO1lBQ1Qsb0JBQW9CO1lBQ2pCLFlBQVk7WUFDYixXQUFXO09BOUJ2QixXQUFXLENBc3NDdkI7SUFBRCxrQkFBQztDQUFBLEFBdHNDRCxJQXNzQ0M7U0F0c0NZLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSwgUXVlcnlMaXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRvR3JpZEFwaSB9IGZyb20gJy4uL2dyaWQtY29udHJvbGxlci9ncmlkLWNvbnRyb2xsZXIudHlwZXMnO1xuaW1wb3J0IHtcbiAgQ2VsbENsYXNzUGFyYW1zLFxuICBDb2xHcm91cERlZixcbiAgQ29sdW1uLFxuICBHZXRDb250ZXh0TWVudUl0ZW1zUGFyYW1zLFxuICBHcmlkT3B0aW9ucyxcbiAgSUNlbGxSZW5kZXJlclBhcmFtcyxcbiAgSUdldFJvd3NQYXJhbXMsXG4gIFJvd0RhdGFUcmFuc2FjdGlvbixcbiAgUm93Tm9kZSxcbiAgUm93Tm9kZVRyYW5zYWN0aW9uLFxuICBSb3dTZWxlY3RlZEV2ZW50XG59IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcbmltcG9ydCB7IEdyaWRRdWVyeSB9IGZyb20gJy4vZ3JpZC5xdWVyeSc7XG5pbXBvcnQgeyBEYXRvQ29yZUVycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3JzJztcbmltcG9ydCB7IERhdG9UcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0b0N1c3RvbUhlYWRlclRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZC1jdXN0b20taGVhZGVyL2N1c3RvbS1oZWFkZXItdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBEYXRvRmlsdGVyQ29uZGl0aW9ucyxcbiAgRGF0b0dyaWRDb25kaXRpb25hbEZpbHRlcixcbiAgRGF0b0dyaWRFeHRlcm5hbEZpbHRlcixcbiAgRGF0b0dyaWRGaWx0ZXIsXG4gIERhdG9HcmlkRmlsdGVyQ29uZGl0aW9uLFxuICBEYXRvR3JpZEZpbHRlclNlY3Rpb25zLFxuICBEYXRvR3JpZEZpbHRlcnNNYXAsXG4gIERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb24sXG4gIFNlcnZlclNpZGVQYWdpbmF0aW9uQ29uZGl0aW9uLFxuICBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlcixcbiAgU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXJzLFxuICBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkxpc3RDb25kaXRpb24sXG4gIFNlcnZlclNpZGVQYWdpbmF0aW9uUmFuZ2VDb25kaXRpb25cbn0gZnJvbSAnLi4vZ3JpZC1maWx0ZXIvZ3JpZC1maWx0ZXIudHlwZXMnO1xuaW1wb3J0IHsgY29lcmNlQXJyYXkgfSBmcm9tICcuLi8uLi91dGlscy9jb2VyY2lvbic7XG5pbXBvcnQgeyBpc0VtcHR5LCBpc0Z1bmN0aW9uLCBpc05pbCwgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscy92YWxpZGF0b3JzJztcbmltcG9ydCB7IHZhbGlkYXRlRmlsdGVyIH0gZnJvbSAnLi4vZ3JpZC1maWx0ZXIvZmlsdGVyLXZhbGlkYXRvcic7XG5pbXBvcnQgeyBBZ0dyaWRBbmd1bGFyIH0gZnJvbSAnYWctZ3JpZC1hbmd1bGFyJztcbmltcG9ydCB7IEljb25SZWdpc3RyeSwgU3ZnUmVnaXN0cnkgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9pY29uLXJlZ2lzdHJ5JztcbmltcG9ydCB7IGdldFZpc2libGVBY3Rpb25zLCB0b29sYmFyQWN0aW9uVG9Db250ZXh0QWN0aW9uIH0gZnJvbSAnLi4vZ3JpZC12Mi51dGlsJztcbmltcG9ydCB7XG4gIERhdG9HcmlkU2V0dGluZ3MsXG4gIE5vcm1hbGl6ZU9wdGlvbnNQYXJhbXMsXG4gIFBpdm90Q29sdW1uRGF0YSxcbiAgU2VydmVyU2lkZVBhZ2luYXRpb25Db25maWcsXG4gIFN1Y2Nlc3NXcmFwcGVyUGFyYW1zXG59IGZyb20gJy4vZ3JpZC5zdG9yZS50eXBlcyc7XG5pbXBvcnQgeyBSb3dBY3Rpb24gfSBmcm9tICcuLi9ncmlkLXRvb2xiYXIvZ3JpZC10b29sYmFyLnR5cGVzJztcbmltcG9ydCB7IGNvcHlUb0NsaXBib2FyZCB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY2xpcGJvYXJkLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBHcmlkU3RvcmUgfSBmcm9tICcuL2dyaWQuc3RvcmUnO1xuaW1wb3J0IHsgREFUT19HUklEX1NUT1JBR0VfQVBJLCBHcmlkU3RvcmFnZUFQSSB9IGZyb20gJy4uL2dyaWQtc2V0dGluZ3MnO1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29udmVydGVyUGFyYW1zLFxuICBEYXRvR3JpZEFsaWdubWVudCxcbiAgRGF0b0dyaWRDb2x1bW5EZWYsXG4gIERhdG9HcmlkQ29sdW1uVHlwZXMsXG4gIERhdG9HcmlkR2V0Um93c1BhcmFtcyxcbiAgRGF0b0dyaWRPcHRpb25zLFxuICBEYXRvR3JpZFNlcnZlclNvcnQsXG4gIERhdG9HcmlkU2VydmVyU29ydERpcmVjdGlvbixcbiAgRGF0b0dyaWRTb3J0LFxuICBEYXRvR3JpZFRyZWVDb25maWcsXG4gIGVkaXRhYmxlQ2VsbFJlbmRlcmVyV2l0aFNlYXJjaEhpZ2hsaWdodCxcbiAgR3JpZE1pbldpZHRocyxcbiAgR3JpZFJvd1NlbGVjdGlvblR5cGUsXG4gIHNlYXJjaEhpZ2hsaWdodENlbGxSZW5kZXJlclxufSBmcm9tICcuLi9ncmlkL2dyaWQtdjIudHlwZXMnO1xuXG5pbXBvcnQgeyBjb252ZXJ0VG9UcmVlRGF0YSwgZGVmYXVsdEdyaWRPcHRpb25zLCBkZWZhdWx0R3JpZFRyZWVMYWJlbCB9IGZyb20gJy4uL2dyaWQvZ3JpZC12Mi5jb25maWcnO1xuaW1wb3J0IHsgZGlmZiB9IGZyb20gJy4uLy4uL3V0aWxzL29iamVjdCc7XG5pbXBvcnQgeyB1bnRpbERlc3Ryb3llZCB9IGZyb20gJ25neC10YWtlLXVudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHsgQ29yZUV2ZW50TG9nZ2VyLCBDb3JlRXZlbnRUeXBlcywgREFUT19DT1JFX0xPR0dFUiB9IGZyb20gJy4uLy4uL2V2ZW50LWxvZ2dlcic7XG5pbXBvcnQgeyBIYXNoTWFwIH0gZnJvbSAnLi4vLi4vdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHsgc2l6ZSB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbGxlY3Rpb24nO1xuaW1wb3J0IHsgT3BlcmF0b3JUeXBlcyB9IGZyb20gJy4uLy4uL29wZXJhdG9yLXRvZ2dsZXIvb3BlcmF0b3ItdG9nZ2xlci50eXBlcyc7XG5pbXBvcnQgeyBkZWVwbWVyZ2UgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC9kZWVwLW1lcmdlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRyaWdnZXJXaW5kb3dSZXNpemUgfSBmcm9tICcuLi8uLi91dGlscy91c2VyLWFnZW50JztcbmltcG9ydCB7IGdldENvbEZpZWxkLCBnZXRDb2x1bW5zU2l6ZXMsIGlzSHRtbEFsbG93ZWRGb3JDb2wsIHRyeVBhcnNlUGl2b3RWYWx1ZSB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBEYXRvR3JpZE11bHRpU2VsZWN0Q29sdW1uSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZC1jb2x1bW4taGVhZGVyL2dyaWQtbXVsdGktc2VsZWN0LWhlYWRlci9ncmlkLW11bHRpLXNlbGVjdC1oZWFkZXIuY29tcG9uZW50JztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEdyaWRTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgYXBpOiBEYXRvR3JpZEFwaTtcbiAgdHJlZUNvbmZpZzogRGF0b0dyaWRUcmVlQ29uZmlnID0gZGVmYXVsdEdyaWRUcmVlTGFiZWw7XG4gIGlzUGl2b3RNb2RlOiBib29sZWFuO1xuXG4gIC8qKiBAaW50ZXJuYWwgLSB1c2VkIGZvciBzZXJ2ZXIgc2lkZSBieSB2YWx1ZSBmaWx0ZXIgKi9cbiAgX29yaWdpbmFsR2V0Um93czogKHBhcmFtczogRGF0b0dyaWRHZXRSb3dzUGFyYW1zKSA9PiB2b2lkO1xuICBwcml2YXRlIGluaXRpYWxTZXR0aW5nczogRGF0b0dyaWRTZXR0aW5ncztcbiAgcHJpdmF0ZSBncmlkTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIGdyaWRSZWY6IEFnR3JpZEFuZ3VsYXI7XG4gIHByaXZhdGUgY3VzdG9tSGVhZGVyc1RlbXBsYXRlczogUXVlcnlMaXN0PERhdG9DdXN0b21IZWFkZXJUZW1wbGF0ZUNvbXBvbmVudD47XG4gIHByaXZhdGUgaXNUcmVlRGF0YTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBwYWdlTnVtYmVyVG9SZXR1cm5BZnRlclJlZnJlc2ggPSAtMTtcbiAgcHJpdmF0ZSBsYXN0VG90YWxSb3dzOiBudW1iZXI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBDSEVDS0JPWF9TRUxFQ1RJT05fQ09MX0lEID0gJ2dyaWQtY2hlY2tib3gtc2VsZWN0aW9uJztcblxuICBzZXQgdHJlZURhdGEoaXNUcmVlRGF0YTogYm9vbGVhbikge1xuICAgIHRoaXMuaXNUcmVlRGF0YSA9IGlzVHJlZURhdGE7XG4gIH1cblxuICBnZXQgdHJlZURhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNUcmVlRGF0YTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RvcmU6IEdyaWRTdG9yZSxcbiAgICBwcml2YXRlIGdyaWRRdWVyeTogR3JpZFF1ZXJ5LFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBEYXRvVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGljb25SZWdpc3RyeTogSWNvblJlZ2lzdHJ5LFxuICAgIHByaXZhdGUgc3ZnUmVnaXN0cnk6IFN2Z1JlZ2lzdHJ5LFxuICAgIEBJbmplY3QoREFUT19HUklEX1NUT1JBR0VfQVBJKSBwcml2YXRlIHN0b3JhZ2VBUEk6IEdyaWRTdG9yYWdlQVBJLFxuICAgIEBJbmplY3QoREFUT19DT1JFX0xPR0dFUikgcHJpdmF0ZSBsb2dnZXI6IENvcmVFdmVudExvZ2dlclxuICApIHt9XG5cbiAgbmdPbkRlc3Ryb3koKSB7fVxuXG4gIC8qKiBAaW50ZXJuYWwgLSB1c2VkIHRvIGluaXQgdGhlIHNlcnZpY2UgKi9cbiAgX3NldEFwaShhcGk6IERhdG9HcmlkQXBpLCBncmlkUmVmOiBBZ0dyaWRBbmd1bGFyKSB7XG4gICAgdGhpcy5hcGkgPSBhcGk7XG4gICAgdGhpcy5ncmlkUmVmID0gZ3JpZFJlZjtcbiAgICB0aGlzLmdyaWROYW1lID0gKGdyaWRSZWYuZ3JpZE9wdGlvbnMgYXMgRGF0b0dyaWRPcHRpb25zKS5ncmlkTmFtZTtcbiAgICB0aGlzLnNldFNlcnZlclNpZGVQYWdpbmF0aW9uKHtcbiAgICAgIGVuYWJsZWQ6IHRoaXMuaXNTZXJ2ZXJTaWRlUGFnaW5hdGlvbihncmlkUmVmLmdyaWRPcHRpb25zKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1NlcnZlclNpZGVQYWdpbmF0aW9uKGdyaWRPcHRpb25zOiBHcmlkT3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBncmlkT3B0aW9ucy5yb3dNb2RlbFR5cGUgPT09ICdpbmZpbml0ZSc7XG4gIH1cblxuICB1cGRhdGVHcmlkQ29udGV4dChjb250ZXh0ID0ge30sIHJlcGxhY2UgPSBmYWxzZSkge1xuICAgIHRoaXMuZ3JpZFF1ZXJ5LmdldEdyaWRPcHRpb25zKCkuY29udGV4dCA9IHJlcGxhY2VcbiAgICAgID8gY29udGV4dFxuICAgICAgOiBkZWVwbWVyZ2UodGhpcy5ncmlkUmVmLmdyaWRPcHRpb25zLmNvbnRleHQgfHwge30sIGNvbnRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBzZWxlY3RSb3dzIGluc3RlYWRcbiAgICogQHBhcmFtIHJvd1xuICAgKi9cbiAgc2V0U2VsZWN0ZWRSb3dzPFQ+KHJvdzogKFQgJiBSb3dOb2RlKSB8IChUW10gJiBSb3dOb2RlW10pKSB7XG4gICAgdGhpcy5zZWxlY3RSb3dzKHJvdyk7XG4gIH1cblxuICBzZWxlY3RSb3dzPFQ+KHJvdzogKFQgJiBSb3dOb2RlKSB8IChUW10gJiBSb3dOb2RlW10pKSB7XG4gICAgY29uc3Qgcm93Tm9kZXMgPSBjb2VyY2VBcnJheShyb3cpLmZpbHRlcihyb3dOb2RlID0+ICFyb3dOb2RlLmlzU2VsZWN0ZWQoKSk7XG4gICAgY29uc3QgbGFzdE5vZGUgPSByb3dOb2Rlcy5wb3AoKTtcbiAgICByb3dOb2Rlcy5mb3JFYWNoKHJvd05vZGUgPT4gcm93Tm9kZS5zZXRTZWxlY3RlZCh0cnVlLCBmYWxzZSwgdHJ1ZSkpO1xuICAgIGlmIChsYXN0Tm9kZSkge1xuICAgICAgbGFzdE5vZGUuc2V0U2VsZWN0ZWQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgZGVzZWxlY3RSb3dzPFQ+KHJvdzogKFQgJiBSb3dOb2RlKSB8IChUW10gJiBSb3dOb2RlW10pKSB7XG4gICAgY29uc3Qgcm93Tm9kZXMgPSBjb2VyY2VBcnJheShyb3cpLmZpbHRlcihyb3dOb2RlID0+IHJvd05vZGUuaXNTZWxlY3RlZCgpKTtcbiAgICBjb25zdCBsYXN0Tm9kZSA9IHJvd05vZGVzLnBvcCgpO1xuICAgIHJvd05vZGVzLmZvckVhY2gocm93Tm9kZSA9PiByb3dOb2RlLnNldFNlbGVjdGVkKGZhbHNlLCBmYWxzZSwgdHJ1ZSkpO1xuICAgIGlmIChsYXN0Tm9kZSkge1xuICAgICAgbGFzdE5vZGUuc2V0U2VsZWN0ZWQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHNldFJvd3M8VD4oZGF0YTogVFtdLCBmaXRDb250YWluZXIgPSBmYWxzZSwgdHJlZUNvbmZpZzogUGFydGlhbDxEYXRvR3JpZFRyZWVDb25maWc+ID0ge30pIHtcbiAgICB0aGlzLmdyaWRRdWVyeS5ncmlkUmVhZHkkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzVHJlZURhdGEpIHtcbiAgICAgICAgdGhpcy50cmVlQ29uZmlnID0ge1xuICAgICAgICAgIC4uLmRlZmF1bHRHcmlkVHJlZUxhYmVsLFxuICAgICAgICAgIC4uLnRyZWVDb25maWdcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdHJlZURhdGUgPSBjb252ZXJ0VG9UcmVlRGF0YShkYXRhLCB0aGlzLnRyZWVDb25maWcpO1xuICAgICAgICB0aGlzLmFwaS5ncmlkLnNldFJvd0RhdGEodHJlZURhdGUpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmlzUGl2b3RNb2RlKSB7XG4gICAgICAgIHRoaXMuc2V0UGl2b3RNb2RlUm93czxUPihkYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYXBpLmdyaWQuc2V0Um93RGF0YShkYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmIChmaXRDb250YWluZXIpIHtcbiAgICAgICAgdGhpcy5maXRHcmlkKCdjb250YWluZXInKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyaWdnZXJXaW5kb3dSZXNpemUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldERhdGFzb3VyY2UoZ2V0Um93czogKHBhcmFtczogRGF0b0dyaWRHZXRSb3dzUGFyYW1zKSA9PiB2b2lkLCByZXR1cm5Ub0N1cnJlbnRQYWdlID0gZmFsc2UsIHNob3dMb2FkaW5nID0gZmFsc2UpIHtcbiAgICByZXR1cm5Ub0N1cnJlbnRQYWdlICYmIHRoaXMudXBkYXRlUGFnZVRvS2VlcE9uUmVmcmVzaFNlcnZlckRhdGEoKTtcbiAgICBzaG93TG9hZGluZyAmJiB0aGlzLnNldExvYWRpbmcodHJ1ZSk7XG4gICAgdGhpcy5fb3JpZ2luYWxHZXRSb3dzID0gZ2V0Um93cztcbiAgICB0aGlzLmFwaS5ncmlkLnNldERhdGFzb3VyY2UoeyBnZXRSb3dzOiB0aGlzLndyYXBHZXRSb3dzKHRoaXMuZ3JpZFF1ZXJ5LmdldEdyaWRPcHRpb25zKCksIGdldFJvd3MpIH0pO1xuICB9XG5cbiAgcmVmcmVzaFNlcnZlckRhdGEoa2VlcEN1cnJlbnRQYWdlID0gZmFsc2UsIHNob3dMb2FkaW5nID0gZmFsc2UpIHtcbiAgICBrZWVwQ3VycmVudFBhZ2UgJiYgdGhpcy51cGRhdGVQYWdlVG9LZWVwT25SZWZyZXNoU2VydmVyRGF0YSgpO1xuICAgIHNob3dMb2FkaW5nICYmIHRoaXMuc2V0TG9hZGluZyh0cnVlKTtcbiAgICB0aGlzLmFwaS5ncmlkLnNldERhdGFzb3VyY2UoeyBnZXRSb3dzOiB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpLmRhdGFzb3VyY2UuZ2V0Um93cyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUGFnZVRvS2VlcE9uUmVmcmVzaFNlcnZlckRhdGEoKSB7XG4gICAgLy8gS2VlcGluZyB0aGUgY3VycmVudCBwYWdlIG9uIHNlcnZlciByZWZyZXNoIGlzIGN1cnJlbnRseSBhdmFpbGFibGUgb25seSB3aGVuIG5vIHBhZ2UgY2xpZW50IGNhY2hpbmcgaXMgZW5hYmxlZFxuICAgIGlmICh0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpLm1heEJsb2Nrc0luQ2FjaGUgPT09IDEpIHtcbiAgICAgIHRoaXMucGFnZU51bWJlclRvUmV0dXJuQWZ0ZXJSZWZyZXNoID0gdGhpcy5hcGkuZ3JpZC5wYWdpbmF0aW9uR2V0Q3VycmVudFBhZ2UoKTtcbiAgICB9XG4gIH1cblxuICBhZGRSb3dzPFQ+KHJvdzogVCwgaW5kZXg/OiBudW1iZXIpOiBSb3dOb2RlVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHJvd3MgPSBjb2VyY2VBcnJheShyb3cpO1xuICAgIGNvbnN0IGRhdGE6IFJvd0RhdGFUcmFuc2FjdGlvbiA9IHsgYWRkOiByb3dzIH07XG4gICAgaWYgKCFpc05pbChpbmRleCkpIHtcbiAgICAgIGRhdGEuYWRkSW5kZXggPSBpbmRleDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYXBpLmdyaWQudXBkYXRlUm93RGF0YShkYXRhKTtcbiAgfVxuXG4gIHVwZGF0ZVJvd3M8VD4ocm93OiBUW10pOiBhbnkge1xuICAgIGNvbnN0IHJvd3MgPSBjb2VyY2VBcnJheShyb3cpO1xuICAgIHJldHVybiB0aGlzLmFwaS5ncmlkLnVwZGF0ZVJvd0RhdGEoeyB1cGRhdGU6IHJvd3MgfSk7XG4gIH1cblxuICB1cGRhdGVSb3dWYWx1ZTxUPihyb3c6IFJvd05vZGUsIGtleTogc3RyaW5nLCBuZXdWYWx1ZTogVCk7XG4gIHVwZGF0ZVJvd1ZhbHVlPFQ+KGlkOiBzdHJpbmcsIGtleTogc3RyaW5nLCBuZXdWYWx1ZTogVCk7XG4gIHVwZGF0ZVJvd1ZhbHVlPFQ+KHJvdzogc3RyaW5nIHwgUm93Tm9kZSwga2V5OiBzdHJpbmcsIG5ld1ZhbHVlOiBUKSB7XG4gICAgY29uc3Qgcm93Tm9kZSA9IGlzU3RyaW5nKHJvdykgPyB0aGlzLmFwaS5ncmlkLmdldFJvd05vZGUocm93KSA6IHJvdztcbiAgICByb3dOb2RlLnNldERhdGFWYWx1ZShrZXksIG5ld1ZhbHVlKTtcbiAgfVxuXG4gIHJlbW92ZVJvd3Mocm93OiBSb3dOb2RlIHwgUm93Tm9kZVtdKTogUm93Tm9kZVRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCByb3dzID0gY29lcmNlQXJyYXkocm93KS5tYXAoKHsgZGF0YSB9KSA9PiBkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5hcGkuZ3JpZC51cGRhdGVSb3dEYXRhKHsgcmVtb3ZlOiByb3dzIH0pO1xuICB9XG5cbiAgcmVtb3ZlU2VsZWN0ZWRSb3dzKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZ3JpZFF1ZXJ5LmdldFNlbGVjdGVkUm93Tm9kZXMoKTtcbiAgICByZXR1cm4gdGhpcy5yZW1vdmVSb3dzKHNlbGVjdGVkUm93cyk7XG4gIH1cblxuICBjbGVhclRhYmxlKCkge1xuICAgIHRoaXMuc2V0Um93cyhbXSk7XG4gIH1cblxuICB1cGRhdGVDb2x1bW5zKGNvbERlZnM6IERhdG9HcmlkQ29sdW1uRGVmIHwgRGF0b0dyaWRDb2x1bW5EZWZbXSwgcmVsb2FkU2V0dGluZ3MgPSBmYWxzZSkge1xuICAgIGlmICghY29sRGVmcykge1xuICAgICAgdGhyb3cgbmV3IERhdG9Db3JlRXJyb3IoJ05vIGNvbHVtbkRlZnMgd2VyZSBwcm92aWRlZC4g8J+VtfCfj7vigI3imYDvuI8nKTtcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHRoaXMubm9ybWFsaXplQ29sdW1ucyhjb2VyY2VBcnJheShjb2xEZWZzKSk7XG4gICAgY29uc3Qgc2F2ZWRTZXR0aW5ncyA9IHJlbG9hZFNldHRpbmdzICYmIHRoaXMuZ3JpZFF1ZXJ5LmdldEN1cnJlbnRHcmlkU2V0dGluZ3MoKTtcbiAgICB0aGlzLmFwaS5ncmlkLnNldENvbHVtbkRlZnMobm9ybWFsaXplZCk7XG4gICAgaWYgKHNhdmVkU2V0dGluZ3MpIHtcbiAgICAgIHRoaXMubG9hZFNhdmVkU2V0dGluZ3Moc2F2ZWRTZXR0aW5ncyk7XG4gICAgfVxuICB9XG5cbiAgbm9ybWFsaXplT3B0aW9ucyhwYXJhbXM6IE5vcm1hbGl6ZU9wdGlvbnNQYXJhbXMpIHtcbiAgICB0aGlzLmN1c3RvbUhlYWRlcnNUZW1wbGF0ZXMgPSBwYXJhbXMuY3VzdG9tSGVhZGVyc1RlbXBsYXRlcztcbiAgICBjb25zdCBoZWFkZXJDb21wb25lbnRQYXJhbXMgPSB7IGdyaWRTZXJ2aWNlOiB0aGlzLCBncmlkUXVlcnk6IHRoaXMuZ3JpZFF1ZXJ5IH07XG4gICAgcGFyYW1zLmdyaWRPcHRpb25zLmF1dG9Hcm91cENvbHVtbkRlZiA9IHtcbiAgICAgIC4uLmhlYWRlckNvbXBvbmVudFBhcmFtcyxcbiAgICAgIC4uLnBhcmFtcy5ncmlkT3B0aW9ucy5hdXRvR3JvdXBDb2x1bW5EZWZcbiAgICB9O1xuXG4gICAgcGFyYW1zLmdyaWRPcHRpb25zLmRlZmF1bHRDb2xEZWYgPSB7XG4gICAgICAuLi5wYXJhbXMuZ3JpZE9wdGlvbnMuZGVmYXVsdENvbERlZixcbiAgICAgIGhlYWRlckNvbXBvbmVudFBhcmFtc1xuICAgIH07XG4gICAgaWYgKHR5cGVvZiBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlU2VhcmNoID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZVNlYXJjaCA9IHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVWMl8xO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVCYWNrZ3JvdW5kID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZUJhY2tncm91bmQgPSBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlVjJfMTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwYXJhbXMuZ3JpZE9wdGlvbnMuc2hvd011bHRpU2VsZWN0aW9uQ2hlY2tib3hlcyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5zaG93TXVsdGlTZWxlY3Rpb25DaGVja2JveGVzID1cbiAgICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZVYyXzEgJiYgcGFyYW1zLmdyaWRPcHRpb25zLnJvd1NlbGVjdGlvbiAhPT0gR3JpZFJvd1NlbGVjdGlvblR5cGUuU0lOR0xFO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVTZWFyY2hIaWdobGlnaHQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlU2VhcmNoSGlnaGxpZ2h0ID1cbiAgICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZVNlYXJjaCAmJiBkZWZhdWx0R3JpZE9wdGlvbnMuZW5hYmxlU2VhcmNoSGlnaGxpZ2h0O1xuICAgIH1cbiAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuY29sdW1uRGVmcyA9IHRoaXMubm9ybWFsaXplQ29sdW1ucyhwYXJhbXMuZ3JpZE9wdGlvbnMuY29sdW1uRGVmcywgcGFyYW1zLmdyaWRPcHRpb25zKTtcblxuICAgIC8qKiBBZGQgY29yZSBmaWx0ZXJzICovXG4gICAgcGFyYW1zLmdyaWRPcHRpb25zLmlzRXh0ZXJuYWxGaWx0ZXJQcmVzZW50ID0gKCkgPT4gdHJ1ZTtcbiAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZG9lc0V4dGVybmFsRmlsdGVyUGFzcyA9IChyb3c6IFJvd05vZGUpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHZhbGlkYXRlRmlsdGVyKHsgcm93LCBhcGk6IHRoaXMuZ3JpZFF1ZXJ5LmFwaS5ncmlkIH0sIHRoaXMuZ3JpZFF1ZXJ5LmdldEZpbHRlcigpKSAmJiB0aGlzLnJvd01hdGNoZXNTZWFyY2gocm93KVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgLyoqIFdyYXAgdGhlIHNlcnZlciBzaWRlIHBhZ2luYXRpb24gZ2V0IHJvd3MgZnVuY3Rpb24gKi9cbiAgICBpZiAodGhpcy5pc1NlcnZlclNpZGVQYWdpbmF0aW9uKHBhcmFtcy5ncmlkT3B0aW9ucykpIHtcbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5ibG9ja0xvYWREZWJvdW5jZU1pbGxpcyA9IDMwMDtcbiAgICAgIHRoaXMuX29yaWdpbmFsR2V0Um93cyA9IHBhcmFtcy5ncmlkT3B0aW9ucy5kYXRhc291cmNlLmdldFJvd3M7XG4gICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZGF0YXNvdXJjZS5nZXRSb3dzID0gdGhpcy53cmFwR2V0Um93cyhwYXJhbXMuZ3JpZE9wdGlvbnMpO1xuICAgICAgLyogVGhlIGNhY2hlIHNpemUgaXMgc3luY2VkIHdpdGggdGhlIHBhZ2luYXRpb24gcGFnZSBzaXplICovXG4gICAgICBjb25zdCBjYWNoZVNpemUgPSBwYXJhbXMuZ3JpZE9wdGlvbnMucGFnaW5hdGlvblBhZ2VTaXplO1xuICAgICAgaWYgKGNhY2hlU2l6ZSkge1xuICAgICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuY2FjaGVCbG9ja1NpemUgPSBjYWNoZVNpemU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEVkaXRhYmxlIGNlbGwgKi9cbiAgICB0aGlzLmluaXRFZGl0YWJsZUNvbHVtbnNDZWxsQ2xhc3MocGFyYW1zKTtcblxuICAgIC8qKiBXcmFwIGNvbnRleHQgbWVudSAqL1xuICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5nZXRDb250ZXh0TWVudUl0ZW1zID0gdGhpcy53cmFwQ29udGV4dE1lbnVCdWlsZGVyKHBhcmFtcyk7XG5cbiAgICAvKiogU2F2ZSBncmlkIHNldHRpbmdzICovXG4gICAgY29uc3QgeyBzYXZlU2V0dGluZ3MsIGdyaWROYW1lIH0gPSBwYXJhbXMuZ3JpZE9wdGlvbnM7XG4gICAgcGFyYW1zLmdyaWRPcHRpb25zLnNhdmVTZXR0aW5ncyA9IHNhdmVTZXR0aW5ncyAhPT0gZmFsc2UgJiYgIWlzTmlsKGdyaWROYW1lKTtcblxuICAgIC8qKiBTZXJ2ZXIgU2lkZSBQYWdpbmF0aW9uIGZvciBzZWxlY3QgYWxsIG9wdGlvbiAqL1xuICAgIHRoaXMuaW5pdE9uUm93U2VsZWN0ZWRGb3JTZXJ2ZXJTaWRlUGFnaW5hdGlvbihwYXJhbXMpO1xuXG4gICAgLyoqIEFkZCB0cmVlIGdyaWQgc3BlY2lmaWMgcmVxdWlyZWQgc2V0dGluZ3MgKi9cbiAgICBpZiAodGhpcy5pc1RyZWVEYXRhKSB7XG4gICAgICBjb25zdCBpbnB1dFJvd0NsYXNzUnVsZXMgPSBwYXJhbXMuZ3JpZE9wdGlvbnMucm93Q2xhc3NSdWxlcztcblxuICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLnJvd0NsYXNzUnVsZXMgPSB7XG4gICAgICAgIC4uLmlucHV0Um93Q2xhc3NSdWxlcyxcbiAgICAgICAgJ2FnLWVtcHR5LWZvbGRlcic6IHBhcmFtcyA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBhcmFtcy5kYXRhLmlzRm9sZGVyICYmIHNpemUocGFyYW1zLm5vZGUuY2hpbGRyZW5BZnRlckdyb3VwKSA9PT0gMDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQWRkIHBpdm90IHNwZWNpZmljIHJlcXVpcmVkIHNldHRpbmdzICovXG4gICAgaWYgKHRoaXMuaXNQaXZvdE1vZGUpIHtcbiAgICAgIHRoaXMuaW5pdFBpdm90U2Vjb25kYXJ5Q29sc1Byb2Nlc3MocGFyYW1zKTtcbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5zYXZlU2V0dGluZ3MgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmdyaWRPcHRpb25zLnVzZVBpdm90R3JpZFN0eWxlKSB7XG4gICAgICBjb25zdCByb3dIZWlnaHQgPSAzMDtcblxuICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLnJvd0hlaWdodCA9IHJvd0hlaWdodDtcbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5kZWZhdWx0Q29sRGVmID0ge1xuICAgICAgICAuLi5wYXJhbXMuZ3JpZE9wdGlvbnMuZGVmYXVsdENvbERlZixcbiAgICAgICAgY2VsbENsYXNzUnVsZXM6IHRoaXMuZ2V0UGl2b3RNb2RlQ2VsbENsYXNzUnVsZXMoKSxcbiAgICAgICAgaGVhZGVyQ2xhc3M6IHRoaXMuZ2V0UGl2b3RIZWFkZXJDbGFzcy5iaW5kKHRoaXMpLFxuICAgICAgICBjZWxsU3R5bGU6IHBhcmFtcyA9PiB7XG4gICAgICAgICAgY29uc3Qgc3R5bGU6IGFueSA9IHsgbGluZUhlaWdodDogYCR7cm93SGVpZ2h0fXB4YCB9O1xuXG4gICAgICAgICAgaWYgKHBhcmFtcy5jb2xEZWYudHlwZSA9PT0gRGF0b0dyaWRDb2x1bW5UeXBlcy5OdW1iZXIpIHtcbiAgICAgICAgICAgIHN0eWxlLnRleHRBbGlnbiA9ICdlbmQnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLmF1dG9Hcm91cENvbHVtbkRlZiA9IHtcbiAgICAgICAgLi4ucGFyYW1zLmdyaWRPcHRpb25zLmF1dG9Hcm91cENvbHVtbkRlZixcbiAgICAgICAgY2VsbENsYXNzUnVsZXM6IHRoaXMuZ2V0UGl2b3RNb2RlQ2VsbENsYXNzUnVsZXMoKSxcbiAgICAgICAgaGVhZGVyQ2xhc3M6IHRoaXMuZ2V0UGl2b3RIZWFkZXJDbGFzcy5iaW5kKHRoaXMpXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXMuZ3JpZE9wdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGdldFBpdm90SGVhZGVyQ2xhc3MocGFyYW1zKSB7XG4gICAgY29uc3QgZ3JpZFF1ZXJ5ID0gcGFyYW1zLmNvbERlZi5oZWFkZXJDb21wb25lbnRQYXJhbXMuZ3JpZFF1ZXJ5O1xuICAgIGxldCBjZWxsQ2xhc3MgPSAnJztcblxuICAgIGlmIChncmlkUXVlcnkgJiYgZ3JpZFF1ZXJ5LmFwaSkge1xuICAgICAgY29uc3QgeyBjb2x1bW5zIH0gPSBncmlkUXVlcnkuYXBpIGFzIERhdG9HcmlkQXBpO1xuICAgICAgLyoqIFVzZSBnZXRQaXZvdFJlc3VsdENvbHVtbnMgZnJvbSB2ZXIgMjggKi9cbiAgICAgIGNvbnN0IHBpdm90Q29sdW1ucyA9IGNvbHVtbnMuZ2V0U2Vjb25kYXJ5Q29sdW1ucygpO1xuXG4gICAgICBpZiAocGl2b3RDb2x1bW5zICYmIHBpdm90Q29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNlbGxDbGFzcyArPSAndG9wLWJvcmRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNlbGxDbGFzcztcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplQ29sdW1ucyhjb2xEZWZzOiBEYXRvR3JpZENvbHVtbkRlZltdLCBncmlkT3B0aW9uczogRGF0b0dyaWRPcHRpb25zID0gbnVsbCk6IERhdG9HcmlkQ29sdW1uRGVmW10ge1xuICAgIGlmICghZ3JpZE9wdGlvbnMpIHtcbiAgICAgIGdyaWRPcHRpb25zID0gdGhpcy5ncmlkUXVlcnkuZ2V0R3JpZE9wdGlvbnMoKTtcbiAgICB9XG4gICAgY29uc3QgdXBkYXRlZENvbERlZnMgPSBjb2xEZWZzLm1hcCgoY29sOiBEYXRvR3JpZENvbHVtbkRlZikgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IHtcbiAgICAgICAgLi4uY29sLFxuICAgICAgICBoZWFkZXJOYW1lOiB0aGlzLnRyYW5zbGF0ZS50cmFuc2Zvcm0oY29sLmhlYWRlck5hbWUpXG4gICAgICB9O1xuICAgICAgLyoqIEFkanVzdCB0aGUgd2lkdGggaW4gY2FzZSB0aGUgY29sdW1uIGhhcyBpbmZvICovXG4gICAgICBpZiAoY29sLmluZm8pIHtcbiAgICAgICAgbm9ybWFsaXplZC5taW5XaWR0aCA9IGNvbC5taW5XaWR0aCB8fCBHcmlkTWluV2lkdGhzLldpdGhfSW5mbztcbiAgICAgIH1cbiAgICAgIGlmICghY29sLmNvbElkKSB7XG4gICAgICAgIG5vcm1hbGl6ZWQuY29sSWQgPSBjb2wuZmllbGQ7XG4gICAgICB9XG4gICAgICBpZiAobm9ybWFsaXplZC50eXBlID09PSBEYXRvR3JpZENvbHVtblR5cGVzLkl0ZW1zICYmICFub3JtYWxpemVkLmZpbHRlcnNDb25maWcpIHtcbiAgICAgICAgbm9ybWFsaXplZC5maWx0ZXJzQ29uZmlnID0geyBzZWN0aW9uczogRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCB9O1xuICAgICAgfVxuICAgICAgdGhpcy5ub3JtYWxpemVDb2x1bW5TZWFyY2hDb25maWcoZ3JpZE9wdGlvbnMsIGNvbCwgbm9ybWFsaXplZCk7XG4gICAgICByZXR1cm4gbm9ybWFsaXplZDtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmFkZE11bHRpU2VsZWN0SGVhZGVyQ29sdW1uSWZSZXF1aXJlZCh1cGRhdGVkQ29sRGVmcywgZ3JpZE9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVDb2x1bW5TZWFyY2hDb25maWcoXG4gICAgZ3JpZE9wdGlvbnM6IERhdG9HcmlkT3B0aW9ucyxcbiAgICBjb2w6IERhdG9HcmlkQ29sdW1uRGVmLFxuICAgIG5vcm1hbGl6ZWQ6IERhdG9HcmlkQ29sdW1uRGVmXG4gICkge1xuICAgIC8qKiBDaGVjayBpZiBjb2x1bW4gc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gc2VhcmNoICoqL1xuICAgIGNvbnN0IGlzU2VydmVyUGFnaW5hdGlvbiA9IHRoaXMuaXNTZXJ2ZXJTaWRlUGFnaW5hdGlvbihncmlkT3B0aW9ucyk7XG4gICAgaWYgKHR5cGVvZiBjb2wuaW5jbHVkZUluU2VhcmNoID09PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKGlzU2VydmVyUGFnaW5hdGlvbiAmJiBjb2wudHlwZSA9PT0gRGF0b0dyaWRDb2x1bW5UeXBlcy5EYXRlKSB7XG4gICAgICAgIG5vcm1hbGl6ZWQuaW5jbHVkZUluU2VhcmNoID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub3JtYWxpemVkLmluY2x1ZGVJblNlYXJjaCA9XG4gICAgICAgICAgdHlwZW9mIGdyaWRPcHRpb25zLmNvbHVtbnNJbmNsdWRlZEluU2VhcmNoQnlEZWZhdWx0ICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgPyBncmlkT3B0aW9ucy5jb2x1bW5zSW5jbHVkZWRJblNlYXJjaEJ5RGVmYXVsdFxuICAgICAgICAgICAgOiBkZWZhdWx0R3JpZE9wdGlvbnMuY29sdW1uc0luY2x1ZGVkSW5TZWFyY2hCeURlZmF1bHQ7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIG5vcm1hbGl6ZWQuaW5jbHVkZUluU2VhcmNoICYmXG4gICAgICAhdGhpcy5oYXNDZWxsUmVuZGVyZXIobm9ybWFsaXplZCwgZ3JpZE9wdGlvbnMpICYmXG4gICAgICBncmlkT3B0aW9ucy5lbmFibGVTZWFyY2hIaWdobGlnaHRcbiAgICApIHtcbiAgICAgIG5vcm1hbGl6ZWQuY2VsbFJlbmRlcmVyID0gKHBhcmFtczogSUNlbGxSZW5kZXJlclBhcmFtcykgPT4ge1xuICAgICAgICBjb25zdCBhbGxvd0hUTUwgPSBpc0h0bWxBbGxvd2VkRm9yQ29sKGdyaWRPcHRpb25zLCBwYXJhbXMuY29sRGVmKTtcbiAgICAgICAgY29uc3QgaXNFZGl0YWJsZSA9XG4gICAgICAgICAgKGlzRnVuY3Rpb24obm9ybWFsaXplZC5lZGl0YWJsZSkgJiYgbm9ybWFsaXplZC5lZGl0YWJsZShwYXJhbXMpKSB8fFxuICAgICAgICAgICghaXNGdW5jdGlvbihub3JtYWxpemVkLmVkaXRhYmxlKSAmJiBub3JtYWxpemVkLmVkaXRhYmxlKTtcblxuICAgICAgICByZXR1cm4gaXNFZGl0YWJsZVxuICAgICAgICAgID8gZWRpdGFibGVDZWxsUmVuZGVyZXJXaXRoU2VhcmNoSGlnaGxpZ2h0KHBhcmFtcywgdGhpcy5ncmlkUXVlcnkuZ2V0U2VhcmNoVGVybSgpLCBhbGxvd0hUTUwpXG4gICAgICAgICAgOiBzZWFyY2hIaWdobGlnaHRDZWxsUmVuZGVyZXIocGFyYW1zLCB0aGlzLmdyaWRRdWVyeS5nZXRTZWFyY2hUZXJtKCksIGFsbG93SFRNTCk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFzQ2VsbFJlbmRlcmVyKGNvbHVtbjogRGF0b0dyaWRDb2x1bW5EZWYsIGdyaWRPcHRpb25zOiBEYXRvR3JpZE9wdGlvbnMpOiBib29sZWFuIHtcbiAgICBpZiAoY29sdW1uLmNlbGxSZW5kZXJlcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IHR5cGUgPSBjb2x1bW4udHlwZSBhcyBzdHJpbmc7XG4gICAgY29uc3QgY29sdW1uVHlwZUhhc0NlbGxSZW5kZXJlciA9IChvcHRpb25zOiBQYXJ0aWFsPERhdG9HcmlkT3B0aW9ucz4pOiBib29sZWFuID0+XG4gICAgICBvcHRpb25zLmNvbHVtblR5cGVzICYmICEhb3B0aW9ucy5jb2x1bW5UeXBlc1t0eXBlXSAmJiAhIW9wdGlvbnMuY29sdW1uVHlwZXNbdHlwZV0uY2VsbFJlbmRlcmVyO1xuXG4gICAgcmV0dXJuIGNvbHVtblR5cGVIYXNDZWxsUmVuZGVyZXIoZ3JpZE9wdGlvbnMpIHx8IGNvbHVtblR5cGVIYXNDZWxsUmVuZGVyZXIoZGVmYXVsdEdyaWRPcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkTXVsdGlTZWxlY3RIZWFkZXJDb2x1bW5JZlJlcXVpcmVkKFxuICAgIGNvbHVtbkRlZnM6IERhdG9HcmlkQ29sdW1uRGVmW10sXG4gICAgZ3JpZE9wdGlvbnM6IERhdG9HcmlkT3B0aW9uc1xuICApOiBEYXRvR3JpZENvbHVtbkRlZltdIHtcbiAgICBjb25zdCBzaG93TXVsdGlTZWxlY3Rpb25DaGVja2JveGVzID0gZ3JpZE9wdGlvbnMgJiYgZ3JpZE9wdGlvbnMuc2hvd011bHRpU2VsZWN0aW9uQ2hlY2tib3hlcztcbiAgICBjb25zdCByb3dTZWxlY3Rpb24gPVxuICAgICAgZ3JpZE9wdGlvbnMgJiYgZ3JpZE9wdGlvbnMucm93U2VsZWN0aW9uID8gZ3JpZE9wdGlvbnMucm93U2VsZWN0aW9uIDogZGVmYXVsdEdyaWRPcHRpb25zLnJvd1NlbGVjdGlvbjtcblxuICAgIGlmIChzaG93TXVsdGlTZWxlY3Rpb25DaGVja2JveGVzICYmIHJvd1NlbGVjdGlvbiA9PT0gR3JpZFJvd1NlbGVjdGlvblR5cGUuTVVMVElQTEUpIHtcbiAgICAgIGNvbnN0IGNoZWNrYm94ZXNDb2x1bW46IERhdG9HcmlkQ29sdW1uRGVmID0ge1xuICAgICAgICBjb2xJZDogdGhpcy5DSEVDS0JPWF9TRUxFQ1RJT05fQ09MX0lELFxuICAgICAgICBjaGVja2JveFNlbGVjdGlvbjogdHJ1ZSxcbiAgICAgICAgaGVhZGVyQ29tcG9uZW50RnJhbWV3b3JrOiBEYXRvR3JpZE11bHRpU2VsZWN0Q29sdW1uSGVhZGVyQ29tcG9uZW50LFxuICAgICAgICBtaW5XaWR0aDogMjksXG4gICAgICAgIHdpZHRoOiAyOSxcbiAgICAgICAgbWF4V2lkdGg6IDI5LFxuICAgICAgICBzdXBwcmVzc1NpemVUb0ZpdDogdHJ1ZSxcbiAgICAgICAgY2VsbENsYXNzOiAnY2hlY2tib3gtc2VsZWN0aW9uLWNlbGwnLFxuICAgICAgICBoZWFkZXJDbGFzczogJ2hlYWRlci1jaGVja2JveC1zZWxlY3Rpb24tY2VsbCcsXG4gICAgICAgIHJlc2l6YWJsZTogZmFsc2UsXG4gICAgICAgIHBpbm5lZDogJ2xlZnQnLFxuICAgICAgICBsb2NrUG9zaXRpb246IHRydWUsXG4gICAgICAgIGluY2x1ZGVJblNlYXJjaDogZmFsc2VcbiAgICAgIH07XG4gICAgICByZXR1cm4gW2NoZWNrYm94ZXNDb2x1bW4sIC4uLmNvbHVtbkRlZnNdO1xuICAgIH1cbiAgICByZXR1cm4gY29sdW1uRGVmcztcbiAgfVxuXG4gIHByaXZhdGUgaW5pdE9uUm93U2VsZWN0ZWRGb3JTZXJ2ZXJTaWRlUGFnaW5hdGlvbih7IGdyaWRPcHRpb25zIH06IE5vcm1hbGl6ZU9wdGlvbnNQYXJhbXMpIHtcbiAgICBpZiAoIXRoaXMuaXNTZXJ2ZXJTaWRlUGFnaW5hdGlvbihncmlkT3B0aW9ucykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXh0ZXJuYWxPblJvd1NlbGVjdGVkID0gZ3JpZE9wdGlvbnMub25Sb3dTZWxlY3RlZDtcbiAgICBncmlkT3B0aW9ucy5vblJvd1NlbGVjdGVkID0gKGV2dDogUm93U2VsZWN0ZWRFdmVudCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JpZFF1ZXJ5LmlzU2VydmVyU2VsZWN0QWxsUm93c0VuYWJsZWQpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGV2dC5ub2RlO1xuICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gbm9kZS5pc1NlbGVjdGVkKCk7XG4gICAgICAgIGNvbnN0IHsgZXhjbHVkZWRGcm9tU2VsZWN0QWxsIH0gPSB0aGlzLmdyaWRRdWVyeS5zZXJ2ZXJTaWRlQ29uZmlnO1xuICAgICAgICBjb25zdCBpc0V4Y2x1ZGVkID0gZXhjbHVkZWRGcm9tU2VsZWN0QWxsLmluY2x1ZGVzKG5vZGUuaWQpO1xuICAgICAgICBpZiAoaXNTZWxlY3RlZCAmJiBpc0V4Y2x1ZGVkKSB7XG4gICAgICAgICAgdGhpcy5zZXRTZXJ2ZXJTaWRlUGFnaW5hdGlvbih7XG4gICAgICAgICAgICBleGNsdWRlZEZyb21TZWxlY3RBbGw6IGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbC5maWx0ZXIoKG5vZGVJZDogc3RyaW5nKSA9PiBub2RlSWQgIT09IG5vZGUuaWQpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzU2VsZWN0ZWQgJiYgIWlzRXhjbHVkZWQpIHtcbiAgICAgICAgICB0aGlzLnNldFNlcnZlclNpZGVQYWdpbmF0aW9uKHsgZXhjbHVkZWRGcm9tU2VsZWN0QWxsOiBbLi4uZXhjbHVkZWRGcm9tU2VsZWN0QWxsLCBub2RlLmlkXSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGV4dGVybmFsT25Sb3dTZWxlY3RlZCkge1xuICAgICAgICBleHRlcm5hbE9uUm93U2VsZWN0ZWQoZXZ0KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByb3dNYXRjaGVzU2VhcmNoKHJvdzogUm93Tm9kZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlYXJjaFRlcm0gPSAodGhpcy5ncmlkUXVlcnkuZ2V0U2VhcmNoVGVybSgpIHx8ICcnKS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBpZiAoaXNFbXB0eShzZWFyY2hUZXJtKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpLmluY2x1ZGVIaWRkZW5Db2x1bW5zSW5TZWFyY2hcbiAgICAgID8gdGhpcy5ncmlkUXVlcnkuZ2V0QWxsQ29sdW1ucygpXG4gICAgICA6IHRoaXMuZ3JpZFF1ZXJ5LmdldEFsbERpc3BsYXllZENvbHVtbnMoKTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICBjb25zdCBjb2xEZWYgPSB0aGlzLmFwaS5ncmlkLmdldENvbHVtbkRlZihjb2wuZ2V0Q29sSWQoKSkgYXMgRGF0b0dyaWRDb2x1bW5EZWY7XG4gICAgICBpZiAoIWNvbERlZi5pbmNsdWRlSW5TZWFyY2gpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByb3dWYWx1ZSA9ICh0aGlzLmFwaS5ncmlkLmdldFZhbHVlKGNvbC5nZXRDb2xJZCgpLCByb3cpIHx8ICcnKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAocm93VmFsdWUuaW5jbHVkZXMoc2VhcmNoVGVybSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgZml0R3JpZCgnY29udGFpbmVyJykgaW5zdGVhZFxuICAgKi9cbiAgZml0VG9Db250YWluZXIoKSB7XG4gICAgdGhpcy5hcGkuZ3JpZC5zaXplQ29sdW1uc1RvRml0KCk7XG4gIH1cblxuICBnZXRDdXN0b21IZWFkZXIoZmllbGQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmN1c3RvbUhlYWRlcnNUZW1wbGF0ZXMpIHtcbiAgICAgIGNvbnN0IHNwZWNpZmljID0gdGhpcy5jdXN0b21IZWFkZXJzVGVtcGxhdGVzLmZpbmQoKHsgY29sdW1uIH0pID0+IGNvbHVtbiA9PT0gZmllbGQpO1xuICAgICAgY29uc3QgY29tbW9uID0gdGhpcy5jdXN0b21IZWFkZXJzVGVtcGxhdGVzLmZpbmQoKHsgY29sdW1uIH0pID0+ICFjb2x1bW4pO1xuICAgICAgaWYgKHNwZWNpZmljIHx8IGNvbW1vbikge1xuICAgICAgICBjb25zdCB7IG1vcmVNZW51LCBjdXN0b21IZWFkZXIgfSA9IHtcbiAgICAgICAgICBtb3JlTWVudTogKHNwZWNpZmljICYmIHNwZWNpZmljLm1vcmVNZW51KSB8fCAoY29tbW9uICYmIGNvbW1vbi5tb3JlTWVudSksXG4gICAgICAgICAgY3VzdG9tSGVhZGVyOiAoc3BlY2lmaWMgJiYgc3BlY2lmaWMuY3VzdG9tSGVhZGVyKSB8fCAoY29tbW9uICYmIGNvbW1vbi5jdXN0b21IZWFkZXIpXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7IG1vcmVNZW51OiBtb3JlTWVudSAmJiBtb3JlTWVudS50cGwsIGN1c3RvbUhlYWRlcjogY3VzdG9tSGVhZGVyICYmIGN1c3RvbUhlYWRlci50cGwgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjbGVhckFsbEZpbHRlcnMoKSB7XG4gICAgdGhpcy5zdG9yZS51cGRhdGUoc3RhdGUgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5zZXR0aW5ncyxcbiAgICAgICAgICBmaWx0ZXI6IHt9LFxuICAgICAgICAgIHNlYXJjaFRlcm06IG51bGxcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLm5vdGlmeUZpbHRlclVwZGF0ZSgpO1xuICB9XG5cbiAgY2xlYXJDb2x1bW5GaWx0ZXIoY29sdW1uRmllbGQ6IHN0cmluZykge1xuICAgIGNvbnN0IHsgW2NvbHVtbkZpZWxkXTogZGVsZXRlZCwgLi4uZmlsdGVyIH0gPSB0aGlzLmdyaWRRdWVyeS5nZXRGaWx0ZXIoKTtcbiAgICB0aGlzLnN0b3JlLnVwZGF0ZShzdGF0ZSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXR0aW5nczoge1xuICAgICAgICAgIC4uLnN0YXRlLnNldHRpbmdzLFxuICAgICAgICAgIGZpbHRlclxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMubm90aWZ5RmlsdGVyVXBkYXRlKCk7XG4gIH1cblxuICBzZXRDb2x1bW5GaWx0ZXIoY29sdW1uOiBDb2x1bW4sIGZpbHRlcjogRGF0b0dyaWRGaWx0ZXIsIG5vdGlmeUdyaWQgPSB0cnVlKSB7XG4gICAgdGhpcy5fbG9nRXZlbnQoQ29yZUV2ZW50VHlwZXMuR1JJRF9GSUxURVJfQVBQTElFRCwge1xuICAgICAgY29sdW1uOiBjb2x1bW4uZ2V0Q29sSWQoKSxcbiAgICAgIG51bU9mQ29uZGl0aW9uczogKGZpbHRlci5jb25kaXRpb25hbCAmJiBmaWx0ZXIuY29uZGl0aW9uYWwuY29uZGl0aW9ucy5sZW5ndGgpIHx8IDAsXG4gICAgICBieVZhbHVlOiAhIWZpbHRlci5ieVZhbHVlID8gJ1llcycgOiAnTm8nXG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZUZpbHRlcihjb2x1bW4sIGZpbHRlcik7XG5cbiAgICBpZiAobm90aWZ5R3JpZCkge1xuICAgICAgdGhpcy5ub3RpZnlGaWx0ZXJVcGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICBzZXRHcmlkRmlsdGVycyhmaWx0ZXJzOiBEYXRvR3JpZEV4dGVybmFsRmlsdGVyW10pIHtcbiAgICBpZiAodGhpcy5hcGkgJiYgZmlsdGVycykge1xuICAgICAgbGV0IGFwcGxpZWRGaWx0ZXIgPSB7fTtcblxuICAgICAgZm9yIChjb25zdCB7IGZpbHRlciwgZmllbGQgfSBvZiBmaWx0ZXJzKSB7XG4gICAgICAgIGFwcGxpZWRGaWx0ZXJbZmllbGRdID0gZmlsdGVyO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVNldHRpbmdzKHsgZmlsdGVyOiBhcHBsaWVkRmlsdGVyIH0pO1xuICAgICAgdGhpcy5ub3RpZnlGaWx0ZXJVcGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICBzZXRTb3J0QnlDb2x1bW4oY29sSWQsIHNvcnQpIHtcbiAgICBjb25zdCBzb3J0VG9TZXQgPSB0aGlzLmdyaWRRdWVyeS5nZXRTb3J0KHsgY29sSWQsIHNvcnQgfSk7XG5cbiAgICB0aGlzLnNldEdyaWRTb3J0KHNvcnRUb1NldCk7XG4gIH1cblxuICBzZXRHcmlkU29ydChncmlkU29ydDogRGF0b0dyaWRTb3J0KSB7XG4gICAgaWYgKGdyaWRTb3J0ICYmIHRoaXMuYXBpICYmIHRoaXMuYXBpLmdyaWQuZ2V0RGlzcGxheWVkUm93Q291bnQoKSA+IDApIHtcbiAgICAgIGNvbnN0IHsgY29sSWQsIHNvcnQsIHNvcnRJbmRleCB9ID0gZ3JpZFNvcnQ7XG4gICAgICBjb25zdCBncmlkQ29sdW1ucyA9IHRoaXMuYXBpLmNvbHVtbnMuZ2V0QWxsR3JpZENvbHVtbnMoKTtcblxuICAgICAgaWYgKGdyaWRDb2x1bW5zKSB7XG4gICAgICAgIGxldCBzb3J0VG9BcHBseSA9IGdyaWRTb3J0O1xuICAgICAgICAvKiogU29ydCBieSBjb2x1bW4gaWQgKi9cbiAgICAgICAgY29uc3QgY29sdW1uQnlJZCA9IGdyaWRDb2x1bW5zLmZpbmQoKGNvbDogQ29sdW1uKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChjb2wuZ2V0Q29sRGVmKCkuc2hvd1Jvd0dyb3VwIHx8IGNvbC5nZXRDb2xJZCgpKSA9PT0gY29sSWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChjb2x1bW5CeUlkKSB7XG4gICAgICAgICAgc29ydFRvQXBwbHkgPSB7IGNvbElkOiBjb2x1bW5CeUlkLmdldENvbElkKCksIHNvcnQgfTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNOaWwoc29ydEluZGV4KSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlQ29sdW1ucyA9IHRoaXMuYXBpLmNvbHVtbnMuZ2V0VmFsdWVDb2x1bW5zKCk7XG4gICAgICAgICAgY29uc3QgdmFsdWVDb2x1bW4gPSB2YWx1ZUNvbHVtbnMuZmluZCgoY29sOiBDb2x1bW4pID0+IGNvbC5nZXRDb2xJZCgpID09PSBjb2xJZCk7XG4gICAgICAgICAgY29uc3QgaXNQaXZvdENvbElkID0gY29sSWQuc3RhcnRzV2l0aCgncGl2b3QnKTtcblxuICAgICAgICAgIGlmIChpc1Bpdm90Q29sSWQgfHwgdmFsdWVDb2x1bW4pIHtcbiAgICAgICAgICAgIC8qKiBDb2x1bW4gaXMgcGl2b3QgdmFsdWUgY29sdW1uLCBzb3J0IGJ5IGluZGV4ICovXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5CeUluZGV4ID0gZ3JpZENvbHVtbnNbc29ydEluZGV4XTtcblxuICAgICAgICAgICAgc29ydFRvQXBwbHkgPSB7IGNvbElkOiBjb2x1bW5CeUluZGV4LmdldENvbElkKCksIHNvcnQsIHNvcnRJbmRleCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlU2V0dGluZ3MoeyBzb3J0OiBzb3J0VG9BcHBseSB9KTtcbiAgICAgICAgdGhpcy5hcGkuZ3JpZC5zZXRTb3J0TW9kZWwoW3NvcnRUb0FwcGx5XSk7XG5cbiAgICAgICAgaWYgKCh0aGlzLmdyaWRSZWYuZ3JpZE9wdGlvbnMgYXMgRGF0b0dyaWRPcHRpb25zKS51c2VQaXZvdEdyaWRTdHlsZSkge1xuICAgICAgICAgIHRoaXMuYXBpLmdyaWQucmVkcmF3Um93cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGaWx0ZXIoY29sdW1uOiBDb2x1bW4sIGZpbHRlcjogRGF0b0dyaWRGaWx0ZXIpIHtcbiAgICBjb25zdCBjb2xGaWVsZCA9IGdldENvbEZpZWxkKGNvbHVtbi5nZXRDb2xEZWYoKSk7XG5cbiAgICB0aGlzLnN0b3JlLnVwZGF0ZShzdGF0ZSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXR0aW5nczoge1xuICAgICAgICAgIC4uLnN0YXRlLnNldHRpbmdzLFxuICAgICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgICAgLi4uc3RhdGUuc2V0dGluZ3MuZmlsdGVyLFxuICAgICAgICAgICAgW2NvbEZpZWxkXTogZmlsdGVyXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgc2V0U2VhcmNoVGVybShzZWFyY2hUZXJtOiBzdHJpbmcpIHtcbiAgICB0aGlzLnN0b3JlLnVwZGF0ZShzdGF0ZSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXR0aW5nczoge1xuICAgICAgICAgIC4uLnN0YXRlLnNldHRpbmdzLFxuICAgICAgICAgIHNlYXJjaFRlcm1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLm5vdGlmeUZpbHRlclVwZGF0ZSgpO1xuICB9XG5cbiAgc2V0U2VydmVyU2lkZVBhZ2luYXRpb24oY29uZmlnOiBQYXJ0aWFsPFNlcnZlclNpZGVQYWdpbmF0aW9uQ29uZmlnPikge1xuICAgIHRoaXMuc3RvcmUudXBkYXRlKHN0YXRlID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNlcnZlclNpZGVQYWdpbmF0aW9uOiB7XG4gICAgICAgICAgLi4uc3RhdGUuc2VydmVyU2lkZVBhZ2luYXRpb24sXG4gICAgICAgICAgLi4uY29uZmlnXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBzZXRMb2FkaW5nKHNob3c6IGJvb2xlYW4pIHtcbiAgICBpZiAoc2hvdykge1xuICAgICAgdGhpcy5hcGkuZ3JpZC5zaG93TG9hZGluZ092ZXJsYXkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hcGkuZ3JpZC5nZXREaXNwbGF5ZWRSb3dDb3VudCgpID09PSAwID8gdGhpcy5zZXRPdmVybGF5KHRydWUpIDogdGhpcy5zZXRPdmVybGF5KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIHNldE92ZXJsYXkgaW5zdGVhZFxuICAgKiBAcGFyYW0gc2hvd1xuICAgKi9cbiAgc2V0Tm9EYXRhKHNob3c6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldE92ZXJsYXkoc2hvdyk7XG4gIH1cblxuICBzZXRPdmVybGF5KHNob3c6IGJvb2xlYW4pIHtcbiAgICBzaG93ID8gdGhpcy5hcGkuZ3JpZC5zaG93Tm9Sb3dzT3ZlcmxheSgpIDogdGhpcy5hcGkuZ3JpZC5oaWRlT3ZlcmxheSgpO1xuICB9XG5cbiAgdXBkYXRlU2V0dGluZ3Moc2V0dGluZ3M6IFBhcnRpYWw8RGF0b0dyaWRTZXR0aW5ncz4pIHtcbiAgICB0aGlzLnN0b3JlLnVwZGF0ZShzdGF0ZSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXR0aW5nczoge1xuICAgICAgICAgIC4uLnN0YXRlLnNldHRpbmdzLFxuICAgICAgICAgIC4uLnNldHRpbmdzXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBmaXRHcmlkKHRvOiAnY29udGFpbmVyJyB8ICdjb250ZW50Jykge1xuICAgIHRvID09PSAnY29udGFpbmVyJyA/IHRoaXMuYXBpLmdyaWQuc2l6ZUNvbHVtbnNUb0ZpdCgpIDogdGhpcy5hcGkuY29sdW1ucy5hdXRvU2l6ZUFsbENvbHVtbnMoKTtcbiAgICBjb25zdCBncmlkQWxpZ25tZW50ID0gdG8gPT09ICdjb250YWluZXInID8gRGF0b0dyaWRBbGlnbm1lbnQuRklUX1RPX0NPTlRBSU5FUiA6IERhdG9HcmlkQWxpZ25tZW50LkZJVF9UT19DT05URU5UO1xuICAgIHRoaXMudXBkYXRlU2V0dGluZ3MoeyBncmlkQWxpZ25tZW50LCBjb2x1bW5zU2l6ZXM6IG51bGwgfSk7XG4gIH1cblxuICBzYXZlU2V0dGluZ3NUb1NlcnZlcihzZXR0aW5nczogUGFydGlhbDxEYXRvR3JpZFNldHRpbmdzPikge1xuICAgIHRoaXMuc3RvcmFnZUFQSS5zZXQodGhpcy5ncmlkTmFtZSwgc2V0dGluZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbCB1c2VkIHRvIGxvZyBncmlkIGV2ZW50cyB0byB0aGUgcGxhdGZvcm0ncyBsb2dnaW5nIHNlcnZpY2VcbiAgICovXG4gIF9sb2dFdmVudChldmVudFR5cGU6IENvcmVFdmVudFR5cGVzLCBldmVudFByb3BlcnRpZXM/OiBIYXNoTWFwPGFueT4pIHtcbiAgICB0aGlzLmxvZ2dlci5sb2dFdmVudChldmVudFR5cGUsIHsgdGFibGU6IHRoaXMuZ3JpZE5hbWUsIC4uLmV2ZW50UHJvcGVydGllcyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgd3JhcFN1Y2Nlc3NDYWxsYmFjayh7IHN1Y2Nlc3NDYiwgcGFnZU51bWJlciwgaXNQZW5kaW5nUmV0dXJuVG9QYWdlIH06IFN1Y2Nlc3NXcmFwcGVyUGFyYW1zKSB7XG4gICAgcmV0dXJuIChyb3dzVGhpc0Jsb2NrOiBhbnlbXSwgdG90YWxSb3dzOiBudW1iZXIpID0+IHtcbiAgICAgIHRoaXMuc2V0U2VydmVyU2lkZVBhZ2luYXRpb24oeyB0b3RhbFJvd3MsIGhhc0Vycm9yOiBmYWxzZSB9KTtcbiAgICAgIHN1Y2Nlc3NDYihyb3dzVGhpc0Jsb2NrLCB0b3RhbFJvd3MpO1xuICAgICAgdGhpcy5ncmlkUXVlcnkuX3NlcnZlckRhdGFMb2FkZWQubmV4dCh7XG4gICAgICAgIGFwaTogdGhpcy5hcGkuZ3JpZCxcbiAgICAgICAgY29sdW1uQXBpOiB0aGlzLmFwaS5jb2x1bW5zLFxuICAgICAgICB0eXBlOiAnU2VydmVyRGF0YUxvYWRlZCcsXG4gICAgICAgIHBhZ2luYXRpb25QYWdlOiBwYWdlTnVtYmVyXG4gICAgICB9KTtcbiAgICAgIGlmICghaXNQZW5kaW5nUmV0dXJuVG9QYWdlKSB7XG4gICAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgIC8qKiBzbyB0aGUgZ3JpZCBmaXRzIGluIGV2ZXJ5IG5ldyBkYXRhIGlucHV0ICovXG4gICAgICAgIHRyaWdnZXJXaW5kb3dSZXNpemUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGFzdFRvdGFsUm93cyA9IHRvdGFsUm93cztcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB3cmFwR2V0Um93cyhvcHRpb25zOiBEYXRvR3JpZE9wdGlvbnMsIGdldFJvd3M/OiAocGFyYW1zOiBEYXRvR3JpZEdldFJvd3NQYXJhbXMpID0+IHZvaWQpIHtcbiAgICBjb25zdCBnZXRSb3dzQ2IgPSBnZXRSb3dzIHx8IG9wdGlvbnMuZGF0YXNvdXJjZS5nZXRSb3dzO1xuICAgIHJldHVybiAoZ2V0Um93c1BhcmFtczogSUdldFJvd3NQYXJhbXMpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RhcnRSb3csIGVuZFJvdywgc29ydE1vZGVsLCBzdWNjZXNzQ2FsbGJhY2sgfSA9IGdldFJvd3NQYXJhbXM7XG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IG9wdGlvbnMucGFnaW5hdGlvblBhZ2VTaXplIHx8IDEwMDtcbiAgICAgIGNvbnN0IGlzUmV0dXJuVG9DdXJyZW50UGFnZVJlcXVpcmVkID0gdGhpcy5wYWdlTnVtYmVyVG9SZXR1cm5BZnRlclJlZnJlc2ggPiAwO1xuICAgICAgY29uc3QgaXNQZW5kaW5nUmV0dXJuVG9QYWdlID0gaXNSZXR1cm5Ub0N1cnJlbnRQYWdlUmVxdWlyZWQgJiYgc3RhcnRSb3cgPT09IDA7XG5cbiAgICAgIGNvbnN0IHBhZ2VOdW1iZXIgPSBpc1JldHVyblRvQ3VycmVudFBhZ2VSZXF1aXJlZFxuICAgICAgICA/IHRoaXMucGFnZU51bWJlclRvUmV0dXJuQWZ0ZXJSZWZyZXNoICsgMVxuICAgICAgICA6IE1hdGguY2VpbChlbmRSb3cgLyBwYWdlU2l6ZSk7XG5cbiAgICAgIHRoaXMucGFnZU51bWJlclRvUmV0dXJuQWZ0ZXJSZWZyZXNoID0gLTE7XG5cbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEZpbHRlcigpO1xuICAgICAgY29uc3QgbmV3UGFyYW1zOiBEYXRvR3JpZEdldFJvd3NQYXJhbXMgPSB7XG4gICAgICAgIC4uLmdldFJvd3NQYXJhbXMsXG4gICAgICAgIGZhaWxDYWxsYmFjazogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0U2VydmVyU2lkZVBhZ2luYXRpb24oeyBoYXNFcnJvcjogdHJ1ZSB9KTtcbiAgICAgICAgICB0aGlzLnNldE92ZXJsYXkodHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHN1Y2Nlc3NDYWxsYmFjazogdGhpcy53cmFwU3VjY2Vzc0NhbGxiYWNrKHsgcGFnZU51bWJlciwgc3VjY2Vzc0NiOiBzdWNjZXNzQ2FsbGJhY2ssIGlzUGVuZGluZ1JldHVyblRvUGFnZSB9KSxcbiAgICAgICAgc2VydmVyQ29uZmlnOiB7XG4gICAgICAgICAgcGFnZVNpemUsXG4gICAgICAgICAgcGFnZU51bWJlcixcbiAgICAgICAgICBjb2x1bW5GaWx0ZXJzOiBpc0VtcHR5KGZpbHRlcikgfHwgb3B0aW9ucy5lbmFibGVWMl8xID8gbnVsbCA6IHRoaXMuYnVpbGRTZXJ2ZXJSZXF1ZXN0RmlsdGVycyhmaWx0ZXIpLFxuICAgICAgICAgIGZpbHRlcjogb3B0aW9ucy5lbmFibGVWMl8xID8gdGhpcy5idWlsZFNlcnZlclJlcXVlc3RGaWx0ZXJzX3YyXzEob3B0aW9ucy5jb2x1bW5EZWZzKSA6IG51bGwsXG4gICAgICAgICAgc29ydDogdGhpcy5idWlsZFNlcnZlclJlcXVlc3RTb3J0KHNvcnRNb2RlbClcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChpc1BlbmRpbmdSZXR1cm5Ub1BhZ2UpIHtcbiAgICAgICAgLy8gU2NlbmFyaW8gdGhlIGZvbGxvd2luZyBoYW5kbGVzIC0gc2VydmVyIHJlZnJlc2ggd2hlcmUgaXQgd2FzIHJlcXVlc3RlZCB0byBrZWVwIHRoZSBjdXJyZW50IHBhZ2UuXG4gICAgICAgIC8vIFRoZSBwcm9ibGVtIC0gZ2V0Um93cyB3aWxsIGluaXRpYWxseSBiZSBjYWxsZWQgZm9yIHBhZ2UgMSAoYXV0b21hdGljYWxseSBoYXBwZW5zIHdoZW4gY2FsbGluZyBhZy1ncmlkJ3Mgc2V0RGF0YVNvdXJjZSkuXG4gICAgICAgIC8vIEluIG9yZGVyIHRvIHRyaWdnZXIgaXQgYWdhaW4sIHN1Y2Nlc3NDYWxsYmFjayBpcyBjYWxsZWQgd2l0aCB0aGUgZGVzaXJlZCBwYWdlLlxuICAgICAgICAvLyBmYWtlR2V0Um93cyBpcyB1c2VkIGluIG9yZGVyIHRvIGF2b2lkIHJldHJpZXZpbmcgdGhlIHVubmVjZXNzYXJ5IHJlYWwgZGF0YSBmb3IgcGFnZSAxLlxuICAgICAgICBjb25zdCBmYWtlR2V0Um93cyA9ICh7IHN1Y2Nlc3NDYWxsYmFjayB9OiBEYXRvR3JpZEdldFJvd3NQYXJhbXMpID0+IHtcbiAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2soW10sIHRoaXMubGFzdFRvdGFsUm93cyk7XG4gICAgICAgIH07XG4gICAgICAgIGZha2VHZXRSb3dzKG5ld1BhcmFtcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZXRSb3dzQ2IobmV3UGFyYW1zKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0RWRpdGFibGVDb2x1bW5zQ2VsbENsYXNzKHBhcmFtczogTm9ybWFsaXplT3B0aW9uc1BhcmFtcykge1xuICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5jb2x1bW5EZWZzLmZvckVhY2goY29sRGVmID0+IHtcbiAgICAgIGlmIChjb2xEZWYuZWRpdGFibGUpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY29sRGVmLmVkaXRhYmxlKSkge1xuICAgICAgICAgIGNvbnN0IGluaXRpYWxDZWxsQ2xhc3MgPSBjb2xEZWYuY2VsbENsYXNzO1xuICAgICAgICAgIGNvbERlZi5jZWxsQ2xhc3MgPSAoY2VsbENsYXNzUGFyYW1zOiBDZWxsQ2xhc3NQYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzRWRpdGFibGUgPSAoY29sRGVmLmVkaXRhYmxlIGFzIEZ1bmN0aW9uKShjZWxsQ2xhc3NQYXJhbXMgYXMgYW55KTtcbiAgICAgICAgICAgIGlmIChpc0VkaXRhYmxlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVkaXRhYmxlUmVzdWx0ID0gdGhpcy5hZGRFZGl0YWJsZUNlbGxDbGFzcyhpbml0aWFsQ2VsbENsYXNzKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZWRpdGFibGVSZXN1bHQpID8gZWRpdGFibGVSZXN1bHQoY2VsbENsYXNzUGFyYW1zKSA6IGVkaXRhYmxlUmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5pdGlhbENlbGxDbGFzcykgPyBpbml0aWFsQ2VsbENsYXNzKGNlbGxDbGFzc1BhcmFtcykgOiBpbml0aWFsQ2VsbENsYXNzO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sRGVmLmNlbGxDbGFzcyA9IHRoaXMuYWRkRWRpdGFibGVDZWxsQ2xhc3MoY29sRGVmLmNlbGxDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgd3JhcENvbnRleHRNZW51QnVpbGRlcihwYXJhbXM6IE5vcm1hbGl6ZU9wdGlvbnNQYXJhbXMpIHtcbiAgICBjb25zdCB7IGN1c3RvbUNvbnRleHRNZW51IH0gPSBwYXJhbXMuZ3JpZE9wdGlvbnM7XG4gICAgY29uc3QgYWxsQWN0aW9ucyA9IGlzRnVuY3Rpb24oY3VzdG9tQ29udGV4dE1lbnUpID8gY3VzdG9tQ29udGV4dE1lbnUocGFyYW1zLnJvd0FjdGlvbnMpIDogcGFyYW1zLnJvd0FjdGlvbnM7XG4gICAgdGhpcy50cmFuc2xhdGVBY3Rpb25MYWJlbHMoYWxsQWN0aW9ucyk7XG4gICAgY29uc3QgY29weUFjdGlvbjogUm93QWN0aW9uID0ge1xuICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSgnY29yZS5jb3B5LWNlbGwnKSxcbiAgICAgIGljb246ICdjb3B5JyxcbiAgICAgIGtleTogJ0NvcHkgQ2VsbCdcbiAgICB9O1xuICAgIHJldHVybiAoeyBub2RlLCBjb2x1bW4sIGNvbnRleHQgfTogR2V0Q29udGV4dE1lbnVJdGVtc1BhcmFtcykgPT4ge1xuICAgICAgY29uc3Qgb25Ib3ZlckFjdGlvbk1lbnUgPSBjb250ZXh0ICYmIGNvbnRleHQuY29udGV4dE1lbnUgJiYgY29udGV4dC5jb250ZXh0TWVudS5mcm9tT25Ib3ZlcjtcbiAgICAgIGlmICghbm9kZSkgcmV0dXJuIFtdO1xuICAgICAgbGV0IHNlbGVjdGVkID0gW25vZGVdO1xuICAgICAgbGV0IHJvd3NDb3VudCA9IDE7XG4gICAgICBpZiAob25Ib3ZlckFjdGlvbk1lbnUpIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmlkQ29udGV4dCh7IGNvbnRleHRNZW51OiB7IGZyb21PbkhvdmVyOiBmYWxzZSB9IH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29weUFjdGlvbi5vbkNsaWNrID0gKFtyb3ddKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmF3VmFsdWUgPSB0aGlzLmFwaS5ncmlkLmdldFZhbHVlKGNvbHVtbi5nZXRDb2xJZCgpLCByb3cpO1xuICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGNvbHVtbi5nZXRDb2xEZWYoKS52YWx1ZUZvcm1hdHRlcjtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZvcm1hdHRlciAmJiB0eXBlb2YgZm9ybWF0dGVyICE9PSAnc3RyaW5nJyA/IGZvcm1hdHRlcihyYXdWYWx1ZSkgOiByYXdWYWx1ZTtcbiAgICAgICAgICBjb3B5VG9DbGlwYm9hcmQodmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAobm9kZS5pc1NlbGVjdGVkKCkpIHtcbiAgICAgICAgICBzZWxlY3RlZCA9IHRoaXMuZ3JpZFF1ZXJ5LmdldFNlbGVjdGVkUm93Tm9kZXMoKTtcbiAgICAgICAgICByb3dzQ291bnQgPSBzaXplKHNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgdmlzaWJsZUFjdGlvbnMgPSBnZXRWaXNpYmxlQWN0aW9ucyhcbiAgICAgICAgYWxsQWN0aW9ucyxcbiAgICAgICAgcm93c0NvdW50LFxuICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgdGhpcy5ncmlkUXVlcnkuaXNTZXJ2ZXJTZWxlY3RBbGxSb3dzRW5hYmxlZFxuICAgICAgKS5maWx0ZXIoKHsgdmlzaWJsZSB9KSA9PiB2aXNpYmxlKTtcbiAgICAgIGxldCB0b29sYmFyQWN0aW9ucyA9IFtjb3B5QWN0aW9uXTtcbiAgICAgIGlmIChvbkhvdmVyQWN0aW9uTWVudSkge1xuICAgICAgICB0b29sYmFyQWN0aW9ucyA9IHZpc2libGVBY3Rpb25zO1xuICAgICAgfSBlbHNlIGlmICh2aXNpYmxlQWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRvb2xiYXJBY3Rpb25zID0gW3sgLi4uY29weUFjdGlvbiwgc2VwYXJhdG9yOiB0cnVlIH0sIC4uLnZpc2libGVBY3Rpb25zXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnZlcnRlclBhcmFtczogQWN0aW9uQ29udmVydGVyUGFyYW1zID0ge1xuICAgICAgICB0b29sYmFyQWN0aW9ucyxcbiAgICAgICAgc2VsZWN0ZWRSb3dzOiBzZWxlY3RlZCxcbiAgICAgICAgaWNvblJlZ2lzdHJ5OiB0aGlzLnN2Z1JlZ2lzdHJ5LFxuICAgICAgICBub2RlLFxuICAgICAgICBsb2dnZXI6IHtcbiAgICAgICAgICBsb2c6IHRoaXMuX2xvZ0V2ZW50LmJpbmQodGhpcyksXG4gICAgICAgICAgZXZlbnRPcmlnaW46IG9uSG92ZXJBY3Rpb25NZW51ID8gJ09uIEhvdmVyJyA6ICdDb250ZXh0IE1lbnUnXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gdG9vbGJhckFjdGlvblRvQ29udGV4dEFjdGlvbihjb252ZXJ0ZXJQYXJhbXMpO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHRyYW5zbGF0ZUFjdGlvbkxhYmVscyhhbGxBY3Rpb25zOiBSb3dBY3Rpb25bXSkge1xuICAgIGFsbEFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgICAgYWN0aW9uLmxhYmVsID0gdGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKGFjdGlvbi5sYWJlbCk7XG4gICAgICBpZiAoYWN0aW9uLnN1Yk1lbnUpIHtcbiAgICAgICAgdGhpcy50cmFuc2xhdGVBY3Rpb25MYWJlbHMoYWN0aW9uLnN1Yk1lbnUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbG9hZFNhdmVkU2V0dGluZ3Moc2V0dGluZ3M6IFBhcnRpYWw8RGF0b0dyaWRTZXR0aW5ncz4pIHtcbiAgICBjb25zdCB7XG4gICAgICBzb3J0LFxuICAgICAgaGlkZGVuQ29sdW1ucyxcbiAgICAgIGZpbHRlcixcbiAgICAgIGdyb3VwZWRDb2x1bW5zLFxuICAgICAgY29sdW1uc1NpemVzLFxuICAgICAgcGlubmVkQ29sdW1ucyxcbiAgICAgIGNvbHVtbnNPcmRlcixcbiAgICAgIGdyaWRBbGlnbm1lbnRcbiAgICB9ID0gc2V0dGluZ3M7XG4gICAgY29uc3QgeyBncmlkLCBjb2x1bW5zIH0gPSB0aGlzLmFwaTtcbiAgICAvKiBIaWRlIGNvbHVtbnMgKi9cbiAgICAvKiBOT1RFOiBjb2x1bW5zIG9yZGVyIGFyZSB0cmVhdGVkIGFzIHRoZSBjdXJyZW50bHkgdmlzaWJsZSBjb2x1bW5zICovXG4gICAgY29sdW1ucy5zZXRDb2x1bW5zVmlzaWJsZSh0aGlzLmluaXRpYWxTZXR0aW5ncy5jb2x1bW5zT3JkZXIsIHRydWUpO1xuICAgIGNvbnN0IGNvbHVtblRvSGlkZSA9ICFpc05pbChoaWRkZW5Db2x1bW5zKSA/IGhpZGRlbkNvbHVtbnMgOiB0aGlzLmluaXRpYWxTZXR0aW5ncy5oaWRkZW5Db2x1bW5zO1xuICAgIGNvbHVtbnMuc2V0Q29sdW1uc1Zpc2libGUoY29sdW1uVG9IaWRlLCBmYWxzZSk7XG5cbiAgICAvKiBBcHBseSBmaWx0ZXJzICovXG4gICAgaWYgKGZpbHRlcikge1xuICAgICAgZ3JpZC5vbkZpbHRlckNoYW5nZWQoKTtcbiAgICB9XG5cbiAgICAvKiBHcm91cCBjb2x1bW5zICovXG4gICAgY29uc3QgYWxsR3JvdXBlZENvbHVtbnMgPSBjb2x1bW5zLmdldFJvd0dyb3VwQ29sdW1ucygpO1xuICAgIGxldCByZW1vdmVHcm91cGVkO1xuICAgIGlmIChncm91cGVkQ29sdW1ucykge1xuICAgICAgcmVtb3ZlR3JvdXBlZCA9IGFsbEdyb3VwZWRDb2x1bW5zLmZpbHRlcihjb2wgPT4gIWdyb3VwZWRDb2x1bW5zLmluY2x1ZGVzKGNvbC5nZXRDb2xJZCgpKSk7XG4gICAgICBjb2x1bW5zLmFkZFJvd0dyb3VwQ29sdW1ucyhncm91cGVkQ29sdW1ucyk7XG4gICAgICBjb2x1bW5zLnNldENvbHVtbnNWaXNpYmxlKGdyb3VwZWRDb2x1bW5zLCBmYWxzZSk7XG4gICAgfVxuICAgIGNvbHVtbnMucmVtb3ZlUm93R3JvdXBDb2x1bW5zKHJlbW92ZUdyb3VwZWQpO1xuICAgIGNvbHVtbnMuc2V0Q29sdW1uc1Zpc2libGUocmVtb3ZlR3JvdXBlZCwgdHJ1ZSk7XG5cbiAgICAvKiBBcHBseSBzb3J0ICovXG4gICAgY29uc3QgZ3JpZFNvcnQgPSBzb3J0IHx8IHRoaXMuaW5pdGlhbFNldHRpbmdzLnNvcnQ7XG4gICAgZ3JpZC5zZXRTb3J0TW9kZWwoZ3JpZFNvcnQgPyBbZ3JpZFNvcnRdIDogbnVsbCk7XG5cbiAgICAvKiBBbGlnbiBncmlkICovXG4gICAgaWYgKGdyaWRBbGlnbm1lbnQgPT09IERhdG9HcmlkQWxpZ25tZW50LkNVU1RPTSkge1xuICAgICAgLyogU2V0IGNvbHVtbiBzaXplcyAqL1xuICAgICAgY29sdW1uc1NpemVzICYmXG4gICAgICAgIE9iamVjdC5rZXlzKGNvbHVtbnNTaXplcykuZm9yRWFjaChjb2xJZCA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbnNTaXplc1tjb2xJZF0gPT09IERhdG9HcmlkQWxpZ25tZW50LkZJVF9UT19DT05URU5UKSB7XG4gICAgICAgICAgICBjb2x1bW5zLmF1dG9TaXplQ29sdW1uKGNvbElkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29sdW1ucy5zZXRDb2x1bW5XaWR0aChjb2xJZCwgY29sdW1uc1NpemVzW2NvbElkXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JpZEFsaWdubWVudCA9PT0gRGF0b0dyaWRBbGlnbm1lbnQuRklUX1RPX0NPTlRFTlQgPyBjb2x1bW5zLmF1dG9TaXplQWxsQ29sdW1ucygpIDogZ3JpZC5zaXplQ29sdW1uc1RvRml0KCk7XG4gICAgfVxuXG4gICAgLyogUGluIGNvbHVtbnMgbGVmdCAqL1xuICAgIGNvbnN0IGZpbHRlcmVkUGlubmVkQ29sdW1ucyA9IHBpbm5lZENvbHVtbnNcbiAgICAgID8gcGlubmVkQ29sdW1ucy5maWx0ZXIoKGNvbDogc3RyaW5nKSA9PiBjb2wgIT09IHRoaXMuQ0hFQ0tCT1hfU0VMRUNUSU9OX0NPTF9JRClcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSBjb2x1bW5zT3JkZXJcbiAgICAgID8gY29sdW1uc09yZGVyLmZpbHRlcigoY29sOiBzdHJpbmcpID0+IGNvbCAhPT0gdGhpcy5DSEVDS0JPWF9TRUxFQ1RJT05fQ09MX0lEKVxuICAgICAgOiBudWxsO1xuICAgIHNpemUoZmlsdGVyZWRQaW5uZWRDb2x1bW5zKSA+IDBcbiAgICAgID8gY29sdW1ucy5zZXRDb2x1bW5zUGlubmVkKGZpbHRlcmVkUGlubmVkQ29sdW1ucywgJ2xlZnQnKVxuICAgICAgOiBmaWx0ZXJlZENvbHVtbnMgJiYgY29sdW1ucy5zZXRDb2x1bW5zUGlubmVkKGZpbHRlcmVkQ29sdW1ucywgbnVsbCk7XG5cbiAgICAvKiBPcmRlciBjb2x1bW5zICovXG4gICAgY29sdW1uc09yZGVyICYmIGNvbHVtbnMubW92ZUNvbHVtbnMoY29sdW1uc09yZGVyLCAwKTtcbiAgfVxuXG4gIGdldFNldHRpbmdzRGlmZigpOiBQYXJ0aWFsPERhdG9HcmlkU2V0dGluZ3M+IHtcbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLmdyaWRRdWVyeS5nZXRDdXJyZW50R3JpZFNldHRpbmdzKCk7XG4gICAgcmV0dXJuIGRpZmYoY3VycmVudFN0YXRlLCB0aGlzLmluaXRpYWxTZXR0aW5ncyk7XG4gIH1cblxuICByZXNldFRhYmxlU2V0dGluZ3MoKSB7XG4gICAgY29uc3QgeyBmaWx0ZXIsIC4uLnJlc3QgfSA9IHRoaXMuaW5pdGlhbFNldHRpbmdzO1xuICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gdGhpcy5hcGk7XG4gICAgY29uc3Qgb3JpZ2luYWxDb2xTaXplcyA9IGdldENvbHVtbnNTaXplcyhjb2x1bW5zLmdldEFsbEdyaWRDb2x1bW5zKCksIHRydWUpO1xuICAgIGNvbnN0IGdyaWRBbGlnbm1lbnQgPSBpc0VtcHR5KG9yaWdpbmFsQ29sU2l6ZXMpID8gcmVzdC5ncmlkQWxpZ25tZW50IDogRGF0b0dyaWRBbGlnbm1lbnQuQ1VTVE9NO1xuICAgIGNvbnN0IG5ld1NldHRpbmdzID0geyAuLi5yZXN0LCBjb2x1bW5zU2l6ZXM6IG9yaWdpbmFsQ29sU2l6ZXMsIGdyaWRBbGlnbm1lbnQgfTtcbiAgICB0aGlzLnVwZGF0ZVNldHRpbmdzKG5ld1NldHRpbmdzKTtcbiAgICB0aGlzLmxvYWRTYXZlZFNldHRpbmdzKG5ld1NldHRpbmdzKTtcbiAgICB0aGlzLnNhdmVTZXR0aW5nc1RvU2VydmVyKHsgZmlsdGVyIH0pO1xuICB9XG5cbiAgaW5pdFNldHRpbmdzKHNhdmVkU2V0dGluZ3M6IFBhcnRpYWw8RGF0b0dyaWRTZXR0aW5ncz4pIHtcbiAgICB0aGlzLmluaXRpYWxTZXR0aW5ncyA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEN1cnJlbnRHcmlkU2V0dGluZ3MoKTtcbiAgICB0aGlzLnVwZGF0ZVNldHRpbmdzKHNhdmVkU2V0dGluZ3MpO1xuICAgIHRoaXMubG9hZFNhdmVkU2V0dGluZ3Moc2F2ZWRTZXR0aW5ncyk7XG4gIH1cblxuICBub3RpZnlGaWx0ZXJVcGRhdGUoKSB7XG4gICAgY29uc3Qgd2F0Y2ggPSBbdGhpcy5ncmlkUmVmLmZpbHRlckNoYW5nZWQuYXNPYnNlcnZhYmxlKCldO1xuICAgIGlmICh0aGlzLmdyaWRRdWVyeS5pc1NlcnZlclNpZGUpIHtcbiAgICAgIHdhdGNoLnB1c2godGhpcy5ncmlkUXVlcnkuc2VydmVyRGF0YUxvYWRlZCQpO1xuICAgICAgdGhpcy5zZXRMb2FkaW5nKHRydWUpO1xuICAgIH1cbiAgICBjb21iaW5lTGF0ZXN0KHdhdGNoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgY29uc3Qgcm93c0FmdGVyRmlsdGVyID0gdGhpcy5hcGkuZ3JpZC5nZXREaXNwbGF5ZWRSb3dDb3VudCgpO1xuICAgICAgICB0aGlzLnNldE92ZXJsYXkocm93c0FmdGVyRmlsdGVyID09PSAwKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuYXBpLmdyaWQub25GaWx0ZXJDaGFuZ2VkKCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VydmVyUmVxdWVzdEZpbHRlcnMoZmlsdGVyOiBEYXRvR3JpZEZpbHRlcnNNYXApOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlcnMge1xuICAgIGNvbnN0IGNvbHVtbnNGaWx0ZXJzOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlcnMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtjb2x1bW4sIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmaWx0ZXIpKSB7XG4gICAgICBjb25zdCB7IGJ5VmFsdWUsIGNvbmRpdGlvbmFsIH0gPSB2YWx1ZTtcbiAgICAgIGlmIChieVZhbHVlKSB7XG4gICAgICAgIGNvbHVtbnNGaWx0ZXJzW2NvbHVtbl0gPSB7XG4gICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELFxuICAgICAgICAgIGZpbHRlcnM6IFtieVZhbHVlXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKGNvbmRpdGlvbmFsKSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbmFsRmlsdGVyID0ge1xuICAgICAgICAgIG9wZXJhdG9yOiBjb25kaXRpb25hbC5vcGVyYXRvcixcbiAgICAgICAgICBmaWx0ZXJzOiBjb25kaXRpb25hbC5jb25kaXRpb25zLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgY29uZGl0aW9uLCB2YWx1ZSB9ID0gaXRlbTtcbiAgICAgICAgICAgIGlmIChjb25kaXRpb24gPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX1JBTkdFKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29uZGl0aW9uLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiB2YWx1ZSxcbiAgICAgICAgICAgICAgICBlbmQ6IChpdGVtIGFzIERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb24pLnJhbmdlRW5kXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXRlbSBhcyBEYXRvR3JpZEZpbHRlckNvbmRpdGlvbjtcbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgICBpZiAoYnlWYWx1ZSkge1xuICAgICAgICAgIGNvbHVtbnNGaWx0ZXJzW2NvbHVtbl0uZmlsdGVycy5wdXNoKGNvbmRpdGlvbmFsRmlsdGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2x1bW5zRmlsdGVyc1tjb2x1bW5dID0gY29uZGl0aW9uYWxGaWx0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29sdW1uc0ZpbHRlcnM7XG4gIH1cblxuICBidWlsZFNlcnZlclJlcXVlc3RGaWx0ZXJzX3YyXzEoZ3JpZENvbHVtbnM6IERhdG9HcmlkQ29sdW1uRGVmW10pOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlciB7XG4gICAgY29uc3QgZmlsdGVyID0gdGhpcy5ncmlkUXVlcnkuZ2V0RmlsdGVyKCk7XG4gICAgY29uc3Qgc2VhcmNoVGVybSA9IHRoaXMuZ3JpZFF1ZXJ5LmdldFNlYXJjaFRlcm0oKTtcblxuICAgIGxldCBjb2x1bW5GaWx0ZXJzID0gdGhpcy5idWlsZFNlcnZlckNvbHVtbkZpbHRlcnNfdjJfMShmaWx0ZXIpO1xuICAgIGlmIChjb2x1bW5GaWx0ZXJzLmV2ZXJ5KCh7IG9wZXJhdG9yIH06IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyKSA9PiBvcGVyYXRvciA9PT0gT3BlcmF0b3JUeXBlcy5BTkQpKSB7XG4gICAgICBjb25zdCBmbGF0dGVuZWRGaWx0ZXJzID0gY29sdW1uRmlsdGVyc1xuICAgICAgICAubWFwKCh7IGZpbHRlcnMgfTogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXIpID0+IGZpbHRlcnMpXG4gICAgICAgIC5yZWR1Y2UoKGFyciwgcmVzKSA9PiByZXMuY29uY2F0KGFyciksIFtdKTtcbiAgICAgIGNvbHVtbkZpbHRlcnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5BTkQsXG4gICAgICAgICAgZmlsdGVyczogZmxhdHRlbmVkRmlsdGVyc1xuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW5GaWx0ZXI6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyID1cbiAgICAgIHNpemUoY29sdW1uRmlsdGVycykgPiAxXG4gICAgICAgID8geyBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5BTkQsIGZpbHRlcnM6IGNvbHVtbkZpbHRlcnMgfVxuICAgICAgICA6IHNpemUoY29sdW1uRmlsdGVycykgPT09IDFcbiAgICAgICAgPyBjb2x1bW5GaWx0ZXJzWzBdXG4gICAgICAgIDogbnVsbDtcbiAgICBpZiAoIXNlYXJjaFRlcm0pIHtcbiAgICAgIHJldHVybiBjb2x1bW5GaWx0ZXI7XG4gICAgfVxuICAgIGNvbnN0IHsgaW5jbHVkZUhpZGRlbkNvbHVtbnNJblNlYXJjaCB9ID0gdGhpcy5ncmlkUXVlcnkuZ2V0R3JpZE9wdGlvbnMoKTtcbiAgICBjb25zdCBzZWFyY2hhYmxlQ29sdW1ucyA9IGdyaWRDb2x1bW5zLmZpbHRlcigoY29sRGVmOiBEYXRvR3JpZENvbHVtbkRlZikgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgY29sRGVmLmluY2x1ZGVJblNlYXJjaCAmJiAoaW5jbHVkZUhpZGRlbkNvbHVtbnNJblNlYXJjaCB8fCB0aGlzLmFwaS5jb2x1bW5zLmdldENvbHVtbihjb2xEZWYuY29sSWQpLmlzVmlzaWJsZSgpKVxuICAgICAgKTtcbiAgICB9KTtcbiAgICBjb25zdCBzZWFyY2hGaWx0ZXJzOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmRpdGlvbltdID0gc2VhcmNoYWJsZUNvbHVtbnMubWFwKCh7IGZpZWxkIH06IERhdG9HcmlkQ29sdW1uRGVmKSA9PiAoe1xuICAgICAgY29uZGl0aW9uOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5DT05UQUlOUyxcbiAgICAgIHZhbHVlOiBzZWFyY2hUZXJtLFxuICAgICAgY29sdW1uOiBmaWVsZFxuICAgIH0pKTtcbiAgICBjb25zdCBzZWFyY2hGaWx0ZXI6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyID1cbiAgICAgIHNpemUoc2VhcmNoRmlsdGVycykgPiAwID8geyBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5PUiwgZmlsdGVyczogc2VhcmNoRmlsdGVycyB9IDogbnVsbDtcbiAgICBpZiAoIWNvbHVtbkZpbHRlcikge1xuICAgICAgcmV0dXJuIHNlYXJjaEZpbHRlcjtcbiAgICB9XG4gICAgcmV0dXJuIHsgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELCBmaWx0ZXJzOiBbY29sdW1uRmlsdGVyLCBzZWFyY2hGaWx0ZXJdIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VydmVyQ29sdW1uRmlsdGVyc192Ml8xKGZpbHRlcjogRGF0b0dyaWRGaWx0ZXJzTWFwKTogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXJbXSB7XG4gICAgbGV0IGNvbHVtbkZpbHRlcnM6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2NvbHVtbiwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZpbHRlcikpIHtcbiAgICAgIGxldCBjb2x1bW5GaWx0ZXI6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyID0gbnVsbDtcbiAgICAgIGNvbnN0IHsgYnlWYWx1ZSwgY29uZGl0aW9uYWwgfSA9IHZhbHVlO1xuICAgICAgaWYgKGJ5VmFsdWUpIHtcbiAgICAgICAgY29sdW1uRmlsdGVyID0ge1xuICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvclR5cGVzLkFORCxcbiAgICAgICAgICBmaWx0ZXJzOiBbeyBjb2x1bW4sIC4uLmJ5VmFsdWUgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChjb25kaXRpb25hbCkge1xuICAgICAgICBjb25zdCBjb25kaXRpb25hbEZpbHRlcjogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXIgPSB0aGlzLmdldFNlcnZlckNvbmRpdGlvbmFsRmlsdGVyKGNvbmRpdGlvbmFsLCBjb2x1bW4pO1xuICAgICAgICBpZiAoY29sdW1uRmlsdGVyKSB7XG4gICAgICAgICAgY29sdW1uRmlsdGVyLmZpbHRlcnMucHVzaChjb25kaXRpb25hbEZpbHRlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sdW1uRmlsdGVyID0gY29uZGl0aW9uYWxGaWx0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbHVtbkZpbHRlcnMucHVzaChjb2x1bW5GaWx0ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gY29sdW1uRmlsdGVycztcbiAgfVxuXG4gIGdldEZpbHRlckZvclNlcnZlckFjdGlvbk9uU2VsZWN0QWxsKCk6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyIHtcbiAgICBjb25zdCB7IGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbCB9ID0gdGhpcy5ncmlkUXVlcnkuc2VydmVyU2lkZUNvbmZpZztcbiAgICBjb25zdCB7IGNvbHVtbkRlZnMsIGlkQ29sdW1uS2V5IH0gPSB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpO1xuICAgIGNvbnN0IG1haW5GaWx0ZXIgPSB0aGlzLmJ1aWxkU2VydmVyUmVxdWVzdEZpbHRlcnNfdjJfMShjb2x1bW5EZWZzKTtcbiAgICBpZiAoaXNFbXB0eShleGNsdWRlZEZyb21TZWxlY3RBbGwpKSB7XG4gICAgICByZXR1cm4gbWFpbkZpbHRlcjtcbiAgICB9XG4gICAgY29uc3QgZXhjbHVkZWRSb3dzRmlsdGVyOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkxpc3RDb25kaXRpb24gPSB7XG4gICAgICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNULFxuICAgICAgdmFsdWVzOiBleGNsdWRlZEZyb21TZWxlY3RBbGwsXG4gICAgICBjb2x1bW46IGlkQ29sdW1uS2V5XG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXJzID0gbWFpbkZpbHRlciA/IFttYWluRmlsdGVyLCBleGNsdWRlZFJvd3NGaWx0ZXJdIDogW2V4Y2x1ZGVkUm93c0ZpbHRlcl07XG4gICAgcmV0dXJuIHsgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELCBmaWx0ZXJzIH07XG4gIH1cblxuICBwcml2YXRlIGdldFNlcnZlckNvbmRpdGlvbmFsRmlsdGVyKFxuICAgIGNvbmRpdGlvbmFsRmlsdGVyOiBEYXRvR3JpZENvbmRpdGlvbmFsRmlsdGVyLFxuICAgIGNvbHVtbjogc3RyaW5nXG4gICk6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3BlcmF0b3I6IGNvbmRpdGlvbmFsRmlsdGVyLm9wZXJhdG9yLFxuICAgICAgZmlsdGVyczogY29uZGl0aW9uYWxGaWx0ZXIuY29uZGl0aW9ucy5tYXAoaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29uZGl0aW9uLCB2YWx1ZSB9ID0gaXRlbTtcbiAgICAgICAgaWYgKGNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0UpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29uZGl0aW9uLFxuICAgICAgICAgICAgc3RhcnQ6IHZhbHVlLFxuICAgICAgICAgICAgZW5kOiAoaXRlbSBhcyBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uKS5yYW5nZUVuZCxcbiAgICAgICAgICAgIGNvbHVtblxuICAgICAgICAgIH0gYXMgU2VydmVyU2lkZVBhZ2luYXRpb25SYW5nZUNvbmRpdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZGl0aW9uID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JU19FTVBUWSB8fCBjb25kaXRpb24gPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9FTVBUWSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLklTX0VNUFRZLFxuICAgICAgICAgICAgdmFsdWU6IGNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSVNfRU1QVFkgPyAndHJ1ZScgOiAnZmFsc2UnLFxuICAgICAgICAgICAgY29sdW1uXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZGl0aW9uID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JU19OVUxMIHx8IGNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX05VTEwpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29uZGl0aW9uOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JU19OVUxMLFxuICAgICAgICAgICAgdmFsdWU6IGNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSVNfTlVMTCA/ICd0cnVlJyA6ICdmYWxzZScsXG4gICAgICAgICAgICBjb2x1bW5cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IC4uLml0ZW0sIGNvbHVtbiB9IGFzIFNlcnZlclNpZGVQYWdpbmF0aW9uQ29uZGl0aW9uO1xuICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFNlcnZlclJlcXVlc3RTb3J0KHNvcnRNb2RlbDogRGF0b0dyaWRTb3J0W10pOiBEYXRvR3JpZFNlcnZlclNvcnRbXSB7XG4gICAgcmV0dXJuIHNvcnRNb2RlbC5tYXAoKHsgY29sSWQsIHNvcnQgfSkgPT4gKHtcbiAgICAgIGNvbHVtbjogY29sSWQsXG4gICAgICBzb3J0T3JkZXI6IHNvcnQudG9VcHBlckNhc2UoKSBhcyBEYXRvR3JpZFNlcnZlclNvcnREaXJlY3Rpb25cbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGFkZEVkaXRhYmxlQ2VsbENsYXNzKFxuICAgIGNlbGxDbGFzc1ZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8ICgoY2VsbENsYXNzUGFyYW1zOiBDZWxsQ2xhc3NQYXJhbXMpID0+IHN0cmluZyB8IHN0cmluZ1tdKVxuICApIHtcbiAgICBpZiAoaXNOaWwoY2VsbENsYXNzVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ2RhdG8tZWRpdGFibGUtY2VsbCc7XG4gICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKGNlbGxDbGFzc1ZhbHVlKSkge1xuICAgICAgcmV0dXJuIGNlbGxDbGFzc1BhcmFtcyA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEVkaXRhYmxlQ2xhc3NBcnJheShjZWxsQ2xhc3NWYWx1ZShjZWxsQ2xhc3NQYXJhbXMpKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldEVkaXRhYmxlQ2xhc3NBcnJheShjZWxsQ2xhc3NWYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGdldEVkaXRhYmxlQ2xhc3NBcnJheShjdXJyZW50Q2xhc3M6IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNlbGxDbGFzcyA9IGNvZXJjZUFycmF5KGN1cnJlbnRDbGFzcyk7XG4gICAgY2VsbENsYXNzLnB1c2goJ2RhdG8tZWRpdGFibGUtY2VsbCcpO1xuICAgIHJldHVybiBjZWxsQ2xhc3M7XG4gIH1cblxuICBzZWxlY3RBbGxDdXJyZW50UGFnZVJvd3MoaXNTZWxlY3RlZCA9IHRydWUsIGNvbnNpZGVyRXhjbHVkZWQgPSBmYWxzZSkge1xuICAgIGxldCByb3dzRm9yU2VsZWN0aW9uID0gdGhpcy5ncmlkUXVlcnkuZ2V0Q3VycmVudFBhZ2VSb3dzKCk7XG4gICAgaWYgKGNvbnNpZGVyRXhjbHVkZWQpIHtcbiAgICAgIGNvbnN0IHsgZXhjbHVkZWRGcm9tU2VsZWN0QWxsIH0gPSB0aGlzLmdyaWRRdWVyeS5zZXJ2ZXJTaWRlQ29uZmlnO1xuICAgICAgaWYgKCFpc0VtcHR5KGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbCkpIHtcbiAgICAgICAgcm93c0ZvclNlbGVjdGlvbiA9IHJvd3NGb3JTZWxlY3Rpb24uZmlsdGVyKCh7IGlkIH06IFJvd05vZGUpID0+ICFleGNsdWRlZEZyb21TZWxlY3RBbGwuaW5jbHVkZXMoaWQpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaXNTZWxlY3RlZCA/IHRoaXMuc2VsZWN0Um93cyhyb3dzRm9yU2VsZWN0aW9uKSA6IHRoaXMuZGVzZWxlY3RSb3dzKHJvd3NGb3JTZWxlY3Rpb24pO1xuICB9XG5cbiAgZGVzZWxlY3RBbGxSb3dzKCkge1xuICAgIHRoaXMuYXBpLmdyaWQuZGVzZWxlY3RBbGwoKTtcbiAgICBpZiAodGhpcy5ncmlkUXVlcnkuaXNTZXJ2ZXJTZWxlY3RBbGxSb3dzRW5hYmxlZCkge1xuICAgICAgdGhpcy5zZXRTZXJ2ZXJTaWRlUGFnaW5hdGlvbih7IHNlbGVjdEFsbFJvd3NFbmFibGVkOiBmYWxzZSwgZXhjbHVkZWRGcm9tU2VsZWN0QWxsOiBbXSB9KTtcbiAgICB9XG4gIH1cblxuICByZXNvbHZlUm93QWN0aW9uc1Zpc2liaWxpdHkoKSB7XG4gICAgdGhpcy5ncmlkUXVlcnkuX3Jvd0FjdGlvblZpc2liaWxpdHlDaGFuZ2VkLm5leHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIHBpdm90aW5nLFxuICAgKiB3ZSBhZGQgdGhlIGZpZWxkIG5hbWUgdG8gdGhlIGNvbHVtbiBoZWFkZXIgY2xhc3MgaW4gb3JkZXIgdG8gYWNjZXNzIGl0IHRocm91Z2ggdGhlIGF1dG8gZ2VuZXJhdGVkIHBpdm90IGNvbHVtbi5cbiAgICovXG4gIHByaXZhdGUgaW5pdFBpdm90U2Vjb25kYXJ5Q29sc1Byb2Nlc3MoeyBncmlkT3B0aW9ucyB9OiBOb3JtYWxpemVPcHRpb25zUGFyYW1zKSB7XG4gICAgLyoqIFVzZSBwcm9jZXNzUGl2b3RSZXN1bHRDb2xEZWYgZnJvbSB2ZXIgMjggKi9cbiAgICBncmlkT3B0aW9ucy5wcm9jZXNzU2Vjb25kYXJ5Q29sRGVmID0gY29sRGVmID0+IHtcbiAgICAgIGNvbnN0IHVzZXJQcm92aWRlZENvbERlZiA9IGNvbERlZi5waXZvdFZhbHVlQ29sdW1uICYmIGNvbERlZi5waXZvdFZhbHVlQ29sdW1uLmdldFVzZXJQcm92aWRlZENvbERlZigpO1xuXG4gICAgICBpZiAodXNlclByb3ZpZGVkQ29sRGVmKSB7XG4gICAgICAgIGNvbERlZi5maWx0ZXIgPSB1c2VyUHJvdmlkZWRDb2xEZWYuZmlsdGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sRGVmLnBpdm90S2V5cykge1xuICAgICAgICBjb2xEZWYucGl2b3RLZXlzID0gY29sRGVmLnBpdm90S2V5cy5tYXAoa2V5ID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJzZWRLZXkgPSB0cnlQYXJzZVBpdm90VmFsdWUoa2V5KTtcblxuICAgICAgICAgIHJldHVybiAocGFyc2VkS2V5ICYmIHBhcnNlZEtleS52YWx1ZSkgfHwgJyc7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvKiogVXNlIHByb2Nlc3NQaXZvdFJlc3VsdENvbEdyb3VwRGUgZnJvbSB2ZXIgMjggKi9cbiAgICBncmlkT3B0aW9ucy5wcm9jZXNzU2Vjb25kYXJ5Q29sR3JvdXBEZWYgPSAoY29sR3JvdXBEZWY6IENvbEdyb3VwRGVmKSA9PiB7XG4gICAgICBpZiAoY29sR3JvdXBEZWYuaGVhZGVyTmFtZSkge1xuICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHRyeVBhcnNlUGl2b3RWYWx1ZShjb2xHcm91cERlZi5oZWFkZXJOYW1lKTtcblxuICAgICAgICBpZiAocGFyc2VkVmFsdWUpIHtcbiAgICAgICAgICBjb25zdCB7IGZpZWxkLCB2YWx1ZSB9ID0gcGFyc2VkVmFsdWU7XG5cbiAgICAgICAgICBjb2xHcm91cERlZi5oZWFkZXJDbGFzcyA9IFtmaWVsZF07XG4gICAgICAgICAgY29sR3JvdXBEZWYuaGVhZGVyTmFtZSA9IHZhbHVlO1xuXG4gICAgICAgICAgaWYgKGNvbEdyb3VwRGVmLmNoaWxkcmVuICYmIGNvbEdyb3VwRGVmLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbEdyb3VwRGVmLmhlYWRlckNsYXNzLnB1c2goJ2dyb3VwLXBpdm90LWNlbGwnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29sR3JvdXBEZWYuY2hpbGRyZW4pIHtcbiAgICAgICAgY29uc3QgW2NvbENoaWxkXTogYW55ID0gY29sR3JvdXBEZWYuY2hpbGRyZW47XG4gICAgICAgIGNvbnN0IHBpdm90VG90YWxDb2x1bW5JZHMgPSBjb2xDaGlsZCAmJiBjb2xDaGlsZC5waXZvdFRvdGFsQ29sdW1uSWRzO1xuXG4gICAgICAgIGlmIChwaXZvdFRvdGFsQ29sdW1uSWRzICYmIHBpdm90VG90YWxDb2x1bW5JZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbEdyb3VwRGVmLmhlYWRlckNsYXNzID0gWyd0b3RhbC1waXZvdC1jZWxsJ107XG4gICAgICAgICAgY29sR3JvdXBEZWYuaGVhZGVyTmFtZSA9IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSgnY29yZS50b3RhbCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2xHcm91cERlZi5oZWFkZXJDbGFzcyA9IFsnZW1wdHktcGl2b3QtaGVhZGVyJ107XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2xHcm91cERlZi5waXZvdEtleXMpIHtcbiAgICAgICAgY29sR3JvdXBEZWYucGl2b3RLZXlzID0gY29sR3JvdXBEZWYucGl2b3RLZXlzLm1hcChrZXkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZEtleSA9IHRyeVBhcnNlUGl2b3RWYWx1ZShrZXkpO1xuXG4gICAgICAgICAgcmV0dXJuIChwYXJzZWRLZXkgJiYgcGFyc2VkS2V5LnZhbHVlKSB8fCAnJztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UGl2b3RNb2RlUm93czxUPihkYXRhOiBUW10pIHtcbiAgICBjb25zdCBwaXZvdENvbHVtbnMgPSB0aGlzLmdyaWRRdWVyeS5nZXRBbGxQaXZvdENvbHVtbnMoKTtcbiAgICBjb25zdCBjb252ZXJ0ZWREYXRhID0gZGF0YS5tYXAoKGN1cnJlbnRWYWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG1hcHBlZFZhbHVlcyA9IHsgLi4uY3VycmVudFZhbHVlIH07XG5cbiAgICAgIGZvciAoY29uc3QgY29sIG9mIHBpdm90Q29sdW1ucykge1xuICAgICAgICBjb25zdCBmaWVsZCA9IGNvbC5nZXRDb2xEZWYoKS5maWVsZDtcbiAgICAgICAgY29uc3QgcGl2b3RWYWx1ZTogUGl2b3RDb2x1bW5EYXRhID0geyBmaWVsZCwgdmFsdWU6IGN1cnJlbnRWYWx1ZVtmaWVsZF0gfTtcblxuICAgICAgICBtYXBwZWRWYWx1ZXNbZmllbGRdID0gSlNPTi5zdHJpbmdpZnkocGl2b3RWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtYXBwZWRWYWx1ZXM7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFwaS5ncmlkLnNldFJvd0RhdGEoY29udmVydGVkRGF0YSk7XG4gIH1cblxuICAvKiogTm8gZGVjbGFyZWQgaW50ZXJmYWNlIGluIGN1cnJlbnQgZ3JpZCB2ZXJzaW9uIHlldC5cbiAgICogIFJlZmVyIGRvY3MgLSBodHRwczovL3d3dy5hZy1ncmlkLmNvbS9hbmd1bGFyLWRhdGEtZ3JpZC9jZWxsLXN0eWxlcy8jY2VsbC1jbGFzcy1ydWxlcyAqL1xuICBwcml2YXRlIGdldFBpdm90TW9kZUNlbGxDbGFzc1J1bGVzKCkge1xuICAgIHJldHVybiB7XG4gICAgICAncHJpbWFyeS0wLWJhY2tncm91bmQtY29sb3InOiB0aGlzLmlzTGVhZkdyb3VwRXZlbkNlbGwuYmluZCh0aGlzKSxcbiAgICAgICdwcmltYXJ5LTEwMC1iYWNrZ3JvdW5kLWNvbG9yIHBvaW50ZXIgZGF0by1zaW1wbGUtYm9sZCc6IHRoaXMuaXNSb3dHcm91cFZhbHVlZENlbGwuYmluZCh0aGlzKVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGlzTGVhZkdyb3VwRXZlbkNlbGwocGFyYW1zOiBDZWxsQ2xhc3NQYXJhbXMpOiBib29sZWFuIHtcbiAgICBjb25zdCB7IGxlYWZHcm91cCwgY2hpbGRJbmRleCwgcm93R3JvdXBJbmRleCB9ID0gcGFyYW1zLm5vZGU7XG4gICAgY29uc3QgY29sSW5kZXggPSB0aGlzLmdldENlbGxDbGFzc1J1bGVDb2xJbmRleChwYXJhbXMpO1xuXG4gICAgcmV0dXJuIHJvd0dyb3VwSW5kZXggPD0gY29sSW5kZXggJiYgbGVhZkdyb3VwICYmIGNoaWxkSW5kZXggJSAyID09PSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1Jvd0dyb3VwVmFsdWVkQ2VsbChwYXJhbXM6IENlbGxDbGFzc1BhcmFtcyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHsgbGVhZkdyb3VwLCByb3dHcm91cEluZGV4IH0gPSBwYXJhbXMubm9kZTtcbiAgICBjb25zdCBjb2xJbmRleCA9IHRoaXMuZ2V0Q2VsbENsYXNzUnVsZUNvbEluZGV4KHBhcmFtcyk7XG5cbiAgICByZXR1cm4gcm93R3JvdXBJbmRleCA8PSBjb2xJbmRleCAmJiAhbGVhZkdyb3VwO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDZWxsQ2xhc3NSdWxlQ29sSW5kZXgocGFyYW1zOiBDZWxsQ2xhc3NQYXJhbXMpOiBudW1iZXIge1xuICAgIGNvbnN0IGdyaWRRdWVyeSA9IHBhcmFtcy5jb2xEZWYuaGVhZGVyQ29tcG9uZW50UGFyYW1zLmdyaWRRdWVyeTtcblxuICAgIGlmIChncmlkUXVlcnkgJiYgZ3JpZFF1ZXJ5LmFwaSkge1xuICAgICAgY29uc3QgeyBjb2x1bW5zIH0gPSBncmlkUXVlcnkuYXBpIGFzIERhdG9HcmlkQXBpO1xuICAgICAgY29uc3QgYWxsRGlzcGxheWVkQ29sdW1ucyA9IGNvbHVtbnMuZ2V0QWxsRGlzcGxheWVkQ29sdW1ucygpO1xuICAgICAgY29uc3QgZGlzcGxheWVkQ29sdW1uID0gYWxsRGlzcGxheWVkQ29sdW1ucy5maW5kKGNvbCA9PiBjb2wuZ2V0Q29sSWQoKSA9PT0gcGFyYW1zLmNvbERlZi5jb2xJZCk7XG5cbiAgICAgIHJldHVybiBhbGxEaXNwbGF5ZWRDb2x1bW5zLmluZGV4T2YoZGlzcGxheWVkQ29sdW1uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gLTE7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2ljb24vaWNvbi50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgSWNvbklucHV0cyA9IHtcbiAgbmFtZT86IHN0cmluZztcbiAgc2l6ZT86ICdsZycgfCAnbWQnIHwgJ3NtJztcbiAgY29sb3I/OiBzdHJpbmc7XG4gIHdpZHRoPzogc3RyaW5nO1xuICBoZWlnaHQ/
|
|
1
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2ljb24vaWNvbi50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgSWNvbklucHV0cyA9IHtcbiAgbmFtZT86IHN0cmluZztcbiAgc2l6ZT86ICdsZycgfCAnbWQnIHwgJ3NtJztcbiAgY29sb3I/OiBzdHJpbmc7XG4gIHdpZHRoPzogc3RyaW5nO1xuICBoZWlnaHQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBEYXRvSWNvbnMgPVxuICB8ICdhY2NvdW50J1xuICB8ICdhY3Rpb24tY2VudGVyJ1xuICB8ICdhY3Rpb24nXG4gIHwgJ2FkZC1jb2xsZWN0aW9uJ1xuICB8ICdhZGQtcGFnZSdcbiAgfCAnYWRkLXdpZGdldCdcbiAgfCAnYWR2aXNvcidcbiAgfCAnYWxsLWNvbGxlY3Rpb25zJ1xuICB8ICdhbHRlcm5hdGl2ZXMnXG4gIHwgJ2FueW9uZSdcbiAgfCAnYXBwLXBhZ2UnXG4gIHwgJ2FwcHMtdGFiJ1xuICB8ICdhcHBzJ1xuICB8ICdhcnJvdy1kb3duJ1xuICB8ICdhcnJvdy1sZWZ0J1xuICB8ICdhcnJvdy1yaWdodCdcbiAgfCAnYXJyb3ctdXAnXG4gIHwgJ2FydGljbGUnXG4gIHwgJ2F1dGhlbnRpY2F0aW9uLWVuYWJsZSdcbiAgfCAnYXV0aGVudGljYXRpb24nXG4gIHwgJ2F1dG8tZm9ybWF0J1xuICB8ICdhdXRvbWF0ZSdcbiAgfCAnYmFja2dyb3VuZCdcbiAgfCAnYnJhbmRpbmcnXG4gIHwgJ2J1aWxkZXInXG4gIHwgJ2NhbGVuZGFyJ1xuICB8ICdjZXJ0aWZpY2F0ZSdcbiAgfCAnY2VydGlmaWNhdGlvbidcbiAgfCAnY2hhcnRzJ1xuICB8ICdjaGV2cm9uLWRvd24tZG91YmxlJ1xuICB8ICdjaGV2cm9uLWRvd24nXG4gIHwgJ2NoZXZyb24tbGVmdC1kb3VibGUnXG4gIHwgJ2NoZXZyb24tbGVmdCdcbiAgfCAnY2hldnJvbi1yaWdodC1kb3VibGUnXG4gIHwgJ2NoZXZyb24tcmlnaHQnXG4gIHwgJ2NoZXZyb24tdXAtZG91YmxlJ1xuICB8ICdjaGV2cm9uLXVwJ1xuICB8ICdjbGFzc2lmaWNhdGlvbidcbiAgfCAnY2xvc2UnXG4gIHwgJ2NvbGxhYm9yYXRlJ1xuICB8ICdjb2xsYXBzZSdcbiAgfCAnY29tbWVudC1jb2RlJ1xuICB8ICdjb21wYXJyaXNvbidcbiAgfCAnY29ubmVjdCdcbiAgfCAnY29ubmVjdGVkJ1xuICB8ICdjb3B5LXRvJ1xuICB8ICdjb3B5J1xuICB8ICdjb3N0LWNlbnRlcidcbiAgfCAnY3VycmVudCdcbiAgfCAnZGF0YS10cmFuc2Zvcm1lZCdcbiAgfCAnZGF0YS1jbGFzc2lmaWNhdGlvbidcbiAgfCAnZGF0YS1mdXNpb24nXG4gIHwgJ2RhdGEtbGFrZXMnXG4gIHwgJ2RhdGEtbW9kZWwnXG4gIHwgJ2RhdGEtcHJldmlldydcbiAgfCAnZGF0YS1zY2llbmNlJ1xuICB8ICdkYXRhLXN0cmVhbSdcbiAgfCAnZGVwbG95J1xuICB8ICdkZXNjcmlwdGlvbidcbiAgfCAnZGVzaWduJ1xuICB8ICdkZXYtcG9ydGFsJ1xuICB8ICdkaWFtb25kJ1xuICB8ICdkaW1lbnNpb24tdHlwZS0yJ1xuICB8ICdkaW1lbnNpb24nXG4gIHwgJ2RpcnR5J1xuICB8ICdkaXNtaXNzJ1xuICB8ICdkb3R0aWUnXG4gIHwgJ2Rvd25sb2FkJ1xuICB8ICdkcmFnLXdpbmRvdydcbiAgfCAnZHJhZydcbiAgfCAnZWRpdC1wYWdlJ1xuICB8ICdlZGl0LXdpZGdldCdcbiAgfCAnZWRpdCdcbiAgfCAnZWluc3RlaW4taW5zaWdodHMnXG4gIHwgJ2VsZW1lbnRzJ1xuICB8ICdlbWJlZCdcbiAgfCAnZXZhbHVhdGUnXG4gIHwgJ2V4cGFuZCdcbiAgfCAnZXhwbG9yZSdcbiAgfCAnZXhwb3J0LXN0YXRzJ1xuICB8ICdleHBvcnQnXG4gIHwgJ2V4dGVuZGVkLWxvZydcbiAgfCAnZXh0ZXJuYWwtZGF0YSdcbiAgfCAnZXh0ZXJuYWwtcGFnZSdcbiAgfCAnZXh0ZXJuYWwnXG4gIHwgJ2ZhaWxlZC1mdWxsJ1xuICB8ICdmYWlsZWQtbGluZSdcbiAgfCAnZmFpbGVkJ1xuICB8ICdmaWx0ZXInXG4gIHwgJ2ZpbHRlcnMtcGFnZSdcbiAgfCAnZmlsdGVycy13aWRnZXQnXG4gIHwgJ2ZpbmQtYW5kLXJlcGxhY2UnXG4gIHwgJ2ZvY3VzJ1xuICB8ICdmb2xkZXItY2xvc2VkJ1xuICB8ICdmb2xkZXItb3BlbidcbiAgfCAnZm9ybXVsYSdcbiAgfCAnZnJlZS10ZXh0J1xuICB8ICdmdWxsLWVudGl0eSdcbiAgfCAnZnVsbHNjcmVlbi1lbnRlcidcbiAgfCAnZnVsbHNjcmVlbi1leGl0J1xuICB8ICdnZW5lcmljLWJ1Y2tldCdcbiAgfCAnZ29hbHMnXG4gIHwgJ2dyaWQtaGlkZSdcbiAgfCAnZ3JvdXAnXG4gIHwgJ2hhbWJ1cmdlcidcbiAgfCAnaGFybW9uaXplZC1kaW1lbnNpb24nXG4gIHwgJ2hlYXJ0LWVtcHR5J1xuICB8ICdoZWFydC1mdWxsJ1xuICB8ICdoaWRlJ1xuICB8ICdoaWdobGlnaHQnXG4gIHwgJ2hpc3RvcnknXG4gIHwgJ2hvbWUnXG4gIHwgJ2hvdXItZ2xhc3MnXG4gIHwgJ2lkbGUnXG4gIHwgJ2ltcGVyc29uYXRlJ1xuICB8ICdpbmZvLWZ1bGwnXG4gIHwgJ2luZm8tbGluZSdcbiAgfCAnaW5mbydcbiAgfCAnaW5zdGFudCdcbiAgfCAnaW50ZXJhY3RpdmUtZmlsdGVyJ1xuICB8ICdpbnRlcmFjdGl2ZS1maWx0ZXJzZXQnXG4gIHwgJ2tleSdcbiAgfCAna25vd2xlZGdlLWJhc2UnXG4gIHwgJ2xhYmVsJ1xuICB8ICdsYXlvdXQtZmlsdGVyZWQnXG4gIHwgJ2xheW91dCdcbiAgfCAnbGlua2VkJ1xuICB8ICdsaXZlJ1xuICB8ICdsb2NhbGl6YXRpb24tMTY0J1xuICB8ICdsb2dpY2FsLXZpZXcnXG4gIHwgJ21hZ2ljLXdhbmQnXG4gIHwgJ21haW4tZW50aXR5J1xuICB8ICdtYW5hZ2UtY29sbGVjdGlvbnMnXG4gIHwgJ21hcC1yaWdodCdcbiAgfCAnbWFwLWxlZnQnXG4gIHwgJ21hcHBpbmcnXG4gIHwgJ21hcmtldCdcbiAgfCAnbWF4aW1pemUtaG9yaXpvbnRhbCdcbiAgfCAnbWF4aW1pemUnXG4gIHwgJ21lYXN1cmVtZW50LW5hdidcbiAgfCAnbWVhc3VyZW1lbnQnXG4gIHwgJ21pbmltaXplLWhvcml6b250YWwnXG4gIHwgJ21pbmltaXplJ1xuICB8ICdtb3JlLWhvcml6b250YWwnXG4gIHwgJ21vcmUtdmVydGljYWwnXG4gIHwgJ21vdmUtdG8tZm9sZGVyJ1xuICB8ICdteS1wcm9maWxlJ1xuICB8ICduYW1pbmctY29udmVudGlvbnMtcGF0dGVybnMnXG4gIHwgJ25ldy10YWInXG4gIHwgJ25vLWF1dGVudGljYXRpb24nXG4gIHwgJ25vLWVudHJ5J1xuICB8ICduby1maWxlJ1xuICB8ICduby1vbmUnXG4gIHwgJ25vdGVzLXJvdWRlZCdcbiAgfCAnbm90ZXMnXG4gIHwgJ25vdGlmaWNhdGlvbnMnXG4gIHwgJ3BhZ2UnXG4gIHwgJ3BhbmVsLWNsb3NlJ1xuICB8ICdwYW5lbC1vcGVuJ1xuICB8ICdwZW5kaW5nJ1xuICB8ICdwZW9wbGUnXG4gIHwgJ3BpbidcbiAgfCAncGl2b3QtdGFibGUnXG4gIHwgJ3BsYXknXG4gIHwgJ3BsdXMtYnRuJ1xuICB8ICdwbHVzLXNpbXBsZSdcbiAgfCAncHJlc2VudCdcbiAgfCAncHJvY2Vzcy10ZWNoLWFib3J0J1xuICB8ICdwcm9jZXNzLXRlY2gnXG4gIHwgJ3Byb2Nlc3MtZXJyb3InXG4gIHwgJ3Byb2Nlc3MnXG4gIHwgJ3B1Ymxpc2gnXG4gIHwgJ3B1c2gtZW50aXR5J1xuICB8ICdxdWVyeS1hcGknXG4gIHwgJ3JlLXJ1bidcbiAgfCAncmVjZW50J1xuICB8ICdyZWRvJ1xuICB8ICdyZWZyZXNoJ1xuICB8ICdyZW9mZmVyJ1xuICB8ICdyZW9yZGVyJ1xuICB8ICdyZXNldC1maWx0ZXJzJ1xuICB8ICdyZXNldC10YWJsZSdcbiAgfCAncmVzdG9yZSdcbiAgfCAncmV0cml2ZS1kYXRhJ1xuICB8ICdyb2NrZXQnXG4gIHwgJ3J1bi1sYXRlcidcbiAgfCAnc2FuZGJveC1jb2xvcidcbiAgfCAnc2FuZGJveC1taWQnXG4gIHwgJ3NhbmRib3gnXG4gIHwgJ3NhdmUtYXMnXG4gIHwgJ3NhdmUnXG4gIHwgJ3NjaGVkdWxlLWV4cG9ydCdcbiAgfCAnc2NyZWVuLWd1aWRlJ1xuICB8ICdzZWFyY2gnXG4gIHwgJ3NlbmQnXG4gIHwgJ3NlcnZlcidcbiAgfCAnc2hhcmUtZGFzaGJvYXJkJ1xuICB8ICdzaGFyZS10bydcbiAgfCAnc2hhcmUnXG4gIHwgJ3NoYXJpbmctYWRkLW91dGxpbmUnXG4gIHwgJ3NoYXJpbmctb3V0bGluZSdcbiAgfCAnc2hhcmluZydcbiAgfCAnc2hvdy1ncmlkJ1xuICB8ICdzaWduLW91dCdcbiAgfCAnc25pcHBldHMnXG4gIHwgJ3NvcnQtYXNjZW5kaW5nJ1xuICB8ICdzb3J0LWRlc2NlbmRpbmcnXG4gIHwgJ3NvcnQnXG4gIHwgJ3N0YXItZW1wdHknXG4gIHwgJ3N0YXItZnVsbC1jb2xvcidcbiAgfCAnc3Rhci1mdWxsJ1xuICB8ICdzdGF0dXMnXG4gIHwgJ3N1Y2Nlc3MtZnVsbCdcbiAgfCAnc3VjY2Vzcy1saW5lJ1xuICB8ICdzdWNjZXNzLXNpbXBsZSdcbiAgfCAnc3dpdGNoJ1xuICB8ICd0YWJsZS1yZWd1bGFyJ1xuICB8ICd0YWJsZSdcbiAgfCAndGFibGVhdSdcbiAgfCAndGVtcGxhdGUtZnVsbCdcbiAgfCAndGVtcGxhdGVzJ1xuICB8ICd0ZXN0J1xuICB8ICd0aHVtYnMtZG93bidcbiAgfCAndGh1bWJzLXVwJ1xuICB8ICd0aW1lJ1xuICB8ICd0aXAtZnVsbCdcbiAgfCAndGlwLWxpbmUnXG4gIHwgJ3RpcC1zaW1wbGUnXG4gIHwgJ3Rvb2wnXG4gIHwgJ3RyYW5zcG9zZWQtdGFibGUnXG4gIHwgJ3RyYXNoJ1xuICB8ICd0cmVuZCdcbiAgfCAndHlwZWZhY2UnXG4gIHwgJ3VuY29tbWVudC1jb2RlJ1xuICB8ICd1bmRvJ1xuICB8ICd1bmdyb3VwJ1xuICB8ICd1bml2ZXJzaXR5J1xuICB8ICd1bmxpbmsnXG4gIHwgJ3VucHVibGlzaCdcbiAgfCAndXBsb2FkJ1xuICB8ICd1c2VyJ1xuICB8ICd2YWxpZGF0ZS1jb2RlJ1xuICB8ICd2aWV3cy1saW5lJ1xuICB8ICd2aWV3cydcbiAgfCAndmlzdWFsaXplJ1xuICB8ICd3YXJuaW5nLWZ1bGwnXG4gIHwgJ3dhcm5pbmctbGluZSdcbiAgfCAnd2FybmluZy1zaW1wbGUnXG4gIHwgJ3dlYmluYXInXG4gIHwgJ3dpZGdldHMnXG4gIHwgJ3dvcmtmbG93J1xuICB8ICd3b3Jrc3BhY2UnXG4gIHwgJ3pvb20taW4nO1xuIl19
|