@sumaris-net/ngx-components 1.23.56 → 1.23.57

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,6 +1,6 @@
1
1
  import { __awaiter } from "tslib";
2
2
  import { BehaviorSubject } from 'rxjs';
3
- import { filter, map, mergeMap } from 'rxjs/operators';
3
+ import { map, mergeMap } from 'rxjs/operators';
4
4
  import { EntityUtils } from '../model/entity.model';
5
5
  import { isEmptyArray, isNil, isNotEmptyArray, isNotNil } from '../../../shared/functions';
6
6
  import { chainPromises } from '../../../shared/observables';
@@ -10,7 +10,7 @@ export class EntityStore {
10
10
  constructor(name, storage, policy) {
11
11
  this.name = name;
12
12
  this.storage = storage;
13
- this._onChange = new BehaviorSubject(false);
13
+ this._onChange = new BehaviorSubject(true);
14
14
  this._dirty = false;
15
15
  this.policy = policy || {};
16
16
  this.reset({ emitEvent: false });
@@ -63,9 +63,7 @@ export class EntityStore {
63
63
  console.warn('[entity-store] WARN: Watching full entities, splited by id in entity store. This can be long! Please make sure you need full entities here.');
64
64
  return this._onChange
65
65
  .pipe(
66
- // Wait data loaded
67
- filter(_ => this._loaded),
68
- // Apply filter and sort
66
+ // Apply filter on cache
69
67
  map((_) => this.reduceAndSort(this._cache, variables)),
70
68
  // Then convert into full entities (using parallel jobs - /!\ can use lot of memory)
71
69
  mergeMap((res) => Promise.all((res.data || [])
@@ -76,11 +74,7 @@ export class EntityStore {
76
74
  }
77
75
  // Load using entities array
78
76
  return this._onChange
79
- .pipe(
80
- // Wait data loaded
81
- filter(_ => this._loaded),
82
- // Apply filter and sort
83
- map((_) => this.reduceAndSort(this._cache, variables)));
77
+ .pipe(map((_) => this.reduceAndSort(this._cache, variables)));
84
78
  }
85
79
  /**
86
80
  * WIll apply a filter, then a sort, then a page slice
@@ -137,7 +131,7 @@ export class EntityStore {
137
131
  let result;
138
132
  console.info(`[entity-storage] Saving ${entities.length} ${this.name}(s)`);
139
133
  // First save, or reset using given entities
140
- if (!this._loaded || !this._cache || (opts === null || opts === void 0 ? void 0 : opts.reset)) {
134
+ if (isEmptyArray(this._cache) || (opts && opts.reset)) {
141
135
  this.setEntities(entities, { emitEvent: false });
142
136
  }
143
137
  else {
@@ -464,4 +458,4 @@ export class EntityStore {
464
458
  this._onChange.next(true);
465
459
  }
466
460
  }
467
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXN0b3JlLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3N0b3JhZ2UvZW50aXR5LXN0b3JlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsZUFBZSxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBRWpELE9BQU8sRUFBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBUyxXQUFXLEVBQVUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRSxPQUFPLEVBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFFekYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFckMsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsVUFBVSxDQUFDO0FBbUJ0RCxNQUFNLE9BQU8sV0FBVztJQW9DdEIsWUFDcUIsSUFBWSxFQUNaLE9BQWdCLEVBQ25DLE1BQWlDO1FBRmQsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFoQ3BCLGNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUtoRCxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBNkJyQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxX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QkFBZ0I7U0FDakI7UUFFRCxPQUFPLEVBQUMsSUFBSSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxNQUFnQztRQUM3RCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssT0FBTztZQUFFLE9BQU8sU0FBUyxDQUFDLENBQUMsaUNBQWlDO1FBQ2hGLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztZQUFFLE9BQU8sU0FBUyxDQUFDLENBQUMsT0FBTztRQUV2RSwrREFBK0Q7UUFDL0QsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQy9GLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7WUFDdEIsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVYLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM5RixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxTQUFTO1FBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtTdG9yYWdlfSBmcm9tICdAaW9uaWMvc3RvcmFnZSc7XG5pbXBvcnQge2ZpbHRlciwgbWFwLCBtZXJnZU1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtFbnRpdHksIEVudGl0eVV0aWxzLCBJRW50aXR5fSBmcm9tICcuLi9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHtpc0VtcHR5QXJyYXksIGlzTmlsLCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7SUVudGl0aWVzU2VydmljZSwgTG9hZFJlc3VsdH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7Y2hhaW5Qcm9taXNlc30gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcbmltcG9ydCB7RXJyb3JDb2Rlc30gZnJvbSAnLi4vZXJyb3JzJztcblxuZXhwb3J0IGNvbnN0IEVOVElUSUVTX1NUT1JBR0VfS0VZX1BSRUZJWCA9ICdlbnRpdGllcyc7XG5cbmV4cG9ydCB0eXBlIEVudGl0eVN0b3JlVHlwZVBvbGljeU1vZGUgPSAnZGVmYXVsdCcgfCAnYnktaWQnO1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRW50aXR5U3RvcmVUeXBlUG9saWN5PFQgZXh0ZW5kcyBFbnRpdHk8VCwgYW55PiA9IEVudGl0eTxhbnksIGFueT4sIEsgPSBrZXlvZiBUPiAge1xuICBtb2RlPzogRW50aXR5U3RvcmVUeXBlUG9saWN5TW9kZTsgLy8gJ2RlZmF1bHQnIGJ5IGRlZmF1bHRcbiAgc2tpcE5vbkxvY2FsRW50aXRpZXM/OiBib29sZWFuOyAvLyBGYWxzZSBieSBkZWZhdWx0XG4gIGxpZ2h0RmllbGRzRXhjbHVkZXM/OiBLW107IC8vIG5vbmUgYnkgZGVmYXVsdFxufVxuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRW50aXR5U3RvcmFnZUxvYWRPcHRpb25zIHtcbiAgZnVsbExvYWQ/OiBib29sZWFuO1xufVxuXG5kZWNsYXJlIGludGVyZmFjZSBFbnRpdHlTdGF0dXMge1xuICBpbmRleDogbnVtYmVyO1xuICBkaXJ0eT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBFbnRpdHlTdG9yZTxcbiAgVCBleHRlbmRzIElFbnRpdHk8VCwgSUQ+LFxuICBJRCA9IG51bWJlcixcbiAgTyBleHRlbmRzIEVudGl0eVN0b3JhZ2VMb2FkT3B0aW9ucyA9IEVudGl0eVN0b3JhZ2VMb2FkT3B0aW9ucz4ge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0b3JhZ2VLZXk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfb25DaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFwVG9MaWdodEVudGl0eTogKFQpID0+IFQ7XG4gIHByaXZhdGUgX2NhY2hlOiBUW107XG4gIHByaXZhdGUgX3N0YXR1c0J5SWQ6IE1hcDxJRCwgRW50aXR5U3RhdHVzPjtcbiAgcHJpdmF0ZSBfc2VxdWVuY2U6IG51bWJlcjtcbiAgcHJpdmF0ZSBfZGlydHkgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfbG9hZGVkOiBib29sZWFuO1xuXG4gIHJlYWRvbmx5IHBvbGljeTogRW50aXR5U3RvcmVUeXBlUG9saWN5PFQ+O1xuXG4gIGdldCBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY2FjaGU/Lmxlbmd0aCB8fCAwO1xuICB9XG5cbiAgZ2V0IGNhY2hlKCk6IFRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlO1xuICB9XG5cbiAgZ2V0IGRpcnR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXJ0eTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgaXNCeUlkTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wb2xpY3kubW9kZSA9PT0gJ2J5LWlkJztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgc3RvcmFnZUtleUJ5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3RvcmFnZUtleSArICcjaWRzJztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByZWFkb25seSBuYW1lOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHN0b3JhZ2U6IFN0b3JhZ2UsXG4gICAgcG9saWN5PzogRW50aXR5U3RvcmVUeXBlUG9saWN5PFQ+KSB7XG4gICAgdGhpcy5wb2xpY3kgPSBwb2xpY3kgfHwge307XG4gICAgdGhpcy5yZXNldCh7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIHRoaXMuX2RpcnR5ID0gZmFsc2U7XG4gICAgdGhpcy5fbG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5fc3RvcmFnZUtleSA9IEVOVElUSUVTX1NUT1JBR0VfS0VZX1BSRUZJWCArICcjJyArIG5hbWU7XG4gICAgdGhpcy5fbWFwVG9MaWdodEVudGl0eSA9IHRoaXMuY3JlYXRlTGlnaHRFbnRpdHlNYXBGbih0aGlzLnBvbGljeSk7XG4gIH1cblxuICBuZXh0VmFsdWUoKTogSUQge1xuICAgIHRoaXMuX3NlcXVlbmNlID0gdGhpcy5fc2VxdWVuY2UgLSAxO1xuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5fc2VxdWVuY2UgYXMgdW5rbm93biBhcyBJRDtcbiAgfVxuXG4gIGN1cnJlbnRWYWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zZXF1ZW5jZTtcbiAgfVxuXG4gIGFzeW5jIGxvYWQoaWQ6IElELCBvcHRzPzogRW50aXR5U3RvcmFnZUxvYWRPcHRpb25zKTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKHRoaXMuX21hcFRvTGlnaHRFbnRpdHkgJiYgKCFvcHRzIHx8IG9wdHMuZnVsbExvYWQgIT09IGZhbHNlKSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubG9hZEZ1bGxFbnRpdHkoaWQsIG9wdHMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sb2FkQ2FjaGVkRW50aXR5KGlkLCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXYXRjaCBhIHNldCBvZiBlbnRpdGllc1xuICAgKlxuICAgKiBAcGFyYW0gdmFyaWFibGVzXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICB3YXRjaEFsbCh2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgIG9mZnNldD86IG51bWJlcjtcbiAgICAgICAgICAgIHNpemU/OiBudW1iZXI7XG4gICAgICAgICAgICBzb3J0Qnk/OiBzdHJpbmc7XG4gICAgICAgICAgICBzb3J0RGlyZWN0aW9uPzogc3RyaW5nO1xuICAgICAgICAgICAgZmlsdGVyPzogKFQpID0+IGJvb2xlYW47XG4gICAgICAgICAgfSwgb3B0cz86IE8pOiBPYnNlcnZhYmxlPExvYWRSZXN1bHQ8VD4+IHtcblxuICAgIC8vIElmIG5lZWQgZnVsbCBlbnRpdGllcywgYnV0IHVzZSBsaWdodCBlbnRpdGllcyBpbiB0aGUgZW50aXRpZXMgYXJyYXlcbiAgICBpZiAodGhpcy5fbWFwVG9MaWdodEVudGl0eSAmJiAob3B0cyAmJiBvcHRzLmZ1bGxMb2FkID09PSB0cnVlKSkge1xuICAgICAgY29uc29sZS53YXJuKCdbZW50aXR5LXN0b3JlXSBXQVJOOiBXYXRjaGluZyBmdWxsIGVudGl0aWVzLCBzcGxpdGVkIGJ5IGlkIGluIGVudGl0eSBzdG9yZS4gVGhpcyBjYW4gYmUgbG9uZyEgUGxlYXNlIG1ha2Ugc3VyZSB5b3UgbmVlZCBmdWxsIGVudGl0aWVzIGhlcmUuJyk7XG4gICAgICByZXR1cm4gdGhpcy5fb25DaGFuZ2VcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy8gV2FpdCBkYXRhIGxvYWRlZFxuICAgICAgICAgIGZpbHRlcihfID0+IHRoaXMuX2xvYWRlZCksXG4gICAgICAgICAgLy8gQXBwbHkgZmlsdGVyIGFuZCBzb3J0XG4gICAgICAgICAgbWFwKChfKSA9PiB0aGlzLnJlZHVjZUFuZFNvcnQodGhpcy5fY2FjaGUsIHZhcmlhYmxlcykpLFxuXG4gICAgICAgICAgLy8gVGhlbiBjb252ZXJ0IGludG8gZnVsbCBlbnRpdGllcyAodXNpbmcgcGFyYWxsZWwgam9icyAtIC8hXFwgY2FuIHVzZSBsb3Qgb2YgbWVtb3J5KVxuICAgICAgICAgIG1lcmdlTWFwKChyZXMpID0+IFByb21pc2UuYWxsKChyZXMuZGF0YSB8fCBbXSlcbiAgICAgICAgICAgIC5tYXAoZSA9PiB0aGlzLmxvYWRGdWxsRW50aXR5KGUuaWQsIG9wdHMpKSkudGhlbihkYXRhID0+ICh7XG4gICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICB0b3RhbDogcmVzLnRvdGFsXG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBMb2FkIHVzaW5nIGVudGl0aWVzIGFycmF5XG4gICAgcmV0dXJuIHRoaXMuX29uQ2hhbmdlXG4gICAgICAucGlwZShcbiAgICAgICAgLy8gV2FpdCBkYXRhIGxvYWRlZFxuICAgICAgICBmaWx0ZXIoXyA9PiB0aGlzLl9sb2FkZWQpLFxuICAgICAgICAvLyBBcHBseSBmaWx0ZXIgYW5kIHNvcnRcbiAgICAgICAgbWFwKChfKSA9PiB0aGlzLnJlZHVjZUFuZFNvcnQodGhpcy5fY2FjaGUsIHZhcmlhYmxlcykpXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFdJbGwgYXBwbHkgYSBmaWx0ZXIsIHRoZW4gYSBzb3J0LCB0aGVuIGEgcGFnZSBzbGljZVxuICAgKlxuICAgKiBAcGFyYW0gdmFyaWFibGVzXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBhc3luYyBsb2FkQWxsKHZhcmlhYmxlczoge1xuICAgIG9mZnNldD86IG51bWJlcjtcbiAgICBzaXplPzogbnVtYmVyO1xuICAgIHNvcnRCeT86IHN0cmluZztcbiAgICBzb3J0RGlyZWN0aW9uPzogc3RyaW5nO1xuICAgIGZpbHRlcj86IChUKSA9PiBib29sZWFuO1xuICB9LCBvcHRzPzogTyk6IFByb21pc2U8TG9hZFJlc3VsdDxUPj4ge1xuXG4gICAgY29uc3QgcmVzID0gdGhpcy5yZWR1Y2VBbmRTb3J0KHRoaXMuX2NhY2hlLCB2YXJpYWJsZXMpO1xuXG4gICAgLy8gSWYgc3RvcmUgYnkgSUQ6IG1ha2Ugc3VyZSB0byBmdWxsIHRoZSBmdWxsIGVudGl0aWVzXG4gICAgaWYgKHRoaXMuX21hcFRvTGlnaHRFbnRpdHkgJiYgaXNOb3RFbXB0eUFycmF5KHJlcy5kYXRhKSAmJiAob3B0cyAmJiBvcHRzLmZ1bGxMb2FkID09PSB0cnVlKSkge1xuICAgICAgLy8gTG9hZCBmdWxsIGVudGl0aWVzLCBvbmUgYnkgb25lXG4gICAgICByZXMuZGF0YSA9IGF3YWl0IGNoYWluUHJvbWlzZXMoKHJlcy5kYXRhIHx8IFtdKS5tYXAoZSA9PiAoKSA9PiB0aGlzLmxvYWQoZS5pZCkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzIDtcbiAgfVxuXG4gIHNhdmUoZW50aXR5OiBULCBvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW59KTogVCB7XG4gICAgY29uc3Qgc3RhdHVzID0gaXNOb3ROaWwoZW50aXR5LmlkKSAmJiB0aGlzLl9zdGF0dXNCeUlkLmdldChlbnRpdHkuaWQpIHx8IHtpbmRleDogdW5kZWZpbmVkfTtcbiAgICBjb25zdCBpc05ldyA9IGlzTmlsKHN0YXR1cy5pbmRleCk7XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICBpZiAoaXNOaWwoZW50aXR5LmlkKSkge1xuICAgICAgICBlbnRpdHkuaWQgPSB0aGlzLm5leHRWYWx1ZSgpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoK2VudGl0eS5pZCA8IDAgJiYgK2VudGl0eS5pZCA+IHRoaXMuX3NlcXVlbmNlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignVHJ5aW5nIHRvIHNhdmUgYSBsb2NhbCBlbnRpdHkgd2l0aCBhbiBpZCA+IHNlcXVlbmNlLiBXaWxsIHJlcGxhY2UgaWQgYnkgc2VxdWVuY2UgbmV4dCB2YWx1ZScpO1xuICAgICAgICBlbnRpdHkuaWQgPSB0aGlzLm5leHRWYWx1ZSgpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIE9LOiB1c2UgYSB2YWxpZCBpZCA6XG4gICAgICAgIC8vIC0gaWQgPj0gMCAoc2hvdWxkIGJlIGEgcmVtb3RlIGlkKVxuICAgICAgICAvLyAtIE9SIDwgc2VxdWVuY2UsIGFuZCBub3QgZXhpc3RzIGluIHRoZSBpbmRleCBtYXBcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc3RhdHVzQnlJZC5zZXQoZW50aXR5LmlkLCBzdGF0dXMpO1xuICAgICAgc3RhdHVzLmluZGV4ID0gdGhpcy5fY2FjaGUucHVzaChlbnRpdHkpIC0gMTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl9jYWNoZVtzdGF0dXMuaW5kZXhdID0gZW50aXR5O1xuICAgIH1cblxuICAgIC8vIE1hcmsgZW50aXR5IGFzIGRpcnR5XG4gICAgc3RhdHVzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIE1hcmsgc3RvcmFnZSBhcyBkaXJ0eVxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIEVtaXQgdXBkYXRlIGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50aXR5O1xuICB9XG5cbiAgc2F2ZUFsbChlbnRpdGllczogVFtdLCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyByZXNldD86IGJvb2xlYW4gfSk6IFRbXSB7XG4gICAgaWYgKGlzRW1wdHlBcnJheShlbnRpdGllcykgJiYgKCFvcHRzIHx8IG9wdHMucmVzZXQgIT09IHRydWUpKSByZXR1cm4gZW50aXRpZXM7IC8vIFNraXAgKE5vdGhpbmcgdG8gc2F2ZSlcblxuICAgIGxldCByZXN1bHQ6IFRbXTtcblxuICAgIGNvbnNvbGUuaW5mbyhgW2VudGl0eS1zdG9yYWdlXSBTYXZpbmcgJHtlbnRpdGllcy5sZW5ndGh9ICR7dGhpcy5uYW1lfShzKWApO1xuXG4gICAgLy8gRmlyc3Qgc2F2ZSwgb3IgcmVzZXQgdXNpbmcgZ2l2ZW4gZW50aXRpZXNcbiAgICBpZiAoIXRoaXMuX2xvYWRlZCB8fCAhdGhpcy5fY2FjaGUgfHwgKG9wdHM/LnJlc2V0KSkge1xuICAgICAgdGhpcy5zZXRFbnRpdGllcyhlbnRpdGllcywge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXN1bHQgPSBlbnRpdGllcy5tYXAoKGVudGl0eSkgPT4gdGhpcy5zYXZlKGVudGl0eSwge2VtaXRFdmVudDogZmFsc2V9KSk7XG4gICAgfVxuXG4gICAgLy8gTWFyayBhcyBkaXJ0eVxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIEVtaXQgdXBkYXRlIGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0IHx8IHRoaXMuX2NhY2hlLnNsaWNlKCk7XG4gIH1cblxuICBkZWxldGUoaWQ6IElELCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiBUIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzdGF0dXMgPSBpc05vdE5pbChpZCkgPyB0aGlzLl9zdGF0dXNCeUlkLmdldChpZCkgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgaW5kZXggPSBzdGF0dXMgPyBzdGF0dXMuaW5kZXggOiB1bmRlZmluZWQ7XG4gICAgaWYgKGlzTmlsKGluZGV4KSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuX2NhY2hlW2luZGV4XTtcbiAgICBpZiAoIWVudGl0eSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIC8vIFJlbW92ZSBmcm9tIGNhY2hlXG4gICAgdGhpcy5fY2FjaGVbaW5kZXhdID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3N0YXR1c0J5SWQuZGVsZXRlKGVudGl0eS5pZCk7XG5cbiAgICAvLyBSZW1vdmUgZnVsbCBlbnRpdHksIGJ5IGlkXG4gICAgaWYgKHRoaXMuaXNCeUlkTW9kZSkge1xuICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZSh0aGlzLl9zdG9yYWdlS2V5ICsgJyMnICsgaWQpO1xuICAgIH1cblxuICAgIC8vIE1hcmsgYXMgZGlydHlcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBFbWl0IHVwZGF0ZSBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudGl0eSBhcyBUO1xuICB9XG5cbiAgZGVsZXRlTWFueShpZHM6IElEW10sIG9wdHM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbn0pOiBUW10ge1xuXG4gICAgLy8gRGVsZXRlIGJ5IGlkLCBidXQgTk9UIGVtaXQgZXZlbnQgb24gZWFjaCBkZWxldGlvblxuICAgIGNvbnN0IGRlbGV0ZWRFbnRpdGllcyA9IChpZHMgfHwgW10pXG4gICAgICAubWFwKGlkID0+IHRoaXMuZGVsZXRlKGlkLCB7ZW1pdEV2ZW50OiBmYWxzZX0pKVxuICAgICAgLmZpbHRlcihpc05vdE5pbCk7XG5cbiAgICAvLyBObyBjaGFuZ2VzOiBleGl0XG4gICAgaWYgKCFkZWxldGVkRW50aXRpZXMubGVuZ3RoKSByZXR1cm4gW107XG5cbiAgICAvLyBFbWl0IHVwZGF0ZSBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWRFbnRpdGllcztcbiAgfVxuXG4gIHJlc2V0KG9wdHM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbn0pIHtcbiAgICB0aGlzLl9jYWNoZSA9IFtdO1xuICAgIHRoaXMuX3NlcXVlbmNlID0gMDtcbiAgICB0aGlzLl9zdGF0dXNCeUlkID0gbmV3IE1hcDxJRCwgYW55PigpO1xuXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7XG5cbiAgICAvLyBFbWl0IHVwZGF0ZSBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqICBvcHRzLnNraXBJZlByaXN0aW5lID0gZmFsc2UgcGVyc2lzdCBhbGwgZW50aXRpZXMsIGV2ZW4gaWYgbm90IGRpcnR5XG4gICAqL1xuICBhc3luYyBwZXJzaXN0KG9wdHMgPSB7IHNraXBJZlByaXN0aW5lOiB0cnVlIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuXG4gICAgLy8gU2tpcCBpcyBub3QgZGlydHlcbiAgICBpZiAob3B0cy5za2lwSWZQcmlzdGluZSAmJiAhdGhpcy5fZGlydHkpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoYFtlbnRpdHktc3RvcmFnZV0gUGVyc2lzdGluZyAke3RoaXMubmFtZX0gbm90IG5lZWQuIFNraXBgKTtcbiAgICAgIHJldHVybiB0aGlzLl9jYWNoZS5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gQ29weSBzb21lIGRhdGEsIEJFRk9SRSB0byBjYWxsIG1hcmtBc1ByaXN0aW5lKCkgdG8gYWxsb3cgcGFyYWxsZWwgY2hhbmdlc1xuICAgIGNvbnN0IGRpcnR5SW5kZXhlcyA9IHRoaXMuaXNCeUlkTW9kZSAmJiBBcnJheS5mcm9tKHRoaXMuX3N0YXR1c0J5SWQudmFsdWVzKCkpXG4gICAgICAuZmlsdGVyKHMgPT4gIW9wdHMuc2tpcElmUHJpc3RpbmUgfHwgKHMgJiYgcy5kaXJ0eSkpXG4gICAgICAubWFwKHMgPT4gcy5pbmRleCk7XG4gICAgY29uc3QgZW50aXRpZXMgPSB0aGlzLl9jYWNoZS5zbGljZSgpOyAvLyBDb3B5IGNhY2hlZCBlbnRpdGllc1xuXG4gICAgLy8gTWFyayBhbGwgKGVudGl0aWVzIGFuZCBzdGF0dXMpIGFzIHByaXN0aW5lXG4gICAgdGhpcy5tYXJrQXNQcmlzdGluZSh7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuXG4gICAgLy8gQ29udmVydCBkaXJ0eSBlbnRpdGllcyBpbnRvIGxpZ2h0IGVudGl0aWVzICgvIVxcIEFGVEVSIHRoZSBwcmV2aW91cyBjb3B5KVxuICAgIC8vIGFuZCB1cGRhdGUgdGhlIGNhY2hlIChidXQgTk9UIHRoZSAnZW50aXRpZXMnIHZhcmlhYmxlKVxuICAgIGlmIChkaXJ0eUluZGV4ZXMgJiYgdGhpcy5fbWFwVG9MaWdodEVudGl0eSkge1xuICAgICAgZGlydHlJbmRleGVzLmZvckVhY2goaW5kZXggPT4gdGhpcy5fY2FjaGVbaW5kZXhdID0gdGhpcy5fbWFwVG9MaWdodEVudGl0eShlbnRpdGllc1tpbmRleF0pKTtcbiAgICB9XG5cbiAgICAvLyBJZiBubyBlbnRpdHkgZm91bmRcbiAgICBpZiAoaXNFbXB0eUFycmF5KGVudGl0aWVzKSkge1xuXG4gICAgICAvLyBDbGVhbiB0aGUgbG9jYWwgc3RvcmFnZVxuICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnJlbW92ZSh0aGlzLl9zdG9yYWdlS2V5KTtcbiAgICB9XG4gICAgZWxzZSB7XG5cbiAgICAgIC8vIFNhdmUgZWFjaCBlbnRpdHkgaW50byBhIHVuaXF1ZSBrZXkgKGFkdmFuY2VkIG1vZGUpXG4gICAgICBpZiAodGhpcy5pc0J5SWRNb2RlKSB7XG4gICAgICAgIC8vIFNhdmUgaWRzXG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXQodGhpcy5zdG9yYWdlS2V5QnlJZCwgZW50aXRpZXMuZmlsdGVyKGlzTm90TmlsKS5tYXAoZSA9PiBlLmlkKSk7XG5cbiAgICAgICAgLy8gU2F2ZWQgZGlydHkgZW50aXRpZXNcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgZGlydHlJbmRleGVzXG4gICAgICAgICAgICAubWFwKGluZGV4ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gZW50aXRpZXNbaW5kZXhdO1xuICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKGBbZW50aXR5LXN0b3JhZ2VdIFBlcnNpc3RpbmcgJHt0aGlzLm5hbWV9IyR7ZW50aXR5LmlkfS4uLmApO1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlLnNldCh0aGlzLl9zdG9yYWdlS2V5ICsgJyMnICsgZW50aXR5LmlkLCBlbnRpdHkpO1xuICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW2VudGl0eS1zdG9yYWdlXSBQZXJzaXN0aW5nICR7ZGlydHlJbmRleGVzLmxlbmd0aH0vJHtlbnRpdGllcy5sZW5ndGh9ICR7dGhpcy5uYW1lfShzKS4uLmApO1xuICAgICAgfVxuXG4gICAgICAvLyBTYXZlIGFsbCBlbnRpdGllcyBpbiBhIHNpbmdsZSBrZXkgKGRlZmF1bHQpXG4gICAgICBlbHNlIHtcblxuICAgICAgICBjb25zb2xlLmluZm8oYFtlbnRpdHktc3RvcmFnZV0gUGVyc2lzdGluZyAke2VudGl0aWVzLmxlbmd0aH0gJHt0aGlzLm5hbWV9KHMpLi4uYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXQodGhpcy5fc3RvcmFnZUtleSwgZW50aXRpZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlbnRpdGllcy5sZW5ndGg7XG4gIH1cblxuICBhc3luYyByZXN0b3JlKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgbGV0IGVudGl0aWVzOiBUW107XG5cbiAgICBjb25zdCByZXMgPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0KHRoaXMuX3N0b3JhZ2VLZXkpLFxuICAgICAgdGhpcy5zdG9yYWdlLmdldCh0aGlzLnN0b3JhZ2VLZXlCeUlkKVxuICAgIF0pO1xuICAgIGNvbnN0IHZhbHVlcyA9IHJlc1swXSAmJiBBcnJheS5pc0FycmF5KHJlc1swXSkgPyByZXNbMF0gOiBudWxsO1xuICAgIGNvbnN0IGlkcyA9IHJlc1sxXSAmJiBBcnJheS5pc0FycmF5KHJlc1sxXSkgPyByZXNbMV0gOiBudWxsO1xuICAgIGxldCBtaWdyYXRpb24gPSBmYWxzZTtcbiAgICBsZXQgb2xkS2V5c1RvQ2xlYW46IHN0cmluZ1tdO1xuXG4gICAgLy8gXCJTcGxpdCBieSBpZFwiIG1vZGVcbiAgICBpZiAodGhpcy5pc0J5SWRNb2RlKSB7XG4gICAgICBpZiAoaXNOb3ROaWwoaWRzKSkge1xuICAgICAgICAvLyBMb2FkIGVudGl0eSBieSBpZCAob25lIGJ5IG9uZSlcbiAgICAgICAgY29uc3Qgc3RvcmFnZUtleXMgPSBpZHMubWFwKGlkID0+IHRoaXMuX3N0b3JhZ2VLZXkgKyAnIycgKyBpZCk7XG4gICAgICAgIGVudGl0aWVzID0gYXdhaXQgY2hhaW5Qcm9taXNlczxUPihzdG9yYWdlS2V5cy5tYXAoa2V5ID0+ICgpID0+IHRoaXMuc3RvcmFnZS5nZXQoa2V5KSkpO1xuICAgICAgfVxuICAgICAgLy8gTWlncmF0ZSBmcm9tIHRoZSBzdGFuZGFyZCBtb2RlXG4gICAgICBlbHNlIGlmIChpc05vdE5pbCh2YWx1ZXMpKSB7XG4gICAgICAgIGVudGl0aWVzID0gdmFsdWVzLmZpbHRlcihlID0+IGUgJiYgaXNOb3ROaWwoZS5pZCkpO1xuICAgICAgICBtaWdyYXRpb24gPSB0cnVlO1xuICAgICAgICBvbGRLZXlzVG9DbGVhbiA9IFt0aGlzLl9zdG9yYWdlS2V5XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFbHNlIChkZWZhdWx0IG1vZGUpXG4gICAgZWxzZSB7XG4gICAgICBpZiAoaXNOb3ROaWwodmFsdWVzKSkge1xuICAgICAgICBlbnRpdGllcyA9IHZhbHVlcy5maWx0ZXIoZSA9PiBlICYmIGlzTm90TmlsKGUuaWQpKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzTm90TmlsKGlkcykpIHtcbiAgICAgICAgY29uc3Qgc3RvcmFnZUtleXMgPSBpZHMubWFwKGlkID0+IHRoaXMuX3N0b3JhZ2VLZXkgKyAnIycgKyBpZCk7XG4gICAgICAgIC8vIExvYWQgZW50aXR5IGJ5IGlkIChvbmUgYnkgb25lKVxuICAgICAgICBlbnRpdGllcyA9IGF3YWl0IGNoYWluUHJvbWlzZXM8VD4oc3RvcmFnZUtleXMubWFwKGtleSA9PiAoKSA9PiB0aGlzLnN0b3JhZ2UuZ2V0KGtleSkpKTtcbiAgICAgICAgbWlncmF0aW9uID0gdHJ1ZTtcbiAgICAgICAgb2xkS2V5c1RvQ2xlYW4gPSBbLi4uc3RvcmFnZUtleXMsIHRoaXMuc3RvcmFnZUtleUJ5SWRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9LLCB0aGVyZSBpcyBzb21ldGhpbmcgaW4gc3RvcmFnZS4uLlxuICAgIGlmIChpc05vdEVtcHR5QXJyYXkoZW50aXRpZXMpKSB7XG4gICAgICBpZiAoZW50aXRpZXMubGVuZ3RoID49IDEwMDApIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBbZW50aXR5LXN0b3JhZ2VdIC0gUmVzdG9yaW5nICR7ZW50aXRpZXMubGVuZ3RofSAke3RoaXMubmFtZX0uIENoZWNrIGlmIG5vdCB0b28gbWFueSBlbGVtZW50cz8hYCk7XG4gICAgICB9XG5cbiAgICAgIC8vIE1hcCBlbnRpdGllcyBpbnRvIGxpZ2h0IGVsZW1lbnQgKGlmIGlmIG5vdCBuZWVkIHRvIHBlcnNpc3QsIGJlY2F1c2Ugb2YgbWlncmF0aW9uXG4gICAgICBpZiAodGhpcy5fbWFwVG9MaWdodEVudGl0eSAmJiAhbWlncmF0aW9uKSB7XG4gICAgICAgIGVudGl0aWVzID0gZW50aXRpZXMubWFwKHRoaXMuX21hcFRvTGlnaHRFbnRpdHkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2V0RW50aXRpZXMoZW50aXRpZXMgfHwgW10sIHsuLi5vcHRzLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMuX2RpcnR5ID0gZmFsc2U7XG5cbiAgICAvLyBGaW5pc2ggdGhlIG1pZ3JhdGlvblxuICAgIGlmIChtaWdyYXRpb24pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgW2VudGl0eS1zdG9yYWdlXSAtIE1pZ3JhdGUgJHt0aGlzLm5hbWV9IGludG8ge21vZGU6ICcke3RoaXMucG9saWN5Lm1vZGV9J30uLi5gKTtcblxuICAgICAgICAvLyBGb3JjZSB0byBwZXJzaXN0LCB1c2luZyB0aGUgbmV3IG1vZGVcbiAgICAgICAgYXdhaXQgdGhpcy5wZXJzaXN0KHtza2lwSWZQcmlzdGluZTogZmFsc2UgLyogZm9yY2UgcGVyc2lzdCB1c2luZyB0aGUgbmV3IG1vZGUgKi8gfSk7XG5cbiAgICAgICAgLy8gQ2xlYW4gb2xkIHN0b3JhZ2Uga2V5cyAob25lIGJ5IG9uZSlcbiAgICAgICAgaWYgKGlzTm90RW1wdHlBcnJheShvbGRLZXlzVG9DbGVhbikpIGF3YWl0IGNoYWluUHJvbWlzZXMob2xkS2V5c1RvQ2xlYW4ubWFwKGtleSA9PiAoKSA9PiB0aGlzLnN0b3JhZ2UucmVtb3ZlKGtleSkpKTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB0aHJvdyB7Y29kZTogRXJyb3JDb2Rlcy5FTlRJVFlfU1RPUkFHRV9NSUdSQVRJT05fRkFJTEVELCBtZXNzYWdlOiAnRVJST1IuRU5USVRZX1NUT1JBR0VfTUlHUkFUSU9OX0ZBSUxFRCcsIGRldGFpbHM6IGVycn07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRW1pdCB1cGRhdGUgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jYWNoZS5sZW5ndGg7XG4gIH1cblxuICBtYXJrQXNEaXJ0eShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBFbWl0IHVwZGF0ZSBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCk7XG4gICAgfVxuICB9XG5cbiAgbWFya0FzUHJpc3RpbmUob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG5cbiAgICBmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3RhdHVzQnlJZC52YWx1ZXMoKSkge1xuICAgICAgaWYgKGlzTm90TmlsKHMpKSB7XG4gICAgICAgIHMuZGlydHkgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fZGlydHkgPSBmYWxzZTtcblxuICAgIC8vIEVtaXQgdXBkYXRlIGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoKTtcbiAgICB9XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByaXZhdGUgbG9hZENhY2hlZEVudGl0eShpZDogSUQsIG9wdHM/OiBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnMpOiBUIHtcbiAgICBjb25zdCBzdGF0dXMgPSB0aGlzLl9zdGF0dXNCeUlkLmdldChpZCk7XG4gICAgY29uc3QgaW5kZXggPSBzdGF0dXMgJiYgc3RhdHVzLmluZGV4O1xuICAgIGlmIChpc05pbChpbmRleCkpIHJldHVybiB1bmRlZmluZWQ7IC8vIG5vdCBleGlzdHNcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh0aGlzLl9jYWNoZVtpbmRleF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkRnVsbEVudGl0eShpZDogSUQsIG9wdHM/OiBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBzdGF0dXMgPSB0aGlzLl9zdGF0dXNCeUlkLmdldChpZCk7XG4gICAgY29uc3QgaW5kZXggPSBzdGF0dXMgJiYgc3RhdHVzLmluZGV4O1xuICAgIGlmIChpc05pbChpbmRleCkpIHJldHVybiB1bmRlZmluZWQ7IC8vIG5vdCBleGlzdHNcblxuICAgIC8vIFJlbG9hZCBmcm9tIHN0b3JhZ2UsIGlmIG5lZWQgKGUuZy4gc29tZSBhdHRyaWJ1dGVzIGhhcyBiZWVuIGV4Y2x1ZGVkIGluIGxpZ2h0IGVsZW1lbnRzKVxuICAgIGlmIChzdGF0dXMuZGlydHkgPT09IGZhbHNlKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbZW50aXR5LXN0b3JhZ2VdIEZ1bGwgcmVsb2FkaW5nICR7dGhpcy5uYW1lfSMke2lkfS4uLmApO1xuICAgICAgY29uc3QgZnVsbERhdGEgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KHRoaXMuX3N0b3JhZ2VLZXkgKyAnIycgKyBpZCk7XG4gICAgICBpZiAoZnVsbERhdGEpIHJldHVybiBPYmplY3QuZnJlZXplKGZ1bGxEYXRhKTtcbiAgICAgIC8vIE5vdCBmb3VuZCBieSBpZCwgY29udGludWUgZnJvbSBjYWNoZSAodmVyc2lvbiBwcmlvciB0byAxLjUuMylcbiAgICB9XG5cbiAgICAvLyBMb2FkIGZyb20gdGhlIGNhY2hlLCBpZiBkaXJ0eSBPUiBpZiBzdG9yYWdlIGlzIG5vdCBzcGxpdHRlZCBieSBpZFxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHRoaXMuX2NhY2hlW2luZGV4XSk7XG4gIH1cblxuICBwcml2YXRlIHNldEVudGl0aWVzKGVudGl0aWVzOiBUW10sIG9wdHM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgLy8gRmlsdGVyIG5vbiBuaWwgKGFuZCBpZiBuZWVkIG5vbiBsb2NhbCkgZW50aXRpZXNcbiAgICBlbnRpdGllcyA9IChlbnRpdGllcyB8fCBbXSlcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IGlzTm90TmlsKGl0ZW0pXG4gICAgICAgICAgJiYgKCF0aGlzLnBvbGljeS5za2lwTm9uTG9jYWxFbnRpdGllcyB8fCAraXRlbS5pZCA8IDApXG4gICAgICAgICk7XG5cbiAgICB0aGlzLl9jYWNoZSA9IGVudGl0aWVzO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBzZXF1ZW5jZSB3aXRoIG1pbihpZCkgb2YgYWxsIHRlbXBvcmFyeSBpZHNcbiAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX2NhY2hlLnJlZHVjZSgocmVzLCBpdGVtKSA9PiAraXRlbS5pZCA8IDAgPyBNYXRoLm1pbihyZXMsICtpdGVtLmlkKSA6IHJlcywgMCk7XG5cbiAgICB0aGlzLl9zdGF0dXNCeUlkLmNsZWFyKCk7XG4gICAgdGhpcy5fY2FjaGUuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMuX3N0YXR1c0J5SWQuc2V0KGl0ZW0uaWQsIDxFbnRpdHlTdGF0dXM+e1xuICAgICAgICBpbmRleCxcbiAgICAgICAgZGlydHk6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7XG5cbiAgICAvLyBFbWl0IHVwZGF0ZSBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCk7XG4gICAgfVxuICB9XG5cblxuICAvKipcbiAgICogV0lsbCBhcHBseSBhIGZpbHRlciwgdGhlbiBhIHNvcnQsIHRoZW4gYSBwYWdlIHNsaWNlXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSB2YXJpYWJsZXNcbiAgICovXG4gIHByaXZhdGUgcmVkdWNlQW5kU29ydChkYXRhOiBUW10sXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PzogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPzogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0Qnk/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnREaXJlY3Rpb24/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcj86IChUKSA9PiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk6IExvYWRSZXN1bHQ8VD4ge1xuICAgIGlmIChpc0VtcHR5QXJyYXkoZGF0YSkpIHtcbiAgICAgIHJldHVybiB7ZGF0YTogW10sIHRvdGFsOiAwfTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgbmlsIHZhbHVlc1xuICAgIGRhdGEgPSBkYXRhLmZpbHRlcihpc05vdE5pbCk7XG5cbiAgICBpZiAoIXZhcmlhYmxlcykge1xuICAgICAgLy8gUmV0dXJuIGFsbCAoYnV0IGFycmF5IGhhcyBiZWVuIGZpbHRlcmVkLCBhbmQgY29waWVkKVxuICAgICAgcmV0dXJuIHtkYXRhLCB0b3RhbDogZGF0YS5sZW5ndGh9O1xuICAgIH1cblxuICAgIC8vIEFwcGx5IHRoZSBmaWx0ZXIsIGlmIGFueVxuICAgIGlmICh2YXJpYWJsZXMuZmlsdGVyKSB7XG4gICAgICBkYXRhID0gZGF0YS5maWx0ZXIodmFyaWFibGVzLmZpbHRlcik7XG4gICAgfVxuXG4gICAgLy8gQ29tcHV0ZSB0aGUgdG90YWwgbGVuZ3RoXG4gICAgY29uc3QgdG90YWwgPSBkYXRhLmxlbmd0aDtcblxuICAgIC8vIElmIHBhZ2Ugc2l6ZT0wIChlLmcuIG9ubHkgbmVlZCB0b3RhbClcbiAgICBpZiAodmFyaWFibGVzLnNpemUgPT09IDApIHJldHVybiB7ZGF0YTogW10sIHRvdGFsfTtcblxuICAgIC8vIFNvcnQgYnlcbiAgICBpZiAodmFyaWFibGVzLnNvcnRCeSkge1xuICAgICAgRW50aXR5VXRpbHMuc29ydChkYXRhLCB2YXJpYWJsZXMuc29ydEJ5LCB2YXJpYWJsZXMuc29ydERpcmVjdGlvbik7XG4gICAgfVxuXG4gICAgLy8gU2xpY2UgaW4gYSBwYWdlICh1c2luZyBvZmZzZXQgYW5kIHNpemUpXG4gICAgaWYgKHZhcmlhYmxlcy5vZmZzZXQgPiAwKSB7XG5cbiAgICAgIC8vIE9mZnNldCBhZnRlciB0aGUgZW5kOiBubyByZXN1bHRcbiAgICAgIGlmICh2YXJpYWJsZXMub2Zmc2V0ID49IGRhdGEubGVuZ3RoIHx8IHZhcmlhYmxlcy5zaXplID09PSAwKSB7XG4gICAgICAgIGRhdGEgPSBbXTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBkYXRhID0gKHZhcmlhYmxlcy5zaXplID4gMCAmJiAoKHZhcmlhYmxlcy5vZmZzZXQgKyB2YXJpYWJsZXMuc2l6ZSkgPCBkYXRhLmxlbmd0aCkpID9cbiAgICAgICAgICAvLyBTbGljZSB1c2luZyBsaW1pdCB0byBzaXplXG4gICAgICAgICAgZGF0YS5zbGljZSh2YXJpYWJsZXMub2Zmc2V0LCB2YXJpYWJsZXMub2Zmc2V0ICsgdmFyaWFibGVzLnNpemUpIDpcbiAgICAgICAgICAvLyBTbGljZSB3aXRob3V0IGxpbWl0XG4gICAgICAgICAgZGF0YS5zbGljZSh2YXJpYWJsZXMub2Zmc2V0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBcHBseSBhIGxpbWl0XG4gICAgZWxzZSBpZiAodmFyaWFibGVzLnNpemUgPiAwKXtcbiAgICAgIGRhdGEgPSBkYXRhLnNsaWNlKDAsIHZhcmlhYmxlcy5zaXplKTtcbiAgICB9XG4gICAgLy8gTm8gbGltaXQ6XG4gICAgZWxzZSBpZiAodmFyaWFibGVzLnNpemUgPT09IC0xKXtcbiAgICAgIC8vIEtlZXAgYWxsIGRhdGFcbiAgICB9XG5cbiAgICByZXR1cm4ge2RhdGEsIHRvdGFsfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTGlnaHRFbnRpdHlNYXBGbihwb2xpY3k6IEVudGl0eVN0b3JlVHlwZVBvbGljeTxUPik6IChUKSA9PiBUIHtcbiAgICBpZiAocG9saWN5Lm1vZGUgIT09ICdieS1pZCcpIHJldHVybiB1bmRlZmluZWQ7IC8vIE9ubHkgbmVlZCBmb3IgdGhlICdieS1pZCcgbW9kZVxuICAgIGlmIChpc0VtcHR5QXJyYXkocG9saWN5LmxpZ2h0RmllbGRzRXhjbHVkZXMpKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBza2lwXG5cbiAgICAvLyBDcmVhdGUgYSBpbW11dGFibGUgbWFzayBvYmplY3QsIHVzZSB0byBjbGVhbiBzb21lIHByb3BlcnRpZXNcbiAgICBjb25zdCBleGNsdWRlQXR0cmlidXRlc01hc2sgPSBPYmplY3QuZnJlZXplKHRoaXMucG9saWN5LmxpZ2h0RmllbGRzRXhjbHVkZXMucmVkdWNlKChyZXMsIGF0dHIpID0+IHtcbiAgICAgIHJlc1thdHRyXSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSwgPFQ+e30pKTtcblxuICAgIHJldHVybiAoZW50aXR5KSA9PiBlbnRpdHkgPyBPYmplY3QuYXNzaWduKDxUPnt9LCBlbnRpdHksIGV4Y2x1ZGVBdHRyaWJ1dGVzTWFzaykgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBlbnRpdGllc1N1YmplY3QuXG4gICAqXG4gICAqIEJlZm9yZSB3ZW5kaW5nIGl0ZW1zLCBhIGZpbHRlciBpcyBhcHBseSwgdG8gcmVtb3ZlIG51bGwgdmFsdWUuXG4gICAqIFRoaXMgZmlsdGVyIHdpbGwgY3JlYXRlIGEgYXJyYXkgY29weS5cbiAgICovXG4gIHByaXZhdGUgZW1pdEV2ZW50KCkge1xuICAgIHRoaXMuX29uQ2hhbmdlLm5leHQodHJ1ZSk7XG4gIH1cbn1cbiJdfQ==
461
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXN0b3JlLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3N0b3JhZ2UvZW50aXR5LXN0b3JlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsZUFBZSxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBRWpELE9BQU8sRUFBUyxHQUFHLEVBQUUsUUFBUSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFTLFdBQVcsRUFBVSxNQUFNLHVCQUF1QixDQUFDO0FBQ25FLE9BQU8sRUFBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVyQyxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxVQUFVLENBQUM7QUFtQnRELE1BQU0sT0FBTyxXQUFXO0lBb0N0QixZQUNxQixJQUFZLEVBQ1osT0FBZ0IsRUFDbkMsTUFBaUM7UUFGZCxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osWUFBTyxHQUFQLE9BQU8sQ0FBUztRQWhDcEIsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBSy9DLFdBQU0sR0FBRyxLQUFLLENBQUM7UUE2QnJCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRywy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QUFtQixDQUFDO1lBQUUsT0FBTyxTQUFTLENBQUMsQ0FBQyxPQUFPO1FBRXZFLCtEQUErRDtRQUMvRCxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDL0YsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztZQUN0QixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRVgsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzlGLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLFNBQVM7UUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJ0Bpb25pYy9zdG9yYWdlJztcbmltcG9ydCB7ZmlsdGVyLCBtYXAsIG1lcmdlTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0VudGl0eSwgRW50aXR5VXRpbHMsIElFbnRpdHl9IGZyb20gJy4uL21vZGVsL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQge2lzRW1wdHlBcnJheSwgaXNOaWwsIGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWx9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtMb2FkUmVzdWx0fSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtjaGFpblByb21pc2VzfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHtFcnJvckNvZGVzfSBmcm9tICcuLi9lcnJvcnMnO1xuXG5leHBvcnQgY29uc3QgRU5USVRJRVNfU1RPUkFHRV9LRVlfUFJFRklYID0gJ2VudGl0aWVzJztcblxuZXhwb3J0IHR5cGUgRW50aXR5U3RvcmVUeXBlUG9saWN5TW9kZSA9ICdkZWZhdWx0JyB8ICdieS1pZCc7XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBFbnRpdHlTdG9yZVR5cGVQb2xpY3k8VCBleHRlbmRzIEVudGl0eTxULCBhbnk+ID0gRW50aXR5PGFueSwgYW55PiwgSyA9IGtleW9mIFQ+ICB7XG4gIG1vZGU/OiBFbnRpdHlTdG9yZVR5cGVQb2xpY3lNb2RlOyAvLyAnZGVmYXVsdCcgYnkgZGVmYXVsdFxuICBza2lwTm9uTG9jYWxFbnRpdGllcz86IGJvb2xlYW47IC8vIEZhbHNlIGJ5IGRlZmF1bHRcbiAgbGlnaHRGaWVsZHNFeGNsdWRlcz86IEtbXTsgLy8gbm9uZSBieSBkZWZhdWx0XG59XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnMge1xuICBmdWxsTG9hZD86IGJvb2xlYW47XG59XG5cbmRlY2xhcmUgaW50ZXJmYWNlIEVudGl0eVN0YXR1cyB7XG4gIGluZGV4OiBudW1iZXI7XG4gIGRpcnR5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIEVudGl0eVN0b3JlPFxuICBUIGV4dGVuZHMgSUVudGl0eTxULCBJRD4sXG4gIElEID0gbnVtYmVyLFxuICBPIGV4dGVuZHMgRW50aXR5U3RvcmFnZUxvYWRPcHRpb25zID0gRW50aXR5U3RvcmFnZUxvYWRPcHRpb25zPiB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3RvcmFnZUtleTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vbkNoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3QodHJ1ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hcFRvTGlnaHRFbnRpdHk6IChUKSA9PiBUO1xuICBwcml2YXRlIF9jYWNoZTogVFtdO1xuICBwcml2YXRlIF9zdGF0dXNCeUlkOiBNYXA8SUQsIEVudGl0eVN0YXR1cz47XG4gIHByaXZhdGUgX3NlcXVlbmNlOiBudW1iZXI7XG4gIHByaXZhdGUgX2RpcnR5ID0gZmFsc2U7XG4gIHByaXZhdGUgX2xvYWRlZDogYm9vbGVhbjtcblxuICByZWFkb25seSBwb2xpY3k6IEVudGl0eVN0b3JlVHlwZVBvbGljeTxUPjtcblxuICBnZXQgbGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlPy5sZW5ndGggfHwgMDtcbiAgfVxuXG4gIGdldCBjYWNoZSgpOiBUW10ge1xuICAgIHJldHVybiB0aGlzLl9jYWNoZTtcbiAgfVxuXG4gIGdldCBkaXJ0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlydHk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGlzQnlJZE1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucG9saWN5Lm1vZGUgPT09ICdieS1pZCc7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHN0b3JhZ2VLZXlCeUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3JhZ2VLZXkgKyAnI2lkcyc7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbmFtZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBzdG9yYWdlOiBTdG9yYWdlLFxuICAgIHBvbGljeT86IEVudGl0eVN0b3JlVHlwZVBvbGljeTxUPikge1xuICAgIHRoaXMucG9saWN5ID0gcG9saWN5IHx8IHt9O1xuICAgIHRoaXMucmVzZXQoe2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB0aGlzLl9kaXJ0eSA9IGZhbHNlO1xuICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3N0b3JhZ2VLZXkgPSBFTlRJVElFU19TVE9SQUdFX0tFWV9QUkVGSVggKyAnIycgKyBuYW1lO1xuICAgIHRoaXMuX21hcFRvTGlnaHRFbnRpdHkgPSB0aGlzLmNyZWF0ZUxpZ2h0RW50aXR5TWFwRm4odGhpcy5wb2xpY3kpO1xuICB9XG5cbiAgbmV4dFZhbHVlKCk6IElEIHtcbiAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX3NlcXVlbmNlIC0gMTtcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXMuX3NlcXVlbmNlIGFzIHVua25vd24gYXMgSUQ7XG4gIH1cblxuICBjdXJyZW50VmFsdWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc2VxdWVuY2U7XG4gIH1cblxuICBhc3luYyBsb2FkKGlkOiBJRCwgb3B0cz86IEVudGl0eVN0b3JhZ2VMb2FkT3B0aW9ucyk6IFByb21pc2U8VD4ge1xuICAgIGlmICh0aGlzLl9tYXBUb0xpZ2h0RW50aXR5ICYmICghb3B0cyB8fCBvcHRzLmZ1bGxMb2FkICE9PSBmYWxzZSkpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmxvYWRGdWxsRW50aXR5KGlkLCBvcHRzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubG9hZENhY2hlZEVudGl0eShpZCwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogV2F0Y2ggYSBzZXQgb2YgZW50aXRpZXNcbiAgICpcbiAgICogQHBhcmFtIHZhcmlhYmxlc1xuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgd2F0Y2hBbGwodmFyaWFibGVzOiB7XG4gICAgICAgICAgICBvZmZzZXQ/OiBudW1iZXI7XG4gICAgICAgICAgICBzaXplPzogbnVtYmVyO1xuICAgICAgICAgICAgc29ydEJ5Pzogc3RyaW5nO1xuICAgICAgICAgICAgc29ydERpcmVjdGlvbj86IHN0cmluZztcbiAgICAgICAgICAgIGZpbHRlcj86IChUKSA9PiBib29sZWFuO1xuICAgICAgICAgIH0sIG9wdHM/OiBPKTogT2JzZXJ2YWJsZTxMb2FkUmVzdWx0PFQ+PiB7XG5cbiAgICAvLyBJZiBuZWVkIGZ1bGwgZW50aXRpZXMsIGJ1dCB1c2UgbGlnaHQgZW50aXRpZXMgaW4gdGhlIGVudGl0aWVzIGFycmF5XG4gICAgaWYgKHRoaXMuX21hcFRvTGlnaHRFbnRpdHkgJiYgKG9wdHMgJiYgb3B0cy5mdWxsTG9hZCA9PT0gdHJ1ZSkpIHtcbiAgICAgIGNvbnNvbGUud2FybignW2VudGl0eS1zdG9yZV0gV0FSTjogV2F0Y2hpbmcgZnVsbCBlbnRpdGllcywgc3BsaXRlZCBieSBpZCBpbiBlbnRpdHkgc3RvcmUuIFRoaXMgY2FuIGJlIGxvbmchIFBsZWFzZSBtYWtlIHN1cmUgeW91IG5lZWQgZnVsbCBlbnRpdGllcyBoZXJlLicpO1xuICAgICAgcmV0dXJuIHRoaXMuX29uQ2hhbmdlXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIC8vIEFwcGx5IGZpbHRlciBvbiBjYWNoZVxuICAgICAgICAgIG1hcCgoXykgPT4gdGhpcy5yZWR1Y2VBbmRTb3J0KHRoaXMuX2NhY2hlLCB2YXJpYWJsZXMpKSxcblxuICAgICAgICAgIC8vIFRoZW4gY29udmVydCBpbnRvIGZ1bGwgZW50aXRpZXMgKHVzaW5nIHBhcmFsbGVsIGpvYnMgLSAvIVxcIGNhbiB1c2UgbG90IG9mIG1lbW9yeSlcbiAgICAgICAgICBtZXJnZU1hcCgocmVzKSA9PiBQcm9taXNlLmFsbCgocmVzLmRhdGEgfHwgW10pXG4gICAgICAgICAgICAubWFwKGUgPT4gdGhpcy5sb2FkRnVsbEVudGl0eShlLmlkLCBvcHRzKSkpLnRoZW4oZGF0YSA9PiAoe1xuICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgdG90YWw6IHJlcy50b3RhbFxuICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gTG9hZCB1c2luZyBlbnRpdGllcyBhcnJheVxuICAgIHJldHVybiB0aGlzLl9vbkNoYW5nZVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoXykgPT4gdGhpcy5yZWR1Y2VBbmRTb3J0KHRoaXMuX2NhY2hlLCB2YXJpYWJsZXMpKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXSWxsIGFwcGx5IGEgZmlsdGVyLCB0aGVuIGEgc29ydCwgdGhlbiBhIHBhZ2Ugc2xpY2VcbiAgICpcbiAgICogQHBhcmFtIHZhcmlhYmxlc1xuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgYXN5bmMgbG9hZEFsbCh2YXJpYWJsZXM6IHtcbiAgICBvZmZzZXQ/OiBudW1iZXI7XG4gICAgc2l6ZT86IG51bWJlcjtcbiAgICBzb3J0Qnk/OiBzdHJpbmc7XG4gICAgc29ydERpcmVjdGlvbj86IHN0cmluZztcbiAgICBmaWx0ZXI/OiAoVCkgPT4gYm9vbGVhbjtcbiAgfSwgb3B0cz86IE8pOiBQcm9taXNlPExvYWRSZXN1bHQ8VD4+IHtcblxuICAgIGNvbnN0IHJlcyA9IHRoaXMucmVkdWNlQW5kU29ydCh0aGlzLl9jYWNoZSwgdmFyaWFibGVzKTtcblxuICAgIC8vIElmIHN0b3JlIGJ5IElEOiBtYWtlIHN1cmUgdG8gZnVsbCB0aGUgZnVsbCBlbnRpdGllc1xuICAgIGlmICh0aGlzLl9tYXBUb0xpZ2h0RW50aXR5ICYmIGlzTm90RW1wdHlBcnJheShyZXMuZGF0YSkgJiYgKG9wdHMgJiYgb3B0cy5mdWxsTG9hZCA9PT0gdHJ1ZSkpIHtcbiAgICAgIC8vIExvYWQgZnVsbCBlbnRpdGllcywgb25lIGJ5IG9uZVxuICAgICAgcmVzLmRhdGEgPSBhd2FpdCBjaGFpblByb21pc2VzKChyZXMuZGF0YSB8fCBbXSkubWFwKGUgPT4gKCkgPT4gdGhpcy5sb2FkKGUuaWQpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcyA7XG4gIH1cblxuICBzYXZlKGVudGl0eTogVCwgb3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFufSk6IFQge1xuICAgIGNvbnN0IHN0YXR1cyA9IGlzTm90TmlsKGVudGl0eS5pZCkgJiYgdGhpcy5fc3RhdHVzQnlJZC5nZXQoZW50aXR5LmlkKSB8fCB7aW5kZXg6IHVuZGVmaW5lZH07XG4gICAgY29uc3QgaXNOZXcgPSBpc05pbChzdGF0dXMuaW5kZXgpO1xuICAgIGlmIChpc05ldykge1xuICAgICAgaWYgKGlzTmlsKGVudGl0eS5pZCkpIHtcbiAgICAgICAgZW50aXR5LmlkID0gdGhpcy5uZXh0VmFsdWUoKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKCtlbnRpdHkuaWQgPCAwICYmICtlbnRpdHkuaWQgPiB0aGlzLl9zZXF1ZW5jZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RyeWluZyB0byBzYXZlIGEgbG9jYWwgZW50aXR5IHdpdGggYW4gaWQgPiBzZXF1ZW5jZS4gV2lsbCByZXBsYWNlIGlkIGJ5IHNlcXVlbmNlIG5leHQgdmFsdWUnKTtcbiAgICAgICAgZW50aXR5LmlkID0gdGhpcy5uZXh0VmFsdWUoKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBPSzogdXNlIGEgdmFsaWQgaWQgOlxuICAgICAgICAvLyAtIGlkID49IDAgKHNob3VsZCBiZSBhIHJlbW90ZSBpZClcbiAgICAgICAgLy8gLSBPUiA8IHNlcXVlbmNlLCBhbmQgbm90IGV4aXN0cyBpbiB0aGUgaW5kZXggbWFwXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3N0YXR1c0J5SWQuc2V0KGVudGl0eS5pZCwgc3RhdHVzKTtcbiAgICAgIHN0YXR1cy5pbmRleCA9IHRoaXMuX2NhY2hlLnB1c2goZW50aXR5KSAtIDE7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5fY2FjaGVbc3RhdHVzLmluZGV4XSA9IGVudGl0eTtcbiAgICB9XG5cbiAgICAvLyBNYXJrIGVudGl0eSBhcyBkaXJ0eVxuICAgIHN0YXR1cy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBNYXJrIHN0b3JhZ2UgYXMgZGlydHlcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBFbWl0IHVwZGF0ZSBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudGl0eTtcbiAgfVxuXG4gIHNhdmVBbGwoZW50aXRpZXM6IFRbXSwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgcmVzZXQ/OiBib29sZWFuIH0pOiBUW10ge1xuICAgIGlmIChpc0VtcHR5QXJyYXkoZW50aXRpZXMpICYmICghb3B0cyB8fCBvcHRzLnJlc2V0ICE9PSB0cnVlKSkgcmV0dXJuIGVudGl0aWVzOyAvLyBTa2lwIChOb3RoaW5nIHRvIHNhdmUpXG5cbiAgICBsZXQgcmVzdWx0OiBUW107XG5cbiAgICBjb25zb2xlLmluZm8oYFtlbnRpdHktc3RvcmFnZV0gU2F2aW5nICR7ZW50aXRpZXMubGVuZ3RofSAke3RoaXMubmFtZX0ocylgKTtcblxuICAgIC8vIEZpcnN0IHNhdmUsIG9yIHJlc2V0IHVzaW5nIGdpdmVuIGVudGl0aWVzXG4gICAgaWYgKGlzRW1wdHlBcnJheSh0aGlzLl9jYWNoZSkgfHwgKG9wdHMgJiYgb3B0cy5yZXNldCkpIHtcbiAgICAgIHRoaXMuc2V0RW50aXRpZXMoZW50aXRpZXMsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmVzdWx0ID0gZW50aXRpZXMubWFwKChlbnRpdHkpID0+IHRoaXMuc2F2ZShlbnRpdHksIHtlbWl0RXZlbnQ6IGZhbHNlfSkpO1xuICAgIH1cblxuICAgIC8vIE1hcmsgYXMgZGlydHlcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBFbWl0IHVwZGF0ZSBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdCB8fCB0aGlzLl9jYWNoZS5zbGljZSgpO1xuICB9XG5cbiAgZGVsZXRlKGlkOiBJRCwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogVCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc3RhdHVzID0gaXNOb3ROaWwoaWQpID8gdGhpcy5fc3RhdHVzQnlJZC5nZXQoaWQpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGluZGV4ID0gc3RhdHVzID8gc3RhdHVzLmluZGV4IDogdW5kZWZpbmVkO1xuICAgIGlmIChpc05pbChpbmRleCkpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBlbnRpdHkgPSB0aGlzLl9jYWNoZVtpbmRleF07XG4gICAgaWYgKCFlbnRpdHkpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAvLyBSZW1vdmUgZnJvbSBjYWNoZVxuICAgIHRoaXMuX2NhY2hlW2luZGV4XSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9zdGF0dXNCeUlkLmRlbGV0ZShlbnRpdHkuaWQpO1xuXG4gICAgLy8gUmVtb3ZlIGZ1bGwgZW50aXR5LCBieSBpZFxuICAgIGlmICh0aGlzLmlzQnlJZE1vZGUpIHtcbiAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUodGhpcy5fc3RvcmFnZUtleSArICcjJyArIGlkKTtcbiAgICB9XG5cbiAgICAvLyBNYXJrIGFzIGRpcnR5XG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuXG4gICAgLy8gRW1pdCB1cGRhdGUgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiBlbnRpdHkgYXMgVDtcbiAgfVxuXG4gIGRlbGV0ZU1hbnkoaWRzOiBJRFtdLCBvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW59KTogVFtdIHtcblxuICAgIC8vIERlbGV0ZSBieSBpZCwgYnV0IE5PVCBlbWl0IGV2ZW50IG9uIGVhY2ggZGVsZXRpb25cbiAgICBjb25zdCBkZWxldGVkRW50aXRpZXMgPSAoaWRzIHx8IFtdKVxuICAgICAgLm1hcChpZCA9PiB0aGlzLmRlbGV0ZShpZCwge2VtaXRFdmVudDogZmFsc2V9KSlcbiAgICAgIC5maWx0ZXIoaXNOb3ROaWwpO1xuXG4gICAgLy8gTm8gY2hhbmdlczogZXhpdFxuICAgIGlmICghZGVsZXRlZEVudGl0aWVzLmxlbmd0aCkgcmV0dXJuIFtdO1xuXG4gICAgLy8gRW1pdCB1cGRhdGUgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkRW50aXRpZXM7XG4gIH1cblxuICByZXNldChvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW59KSB7XG4gICAgdGhpcy5fY2FjaGUgPSBbXTtcbiAgICB0aGlzLl9zZXF1ZW5jZSA9IDA7XG4gICAgdGhpcy5fc3RhdHVzQnlJZCA9IG5ldyBNYXA8SUQsIGFueT4oKTtcblxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLl9sb2FkZWQgPSB0cnVlO1xuXG4gICAgLy8gRW1pdCB1cGRhdGUgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gb3B0c1xuICAgKiAgb3B0cy5za2lwSWZQcmlzdGluZSA9IGZhbHNlIHBlcnNpc3QgYWxsIGVudGl0aWVzLCBldmVuIGlmIG5vdCBkaXJ0eVxuICAgKi9cbiAgYXN5bmMgcGVyc2lzdChvcHRzID0geyBza2lwSWZQcmlzdGluZTogdHJ1ZSB9KTogUHJvbWlzZTxudW1iZXI+IHtcblxuICAgIC8vIFNraXAgaXMgbm90IGRpcnR5XG4gICAgaWYgKG9wdHMuc2tpcElmUHJpc3RpbmUgJiYgIXRoaXMuX2RpcnR5KSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbZW50aXR5LXN0b3JhZ2VdIFBlcnNpc3RpbmcgJHt0aGlzLm5hbWV9IG5vdCBuZWVkLiBTa2lwYCk7XG4gICAgICByZXR1cm4gdGhpcy5fY2FjaGUubGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIENvcHkgc29tZSBkYXRhLCBCRUZPUkUgdG8gY2FsbCBtYXJrQXNQcmlzdGluZSgpIHRvIGFsbG93IHBhcmFsbGVsIGNoYW5nZXNcbiAgICBjb25zdCBkaXJ0eUluZGV4ZXMgPSB0aGlzLmlzQnlJZE1vZGUgJiYgQXJyYXkuZnJvbSh0aGlzLl9zdGF0dXNCeUlkLnZhbHVlcygpKVxuICAgICAgLmZpbHRlcihzID0+ICFvcHRzLnNraXBJZlByaXN0aW5lIHx8IChzICYmIHMuZGlydHkpKVxuICAgICAgLm1hcChzID0+IHMuaW5kZXgpO1xuICAgIGNvbnN0IGVudGl0aWVzID0gdGhpcy5fY2FjaGUuc2xpY2UoKTsgLy8gQ29weSBjYWNoZWQgZW50aXRpZXNcblxuICAgIC8vIE1hcmsgYWxsIChlbnRpdGllcyBhbmQgc3RhdHVzKSBhcyBwcmlzdGluZVxuICAgIHRoaXMubWFya0FzUHJpc3RpbmUoe2VtaXRFdmVudDogZmFsc2V9KTtcblxuICAgIC8vIENvbnZlcnQgZGlydHkgZW50aXRpZXMgaW50byBsaWdodCBlbnRpdGllcyAoLyFcXCBBRlRFUiB0aGUgcHJldmlvdXMgY29weSlcbiAgICAvLyBhbmQgdXBkYXRlIHRoZSBjYWNoZSAoYnV0IE5PVCB0aGUgJ2VudGl0aWVzJyB2YXJpYWJsZSlcbiAgICBpZiAoZGlydHlJbmRleGVzICYmIHRoaXMuX21hcFRvTGlnaHRFbnRpdHkpIHtcbiAgICAgIGRpcnR5SW5kZXhlcy5mb3JFYWNoKGluZGV4ID0+IHRoaXMuX2NhY2hlW2luZGV4XSA9IHRoaXMuX21hcFRvTGlnaHRFbnRpdHkoZW50aXRpZXNbaW5kZXhdKSk7XG4gICAgfVxuXG4gICAgLy8gSWYgbm8gZW50aXR5IGZvdW5kXG4gICAgaWYgKGlzRW1wdHlBcnJheShlbnRpdGllcykpIHtcblxuICAgICAgLy8gQ2xlYW4gdGhlIGxvY2FsIHN0b3JhZ2VcbiAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5yZW1vdmUodGhpcy5fc3RvcmFnZUtleSk7XG4gICAgfVxuICAgIGVsc2Uge1xuXG4gICAgICAvLyBTYXZlIGVhY2ggZW50aXR5IGludG8gYSB1bmlxdWUga2V5IChhZHZhbmNlZCBtb2RlKVxuICAgICAgaWYgKHRoaXMuaXNCeUlkTW9kZSkge1xuICAgICAgICAvLyBTYXZlIGlkc1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KHRoaXMuc3RvcmFnZUtleUJ5SWQsIGVudGl0aWVzLmZpbHRlcihpc05vdE5pbCkubWFwKGUgPT4gZS5pZCkpO1xuXG4gICAgICAgIC8vIFNhdmVkIGRpcnR5IGVudGl0aWVzXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIGRpcnR5SW5kZXhlc1xuICAgICAgICAgICAgLm1hcChpbmRleCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IGVudGl0aWVzW2luZGV4XTtcbiAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgW2VudGl0eS1zdG9yYWdlXSBQZXJzaXN0aW5nICR7dGhpcy5uYW1lfSMke2VudGl0eS5pZH0uLi5gKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5zZXQodGhpcy5fc3RvcmFnZUtleSArICcjJyArIGVudGl0eS5pZCwgZW50aXR5KTtcbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICBjb25zb2xlLmluZm8oYFtlbnRpdHktc3RvcmFnZV0gUGVyc2lzdGluZyAke2RpcnR5SW5kZXhlcy5sZW5ndGh9LyR7ZW50aXRpZXMubGVuZ3RofSAke3RoaXMubmFtZX0ocykuLi5gKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2F2ZSBhbGwgZW50aXRpZXMgaW4gYSBzaW5nbGUga2V5IChkZWZhdWx0KVxuICAgICAgZWxzZSB7XG5cbiAgICAgICAgY29uc29sZS5pbmZvKGBbZW50aXR5LXN0b3JhZ2VdIFBlcnNpc3RpbmcgJHtlbnRpdGllcy5sZW5ndGh9ICR7dGhpcy5uYW1lfShzKS4uLmApO1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KHRoaXMuX3N0b3JhZ2VLZXksIGVudGl0aWVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZW50aXRpZXMubGVuZ3RoO1xuICB9XG5cbiAgYXN5bmMgcmVzdG9yZShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGxldCBlbnRpdGllczogVFtdO1xuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5zdG9yYWdlLmdldCh0aGlzLl9zdG9yYWdlS2V5KSxcbiAgICAgIHRoaXMuc3RvcmFnZS5nZXQodGhpcy5zdG9yYWdlS2V5QnlJZClcbiAgICBdKTtcbiAgICBjb25zdCB2YWx1ZXMgPSByZXNbMF0gJiYgQXJyYXkuaXNBcnJheShyZXNbMF0pID8gcmVzWzBdIDogbnVsbDtcbiAgICBjb25zdCBpZHMgPSByZXNbMV0gJiYgQXJyYXkuaXNBcnJheShyZXNbMV0pID8gcmVzWzFdIDogbnVsbDtcbiAgICBsZXQgbWlncmF0aW9uID0gZmFsc2U7XG4gICAgbGV0IG9sZEtleXNUb0NsZWFuOiBzdHJpbmdbXTtcblxuICAgIC8vIFwiU3BsaXQgYnkgaWRcIiBtb2RlXG4gICAgaWYgKHRoaXMuaXNCeUlkTW9kZSkge1xuICAgICAgaWYgKGlzTm90TmlsKGlkcykpIHtcbiAgICAgICAgLy8gTG9hZCBlbnRpdHkgYnkgaWQgKG9uZSBieSBvbmUpXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VLZXlzID0gaWRzLm1hcChpZCA9PiB0aGlzLl9zdG9yYWdlS2V5ICsgJyMnICsgaWQpO1xuICAgICAgICBlbnRpdGllcyA9IGF3YWl0IGNoYWluUHJvbWlzZXM8VD4oc3RvcmFnZUtleXMubWFwKGtleSA9PiAoKSA9PiB0aGlzLnN0b3JhZ2UuZ2V0KGtleSkpKTtcbiAgICAgIH1cbiAgICAgIC8vIE1pZ3JhdGUgZnJvbSB0aGUgc3RhbmRhcmQgbW9kZVxuICAgICAgZWxzZSBpZiAoaXNOb3ROaWwodmFsdWVzKSkge1xuICAgICAgICBlbnRpdGllcyA9IHZhbHVlcy5maWx0ZXIoZSA9PiBlICYmIGlzTm90TmlsKGUuaWQpKTtcbiAgICAgICAgbWlncmF0aW9uID0gdHJ1ZTtcbiAgICAgICAgb2xkS2V5c1RvQ2xlYW4gPSBbdGhpcy5fc3RvcmFnZUtleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRWxzZSAoZGVmYXVsdCBtb2RlKVxuICAgIGVsc2Uge1xuICAgICAgaWYgKGlzTm90TmlsKHZhbHVlcykpIHtcbiAgICAgICAgZW50aXRpZXMgPSB2YWx1ZXMuZmlsdGVyKGUgPT4gZSAmJiBpc05vdE5pbChlLmlkKSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc05vdE5pbChpZHMpKSB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VLZXlzID0gaWRzLm1hcChpZCA9PiB0aGlzLl9zdG9yYWdlS2V5ICsgJyMnICsgaWQpO1xuICAgICAgICAvLyBMb2FkIGVudGl0eSBieSBpZCAob25lIGJ5IG9uZSlcbiAgICAgICAgZW50aXRpZXMgPSBhd2FpdCBjaGFpblByb21pc2VzPFQ+KHN0b3JhZ2VLZXlzLm1hcChrZXkgPT4gKCkgPT4gdGhpcy5zdG9yYWdlLmdldChrZXkpKSk7XG4gICAgICAgIG1pZ3JhdGlvbiA9IHRydWU7XG4gICAgICAgIG9sZEtleXNUb0NsZWFuID0gWy4uLnN0b3JhZ2VLZXlzLCB0aGlzLnN0b3JhZ2VLZXlCeUlkXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPSywgdGhlcmUgaXMgc29tZXRoaW5nIGluIHN0b3JhZ2UuLi5cbiAgICBpZiAoaXNOb3RFbXB0eUFycmF5KGVudGl0aWVzKSkge1xuICAgICAgaWYgKGVudGl0aWVzLmxlbmd0aCA+PSAxMDAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgW2VudGl0eS1zdG9yYWdlXSAtIFJlc3RvcmluZyAke2VudGl0aWVzLmxlbmd0aH0gJHt0aGlzLm5hbWV9LiBDaGVjayBpZiBub3QgdG9vIG1hbnkgZWxlbWVudHM/IWApO1xuICAgICAgfVxuXG4gICAgICAvLyBNYXAgZW50aXRpZXMgaW50byBsaWdodCBlbGVtZW50IChpZiBpZiBub3QgbmVlZCB0byBwZXJzaXN0LCBiZWNhdXNlIG9mIG1pZ3JhdGlvblxuICAgICAgaWYgKHRoaXMuX21hcFRvTGlnaHRFbnRpdHkgJiYgIW1pZ3JhdGlvbikge1xuICAgICAgICBlbnRpdGllcyA9IGVudGl0aWVzLm1hcCh0aGlzLl9tYXBUb0xpZ2h0RW50aXR5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNldEVudGl0aWVzKGVudGl0aWVzIHx8IFtdLCB7Li4ub3B0cywgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLl9kaXJ0eSA9IGZhbHNlO1xuXG4gICAgLy8gRmluaXNoIHRoZSBtaWdyYXRpb25cbiAgICBpZiAobWlncmF0aW9uKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zb2xlLndhcm4oYFtlbnRpdHktc3RvcmFnZV0gLSBNaWdyYXRlICR7dGhpcy5uYW1lfSBpbnRvIHttb2RlOiAnJHt0aGlzLnBvbGljeS5tb2RlfSd9Li4uYCk7XG5cbiAgICAgICAgLy8gRm9yY2UgdG8gcGVyc2lzdCwgdXNpbmcgdGhlIG5ldyBtb2RlXG4gICAgICAgIGF3YWl0IHRoaXMucGVyc2lzdCh7c2tpcElmUHJpc3RpbmU6IGZhbHNlIC8qIGZvcmNlIHBlcnNpc3QgdXNpbmcgdGhlIG5ldyBtb2RlICovIH0pO1xuXG4gICAgICAgIC8vIENsZWFuIG9sZCBzdG9yYWdlIGtleXMgKG9uZSBieSBvbmUpXG4gICAgICAgIGlmIChpc05vdEVtcHR5QXJyYXkob2xkS2V5c1RvQ2xlYW4pKSBhd2FpdCBjaGFpblByb21pc2VzKG9sZEtleXNUb0NsZWFuLm1hcChrZXkgPT4gKCkgPT4gdGhpcy5zdG9yYWdlLnJlbW92ZShrZXkpKSk7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgdGhyb3cge2NvZGU6IEVycm9yQ29kZXMuRU5USVRZX1NUT1JBR0VfTUlHUkFUSU9OX0ZBSUxFRCwgbWVzc2FnZTogJ0VSUk9SLkVOVElUWV9TVE9SQUdFX01JR1JBVElPTl9GQUlMRUQnLCBkZXRhaWxzOiBlcnJ9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEVtaXQgdXBkYXRlIGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY2FjaGUubGVuZ3RoO1xuICB9XG5cbiAgbWFya0FzRGlydHkob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuXG4gICAgLy8gRW1pdCB1cGRhdGUgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgpO1xuICAgIH1cbiAgfVxuXG4gIG1hcmtBc1ByaXN0aW5lKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuXG4gICAgZm9yIChjb25zdCBzIG9mIHRoaXMuX3N0YXR1c0J5SWQudmFsdWVzKCkpIHtcbiAgICAgIGlmIChpc05vdE5pbChzKSkge1xuICAgICAgICBzLmRpcnR5ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2RpcnR5ID0gZmFsc2U7XG5cbiAgICAvLyBFbWl0IHVwZGF0ZSBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCk7XG4gICAgfVxuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcml2YXRlIGxvYWRDYWNoZWRFbnRpdHkoaWQ6IElELCBvcHRzPzogRW50aXR5U3RvcmFnZUxvYWRPcHRpb25zKTogVCB7XG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5fc3RhdHVzQnlJZC5nZXQoaWQpO1xuICAgIGNvbnN0IGluZGV4ID0gc3RhdHVzICYmIHN0YXR1cy5pbmRleDtcbiAgICBpZiAoaXNOaWwoaW5kZXgpKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBub3QgZXhpc3RzXG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUodGhpcy5fY2FjaGVbaW5kZXhdKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZEZ1bGxFbnRpdHkoaWQ6IElELCBvcHRzPzogRW50aXR5U3RvcmFnZUxvYWRPcHRpb25zKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5fc3RhdHVzQnlJZC5nZXQoaWQpO1xuICAgIGNvbnN0IGluZGV4ID0gc3RhdHVzICYmIHN0YXR1cy5pbmRleDtcbiAgICBpZiAoaXNOaWwoaW5kZXgpKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBub3QgZXhpc3RzXG5cbiAgICAvLyBSZWxvYWQgZnJvbSBzdG9yYWdlLCBpZiBuZWVkIChlLmcuIHNvbWUgYXR0cmlidXRlcyBoYXMgYmVlbiBleGNsdWRlZCBpbiBsaWdodCBlbGVtZW50cylcbiAgICBpZiAoc3RhdHVzLmRpcnR5ID09PSBmYWxzZSkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhgW2VudGl0eS1zdG9yYWdlXSBGdWxsIHJlbG9hZGluZyAke3RoaXMubmFtZX0jJHtpZH0uLi5gKTtcbiAgICAgIGNvbnN0IGZ1bGxEYXRhID0gYXdhaXQgdGhpcy5zdG9yYWdlLmdldCh0aGlzLl9zdG9yYWdlS2V5ICsgJyMnICsgaWQpO1xuICAgICAgaWYgKGZ1bGxEYXRhKSByZXR1cm4gT2JqZWN0LmZyZWV6ZShmdWxsRGF0YSk7XG4gICAgICAvLyBOb3QgZm91bmQgYnkgaWQsIGNvbnRpbnVlIGZyb20gY2FjaGUgKHZlcnNpb24gcHJpb3IgdG8gMS41LjMpXG4gICAgfVxuXG4gICAgLy8gTG9hZCBmcm9tIHRoZSBjYWNoZSwgaWYgZGlydHkgT1IgaWYgc3RvcmFnZSBpcyBub3Qgc3BsaXR0ZWQgYnkgaWRcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh0aGlzLl9jYWNoZVtpbmRleF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRFbnRpdGllcyhlbnRpdGllczogVFtdLCBvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIC8vIEZpbHRlciBub24gbmlsIChhbmQgaWYgbmVlZCBub24gbG9jYWwpIGVudGl0aWVzXG4gICAgZW50aXRpZXMgPSAoZW50aXRpZXMgfHwgW10pXG4gICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpc05vdE5pbChpdGVtKVxuICAgICAgICAgICYmICghdGhpcy5wb2xpY3kuc2tpcE5vbkxvY2FsRW50aXRpZXMgfHwgK2l0ZW0uaWQgPCAwKVxuICAgICAgICApO1xuXG4gICAgdGhpcy5fY2FjaGUgPSBlbnRpdGllcztcblxuICAgIC8vIFVwZGF0ZSB0aGUgc2VxdWVuY2Ugd2l0aCBtaW4oaWQpIG9mIGFsbCB0ZW1wb3JhcnkgaWRzXG4gICAgdGhpcy5fc2VxdWVuY2UgPSB0aGlzLl9jYWNoZS5yZWR1Y2UoKHJlcywgaXRlbSkgPT4gK2l0ZW0uaWQgPCAwID8gTWF0aC5taW4ocmVzLCAraXRlbS5pZCkgOiByZXMsIDApO1xuXG4gICAgdGhpcy5fc3RhdHVzQnlJZC5jbGVhcigpO1xuICAgIHRoaXMuX2NhY2hlLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLl9zdGF0dXNCeUlkLnNldChpdGVtLmlkLCA8RW50aXR5U3RhdHVzPntcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGRpcnR5OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2FkZWQgPSB0cnVlO1xuXG4gICAgLy8gRW1pdCB1cGRhdGUgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIFdJbGwgYXBwbHkgYSBmaWx0ZXIsIHRoZW4gYSBzb3J0LCB0aGVuIGEgcGFnZSBzbGljZVxuICAgKlxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcGFyYW0gdmFyaWFibGVzXG4gICAqL1xuICBwcml2YXRlIHJlZHVjZUFuZFNvcnQoZGF0YTogVFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD86IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT86IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydEJ5Pzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0RGlyZWN0aW9uPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI/OiAoVCkgPT4gYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pOiBMb2FkUmVzdWx0PFQ+IHtcbiAgICBpZiAoaXNFbXB0eUFycmF5KGRhdGEpKSB7XG4gICAgICByZXR1cm4ge2RhdGE6IFtdLCB0b3RhbDogMH07XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIG5pbCB2YWx1ZXNcbiAgICBkYXRhID0gZGF0YS5maWx0ZXIoaXNOb3ROaWwpO1xuXG4gICAgaWYgKCF2YXJpYWJsZXMpIHtcbiAgICAgIC8vIFJldHVybiBhbGwgKGJ1dCBhcnJheSBoYXMgYmVlbiBmaWx0ZXJlZCwgYW5kIGNvcGllZClcbiAgICAgIHJldHVybiB7ZGF0YSwgdG90YWw6IGRhdGEubGVuZ3RofTtcbiAgICB9XG5cbiAgICAvLyBBcHBseSB0aGUgZmlsdGVyLCBpZiBhbnlcbiAgICBpZiAodmFyaWFibGVzLmZpbHRlcikge1xuICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKHZhcmlhYmxlcy5maWx0ZXIpO1xuICAgIH1cblxuICAgIC8vIENvbXB1dGUgdGhlIHRvdGFsIGxlbmd0aFxuICAgIGNvbnN0IHRvdGFsID0gZGF0YS5sZW5ndGg7XG5cbiAgICAvLyBJZiBwYWdlIHNpemU9MCAoZS5nLiBvbmx5IG5lZWQgdG90YWwpXG4gICAgaWYgKHZhcmlhYmxlcy5zaXplID09PSAwKSByZXR1cm4ge2RhdGE6IFtdLCB0b3RhbH07XG5cbiAgICAvLyBTb3J0IGJ5XG4gICAgaWYgKHZhcmlhYmxlcy5zb3J0QnkpIHtcbiAgICAgIEVudGl0eVV0aWxzLnNvcnQoZGF0YSwgdmFyaWFibGVzLnNvcnRCeSwgdmFyaWFibGVzLnNvcnREaXJlY3Rpb24pO1xuICAgIH1cblxuICAgIC8vIFNsaWNlIGluIGEgcGFnZSAodXNpbmcgb2Zmc2V0IGFuZCBzaXplKVxuICAgIGlmICh2YXJpYWJsZXMub2Zmc2V0ID4gMCkge1xuXG4gICAgICAvLyBPZmZzZXQgYWZ0ZXIgdGhlIGVuZDogbm8gcmVzdWx0XG4gICAgICBpZiAodmFyaWFibGVzLm9mZnNldCA+PSBkYXRhLmxlbmd0aCB8fCB2YXJpYWJsZXMuc2l6ZSA9PT0gMCkge1xuICAgICAgICBkYXRhID0gW107XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZGF0YSA9ICh2YXJpYWJsZXMuc2l6ZSA+IDAgJiYgKCh2YXJpYWJsZXMub2Zmc2V0ICsgdmFyaWFibGVzLnNpemUpIDwgZGF0YS5sZW5ndGgpKSA/XG4gICAgICAgICAgLy8gU2xpY2UgdXNpbmcgbGltaXQgdG8gc2l6ZVxuICAgICAgICAgIGRhdGEuc2xpY2UodmFyaWFibGVzLm9mZnNldCwgdmFyaWFibGVzLm9mZnNldCArIHZhcmlhYmxlcy5zaXplKSA6XG4gICAgICAgICAgLy8gU2xpY2Ugd2l0aG91dCBsaW1pdFxuICAgICAgICAgIGRhdGEuc2xpY2UodmFyaWFibGVzLm9mZnNldCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgYSBsaW1pdFxuICAgIGVsc2UgaWYgKHZhcmlhYmxlcy5zaXplID4gMCl7XG4gICAgICBkYXRhID0gZGF0YS5zbGljZSgwLCB2YXJpYWJsZXMuc2l6ZSk7XG4gICAgfVxuICAgIC8vIE5vIGxpbWl0OlxuICAgIGVsc2UgaWYgKHZhcmlhYmxlcy5zaXplID09PSAtMSl7XG4gICAgICAvLyBLZWVwIGFsbCBkYXRhXG4gICAgfVxuXG4gICAgcmV0dXJuIHtkYXRhLCB0b3RhbH07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUxpZ2h0RW50aXR5TWFwRm4ocG9saWN5OiBFbnRpdHlTdG9yZVR5cGVQb2xpY3k8VD4pOiAoVCkgPT4gVCB7XG4gICAgaWYgKHBvbGljeS5tb2RlICE9PSAnYnktaWQnKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBPbmx5IG5lZWQgZm9yIHRoZSAnYnktaWQnIG1vZGVcbiAgICBpZiAoaXNFbXB0eUFycmF5KHBvbGljeS5saWdodEZpZWxkc0V4Y2x1ZGVzKSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gc2tpcFxuXG4gICAgLy8gQ3JlYXRlIGEgaW1tdXRhYmxlIG1hc2sgb2JqZWN0LCB1c2UgdG8gY2xlYW4gc29tZSBwcm9wZXJ0aWVzXG4gICAgY29uc3QgZXhjbHVkZUF0dHJpYnV0ZXNNYXNrID0gT2JqZWN0LmZyZWV6ZSh0aGlzLnBvbGljeS5saWdodEZpZWxkc0V4Y2x1ZGVzLnJlZHVjZSgocmVzLCBhdHRyKSA9PiB7XG4gICAgICByZXNbYXR0cl0gPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sIDxUPnt9KSk7XG5cbiAgICByZXR1cm4gKGVudGl0eSkgPT4gZW50aXR5ID8gT2JqZWN0LmFzc2lnbig8VD57fSwgZW50aXR5LCBleGNsdWRlQXR0cmlidXRlc01hc2spIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgZW50aXRpZXNTdWJqZWN0LlxuICAgKlxuICAgKiBCZWZvcmUgd2VuZGluZyBpdGVtcywgYSBmaWx0ZXIgaXMgYXBwbHksIHRvIHJlbW92ZSBudWxsIHZhbHVlLlxuICAgKiBUaGlzIGZpbHRlciB3aWxsIGNyZWF0ZSBhIGFycmF5IGNvcHkuXG4gICAqL1xuICBwcml2YXRlIGVtaXRFdmVudCgpIHtcbiAgICB0aGlzLl9vbkNoYW5nZS5uZXh0KHRydWUpO1xuICB9XG59XG4iXX0=
@@ -12179,7 +12179,7 @@ class EntityStore {
12179
12179
  constructor(name, storage, policy) {
12180
12180
  this.name = name;
12181
12181
  this.storage = storage;
12182
- this._onChange = new BehaviorSubject(false);
12182
+ this._onChange = new BehaviorSubject(true);
12183
12183
  this._dirty = false;
12184
12184
  this.policy = policy || {};
12185
12185
  this.reset({ emitEvent: false });
@@ -12232,9 +12232,7 @@ class EntityStore {
12232
12232
  console.warn('[entity-store] WARN: Watching full entities, splited by id in entity store. This can be long! Please make sure you need full entities here.');
12233
12233
  return this._onChange
12234
12234
  .pipe(
12235
- // Wait data loaded
12236
- filter(_ => this._loaded),
12237
- // Apply filter and sort
12235
+ // Apply filter on cache
12238
12236
  map((_) => this.reduceAndSort(this._cache, variables)),
12239
12237
  // Then convert into full entities (using parallel jobs - /!\ can use lot of memory)
12240
12238
  mergeMap((res) => Promise.all((res.data || [])
@@ -12245,11 +12243,7 @@ class EntityStore {
12245
12243
  }
12246
12244
  // Load using entities array
12247
12245
  return this._onChange
12248
- .pipe(
12249
- // Wait data loaded
12250
- filter(_ => this._loaded),
12251
- // Apply filter and sort
12252
- map((_) => this.reduceAndSort(this._cache, variables)));
12246
+ .pipe(map((_) => this.reduceAndSort(this._cache, variables)));
12253
12247
  }
12254
12248
  /**
12255
12249
  * WIll apply a filter, then a sort, then a page slice
@@ -12306,7 +12300,7 @@ class EntityStore {
12306
12300
  let result;
12307
12301
  console.info(`[entity-storage] Saving ${entities.length} ${this.name}(s)`);
12308
12302
  // First save, or reset using given entities
12309
- if (!this._loaded || !this._cache || (opts === null || opts === void 0 ? void 0 : opts.reset)) {
12303
+ if (isEmptyArray(this._cache) || (opts && opts.reset)) {
12310
12304
  this.setEntities(entities, { emitEvent: false });
12311
12305
  }
12312
12306
  else {