@sumaris-net/ngx-components 1.19.17 → 1.19.18

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.
@@ -38,6 +38,33 @@ export class EntitiesStorage extends StartableService {
38
38
  get dirty() {
39
39
  return this._dirty || Object.values(this._data).some(store => store.dirty);
40
40
  }
41
+ ngOnStart() {
42
+ return __awaiter(this, void 0, void 0, function* () {
43
+ const now = Date.now();
44
+ console.info(`[entities-storage] Starting entity storage...`);
45
+ // Restore stores
46
+ yield this.restoreLocally();
47
+ // Start a save timer
48
+ this.registerSubscription(merge(this._$save, timer(this._saveTimerPeriod, this._saveTimerPeriod))
49
+ .pipe(
50
+ // Avoid to many call (e.g. when $save AND timer are triggered
51
+ throttleTime(this._saveTimerPeriod))
52
+ .subscribe(() => this.storeLocally({ skipIfPristine: true })));
53
+ // Save, when platform is in pause
54
+ this.registerSubscription(this.platform.pause.subscribe(() => __awaiter(this, void 0, void 0, function* () {
55
+ console.warn(`[entities-storage] Platform will pause: saving...`);
56
+ yield this.storeLocally({ skipIfPristine: true });
57
+ console.warn(`[entities-storage] Platform will pause: saving [OK]`);
58
+ })));
59
+ console.info(`[entities-storage] Starting [OK] in ${Date.now() - now}ms`);
60
+ return this._data;
61
+ });
62
+ }
63
+ ngOnStop() {
64
+ return __awaiter(this, void 0, void 0, function* () {
65
+ yield this.storeLocally({ skipIfPristine: true });
66
+ });
67
+ }
41
68
  watchAll(entityName, variables, opts) {
42
69
  // Make sure store is ready
43
70
  if (!this.started) {
@@ -304,34 +331,8 @@ export class EntitiesStorage extends StartableService {
304
331
  });
305
332
  }
306
333
  persist(opts = { skipIfPristine: true }) {
307
- // Skip if pristine
308
- if (opts.skipIfPristine && !this._dirty)
309
- return Promise.resolve();
310
334
  return this.storeLocally(opts);
311
335
  }
312
- ngOnStart() {
313
- return __awaiter(this, void 0, void 0, function* () {
314
- const now = Date.now();
315
- console.info(`[entities-storage] Starting entity storage...`);
316
- // Restore sequences
317
- yield this.restoreLocally();
318
- // Start a save timer
319
- this.registerSubscription(merge(this._$save, timer(this._saveTimerPeriod, this._saveTimerPeriod))
320
- .pipe(
321
- // Avoid to many call (e.g. when $save AND timer are triggered
322
- throttleTime(this._saveTimerPeriod))
323
- .subscribe(() => this.storeLocally()));
324
- console.info(`[entities-storage] Starting [OK] in ${Date.now() - now}ms`);
325
- return this._data;
326
- });
327
- }
328
- ngOnStop() {
329
- return __awaiter(this, void 0, void 0, function* () {
330
- if (this.dirty) {
331
- yield this.storeLocally();
332
- }
333
- });
334
- }
335
336
  /* -- protected methods -- */
336
337
  getEntityStore(name, opts) {
337
338
  let store = this._data[name];
@@ -448,4 +449,4 @@ EntitiesStorage.ctorParameters = () => [
448
449
  { type: Environment, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] },
449
450
  { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APP_LOCAL_STORAGE_TYPE_POLICIES,] }] }
450
451
  ];
