@sumaris-net/ngx-components 1.19.17 → 1.19.20

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
@@ -75,7 +75,7 @@ export class MatDateTime {
75
75
  // Workaround because ion-datetime has issue (do not returned a ISO date)
76
76
  this._keyboardHideDelay = this.mobile && KEYBOARD_HIDE_DELAY_MS || 0;
77
77
  this.required = isNotNilBoolean(this.required) ? this.required : (this.formControl.validator === Validators.required || isBlankString(this.required));
78
- // Add 'validDate' validator (when existing validator are null or required, to be sure to keep it)
78
+ // Add 'validDate' validator (when existing validator are null or required, to be sure to keep)
79
79
  if (!this.formControl.validator || this.formControl.validator === Validators.required) {
80
80
  this.formControl.setValidators(this.required ? [Validators.required, SharedValidators.validDate] : SharedValidators.validDate);
81
81
  }
@@ -84,12 +84,9 @@ export class MatDateTime {
84
84
  [this.formControl.validator, SharedValidators.validDate]);
85
85
  }
86
86
  // Create the day control
87
- this.dayControl = this.formBuilder.control(null, this.required ? Validators.required : null);
87
+ this.dayControl = this.formBuilder.control(null);
88
88
  // Create the hour control
89
- const timeValidator = this.required ?
90
- (this.mobile ? Validators.required : Validators.compose([Validators.required, Validators.pattern(HOUR_REGEXP)])) :
91
- (this.mobile ? null : Validators.pattern(HOUR_REGEXP));
92
- this.hourControl = this.formBuilder.control(null, timeValidator);
89
+ this.hourControl = this.formBuilder.control(null, this.mobile ? null : Validators.pattern(HOUR_REGEXP));
93
90
  // Get patterns to display date and date+time
94
91
  this._subscription.add(this.translate.get(['COMMON.DATE_PATTERN', 'COMMON.DATE_TIME_PATTERN'])
95
92
  .subscribe((patterns) => this.updatePattern(patterns)));
@@ -387,4 +384,4 @@ MatDateTime.propDecorators = {
387
384
  matInputs: [{ type: ViewChildren, args: ['matInput',] }]
388
385
  };
389
386
  export { ɵ0 };
