@sumaris-net/ngx-components 1.9.5 → 1.9.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { __awaiter } from "tslib";
2
- import { Inject, Injectable } from '@angular/core';
2
+ import { Inject, Injectable, Optional } from '@angular/core';
3
3
  import { CryptoService } from './crypto.service';
4
4
  import { Account } from './model/account.model';
5
5
  import { PersonUtils } from './model/person.model';
@@ -21,6 +21,9 @@ import { ENVIRONMENT } from '../../../environments/environment.class';
21
21
  import { fromDateISOString } from '../../shared/dates';
22
22
  import { firstNotNilPromise } from '../../shared/observables';
23
23
  import { debounceTime, filter, map, switchMap } from 'rxjs/operators';
24
+ import { Toasts } from '../../shared/toasts';
25
+ import { ToastController } from '@ionic/angular';
26
+ import { TranslateService } from '@ngx-translate/core';
24
27
  import * as i0 from "@angular/core";
25
28
  import * as i1 from "./crypto.service";
26
29
  import * as i2 from "./network.service";
@@ -28,7 +31,9 @@ import * as i3 from "../graphql/graphql.service";
28
31
  import * as i4 from "./local-settings.service";
29
32
  import * as i5 from "@ionic/storage";
30
33
  import * as i6 from "../../shared/file/file.service";
31
- import * as i7 from "../../../environments/environment.class";
34
+ import * as i7 from "@ngx-translate/core";
35
+ import * as i8 from "@ionic/angular";
36
+ import * as i9 from "../../../environments/environment.class";
32
37
  const TOKEN_STORAGE_KEY = 'token';
33
38
  const PUBKEY_STORAGE_KEY = 'pubkey';
34
39
  const SECKEY_STORAGE_KEY = 'seckey';
