igniteui-angular 13.1.0-rc.1 → 13.1.0-rc.2

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.
Files changed (62) hide show
  1. package/esm2020/lib/action-strip/grid-actions/grid-editing-actions.component.mjs +2 -2
  2. package/esm2020/lib/data-operations/pivot-sort-strategy.mjs +44 -0
  3. package/esm2020/lib/data-operations/pivot-strategy.mjs +2 -43
  4. package/esm2020/lib/grids/cell.component.mjs +1 -2
  5. package/esm2020/lib/grids/common/grid.interface.mjs +1 -1
  6. package/esm2020/lib/grids/filtering/excel-style/excel-style-search.component.mjs +6 -3
  7. package/esm2020/lib/grids/grid-base.directive.mjs +11 -11
  8. package/esm2020/lib/grids/hierarchical-grid/hierarchical-cell.component.mjs +2 -2
  9. package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid-api.service.mjs +3 -3
  10. package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid-base.directive.mjs +10 -10
  11. package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid-navigation.service.mjs +3 -3
  12. package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid.component.mjs +31 -30
  13. package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid.module.mjs +1 -1
  14. package/esm2020/lib/grids/hierarchical-grid/hierarchical-row.component.mjs +2 -2
  15. package/esm2020/lib/grids/hierarchical-grid/row-island.component.mjs +12 -13
  16. package/esm2020/lib/grids/pivot-grid/pivot-data-selector.component.mjs +2 -5
  17. package/esm2020/lib/grids/pivot-grid/pivot-grid-dimensions.mjs +2 -2
  18. package/esm2020/lib/grids/pivot-grid/pivot-grid.component.mjs +13 -13
  19. package/esm2020/lib/grids/pivot-grid/pivot-grid.pipes.mjs +7 -9
  20. package/esm2020/lib/grids/pivot-grid/pivot-header-row.component.mjs +6 -9
  21. package/esm2020/lib/grids/pivot-grid/pivot-row-dimension-content.component.mjs +9 -10
  22. package/esm2020/lib/grids/pivot-grid/pivot-row-dimension-header-group.component.mjs +1 -1
  23. package/esm2020/lib/grids/pivot-grid/pivot-row.component.mjs +1 -1
  24. package/esm2020/lib/grids/pivot-grid/pivot-sort-util.mjs +26 -0
  25. package/esm2020/lib/grids/pivot-grid/pivot-util.mjs +1 -23
  26. package/esm2020/lib/grids/resizing/pivot-grid/pivot-resize-handle.directive.mjs +1 -1
  27. package/esm2020/lib/grids/resizing/resize-handle.directive.mjs +1 -1
  28. package/esm2020/lib/grids/resizing/resizer.component.mjs +1 -1
  29. package/esm2020/lib/grids/resizing/resizing.service.mjs +1 -1
  30. package/esm2020/lib/grids/row.directive.mjs +1 -1
  31. package/esm2020/lib/grids/state.directive.mjs +2 -2
  32. package/esm2020/lib/grids/toolbar/grid-toolbar.base.mjs +1 -1
  33. package/esm2020/lib/grids/tree-grid/tree-grid.component.mjs +5 -7
  34. package/esm2020/lib/progressbar/progressbar.component.mjs +1 -2
  35. package/esm2020/lib/services/exporter-common/base-export-service.mjs +3 -3
  36. package/esm2020/public_api.mjs +2 -1
  37. package/fesm2015/igniteui-angular.mjs +276 -290
  38. package/fesm2015/igniteui-angular.mjs.map +1 -1
  39. package/fesm2020/igniteui-angular.mjs +276 -289
  40. package/fesm2020/igniteui-angular.mjs.map +1 -1
  41. package/lib/data-operations/pivot-sort-strategy.d.ts +16 -0
  42. package/lib/data-operations/pivot-strategy.d.ts +0 -14
  43. package/lib/grids/cell.component.d.ts +2 -2
  44. package/lib/grids/common/grid.interface.d.ts +3 -3
  45. package/lib/grids/grid-base.directive.d.ts +6 -7
  46. package/lib/grids/hierarchical-grid/hierarchical-grid-api.service.d.ts +1 -1
  47. package/lib/grids/hierarchical-grid/hierarchical-grid-base.directive.d.ts +4 -8
  48. package/lib/grids/hierarchical-grid/hierarchical-grid.component.d.ts +11 -6
  49. package/lib/grids/hierarchical-grid/row-island.component.d.ts +5 -5
  50. package/lib/grids/pivot-grid/pivot-grid-dimensions.d.ts +1 -1
  51. package/lib/grids/pivot-grid/pivot-grid.component.d.ts +4 -2
  52. package/lib/grids/pivot-grid/pivot-grid.pipes.d.ts +2 -2
  53. package/lib/grids/pivot-grid/pivot-header-row.component.d.ts +1 -1
  54. package/lib/grids/pivot-grid/pivot-row-dimension-content.component.d.ts +6 -6
  55. package/lib/grids/pivot-grid/pivot-sort-util.d.ts +5 -0
  56. package/lib/grids/pivot-grid/pivot-util.d.ts +0 -1
  57. package/lib/grids/row.directive.d.ts +3 -3
  58. package/lib/grids/tree-grid/tree-grid.component.d.ts +2 -4
  59. package/lib/progressbar/progressbar.component.d.ts +1 -1
  60. package/package.json +1 -1
  61. package/public_api.d.ts +1 -0
  62. package/schematics/tsconfig.tsbuildinfo +1 -1
@@ -2,10 +2,12 @@ import { Inject, Pipe } from '@angular/core';
2
2
  import { cloneArray } from '../../core/utils';
3
3
  import { DataUtil } from '../../data-operations/data-util';
4
4
  import { FilteringExpressionsTree } from '../../data-operations/filtering-expressions-tree';
5
+ import { DefaultPivotGridRecordSortingStrategy } from '../../data-operations/pivot-sort-strategy';
5
6
  import { FilterUtil } from '../../data-operations/filtering-strategy';
6
- import { DefaultPivotGridRecordSortingStrategy, DimensionValuesFilteringStrategy, PivotColumnDimensionsStrategy, PivotRowDimensionsStrategy } from '../../data-operations/pivot-strategy';
7
+ import { DimensionValuesFilteringStrategy, PivotColumnDimensionsStrategy, PivotRowDimensionsStrategy } from '../../data-operations/pivot-strategy';
7
8
  import { IGX_GRID_BASE } from '../common/grid.interface';
8
9
  import { DEFAULT_PIVOT_KEYS } from './pivot-grid.interface';
10
+ import { PivotSortUtil } from './pivot-sort-util';
9
11
  import { PivotUtil } from './pivot-util';
10
12
  import * as i0 from "@angular/core";
11
13
  import * as i1 from "../api.service";