390
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuZGF0ZXRpbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9kYXRldGltZS9tYXRlcmlhbC5kYXRldGltZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBYyxVQUFVLEVBQUUsS0FBSyxFQUFxQixRQUFRLEVBQXVCLFNBQVMsRUFBRSxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHOUwsT0FBTyxFQUF1QixXQUFXLEVBQWUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDakksT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLFFBQVEsRUFBUyxNQUFNLFFBQVEsQ0FBQztBQUN4QyxPQUFPLEVBQUMsd0JBQXdCLEVBQUUsc0JBQXNCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDcEQsT0FBTyxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQWUsV0FBVyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxLQUFLLEVBQUUsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hILE9BQU8sRUFBQyxpQkFB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YW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGZvcndhcmRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIFByb3ZpZGVyLCBRdWVyeUxpc3QsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RGF0ZUFkYXB0ZXJ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHtGbG9hdExhYmVsVHlwZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cERpcmVjdGl2ZSwgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge2lzTW9tZW50LCBNb21lbnR9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge0RFRkFVTFRfUExBQ0VIT0xERVJfQ0hBUiwgS0VZQk9BUkRfSElERV9ERUxBWV9NU30gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7U2hhcmVkVmFsaWRhdG9yc30gZnJvbSAnLi4vLi4vdmFsaWRhdG9yL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHtLZXlib2FyZH0gZnJvbSAnQGlvbmljLW5hdGl2ZS9rZXlib2FyZC9uZ3gnO1xuaW1wb3J0IHtmaWx0ZXIsIGZpcnN0fSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0lucHV0RWxlbWVudCwgc2V0VGFiSW5kZXh9IGZyb20gJy4uLy4uL2lucHV0cyc7XG5pbXBvcnQge2lzRm9jdXNhYmxlRWxlbWVudH0gZnJvbSAnLi4vLi4vZm9jdXNhYmxlJztcbmltcG9ydCB7bWVyZ2UsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0RhdGVGaWx0ZXJGbiwgTWF0RGF0ZXBpY2tlciwgTWF0RGF0ZXBpY2tlcklucHV0RXZlbnR9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHtpc0JsYW5rU3RyaW5nLCBpc05pbCwgaXNOaWxPckJsYW5rLCBpc05vdE5pbCwgaXNOb3ROaWxCb29sZWFuLCBzbGVlcCwgdG9Cb29sZWFufSBmcm9tICcuLi8uLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHtmcm9tRGF0ZUlTT1N0cmluZywgdG9EYXRlSVNPU3RyaW5nfSBmcm9tICcuLi8uLi9kYXRlcyc7XG5pbXBvcnQge2lzTW9iaWxlfSBmcm9tICcuLi8uLi9wbGF0Zm9ybXMnO1xuaW1wb3J0IHtNb21lbnREYXRlQWRhcHRlcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwtbW9tZW50LWFkYXB0ZXInO1xuXG5jb25zdCBERUZBVUxUX1ZBTFVFX0FDQ0VTU09SOiBQcm92aWRlciA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1hdERhdGVUaW1lKSxcbiAgbXVsdGk6IHRydWVcbn07XG5cbmNvbnN0IERBWV9NQVNLID0gWy9cXGQvLCAvXFxkLywgJy8nLCAvXFxkLywgL1xcZC8sICcvJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC9dO1xuXG5jb25zdCBIT1VSX1JFR0VYUCA9IC9eWzAxMl1bMC05XVs6XVswMTIzNDVdWzAtOV0kLztcbmNvbnN0IEhPVVJfTUFTSyA9IFsvWzAxMl0vLCAvXFxkLywgJzonLCAvWzAxMjM0NV0vLCAvXFxkL107XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuZGVjbGFyZSBpbnRlcmZhY2UgTmd4VGltZVBpY2tlciB7XG4gIHNlbGVjdGVkSG91cjogeyB0aW1lOiBudW1iZXIgfTtcbiAgc2VsZWN0ZWRNaW51dGU6IHsgdGltZTogbnVtYmVyIH07XG4gIG9wZW4oKTtcbiAgY2xvc2UoKTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWF0LWRhdGUtdGltZS1maWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXRlcmlhbC5kYXRldGltZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWF0ZXJpYWwuZGF0ZXRpbWUuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICBERUZBVUxUX1ZBTFVFX0FDQ0VTU09SLFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBNYXREYXRlVGltZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgSW5wdXRFbGVtZW50IHtcbiAgcHJpdmF0ZSBfb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgX29uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF93cml0aW5nID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfZGlzYWJsaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgX3RhYmluZGV4OiBudW1iZXI7XG4gIHByaXZhdGUgX2tleWJvYXJkSGlkZURlbGF5OiBudW1iZXI7XG5cbiAgX3JlYWRvbmx5ID0gZmFsc2U7XG4gIGRheUNvbnRyb2w6IEZvcm1Db250cm9sO1xuICBob3VyQ29udHJvbDogRm9ybUNvbnRyb2w7XG4gIGRpc3BsYXlQYXR0ZXJuOiBzdHJpbmc7XG4gIGRheVBhdHRlcm46IHN0cmluZztcbiAgbG9jYWxlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRheU1hc2sgPSBEQVlfTUFTSztcbiAgcmVhZG9ubHkgaG91ck1hc2sgPSBIT1VSX01BU0s7XG5cbiAgQElucHV0KCkgZm9ybUNvbnRyb2w6IEZvcm1Db250cm9sO1xuICBASW5wdXQoKSBmb3JtQ29udHJvbE5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgQElucHV0KCkgZmxvYXRMYWJlbDogRmxvYXRMYWJlbFR5cGUgPSAnYXV0byc7XG4gIEBJbnB1dCgpIHJlcXVpcmVkOiBib29sZWFuO1xuICBASW5wdXQoKSBtb2JpbGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNvbXBhY3QgPSBmYWxzZTtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXJDaGFyOiBzdHJpbmcgPSBERUZBVUxUX1BMQUNFSE9MREVSX0NIQVI7XG4gIEBJbnB1dCgpIGF1dG9mb2N1cyA9IGZhbHNlO1xuICBASW5wdXQoKSBzdGFydERhdGU6IE1vbWVudCB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBjbGVhcmFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgZGF0ZVBpY2tlckZpbHRlcjogRGF0ZUZpbHRlckZuPE1vbWVudD47XG5cbiAgQElucHV0KCkgc2V0IHJlYWRvbmx5KHZhbHVlOiBib29sZWFuKXtcbiAgICB0aGlzLl9yZWFkb25seSA9IHZhbHVlO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXQgcmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRvbmx5O1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHRhYmluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5fdGFiaW5kZXggIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl90YWJpbmRleCA9IHZhbHVlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVRhYkluZGV4KCkpO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0YWJpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl90YWJpbmRleDtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnZGF0ZVBpY2tlcicpIGRhdGVQaWNrZXI6IE1hdERhdGVwaWNrZXI8TW9tZW50PjtcbiAgQFZpZXdDaGlsZCgndGltZVBpY2tlcicpIHRpbWVQaWNrZXI6IE5neFRpbWVQaWNrZXI7XG4gIEBWaWV3Q2hpbGRyZW4oJ21hdElucHV0JykgbWF0SW5wdXRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkYXRlQWRhcHRlcjogTW9tZW50RGF0ZUFkYXB0ZXIsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBrZXlib2FyZDogS2V5Ym9hcmQsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmb3JtR3JvdXBEaXI6IEZvcm1Hcm91cERpcmVjdGl2ZSxcbiAgKSB7XG4gICAgdGhpcy5sb2NhbGUgPSAodHJhbnNsYXRlLmN1cnJlbnRMYW5nIHx8IHRyYW5zbGF0ZS5kZWZhdWx0TGFuZykuc3Vic3RyKDAsIDIpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtQ29udHJvbCA9IHRoaXMuZm9ybUNvbnRyb2wgfHwgdGhpcy5mb3JtQ29udHJvbE5hbWUgJiYgdGhpcy5mb3JtR3JvdXBEaXIgJiYgdGhpcy5mb3JtR3JvdXBEaXIuZm9ybS5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpIGFzIEZvcm1Db250cm9sO1xuICAgIGlmICghdGhpcy5mb3JtQ29udHJvbCkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIG1hbmRhdG9yeSBhdHRyaWJ1dGUgXFwnZm9ybUNvbnRyb2xcXCcgb3IgXFwnZm9ybUNvbnRyb2xOYW1lXFwnIGluIDxtYXQtZGF0ZS10aW1lLWZpZWxkPi4nKTtcblxuICAgIHRoaXMubW9iaWxlID0gaXNOb3ROaWwodGhpcy5tb2JpbGUpID8gdGhpcy5tb2JpbGUgOiBpc01vYmlsZSh3aW5kb3cpO1xuICAgIC8vIFdvcmthcm91bmQgYmVjYXVzZSBpb24tZGF0ZXRpbWUgaGFzIGlzc3VlIChkbyBub3QgcmV0dXJuZWQgYSBJU08gZGF0ZSlcbiAgICB0aGlzLl9rZXlib2FyZEhpZGVEZWxheSA9IHRoaXMubW9iaWxlICYmIEtFWUJPQVJEX0hJREVfREVMQVlfTVMgfHwgMDtcblxuICAgIHRoaXMucmVxdWlyZWQgPSBpc05vdE5pbEJvb2xlYW4odGhpcy5yZXF1aXJlZCkgPyB0aGlzLnJlcXVpcmVkIDogKHRoaXMuZm9ybUNvbnRyb2wudmFsaWRhdG9yID09PSBWYWxpZGF0b3JzLnJlcXVpcmVkIHx8IGlzQmxhbmtTdHJpbmcodGhpcy5yZXF1aXJlZCkpO1xuXG4gICAgLy8gQWRkICd2YWxpZERhdGUnIHZhbGlkYXRvciAod2hlbiBleGlzdGluZyB2YWxpZGF0b3IgYXJlIG51bGwgb3IgcmVxdWlyZWQsIHRvIGJlIHN1cmUgdG8ga2VlcCBpdClcbiAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wudmFsaWRhdG9yIHx8IHRoaXMuZm9ybUNvbnRyb2wudmFsaWRhdG9yID09PSBWYWxpZGF0b3JzLnJlcXVpcmVkKSB7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModGhpcy5yZXF1aXJlZCA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBTaGFyZWRWYWxpZGF0b3JzLnZhbGlkRGF0ZV0gOiBTaGFyZWRWYWxpZGF0b3JzLnZhbGlkRGF0ZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMucmVxdWlyZWQgPyBbdGhpcy5mb3JtQ29udHJvbC52YWxpZGF0b3IsIFZhbGlkYXRvcnMucmVxdWlyZWQsIFNoYXJlZFZhbGlkYXRvcnMudmFsaWREYXRlXSA6XG4gICAgICAgIFt0aGlzLmZvcm1Db250cm9sLnZhbGlkYXRvciwgU2hhcmVkVmFsaWRhdG9ycy52YWxpZERhdGVdKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIGRheSBjb250cm9sXG4gICAgdGhpcy5kYXlDb250cm9sID0gdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKG51bGwsXG4gICAgICB0aGlzLnJlcXVpcmVkID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IG51bGxcbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBob3VyIGNvbnRyb2xcbiAgICBjb25zdCB0aW1lVmFsaWRhdG9yID0gdGhpcy5yZXF1aXJlZCA/XG4gICAgICAodGhpcy5tb2JpbGUgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLnBhdHRlcm4oSE9VUl9SRUdFWFApXSkpIDpcbiAgICAgICh0aGlzLm1vYmlsZSA/IG51bGwgOiBWYWxpZGF0b3JzLnBhdHRlcm4oSE9VUl9SRUdFWFApKTtcbiAgICB0aGlzLmhvdXJDb250cm9sID0gdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKG51bGwsIHRpbWVWYWxpZGF0b3IpO1xuXG4gICAgLy8gR2V0IHBhdHRlcm5zIHRvIGRpc3BsYXkgZGF0ZSBhbmQgZGF0ZSt0aW1lXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuZ2V0KFsnQ09NTU9OLkRBVEVfUEFUVEVSTicsICdDT01NT04uREFURV9USU1FX1BBVFRFUk4nXSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHBhdHRlcm5zKSA9PiB0aGlzLnVwZGF0ZVBhdHRlcm4ocGF0dGVybnMpKVxuICAgICk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgbWVyZ2UoXG4gICAgICAgIHRoaXMuZGF5Q29udHJvbC52YWx1ZUNoYW5nZXMsXG4gICAgICAgIHRoaXMuaG91ckNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHRoaXMub25Gb3JtQ2hhbmdlKCkpXG4gICAgKTtcblxuICAgIC8vIExpc3RlbiBzdGF0dXMgY2hhbmdlcyAod2hlbiBkb25lIG91dHNpZGUgdGhlIGNvbXBvbmVudCAgLSBlLmcuIHdoZW4gc2V0RXJyb3JzKCkgaXMgY2FsbGluZyBvbiB0aGUgZm9ybUNvbnRyb2wpXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKF8pID0+ICF0aGlzLnJlYWRvbmx5ICYmICF0aGlzLl93cml0aW5nICYmICF0aGlzLl9kaXNhYmxpbmcpIC8vIFNraXBcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMubWFya0ZvckNoZWNrKCkpXG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlVGFiSW5kZXgoKTtcblxuICAgIHRoaXMuX3dyaXRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3dyaXRpbmcpIHJldHVybjsgLy8gU2tpcFxuICAgIHRoaXMuX3dyaXRpbmcgPSB0cnVlO1xuXG4gICAgLy8gREVCVUdcbiAgICAvLyBjb25zb2xlLmRlYnVnKFwiW21hdC1kYXRlLXRpbWVdIHdyaXRlVmFsdWUoKSB3aXRoOlwiLCB2YWx1ZSk7XG5cbiAgICBjb25zdCBkYXRlID0gZnJvbURhdGVJU09TdHJpbmcodmFsdWUpO1xuXG4gICAgaWYgKCFkYXRlIHx8ICFkYXRlLmlzVmFsaWQoKSkge1xuICAgICAgdGhpcy5kYXlDb250cm9sLnBhdGNoVmFsdWUobnVsbCwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIHRoaXMuaG91ckNvbnRyb2wucGF0Y2hWYWx1ZShudWxsLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIC8vIEZvcm1hdCBkYXlcbiAgICAgIGNvbnN0IGRheSA9IGRhdGUuY2xvbmUoKS5zdGFydE9mKCdkYXknKTtcbiAgICAgIGNvbnN0IGRheVN0ciA9IHRoaXMuZGF0ZUFkYXB0ZXIuZm9ybWF0KGRheSwgdGhpcy5kYXlQYXR0ZXJuKTtcblxuICAgICAgLy8gRm9ybWF0IHRpbWVcbiAgICAgIC8vIC0gRm9ybWF0IGhoXG4gICAgICBsZXQgaG91cjogbnVtYmVyIHwgc3RyaW5nID0gZGF0ZS5ob3VyKCk7XG4gICAgICBob3VyID0gaG91ciA8IDEwID8gKCcwJyArIGhvdXIpIDogaG91cjtcbiAgICAgIC8vIC0gRm9ybWF0IG1tXG4gICAgICBsZXQgbWludXRlczogbnVtYmVyIHwgc3RyaW5nID0gZGF0ZS5taW51dGVzKCk7XG4gICAgICBtaW51dGVzID0gbWludXRlcyA8IDEwID8gKCcwJyArIG1pbnV0ZXMpIDogbWludXRlcztcbiAgICAgIGNvbnN0IHRpbWVTdHIgPSBgJHtob3VyfToke21pbnV0ZXN9YDtcblxuICAgICAgLy8gVXBkYXRlIGNvbnRyb2xzXG4gICAgICB0aGlzLmRheUNvbnRyb2wucGF0Y2hWYWx1ZShkYXlTdHIsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICB0aGlzLmhvdXJDb250cm9sLnBhdGNoVmFsdWUodGltZVN0ciwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB9XG5cbiAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Rpc2FibGluZykgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICB0aGlzLl9kaXNhYmxpbmcgPSB0cnVlO1xuICAgIGlmIChpc0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLmRheUNvbnRyb2wuZGlzYWJsZSh7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgdGhpcy5ob3VyQ29udHJvbC5kaXNhYmxlKHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF5Q29udHJvbC5lbmFibGUoe2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIHRoaXMuaG91ckNvbnRyb2wuZW5hYmxlKHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgfVxuICAgIHRoaXMuX2Rpc2FibGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uRGF0ZVBpY2tlckNoYW5nZShldmVudDogTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQ8TW9tZW50Pik6IHZvaWQge1xuICAgIC8vIE1ha2Ugc3VyZSBldmVudCBpcyB2YWxpZFxuICAgIGlmICghZXZlbnQgfHwgKGV2ZW50LnZhbHVlICE9PSBudWxsICYmICFpc01vbWVudChldmVudC52YWx1ZSkpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgTWF0RGF0ZXBpY2tlciBldmVudC4gU2tpcHBpbmcnLCBldmVudCk7XG4gICAgICByZXR1cm47IC8vIFNraXBcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IHRvIHVzYWJsZSBkYXRlLCB0aGVuIGNvbnZlcnQgdG8gZGF5IHBhdHRlcm4gKGUuZyBERC9NTS9ZWVlZKVxuICAgIGNvbnN0IGRheSA9IGV2ZW50LnZhbHVlICYmIGV2ZW50LnZhbHVlXG4gICAgICAubG9jYWxlKHRoaXMubG9jYWxlKSAvLyBzZXQgbG9jYWxlXG4gICAgICAuaG91cigwKS5taW51dGUoMCkuc2Vjb25kcygwKS5taWxsaXNlY29uZCgwKSAvLyBSZXNldCBob3VyXG4gICAgICAudXRjKHRydWUpO1xuICAgIGNvbnN0IGRheVN0ciA9IGRheSAmJiB0aGlzLmRhdGVBZGFwdGVyLmZvcm1hdChkYXksIHRoaXMuZGF5UGF0dGVybikgfHzCoG51bGw7XG5cbiAgICAvLyBVcGRhdGUgdGhlIGRheSBjb250cm9sXG4gICAgaWYgKHRoaXMuZGF5Q29udHJvbC52YWx1ZSAhPT0gZGF5U3RyKSB7XG5cbiAgICAgIC8vIERFQlVHXG4gICAgICAvLyBjb25zb2xlLmRlYnVnKFwiW21hdC1kYXRlLXRpbWVdIG9uRGF0ZVBpY2tlckNoYW5nZSgpIG5ldyB2YWx1ZTpcIiwgZGF5U3RyKTtcblxuICAgICAgdGhpcy5kYXlDb250cm9sLnNldFZhbHVlKGRheVN0ciwge1xuICAgICAgICBlbWl0RXZlbnQ6IHRydWUgLy8gV2lsbCBjYWxsIG9uRm9ybUNoYW5nZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cblxuICBvblRpbWVQaWNrZXJDaGFuZ2UodGltZVN0cjogc3RyaW5nKSB7XG4gICAgLy8gVXBkYXRlIHRoZSB0aW1lIGNvbnRyb2wsIGlmIG5lZWRcbiAgICBpZiAodGhpcy5ob3VyQ29udHJvbC52YWx1ZSAhPT0gdGltZVN0cikge1xuXG4gICAgICAvLyBERUJVR1xuICAgICAgLy8gY29uc29sZS5kZWJ1ZyhcIlttYXQtZGF0ZS10aW1lXSBvblRpbWVQaWNrZXJDaGFuZ2UoKSBuZXcgdmFsdWU6XCIsIHRpbWVTdHIpO1xuXG4gICAgICB0aGlzLmhvdXJDb250cm9sLnNldFZhbHVlKHRpbWVTdHIsIHtcbiAgICAgICAgZW1pdEV2ZW50OiB0cnVlIC8vIFdpbGwgY2FsbCBvbkZvcm1DaGFuZ2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9wZW5EYXRlUGlja2VySWZNb2JpbGUoZXZlbnQ6IFVJRXZlbnQsIGRhdGVQaWNrZXI/OiBNYXREYXRlcGlja2VyPGFueT4pIHtcbiAgICBpZiAoIXRoaXMubW9iaWxlIHx8IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcblxuICAgIHRoaXMucHJldmVudEV2ZW50KGV2ZW50KTtcblxuICAgIC8vIE1ha2Ugc3VyZSB0aGUga2V5Ym9hcmQgaXMgY2xvc2VkXG4gICAgYXdhaXQgdGhpcy53YWl0S2V5Ym9hcmRIaWRlKGZhbHNlKTtcblxuICAgIC8vIE9wZW4gdGhlIHBpY2tlclxuICAgIHRoaXMub3BlbkRhdGVQaWNrZXIobnVsbCwgZGF0ZVBpY2tlcik7XG4gIH1cblxuICBwdWJsaWMgb3BlbkRhdGVQaWNrZXIoZXZlbnQ/OiBVSUV2ZW50LCBkYXRlUGlja2VyPzogTWF0RGF0ZXBpY2tlcjxhbnk+KSB7XG4gICAgZGF0ZVBpY2tlciA9IGRhdGVQaWNrZXIgfHwgdGhpcy5kYXRlUGlja2VyO1xuICAgIGlmIChkYXRlUGlja2VyKSB7XG5cbiAgICAgIGlmIChldmVudCkgdGhpcy5wcmV2ZW50RXZlbnQoZXZlbnQpO1xuXG4gICAgICBpZiAoIWRhdGVQaWNrZXIub3BlbmVkKSB7XG4gICAgICAgIGRhdGVQaWNrZXIub3BlbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9wZW5UaW1lUGlja2VySWZNb2JpbGUoZXZlbnQ6IFVJRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMubW9iaWxlIHx8IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcblxuICAgIHRoaXMucHJldmVudEV2ZW50KGV2ZW50KTtcblxuICAgIC8vIE1ha2Ugc3VyZSB0aGUga2V5Ym9hcmQgaXMgY2xvc2VkXG4gICAgYXdhaXQgdGhpcy53YWl0S2V5Ym9hcmRIaWRlKHRydWUpO1xuXG4gICAgLy8gT3BlbiB0aGUgcGlja2VyXG4gICAgdGhpcy5vcGVuVGltZVBpY2tlcihudWxsKTtcbiAgfVxuXG4gIG9wZW5UaW1lUGlja2VyKGV2ZW50OiBVSUV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLnRpbWVQaWNrZXIpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgdGhpcy5wcmV2ZW50RXZlbnQoZXZlbnQpO1xuXG4gICAgdGhpcy50aW1lUGlja2VyLm9wZW4oKTtcbiAgfVxuXG4gIHByZXZlbnRFdmVudChldmVudDogVUlFdmVudCkge1xuICAgIGlmICghZXZlbnQpIHJldHVybjtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gIH1cblxuICBmb2N1cygpIHtcbiAgICBpZiAoIXRoaXMubWF0SW5wdXRzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50UmVmID0gdGhpcy5tYXRJbnB1dHNbMF07IC8vIGdldCB0aGUgZmlyc3QgZWxlbWVudFxuICAgICAgaWYgKGlzRm9jdXNhYmxlRWxlbWVudChlbGVtZW50UmVmKSkge1xuICAgICAgICBlbGVtZW50UmVmLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKG51bGwpO1xuICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xuICAgIHRoaXMubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIC8qIC0tIHByaXZhdGUgbWV0aG9kIC0tICovXG5cbiAgcHJpdmF0ZSB1cGRhdGVQYXR0ZXJuKHBhdHRlcm5zOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgIHRoaXMuZGlzcGxheVBhdHRlcm4gPSAocGF0dGVybnNbJ0NPTU1PTi5EQVRFX1RJTUVfUEFUVEVSTiddICE9PSAnQ09NTU9OLkRBVEVfVElNRV9QQVRURVJOJyA/IHBhdHRlcm5zWydDT01NT04uREFURV9USU1FX1BBVFRFUk4nXSA6ICdMIExUJyk7XG4gICAgdGhpcy5kYXlQYXR0ZXJuID0gKHBhdHRlcm5zWydDT01NT04uREFURV9QQVRURVJOJ10gIT09ICdDT01NT04uREFURV9QQVRURVJOJyA/IHBhdHRlcm5zWydDT01NT04uREFURV9QQVRURVJOJ10gOiAnTCcpO1xuICB9XG5cbiAgY2hlY2tJZlRvdWNoZWQoKSB7XG4gICAgaWYgKHRoaXMuZGF5Q29udHJvbC50b3VjaGVkIHx8IHRoaXMuaG91ckNvbnRyb2wudG91Y2hlZCkge1xuICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvbkZvcm1DaGFuZ2UoKSB7XG4gICAgaWYgKHRoaXMuX3dyaXRpbmcpIHJldHVybjsgLy8gU2tpcCBpZiBjYWxsIGJ5IHNlbGZcbiAgICB0aGlzLl93cml0aW5nID0gdHJ1ZTtcblxuICAgIGxldCBkYXlTdHIgPSB0aGlzLmRheUNvbnRyb2wudmFsdWU7XG4gICAgY29uc3QgdGltZSA9IHRoaXMuaG91ckNvbnRyb2wudmFsdWU7XG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZyhgW21hdC1kYXRlLXRpbWVdIG9uRm9ybUNoYW5nZSgpIGZyb20gZXZlbnQ6ICR7ZXZlbnR9IC0gY29udHJvbHMgdmFsdWVzOiBgLCBbZGF5U3RyLCB0aW1lXSk7XG5cbiAgICBjb25zdCBpbmNvbXBsZXRlVmFsdWUgPSBpc05pbE9yQmxhbmsodGltZSkgIT09IGlzTmlsT3JCbGFuayhkYXlTdHIpO1xuICAgIGlmIChpbmNvbXBsZXRlVmFsdWUgfHwgdGhpcy5kYXlDb250cm9sLmludmFsaWQgfHwgdGhpcy5ob3VyQ29udHJvbC5pbnZhbGlkKSB7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1BlbmRpbmcoe29ubHlTZWxmOiB0cnVlfSk7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldEVycm9ycyh7XG4gICAgICAgIHZhbGlkRGF0ZTogaW5jb21wbGV0ZVZhbHVlLFxuICAgICAgICAuLi50aGlzLmZvcm1Db250cm9sLmVycm9ycyxcbiAgICAgICAgLi4udGhpcy5kYXlDb250cm9sLmVycm9ycyxcbiAgICAgICAgLi4udGhpcy5ob3VyQ29udHJvbC5lcnJvcnNcbiAgICAgIH0pO1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIE1ha2UgdG8gcmVtb3ZlIHBsYWNlaG9sZGVyIGNoYXJzXG4gICAgd2hpbGUgKGRheVN0ciAmJiBkYXlTdHIuaW5kZXhPZih0aGlzLnBsYWNlaG9sZGVyQ2hhcikgIT09IC0xKSB7XG4gICAgICBkYXlTdHIgPSBkYXlTdHIucmVwbGFjZSh0aGlzLnBsYWNlaG9sZGVyQ2hhciwgJycpO1xuICAgIH1cblxuICAgIC8vIFBhcnNlIGRheVxuICAgIGNvbnN0IGRheTogTW9tZW50ID0gZGF5U3RyICYmIHRoaXMuZGF0ZUFkYXB0ZXIucGFyc2UoZGF5U3RyLCB0aGlzLmRheVBhdHRlcm4pIHx8IG51bGw7XG5cbiAgICAvLyBQYXJzZSB0aW1lXG4gICAgY29uc3QgaG91clBhcnRzID0gKHRpbWUgfHwgJycpLnNwbGl0KCc6Jyk7XG4gICAgY29uc3QgaG91ciA9IHBhcnNlSW50KGhvdXJQYXJ0c1swXSB8fCAwKTtcbiAgICBjb25zdCBtaW51dGVzID0gcGFyc2VJbnQoaG91clBhcnRzWzFdIHx8IDApO1xuICAgIGNvbnN0IGRhdGVUaW1lID0gZGF5ICYmIGRheVxuICAgICAgLmxvY2FsZSh0aGlzLmxvY2FsZSkgLy8gc2V0IGFzIHRpbWUgYXMgbG9jYWxlIHRpbWVcbiAgICAgIC5ob3VyKGhvdXIpLm1pbnV0ZShtaW51dGVzKS8vIFNldCBsb2NhbCBob3VyXG4gICAgICAuc2Vjb25kcygwKS5taWxsaXNlY29uZCgwKSAvLyBSZXNldCBzZWNvbmRzL21pbGxpc2Vjb25kXG4gICAgICAudXRjKCk7IC8vIENvbnZlcnQgdG8gVVRDIChhdm9pZCBUWiBvZmZzZXQgaW4gZmluYWwgc3RyaW5nKVxuXG4gICAgLy8gU2V0IG1vZGVsIHZhbHVlXG4gICAgdGhpcy5lbWl0Q2hhbmdlKGRhdGVUaW1lKTtcbiAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHdhaXRLZXlib2FyZEhpZGUod2FpdEtleWJvYXJkRGVsYXk6IGJvb2xlYW4pIHtcblxuICAgIGlmICghdGhpcy5rZXlib2FyZCB8fCAhdGhpcy5rZXlib2FyZC5pc1Zpc2libGUpIHJldHVybjsgLy8gb2ssIGFscmVhZHkgaGlkZGVuIChvciBub3QgYWNjZXNzaWJsZSlcblxuICAgIC8vIEZvcmNlIGtleWJvYXJkIHRvIGJlIGhpZGVcbiAgICB0aGlzLmtleWJvYXJkLmhpZGUoKTtcblxuICAgIC8vIFdhaXQgaGlkZSBvY2N1clxuICAgIGF3YWl0IHRoaXMua2V5Ym9hcmQub25LZXlib2FyZEhpZGUoKS5waXBlKGZpcnN0KCkpLnRvUHJvbWlzZSgpO1xuXG4gICAgLy8gV2FpdCBhbiBhZGRpdGlvbmFsIGRlbGF5IGlmIG5lZWQgKGRlcGVuZGluZyBvbiB0aGUgT1MpXG4gICAgaWYgKHRoaXMuX2tleWJvYXJkSGlkZURlbGF5ID4gMCAmJiB3YWl0S2V5Ym9hcmREZWxheSkge1xuICAgICAgYXdhaXQgc2xlZXAodGhpcy5fa2V5Ym9hcmRIaWRlRGVsYXkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW1pdENoYW5nZSh2YWx1ZTogTW9tZW50KSB7XG5cbiAgICAvLyBHZXQgdGhlIG1vZGVsIHZhbHVlXG4gICAgY29uc3QgZGF0ZVN0ciA9IHRvRGF0ZUlTT1N0cmluZyh2YWx1ZSkgfHwgbnVsbDtcblxuICAgIGlmICh0aGlzLmZvcm1Db250cm9sLnZhbHVlICE9PSBkYXRlU3RyKSB7XG5cbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2NvbnNvbGUuZGVidWcoJ1ttYXQtZGF0ZS10aW1lXSBFbWl0IG5ldyB2YWx1ZTogJyArIGRhdGVTdHIpO1xuXG4gICAgICAvLyBBcHBseSB0byBmb3JtIGNvbnRyb2wuID0+IFdpbGwgY2FsbCB3cml0ZVZhbHVlKClcbiAgICAgIC8vIE5PVCBORUVELCBiZWNhdXNlIGEgZm9ybUNvbnRyb2wgc2hvdWxkIE5PVCBiZSB1c2VkIGJ5IG11bHRpcGxlIGZpZWxkc1xuICAgICAgLy90aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKGRhdGVTdHIsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG5cbiAgICAgIC8vIENoYW5nZXMgY29tZXMgZnJvbSBpbnNpZGUgZnVuY3Rpb246IHVzZSB0aGUgY2FsbGJhY2tcbiAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soZGF0ZVN0cik7XG5cbiAgICAgIC8vIENoZWNrIGlmIG5lZWQgdG8gdXBkYXRlIGNvbnRyb2xzXG4gICAgICB0aGlzLmNoZWNrSWZUb3VjaGVkKCk7XG4gICAgfVxuICB9XG5cblxuICBwcml2YXRlIHVwZGF0ZVRhYkluZGV4KCkge1xuICAgIGlmIChpc05pbCh0aGlzLl90YWJpbmRleCkgfHwgdGhpcy5fdGFiaW5kZXggPT09IC0xKSByZXR1cm47IC8vIHNraXBcblxuICAgIC8vIEZvY3VzIHRvIGZpcnN0IGlucHV0XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm1hdElucHV0cy5mb3JFYWNoKChlbGVtZW50UmVmLCBpbmRleCkgPT4ge1xuICAgICAgICBzZXRUYWJJbmRleChlbGVtZW50UmVmLCB0aGlzLl90YWJpbmRleCArIGluZGV4KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbWFya0FzVG91Y2hlZChvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbn0pIHtcbiAgICB0aGlzLmRheUNvbnRyb2wubWFya0FzVG91Y2hlZChvcHRzKTtcbiAgICB0aGlzLmhvdXJDb250cm9sLm1hcmtBc1RvdWNoZWQob3B0cyk7XG4gICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrQXNEaXJ0eShvcHRzPzogYW55KSB7XG4gICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eShvcHRzKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cblxuIl19
387
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuZGF0ZXRpbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9kYXRldGltZS9tYXRlcmlhbC5kYXRldGltZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBYyxVQUFVLEVBQUUsS0FBSyxFQUFxQixRQUFRLEVBQXVCLFNBQVMsRUFBRSxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFOUwsT0FBTyxFQUF1QixXQUFXLEVBQWUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDakksT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLFFBQVEsRUFBUyxNQUFNLFFBQVEsQ0FBQztBQUN4QyxPQUFPLEVBQUMsd0JBQXdCLEVBQUUsc0JBQXNCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDcEQsT0FBTyxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQWUsV0FBVyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxLQUFLLEVBQUUsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3JHLE9BQU8sRUFBQyxpQkFB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QUM7SUFDckMsQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QixDQUFDOzs7WUE3YUYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxxQkFBcUI7Z0JBQy9CLHk0UUFBdUM7Z0JBRXZDLFNBQVMsRUFBRTtvQkFDVCxzQkFBc0I7aUJBQ3ZCO2dCQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNOzthQUNoRDs7O1lBOUJPLGlCQUFpQjtZQWJqQixnQkFBZ0I7WUFETSxXQUFXO1lBRlIsaUJBQWlCO1lBTzFDLFFBQVEsdUJBd0dYLFFBQVE7WUE3RzJDLGtCQUFrQix1QkE4R3JFLFFBQVE7OzswQkEvQ1YsS0FBSzs4QkFDTCxLQUFLOzBCQUNMLEtBQUs7eUJBQ0wsS0FBSzt1QkFDTCxLQUFLO3FCQUNMLEtBQUs7c0JBQ0wsS0FBSzs4QkFDTCxLQUFLO3dCQUNMLEtBQUs7d0JBQ0wsS0FBSzt3QkFDTCxLQUFLOytCQUNMLEtBQUs7dUJBRUwsS0FBSzt1QkFTTCxLQUFLO3lCQWVMLFNBQVMsU0FBQyxZQUFZO3lCQUN0QixTQUFTLFNBQUMsWUFBWTt3QkFDdEIsWUFBWSxTQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBmb3J3YXJkUmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBQcm92aWRlciwgUXVlcnlMaXN0LCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zsb2F0TGFiZWxUeXBlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwRGlyZWN0aXZlLCBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdG9yc30gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7aXNNb21lbnQsIE1vbWVudH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7REVGQVVMVF9QTEFDRUhPTERFUl9DSEFSLCBLRVlCT0FSRF9ISURFX0RFTEFZX01TfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHtTaGFyZWRWYWxpZGF0b3JzfSBmcm9tICcuLi8uLi92YWxpZGF0b3IvdmFsaWRhdG9ycyc7XG5pbXBvcnQge0tleWJvYXJkfSBmcm9tICdAaW9uaWMtbmF0aXZlL2tleWJvYXJkL25neCc7XG5pbXBvcnQge2ZpbHRlciwgZmlyc3R9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7SW5wdXRFbGVtZW50LCBzZXRUYWJJbmRleH0gZnJvbSAnLi4vLi4vaW5wdXRzJztcbmltcG9ydCB7aXNGb2N1c2FibGVFbGVtZW50fSBmcm9tICcuLi8uLi9mb2N1c2FibGUnO1xuaW1wb3J0IHttZXJnZSwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7RGF0ZUZpbHRlckZuLCBNYXREYXRlcGlja2VyLCBNYXREYXRlcGlja2VySW5wdXRFdmVudH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQge2lzQmxhbmtTdHJpbmcsIGlzTmlsLCBpc05pbE9yQmxhbmssIGlzTm90TmlsLCBpc05vdE5pbEJvb2xlYW4sIHNsZWVwfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHtmcm9tRGF0ZUlTT1N0cmluZywgdG9EYXRlSVNPU3RyaW5nfSBmcm9tICcuLi8uLi9kYXRlcyc7XG5pbXBvcnQge2lzTW9iaWxlfSBmcm9tICcuLi8uLi9wbGF0Zm9ybXMnO1xuaW1wb3J0IHtNb21lbnREYXRlQWRhcHRlcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwtbW9tZW50LWFkYXB0ZXInO1xuXG5jb25zdCBERUZBVUxUX1ZBTFVFX0FDQ0VTU09SOiBQcm92aWRlciA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1hdERhdGVUaW1lKSxcbiAgbXVsdGk6IHRydWVcbn07XG5cbmNvbnN0IERBWV9NQVNLID0gWy9cXGQvLCAvXFxkLywgJy8nLCAvXFxkLywgL1xcZC8sICcvJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC9dO1xuXG5jb25zdCBIT1VSX1JFR0VYUCA9IC9eWzAxMl1bMC05XVs6XVswMTIzNDVdWzAtOV0kLztcbmNvbnN0IEhPVVJfTUFTSyA9IFsvWzAxMl0vLCAvXFxkLywgJzonLCAvWzAxMjM0NV0vLCAvXFxkL107XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuZGVjbGFyZSBpbnRlcmZhY2UgTmd4VGltZVBpY2tlciB7XG4gIHNlbGVjdGVkSG91cjogeyB0aW1lOiBudW1iZXIgfTtcbiAgc2VsZWN0ZWRNaW51dGU6IHsgdGltZTogbnVtYmVyIH07XG4gIG9wZW4oKTtcbiAgY2xvc2UoKTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWF0LWRhdGUtdGltZS1maWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXRlcmlhbC5kYXRldGltZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWF0ZXJpYWwuZGF0ZXRpbWUuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICBERUZBVUxUX1ZBTFVFX0FDQ0VTU09SLFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBNYXREYXRlVGltZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgSW5wdXRFbGVtZW50IHtcbiAgcHJpdmF0ZSBfb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgX29uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF93cml0aW5nID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfZGlzYWJsaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgX3RhYmluZGV4OiBudW1iZXI7XG4gIHByaXZhdGUgX2tleWJvYXJkSGlkZURlbGF5OiBudW1iZXI7XG5cbiAgX3JlYWRvbmx5ID0gZmFsc2U7XG4gIGRheUNvbnRyb2w6IEZvcm1Db250cm9sO1xuICBob3VyQ29udHJvbDogRm9ybUNvbnRyb2w7XG4gIGRpc3BsYXlQYXR0ZXJuOiBzdHJpbmc7XG4gIGRheVBhdHRlcm46IHN0cmluZztcbiAgbG9jYWxlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRheU1hc2sgPSBEQVlfTUFTSztcbiAgcmVhZG9ubHkgaG91ck1hc2sgPSBIT1VSX01BU0s7XG5cbiAgQElucHV0KCkgZm9ybUNvbnRyb2w6IEZvcm1Db250cm9sO1xuICBASW5wdXQoKSBmb3JtQ29udHJvbE5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgQElucHV0KCkgZmxvYXRMYWJlbDogRmxvYXRMYWJlbFR5cGUgPSAnYXV0byc7XG4gIEBJbnB1dCgpIHJlcXVpcmVkOiBib29sZWFuO1xuICBASW5wdXQoKSBtb2JpbGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNvbXBhY3QgPSBmYWxzZTtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXJDaGFyOiBzdHJpbmcgPSBERUZBVUxUX1BMQUNFSE9MREVSX0NIQVI7XG4gIEBJbnB1dCgpIGF1dG9mb2N1cyA9IGZhbHNlO1xuICBASW5wdXQoKSBzdGFydERhdGU6IE1vbWVudCB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBjbGVhcmFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgZGF0ZVBpY2tlckZpbHRlcjogRGF0ZUZpbHRlckZuPE1vbWVudD47XG5cbiAgQElucHV0KCkgc2V0IHJlYWRvbmx5KHZhbHVlOiBib29sZWFuKXtcbiAgICB0aGlzLl9yZWFkb25seSA9IHZhbHVlO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXQgcmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRvbmx5O1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHRhYmluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5fdGFiaW5kZXggIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl90YWJpbmRleCA9IHZhbHVlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVRhYkluZGV4KCkpO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0YWJpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl90YWJpbmRleDtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnZGF0ZVBpY2tlcicpIGRhdGVQaWNrZXI6IE1hdERhdGVwaWNrZXI8TW9tZW50PjtcbiAgQFZpZXdDaGlsZCgndGltZVBpY2tlcicpIHRpbWVQaWNrZXI6IE5neFRpbWVQaWNrZXI7XG4gIEBWaWV3Q2hpbGRyZW4oJ21hdElucHV0JykgbWF0SW5wdXRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkYXRlQWRhcHRlcjogTW9tZW50RGF0ZUFkYXB0ZXIsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBrZXlib2FyZDogS2V5Ym9hcmQsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmb3JtR3JvdXBEaXI6IEZvcm1Hcm91cERpcmVjdGl2ZSxcbiAgKSB7XG4gICAgdGhpcy5sb2NhbGUgPSAodHJhbnNsYXRlLmN1cnJlbnRMYW5nIHx8IHRyYW5zbGF0ZS5kZWZhdWx0TGFuZykuc3Vic3RyKDAsIDIpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtQ29udHJvbCA9IHRoaXMuZm9ybUNvbnRyb2wgfHwgdGhpcy5mb3JtQ29udHJvbE5hbWUgJiYgdGhpcy5mb3JtR3JvdXBEaXIgJiYgdGhpcy5mb3JtR3JvdXBEaXIuZm9ybS5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpIGFzIEZvcm1Db250cm9sO1xuICAgIGlmICghdGhpcy5mb3JtQ29udHJvbCkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIG1hbmRhdG9yeSBhdHRyaWJ1dGUgXFwnZm9ybUNvbnRyb2xcXCcgb3IgXFwnZm9ybUNvbnRyb2xOYW1lXFwnIGluIDxtYXQtZGF0ZS10aW1lLWZpZWxkPi4nKTtcblxuICAgIHRoaXMubW9iaWxlID0gaXNOb3ROaWwodGhpcy5tb2JpbGUpID8gdGhpcy5tb2JpbGUgOiBpc01vYmlsZSh3aW5kb3cpO1xuICAgIC8vIFdvcmthcm91bmQgYmVjYXVzZSBpb24tZGF0ZXRpbWUgaGFzIGlzc3VlIChkbyBub3QgcmV0dXJuZWQgYSBJU08gZGF0ZSlcbiAgICB0aGlzLl9rZXlib2FyZEhpZGVEZWxheSA9IHRoaXMubW9iaWxlICYmIEtFWUJPQVJEX0hJREVfREVMQVlfTVMgfHwgMDtcblxuICAgIHRoaXMucmVxdWlyZWQgPSBpc05vdE5pbEJvb2xlYW4odGhpcy5yZXF1aXJlZCkgPyB0aGlzLnJlcXVpcmVkIDogKHRoaXMuZm9ybUNvbnRyb2wudmFsaWRhdG9yID09PSBWYWxpZGF0b3JzLnJlcXVpcmVkIHx8IGlzQmxhbmtTdHJpbmcodGhpcy5yZXF1aXJlZCkpO1xuXG4gICAgLy8gQWRkICd2YWxpZERhdGUnIHZhbGlkYXRvciAod2hlbiBleGlzdGluZyB2YWxpZGF0b3IgYXJlIG51bGwgb3IgcmVxdWlyZWQsIHRvIGJlIHN1cmUgdG8ga2VlcClcbiAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wudmFsaWRhdG9yIHx8IHRoaXMuZm9ybUNvbnRyb2wudmFsaWRhdG9yID09PSBWYWxpZGF0b3JzLnJlcXVpcmVkKSB7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModGhpcy5yZXF1aXJlZCA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBTaGFyZWRWYWxpZGF0b3JzLnZhbGlkRGF0ZV0gOiBTaGFyZWRWYWxpZGF0b3JzLnZhbGlkRGF0ZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMucmVxdWlyZWQgPyBbdGhpcy5mb3JtQ29udHJvbC52YWxpZGF0b3IsIFZhbGlkYXRvcnMucmVxdWlyZWQsIFNoYXJlZFZhbGlkYXRvcnMudmFsaWREYXRlXSA6XG4gICAgICAgIFt0aGlzLmZvcm1Db250cm9sLnZhbGlkYXRvciwgU2hhcmVkVmFsaWRhdG9ycy52YWxpZERhdGVdKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIGRheSBjb250cm9sXG4gICAgdGhpcy5kYXlDb250cm9sID0gdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKG51bGwpO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBob3VyIGNvbnRyb2xcbiAgICB0aGlzLmhvdXJDb250cm9sID0gdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKG51bGwsIHRoaXMubW9iaWxlID8gbnVsbCA6IFZhbGlkYXRvcnMucGF0dGVybihIT1VSX1JFR0VYUCkpO1xuXG4gICAgLy8gR2V0IHBhdHRlcm5zIHRvIGRpc3BsYXkgZGF0ZSBhbmQgZGF0ZSt0aW1lXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuZ2V0KFsnQ09NTU9OLkRBVEVfUEFUVEVSTicsICdDT01NT04uREFURV9USU1FX1BBVFRFUk4nXSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHBhdHRlcm5zKSA9PiB0aGlzLnVwZGF0ZVBhdHRlcm4ocGF0dGVybnMpKVxuICAgICk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgbWVyZ2UoXG4gICAgICAgIHRoaXMuZGF5Q29udHJvbC52YWx1ZUNoYW5nZXMsXG4gICAgICAgIHRoaXMuaG91ckNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHRoaXMub25Gb3JtQ2hhbmdlKCkpXG4gICAgKTtcblxuICAgIC8vIExpc3RlbiBzdGF0dXMgY2hhbmdlcyAod2hlbiBkb25lIG91dHNpZGUgdGhlIGNvbXBvbmVudCAgLSBlLmcuIHdoZW4gc2V0RXJyb3JzKCkgaXMgY2FsbGluZyBvbiB0aGUgZm9ybUNvbnRyb2wpXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKF8pID0+ICF0aGlzLnJlYWRvbmx5ICYmICF0aGlzLl93cml0aW5nICYmICF0aGlzLl9kaXNhYmxpbmcpIC8vIFNraXBcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMubWFya0ZvckNoZWNrKCkpXG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlVGFiSW5kZXgoKTtcblxuICAgIHRoaXMuX3dyaXRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3dyaXRpbmcpIHJldHVybjsgLy8gU2tpcFxuICAgIHRoaXMuX3dyaXRpbmcgPSB0cnVlO1xuXG4gICAgLy8gREVCVUdcbiAgICAvLyBjb25zb2xlLmRlYnVnKFwiW21hdC1kYXRlLXRpbWVdIHdyaXRlVmFsdWUoKSB3aXRoOlwiLCB2YWx1ZSk7XG5cbiAgICBjb25zdCBkYXRlID0gZnJvbURhdGVJU09TdHJpbmcodmFsdWUpO1xuXG4gICAgaWYgKCFkYXRlIHx8ICFkYXRlLmlzVmFsaWQoKSkge1xuICAgICAgdGhpcy5kYXlDb250cm9sLnBhdGNoVmFsdWUobnVsbCwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIHRoaXMuaG91ckNvbnRyb2wucGF0Y2hWYWx1ZShudWxsLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIC8vIEZvcm1hdCBkYXlcbiAgICAgIGNvbnN0IGRheSA9IGRhdGUuY2xvbmUoKS5zdGFydE9mKCdkYXknKTtcbiAgICAgIGNvbnN0IGRheVN0ciA9IHRoaXMuZGF0ZUFkYXB0ZXIuZm9ybWF0KGRheSwgdGhpcy5kYXlQYXR0ZXJuKTtcblxuICAgICAgLy8gRm9ybWF0IHRpbWVcbiAgICAgIC8vIC0gRm9ybWF0IGhoXG4gICAgICBsZXQgaG91cjogbnVtYmVyIHwgc3RyaW5nID0gZGF0ZS5ob3VyKCk7XG4gICAgICBob3VyID0gaG91ciA8IDEwID8gKCcwJyArIGhvdXIpIDogaG91cjtcbiAgICAgIC8vIC0gRm9ybWF0IG1tXG4gICAgICBsZXQgbWludXRlczogbnVtYmVyIHwgc3RyaW5nID0gZGF0ZS5taW51dGVzKCk7XG4gICAgICBtaW51dGVzID0gbWludXRlcyA8IDEwID8gKCcwJyArIG1pbnV0ZXMpIDogbWludXRlcztcbiAgICAgIGNvbnN0IHRpbWVTdHIgPSBgJHtob3VyfToke21pbnV0ZXN9YDtcblxuICAgICAgLy8gVXBkYXRlIGNvbnRyb2xzXG4gICAgICB0aGlzLmRheUNvbnRyb2wucGF0Y2hWYWx1ZShkYXlTdHIsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICB0aGlzLmhvdXJDb250cm9sLnBhdGNoVmFsdWUodGltZVN0ciwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB9XG5cbiAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Rpc2FibGluZykgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICB0aGlzLl9kaXNhYmxpbmcgPSB0cnVlO1xuICAgIGlmIChpc0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLmRheUNvbnRyb2wuZGlzYWJsZSh7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgdGhpcy5ob3VyQ29udHJvbC5kaXNhYmxlKHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF5Q29udHJvbC5lbmFibGUoe2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIHRoaXMuaG91ckNvbnRyb2wuZW5hYmxlKHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgfVxuICAgIHRoaXMuX2Rpc2FibGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uRGF0ZVBpY2tlckNoYW5nZShldmVudDogTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQ8TW9tZW50Pik6IHZvaWQge1xuICAgIC8vIE1ha2Ugc3VyZSBldmVudCBpcyB2YWxpZFxuICAgIGlmICghZXZlbnQgfHwgKGV2ZW50LnZhbHVlICE9PSBudWxsICYmICFpc01vbWVudChldmVudC52YWx1ZSkpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgTWF0RGF0ZXBpY2tlciBldmVudC4gU2tpcHBpbmcnLCBldmVudCk7XG4gICAgICByZXR1cm47IC8vIFNraXBcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IHRvIHVzYWJsZSBkYXRlLCB0aGVuIGNvbnZlcnQgdG8gZGF5IHBhdHRlcm4gKGUuZyBERC9NTS9ZWVlZKVxuICAgIGNvbnN0IGRheSA9IGV2ZW50LnZhbHVlICYmIGV2ZW50LnZhbHVlXG4gICAgICAubG9jYWxlKHRoaXMubG9jYWxlKSAvLyBzZXQgbG9jYWxlXG4gICAgICAuaG91cigwKS5taW51dGUoMCkuc2Vjb25kcygwKS5taWxsaXNlY29uZCgwKSAvLyBSZXNldCBob3VyXG4gICAgICAudXRjKHRydWUpO1xuICAgIGNvbnN0IGRheVN0ciA9IGRheSAmJiB0aGlzLmRhdGVBZGFwdGVyLmZvcm1hdChkYXksIHRoaXMuZGF5UGF0dGVybikgfHzCoG51bGw7XG5cbiAgICAvLyBVcGRhdGUgdGhlIGRheSBjb250cm9sXG4gICAgaWYgKHRoaXMuZGF5Q29udHJvbC52YWx1ZSAhPT0gZGF5U3RyKSB7XG5cbiAgICAgIC8vIERFQlVHXG4gICAgICAvLyBjb25zb2xlLmRlYnVnKFwiW21hdC1kYXRlLXRpbWVdIG9uRGF0ZVBpY2tlckNoYW5nZSgpIG5ldyB2YWx1ZTpcIiwgZGF5U3RyKTtcblxuICAgICAgdGhpcy5kYXlDb250cm9sLnNldFZhbHVlKGRheVN0ciwge1xuICAgICAgICBlbWl0RXZlbnQ6IHRydWUgLy8gV2lsbCBjYWxsIG9uRm9ybUNoYW5nZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cblxuICBvblRpbWVQaWNrZXJDaGFuZ2UodGltZVN0cjogc3RyaW5nKSB7XG4gICAgLy8gVXBkYXRlIHRoZSB0aW1lIGNvbnRyb2wsIGlmIG5lZWRcbiAgICBpZiAodGhpcy5ob3VyQ29udHJvbC52YWx1ZSAhPT0gdGltZVN0cikge1xuXG4gICAgICAvLyBERUJVR1xuICAgICAgLy8gY29uc29sZS5kZWJ1ZyhcIlttYXQtZGF0ZS10aW1lXSBvblRpbWVQaWNrZXJDaGFuZ2UoKSBuZXcgdmFsdWU6XCIsIHRpbWVTdHIpO1xuXG4gICAgICB0aGlzLmhvdXJDb250cm9sLnNldFZhbHVlKHRpbWVTdHIsIHtcbiAgICAgICAgZW1pdEV2ZW50OiB0cnVlIC8vIFdpbGwgY2FsbCBvbkZvcm1DaGFuZ2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9wZW5EYXRlUGlja2VySWZNb2JpbGUoZXZlbnQ6IFVJRXZlbnQsIGRhdGVQaWNrZXI/OiBNYXREYXRlcGlja2VyPGFueT4pIHtcbiAgICBpZiAoIXRoaXMubW9iaWxlIHx8IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcblxuICAgIHRoaXMucHJldmVudEV2ZW50KGV2ZW50KTtcblxuICAgIC8vIE1ha2Ugc3VyZSB0aGUga2V5Ym9hcmQgaXMgY2xvc2VkXG4gICAgYXdhaXQgdGhpcy53YWl0S2V5Ym9hcmRIaWRlKGZhbHNlKTtcblxuICAgIC8vIE9wZW4gdGhlIHBpY2tlclxuICAgIHRoaXMub3BlbkRhdGVQaWNrZXIobnVsbCwgZGF0ZVBpY2tlcik7XG4gIH1cblxuICBwdWJsaWMgb3BlbkRhdGVQaWNrZXIoZXZlbnQ/OiBVSUV2ZW50LCBkYXRlUGlja2VyPzogTWF0RGF0ZXBpY2tlcjxhbnk+KSB7XG4gICAgZGF0ZVBpY2tlciA9IGRhdGVQaWNrZXIgfHwgdGhpcy5kYXRlUGlja2VyO1xuICAgIGlmIChkYXRlUGlja2VyKSB7XG5cbiAgICAgIGlmIChldmVudCkgdGhpcy5wcmV2ZW50RXZlbnQoZXZlbnQpO1xuXG4gICAgICBpZiAoIWRhdGVQaWNrZXIub3BlbmVkKSB7XG4gICAgICAgIGRhdGVQaWNrZXIub3BlbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9wZW5UaW1lUGlja2VySWZNb2JpbGUoZXZlbnQ6IFVJRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMubW9iaWxlIHx8IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcblxuICAgIHRoaXMucHJldmVudEV2ZW50KGV2ZW50KTtcblxuICAgIC8vIE1ha2Ugc3VyZSB0aGUga2V5Ym9hcmQgaXMgY2xvc2VkXG4gICAgYXdhaXQgdGhpcy53YWl0S2V5Ym9hcmRIaWRlKHRydWUpO1xuXG4gICAgLy8gT3BlbiB0aGUgcGlja2VyXG4gICAgdGhpcy5vcGVuVGltZVBpY2tlcihudWxsKTtcbiAgfVxuXG4gIG9wZW5UaW1lUGlja2VyKGV2ZW50OiBVSUV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLnRpbWVQaWNrZXIpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgdGhpcy5wcmV2ZW50RXZlbnQoZXZlbnQpO1xuXG4gICAgdGhpcy50aW1lUGlja2VyLm9wZW4oKTtcbiAgfVxuXG4gIHByZXZlbnRFdmVudChldmVudDogVUlFdmVudCkge1xuICAgIGlmICghZXZlbnQpIHJldHVybjtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gIH1cblxuICBmb2N1cygpIHtcbiAgICBpZiAoIXRoaXMubWF0SW5wdXRzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50UmVmID0gdGhpcy5tYXRJbnB1dHNbMF07IC8vIGdldCB0aGUgZmlyc3QgZWxlbWVudFxuICAgICAgaWYgKGlzRm9jdXNhYmxlRWxlbWVudChlbGVtZW50UmVmKSkge1xuICAgICAgICBlbGVtZW50UmVmLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKG51bGwpO1xuICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xuICAgIHRoaXMubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIC8qIC0tIHByaXZhdGUgbWV0aG9kIC0tICovXG5cbiAgcHJpdmF0ZSB1cGRhdGVQYXR0ZXJuKHBhdHRlcm5zOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgIHRoaXMuZGlzcGxheVBhdHRlcm4gPSAocGF0dGVybnNbJ0NPTU1PTi5EQVRFX1RJTUVfUEFUVEVSTiddICE9PSAnQ09NTU9OLkRBVEVfVElNRV9QQVRURVJOJyA/IHBhdHRlcm5zWydDT01NT04uREFURV9USU1FX1BBVFRFUk4nXSA6ICdMIExUJyk7XG4gICAgdGhpcy5kYXlQYXR0ZXJuID0gKHBhdHRlcm5zWydDT01NT04uREFURV9QQVRURVJOJ10gIT09ICdDT01NT04uREFURV9QQVRURVJOJyA/IHBhdHRlcm5zWydDT01NT04uREFURV9QQVRURVJOJ10gOiAnTCcpO1xuICB9XG5cbiAgY2hlY2tJZlRvdWNoZWQoKSB7XG4gICAgaWYgKHRoaXMuZGF5Q29udHJvbC50b3VjaGVkIHx8IHRoaXMuaG91ckNvbnRyb2wudG91Y2hlZCkge1xuICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvbkZvcm1DaGFuZ2UoKSB7XG4gICAgaWYgKHRoaXMuX3dyaXRpbmcpIHJldHVybjsgLy8gU2tpcCBpZiBjYWxsIGJ5IHNlbGZcbiAgICB0aGlzLl93cml0aW5nID0gdHJ1ZTtcblxuICAgIGxldCBkYXlTdHIgPSB0aGlzLmRheUNvbnRyb2wudmFsdWU7XG4gICAgY29uc3QgdGltZSA9IHRoaXMuaG91ckNvbnRyb2wudmFsdWU7XG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZyhgW21hdC1kYXRlLXRpbWVdIG9uRm9ybUNoYW5nZSgpIGZyb20gZXZlbnQ6ICR7ZXZlbnR9IC0gY29udHJvbHMgdmFsdWVzOiBgLCBbZGF5U3RyLCB0aW1lXSk7XG5cbiAgICBjb25zdCBpbmNvbXBsZXRlVmFsdWUgPSBpc05pbE9yQmxhbmsodGltZSkgIT09IGlzTmlsT3JCbGFuayhkYXlTdHIpO1xuICAgIGlmIChpbmNvbXBsZXRlVmFsdWUgfHwgdGhpcy5kYXlDb250cm9sLmludmFsaWQgfHwgdGhpcy5ob3VyQ29udHJvbC5pbnZhbGlkKSB7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1BlbmRpbmcoe29ubHlTZWxmOiB0cnVlfSk7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldEVycm9ycyh7XG4gICAgICAgIHZhbGlkRGF0ZTogaW5jb21wbGV0ZVZhbHVlLFxuICAgICAgICAuLi50aGlzLmZvcm1Db250cm9sLmVycm9ycyxcbiAgICAgICAgLi4udGhpcy5kYXlDb250cm9sLmVycm9ycyxcbiAgICAgICAgLi4udGhpcy5ob3VyQ29udHJvbC5lcnJvcnNcbiAgICAgIH0pO1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIE1ha2UgdG8gcmVtb3ZlIHBsYWNlaG9sZGVyIGNoYXJzXG4gICAgd2hpbGUgKGRheVN0ciAmJiBkYXlTdHIuaW5kZXhPZih0aGlzLnBsYWNlaG9sZGVyQ2hhcikgIT09IC0xKSB7XG4gICAgICBkYXlTdHIgPSBkYXlTdHIucmVwbGFjZSh0aGlzLnBsYWNlaG9sZGVyQ2hhciwgJycpO1xuICAgIH1cblxuICAgIC8vIFBhcnNlIGRheVxuICAgIGNvbnN0IGRheTogTW9tZW50ID0gZGF5U3RyICYmIHRoaXMuZGF0ZUFkYXB0ZXIucGFyc2UoZGF5U3RyLCB0aGlzLmRheVBhdHRlcm4pIHx8IG51bGw7XG5cbiAgICAvLyBQYXJzZSB0aW1lXG4gICAgY29uc3QgaG91clBhcnRzID0gKHRpbWUgfHwgJycpLnNwbGl0KCc6Jyk7XG4gICAgY29uc3QgaG91ciA9IHBhcnNlSW50KGhvdXJQYXJ0c1swXSB8fCAwKTtcbiAgICBjb25zdCBtaW51dGVzID0gcGFyc2VJbnQoaG91clBhcnRzWzFdIHx8IDApO1xuICAgIGNvbnN0IGRhdGVUaW1lID0gZGF5ICYmIGRheVxuICAgICAgLmxvY2FsZSh0aGlzLmxvY2FsZSkgLy8gc2V0IGFzIHRpbWUgYXMgbG9jYWxlIHRpbWVcbiAgICAgIC5ob3VyKGhvdXIpLm1pbnV0ZShtaW51dGVzKS8vIFNldCBsb2NhbCBob3VyXG4gICAgICAuc2Vjb25kcygwKS5taWxsaXNlY29uZCgwKSAvLyBSZXNldCBzZWNvbmRzL21pbGxpc2Vjb25kXG4gICAgICAudXRjKCk7IC8vIENvbnZlcnQgdG8gVVRDIChhdm9pZCBUWiBvZmZzZXQgaW4gZmluYWwgc3RyaW5nKVxuXG4gICAgLy8gU2V0IG1vZGVsIHZhbHVlXG4gICAgdGhpcy5lbWl0Q2hhbmdlKGRhdGVUaW1lKTtcbiAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHdhaXRLZXlib2FyZEhpZGUod2FpdEtleWJvYXJkRGVsYXk6IGJvb2xlYW4pIHtcblxuICAgIGlmICghdGhpcy5rZXlib2FyZCB8fCAhdGhpcy5rZXlib2FyZC5pc1Zpc2libGUpIHJldHVybjsgLy8gb2ssIGFscmVhZHkgaGlkZGVuIChvciBub3QgYWNjZXNzaWJsZSlcblxuICAgIC8vIEZvcmNlIGtleWJvYXJkIHRvIGJlIGhpZGVcbiAgICB0aGlzLmtleWJvYXJkLmhpZGUoKTtcblxuICAgIC8vIFdhaXQgaGlkZSBvY2N1clxuICAgIGF3YWl0IHRoaXMua2V5Ym9hcmQub25LZXlib2FyZEhpZGUoKS5waXBlKGZpcnN0KCkpLnRvUHJvbWlzZSgpO1xuXG4gICAgLy8gV2FpdCBhbiBhZGRpdGlvbmFsIGRlbGF5IGlmIG5lZWQgKGRlcGVuZGluZyBvbiB0aGUgT1MpXG4gICAgaWYgKHRoaXMuX2tleWJvYXJkSGlkZURlbGF5ID4gMCAmJiB3YWl0S2V5Ym9hcmREZWxheSkge1xuICAgICAgYXdhaXQgc2xlZXAodGhpcy5fa2V5Ym9hcmRIaWRlRGVsYXkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW1pdENoYW5nZSh2YWx1ZTogTW9tZW50KSB7XG5cbiAgICAvLyBHZXQgdGhlIG1vZGVsIHZhbHVlXG4gICAgY29uc3QgZGF0ZVN0ciA9IHRvRGF0ZUlTT1N0cmluZyh2YWx1ZSkgfHwgbnVsbDtcblxuICAgIGlmICh0aGlzLmZvcm1Db250cm9sLnZhbHVlICE9PSBkYXRlU3RyKSB7XG5cbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2NvbnNvbGUuZGVidWcoJ1ttYXQtZGF0ZS10aW1lXSBFbWl0IG5ldyB2YWx1ZTogJyArIGRhdGVTdHIpO1xuXG4gICAgICAvLyBBcHBseSB0byBmb3JtIGNvbnRyb2wuID0+IFdpbGwgY2FsbCB3cml0ZVZhbHVlKClcbiAgICAgIC8vIE5PVCBORUVELCBiZWNhdXNlIGEgZm9ybUNvbnRyb2wgc2hvdWxkIE5PVCBiZSB1c2VkIGJ5IG11bHRpcGxlIGZpZWxkc1xuICAgICAgLy90aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKGRhdGVTdHIsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG5cbiAgICAgIC8vIENoYW5nZXMgY29tZXMgZnJvbSBpbnNpZGUgZnVuY3Rpb246IHVzZSB0aGUgY2FsbGJhY2tcbiAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soZGF0ZVN0cik7XG5cbiAgICAgIC8vIENoZWNrIGlmIG5lZWQgdG8gdXBkYXRlIGNvbnRyb2xzXG4gICAgICB0aGlzLmNoZWNrSWZUb3VjaGVkKCk7XG4gICAgfVxuICB9XG5cblxuICBwcml2YXRlIHVwZGF0ZVRhYkluZGV4KCkge1xuICAgIGlmIChpc05pbCh0aGlzLl90YWJpbmRleCkgfHwgdGhpcy5fdGFiaW5kZXggPT09IC0xKSByZXR1cm47IC8vIHNraXBcblxuICAgIC8vIEZvY3VzIHRvIGZpcnN0IGlucHV0XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm1hdElucHV0cy5mb3JFYWNoKChlbGVtZW50UmVmLCBpbmRleCkgPT4ge1xuICAgICAgICBzZXRUYWJJbmRleChlbGVtZW50UmVmLCB0aGlzLl90YWJpbmRleCArIGluZGV4KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbWFya0FzVG91Y2hlZChvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbn0pIHtcbiAgICB0aGlzLmRheUNvbnRyb2wubWFya0FzVG91Y2hlZChvcHRzKTtcbiAgICB0aGlzLmhvdXJDb250cm9sLm1hcmtBc1RvdWNoZWQob3B0cyk7XG4gICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrQXNEaXJ0eShvcHRzPzogYW55KSB7XG4gICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eShvcHRzKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cblxuIl19