451
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXRpZXMtc3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3N0b3JhZ2UvZW50aXRpZXMtc3RvcmFnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBYyxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5RCxPQUFPLEVBQUMsWUFBWSxFQUFFLFlBQVksRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBRXJFLE9BQU8sRUFBQywyQkFBMkIsRUFBNEIsV0FBVyxFQUF3QixNQUFNLHNCQUFzQixDQUFDO0FBQy9ILE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBQyxXQUFXLEVBQUUsV0FBVyxFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFDbEYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7QUFPMUQsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQUcsSUFBSSxjQUFjLENBQThCLDBCQUEwQixDQUFDLENBQUM7QUFFaEQsQ0FBQztBQUc1RSxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxnQkFBa0M7SUFpQnJFLFlBQ1UsUUFBa0IsRUFDbEIsa0JBQXNDLEVBQ3RDLE9BQWdCLEVBQ08sV0FBd0IsRUFDRixZQUF5QztRQUU5RixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFOUixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNPLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBYmpELFdBQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2YsWUFBTyxHQUFHLEtBQUssQ0FBQztRQWV0QixJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksSUFBSSxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQzdFLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBRWhCLGVBQWU7UUFDZixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztRQUN0QyxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFuQkQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBbUJELFFBQVEsQ0FBc0IsVUFBa0IsRUFDbEIsU0FPQyxFQUNELElBQStCO1FBQzNELDJCQUEyQjtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNqQixPQUFPLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBSSxVQUFVLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU87U0FDakY7UUFFRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkMsTUFBTSxTQUFTLEdBQUcsU0FBUyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1FBQzFHLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUksU0FBUyxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyxDQUFDO2FBQzdELFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUV6RSxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUssT0FBTyxDQUFzQixVQUFrQixFQUNsQixTQU1DLEVBQ0QsSUFBK0I7O1lBRWhFLDJCQUEyQjtZQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87Z0JBQUUsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFdEMsSUFBSTtnQkFDRixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ25DLElBQUksSUFBSSxDQUFDLE1BQU07b0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsVUFBVSxLQUFLLENBQUMsQ0FBQztnQkFFOUUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBSSxVQUFVLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztnQkFDeEUsSUFBSSxDQUFDLFdBQVc7b0JBQUUsT0FBTyxFQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsZ0NBQWdDO2dCQUUvRSxPQUFPLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQzdDO29CQUNPO2dCQUNOLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUNwQztRQUNILENBQUM7S0FBQTtJQUVLLElBQUksQ0FBc0IsRUFBVSxFQUFFLFVBQWtCLEVBQUUsSUFBK0I7O1lBQzdGLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRW5CLElBQUk7Z0JBQ0YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUVuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFJLFVBQVUsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO2dCQUN4RSxJQUFJLENBQUMsV0FBVztvQkFBRSxPQUFPLFNBQVMsQ0FBQztnQkFDbkMsT0FBTyxNQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ3pDO29CQUNPO2dCQUNOLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUNwQztRQUNILENBQUM7S0FBQTtJQUVLLFNBQVMsQ0FBQyxZQUEwQjs7WUFDeEMsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbkIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzlFLENBQUM7S0FBQTtJQUVLLFVBQVUsQ0FBQyxZQUEwQixFQUFFLFdBQW1COztZQUM5RCxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNuQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdkQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5QyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3hDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQzthQUNuQjtZQUNELElBQUksSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUUsU0FBUyxVQUFVLGFBQWEsQ0FBQyxDQUFDO1lBQzFJLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7S0FBQTtJQUVLLFlBQVksQ0FBQyxZQUEwQjs7WUFDM0MsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2pGLENBQUM7S0FBQTtJQUVLLElBQUksQ0FBc0IsTUFBUyxFQUFFLElBRzFDOztZQUNDLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sQ0FBQyxPQUFPO1lBRTVCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztnQkFBRSxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUV0QyxJQUFJO2dCQUNGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFFbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ25CLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDM0UsSUFBSSxDQUFDLGNBQWMsQ0FBSSxTQUFTLENBQUM7cUJBQzlCLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBRXRCLGNBQWM7Z0JBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFFbkIsT0FBTyxNQUFNLENBQUM7YUFDZjtvQkFDTztnQkFDTixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDcEM7UUFDSCxDQUFDO0tBQUE7SUFFSyxPQUFPLENBQXNCLFFBQWEsRUFBRSxJQUlqRDs7WUFDQyxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDO2dCQUFFLE9BQU8sUUFBUSxDQUFDLENBQUMseUJBQXlCO1lBRXhHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztnQkFBRSxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUV0QyxJQUFJO2dCQUNGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFFbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ25CLE1BQU0sVUFBVSxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakYsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFJLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDbkU7b0JBQ087Z0JBQ04sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ3BDO1FBQ0gsQ0FBQztLQUFBO0lBRUssTUFBTSxDQUF1QyxNQUFTLEVBQUUsSUFFN0Q7O1lBQ0MsSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTyxTQUFTLENBQUMsQ0FBQyxPQUFPO1lBRXRDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztnQkFBRSxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUV0QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsa0NBQzNCLElBQUksS0FDUCxVQUFVLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUNwRSxDQUFDO1FBQ0wsQ0FBQztLQUFBO0lBRUssVUFBVSxDQUF3QyxFQUFNLEVBQUUsSUFHL0Q7O1lBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO2dCQUFFLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRXRDLElBQUksQ0FBQyxJQUFJLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1lBQzNHLDJGQUEyRjtZQUUzRixJQUFJO2dCQUNGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBUSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7Z0JBQ2pGLElBQUksQ0FBQyxXQUFXO29CQUFFLE9BQU8sU0FBUyxDQUFDO2dCQUVuQyxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFFbkQsdUJBQXVCO2dCQUN2QixJQUFJLGFBQWEsRUFBRTtvQkFFakIsZ0JBQWdCO29CQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFFbkIsY0FBYztvQkFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUNwQjtnQkFFRCxPQUFPLGFBQWEsQ0FBQzthQUN0QjtvQkFDTztnQkFDTixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDcEM7UUFDSCxDQUFDO0tBQUE7SUFFSyxVQUFVLENBQXNCLEdBQWEsRUFBRSxJQUdwRDs7WUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87Z0JBQUUsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFdEMsSUFBSSxDQUFDLElBQUksSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7WUFFaEgsSUFBSTtnQkFDRixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO2dCQUM3RSxJQUFJLENBQUMsV0FBVztvQkFBRSxPQUFPLFNBQVMsQ0FBQztnQkFFbkMsY0FBYztnQkFDZCxNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFFMUQsdUJBQXVCO2dCQUN2QixJQUFJLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUU5QixnQkFBZ0I7b0JBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO29CQUVuQixvQkFBb0I7b0JBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7aUJBRXBCO2dCQUVELE9BQU8sZUFBZSxDQUFDO2FBQ3hCO29CQUFTO2dCQUNQLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUNyQztRQUNILENBQUM7S0FBQTtJQUVLLGVBQWUsQ0FBc0IsTUFBUyxFQUFFLElBRXJEOztZQUNDLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sU0FBUyxDQUFDLENBQUMsT0FBTztZQUV0QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87Z0JBQUUsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFdEMsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEVBQUUsa0NBQ3BDLElBQUksS0FDUCxVQUFVLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUNwRSxDQUFDO1FBQ0wsQ0FBQztLQUFBO0lBRUssbUJBQW1CLENBQXNCLEVBQVUsRUFBRSxJQUcxRDs7WUFDQyxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUVuQixJQUFJLENBQUMsSUFBSSxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztZQUUzRyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxrQ0FDcEIsSUFBSSxLQUNQLFVBQVUsRUFBRSxlQUFlLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQzFELENBQUM7UUFDTCxDQUFDO0tBQUE7SUFFSyxXQUFXLENBQXNCLE1BQVMsRUFBRSxJQUdqRDs7WUFDQyxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPLFNBQVMsQ0FBQyxDQUFDLE9BQU87WUFFdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO2dCQUFFLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRXRDLE1BQU0sVUFBVSxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU1RSxpQ0FBaUM7WUFDakMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBSSxVQUFVLENBQUMsQ0FBQztZQUN2RCxJQUFJLFdBQVc7Z0JBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRXJELHFEQUFxRDtZQUNyRCxNQUFNLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQztZQUV0QixlQUFlO1lBQ2YsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUM7WUFDNUQsSUFBSSxDQUFDLGNBQWMsQ0FBSSxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRXJELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFbkIsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztLQUFBO0lBRUssZUFBZSxDQUFzQixHQUFhLEVBQUUsSUFHekQ7O1lBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO2dCQUFFLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRXRDLElBQUksQ0FBQyxJQUFJLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1lBRXBHLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1lBQzdFLElBQUksQ0FBQyxXQUFXO2dCQUFFLE9BQU8sU0FBUyxDQUFDO1lBRW5DLGNBQWM7WUFDZCxNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUUxRCx1QkFBdUI7WUFDdkIsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFFOUIscURBQXFEO2dCQUNyRCxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQztnQkFFL0MsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUNqRSxJQUFJLENBQUMsY0FBYyxDQUFJLFNBQVMsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQztxQkFDOUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFFbEMsZ0JBQWdCO2dCQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztnQkFFbkIsb0JBQW9CO2dCQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ3BCO1lBRUQsT0FBTyxlQUFlLENBQUM7UUFDekIsQ0FBQztLQUFBO0lBRUssV0FBVyxDQUFzQixNQUFTLEVBQUUsSUFHakQ7O1lBQ0MsSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTyxTQUFTLENBQUMsQ0FBQyxPQUFPO1lBRXRDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztnQkFBRSxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUV0QyxNQUFNLFVBQVUsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDNUUsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUM7WUFDNUQsSUFBSSxDQUFDLGNBQWMsQ0FBSSxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRXJELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFbkIsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztLQUFBO0lBRUssVUFBVSxDQUFDLFVBQWtCOztZQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87Z0JBQUUsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFdEMsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUM7WUFDNUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsV0FBVztnQkFBRSxPQUFPLENBQUMsT0FBTztZQUVqQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFFbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixDQUFDO0tBQUE7SUFFRCxPQUFPLENBQUMsSUFBSSxHQUFHLEVBQUMsY0FBYyxFQUFFLElBQUksRUFBQztRQUNuQyxtQkFBbUI7UUFDbkIsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFBRyxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUVuRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVLLFNBQVM7O1lBQ2IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsK0NBQStDLENBQUMsQ0FBQztZQUU5RCxvQkFBb0I7WUFDcEIsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFNUIscUJBQXFCO1lBQ3JCLElBQUksQ0FBQyxvQkFBb0IsQ0FDdkIsS0FBSyxDQUNILElBQUksQ0FBQyxNQUFNLEVBQ1gsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FDcEQ7aUJBQ0EsSUFBSTtZQUNILDhEQUE4RDtZQUM5RCxZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQ3BDO2lCQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FDdEMsQ0FBQztZQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUNBQXVDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBRTFFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNwQixDQUFDO0tBQUE7SUFFZSxRQUFROztZQUN0QixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2QsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDM0I7UUFDSCxDQUFDO0tBQUE7SUFFRCw2QkFBNkI7SUFFbkIsY0FBYyxDQUF3QyxJQUFZLEVBQUUsSUFFN0U7UUFDQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxFQUFFO1lBQzlDLElBQUksSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM1RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVDLEtBQUssR0FBRyxJQUFJLFdBQVcsQ0FBUSxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztTQUMxQjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVTLGdCQUFnQixDQUFDLFlBQXVDO1FBQ2hFLElBQUksQ0FBQyxZQUFZO1lBQUUsTUFBTSxLQUFLLENBQUMseUNBQXlDLEdBQUcsWUFBWSxDQUFDLENBQUM7UUFDekYsSUFBSSxPQUFPLFlBQVksS0FBSyxRQUFRO1lBQUUsT0FBTyxZQUFZLENBQUM7UUFDMUQsSUFBSSxZQUFZLENBQUMsVUFBVSxFQUFFO1lBQzNCLE9BQU8sWUFBWSxDQUFDLFVBQVUsQ0FBQztTQUNoQztRQUNELE9BQU8sWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQzlDLENBQUM7SUFFZSxjQUFjOztZQUU1QixNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDeEUsSUFBSSxDQUFDLFdBQVc7Z0JBQUUsT0FBTztZQUV6QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN0QyxJQUFJLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsMENBQTBDLENBQUMsQ0FBQztZQUMxRSxNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDdEMsV0FBVztpQkFDUixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFNLElBQUksQ0FBQyxDQUFDO2lCQUMzQyxHQUFHLENBQUMsQ0FBQyxLQUF1QixFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUN0RCxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRTNDLElBQUksSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsYUFBYSxzQkFBc0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDeEksQ0FBQztLQUFBO0lBRWUsWUFBWSxDQUFDLElBQUksR0FBRyxFQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUM7O1lBQ3hELElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU8sQ0FBQyxPQUFPO1lBRXZELDBDQUEwQztZQUMxQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hCLElBQUksSUFBSSxDQUFDLE1BQU07b0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO2dCQUMvRixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNuQixPQUFPO2FBQ1I7WUFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFaEUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLElBQUksSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1lBRW5FLElBQUksaUJBQWlCLENBQUM7WUFDdEIsT0FBTyxhQUFhLENBQ2xCLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUU7Z0JBQy9CLGlCQUFpQixHQUFHLFVBQVUsQ0FBQztnQkFDL0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztnQkFFckUsSUFBSSxDQUFDLFdBQVcsRUFBRTtvQkFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsVUFBVSxvQkFBb0IsQ0FBQyxDQUFDO29CQUM5RSxPQUFPO2lCQUNSO2dCQUVELHlCQUF5QjtnQkFDekIsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUs7b0JBQUUsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBRXhFLGdCQUFnQjtnQkFDaEIsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztxQkFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNaLHlEQUF5RDtvQkFDekQsSUFBSSxDQUFDLEtBQUssRUFBRTt3QkFDVixNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDO3dCQUNyRSxJQUFJLGVBQWUsS0FBSyxDQUFDLENBQUM7NEJBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQ3BFO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7aUJBQ0osSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDUCxpQkFBaUIsR0FBRyxTQUFTLENBQUM7Z0JBQzlCLE9BQU8sWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7b0JBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQztvQkFDbEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDakUsQ0FBQyxDQUFDO2lCQUNELElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ1QsSUFBSSxJQUFJLENBQUMsTUFBTTtvQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxXQUFXLENBQUMsTUFBTSxvQkFBb0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUM7Z0JBQ3BJLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckMsQ0FBQyxDQUFDO2lCQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDWCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDckIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLGlCQUFpQixFQUFFO29CQUNyQixPQUFPLENBQUMsS0FBSyxDQUFDLDZDQUE2QyxpQkFBaUIsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2lCQUN0RjtxQkFBTTtvQkFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLDhDQUE4QyxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDL0Y7Z0JBQ0QsTUFBTSxHQUFHLENBQUM7WUFDWixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7S0FBQTs7QUEzZmEsNEJBQVksR0FBRyxRQUFRLENBQUM7QUFDeEIsNkJBQWEsR0FBRyxTQUFTLENBQUM7OztZQUp6QyxVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzs7WUFwQnhCLFFBQVE7WUFNUixrQkFBa0I7WUFQbEIsT0FBTztZQVFQLFdBQVcsdUJBbUNkLE1BQU0sU0FBQyxXQUFXOzRDQUNsQixRQUFRLFlBQUksTUFBTSxTQUFDLCtCQUErQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZGVmZXIsIG1lcmdlLCBPYnNlcnZhYmxlLCB0aW1lcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0V2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtTdG9yYWdlfSBmcm9tICdAaW9uaWMvc3RvcmFnZSc7XG5pbXBvcnQge1BsYXRmb3JtfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQge2ZpcnN0LCBzd2l0Y2hNYXAsIHRocm90dGxlVGltZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtFbnRpdHksIElFbnRpdHl9IGZyb20gJy4uL21vZGVsL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQge2lzRW1wdHlBcnJheSwgaXNOaWxPckJsYW5rfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7TG9hZFJlc3VsdH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7RU5USVRJRVNfU1RPUkFHRV9LRVlfUFJFRklYLCBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnMsIEVudGl0eVN0b3JlLCBFbnRpdHlTdG9yZVR5cGVQb2xpY3l9IGZyb20gJy4vZW50aXR5LXN0b3JlLmNsYXNzJztcbmltcG9ydCB7UHJvZ3Jlc3NCYXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2VydmljZXMvcHJvZ3Jlc3MtYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHtFbnZpcm9ubWVudCwgRU5WSVJPTk1FTlR9IGZyb20gJy4uLy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQge1N0YXJ0YWJsZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGFydGFibGUtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQge2NoYWluUHJvbWlzZXN9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdGllc1N0b3JhZ2VUeXBlUG9saWNpZXMge1xuICBbX190eXBlbmFtZTogc3RyaW5nXTogRW50aXR5U3RvcmVUeXBlUG9saWN5O1xufVxuXG5leHBvcnQgY29uc3QgQVBQX0xPQ0FMX1NUT1JBR0VfVFlQRV9QT0xJQ0lFUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxFbnRpdGllc1N0b3JhZ2VUeXBlUG9saWNpZXM+KCdsb2NhbFN0b3JhZ2VUeXBlUG9saWNpZXMnKTtcblxuZGVjbGFyZSBpbnRlcmZhY2UgRW50aXR5U3RvcmFnZU1hcCB7IFtrZXk6IHN0cmluZ106IEVudGl0eVN0b3JlPGFueSwgYW55PiB9O1xuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBFbnRpdGllc1N0b3JhZ2UgZXh0ZW5kcyBTdGFydGFibGVTZXJ2aWNlPEVudGl0eVN0b3JhZ2VNYXA+IHtcblxuICBwdWJsaWMgc3RhdGljIFRSQVNIX1BSRUZJWCA9ICdUcmFzaCMnO1xuICBwdWJsaWMgc3RhdGljIFJFTU9URV9QUkVGSVggPSAnUmVtb3RlIyc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdHlwZVBvbGljaWVzOiBFbnRpdGllc1N0b3JhZ2VUeXBlUG9saWNpZXM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NhdmVUaW1lclBlcmlvZDtcblxuICBwcml2YXRlIF8kc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXIodHJ1ZSk7XG4gIHByaXZhdGUgX2RpcnR5ID0gZmFsc2U7XG4gIHByaXZhdGUgX3NhdmluZyA9IGZhbHNlO1xuXG5cbiAgZ2V0IGRpcnR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXJ0eSB8fCBPYmplY3QudmFsdWVzKHRoaXMuX2RhdGEpLnNvbWUoc3RvcmUgPT4gc3RvcmUuZGlydHkpO1xuICB9XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIHByaXZhdGUgcHJvZ3Jlc3NCYXJTZXJ2aWNlOiBQcm9ncmVzc0JhclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yYWdlOiBTdG9yYWdlLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfTE9DQUxfU1RPUkFHRV9UWVBFX1BPTElDSUVTKSB0eXBlUG9saWNpZXM6IEVudGl0aWVzU3RvcmFnZVR5cGVQb2xpY2llc1xuICApIHtcbiAgICBzdXBlcihwbGF0Zm9ybSk7XG4gICAgdGhpcy5fdHlwZVBvbGljaWVzID0gdHlwZVBvbGljaWVzIHx8IHt9O1xuICAgIHRoaXMuX3NhdmVUaW1lclBlcmlvZCA9IGVudmlyb25tZW50LnN0b3JhZ2VTYXZlUGVyaW9kTXMgfHwgMTAwMDAgLyogPSAxMHMgKi87XG4gICAgdGhpcy5fZGF0YSA9IHt9O1xuXG4gICAgLy8gRm9yIERFViBvbmx5XG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tlbnRpdGllcy1zdG9yYWdlXSBDcmVhdGluZyBzZXJ2aWNlJyk7XG4gIH1cblxuICB3YXRjaEFsbDxUIGV4dGVuZHMgRW50aXR5PFQ+PihlbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD86IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPzogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRCeT86IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0RGlyZWN0aW9uPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYXNoPzogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI/OiAoVCkgPT4gYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cz86IEVudGl0eVN0b3JhZ2VMb2FkT3B0aW9ucyk6IE9ic2VydmFibGU8TG9hZFJlc3VsdDxUPj4ge1xuICAgIC8vIE1ha2Ugc3VyZSBzdG9yZSBpcyByZWFkeVxuICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICByZXR1cm4gZGVmZXIoKCkgPT4gdGhpcy5yZWFkeSgpKVxuICAgICAgICAucGlwZShzd2l0Y2hNYXAoKCkgPT4gdGhpcy53YXRjaEFsbDxUPihlbnRpdHlOYW1lLCB2YXJpYWJsZXMsIG9wdHMpKSk7IC8vIExvb3BcbiAgICB9XG5cbiAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZS5pbmNyZWFzZSgpO1xuICAgIGNvbnN0IHN0b3JlTmFtZSA9IHZhcmlhYmxlcyAmJiB2YXJpYWJsZXMudHJhc2ggPyAoRW50aXRpZXNTdG9yYWdlLlRSQVNIX1BSRUZJWCArIGVudGl0eU5hbWUpIDogZW50aXR5TmFtZTtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdldEVudGl0eVN0b3JlPFQ+KHN0b3JlTmFtZSwge2NyZWF0ZTogdHJ1ZX0pXG4gICAgICAud2F0Y2hBbGwodmFyaWFibGVzLCBvcHRzKTtcblxuICAgIHJlc3VsdC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnByb2dyZXNzQmFyU2VydmljZS5kZWNyZWFzZSgpKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3luYyBsb2FkQWxsPFQgZXh0ZW5kcyBFbnRpdHk8VD4+KGVudGl0eU5hbWU6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXM/OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ/OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPzogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydEJ5Pzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydERpcmVjdGlvbj86IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcj86IChUKSA9PiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cz86IEVudGl0eVN0b3JhZ2VMb2FkT3B0aW9ucyk6IFByb21pc2U8TG9hZFJlc3VsdDxUPj4ge1xuXG4gICAgLy8gTWFrZSBzdXJlIHN0b3JlIGlzIHJlYWR5XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZS5pbmNyZWFzZSgpO1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbZW50aXRpZXMtc3RvcmFnZV0gTG9hZGluZyAke2VudGl0eU5hbWV9Li4uYCk7XG5cbiAgICAgIGNvbnN0IGVudGl0eVN0b3JlID0gdGhpcy5nZXRFbnRpdHlTdG9yZTxUPihlbnRpdHlOYW1lLCB7Y3JlYXRlOiBmYWxzZX0pO1xuICAgICAgaWYgKCFlbnRpdHlTdG9yZSkgcmV0dXJuIHtkYXRhOiBbXSwgdG90YWw6IDB9OyAvLyBObyBzdG9yZSBmb3IgdGhpcyBlbnRpdHkgbmFtZVxuXG4gICAgICByZXR1cm4gZW50aXR5U3RvcmUubG9hZEFsbCh2YXJpYWJsZXMsIG9wdHMpO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmRlY3JlYXNlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9hZDxUIGV4dGVuZHMgRW50aXR5PFQ+PihpZDogbnVtYmVyLCBlbnRpdHlOYW1lOiBzdHJpbmcsIG9wdHM/OiBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuaW5jcmVhc2UoKTtcblxuICAgICAgY29uc3QgZW50aXR5U3RvcmUgPSB0aGlzLmdldEVudGl0eVN0b3JlPFQ+KGVudGl0eU5hbWUsIHtjcmVhdGU6IGZhbHNlfSk7XG4gICAgICBpZiAoIWVudGl0eVN0b3JlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIGF3YWl0IGVudGl0eVN0b3JlLmxvYWQoaWQsIG9wdHMpO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmRlY3JlYXNlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbmV4dFZhbHVlKGVudGl0eU9yTmFtZTogc3RyaW5nIHwgYW55KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzLmdldEVudGl0eVN0b3JlKHRoaXMuZGV0ZWN0RW50aXR5TmFtZShlbnRpdHlPck5hbWUpKS5uZXh0VmFsdWUoKTtcbiAgfVxuXG4gIGFzeW5jIG5leHRWYWx1ZXMoZW50aXR5T3JOYW1lOiBzdHJpbmcgfCBhbnksIGVudGl0eUNvdW50OiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGF3YWl0IHRoaXMucmVhZHkoKTtcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgY29uc3QgZW50aXR5TmFtZSA9IHRoaXMuZGV0ZWN0RW50aXR5TmFtZShlbnRpdHlPck5hbWUpO1xuICAgIGNvbnN0IHN0b3JlID0gdGhpcy5nZXRFbnRpdHlTdG9yZShlbnRpdHlOYW1lKTtcbiAgICBjb25zdCBmaXJzdFZhbHVlID0gc3RvcmUubmV4dFZhbHVlKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbnRpdHlDb3VudCAtIDE7IGkrKykge1xuICAgICAgc3RvcmUubmV4dFZhbHVlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2VudGl0aWVzLXN0b3JhZ2VdIFJlc2VydmluZyByYW5nZSBbJHtmaXJzdFZhbHVlfSwke3N0b3JlLmN1cnJlbnRWYWx1ZSgpfV0gZm9yICR7ZW50aXR5TmFtZX0ncyBzZXF1ZW5jZWApO1xuICAgIHJldHVybiBmaXJzdFZhbHVlO1xuICB9XG5cbiAgYXN5bmMgY3VycmVudFZhbHVlKGVudGl0eU9yTmFtZTogc3RyaW5nIHwgYW55KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RW50aXR5U3RvcmUodGhpcy5kZXRlY3RFbnRpdHlOYW1lKGVudGl0eU9yTmFtZSkpLmN1cnJlbnRWYWx1ZSgpO1xuICB9XG5cbiAgYXN5bmMgc2F2ZTxUIGV4dGVuZHMgRW50aXR5PFQ+PihlbnRpdHk6IFQsIG9wdHM/OiB7XG4gICAgZW50aXR5TmFtZT86IHN0cmluZztcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKCFlbnRpdHkpIHJldHVybjsgLy8gc2tpcFxuXG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZS5pbmNyZWFzZSgpO1xuXG4gICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICBjb25zdCBzdG9yZU5hbWUgPSBvcHRzICYmIG9wdHMuZW50aXR5TmFtZSB8fCB0aGlzLmRldGVjdEVudGl0eU5hbWUoZW50aXR5KTtcbiAgICAgIHRoaXMuZ2V0RW50aXR5U3RvcmU8VD4oc3RvcmVOYW1lKVxuICAgICAgICAuc2F2ZShlbnRpdHksIG9wdHMpO1xuXG4gICAgICAvLyBBc2sgdG8gc2F2ZVxuICAgICAgdGhpcy5fJHNhdmUuZW1pdCgpO1xuXG4gICAgICByZXR1cm4gZW50aXR5O1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmRlY3JlYXNlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2F2ZUFsbDxUIGV4dGVuZHMgRW50aXR5PFQ+PihlbnRpdGllczogVFtdLCBvcHRzPzoge1xuICAgIGVudGl0eU5hbWU/OiBzdHJpbmc7XG4gICAgcmVzZXQ/OiBib29sZWFuO1xuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPFRbXT4ge1xuICAgIGlmIChpc0VtcHR5QXJyYXkoZW50aXRpZXMpICYmICghb3B0cyB8fCBvcHRzLnJlc2V0ICE9PSB0cnVlKSkgcmV0dXJuIGVudGl0aWVzOyAvLyBTa2lwIChub3RoaW5nIHRvIHNhdmUpXG5cbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmluY3JlYXNlKCk7XG5cbiAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGVudGl0eU5hbWUgPSBvcHRzICYmIG9wdHMuZW50aXR5TmFtZSB8fCB0aGlzLmRldGVjdEVudGl0eU5hbWUoZW50aXRpZXNbMF0pO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RW50aXR5U3RvcmU8VD4oZW50aXR5TmFtZSkuc2F2ZUFsbChlbnRpdGllcywgb3B0cyk7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuZGVjcmVhc2UoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGU8VCBleHRlbmRzIEVudGl0eTxULCBJRD4sIElEID0gbnVtYmVyPihlbnRpdHk6IFQsIG9wdHM/OiB7XG4gICAgZW50aXR5TmFtZT86IHN0cmluZztcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGlmICghZW50aXR5KSByZXR1cm4gdW5kZWZpbmVkOyAvLyBza2lwXG5cbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlQnlJZChlbnRpdHkuaWQsIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBlbnRpdHlOYW1lOiBvcHRzICYmIG9wdHMuZW50aXR5TmFtZSB8fCB0aGlzLmRldGVjdEVudGl0eU5hbWUoZW50aXR5KVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlQnlJZDxUIGV4dGVuZHMgSUVudGl0eTxULCBJRD4sIElEID0gbnVtYmVyPihpZDogSUQsIG9wdHM6IHtcbiAgICBlbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICBpZiAoIW9wdHMgfHwgaXNOaWxPckJsYW5rKG9wdHMuZW50aXR5TmFtZSkpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBhcmd1bWVudCBcXCdvcHRzXFwnIG9yIFxcJ2VudGl0eU5hbWVcXCcnKTtcbiAgICAvL2lmIChpZCA+PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaWQgYSBsb2NhbCBlbnRpdHkgKG5vdCBhIG5lZ2F0aXZlIG51bWJlcik6ICcgKyBpZCk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuaW5jcmVhc2UoKTtcbiAgICAgIGNvbnN0IGVudGl0eVN0b3JlID0gdGhpcy5nZXRFbnRpdHlTdG9yZTxULCBJRD4ob3B0cy5lbnRpdHlOYW1lLCB7Y3JlYXRlOiBmYWxzZX0pO1xuICAgICAgaWYgKCFlbnRpdHlTdG9yZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgZGVsZXRlZEVudGl0eSA9IGVudGl0eVN0b3JlLmRlbGV0ZShpZCwgb3B0cyk7XG5cbiAgICAgIC8vIElmIHNvbWV0aGluZyBkZWxldGVkXG4gICAgICBpZiAoZGVsZXRlZEVudGl0eSkge1xuXG4gICAgICAgIC8vIE1hcmsgYXMgZGlydHlcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuXG4gICAgICAgIC8vIEFzayB0byBzYXZlXG4gICAgICAgIHRoaXMuXyRzYXZlLmVtaXQoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRlbGV0ZWRFbnRpdHk7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuZGVjcmVhc2UoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVNYW55PFQgZXh0ZW5kcyBFbnRpdHk8VD4+KGlkczogbnVtYmVyW10sIG9wdHM6IHtcbiAgICBlbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8VFtdPiB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIGlmICghb3B0cyB8fCBpc05pbE9yQmxhbmsob3B0cy5lbnRpdHlOYW1lKSkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGFyZ3VtZW50IFxcJ29wdHNcXCcgb3IgXFwnb3B0cy5lbnRpdHlOYW1lXFwnJyk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuaW5jcmVhc2UoKTtcbiAgICAgIGNvbnN0IGVudGl0eVN0b3JlID0gdGhpcy5nZXRFbnRpdHlTdG9yZTxUPihvcHRzLmVudGl0eU5hbWUsIHtjcmVhdGU6IGZhbHNlfSk7XG4gICAgICBpZiAoIWVudGl0eVN0b3JlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAvLyBEbyBkZWxldGlvblxuICAgICAgY29uc3QgZGVsZXRlZEVudGl0aWVzID0gZW50aXR5U3RvcmUuZGVsZXRlTWFueShpZHMsIG9wdHMpO1xuXG4gICAgICAvLyBJZiBzb21ldGhpbmcgZGVsZXRlZFxuICAgICAgaWYgKGRlbGV0ZWRFbnRpdGllcy5sZW5ndGggPiAwKSB7XG5cbiAgICAgICAgLy8gTWFyayBhcyBkaXJ0eVxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgLy8gTWFyayBhcyBzYXZlIG5lZWRcbiAgICAgICAgdGhpcy5fJHNhdmUuZW1pdCgpO1xuXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZWxldGVkRW50aXRpZXM7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZS5kZWNyZWFzZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZyb21UcmFzaDxUIGV4dGVuZHMgRW50aXR5PFQ+PihlbnRpdHk6IFQsIG9wdHM/OiB7XG4gICAgZW50aXR5TmFtZT86IHN0cmluZztcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGlmICghZW50aXR5KSByZXR1cm4gdW5kZWZpbmVkOyAvLyBza2lwXG5cbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlRnJvbVRyYXNoQnlJZChlbnRpdHkuaWQsIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBlbnRpdHlOYW1lOiBvcHRzICYmIG9wdHMuZW50aXR5TmFtZSB8fCB0aGlzLmRldGVjdEVudGl0eU5hbWUoZW50aXR5KVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRnJvbVRyYXNoQnlJZDxUIGV4dGVuZHMgRW50aXR5PFQ+PihpZDogbnVtYmVyLCBvcHRzOiB7XG4gICAgZW50aXR5TmFtZTogc3RyaW5nO1xuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPFQ+IHtcbiAgICBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICBpZiAoIW9wdHMgfHwgaXNOaWxPckJsYW5rKG9wdHMuZW50aXR5TmFtZSkpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBhcmd1bWVudCBcXCdvcHRzXFwnIG9yIFxcJ2VudGl0eU5hbWVcXCcnKTtcblxuICAgIHJldHVybiB0aGlzLmRlbGV0ZUJ5SWQoaWQsIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBlbnRpdHlOYW1lOiBFbnRpdGllc1N0b3JhZ2UuVFJBU0hfUFJFRklYICsgb3B0cy5lbnRpdHlOYW1lXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBtb3ZlVG9UcmFzaDxUIGV4dGVuZHMgRW50aXR5PFQ+PihlbnRpdHk6IFQsIG9wdHM/OiB7XG4gICAgZW50aXR5TmFtZT86IHN0cmluZztcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKCFlbnRpdHkpIHJldHVybiB1bmRlZmluZWQ7IC8vIHNraXBcblxuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICBjb25zdCBlbnRpdHlOYW1lID0gb3B0cyAmJiBvcHRzLmVudGl0eU5hbWUgfHwgdGhpcy5kZXRlY3RFbnRpdHlOYW1lKGVudGl0eSk7XG5cbiAgICAvLyBEZWxldGUgZW50aXR5IGJ5IGlkLCBpZiBleGlzdHNcbiAgICBjb25zdCBlbnRpdHlTdG9yZSA9IHRoaXMuZ2V0RW50aXR5U3RvcmU8VD4oZW50aXR5TmFtZSk7XG4gICAgaWYgKGVudGl0eVN0b3JlKSBlbnRpdHlTdG9yZS5kZWxldGUoZW50aXR5LmlkLCBvcHRzKTtcblxuICAgIC8vIENsZWFuIGlkIChhIG5ldyBpZCB3aWxsIGJlIHNldCBieSB0aGUgdHJhc2ggc3RvcmUpXG4gICAgZW50aXR5LmlkID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gQWRkIHRvIHRyYXNoXG4gICAgY29uc3QgdHJhc2hOYW1lID0gRW50aXRpZXNTdG9yYWdlLlRSQVNIX1BSRUZJWCArIGVudGl0eU5hbWU7XG4gICAgdGhpcy5nZXRFbnRpdHlTdG9yZTxUPih0cmFzaE5hbWUpLnNhdmUoZW50aXR5LCBvcHRzKTtcblxuICAgIHRoaXMuXyRzYXZlLmVtaXQoKTtcblxuICAgIHJldHVybiBlbnRpdHk7XG4gIH1cblxuICBhc3luYyBtb3ZlTWFueVRvVHJhc2g8VCBleHRlbmRzIEVudGl0eTxUPj4oaWRzOiBudW1iZXJbXSwgb3B0czoge1xuICAgIGVudGl0eU5hbWU6IHN0cmluZztcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxUW10+IHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgaWYgKCFvcHRzIHx8IGlzTmlsT3JCbGFuayhvcHRzLmVudGl0eU5hbWUpKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgYXJndW1lbnQgXFwnb3B0cy5lbnRpdHlOYW1lXFwnJyk7XG5cbiAgICBjb25zdCBlbnRpdHlTdG9yZSA9IHRoaXMuZ2V0RW50aXR5U3RvcmU8VD4ob3B0cy5lbnRpdHlOYW1lLCB7Y3JlYXRlOiBmYWxzZX0pO1xuICAgIGlmICghZW50aXR5U3RvcmUpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAvLyBEbyBkZWxldGlvblxuICAgIGNvbnN0IGRlbGV0ZWRFbnRpdGllcyA9IGVudGl0eVN0b3JlLmRlbGV0ZU1hbnkoaWRzLCBvcHRzKTtcblxuICAgIC8vIElmIHNvbWV0aGluZyBkZWxldGVkXG4gICAgaWYgKGRlbGV0ZWRFbnRpdGllcy5sZW5ndGggPiAwKSB7XG5cbiAgICAgIC8vIENsZWFuIGlkcyAobmV3IGlkcyB3aWxsIGJlIHNldCBieSB0aGUgdHJhc2ggc3RvcmUpXG4gICAgICBkZWxldGVkRW50aXRpZXMuZm9yRWFjaChlID0+IGUuaWQgPSB1bmRlZmluZWQpO1xuXG4gICAgICBjb25zdCB0cmFzaE5hbWUgPSBFbnRpdGllc1N0b3JhZ2UuVFJBU0hfUFJFRklYICsgb3B0cy5lbnRpdHlOYW1lO1xuICAgICAgdGhpcy5nZXRFbnRpdHlTdG9yZTxUPih0cmFzaE5hbWUsIHtjcmVhdGU6IHRydWV9KVxuICAgICAgICAuc2F2ZUFsbChkZWxldGVkRW50aXRpZXMsIG9wdHMpO1xuXG4gICAgICAvLyBNYXJrIGFzIGRpcnR5XG4gICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG5cbiAgICAgIC8vIE1hcmsgYXMgc2F2ZSBuZWVkXG4gICAgICB0aGlzLl8kc2F2ZS5lbWl0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWRFbnRpdGllcztcbiAgfVxuXG4gIGFzeW5jIHNhdmVUb1RyYXNoPFQgZXh0ZW5kcyBFbnRpdHk8VD4+KGVudGl0eTogVCwgb3B0cz86IHtcbiAgICBlbnRpdHlOYW1lPzogc3RyaW5nO1xuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIWVudGl0eSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gc2tpcFxuXG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIGNvbnN0IGVudGl0eU5hbWUgPSBvcHRzICYmIG9wdHMuZW50aXR5TmFtZSB8fCB0aGlzLmRldGVjdEVudGl0eU5hbWUoZW50aXR5KTtcbiAgICBjb25zdCB0cmFzaE5hbWUgPSBFbnRpdGllc1N0b3JhZ2UuVFJBU0hfUFJFRklYICsgZW50aXR5TmFtZTtcbiAgICB0aGlzLmdldEVudGl0eVN0b3JlPFQ+KHRyYXNoTmFtZSkuc2F2ZShlbnRpdHksIG9wdHMpO1xuXG4gICAgdGhpcy5fJHNhdmUuZW1pdCgpO1xuXG4gICAgcmV0dXJuIGVudGl0eTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyVHJhc2goZW50aXR5TmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIGNvbnN0IHRyYXNoTmFtZSA9IEVudGl0aWVzU3RvcmFnZS5UUkFTSF9QUkVGSVggKyBlbnRpdHlOYW1lO1xuICAgIGNvbnN0IGVudGl0eVN0b3JlID0gdGhpcy5nZXRFbnRpdHlTdG9yZSh0cmFzaE5hbWUsIHtjcmVhdGU6IGZhbHNlfSk7XG4gICAgaWYgKCFlbnRpdHlTdG9yZSkgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICBlbnRpdHlTdG9yZS5yZXNldCgpO1xuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuXyRzYXZlLmVtaXQoKTtcbiAgfVxuXG4gIHBlcnNpc3Qob3B0cyA9IHtza2lwSWZQcmlzdGluZTogdHJ1ZX0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBTa2lwIGlmIHByaXN0aW5lXG4gICAgaWYgKG9wdHMuc2tpcElmUHJpc3RpbmUgJiYgIXRoaXMuX2RpcnR5KSAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgcmV0dXJuIHRoaXMuc3RvcmVMb2NhbGx5KG9wdHMpO1xuICB9XG5cbiAgYXN5bmMgbmdPblN0YXJ0KCk6IFByb21pc2U8RW50aXR5U3RvcmFnZU1hcD4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc29sZS5pbmZvKGBbZW50aXRpZXMtc3RvcmFnZV0gU3RhcnRpbmcgZW50aXR5IHN0b3JhZ2UuLi5gKTtcblxuICAgIC8vIFJlc3RvcmUgc2VxdWVuY2VzXG4gICAgYXdhaXQgdGhpcy5yZXN0b3JlTG9jYWxseSgpO1xuXG4gICAgLy8gU3RhcnQgYSBzYXZlIHRpbWVyXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIG1lcmdlKFxuICAgICAgICB0aGlzLl8kc2F2ZSxcbiAgICAgICAgdGltZXIodGhpcy5fc2F2ZVRpbWVyUGVyaW9kLCB0aGlzLl9zYXZlVGltZXJQZXJpb2QpXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgLy8gQXZvaWQgdG8gbWFueSBjYWxsIChlLmcuIHdoZW4gJHNhdmUgQU5EIHRpbWVyIGFyZSB0cmlnZ2VyZWRcbiAgICAgICAgdGhyb3R0bGVUaW1lKHRoaXMuX3NhdmVUaW1lclBlcmlvZClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zdG9yZUxvY2FsbHkoKSlcbiAgICApO1xuICAgIGNvbnNvbGUuaW5mbyhgW2VudGl0aWVzLXN0b3JhZ2VdIFN0YXJ0aW5nIFtPS10gaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG5cbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBuZ09uU3RvcCgpIHtcbiAgICBpZiAodGhpcy5kaXJ0eSkge1xuICAgICAgYXdhaXQgdGhpcy5zdG9yZUxvY2FsbHkoKTtcbiAgICB9XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByb3RlY3RlZCBnZXRFbnRpdHlTdG9yZTxUIGV4dGVuZHMgSUVudGl0eTxULCBJRD4sIElEID0gbnVtYmVyPihuYW1lOiBzdHJpbmcsIG9wdHM/OiB7XG4gICAgY3JlYXRlPzogYm9vbGVhbjtcbiAgfSk6IEVudGl0eVN0b3JlPFQsIElEPiB7XG4gICAgbGV0IHN0b3JlID0gdGhpcy5fZGF0YVtuYW1lXTtcbiAgICBpZiAoIXN0b3JlICYmICghb3B0cyB8fCBvcHRzLmNyZWF0ZSAhPT0gZmFsc2UpKSB7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtlbnRpdGllcy1zdG9yYWdlXSBDcmVhdGluZyBzdG9yZSAke25hbWV9YCk7XG4gICAgICBjb25zdCB0eXBlUG9saWN5ID0gdGhpcy5fdHlwZVBvbGljaWVzW25hbWVdO1xuICAgICAgc3RvcmUgPSBuZXcgRW50aXR5U3RvcmU8VCwgSUQ+KG5hbWUsIHRoaXMuc3RvcmFnZSwgdHlwZVBvbGljeSk7XG4gICAgICB0aGlzLl9kYXRhW25hbWVdID0gc3RvcmU7XG4gICAgfVxuICAgIHJldHVybiBzdG9yZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZXRlY3RFbnRpdHlOYW1lKGVudGl0eU9yTmFtZTogc3RyaW5nIHwgRW50aXR5PGFueSwgYW55Pik6IHN0cmluZyB7XG4gICAgaWYgKCFlbnRpdHlPck5hbWUpIHRocm93IEVycm9yKCdVbmFibGUgdG8gZGV0ZWN0IGVudGl0eU5hbWUgb2Ygb2JqZWN0OiAnICsgZW50aXR5T3JOYW1lKTtcbiAgICBpZiAodHlwZW9mIGVudGl0eU9yTmFtZSA9PT0gJ3N0cmluZycpIHJldHVybiBlbnRpdHlPck5hbWU7XG4gICAgaWYgKGVudGl0eU9yTmFtZS5fX3R5cGVuYW1lKSB7XG4gICAgICByZXR1cm4gZW50aXR5T3JOYW1lLl9fdHlwZW5hbWU7XG4gICAgfVxuICAgIHJldHVybiBlbnRpdHlPck5hbWUuY29uc3RydWN0b3IubmFtZSArICdWTyc7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVzdG9yZUxvY2FsbHkoKSB7XG5cbiAgICBjb25zdCBlbnRpdHlOYW1lcyA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQoRU5USVRJRVNfU1RPUkFHRV9LRVlfUFJFRklYKTtcbiAgICBpZiAoIWVudGl0eU5hbWVzKSByZXR1cm47XG5cbiAgICBjb25zdCBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5pbmZvKCdbZW50aXRpZXMtc3RvcmFnZV0gUmVzdG9yaW5nIGVudGl0aWVzLi4uJyk7XG4gICAgY29uc3QgZW50aXRpZXNDb3VudCA9IChhd2FpdCBQcm9taXNlLmFsbDxudW1iZXI+KFxuICAgICAgZW50aXR5TmFtZXNcbiAgICAgICAgLm1hcChuYW1lID0+IHRoaXMuZ2V0RW50aXR5U3RvcmU8YW55PihuYW1lKSlcbiAgICAgICAgLm1hcCgoc3RvcmU6IEVudGl0eVN0b3JlPGFueT4pID0+IHN0b3JlLnJlc3RvcmUoKSkpXG4gICAgKS5yZWR1Y2UoKHJlcywgY291bnQpID0+IChyZXMgKyBjb3VudCksIDApO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbZW50aXRpZXMtc3RvcmFnZV0gUmVzdG9yaW5nIGVudGl0aWVzIFtPS10gJHtlbnRpdGllc0NvdW50fSBlbnRpdGllcyBmb3VuZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBzdG9yZUxvY2FsbHkob3B0cyA9IHtza2lwSWZQcmlzdGluZTogdHJ1ZX0pOiBQcm9taXNlPGFueT4ge1xuICAgIGlmIChvcHRzLnNraXBJZlByaXN0aW5lICYmICF0aGlzLmRpcnR5KSByZXR1cm47IC8vIHNraXBcblxuICAgIC8vIFNhdmluZyBwcm9ncmVzczogcmVwb3J0IHRoaXMgc2F2ZSBsYXRlclxuICAgIGlmICh0aGlzLl9zYXZpbmcpIHtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2VudGl0aWVzLXN0b3JhZ2VdIFByZXZpb3VzIHBlcnNpc3Qgbm90IGZpbmlzaGVkLiBXYWl0aW5nLi4uJyk7XG4gICAgICB0aGlzLl8kc2F2ZS5lbWl0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc2F2aW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9kaXJ0eSA9IGZhbHNlO1xuICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmluY3JlYXNlKCk7XG4gICAgY29uc3QgZW50aXR5TmFtZXMgPSB0aGlzLl9kYXRhICYmIE9iamVjdC5rZXlzKHRoaXMuX2RhdGEpIHx8IFtdO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tlbnRpdGllcy1zdG9yYWdlXSBQZXJzaXN0aW5nLi4uJyk7XG5cbiAgICBsZXQgY3VycmVudEVudGl0eU5hbWU7XG4gICAgcmV0dXJuIGNoYWluUHJvbWlzZXMoXG4gICAgICBlbnRpdHlOYW1lcy5tYXAoZW50aXR5TmFtZSA9PiAoKSA9PiB7XG4gICAgICAgICAgY3VycmVudEVudGl0eU5hbWUgPSBlbnRpdHlOYW1lO1xuICAgICAgICAgIGNvbnN0IGVudGl0eVN0b3JlID0gdGhpcy5nZXRFbnRpdHlTdG9yZShlbnRpdHlOYW1lLCB7Y3JlYXRlOiBmYWxzZX0pO1xuXG4gICAgICAgICAgaWYgKCFlbnRpdHlTdG9yZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBbZW50aXRpZXMtc3RvcmFnZV0gUGVyc2lzdGluZyAke2VudGl0eU5hbWV9OiBzdG9yZSBub3QgZm91bmQhYCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU0tpcCBzdG9yZSBpZiBwcmlzdGluZVxuICAgICAgICAgIGlmIChvcHRzLnNraXBJZlByaXN0aW5lICYmICFlbnRpdHlTdG9yZS5kaXJ0eSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgICAgICAgLy8gUGVyc2lzdCBzdG9yZVxuICAgICAgICAgIHJldHVybiBlbnRpdHlTdG9yZS5wZXJzaXN0KG9wdHMpXG4gICAgICAgICAgICAudGhlbihjb3VudCA9PiB7XG4gICAgICAgICAgICAgIC8vIElmIG5vIGVudGl0eSBmb3VuZCwgcmVtb3ZlIGZyb20gdGhlIGVudGl0eSBuYW1lcyBhcnJheVxuICAgICAgICAgICAgICBpZiAoIWNvdW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5TmFtZUluZGV4ID0gZW50aXR5TmFtZXMuZmluZEluZGV4KGUgPT4gZSA9PT0gZW50aXR5TmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGVudGl0eU5hbWVJbmRleCAhPT0gLTEpIGVudGl0eU5hbWVzLnNwbGljZShlbnRpdHlOYW1lSW5kZXgsIDEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgY3VycmVudEVudGl0eU5hbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmV0dXJuIGlzRW1wdHlBcnJheShlbnRpdHlOYW1lcykgP1xuICAgICAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZShFTlRJVElFU19TVE9SQUdFX0tFWV9QUkVGSVgpIDpcbiAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoRU5USVRJRVNfU1RPUkFHRV9LRVlfUFJFRklYLCBlbnRpdHlOYW1lcyk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtlbnRpdGllcy1zdG9yYWdlXSBQZXJzaXN0aW5nIFtPS10gJHtlbnRpdHlOYW1lcy5sZW5ndGh9IHN0b3JlcyBzYXZlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXMuLi5gKTtcbiAgICAgICAgdGhpcy5fc2F2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmRlY3JlYXNlKCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIHRoaXMuX3NhdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZS5kZWNyZWFzZSgpO1xuICAgICAgICBpZiAoY3VycmVudEVudGl0eU5hbWUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBbZW50aXRpZXMtc3RvcmFnZV0gRXJyb3Igd2hpbGUgcGVyc2lzdGluZyAke2N1cnJlbnRFbnRpdHlOYW1lfWAsIGVycik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgW2VudGl0aWVzLXN0b3JhZ2VdIEVycm9yIHdoaWxlIHBlcnNpc3Rpbmc6ICR7ZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycn1gLCBlcnIpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH0pO1xuICB9XG5cbn1cbiJdfQ==
452
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXRpZXMtc3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3N0b3JhZ2UvZW50aXRpZXMtc3RvcmFnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBYyxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5RCxPQUFPLEVBQUMsWUFBWSxFQUFFLFlBQVksRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBRXJFLE9BQU8sRUFBQywyQkFBMkIsRUFBNEIsV0FBVyxFQUF3QixNQUFNLHNCQUFzQixDQUFDO0FBQy9ILE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBQyxXQUFXLEVBQUUsV0FBVyxFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFDbEYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7QUFPMUQsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQUcsSUFBSSxjQUFjLENBQThCLDBCQUEwQixDQUFDLENBQUM7QUFFaEQsQ0FBQztBQUc1RSxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxnQkFBa0M7SUFnQnJFLFlBQ1UsUUFB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O1lBQ3JDLENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxpQkFBaUIsRUFBRTtvQkFDckIsT0FBTyxDQUFDLEtBQUssQ0FBQyw2Q0FBNkMsaUJBQWlCLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDdEY7cUJBQU07b0JBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7aUJBQy9GO2dCQUNELE1BQU0sR0FBRyxDQUFDO1lBQ1osQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0tBQUE7O0FBaGdCZSw0QkFBWSxHQUFHLFFBQVEsQ0FBQztBQUN4Qiw2QkFBYSxHQUFHLFNBQVMsQ0FBQzs7O1lBSjNDLFVBQVUsU0FBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7OztZQXBCeEIsUUFBUTtZQU1SLGtCQUFrQjtZQVBsQixPQUFPO1lBUVAsV0FBVyx1QkFrQ2QsTUFBTSxTQUFDLFdBQVc7NENBQ2xCLFFBQVEsWUFBSSxNQUFNLFNBQUMsK0JBQStCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtkZWZlciwgbWVyZ2UsIE9ic2VydmFibGUsIHRpbWVyfSBmcm9tICdyeGpzJztcbmltcG9ydCB7RXZlbnRFbWl0dGVyLCBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJ0Bpb25pYy9zdG9yYWdlJztcbmltcG9ydCB7UGxhdGZvcm19IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7Zmlyc3QsIHN3aXRjaE1hcCwgdGhyb3R0bGVUaW1lfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0VudGl0eSwgSUVudGl0eX0gZnJvbSAnLi4vbW9kZWwvZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7aXNFbXB0eUFycmF5LCBpc05pbE9yQmxhbmt9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtMb2FkUmVzdWx0fSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtFTlRJVElFU19TVE9SQUdFX0tFWV9QUkVGSVgsIEVudGl0eVN0b3JhZ2VMb2FkT3B0aW9ucywgRW50aXR5U3RvcmUsIEVudGl0eVN0b3JlVHlwZVBvbGljeX0gZnJvbSAnLi9lbnRpdHktc3RvcmUuY2xhc3MnO1xuaW1wb3J0IHtQcm9ncmVzc0JhclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9wcm9ncmVzcy1iYXIuc2VydmljZSc7XG5pbXBvcnQge0Vudmlyb25tZW50LCBFTlZJUk9OTUVOVH0gZnJvbSAnLi4vLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7U3RhcnRhYmxlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7Y2hhaW5Qcm9taXNlc30gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0aWVzU3RvcmFnZVR5cGVQb2xpY2llcyB7XG4gIFtfX3R5cGVuYW1lOiBzdHJpbmddOiBFbnRpdHlTdG9yZVR5cGVQb2xpY3k7XG59XG5cbmV4cG9ydCBjb25zdCBBUFBfTE9DQUxfU1RPUkFHRV9UWVBFX1BPTElDSUVTID0gbmV3IEluamVjdGlvblRva2VuPEVudGl0aWVzU3RvcmFnZVR5cGVQb2xpY2llcz4oJ2xvY2FsU3RvcmFnZVR5cGVQb2xpY2llcycpO1xuXG5kZWNsYXJlIGludGVyZmFjZSBFbnRpdHlTdG9yYWdlTWFwIHsgW2tleTogc3RyaW5nXTogRW50aXR5U3RvcmU8YW55LCBhbnk+IH07XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIEVudGl0aWVzU3RvcmFnZSBleHRlbmRzIFN0YXJ0YWJsZVNlcnZpY2U8RW50aXR5U3RvcmFnZU1hcD4ge1xuXG4gIHN0YXRpYyByZWFkb25seSBUUkFTSF9QUkVGSVggPSAnVHJhc2gjJztcbiAgc3RhdGljIHJlYWRvbmx5IFJFTU9URV9QUkVGSVggPSAnUmVtb3RlIyc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdHlwZVBvbGljaWVzOiBFbnRpdGllc1N0b3JhZ2VUeXBlUG9saWNpZXM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NhdmVUaW1lclBlcmlvZDtcblxuICBwcml2YXRlIF8kc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXIodHJ1ZSk7XG4gIHByaXZhdGUgX2RpcnR5ID0gZmFsc2U7XG4gIHByaXZhdGUgX3NhdmluZyA9IGZhbHNlO1xuXG4gIGdldCBkaXJ0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlydHkgfHwgT2JqZWN0LnZhbHVlcyh0aGlzLl9kYXRhKS5zb21lKHN0b3JlID0+IHN0b3JlLmRpcnR5KTtcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBwcml2YXRlIHByb2dyZXNzQmFyU2VydmljZTogUHJvZ3Jlc3NCYXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmFnZTogU3RvcmFnZSxcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0xPQ0FMX1NUT1JBR0VfVFlQRV9QT0xJQ0lFUykgdHlwZVBvbGljaWVzOiBFbnRpdGllc1N0b3JhZ2VUeXBlUG9saWNpZXNcbiAgKSB7XG4gICAgc3VwZXIocGxhdGZvcm0pO1xuICAgIHRoaXMuX3R5cGVQb2xpY2llcyA9IHR5cGVQb2xpY2llcyB8fCB7fTtcbiAgICB0aGlzLl9zYXZlVGltZXJQZXJpb2QgPSBlbnZpcm9ubWVudC5zdG9yYWdlU2F2ZVBlcmlvZE1zIHx8IDEwMDAwIC8qID0gMTBzICovO1xuICAgIHRoaXMuX2RhdGEgPSB7fTtcblxuICAgIC8vIEZvciBERVYgb25seVxuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbZW50aXRpZXMtc3RvcmFnZV0gQ3JlYXRpbmcgc2VydmljZScpO1xuICB9XG5cblxuICBhc3luYyBuZ09uU3RhcnQoKTogUHJvbWlzZTxFbnRpdHlTdG9yYWdlTWFwPiB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zb2xlLmluZm8oYFtlbnRpdGllcy1zdG9yYWdlXSBTdGFydGluZyBlbnRpdHkgc3RvcmFnZS4uLmApO1xuXG4gICAgLy8gUmVzdG9yZSBzdG9yZXNcbiAgICBhd2FpdCB0aGlzLnJlc3RvcmVMb2NhbGx5KCk7XG5cbiAgICAvLyBTdGFydCBhIHNhdmUgdGltZXJcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgbWVyZ2UoXG4gICAgICAgIHRoaXMuXyRzYXZlLFxuICAgICAgICB0aW1lcih0aGlzLl9zYXZlVGltZXJQZXJpb2QsIHRoaXMuX3NhdmVUaW1lclBlcmlvZClcbiAgICAgIClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy8gQXZvaWQgdG8gbWFueSBjYWxsIChlLmcuIHdoZW4gJHNhdmUgQU5EIHRpbWVyIGFyZSB0cmlnZ2VyZWRcbiAgICAgICAgICB0aHJvdHRsZVRpbWUodGhpcy5fc2F2ZVRpbWVyUGVyaW9kKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zdG9yZUxvY2FsbHkoe3NraXBJZlByaXN0aW5lOiB0cnVlfSkpXG4gICAgKTtcblxuICAgIC8vIFNhdmUsIHdoZW4gcGxhdGZvcm0gaXMgaW4gcGF1c2VcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5wbGF0Zm9ybS5wYXVzZS5zdWJzY3JpYmUoYXN5bmMgKCkgID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKGBbZW50aXRpZXMtc3RvcmFnZV0gUGxhdGZvcm0gd2lsbCBwYXVzZTogc2F2aW5nLi4uYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcmVMb2NhbGx5KHtza2lwSWZQcmlzdGluZTogdHJ1ZX0pO1xuICAgICAgICBjb25zb2xlLndhcm4oYFtlbnRpdGllcy1zdG9yYWdlXSBQbGF0Zm9ybSB3aWxsIHBhdXNlOiBzYXZpbmcgW09LXWApO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc29sZS5pbmZvKGBbZW50aXRpZXMtc3RvcmFnZV0gU3RhcnRpbmcgW09LXSBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgKTtcblxuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25TdG9wKCkge1xuICAgIGF3YWl0IHRoaXMuc3RvcmVMb2NhbGx5KHtza2lwSWZQcmlzdGluZTogdHJ1ZX0pO1xuICB9XG5cbiAgd2F0Y2hBbGw8VCBleHRlbmRzIEVudGl0eTxUPj4oZW50aXR5TmFtZTogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ/OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT86IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0Qnk/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydERpcmVjdGlvbj86IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFzaD86IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyPzogKFQpID0+IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHM/OiBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnMpOiBPYnNlcnZhYmxlPExvYWRSZXN1bHQ8VD4+IHtcbiAgICAvLyBNYWtlIHN1cmUgc3RvcmUgaXMgcmVhZHlcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgcmV0dXJuIGRlZmVyKCgpID0+IHRoaXMucmVhZHkoKSlcbiAgICAgICAgLnBpcGUoc3dpdGNoTWFwKCgpID0+IHRoaXMud2F0Y2hBbGw8VD4oZW50aXR5TmFtZSwgdmFyaWFibGVzLCBvcHRzKSkpOyAvLyBMb29wXG4gICAgfVxuXG4gICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuaW5jcmVhc2UoKTtcbiAgICBjb25zdCBzdG9yZU5hbWUgPSB2YXJpYWJsZXMgJiYgdmFyaWFibGVzLnRyYXNoID8gKEVudGl0aWVzU3RvcmFnZS5UUkFTSF9QUkVGSVggKyBlbnRpdHlOYW1lKSA6IGVudGl0eU5hbWU7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5nZXRFbnRpdHlTdG9yZTxUPihzdG9yZU5hbWUsIHtjcmVhdGU6IHRydWV9KVxuICAgICAgLndhdGNoQWxsKHZhcmlhYmxlcywgb3B0cyk7XG5cbiAgICByZXN1bHQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuZGVjcmVhc2UoKSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgYXN5bmMgbG9hZEFsbDxUIGV4dGVuZHMgRW50aXR5PFQ+PihlbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzPzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PzogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT86IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRCeT86IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnREaXJlY3Rpb24/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI/OiAoVCkgPT4gYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHM/OiBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnMpOiBQcm9taXNlPExvYWRSZXN1bHQ8VD4+IHtcblxuICAgIC8vIE1ha2Ugc3VyZSBzdG9yZSBpcyByZWFkeVxuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuaW5jcmVhc2UoKTtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2VudGl0aWVzLXN0b3JhZ2VdIExvYWRpbmcgJHtlbnRpdHlOYW1lfS4uLmApO1xuXG4gICAgICBjb25zdCBlbnRpdHlTdG9yZSA9IHRoaXMuZ2V0RW50aXR5U3RvcmU8VD4oZW50aXR5TmFtZSwge2NyZWF0ZTogZmFsc2V9KTtcbiAgICAgIGlmICghZW50aXR5U3RvcmUpIHJldHVybiB7ZGF0YTogW10sIHRvdGFsOiAwfTsgLy8gTm8gc3RvcmUgZm9yIHRoaXMgZW50aXR5IG5hbWVcblxuICAgICAgcmV0dXJuIGVudGl0eVN0b3JlLmxvYWRBbGwodmFyaWFibGVzLCBvcHRzKTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZS5kZWNyZWFzZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvYWQ8VCBleHRlbmRzIEVudGl0eTxUPj4oaWQ6IG51bWJlciwgZW50aXR5TmFtZTogc3RyaW5nLCBvcHRzPzogRW50aXR5U3RvcmFnZUxvYWRPcHRpb25zKTogUHJvbWlzZTxUPiB7XG4gICAgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmluY3JlYXNlKCk7XG5cbiAgICAgIGNvbnN0IGVudGl0eVN0b3JlID0gdGhpcy5nZXRFbnRpdHlTdG9yZTxUPihlbnRpdHlOYW1lLCB7Y3JlYXRlOiBmYWxzZX0pO1xuICAgICAgaWYgKCFlbnRpdHlTdG9yZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBhd2FpdCBlbnRpdHlTdG9yZS5sb2FkKGlkLCBvcHRzKTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZS5kZWNyZWFzZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG5leHRWYWx1ZShlbnRpdHlPck5hbWU6IHN0cmluZyB8IGFueSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5nZXRFbnRpdHlTdG9yZSh0aGlzLmRldGVjdEVudGl0eU5hbWUoZW50aXR5T3JOYW1lKSkubmV4dFZhbHVlKCk7XG4gIH1cblxuICBhc3luYyBuZXh0VmFsdWVzKGVudGl0eU9yTmFtZTogc3RyaW5nIHwgYW55LCBlbnRpdHlDb3VudDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgIGNvbnN0IGVudGl0eU5hbWUgPSB0aGlzLmRldGVjdEVudGl0eU5hbWUoZW50aXR5T3JOYW1lKTtcbiAgICBjb25zdCBzdG9yZSA9IHRoaXMuZ2V0RW50aXR5U3RvcmUoZW50aXR5TmFtZSk7XG4gICAgY29uc3QgZmlyc3RWYWx1ZSA9IHN0b3JlLm5leHRWYWx1ZSgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZW50aXR5Q291bnQgLSAxOyBpKyspIHtcbiAgICAgIHN0b3JlLm5leHRWYWx1ZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtlbnRpdGllcy1zdG9yYWdlXSBSZXNlcnZpbmcgcmFuZ2UgWyR7Zmlyc3RWYWx1ZX0sJHtzdG9yZS5jdXJyZW50VmFsdWUoKX1dIGZvciAke2VudGl0eU5hbWV9J3Mgc2VxdWVuY2VgKTtcbiAgICByZXR1cm4gZmlyc3RWYWx1ZTtcbiAgfVxuXG4gIGFzeW5jIGN1cnJlbnRWYWx1ZShlbnRpdHlPck5hbWU6IHN0cmluZyB8IGFueSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgIHJldHVybiB0aGlzLmdldEVudGl0eVN0b3JlKHRoaXMuZGV0ZWN0RW50aXR5TmFtZShlbnRpdHlPck5hbWUpKS5jdXJyZW50VmFsdWUoKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmU8VCBleHRlbmRzIEVudGl0eTxUPj4oZW50aXR5OiBULCBvcHRzPzoge1xuICAgIGVudGl0eU5hbWU/OiBzdHJpbmc7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGlmICghZW50aXR5KSByZXR1cm47IC8vIHNraXBcblxuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuaW5jcmVhc2UoKTtcblxuICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgY29uc3Qgc3RvcmVOYW1lID0gb3B0cyAmJiBvcHRzLmVudGl0eU5hbWUgfHwgdGhpcy5kZXRlY3RFbnRpdHlOYW1lKGVudGl0eSk7XG4gICAgICB0aGlzLmdldEVudGl0eVN0b3JlPFQ+KHN0b3JlTmFtZSlcbiAgICAgICAgLnNhdmUoZW50aXR5LCBvcHRzKTtcblxuICAgICAgLy8gQXNrIHRvIHNhdmVcbiAgICAgIHRoaXMuXyRzYXZlLmVtaXQoKTtcblxuICAgICAgcmV0dXJuIGVudGl0eTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZS5kZWNyZWFzZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmVBbGw8VCBleHRlbmRzIEVudGl0eTxUPj4oZW50aXRpZXM6IFRbXSwgb3B0cz86IHtcbiAgICBlbnRpdHlOYW1lPzogc3RyaW5nO1xuICAgIHJlc2V0PzogYm9vbGVhbjtcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxUW10+IHtcbiAgICBpZiAoaXNFbXB0eUFycmF5KGVudGl0aWVzKSAmJiAoIW9wdHMgfHwgb3B0cy5yZXNldCAhPT0gdHJ1ZSkpIHJldHVybiBlbnRpdGllczsgLy8gU2tpcCAobm90aGluZyB0byBzYXZlKVxuXG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZS5pbmNyZWFzZSgpO1xuXG4gICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICBjb25zdCBlbnRpdHlOYW1lID0gb3B0cyAmJiBvcHRzLmVudGl0eU5hbWUgfHwgdGhpcy5kZXRlY3RFbnRpdHlOYW1lKGVudGl0aWVzWzBdKTtcbiAgICAgIHJldHVybiB0aGlzLmdldEVudGl0eVN0b3JlPFQ+KGVudGl0eU5hbWUpLnNhdmVBbGwoZW50aXRpZXMsIG9wdHMpO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmRlY3JlYXNlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlPFQgZXh0ZW5kcyBFbnRpdHk8VCwgSUQ+LCBJRCA9IG51bWJlcj4oZW50aXR5OiBULCBvcHRzPzoge1xuICAgIGVudGl0eU5hbWU/OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIWVudGl0eSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gc2tpcFxuXG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIHJldHVybiB0aGlzLmRlbGV0ZUJ5SWQoZW50aXR5LmlkLCB7XG4gICAgICAuLi5vcHRzLFxuICAgICAgZW50aXR5TmFtZTogb3B0cyAmJiBvcHRzLmVudGl0eU5hbWUgfHwgdGhpcy5kZXRlY3RFbnRpdHlOYW1lKGVudGl0eSlcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUJ5SWQ8VCBleHRlbmRzIElFbnRpdHk8VCwgSUQ+LCBJRCA9IG51bWJlcj4oaWQ6IElELCBvcHRzOiB7XG4gICAgZW50aXR5TmFtZTogc3RyaW5nO1xuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgaWYgKCFvcHRzIHx8IGlzTmlsT3JCbGFuayhvcHRzLmVudGl0eU5hbWUpKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgYXJndW1lbnQgXFwnb3B0c1xcJyBvciBcXCdlbnRpdHlOYW1lXFwnJyk7XG4gICAgLy9pZiAoaWQgPj0gMCkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGlkIGEgbG9jYWwgZW50aXR5IChub3QgYSBuZWdhdGl2ZSBudW1iZXIpOiAnICsgaWQpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmluY3JlYXNlKCk7XG4gICAgICBjb25zdCBlbnRpdHlTdG9yZSA9IHRoaXMuZ2V0RW50aXR5U3RvcmU8VCwgSUQ+KG9wdHMuZW50aXR5TmFtZSwge2NyZWF0ZTogZmFsc2V9KTtcbiAgICAgIGlmICghZW50aXR5U3RvcmUpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGRlbGV0ZWRFbnRpdHkgPSBlbnRpdHlTdG9yZS5kZWxldGUoaWQsIG9wdHMpO1xuXG4gICAgICAvLyBJZiBzb21ldGhpbmcgZGVsZXRlZFxuICAgICAgaWYgKGRlbGV0ZWRFbnRpdHkpIHtcblxuICAgICAgICAvLyBNYXJrIGFzIGRpcnR5XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcblxuICAgICAgICAvLyBBc2sgdG8gc2F2ZVxuICAgICAgICB0aGlzLl8kc2F2ZS5lbWl0KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZWxldGVkRW50aXR5O1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmRlY3JlYXNlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlTWFueTxUIGV4dGVuZHMgRW50aXR5PFQ+PihpZHM6IG51bWJlcltdLCBvcHRzOiB7XG4gICAgZW50aXR5TmFtZTogc3RyaW5nO1xuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPFRbXT4ge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICBpZiAoIW9wdHMgfHwgaXNOaWxPckJsYW5rKG9wdHMuZW50aXR5TmFtZSkpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBhcmd1bWVudCBcXCdvcHRzXFwnIG9yIFxcJ29wdHMuZW50aXR5TmFtZVxcJycpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmluY3JlYXNlKCk7XG4gICAgICBjb25zdCBlbnRpdHlTdG9yZSA9IHRoaXMuZ2V0RW50aXR5U3RvcmU8VD4ob3B0cy5lbnRpdHlOYW1lLCB7Y3JlYXRlOiBmYWxzZX0pO1xuICAgICAgaWYgKCFlbnRpdHlTdG9yZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgLy8gRG8gZGVsZXRpb25cbiAgICAgIGNvbnN0IGRlbGV0ZWRFbnRpdGllcyA9IGVudGl0eVN0b3JlLmRlbGV0ZU1hbnkoaWRzLCBvcHRzKTtcblxuICAgICAgLy8gSWYgc29tZXRoaW5nIGRlbGV0ZWRcbiAgICAgIGlmIChkZWxldGVkRW50aXRpZXMubGVuZ3RoID4gMCkge1xuXG4gICAgICAgIC8vIE1hcmsgYXMgZGlydHlcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuXG4gICAgICAgIC8vIE1hcmsgYXMgc2F2ZSBuZWVkXG4gICAgICAgIHRoaXMuXyRzYXZlLmVtaXQoKTtcblxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVsZXRlZEVudGl0aWVzO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuZGVjcmVhc2UoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVGcm9tVHJhc2g8VCBleHRlbmRzIEVudGl0eTxUPj4oZW50aXR5OiBULCBvcHRzPzoge1xuICAgIGVudGl0eU5hbWU/OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIWVudGl0eSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gc2tpcFxuXG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIHJldHVybiB0aGlzLmRlbGV0ZUZyb21UcmFzaEJ5SWQoZW50aXR5LmlkLCB7XG4gICAgICAuLi5vcHRzLFxuICAgICAgZW50aXR5TmFtZTogb3B0cyAmJiBvcHRzLmVudGl0eU5hbWUgfHwgdGhpcy5kZXRlY3RFbnRpdHlOYW1lKGVudGl0eSlcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZyb21UcmFzaEJ5SWQ8VCBleHRlbmRzIEVudGl0eTxUPj4oaWQ6IG51bWJlciwgb3B0czoge1xuICAgIGVudGl0eU5hbWU6IHN0cmluZztcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxUPiB7XG4gICAgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgaWYgKCFvcHRzIHx8IGlzTmlsT3JCbGFuayhvcHRzLmVudGl0eU5hbWUpKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgYXJndW1lbnQgXFwnb3B0c1xcJyBvciBcXCdlbnRpdHlOYW1lXFwnJyk7XG5cbiAgICByZXR1cm4gdGhpcy5kZWxldGVCeUlkKGlkLCB7XG4gICAgICAuLi5vcHRzLFxuICAgICAgZW50aXR5TmFtZTogRW50aXRpZXNTdG9yYWdlLlRSQVNIX1BSRUZJWCArIG9wdHMuZW50aXR5TmFtZVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbW92ZVRvVHJhc2g8VCBleHRlbmRzIEVudGl0eTxUPj4oZW50aXR5OiBULCBvcHRzPzoge1xuICAgIGVudGl0eU5hbWU/OiBzdHJpbmc7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGlmICghZW50aXR5KSByZXR1cm4gdW5kZWZpbmVkOyAvLyBza2lwXG5cbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgY29uc3QgZW50aXR5TmFtZSA9IG9wdHMgJiYgb3B0cy5lbnRpdHlOYW1lIHx8IHRoaXMuZGV0ZWN0RW50aXR5TmFtZShlbnRpdHkpO1xuXG4gICAgLy8gRGVsZXRlIGVudGl0eSBieSBpZCwgaWYgZXhpc3RzXG4gICAgY29uc3QgZW50aXR5U3RvcmUgPSB0aGlzLmdldEVudGl0eVN0b3JlPFQ+KGVudGl0eU5hbWUpO1xuICAgIGlmIChlbnRpdHlTdG9yZSkgZW50aXR5U3RvcmUuZGVsZXRlKGVudGl0eS5pZCwgb3B0cyk7XG5cbiAgICAvLyBDbGVhbiBpZCAoYSBuZXcgaWQgd2lsbCBiZSBzZXQgYnkgdGhlIHRyYXNoIHN0b3JlKVxuICAgIGVudGl0eS5pZCA9IHVuZGVmaW5lZDtcblxuICAgIC8vIEFkZCB0byB0cmFzaFxuICAgIGNvbnN0IHRyYXNoTmFtZSA9IEVudGl0aWVzU3RvcmFnZS5UUkFTSF9QUkVGSVggKyBlbnRpdHlOYW1lO1xuICAgIHRoaXMuZ2V0RW50aXR5U3RvcmU8VD4odHJhc2hOYW1lKS5zYXZlKGVudGl0eSwgb3B0cyk7XG5cbiAgICB0aGlzLl8kc2F2ZS5lbWl0KCk7XG5cbiAgICByZXR1cm4gZW50aXR5O1xuICB9XG5cbiAgYXN5bmMgbW92ZU1hbnlUb1RyYXNoPFQgZXh0ZW5kcyBFbnRpdHk8VD4+KGlkczogbnVtYmVyW10sIG9wdHM6IHtcbiAgICBlbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8VFtdPiB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIGlmICghb3B0cyB8fCBpc05pbE9yQmxhbmsob3B0cy5lbnRpdHlOYW1lKSkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGFyZ3VtZW50IFxcJ29wdHMuZW50aXR5TmFtZVxcJycpO1xuXG4gICAgY29uc3QgZW50aXR5U3RvcmUgPSB0aGlzLmdldEVudGl0eVN0b3JlPFQ+KG9wdHMuZW50aXR5TmFtZSwge2NyZWF0ZTogZmFsc2V9KTtcbiAgICBpZiAoIWVudGl0eVN0b3JlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgLy8gRG8gZGVsZXRpb25cbiAgICBjb25zdCBkZWxldGVkRW50aXRpZXMgPSBlbnRpdHlTdG9yZS5kZWxldGVNYW55KGlkcywgb3B0cyk7XG5cbiAgICAvLyBJZiBzb21ldGhpbmcgZGVsZXRlZFxuICAgIGlmIChkZWxldGVkRW50aXRpZXMubGVuZ3RoID4gMCkge1xuXG4gICAgICAvLyBDbGVhbiBpZHMgKG5ldyBpZHMgd2lsbCBiZSBzZXQgYnkgdGhlIHRyYXNoIHN0b3JlKVxuICAgICAgZGVsZXRlZEVudGl0aWVzLmZvckVhY2goZSA9PiBlLmlkID0gdW5kZWZpbmVkKTtcblxuICAgICAgY29uc3QgdHJhc2hOYW1lID0gRW50aXRpZXNTdG9yYWdlLlRSQVNIX1BSRUZJWCArIG9wdHMuZW50aXR5TmFtZTtcbiAgICAgIHRoaXMuZ2V0RW50aXR5U3RvcmU8VD4odHJhc2hOYW1lLCB7Y3JlYXRlOiB0cnVlfSlcbiAgICAgICAgLnNhdmVBbGwoZGVsZXRlZEVudGl0aWVzLCBvcHRzKTtcblxuICAgICAgLy8gTWFyayBhcyBkaXJ0eVxuICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuXG4gICAgICAvLyBNYXJrIGFzIHNhdmUgbmVlZFxuICAgICAgdGhpcy5fJHNhdmUuZW1pdCgpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkRW50aXRpZXM7XG4gIH1cblxuICBhc3luYyBzYXZlVG9UcmFzaDxUIGV4dGVuZHMgRW50aXR5PFQ+PihlbnRpdHk6IFQsIG9wdHM/OiB7XG4gICAgZW50aXR5TmFtZT86IHN0cmluZztcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKCFlbnRpdHkpIHJldHVybiB1bmRlZmluZWQ7IC8vIHNraXBcblxuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICBjb25zdCBlbnRpdHlOYW1lID0gb3B0cyAmJiBvcHRzLmVudGl0eU5hbWUgfHwgdGhpcy5kZXRlY3RFbnRpdHlOYW1lKGVudGl0eSk7XG4gICAgY29uc3QgdHJhc2hOYW1lID0gRW50aXRpZXNTdG9yYWdlLlRSQVNIX1BSRUZJWCArIGVudGl0eU5hbWU7XG4gICAgdGhpcy5nZXRFbnRpdHlTdG9yZTxUPih0cmFzaE5hbWUpLnNhdmUoZW50aXR5LCBvcHRzKTtcblxuICAgIHRoaXMuXyRzYXZlLmVtaXQoKTtcblxuICAgIHJldHVybiBlbnRpdHk7XG4gIH1cblxuICBhc3luYyBjbGVhclRyYXNoKGVudGl0eU5hbWU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICBjb25zdCB0cmFzaE5hbWUgPSBFbnRpdGllc1N0b3JhZ2UuVFJBU0hfUFJFRklYICsgZW50aXR5TmFtZTtcbiAgICBjb25zdCBlbnRpdHlTdG9yZSA9IHRoaXMuZ2V0RW50aXR5U3RvcmUodHJhc2hOYW1lLCB7Y3JlYXRlOiBmYWxzZX0pO1xuICAgIGlmICghZW50aXR5U3RvcmUpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgZW50aXR5U3RvcmUucmVzZXQoKTtcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG5cbiAgICB0aGlzLl8kc2F2ZS5lbWl0KCk7XG4gIH1cblxuICBwZXJzaXN0KG9wdHMgPSB7c2tpcElmUHJpc3RpbmU6IHRydWV9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmVMb2NhbGx5KG9wdHMpO1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgZ2V0RW50aXR5U3RvcmU8VCBleHRlbmRzIElFbnRpdHk8VCwgSUQ+LCBJRCA9IG51bWJlcj4obmFtZTogc3RyaW5nLCBvcHRzPzoge1xuICAgIGNyZWF0ZT86IGJvb2xlYW47XG4gIH0pOiBFbnRpdHlTdG9yZTxULCBJRD4ge1xuICAgIGxldCBzdG9yZSA9IHRoaXMuX2RhdGFbbmFtZV07XG4gICAgaWYgKCFzdG9yZSAmJiAoIW9wdHMgfHwgb3B0cy5jcmVhdGUgIT09IGZhbHNlKSkge1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbZW50aXRpZXMtc3RvcmFnZV0gQ3JlYXRpbmcgc3RvcmUgJHtuYW1lfWApO1xuICAgICAgY29uc3QgdHlwZVBvbGljeSA9IHRoaXMuX3R5cGVQb2xpY2llc1tuYW1lXTtcbiAgICAgIHN0b3JlID0gbmV3IEVudGl0eVN0b3JlPFQsIElEPihuYW1lLCB0aGlzLnN0b3JhZ2UsIHR5cGVQb2xpY3kpO1xuICAgICAgdGhpcy5fZGF0YVtuYW1lXSA9IHN0b3JlO1xuICAgIH1cbiAgICByZXR1cm4gc3RvcmU7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGV0ZWN0RW50aXR5TmFtZShlbnRpdHlPck5hbWU6IHN0cmluZyB8IEVudGl0eTxhbnksIGFueT4pOiBzdHJpbmcge1xuICAgIGlmICghZW50aXR5T3JOYW1lKSB0aHJvdyBFcnJvcignVW5hYmxlIHRvIGRldGVjdCBlbnRpdHlOYW1lIG9mIG9iamVjdDogJyArIGVudGl0eU9yTmFtZSk7XG4gICAgaWYgKHR5cGVvZiBlbnRpdHlPck5hbWUgPT09ICdzdHJpbmcnKSByZXR1cm4gZW50aXR5T3JOYW1lO1xuICAgIGlmIChlbnRpdHlPck5hbWUuX190eXBlbmFtZSkge1xuICAgICAgcmV0dXJuIGVudGl0eU9yTmFtZS5fX3R5cGVuYW1lO1xuICAgIH1cbiAgICByZXR1cm4gZW50aXR5T3JOYW1lLmNvbnN0cnVjdG9yLm5hbWUgKyAnVk8nO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlc3RvcmVMb2NhbGx5KCkge1xuXG4gICAgY29uc3QgZW50aXR5TmFtZXMgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KEVOVElUSUVTX1NUT1JBR0VfS0VZX1BSRUZJWCk7XG4gICAgaWYgKCFlbnRpdHlOYW1lcykgcmV0dXJuO1xuXG4gICAgY29uc3Qgbm93ID0gdGhpcy5fZGVidWcgJiYgRGF0ZS5ub3coKTtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuaW5mbygnW2VudGl0aWVzLXN0b3JhZ2VdIFJlc3RvcmluZyBlbnRpdGllcy4uLicpO1xuICAgIGNvbnN0IGVudGl0aWVzQ291bnQgPSAoYXdhaXQgUHJvbWlzZS5hbGw8bnVtYmVyPihcbiAgICAgIGVudGl0eU5hbWVzXG4gICAgICAgIC5tYXAobmFtZSA9PiB0aGlzLmdldEVudGl0eVN0b3JlPGFueT4obmFtZSkpXG4gICAgICAgIC5tYXAoKHN0b3JlOiBFbnRpdHlTdG9yZTxhbnk+KSA9PiBzdG9yZS5yZXN0b3JlKCkpKVxuICAgICkucmVkdWNlKChyZXMsIGNvdW50KSA9PiAocmVzICsgY291bnQpLCAwKTtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2VudGl0aWVzLXN0b3JhZ2VdIFJlc3RvcmluZyBlbnRpdGllcyBbT0tdICR7ZW50aXRpZXNDb3VudH0gZW50aXRpZXMgZm91bmQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc3RvcmVMb2NhbGx5KG9wdHMgPSB7c2tpcElmUHJpc3RpbmU6IHRydWV9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKG9wdHMuc2tpcElmUHJpc3RpbmUgJiYgIXRoaXMuZGlydHkpIHJldHVybjsgLy8gc2tpcFxuXG4gICAgLy8gU2F2aW5nIHByb2dyZXNzOiByZXBvcnQgdGhpcyBzYXZlIGxhdGVyXG4gICAgaWYgKHRoaXMuX3NhdmluZykge1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbZW50aXRpZXMtc3RvcmFnZV0gUHJldmlvdXMgcGVyc2lzdCBub3QgZmluaXNoZWQuIFdhaXRpbmcuLi4nKTtcbiAgICAgIHRoaXMuXyRzYXZlLmVtaXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zYXZpbmcgPSB0cnVlO1xuICAgIHRoaXMuX2RpcnR5ID0gZmFsc2U7XG4gICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuaW5jcmVhc2UoKTtcbiAgICBjb25zdCBlbnRpdHlOYW1lcyA9IHRoaXMuX2RhdGEgJiYgT2JqZWN0LmtleXModGhpcy5fZGF0YSkgfHwgW107XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2VudGl0aWVzLXN0b3JhZ2VdIFBlcnNpc3RpbmcuLi4nKTtcblxuICAgIGxldCBjdXJyZW50RW50aXR5TmFtZTtcbiAgICByZXR1cm4gY2hhaW5Qcm9taXNlcyhcbiAgICAgIGVudGl0eU5hbWVzLm1hcChlbnRpdHlOYW1lID0+ICgpID0+IHtcbiAgICAgICAgICBjdXJyZW50RW50aXR5TmFtZSA9IGVudGl0eU5hbWU7XG4gICAgICAgICAgY29uc3QgZW50aXR5U3RvcmUgPSB0aGlzLmdldEVudGl0eVN0b3JlKGVudGl0eU5hbWUsIHtjcmVhdGU6IGZhbHNlfSk7XG5cbiAgICAgICAgICBpZiAoIWVudGl0eVN0b3JlKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFtlbnRpdGllcy1zdG9yYWdlXSBQZXJzaXN0aW5nICR7ZW50aXR5TmFtZX06IHN0b3JlIG5vdCBmb3VuZCFgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTS2lwIHN0b3JlIGlmIHByaXN0aW5lXG4gICAgICAgICAgaWYgKG9wdHMuc2tpcElmUHJpc3RpbmUgJiYgIWVudGl0eVN0b3JlLmRpcnR5KSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAgICAgICAvLyBQZXJzaXN0IHN0b3JlXG4gICAgICAgICAgcmV0dXJuIGVudGl0eVN0b3JlLnBlcnNpc3Qob3B0cylcbiAgICAgICAgICAgIC50aGVuKGNvdW50ID0+IHtcbiAgICAgICAgICAgICAgLy8gSWYgbm8gZW50aXR5IGZvdW5kLCByZW1vdmUgZnJvbSB0aGUgZW50aXR5IG5hbWVzIGFycmF5XG4gICAgICAgICAgICAgIGlmICghY291bnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlOYW1lSW5kZXggPSBlbnRpdHlOYW1lcy5maW5kSW5kZXgoZSA9PiBlID09PSBlbnRpdHlOYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZW50aXR5TmFtZUluZGV4ICE9PSAtMSkgZW50aXR5TmFtZXMuc3BsaWNlKGVudGl0eU5hbWVJbmRleCwgMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICBjdXJyZW50RW50aXR5TmFtZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXR1cm4gaXNFbXB0eUFycmF5KGVudGl0eU5hbWVzKSA/XG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlKEVOVElUSUVTX1NUT1JBR0VfS0VZX1BSRUZJWCkgOlxuICAgICAgICAgICAgdGhpcy5zdG9yYWdlLnNldChFTlRJVElFU19TVE9SQUdFX0tFWV9QUkVGSVgsIGVudGl0eU5hbWVzKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2VudGl0aWVzLXN0b3JhZ2VdIFBlcnNpc3RpbmcgW09LXSAke2VudGl0eU5hbWVzLmxlbmd0aH0gc3RvcmVzIHNhdmVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tcy4uLmApO1xuICAgICAgICB0aGlzLl9zYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuZGVjcmVhc2UoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgdGhpcy5fc2F2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmRlY3JlYXNlKCk7XG4gICAgICAgIGlmIChjdXJyZW50RW50aXR5TmFtZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFtlbnRpdGllcy1zdG9yYWdlXSBFcnJvciB3aGlsZSBwZXJzaXN0aW5nICR7Y3VycmVudEVudGl0eU5hbWV9YCwgZXJyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBbZW50aXRpZXMtc3RvcmFnZV0gRXJyb3Igd2hpbGUgcGVyc2lzdGluZzogJHtlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyfWAsIGVycik7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfSk7XG4gIH1cblxufVxuIl19
@@ -36,9 +36,10 @@ export const isMobile = (win) => {
36
36
  if (_cache.mobile === null || _cache.mobile === undefined) {
37
37
  _cache.mobile = isCordova(window)
38
38
  || isAndroid(win) || isIOS(window)
39
+ // Workaround, for MS Windows touch screen (detected as mobile, but forced as desktop)
39
40
  || (isTouchUi(win) && !isWindows(win));
40
41
  }
41
42
  return _cache.mobile;
42
43
  };