@@ -147,7 +152,7 @@ const AccountSubscriptions = {
147
152
  }`
148
153
  };
149
154
  export class AccountService extends BaseGraphqlService {
150
- constructor(cryptoService, network, graphql, settings, storage, file, environment) {
155
+ constructor(cryptoService, network, graphql, settings, storage, file, translate, toastController, environment) {
151
156
  super(graphql, environment);
152
157
  this.cryptoService = cryptoService;
153
158
  this.network = network;
@@ -155,6 +160,8 @@ export class AccountService extends BaseGraphqlService {
155
160
  this.settings = settings;
156
161
  this.storage = storage;
157
162
  this.file = file;
163
+ this.translate = translate;
164
+ this.toastController = toastController;
158
165
  this.environment = environment;
159
166
  this.onLogin = new Subject();
160
167
  this.onLogout = new Subject();
@@ -501,13 +508,26 @@ export class AccountService extends BaseGraphqlService {
501
508
  throw new Error('Cannot check account in offline mode');
502
509
  const now = Date.now();
503
510
  console.debug(`[account] Reloading account...`);
504
- yield this.loadData();
505
- yield this.saveLocally();
506
- console.debug(`[account] Reloading account [OK] in ${Date.now() - now}ms`);
507
- // Emit login event to subscribers
508
- this.onLogin.next(this._data);
509
- this.onChange.next(this._data);
510
- return this._data;
511
+ const wasLogin = this.isLogin();
512
+ try {
513
+ yield this.loadData();
514
+ yield this.saveLocally();
515
+ console.debug(`[account] Reloading account [OK] in ${Date.now() - now}ms`);
516
+ // Emit login event to subscribers
517
+ this.onLogin.next(this._data);
518
+ this.onChange.next(this._data);
519
+ return this._data;
520
+ }
521
+ catch (error) {
522
+ // Cannot reload but was login: force to logout
523
+ if (wasLogin && !this.isLogin()) {
524
+ console.error(`[account] Reloading account failed. Will force logout...`, error);
525
+ yield this.logout();
526
+ }
527
+ else {
528
+ throw error;
529
+ }
530
+ }
511
531
  });
512
532
  }
513
533
  /**
@@ -1092,7 +1112,7 @@ export class AccountService extends BaseGraphqlService {
1092
1112
  if (this.network.offline)
1093
1113
  throw new Error('Cannot watch account changes: network is offline.');
1094
1114
  const variables = {
1095
- interval: Math.max(0, (opts === null || opts === void 0 ? void 0 : opts.intervalInSecond) || ((_a = this.environment.account) === null || _a === void 0 ? void 0 : _a.listenIntervalInSecond) || 0)
1115
+ interval: Math.max(0, (opts === null || opts === void 0 ? void 0 : opts.intervalInSeconds) || ((_a = this.environment.account) === null || _a === void 0 ? void 0 : _a.listenIntervalInSeconds) || 0)
1096
1116
  };
1097
1117
  console.debug(`[account] Watching remote changes, every ${variables.interval}s`);
1098
1118
  return this.graphql.subscribe({
@@ -1124,8 +1144,11 @@ export class AccountService extends BaseGraphqlService {
1124
1144
  target.id = source.id || target.id;
1125
1145
  target.updateDate = source.updateDate || target.updateDate;
1126
1146
  }
1147
+ showToast(opts) {
1148
+ return Toasts.show(this.toastController, this.translate, opts);
1149
+ }
1127
1150
  }
1128
- AccountService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountService_Factory() { return new AccountService(i0.ɵɵinject(i1.CryptoService), i0.ɵɵinject(i2.NetworkService), i0.ɵɵinject(i3.GraphqlService), i0.ɵɵinject(i4.LocalSettingsService), i0.ɵɵinject(i5.Storage), i0.ɵɵinject(i6.FileService), i0.ɵɵinject(i7.ENVIRONMENT)); }, token: AccountService, providedIn: "root" });
1151
+ AccountService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountService_Factory() { return new AccountService(i0.ɵɵinject(i1.CryptoService), i0.ɵɵinject(i2.NetworkService), i0.ɵɵinject(i3.GraphqlService), i0.ɵɵinject(i4.LocalSettingsService), i0.ɵɵinject(i5.Storage), i0.ɵɵinject(i6.FileService), i0.ɵɵinject(i7.TranslateService, 8), i0.ɵɵinject(i8.ToastController, 8), i0.ɵɵinject(i9.ENVIRONMENT)); }, token: AccountService, providedIn: "root" });
1129
1152
  AccountService.decorators = [
1130
1153
  { type: Injectable, args: [{ providedIn: 'root' },] }
1131
1154
  ];
@@ -1136,6 +1159,8 @@ AccountService.ctorParameters = () => [
1136
1159
  { type: LocalSettingsService },
1137
1160
  { type: Storage },
1138
1161
  { type: FileService },
1162
+ { type: TranslateService, decorators: [{ type: Optional }] },
1163
+ { type: ToastController, decorators: [{ type: Optional }] },
1139
1164
  { type: undefined, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] }
1140
1165
  ];
1141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL2FjY291bnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLGFBQWEsRUFBVSxNQUFNLGtCQUFrQixDQUFDO0FBRXhELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUM5QyxPQUFPLEVBQVMsV0FBVyxFQUFtQixNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBMkIsWUFBWSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDOUUsT0FBTyxFQUFDLGVBQWUsRUFBRSxJQUFJLEVBQWMsT0FBTyxFQUFFLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQWMsR0FBRyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXZDLE9BQU8sRUFBQyxLQUFLLEVBQVksS0FBSyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDOUQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFDLFVBQVUsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUN0RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFFOUQsT0FBTyxFQUFnQixjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0QsT0FBTyxFQUFDLHFCQUFxQixFQUFlLGdCQUFnQixFQUFD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Q0FBQyxNQUFNO1lBQUUsT0FBTztRQUVwQixNQUFNLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxNQUFNLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQztJQUM3RCxDQUFDOzs7O1lBOWtDRixVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzs7WUEzTHhCLGFBQWE7WUFlRSxjQUFjO1lBSDdCLGNBQWM7WUFDZCxvQkFBb0I7WUFOcEIsT0FBTztZQVNQLFdBQVc7NENBNE9kLE1BQU0sU0FBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDcnlwdG9TZXJ2aWNlLCBLZXlQYWlyfSBmcm9tICcuL2NyeXB0by5zZXJ2aWNlJztcbmltcG9ydCB7RGVwYXJ0bWVudH0gZnJvbSAnLi9tb2RlbC9kZXBhcnRtZW50Lm1vZGVsJztcbmltcG9ydCB7QWNjb3VudH0gZnJvbSAnLi9tb2RlbC9hY2NvdW50Lm1vZGVsJztcbmltcG9ydCB7UGVyc29uLCBQZXJzb25VdGlscywgVXNlclByb2ZpbGVMYWJlbH0gZnJvbSAnLi9tb2RlbC9wZXJzb24ubW9kZWwnO1xuaW1wb3J0IHtMb2NhbFNldHRpbmdzLCBVc2FnZU1vZGUsIFVzZXJTZXR0aW5nc30gZnJvbSAnLi9tb2RlbC9zZXR0aW5ncy5tb2RlbCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgZnJvbSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7RmV0Y2hQb2xpY3ksIGdxbH0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJ0Bpb25pYy9zdG9yYWdlJztcblxuaW1wb3J0IHtpc05pbCwgaXNOb3ROaWwsIHNsZWVwfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7QmFzZUdyYXBocWxTZXJ2aWNlfSBmcm9tICcuL2Jhc2UtZ3JhcGhxbC1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7RXJyb3JDb2RlcywgU2VydmVyRXJyb3JDb2Rlc30gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHtHcmFwaHFsU2VydmljZX0gZnJvbSAnLi4vZ3JhcGhxbC9ncmFwaHFsLnNlcnZpY2UnO1xuaW1wb3J0IHtMb2NhbFNldHRpbmdzU2VydmljZX0gZnJvbSAnLi9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7Rm9ybUZpZWxkRGVmaW5pdGlvbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0IHtBdXRoVG9rZW5UeXBlLCBOZXR3b3JrU2VydmljZX0gZnJvbSAnLi9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHtGaWxlU2VydmljZX0gZnJvbSAnLi4vLi4vc2hhcmVkL2ZpbGUvZmlsZS5zZXJ2aWNlJztcbmltcG9ydCB7TUlOSUZZX0VOVElUWV9GT1JfUE9ELCBSZWZlcmVudGlhbCwgUmVmZXJlbnRpYWxVdGlsc30gZnJvbSAnLi9tb2RlbC9yZWZlcmVudGlhbC5tb2RlbCc7XG5pbXBvcnQge1N0YXR1c0lkc30gZnJvbSAnLi9tb2RlbC9tb2RlbC5lbnVtJztcbmltcG9ydCB7QmFzZTU4fSBmcm9tICcuL2Jhc2U1OCc7XG5pbXBvcnQge0VOVklST05NRU5UfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHtmcm9tRGF0ZUlTT1N0cmluZywgdG9EYXRlSVNPU3RyaW5nfSBmcm9tICcuLi8uLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHtmaXJzdE5vdE5pbFByb21pc2V9IGZyb20gJy4uLy4uL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5pbXBvcnQge2RlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCwgdGFrZVVudGlsfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0Jhc2VFbnRpdHlHcmFwaHFsTXV0YXRpb25zLCBCYXNlRW50aXR5R3JhcGhxbFN1YnNjcmlwdGlvbnN9IGZyb20gJy4vYmFzZS1lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQge01vbWVudH0gZnJvbSAnbW9tZW50JztcblxuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQWNjb3VudERldGFpbHMge1xuICBsb2FkZWQ6IGJvb2xlYW47XG4gIGtleXBhaXI6IEtleVBhaXI7XG4gIGF1dGhUb2tlbjogc3RyaW5nO1xuICBhdXRoQmFzaWM/OiBzdHJpbmc7XG4gIHB1YmtleTogc3RyaW5nO1xuICBwZXJzb246IFBlcnNvbjtcbiAgZGVwYXJ0bWVudDogRGVwYXJ0bWVudDtcbiAgbWFpblByb2ZpbGU6IFN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aERhdGEge1xuICB1c2VybmFtZTogc3RyaW5nO1xuICBwYXNzd29yZDogc3RyaW5nO1xuICBvZmZsaW5lPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0ZXJEYXRhIGV4dGVuZHMgQXV0aERhdGEge1xuICBhY2NvdW50OiBBY2NvdW50O1xufVxuXG5jb25zdCBUT0tFTl9TVE9SQUdFX0tFWSA9ICd0b2tlbic7XG5jb25zdCBQVUJLRVlfU1RPUkFHRV9LRVkgPSAncHVia2V5JztcbmNvbnN0IFNFQ0tFWV9TVE9SQUdFX0tFWSA9ICdzZWNrZXknO1xuY29uc3QgQUNDT1VOVF9TVE9SQUdFX0tFWSA9ICdhY2NvdW50JztcblxuY29uc3QgREVGQVVMVF9BVkFUQVJfSU1BR0UgPSAnYXNzZXRzL2ltZy9wZXJzb24ucG5nJztcblxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEdyYXBoUUwgcXVlcmllc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbmNvbnN0IEZyYWdtZW50cyA9IHtcbiAgYWNjb3VudDogZ3FsYFxuICAgIGZyYWdtZW50IEFjY291bnRGcmFnbWVudCBvbiBBY2NvdW50Vk8ge1xuICAgICAgaWRcbiAgICAgIGZpcnN0TmFtZVxuICAgICAgbGFzdE5hbWVcbiAgICAgIGVtYWlsXG4gICAgICBwdWJrZXlcbiAgICAgIGF2YXRhclxuICAgICAgc3RhdHVzSWRcbiAgICAgIHVwZGF0ZURhdGVcbiAgICAgIGNyZWF0aW9uRGF0ZVxuICAgICAgcHJvZmlsZXNcbiAgICAgIHNldHRpbmdzIHtcbiAgICAgICAgLi4uVXNlclNldHRpbmdzRnJhZ21lbnRcbiAgICAgIH1cbiAgICAgIGRlcGFydG1lbnQge1xuICAgICAgICBpZFxuICAgICAgICBsYWJlbFxuICAgICAgICBuYW1lXG4gICAgICAgIF9fdHlwZW5hbWVcbiAgICAgIH1cbiAgICAgIF9fdHlwZW5hbWVcbiAgICB9YCxcblxuICBzZXR0aW5nczogZ3FsYGZyYWdtZW50IFVzZXJTZXR0aW5nc0ZyYWdtZW50IG9uIFVzZXJTZXR0aW5nc1ZPIHtcbiAgICBpZFxuICAgIGxvY2FsZVxuICAgIGxhdExvbmdGb3JtYXRcbiAgICBjb250ZW50XG4gICAgbm9uY2VcbiAgICB1cGRhdGVEYXRlXG4gICAgX190eXBlbmFtZVxuICB9YFxufTtcblxuLy8gTG9hZCBhY2NvdW50IHF1ZXJ5XG5jb25zdCBMb2FkUXVlcnk6IGFueSA9IGdxbGBcbiAgcXVlcnkgQWNjb3VudCB7XG4gICAgZGF0YTogYWNjb3VudCB7XG4gICAgICAuLi5BY2NvdW50RnJhZ21lbnRcbiAgICB9XG4gIH1cbiAgJHtGcmFnbWVudHMuYWNjb3VudH1cbiAgJHtGcmFnbWVudHMuc2V0dGluZ3N9XG5gO1xuXG4vLyBDaGVjayBlbWFpbCBxdWVyeVxuY29uc3QgSXNFbWFpbEV4aXN0c1F1ZXJ5OiBhbnkgPSBncWxgXG4gIHF1ZXJ5IElzRW1haWxFeGlzdHMoJGVtYWlsOiBTdHJpbmcsICRoYXNoOiBTdHJpbmcpe1xuICAgIGlzRW1haWxFeGlzdHMoZW1haWw6ICRlbWFpbCwgaGFzaDogJGhhc2gpXG4gIH1cbmA7XG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSXNFbWFpbEV4aXN0c1ZhcmlhYmxlcyB7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIGhhc2g6IHN0cmluZztcbn1cblxuLy8gU2F2ZSAoY3JlYXRlIG9yIHVwZGF0ZSkgYWNjb3VudCBtdXRhdGlvblxuY29uc3QgQWNjb3VudE11dGF0aW9uczogUGFydGlhbDxCYXNlRW50aXR5R3JhcGhxbE11dGF0aW9ucz4gJiB7IGNyZWF0ZTogYW55LCBzYXZlU2V0dGluZ3M6IGFueTsgfSA9IHtcbiAgc2F2ZTogZ3FsYCBtdXRhdGlvbiBTYXZlQWNjb3VudCgkZGF0YTpBY2NvdW50Vk9JbnB1dCl7XG4gICAgZGF0YTogc2F2ZUFjY291bnQoYWNjb3VudDogJGRhdGEpe1xuICAgICAgLi4uQWNjb3VudEZyYWdtZW50XG4gICAgfVxuICB9XG4gICR7RnJhZ21lbnRzLmFjY291bnR9XG4gICR7RnJhZ21lbnRzLnNldHRpbmdzfWAsXG5cbiAgY3JlYXRlOiBncWxgbXV0YXRpb24gQ3JlYXRlQWNjb3VudCgkZGF0YTpBY2NvdW50Vk9JbnB1dCl7XG4gICAgZGF0YTogY3JlYXRlQWNjb3VudChhY2NvdW50OiAkZGF0YSl7XG4gICAgICAuLi5BY2NvdW50RnJhZ21lbnRcbiAgICB9XG4gIH1cbiAgJHtGcmFnbWVudHMuYWNjb3VudH1cbiAgJHtGcmFnbWVudHMuc2V0dGluZ3N9YCxcblxuICBzYXZlU2V0dGluZ3M6IGdxbGBtdXRhdGlvbiBTYXZlU2V0dGluZ3MoJGRhdGE6VXNlclNldHRpbmdzVk9JbnB1dCl7XG4gICAgZGF0YTogc2F2ZVNldHRpbmdzKHNldHRpbmdzOiAkZGF0YSl7XG4gICAgICAuLi5Vc2VyU2V0dGluZ3NGcmFnbWVudFxuICAgIH1cbiAgfVxuICAke0ZyYWdtZW50cy5zZXR0aW5nc31gXG59O1xuXG4vLyBTZW50IGNvbmZpcm1hdGlvbiBlbWFpbFxuY29uc3QgU2VuZENvbmZpcm1FbWFpbE11dGF0aW9uOiBhbnkgPSBncWxgXG4gIG11dGF0aW9uIHNlbmRBY2NvdW50Q29uZmlybWF0aW9uRW1haWwoJGVtYWlsOlN0cmluZywgJGxvY2FsZTpTdHJpbmcpe1xuICAgIHNlbmRBY2NvdW50Q29uZmlybWF0aW9uRW1haWwoZW1haWw6ICRlbWFpbCwgbG9jYWxlOiAkbG9jYWxlKVxuICB9XG5gO1xuXG4vLyBDb25maXJtIGFjY291bnQgZW1haWxcbmNvbnN0IENvbmZpcm1FbWFpbE11dGF0aW9uOiBhbnkgPSBncWxgXG4gIG11dGF0aW9uIGNvbmZpcm1BY2NvdW50RW1haWwoJGVtYWlsOlN0cmluZywgJGNvZGU6U3RyaW5nKXtcbiAgICBjb25maXJtQWNjb3VudEVtYWlsKGVtYWlsOiAkZW1haWwsIGNvZGU6ICRjb2RlKVxuICB9XG5gO1xuXG4vLyBBdXRoZW50aWNhdGlvbiAgcXVlcnlcbmNvbnN0IEF1dGhRdWVyeTogYW55ID0gZ3FsYFxuICBxdWVyeSBBdXRoKCR0b2tlbjogU3RyaW5nKXtcbiAgICBhdXRoZW50aWNhdGUodG9rZW46ICR0b2tlbilcbiAgfVxuYDtcblxuLy8gTmV3IGF1dGggY2hhbGxlbmdlIHF1ZXJ5XG5jb25zdCBBdXRoQ2hhbGxlbmdlUXVlcnk6IGFueSA9IGdxbGBcbiAgcXVlcnkgQXV0aENoYWxsZW5nZXtcbiAgICBhdXRoQ2hhbGxlbmdle1xuICAgICAgY2hhbGxlbmdlXG4gICAgICBwdWJrZXlcbiAgICAgIHNpZ25hdHVyZVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgQWNjb3VudFN1YnNjcmlwdGlvbnM6IEJhc2VFbnRpdHlHcmFwaHFsU3Vic2NyaXB0aW9ucyA9IHtcbiAgbGlzdGVuQ2hhbmdlczogZ3FsYHN1YnNjcmlwdGlvbiB1cGRhdGVBY2NvdW50KCRpbnRlcnZhbDogSW50KXtcbiAgICBkYXRhOiB1cGRhdGVBY2NvdW50KGludGVydmFsOiAkaW50ZXJ2YWwpIHtcbiAgICAgIGlkXG4gICAgICB1cGRhdGVEYXRlXG4gICAgfVxuICB9YFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBBY2NvdW50V2F0Y2hPcHRpb25zIHtcbiAgaW50ZXJ2YWxJblNlY29uZD86IG51bWJlcjtcbn1cblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgQWNjb3VudFNlcnZpY2UgZXh0ZW5kcyBCYXNlR3JhcGhxbFNlcnZpY2U8QWNjb3VudCwgYW55LCBudW1iZXIsIEFjY291bnQ+IHtcblxuICBvbkxvZ2luID0gbmV3IFN1YmplY3Q8QWNjb3VudD4oKTtcbiAgb25Mb2dvdXQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gIG9uQ2hhbmdlID0gbmV3IFN1YmplY3Q8QWNjb3VudD4oKTtcbiAgb25BdXRoVG9rZW5DaGFuZ2UgPSBuZXcgU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG4gIG9uQXV0aEJhc2ljQ2hhbmdlID0gbmV3IFN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuXG4gIHByaXZhdGUgX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VuYWJsZUxpc3RlbkNoYW5nZXM6IGJvb2xlYW47XG4gIHByaXZhdGUgX2NhY2hlOiBBY2NvdW50RGV0YWlscyA9IHtcbiAgICBsb2FkZWQ6IGZhbHNlLFxuICAgIGtleXBhaXI6IG51bGwsXG4gICAgYXV0aFRva2VuOiBudWxsLFxuICAgIGF1dGhCYXNpYzogbnVsbCxcbiAgICBwdWJrZXk6IG51bGwsXG4gICAgbWFpblByb2ZpbGU6IG51bGwsXG4gICAgcGVyc29uOiBudWxsLFxuICAgIGRlcGFydG1lbnQ6IG51bGxcbiAgfTtcbiAgcHJpdmF0ZSBfJGFkZGl0aW9uYWxGaWVsZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZvcm1GaWVsZERlZmluaXRpb25bXT4oW10pO1xuICBwcml2YXRlIF90b2tlblR5cGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdXRoVG9rZW5UeXBlPih1bmRlZmluZWQpO1xuXG4gIGdldCBhY2NvdW50KCk6IEFjY291bnQge1xuICAgIHJldHVybiB0aGlzLl9jYWNoZS5sb2FkZWQgPyB0aGlzLl9kYXRhIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0IHBlcnNvbigpOiBQZXJzb24ge1xuICAgIGlmICh0aGlzLl9jYWNoZS5sb2FkZWQgJiYgIXRoaXMuX2NhY2hlLnBlcnNvbikge1xuICAgICAgdGhpcy5fY2FjaGUucGVyc29uID0gdGhpcy5fY2FjaGUubG9hZGVkID8gdGhpcy5fZGF0YS5hc1BlcnNvbigpIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY2FjaGUucGVyc29uO1xuICB9XG5cbiAgZ2V0IGRlcGFydG1lbnQoKTogRGVwYXJ0bWVudCB7XG4gICAgaWYgKHRoaXMuX2NhY2hlLmxvYWRlZCAmJiAhdGhpcy5fY2FjaGUuZGVwYXJ0bWVudCkge1xuICAgICAgdGhpcy5fY2FjaGUuZGVwYXJ0bWVudCA9IHRoaXMuX2NhY2hlLmxvYWRlZCA/IHRoaXMuX2RhdGEuYXNQZXJzb24oKS5kZXBhcnRtZW50IDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY2FjaGUuZGVwYXJ0bWVudDtcbiAgfVxuXG4gIGdldCB0b2tlblR5cGUoKTogQXV0aFRva2VuVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuVHlwZSQudmFsdWU7XG4gIH1cblxuICBzZXQgdG9rZW5UeXBlKHZhbHVlOiBBdXRoVG9rZW5UeXBlKSB7XG4gICAgaWYgKHRoaXMuX3Rva2VuVHlwZSQudmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICBjb25zb2xlLmluZm8oJ1thY2NvdW50XSBVc2luZyBhdXRoZW50aWNhdGlvbiB0b2tlbiB0eXBlOiAnICsgdmFsdWUpO1xuICAgICAgdGhpcy5fdG9rZW5UeXBlJC5uZXh0KHZhbHVlKTtcbiAgICAgIC8vIFJlc2V0IHZhbHVlc1xuICAgICAgdGhpcy5fY2FjaGUuYXV0aFRva2VuID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5vbkF1dGhUb2tlbkNoYW5nZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICB0aGlzLl9jYWNoZS5hdXRoQmFzaWMgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLm9uQXV0aEJhc2ljQ2hhbmdlLm5leHQodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNyeXB0b1NlcnZpY2U6IENyeXB0b1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG5ldHdvcms6IE5ldHdvcmtTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBncmFwaHFsOiBHcmFwaHFsU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3NTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBzdG9yYWdlOiBTdG9yYWdlLFxuICAgIHByb3RlY3RlZCBmaWxlOiBGaWxlU2VydmljZSxcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnRcbiAgKSB7XG4gICAgc3VwZXIoZ3JhcGhxbCwgZW52aXJvbm1lbnQpO1xuICAgIHRoaXMuX2VuYWJsZUxpc3RlbkNoYW5nZXMgPSAoIWVudmlyb25tZW50LmFjY291bnQgfHwgZW52aXJvbm1lbnQuYWNjb3VudC5lbmFibGVMaXN0ZW5DaGFuZ2VzICE9PSBmYWxzZSk7XG5cbiAgICB0aGlzLl9kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2FjY291bnQtc2VydmljZV0gQ3JlYXRpbmcgc2VydmljZScpO1xuXG4gICAgdGhpcy5yZXNldERhdGEoKTtcblxuICAgIC8vIFNlbmQgYXV0aCB0b2tlbiB0byB0aGUgZ3JhcGhxbCBsYXllciwgd2hlbiBjaGFuZ2VkXG4gICAgdGhpcy5vbkF1dGhUb2tlbkNoYW5nZS5zdWJzY3JpYmUoKHRva2VuKSA9PiB0aGlzLmdyYXBocWwuc2V0QXV0aFRva2VuKHRva2VuKSk7XG4gICAgdGhpcy5vbkF1dGhCYXNpY0NoYW5nZS5zdWJzY3JpYmUoKGJhc2ljKSA9PiB0aGlzLmdyYXBocWwuc2V0QXV0aEJhc2ljKGJhc2ljKSk7XG5cbiAgICAvLyBGb3JjZSBuZXR3b3JrIHRvIHdhaXQgYWNjb3VudCBzZXJ2aWNlLCBhZnRlciBnZXR0aW5nIGNvbm5lY3Rpb24gdG8gdGhlIHBlZXJcbiAgICB0aGlzLm5ldHdvcmsub24oJ2JlZm9yZVRyeU9ubGluZUZpbmlzaCcsIGFzeW5jIChvbmxpbmUpID0+IHtcbiAgICAgIC8vIElmIG9ubGluZSwgd2FpdCBhIGZ1bGwgcmVzdGFydCwgYmVjYXVzZSBpdCBjYW4gZm9yY2Ugb2ZmbGluZSBtb2RlXG4gICAgICBpZiAob25saW5lICYmICghdGhpcy5zdGFydGVkIHx8IHRoaXMuaXNMb2dpbigpKSkge1xuICAgICAgICBjb25zb2xlLmRlYnVnKCdbYWNjb3VudF0gRm9yY2UgbmV0d29ya1NlcnZpY2UudHJ5T25saW5lKCkgdG8gd2FpdCwgdGhhdCBncmFwaHFsIGFuZCBhY2NvdW50IHNlcnZpY2UgaXMgcmVzdGFydGVkLi4uJyk7XG4gICAgICAgIGF3YWl0IHNsZWVwKDUwMCk7IC8vIHdhaXQgZ3JhcGhxbCBzZXJ2aWNlIHRvIGJlIHJlc3RhcnRlZFxuICAgICAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cblxuICBhc3luYyBuZ09uU3RhcnQoKTogUHJvbWlzZTxBY2NvdW50PiB7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLnNldHRpbmdzLnJlYWR5KCksXG4gICAgICAvLyBXYWl0IHRva2VuIHR5cGUgdG8gYmUgc2V0XG4gICAgICBmaXJzdE5vdE5pbFByb21pc2UodGhpcy5fdG9rZW5UeXBlJClcbiAgICBdKTtcblxuICAgIC8vIExpc3RlbiBncmFwaHFsIHN0YXJ0IChvciByZXN0YXJ0KVxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLmdyYXBocWwub25TdGFydC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zdGFydGVkICYmIHRoaXMuaXNMb2dpbigpKSB7XG4gICAgICAgICAgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIFJlc3RhcnRpbmcsIHRvIHJldHJ5IHRvIGF1dGhlbnRpY2F0ZS4uLicpO1xuICAgICAgICAgIHRoaXMucmVzdGFydCgpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBhd2FpdCB0aGlzLnJlc3RvcmVMb2NhbGx5KCk7XG4gICAgYXdhaXQgdGhpcy5saXN0ZW5TZXR0aW5ncygpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaGFkQXV0aFRva2VuID0gdGhpcy5fY2FjaGUuYXV0aFRva2VuICYmIHRydWU7XG4gICAgY29uc3QgaGFkQXV0aEJhc2ljID0gdGhpcy5fY2FjaGUuYXV0aEJhc2ljICYmIHRydWU7XG4gICAgY29uc3QgaGFkQXV0aCA9IGhhZEF1dGhUb2tlbiB8fCBoYWRBdXRoQmFzaWM7XG4gICAgdGhpcy5yZXNldERhdGEoKTtcbiAgICBpZiAoaGFkQXV0aCkge1xuICAgICAgdGhpcy5vbkxvZ291dC5uZXh0KCk7XG4gICAgICB0aGlzLm9uQ2hhbmdlLm5leHQodW5kZWZpbmVkKTtcbiAgICAgIGlmIChoYWRBdXRoVG9rZW4pIHRoaXMub25BdXRoVG9rZW5DaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgICAgaWYgKGhhZEF1dGhCYXNpYykgdGhpcy5vbkF1dGhCYXNpY0NoYW5nZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgaXNMb2dpbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy5fY2FjaGUucHVia2V5ICYmIHRoaXMuX2NhY2hlLmxvYWRlZCk7XG4gIH1cblxuICBpc0F1dGgoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMuX2NhY2hlLnB1YmtleSAmJiB0aGlzLl9jYWNoZS5rZXlwYWlyICYmIHRoaXMuX2NhY2hlLmtleXBhaXIuc2VjcmV0S2V5KTtcbiAgfVxuXG4gIGhhc01pblByb2ZpbGUodXNlclByb2ZpbGU6IFVzZXJQcm9maWxlTGFiZWwpOiBib29sZWFuIHtcbiAgICAvLyBzaG91bGQgYmUgbG9naW4sIGFuZCBzdGF0dXMgRU5BQkxFIG9yIFRFTVBPUkFSWVxuICAgIGlmICghdGhpcy5fZGF0YSB8fCAhdGhpcy5fZGF0YS5wdWJrZXkgfHxcbiAgICAgICh0aGlzLl9kYXRhLnN0YXR1c0lkICE9PSBTdGF0dXNJZHMuRU5BQkxFICYmIHRoaXMuX2RhdGEuc3RhdHVzSWQgIT09IFN0YXR1c0lkcy5URU1QT1JBUlkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBQZXJzb25VdGlscy5oYXNVcHBlck9yRXF1YWxzUHJvZmlsZSh0aGlzLl9kYXRhLnByb2ZpbGVzLCB1c2VyUHJvZmlsZSk7XG4gIH1cblxuICBoYXNFeGFjdFByb2ZpbGUobGFiZWw6IFVzZXJQcm9maWxlTGFiZWwpOiBib29sZWFuIHtcbiAgICAvLyBzaG91bGQgYmUgbG9naW4sIGFuZCBzdGF0dXMgRU5BQkxFIG9yIFRFTVBPUkFSWVxuICAgIGlmICghdGhpcy5fZGF0YSB8fCAhdGhpcy5fZGF0YS5wdWJrZXkgfHxcbiAgICAgICh0aGlzLl9kYXRhLnN0YXR1c0lkICE9PSBTdGF0dXNJZHMuRU5BQkxFICYmIHRoaXMuX2RhdGEuc3RhdHVzSWQgIT09IFN0YXR1c0lkcy5URU1QT1JBUlkpKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLl9kYXRhLnByb2ZpbGVzLnNvbWUocHJvZmlsZSA9PiBwcm9maWxlID09PSBsYWJlbCk7XG4gIH1cblxuICBoYXNQcm9maWxlQW5kSXNFbmFibGUodXNlclByb2ZpbGU6IFVzZXJQcm9maWxlTGFiZWwpOiBib29sZWFuIHtcbiAgICAvLyBzaG91bGQgYmUgbG9naW4sIGFuZCBzdGF0dXMgRU5BQkxFXG4gICAgaWYgKCF0aGlzLl9kYXRhIHx8ICF0aGlzLl9kYXRhLnB1YmtleSB8fCB0aGlzLl9kYXRhLnN0YXR1c0lkICE9PSBTdGF0dXNJZHMuRU5BQkxFKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIFBlcnNvblV0aWxzLmhhc1VwcGVyT3JFcXVhbHNQcm9maWxlKHRoaXMuX2RhdGEucHJvZmlsZXMsIHVzZXJQcm9maWxlKTtcbiAgfVxuXG4gIGlzQWRtaW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzUHJvZmlsZUFuZElzRW5hYmxlKCdBRE1JTicpO1xuICB9XG5cbiAgaXNTdXBlcnZpc29yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc1Byb2ZpbGVBbmRJc0VuYWJsZSgnU1VQRVJWSVNPUicpO1xuICB9XG5cbiAgaXNVc2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc1Byb2ZpbGVBbmRJc0VuYWJsZSgnVVNFUicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqIEBwYXJhbSBtb2RlXG4gICAqL1xuICBpc1VzYWdlTW9kZShtb2RlOiBVc2FnZU1vZGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5pc1VzYWdlTW9kZShtb2RlKTtcbiAgfVxuXG4gIGlzT25seUd1ZXN0KCk6IGJvb2xlYW4ge1xuICAgIC8vIFNob3VsZCBiZSBsb2dpbiwgYW5kIHN0YXR1cyBFTkFCTEUgb3IgVEVNUE9SQVJZXG4gICAgaWYgKCF0aGlzLl9kYXRhIHx8ICF0aGlzLl9kYXRhLnB1YmtleSB8fFxuICAgICAgKHRoaXMuX2RhdGEuc3RhdHVzSWQgIT09IFN0YXR1c0lkcy5FTkFCTEUgJiYgdGhpcy5fZGF0YS5zdGF0dXNJZCAhPT0gU3RhdHVzSWRzLlRFTVBPUkFSWSkpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gUHJvZmlsZSBsZXNzIHRoZW4gdXNlclxuICAgIHJldHVybiAhUGVyc29uVXRpbHMuaGFzVXBwZXJPckVxdWFsc1Byb2ZpbGUodGhpcy5fZGF0YS5wcm9maWxlcywgJ1VTRVInKTtcbiAgfVxuXG4gIGNhblVzZXJXcml0ZURhdGFGb3JEZXBhcnRtZW50KHJlY29yZGVyRGVwYXJ0bWVudDogUmVmZXJlbnRpYWwgfCBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoUmVmZXJlbnRpYWxVdGlscy5pc0VtcHR5KHJlY29yZGVyRGVwYXJ0bWVudCkpIHtcbiAgICAgIGlmICghdGhpcy5pc0FkbWluKCkpXG4gICAgICAgIGNvbnNvbGUud2FybignVW5hYmxlIHRvIGNoZWNrIGlmIHVzZXIgaGFzIHJpZ2h0OiBpbnZhbGlkIHJlY29yZGVyRGVwYXJ0bWVudCcsIHJlY29yZGVyRGVwYXJ0bWVudCk7XG4gICAgICByZXR1cm4gdGhpcy5pc0FkbWluKCk7XG4gICAgfVxuXG4gICAgLy8gU2hvdWxkIGJlIGxvZ2luLCBhbmQgc3RhdHVzIEVOQUJMRVxuICAgIGlmICghdGhpcy5fZGF0YSB8fCAhdGhpcy5fZGF0YS5wdWJrZXkgfHwgdGhpcy5fZGF0YS5zdGF0dXNJZCAhPT0gU3RhdHVzSWRzLkVOQUJMRSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKCF0aGlzLl9kYXRhLmRlcGFydG1lbnQgfHwgIXRoaXMuX2RhdGEuZGVwYXJ0bWVudC5pZCkge1xuICAgICAgY29uc29sZS53YXJuKCdVc2VyIGFjY291bnQgaGFzIG5vIGRlcGFydG1lbnQgISBVbmFibGUgdG8gY2hlY2sgd3JpdGUgcmlnaHQgYWdhaW5zdCByZWNvcmRlckRlcGFydG1lbnQnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBTYW1lIHJlY29yZGVyIGRlcGFydG1lbnQ6IE9LLCB1c2VyIGNhbiB3cml0ZVxuICAgIGlmICh0aGlzLl9kYXRhLmRlcGFydG1lbnQuaWQgPT09IHJlY29yZGVyRGVwYXJ0bWVudC5pZCkgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBFbHNlLCBjaGVjayBpZiBzdXBlcnZpc29yIChvciBtb3JlKVxuICAgIHJldHVybiBQZXJzb25VdGlscy5oYXNVcHBlck9yRXF1YWxzUHJvZmlsZSh0aGlzLl9kYXRhLnByb2ZpbGVzLCAnU1VQRVJWSVNPUicpO1xuICB9XG5cbiAgYXN5bmMgcmVnaXN0ZXIoZGF0YTogUmVnaXN0ZXJEYXRhKTogUHJvbWlzZTxBY2NvdW50PiB7XG4gICAgaWYgKHRoaXMuaXNMb2dpbigpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgYWxyZWFkeSBsb2dpbi4gUGxlYXNlIGxvZ291dCBiZWZvcmUgcmVnaXN0ZXIuJyk7XG4gICAgfVxuICAgIGlmICghZGF0YS51c2VybmFtZSB8fCAhZGF0YS5wYXNzd29yZCkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHJlcXVpcmVkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJyk7XG5cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1thY2NvdW50XSBSZWdpc3RlciBuZXcgdXNlciBhY2NvdW50Li4uJywgZGF0YS5hY2NvdW50KTtcbiAgICB0aGlzLl9jYWNoZS5sb2FkZWQgPSBmYWxzZTtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGtleXBhaXIgPSBhd2FpdCB0aGlzLmNyeXB0b1NlcnZpY2Uuc2NyeXB0S2V5cGFpcihkYXRhLnVzZXJuYW1lLCBkYXRhLnBhc3N3b3JkKTtcbiAgICAgIGRhdGEuYWNjb3VudC5wdWJrZXkgPSBCYXNlNTguZW5jb2RlKGtleXBhaXIucHVibGljS2V5KTtcblxuICAgICAgLy8gRGVmYXVsdCB2YWx1ZXNcbiAgICAgIGRhdGEuYWNjb3VudC5zZXR0aW5ncyA9IGRhdGEuYWNjb3VudC5zZXR0aW5ncyB8fCBuZXcgVXNlclNldHRpbmdzKCk7XG4gICAgICBkYXRhLmFjY291bnQuc2V0dGluZ3MubG9jYWxlID0gdGhpcy5zZXR0aW5ncy5sb2NhbGU7XG4gICAgICBkYXRhLmFjY291bnQuc2V0dGluZ3MubGF0TG9uZ0Zvcm1hdCA9IHRoaXMuc2V0dGluZ3MubGF0TG9uZ0Zvcm1hdDtcbiAgICAgIGRhdGEuYWNjb3VudC5zZXR0aW5ncy5jb250ZW50ID0gZGF0YS5hY2NvdW50LnNldHRpbmdzLmNvbnRlbnQgfHwge307XG4gICAgICBkYXRhLmFjY291bnQuZGVwYXJ0bWVudC5pZCA9IGRhdGEuYWNjb3VudC5kZXBhcnRtZW50LmlkIHx8IHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdERlcGFydG1lbnRJZDtcblxuICAgICAgdGhpcy5fY2FjaGUua2V5cGFpciA9IGtleXBhaXI7XG4gICAgICBjb25zdCBhY2NvdW50ID0gYXdhaXQgdGhpcy5zYXZlUmVtb3RlbHkoZGF0YS5hY2NvdW50LCBrZXlwYWlyKTtcblxuICAgICAgLy8gRGVmYXVsdCB2YWx1ZXNcbiAgICAgIGFjY291bnQuYXZhdGFyID0gYWNjb3VudC5hdmF0YXIgfHwgKHRoaXMuZW52aXJvbm1lbnQuYmFzZVVybCArIERFRkFVTFRfQVZBVEFSX0lNQUdFKTtcbiAgICAgIHRoaXMuX2NhY2hlLm1haW5Qcm9maWxlID0gUGVyc29uVXRpbHMuZ2V0TWFpblByb2ZpbGUoYWNjb3VudC5wcm9maWxlcyk7XG5cbiAgICAgIHRoaXMuX2RhdGEgPSBhY2NvdW50O1xuICAgICAgdGhpcy5fY2FjaGUucHVia2V5ID0gYWNjb3VudC5wdWJrZXk7XG5cbiAgICAgIC8vIFRyeSB0byBhdXRoIG9uIHBvZFxuICAgICAgYXdhaXQgdGhpcy5hdXRoZW50aWNhdGUoZGF0YSk7XG5cbiAgICAgIHRoaXMuX2NhY2hlLmxvYWRlZCA9IHRydWU7XG5cbiAgICAgIGF3YWl0IHRoaXMuc2F2ZUxvY2FsbHkoKTtcblxuICAgICAgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIEFjY291bnQgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG5cbiAgICAgIC8vIEVtaXQgZXZlbnRzXG4gICAgICB0aGlzLm9uTG9naW4ubmV4dCh0aGlzLl9kYXRhKTtcbiAgICAgIHRoaXMub25DaGFuZ2UubmV4dCh0aGlzLl9kYXRhKTtcblxuICAgICAgLy8gTGlzdGVuIHJlbW90ZSBjaGFuZ2VzXG4gICAgICBpZiAodGhpcy5fZW5hYmxlTGlzdGVuQ2hhbmdlcykgdGhpcy5zdGFydExpc3RlbkNoYW5nZXMoKTtcblxuICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvciAmJiBlcnJvci5tZXNzYWdlIHx8IGVycm9yKTtcbiAgICAgIHRoaXMucmVzZXREYXRhKCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhdXRoZW50aWNhdGUoZGF0YT86IEF1dGhEYXRhKSB7XG4gICAgLy8gV2FpdCB0aGUgYXV0aCB0b2tlbiwgdGhlbiBjb250aW51ZVxuICAgIGNvbnN0IHRva2VuVHlwZSA9IGF3YWl0IGZpcnN0Tm90TmlsUHJvbWlzZSh0aGlzLl90b2tlblR5cGUkKTtcblxuICAgIC8vIEJhc2ljIGF1dGhcbiAgICBpZiAodG9rZW5UeXBlID09PSAnYmFzaWMnIHx8IHRva2VuVHlwZSA9PT0gJ2Jhc2ljLWFuZC10b2tlbicpIHtcblxuICAgICAgLy8gR2VuZXJhdGUgdGhlIGF1dGhCYXNpYywgaWYgdXNlZFxuICAgICAgaWYgKCF0aGlzLl9jYWNoZS5hdXRoQmFzaWMpIHtcbiAgICAgICAgLy8gU2tpcCBpZiB0b2tlbiBhbHJlYWR5IHByb3ZpZGVkXG4gICAgICAgIGlmICghKHRoaXMuX2NhY2hlLmF1dGhUb2tlbiAmJiB0b2tlblR5cGUgPT09ICdiYXNpYy1hbmQtdG9rZW4nKSkge1xuICAgICAgICAgIGlmICghZGF0YSB8fCAhZGF0YS51c2VybmFtZSB8fCAhZGF0YS5wYXNzd29yZCkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHVzZXJuYW1lIGFuZCBwYXNzd29yZCcpO1xuICAgICAgICAgIHRoaXMuX2NhY2hlLmF1dGhCYXNpYyA9IHRoaXMuY3J5cHRvU2VydmljZS5lbmNvZGVCYXNlNjQoYCR7ZGF0YS51c2VybmFtZX06JHtkYXRhLnBhc3N3b3JkfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLm9uQXV0aEJhc2ljQ2hhbmdlLm5leHQodGhpcy5fY2FjaGUuYXV0aEJhc2ljKTtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSB0aGUgYXV0aFRva2VuLCBpZiB1c2VkXG4gICAgaWYgKHRva2VuVHlwZSA9PT0gJ3Rva2VuJyB8fCB0b2tlblR5cGUgPT09ICdiYXNpYy1hbmQtdG9rZW4nKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLl9jYWNoZS5hdXRoVG9rZW4gPSBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0ZUFuZEdldFRva2VuKHRoaXMuX2NhY2hlLmF1dGhUb2tlbik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBOZXZlciBhdXRoZW50aWNhdGUsIG9yIG5vdCByZWFkeSBmb3Igb2ZmbGluZSBtb2RlID0+IGV4aXRcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIHRoaXMucmVzZXREYXRhKCk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZvcmdldCBhdXRoQmFzaWMsIHRvIHN3aXRjaCB0byBhdXRoVG9rZW5cbiAgICBpZiAodG9rZW5UeXBlID09PSAnYmFzaWMtYW5kLXRva2VuJykge1xuICAgICAgdGhpcy5fY2FjaGUuYXV0aEJhc2ljID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5vbkF1dGhCYXNpY0NoYW5nZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9naW4oZGF0YTogQXV0aERhdGEpOiBQcm9taXNlPEFjY291bnQ+IHtcbiAgICBpZiAoIWRhdGEgfHwgIWRhdGEudXNlcm5hbWUgfHwgIWRhdGEucGFzc3dvcmQpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyByZXF1aXJlZCB1c2VybmFtZSBvciBwYXNzd29yZCcpO1xuXG4gICAgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIExvZ2luLi4uJyk7XG5cbiAgICBsZXQga2V5cGFpcjtcbiAgICB0cnkge1xuICAgICAga2V5cGFpciA9IGF3YWl0IHRoaXMuY3J5cHRvU2VydmljZS5zY3J5cHRLZXlwYWlyKGRhdGEudXNlcm5hbWUsIGRhdGEucGFzc3dvcmQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIHRoaXMucmVzZXREYXRhKCk7XG4gICAgICB0aHJvdyB7IGNvZGU6IEVycm9yQ29kZXMuVU5LTk9XTl9FUlJPUiwgbWVzc2FnZTogJ0VSUk9SLlNDUllQVF9FUlJPUicgfTtcbiAgICB9XG5cbiAgICAvLyBTdG9yZSBwdWJrZXkra2V5cGFpclxuICAgIHRoaXMuX2NhY2hlLnB1YmtleSA9IEJhc2U1OC5lbmNvZGUoa2V5cGFpci5wdWJsaWNLZXkpO1xuICAgIHRoaXMuX2NhY2hlLmtleXBhaXIgPSBrZXlwYWlyO1xuXG4gICAgLy8gVHJ5IHRvIGxvYWQgcHJldmlvdXMgdG9rZW5cbiAgICBsZXQgcHJldmlvdXNUb2tlbjogc3RyaW5nID0gYXdhaXQgdGhpcy5zdG9yYWdlLmdldChUT0tFTl9TVE9SQUdFX0tFWSk7XG4gICAgcHJldmlvdXNUb2tlbiA9IHByZXZpb3VzVG9rZW4gJiYgcHJldmlvdXNUb2tlbi5zdGFydHNXaXRoKHRoaXMuX2NhY2hlLnB1YmtleSkgJiYgcHJldmlvdXNUb2tlbiB8fCBudWxsO1xuXG4gICAgLy8gT2ZmbGluZSBtb2RlXG4gICAgY29uc3Qgb2ZmbGluZSA9IHRoaXMuc2V0dGluZ3MuaGFzT2ZmbGluZUZlYXR1cmUoKSAmJiAodGhpcy5uZXR3b3JrLm9mZmxpbmUgfHwgZGF0YS5vZmZsaW5lID09PSB0cnVlKTtcbiAgICBpZiAob2ZmbGluZSkgIHtcbiAgICAgIHRoaXMuX2NhY2hlLmF1dGhUb2tlbiA9IHByZXZpb3VzVG9rZW47XG5cbiAgICAgIC8vIE1ha2Ugc3VyZSBuZXR3b3JrIGlmIHNldCBhcyBvZmZsaW5lXG4gICAgICB0aGlzLm5ldHdvcmsuc2V0Rm9yY2VPZmZsaW5lKHRydWUsIHtzaG93VG9hc3Q6IGZhbHNlfSk7XG4gICAgICBjb25zb2xlLmluZm8oYFthY2NvdW50XSBMb2dpbiBbT0tdIHtwdWJrZXk6ICR7dGhpcy5fY2FjaGUucHVia2V5LnN1YnN0cigwLCA4KX19LCB7b2ZmbGluZTogdHJ1ZX1gKTtcbiAgICB9XG5cbiAgICAvLyBPbmxpbmUgbW9kZTogdHJ5IHRvIGF1dGggb24gcG9kXG4gICAgZWxzZSB7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYXV0aGVudGljYXRlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gTmV2ZXIgYXV0aGVudGljYXRlLCBvciBub3QgcmVhZHkgZm9yIG9mZmxpbmUgbW9kZSA9PiBleGl0XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICB0aGlzLnJlc2V0RGF0YSgpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMb2FkIGFjY291bnQgZGF0YVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWREYXRhKHtvZmZsaW5lLCBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seSd9KTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgLy8gSWYgYWNjb3VudCBub3QgZm91bmQsIGNoZWNrIGlmIGVtYWlsIGlzIHZhbGlkXG4gICAgICBpZiAoZXJyICYmICsoZXJyLmNvZGUpID09PSBFcnJvckNvZGVzLkxPQURfQUNDT1VOVF9FUlJPUikge1xuXG4gICAgICAgIC8vIENoZWNrIGVtYWlsIGV4aXN0c1xuICAgICAgICBpZiAoZGF0YS51c2VybmFtZS5pbmRleE9mKCdAJykgIT09IC0xKSB7XG4gICAgICAgICAgbGV0IGlzRW1haWxFeGlzdHM7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlzRW1haWxFeGlzdHMgPSBhd2FpdCB0aGlzLmlzRW1haWxFeGlzdHMoZGF0YS51c2VybmFtZSk7XG4gICAgICAgICAgfSBjYXRjaCAob3RoZXJFcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgZXJyOyAvLyByZXNlbmQgdGhlIGZpcnN0IGVycm9yXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRW1haWwgbm90IGV4aXN0cyAobm8gYWNjb3VudClcbiAgICAgICAgICBpZiAoIWlzRW1haWxFeGlzdHMpIHtcbiAgICAgICAgICAgIHRocm93IHsgY29kZTogRXJyb3JDb2Rlcy5VTktOT1dOX0FDQ09VTlRfRU1BSUwsIG1lc3NhZ2U6ICdFUlJPUi5VTktOT1dOX0FDQ09VTlRfRU1BSUwnIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRW1haWwgZXhpc3RzLCBzbyBlcnJvciA9ICdiYWQgcGFzc3dvcmQnXG4gICAgICAgIHRocm93IHsgY29kZTogRXJyb3JDb2Rlcy5CQURfUEFTU1dPUkQsIG1lc3NhZ2U6ICdFUlJPUi5CQURfUEFTU1dPUkQnIH07XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycjsgLy8gcmVzZW5kIHRoZSBmaXJzdCBlcnJvclxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBTdG9yZSB0byBsb2NhbCBzdG9yYWdlXG4gICAgICBhd2FpdCB0aGlzLnNhdmVMb2NhbGx5KCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB0aGlzLnJlc2V0RGF0YSgpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgLy8gRW1pdCBldmVudCB0byBvYnNlcnZlcnNcbiAgICB0aGlzLm9uTG9naW4ubmV4dCh0aGlzLl9kYXRhKTtcbiAgICB0aGlzLm9uQ2hhbmdlLm5leHQodGhpcy5fZGF0YSk7XG5cbiAgICBpZiAodGhpcy5fZW5hYmxlTGlzdGVuQ2hhbmdlcykgdGhpcy5zdGFydExpc3RlbkNoYW5nZXMoKTtcblxuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG5cbiAgYXN5bmMgcmVsb2FkKCk6IFByb21pc2U8QWNjb3VudD4ge1xuICAgIGlmICghdGhpcy5fY2FjaGUucHVia2V5KSB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGxvZ2dlZCcpO1xuICAgIGlmICh0aGlzLm5ldHdvcmsub2ZmbGluZSkgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2hlY2sgYWNjb3VudCBpbiBvZmZsaW5lIG1vZGUnKTtcblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFJlbG9hZGluZyBhY2NvdW50Li4uYCk7XG5cbiAgICBhd2FpdCB0aGlzLmxvYWREYXRhKCk7XG4gICAgYXdhaXQgdGhpcy5zYXZlTG9jYWxseSgpO1xuXG4gICAgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFJlbG9hZGluZyBhY2NvdW50IFtPS10gaW4gJHtEYXRlLm5vdygpLW5vd31tc2ApO1xuXG4gICAgLy8gRW1pdCBsb2dpbiBldmVudCB0byBzdWJzY3JpYmVyc1xuICAgIHRoaXMub25Mb2dpbi5uZXh0KHRoaXMuX2RhdGEpO1xuICAgIHRoaXMub25DaGFuZ2UubmV4dCh0aGlzLl9kYXRhKTtcblxuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBvciB1cGRhdGUgYW4gdXNlciBhY2NvdW50LCB0byB0aGUgcmVtb3RlIHN0b3JhZ2VcbiAgICpcbiAgICogQHBhcmFtIGFjY291bnRcbiAgICovXG4gIGFzeW5jIHNhdmUoYWNjb3VudDogQWNjb3VudCk6IFByb21pc2U8QWNjb3VudD4ge1xuICAgIGlmICghdGhpcy5fY2FjaGUucHVia2V5KSByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ1VzZXIgbm90IGxvZ2dlZCcpO1xuICAgIGlmICh0aGlzLl9jYWNoZS5wdWJrZXkgIT09IGFjY291bnQucHVia2V5KSByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ05vdCB1c2VyIGFjY291bnQnKTtcblxuICAgIGFjY291bnQgPSBhd2FpdCB0aGlzLnNhdmVSZW1vdGVseShhY2NvdW50LCB0aGlzLl9jYWNoZS5rZXlwYWlyKTtcblxuICAgIC8vIFNldCBkZWZhdWx0c1xuICAgIGFjY291bnQuYXZhdGFyID0gYWNjb3VudC5hdmF0YXIgfHwgKHRoaXMuZW52aXJvbm1lbnQuYmFzZVVybCArIERFRkFVTFRfQVZBVEFSX0lNQUdFKTtcbiAgICB0aGlzLl9jYWNoZS5tYWluUHJvZmlsZSA9IFBlcnNvblV0aWxzLmdldE1haW5Qcm9maWxlKGFjY291bnQucHJvZmlsZXMpO1xuXG4gICAgdGhpcy5fZGF0YSA9IGFjY291bnQ7XG4gICAgdGhpcy5fY2FjaGUubG9hZGVkID0gdHJ1ZTtcblxuICAgIC8vIFNhdmUgbG9jYWxseSAoaW4gc3RvcmFnZSlcbiAgICBhd2FpdCB0aGlzLnNhdmVMb2NhbGx5KCk7XG5cbiAgICAvLyBTZW5kIGV2ZW50XG4gICAgdGhpcy5vbkxvZ2luLm5leHQodGhpcy5fZGF0YSk7XG4gICAgdGhpcy5vbkNoYW5nZS5uZXh0KHRoaXMuX2RhdGEpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cblxuICBhc3luYyBsb2dvdXQoKTogUHJvbWlzZTx2b2lkPiB7XG5cbiAgICBjb25zdCBoYWRBdXRoVG9rZW4gPSB0aGlzLl9jYWNoZS5hdXRoVG9rZW4gJiYgdHJ1ZTtcbiAgICBjb25zdCBoYWRBdXRoQmFzaWMgPSB0aGlzLl9jYWNoZS5hdXRoQmFzaWMgJiYgdHJ1ZTtcbiAgICBjb25zdCBwdWJrZXkgPSB0aGlzLl9jYWNoZSAmJiB0aGlzLl9jYWNoZS5wdWJrZXk7XG5cbiAgICB0aGlzLnJlc2V0RGF0YSgpO1xuXG4gICAgaWYgKCF0aGlzLnNldHRpbmdzLmhhc09mZmxpbmVGZWF0dXJlKCkpIHtcblxuICAgICAgLy8gUmVtb3ZlIGFsbCBkYXRhIGZyb20gdGhlIGxvY2FsIHN0b3JhZ2VcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZShQVUJLRVlfU1RPUkFHRV9LRVkpLFxuICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlKFRPS0VOX1NUT1JBR0VfS0VZKSxcbiAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZShBQ0NPVU5UX1NUT1JBR0VfS0VZKSxcbiAgICAgICAgcHVia2V5ICYmIHRoaXMuc3RvcmFnZS5yZW1vdmUoQUNDT1VOVF9TVE9SQUdFX0tFWSArICcjJyArIHB1YmtleSkgfHwgUHJvbWlzZS5yZXNvbHZlKCksXG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUoU0VDS0VZX1NUT1JBR0VfS0VZKVxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgLy8gT2ZmbGluZSBmZWF0dXJlcyBlbmFibGU6IG5lZWQgdG8ga2VlcCBzb21lIGRhdGFcbiAgICBlbHNlIHtcbiAgICAgIC8vIEFsd2F5cyByZW1vdmUgb25seSBzZWNyZXQga2V5XG4gICAgICAvLyBCdXQga2VlcDpcbiAgICAgIC8vIC0gYWNjb3VudCBieSBwdWJrZXlcbiAgICAgIC8vIC0gYXV0aCB0b2tlblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlKFBVQktFWV9TVE9SQUdFX0tFWSksXG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUoQUNDT1VOVF9TVE9SQUdFX0tFWSksXG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUoU0VDS0VZX1NUT1JBR0VfS0VZKVxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgLy8gQ2xlYW4gcGFnZSBoaXN0b3J5LCBpbiBsb2NhbCBzZXR0aW5nc1xuICAgIGF3YWl0IHRoaXMuc2V0dGluZ3MuY2xlYXJQYWdlSGlzdG9yeSgpO1xuXG4gICAgLy8gTm90aWZ5IG9ic2VydmVyc1xuICAgIHRoaXMub25Mb2dvdXQubmV4dCgpO1xuICAgIGlmIChoYWRBdXRoVG9rZW4pIHRoaXMub25BdXRoVG9rZW5DaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgIGlmIChoYWRBdXRoQmFzaWMpIHRoaXMub25BdXRoQmFzaWNDaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgIHRoaXMub25DaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgIHRoaXMuc3RvcExpc3RlbkNoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGEgYWNjb3VudFxuICAgKlxuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgYXN5bmMgbG9hZChvcHRzPzoge1xuICAgIG9mZmxpbmU/OiBib29sZWFuO1xuICAgIGZldGNoUG9saWN5PzogRmV0Y2hQb2xpY3k7XG4gIH0pOiBQcm9taXNlPEFjY291bnQgfCB1bmRlZmluZWQ+IHtcblxuICAgIGNvbnN0IG5vdyA9IHRoaXMuX2RlYnVnICYmIERhdGUubm93KCk7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gTG9hZGluZyBhY2NvdW50Li4uYCk7XG4gICAgbGV0IGpzb246IGFueTtcblxuICAgIC8vIExvYWQgbG9jYWxseVxuICAgIGNvbnN0IG9mZmxpbmUgPSB0aGlzLm5ldHdvcmsub2ZmbGluZVxuICAgICAgJiYgKCFvcHRzIHx8IChvcHRzLmZldGNoUG9saWN5ICE9PSAnbmV0d29yay1vbmx5JyAmJiBvcHRzLmZldGNoUG9saWN5ICE9PSAnbm8tY2FjaGUnKSlcbiAgICAgIHx8IChvcHRzICYmIG9wdHMub2ZmbGluZSA9PT0gdHJ1ZSk7XG4gICAgaWYgKG9mZmxpbmUpIHtcbiAgICAgIGpzb24gPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KEFDQ09VTlRfU1RPUkFHRV9LRVkpO1xuICAgICAganNvbiA9IGpzb24gJiYgKHR5cGVvZiBqc29uID09PSAnc3RyaW5nJykgJiYgSlNPTi5wYXJzZShqc29uKSB8fCBqc29uO1xuICAgICAganNvbiA9IGpzb24gJiYgdGhpcy5fY2FjaGUucHVia2V5ICYmIChqc29uLnB1YmtleSA9PT0gdGhpcy5fY2FjaGUucHVia2V5KSAmJiBqc29uIHx8IG51bGw7XG4gICAgICBpZiAoIWpzb24gJiYgdGhpcy5fY2FjaGUucHVia2V5KSB7XG4gICAgICAgIGpzb24gPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KEFDQ09VTlRfU1RPUkFHRV9LRVkgKyAnIycgKyB0aGlzLl9jYWNoZS5wdWJrZXkpO1xuICAgICAgICBqc29uID0ganNvbiAmJiAodHlwZW9mIGpzb24gPT09ICdzdHJpbmcnKSAmJiBKU09OLnBhcnNlKGpzb24pIHx8IGpzb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTG9hZCByZW1vdGVseVxuICAgIGVsc2Uge1xuICAgICAgY29uc3Qge2RhdGF9ID0gYXdhaXQgdGhpcy5ncmFwaHFsLnF1ZXJ5PHsgZGF0YTogYW55IH0+KHtcbiAgICAgICAgcXVlcnk6IExvYWRRdWVyeSxcbiAgICAgICAgZXJyb3I6IHsgY29kZTogRXJyb3JDb2Rlcy5MT0FEX0FDQ09VTlRfRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5MT0FEX0FDQ09VTlRfRVJST1InIH0sXG4gICAgICAgIGZldGNoUG9saWN5OiBvcHRzICYmIG9wdHMuZmV0Y2hQb2xpY3kgfHwgJ25vLWNhY2hlJyB8fCB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgICAganNvbiA9IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKGpzb24pIHtcbiAgICAgIGNvbnN0IGFjY291bnQgPSBBY2NvdW50LmZyb21PYmplY3QoanNvbik7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBBY2NvdW50IGxvYWRlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgLCBhY2NvdW50KTtcbiAgICAgICByZXR1cm4gYWNjb3VudDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oYFthY2NvdW50XSBBY2NvdW50IG5vdCBmb3VuZCAhYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGVtYWlsIGlzIGF2YWlsYWJsZSBmb3IgbmV3IGFjY291bnQgcmVnaXN0cmF0aW9uLlxuICAgKiBUaHJvdyBhbiBlcnJvciBpZiBub3QgYXZhaWxhYmxlXG4gICAqXG4gICAqIEBwYXJhbSBlbWFpbFxuICAgKi9cbiAgYXN5bmMgY2hlY2tFbWFpbEF2YWlsYWJsZShlbWFpbDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaXNFbWFpbEV4aXN0cyA9IGF3YWl0IHRoaXMuaXNFbWFpbEV4aXN0cyhlbWFpbCk7XG4gICAgaWYgKGlzRW1haWxFeGlzdHMpIHtcbiAgICAgIHRocm93IHsgY29kZTogRXJyb3JDb2Rlcy5FTUFJTF9BTFJFQURZX1JFR0lTVEVSRUQsIG1lc3NhZ2U6ICdFUlJPUi5FTUFJTF9BTFJFQURZX1JFR0lTVEVSRUQnIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGVtYWlsIGlzIGV4aXN0cyBpbiBzZXJ2ZXIuXG4gICAqXG4gICAqIEBwYXJhbSBlbWFpbFxuICAgKi9cbiAgYXN5bmMgaXNFbWFpbEV4aXN0cyhlbWFpbDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG5cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1thY2NvdW50XSBDaGVja2luZyBpZiB7JyArIGVtYWlsICsgJ30gZXhpc3RzLi4uJyk7XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5ncmFwaHFsLnF1ZXJ5PHsgaXNFbWFpbEV4aXN0czogYm9vbGVhbiB9LCBJc0VtYWlsRXhpc3RzVmFyaWFibGVzPih7XG4gICAgICBxdWVyeTogSXNFbWFpbEV4aXN0c1F1ZXJ5LFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGVtYWlsLFxuICAgICAgICBoYXNoOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIEVtYWlsIGV4aXN0OiAnICsgKGRhdGEgJiYgZGF0YS5pc0VtYWlsRXhpc3RzKSk7XG5cbiAgICByZXR1cm4gZGF0YSAmJiBkYXRhLmlzRW1haWxFeGlzdHM7XG4gIH1cblxuICBhc3luYyBzZW5kQ29uZmlybWF0aW9uRW1haWwoZW1haWw6IHN0cmluZywgbG9jYWxlPzogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG5cbiAgICBsb2NhbGUgPSBsb2NhbGUgfHwgdGhpcy5zZXR0aW5ncy5sb2NhbGU7XG4gICAgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIFNlbmRpbmcgY29uZmlybWF0aW9uIGVtYWlsIHRvIHsnICsgZW1haWwgKyAnfSB3aXRoIGxvY2FsZSB7JyArIGxvY2FsZSArICd9Li4uJyk7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTxib29sZWFuPih7XG4gICAgICBtdXRhdGlvbjogU2VuZENvbmZpcm1FbWFpbE11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGVtYWlsLFxuICAgICAgICBsb2NhbGVcbiAgICAgIH0sXG4gICAgICBlcnJvcjoge1xuICAgICAgICBjb2RlOiBFcnJvckNvZGVzLlNFTlRfQ09ORklSTUFUSU9OX0VNQUlMX0ZBSUxFRCxcbiAgICAgICAgbWVzc2FnZTogJ0VSUk9SLlNFTlRfQUNDT1VOVF9DT05GSVJNQVRJT05fRU1BSUxfRkFJTEVEJ1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY29uZmlybUVtYWlsKGVtYWlsOiBTdHJpbmcsIGNvZGU6IFN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXG4gICAgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIFNlbmRuZyBjb25maXJtIHJlcXVlc3QgZm9yIGVtYWlsIHsnICsgZW1haWwgKyAnfSB3aXRoIGNvZGUgeycgKyBjb2RlICsgJ30uLi4nKTtcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ3JhcGhxbC5tdXRhdGU8eyBjb25maXJtQWNjb3VudEVtYWlsOiBib29sZWFuIH0+KHtcbiAgICAgIG11dGF0aW9uOiBDb25maXJtRW1haWxNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBlbWFpbCxcbiAgICAgICAgY29kZVxuICAgICAgfSxcbiAgICAgIGVycm9yOiB7XG4gICAgICAgIGNvZGU6IEVycm9yQ29kZXMuQ09ORklSTV9FTUFJTF9GQUlMRUQsXG4gICAgICAgIG1lc3NhZ2U6ICdFUlJPUi5DT05GSVJNX0FDQ09VTlRfRU1BSUxfRkFJTEVEJ1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXMgJiYgcmVzLmNvbmZpcm1BY2NvdW50RW1haWw7XG4gIH1cblxuICBsaXN0ZW5DaGFuZ2VzKG9wdHM/OiBBY2NvdW50V2F0Y2hPcHRpb25zKTogU3Vic2NyaXB0aW9uIHtcbiAgICBpZiAodGhpcy5fZW5hYmxlTGlzdGVuQ2hhbmdlcykgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24oKTsgLy8gQWxyZWFkeSBzdGFydGVkOiBza2lwXG5cbiAgICByZXR1cm4gdGhpcy5zdGFydExpc3RlbkNoYW5nZXMob3B0cyk7XG4gIH1cblxuICBnZXQgYWRkaXRpb25hbEZpZWxkcygpOiBGb3JtRmllbGREZWZpbml0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLl8kYWRkaXRpb25hbEZpZWxkcy5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgZ2V0ICRhZGRpdGlvbmFsRmllbGRzKCk6IE9ic2VydmFibGU8Rm9ybUZpZWxkRGVmaW5pdGlvbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuXyRhZGRpdGlvbmFsRmllbGRzO1xuICB9XG5cbiAgZ2V0QWRkaXRpb25hbEZpZWxkKGtleTogc3RyaW5nKTogRm9ybUZpZWxkRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuXyRhZGRpdGlvbmFsRmllbGRzLmdldFZhbHVlKCkuZmluZChmID0+IGYua2V5ID09PSBrZXkpO1xuICB9XG5cbiAgcmVnaXN0ZXJBZGRpdGlvbmFsRmllbGQoZmllbGQ6IEZvcm1GaWVsZERlZmluaXRpb24pIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLl8kYWRkaXRpb25hbEZpZWxkcy5nZXRWYWx1ZSgpO1xuICAgIGlmICghIXZhbHVlcy5maW5kKGYgPT4gZi5rZXkgPT09IGZpZWxkLmtleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQWRkaXRpb25hbCBhY2NvdW50IGZpZWxkIHtrZXk6ICR7ZmllbGQua2V5fX0gYWxyZWFkeSBkZWZpbmUuYCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIEZvdW5kIGFkZGl0aW9uYWwgYWNjb3VudCdzIGZpZWxkIHtrZXk6ICR7ZmllbGQua2V5fX1gKTtcbiAgICB0aGlzLl8kYWRkaXRpb25hbEZpZWxkcy5uZXh0KHZhbHVlcy5jb25jYXQoZmllbGQpKTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2QgLS0gKi9cblxuICBwcm90ZWN0ZWQgcmVzZXREYXRhKCkge1xuICAgIHRoaXMuc3RvcExpc3RlbkNoYW5nZXMoKTtcbiAgICB0aGlzLl9jYWNoZS5sb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9jYWNoZS5rZXlwYWlyID0gbnVsbDtcbiAgICB0aGlzLl9jYWNoZS5hdXRoVG9rZW4gPSBudWxsO1xuICAgIHRoaXMuX2NhY2hlLmF1dGhCYXNpYyA9IG51bGw7XG4gICAgdGhpcy5fY2FjaGUucHVia2V5ID0gbnVsbDtcbiAgICB0aGlzLl9jYWNoZS5tYWluUHJvZmlsZSA9IG51bGw7XG4gICAgdGhpcy5fY2FjaGUucGVyc29uID0gbnVsbDtcbiAgICB0aGlzLl9jYWNoZS5kZXBhcnRtZW50ID0gbnVsbDtcbiAgICB0aGlzLl9kYXRhID0gbmV3IEFjY291bnQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBsb2FkRGF0YShvcHRzPzoge1xuICAgIG9mZmxpbmU/OiBib29sZWFuO1xuICAgIGZldGNoUG9saWN5PzogRmV0Y2hQb2xpY3k7XG4gIH0pOiBQcm9taXNlPEFjY291bnQ+IHtcbiAgICBpZiAoIXRoaXMuX2NhY2hlLnB1YmtleSkgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBsb2dnZWQnKTtcblxuICAgIHRoaXMuX2NhY2hlLmxvYWRlZCA9IGZhbHNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFjY291bnQgPSAoYXdhaXQgdGhpcy5sb2FkKG9wdHMpKSB8fCBuZXcgQWNjb3VudCgpO1xuXG4gICAgICAvLyBTZXQgZGVmYXVsdHNcbiAgICAgIGFjY291bnQuYXZhdGFyID0gYWNjb3VudC5hdmF0YXIgfHwgKHRoaXMuZW52aXJvbm1lbnQuYmFzZVVybCArIERFRkFVTFRfQVZBVEFSX0lNQUdFKTtcbiAgICAgIGFjY291bnQuc2V0dGluZ3MgPSBhY2NvdW50LnNldHRpbmdzIHx8IG5ldyBVc2VyU2V0dGluZ3MoKTtcbiAgICAgIGFjY291bnQuc2V0dGluZ3MubG9jYWxlID0gYWNjb3VudC5zZXR0aW5ncy5sb2NhbGUgfHwgdGhpcy5zZXR0aW5ncy5sb2NhbGU7XG4gICAgICBhY2NvdW50LnNldHRpbmdzLmxhdExvbmdGb3JtYXQgPSBhY2NvdW50LnNldHRpbmdzLmxhdExvbmdGb3JtYXQgfHwgdGhpcy5zZXR0aW5ncy5sYXRMb25nRm9ybWF0IHx8ICdERE1NJztcbiAgICAgIGFjY291bnQuc2V0dGluZ3MuY29udGVudCA9IGFjY291bnQuc2V0dGluZ3MuY29udGVudCB8fCB7fTtcblxuICAgICAgLy8gUmVhZCBtYWluIHByb2ZpbGVcbiAgICAgIHRoaXMuX2NhY2hlLm1haW5Qcm9maWxlID0gUGVyc29uVXRpbHMuZ2V0TWFpblByb2ZpbGUoYWNjb3VudC5wcm9maWxlcyk7XG5cbiAgICAgIC8vIFVwZGF0ZSwgaW5zdGVhZCBvZiByZXBsYWNlIGl0XG4gICAgICBpZiAodGhpcy5fZGF0YSkge1xuICAgICAgICB0aGlzLl9kYXRhLmZyb21PYmplY3QoYWNjb3VudCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IGFjY291bnQ7XG4gICAgICB9XG4gICAgICB0aGlzLl9jYWNoZS5sb2FkZWQgPSB0cnVlO1xuXG4gICAgICAvLyBBcHBseSBzZXR0aW5ncywgZm91bmQgaW4gcmVtb3RlIGFjY291bnRcbiAgICAgIGlmIChhY2NvdW50LnNldHRpbmdzKSB7XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0ge1xuICAgICAgICAgIC4uLnRoaXMuc2V0dGluZ3Muc2V0dGluZ3MsXG4gICAgICAgICAgLi4uYWNjb3VudC5zZXR0aW5ncy5hc0xvY2FsU2V0dGluZ3MoKVxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0dGluZ3MuYXBwbHkoc2V0dGluZ3MpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnJlc2V0RGF0YSgpO1xuICAgICAgaWYgKGVycm9yLmNvZGUgJiYgZXJyb3IubWVzc2FnZSkgdGhyb3cgZXJyb3I7XG5cbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgdGhyb3cge1xuICAgICAgICBjb2RlOiBFcnJvckNvZGVzLkxPQURfQUNDT1VOVF9FUlJPUixcbiAgICAgICAgbWVzc2FnZTogJ0VSUk9SLkxPQURfQUNDT1VOVF9FUlJPUidcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGxpc3RlblNldHRpbmdzKCk6IFByb21pc2U8dm9pZD57XG4gICAgLy8gV2hlbiBzZXR0aW5ncyBjaGFuZ2VkOiBzYXZlIGl0IHJlbW90ZWx5XG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMuc2V0dGluZ3Mub25DaGFuZ2VcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDEwMDApLFxuICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmlzTG9naW4oKSAmJiB0aGlzLm5ldHdvcmsub25saW5lKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoc2V0dGluZ3MgPT4gdGhpcy5zYXZlTG9jYWxTZXR0aW5nc1JlbW90ZWx5KHNldHRpbmdzKSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlc3RvcmVMb2NhbGx5KCk6IFByb21pc2U8QWNjb3VudCB8IHVuZGVmaW5lZD4ge1xuXG4gICAgLy8gUmVzdG9yZSBmcm9tIHN0b3JhZ2VcbiAgICBjb25zdCB2YWx1ZXMgPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0KFBVQktFWV9TVE9SQUdFX0tFWSksXG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0KFRPS0VOX1NUT1JBR0VfS0VZKSxcbiAgICAgIHRoaXMuc3RvcmFnZS5nZXQoU0VDS0VZX1NUT1JBR0VfS0VZKVxuICAgIF0pO1xuICAgIGNvbnN0IHB1YmtleSA9IHZhbHVlc1swXTtcbiAgICBjb25zdCB0b2tlbiA9IHZhbHVlc1sxXTtcbiAgICBjb25zdCBzZWNrZXkgPSB2YWx1ZXNbMl07XG5cbiAgICAvLyBRdWl0IGlmIG5vIHB1YmtleSAobm90IGxvZ2dlZClcbiAgICBpZiAoIXB1YmtleSkgcmV0dXJuO1xuXG4gICAgLy8gUXVpdCBpZiBjb3VsZCBub3QgYXV0aCBvbiBwb2RcbiAgICBjb25zdCBjYW5SZW1vdGVBdXRoID0gdG9rZW4gfHwgc2Vja2V5IHx8IGZhbHNlO1xuICAgIGlmICghY2FuUmVtb3RlQXV0aCkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gQWNjb3VudCByZXN0b3JhdGlvbi4uLmApO1xuXG4gICAgdGhpcy5fY2FjaGUuYXV0aFRva2VuID0gdG9rZW47XG4gICAgdGhpcy5fY2FjaGUucHVia2V5ID0gcHVia2V5O1xuICAgIHRoaXMuX2NhY2hlLmtleXBhaXIgPSBzZWNrZXkgJiYge1xuICAgICAgcHVibGljS2V5OiBCYXNlNTguZGVjb2RlKHB1YmtleSksXG4gICAgICBzZWNyZXRLZXk6IEJhc2U1OC5kZWNvZGUoc2Vja2V5KVxuICAgIH0gfHwgbnVsbDtcblxuICAgIC8vIE9ubGluZSBtb2RlOiB0cnkgdG8gY29ubmVjdCB0byBwb2RcbiAgICBpZiAodGhpcy5uZXR3b3JrLm9ubGluZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hdXRoZW50aWNhdGUoKTtcbiAgICAgICAgaWYgKCF0aGlzLl9jYWNoZS5hdXRoVG9rZW4gJiYgIXRoaXMuX2NhY2hlLmF1dGhCYXNpYykgdGhyb3cgbmV3IEVycm9yKCdBdXRoZW50aWNhdGlvbiBmYWlsZWQnKTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBPZmZsaW5lIGZlYXR1cmUgYXJlIGVuYWJsZTogY29udGludWUgaW4gb2ZmbGluZSBtb2RlXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmhhc09mZmxpbmVGZWF0dXJlKCkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1thY2NvdW50XSBVbmFibGUgdG8gYXV0aGVudGljYXRlIG9uIHBvZDogZm9yY2luZyBvZmZsaW5lIG1vZGUnKTtcbiAgICAgICAgICB0aGlzLm5ldHdvcmsuc2V0Rm9yY2VPZmZsaW5lKHRydWUsIHtzaG93VG9hc3Q6IGZhbHNlfSk7XG4gICAgICAgICAgLy8gQ29udGludWVcbiAgICAgICAgfVxuICAgICAgICAvLyBObyBvZmZsaW5lIGZlYXR1cmVzIGVuYWJsZSAoPW9mZmxpbmUgbW9kZSBub3QgYWxsb3dlZClcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgdGhpcy5sb2dvdXQoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEdldCB0aGUgYWNjb3VudCwgZnJvbSBwdWJrZXlcbiAgICBsZXQganNvbkFjY291bnQgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KGAke0FDQ09VTlRfU1RPUkFHRV9LRVl9IyR7cHVia2V5fWApO1xuICAgIGlmICghanNvbkFjY291bnQpIHtcbiAgICAgIC8vIFRyeSB1c2luZyB0aGUgb2xkIHN0b3JhZ2Uga2V5XG4gICAgICBjb25zdCBhY2NvdW50U3RyID0gYXdhaXQgdGhpcy5zdG9yYWdlLmdldChBQ0NPVU5UX1NUT1JBR0VfS0VZKTtcbiAgICAgIGpzb25BY2NvdW50ID0gYWNjb3VudFN0ciAmJiAoKHR5cGVvZiBhY2NvdW50U3RyID09PSAnc3RyaW5nJykgJiYgSlNPTi5wYXJzZShqc29uQWNjb3VudCkgfHwgYWNjb3VudFN0cik7XG4gICAgfVxuXG4gICAgLy8gSW52YWxpZCBhY2NvdW50OiBkbyBub3QgdXNlIGl0XG4gICAgaWYgKCFqc29uQWNjb3VudCB8fCBqc29uQWNjb3VudC5wdWJrZXkgIT09IHB1YmtleSkgcmV0dXJuO1xuXG4gICAgLy8gVHJhbnNmb3JtIHRvIGVudGl0eVxuICAgIGNvbnN0IGFjY291bnQgPSBBY2NvdW50LmZyb21PYmplY3QoanNvbkFjY291bnQpO1xuXG4gICAgLy8gVXBkYXRlIGRhdGFcbiAgICB0aGlzLl9kYXRhID0gYWNjb3VudDtcbiAgICB0aGlzLl9jYWNoZS5tYWluUHJvZmlsZSA9IFBlcnNvblV0aWxzLmdldE1haW5Qcm9maWxlKGFjY291bnQucHJvZmlsZXMpO1xuICAgIHRoaXMuX2NhY2hlLmxvYWRlZCA9IHRydWU7XG5cbiAgICAvLyBFbWl0IGV2ZW50XG4gICAgdGhpcy5vbkxvZ2luLm5leHQodGhpcy5fZGF0YSk7XG4gICAgdGhpcy5vbkNoYW5nZS5uZXh0KHRoaXMuX2RhdGEpO1xuXG4gICAgaWYgKHRoaXMuX2VuYWJsZUxpc3RlbkNoYW5nZXMpIHRoaXMuc3RhcnRMaXN0ZW5DaGFuZ2VzKCk7XG5cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBBY2NvdW50IHJlc3RvcmF0aW9uIFtPS10ge3B1YmtleTogJHtwdWJrZXkuc3Vic3RyKDAsIDgpfX0sIHtwcm9maWxlOiAke3RoaXMuX2NhY2hlLm1haW5Qcm9maWxlfX1gKTtcblxuICAgIHJldHVybiBhY2NvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgYWNjb3VudCBpbnRvIHRoZSBsb2NhbCBzdG9yYWdlXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgc2F2ZUxvY2FsbHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9jYWNoZS5wdWJrZXkpIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgbG9nZ2VkJyk7XG5cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBTYXZpbmcgYWNjb3VudCB7JHt0aGlzLl9jYWNoZS5wdWJrZXkuc3Vic3RyaW5nKDAsIDYpfX0gaW4gbG9jYWwgc3RvcmFnZS4uLmApO1xuXG4gICAgLy8gQ29udmVydCBhY2NvdW50IHRvIGpzb25cbiAgICBjb25zdCBqc29uID0gdGhpcy5fZGF0YS5hc09iamVjdCh7a2VlcFR5cGVuYW1lOiB0cnVlfSk7XG4gICAgY29uc3Qgc2Vja2V5ID0gdGhpcy5fY2FjaGUua2V5cGFpciAmJiB0aGlzLl9jYWNoZS5rZXlwYWlyLnNlY3JldEtleSAmJiBCYXNlNTguZW5jb2RlKHRoaXMuX2NhY2hlLmtleXBhaXIuc2VjcmV0S2V5KSB8fCBudWxsO1xuXG4gICAgLy8gQ29udmVydCBhdmF0YXIgVVJMIHRvIGRhdGFVcmwgKGUuZy4gJ2RhdGE6aW1hZ2UvcG5nOjxiYXNlNjQgY29udGVudD4nKVxuICAgIGNvbnN0IGhhc0F2YXRhclVybCA9IGpzb24uYXZhdGFyICYmICFqc29uLmF2YXRhci5lbmRzV2l0aChERUZBVUxUX0FWQVRBUl9JTUFHRSkgJiZcbiAgICAgIChqc29uLmF2YXRhci5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgKGpzb24uYXZhdGFyLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpKTtcbiAgICBpZiAoaGFzQXZhdGFyVXJsICYmIHRoaXMubmV0d29yay5vbmxpbmUpIHtcbiAgICAgIGF3YWl0IHRoaXMuZmlsZS5nZXRJbWFnZShqc29uLmF2YXRhciwge1xuICAgICAgICB0aHVtYm5haWw6IHRydWUsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2RhdGFVcmwnXG4gICAgICB9KVxuICAgICAgICAudGhlbihkYXRhVXJsID0+IHtcbiAgICAgICAgICBpZiAoZGF0YVVybCAmJiB0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIEltYWdlIGZldGNoZWQ6ICcsIGRhdGFVcmwuc3Vic3RyaW5nKDAsIDUwKSk7XG5cbiAgICAgICAgICAvLyBUT0RPOiBtYWtlIHN1cmUgdG8gZGlzcGxheSBCYXNlNjQgaW1hZ2UgaW4gdGhlIG1lbnUgdG9wIGhlYWRlclxuICAgICAgICAgIC8vanNvbkFjY291bnQuYXZhdGFyID0gZGF0YVVybDtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgW2FjY291bnRdIEVycm9yIHdoaWxlIGZldGNoaW5nIGltYWdlOiAke2pzb24uYXZhdGFyfTogJHtlcnJ9YCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoUFVCS0VZX1NUT1JBR0VfS0VZLCB0aGlzLl9jYWNoZS5wdWJrZXkpLFxuICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0KFRPS0VOX1NUT1JBR0VfS0VZLCB0aGlzLl9jYWNoZS5hdXRoVG9rZW4pLFxuICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0KGAke0FDQ09VTlRfU1RPUkFHRV9LRVl9IyR7dGhpcy5fY2FjaGUucHVia2V5fWAsIGpzb24pLFxuICAgICAgICAvLyBTZWNyZXQga2V5IChvcHRpb25hbClcbiAgICAgICAgc2Vja2V5ICYmIHRoaXMuc3RvcmFnZS5zZXQoU0VDS0VZX1NUT1JBR0VfS0VZLCBzZWNrZXkpIHx8IHRoaXMuc3RvcmFnZS5yZW1vdmUoU0VDS0VZX1NUT1JBR0VfS0VZKSxcbiAgICAgICAgLy8gUmVtb3ZlIG9sZCBzdG9yYWdlIGtleVxuICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlKEFDQ09VTlRfU1RPUkFHRV9LRVkpXG4gICAgICBdKTtcblxuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbYWNjb3VudF0gQWNjb3VudCBzYXZlZCBpbiBsb2NhbCBzdG9yYWdlJyk7XG4gICAgfVxuICAgIGNhdGNoKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignW2FjY291bnRdIEVycm9yIHdoaWxlIHNhdmluZyBhY2NvdW50IGxvY2FsbHk6ICcgKyAoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVyciksIGVycik7XG4gICAgfVxuICB9XG5cbiAgIGFzeW5jIHNhdmVMb2NhbFNldHRpbmdzUmVtb3RlbHkoc291cmNlOiBMb2NhbFNldHRpbmdzKXtcbiAgICAgaWYgKCFzb3VyY2UgfHwgIXRoaXMuaXNMb2dpbigpIHx8IHNvdXJjZS5hY2NvdW50SW5oZXJpdGFuY2UgPT09IGZhbHNlKSByZXR1cm47IC8vIFNraXBcbiAgICAgY29uc3QgYWNjb3VudCA9IHRoaXMuYWNjb3VudDtcblxuICAgICAvLyBNZXJnZSBsb2NhbCBzZXR0aW5ncyBpbnRvIGFjY291bnQncyBzZXR0aW5nc1xuICAgICBjb25zdCBzZXR0aW5ncyA9IFVzZXJTZXR0aW5ncy5mcm9tT2JqZWN0KGFjY291bnQuc2V0dGluZ3MpIHx8IG5ldyBVc2VyU2V0dGluZ3MoKTtcbiAgICAgY29uc3QgY2hhbmdlZCA9IHNldHRpbmdzLm1lcmdlKHNvdXJjZSwgWydsb2NhbGUnLCAnbGF0TG9uZ0Zvcm1hdCcsICdwcm9wZXJ0aWVzJ10pO1xuXG4gICAgIGlmICghY2hhbmdlZCkgcmV0dXJuOyAvLyBTa2lwIGlmIHVuY2hhbmdlZFxuXG4gICAgIC8vIFNhdmUgcmVtb3RlbHlcbiAgICAgdGhpcy5hY2NvdW50LnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgIGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzUmVtb3RlbHkoc2V0dGluZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBvciB1cGRhdGUgYW4gdXNlciBhY2NvdW50XG4gICAqXG4gICAqIEBwYXJhbSBhY2NvdW50XG4gICAqIEBwYXJhbSBrZXlQYWlyXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgc2F2ZVJlbW90ZWx5KGFjY291bnQ6IEFjY291bnQsIGtleVBhaXI/OiBLZXlQYWlyKTogUHJvbWlzZTxBY2NvdW50PiB7XG4gICAgYWNjb3VudC5wdWJrZXkgPSBhY2NvdW50LnB1YmtleSB8fCAoa2V5UGFpciAmJiBCYXNlNTguZW5jb2RlKGtleVBhaXIucHVibGljS2V5KSk7XG4gICAgaWYgKCFhY2NvdW50LnB1YmtleSkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGFjY291bnQgcHVia2V5Jyk7XG5cbiAgICBjb25zdCBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFNhdmluZyBhY2NvdW50IHJlbW90ZWx5Li4uYCk7XG5cbiAgICBjb25zdCBpc05ldyA9IGlzTmlsKGFjY291bnQuaWQpO1xuXG4gICAgLy8gSWYgdGhpcyBpcyBhbiB1cGRhdGU6IGdldCBleGlzdGluZyBhY2NvdW50J3MgdXBkYXRlRGF0ZSwgdG8gYXZvaWQgJ3ZlcnNpb24gZXJyb3InIHdoZW4gc2F2aW5nXG4gICAgaWYgKCFpc05ldykge1xuICAgICAgY29uc3QgZXhpc3RpbmdBY2NvdW50ID0gYXdhaXQgdGhpcy5sb2FkKHsgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknIH0pO1xuICAgICAgaWYgKCFleGlzdGluZ0FjY291bnQgfHwgIWV4aXN0aW5nQWNjb3VudC51cGRhdGVEYXRlKSB7XG4gICAgICAgIHRocm93IHsgY29kZTogRXJyb3JDb2Rlcy5BQ0NPVU5UX05PVF9FWElTVFMsIG1lc3NhZ2U6ICdFUlJPUi5BQ0NPVU5UX05PVF9FWElTVFMnIH07XG4gICAgICB9XG4gICAgICB0aGlzLmNvcHlJZEFuZFVwZGF0ZURhdGUoZXhpc3RpbmdBY2NvdW50LCBhY2NvdW50KTtcbiAgICB9XG5cbiAgICBjb25zdCBqc29uID0gYWNjb3VudC5hc09iamVjdChNSU5JRllfRU5USVRZX0ZPUl9QT0QpO1xuXG4gICAgLy8gVXNlciBub3QgYWxsb3cgdG8gY2hhbmdlIGhpcyBwcm9maWxlc1xuICAgIGRlbGV0ZSBqc29uLnByb2ZpbGVzO1xuXG4gICAgLy8gRXhlY3V0ZSBtdXRhdGlvblxuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTx7IGRhdGE6IEFjY291bnQgfT4oe1xuICAgICAgbXV0YXRpb246IGlzTmV3ID8gQWNjb3VudE11dGF0aW9ucy5jcmVhdGUgOiBBY2NvdW50TXV0YXRpb25zLnNhdmUsXG4gICAgICB2YXJpYWJsZXM6IHsgZGF0YToganNvbiB9LFxuICAgICAgZXJyb3I6IHtcbiAgICAgICAgY29kZTogRXJyb3JDb2Rlcy5TQVZFX0FDQ09VTlRfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6ICdFUlJPUi5TQVZFX0FDQ09VTlRfRVJST1InXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBDb3B5IHVwZGF0ZSBwcm9wZXJ0aWVzXG4gICAgdGhpcy5jb3B5SWRBbmRVcGRhdGVEYXRlKGRhdGEsIGFjY291bnQpO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gQWNjb3VudCByZW1vdGVseSBzYXZlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgKTtcblxuICAgIHJldHVybiBhY2NvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBvciB1cGRhdGUgdXNlciBzZXR0aW5nc1xuICAgKlxuICAgKiBAcGFyYW0gc2V0dGluZ3NcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBzYXZlU2V0dGluZ3NSZW1vdGVseShzZXR0aW5nczogVXNlclNldHRpbmdzKSB7XG5cbiAgICBjb25zdCBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFNhdmluZyBzZXR0aW5ncyByZW1vdGVseS4uLmApO1xuXG4gICAgY29uc3QganNvbiA9IHNldHRpbmdzLmFzT2JqZWN0KE1JTklGWV9FTlRJVFlfRk9SX1BPRCk7XG5cbiAgICAvLyBFeGVjdXRlIG11dGF0aW9uXG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmdyYXBocWwubXV0YXRlPHsgZGF0YTogVXNlclNldHRpbmdzIH0+KHtcbiAgICAgIG11dGF0aW9uOiBBY2NvdW50TXV0YXRpb25zLnNhdmVTZXR0aW5ncyxcbiAgICAgIHZhcmlhYmxlczogeyBkYXRhOiBqc29uIH0sXG4gICAgICBlcnJvcjoge1xuICAgICAgICBjb2RlOiBFcnJvckNvZGVzLlNBVkVfU0VUVElOR1NfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6ICdFUlJPUi5TQVZFX1NFVFRJTkdTX0VSUk9SJ1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQ29weSB1cGRhdGUgcHJvcGVydGllc1xuICAgIHRoaXMuY29weUlkQW5kVXBkYXRlRGF0ZVNldHRpbmdzKGRhdGEsIHNldHRpbmdzKTtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFNldHRpbmdzIHJlbW90ZWx5IHNhdmVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuXG4gICAgLy8gU2F2ZSBpbnRvIGFjY291bnRcbiAgICBpZiAodGhpcy5hY2NvdW50KSB0aGlzLmFjY291bnQuc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhdXRoZW50aWNhdGVBbmRHZXRUb2tlbih0b2tlbj86IHN0cmluZywgY291bnRlcj86IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCF0aGlzLl9jYWNoZS5wdWJrZXkpIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgbG9nZ2VkJyk7XG5cbiAgICBpZiAoIWNvdW50ZXIpIGNvbnNvbGUuaW5mbygnW2FjY291bnRdIEF1dGhlbnRpY2F0aW9uIG9uIHBvZC4uLicpO1xuXG4gICAgaWYgKGNvdW50ZXIgPiA0KSB7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBGYWlsZWQgdG8gYXV0aGVudGljYXRpb24gb24gcG9kIChhZnRlciAke2NvdW50ZXJ9IGF0dGVtcHRzKWApO1xuICAgICAgdGhyb3cgeyBjb2RlOiBFcnJvckNvZGVzLkFVVEhfU0VSVkVSX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuQVVUSF9TRVJWRVJfRVJST1InIH07XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdmFsaWRcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdyYXBocWwucXVlcnk8eyBhdXRoZW50aWNhdGU6IGJvb2xlYW4gfSwgeyB0b2tlbjogc3RyaW5nIH0+KHtcbiAgICAgICAgcXVlcnk6IEF1dGhRdWVyeSxcbiAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgdG9rZW5cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICBjb2RlOiBFcnJvckNvZGVzLlVOQVVUSE9SSVpFRCxcbiAgICAgICAgICBtZXNzYWdlOiAnRVJST1IuVU5BVVRIT1JJWkVEJ1xuICAgICAgICB9LFxuICAgICAgICBmZXRjaFBvbGljeTogJ25vLWNhY2hlJ1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFRva2VuIGlzIGFjY2VwdGVkIGJ5IHRoZSBzZXJ2ZXJcbiAgICAgIGlmIChkYXRhICYmIGRhdGEuYXV0aGVudGljYXRlKSB7XG4gICAgICAgIC8vIFN0b3JlIHRoZSB0b2tlblxuICAgICAgICB0aGlzLm9uQXV0aFRva2VuQ2hhbmdlLm5leHQodG9rZW4pO1xuXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW2FjY291bnRdIEF1dGhlbnRpY2F0aW9uIG9uIHBvZCBbT0tdIHtwdWJrZXk6ICcke3RoaXMuX2NhY2hlLnB1YmtleS5zdWJzdHIoMCwgOCl9J31gKTtcbiAgICAgICAgcmV0dXJuIHRva2VuOyAvLyByZXR1cm4gdGhlIHRva2VuXG4gICAgICB9XG5cbiAgICAgIC8vIENvbnRpbnVlICh3aWxsIHJldHJ5IHdpdGggYW5vdGhlciBjaGFsbGVuZ2UpXG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgYSBuZXcgdG9rZW5cbiAgICBjb25zdCBjaGFsbGVuZ2VFcnJvciA9IHtcbiAgICAgIGNvZGU6IEVycm9yQ29kZXMuQVVUSF9DSEFMTEVOR0VfRVJST1IsXG4gICAgICBtZXNzYWdlOiAnRVJST1IuQVVUSF9DSEFMTEVOR0VfRVJST1InXG4gICAgfTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5ncmFwaHFsLnF1ZXJ5PHtcbiAgICAgIGF1dGhDaGFsbGVuZ2U6IHtcbiAgICAgICAgcHVia2V5OiBzdHJpbmc7XG4gICAgICAgIGNoYWxsZW5nZTogc3RyaW5nO1xuICAgICAgICBzaWduYXR1cmU6IHN0cmluZztcbiAgICAgIH07XG4gICAgfT4oe1xuICAgICAgcXVlcnk6IEF1dGhDaGFsbGVuZ2VRdWVyeSxcbiAgICAgIHZhcmlhYmxlczoge30sXG4gICAgICBlcnJvcjogY2hhbGxlbmdlRXJyb3IsXG4gICAgICBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seSdcbiAgICB9KTtcblxuICAgIC8vIENoZWNrIGNoYWxsZW5nZVxuICAgIGlmICghZGF0YSB8fCAhZGF0YS5hdXRoQ2hhbGxlbmdlKSB0aHJvdyBjaGFsbGVuZ2VFcnJvcjsgLy8gU2hvdWxkIG5ldmVyIG9jY3VyXG5cbiAgICAvLyBDaGVjayBzZXJ2ZXIgc2lnbmF0dXJlXG4gICAgY29uc3Qgc2lnbmF0dXJlT0sgPSBhd2FpdCB0aGlzLmNyeXB0b1NlcnZpY2UudmVyaWZ5KFxuICAgICAgZGF0YS5hdXRoQ2hhbGxlbmdlLmNoYWxsZW5nZSxcbiAgICAgIGRhdGEuYXV0aENoYWxsZW5nZS5zaWduYXR1cmUsXG4gICAgICBkYXRhLmF1dGhDaGFsbGVuZ2UucHVia2V5XG4gICAgKTtcbiAgICBpZiAoIXNpZ25hdHVyZU9LKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ZJWE1FOiBCYWQgcGVlciBzaWduYXR1cmUgb24gYXV0aCBjaGFsbGVuZ2UgIScsIGRhdGEuYXV0aENoYWxsZW5nZSk7XG4gICAgfVxuICAgIC8vIFRPRE86IGNoZWNrIHNlcnZlciBwdWJrZXkgYXMgYSB2YWxpZCBjZXJ0aWZpY2F0ZVxuXG4gICAgLy8gRG8gdGhlIGNoYWxsZW5nZVxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGF3YWl0IHRoaXMuY3J5cHRvU2VydmljZS5zaWduKGRhdGEuYXV0aENoYWxsZW5nZS5jaGFsbGVuZ2UsIHRoaXMuX2NhY2hlLmtleXBhaXIpO1xuICAgIGNvbnN0IG5ld1Rva2VuID0gYCR7dGhpcy5fY2FjaGUucHVia2V5fToke2RhdGEuYXV0aENoYWxsZW5nZS5jaGFsbGVuZ2V9fCR7c2lnbmF0dXJlfWA7XG5cbiAgICAvLyBpdGVyYXRlIHdpdGggdGhlIG5ldyB0b2tlblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0ZUFuZEdldFRva2VuKG5ld1Rva2VuLCAoY291bnRlciB8fCAxKSArIDEgLyogaW5jcmVtZW50ICovKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGFydExpc3RlbkNoYW5nZXMob3B0cz86IEFjY291bnRXYXRjaE9wdGlvbnMpOiBTdWJzY3JpcHRpb24ge1xuICAgIGlmICh0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uKSB0aGlzLnN0b3BMaXN0ZW5DaGFuZ2VzKCk7IC8vIFN0b3AgcHJldmlvdXMgc3Vic2NyaXB0aW9uXG4gICAgaWYgKHRoaXMubmV0d29yay5vZmZsaW5lKSByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbigpOyAvLyBPZmZsaW5lOiBza2lwXG5cbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLndhdGNoQ2hhbmdlcyhvcHRzKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFJlbW90ZSB1cGRhdGUgZGV0ZWN0ZWQgYXQgJHtkYXRhLnVwZGF0ZURhdGV9YCk7XG4gICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBpZiAoZXJyICYmICtlcnIuY29kZSA9PT0gU2VydmVyRXJyb3JDb2Rlcy5OT1RfRk9VTkQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbygnW2FjY291bnRdIFtXU10gQWNjb3VudCBub3QgZXhpc3RzIGFueW1vcmU6IGZvcmNlIHVzZXIgdG8gbG9nb3V0Li4uJywgZXJyKTtcbiAgICAgICAgICAgIHRoaXMubG9nb3V0KCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChlcnIgJiYgK2Vyci5jb2RlID09PSBTZXJ2ZXJFcnJvckNvZGVzLlVOQVVUSE9SSVpFRCkge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKCdbYWNjb3VudF0gW1dTXSBBY2NvdW50IG5vdCBhdXRob3JpemVkOiBmb3JjZSB1c2VyIHRvIGxvZ291dC4uLicsIGVycik7XG4gICAgICAgICAgICB0aGlzLmxvZ291dCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1thY2NvdW50XSBbV1NdIFJlY2VpdmVkIGVycm9yOicsIGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIC8vIEFkZCBjbG9zZSBsb2dcbiAgICBzdWJzY3JpcHRpb24uYWRkKCgpID0+IGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBTdG9wIHdhdGNoaW5nIHJlbW90ZSBjaGFuZ2VzYCkpO1xuXG4gICAgdGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbjtcblxuICAgIC8vIE1ha2Ugc3VyZSB0byB1c2UgdGhlIHN0b3AgZnVuY3Rpb24sIHdoZW4gdW5zdWJzY3JpYmVcbiAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbigoKSA9PiB0aGlzLnN0b3BMaXN0ZW5DaGFuZ2VzKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0b3BMaXN0ZW5DaGFuZ2VzKCkge1xuICAgIGlmKHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCB3YXRjaENoYW5nZXMob3B0cz86IEFjY291bnRXYXRjaE9wdGlvbnMpOiBPYnNlcnZhYmxlPEFjY291bnQ+IHtcblxuICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICAvLyBXYWl0IHNlcnZpY2UgcmVhZHksIHRoZW4gbG9vcFxuICAgICAgcmV0dXJuIGZyb20odGhpcy5yZWFkeSgpKVxuICAgICAgICAucGlwZShzd2l0Y2hNYXAoKCkgPT4gdGhpcy53YXRjaENoYW5nZXMob3B0cykpKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX2NhY2hlLnB1YmtleSkgdGhyb3cgbmV3IEVycm9yKCdOb3QgbG9nZ2VkIGluJyk7XG4gICAgaWYgKHRoaXMubmV0d29yay5vZmZsaW5lKSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB3YXRjaCBhY2NvdW50IGNoYW5nZXM6IG5ldHdvcmsgaXMgb2ZmbGluZS4nKTtcblxuICAgIGNvbnN0IHZhcmlhYmxlcyA9IHtcbiAgICAgIGludGVydmFsOiBNYXRoLm1heCgwLCBvcHRzPy5pbnRlcnZhbEluU2Vjb25kIHx8IHRoaXMuZW52aXJvbm1lbnQuYWNjb3VudD8ubGlzdGVuSW50ZXJ2YWxJblNlY29uZCB8fCAwKVxuICAgIH1cblxuICAgIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBXYXRjaGluZyByZW1vdGUgY2hhbmdlcywgZXZlcnkgJHt2YXJpYWJsZXMuaW50ZXJ2YWx9c2ApO1xuXG4gICAgcmV0dXJuIHRoaXMuZ3JhcGhxbC5zdWJzY3JpYmU8e2RhdGE6IGFueX0+KHtcbiAgICAgIHF1ZXJ5OiBBY2NvdW50U3Vic2NyaXB0aW9ucy5saXN0ZW5DaGFuZ2VzLFxuICAgICAgdmFyaWFibGVzLFxuICAgICAgZXJyb3I6IHtcbiAgICAgICAgY29kZTogRXJyb3JDb2Rlcy5TVUJTQ1JJQkVfQUNDT1VOVF9FUlJPUixcbiAgICAgICAgbWVzc2FnZTogJ0VSUk9SLkFDQ09VTlQuU1VCU0NSSUJFX0FDQ09VTlRfRVJST1InXG4gICAgICB9XG4gICAgfSkucGlwZShcbiAgICAgICAgbWFwKCh7ZGF0YX0pID0+IGRhdGEpLFxuICAgICAgICAvLyBLZWVwIG9ubHkgaWYgbmV3ZXJcbiAgICAgICAgZmlsdGVyKGRhdGEgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRVcGRhdGVEYXRlOiBNb21lbnQgPSBmcm9tRGF0ZUlTT1N0cmluZyh0aGlzLl9kYXRhPy51cGRhdGVEYXRlKTtcbiAgICAgICAgICBjb25zdCByZW1vdGVVcGRhdGVEYXRlOiBNb21lbnQgPSBmcm9tRGF0ZUlTT1N0cmluZyhkYXRhPy51cGRhdGVEYXRlKTtcbiAgICAgICAgICByZXR1cm4gKHJlbW90ZVVwZGF0ZURhdGUgJiYgKCFjdXJyZW50VXBkYXRlRGF0ZSB8fCAhcmVtb3RlVXBkYXRlRGF0ZS5pc1NhbWUoY3VycmVudFVwZGF0ZURhdGUsICdtaWxsaXNlY29uZCcpKSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvcHlJZEFuZFVwZGF0ZURhdGUoc291cmNlOiBBY2NvdW50IHwgdW5kZWZpbmVkLCB0YXJnZXQ6IEFjY291bnQpIHtcbiAgICBpZiAoIXNvdXJjZSkgcmV0dXJuO1xuXG4gICAgdGFyZ2V0LmlkID0gc291cmNlLmlkIHx8IHRhcmdldC5pZDtcbiAgICB0YXJnZXQudXBkYXRlRGF0ZSA9IHNvdXJjZS51cGRhdGVEYXRlIHx8IHRhcmdldC51cGRhdGVEYXRlO1xuXG4gICAgdGhpcy5jb3B5SWRBbmRVcGRhdGVEYXRlU2V0dGluZ3Moc291cmNlLnNldHRpbmdzLCB0YXJnZXQuc2V0dGluZ3MpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvcHlJZEFuZFVwZGF0ZURhdGVTZXR0aW5ncyhzb3VyY2U6IFVzZXJTZXR0aW5ncyB8IHVuZGVmaW5lZCwgdGFyZ2V0OiBVc2VyU2V0dGluZ3MpIHtcbiAgICBpZiAoIXNvdXJjZSkgcmV0dXJuO1xuXG4gICAgdGFyZ2V0LmlkID0gc291cmNlLmlkIHx8IHRhcmdldC5pZDtcbiAgICB0YXJnZXQudXBkYXRlRGF0ZSA9IHNvdXJjZS51cGRhdGVEYXRlIHx8IHRhcmdldC51cGRhdGVEYXRlO1xuICB9XG59XG4iXX0=
1166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL2FjY291bnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBQyxhQUFhLEVBQVUsTUFBTSxrQkFBa0IsQ0FBQztBQUV4RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDOUMsT0FBTyxFQUFTLFdBQVcsRUFBbUIsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRSxPQUFPLEVBQTJCLFlBQVksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzlFLE9BQU8sRUFBQyxlQUFlLEVBQUUsSUFBSSxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUUsT0FBTyxFQUFjLEdBQUcsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2QyxPQUFPLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDdEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRTlELE9BQU8sRUFBZ0IsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDaEUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQzNELE9BQU8sRUFBQyxxQkFBcUIsRUFBZSxn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V0FBVztZQWFYLGdCQUFnQix1QkFtT25CLFFBQVE7WUFwT0wsZUFBZSx1QkFxT2xCLFFBQVE7NENBQ1IsTUFBTSxTQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDcnlwdG9TZXJ2aWNlLCBLZXlQYWlyfSBmcm9tICcuL2NyeXB0by5zZXJ2aWNlJztcbmltcG9ydCB7RGVwYXJ0bWVudH0gZnJvbSAnLi9tb2RlbC9kZXBhcnRtZW50Lm1vZGVsJztcbmltcG9ydCB7QWNjb3VudH0gZnJvbSAnLi9tb2RlbC9hY2NvdW50Lm1vZGVsJztcbmltcG9ydCB7UGVyc29uLCBQZXJzb25VdGlscywgVXNlclByb2ZpbGVMYWJlbH0gZnJvbSAnLi9tb2RlbC9wZXJzb24ubW9kZWwnO1xuaW1wb3J0IHtMb2NhbFNldHRpbmdzLCBVc2FnZU1vZGUsIFVzZXJTZXR0aW5nc30gZnJvbSAnLi9tb2RlbC9zZXR0aW5ncy5tb2RlbCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgZnJvbSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7RmV0Y2hQb2xpY3ksIGdxbH0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJ0Bpb25pYy9zdG9yYWdlJztcblxuaW1wb3J0IHtpc05pbCwgc2xlZXB9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtCYXNlR3JhcGhxbFNlcnZpY2V9IGZyb20gJy4vYmFzZS1ncmFwaHFsLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtFcnJvckNvZGVzLCBTZXJ2ZXJFcnJvckNvZGVzfSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQge0dyYXBocWxTZXJ2aWNlfSBmcm9tICcuLi9ncmFwaHFsL2dyYXBocWwuc2VydmljZSc7XG5pbXBvcnQge0xvY2FsU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuL2xvY2FsLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHtGb3JtRmllbGREZWZpbml0aW9ufSBmcm9tICcuLi8uLi9zaGFyZWQvZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQge0F1dGhUb2tlblR5cGUsIE5ldHdvcmtTZXJ2aWNlfSBmcm9tICcuL25ldHdvcmsuc2VydmljZSc7XG5pbXBvcnQge0ZpbGVTZXJ2aWNlfSBmcm9tICcuLi8uLi9zaGFyZWQvZmlsZS9maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHtNSU5JRllfRU5USVRZX0ZPUl9QT0QsIFJlZmVyZW50aWFsLCBSZWZlcmVudGlhbFV0aWxzfSBmcm9tICcuL21vZGVsL3JlZmVyZW50aWFsLm1vZGVsJztcbmltcG9ydCB7U3RhdHVzSWRzfSBmcm9tICcuL21vZGVsL21vZGVsLmVudW0nO1xuaW1wb3J0IHtCYXNlNTh9IGZyb20gJy4vYmFzZTU4JztcbmltcG9ydCB7RU5WSVJPTk1FTlR9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQge2Zyb21EYXRlSVNPU3RyaW5nfSBmcm9tICcuLi8uLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHtmaXJzdE5vdE5pbFByb21pc2V9IGZyb20gJy4uLy4uL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5pbXBvcnQge2RlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtCYXNlRW50aXR5R3JhcGhxbE11dGF0aW9ucywgQmFzZUVudGl0eUdyYXBocWxTdWJzY3JpcHRpb25zfSBmcm9tICcuL2Jhc2UtZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtNb21lbnR9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge1Nob3dUb2FzdE9wdGlvbnMsIFRvYXN0c30gZnJvbSAnLi4vLi4vc2hhcmVkL3RvYXN0cyc7XG5pbXBvcnQge092ZXJsYXlFdmVudERldGFpbH0gZnJvbSAnQGlvbmljL2NvcmUnO1xuaW1wb3J0IHtUb2FzdENvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEFjY291bnREZXRhaWxzIHtcbiAgbG9hZGVkOiBib29sZWFuO1xuICBrZXlwYWlyOiBLZXlQYWlyO1xuICBhdXRoVG9rZW46IHN0cmluZztcbiAgYXV0aEJhc2ljPzogc3RyaW5nO1xuICBwdWJrZXk6IHN0cmluZztcbiAgcGVyc29uOiBQZXJzb247XG4gIGRlcGFydG1lbnQ6IERlcGFydG1lbnQ7XG4gIG1haW5Qcm9maWxlOiBTdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIEF1dGhEYXRhIHtcbiAgdXNlcm5hbWU6IHN0cmluZztcbiAgcGFzc3dvcmQ6IHN0cmluZztcbiAgb2ZmbGluZT86IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdGVyRGF0YSBleHRlbmRzIEF1dGhEYXRhIHtcbiAgYWNjb3VudDogQWNjb3VudDtcbn1cblxuY29uc3QgVE9LRU5fU1RPUkFHRV9LRVkgPSAndG9rZW4nO1xuY29uc3QgUFVCS0VZX1NUT1JBR0VfS0VZID0gJ3B1YmtleSc7XG5jb25zdCBTRUNLRVlfU1RPUkFHRV9LRVkgPSAnc2Vja2V5JztcbmNvbnN0IEFDQ09VTlRfU1RPUkFHRV9LRVkgPSAnYWNjb3VudCc7XG5cbmNvbnN0IERFRkFVTFRfQVZBVEFSX0lNQUdFID0gJ2Fzc2V0cy9pbWcvcGVyc29uLnBuZyc7XG5cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBHcmFwaFFMIHF1ZXJpZXNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5jb25zdCBGcmFnbWVudHMgPSB7XG4gIGFjY291bnQ6IGdxbGBcbiAgICBmcmFnbWVudCBBY2NvdW50RnJhZ21lbnQgb24gQWNjb3VudFZPIHtcbiAgICAgIGlkXG4gICAgICBmaXJzdE5hbWVcbiAgICAgIGxhc3ROYW1lXG4gICAgICBlbWFpbFxuICAgICAgcHVia2V5XG4gICAgICBhdmF0YXJcbiAgICAgIHN0YXR1c0lkXG4gICAgICB1cGRhdGVEYXRlXG4gICAgICBjcmVhdGlvbkRhdGVcbiAgICAgIHByb2ZpbGVzXG4gICAgICBzZXR0aW5ncyB7XG4gICAgICAgIC4uLlVzZXJTZXR0aW5nc0ZyYWdtZW50XG4gICAgICB9XG4gICAgICBkZXBhcnRtZW50IHtcbiAgICAgICAgaWRcbiAgICAgICAgbGFiZWxcbiAgICAgICAgbmFtZVxuICAgICAgICBfX3R5cGVuYW1lXG4gICAgICB9XG4gICAgICBfX3R5cGVuYW1lXG4gICAgfWAsXG5cbiAgc2V0dGluZ3M6IGdxbGBmcmFnbWVudCBVc2VyU2V0dGluZ3NGcmFnbWVudCBvbiBVc2VyU2V0dGluZ3NWTyB7XG4gICAgaWRcbiAgICBsb2NhbGVcbiAgICBsYXRMb25nRm9ybWF0XG4gICAgY29udGVudFxuICAgIG5vbmNlXG4gICAgdXBkYXRlRGF0ZVxuICAgIF9fdHlwZW5hbWVcbiAgfWBcbn07XG5cbi8vIExvYWQgYWNjb3VudCBxdWVyeVxuY29uc3QgTG9hZFF1ZXJ5OiBhbnkgPSBncWxgXG4gIHF1ZXJ5IEFjY291bnQge1xuICAgIGRhdGE6IGFjY291bnQge1xuICAgICAgLi4uQWNjb3VudEZyYWdtZW50XG4gICAgfVxuICB9XG4gICR7RnJhZ21lbnRzLmFjY291bnR9XG4gICR7RnJhZ21lbnRzLnNldHRpbmdzfVxuYDtcblxuLy8gQ2hlY2sgZW1haWwgcXVlcnlcbmNvbnN0IElzRW1haWxFeGlzdHNRdWVyeTogYW55ID0gZ3FsYFxuICBxdWVyeSBJc0VtYWlsRXhpc3RzKCRlbWFpbDogU3RyaW5nLCAkaGFzaDogU3RyaW5nKXtcbiAgICBpc0VtYWlsRXhpc3RzKGVtYWlsOiAkZW1haWwsIGhhc2g6ICRoYXNoKVxuICB9XG5gO1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElzRW1haWxFeGlzdHNWYXJpYWJsZXMge1xuICBlbWFpbDogc3RyaW5nO1xuICBoYXNoOiBzdHJpbmc7XG59XG5cbi8vIFNhdmUgKGNyZWF0ZSBvciB1cGRhdGUpIGFjY291bnQgbXV0YXRpb25cbmNvbnN0IEFjY291bnRNdXRhdGlvbnM6IFBhcnRpYWw8QmFzZUVudGl0eUdyYXBocWxNdXRhdGlvbnM+ICYgeyBjcmVhdGU6IGFueSwgc2F2ZVNldHRpbmdzOiBhbnk7IH0gPSB7XG4gIHNhdmU6IGdxbGAgbXV0YXRpb24gU2F2ZUFjY291bnQoJGRhdGE6QWNjb3VudFZPSW5wdXQpe1xuICAgIGRhdGE6IHNhdmVBY2NvdW50KGFjY291bnQ6ICRkYXRhKXtcbiAgICAgIC4uLkFjY291bnRGcmFnbWVudFxuICAgIH1cbiAgfVxuICAke0ZyYWdtZW50cy5hY2NvdW50fVxuICAke0ZyYWdtZW50cy5zZXR0aW5nc31gLFxuXG4gIGNyZWF0ZTogZ3FsYG11dGF0aW9uIENyZWF0ZUFjY291bnQoJGRhdGE6QWNjb3VudFZPSW5wdXQpe1xuICAgIGRhdGE6IGNyZWF0ZUFjY291bnQoYWNjb3VudDogJGRhdGEpe1xuICAgICAgLi4uQWNjb3VudEZyYWdtZW50XG4gICAgfVxuICB9XG4gICR7RnJhZ21lbnRzLmFjY291bnR9XG4gICR7RnJhZ21lbnRzLnNldHRpbmdzfWAsXG5cbiAgc2F2ZVNldHRpbmdzOiBncWxgbXV0YXRpb24gU2F2ZVNldHRpbmdzKCRkYXRhOlVzZXJTZXR0aW5nc1ZPSW5wdXQpe1xuICAgIGRhdGE6IHNhdmVTZXR0aW5ncyhzZXR0aW5nczogJGRhdGEpe1xuICAgICAgLi4uVXNlclNldHRpbmdzRnJhZ21lbnRcbiAgICB9XG4gIH1cbiAgJHtGcmFnbWVudHMuc2V0dGluZ3N9YFxufTtcblxuLy8gU2VudCBjb25maXJtYXRpb24gZW1haWxcbmNvbnN0IFNlbmRDb25maXJtRW1haWxNdXRhdGlvbjogYW55ID0gZ3FsYFxuICBtdXRhdGlvbiBzZW5kQWNjb3VudENvbmZpcm1hdGlvbkVtYWlsKCRlbWFpbDpTdHJpbmcsICRsb2NhbGU6U3RyaW5nKXtcbiAgICBzZW5kQWNjb3VudENvbmZpcm1hdGlvbkVtYWlsKGVtYWlsOiAkZW1haWwsIGxvY2FsZTogJGxvY2FsZSlcbiAgfVxuYDtcblxuLy8gQ29uZmlybSBhY2NvdW50IGVtYWlsXG5jb25zdCBDb25maXJtRW1haWxNdXRhdGlvbjogYW55ID0gZ3FsYFxuICBtdXRhdGlvbiBjb25maXJtQWNjb3VudEVtYWlsKCRlbWFpbDpTdHJpbmcsICRjb2RlOlN0cmluZyl7XG4gICAgY29uZmlybUFjY291bnRFbWFpbChlbWFpbDogJGVtYWlsLCBjb2RlOiAkY29kZSlcbiAgfVxuYDtcblxuLy8gQXV0aGVudGljYXRpb24gIHF1ZXJ5XG5jb25zdCBBdXRoUXVlcnk6IGFueSA9IGdxbGBcbiAgcXVlcnkgQXV0aCgkdG9rZW46IFN0cmluZyl7XG4gICAgYXV0aGVudGljYXRlKHRva2VuOiAkdG9rZW4pXG4gIH1cbmA7XG5cbi8vIE5ldyBhdXRoIGNoYWxsZW5nZSBxdWVyeVxuY29uc3QgQXV0aENoYWxsZW5nZVF1ZXJ5OiBhbnkgPSBncWxgXG4gIHF1ZXJ5IEF1dGhDaGFsbGVuZ2V7XG4gICAgYXV0aENoYWxsZW5nZXtcbiAgICAgIGNoYWxsZW5nZVxuICAgICAgcHVia2V5XG4gICAgICBzaWduYXR1cmVcbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IEFjY291bnRTdWJzY3JpcHRpb25zOiBCYXNlRW50aXR5R3JhcGhxbFN1YnNjcmlwdGlvbnMgPSB7XG4gIGxpc3RlbkNoYW5nZXM6IGdxbGBzdWJzY3JpcHRpb24gdXBkYXRlQWNjb3VudCgkaW50ZXJ2YWw6IEludCl7XG4gICAgZGF0YTogdXBkYXRlQWNjb3VudChpbnRlcnZhbDogJGludGVydmFsKSB7XG4gICAgICBpZFxuICAgICAgdXBkYXRlRGF0ZVxuICAgIH1cbiAgfWBcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWNjb3VudFdhdGNoT3B0aW9ucyB7XG4gIGludGVydmFsSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBBY2NvdW50U2VydmljZSBleHRlbmRzIEJhc2VHcmFwaHFsU2VydmljZTxBY2NvdW50LCBhbnksIG51bWJlciwgQWNjb3VudD4ge1xuXG4gIG9uTG9naW4gPSBuZXcgU3ViamVjdDxBY2NvdW50PigpO1xuICBvbkxvZ291dCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgb25DaGFuZ2UgPSBuZXcgU3ViamVjdDxBY2NvdW50PigpO1xuICBvbkF1dGhUb2tlbkNoYW5nZSA9IG5ldyBTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcbiAgb25BdXRoQmFzaWNDaGFuZ2UgPSBuZXcgU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG5cbiAgcHJpdmF0ZSBfbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZW5hYmxlTGlzdGVuQ2hhbmdlczogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfY2FjaGU6IEFjY291bnREZXRhaWxzID0ge1xuICAgIGxvYWRlZDogZmFsc2UsXG4gICAga2V5cGFpcjogbnVsbCxcbiAgICBhdXRoVG9rZW46IG51bGwsXG4gICAgYXV0aEJhc2ljOiBudWxsLFxuICAgIHB1YmtleTogbnVsbCxcbiAgICBtYWluUHJvZmlsZTogbnVsbCxcbiAgICBwZXJzb246IG51bGwsXG4gICAgZGVwYXJ0bWVudDogbnVsbFxuICB9O1xuICBwcml2YXRlIF8kYWRkaXRpb25hbEZpZWxkcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Rm9ybUZpZWxkRGVmaW5pdGlvbltdPihbXSk7XG4gIHByaXZhdGUgX3Rva2VuVHlwZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF1dGhUb2tlblR5cGU+KHVuZGVmaW5lZCk7XG5cbiAgZ2V0IGFjY291bnQoKTogQWNjb3VudCB7XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlLmxvYWRlZCA/IHRoaXMuX2RhdGEgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgcGVyc29uKCk6IFBlcnNvbiB7XG4gICAgaWYgKHRoaXMuX2NhY2hlLmxvYWRlZCAmJiAhdGhpcy5fY2FjaGUucGVyc29uKSB7XG4gICAgICB0aGlzLl9jYWNoZS5wZXJzb24gPSB0aGlzLl9jYWNoZS5sb2FkZWQgPyB0aGlzLl9kYXRhLmFzUGVyc29uKCkgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jYWNoZS5wZXJzb247XG4gIH1cblxuICBnZXQgZGVwYXJ0bWVudCgpOiBEZXBhcnRtZW50IHtcbiAgICBpZiAodGhpcy5fY2FjaGUubG9hZGVkICYmICF0aGlzLl9jYWNoZS5kZXBhcnRtZW50KSB7XG4gICAgICB0aGlzLl9jYWNoZS5kZXBhcnRtZW50ID0gdGhpcy5fY2FjaGUubG9hZGVkID8gdGhpcy5fZGF0YS5hc1BlcnNvbigpLmRlcGFydG1lbnQgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jYWNoZS5kZXBhcnRtZW50O1xuICB9XG5cbiAgZ2V0IHRva2VuVHlwZSgpOiBBdXRoVG9rZW5UeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW5UeXBlJC52YWx1ZTtcbiAgfVxuXG4gIHNldCB0b2tlblR5cGUodmFsdWU6IEF1dGhUb2tlblR5cGUpIHtcbiAgICBpZiAodGhpcy5fdG9rZW5UeXBlJC52YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnW2FjY291bnRdIFVzaW5nIGF1dGhlbnRpY2F0aW9uIHRva2VuIHR5cGU6ICcgKyB2YWx1ZSk7XG4gICAgICB0aGlzLl90b2tlblR5cGUkLm5leHQodmFsdWUpO1xuICAgICAgLy8gUmVzZXQgdmFsdWVzXG4gICAgICB0aGlzLl9jYWNoZS5hdXRoVG9rZW4gPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLm9uQXV0aFRva2VuQ2hhbmdlLm5leHQodW5kZWZpbmVkKTtcbiAgICAgIHRoaXMuX2NhY2hlLmF1dGhCYXNpYyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMub25BdXRoQmFzaWNDaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY3J5cHRvU2VydmljZTogQ3J5cHRvU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgbmV0d29yazogTmV0d29ya1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGdyYXBocWw6IEdyYXBocWxTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBzZXR0aW5nczogTG9jYWxTZXR0aW5nc1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHN0b3JhZ2U6IFN0b3JhZ2UsXG4gICAgcHJvdGVjdGVkIGZpbGU6IEZpbGVTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXIsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50XG4gICkge1xuICAgIHN1cGVyKGdyYXBocWwsIGVudmlyb25tZW50KTtcbiAgICB0aGlzLl9lbmFibGVMaXN0ZW5DaGFuZ2VzID0gKCFlbnZpcm9ubWVudC5hY2NvdW50IHx8IGVudmlyb25tZW50LmFjY291bnQuZW5hYmxlTGlzdGVuQ2hhbmdlcyAhPT0gZmFsc2UpO1xuXG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1thY2NvdW50LXNlcnZpY2VdIENyZWF0aW5nIHNlcnZpY2UnKTtcblxuICAgIHRoaXMucmVzZXREYXRhKCk7XG5cbiAgICAvLyBTZW5kIGF1dGggdG9rZW4gdG8gdGhlIGdyYXBocWwgbGF5ZXIsIHdoZW4gY2hhbmdlZFxuICAgIHRoaXMub25BdXRoVG9rZW5DaGFuZ2Uuc3Vic2NyaWJlKCh0b2tlbikgPT4gdGhpcy5ncmFwaHFsLnNldEF1dGhUb2tlbih0b2tlbikpO1xuICAgIHRoaXMub25BdXRoQmFzaWNDaGFuZ2Uuc3Vic2NyaWJlKChiYXNpYykgPT4gdGhpcy5ncmFwaHFsLnNldEF1dGhCYXNpYyhiYXNpYykpO1xuXG4gICAgLy8gRm9yY2UgbmV0d29yayB0byB3YWl0IGFjY291bnQgc2VydmljZSwgYWZ0ZXIgZ2V0dGluZyBjb25uZWN0aW9uIHRvIHRoZSBwZWVyXG4gICAgdGhpcy5uZXR3b3JrLm9uKCdiZWZvcmVUcnlPbmxpbmVGaW5pc2gnLCBhc3luYyAob25saW5lKSA9PiB7XG4gICAgICAvLyBJZiBvbmxpbmUsIHdhaXQgYSBmdWxsIHJlc3RhcnQsIGJlY2F1c2UgaXQgY2FuIGZvcmNlIG9mZmxpbmUgbW9kZVxuICAgICAgaWYgKG9ubGluZSAmJiAoIXRoaXMuc3RhcnRlZCB8fCB0aGlzLmlzTG9naW4oKSkpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIEZvcmNlIG5ldHdvcmtTZXJ2aWNlLnRyeU9ubGluZSgpIHRvIHdhaXQsIHRoYXQgZ3JhcGhxbCBhbmQgYWNjb3VudCBzZXJ2aWNlIGlzIHJlc3RhcnRlZC4uLicpO1xuICAgICAgICBhd2FpdCBzbGVlcCg1MDApOyAvLyB3YWl0IGdyYXBocWwgc2VydmljZSB0byBiZSByZXN0YXJ0ZWRcbiAgICAgICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbiAgYXN5bmMgbmdPblN0YXJ0KCk6IFByb21pc2U8QWNjb3VudD4ge1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5zZXR0aW5ncy5yZWFkeSgpLFxuICAgICAgLy8gV2FpdCB0b2tlbiB0eXBlIHRvIGJlIHNldFxuICAgICAgZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMuX3Rva2VuVHlwZSQpXG4gICAgXSk7XG5cbiAgICAvLyBMaXN0ZW4gZ3JhcGhxbCBzdGFydCAob3IgcmVzdGFydClcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5ncmFwaHFsLm9uU3RhcnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc3RhcnRlZCAmJiB0aGlzLmlzTG9naW4oKSkge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1thY2NvdW50XSBSZXN0YXJ0aW5nLCB0byByZXRyeSB0byBhdXRoZW50aWNhdGUuLi4nKTtcbiAgICAgICAgICB0aGlzLnJlc3RhcnQoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgYXdhaXQgdGhpcy5yZXN0b3JlTG9jYWxseSgpO1xuICAgIGF3YWl0IHRoaXMubGlzdGVuU2V0dGluZ3MoKTtcblxuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25TdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGhhZEF1dGhUb2tlbiA9IHRoaXMuX2NhY2hlLmF1dGhUb2tlbiAmJiB0cnVlO1xuICAgIGNvbnN0IGhhZEF1dGhCYXNpYyA9IHRoaXMuX2NhY2hlLmF1dGhCYXNpYyAmJiB0cnVlO1xuICAgIGNvbnN0IGhhZEF1dGggPSBoYWRBdXRoVG9rZW4gfHwgaGFkQXV0aEJhc2ljO1xuICAgIHRoaXMucmVzZXREYXRhKCk7XG4gICAgaWYgKGhhZEF1dGgpIHtcbiAgICAgIHRoaXMub25Mb2dvdXQubmV4dCgpO1xuICAgICAgdGhpcy5vbkNoYW5nZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICBpZiAoaGFkQXV0aFRva2VuKSB0aGlzLm9uQXV0aFRva2VuQ2hhbmdlLm5leHQodW5kZWZpbmVkKTtcbiAgICAgIGlmIChoYWRBdXRoQmFzaWMpIHRoaXMub25BdXRoQmFzaWNDaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIGlzTG9naW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMuX2NhY2hlLnB1YmtleSAmJiB0aGlzLl9jYWNoZS5sb2FkZWQpO1xuICB9XG5cbiAgaXNBdXRoKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLl9jYWNoZS5wdWJrZXkgJiYgdGhpcy5fY2FjaGUua2V5cGFpciAmJiB0aGlzLl9jYWNoZS5rZXlwYWlyLnNlY3JldEtleSk7XG4gIH1cblxuICBoYXNNaW5Qcm9maWxlKHVzZXJQcm9maWxlOiBVc2VyUHJvZmlsZUxhYmVsKTogYm9vbGVhbiB7XG4gICAgLy8gc2hvdWxkIGJlIGxvZ2luLCBhbmQgc3RhdHVzIEVOQUJMRSBvciBURU1QT1JBUllcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIXRoaXMuX2RhdGEucHVia2V5IHx8XG4gICAgICAodGhpcy5fZGF0YS5zdGF0dXNJZCAhPT0gU3RhdHVzSWRzLkVOQUJMRSAmJiB0aGlzLl9kYXRhLnN0YXR1c0lkICE9PSBTdGF0dXNJZHMuVEVNUE9SQVJZKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gUGVyc29uVXRpbHMuaGFzVXBwZXJPckVxdWFsc1Byb2ZpbGUodGhpcy5fZGF0YS5wcm9maWxlcywgdXNlclByb2ZpbGUpO1xuICB9XG5cbiAgaGFzRXhhY3RQcm9maWxlKGxhYmVsOiBVc2VyUHJvZmlsZUxhYmVsKTogYm9vbGVhbiB7XG4gICAgLy8gc2hvdWxkIGJlIGxvZ2luLCBhbmQgc3RhdHVzIEVOQUJMRSBvciBURU1QT1JBUllcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIXRoaXMuX2RhdGEucHVia2V5IHx8XG4gICAgICAodGhpcy5fZGF0YS5zdGF0dXNJZCAhPT0gU3RhdHVzSWRzLkVOQUJMRSAmJiB0aGlzLl9kYXRhLnN0YXR1c0lkICE9PSBTdGF0dXNJZHMuVEVNUE9SQVJZKSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5fZGF0YS5wcm9maWxlcy5zb21lKHByb2ZpbGUgPT4gcHJvZmlsZSA9PT0gbGFiZWwpO1xuICB9XG5cbiAgaGFzUHJvZmlsZUFuZElzRW5hYmxlKHVzZXJQcm9maWxlOiBVc2VyUHJvZmlsZUxhYmVsKTogYm9vbGVhbiB7XG4gICAgLy8gc2hvdWxkIGJlIGxvZ2luLCBhbmQgc3RhdHVzIEVOQUJMRVxuICAgIGlmICghdGhpcy5fZGF0YSB8fCAhdGhpcy5fZGF0YS5wdWJrZXkgfHwgdGhpcy5fZGF0YS5zdGF0dXNJZCAhPT0gU3RhdHVzSWRzLkVOQUJMRSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBQZXJzb25VdGlscy5oYXNVcHBlck9yRXF1YWxzUHJvZmlsZSh0aGlzLl9kYXRhLnByb2ZpbGVzLCB1c2VyUHJvZmlsZSk7XG4gIH1cblxuICBpc0FkbWluKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc1Byb2ZpbGVBbmRJc0VuYWJsZSgnQURNSU4nKTtcbiAgfVxuXG4gIGlzU3VwZXJ2aXNvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNQcm9maWxlQW5kSXNFbmFibGUoJ1NVUEVSVklTT1InKTtcbiAgfVxuXG4gIGlzVXNlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNQcm9maWxlQW5kSXNFbmFibGUoJ1VTRVInKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKiBAcGFyYW0gbW9kZVxuICAgKi9cbiAgaXNVc2FnZU1vZGUobW9kZTogVXNhZ2VNb2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuaXNVc2FnZU1vZGUobW9kZSk7XG4gIH1cblxuICBpc09ubHlHdWVzdCgpOiBib29sZWFuIHtcbiAgICAvLyBTaG91bGQgYmUgbG9naW4sIGFuZCBzdGF0dXMgRU5BQkxFIG9yIFRFTVBPUkFSWVxuICAgIGlmICghdGhpcy5fZGF0YSB8fCAhdGhpcy5fZGF0YS5wdWJrZXkgfHxcbiAgICAgICh0aGlzLl9kYXRhLnN0YXR1c0lkICE9PSBTdGF0dXNJZHMuRU5BQkxFICYmIHRoaXMuX2RhdGEuc3RhdHVzSWQgIT09IFN0YXR1c0lkcy5URU1QT1JBUlkpKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vIFByb2ZpbGUgbGVzcyB0aGVuIHVzZXJcbiAgICByZXR1cm4gIVBlcnNvblV0aWxzLmhhc1VwcGVyT3JFcXVhbHNQcm9maWxlKHRoaXMuX2RhdGEucHJvZmlsZXMsICdVU0VSJyk7XG4gIH1cblxuICBjYW5Vc2VyV3JpdGVEYXRhRm9yRGVwYXJ0bWVudChyZWNvcmRlckRlcGFydG1lbnQ6IFJlZmVyZW50aWFsIHwgYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKFJlZmVyZW50aWFsVXRpbHMuaXNFbXB0eShyZWNvcmRlckRlcGFydG1lbnQpKSB7XG4gICAgICBpZiAoIXRoaXMuaXNBZG1pbigpKVxuICAgICAgICBjb25zb2xlLndhcm4oJ1VuYWJsZSB0byBjaGVjayBpZiB1c2VyIGhhcyByaWdodDogaW52YWxpZCByZWNvcmRlckRlcGFydG1lbnQnLCByZWNvcmRlckRlcGFydG1lbnQpO1xuICAgICAgcmV0dXJuIHRoaXMuaXNBZG1pbigpO1xuICAgIH1cblxuICAgIC8vIFNob3VsZCBiZSBsb2dpbiwgYW5kIHN0YXR1cyBFTkFCTEVcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIXRoaXMuX2RhdGEucHVia2V5IHx8IHRoaXMuX2RhdGEuc3RhdHVzSWQgIT09IFN0YXR1c0lkcy5FTkFCTEUpIHJldHVybiBmYWxzZTtcblxuICAgIGlmICghdGhpcy5fZGF0YS5kZXBhcnRtZW50IHx8ICF0aGlzLl9kYXRhLmRlcGFydG1lbnQuaWQpIHtcbiAgICAgIGNvbnNvbGUud2FybignVXNlciBhY2NvdW50IGhhcyBubyBkZXBhcnRtZW50ICEgVW5hYmxlIHRvIGNoZWNrIHdyaXRlIHJpZ2h0IGFnYWluc3QgcmVjb3JkZXJEZXBhcnRtZW50Jyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gU2FtZSByZWNvcmRlciBkZXBhcnRtZW50OiBPSywgdXNlciBjYW4gd3JpdGVcbiAgICBpZiAodGhpcy5fZGF0YS5kZXBhcnRtZW50LmlkID09PSByZWNvcmRlckRlcGFydG1lbnQuaWQpIHJldHVybiB0cnVlO1xuXG4gICAgLy8gRWxzZSwgY2hlY2sgaWYgc3VwZXJ2aXNvciAob3IgbW9yZSlcbiAgICByZXR1cm4gUGVyc29uVXRpbHMuaGFzVXBwZXJPckVxdWFsc1Byb2ZpbGUodGhpcy5fZGF0YS5wcm9maWxlcywgJ1NVUEVSVklTT1InKTtcbiAgfVxuXG4gIGFzeW5jIHJlZ2lzdGVyKGRhdGE6IFJlZ2lzdGVyRGF0YSk6IFByb21pc2U8QWNjb3VudD4ge1xuICAgIGlmICh0aGlzLmlzTG9naW4oKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIGFscmVhZHkgbG9naW4uIFBsZWFzZSBsb2dvdXQgYmVmb3JlIHJlZ2lzdGVyLicpO1xuICAgIH1cbiAgICBpZiAoIWRhdGEudXNlcm5hbWUgfHwgIWRhdGEucGFzc3dvcmQpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyByZXF1aXJlZCB1c2VybmFtZSBvciBwYXNzd29yZCcpO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbYWNjb3VudF0gUmVnaXN0ZXIgbmV3IHVzZXIgYWNjb3VudC4uLicsIGRhdGEuYWNjb3VudCk7XG4gICAgdGhpcy5fY2FjaGUubG9hZGVkID0gZmFsc2U7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBrZXlwYWlyID0gYXdhaXQgdGhpcy5jcnlwdG9TZXJ2aWNlLnNjcnlwdEtleXBhaXIoZGF0YS51c2VybmFtZSwgZGF0YS5wYXNzd29yZCk7XG4gICAgICBkYXRhLmFjY291bnQucHVia2V5ID0gQmFzZTU4LmVuY29kZShrZXlwYWlyLnB1YmxpY0tleSk7XG5cbiAgICAgIC8vIERlZmF1bHQgdmFsdWVzXG4gICAgICBkYXRhLmFjY291bnQuc2V0dGluZ3MgPSBkYXRhLmFjY291bnQuc2V0dGluZ3MgfHwgbmV3IFVzZXJTZXR0aW5ncygpO1xuICAgICAgZGF0YS5hY2NvdW50LnNldHRpbmdzLmxvY2FsZSA9IHRoaXMuc2V0dGluZ3MubG9jYWxlO1xuICAgICAgZGF0YS5hY2NvdW50LnNldHRpbmdzLmxhdExvbmdGb3JtYXQgPSB0aGlzLnNldHRpbmdzLmxhdExvbmdGb3JtYXQ7XG4gICAgICBkYXRhLmFjY291bnQuc2V0dGluZ3MuY29udGVudCA9IGRhdGEuYWNjb3VudC5zZXR0aW5ncy5jb250ZW50IHx8IHt9O1xuICAgICAgZGF0YS5hY2NvdW50LmRlcGFydG1lbnQuaWQgPSBkYXRhLmFjY291bnQuZGVwYXJ0bWVudC5pZCB8fCB0aGlzLmVudmlyb25tZW50LmRlZmF1bHREZXBhcnRtZW50SWQ7XG5cbiAgICAgIHRoaXMuX2NhY2hlLmtleXBhaXIgPSBrZXlwYWlyO1xuICAgICAgY29uc3QgYWNjb3VudCA9IGF3YWl0IHRoaXMuc2F2ZVJlbW90ZWx5KGRhdGEuYWNjb3VudCwga2V5cGFpcik7XG5cbiAgICAgIC8vIERlZmF1bHQgdmFsdWVzXG4gICAgICBhY2NvdW50LmF2YXRhciA9IGFjY291bnQuYXZhdGFyIHx8ICh0aGlzLmVudmlyb25tZW50LmJhc2VVcmwgKyBERUZBVUxUX0FWQVRBUl9JTUFHRSk7XG4gICAgICB0aGlzLl9jYWNoZS5tYWluUHJvZmlsZSA9IFBlcnNvblV0aWxzLmdldE1haW5Qcm9maWxlKGFjY291bnQucHJvZmlsZXMpO1xuXG4gICAgICB0aGlzLl9kYXRhID0gYWNjb3VudDtcbiAgICAgIHRoaXMuX2NhY2hlLnB1YmtleSA9IGFjY291bnQucHVia2V5O1xuXG4gICAgICAvLyBUcnkgdG8gYXV0aCBvbiBwb2RcbiAgICAgIGF3YWl0IHRoaXMuYXV0aGVudGljYXRlKGRhdGEpO1xuXG4gICAgICB0aGlzLl9jYWNoZS5sb2FkZWQgPSB0cnVlO1xuXG4gICAgICBhd2FpdCB0aGlzLnNhdmVMb2NhbGx5KCk7XG5cbiAgICAgIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBBY2NvdW50IHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuXG4gICAgICAvLyBFbWl0IGV2ZW50c1xuICAgICAgdGhpcy5vbkxvZ2luLm5leHQodGhpcy5fZGF0YSk7XG4gICAgICB0aGlzLm9uQ2hhbmdlLm5leHQodGhpcy5fZGF0YSk7XG5cbiAgICAgIC8vIExpc3RlbiByZW1vdGUgY2hhbmdlc1xuICAgICAgaWYgKHRoaXMuX2VuYWJsZUxpc3RlbkNoYW5nZXMpIHRoaXMuc3RhcnRMaXN0ZW5DaGFuZ2VzKCk7XG5cbiAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IgJiYgZXJyb3IubWVzc2FnZSB8fCBlcnJvcik7XG4gICAgICB0aGlzLnJlc2V0RGF0YSgpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYXV0aGVudGljYXRlKGRhdGE/OiBBdXRoRGF0YSkge1xuICAgIC8vIFdhaXQgdGhlIGF1dGggdG9rZW4sIHRoZW4gY29udGludWVcbiAgICBjb25zdCB0b2tlblR5cGUgPSBhd2FpdCBmaXJzdE5vdE5pbFByb21pc2UodGhpcy5fdG9rZW5UeXBlJCk7XG5cbiAgICAvLyBCYXNpYyBhdXRoXG4gICAgaWYgKHRva2VuVHlwZSA9PT0gJ2Jhc2ljJyB8fCB0b2tlblR5cGUgPT09ICdiYXNpYy1hbmQtdG9rZW4nKSB7XG5cbiAgICAgIC8vIEdlbmVyYXRlIHRoZSBhdXRoQmFzaWMsIGlmIHVzZWRcbiAgICAgIGlmICghdGhpcy5fY2FjaGUuYXV0aEJhc2ljKSB7XG4gICAgICAgIC8vIFNraXAgaWYgdG9rZW4gYWxyZWFkeSBwcm92aWRlZFxuICAgICAgICBpZiAoISh0aGlzLl9jYWNoZS5hdXRoVG9rZW4gJiYgdG9rZW5UeXBlID09PSAnYmFzaWMtYW5kLXRva2VuJykpIHtcbiAgICAgICAgICBpZiAoIWRhdGEgfHwgIWRhdGEudXNlcm5hbWUgfHwgIWRhdGEucGFzc3dvcmQpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyB1c2VybmFtZSBhbmQgcGFzc3dvcmQnKTtcbiAgICAgICAgICB0aGlzLl9jYWNoZS5hdXRoQmFzaWMgPSB0aGlzLmNyeXB0b1NlcnZpY2UuZW5jb2RlQmFzZTY0KGAke2RhdGEudXNlcm5hbWV9OiR7ZGF0YS5wYXNzd29yZH1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5vbkF1dGhCYXNpY0NoYW5nZS5uZXh0KHRoaXMuX2NhY2hlLmF1dGhCYXNpYyk7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgdGhlIGF1dGhUb2tlbiwgaWYgdXNlZFxuICAgIGlmICh0b2tlblR5cGUgPT09ICd0b2tlbicgfHwgdG9rZW5UeXBlID09PSAnYmFzaWMtYW5kLXRva2VuJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5fY2FjaGUuYXV0aFRva2VuID0gYXdhaXQgdGhpcy5hdXRoZW50aWNhdGVBbmRHZXRUb2tlbih0aGlzLl9jYWNoZS5hdXRoVG9rZW4pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gTmV2ZXIgYXV0aGVudGljYXRlLCBvciBub3QgcmVhZHkgZm9yIG9mZmxpbmUgbW9kZSA9PiBleGl0XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICB0aGlzLnJlc2V0RGF0YSgpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGb3JnZXQgYXV0aEJhc2ljLCB0byBzd2l0Y2ggdG8gYXV0aFRva2VuXG4gICAgaWYgKHRva2VuVHlwZSA9PT0gJ2Jhc2ljLWFuZC10b2tlbicpIHtcbiAgICAgIHRoaXMuX2NhY2hlLmF1dGhCYXNpYyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMub25BdXRoQmFzaWNDaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvZ2luKGRhdGE6IEF1dGhEYXRhKTogUHJvbWlzZTxBY2NvdW50PiB7XG4gICAgaWYgKCFkYXRhIHx8ICFkYXRhLnVzZXJuYW1lIHx8ICFkYXRhLnBhc3N3b3JkKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgdXNlcm5hbWUgb3IgcGFzc3dvcmQnKTtcblxuICAgIGNvbnNvbGUuZGVidWcoJ1thY2NvdW50XSBMb2dpbi4uLicpO1xuXG4gICAgbGV0IGtleXBhaXI7XG4gICAgdHJ5IHtcbiAgICAgIGtleXBhaXIgPSBhd2FpdCB0aGlzLmNyeXB0b1NlcnZpY2Uuc2NyeXB0S2V5cGFpcihkYXRhLnVzZXJuYW1lLCBkYXRhLnBhc3N3b3JkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB0aGlzLnJlc2V0RGF0YSgpO1xuICAgICAgdGhyb3cgeyBjb2RlOiBFcnJvckNvZGVzLlVOS05PV05fRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5TQ1JZUFRfRVJST1InIH07XG4gICAgfVxuXG4gICAgLy8gU3RvcmUgcHVia2V5K2tleXBhaXJcbiAgICB0aGlzLl9jYWNoZS5wdWJrZXkgPSBCYXNlNTguZW5jb2RlKGtleXBhaXIucHVibGljS2V5KTtcbiAgICB0aGlzLl9jYWNoZS5rZXlwYWlyID0ga2V5cGFpcjtcblxuICAgIC8vIFRyeSB0byBsb2FkIHByZXZpb3VzIHRva2VuXG4gICAgbGV0IHByZXZpb3VzVG9rZW46IHN0cmluZyA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQoVE9LRU5fU1RPUkFHRV9LRVkpO1xuICAgIHByZXZpb3VzVG9rZW4gPSBwcmV2aW91c1Rva2VuICYmIHByZXZpb3VzVG9rZW4uc3RhcnRzV2l0aCh0aGlzLl9jYWNoZS5wdWJrZXkpICYmIHByZXZpb3VzVG9rZW4gfHwgbnVsbDtcblxuICAgIC8vIE9mZmxpbmUgbW9kZVxuICAgIGNvbnN0IG9mZmxpbmUgPSB0aGlzLnNldHRpbmdzLmhhc09mZmxpbmVGZWF0dXJlKCkgJiYgKHRoaXMubmV0d29yay5vZmZsaW5lIHx8IGRhdGEub2ZmbGluZSA9PT0gdHJ1ZSk7XG4gICAgaWYgKG9mZmxpbmUpICB7XG4gICAgICB0aGlzLl9jYWNoZS5hdXRoVG9rZW4gPSBwcmV2aW91c1Rva2VuO1xuXG4gICAgICAvLyBNYWtlIHN1cmUgbmV0d29yayBpZiBzZXQgYXMgb2ZmbGluZVxuICAgICAgdGhpcy5uZXR3b3JrLnNldEZvcmNlT2ZmbGluZSh0cnVlLCB7c2hvd1RvYXN0OiBmYWxzZX0pO1xuICAgICAgY29uc29sZS5pbmZvKGBbYWNjb3VudF0gTG9naW4gW09LXSB7cHVia2V5OiAke3RoaXMuX2NhY2hlLnB1YmtleS5zdWJzdHIoMCwgOCl9fSwge29mZmxpbmU6IHRydWV9YCk7XG4gICAgfVxuXG4gICAgLy8gT25saW5lIG1vZGU6IHRyeSB0byBhdXRoIG9uIHBvZFxuICAgIGVsc2Uge1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0ZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIE5ldmVyIGF1dGhlbnRpY2F0ZSwgb3Igbm90IHJlYWR5IGZvciBvZmZsaW5lIG1vZGUgPT4gZXhpdFxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgdGhpcy5yZXNldERhdGEoKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTG9hZCBhY2NvdW50IGRhdGFcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkRGF0YSh7b2ZmbGluZSwgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknfSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIElmIGFjY291bnQgbm90IGZvdW5kLCBjaGVjayBpZiBlbWFpbCBpcyB2YWxpZFxuICAgICAgaWYgKGVyciAmJiArKGVyci5jb2RlKSA9PT0gRXJyb3JDb2Rlcy5MT0FEX0FDQ09VTlRfRVJST1IpIHtcblxuICAgICAgICAvLyBDaGVjayBlbWFpbCBleGlzdHNcbiAgICAgICAgaWYgKGRhdGEudXNlcm5hbWUuaW5kZXhPZignQCcpICE9PSAtMSkge1xuICAgICAgICAgIGxldCBpc0VtYWlsRXhpc3RzO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpc0VtYWlsRXhpc3RzID0gYXdhaXQgdGhpcy5pc0VtYWlsRXhpc3RzKGRhdGEudXNlcm5hbWUpO1xuICAgICAgICAgIH0gY2F0Y2ggKG90aGVyRXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IGVycjsgLy8gcmVzZW5kIHRoZSBmaXJzdCBlcnJvclxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEVtYWlsIG5vdCBleGlzdHMgKG5vIGFjY291bnQpXG4gICAgICAgICAgaWYgKCFpc0VtYWlsRXhpc3RzKSB7XG4gICAgICAgICAgICB0aHJvdyB7IGNvZGU6IEVycm9yQ29kZXMuVU5LTk9XTl9BQ0NPVU5UX0VNQUlMLCBtZXNzYWdlOiAnRVJST1IuVU5LTk9XTl9BQ0NPVU5UX0VNQUlMJyB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVtYWlsIGV4aXN0cywgc28gZXJyb3IgPSAnYmFkIHBhc3N3b3JkJ1xuICAgICAgICB0aHJvdyB7IGNvZGU6IEVycm9yQ29kZXMuQkFEX1BBU1NXT1JELCBtZXNzYWdlOiAnRVJST1IuQkFEX1BBU1NXT1JEJyB9O1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7IC8vIHJlc2VuZCB0aGUgZmlyc3QgZXJyb3JcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gU3RvcmUgdG8gbG9jYWwgc3RvcmFnZVxuICAgICAgYXdhaXQgdGhpcy5zYXZlTG9jYWxseSgpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgdGhpcy5yZXNldERhdGEoKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIC8vIEVtaXQgZXZlbnQgdG8gb2JzZXJ2ZXJzXG4gICAgdGhpcy5vbkxvZ2luLm5leHQodGhpcy5fZGF0YSk7XG4gICAgdGhpcy5vbkNoYW5nZS5uZXh0KHRoaXMuX2RhdGEpO1xuXG4gICAgaWYgKHRoaXMuX2VuYWJsZUxpc3RlbkNoYW5nZXMpIHRoaXMuc3RhcnRMaXN0ZW5DaGFuZ2VzKCk7XG5cbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIGFzeW5jIHJlbG9hZCgpOiBQcm9taXNlPEFjY291bnQ+IHtcbiAgICBpZiAoIXRoaXMuX2NhY2hlLnB1YmtleSkgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBsb2dnZWQnKTtcbiAgICBpZiAodGhpcy5uZXR3b3JrLm9mZmxpbmUpIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNoZWNrIGFjY291bnQgaW4gb2ZmbGluZSBtb2RlJyk7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBSZWxvYWRpbmcgYWNjb3VudC4uLmApO1xuICAgIGNvbnN0IHdhc0xvZ2luID0gdGhpcy5pc0xvZ2luKCk7XG5cbiAgICB0cnkge1xuXG4gICAgICBhd2FpdCB0aGlzLmxvYWREYXRhKCk7XG4gICAgICBhd2FpdCB0aGlzLnNhdmVMb2NhbGx5KCk7XG5cbiAgICAgIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBSZWxvYWRpbmcgYWNjb3VudCBbT0tdIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuXG4gICAgICAvLyBFbWl0IGxvZ2luIGV2ZW50IHRvIHN1YnNjcmliZXJzXG4gICAgICB0aGlzLm9uTG9naW4ubmV4dCh0aGlzLl9kYXRhKTtcbiAgICAgIHRoaXMub25DaGFuZ2UubmV4dCh0aGlzLl9kYXRhKTtcblxuICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gQ2Fubm90IHJlbG9hZCBidXQgd2FzIGxvZ2luOiBmb3JjZSB0byBsb2dvdXRcbiAgICAgIGlmICh3YXNMb2dpbiAmJiAhdGhpcy5pc0xvZ2luKCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW2FjY291bnRdIFJlbG9hZGluZyBhY2NvdW50IGZhaWxlZC4gV2lsbCBmb3JjZSBsb2dvdXQuLi5gLCBlcnJvcik7XG4gICAgICAgIGF3YWl0IHRoaXMubG9nb3V0KCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBvciB1cGRhdGUgYW4gdXNlciBhY2NvdW50LCB0byB0aGUgcmVtb3RlIHN0b3JhZ2VcbiAgICpcbiAgICogQHBhcmFtIGFjY291bnRcbiAgICovXG4gIGFzeW5jIHNhdmUoYWNjb3VudDogQWNjb3VudCk6IFByb21pc2U8QWNjb3VudD4ge1xuICAgIGlmICghdGhpcy5fY2FjaGUucHVia2V5KSByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ1VzZXIgbm90IGxvZ2dlZCcpO1xuICAgIGlmICh0aGlzLl9jYWNoZS5wdWJrZXkgIT09IGFjY291bnQucHVia2V5KSByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ05vdCB1c2VyIGFjY291bnQnKTtcblxuICAgIGFjY291bnQgPSBhd2FpdCB0aGlzLnNhdmVSZW1vdGVseShhY2NvdW50LCB0aGlzLl9jYWNoZS5rZXlwYWlyKTtcblxuICAgIC8vIFNldCBkZWZhdWx0c1xuICAgIGFjY291bnQuYXZhdGFyID0gYWNjb3VudC5hdmF0YXIgfHwgKHRoaXMuZW52aXJvbm1lbnQuYmFzZVVybCArIERFRkFVTFRfQVZBVEFSX0lNQUdFKTtcbiAgICB0aGlzLl9jYWNoZS5tYWluUHJvZmlsZSA9IFBlcnNvblV0aWxzLmdldE1haW5Qcm9maWxlKGFjY291bnQucHJvZmlsZXMpO1xuXG4gICAgdGhpcy5fZGF0YSA9IGFjY291bnQ7XG4gICAgdGhpcy5fY2FjaGUubG9hZGVkID0gdHJ1ZTtcblxuICAgIC8vIFNhdmUgbG9jYWxseSAoaW4gc3RvcmFnZSlcbiAgICBhd2FpdCB0aGlzLnNhdmVMb2NhbGx5KCk7XG5cbiAgICAvLyBTZW5kIGV2ZW50XG4gICAgdGhpcy5vbkxvZ2luLm5leHQodGhpcy5fZGF0YSk7XG4gICAgdGhpcy5vbkNoYW5nZS5uZXh0KHRoaXMuX2RhdGEpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cblxuICBhc3luYyBsb2dvdXQoKTogUHJvbWlzZTx2b2lkPiB7XG5cbiAgICBjb25zdCBoYWRBdXRoVG9rZW4gPSB0aGlzLl9jYWNoZS5hdXRoVG9rZW4gJiYgdHJ1ZTtcbiAgICBjb25zdCBoYWRBdXRoQmFzaWMgPSB0aGlzLl9jYWNoZS5hdXRoQmFzaWMgJiYgdHJ1ZTtcbiAgICBjb25zdCBwdWJrZXkgPSB0aGlzLl9jYWNoZSAmJiB0aGlzLl9jYWNoZS5wdWJrZXk7XG5cbiAgICB0aGlzLnJlc2V0RGF0YSgpO1xuXG4gICAgaWYgKCF0aGlzLnNldHRpbmdzLmhhc09mZmxpbmVGZWF0dXJlKCkpIHtcblxuICAgICAgLy8gUmVtb3ZlIGFsbCBkYXRhIGZyb20gdGhlIGxvY2FsIHN0b3JhZ2VcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZShQVUJLRVlfU1RPUkFHRV9LRVkpLFxuICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlKFRPS0VOX1NUT1JBR0VfS0VZKSxcbiAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZShBQ0NPVU5UX1NUT1JBR0VfS0VZKSxcbiAgICAgICAgcHVia2V5ICYmIHRoaXMuc3RvcmFnZS5yZW1vdmUoQUNDT1VOVF9TVE9SQUdFX0tFWSArICcjJyArIHB1YmtleSkgfHwgUHJvbWlzZS5yZXNvbHZlKCksXG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUoU0VDS0VZX1NUT1JBR0VfS0VZKVxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgLy8gT2ZmbGluZSBmZWF0dXJlcyBlbmFibGU6IG5lZWQgdG8ga2VlcCBzb21lIGRhdGFcbiAgICBlbHNlIHtcbiAgICAgIC8vIEFsd2F5cyByZW1vdmUgb25seSBzZWNyZXQga2V5XG4gICAgICAvLyBCdXQga2VlcDpcbiAgICAgIC8vIC0gYWNjb3VudCBieSBwdWJrZXlcbiAgICAgIC8vIC0gYXV0aCB0b2tlblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlKFBVQktFWV9TVE9SQUdFX0tFWSksXG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUoQUNDT1VOVF9TVE9SQUdFX0tFWSksXG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUoU0VDS0VZX1NUT1JBR0VfS0VZKVxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgLy8gQ2xlYW4gcGFnZSBoaXN0b3J5LCBpbiBsb2NhbCBzZXR0aW5nc1xuICAgIGF3YWl0IHRoaXMuc2V0dGluZ3MuY2xlYXJQYWdlSGlzdG9yeSgpO1xuXG4gICAgLy8gTm90aWZ5IG9ic2VydmVyc1xuICAgIHRoaXMub25Mb2dvdXQubmV4dCgpO1xuICAgIGlmIChoYWRBdXRoVG9rZW4pIHRoaXMub25BdXRoVG9rZW5DaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgIGlmIChoYWRBdXRoQmFzaWMpIHRoaXMub25BdXRoQmFzaWNDaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgIHRoaXMub25DaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgIHRoaXMuc3RvcExpc3RlbkNoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGEgYWNjb3VudFxuICAgKlxuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgYXN5bmMgbG9hZChvcHRzPzoge1xuICAgIG9mZmxpbmU/OiBib29sZWFuO1xuICAgIGZldGNoUG9saWN5PzogRmV0Y2hQb2xpY3k7XG4gIH0pOiBQcm9taXNlPEFjY291bnQgfCB1bmRlZmluZWQ+IHtcblxuICAgIGNvbnN0IG5vdyA9IHRoaXMuX2RlYnVnICYmIERhdGUubm93KCk7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gTG9hZGluZyBhY2NvdW50Li4uYCk7XG4gICAgbGV0IGpzb246IGFueTtcblxuICAgIC8vIExvYWQgbG9jYWxseVxuICAgIGNvbnN0IG9mZmxpbmUgPSB0aGlzLm5ldHdvcmsub2ZmbGluZVxuICAgICAgJiYgKCFvcHRzIHx8IChvcHRzLmZldGNoUG9saWN5ICE9PSAnbmV0d29yay1vbmx5JyAmJiBvcHRzLmZldGNoUG9saWN5ICE9PSAnbm8tY2FjaGUnKSlcbiAgICAgIHx8IChvcHRzICYmIG9wdHMub2ZmbGluZSA9PT0gdHJ1ZSk7XG4gICAgaWYgKG9mZmxpbmUpIHtcbiAgICAgIGpzb24gPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KEFDQ09VTlRfU1RPUkFHRV9LRVkpO1xuICAgICAganNvbiA9IGpzb24gJiYgKHR5cGVvZiBqc29uID09PSAnc3RyaW5nJykgJiYgSlNPTi5wYXJzZShqc29uKSB8fCBqc29uO1xuICAgICAganNvbiA9IGpzb24gJiYgdGhpcy5fY2FjaGUucHVia2V5ICYmIChqc29uLnB1YmtleSA9PT0gdGhpcy5fY2FjaGUucHVia2V5KSAmJiBqc29uIHx8IG51bGw7XG4gICAgICBpZiAoIWpzb24gJiYgdGhpcy5fY2FjaGUucHVia2V5KSB7XG4gICAgICAgIGpzb24gPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KEFDQ09VTlRfU1RPUkFHRV9LRVkgKyAnIycgKyB0aGlzLl9jYWNoZS5wdWJrZXkpO1xuICAgICAgICBqc29uID0ganNvbiAmJiAodHlwZW9mIGpzb24gPT09ICdzdHJpbmcnKSAmJiBKU09OLnBhcnNlKGpzb24pIHx8IGpzb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTG9hZCByZW1vdGVseVxuICAgIGVsc2Uge1xuICAgICAgY29uc3Qge2RhdGF9ID0gYXdhaXQgdGhpcy5ncmFwaHFsLnF1ZXJ5PHsgZGF0YTogYW55IH0+KHtcbiAgICAgICAgcXVlcnk6IExvYWRRdWVyeSxcbiAgICAgICAgZXJyb3I6IHsgY29kZTogRXJyb3JDb2Rlcy5MT0FEX0FDQ09VTlRfRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5MT0FEX0FDQ09VTlRfRVJST1InIH0sXG4gICAgICAgIGZldGNoUG9saWN5OiBvcHRzICYmIG9wdHMuZmV0Y2hQb2xpY3kgfHwgJ25vLWNhY2hlJyB8fCB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgICAganNvbiA9IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKGpzb24pIHtcbiAgICAgIGNvbnN0IGFjY291bnQgPSBBY2NvdW50LmZyb21PYmplY3QoanNvbik7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBBY2NvdW50IGxvYWRlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgLCBhY2NvdW50KTtcbiAgICAgICByZXR1cm4gYWNjb3VudDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oYFthY2NvdW50XSBBY2NvdW50IG5vdCBmb3VuZCAhYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGVtYWlsIGlzIGF2YWlsYWJsZSBmb3IgbmV3IGFjY291bnQgcmVnaXN0cmF0aW9uLlxuICAgKiBUaHJvdyBhbiBlcnJvciBpZiBub3QgYXZhaWxhYmxlXG4gICAqXG4gICAqIEBwYXJhbSBlbWFpbFxuICAgKi9cbiAgYXN5bmMgY2hlY2tFbWFpbEF2YWlsYWJsZShlbWFpbDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaXNFbWFpbEV4aXN0cyA9IGF3YWl0IHRoaXMuaXNFbWFpbEV4aXN0cyhlbWFpbCk7XG4gICAgaWYgKGlzRW1haWxFeGlzdHMpIHtcbiAgICAgIHRocm93IHsgY29kZTogRXJyb3JDb2Rlcy5FTUFJTF9BTFJFQURZX1JFR0lTVEVSRUQsIG1lc3NhZ2U6ICdFUlJPUi5FTUFJTF9BTFJFQURZX1JFR0lTVEVSRUQnIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGVtYWlsIGlzIGV4aXN0cyBpbiBzZXJ2ZXIuXG4gICAqXG4gICAqIEBwYXJhbSBlbWFpbFxuICAgKi9cbiAgYXN5bmMgaXNFbWFpbEV4aXN0cyhlbWFpbDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG5cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1thY2NvdW50XSBDaGVja2luZyBpZiB7JyArIGVtYWlsICsgJ30gZXhpc3RzLi4uJyk7XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5ncmFwaHFsLnF1ZXJ5PHsgaXNFbWFpbEV4aXN0czogYm9vbGVhbiB9LCBJc0VtYWlsRXhpc3RzVmFyaWFibGVzPih7XG4gICAgICBxdWVyeTogSXNFbWFpbEV4aXN0c1F1ZXJ5LFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGVtYWlsLFxuICAgICAgICBoYXNoOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIEVtYWlsIGV4aXN0OiAnICsgKGRhdGEgJiYgZGF0YS5pc0VtYWlsRXhpc3RzKSk7XG5cbiAgICByZXR1cm4gZGF0YSAmJiBkYXRhLmlzRW1haWxFeGlzdHM7XG4gIH1cblxuICBhc3luYyBzZW5kQ29uZmlybWF0aW9uRW1haWwoZW1haWw6IHN0cmluZywgbG9jYWxlPzogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG5cbiAgICBsb2NhbGUgPSBsb2NhbGUgfHwgdGhpcy5zZXR0aW5ncy5sb2NhbGU7XG4gICAgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIFNlbmRpbmcgY29uZmlybWF0aW9uIGVtYWlsIHRvIHsnICsgZW1haWwgKyAnfSB3aXRoIGxvY2FsZSB7JyArIGxvY2FsZSArICd9Li4uJyk7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTxib29sZWFuPih7XG4gICAgICBtdXRhdGlvbjogU2VuZENvbmZpcm1FbWFpbE11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGVtYWlsLFxuICAgICAgICBsb2NhbGVcbiAgICAgIH0sXG4gICAgICBlcnJvcjoge1xuICAgICAgICBjb2RlOiBFcnJvckNvZGVzLlNFTlRfQ09ORklSTUFUSU9OX0VNQUlMX0ZBSUxFRCxcbiAgICAgICAgbWVzc2FnZTogJ0VSUk9SLlNFTlRfQUNDT1VOVF9DT05GSVJNQVRJT05fRU1BSUxfRkFJTEVEJ1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY29uZmlybUVtYWlsKGVtYWlsOiBTdHJpbmcsIGNvZGU6IFN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXG4gICAgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIFNlbmRuZyBjb25maXJtIHJlcXVlc3QgZm9yIGVtYWlsIHsnICsgZW1haWwgKyAnfSB3aXRoIGNvZGUgeycgKyBjb2RlICsgJ30uLi4nKTtcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ3JhcGhxbC5tdXRhdGU8eyBjb25maXJtQWNjb3VudEVtYWlsOiBib29sZWFuIH0+KHtcbiAgICAgIG11dGF0aW9uOiBDb25maXJtRW1haWxNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBlbWFpbCxcbiAgICAgICAgY29kZVxuICAgICAgfSxcbiAgICAgIGVycm9yOiB7XG4gICAgICAgIGNvZGU6IEVycm9yQ29kZXMuQ09ORklSTV9FTUFJTF9GQUlMRUQsXG4gICAgICAgIG1lc3NhZ2U6ICdFUlJPUi5DT05GSVJNX0FDQ09VTlRfRU1BSUxfRkFJTEVEJ1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXMgJiYgcmVzLmNvbmZpcm1BY2NvdW50RW1haWw7XG4gIH1cblxuICBsaXN0ZW5DaGFuZ2VzKG9wdHM/OiBBY2NvdW50V2F0Y2hPcHRpb25zKTogU3Vic2NyaXB0aW9uIHtcbiAgICBpZiAodGhpcy5fZW5hYmxlTGlzdGVuQ2hhbmdlcykgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24oKTsgLy8gQWxyZWFkeSBzdGFydGVkOiBza2lwXG5cbiAgICByZXR1cm4gdGhpcy5zdGFydExpc3RlbkNoYW5nZXMob3B0cyk7XG4gIH1cblxuICBnZXQgYWRkaXRpb25hbEZpZWxkcygpOiBGb3JtRmllbGREZWZpbml0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLl8kYWRkaXRpb25hbEZpZWxkcy5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgZ2V0ICRhZGRpdGlvbmFsRmllbGRzKCk6IE9ic2VydmFibGU8Rm9ybUZpZWxkRGVmaW5pdGlvbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuXyRhZGRpdGlvbmFsRmllbGRzO1xuICB9XG5cbiAgZ2V0QWRkaXRpb25hbEZpZWxkKGtleTogc3RyaW5nKTogRm9ybUZpZWxkRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuXyRhZGRpdGlvbmFsRmllbGRzLmdldFZhbHVlKCkuZmluZChmID0+IGYua2V5ID09PSBrZXkpO1xuICB9XG5cbiAgcmVnaXN0ZXJBZGRpdGlvbmFsRmllbGQoZmllbGQ6IEZvcm1GaWVsZERlZmluaXRpb24pIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLl8kYWRkaXRpb25hbEZpZWxkcy5nZXRWYWx1ZSgpO1xuICAgIGlmICghIXZhbHVlcy5maW5kKGYgPT4gZi5rZXkgPT09IGZpZWxkLmtleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQWRkaXRpb25hbCBhY2NvdW50IGZpZWxkIHtrZXk6ICR7ZmllbGQua2V5fX0gYWxyZWFkeSBkZWZpbmUuYCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIEZvdW5kIGFkZGl0aW9uYWwgYWNjb3VudCdzIGZpZWxkIHtrZXk6ICR7ZmllbGQua2V5fX1gKTtcbiAgICB0aGlzLl8kYWRkaXRpb25hbEZpZWxkcy5uZXh0KHZhbHVlcy5jb25jYXQoZmllbGQpKTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2QgLS0gKi9cblxuICBwcm90ZWN0ZWQgcmVzZXREYXRhKCkge1xuICAgIHRoaXMuc3RvcExpc3RlbkNoYW5nZXMoKTtcbiAgICB0aGlzLl9jYWNoZS5sb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9jYWNoZS5rZXlwYWlyID0gbnVsbDtcbiAgICB0aGlzLl9jYWNoZS5hdXRoVG9rZW4gPSBudWxsO1xuICAgIHRoaXMuX2NhY2hlLmF1dGhCYXNpYyA9IG51bGw7XG4gICAgdGhpcy5fY2FjaGUucHVia2V5ID0gbnVsbDtcbiAgICB0aGlzLl9jYWNoZS5tYWluUHJvZmlsZSA9IG51bGw7XG4gICAgdGhpcy5fY2FjaGUucGVyc29uID0gbnVsbDtcbiAgICB0aGlzLl9jYWNoZS5kZXBhcnRtZW50ID0gbnVsbDtcbiAgICB0aGlzLl9kYXRhID0gbmV3IEFjY291bnQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBsb2FkRGF0YShvcHRzPzoge1xuICAgIG9mZmxpbmU/OiBib29sZWFuO1xuICAgIGZldGNoUG9saWN5PzogRmV0Y2hQb2xpY3k7XG4gIH0pOiBQcm9taXNlPEFjY291bnQ+IHtcbiAgICBpZiAoIXRoaXMuX2NhY2hlLnB1YmtleSkgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBsb2dnZWQnKTtcblxuICAgIHRoaXMuX2NhY2hlLmxvYWRlZCA9IGZhbHNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFjY291bnQgPSAoYXdhaXQgdGhpcy5sb2FkKG9wdHMpKSB8fCBuZXcgQWNjb3VudCgpO1xuXG4gICAgICAvLyBTZXQgZGVmYXVsdHNcbiAgICAgIGFjY291bnQuYXZhdGFyID0gYWNjb3VudC5hdmF0YXIgfHwgKHRoaXMuZW52aXJvbm1lbnQuYmFzZVVybCArIERFRkFVTFRfQVZBVEFSX0lNQUdFKTtcbiAgICAgIGFjY291bnQuc2V0dGluZ3MgPSBhY2NvdW50LnNldHRpbmdzIHx8IG5ldyBVc2VyU2V0dGluZ3MoKTtcbiAgICAgIGFjY291bnQuc2V0dGluZ3MubG9jYWxlID0gYWNjb3VudC5zZXR0aW5ncy5sb2NhbGUgfHwgdGhpcy5zZXR0aW5ncy5sb2NhbGU7XG4gICAgICBhY2NvdW50LnNldHRpbmdzLmxhdExvbmdGb3JtYXQgPSBhY2NvdW50LnNldHRpbmdzLmxhdExvbmdGb3JtYXQgfHwgdGhpcy5zZXR0aW5ncy5sYXRMb25nRm9ybWF0IHx8ICdERE1NJztcbiAgICAgIGFjY291bnQuc2V0dGluZ3MuY29udGVudCA9IGFjY291bnQuc2V0dGluZ3MuY29udGVudCB8fCB7fTtcblxuICAgICAgLy8gUmVhZCBtYWluIHByb2ZpbGVcbiAgICAgIHRoaXMuX2NhY2hlLm1haW5Qcm9maWxlID0gUGVyc29uVXRpbHMuZ2V0TWFpblByb2ZpbGUoYWNjb3VudC5wcm9maWxlcyk7XG5cbiAgICAgIC8vIFVwZGF0ZSwgaW5zdGVhZCBvZiByZXBsYWNlIGl0XG4gICAgICBpZiAodGhpcy5fZGF0YSkge1xuICAgICAgICB0aGlzLl9kYXRhLmZyb21PYmplY3QoYWNjb3VudCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IGFjY291bnQ7XG4gICAgICB9XG4gICAgICB0aGlzLl9jYWNoZS5sb2FkZWQgPSB0cnVlO1xuXG4gICAgICAvLyBBcHBseSBzZXR0aW5ncywgZm91bmQgaW4gcmVtb3RlIGFjY291bnRcbiAgICAgIGlmIChhY2NvdW50LnNldHRpbmdzKSB7XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0ge1xuICAgICAgICAgIC4uLnRoaXMuc2V0dGluZ3Muc2V0dGluZ3MsXG4gICAgICAgICAgLi4uYWNjb3VudC5zZXR0aW5ncy5hc0xvY2FsU2V0dGluZ3MoKVxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0dGluZ3MuYXBwbHkoc2V0dGluZ3MpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnJlc2V0RGF0YSgpO1xuICAgICAgaWYgKGVycm9yLmNvZGUgJiYgZXJyb3IubWVzc2FnZSkgdGhyb3cgZXJyb3I7XG5cbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgdGhyb3cge1xuICAgICAgICBjb2RlOiBFcnJvckNvZGVzLkxPQURfQUNDT1VOVF9FUlJPUixcbiAgICAgICAgbWVzc2FnZTogJ0VSUk9SLkxPQURfQUNDT1VOVF9FUlJPUidcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGxpc3RlblNldHRpbmdzKCk6IFByb21pc2U8dm9pZD57XG4gICAgLy8gV2hlbiBzZXR0aW5ncyBjaGFuZ2VkOiBzYXZlIGl0IHJlbW90ZWx5XG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMuc2V0dGluZ3Mub25DaGFuZ2VcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDEwMDApLFxuICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmlzTG9naW4oKSAmJiB0aGlzLm5ldHdvcmsub25saW5lKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoc2V0dGluZ3MgPT4gdGhpcy5zYXZlTG9jYWxTZXR0aW5nc1JlbW90ZWx5KHNldHRpbmdzKSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlc3RvcmVMb2NhbGx5KCk6IFByb21pc2U8QWNjb3VudCB8IHVuZGVmaW5lZD4ge1xuXG4gICAgLy8gUmVzdG9yZSBmcm9tIHN0b3JhZ2VcbiAgICBjb25zdCB2YWx1ZXMgPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0KFBVQktFWV9TVE9SQUdFX0tFWSksXG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0KFRPS0VOX1NUT1JBR0VfS0VZKSxcbiAgICAgIHRoaXMuc3RvcmFnZS5nZXQoU0VDS0VZX1NUT1JBR0VfS0VZKVxuICAgIF0pO1xuICAgIGNvbnN0IHB1YmtleSA9IHZhbHVlc1swXTtcbiAgICBjb25zdCB0b2tlbiA9IHZhbHVlc1sxXTtcbiAgICBjb25zdCBzZWNrZXkgPSB2YWx1ZXNbMl07XG5cbiAgICAvLyBRdWl0IGlmIG5vIHB1YmtleSAobm90IGxvZ2dlZClcbiAgICBpZiAoIXB1YmtleSkgcmV0dXJuO1xuXG4gICAgLy8gUXVpdCBpZiBjb3VsZCBub3QgYXV0aCBvbiBwb2RcbiAgICBjb25zdCBjYW5SZW1vdGVBdXRoID0gdG9rZW4gfHwgc2Vja2V5IHx8IGZhbHNlO1xuICAgIGlmICghY2FuUmVtb3RlQXV0aCkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gQWNjb3VudCByZXN0b3JhdGlvbi4uLmApO1xuXG4gICAgdGhpcy5fY2FjaGUuYXV0aFRva2VuID0gdG9rZW47XG4gICAgdGhpcy5fY2FjaGUucHVia2V5ID0gcHVia2V5O1xuICAgIHRoaXMuX2NhY2hlLmtleXBhaXIgPSBzZWNrZXkgJiYge1xuICAgICAgcHVibGljS2V5OiBCYXNlNTguZGVjb2RlKHB1YmtleSksXG4gICAgICBzZWNyZXRLZXk6IEJhc2U1OC5kZWNvZGUoc2Vja2V5KVxuICAgIH0gfHwgbnVsbDtcblxuICAgIC8vIE9ubGluZSBtb2RlOiB0cnkgdG8gY29ubmVjdCB0byBwb2RcbiAgICBpZiAodGhpcy5uZXR3b3JrLm9ubGluZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hdXRoZW50aWNhdGUoKTtcbiAgICAgICAgaWYgKCF0aGlzLl9jYWNoZS5hdXRoVG9rZW4gJiYgIXRoaXMuX2NhY2hlLmF1dGhCYXNpYykgdGhyb3cgbmV3IEVycm9yKCdBdXRoZW50aWNhdGlvbiBmYWlsZWQnKTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBPZmZsaW5lIGZlYXR1cmUgYXJlIGVuYWJsZTogY29udGludWUgaW4gb2ZmbGluZSBtb2RlXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmhhc09mZmxpbmVGZWF0dXJlKCkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1thY2NvdW50XSBVbmFibGUgdG8gYXV0aGVudGljYXRlIG9uIHBvZDogZm9yY2luZyBvZmZsaW5lIG1vZGUnKTtcbiAgICAgICAgICB0aGlzLm5ldHdvcmsuc2V0Rm9yY2VPZmZsaW5lKHRydWUsIHtzaG93VG9hc3Q6IGZhbHNlfSk7XG4gICAgICAgICAgLy8gQ29udGludWVcbiAgICAgICAgfVxuICAgICAgICAvLyBObyBvZmZsaW5lIGZlYXR1cmVzIGVuYWJsZSAoPW9mZmxpbmUgbW9kZSBub3QgYWxsb3dlZClcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgdGhpcy5sb2dvdXQoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEdldCB0aGUgYWNjb3VudCwgZnJvbSBwdWJrZXlcbiAgICBsZXQganNvbkFjY291bnQgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KGAke0FDQ09VTlRfU1RPUkFHRV9LRVl9IyR7cHVia2V5fWApO1xuICAgIGlmICghanNvbkFjY291bnQpIHtcbiAgICAgIC8vIFRyeSB1c2luZyB0aGUgb2xkIHN0b3JhZ2Uga2V5XG4gICAgICBjb25zdCBhY2NvdW50U3RyID0gYXdhaXQgdGhpcy5zdG9yYWdlLmdldChBQ0NPVU5UX1NUT1JBR0VfS0VZKTtcbiAgICAgIGpzb25BY2NvdW50ID0gYWNjb3VudFN0ciAmJiAoKHR5cGVvZiBhY2NvdW50U3RyID09PSAnc3RyaW5nJykgJiYgSlNPTi5wYXJzZShqc29uQWNjb3VudCkgfHwgYWNjb3VudFN0cik7XG4gICAgfVxuXG4gICAgLy8gSW52YWxpZCBhY2NvdW50OiBkbyBub3QgdXNlIGl0XG4gICAgaWYgKCFqc29uQWNjb3VudCB8fCBqc29uQWNjb3VudC5wdWJrZXkgIT09IHB1YmtleSkgcmV0dXJuO1xuXG4gICAgLy8gVHJhbnNmb3JtIHRvIGVudGl0eVxuICAgIGNvbnN0IGFjY291bnQgPSBBY2NvdW50LmZyb21PYmplY3QoanNvbkFjY291bnQpO1xuXG4gICAgLy8gVXBkYXRlIGRhdGFcbiAgICB0aGlzLl9kYXRhID0gYWNjb3VudDtcbiAgICB0aGlzLl9jYWNoZS5tYWluUHJvZmlsZSA9IFBlcnNvblV0aWxzLmdldE1haW5Qcm9maWxlKGFjY291bnQucHJvZmlsZXMpO1xuICAgIHRoaXMuX2NhY2hlLmxvYWRlZCA9IHRydWU7XG5cbiAgICAvLyBFbWl0IGV2ZW50XG4gICAgdGhpcy5vbkxvZ2luLm5leHQodGhpcy5fZGF0YSk7XG4gICAgdGhpcy5vbkNoYW5nZS5uZXh0KHRoaXMuX2RhdGEpO1xuXG4gICAgaWYgKHRoaXMuX2VuYWJsZUxpc3RlbkNoYW5nZXMpIHRoaXMuc3RhcnRMaXN0ZW5DaGFuZ2VzKCk7XG5cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBBY2NvdW50IHJlc3RvcmF0aW9uIFtPS10ge3B1YmtleTogJHtwdWJrZXkuc3Vic3RyKDAsIDgpfX0sIHtwcm9maWxlOiAke3RoaXMuX2NhY2hlLm1haW5Qcm9maWxlfX1gKTtcblxuICAgIHJldHVybiBhY2NvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgYWNjb3VudCBpbnRvIHRoZSBsb2NhbCBzdG9yYWdlXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgc2F2ZUxvY2FsbHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9jYWNoZS5wdWJrZXkpIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgbG9nZ2VkJyk7XG5cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBTYXZpbmcgYWNjb3VudCB7JHt0aGlzLl9jYWNoZS5wdWJrZXkuc3Vic3RyaW5nKDAsIDYpfX0gaW4gbG9jYWwgc3RvcmFnZS4uLmApO1xuXG4gICAgLy8gQ29udmVydCBhY2NvdW50IHRvIGpzb25cbiAgICBjb25zdCBqc29uID0gdGhpcy5fZGF0YS5hc09iamVjdCh7a2VlcFR5cGVuYW1lOiB0cnVlfSk7XG4gICAgY29uc3Qgc2Vja2V5ID0gdGhpcy5fY2FjaGUua2V5cGFpciAmJiB0aGlzLl9jYWNoZS5rZXlwYWlyLnNlY3JldEtleSAmJiBCYXNlNTguZW5jb2RlKHRoaXMuX2NhY2hlLmtleXBhaXIuc2VjcmV0S2V5KSB8fCBudWxsO1xuXG4gICAgLy8gQ29udmVydCBhdmF0YXIgVVJMIHRvIGRhdGFVcmwgKGUuZy4gJ2RhdGE6aW1hZ2UvcG5nOjxiYXNlNjQgY29udGVudD4nKVxuICAgIGNvbnN0IGhhc0F2YXRhclVybCA9IGpzb24uYXZhdGFyICYmICFqc29uLmF2YXRhci5lbmRzV2l0aChERUZBVUxUX0FWQVRBUl9JTUFHRSkgJiZcbiAgICAgIChqc29uLmF2YXRhci5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgKGpzb24uYXZhdGFyLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpKTtcbiAgICBpZiAoaGFzQXZhdGFyVXJsICYmIHRoaXMubmV0d29yay5vbmxpbmUpIHtcbiAgICAgIGF3YWl0IHRoaXMuZmlsZS5nZXRJbWFnZShqc29uLmF2YXRhciwge1xuICAgICAgICB0aHVtYm5haWw6IHRydWUsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2RhdGFVcmwnXG4gICAgICB9KVxuICAgICAgICAudGhlbihkYXRhVXJsID0+IHtcbiAgICAgICAgICBpZiAoZGF0YVVybCAmJiB0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIEltYWdlIGZldGNoZWQ6ICcsIGRhdGFVcmwuc3Vic3RyaW5nKDAsIDUwKSk7XG5cbiAgICAgICAgICAvLyBUT0RPOiBtYWtlIHN1cmUgdG8gZGlzcGxheSBCYXNlNjQgaW1hZ2UgaW4gdGhlIG1lbnUgdG9wIGhlYWRlclxuICAgICAgICAgIC8vanNvbkFjY291bnQuYXZhdGFyID0gZGF0YVVybDtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgW2FjY291bnRdIEVycm9yIHdoaWxlIGZldGNoaW5nIGltYWdlOiAke2pzb24uYXZhdGFyfTogJHtlcnJ9YCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoUFVCS0VZX1NUT1JBR0VfS0VZLCB0aGlzLl9jYWNoZS5wdWJrZXkpLFxuICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0KFRPS0VOX1NUT1JBR0VfS0VZLCB0aGlzLl9jYWNoZS5hdXRoVG9rZW4pLFxuICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0KGAke0FDQ09VTlRfU1RPUkFHRV9LRVl9IyR7dGhpcy5fY2FjaGUucHVia2V5fWAsIGpzb24pLFxuICAgICAgICAvLyBTZWNyZXQga2V5IChvcHRpb25hbClcbiAgICAgICAgc2Vja2V5ICYmIHRoaXMuc3RvcmFnZS5zZXQoU0VDS0VZX1NUT1JBR0VfS0VZLCBzZWNrZXkpIHx8IHRoaXMuc3RvcmFnZS5yZW1vdmUoU0VDS0VZX1NUT1JBR0VfS0VZKSxcbiAgICAgICAgLy8gUmVtb3ZlIG9sZCBzdG9yYWdlIGtleVxuICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlKEFDQ09VTlRfU1RPUkFHRV9LRVkpXG4gICAgICBdKTtcblxuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbYWNjb3VudF0gQWNjb3VudCBzYXZlZCBpbiBsb2NhbCBzdG9yYWdlJyk7XG4gICAgfVxuICAgIGNhdGNoKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignW2FjY291bnRdIEVycm9yIHdoaWxlIHNhdmluZyBhY2NvdW50IGxvY2FsbHk6ICcgKyAoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVyciksIGVycik7XG4gICAgfVxuICB9XG5cbiAgIGFzeW5jIHNhdmVMb2NhbFNldHRpbmdzUmVtb3RlbHkoc291cmNlOiBMb2NhbFNldHRpbmdzKXtcbiAgICAgaWYgKCFzb3VyY2UgfHwgIXRoaXMuaXNMb2dpbigpIHx8IHNvdXJjZS5hY2NvdW50SW5oZXJpdGFuY2UgPT09IGZhbHNlKSByZXR1cm47IC8vIFNraXBcbiAgICAgY29uc3QgYWNjb3VudCA9IHRoaXMuYWNjb3VudDtcblxuICAgICAvLyBNZXJnZSBsb2NhbCBzZXR0aW5ncyBpbnRvIGFjY291bnQncyBzZXR0aW5nc1xuICAgICBjb25zdCBzZXR0aW5ncyA9IFVzZXJTZXR0aW5ncy5mcm9tT2JqZWN0KGFjY291bnQuc2V0dGluZ3MpIHx8IG5ldyBVc2VyU2V0dGluZ3MoKTtcbiAgICAgY29uc3QgY2hhbmdlZCA9IHNldHRpbmdzLm1lcmdlKHNvdXJjZSwgWydsb2NhbGUnLCAnbGF0TG9uZ0Zvcm1hdCcsICdwcm9wZXJ0aWVzJ10pO1xuXG4gICAgIGlmICghY2hhbmdlZCkgcmV0dXJuOyAvLyBTa2lwIGlmIHVuY2hhbmdlZFxuXG4gICAgIC8vIFNhdmUgcmVtb3RlbHlcbiAgICAgdGhpcy5hY2NvdW50LnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgIGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzUmVtb3RlbHkoc2V0dGluZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBvciB1cGRhdGUgYW4gdXNlciBhY2NvdW50XG4gICAqXG4gICAqIEBwYXJhbSBhY2NvdW50XG4gICAqIEBwYXJhbSBrZXlQYWlyXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgc2F2ZVJlbW90ZWx5KGFjY291bnQ6IEFjY291bnQsIGtleVBhaXI/OiBLZXlQYWlyKTogUHJvbWlzZTxBY2NvdW50PiB7XG4gICAgYWNjb3VudC5wdWJrZXkgPSBhY2NvdW50LnB1YmtleSB8fCAoa2V5UGFpciAmJiBCYXNlNTguZW5jb2RlKGtleVBhaXIucHVibGljS2V5KSk7XG4gICAgaWYgKCFhY2NvdW50LnB1YmtleSkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGFjY291bnQgcHVia2V5Jyk7XG5cbiAgICBjb25zdCBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFNhdmluZyBhY2NvdW50IHJlbW90ZWx5Li4uYCk7XG5cbiAgICBjb25zdCBpc05ldyA9IGlzTmlsKGFjY291bnQuaWQpO1xuXG4gICAgLy8gSWYgdGhpcyBpcyBhbiB1cGRhdGU6IGdldCBleGlzdGluZyBhY2NvdW50J3MgdXBkYXRlRGF0ZSwgdG8gYXZvaWQgJ3ZlcnNpb24gZXJyb3InIHdoZW4gc2F2aW5nXG4gICAgaWYgKCFpc05ldykge1xuICAgICAgY29uc3QgZXhpc3RpbmdBY2NvdW50ID0gYXdhaXQgdGhpcy5sb2FkKHsgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknIH0pO1xuICAgICAgaWYgKCFleGlzdGluZ0FjY291bnQgfHwgIWV4aXN0aW5nQWNjb3VudC51cGRhdGVEYXRlKSB7XG4gICAgICAgIHRocm93IHsgY29kZTogRXJyb3JDb2Rlcy5BQ0NPVU5UX05PVF9FWElTVFMsIG1lc3NhZ2U6ICdFUlJPUi5BQ0NPVU5UX05PVF9FWElTVFMnIH07XG4gICAgICB9XG4gICAgICB0aGlzLmNvcHlJZEFuZFVwZGF0ZURhdGUoZXhpc3RpbmdBY2NvdW50LCBhY2NvdW50KTtcbiAgICB9XG5cbiAgICBjb25zdCBqc29uID0gYWNjb3VudC5hc09iamVjdChNSU5JRllfRU5USVRZX0ZPUl9QT0QpO1xuXG4gICAgLy8gVXNlciBub3QgYWxsb3cgdG8gY2hhbmdlIGhpcyBwcm9maWxlc1xuICAgIGRlbGV0ZSBqc29uLnByb2ZpbGVzO1xuXG4gICAgLy8gRXhlY3V0ZSBtdXRhdGlvblxuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTx7IGRhdGE6IEFjY291bnQgfT4oe1xuICAgICAgbXV0YXRpb246IGlzTmV3ID8gQWNjb3VudE11dGF0aW9ucy5jcmVhdGUgOiBBY2NvdW50TXV0YXRpb25zLnNhdmUsXG4gICAgICB2YXJpYWJsZXM6IHsgZGF0YToganNvbiB9LFxuICAgICAgZXJyb3I6IHtcbiAgICAgICAgY29kZTogRXJyb3JDb2Rlcy5TQVZFX0FDQ09VTlRfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6ICdFUlJPUi5TQVZFX0FDQ09VTlRfRVJST1InXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBDb3B5IHVwZGF0ZSBwcm9wZXJ0aWVzXG4gICAgdGhpcy5jb3B5SWRBbmRVcGRhdGVEYXRlKGRhdGEsIGFjY291bnQpO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gQWNjb3VudCByZW1vdGVseSBzYXZlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgKTtcblxuICAgIHJldHVybiBhY2NvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBvciB1cGRhdGUgdXNlciBzZXR0aW5nc1xuICAgKlxuICAgKiBAcGFyYW0gc2V0dGluZ3NcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBzYXZlU2V0dGluZ3NSZW1vdGVseShzZXR0aW5nczogVXNlclNldHRpbmdzKSB7XG5cbiAgICBjb25zdCBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFNhdmluZyBzZXR0aW5ncyByZW1vdGVseS4uLmApO1xuXG4gICAgY29uc3QganNvbiA9IHNldHRpbmdzLmFzT2JqZWN0KE1JTklGWV9FTlRJVFlfRk9SX1BPRCk7XG5cbiAgICAvLyBFeGVjdXRlIG11dGF0aW9uXG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmdyYXBocWwubXV0YXRlPHsgZGF0YTogVXNlclNldHRpbmdzIH0+KHtcbiAgICAgIG11dGF0aW9uOiBBY2NvdW50TXV0YXRpb25zLnNhdmVTZXR0aW5ncyxcbiAgICAgIHZhcmlhYmxlczogeyBkYXRhOiBqc29uIH0sXG4gICAgICBlcnJvcjoge1xuICAgICAgICBjb2RlOiBFcnJvckNvZGVzLlNBVkVfU0VUVElOR1NfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6ICdFUlJPUi5TQVZFX1NFVFRJTkdTX0VSUk9SJ1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQ29weSB1cGRhdGUgcHJvcGVydGllc1xuICAgIHRoaXMuY29weUlkQW5kVXBkYXRlRGF0ZVNldHRpbmdzKGRhdGEsIHNldHRpbmdzKTtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFNldHRpbmdzIHJlbW90ZWx5IHNhdmVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuXG4gICAgLy8gU2F2ZSBpbnRvIGFjY291bnRcbiAgICBpZiAodGhpcy5hY2NvdW50KSB0aGlzLmFjY291bnQuc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhdXRoZW50aWNhdGVBbmRHZXRUb2tlbih0b2tlbj86IHN0cmluZywgY291bnRlcj86IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCF0aGlzLl9jYWNoZS5wdWJrZXkpIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgbG9nZ2VkJyk7XG5cbiAgICBpZiAoIWNvdW50ZXIpIGNvbnNvbGUuaW5mbygnW2FjY291bnRdIEF1dGhlbnRpY2F0aW9uIG9uIHBvZC4uLicpO1xuXG4gICAgaWYgKGNvdW50ZXIgPiA0KSB7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBGYWlsZWQgdG8gYXV0aGVudGljYXRpb24gb24gcG9kIChhZnRlciAke2NvdW50ZXJ9IGF0dGVtcHRzKWApO1xuICAgICAgdGhyb3cgeyBjb2RlOiBFcnJvckNvZGVzLkFVVEhfU0VSVkVSX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuQVVUSF9TRVJWRVJfRVJST1InIH07XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdmFsaWRcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdyYXBocWwucXVlcnk8eyBhdXRoZW50aWNhdGU6IGJvb2xlYW4gfSwgeyB0b2tlbjogc3RyaW5nIH0+KHtcbiAgICAgICAgcXVlcnk6IEF1dGhRdWVyeSxcbiAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgdG9rZW5cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICBjb2RlOiBFcnJvckNvZGVzLlVOQVVUSE9SSVpFRCxcbiAgICAgICAgICBtZXNzYWdlOiAnRVJST1IuVU5BVVRIT1JJWkVEJ1xuICAgICAgICB9LFxuICAgICAgICBmZXRjaFBvbGljeTogJ25vLWNhY2hlJ1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFRva2VuIGlzIGFjY2VwdGVkIGJ5IHRoZSBzZXJ2ZXJcbiAgICAgIGlmIChkYXRhICYmIGRhdGEuYXV0aGVudGljYXRlKSB7XG4gICAgICAgIC8vIFN0b3JlIHRoZSB0b2tlblxuICAgICAgICB0aGlzLm9uQXV0aFRva2VuQ2hhbmdlLm5leHQodG9rZW4pO1xuXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW2FjY291bnRdIEF1dGhlbnRpY2F0aW9uIG9uIHBvZCBbT0tdIHtwdWJrZXk6ICcke3RoaXMuX2NhY2hlLnB1YmtleS5zdWJzdHIoMCwgOCl9J31gKTtcbiAgICAgICAgcmV0dXJuIHRva2VuOyAvLyByZXR1cm4gdGhlIHRva2VuXG4gICAgICB9XG5cbiAgICAgIC8vIENvbnRpbnVlICh3aWxsIHJldHJ5IHdpdGggYW5vdGhlciBjaGFsbGVuZ2UpXG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgYSBuZXcgdG9rZW5cbiAgICBjb25zdCBjaGFsbGVuZ2VFcnJvciA9IHtcbiAgICAgIGNvZGU6IEVycm9yQ29kZXMuQVVUSF9DSEFMTEVOR0VfRVJST1IsXG4gICAgICBtZXNzYWdlOiAnRVJST1IuQVVUSF9DSEFMTEVOR0VfRVJST1InXG4gICAgfTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5ncmFwaHFsLnF1ZXJ5PHtcbiAgICAgIGF1dGhDaGFsbGVuZ2U6IHtcbiAgICAgICAgcHVia2V5OiBzdHJpbmc7XG4gICAgICAgIGNoYWxsZW5nZTogc3RyaW5nO1xuICAgICAgICBzaWduYXR1cmU6IHN0cmluZztcbiAgICAgIH07XG4gICAgfT4oe1xuICAgICAgcXVlcnk6IEF1dGhDaGFsbGVuZ2VRdWVyeSxcbiAgICAgIHZhcmlhYmxlczoge30sXG4gICAgICBlcnJvcjogY2hhbGxlbmdlRXJyb3IsXG4gICAgICBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seSdcbiAgICB9KTtcblxuICAgIC8vIENoZWNrIGNoYWxsZW5nZVxuICAgIGlmICghZGF0YSB8fCAhZGF0YS5hdXRoQ2hhbGxlbmdlKSB0aHJvdyBjaGFsbGVuZ2VFcnJvcjsgLy8gU2hvdWxkIG5ldmVyIG9jY3VyXG5cbiAgICAvLyBDaGVjayBzZXJ2ZXIgc2lnbmF0dXJlXG4gICAgY29uc3Qgc2lnbmF0dXJlT0sgPSBhd2FpdCB0aGlzLmNyeXB0b1NlcnZpY2UudmVyaWZ5KFxuICAgICAgZGF0YS5hdXRoQ2hhbGxlbmdlLmNoYWxsZW5nZSxcbiAgICAgIGRhdGEuYXV0aENoYWxsZW5nZS5zaWduYXR1cmUsXG4gICAgICBkYXRhLmF1dGhDaGFsbGVuZ2UucHVia2V5XG4gICAgKTtcbiAgICBpZiAoIXNpZ25hdHVyZU9LKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ZJWE1FOiBCYWQgcGVlciBzaWduYXR1cmUgb24gYXV0aCBjaGFsbGVuZ2UgIScsIGRhdGEuYXV0aENoYWxsZW5nZSk7XG4gICAgfVxuICAgIC8vIFRPRE86IGNoZWNrIHNlcnZlciBwdWJrZXkgYXMgYSB2YWxpZCBjZXJ0aWZpY2F0ZVxuXG4gICAgLy8gRG8gdGhlIGNoYWxsZW5nZVxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGF3YWl0IHRoaXMuY3J5cHRvU2VydmljZS5zaWduKGRhdGEuYXV0aENoYWxsZW5nZS5jaGFsbGVuZ2UsIHRoaXMuX2NhY2hlLmtleXBhaXIpO1xuICAgIGNvbnN0IG5ld1Rva2VuID0gYCR7dGhpcy5fY2FjaGUucHVia2V5fToke2RhdGEuYXV0aENoYWxsZW5nZS5jaGFsbGVuZ2V9fCR7c2lnbmF0dXJlfWA7XG5cbiAgICAvLyBpdGVyYXRlIHdpdGggdGhlIG5ldyB0b2tlblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0ZUFuZEdldFRva2VuKG5ld1Rva2VuLCAoY291bnRlciB8fCAxKSArIDEgLyogaW5jcmVtZW50ICovKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGFydExpc3RlbkNoYW5nZXMob3B0cz86IEFjY291bnRXYXRjaE9wdGlvbnMpOiBTdWJzY3JpcHRpb24ge1xuICAgIGlmICh0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uKSB0aGlzLnN0b3BMaXN0ZW5DaGFuZ2VzKCk7IC8vIFN0b3AgcHJldmlvdXMgc3Vic2NyaXB0aW9uXG4gICAgaWYgKHRoaXMubmV0d29yay5vZmZsaW5lKSByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbigpOyAvLyBPZmZsaW5lOiBza2lwXG5cbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLndhdGNoQ2hhbmdlcyhvcHRzKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFJlbW90ZSB1cGRhdGUgZGV0ZWN0ZWQgYXQgJHtkYXRhLnVwZGF0ZURhdGV9YCk7XG4gICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBpZiAoZXJyICYmICtlcnIuY29kZSA9PT0gU2VydmVyRXJyb3JDb2Rlcy5OT1RfRk9VTkQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbygnW2FjY291bnRdIFtXU10gQWNjb3VudCBub3QgZXhpc3RzIGFueW1vcmU6IGZvcmNlIHVzZXIgdG8gbG9nb3V0Li4uJywgZXJyKTtcbiAgICAgICAgICAgIHRoaXMubG9nb3V0KCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChlcnIgJiYgK2Vyci5jb2RlID09PSBTZXJ2ZXJFcnJvckNvZGVzLlVOQVVUSE9SSVpFRCkge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKCdbYWNjb3VudF0gW1dTXSBBY2NvdW50IG5vdCBhdXRob3JpemVkOiBmb3JjZSB1c2VyIHRvIGxvZ291dC4uLicsIGVycik7XG4gICAgICAgICAgICB0aGlzLmxvZ291dCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1thY2NvdW50XSBbV1NdIFJlY2VpdmVkIGVycm9yOicsIGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIC8vIEFkZCBjbG9zZSBsb2dcbiAgICBzdWJzY3JpcHRpb24uYWRkKCgpID0+IGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBTdG9wIHdhdGNoaW5nIHJlbW90ZSBjaGFuZ2VzYCkpO1xuXG4gICAgdGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbjtcblxuICAgIC8vIE1ha2Ugc3VyZSB0byB1c2UgdGhlIHN0b3AgZnVuY3Rpb24sIHdoZW4gdW5zdWJzY3JpYmVcbiAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbigoKSA9PiB0aGlzLnN0b3BMaXN0ZW5DaGFuZ2VzKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0b3BMaXN0ZW5DaGFuZ2VzKCkge1xuICAgIGlmKHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCB3YXRjaENoYW5nZXMob3B0cz86IEFjY291bnRXYXRjaE9wdGlvbnMpOiBPYnNlcnZhYmxlPEFjY291bnQ+IHtcblxuICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICAvLyBXYWl0IHNlcnZpY2UgcmVhZHksIHRoZW4gbG9vcFxuICAgICAgcmV0dXJuIGZyb20odGhpcy5yZWFkeSgpKVxuICAgICAgICAucGlwZShzd2l0Y2hNYXAoKCkgPT4gdGhpcy53YXRjaENoYW5nZXMob3B0cykpKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX2NhY2hlLnB1YmtleSkgdGhyb3cgbmV3IEVycm9yKCdOb3QgbG9nZ2VkIGluJyk7XG4gICAgaWYgKHRoaXMubmV0d29yay5vZmZsaW5lKSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB3YXRjaCBhY2NvdW50IGNoYW5nZXM6IG5ldHdvcmsgaXMgb2ZmbGluZS4nKTtcblxuICAgIGNvbnN0IHZhcmlhYmxlcyA9IHtcbiAgICAgIGludGVydmFsOiBNYXRoLm1heCgwLCBvcHRzPy5pbnRlcnZhbEluU2Vjb25kcyB8fCB0aGlzLmVudmlyb25tZW50LmFjY291bnQ/Lmxpc3RlbkludGVydmFsSW5TZWNvbmRzIHx8IDApXG4gICAgfVxuXG4gICAgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFdhdGNoaW5nIHJlbW90ZSBjaGFuZ2VzLCBldmVyeSAke3ZhcmlhYmxlcy5pbnRlcnZhbH1zYCk7XG5cbiAgICByZXR1cm4gdGhpcy5ncmFwaHFsLnN1YnNjcmliZTx7ZGF0YTogYW55fT4oe1xuICAgICAgcXVlcnk6IEFjY291bnRTdWJzY3JpcHRpb25zLmxpc3RlbkNoYW5nZXMsXG4gICAgICB2YXJpYWJsZXMsXG4gICAgICBlcnJvcjoge1xuICAgICAgICBjb2RlOiBFcnJvckNvZGVzLlNVQlNDUklCRV9BQ0NPVU5UX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiAnRVJST1IuQUNDT1VOVC5TVUJTQ1JJQkVfQUNDT1VOVF9FUlJPUidcbiAgICAgIH1cbiAgICB9KS5waXBlKFxuICAgICAgICBtYXAoKHtkYXRhfSkgPT4gZGF0YSksXG4gICAgICAgIC8vIEtlZXAgb25seSBpZiBuZXdlclxuICAgICAgICBmaWx0ZXIoZGF0YSA9PiB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFVwZGF0ZURhdGU6IE1vbWVudCA9IGZyb21EYXRlSVNPU3RyaW5nKHRoaXMuX2RhdGE/LnVwZGF0ZURhdGUpO1xuICAgICAgICAgIGNvbnN0IHJlbW90ZVVwZGF0ZURhdGU6IE1vbWVudCA9IGZyb21EYXRlSVNPU3RyaW5nKGRhdGE/LnVwZGF0ZURhdGUpO1xuICAgICAgICAgIHJldHVybiAocmVtb3RlVXBkYXRlRGF0ZSAmJiAoIWN1cnJlbnRVcGRhdGVEYXRlIHx8ICFyZW1vdGVVcGRhdGVEYXRlLmlzU2FtZShjdXJyZW50VXBkYXRlRGF0ZSwgJ21pbGxpc2Vjb25kJykpKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29weUlkQW5kVXBkYXRlRGF0ZShzb3VyY2U6IEFjY291bnQgfCB1bmRlZmluZWQsIHRhcmdldDogQWNjb3VudCkge1xuICAgIGlmICghc291cmNlKSByZXR1cm47XG5cbiAgICB0YXJnZXQuaWQgPSBzb3VyY2UuaWQgfHwgdGFyZ2V0LmlkO1xuICAgIHRhcmdldC51cGRhdGVEYXRlID0gc291cmNlLnVwZGF0ZURhdGUgfHwgdGFyZ2V0LnVwZGF0ZURhdGU7XG5cbiAgICB0aGlzLmNvcHlJZEFuZFVwZGF0ZURhdGVTZXR0aW5ncyhzb3VyY2Uuc2V0dGluZ3MsIHRhcmdldC5zZXR0aW5ncyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29weUlkQW5kVXBkYXRlRGF0ZVNldHRpbmdzKHNvdXJjZTogVXNlclNldHRpbmdzIHwgdW5kZWZpbmVkLCB0YXJnZXQ6IFVzZXJTZXR0aW5ncykge1xuICAgIGlmICghc291cmNlKSByZXR1cm47XG5cbiAgICB0YXJnZXQuaWQgPSBzb3VyY2UuaWQgfHwgdGFyZ2V0LmlkO1xuICAgIHRhcmdldC51cGRhdGVEYXRlID0gc291cmNlLnVwZGF0ZURhdGUgfHwgdGFyZ2V0LnVwZGF0ZURhdGU7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2hvd1RvYXN0PFQgPSBhbnk+KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpOiBQcm9taXNlPE92ZXJsYXlFdmVudERldGFpbDxUPj4ge1xuICAgIHJldHVybiBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIG9wdHMpO1xuICB9XG59XG4iXX0=