@@ -150,8 +152,6 @@ export class IgxPivotCellMergingPipe {
150
152
  const res = [];
151
153
  const enabledRows = config.rows?.filter(x => x.enabled);
152
154
  let groupData = [];
153
- let prevDim;
154
- let prevDimRoot;
155
155
  let prevId;
156
156
  const index = enabledRows.indexOf(dim);
157
157
  for (let rec of data) {
@@ -165,8 +165,6 @@ export class IgxPivotCellMergingPipe {
165
165
  groupData = [];
166
166
  }
167
167
  groupData.push(rec);
168
- prevDim = currentDim;
169
- prevDimRoot = dim;
170
168
  prevId = id;
171
169
  }
172
170
  if (groupData.length > 0) {
@@ -246,7 +244,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
246
244
  * @hidden
247
245
  */
248
246
  export class IgxPivotGridColumnSortingPipe {
249
- transform(collection, expressions, sorting, pipeTrigger) {
247
+ transform(collection, expressions, sorting, _pipeTrigger) {
250
248
  let result;
251
249
  if (!expressions.length) {
252
250
  result = collection;
@@ -276,11 +274,11 @@ export class IgxPivotGridSortingPipe {
276
274
  constructor(gridAPI) {
277
275
  this.gridAPI = gridAPI;
278
276
  }
279
- transform(collection, config, sorting, id, pipeTrigger, pinned) {
277
+ transform(collection, config, sorting, _pipeTrigger) {
280
278
  let result;
281
279
  const allDimensions = config.rows || [];
282
280
  const enabledDimensions = allDimensions.filter(x => x && x.enabled);
283
- const expressions = PivotUtil.generateDimensionSortingExpressions(enabledDimensions);
281
+ const expressions = PivotSortUtil.generateDimensionSortingExpressions(enabledDimensions);
284
282
  if (!expressions.length) {
285
283
  result = collection;
286
284
  }
@@ -330,4 +328,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
330
328
  type: Pipe,
331
329
  args: [{ name: "filterPivotItems" }]
332
330
  }] });
333
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QtZ3JpZC5waXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9waXZvdC1ncmlkL3Bpdm90LWdyaWQucGlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUFFLHdCQUF3QixFQUE2QixNQUFNLGtEQUFrRCxDQUFDO0FBQ3ZILE9BQU8sRUFBRSxVQUFVLEVBQXNCLE1BQU0sMENBQTBDLENBQUM7QUFDMUYsT0FBTyxFQUNILHFDQUFxQyxFQUNSLGdDQUFnQyxFQUFFLDZCQUE2QixFQUM1RiwwQkFBMEIsRUFDN0IsTUFBTSxzQ0FBc0MsQ0FBQztBQUc5QyxPQUFPLEVBQVksYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHbkUsT0FBTyxFQUFFLGtCQUFrQixFQUEwRyxNQUFNLHdCQUF3QixDQUFDO0FBQ3BLLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7OztBQUV6Qzs7R0FFRztBQUtILE1BQU0sT0FBTyxlQUFlO0lBRXhCLGdCQUFnQixDQUFDO0lBRVYsU0FBUyxDQUNaLFVBQWUsRUFDZixNQUEyQixFQUMzQixDQUFvQixFQUNwQixZQUFxQixFQUNyQixFQUFHO1FBRUgsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsSUFBSSxrQkFBa0IsQ0FBQztRQUN6RCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7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QyxDQUFDO1NBQ3hDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzs7b0hBMUJRLHVCQUF1QjtrSEFBdkIsdUJBQXVCOzJGQUF2Qix1QkFBdUI7a0JBRG5DLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNsb25lQXJyYXkgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IERhdGFVdGlsIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2RhdGEtdXRpbCc7XG5pbXBvcnQgeyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsIElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWV4cHJlc3Npb25zLXRyZWUnO1xuaW1wb3J0IHsgRmlsdGVyVXRpbCwgSUZpbHRlcmluZ1N0cmF0ZWd5IH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1zdHJhdGVneSc7XG5pbXBvcnQge1xuICAgIERlZmF1bHRQaXZvdEdyaWRSZWNvcmRTb3J0aW5nU3RyYXRlZ3ksXG4gICAgRGVmYXVsdFBpdm90U29ydGluZ1N0cmF0ZWd5LCBEaW1lbnNpb25WYWx1ZXNGaWx0ZXJpbmdTdHJhdGVneSwgUGl2b3RDb2x1bW5EaW1lbnNpb25zU3RyYXRlZ3ksXG4gICAgUGl2b3RSb3dEaW1lbnNpb25zU3RyYXRlZ3lcbn0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL3Bpdm90LXN0cmF0ZWd5JztcbmltcG9ydCB7IElTb3J0aW5nRXhwcmVzc2lvbiwgU29ydGluZ0RpcmVjdGlvbiB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IEdyaWRCYXNlQVBJU2VydmljZSB9IGZyb20gJy4uL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IEdyaWRUeXBlLCBJR1hfR1JJRF9CQVNFIH0gZnJvbSAnLi4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElHcmlkU29ydGluZ1N0cmF0ZWd5IH0gZnJvbSAnLi4vY29tbW9uL3N0cmF0ZWd5JztcbmltcG9ydCB7IElneEdyaWRCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZ3JpZC1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBERUZBVUxUX1BJVk9UX0tFWVMsIElQaXZvdENvbmZpZ3VyYXRpb24sIElQaXZvdERpbWVuc2lvbiwgSVBpdm90R3JpZEdyb3VwUmVjb3JkLCBJUGl2b3RHcmlkUmVjb3JkLCBJUGl2b3RLZXlzLCBJUGl2b3RWYWx1ZSB9IGZyb20gJy4vcGl2b3QtZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUGl2b3RVdGlsIH0gZnJvbSAnLi9waXZvdC11dGlsJztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAncGl2b3RHcmlkUm93JyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneFBpdm90Um93UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgY29uc3RydWN0b3IoKSB7IH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oXG4gICAgICAgIGNvbGxlY3Rpb246IGFueSxcbiAgICAgICAgY29uZmlnOiBJUGl2b3RDb25maWd1cmF0aW9uLFxuICAgICAgICBfOiBNYXA8YW55LCBib29sZWFuPixcbiAgICAgICAgX3BpcGVUcmlnZ2VyPzogbnVtYmVyLFxuICAgICAgICBfXz9cbiAgICApOiBJUGl2b3RHcmlkUmVjb3JkW10ge1xuICAgICAgICBjb25zdCBwaXZvdEtleXMgPSBjb25maWcucGl2b3RLZXlzIHx8IERFRkFVTFRfUElWT1RfS0VZUztcbiAgICAgICAgY29uc3QgZW5hYmxlZFJvd3MgPSBjb25maWcucm93cz8uZmlsdGVyKHggPT4geC5lbmFibGVkKSB8fCBbXTtcbiAgICAgICAgY29uc3QgZW5hYmxlZENvbHVtbnMgPSBjb25maWcuY29sdW1ucz8uZmlsdGVyKHggPT4geC5lbmFibGVkKSB8fCBbXTtcbiAgICAgICAgY29uc3QgZW5hYmxlZFZhbHVlcyA9IGNvbmZpZy52YWx1ZXM/LmZpbHRlcih4ID0+IHguZW5hYmxlZCkgfHwgW107XG4gICAgICAgIGlmIChlbmFibGVkUm93cy5sZW5ndGggPT09IDAgJiYgZW5hYmxlZENvbHVtbnMubGVuZ3RoID09PSAwICYmIGVuYWJsZWRWYWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAvLyBub3RoaW5nIHRvIGdyb3VwIGFuZCBhZ2dyZWdhdGUgYnkgLi4uXG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm93U3RyYXRlZ3kgPSBjb25maWcucm93U3RyYXRlZ3kgfHwgUGl2b3RSb3dEaW1lbnNpb25zU3RyYXRlZ3kuaW5zdGFuY2UoKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGNsb25lQXJyYXkoY29sbGVjdGlvbiwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiByb3dTdHJhdGVneS5wcm9jZXNzKGRhdGEsIGVuYWJsZWRSb3dzLCBjb25maWcudmFsdWVzLCBwaXZvdEtleXMpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBUcmFuc2Zvcm1zIGdlbmVyaWMgYXJyYXkgZGF0YSBpbnRvIElQaXZvdEdyaWRSZWNvcmRbXVxuICovXG5AUGlwZSh7XG4gICAgbmFtZTogJ3Bpdm90R3JpZEF1dG9UcmFuc2Zvcm0nLFxuICAgIHB1cmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4UGl2b3RBdXRvVHJhbnNmb3JtIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgcHVibGljIHRyYW5zZm9ybShcbiAgICAgICAgY29sbGVjdGlvbjogYW55W10sXG4gICAgICAgIGNvbmZpZzogSVBpdm90Q29uZmlndXJhdGlvbixcbiAgICAgICAgX3BpcGVUcmlnZ2VyPzogbnVtYmVyLFxuICAgICAgICBfXz8sXG4gICAgKTogSVBpdm90R3JpZFJlY29yZFtdIHtcbiAgICAgICAgbGV0IG5lZWRzVHJhbnNmb3JtYXRpb24gPSBmYWxzZTtcbiAgICAgICAgaWYgKGNvbGxlY3Rpb24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbmVlZHNUcmFuc2Zvcm1hdGlvbiA9ICF0aGlzLmlzUGl2b3RSZWNvcmQoY29sbGVjdGlvblswXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW5lZWRzVHJhbnNmb3JtYXRpb24pIHJldHVybiBjb2xsZWN0aW9uO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMucHJvY2Vzc0NvbGxlY3Rpb25Ub1Bpdm90UmVjb3JkKGNvbmZpZywgY29sbGVjdGlvbik7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGlzUGl2b3RSZWNvcmQoYXJnOiBJUGl2b3RHcmlkUmVjb3JkKTogYXJnIGlzIElQaXZvdEdyaWRSZWNvcmQge1xuICAgICAgICByZXR1cm4gISEoYXJnIGFzIElQaXZvdEdyaWRSZWNvcmQpLmFnZ3JlZ2F0aW9uVmFsdWVzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzQ29sbGVjdGlvblRvUGl2b3RSZWNvcmQoY29uZmlnOiBJUGl2b3RDb25maWd1cmF0aW9uLCBjb2xsZWN0aW9uOiBhbnlbXSk6IElQaXZvdEdyaWRSZWNvcmRbXSB7XG4gICAgICAgIGNvbnN0IHBpdm90S2V5czogSVBpdm90S2V5cyA9IGNvbmZpZy5waXZvdEtleXMgfHwgREVGQVVMVF9QSVZPVF9LRVlTO1xuICAgICAgICBjb25zdCBlbmFibGVkUm93cyA9IGNvbmZpZy5yb3dzLmZpbHRlcih4ID0+IHguZW5hYmxlZCk7XG4gICAgICAgIGNvbnN0IGFsbEZsYXQ6IElQaXZvdERpbWVuc2lvbltdID0gUGl2b3RVdGlsLmZsYXR0ZW4oZW5hYmxlZFJvd3MpO1xuICAgICAgICBjb25zdCByZXN1bHQ6IElQaXZvdEdyaWRSZWNvcmRbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHJlYyBvZiBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBwaXZvdFJlYzogSVBpdm90R3JpZFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICBkaW1lbnNpb25WYWx1ZXM6IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCksXG4gICAgICAgICAgICAgICAgYWdncmVnYXRpb25WYWx1ZXM6IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCksXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IG5ldyBNYXA8c3RyaW5nLCBJUGl2b3RHcmlkUmVjb3JkW10+KCksXG4gICAgICAgICAgICAgICAgZGltZW5zaW9uczogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocmVjKVxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpbSA9IGFsbEZsYXQuZmluZCh4ID0+IHgubWVtYmVyTmFtZSA9PT0ga2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoZGltKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vZmllbGQgaGFzIG1hdGNoaW5nIGRpbWVuc2lvblxuICAgICAgICAgICAgICAgICAgICBwaXZvdFJlYy5kaW1lbnNpb25zLnB1c2goZGltKTtcbiAgICAgICAgICAgICAgICAgICAgcGl2b3RSZWMuZGltZW5zaW9uVmFsdWVzLnNldChrZXksIHJlY1trZXldKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS5pbmRleE9mKHBpdm90S2V5cy5yb3dEaW1lbnNpb25TZXBhcmF0b3IgKyBwaXZvdEtleXMucmVjb3JkcykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZpZWxkIHRoYXQgY29udGFpbnMgY2hpbGQgY29sbGVjdGlvblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaW1LZXkgPSBrZXkuc2xpY2UoMCwga2V5LmluZGV4T2YocGl2b3RLZXlzLnJvd0RpbWVuc2lvblNlcGFyYXRvciArIHBpdm90S2V5cy5yZWNvcmRzKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkRGF0YSA9IHJlY1trZXldO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFBpdm90RGF0YSA9IHRoaXMucHJvY2Vzc0NvbGxlY3Rpb25Ub1Bpdm90UmVjb3JkKGNvbmZpZywgY2hpbGREYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgcGl2b3RSZWMuY2hpbGRyZW4uc2V0KGRpbUtleSwgY2hpbGRQaXZvdERhdGEpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGFuIGFnZ3JlZ2F0aW9uXG4gICAgICAgICAgICAgICAgICAgIHBpdm90UmVjLmFnZ3JlZ2F0aW9uVmFsdWVzLnNldChrZXksIHJlY1trZXldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmbGF0dGVuZWQgPSBQaXZvdFV0aWwuZmxhdHRlbihjb25maWcucm93cyk7XG4gICAgICAgICAgICBwaXZvdFJlYy5kaW1lbnNpb25zLnNvcnQoKHgseSkgPT4gZmxhdHRlbmVkLmluZGV4T2YoeCkgLSBmbGF0dGVuZWQuaW5kZXhPZih5KSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChwaXZvdFJlYyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAncGl2b3RHcmlkUm93RXhwYW5zaW9uJyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneFBpdm90Um93RXhwYW5zaW9uUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChJR1hfR1JJRF9CQVNFKSBwcml2YXRlIGdyaWQ/OiBHcmlkVHlwZSkgeyB9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKFxuICAgICAgICBjb2xsZWN0aW9uOiBJUGl2b3RHcmlkUmVjb3JkW10sXG4gICAgICAgIGNvbmZpZzogSVBpdm90Q29uZmlndXJhdGlvbixcbiAgICAgICAgZXhwYW5zaW9uU3RhdGVzOiBNYXA8YW55LCBib29sZWFuPixcbiAgICAgICAgZGVmYXVsdEV4cGFuZDogYm9vbGVhbixcbiAgICAgICAgX3BpcGVUcmlnZ2VyPzogbnVtYmVyLFxuICAgICAgICBfXz8sXG4gICAgKTogSVBpdm90R3JpZFJlY29yZFtdIHtcbiAgICAgICAgY29uc3QgZW5hYmxlZFJvd3MgPSBjb25maWcucm93cz8uZmlsdGVyKHggPT4geC5lbmFibGVkKSB8fCBbXTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGNvbGxlY3Rpb24gPyBjbG9uZUFycmF5KGNvbGxlY3Rpb24sIHRydWUpIDogW107XG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIGVuYWJsZWRSb3dzKSB7XG4gICAgICAgICAgICBQaXZvdFV0aWwuZmxhdHRlbkdyb3VwcyhkYXRhLCByb3csIGV4cGFuc2lvblN0YXRlcywgZGVmYXVsdEV4cGFuZCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmluYWxEYXRhID0gZW5hYmxlZFJvd3MubGVuZ3RoID4gMCA/XG4gICAgICAgICBkYXRhLmZpbHRlcih4ID0+IHguZGltZW5zaW9ucy5sZW5ndGggPT09IGVuYWJsZWRSb3dzLmxlbmd0aCkgOiBkYXRhO1xuXG4gICAgICAgIGlmICh0aGlzLmdyaWQpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zZXRGaWx0ZXJlZFNvcnRlZERhdGEoZmluYWxEYXRhLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbmFsRGF0YTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5AUGlwZSh7XG4gICAgbmFtZTogJ3Bpdm90R3JpZENlbGxNZXJnaW5nJyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneFBpdm90Q2VsbE1lcmdpbmdQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgY29uc3RydWN0b3IoQEluamVjdChJR1hfR1JJRF9CQVNFKSBwcml2YXRlIGdyaWQ6IEdyaWRUeXBlKSB7IH1cbiAgICBwdWJsaWMgdHJhbnNmb3JtKFxuICAgICAgICBjb2xsZWN0aW9uOiBJUGl2b3RHcmlkUmVjb3JkW10sXG4gICAgICAgIGNvbmZpZzogSVBpdm90Q29uZmlndXJhdGlvbixcbiAgICAgICAgZGltOiBJUGl2b3REaW1lbnNpb24sXG4gICAgICAgIF9waXBlVHJpZ2dlcj86IG51bWJlclxuICAgICk6IElQaXZvdEdyaWRHcm91cFJlY29yZFtdIHtcbiAgICAgICAgaWYgKGNvbGxlY3Rpb24ubGVuZ3RoID09PSAwIHx8IGNvbmZpZy5yb3dzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgICAgIGNvbnN0IGRhdGE6IElQaXZvdEdyaWRHcm91cFJlY29yZFtdID0gY29sbGVjdGlvbiA/IGNsb25lQXJyYXkoY29sbGVjdGlvbiwgdHJ1ZSkgOiBbXTtcbiAgICAgICAgY29uc3QgcmVzOiBJUGl2b3RHcmlkR3JvdXBSZWNvcmRbXSA9IFtdO1xuXG4gICAgICAgIGNvbnN0IGVuYWJsZWRSb3dzID0gY29uZmlnLnJvd3M/LmZpbHRlcih4ID0+IHguZW5hYmxlZCk7XG4gICAgICAgIGxldCBncm91cERhdGE6IElQaXZvdEdyaWRHcm91cFJlY29yZFtdID0gW107XG4gICAgICAgIGxldCBwcmV2RGltO1xuICAgICAgICBsZXQgcHJldkRpbVJvb3Q7XG4gICAgICAgIGxldCBwcmV2SWQ7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZW5hYmxlZFJvd3MuaW5kZXhPZihkaW0pO1xuICAgICAgICBmb3IgKGxldCByZWMgb2YgZGF0YSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudERpbSA9IHJlYy5kaW1lbnNpb25zW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gUGl2b3RVdGlsLmdldFJlY29yZEtleShyZWMsIGN1cnJlbnREaW0pO1xuICAgICAgICAgICAgaWYgKGdyb3VwRGF0YS5sZW5ndGggPiAwICYmIHByZXZJZCAhPT0gaWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoID0gZ3JvdXBEYXRhLmxlbmd0aCA+IDEgPyBncm91cERhdGEubGVuZ3RoICogdGhpcy5ncmlkLnJlbmRlcmVkUm93SGVpZ2h0IDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGdyb3VwRGF0YVswXS5oZWlnaHQgPSBoO1xuICAgICAgICAgICAgICAgIGdyb3VwRGF0YVswXS5yb3dTcGFuID0gZ3JvdXBEYXRhLmxlbmd0aDtcbiAgICAgICAgICAgICAgICByZXMucHVzaChncm91cERhdGFbMF0pO1xuICAgICAgICAgICAgICAgIGdyb3VwRGF0YSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JvdXBEYXRhLnB1c2gocmVjKTtcbiAgICAgICAgICAgIHByZXZEaW0gPSBjdXJyZW50RGltO1xuICAgICAgICAgICAgcHJldkRpbVJvb3QgPSBkaW07XG4gICAgICAgICAgICBwcmV2SWQgPSBpZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ3JvdXBEYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGggPSBncm91cERhdGEubGVuZ3RoID4gMSA/IGdyb3VwRGF0YS5sZW5ndGggKiB0aGlzLmdyaWQucm93SGVpZ2h0ICsgKGdyb3VwRGF0YS5sZW5ndGggLSAxKSArIDEgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBncm91cERhdGFbMF0uaGVpZ2h0ID0gaDtcbiAgICAgICAgICAgIGdyb3VwRGF0YVswXS5yb3dTcGFuID0gZ3JvdXBEYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIHJlcy5wdXNoKGdyb3VwRGF0YVswXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59XG5cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAncGl2b3RHcmlkQ29sdW1uJyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneFBpdm90Q29sdW1uUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgcHVibGljIHRyYW5zZm9ybShcbiAgICAgICAgY29sbGVjdGlvbjogSVBpdm90R3JpZFJlY29yZFtdLFxuICAgICAgICBjb25maWc6IElQaXZvdENvbmZpZ3VyYXRpb24sXG4gICAgICAgIF86IE1hcDxhbnksIGJvb2xlYW4+LFxuICAgICAgICBfcGlwZVRyaWdnZXI/OiBudW1iZXIsXG4gICAgICAgIF9fP1xuICAgICk6IElQaXZvdEdyaWRSZWNvcmRbXSB7XG4gICAgICAgIGNvbnN0IHBpdm90S2V5cyA9IGNvbmZpZy5waXZvdEtleXMgfHwgREVGQVVMVF9QSVZPVF9LRVlTO1xuICAgICAgICBjb25zdCBlbmFibGVkQ29sdW1ucyA9IGNvbmZpZy5jb2x1bW5zPy5maWx0ZXIoeCA9PiB4LmVuYWJsZWQpIHx8IFtdO1xuICAgICAgICBjb25zdCBlbmFibGVkVmFsdWVzID0gY29uZmlnLnZhbHVlcz8uZmlsdGVyKHggPT4geC5lbmFibGVkKSB8fCBbXTtcblxuICAgICAgICBjb25zdCBjb2xTdHJhdGVneSA9IGNvbmZpZy5jb2x1bW5TdHJhdGVneSB8fCBQaXZvdENvbHVtbkRpbWVuc2lvbnNTdHJhdGVneS5pbnN0YW5jZSgpO1xuICAgICAgICBjb25zdCBkYXRhID0gY2xvbmVBcnJheShjb2xsZWN0aW9uLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIGNvbFN0cmF0ZWd5LnByb2Nlc3MoZGF0YSwgZW5hYmxlZENvbHVtbnMsIGVuYWJsZWRWYWx1ZXMsIHBpdm90S2V5cyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuQFBpcGUoe1xuICAgIG5hbWU6ICdwaXZvdEdyaWRGaWx0ZXInLFxuICAgIHB1cmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4UGl2b3RHcmlkRmlsdGVyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZ3JpZEFQSTogR3JpZEJhc2VBUElTZXJ2aWNlPElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU+KSB7IH1cbiAgICBwdWJsaWMgdHJhbnNmb3JtKGNvbGxlY3Rpb246IGFueVtdLFxuICAgICAgICBjb25maWc6IElQaXZvdENvbmZpZ3VyYXRpb24sXG4gICAgICAgIGZpbHRlclN0cmF0ZWd5OiBJRmlsdGVyaW5nU3RyYXRlZ3ksXG4gICAgICAgIGFkdmFuY2VkRXhwcmVzc2lvbnNUcmVlOiBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICBfZmlsdGVyUGlwZVRyaWdnZXI6IG51bWJlcixcbiAgICAgICAgX3BpcGVUcmlnZ2VyOiBudW1iZXIpOiBhbnlbXSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb25zVHJlZSA9IFBpdm90VXRpbC5idWlsZEV4cHJlc3Npb25UcmVlKGNvbmZpZyk7XG5cbiAgICAgICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICAgICAgICBleHByZXNzaW9uc1RyZWUsXG4gICAgICAgICAgICBzdHJhdGVneTogZmlsdGVyU3RyYXRlZ3kgfHwgbmV3IERpbWVuc2lvblZhbHVlc0ZpbHRlcmluZ1N0cmF0ZWd5KCksXG4gICAgICAgICAgICBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZW1wdHkoc3RhdGUuZXhwcmVzc2lvbnNUcmVlKSAmJiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZW1wdHkoc3RhdGUuYWR2YW5jZWRFeHByZXNzaW9uc1RyZWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IEZpbHRlclV0aWwuZmlsdGVyKGNsb25lQXJyYXkoY29sbGVjdGlvbiwgdHJ1ZSksIHN0YXRlLCB0aGlzLmdyaWRBUEkuZ3JpZCk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAncGl2b3RHcmlkQ29sdW1uU29ydCcsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hQaXZvdEdyaWRDb2x1bW5Tb3J0aW5nUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHB1YmxpYyB0cmFuc2Zvcm0oXG4gICAgICAgIGNvbGxlY3Rpb246IElQaXZvdEdyaWRSZWNvcmRbXSxcbiAgICAgICAgZXhwcmVzc2lvbnM6IElTb3J0aW5nRXhwcmVzc2lvbltdLFxuICAgICAgICBzb3J0aW5nOiBJR3JpZFNvcnRpbmdTdHJhdGVneSxcbiAgICAgICAgcGlwZVRyaWdnZXI6IG51bWJlclxuICAgICk6IElQaXZvdEdyaWRSZWNvcmRbXSB7XG4gICAgICAgIGxldCByZXN1bHQ6IElQaXZvdEdyaWRSZWNvcmRbXTtcblxuICAgICAgICBpZiAoIWV4cHJlc3Npb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gY29sbGVjdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvcihjb25zdCBleHByIG9mIGV4cHJlc3Npb25zKSB7XG4gICAgICAgICAgICAgICAgZXhwci5zdHJhdGVneSA9IERlZmF1bHRQaXZvdEdyaWRSZWNvcmRTb3J0aW5nU3RyYXRlZ3kuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCA9IFBpdm90VXRpbC5zb3J0KGNsb25lQXJyYXkoY29sbGVjdGlvbiwgdHJ1ZSksIGV4cHJlc3Npb25zLCBzb3J0aW5nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAncGl2b3RHcmlkU29ydCcsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hQaXZvdEdyaWRTb3J0aW5nUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZ3JpZEFQSTogR3JpZEJhc2VBUElTZXJ2aWNlPElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU+KSB7IH1cbiAgICBwdWJsaWMgdHJhbnNmb3JtKGNvbGxlY3Rpb246IGFueVtdLCBjb25maWc6IElQaXZvdENvbmZpZ3VyYXRpb24sIHNvcnRpbmc6IElHcmlkU29ydGluZ1N0cmF0ZWd5LFxuICAgICAgICBpZDogc3RyaW5nLCBwaXBlVHJpZ2dlcjogbnVtYmVyLCBwaW5uZWQ/KTogYW55W10ge1xuICAgICAgICBsZXQgcmVzdWx0OiBhbnlbXTtcbiAgICAgICAgY29uc3QgYWxsRGltZW5zaW9ucyA9IGNvbmZpZy5yb3dzIHx8IFtdO1xuICAgICAgICBjb25zdCBlbmFibGVkRGltZW5zaW9ucyA9IGFsbERpbWVuc2lvbnMuZmlsdGVyKHggPT4geCAmJiB4LmVuYWJsZWQpO1xuICAgICAgICBjb25zdCBleHByZXNzaW9ucyA9IFBpdm90VXRpbC5nZW5lcmF0ZURpbWVuc2lvblNvcnRpbmdFeHByZXNzaW9ucyhlbmFibGVkRGltZW5zaW9ucyk7XG4gICAgICAgIGlmICghZXhwcmVzc2lvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBjb2xsZWN0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gRGF0YVV0aWwuc29ydChjbG9uZUFycmF5KGNvbGxlY3Rpb24sIHRydWUpLCBleHByZXNzaW9ucywgc29ydGluZywgdGhpcy5ncmlkQVBJLmdyaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5AUGlwZSh7IG5hbWU6IFwiZmlsdGVyUGl2b3RJdGVtc1wiIH0pXG5leHBvcnQgY2xhc3MgSWd4RmlsdGVyUGl2b3RJdGVtc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICBwdWJsaWMgdHJhbnNmb3JtKFxuICAgICAgICBjb2xsZWN0aW9uOiAoSVBpdm90RGltZW5zaW9uIHwgSVBpdm90VmFsdWUpW10sXG4gICAgICAgIGZpbHRlckNyaXRlcmlhOiBzdHJpbmcsXG4gICAgICAgIF9waXBlVHJpZ2dlcjogbnVtYmVyXG4gICAgKTogYW55W10ge1xuICAgICAgICBpZiAoIWNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb3B5ID0gY29sbGVjdGlvbi5zbGljZSgwKTtcbiAgICAgICAgaWYgKGZpbHRlckNyaXRlcmlhICYmIGZpbHRlckNyaXRlcmlhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlckZ1bmMgPSAoYykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlclRleHQgPSBjLm1lbWJlciB8fCBjLm1lbWJlck5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXJUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgLnRvTG9jYWxlTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5pbmRleE9mKGZpbHRlckNyaXRlcmlhLnRvTG9jYWxlTG93ZXJDYXNlKCkpID49IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgKGMuY2hpbGRyZW4/LnNvbWUoZmlsdGVyRnVuYykgPz8gZmFsc2UpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb3B5ID0gY29sbGVjdGlvbi5maWx0ZXIoZmlsdGVyRnVuYyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfVxufVxuIl19
331
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QtZ3JpZC5waXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9waXZvdC1ncmlkL3Bpdm90LWdyaWQucGlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUFFLHdCQUF3QixFQUE2QixNQUFNLGtEQUFrRCxDQUFDO0FBQ3ZILE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxVQUFVLEVBQXNCLE1BQU0sMENBQTBDLENBQUM7QUFDMUYsT0FBTyxFQUNILGdDQUFnQyxFQUFFLDZCQUE2QixFQUMvRCwwQkFBMEIsRUFDN0IsTUFBTSxzQ0FBc0MsQ0FBQztBQUc5QyxPQUFPLEVBQVksYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHbkUsT0FBTyxFQUFFLGtCQUFrQixFQUEwRyxNQUFNLHdCQUF3QixDQUFDO0FBQ3BLLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7QUFFekM7O0dBRUc7QUFLSCxNQUFNLE9BQU8sZUFBZTtJQUV4QixnQkFBZ0IsQ0FBQztJQUVWLFNBQVMsQ0FDWixVQUFlLEVBQ2YsTUFBMkIsRUFDM0IsQ0FBb0IsRUFDcEIsWUFBcUIsRUFDckIsRUFBRztRQUVILE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLElBQUksa0JBQWtCLENBQUM7UUFDekQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFD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LENBQUM7O29IQTFCUSx1QkFBdUI7a0hBQXZCLHVCQUF1QjsyRkFBdkIsdUJBQXVCO2tCQURuQyxJQUFJO21CQUFDLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjbG9uZUFycmF5IH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBEYXRhVXRpbCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLCBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1leHByZXNzaW9ucy10cmVlJztcbmltcG9ydCB7IERlZmF1bHRQaXZvdEdyaWRSZWNvcmRTb3J0aW5nU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvcGl2b3Qtc29ydC1zdHJhdGVneSc7XG5pbXBvcnQgeyBGaWx0ZXJVdGlsLCBJRmlsdGVyaW5nU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7XG4gICAgRGltZW5zaW9uVmFsdWVzRmlsdGVyaW5nU3RyYXRlZ3ksIFBpdm90Q29sdW1uRGltZW5zaW9uc1N0cmF0ZWd5LFxuICAgIFBpdm90Um93RGltZW5zaW9uc1N0cmF0ZWd5XG59IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9waXZvdC1zdHJhdGVneSc7XG5pbXBvcnQgeyBJU29ydGluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBHcmlkQmFzZUFQSVNlcnZpY2UgfSBmcm9tICcuLi9hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBHcmlkVHlwZSwgSUdYX0dSSURfQkFTRSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJR3JpZFNvcnRpbmdTdHJhdGVneSB9IGZyb20gJy4uL2NvbW1vbi9zdHJhdGVneSc7XG5pbXBvcnQgeyBJZ3hHcmlkQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2dyaWQtYmFzZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgREVGQVVMVF9QSVZPVF9LRVlTLCBJUGl2b3RDb25maWd1cmF0aW9uLCBJUGl2b3REaW1lbnNpb24sIElQaXZvdEdyaWRHcm91cFJlY29yZCwgSVBpdm90R3JpZFJlY29yZCwgSVBpdm90S2V5cywgSVBpdm90VmFsdWUgfSBmcm9tICcuL3Bpdm90LWdyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBpdm90U29ydFV0aWwgfSBmcm9tICcuL3Bpdm90LXNvcnQtdXRpbCc7XG5pbXBvcnQgeyBQaXZvdFV0aWwgfSBmcm9tICcuL3Bpdm90LXV0aWwnO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuQFBpcGUoe1xuICAgIG5hbWU6ICdwaXZvdEdyaWRSb3cnLFxuICAgIHB1cmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4UGl2b3RSb3dQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShcbiAgICAgICAgY29sbGVjdGlvbjogYW55LFxuICAgICAgICBjb25maWc6IElQaXZvdENvbmZpZ3VyYXRpb24sXG4gICAgICAgIF86IE1hcDxhbnksIGJvb2xlYW4+LFxuICAgICAgICBfcGlwZVRyaWdnZXI/OiBudW1iZXIsXG4gICAgICAgIF9fP1xuICAgICk6IElQaXZvdEdyaWRSZWNvcmRbXSB7XG4gICAgICAgIGNvbnN0IHBpdm90S2V5cyA9IGNvbmZpZy5waXZvdEtleXMgfHwgREVGQVVMVF9QSVZPVF9LRVlTO1xuICAgICAgICBjb25zdCBlbmFibGVkUm93cyA9IGNvbmZpZy5yb3dzPy5maWx0ZXIoeCA9PiB4LmVuYWJsZWQpIHx8IFtdO1xuICAgICAgICBjb25zdCBlbmFibGVkQ29sdW1ucyA9IGNvbmZpZy5jb2x1bW5zPy5maWx0ZXIoeCA9PiB4LmVuYWJsZWQpIHx8IFtdO1xuICAgICAgICBjb25zdCBlbmFibGVkVmFsdWVzID0gY29uZmlnLnZhbHVlcz8uZmlsdGVyKHggPT4geC5lbmFibGVkKSB8fCBbXTtcbiAgICAgICAgaWYgKGVuYWJsZWRSb3dzLmxlbmd0aCA9PT0gMCAmJiBlbmFibGVkQ29sdW1ucy5sZW5ndGggPT09IDAgJiYgZW5hYmxlZFZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIC8vIG5vdGhpbmcgdG8gZ3JvdXAgYW5kIGFnZ3JlZ2F0ZSBieSAuLi5cbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3dTdHJhdGVneSA9IGNvbmZpZy5yb3dTdHJhdGVneSB8fCBQaXZvdFJvd0RpbWVuc2lvbnNTdHJhdGVneS5pbnN0YW5jZSgpO1xuICAgICAgICBjb25zdCBkYXRhID0gY2xvbmVBcnJheShjb2xsZWN0aW9uLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHJvd1N0cmF0ZWd5LnByb2Nlc3MoZGF0YSwgZW5hYmxlZFJvd3MsIGNvbmZpZy52YWx1ZXMsIHBpdm90S2V5cyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqIFRyYW5zZm9ybXMgZ2VuZXJpYyBhcnJheSBkYXRhIGludG8gSVBpdm90R3JpZFJlY29yZFtdXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAncGl2b3RHcmlkQXV0b1RyYW5zZm9ybScsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hQaXZvdEF1dG9UcmFuc2Zvcm0gaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICBwdWJsaWMgdHJhbnNmb3JtKFxuICAgICAgICBjb2xsZWN0aW9uOiBhbnlbXSxcbiAgICAgICAgY29uZmlnOiBJUGl2b3RDb25maWd1cmF0aW9uLFxuICAgICAgICBfcGlwZVRyaWdnZXI/OiBudW1iZXIsXG4gICAgICAgIF9fPyxcbiAgICApOiBJUGl2b3RHcmlkUmVjb3JkW10ge1xuICAgICAgICBsZXQgbmVlZHNUcmFuc2Zvcm1hdGlvbiA9IGZhbHNlO1xuICAgICAgICBpZiAoY29sbGVjdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBuZWVkc1RyYW5zZm9ybWF0aW9uID0gIXRoaXMuaXNQaXZvdFJlY29yZChjb2xsZWN0aW9uWzBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbmVlZHNUcmFuc2Zvcm1hdGlvbikgcmV0dXJuIGNvbGxlY3Rpb247XG5cbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy5wcm9jZXNzQ29sbGVjdGlvblRvUGl2b3RSZWNvcmQoY29uZmlnLCBjb2xsZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaXNQaXZvdFJlY29yZChhcmc6IElQaXZvdEdyaWRSZWNvcmQpOiBhcmcgaXMgSVBpdm90R3JpZFJlY29yZCB7XG4gICAgICAgIHJldHVybiAhIShhcmcgYXMgSVBpdm90R3JpZFJlY29yZCkuYWdncmVnYXRpb25WYWx1ZXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NDb2xsZWN0aW9uVG9QaXZvdFJlY29yZChjb25maWc6IElQaXZvdENvbmZpZ3VyYXRpb24sIGNvbGxlY3Rpb246IGFueVtdKTogSVBpdm90R3JpZFJlY29yZFtdIHtcbiAgICAgICAgY29uc3QgcGl2b3RLZXlzOiBJUGl2b3RLZXlzID0gY29uZmlnLnBpdm90S2V5cyB8fCBERUZBVUxUX1BJVk9UX0tFWVM7XG4gICAgICAgIGNvbnN0IGVuYWJsZWRSb3dzID0gY29uZmlnLnJvd3MuZmlsdGVyKHggPT4geC5lbmFibGVkKTtcbiAgICAgICAgY29uc3QgYWxsRmxhdDogSVBpdm90RGltZW5zaW9uW10gPSBQaXZvdFV0aWwuZmxhdHRlbihlbmFibGVkUm93cyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogSVBpdm90R3JpZFJlY29yZFtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcmVjIG9mIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHBpdm90UmVjOiBJUGl2b3RHcmlkUmVjb3JkID0ge1xuICAgICAgICAgICAgICAgIGRpbWVuc2lvblZhbHVlczogbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKSxcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdGlvblZhbHVlczogbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogbmV3IE1hcDxzdHJpbmcsIElQaXZvdEdyaWRSZWNvcmRbXT4oKSxcbiAgICAgICAgICAgICAgICBkaW1lbnNpb25zOiBbXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyZWMpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGltID0gYWxsRmxhdC5maW5kKHggPT4geC5tZW1iZXJOYW1lID09PSBrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChkaW0pIHtcbiAgICAgICAgICAgICAgICAgICAgLy9maWVsZCBoYXMgbWF0Y2hpbmcgZGltZW5zaW9uXG4gICAgICAgICAgICAgICAgICAgIHBpdm90UmVjLmRpbWVuc2lvbnMucHVzaChkaW0pO1xuICAgICAgICAgICAgICAgICAgICBwaXZvdFJlYy5kaW1lbnNpb25WYWx1ZXMuc2V0KGtleSwgcmVjW2tleV0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5LmluZGV4T2YocGl2b3RLZXlzLnJvd0RpbWVuc2lvblNlcGFyYXRvciArIHBpdm90S2V5cy5yZWNvcmRzKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZmllbGQgdGhhdCBjb250YWlucyBjaGlsZCBjb2xsZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpbUtleSA9IGtleS5zbGljZSgwLCBrZXkuaW5kZXhPZihwaXZvdEtleXMucm93RGltZW5zaW9uU2VwYXJhdG9yICsgcGl2b3RLZXlzLnJlY29yZHMpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGREYXRhID0gcmVjW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkUGl2b3REYXRhID0gdGhpcy5wcm9jZXNzQ29sbGVjdGlvblRvUGl2b3RSZWNvcmQoY29uZmlnLCBjaGlsZERhdGEpO1xuICAgICAgICAgICAgICAgICAgICBwaXZvdFJlYy5jaGlsZHJlbi5zZXQoZGltS2V5LCBjaGlsZFBpdm90RGF0YSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYW4gYWdncmVnYXRpb25cbiAgICAgICAgICAgICAgICAgICAgcGl2b3RSZWMuYWdncmVnYXRpb25WYWx1ZXMuc2V0KGtleSwgcmVjW2tleV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZsYXR0ZW5lZCA9IFBpdm90VXRpbC5mbGF0dGVuKGNvbmZpZy5yb3dzKTtcbiAgICAgICAgICAgIHBpdm90UmVjLmRpbWVuc2lvbnMuc29ydCgoeCx5KSA9PiBmbGF0dGVuZWQuaW5kZXhPZih4KSAtIGZsYXR0ZW5lZC5pbmRleE9mKHkpKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBpdm90UmVjKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuQFBpcGUoe1xuICAgIG5hbWU6ICdwaXZvdEdyaWRSb3dFeHBhbnNpb24nLFxuICAgIHB1cmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4UGl2b3RSb3dFeHBhbnNpb25QaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KElHWF9HUklEX0JBU0UpIHByaXZhdGUgZ3JpZD86IEdyaWRUeXBlKSB7IH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oXG4gICAgICAgIGNvbGxlY3Rpb246IElQaXZvdEdyaWRSZWNvcmRbXSxcbiAgICAgICAgY29uZmlnOiBJUGl2b3RDb25maWd1cmF0aW9uLFxuICAgICAgICBleHBhbnNpb25TdGF0ZXM6IE1hcDxhbnksIGJvb2xlYW4+LFxuICAgICAgICBkZWZhdWx0RXhwYW5kOiBib29sZWFuLFxuICAgICAgICBfcGlwZVRyaWdnZXI/OiBudW1iZXIsXG4gICAgICAgIF9fPyxcbiAgICApOiBJUGl2b3RHcmlkUmVjb3JkW10ge1xuICAgICAgICBjb25zdCBlbmFibGVkUm93cyA9IGNvbmZpZy5yb3dzPy5maWx0ZXIoeCA9PiB4LmVuYWJsZWQpIHx8IFtdO1xuICAgICAgICBjb25zdCBkYXRhID0gY29sbGVjdGlvbiA/IGNsb25lQXJyYXkoY29sbGVjdGlvbiwgdHJ1ZSkgOiBbXTtcbiAgICAgICAgZm9yIChjb25zdCByb3cgb2YgZW5hYmxlZFJvd3MpIHtcbiAgICAgICAgICAgIFBpdm90VXRpbC5mbGF0dGVuR3JvdXBzKGRhdGEsIHJvdywgZXhwYW5zaW9uU3RhdGVzLCBkZWZhdWx0RXhwYW5kKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaW5hbERhdGEgPSBlbmFibGVkUm93cy5sZW5ndGggPiAwID9cbiAgICAgICAgIGRhdGEuZmlsdGVyKHggPT4geC5kaW1lbnNpb25zLmxlbmd0aCA9PT0gZW5hYmxlZFJvd3MubGVuZ3RoKSA6IGRhdGE7XG5cbiAgICAgICAgaWYgKHRoaXMuZ3JpZCkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNldEZpbHRlcmVkU29ydGVkRGF0YShmaW5hbERhdGEsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmluYWxEYXRhO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAncGl2b3RHcmlkQ2VsbE1lcmdpbmcnLFxuICAgIHB1cmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4UGl2b3RDZWxsTWVyZ2luZ1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KElHWF9HUklEX0JBU0UpIHByaXZhdGUgZ3JpZDogR3JpZFR5cGUpIHsgfVxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oXG4gICAgICAgIGNvbGxlY3Rpb246IElQaXZvdEdyaWRSZWNvcmRbXSxcbiAgICAgICAgY29uZmlnOiBJUGl2b3RDb25maWd1cmF0aW9uLFxuICAgICAgICBkaW06IElQaXZvdERpbWVuc2lvbixcbiAgICAgICAgX3BpcGVUcmlnZ2VyPzogbnVtYmVyXG4gICAgKTogSVBpdm90R3JpZEdyb3VwUmVjb3JkW10ge1xuICAgICAgICBpZiAoY29sbGVjdGlvbi5sZW5ndGggPT09IDAgfHwgY29uZmlnLnJvd3MubGVuZ3RoID09PSAwKSByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgICAgY29uc3QgZGF0YTogSVBpdm90R3JpZEdyb3VwUmVjb3JkW10gPSBjb2xsZWN0aW9uID8gY2xvbmVBcnJheShjb2xsZWN0aW9uLCB0cnVlKSA6IFtdO1xuICAgICAgICBjb25zdCByZXM6IElQaXZvdEdyaWRHcm91cFJlY29yZFtdID0gW107XG5cbiAgICAgICAgY29uc3QgZW5hYmxlZFJvd3MgPSBjb25maWcucm93cz8uZmlsdGVyKHggPT4geC5lbmFibGVkKTtcbiAgICAgICAgbGV0IGdyb3VwRGF0YTogSVBpdm90R3JpZEdyb3VwUmVjb3JkW10gPSBbXTtcbiAgICAgICAgbGV0IHByZXZJZDtcbiAgICAgICAgY29uc3QgaW5kZXggPSBlbmFibGVkUm93cy5pbmRleE9mKGRpbSk7XG4gICAgICAgIGZvciAobGV0IHJlYyBvZiBkYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RGltID0gcmVjLmRpbWVuc2lvbnNbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgaWQgPSBQaXZvdFV0aWwuZ2V0UmVjb3JkS2V5KHJlYywgY3VycmVudERpbSk7XG4gICAgICAgICAgICBpZiAoZ3JvdXBEYXRhLmxlbmd0aCA+IDAgJiYgcHJldklkICE9PSBpZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGggPSBncm91cERhdGEubGVuZ3RoID4gMSA/IGdyb3VwRGF0YS5sZW5ndGggKiB0aGlzLmdyaWQucmVuZGVyZWRSb3dIZWlnaHQgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZ3JvdXBEYXRhWzBdLmhlaWdodCA9IGg7XG4gICAgICAgICAgICAgICAgZ3JvdXBEYXRhWzBdLnJvd1NwYW4gPSBncm91cERhdGEubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKGdyb3VwRGF0YVswXSk7XG4gICAgICAgICAgICAgICAgZ3JvdXBEYXRhID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBncm91cERhdGEucHVzaChyZWMpO1xuICAgICAgICAgICAgcHJldklkID0gaWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdyb3VwRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBoID0gZ3JvdXBEYXRhLmxlbmd0aCA+IDEgPyBncm91cERhdGEubGVuZ3RoICogdGhpcy5ncmlkLnJvd0hlaWdodCArIChncm91cERhdGEubGVuZ3RoIC0gMSkgKyAxIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgZ3JvdXBEYXRhWzBdLmhlaWdodCA9IGg7XG4gICAgICAgICAgICBncm91cERhdGFbMF0ucm93U3BhbiA9IGdyb3VwRGF0YS5sZW5ndGg7XG4gICAgICAgICAgICByZXMucHVzaChncm91cERhdGFbMF0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxufVxuXG5cbi8qKlxuICogQGhpZGRlblxuICovXG5AUGlwZSh7XG4gICAgbmFtZTogJ3Bpdm90R3JpZENvbHVtbicsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hQaXZvdENvbHVtblBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oXG4gICAgICAgIGNvbGxlY3Rpb246IElQaXZvdEdyaWRSZWNvcmRbXSxcbiAgICAgICAgY29uZmlnOiBJUGl2b3RDb25maWd1cmF0aW9uLFxuICAgICAgICBfOiBNYXA8YW55LCBib29sZWFuPixcbiAgICAgICAgX3BpcGVUcmlnZ2VyPzogbnVtYmVyLFxuICAgICAgICBfXz9cbiAgICApOiBJUGl2b3RHcmlkUmVjb3JkW10ge1xuICAgICAgICBjb25zdCBwaXZvdEtleXMgPSBjb25maWcucGl2b3RLZXlzIHx8IERFRkFVTFRfUElWT1RfS0VZUztcbiAgICAgICAgY29uc3QgZW5hYmxlZENvbHVtbnMgPSBjb25maWcuY29sdW1ucz8uZmlsdGVyKHggPT4geC5lbmFibGVkKSB8fCBbXTtcbiAgICAgICAgY29uc3QgZW5hYmxlZFZhbHVlcyA9IGNvbmZpZy52YWx1ZXM/LmZpbHRlcih4ID0+IHguZW5hYmxlZCkgfHwgW107XG5cbiAgICAgICAgY29uc3QgY29sU3RyYXRlZ3kgPSBjb25maWcuY29sdW1uU3RyYXRlZ3kgfHwgUGl2b3RDb2x1bW5EaW1lbnNpb25zU3RyYXRlZ3kuaW5zdGFuY2UoKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGNsb25lQXJyYXkoY29sbGVjdGlvbiwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBjb2xTdHJhdGVneS5wcm9jZXNzKGRhdGEsIGVuYWJsZWRDb2x1bW5zLCBlbmFibGVkVmFsdWVzLCBwaXZvdEtleXMpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAncGl2b3RHcmlkRmlsdGVyJyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneFBpdm90R3JpZEZpbHRlclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGdyaWRBUEk6IEdyaWRCYXNlQVBJU2VydmljZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPikgeyB9XG4gICAgcHVibGljIHRyYW5zZm9ybShjb2xsZWN0aW9uOiBhbnlbXSxcbiAgICAgICAgY29uZmlnOiBJUGl2b3RDb25maWd1cmF0aW9uLFxuICAgICAgICBmaWx0ZXJTdHJhdGVneTogSUZpbHRlcmluZ1N0cmF0ZWd5LFxuICAgICAgICBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZTogSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgX2ZpbHRlclBpcGVUcmlnZ2VyOiBudW1iZXIsXG4gICAgICAgIF9waXBlVHJpZ2dlcjogbnVtYmVyKTogYW55W10ge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uc1RyZWUgPSBQaXZvdFV0aWwuYnVpbGRFeHByZXNzaW9uVHJlZShjb25maWcpO1xuXG4gICAgICAgIGNvbnN0IHN0YXRlID0ge1xuICAgICAgICAgICAgZXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgc3RyYXRlZ3k6IGZpbHRlclN0cmF0ZWd5IHx8IG5ldyBEaW1lbnNpb25WYWx1ZXNGaWx0ZXJpbmdTdHJhdGVneSgpLFxuICAgICAgICAgICAgYWR2YW5jZWRFeHByZXNzaW9uc1RyZWVcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmVtcHR5KHN0YXRlLmV4cHJlc3Npb25zVHJlZSkgJiYgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmVtcHR5KHN0YXRlLmFkdmFuY2VkRXhwcmVzc2lvbnNUcmVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBGaWx0ZXJVdGlsLmZpbHRlcihjbG9uZUFycmF5KGNvbGxlY3Rpb24sIHRydWUpLCBzdGF0ZSwgdGhpcy5ncmlkQVBJLmdyaWQpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5cbi8qKlxuICogQGhpZGRlblxuICovXG5AUGlwZSh7XG4gICAgbmFtZTogJ3Bpdm90R3JpZENvbHVtblNvcnQnLFxuICAgIHB1cmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4UGl2b3RHcmlkQ29sdW1uU29ydGluZ1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICBwdWJsaWMgdHJhbnNmb3JtKFxuICAgICAgICBjb2xsZWN0aW9uOiBJUGl2b3RHcmlkUmVjb3JkW10sXG4gICAgICAgIGV4cHJlc3Npb25zOiBJU29ydGluZ0V4cHJlc3Npb25bXSxcbiAgICAgICAgc29ydGluZzogSUdyaWRTb3J0aW5nU3RyYXRlZ3ksXG4gICAgICAgIF9waXBlVHJpZ2dlcjogbnVtYmVyXG4gICAgKTogSVBpdm90R3JpZFJlY29yZFtdIHtcbiAgICAgICAgbGV0IHJlc3VsdDogSVBpdm90R3JpZFJlY29yZFtdO1xuXG4gICAgICAgIGlmICghZXhwcmVzc2lvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBjb2xsZWN0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yKGNvbnN0IGV4cHIgb2YgZXhwcmVzc2lvbnMpIHtcbiAgICAgICAgICAgICAgICBleHByLnN0cmF0ZWd5ID0gRGVmYXVsdFBpdm90R3JpZFJlY29yZFNvcnRpbmdTdHJhdGVneS5pbnN0YW5jZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ID0gUGl2b3RVdGlsLnNvcnQoY2xvbmVBcnJheShjb2xsZWN0aW9uLCB0cnVlKSwgZXhwcmVzc2lvbnMsIHNvcnRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuQFBpcGUoe1xuICAgIG5hbWU6ICdwaXZvdEdyaWRTb3J0JyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneFBpdm90R3JpZFNvcnRpbmdQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBncmlkQVBJOiBHcmlkQmFzZUFQSVNlcnZpY2U8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4pIHsgfVxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oY29sbGVjdGlvbjogYW55W10sIGNvbmZpZzogSVBpdm90Q29uZmlndXJhdGlvbiwgc29ydGluZzogSUdyaWRTb3J0aW5nU3RyYXRlZ3ksIF9waXBlVHJpZ2dlcjogbnVtYmVyKTogYW55W10ge1xuICAgICAgICBsZXQgcmVzdWx0OiBhbnlbXTtcbiAgICAgICAgY29uc3QgYWxsRGltZW5zaW9ucyA9IGNvbmZpZy5yb3dzIHx8IFtdO1xuICAgICAgICBjb25zdCBlbmFibGVkRGltZW5zaW9ucyA9IGFsbERpbWVuc2lvbnMuZmlsdGVyKHggPT4geCAmJiB4LmVuYWJsZWQpO1xuICAgICAgICBjb25zdCBleHByZXNzaW9ucyA9IFBpdm90U29ydFV0aWwuZ2VuZXJhdGVEaW1lbnNpb25Tb3J0aW5nRXhwcmVzc2lvbnMoZW5hYmxlZERpbWVuc2lvbnMpO1xuICAgICAgICBpZiAoIWV4cHJlc3Npb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gY29sbGVjdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IERhdGFVdGlsLnNvcnQoY2xvbmVBcnJheShjb2xsZWN0aW9uLCB0cnVlKSwgZXhwcmVzc2lvbnMsIHNvcnRpbmcsIHRoaXMuZ3JpZEFQSS5ncmlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuQFBpcGUoeyBuYW1lOiBcImZpbHRlclBpdm90SXRlbXNcIiB9KVxuZXhwb3J0IGNsYXNzIElneEZpbHRlclBpdm90SXRlbXNQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgcHVibGljIHRyYW5zZm9ybShcbiAgICAgICAgY29sbGVjdGlvbjogKElQaXZvdERpbWVuc2lvbiB8IElQaXZvdFZhbHVlKVtdLFxuICAgICAgICBmaWx0ZXJDcml0ZXJpYTogc3RyaW5nLFxuICAgICAgICBfcGlwZVRyaWdnZXI6IG51bWJlclxuICAgICk6IGFueVtdIHtcbiAgICAgICAgaWYgKCFjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY29weSA9IGNvbGxlY3Rpb24uc2xpY2UoMCk7XG4gICAgICAgIGlmIChmaWx0ZXJDcml0ZXJpYSAmJiBmaWx0ZXJDcml0ZXJpYS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJGdW5jID0gKGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJUZXh0ID0gYy5tZW1iZXIgfHwgYy5tZW1iZXJOYW1lO1xuICAgICAgICAgICAgICAgIGlmICghZmlsdGVyVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgIC50b0xvY2FsZUxvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAuaW5kZXhPZihmaWx0ZXJDcml0ZXJpYS50b0xvY2FsZUxvd2VyQ2FzZSgpKSA+PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgIChjLmNoaWxkcmVuPy5zb21lKGZpbHRlckZ1bmMpID8/IGZhbHNlKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29weSA9IGNvbGxlY3Rpb24uZmlsdGVyKGZpbHRlckZ1bmMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb3B5O1xuICAgIH1cbn1cbiJdfQ==