43
44
  export { ɵ0 };
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvcGxhdGZvcm1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztTQUVTO0FBRVQsTUFBTSxNQUFNLEdBQUc7SUFDYixNQUFNLEVBQUUsSUFBSTtJQUNaLE9BQU8sRUFBRSxJQUFJO0NBQ2QsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLEdBQVcsRUFBRSxLQUFhLEVBQVcsRUFBRSxDQUNoRSxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUVoQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFXLEVBQUUsSUFBWSxFQUFFLEVBQUU7SUFDekQsTUFBTSxTQUFTLEdBQVcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxTQUFTLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUssTUFBYyxDQUFDLEtBQUssQ0FBQztJQUNuRyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUIsQ0FBQyxDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBWSxFQUFFLEVBQUUsQ0FDeEMsYUFBYSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUVqQyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFZLEVBQUUsRUFBRSxDQUN4QyxVQUFVLENBQUMsR0FBRyxFQUFFLHNCQUFzQixDQUFDLENBQUM7QUFFMUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRTtJQUM3QixtQkFBbUI7SUFDbkIsSUFBSSxhQUFhLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxVQUFVO0lBQ1YsSUFBSSxhQUFhLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN0RCxPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUM7O0FBRUYsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FDbkMsYUFBYSxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFcEQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FDdkMsYUFBYSxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFRLEVBQVcsRUFBRTtJQUM3QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFO1FBQzNELE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztLQUMzRTtJQUNELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQztBQUN4QixDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRTtJQUN0QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1FBQ3pELE1BQU0sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztlQUM1QixTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQztlQUMvQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQzFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qIC0tLVxuICogU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vaW9uaWMtdGVhbS9pb25pYy1mcmFtZXdvcmsvYmxvYi9iMGQ1M2NhNzM2MTk1ODU2NzFkOGNmNGRjMjRlNDdmODI2NDk1YTBhL2NvcmUvc3JjL3V0aWxzL3BsYXRmb3JtLnRzXG4gKiAtLS0gKi9cblxuY29uc3QgX2NhY2hlID0ge1xuICBtb2JpbGU6IG51bGwsXG4gIGNvcmRvdmE6IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBtYXRjaE1lZGlhID0gKHdpbjogV2luZG93LCBxdWVyeTogc3RyaW5nKTogYm9vbGVhbiA9PlxuICB3aW4ubWF0Y2hNZWRpYShxdWVyeSkubWF0Y2hlcztcblxuZXhwb3J0IGNvbnN0IHRlc3RVc2VyQWdlbnQgPSAod2luOiBXaW5kb3csIGV4cHI6IFJlZ0V4cCkgPT4ge1xuICBjb25zdCB1c2VyQWdlbnQ6IHN0cmluZyA9IHdpbi5uYXZpZ2F0b3IudXNlckFnZW50IHx8IHdpbi5uYXZpZ2F0b3IudmVuZG9yIHx8ICh3aW5kb3cgYXMgYW55KS5vcGVyYTtcbiAgcmV0dXJuIGV4cHIudGVzdCh1c2VyQWdlbnQpO1xufVxuXG5leHBvcnQgY29uc3QgaXNXaW5kb3dzID0gKHdpbj86IFdpbmRvdykgPT5cbiAgdGVzdFVzZXJBZ2VudCh3aW4sIC93aW5kb3dzL2kpO1xuXG5leHBvcnQgY29uc3QgaXNUb3VjaFVpID0gKHdpbj86IFdpbmRvdykgPT5cbiAgbWF0Y2hNZWRpYSh3aW4sICcoYW55LXBvaW50ZXI6Y29hcnNlKScpO1xuXG5jb25zdCBpc0lwYWQgPSAod2luOiBXaW5kb3cpID0+IHtcbiAgLy8gaU9TIDEyIGFuZCBiZWxvd1xuICBpZiAodGVzdFVzZXJBZ2VudCh3aW4sIC9pUGFkL2kpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBpT1MgMTMrXG4gIGlmICh0ZXN0VXNlckFnZW50KHdpbiwgL01hY2ludG9zaC9pKSAmJiBpc1RvdWNoVWkod2luKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSU9TID0gKHdpbjogV2luZG93KSA9PlxuICB0ZXN0VXNlckFnZW50KHdpbiwgL2lQaG9uZXxpUG9kL2kpIHx8IGlzSXBhZCh3aW4pO1xuXG5leHBvcnQgY29uc3QgaXNBbmRyb2lkID0gKHdpbjogV2luZG93KSA9PlxuICB0ZXN0VXNlckFnZW50KHdpbiwgL2FuZHJvaWR8c2luay9pKTtcblxuZXhwb3J0IGNvbnN0IGlzQ29yZG92YSA9ICh3aW46IGFueSk6IGJvb2xlYW4gPT4ge1xuICBpZiAoX2NhY2hlLmNvcmRvdmEgPT09IG51bGwgfHwgX2NhY2hlLmNvcmRvdmEgPT09IHVuZGVmaW5lZCkge1xuICAgIF9jYWNoZS5jb3Jkb3ZhID0gISEod2luWydjb3Jkb3ZhJ10gfHwgd2luWydwaG9uZWdhcCddIHx8IHdpblsnUGhvbmVHYXAnXSk7XG4gIH1cbiAgcmV0dXJuIF9jYWNoZS5jb3Jkb3ZhO1xufVxuXG5leHBvcnQgY29uc3QgaXNNb2JpbGUgPSAod2luOiBXaW5kb3cpID0+IHtcbiAgaWYgKF9jYWNoZS5tb2JpbGUgPT09IG51bGwgfHwgX2NhY2hlLm1vYmlsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgX2NhY2hlLm1vYmlsZSA9IGlzQ29yZG92YSh3aW5kb3cpXG4gICAgICB8fCBpc0FuZHJvaWQod2luKSB8fCBpc0lPUyh3aW5kb3cpXG4gICAgICB8fCAoaXNUb3VjaFVpKHdpbikgJiYgIWlzV2luZG93cyh3aW4pKTtcbiAgfVxuICByZXR1cm4gX2NhY2hlLm1vYmlsZTtcbn1cbiJdfQ==
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvcGxhdGZvcm1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztTQUVTO0FBRVQsTUFBTSxNQUFNLEdBQUc7SUFDYixNQUFNLEVBQUUsSUFBSTtJQUNaLE9BQU8sRUFBRSxJQUFJO0NBQ2QsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLEdBQVcsRUFBRSxLQUFhLEVBQVcsRUFBRSxDQUNoRSxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUVoQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFXLEVBQUUsSUFBWSxFQUFFLEVBQUU7SUFDekQsTUFBTSxTQUFTLEdBQVcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxTQUFTLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUssTUFBYyxDQUFDLEtBQUssQ0FBQztJQUNuRyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUIsQ0FBQyxDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBWSxFQUFFLEVBQUUsQ0FDeEMsYUFBYSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUVqQyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFZLEVBQUUsRUFBRSxDQUN4QyxVQUFVLENBQUMsR0FBRyxFQUFFLHNCQUFzQixDQUFDLENBQUM7QUFFMUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRTtJQUM3QixtQkFBbUI7SUFDbkIsSUFBSSxhQUFhLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxVQUFVO0lBQ1YsSUFBSSxhQUFhLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN0RCxPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUM7O0FBRUYsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FDbkMsYUFBYSxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFcEQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FDdkMsYUFBYSxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFRLEVBQVcsRUFBRTtJQUM3QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFO1FBQzNELE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztLQUMzRTtJQUNELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQztBQUN4QixDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRTtJQUN0QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1FBQ3pELE1BQU0sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztlQUM1QixTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNsQyxzRkFBc0Y7ZUFDbkYsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUMxQztJQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUN2QixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiAtLS1cbiAqIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2lvbmljLXRlYW0vaW9uaWMtZnJhbWV3b3JrL2Jsb2IvYjBkNTNjYTczNjE5NTg1NjcxZDhjZjRkYzI0ZTQ3ZjgyNjQ5NWEwYS9jb3JlL3NyYy91dGlscy9wbGF0Zm9ybS50c1xuICogLS0tICovXG5cbmNvbnN0IF9jYWNoZSA9IHtcbiAgbW9iaWxlOiBudWxsLFxuICBjb3Jkb3ZhOiBudWxsXG59O1xuXG5leHBvcnQgY29uc3QgbWF0Y2hNZWRpYSA9ICh3aW46IFdpbmRvdywgcXVlcnk6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgd2luLm1hdGNoTWVkaWEocXVlcnkpLm1hdGNoZXM7XG5cbmV4cG9ydCBjb25zdCB0ZXN0VXNlckFnZW50ID0gKHdpbjogV2luZG93LCBleHByOiBSZWdFeHApID0+IHtcbiAgY29uc3QgdXNlckFnZW50OiBzdHJpbmcgPSB3aW4ubmF2aWdhdG9yLnVzZXJBZ2VudCB8fCB3aW4ubmF2aWdhdG9yLnZlbmRvciB8fCAod2luZG93IGFzIGFueSkub3BlcmE7XG4gIHJldHVybiBleHByLnRlc3QodXNlckFnZW50KTtcbn1cblxuZXhwb3J0IGNvbnN0IGlzV2luZG93cyA9ICh3aW4/OiBXaW5kb3cpID0+XG4gIHRlc3RVc2VyQWdlbnQod2luLCAvd2luZG93cy9pKTtcblxuZXhwb3J0IGNvbnN0IGlzVG91Y2hVaSA9ICh3aW4/OiBXaW5kb3cpID0+XG4gIG1hdGNoTWVkaWEod2luLCAnKGFueS1wb2ludGVyOmNvYXJzZSknKTtcblxuY29uc3QgaXNJcGFkID0gKHdpbjogV2luZG93KSA9PiB7XG4gIC8vIGlPUyAxMiBhbmQgYmVsb3dcbiAgaWYgKHRlc3RVc2VyQWdlbnQod2luLCAvaVBhZC9pKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gaU9TIDEzK1xuICBpZiAodGVzdFVzZXJBZ2VudCh3aW4sIC9NYWNpbnRvc2gvaSkgJiYgaXNUb3VjaFVpKHdpbikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0lPUyA9ICh3aW46IFdpbmRvdykgPT5cbiAgdGVzdFVzZXJBZ2VudCh3aW4sIC9pUGhvbmV8aVBvZC9pKSB8fCBpc0lwYWQod2luKTtcblxuZXhwb3J0IGNvbnN0IGlzQW5kcm9pZCA9ICh3aW46IFdpbmRvdykgPT5cbiAgdGVzdFVzZXJBZ2VudCh3aW4sIC9hbmRyb2lkfHNpbmsvaSk7XG5cbmV4cG9ydCBjb25zdCBpc0NvcmRvdmEgPSAod2luOiBhbnkpOiBib29sZWFuID0+IHtcbiAgaWYgKF9jYWNoZS5jb3Jkb3ZhID09PSBudWxsIHx8IF9jYWNoZS5jb3Jkb3ZhID09PSB1bmRlZmluZWQpIHtcbiAgICBfY2FjaGUuY29yZG92YSA9ICEhKHdpblsnY29yZG92YSddIHx8IHdpblsncGhvbmVnYXAnXSB8fCB3aW5bJ1Bob25lR2FwJ10pO1xuICB9XG4gIHJldHVybiBfY2FjaGUuY29yZG92YTtcbn1cblxuZXhwb3J0IGNvbnN0IGlzTW9iaWxlID0gKHdpbjogV2luZG93KSA9PiB7XG4gIGlmIChfY2FjaGUubW9iaWxlID09PSBudWxsIHx8IF9jYWNoZS5tb2JpbGUgPT09IHVuZGVmaW5lZCkge1xuICAgIF9jYWNoZS5tb2JpbGUgPSBpc0NvcmRvdmEod2luZG93KVxuICAgICAgfHwgaXNBbmRyb2lkKHdpbikgfHwgaXNJT1Mod2luZG93KVxuICAgICAgLy8gV29ya2Fyb3VuZCwgZm9yIE1TIFdpbmRvd3MgdG91Y2ggc2NyZWVuIChkZXRlY3RlZCBhcyBtb2JpbGUsIGJ1dCBmb3JjZWQgYXMgZGVza3RvcClcbiAgICAgIHx8IChpc1RvdWNoVWkod2luKSAmJiAhaXNXaW5kb3dzKHdpbikpO1xuICB9XG4gIHJldHVybiBfY2FjaGUubW9iaWxlO1xufVxuIl19
@@ -1089,6 +1089,7 @@ const isMobile = (win) => {
1089
1089
  if (_cache.mobile === null || _cache.mobile === undefined) {
1090
1090
  _cache.mobile = isCordova(window)
1091
1091
  || isAndroid(win) || isIOS(window)
1092
+ // Workaround, for MS Windows touch screen (detected as mobile, but forced as desktop)
1092
1093
  || (isTouchUi(win) && !isWindows(win));
1093
1094
  }
1094
1095
  return _cache.mobile;
@@ -12217,6 +12218,33 @@ class EntitiesStorage extends StartableService {
12217
12218
  get dirty() {
12218
12219
  return this._dirty || Object.values(this._data).some(store => store.dirty);
12219
12220
  }
12221
+ ngOnStart() {
12222
+ return __awaiter(this, void 0, void 0, function* () {
12223
+ const now = Date.now();
12224
+ console.info(`[entities-storage] Starting entity storage...`);
12225
+ // Restore stores
12226
+ yield this.restoreLocally();
12227
+ // Start a save timer
12228
+ this.registerSubscription(merge(this._$save, timer(this._saveTimerPeriod, this._saveTimerPeriod))
12229
+ .pipe(
12230
+ // Avoid to many call (e.g. when $save AND timer are triggered
12231
+ throttleTime(this._saveTimerPeriod))
12232
+ .subscribe(() => this.storeLocally({ skipIfPristine: true })));
12233
+ // Save, when platform is in pause
12234
+ this.registerSubscription(this.platform.pause.subscribe(() => __awaiter(this, void 0, void 0, function* () {
12235
+ console.warn(`[entities-storage] Platform will pause: saving...`);
12236
+ yield this.storeLocally({ skipIfPristine: true });
12237
+ console.warn(`[entities-storage] Platform will pause: saving [OK]`);
12238
+ })));
12239
+ console.info(`[entities-storage] Starting [OK] in ${Date.now() - now}ms`);
12240
+ return this._data;
12241
+ });
12242
+ }
12243
+ ngOnStop() {
12244
+ return __awaiter(this, void 0, void 0, function* () {
12245
+ yield this.storeLocally({ skipIfPristine: true });
12246
+ });
12247
+ }
12220
12248
  watchAll(entityName, variables, opts) {
12221
12249
  // Make sure store is ready
12222
12250
  if (!this.started) {
@@ -12483,34 +12511,8 @@ class EntitiesStorage extends StartableService {
12483
12511
  });
12484
12512
  }
12485
12513
  persist(opts = { skipIfPristine: true }) {
12486
- // Skip if pristine
12487
- if (opts.skipIfPristine && !this._dirty)
12488
- return Promise.resolve();
12489
12514
  return this.storeLocally(opts);
12490
12515
  }
12491
- ngOnStart() {
12492
- return __awaiter(this, void 0, void 0, function* () {
12493
- const now = Date.now();
12494
- console.info(`[entities-storage] Starting entity storage...`);
12495
- // Restore sequences
12496
- yield this.restoreLocally();
12497
- // Start a save timer
12498
- this.registerSubscription(merge(this._$save, timer(this._saveTimerPeriod, this._saveTimerPeriod))
12499
- .pipe(
12500
- // Avoid to many call (e.g. when $save AND timer are triggered
12501
- throttleTime(this._saveTimerPeriod))
12502
- .subscribe(() => this.storeLocally()));
12503
- console.info(`[entities-storage] Starting [OK] in ${Date.now() - now}ms`);
12504
- return this._data;
12505
- });
12506
- }
12507
- ngOnStop() {
12508
- return __awaiter(this, void 0, void 0, function* () {
12509
- if (this.dirty) {
12510
- yield this.storeLocally();
12511
- }
12512
- });
12513
- }
12514
12516
  /* -- protected methods -- */
12515
12517
  getEntityStore(name, opts) {
12516
12518
  let store = this._data[name];
@@ -16000,7 +16002,7 @@ class PlatformService extends StartableService {
16000
16002
  switch (platformName) {
16001
16003
  case 'mobile':
16002
16004
  case 'mobileweb':
16003
- // Exclude Windows touch screens - see SUMARIS issue #323
16005
+ // Exclude Windows touch screens - see sumaris-app issues #323 and #346
16004
16006
  return this.platform.is(platformName) && !isWindows(window);
16005
16007
  default:
16006
16008
  return this.platform.is(platformName);
@@ -16054,6 +16056,7 @@ class PlatformService extends StartableService {
16054
16056
  this._cordova = this.is('cordova');
16055
16057
  this._android = this.is('android');
16056
16058
  this._ios = this.is('ios');
16059
+ this.configureHtmlClassList(this._mobile);
16057
16060
  this.configureCordovaPlugins();
16058
16061
  // Force some settings
16059
16062
  this.settings.mobile = this._mobile;
@@ -16088,7 +16091,7 @@ class PlatformService extends StartableService {
16088
16091
  this.accountService.tokenType = tokenType;
16089
16092
  });
16090
16093
  // Hide the splashscreen (if mobile) - after 1s - and play start sound
16091
- if (this.mobile) {
16094
+ if (this._mobile) {
16092
16095
  setTimeout(() => {
16093
16096
  var _a;
16094
16097
  (_a = this.splashScreen) === null || _a === void 0 ? void 0 : _a.hide();
@@ -16190,6 +16193,15 @@ class PlatformService extends StartableService {
16190
16193
  //}
16191
16194
  }
16192
16195
  /* -- protected methods -- */
16196
+ configureHtmlClassList(mobile, win = window) {
16197
+ if (mobile)
16198
+ return; // Nothing to do
16199
+ // Workaround, for MS Windows touch screen (detected as mobile, but forced as desktop)
16200
+ if (!mobile && win.document.documentElement.classList.contains('plt-mobile')) {
16201
+ console.warn('[platform] Force class list to: <html class="plt-desktop">. Workaround for Windows touch screen.');
16202
+ win.document.documentElement.classList.replace('plt-mobile', 'plt-desktop');
16203
+ }
16204
+ }
16193
16205
  configureCordovaPlugins() {
16194
16206
  console.info('[platform] Configuring Cordova plugins...');
16195
16207
  if (this.statusBar) {
@@ -19236,9 +19248,21 @@ class AccountPage extends AppForm {
19236
19248
  this.form.controls.pubkey.disable();
19237
19249
  // Always disable some additional fields
19238
19250
  this.additionalFields
19239
- .filter(field => field.extra && field.extra.account && field.extra.account.disabled || false)
19240
19251
  .forEach(field => {
19241
- this.form.controls[field.key].disable();
19252
+ var _a, _b;
19253
+ const control = this.form.controls[field.key];
19254
+ if (!control)
19255
+ return; // Skip
19256
+ const disabled = ((_a = field.extra) === null || _a === void 0 ? void 0 : _a.account) && field.extra.account.disabled || false;
19257
+ if (disabled && control.enabled) {
19258
+ control.disable();
19259
+ }
19260
+ const required = ((_b = field.extra) === null || _b === void 0 ? void 0 : _b.account) && field.extra.account.required || false;
19261
+ if (!field.required && required) {
19262
+ control.setValidators(control.validator
19263
+ ? Validators.compose([control.validator, Validators.required])
19264
+ : Validators.required);
19265
+ }
19242
19266
  });
19243
19267
  this.markForCheck();
19244
19268
  }