bways-report 0.2.1 → 0.2.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.
@@ -1,3 +1,4 @@
1
+ import { resolveExecutionDataSource } from '../../../core/utils/report-parameter.util';
1
2
  import { normalizeReportDefinition } from '../../persistence/services/schema-validator.service';
2
3
  import { computed, inject, Injectable, signal } from '@angular/core';
3
4
  import { ComponentRegistry } from '../../../core/registry/component-registry';
@@ -312,9 +313,9 @@ export class DesignerStateService {
312
313
  */
313
314
  updateGridDataSourceParameters(mappings) {
314
315
  this.mutateDefinition((def) => {
315
- const gridDsId = def.grid?.dataSourceId;
316
316
  const sources = def.dataSources ?? [];
317
- const targetIdx = sources.findIndex((s) => s.id === gridDsId || s.name === gridDsId);
317
+ const effective = resolveExecutionDataSource(def);
318
+ const targetIdx = sources.findIndex(s => s.id === effective?.id);
318
319
  if (targetIdx >= 0) {
319
320
  const nextSources = [...sources];
320
321
  nextSources[targetIdx] = {
@@ -324,6 +325,7 @@ export class DesignerStateService {
324
325
  return {
325
326
  ...def,
326
327
  dataSources: nextSources,
328
+ grid: def.grid ? { ...def.grid, dataSourceId: nextSources[targetIdx].id } : def.grid,
327
329
  };
328
330
  }
329
331
  return def;
@@ -383,4 +385,4 @@ export class DesignerStateService {
383
385
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DesignerStateService, decorators: [{
384
386
  type: Injectable
385
387
  }] });
386
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXItc3RhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2ZlYXR1cmVzL2Rlc2lnbmVyL3NlcnZpY2VzL2Rlc2lnbmVyLXN0YXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDaEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU1yRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7O0FBS2xFLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUV2Qjs7Ozs7R0FLRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFDZCxRQUFRLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFdEQsdUNBQXVDO0lBQzlCLFVBQVUsR0FBRyxNQUFNLENBQW1CO1FBQzdDLEVBQUUsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQ3JCLElBQUksRUFBRSxpQkFBaUI7UUFDdkIsYUFBYSxFQUFFLENBQUM7UUFDaEIsT0FBTyxFQUFFLENBQUM7UUFDVixNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFO1FBQy9ELFVBQVUsRUFBRSxFQUFFO1FBQ2QsVUFBVSxFQUFFLEVBQUU7UUFDZCxXQUFXLEVBQUUsRUFBRTtLQUNoQixDQUFDLENBQUM7SUFFSCxzQ0FBc0M7SUFDN0IsbUJBQW1CLEdBQUcsTUFBTSxDQUFnQixJQUFJLENBQUMsQ0FBQztJQUUzRCxp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Q3ZDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyRSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEQsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLFdBQVcsRUFBRSxDQUFDO1lBQ3JDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRCxDQUFDO3dHQW5hVSxvQkFBb0I7NEdBQXBCLG9CQUFvQjs7NEZBQXBCLG9CQUFvQjtrQkFEaEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG5vcm1hbGl6ZVJlcG9ydERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9wZXJzaXN0ZW5jZS9zZXJ2aWNlcy9zY2hlbWEtdmFsaWRhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgY29tcHV0ZWQsIGluamVjdCwgSW5qZWN0YWJsZSwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXBvcnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWRlZmluaXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1jb21wb25lbnQubW9kZWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50TGF5b3V0RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1sYXlvdXQubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0R3JpZERlZmluaXRpb24gfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtZ3JpZC5tb2RlbCc7XG5pbXBvcnQgeyBSZXBvcnREYXRhU291cmNlRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1kYXRhc291cmNlLm1vZGVsJztcbmltcG9ydCB7IENvbXBvbmVudFJlZ2lzdHJ5IH0gZnJvbSAnLi4vLi4vLi4vY29yZS9yZWdpc3RyeS9jb21wb25lbnQtcmVnaXN0cnknO1xuaW1wb3J0IHsgZ2VuZXJhdGVJZCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdXRpbGl0aWVzL2lkLWdlbmVyYXRvcic7XG5cbmV4cG9ydCB0eXBlIERlc2lnbmVyVmlld01vZGUgPSAnZGVzaWduJyB8ICdwcmV2aWV3JyB8ICdqc29uJztcbmV4cG9ydCB0eXBlIERlc2lnbmVyQWN0aXZlVGFiID0gJ3Byb3BlcnRpZXMnIHwgJ3JlcG9ydCcgfCAnZ3JpZCc7XG5cbmNvbnN0IE1BWF9ISVNUT1JZID0gMzA7XG5cbi8qKlxuICogRGVzaWduZXJTdGF0ZVNlcnZpY2UgY29vcmRpbmF0ZXMgc3RhdGUgZm9yIHRoZSB2aXN1YWwgcmVwb3J0IGRlc2lnbmVyLlxuICpcbiAqIFNjb3BlZCBhdCB0aGUgRGVzaWduZXIgY29tcG9uZW50IGxldmVsIChub3Qgcm9vdCkgdG8gZW5zdXJlIG11bHRpcGxlIGRlc2lnbmVyXG4gKiBpbnN0YW5jZXMgb3IgbmF2aWdhdGlvbiBmbG93cyByZW1haW4gc3RyaWN0bHkgaXNvbGF0ZWQuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEZXNpZ25lclN0YXRlU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnaXN0cnkgPSBpbmplY3QoQ29tcG9uZW50UmVnaXN0cnkpO1xuXG4gIC8qKiBDdXJyZW50IGFjdGl2ZSByZXBvcnQgZGVmaW5pdGlvbiAqL1xuICByZWFkb25seSBkZWZpbml0aW9uID0gc2lnbmFsPFJlcG9ydERlZmluaXRpb24+KHtcbiAgICBpZDogZ2VuZXJhdGVJZCgncnB0JyksXG4gICAgbmFtZTogJ1VudGl0bGVkIFJlcG9ydCcsXG4gICAgc2NoZW1hVmVyc2lvbjogMSxcbiAgICB2ZXJzaW9uOiAxLFxuICAgIGxheW91dDogeyBjb2x1bW5zOiAxMiwgZ2FwOiAxNiwgcGFkZGluZzogMjQsIGRpcmVjdGlvbjogJ2x0cicgfSxcbiAgICBjb21wb25lbnRzOiBbXSxcbiAgICBwYXJhbWV0ZXJzOiBbXSxcbiAgICBkYXRhU291cmNlczogW10sXG4gIH0pO1xuXG4gIC8qKiBTZWxlY3RlZCBjb21wb25lbnQgSUQgaW4gY2FudmFzICovXG4gIHJlYWRvbmx5IHNlbGVjdGVkQ29tcG9uZW50SWQgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgLyoqIEFjdGl2ZSBwcm9wZXJ0eSBlZGl0b3IgdGFiICovXG4gIHJlYWRvbmx5IGFjdGl2ZVRhYiA9IHNpZ25hbDxEZXNpZ25lckFjdGl2ZVRhYj4oJ3Byb3BlcnRpZXMnKTtcblxuICAvKiogQ3VycmVudCB2aWV3IG1vZGUgKGRlc2lnbiwgcHJldmlldywgb3IgcmF3IGpzb24pICovXG4gIHJlYWRvbmx5IHZpZXdNb2RlID0gc2lnbmFsPERlc2lnbmVyVmlld01vZGU+KCdkZXNpZ24nKTtcblxuICAvKiogRGlydHkgZmxhZyBpbmRpY2F0aW5nIHVuc2F2ZWQgY2hhbmdlcyAqL1xuICByZWFkb25seSBpc0RpcnR5ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICAvLyBIaXN0b3J5IHN0YWNrIGZvciBVbmRvIC8gUmVkb1xuICBwcml2YXRlIHJlYWRvbmx5IGhpc3RvcnkgPSBzaWduYWw8UmVwb3J0RGVmaW5pdGlvbltdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGlzdG9yeUluZGV4ID0gc2lnbmFsPG51bWJlcj4oLTEpO1xuXG4gIHJlYWRvbmx5IGNhblVuZG8gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmhpc3RvcnlJbmRleCgpID4gMCk7XG4gIHJlYWRvbmx5IGNhblJlZG8gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmhpc3RvcnlJbmRleCgpID49IDAgJiYgdGhpcy5oaXN0b3J5SW5kZXgoKSA8IHRoaXMuaGlzdG9yeSgpLmxlbmd0aCAtIDEpO1xuXG4gIC8qKiBDdXJyZW50bHkgc2VsZWN0ZWQgY29tcG9uZW50IGluc3RhbmNlLCBvciBudWxsIGlmIG5vbmUgKi9cbiAgcmVhZG9ubHkgc2VsZWN0ZWRDb21wb25lbnQgPSBjb21wdXRlZDxSZXBvcnRDb21wb25lbnREZWZpbml0aW9uIHwgbnVsbD4oKCkgPT4ge1xuICAgIGNvbnN0IGlkID0gdGhpcy5zZWxlY3RlZENvbXBvbmVudElkKCk7XG4gICAgaWYgKCFpZCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuZGVmaW5pdGlvbigpLmNvbXBvbmVudHMuZmluZCgoYykgPT4gYy5pZCA9PT0gaWQpID8/IG51bGw7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBvciByZWxvYWRzIGEgcmVwb3J0IGRlZmluaXRpb24gaW50byB0aGUgZGVzaWduZXIuXG4gICAqL1xuICBsb2FkRGVmaW5pdGlvbihkZWY6IFJlcG9ydERlZmluaXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBjbG9uZWQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG5vcm1hbGl6ZVJlcG9ydERlZmluaXRpb24oZGVmKSkpIGFzIFJlcG9ydERlZmluaXRpb247XG4gICAgdGhpcy5kZWZpbml0aW9uLnNldChjbG9uZWQpO1xuXG4gICAgLy8gUHJlc2VydmUgYWN0aXZlIGNvbXBvbmVudCBzZWxlY3Rpb24gaWYgaXQgc3RpbGwgZXhpc3RzIGluIHRoZSBsb2FkZWQgZGVmaW5pdGlvblxuICAgIGNvbnN0IGN1cnJlbnRTZWxlY3RlZElkID0gdGhpcy5zZWxlY3RlZENvbXBvbmVudElkKCk7XG4gICAgaWYgKGN1cnJlbnRTZWxlY3RlZElkICYmIGNsb25lZC5jb21wb25lbnRzLnNvbWUoKGMpID0+IGMuaWQgPT09IGN1cnJlbnRTZWxlY3RlZElkKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvbXBvbmVudElkLnNldChjdXJyZW50U2VsZWN0ZWRJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb21wb25lbnRJZC5zZXQobnVsbCk7XG4gICAgfVxuXG4gICAgdGhpcy5pc0RpcnR5LnNldChmYWxzZSk7XG4gICAgdGhpcy5oaXN0b3J5LnNldChbSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjbG9uZWQpKV0pO1xuICAgIHRoaXMuaGlzdG9yeUluZGV4LnNldCgwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3RzIGEgY29tcG9uZW50IGZvciBwcm9wZXJ0eSBlZGl0aW5nLlxuICAgKi9cbiAgc2VsZWN0Q29tcG9uZW50KGlkOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZENvbXBvbmVudElkLnNldChpZCk7XG4gICAgaWYgKGlkKSB7XG4gICAgICB0aGlzLmFjdGl2ZVRhYi5zZXQoJ3Byb3BlcnRpZXMnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYWN0aXZlIHZpZXcgbW9kZSAoZGVzaWduLCBsaXZlIHByZXZpZXcsIGpzb24gc2NoZW1hKS5cbiAgICovXG4gIHNldFZpZXdNb2RlKG1vZGU6IERlc2lnbmVyVmlld01vZGUpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdNb2RlLnNldChtb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBhY3RpdmUgZWRpdG9yIHRhYi5cbiAgICovXG4gIHNldEFjdGl2ZVRhYih0YWI6IERlc2lnbmVyQWN0aXZlVGFiKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVUYWIuc2V0KHRhYik7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBjb21wb25lbnQgb2YgdGhlIHNwZWNpZmllZCB0eXBlIG9udG8gdGhlIGNhbnZhcy5cbiAgICovXG4gIGFkZENvbXBvbmVudChcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgdGFyZ2V0SW5kZXg/OiBudW1iZXIsXG4gICAgb3ZlcnJpZGVzPzogUGFydGlhbDxSZXBvcnRDb21wb25lbnREZWZpbml0aW9uPlxuICApOiBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uIHtcbiAgICBjb25zdCBtZXRhID0gdGhpcy5yZWdpc3RyeS5yZXNvbHZlKHR5cGUpO1xuICAgIGNvbnN0IGRlZmF1bHRDb25maWcgPSBtZXRhPy5jcmVhdGVEZWZhdWx0Q29uZmlnKCkgPz8ge1xuICAgICAgaWQ6IGdlbmVyYXRlSWQodHlwZSksXG4gICAgICB0eXBlLFxuICAgICAgbGFiZWw6IG1ldGE/LmRpc3BsYXlOYW1lID8/IHR5cGUsXG4gICAgICBrZXk6IGAke3R5cGV9XyR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDYpfWAsXG4gICAgfTtcblxuICAgIGNvbnN0IGV4aXN0aW5nS2V5cyA9IG5ldyBTZXQodGhpcy5kZWZpbml0aW9uKCkuY29tcG9uZW50cy5tYXAoKGMpID0+IGMua2V5KS5maWx0ZXIoQm9vbGVhbikpO1xuICAgIGNvbnN0IGJhc2VLZXkgPSBvdmVycmlkZXM/LmtleSA/PyBkZWZhdWx0Q29uZmlnLmtleSA/PyBgJHt0eXBlfV8ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA2KX1gO1xuICAgIGxldCB1bmlxdWVLZXkgPSBiYXNlS2V5O1xuICAgIGxldCBjb3VudGVyID0gMTtcbiAgICB3aGlsZSAoZXhpc3RpbmdLZXlzLmhhcyh1bmlxdWVLZXkpKSB7XG4gICAgICB1bmlxdWVLZXkgPSBgJHtiYXNlS2V5fV8ke2NvdW50ZXIrK31gO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0NvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbiA9IHtcbiAgICAgIGlkOiBnZW5lcmF0ZUlkKHR5cGUpLFxuICAgICAgdHlwZSxcbiAgICAgIGxhYmVsOiBvdmVycmlkZXM/LmxhYmVsID8/IGRlZmF1bHRDb25maWcubGFiZWwgPz8gbWV0YT8uZGlzcGxheU5hbWUgPz8gdHlwZSxcbiAgICAgIGtleTogdW5pcXVlS2V5LFxuICAgICAgb3JkZXI6IDAsXG4gICAgICBsYXlvdXQ6IHtcbiAgICAgICAgY29sdW1uU3Bhbjogb3ZlcnJpZGVzPy5sYXlvdXQ/LmNvbHVtblNwYW4gPz8gZGVmYXVsdENvbmZpZy5sYXlvdXQ/LmNvbHVtblNwYW4gPz8gKHR5cGUgPT09ICdidXR0b24nID8gMiA6IDQpLFxuICAgICAgICAuLi5kZWZhdWx0Q29uZmlnLmxheW91dCxcbiAgICAgICAgLi4ub3ZlcnJpZGVzPy5sYXlvdXQsXG4gICAgICB9LFxuICAgICAgcHJvcGVydGllczogeyAuLi4oZGVmYXVsdENvbmZpZy5wcm9wZXJ0aWVzID8/IHt9KSwgLi4uKG92ZXJyaWRlcz8ucHJvcGVydGllcyA/PyB7fSkgfSxcbiAgICAgIHZhbGlkYXRpb246IG92ZXJyaWRlcz8udmFsaWRhdGlvbiA/PyAoZGVmYXVsdENvbmZpZy52YWxpZGF0aW9uID8geyAuLi5kZWZhdWx0Q29uZmlnLnZhbGlkYXRpb24gfSA6IHVuZGVmaW5lZCksXG4gICAgICBkYXRhU291cmNlOiBvdmVycmlkZXM/LmRhdGFTb3VyY2UgPz8gKGRlZmF1bHRDb25maWcuZGF0YVNvdXJjZSA/IHsgLi4uZGVmYXVsdENvbmZpZy5kYXRhU291cmNlIH0gOiB1bmRlZmluZWQpLFxuICAgICAgZW5hYmxlZDogb3ZlcnJpZGVzPy5lbmFibGVkID8/IGRlZmF1bHRDb25maWcuZW5hYmxlZCA/PyB0cnVlLFxuICAgIH07XG5cbiAgICBjb25zdCBjdXJyZW50Q29tcG9uZW50cyA9IFsuLi50aGlzLmRlZmluaXRpb24oKS5jb21wb25lbnRzXS5zb3J0KFxuICAgICAgKGEsIGIpID0+IChhLm9yZGVyID8/IDApIC0gKGIub3JkZXIgPz8gMClcbiAgICApO1xuICAgIGlmICh0YXJnZXRJbmRleCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldEluZGV4ID49IDAgJiYgdGFyZ2V0SW5kZXggPD0gY3VycmVudENvbXBvbmVudHMubGVuZ3RoKSB7XG4gICAgICBjdXJyZW50Q29tcG9uZW50cy5zcGxpY2UodGFyZ2V0SW5kZXgsIDAsIG5ld0NvbXBvbmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRDb21wb25lbnRzLnB1c2gobmV3Q29tcG9uZW50KTtcbiAgICB9XG5cbiAgICAvLyBSZWNhbGN1bGF0ZSBvcmRlciBpbmRpY2VzXG4gICAgY3VycmVudENvbXBvbmVudHMuZm9yRWFjaCgoYywgaWR4KSA9PiAoYy5vcmRlciA9IGlkeCArIDEpKTtcblxuICAgIHRoaXMubXV0YXRlRGVmaW5pdGlvbigoZGVmKSA9PiAoe1xuICAgICAgLi4uZGVmLFxuICAgICAgY29tcG9uZW50czogY3VycmVudENvbXBvbmVudHMsXG4gICAgfSkpO1xuXG4gICAgdGhpcy5zZWxlY3RDb21wb25lbnQobmV3Q29tcG9uZW50LmlkKTtcbiAgICByZXR1cm4gbmV3Q29tcG9uZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBjb21wb25lbnQgYnkgaXRzIElELlxuICAgKi9cbiAgcmVtb3ZlQ29tcG9uZW50KGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50Q29tcG9uZW50cyA9IHRoaXMuZGVmaW5pdGlvbigpLmNvbXBvbmVudHMuZmlsdGVyKChjKSA9PiBjLmlkICE9PSBpZCk7XG4gICAgY3VycmVudENvbXBvbmVudHMuZm9yRWFjaCgoYywgaWR4KSA9PiAoYy5vcmRlciA9IGlkeCArIDEpKTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkQ29tcG9uZW50SWQoKSA9PT0gaWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb21wb25lbnRJZC5zZXQobnVsbCk7XG4gICAgfVxuXG4gICAgdGhpcy5tdXRhdGVEZWZpbml0aW9uKChkZWYpID0+ICh7XG4gICAgICAuLi5kZWYsXG4gICAgICBjb21wb25lbnRzOiBjdXJyZW50Q29tcG9uZW50cyxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogRHVwbGljYXRlcyBhbiBleGlzdGluZyBjb21wb25lbnQuXG4gICAqL1xuICBkdXBsaWNhdGVDb21wb25lbnQoaWQ6IHN0cmluZyk6IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24gfCBudWxsIHtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuZGVmaW5pdGlvbigpLmNvbXBvbmVudHMuZmluZCgoYykgPT4gYy5pZCA9PT0gaWQpO1xuICAgIGlmICghZXhpc3RpbmcpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgZHVwbGljYXRlZDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbiA9IHtcbiAgICAgIC4uLkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZXhpc3RpbmcpKSxcbiAgICAgIGlkOiBnZW5lcmF0ZUlkKGV4aXN0aW5nLnR5cGUpLFxuICAgICAga2V5OiBleGlzdGluZy5rZXkgPyBgJHtleGlzdGluZy5rZXl9X2NvcHlgIDogdW5kZWZpbmVkLFxuICAgICAgbGFiZWw6IGV4aXN0aW5nLmxhYmVsID8gYCR7ZXhpc3RpbmcubGFiZWx9IChDb3B5KWAgOiB1bmRlZmluZWQsXG4gICAgfTtcblxuICAgIGNvbnN0IGN1cnJlbnRDb21wb25lbnRzID0gWy4uLnRoaXMuZGVmaW5pdGlvbigpLmNvbXBvbmVudHNdLnNvcnQoXG4gICAgICAoYSwgYikgPT4gKGEub3JkZXIgPz8gMCkgLSAoYi5vcmRlciA/PyAwKVxuICAgICk7XG4gICAgY29uc3QgaW5kZXggPSBjdXJyZW50Q29tcG9uZW50cy5maW5kSW5kZXgoKGMpID0+IGMuaWQgPT09IGlkKTtcbiAgICBjdXJyZW50Q29tcG9uZW50cy5zcGxpY2UoaW5kZXggKyAxLCAwLCBkdXBsaWNhdGVkKTtcbiAgICBjdXJyZW50Q29tcG9uZW50cy5mb3JFYWNoKChjLCBpZHgpID0+IChjLm9yZGVyID0gaWR4ICsgMSkpO1xuXG4gICAgdGhpcy5tdXRhdGVEZWZpbml0aW9uKChkZWYpID0+ICh7XG4gICAgICAuLi5kZWYsXG4gICAgICBjb21wb25lbnRzOiBjdXJyZW50Q29tcG9uZW50cyxcbiAgICB9KSk7XG5cbiAgICB0aGlzLnNlbGVjdENvbXBvbmVudChkdXBsaWNhdGVkLmlkKTtcbiAgICByZXR1cm4gZHVwbGljYXRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlcyBhIGNvbXBvbmVudCBmcm9tIHByZXZpb3VzIGluZGV4IHRvIGN1cnJlbnQgaW5kZXggKGUuZy4gZnJvbSBDREsgZHJhZyBkcm9wKS5cbiAgICovXG4gIG1vdmVDb21wb25lbnQocHJldmlvdXNJbmRleDogbnVtYmVyLCBjdXJyZW50SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChwcmV2aW91c0luZGV4ID09PSBjdXJyZW50SW5kZXgpIHJldHVybjtcblxuICAgIGNvbnN0IGN1cnJlbnRDb21wb25lbnRzID0gWy4uLnRoaXMuZGVmaW5pdGlvbigpLmNvbXBvbmVudHNdLnNvcnQoXG4gICAgICAoYSwgYikgPT4gKGEub3JkZXIgPz8gMCkgLSAoYi5vcmRlciA/PyAwKVxuICAgICk7XG4gICAgaWYgKHByZXZpb3VzSW5kZXggPCAwIHx8IHByZXZpb3VzSW5kZXggPj0gY3VycmVudENvbXBvbmVudHMubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgdGFyZ2V0SWR4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oY3VycmVudEluZGV4LCBjdXJyZW50Q29tcG9uZW50cy5sZW5ndGggLSAxKSk7XG5cbiAgICBjb25zdCBbbW92ZWRdID0gY3VycmVudENvbXBvbmVudHMuc3BsaWNlKHByZXZpb3VzSW5kZXgsIDEpO1xuICAgIGN1cnJlbnRDb21wb25lbnRzLnNwbGljZSh0YXJnZXRJZHgsIDAsIG1vdmVkKTtcbiAgICBjdXJyZW50Q29tcG9uZW50cy5mb3JFYWNoKChjLCBpZHgpID0+IChjLm9yZGVyID0gaWR4ICsgMSkpO1xuXG4gICAgdGhpcy5tdXRhdGVEZWZpbml0aW9uKChkZWYpID0+ICh7XG4gICAgICAuLi5kZWYsXG4gICAgICBjb21wb25lbnRzOiBjdXJyZW50Q29tcG9uZW50cyxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBwYXJ0aWFsIHByb3BlcnRpZXMgb2YgYSBjb21wb25lbnQuXG4gICAqL1xuICB1cGRhdGVDb21wb25lbnQoaWQ6IHN0cmluZywgdXBkYXRlczogUGFydGlhbDxSZXBvcnRDb21wb25lbnREZWZpbml0aW9uPik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRDb21wb25lbnRzID0gdGhpcy5kZWZpbml0aW9uKCkuY29tcG9uZW50cy5tYXAoKGMpID0+IHtcbiAgICAgIGlmIChjLmlkID09PSBpZCkge1xuICAgICAgICByZXR1cm4geyAuLi5jLCAuLi51cGRhdGVzIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gYztcbiAgICB9KTtcblxuICAgIHRoaXMubXV0YXRlRGVmaW5pdGlvbigoZGVmKSA9PiAoe1xuICAgICAgLi4uZGVmLFxuICAgICAgY29tcG9uZW50czogY3VycmVudENvbXBvbmVudHMsXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBzaW5nbGUgY29tcG9uZW50IHByb3BlcnR5IHZhbHVlIHdpdGhpbiBgcHJvcGVydGllc2AuXG4gICAqL1xuICB1cGRhdGVDb21wb25lbnRQcm9wZXJ0eShpZDogc3RyaW5nLCBwcm9wS2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudENvbXBvbmVudHMgPSB0aGlzLmRlZmluaXRpb24oKS5jb21wb25lbnRzLm1hcCgoYykgPT4ge1xuICAgICAgaWYgKGMuaWQgPT09IGlkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uYyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAuLi4oYy5wcm9wZXJ0aWVzID8/IHt9KSxcbiAgICAgICAgICAgIFtwcm9wS2V5XTogdmFsdWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjO1xuICAgIH0pO1xuXG4gICAgdGhpcy5tdXRhdGVEZWZpbml0aW9uKChkZWYpID0+ICh7XG4gICAgICAuLi5kZWYsXG4gICAgICBjb21wb25lbnRzOiBjdXJyZW50Q29tcG9uZW50cyxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBsYXlvdXQgcHJvcGVydGllcyBmb3IgYSBjb21wb25lbnQgKGUuZy4gY29sdW1uU3BhbikuXG4gICAqL1xuICB1cGRhdGVDb21wb25lbnRMYXlvdXQoaWQ6IHN0cmluZywgbGF5b3V0OiBQYXJ0aWFsPENvbXBvbmVudExheW91dERlZmluaXRpb24+KTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudENvbXBvbmVudHMgPSB0aGlzLmRlZmluaXRpb24oKS5jb21wb25lbnRzLm1hcCgoYykgPT4ge1xuICAgICAgaWYgKGMuaWQgPT09IGlkKSB7XG4gICAgICAgIGNvbnN0IG5leHRMYXlvdXQgPSB7XG4gICAgICAgICAgLi4uKGMubGF5b3V0ID8/IHt9KSxcbiAgICAgICAgICAuLi5sYXlvdXQsXG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGxheW91dCkgYXMgKGtleW9mIENvbXBvbmVudExheW91dERlZmluaXRpb24pW10pIHtcbiAgICAgICAgICBpZiAobGF5b3V0W2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGVsZXRlIG5leHRMYXlvdXRba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jLFxuICAgICAgICAgIGxheW91dDogbmV4dExheW91dCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjO1xuICAgIH0pO1xuXG4gICAgdGhpcy5tdXRhdGVEZWZpbml0aW9uKChkZWYpID0+ICh7XG4gICAgICAuLi5kZWYsXG4gICAgICBjb21wb25lbnRzOiBjdXJyZW50Q29tcG9uZW50cyxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyByZXBvcnQtbGV2ZWwgc2V0dGluZ3MgKG5hbWUsIGRlc2NyaXB0aW9uLCBsYXlvdXQpLlxuICAgKi9cbiAgdXBkYXRlUmVwb3J0U2V0dGluZ3Moc2V0dGluZ3M6IFBhcnRpYWw8UmVwb3J0RGVmaW5pdGlvbj4pOiB2b2lkIHtcbiAgICB0aGlzLm11dGF0ZURlZmluaXRpb24oKGRlZikgPT4gKHtcbiAgICAgIC4uLmRlZixcbiAgICAgIC4uLnNldHRpbmdzLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGdyaWQgZGVmaW5pdGlvbiBzZXR0aW5ncy5cbiAgICovXG4gIHVwZGF0ZUdyaWRTZXR0aW5ncyhncmlkOiBSZXBvcnRHcmlkRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCwgb3B0aW9ucz86IHsgc2tpcEhpc3Rvcnk/OiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICBpZiAob3B0aW9ucz8uc2tpcEhpc3RvcnkpIHtcbiAgICAgIHRoaXMuZGVmaW5pdGlvbi51cGRhdGUoKGRlZikgPT4gKHtcbiAgICAgICAgLi4uZGVmLFxuICAgICAgICBncmlkLFxuICAgICAgfSkpO1xuICAgICAgdGhpcy5pc0RpcnR5LnNldCh0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5tdXRhdGVEZWZpbml0aW9uKChkZWYpID0+ICh7XG4gICAgICAuLi5kZWYsXG4gICAgICBncmlkLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIG9yIHVwZGF0ZXMgdGhlIHByaW1hcnkgZGF0YSBzb3VyY2UgZm9yIHRoZSByZXBvcnQncyByZXN1bHQgZ3JpZC5cbiAgICovXG4gIHNldEdyaWREYXRhU291cmNlKGRzOiBSZXBvcnREYXRhU291cmNlRGVmaW5pdGlvbik6IHZvaWQge1xuICAgIHRoaXMubXV0YXRlRGVmaW5pdGlvbigoZGVmKSA9PiB7XG4gICAgICBjb25zdCBleGlzdGluZ1NvdXJjZXMgPSBkZWYuZGF0YVNvdXJjZXMgPz8gW107XG4gICAgICBjb25zdCBpZHggPSBleGlzdGluZ1NvdXJjZXMuZmluZEluZGV4KChzKSA9PiBzLmlkID09PSBkcy5pZCk7XG4gICAgICBsZXQgbmV4dFNvdXJjZXM6IFJlcG9ydERhdGFTb3VyY2VEZWZpbml0aW9uW107XG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgbmV4dFNvdXJjZXMgPSBbLi4uZXhpc3RpbmdTb3VyY2VzXTtcbiAgICAgICAgbmV4dFNvdXJjZXNbaWR4XSA9IGRzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dFNvdXJjZXMgPSBbZHMsIC4uLmV4aXN0aW5nU291cmNlc107XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVwZGF0ZWRHcmlkOiBSZXBvcnRHcmlkRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgLi4uKGRlZi5ncmlkID8/IHtcbiAgICAgICAgICBkYXRhU291cmNlSWQ6IGRzLmlkLFxuICAgICAgICAgIGNvbHVtbnM6IFtdLFxuICAgICAgICAgIG9wdGlvbnM6IHsgcGFnaW5hdGlvbjogdHJ1ZSwgcGFnZVNpemU6IDI1LCBzaG93Um93TnVtYmVyczogdHJ1ZSwgc2hvd0Zvb3RlcjogdHJ1ZSB9LFxuICAgICAgICB9KSxcbiAgICAgICAgZGF0YVNvdXJjZUlkOiBkcy5pZCxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmRlZixcbiAgICAgICAgZGF0YVNvdXJjZXM6IG5leHRTb3VyY2VzLFxuICAgICAgICBncmlkOiB1cGRhdGVkR3JpZCxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcGFyYW1ldGVyIG1hcHBpbmdzIGZvciB0aGUgcHJpbWFyeSBncmlkIGRhdGEgc291cmNlLlxuICAgKi9cbiAgdXBkYXRlR3JpZERhdGFTb3VyY2VQYXJhbWV0ZXJzKG1hcHBpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICAgIHRoaXMubXV0YXRlRGVmaW5pdGlvbigoZGVmKSA9PiB7XG4gICAgICBjb25zdCBncmlkRHNJZCA9IGRlZi5ncmlkPy5kYXRhU291cmNlSWQ7XG4gICAgICBjb25zdCBzb3VyY2VzID0gZGVmLmRhdGFTb3VyY2VzID8/IFtdO1xuICAgICAgY29uc3QgdGFyZ2V0SWR4ID0gc291cmNlcy5maW5kSW5kZXgoKHMpID0+IHMuaWQgPT09IGdyaWREc0lkIHx8IHMubmFtZSA9PT0gZ3JpZERzSWQpO1xuXG4gICAgICBpZiAodGFyZ2V0SWR4ID49IDApIHtcbiAgICAgICAgY29uc3QgbmV4dFNvdXJjZXMgPSBbLi4uc291cmNlc107XG4gICAgICAgIG5leHRTb3VyY2VzW3RhcmdldElkeF0gPSB7XG4gICAgICAgICAgLi4ubmV4dFNvdXJjZXNbdGFyZ2V0SWR4XSxcbiAgICAgICAgICBwYXJhbWV0ZXJNYXBwaW5nczogbWFwcGluZ3MgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uZGVmLFxuICAgICAgICAgIGRhdGFTb3VyY2VzOiBuZXh0U291cmNlcyxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRlZjtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZlcnRzIHRvIHRoZSBwcmV2aW91cyBzdGF0ZSBpbiBoaXN0b3J5LlxuICAgKi9cbiAgdW5kbygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FuVW5kbygpKSByZXR1cm47XG4gICAgY29uc3QgbmV3SW5kZXggPSB0aGlzLmhpc3RvcnlJbmRleCgpIC0gMTtcbiAgICB0aGlzLmhpc3RvcnlJbmRleC5zZXQobmV3SW5kZXgpO1xuICAgIGNvbnN0IHJlc3RvcmVkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmhpc3RvcnkoKVtuZXdJbmRleF0pKSBhcyBSZXBvcnREZWZpbml0aW9uO1xuICAgIHRoaXMuZGVmaW5pdGlvbi5zZXQocmVzdG9yZWQpO1xuICAgIHRoaXMuaXNEaXJ0eS5zZXQodHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQWR2YW5jZXMgdG8gdGhlIG5leHQgc3RhdGUgaW4gaGlzdG9yeS5cbiAgICovXG4gIHJlZG8oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblJlZG8oKSkgcmV0dXJuO1xuICAgIGNvbnN0IG5ld0luZGV4ID0gdGhpcy5oaXN0b3J5SW5kZXgoKSArIDE7XG4gICAgdGhpcy5oaXN0b3J5SW5kZXguc2V0KG5ld0luZGV4KTtcbiAgICBjb25zdCByZXN0b3JlZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5oaXN0b3J5KClbbmV3SW5kZXhdKSkgYXMgUmVwb3J0RGVmaW5pdGlvbjtcbiAgICB0aGlzLmRlZmluaXRpb24uc2V0KHJlc3RvcmVkKTtcbiAgICB0aGlzLmlzRGlydHkuc2V0KHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmtzIHRoZSBjdXJyZW50IGRlZmluaXRpb24gc3RhdGUgYXMgc2F2ZWQuXG4gICAqL1xuICBtYXJrU2F2ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5pc0RpcnR5LnNldChmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBhbiBpbW11dGFibGUgc3RhdGUgY2hhbmdlIGFuZCBwdXNoZXMgdG8gaGlzdG9yeS5cbiAgICovXG4gIHByaXZhdGUgbXV0YXRlRGVmaW5pdGlvbih1cGRhdGVyOiAoY3VycmVudDogUmVwb3J0RGVmaW5pdGlvbikgPT4gUmVwb3J0RGVmaW5pdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSB1cGRhdGVyKHRoaXMuZGVmaW5pdGlvbigpKTtcbiAgICB0aGlzLmRlZmluaXRpb24uc2V0KG5leHQpO1xuICAgIHRoaXMuaXNEaXJ0eS5zZXQodHJ1ZSk7XG4gICAgdGhpcy5wdXNoSGlzdG9yeShuZXh0KTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEhpc3RvcnkoZGVmOiBSZXBvcnREZWZpbml0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudEhpc3QgPSB0aGlzLmhpc3RvcnkoKS5zbGljZSgwLCB0aGlzLmhpc3RvcnlJbmRleCgpICsgMSk7XG4gICAgY3VycmVudEhpc3QucHVzaChKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRlZikpKTtcbiAgICBpZiAoY3VycmVudEhpc3QubGVuZ3RoID4gTUFYX0hJU1RPUlkpIHtcbiAgICAgIGN1cnJlbnRIaXN0LnNoaWZ0KCk7XG4gICAgfVxuICAgIHRoaXMuaGlzdG9yeS5zZXQoY3VycmVudEhpc3QpO1xuICAgIHRoaXMuaGlzdG9yeUluZGV4LnNldChjdXJyZW50SGlzdC5sZW5ndGggLSAxKTtcbiAgfVxufVxuIl19
388
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXItc3RhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2ZlYXR1cmVzL2Rlc2lnbmVyL3NlcnZpY2VzL2Rlc2lnbmVyLXN0YXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDdkYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDaEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU1yRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7O0FBS2xFLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUV2Qjs7Ozs7R0FLRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFDZCxRQUFRLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFdEQsdUNBQXVDO0lBQzlCLFVBQVUsR0FBRyxNQUFNLENBQW1CO1FBQzdDLEVBQUUsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQ3JCLElBQUksRUFBRSxpQkFBaUI7UUFDdkIsYUFBYSxFQUFFLENBQUM7UUFDaEIsT0FBTyxFQUFFLENBQUM7UUFDVixNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFO1FBQy9ELFVBQVUsRUFBRSxFQUFFO1FBQ2QsVUFBVSxFQUFFLEVBQUU7UUFDZCxXQUFXLEVBQUUsRUFBRTtLQUNoQixDQUFDLENBQUM7SUFFSCxzQ0FBc0M7SUFDN0Is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QUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxHQUFxQjtRQUN2QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckUsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xELElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxXQUFXLEVBQUUsQ0FBQztZQUNyQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQzt3R0FwYVUsb0JBQW9COzRHQUFwQixvQkFBb0I7OzRGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZXNvbHZlRXhlY3V0aW9uRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdXRpbHMvcmVwb3J0LXBhcmFtZXRlci51dGlsJztcbmltcG9ydCB7IG5vcm1hbGl6ZVJlcG9ydERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9wZXJzaXN0ZW5jZS9zZXJ2aWNlcy9zY2hlbWEtdmFsaWRhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgY29tcHV0ZWQsIGluamVjdCwgSW5qZWN0YWJsZSwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXBvcnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWRlZmluaXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1jb21wb25lbnQubW9kZWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50TGF5b3V0RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1sYXlvdXQubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0R3JpZERlZmluaXRpb24gfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtZ3JpZC5tb2RlbCc7XG5pbXBvcnQgeyBSZXBvcnREYXRhU291cmNlRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1kYXRhc291cmNlLm1vZGVsJztcbmltcG9ydCB7IENvbXBvbmVudFJlZ2lzdHJ5IH0gZnJvbSAnLi4vLi4vLi4vY29yZS9yZWdpc3RyeS9jb21wb25lbnQtcmVnaXN0cnknO1xuaW1wb3J0IHsgZ2VuZXJhdGVJZCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdXRpbGl0aWVzL2lkLWdlbmVyYXRvcic7XG5cbmV4cG9ydCB0eXBlIERlc2lnbmVyVmlld01vZGUgPSAnZGVzaWduJyB8ICdwcmV2aWV3JyB8ICdqc29uJztcbmV4cG9ydCB0eXBlIERlc2lnbmVyQWN0aXZlVGFiID0gJ3Byb3BlcnRpZXMnIHwgJ3JlcG9ydCcgfCAnZ3JpZCc7XG5cbmNvbnN0IE1BWF9ISVNUT1JZID0gMzA7XG5cbi8qKlxuICogRGVzaWduZXJTdGF0ZVNlcnZpY2UgY29vcmRpbmF0ZXMgc3RhdGUgZm9yIHRoZSB2aXN1YWwgcmVwb3J0IGRlc2lnbmVyLlxuICpcbiAqIFNjb3BlZCBhdCB0aGUgRGVzaWduZXIgY29tcG9uZW50IGxldmVsIChub3Qgcm9vdCkgdG8gZW5zdXJlIG11bHRpcGxlIGRlc2lnbmVyXG4gKiBpbnN0YW5jZXMgb3IgbmF2aWdhdGlvbiBmbG93cyByZW1haW4gc3RyaWN0bHkgaXNvbGF0ZWQuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEZXNpZ25lclN0YXRlU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnaXN0cnkgPSBpbmplY3QoQ29tcG9uZW50UmVnaXN0cnkpO1xuXG4gIC8qKiBDdXJyZW50IGFjdGl2ZSByZXBvcnQgZGVmaW5pdGlvbiAqL1xuICByZWFkb25seSBkZWZpbml0aW9uID0gc2lnbmFsPFJlcG9ydERlZmluaXRpb24+KHtcbiAgICBpZDogZ2VuZXJhdGVJZCgncnB0JyksXG4gICAgbmFtZTogJ1VudGl0bGVkIFJlcG9ydCcsXG4gICAgc2NoZW1hVmVyc2lvbjogMSxcbiAgICB2ZXJzaW9uOiAxLFxuICAgIGxheW91dDogeyBjb2x1bW5zOiAxMiwgZ2FwOiAxNiwgcGFkZGluZzogMjQsIGRpcmVjdGlvbjogJ2x0cicgfSxcbiAgICBjb21wb25lbnRzOiBbXSxcbiAgICBwYXJhbWV0ZXJzOiBbXSxcbiAgICBkYXRhU291cmNlczogW10sXG4gIH0pO1xuXG4gIC8qKiBTZWxlY3RlZCBjb21wb25lbnQgSUQgaW4gY2FudmFzICovXG4gIHJlYWRvbmx5IHNlbGVjdGVkQ29tcG9uZW50SWQgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgLyoqIEFjdGl2ZSBwcm9wZXJ0eSBlZGl0b3IgdGFiICovXG4gIHJlYWRvbmx5IGFjdGl2ZVRhYiA9IHNpZ25hbDxEZXNpZ25lckFjdGl2ZVRhYj4oJ3Byb3BlcnRpZXMnKTtcblxuICAvKiogQ3VycmVudCB2aWV3IG1vZGUgKGRlc2lnbiwgcHJldmlldywgb3IgcmF3IGpzb24pICovXG4gIHJlYWRvbmx5IHZpZXdNb2RlID0gc2lnbmFsPERlc2lnbmVyVmlld01vZGU+KCdkZXNpZ24nKTtcblxuICAvKiogRGlydHkgZmxhZyBpbmRpY2F0aW5nIHVuc2F2ZWQgY2hhbmdlcyAqL1xuICByZWFkb25seSBpc0RpcnR5ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICAvLyBIaXN0b3J5IHN0YWNrIGZvciBVbmRvIC8gUmVkb1xuICBwcml2YXRlIHJlYWRvbmx5IGhpc3RvcnkgPSBzaWduYWw8UmVwb3J0RGVmaW5pdGlvbltdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGlzdG9yeUluZGV4ID0gc2lnbmFsPG51bWJlcj4oLTEpO1xuXG4gIHJlYWRvbmx5IGNhblVuZG8gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmhpc3RvcnlJbmRleCgpID4gMCk7XG4gIHJlYWRvbmx5IGNhblJlZG8gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmhpc3RvcnlJbmRleCgpID49IDAgJiYgdGhpcy5oaXN0b3J5SW5kZXgoKSA8IHRoaXMuaGlzdG9yeSgpLmxlbmd0aCAtIDEpO1xuXG4gIC8qKiBDdXJyZW50bHkgc2VsZWN0ZWQgY29tcG9uZW50IGluc3RhbmNlLCBvciBudWxsIGlmIG5vbmUgKi9cbiAgcmVhZG9ubHkgc2VsZWN0ZWRDb21wb25lbnQgPSBjb21wdXRlZDxSZXBvcnRDb21wb25lbnREZWZpbml0aW9uIHwgbnVsbD4oKCkgPT4ge1xuICAgIGNvbnN0IGlkID0gdGhpcy5zZWxlY3RlZENvbXBvbmVudElkKCk7XG4gICAgaWYgKCFpZCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuZGVmaW5pdGlvbigpLmNvbXBvbmVudHMuZmluZCgoYykgPT4gYy5pZCA9PT0gaWQpID8/IG51bGw7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBvciByZWxvYWRzIGEgcmVwb3J0IGRlZmluaXRpb24gaW50byB0aGUgZGVzaWduZXIuXG4gICAqL1xuICBsb2FkRGVmaW5pdGlvbihkZWY6IFJlcG9ydERlZmluaXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBjbG9uZWQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG5vcm1hbGl6ZVJlcG9ydERlZmluaXRpb24oZGVmKSkpIGFzIFJlcG9ydERlZmluaXRpb247XG4gICAgdGhpcy5kZWZpbml0aW9uLnNldChjbG9uZWQpO1xuXG4gICAgLy8gUHJlc2VydmUgYWN0aXZlIGNvbXBvbmVudCBzZWxlY3Rpb24gaWYgaXQgc3RpbGwgZXhpc3RzIGluIHRoZSBsb2FkZWQgZGVmaW5pdGlvblxuICAgIGNvbnN0IGN1cnJlbnRTZWxlY3RlZElkID0gdGhpcy5zZWxlY3RlZENvbXBvbmVudElkKCk7XG4gICAgaWYgKGN1cnJlbnRTZWxlY3RlZElkICYmIGNsb25lZC5jb21wb25lbnRzLnNvbWUoKGMpID0+IGMuaWQgPT09IGN1cnJlbnRTZWxlY3RlZElkKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvbXBvbmVudElkLnNldChjdXJyZW50U2VsZWN0ZWRJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb21wb25lbnRJZC5zZXQobnVsbCk7XG4gICAgfVxuXG4gICAgdGhpcy5pc0RpcnR5LnNldChmYWxzZSk7XG4gICAgdGhpcy5oaXN0b3J5LnNldChbSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjbG9uZWQpKV0pO1xuICAgIHRoaXMuaGlzdG9yeUluZGV4LnNldCgwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3RzIGEgY29tcG9uZW50IGZvciBwcm9wZXJ0eSBlZGl0aW5nLlxuICAgKi9cbiAgc2VsZWN0Q29tcG9uZW50KGlkOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZENvbXBvbmVudElkLnNldChpZCk7XG4gICAgaWYgKGlkKSB7XG4gICAgICB0aGlzLmFjdGl2ZVRhYi5zZXQoJ3Byb3BlcnRpZXMnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYWN0aXZlIHZpZXcgbW9kZSAoZGVzaWduLCBsaXZlIHByZXZpZXcsIGpzb24gc2NoZW1hKS5cbiAgICovXG4gIHNldFZpZXdNb2RlKG1vZGU6IERlc2lnbmVyVmlld01vZGUpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdNb2RlLnNldChtb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBhY3RpdmUgZWRpdG9yIHRhYi5cbiAgICovXG4gIHNldEFjdGl2ZVRhYih0YWI6IERlc2lnbmVyQWN0aXZlVGFiKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVUYWIuc2V0KHRhYik7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBjb21wb25lbnQgb2YgdGhlIHNwZWNpZmllZCB0eXBlIG9udG8gdGhlIGNhbnZhcy5cbiAgICovXG4gIGFkZENvbXBvbmVudChcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgdGFyZ2V0SW5kZXg/OiBudW1iZXIsXG4gICAgb3ZlcnJpZGVzPzogUGFydGlhbDxSZXBvcnRDb21wb25lbnREZWZpbml0aW9uPlxuICApOiBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uIHtcbiAgICBjb25zdCBtZXRhID0gdGhpcy5yZWdpc3RyeS5yZXNvbHZlKHR5cGUpO1xuICAgIGNvbnN0IGRlZmF1bHRDb25maWcgPSBtZXRhPy5jcmVhdGVEZWZhdWx0Q29uZmlnKCkgPz8ge1xuICAgICAgaWQ6IGdlbmVyYXRlSWQodHlwZSksXG4gICAgICB0eXBlLFxuICAgICAgbGFiZWw6IG1ldGE/LmRpc3BsYXlOYW1lID8/IHR5cGUsXG4gICAgICBrZXk6IGAke3R5cGV9XyR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDYpfWAsXG4gICAgfTtcblxuICAgIGNvbnN0IGV4aXN0aW5nS2V5cyA9IG5ldyBTZXQodGhpcy5kZWZpbml0aW9uKCkuY29tcG9uZW50cy5tYXAoKGMpID0+IGMua2V5KS5maWx0ZXIoQm9vbGVhbikpO1xuICAgIGNvbnN0IGJhc2VLZXkgPSBvdmVycmlkZXM/LmtleSA/PyBkZWZhdWx0Q29uZmlnLmtleSA/PyBgJHt0eXBlfV8ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA2KX1gO1xuICAgIGxldCB1bmlxdWVLZXkgPSBiYXNlS2V5O1xuICAgIGxldCBjb3VudGVyID0gMTtcbiAgICB3aGlsZSAoZXhpc3RpbmdLZXlzLmhhcyh1bmlxdWVLZXkpKSB7XG4gICAgICB1bmlxdWVLZXkgPSBgJHtiYXNlS2V5fV8ke2NvdW50ZXIrK31gO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0NvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbiA9IHtcbiAgICAgIGlkOiBnZW5lcmF0ZUlkKHR5cGUpLFxuICAgICAgdHlwZSxcbiAgICAgIGxhYmVsOiBvdmVycmlkZXM/LmxhYmVsID8/IGRlZmF1bHRDb25maWcubGFiZWwgPz8gbWV0YT8uZGlzcGxheU5hbWUgPz8gdHlwZSxcbiAgICAgIGtleTogdW5pcXVlS2V5LFxuICAgICAgb3JkZXI6IDAsXG4gICAgICBsYXlvdXQ6IHtcbiAgICAgICAgY29sdW1uU3Bhbjogb3ZlcnJpZGVzPy5sYXlvdXQ/LmNvbHVtblNwYW4gPz8gZGVmYXVsdENvbmZpZy5sYXlvdXQ/LmNvbHVtblNwYW4gPz8gKHR5cGUgPT09ICdidXR0b24nID8gMiA6IDQpLFxuICAgICAgICAuLi5kZWZhdWx0Q29uZmlnLmxheW91dCxcbiAgICAgICAgLi4ub3ZlcnJpZGVzPy5sYXlvdXQsXG4gICAgICB9LFxuICAgICAgcHJvcGVydGllczogeyAuLi4oZGVmYXVsdENvbmZpZy5wcm9wZXJ0aWVzID8/IHt9KSwgLi4uKG92ZXJyaWRlcz8ucHJvcGVydGllcyA/PyB7fSkgfSxcbiAgICAgIHZhbGlkYXRpb246IG92ZXJyaWRlcz8udmFsaWRhdGlvbiA/PyAoZGVmYXVsdENvbmZpZy52YWxpZGF0aW9uID8geyAuLi5kZWZhdWx0Q29uZmlnLnZhbGlkYXRpb24gfSA6IHVuZGVmaW5lZCksXG4gICAgICBkYXRhU291cmNlOiBvdmVycmlkZXM/LmRhdGFTb3VyY2UgPz8gKGRlZmF1bHRDb25maWcuZGF0YVNvdXJjZSA/IHsgLi4uZGVmYXVsdENvbmZpZy5kYXRhU291cmNlIH0gOiB1bmRlZmluZWQpLFxuICAgICAgZW5hYmxlZDogb3ZlcnJpZGVzPy5lbmFibGVkID8/IGRlZmF1bHRDb25maWcuZW5hYmxlZCA/PyB0cnVlLFxuICAgIH07XG5cbiAgICBjb25zdCBjdXJyZW50Q29tcG9uZW50cyA9IFsuLi50aGlzLmRlZmluaXRpb24oKS5jb21wb25lbnRzXS5zb3J0KFxuICAgICAgKGEsIGIpID0+IChhLm9yZGVyID8/IDApIC0gKGIub3JkZXIgPz8gMClcbiAgICApO1xuICAgIGlmICh0YXJnZXRJbmRleCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldEluZGV4ID49IDAgJiYgdGFyZ2V0SW5kZXggPD0gY3VycmVudENvbXBvbmVudHMubGVuZ3RoKSB7XG4gICAgICBjdXJyZW50Q29tcG9uZW50cy5zcGxpY2UodGFyZ2V0SW5kZXgsIDAsIG5ld0NvbXBvbmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRDb21wb25lbnRzLnB1c2gobmV3Q29tcG9uZW50KTtcbiAgICB9XG5cbiAgICAvLyBSZWNhbGN1bGF0ZSBvcmRlciBpbmRpY2VzXG4gICAgY3VycmVudENvbXBvbmVudHMuZm9yRWFjaCgoYywgaWR4KSA9PiAoYy5vcmRlciA9IGlkeCArIDEpKTtcblxuICAgIHRoaXMubXV0YXRlRGVmaW5pdGlvbigoZGVmKSA9PiAoe1xuICAgICAgLi4uZGVmLFxuICAgICAgY29tcG9uZW50czogY3VycmVudENvbXBvbmVudHMsXG4gICAgfSkpO1xuXG4gICAgdGhpcy5zZWxlY3RDb21wb25lbnQobmV3Q29tcG9uZW50LmlkKTtcbiAgICByZXR1cm4gbmV3Q29tcG9uZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBjb21wb25lbnQgYnkgaXRzIElELlxuICAgKi9cbiAgcmVtb3ZlQ29tcG9uZW50KGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50Q29tcG9uZW50cyA9IHRoaXMuZGVmaW5pdGlvbigpLmNvbXBvbmVudHMuZmlsdGVyKChjKSA9PiBjLmlkICE9PSBpZCk7XG4gICAgY3VycmVudENvbXBvbmVudHMuZm9yRWFjaCgoYywgaWR4KSA9PiAoYy5vcmRlciA9IGlkeCArIDEpKTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkQ29tcG9uZW50SWQoKSA9PT0gaWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb21wb25lbnRJZC5zZXQobnVsbCk7XG4gICAgfVxuXG4gICAgdGhpcy5tdXRhdGVEZWZpbml0aW9uKChkZWYpID0+ICh7XG4gICAgICAuLi5kZWYsXG4gICAgICBjb21wb25lbnRzOiBjdXJyZW50Q29tcG9uZW50cyxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogRHVwbGljYXRlcyBhbiBleGlzdGluZyBjb21wb25lbnQuXG4gICAqL1xuICBkdXBsaWNhdGVDb21wb25lbnQoaWQ6IHN0cmluZyk6IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24gfCBudWxsIHtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuZGVmaW5pdGlvbigpLmNvbXBvbmVudHMuZmluZCgoYykgPT4gYy5pZCA9PT0gaWQpO1xuICAgIGlmICghZXhpc3RpbmcpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgZHVwbGljYXRlZDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbiA9IHtcbiAgICAgIC4uLkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZXhpc3RpbmcpKSxcbiAgICAgIGlkOiBnZW5lcmF0ZUlkKGV4aXN0aW5nLnR5cGUpLFxuICAgICAga2V5OiBleGlzdGluZy5rZXkgPyBgJHtleGlzdGluZy5rZXl9X2NvcHlgIDogdW5kZWZpbmVkLFxuICAgICAgbGFiZWw6IGV4aXN0aW5nLmxhYmVsID8gYCR7ZXhpc3RpbmcubGFiZWx9IChDb3B5KWAgOiB1bmRlZmluZWQsXG4gICAgfTtcblxuICAgIGNvbnN0IGN1cnJlbnRDb21wb25lbnRzID0gWy4uLnRoaXMuZGVmaW5pdGlvbigpLmNvbXBvbmVudHNdLnNvcnQoXG4gICAgICAoYSwgYikgPT4gKGEub3JkZXIgPz8gMCkgLSAoYi5vcmRlciA/PyAwKVxuICAgICk7XG4gICAgY29uc3QgaW5kZXggPSBjdXJyZW50Q29tcG9uZW50cy5maW5kSW5kZXgoKGMpID0+IGMuaWQgPT09IGlkKTtcbiAgICBjdXJyZW50Q29tcG9uZW50cy5zcGxpY2UoaW5kZXggKyAxLCAwLCBkdXBsaWNhdGVkKTtcbiAgICBjdXJyZW50Q29tcG9uZW50cy5mb3JFYWNoKChjLCBpZHgpID0+IChjLm9yZGVyID0gaWR4ICsgMSkpO1xuXG4gICAgdGhpcy5tdXRhdGVEZWZpbml0aW9uKChkZWYpID0+ICh7XG4gICAgICAuLi5kZWYsXG4gICAgICBjb21wb25lbnRzOiBjdXJyZW50Q29tcG9uZW50cyxcbiAgICB9KSk7XG5cbiAgICB0aGlzLnNlbGVjdENvbXBvbmVudChkdXBsaWNhdGVkLmlkKTtcbiAgICByZXR1cm4gZHVwbGljYXRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlcyBhIGNvbXBvbmVudCBmcm9tIHByZXZpb3VzIGluZGV4IHRvIGN1cnJlbnQgaW5kZXggKGUuZy4gZnJvbSBDREsgZHJhZyBkcm9wKS5cbiAgICovXG4gIG1vdmVDb21wb25lbnQocHJldmlvdXNJbmRleDogbnVtYmVyLCBjdXJyZW50SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChwcmV2aW91c0luZGV4ID09PSBjdXJyZW50SW5kZXgpIHJldHVybjtcblxuICAgIGNvbnN0IGN1cnJlbnRDb21wb25lbnRzID0gWy4uLnRoaXMuZGVmaW5pdGlvbigpLmNvbXBvbmVudHNdLnNvcnQoXG4gICAgICAoYSwgYikgPT4gKGEub3JkZXIgPz8gMCkgLSAoYi5vcmRlciA/PyAwKVxuICAgICk7XG4gICAgaWYgKHByZXZpb3VzSW5kZXggPCAwIHx8IHByZXZpb3VzSW5kZXggPj0gY3VycmVudENvbXBvbmVudHMubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgdGFyZ2V0SWR4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oY3VycmVudEluZGV4LCBjdXJyZW50Q29tcG9uZW50cy5sZW5ndGggLSAxKSk7XG5cbiAgICBjb25zdCBbbW92ZWRdID0gY3VycmVudENvbXBvbmVudHMuc3BsaWNlKHByZXZpb3VzSW5kZXgsIDEpO1xuICAgIGN1cnJlbnRDb21wb25lbnRzLnNwbGljZSh0YXJnZXRJZHgsIDAsIG1vdmVkKTtcbiAgICBjdXJyZW50Q29tcG9uZW50cy5mb3JFYWNoKChjLCBpZHgpID0+IChjLm9yZGVyID0gaWR4ICsgMSkpO1xuXG4gICAgdGhpcy5tdXRhdGVEZWZpbml0aW9uKChkZWYpID0+ICh7XG4gICAgICAuLi5kZWYsXG4gICAgICBjb21wb25lbnRzOiBjdXJyZW50Q29tcG9uZW50cyxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBwYXJ0aWFsIHByb3BlcnRpZXMgb2YgYSBjb21wb25lbnQuXG4gICAqL1xuICB1cGRhdGVDb21wb25lbnQoaWQ6IHN0cmluZywgdXBkYXRlczogUGFydGlhbDxSZXBvcnRDb21wb25lbnREZWZpbml0aW9uPik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRDb21wb25lbnRzID0gdGhpcy5kZWZpbml0aW9uKCkuY29tcG9uZW50cy5tYXAoKGMpID0+IHtcbiAgICAgIGlmIChjLmlkID09PSBpZCkge1xuICAgICAgICByZXR1cm4geyAuLi5jLCAuLi51cGRhdGVzIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gYztcbiAgICB9KTtcblxuICAgIHRoaXMubXV0YXRlRGVmaW5pdGlvbigoZGVmKSA9PiAoe1xuICAgICAgLi4uZGVmLFxuICAgICAgY29tcG9uZW50czogY3VycmVudENvbXBvbmVudHMsXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBzaW5nbGUgY29tcG9uZW50IHByb3BlcnR5IHZhbHVlIHdpdGhpbiBgcHJvcGVydGllc2AuXG4gICAqL1xuICB1cGRhdGVDb21wb25lbnRQcm9wZXJ0eShpZDogc3RyaW5nLCBwcm9wS2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudENvbXBvbmVudHMgPSB0aGlzLmRlZmluaXRpb24oKS5jb21wb25lbnRzLm1hcCgoYykgPT4ge1xuICAgICAgaWYgKGMuaWQgPT09IGlkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uYyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAuLi4oYy5wcm9wZXJ0aWVzID8/IHt9KSxcbiAgICAgICAgICAgIFtwcm9wS2V5XTogdmFsdWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjO1xuICAgIH0pO1xuXG4gICAgdGhpcy5tdXRhdGVEZWZpbml0aW9uKChkZWYpID0+ICh7XG4gICAgICAuLi5kZWYsXG4gICAgICBjb21wb25lbnRzOiBjdXJyZW50Q29tcG9uZW50cyxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBsYXlvdXQgcHJvcGVydGllcyBmb3IgYSBjb21wb25lbnQgKGUuZy4gY29sdW1uU3BhbikuXG4gICAqL1xuICB1cGRhdGVDb21wb25lbnRMYXlvdXQoaWQ6IHN0cmluZywgbGF5b3V0OiBQYXJ0aWFsPENvbXBvbmVudExheW91dERlZmluaXRpb24+KTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudENvbXBvbmVudHMgPSB0aGlzLmRlZmluaXRpb24oKS5jb21wb25lbnRzLm1hcCgoYykgPT4ge1xuICAgICAgaWYgKGMuaWQgPT09IGlkKSB7XG4gICAgICAgIGNvbnN0IG5leHRMYXlvdXQgPSB7XG4gICAgICAgICAgLi4uKGMubGF5b3V0ID8/IHt9KSxcbiAgICAgICAgICAuLi5sYXlvdXQsXG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGxheW91dCkgYXMgKGtleW9mIENvbXBvbmVudExheW91dERlZmluaXRpb24pW10pIHtcbiAgICAgICAgICBpZiAobGF5b3V0W2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGVsZXRlIG5leHRMYXlvdXRba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jLFxuICAgICAgICAgIGxheW91dDogbmV4dExheW91dCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjO1xuICAgIH0pO1xuXG4gICAgdGhpcy5tdXRhdGVEZWZpbml0aW9uKChkZWYpID0+ICh7XG4gICAgICAuLi5kZWYsXG4gICAgICBjb21wb25lbnRzOiBjdXJyZW50Q29tcG9uZW50cyxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyByZXBvcnQtbGV2ZWwgc2V0dGluZ3MgKG5hbWUsIGRlc2NyaXB0aW9uLCBsYXlvdXQpLlxuICAgKi9cbiAgdXBkYXRlUmVwb3J0U2V0dGluZ3Moc2V0dGluZ3M6IFBhcnRpYWw8UmVwb3J0RGVmaW5pdGlvbj4pOiB2b2lkIHtcbiAgICB0aGlzLm11dGF0ZURlZmluaXRpb24oKGRlZikgPT4gKHtcbiAgICAgIC4uLmRlZixcbiAgICAgIC4uLnNldHRpbmdzLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGdyaWQgZGVmaW5pdGlvbiBzZXR0aW5ncy5cbiAgICovXG4gIHVwZGF0ZUdyaWRTZXR0aW5ncyhncmlkOiBSZXBvcnRHcmlkRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCwgb3B0aW9ucz86IHsgc2tpcEhpc3Rvcnk/OiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICBpZiAob3B0aW9ucz8uc2tpcEhpc3RvcnkpIHtcbiAgICAgIHRoaXMuZGVmaW5pdGlvbi51cGRhdGUoKGRlZikgPT4gKHtcbiAgICAgICAgLi4uZGVmLFxuICAgICAgICBncmlkLFxuICAgICAgfSkpO1xuICAgICAgdGhpcy5pc0RpcnR5LnNldCh0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5tdXRhdGVEZWZpbml0aW9uKChkZWYpID0+ICh7XG4gICAgICAuLi5kZWYsXG4gICAgICBncmlkLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIG9yIHVwZGF0ZXMgdGhlIHByaW1hcnkgZGF0YSBzb3VyY2UgZm9yIHRoZSByZXBvcnQncyByZXN1bHQgZ3JpZC5cbiAgICovXG4gIHNldEdyaWREYXRhU291cmNlKGRzOiBSZXBvcnREYXRhU291cmNlRGVmaW5pdGlvbik6IHZvaWQge1xuICAgIHRoaXMubXV0YXRlRGVmaW5pdGlvbigoZGVmKSA9PiB7XG4gICAgICBjb25zdCBleGlzdGluZ1NvdXJjZXMgPSBkZWYuZGF0YVNvdXJjZXMgPz8gW107XG4gICAgICBjb25zdCBpZHggPSBleGlzdGluZ1NvdXJjZXMuZmluZEluZGV4KChzKSA9PiBzLmlkID09PSBkcy5pZCk7XG4gICAgICBsZXQgbmV4dFNvdXJjZXM6IFJlcG9ydERhdGFTb3VyY2VEZWZpbml0aW9uW107XG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgbmV4dFNvdXJjZXMgPSBbLi4uZXhpc3RpbmdTb3VyY2VzXTtcbiAgICAgICAgbmV4dFNvdXJjZXNbaWR4XSA9IGRzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dFNvdXJjZXMgPSBbZHMsIC4uLmV4aXN0aW5nU291cmNlc107XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVwZGF0ZWRHcmlkOiBSZXBvcnRHcmlkRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgLi4uKGRlZi5ncmlkID8/IHtcbiAgICAgICAgICBkYXRhU291cmNlSWQ6IGRzLmlkLFxuICAgICAgICAgIGNvbHVtbnM6IFtdLFxuICAgICAgICAgIG9wdGlvbnM6IHsgcGFnaW5hdGlvbjogdHJ1ZSwgcGFnZVNpemU6IDI1LCBzaG93Um93TnVtYmVyczogdHJ1ZSwgc2hvd0Zvb3RlcjogdHJ1ZSB9LFxuICAgICAgICB9KSxcbiAgICAgICAgZGF0YVNvdXJjZUlkOiBkcy5pZCxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmRlZixcbiAgICAgICAgZGF0YVNvdXJjZXM6IG5leHRTb3VyY2VzLFxuICAgICAgICBncmlkOiB1cGRhdGVkR3JpZCxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcGFyYW1ldGVyIG1hcHBpbmdzIGZvciB0aGUgcHJpbWFyeSBncmlkIGRhdGEgc291cmNlLlxuICAgKi9cbiAgdXBkYXRlR3JpZERhdGFTb3VyY2VQYXJhbWV0ZXJzKG1hcHBpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICAgIHRoaXMubXV0YXRlRGVmaW5pdGlvbigoZGVmKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2VzID0gZGVmLmRhdGFTb3VyY2VzID8/IFtdO1xuICAgICAgY29uc3QgZWZmZWN0aXZlID0gcmVzb2x2ZUV4ZWN1dGlvbkRhdGFTb3VyY2UoZGVmKTtcbiAgICAgIGNvbnN0IHRhcmdldElkeCA9IHNvdXJjZXMuZmluZEluZGV4KHMgPT4gcy5pZCA9PT0gZWZmZWN0aXZlPy5pZCk7XG5cbiAgICAgIGlmICh0YXJnZXRJZHggPj0gMCkge1xuICAgICAgICBjb25zdCBuZXh0U291cmNlcyA9IFsuLi5zb3VyY2VzXTtcbiAgICAgICAgbmV4dFNvdXJjZXNbdGFyZ2V0SWR4XSA9IHtcbiAgICAgICAgICAuLi5uZXh0U291cmNlc1t0YXJnZXRJZHhdLFxuICAgICAgICAgIHBhcmFtZXRlck1hcHBpbmdzOiBtYXBwaW5ncyBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPixcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5kZWYsXG4gICAgICAgICAgZGF0YVNvdXJjZXM6IG5leHRTb3VyY2VzLFxuICAgICAgICAgIGdyaWQ6IGRlZi5ncmlkID8geyAuLi5kZWYuZ3JpZCwgZGF0YVNvdXJjZUlkOiBuZXh0U291cmNlc1t0YXJnZXRJZHhdLmlkIH0gOiBkZWYuZ3JpZCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRlZjtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZlcnRzIHRvIHRoZSBwcmV2aW91cyBzdGF0ZSBpbiBoaXN0b3J5LlxuICAgKi9cbiAgdW5kbygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FuVW5kbygpKSByZXR1cm47XG4gICAgY29uc3QgbmV3SW5kZXggPSB0aGlzLmhpc3RvcnlJbmRleCgpIC0gMTtcbiAgICB0aGlzLmhpc3RvcnlJbmRleC5zZXQobmV3SW5kZXgpO1xuICAgIGNvbnN0IHJlc3RvcmVkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmhpc3RvcnkoKVtuZXdJbmRleF0pKSBhcyBSZXBvcnREZWZpbml0aW9uO1xuICAgIHRoaXMuZGVmaW5pdGlvbi5zZXQocmVzdG9yZWQpO1xuICAgIHRoaXMuaXNEaXJ0eS5zZXQodHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQWR2YW5jZXMgdG8gdGhlIG5leHQgc3RhdGUgaW4gaGlzdG9yeS5cbiAgICovXG4gIHJlZG8oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblJlZG8oKSkgcmV0dXJuO1xuICAgIGNvbnN0IG5ld0luZGV4ID0gdGhpcy5oaXN0b3J5SW5kZXgoKSArIDE7XG4gICAgdGhpcy5oaXN0b3J5SW5kZXguc2V0KG5ld0luZGV4KTtcbiAgICBjb25zdCByZXN0b3JlZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5oaXN0b3J5KClbbmV3SW5kZXhdKSkgYXMgUmVwb3J0RGVmaW5pdGlvbjtcbiAgICB0aGlzLmRlZmluaXRpb24uc2V0KHJlc3RvcmVkKTtcbiAgICB0aGlzLmlzRGlydHkuc2V0KHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmtzIHRoZSBjdXJyZW50IGRlZmluaXRpb24gc3RhdGUgYXMgc2F2ZWQuXG4gICAqL1xuICBtYXJrU2F2ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5pc0RpcnR5LnNldChmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBhbiBpbW11dGFibGUgc3RhdGUgY2hhbmdlIGFuZCBwdXNoZXMgdG8gaGlzdG9yeS5cbiAgICovXG4gIHByaXZhdGUgbXV0YXRlRGVmaW5pdGlvbih1cGRhdGVyOiAoY3VycmVudDogUmVwb3J0RGVmaW5pdGlvbikgPT4gUmVwb3J0RGVmaW5pdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSB1cGRhdGVyKHRoaXMuZGVmaW5pdGlvbigpKTtcbiAgICB0aGlzLmRlZmluaXRpb24uc2V0KG5leHQpO1xuICAgIHRoaXMuaXNEaXJ0eS5zZXQodHJ1ZSk7XG4gICAgdGhpcy5wdXNoSGlzdG9yeShuZXh0KTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEhpc3RvcnkoZGVmOiBSZXBvcnREZWZpbml0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudEhpc3QgPSB0aGlzLmhpc3RvcnkoKS5zbGljZSgwLCB0aGlzLmhpc3RvcnlJbmRleCgpICsgMSk7XG4gICAgY3VycmVudEhpc3QucHVzaChKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRlZikpKTtcbiAgICBpZiAoY3VycmVudEhpc3QubGVuZ3RoID4gTUFYX0hJU1RPUlkpIHtcbiAgICAgIGN1cnJlbnRIaXN0LnNoaWZ0KCk7XG4gICAgfVxuICAgIHRoaXMuaGlzdG9yeS5zZXQoY3VycmVudEhpc3QpO1xuICAgIHRoaXMuaGlzdG9yeUluZGV4LnNldChjdXJyZW50SGlzdC5sZW5ndGggLSAxKTtcbiAgfVxufVxuIl19