http-request-manager 18.4.4 → 18.4.9

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.
Files changed (48) hide show
  1. package/esm2022/lib/http-request-manager.module.mjs +14 -3
  2. package/esm2022/lib/http-request-services-demo/http-request-services-demo.component.mjs +7 -5
  3. package/esm2022/lib/http-request-services-demo/request-manager-ws-demo/components/services/state-data-request.service.mjs +92 -0
  4. package/esm2022/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.mjs +14 -0
  5. package/esm2022/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.mjs +57 -0
  6. package/esm2022/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.mjs +107 -0
  7. package/esm2022/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.mjs +14 -0
  8. package/esm2022/lib/http-request-services-demo/request-manager-ws-demo/models/user-data.model.mjs +5 -6
  9. package/esm2022/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.mjs +14 -36
  10. package/esm2022/lib/http-request-services-demo/request-manager-ws-demo/services/state-request-demo.service.mjs +13 -39
  11. package/esm2022/lib/interceptors/index.mjs +2 -1
  12. package/esm2022/lib/models/database-storage.model.mjs +3 -1
  13. package/esm2022/lib/services/request-manager-services/request.service.mjs +4 -1
  14. package/esm2022/lib/services/request-manager-state-service/http-manager-state.store.mjs +29 -26
  15. package/esm2022/lib/services/request-manager-state-service/models/ws-options.model.mjs +4 -4
  16. package/esm2022/lib/services/store-state-manager-service/store-state-manager.service.mjs +2 -2
  17. package/esm2022/lib/services/utils/encryption/index.mjs +2 -1
  18. package/esm2022/lib/services/utils/encryption/random.mjs +13 -1
  19. package/esm2022/lib/services/utils/index.mjs +2 -1
  20. package/esm2022/lib/services/ws-manager-service/index.mjs +2 -2
  21. package/esm2022/lib/services/ws-manager-service/services/index.mjs +2 -0
  22. package/esm2022/lib/services/ws-manager-service/services/websocket.service.mjs +16 -7
  23. package/fesm2022/http-request-manager.mjs +339 -97
  24. package/fesm2022/http-request-manager.mjs.map +1 -1
  25. package/http-request-manager-18.4.9.tgz +0 -0
  26. package/lib/http-request-manager.module.d.ts +26 -22
  27. package/lib/http-request-services-demo/http-request-services-demo.component.d.ts +3 -1
  28. package/lib/http-request-services-demo/request-manager-ws-demo/components/services/state-data-request.service.d.ts +15 -0
  29. package/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.d.ts +8 -0
  30. package/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.d.ts +20 -0
  31. package/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.d.ts +33 -0
  32. package/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.d.ts +8 -0
  33. package/lib/http-request-services-demo/request-manager-ws-demo/models/user-data.model.d.ts +3 -5
  34. package/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.d.ts +3 -5
  35. package/lib/http-request-services-demo/request-manager-ws-demo/services/state-request-demo.service.d.ts +1 -5
  36. package/lib/interceptors/index.d.ts +1 -0
  37. package/lib/models/database-storage.model.d.ts +1 -1
  38. package/lib/services/request-manager-state-service/http-manager-state.store.d.ts +3 -1
  39. package/lib/services/request-manager-state-service/models/ws-options.model.d.ts +3 -4
  40. package/lib/services/store-state-manager-service/store-state-manager.service.d.ts +1 -1
  41. package/lib/services/utils/encryption/index.d.ts +1 -0
  42. package/lib/services/utils/encryption/random.d.ts +4 -0
  43. package/lib/services/utils/index.d.ts +1 -0
  44. package/lib/services/ws-manager-service/index.d.ts +1 -1
  45. package/lib/services/ws-manager-service/services/index.d.ts +1 -0
  46. package/lib/services/ws-manager-service/services/websocket.service.d.ts +3 -1
  47. package/package.json +1 -1
  48. package/http-request-manager-18.4.4.tgz +0 -0
@@ -51,6 +51,8 @@ export class HTTPManagerStateService extends ComponentStore {
51
51
  this.communicationMessages$ = this.communicationMessages.asObservable();
52
52
  this.latestCommunicationMessages = new BehaviorSubject(null);
53
53
  this.latestCommunicationMessages$ = this.latestCommunicationMessages.asObservable();
54
+ this.userAction = new BehaviorSubject(null);
55
+ this.userAction$ = this.userAction.asObservable();
54
56
  this.channels = [];
55
57
  this.channelList = [];
56
58
  this.messages = [];
@@ -60,7 +62,7 @@ export class HTTPManagerStateService extends ComponentStore {
60
62
  this.initWS = this.effect((wsOptions$) => wsOptions$.pipe(tap((wsOptions) => {
61
63
  this.wsOptions = wsOptions;
62
64
  if (wsOptions?.wsServer)
63
- this.httpManagerService.connect(wsOptions.wsServer, wsOptions.jwtToken);
65
+ this.httpManagerService.connect(wsOptions, wsOptions.jwtToken);
64
66
  }), switchMap((wsOptions) => merge(this.httpManagerService.connectionStatus$.pipe(tap((isConnected) => {
65
67
  this.wsConnection = isConnected;
66
68
  if (isConnected) {
@@ -78,8 +80,7 @@ export class HTTPManagerStateService extends ComponentStore {
78
80
  this.httpManagerService.disconnect();
79
81
  }
80
82
  if (message.type === 'success') {
81
- const currentUser = this.apiOptions.ws?.userAdapter?.adapter?.(message.data) || message.data;
82
- this.user.next(currentUser);
83
+ this.user.next(message.data);
83
84
  }
84
85
  switch (message.type) {
85
86
  case 'channelsList':
@@ -93,26 +94,26 @@ export class HTTPManagerStateService extends ComponentStore {
93
94
  }
94
95
  break;
95
96
  case 'stateMangerMessage':
96
- console.log('💬 Message:', message.content);
97
- this.fetchRecord(RequestOptions.adapt({ path: message.content.path }), message.content.method);
98
- break;
99
- case 'channelMessage':
100
- console.log('💬 Message:', message.content);
101
- this.fetchRecord(RequestOptions.adapt({ path: message.content.path }), message.content.method);
102
- break;
103
- case 'channelCommunication':
104
- console.log('💬 Message Communication:', message.content);
105
- this.appendMessages(message.content);
106
- break;
107
- case 'channelAlerts':
108
- console.log('💬 Message Alerts:', message.content);
97
+ if (message.data.sessionId !== this.user.value.sessionId) {
98
+ console.log('💬 Message:', message.data);
99
+ this.userAction.next(message.data);
100
+ this.fetchRecord(RequestOptions.adapt({ path: message.content.path }), message.content.method);
101
+ }
109
102
  break;
103
+ // case 'channelMessage':
104
+ // console.log('💬 Message:', message.data)
105
+ // this.fetchRecord(RequestOptions.adapt({ path: message.content.path }), message.content.method)
106
+ // break;
107
+ // case 'channelCommunication':
108
+ // console.log('💬 Message Communication:', message.data)
109
+ // this.appendMessages(message.data)
110
+ // break;
111
+ // case 'channelAlerts':
112
+ // console.log('💬 Message Alerts:', message.data)
113
+ // break;
110
114
  case 'usersInChannel':
111
- const data = message.data;
112
- const wsUsers = data.users.map((item) => this.apiOptions.ws?.userAdapter?.adapter?.(item) || item);
113
- const userList = wsUsers.filter((item) => item.username !== this.user.value[this.wsOptions.userAdapter?.id || 'id']);
114
- this.userList.next(userList);
115
- console.log('👥 Users:', userList);
115
+ console.log('👥 Users:', message.data.users);
116
+ this.userList.next(message.data.users);
116
117
  break;
117
118
  default:
118
119
  if (message)
@@ -125,7 +126,7 @@ export class HTTPManagerStateService extends ComponentStore {
125
126
  console.warn('Database storage requires dataType to be ARRAY');
126
127
  if (!this.apiOptions.adapter)
127
128
  console.warn('Database storage requires an adapter to define the data shape');
128
- if (!this.database?.table)
129
+ if (this.database && this.database?.table === '')
129
130
  console.warn('Database storage requires a table name');
130
131
  }), filter(() => this.dataType === DataType.ARRAY && !!this.apiOptions.adapter && !!this.database?.table), switchMap(() => {
131
132
  const sampleData = this.apiOptions.adapter?.({}) || {};
@@ -456,7 +457,8 @@ export class HTTPManagerStateService extends ComponentStore {
456
457
  const attempt = i + 1;
457
458
  this.wsRetryAttempts.next(attempt);
458
459
  countdownEnder$.next();
459
- this.initWS(this.apiOptions.ws);
460
+ if (this.apiOptions.ws?.jwtToken !== '' && this.apiOptions.ws?.wsServer !== '')
461
+ this.initWS(this.apiOptions.ws);
460
462
  if (attempt === this.maxRetries) {
461
463
  this.wsNextRetry.next(0);
462
464
  // console.error(`🚨 FAILED CONNECTION: Tried #${attempt} times`);
@@ -539,14 +541,15 @@ export class HTTPManagerStateService extends ComponentStore {
539
541
  });
540
542
  return this.dbManagerService.createDatabaseTable(tableDef);
541
543
  }
544
+ // WEBSOCKET COMMUNICATION (STATE MANAGER)
542
545
  wsCommunication(method, path) {
543
546
  if (this.wsConnection && this.apiOptions.ws) {
544
547
  const wsServer = this.apiOptions.ws.id;
545
- this.httpManagerService.sendMessageInChannel(wsServer, { method, path });
548
+ this.httpManagerService.sendMessageInChannel(wsServer, { method, path, user: this.apiOptions.ws.user });
546
549
  }
547
550
  }
548
551
  wsMessaging(message, channel) {
549
- const user = this.wsOptions?.userAdapter?.adapter?.(this.user.value) || this.user.value;
552
+ const user = this.user.value || this.user.value;
550
553
  const messageInfo = ChannelMessage.adapt({ ...message, fromUser: user });
551
554
  if (this.wsConnection && this.apiOptions.ws) {
552
555
  const wsServer = (channel) ? channel : this.apiOptions.ws.id;
@@ -588,4 +591,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
588
591
  type: Inject,
589
592
  args: ["database"]
590
593
  }] }] });
591
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1tYW5hZ2VyLXN0YXRlLnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9yZXF1ZXN0LW1hbmFnZXItc3RhdGUtc2VydmljZS9odHRwLW1hbmFnZXItc3RhdGUuc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGVBQWUsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFnQixLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVGLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2SSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pFLE9BQU8sRUFBZSxjQUFjLEVBQWUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ2pGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxXQUFXLEVBQUUsTUFBTSxr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ZWN0LCBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRTdG9yZSB9IGZyb20gJ0BuZ3J4L2NvbXBvbmVudC1zdG9yZSc7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXIsIG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YXAsIHN3aXRjaE1hcCwgY29uY2F0TWFwLCBzY2FuLCBkZWxheSwgdGFrZSwgbWFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZVVudGlsLCB0YWtlV2hpbGUsIGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERhdGFiYXNlU3RvcmFnZSB9IGZyb20gJy4uLy4uL21vZGVscy9kYXRhYmFzZS1zdG9yYWdlLm1vZGVsJztcbmltcG9ydCB7IEFwaVJlcXVlc3QsIFJlcXVlc3RPcHRpb25zLCBXU09wdGlvbnMgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBDaGFubmVsSW5mbywgQ2hhbm5lbE1lc3NhZ2UsIFVzZXJNZXNzYWdlIH0gZnJvbSAnLi4vd3MtbWFuYWdlci1zZXJ2aWNlL21vZGVscyc7XG5pbXBvcnQgeyBIVFRQTWFuYWdlclNlcnZpY2UsIERhdGFUeXBlIH0gZnJvbSAnLi4vcmVxdWVzdC1tYW5hZ2VyLXNlcnZpY2VzJztcbmltcG9ydCB7IERhdGFiYXNlTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi9kYXRhYmFzZS1tYW5hZ2VyLXNlcnZpY2UnO1xuaW1wb3J0IHsgVGFibGVTY2hlbWFEZWYgfSBmcm9tICcuLi9kYXRhYmFzZS1tYW5hZ2VyLXNlcnZpY2UvbW9kZWxzL3RhYmxlLXNjaGVtYSc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VNYW5hZ2VyU2VydmljZSwgU3RvcmFnZVR5cGUgfSBmcm9tICcuLi9sb2NhbC1zdG9yYWdlLW1hbmFnZXItc2VydmljZSc7XG5pbXBvcnQgeyBTZXR0aW5nT3B0aW9ucyB9IGZyb20gJy4uL2xvY2FsLXN0b3JhZ2UtbWFuYWdlci1zZXJ2aWNlL21vZGVscy9zZXR0aW5nLW9wdGlvbnMubW9kZWwnO1xuaW1wb3J0IHsgVXRpbHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4nO1xuXG5jb25zdCBBUElfT1BUUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBcGlSZXF1ZXN0PignQVBJX09QVFMnKTtcblxuZXhwb3J0IGludGVyZmFjZSBBUElTdGF0ZU1hbmFnZXJEYXRhPFQ+IHtcbiAgZGF0YTogVFtdXG4gIGRhdGFPYmplY3Q6IFQgfCBudWxsXG59XG5cbmNvbnN0IGRlZmF1bHRTdGF0ZTogQVBJU3RhdGVNYW5hZ2VyRGF0YTxhbnk+ID0ge1xuICBkYXRhOiBbXSxcbiAgZGF0YU9iamVjdDogbnVsbCxcbn07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBIVFRQTWFuYWdlclN0YXRlU2VydmljZTxUIGV4dGVuZHMgeyBpZDogbnVtYmVyIH0+IGV4dGVuZHMgQ29tcG9uZW50U3RvcmU8QVBJU3RhdGVNYW5hZ2VyRGF0YTxUPj4ge1xuXG4gIGh0dHBNYW5hZ2VyU2VydmljZSA9IGluamVjdChIVFRQTWFuYWdlclNlcnZpY2UpXG4gIGRiTWFuYWdlclNlcnZpY2UgPSBpbmplY3QoRGF0YWJhc2VNYW5hZ2VyU2VydmljZSlcbiAgbG9jYWxTdG9yYWdlTWFuYWdlclNlcnZpY2UgPSBpbmplY3QoTG9jYWxTdG9yYWdlTWFuYWdlclNlcnZpY2UpXG4gIHV0aWxzID0gaW5qZWN0KFV0aWxzU2VydmljZSlcblxuICBlcnJvciQgPSB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5lcnJvciRcbiAgaXNQZW5kaW5nJCA9IHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLmlzUGVuZGluZyQucGlwZShkZWxheSgxKSlcblxuICAvLyBQQUdJTkFUSU9OXG4gIHByaXZhdGUgcGFnZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKVxuICBwYWdlJCA9IHRoaXMucGFnZS5hc09ic2VydmFibGUoKVxuXG4gIHByaXZhdGUgdG90YWxQYWdlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKVxuICB0b3RhbFBhZ2VzJCA9IHRoaXMudG90YWxQYWdlcy5hc09ic2VydmFibGUoKVxuXG4gIHByaXZhdGUgcGVyY2VudGFnZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKVxuICBwZXJjZW50YWdlJCA9IHRoaXMucGVyY2VudGFnZS5hc09ic2VydmFibGUoKVxuXG4gIHByaXZhdGUgaGFzRGF0YWJhc2UgPSBmYWxzZVxuXG4gIHN0cmVhbWVkUmVzcG9uc2UgPSBbXVxuXG4gIC8vIFdTXG4gIHByaXZhdGUgbWF4UmV0cmllczogbnVtYmVyXG4gIHByaXZhdGUgcmV0cnlEZWxheTogbnVtYmVyXG4gIHByaXZhdGUgc2hvdWxkUmV0cnkgPSB0cnVlXG5cbiAgcHJpdmF0ZSB3c1JldHJ5QXR0ZW1wdHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMClcbiAgd3NSZXRyeUF0dGVtcHRzJCA9IHRoaXMud3NSZXRyeUF0dGVtcHRzLmFzT2JzZXJ2YWJsZSgpXG5cbiAgcHJpdmF0ZSB3c05leHRSZXRyeTogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj5cbiAgd3NOZXh0UmV0cnkkOiBPYnNlcnZhYmxlPG51bWJlcj5cblxuXG4gIG1lc3NhZ2VzJDogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gIGNvbm5lY3Rpb25TdGF0dXMkOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIHVzZXJMaXN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pXG4gIHVzZXJMaXN0JCA9IHRoaXMudXNlckxpc3QuYXNPYnNlcnZhYmxlKClcblxuICBwcml2YXRlIHVzZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueXxudWxsPihudWxsKVxuICB1c2VyJCA9IHRoaXMudXNlci5hc09ic2VydmFibGUoKVxuXG4gIHByaXZhdGUgY29tbXVuaWNhdGlvbk1lc3NhZ2VzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVc2VyTWVzc2FnZVtdPihbXSlcbiAgY29tbXVuaWNhdGlvbk1lc3NhZ2VzJCA9IHRoaXMuY29tbXVuaWNhdGlvbk1lc3NhZ2VzLmFzT2JzZXJ2YWJsZSgpXG5cbiAgcHJpdmF0ZSBsYXRlc3RDb21tdW5pY2F0aW9uTWVzc2FnZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFVzZXJNZXNzYWdlfG51bGw+KG51bGwpXG4gIGxhdGVzdENvbW11bmljYXRpb25NZXNzYWdlcyQgPSB0aGlzLmxhdGVzdENvbW11bmljYXRpb25NZXNzYWdlcy5hc09ic2VydmFibGUoKVxuXG4gIGNoYW5uZWxzOiBDaGFubmVsSW5mb1tdID0gW11cbiAgY2hhbm5lbExpc3Q6IHN0cmluZ1tdID0gW11cbiAgbWVzc2FnZXM6IGFueVtdID0gW11cblxuICB3c0Nvbm5lY3Rpb24gPSBmYWxzZVxuICB3c09wdGlvbnMgPSBXU09wdGlvbnMuYWRhcHQoKVxuXG4gIHB1YmxpYyBzdGF0dXMkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoQVBJX09QVFMpIHByaXZhdGUgYXBpT3B0aW9ucyA9IEFwaVJlcXVlc3QuYWRhcHQoKSxcbiAgICBASW5qZWN0KFwiZGF0YVR5cGVcIikgcHJpdmF0ZSBkYXRhVHlwZTogRGF0YVR5cGUgfCB1bmRlZmluZWQsXG4gICAgQEluamVjdChcImRhdGFiYXNlXCIpIHByaXZhdGUgZGF0YWJhc2U/OiBEYXRhYmFzZVN0b3JhZ2UgfCB1bmRlZmluZWRcbiAgKSB7XG5cbiAgICBzdXBlcihkZWZhdWx0U3RhdGUpO1xuXG4gICAgdGhpcy5tYXhSZXRyaWVzID0gdGhpcy5hcGlPcHRpb25zLndzPy5yZXRyeT8udGltZXMgfHwgM1xuICAgIHRoaXMucmV0cnlEZWxheSA9ICh0aGlzLmFwaU9wdGlvbnMud3M/LnJldHJ5Py5kZWxheSAmJiB0aGlzLmFwaU9wdGlvbnMud3MucmV0cnkuZGVsYXkgKiAxMDAwKSB8fCA1ICogMTAwMFxuICAgIHRoaXMud3NOZXh0UmV0cnkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4odGhpcy5yZXRyeURlbGF5KVxuICAgIHRoaXMud3NOZXh0UmV0cnkkID0gdGhpcy53c05leHRSZXRyeS5hc09ic2VydmFibGUoKVxuXG4gICAgdGhpcy5zZXRBcGlSZXF1ZXN0T3B0aW9ucyhhcGlPcHRpb25zLCBkYXRhVHlwZSwgZGF0YWJhc2UpXG4gICAgdGhpcy5zdGF0dXMkID0gdGhpcy5zZXR1cENvbm5lY3Rpb25TdGF0dXMoKTtcblxuICAgIGlmICh0aGlzLmRhdGFiYXNlICYmIHRoaXMuZGF0YWJhc2UudGFibGUpIHtcblxuICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VNYW5hZ2VyU2VydmljZS5jcmVhdGVTdG9yZSh7XG4gICAgICAgIG5hbWU6IHRoaXMuZGF0YWJhc2UudGFibGUsXG4gICAgICAgIGRhdGE6IHsgLi4udGhpcy5kYXRhYmFzZSwgLi4ueyBleHBpcmVzOiB0aGlzLnV0aWxzLmV4cGlyZXModGhpcy5kYXRhYmFzZS5leHBpcmVzSW4pfSB9LFxuICAgICAgICBvcHRpb25zOiBTZXR0aW5nT3B0aW9ucy5hZGFwdCh7XG4gICAgICAgICAgc3RvcmFnZTogU3RvcmFnZVR5cGUuR0xPQkFMLFxuICAgICAgICAgIGVuY3J5cHRlZDogZmFsc2UsXG4gICAgICAgIH0pXG4gICAgICB9KVxuXG4gICAgfVxuXG4gIH1cblxuICBzZXRBcGlSZXF1ZXN0T3B0aW9ucyhhcGlPcHRpb25zPzogQXBpUmVxdWVzdCwgZGF0YVR5cGU/OiBEYXRhVHlwZSwgZGF0YWJhc2U/OiBEYXRhYmFzZVN0b3JhZ2UpIHtcblxuICAgIHRoaXMuYXBpT3B0aW9ucyA9IEFwaVJlcXVlc3QuYWRhcHQoYXBpT3B0aW9ucylcbiAgICB0aGlzLmRhdGFUeXBlID0gKGRhdGFUeXBlKSA/IGRhdGFUeXBlIDogRGF0YVR5cGUuQVJSQVlcblxuICAgIHRoaXMuaGFzRGF0YWJhc2UgPSAodGhpcy5kYXRhYmFzZT8udGFibGUpID8gdHJ1ZSA6IGZhbHNlXG4gICAgdGhpcy5kYXRhYmFzZSA9ICh0aGlzLmhhc0RhdGFiYXNlKSA/IERhdGFiYXNlU3RvcmFnZS5hZGFwdChkYXRhYmFzZSkgOiB1bmRlZmluZWRcblxuICAgIGlmKHRoaXMuZGF0YWJhc2UpIHRoaXMuaW5pdERCU3RvcmFnZSgpXG4gICAgaWYodGhpcy5hcGlPcHRpb25zLndzKSB0aGlzLmluaXRXUyh0aGlzLmFwaU9wdGlvbnMud3MgYXMgV1NPcHRpb25zKVxuXG4gIH1cblxuICAvLyBXZWJTb2NrZXRcbiAgcHJpdmF0ZSBzZXR1cENvbm5lY3Rpb25TdGF0dXMoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLmNvbm5lY3Rpb25TdGF0dXMkLnBpcGUoXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgc3dpdGNoTWFwKHN0YXR1cyA9PiB7XG5cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMuc2hvdWxkUmV0cnkgPSB0cnVlXG4gICAgICAgICAgdGhpcy53c1JldHJ5QXR0ZW1wdHMubmV4dCgwKTtcbiAgICAgICAgICB0aGlzLndzTmV4dFJldHJ5Lm5leHQoMCk7XG4gICAgICAgICAgcmV0dXJuIG9mKHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnNob3VsZFJldHJ5KSByZXR1cm4gb2YoZmFsc2UpXG5cbiAgICAgICAgY29uc3QgY291bnRkb3duRW5kZXIkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgICAgICByZXR1cm4gdGltZXIoMCwgdGhpcy5yZXRyeURlbGF5KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlKHRoaXMubWF4UmV0cmllcyksXG4gICAgICAgICAgdGFwKGkgPT4ge1xuXG4gICAgICAgICAgICBjb25zdCBhdHRlbXB0ID0gaSArIDE7XG4gICAgICAgICAgICB0aGlzLndzUmV0cnlBdHRlbXB0cy5uZXh0KGF0dGVtcHQpO1xuICAgICAgICAgICAgY291bnRkb3duRW5kZXIkLm5leHQoKTtcbiAgICAgICAgICAgIHRoaXMuaW5pdFdTKHRoaXMuYXBpT3B0aW9ucy53cyBhcyBXU09wdGlvbnMpO1xuXG4gICAgICAgICAgICBpZiAoYXR0ZW1wdCA9PT0gdGhpcy5tYXhSZXRyaWVzKSB7XG4gICAgICAgICAgICAgIHRoaXMud3NOZXh0UmV0cnkubmV4dCgwKVxuICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUuZXJyb3IoYPCfmqggRkFJTEVEIENPTk5FQ1RJT046IFRyaWVkICMke2F0dGVtcHR9IHRpbWVzYCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKGDimqDvuI8gUmV0cnkgQXR0ZW1wdCAjJHthdHRlbXB0fTogUmV0cnlpbmcgaW4gJHt0aGlzLnJldHJ5RGVsYXkgLyAxMDAwfXNgKTtcbiAgICAgICAgICAgICAgY29uc3Qgc2Vjb25kcyA9IHRoaXMucmV0cnlEZWxheSAvIDEwMDA7XG5cbiAgICAgICAgICAgICAgdGltZXIoMCwgMTAwMCkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAodGljayA9PiBzZWNvbmRzIC0gdGljayksXG4gICAgICAgICAgICAgICAgdGFrZVdoaWxlKHZhbCA9PiB2YWwgPj0gMCksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKGNvdW50ZG93bkVuZGVyJClcbiAgICAgICAgICAgICAgKS5zdWJzY3JpYmUocmVtYWluaW5nID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLndzTmV4dFJldHJ5Lm5leHQocmVtYWluaW5nKTtcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSksXG4gICAgICAgICAgbWFwKCgpID0+IGZhbHNlKVxuICAgICAgICApXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvLyBXZWJTb2NrZXRcbiAgcmVhZG9ubHkgaW5pdFdTID0gdGhpcy5lZmZlY3Q8V1NPcHRpb25zPigod3NPcHRpb25zJCkgPT5cbiAgICB3c09wdGlvbnMkLnBpcGUoXG4gICAgICB0YXAoKHdzT3B0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLndzT3B0aW9ucyA9IHdzT3B0aW9uc1xuICAgICAgICBpZiAod3NPcHRpb25zPy53c1NlcnZlcikgdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuY29ubmVjdCh3c09wdGlvbnMud3NTZXJ2ZXIsIHdzT3B0aW9ucy5qd3RUb2tlbilcbiAgICAgIH0pLFxuICAgICAgc3dpdGNoTWFwKCh3c09wdGlvbnMpID0+XG4gICAgICAgIG1lcmdlKFxuICAgICAgICAgIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLmNvbm5lY3Rpb25TdGF0dXMkLnBpcGUoXG4gICAgICAgICAgICB0YXAoKGlzQ29ubmVjdGVkOiBhbnkpID0+IHtcblxuICAgICAgICAgICAgICB0aGlzLndzQ29ubmVjdGlvbiA9IGlzQ29ubmVjdGVkXG5cbiAgICAgICAgICAgICAgaWYgKGlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ/Cfn6IgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgb3Blbi4nKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCfwn5S0IFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGNsb3NlZC4nKVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5tZXNzYWdlcyQucGlwZShcbiAgICAgICAgICAgIHRhcCgobWVzc2FnZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmICghbWVzc2FnZSkgcmV0dXJuXG5cbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1JlY2VpdmVkOicsIG1lc3NhZ2UudHlwZSlcblxuICAgICAgICAgICAgICBpZiAobWVzc2FnZS5lcnJvciA9PT0gJ0pXVF9JTlZBTElEJykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvdWxkUmV0cnkgPSBmYWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLmRpc2Nvbm5lY3QoKVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFVzZXIgPSB0aGlzLmFwaU9wdGlvbnMud3M/LnVzZXJBZGFwdGVyPy5hZGFwdGVyPy4obWVzc2FnZS5kYXRhKSB8fCBtZXNzYWdlLmRhdGFcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXIubmV4dChjdXJyZW50VXNlcilcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnY2hhbm5lbHNMaXN0JzpcblxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ/CfkqwgQ2hhbm5lbHM6JywgbWVzc2FnZS5jaGFubmVscylcblxuICAgICAgICAgICAgICAgICAgdGhpcy5jaGFubmVsTGlzdCA9IG1lc3NhZ2UuY2hhbm5lbHNcblxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hhbm5lbExpc3QuaW5jbHVkZXMod3NPcHRpb25zLmlkKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5zdWJzY3JpYmVUb0NoYW5uZWwod3NPcHRpb25zLmlkKVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuY3JlYXRlQ2hhbm5lbCh3c09wdGlvbnMuaWQpXG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnc3RhdGVNYW5nZXJNZXNzYWdlJzpcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCfwn5KsIE1lc3NhZ2U6JywgbWVzc2FnZS5jb250ZW50KVxuICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaFJlY29yZChSZXF1ZXN0T3B0aW9ucy5hZGFwdCh7IHBhdGg6IG1lc3NhZ2UuY29udGVudC5wYXRoIH0pLCBtZXNzYWdlLmNvbnRlbnQubWV0aG9kKVxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdjaGFubmVsTWVzc2FnZSc6XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn8J+SrCBNZXNzYWdlOicsIG1lc3NhZ2UuY29udGVudClcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hSZWNvcmQoUmVxdWVzdE9wdGlvbnMuYWRhcHQoeyBwYXRoOiBtZXNzYWdlLmNvbnRlbnQucGF0aCB9KSwgbWVzc2FnZS5jb250ZW50Lm1ldGhvZClcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnY2hhbm5lbENvbW11bmljYXRpb24nOlxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ/CfkqwgTWVzc2FnZSBDb21tdW5pY2F0aW9uOicsIG1lc3NhZ2UuY29udGVudClcbiAgICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kTWVzc2FnZXMobWVzc2FnZS5jb250ZW50KVxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdjaGFubmVsQWxlcnRzJzpcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCfwn5KsIE1lc3NhZ2UgQWxlcnRzOicsIG1lc3NhZ2UuY29udGVudClcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAndXNlcnNJbkNoYW5uZWwnOlxuXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IG1lc3NhZ2UuZGF0YVxuICAgICAgICAgICAgICAgIGNvbnN0IHdzVXNlcnMgPSBkYXRhLnVzZXJzLm1hcCgoaXRlbTogYW55KSA9PiB0aGlzLmFwaU9wdGlvbnMud3M/LnVzZXJBZGFwdGVyPy5hZGFwdGVyPy4oaXRlbSkgfHwgaXRlbSlcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VyTGlzdCA9IHdzVXNlcnMuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0udXNlcm5hbWUgIT09IHRoaXMudXNlci52YWx1ZVt0aGlzLndzT3B0aW9ucy51c2VyQWRhcHRlcj8uaWQgfHwgJ2lkJ10pXG5cbiAgICAgICAgICAgICAgICAgIHRoaXMudXNlckxpc3QubmV4dCh1c2VyTGlzdClcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCfwn5GlIFVzZXJzOicsIHVzZXJMaXN0KVxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UpIHRoaXMubWVzc2FnZXMucHVzaChtZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgYXBwZW5kTWVzc2FnZXMobWVzc2FnZTogVXNlck1lc3NhZ2UpIHtcbiAgICBjb25zdCBjdXJyZW50TWVzc2FnZXMgPSB0aGlzLmNvbW11bmljYXRpb25NZXNzYWdlcy52YWx1ZVxuICAgIHRoaXMuY29tbXVuaWNhdGlvbk1lc3NhZ2VzLm5leHQoWy4uLmN1cnJlbnRNZXNzYWdlcywgbWVzc2FnZV0pXG4gICAgdGhpcy5sYXRlc3RNZXNzYWdlKClcbiAgfVxuXG4gIGxhdGVzdE1lc3NhZ2UoKSB7XG4gICAgY29uc3QgbWVzc2FnZXMgPSB0aGlzLmNvbW11bmljYXRpb25NZXNzYWdlcy52YWx1ZVxuICAgIGNvbnN0IGxhdGVzdE1lc3NhZ2UgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLTFdXG4gICAgdGhpcy5sYXRlc3RDb21tdW5pY2F0aW9uTWVzc2FnZXMubmV4dChsYXRlc3RNZXNzYWdlKVxuICB9XG5cbiAgY2xlYXJNZXNzYWdlcygpIHtcbiAgICB0aGlzLmNvbW11bmljYXRpb25NZXNzYWdlcy5uZXh0KFtdKVxuICB9XG5cbiAgZ2V0IEFwaVJlcXVlc3RPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmFwaU9wdGlvbnNcbiAgfVxuXG4gIHJlYWRvbmx5IGluaXREQlN0b3JhZ2UgPSB0aGlzLmVmZmVjdDx2b2lkPigodHJpZ2dlciQpID0+XG4gICAgdHJpZ2dlciQucGlwZShcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFUeXBlICE9PSBEYXRhVHlwZS5BUlJBWSkgY29uc29sZS53YXJuKCdEYXRhYmFzZSBzdG9yYWdlIHJlcXVpcmVzIGRhdGFUeXBlIHRvIGJlIEFSUkFZJyk7XG4gICAgICAgIGlmICghdGhpcy5hcGlPcHRpb25zLmFkYXB0ZXIpIGNvbnNvbGUud2FybignRGF0YWJhc2Ugc3RvcmFnZSByZXF1aXJlcyBhbiBhZGFwdGVyIHRvIGRlZmluZSB0aGUgZGF0YSBzaGFwZScpO1xuICAgICAgICBpZiAoIXRoaXMuZGF0YWJhc2U/LnRhYmxlKSBjb25zb2xlLndhcm4oJ0RhdGFiYXNlIHN0b3JhZ2UgcmVxdWlyZXMgYSB0YWJsZSBuYW1lJyk7XG4gICAgICB9KSxcbiAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmRhdGFUeXBlID09PSBEYXRhVHlwZS5BUlJBWSAmJiAhIXRoaXMuYXBpT3B0aW9ucy5hZGFwdGVyICYmICEhdGhpcy5kYXRhYmFzZT8udGFibGUpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2FtcGxlRGF0YSA9IHRoaXMuYXBpT3B0aW9ucy5hZGFwdGVyPy4oe30pIHx8IHt9O1xuICAgICAgICBjb25zdCBzY2hlbWFLZXlzID0gT2JqZWN0LmtleXMoc2FtcGxlRGF0YSkuZmlsdGVyKGtleSA9PiBzYW1wbGVEYXRhW2tleV0gIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgbGV0IHNjaGVtYSA9ICcrK2lkJztcblxuICAgICAgICBpZiAoc2NoZW1hS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3Qgb3RoZXJLZXlzID0gc2NoZW1hS2V5cy5maWx0ZXIoayA9PiBrICE9PSAnaWQnKTtcbiAgICAgICAgICBpZiAob3RoZXJLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNjaGVtYSArPSAnLCAnICsgb3RoZXJLZXlzLmpvaW4oJywgJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFibGVEZWYgPSBUYWJsZVNjaGVtYURlZi5hZGFwdCh7XG4gICAgICAgICAgdGFibGU6IHRoaXMuZGF0YWJhc2U/LnRhYmxlLFxuICAgICAgICAgIHNjaGVtYTogc2NoZW1hXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmRiTWFuYWdlclNlcnZpY2UuY3JlYXRlRGF0YWJhc2VUYWJsZSh0YWJsZURlZilcbiAgICAgIH0pXG4gICAgKVxuICApO1xuXG4gIGluaXRpYWxpemVTdGF0ZShkYXRhOiBhbnkpIHtcbiAgICB0aGlzLnNldERhdGEkKGRhdGEpXG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBTRUxFQ1RPUlNcblxuICByZWFkb25seSBkYXRhJCA9IHRoaXMuc2VsZWN0KCh7IGRhdGEsIGRhdGFPYmplY3QgfSkgPT4ge1xuICAgIGNvbnN0IGlzQXJyYXkgPSggdGhpcy5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuQVJSQVkpID8gdHJ1ZSA6IGZhbHNlXG4gICAgcmV0dXJuIChpc0FycmF5KSA/IGRhdGEgOiBkYXRhT2JqZWN0XG4gIH0pXG5cbiAgcmVhZG9ubHkgc2VsZWN0UmVjb3JkJCA9IChpZDogbnVtYmVyKSA9PiB0aGlzLnNlbGVjdChcbiAgICB0aGlzLmRhdGEkLFxuICAgIChkYXRhKSA9PiB7XG4gICAgICBpZiAodGhpcy5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuQVJSQVkgJiYgQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICByZXR1cm4gZGF0YS5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gaWQpIGFzIFQgfCBudWxsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKGRhdGEgYXMgVCkuaWQgPT09IGlkID8gZGF0YSA6IG51bGxcbiAgICAgIH1cbiAgICB9XG4gICk7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBVUERBVEVSU1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2V0RGF0YSQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlOiBBUElTdGF0ZU1hbmFnZXJEYXRhPFQ+LCBkYXRhOiBUIHwgVFtdIHwgYW55KSA9PiB7XG5cbiAgICBpZiAoIWRhdGEpIHJldHVybiBzdGF0ZTtcblxuICAgIGlmICh0aGlzLmRhdGFUeXBlID09PSBEYXRhVHlwZS5BUlJBWSkge1xuXG4gICAgICBjb25zdCBkYXRhQXJyYXkgPSBBcnJheS5pc0FycmF5KGRhdGEpID8gZGF0YSA6IFtkYXRhXVxuXG4gICAgICBjb25zdCBzdGF0ZURhdGFTYW1wbGUgPSAoc3RhdGUuZGF0YS5sZW5ndGggPiAwKSA/IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFbMF0pIDogW11cbiAgICAgIGNvbnN0IG5ld0RhdGFTYW1wbGUgPSAoZGF0YUFycmF5Lmxlbmd0aCA+IDApID8gT2JqZWN0LmtleXMoZGF0YUFycmF5WzBdKSA6IFtdXG5cbiAgICAgIGNvbnN0IGlzU2FtZSA9IChzdGF0ZS5kYXRhLmxlbmd0aCA9PT0gMCkgPyBmYWxzZSA6IHN0YXRlRGF0YVNhbXBsZS5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiB2YWx1ZSA9PT0gbmV3RGF0YVNhbXBsZVtpbmRleF0pXG4gICAgICBjb25zdCB1cGRhdGVkRGF0YSA9ICghaXNTYW1lICYmIGRhdGFBcnJheS5sZW5ndGggIT09IDApID8gdGhpcy51cGRhdGVBcnJheVN0YXRlKFtdLCBkYXRhQXJyYXkpIDogdGhpcy51cGRhdGVBcnJheVN0YXRlKHN0YXRlLmRhdGEsIGRhdGFBcnJheSlcblxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGRhdGE6IHVwZGF0ZWREYXRhLCBkYXRhT2JqZWN0OiBudWxsIH0gYXMgQVBJU3RhdGVNYW5hZ2VyRGF0YTxUPjtcblxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkYXRhT2JqZWN0ID0gdGhpcy5pc0VtcHR5KGRhdGEpID8gbnVsbCA6IGRhdGE7XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgZGF0YTogW10sIGRhdGFPYmplY3Q6IGRhdGFPYmplY3QgfSBhcyBBUElTdGF0ZU1hbmFnZXJEYXRhPFQ+O1xuICAgIH1cblxuICB9KTtcblxuICBwcml2YXRlIHVwZGF0ZUFycmF5U3RhdGUoY3VycmVudERhdGE6IGFueVtdLCBuZXdEYXRhOiBhbnlbXSk6IGFueVtdIHtcblxuICAgIGNvbnN0IGZpbHRlckN1cnJlbnREYXRhID0gKCkgPT4ge1xuICAgICAgY29uc3QgaWRzID0gdGhpcy5zdHJlYW1lZFJlc3BvbnNlLm1hcCgob2JqOiBhbnkpID0+IG9iai5pZClcbiAgICAgIHJldHVybiBjdXJyZW50RGF0YS5maWx0ZXIob2JqID0+IChvYmouaWQpID8gaWRzLmluY2x1ZGVzKG9iai5pZCkgOiBvYmopXG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyZWRDdXJyZW50RGF0YSA9ICh0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5pc1BlbmRpbmcudmFsdWUpID8gY3VycmVudERhdGEgOiBmaWx0ZXJDdXJyZW50RGF0YSgpXG5cbiAgICBjb25zdCB1cGRhdGVkRGF0YSA9IGZpbHRlcmVkQ3VycmVudERhdGEubWFwKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBuZXdJdGVtID0gbmV3RGF0YS5maW5kKG5ld0l0ZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IGhhc0lkID0gKG5ld0l0ZW0/LmlkICYmIGl0ZW0/LmlkKSA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgIHJldHVybiAoaGFzSWQpID8gbmV3SXRlbS5pZCA9PT0gaXRlbS5pZCA6IEpTT04uc3RyaW5naWZ5KG5ld0l0ZW0pID09PSBKU09OLnN0cmluZ2lmeShpdGVtKVxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gKG5ld0l0ZW0pID8geyAuLi5pdGVtLCAuLi5uZXdJdGVtIH0gOiBpdGVtXG4gICAgfSlcblxuICAgIGNvbnN0IGFkZGVkRGF0YSA9IG5ld0RhdGEuZmlsdGVyKG5ld0l0ZW0gPT4ge1xuICAgICAgcmV0dXJuICFmaWx0ZXJlZEN1cnJlbnREYXRhLnNvbWUoaXRlbSA9PiB7XG4gICAgICAgICAgY29uc3QgaGFzSWQgPSAobmV3SXRlbT8uaWQgJiYgaXRlbT8uaWQpID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgcmV0dXJuIChoYXNJZCkgPyBpdGVtLmlkID09PSBuZXdJdGVtLmlkIDogSlNPTi5zdHJpbmdpZnkobmV3SXRlbSkgPT09IEpTT04uc3RyaW5naWZ5KGl0ZW0pXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICByZXR1cm4gWy4uLnVwZGF0ZWREYXRhLCAuLi5hZGRlZERhdGFdXG5cbn1cblxuICBwcml2YXRlIHJlYWRvbmx5IGFkZERhdGEkID0gdGhpcy51cGRhdGVyKChzdGF0ZTogQVBJU3RhdGVNYW5hZ2VyRGF0YTxUPiwgZGF0YTogVCkgPT4ge1xuXG4gIGlmICh0aGlzLmRhdGFUeXBlID09PSBEYXRhVHlwZS5BUlJBWSkge1xuICAgICAgY29uc3QgZXhpc3RzID0gc3RhdGUuZGF0YS5zb21lKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZGF0YS5pZCk7XG5cbiAgICAgIGlmIChleGlzdHMpIHtcbiAgICAgICAgICBjb25zdCB1cGRhdGVkRGF0YSA9IHN0YXRlLmRhdGEubWFwKGl0ZW0gPT5cbiAgICAgICAgICBpdGVtLmlkID09PSBkYXRhLmlkID8gZGF0YSA6IGl0ZW1cbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4geyAuLi5zdGF0ZSwgZGF0YTogdXBkYXRlZERhdGEgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5ld1N0YXRlID0gWy4uLnN0YXRlLmRhdGEsIGRhdGFdO1xuICAgICAgICByZXR1cm4geyAuLi5zdGF0ZSwgZGF0YTogbmV3U3RhdGUgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGRhdGFPYmplY3Q6IGRhdGEgfTtcbiAgICB9XG5cbiAgfSlcblxuICBwcml2YXRlIHJlYWRvbmx5IGRlbGV0ZURhdGEkID0gdGhpcy51cGRhdGVyKChzdGF0ZTogQVBJU3RhdGVNYW5hZ2VyRGF0YTxUPiwgZGF0YTogVCAmIHsgaWQ6IG51bWJlciB9KSA9PiB7XG4gICAgaWYgKHRoaXMuZGF0YVR5cGUgPT09IERhdGFUeXBlLkFSUkFZKSB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSBzdGF0ZS5kYXRhLmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgIT09IGRhdGEuaWQpXG4gICAgcmV0dXJuIHsgLi4uc3RhdGUsIC4uLnsgZGF0YTogbmV3U3RhdGUgfSB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCAuLi57IGRhdGFPYmplY3Q6IG51bGwgfSB9XG4gICAgfVxuICB9KVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgdXBkYXRlRGF0YSQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlOiBBUElTdGF0ZU1hbmFnZXJEYXRhPFQ+LCBkYXRhOiBUKSA9PiB7XG5cbiAgICBpZiAodGhpcy5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuQVJSQVkpIHtcblxuICAgICAgY29uc3Qgb2JqSW5kZXggPSBzdGF0ZS5kYXRhLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IGRhdGEuaWQpXG5cbiAgICAgIGlmIChvYmpJbmRleCA+IC0xKSB7XG4gICAgICAgIGNvbnN0IG5ld1N0YXRlID0gWy4uLnN0YXRlLmRhdGFdXG4gICAgICAgIG5ld1N0YXRlW29iakluZGV4XSA9IGRhdGFcbiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIC4uLnsgZGF0YTogbmV3U3RhdGUgfSB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdGF0ZVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCAuLi57IGRhdGFPYmplY3Q6IGRhdGEgfSB9XG4gICAgfVxuXG4gIH0pXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gRUZGRUNUU1xuXG4gIHJlYWRvbmx5IGNsZWFyUmVjb3JkcyA9IHRoaXMuZWZmZWN0KGRhdGEgPT5cbiAgICBkYXRhLnBpcGUoXG5cbiAgICAgIHRhcCgoKSA9PiB7XG5cbiAgICAgICAgaWYgKHRoaXMuZGF0YVR5cGUgPT09IERhdGFUeXBlLkFSUkFZKSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhJChbXSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldERhdGEkKHt9KVxuICAgICAgICB9XG5cbiAgICAgIH0pLFxuICAgICAgY29uY2F0TWFwKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGF0YWJhc2UgJiYgdGhpcy5kYXRhYmFzZT8udGFibGUpIHtcblxuICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRhID0gdGhpcy5nZXQoKT8uZGF0YTtcbiAgICAgICAgICBjb25zdCBpZHNUb0RlbGV0ZSA9IEFycmF5LmlzQXJyYXkoY3VycmVudERhdGEpID8gY3VycmVudERhdGEubWFwKChyOiBhbnkpID0+IHIuaWQpIDogW107XG5cbiAgICAgICAgICBpZiAoaWRzVG9EZWxldGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGJNYW5hZ2VyU2VydmljZS5kZWxldGVUYWJsZVJlY29yZHModGhpcy5kYXRhYmFzZS50YWJsZSwgaWRzVG9EZWxldGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgIH0pXG4gICkpXG5cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBDUlVEIE9QRVJBVElPTlNcblxuICAvLyBGRVRDSCBSRUNPUkRTXG4gIHJlYWRvbmx5IGZldGNoUmVjb3JkcyA9IChvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpID0+XG4gICAgdGhpcy5lZmZlY3Q8YW55PigoKSA9PlxuICAgIG9mKFJlcXVlc3RPcHRpb25zLmFkYXB0KG9wdGlvbnMpKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcblxuICAgICAgICB0aGlzLnN0cmVhbWVkUmVzcG9uc2UgPSBbXVxuICAgICAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHRoaXMudXBkYXRlUmVxdWVzdE9wdGlvbnMob3B0aW9ucz8uaGVhZGVycylcblxuICAgICAgICBjb25zdCBmZXRjaEZyb21BUEkgPSAoKSA9PiB7XG5cbiAgICAgICAgICByZXR1cm4gdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuZ2V0UmVxdWVzdChyZXF1ZXN0T3B0aW9ucywgb3B0aW9ucz8ucGF0aCkucGlwZShcbiAgICAgICAgICAgIHRhcCgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGRhdGEgPSAoIWRhdGEpID8gKHRoaXMuZGF0YVR5cGUgPT09IERhdGFUeXBlLkFSUkFZKSA/IFtdIDoge30gOiBkYXRhXG4gICAgICAgICAgICAgIHRoaXMuc2V0RGF0YSQoZGF0YSlcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY29uY2F0TWFwKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzRGF0YWJhc2UgJiYgdGhpcy5kYXRhYmFzZT8udGFibGUgJiYgQXJyYXkuaXNBcnJheShkYXRhKSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcblxuICAgICAgICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlTWFuYWdlclNlcnZpY2UudXBkYXRlU3RvcmUoe1xuICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5kYXRhYmFzZSEudGFibGUsXG4gICAgICAgICAgICAgICAgICBkYXRhOiB7IC4uLnRoaXMuZGF0YWJhc2UsIC4uLnsgZXhwaXJlczogdGhpcy51dGlscy5leHBpcmVzKHRoaXMuZGF0YWJhc2UhLmV4cGlyZXNJbil9IH1cbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGJNYW5hZ2VyU2VydmljZS5jcmVhdGVUYWJsZVJlY29yZHModGhpcy5kYXRhYmFzZS50YWJsZSwgZGF0YSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIG9mKGRhdGEpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNEYXRhYmFzZSAmJiB0aGlzLmRhdGFiYXNlPy50YWJsZSkge1xuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGJNYW5hZ2VyU2VydmljZS5kYXRhYmFzZUV4aXN0cygpLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKGRiRXhpc3RzOiBib29sZWFuKSA9PiB7XG5cbiAgICAgICAgICAgICAgaWYgKCFkYkV4aXN0cykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluaXRPYnM6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuaW5pdERCU3RvcmFnZUFzeW5jKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluaXRPYnMucGlwZShcbiAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiBmZXRjaEZyb21BUEkoKSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGJNYW5hZ2VyU2VydmljZS5oYXNEYXRhYmFzZVRhYmxlKHRoaXMuZGF0YWJhc2UhLnRhYmxlKS5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgodGFibGVFeGlzdHM6IGJvb2xlYW4pOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xuXG4gICAgICAgICAgICAgICAgICBpZiAoIXRhYmxlRXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluaXRPYnM6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuaW5pdERCU3RvcmFnZUFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbml0T2JzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IGZldGNoRnJvbUFQSSgpKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbFN0b3JhZ2VNYW5hZ2VyU2VydmljZS5zdG9yZSQodGhpcy5kYXRhYmFzZSEudGFibGUpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoc3RvcmVEYXRhOiBhbnkpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cGlyZXMgPSBzdG9yZURhdGE/LmV4cGlyZXMgfHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNFeHBpcmVkID0gZXhwaXJlcyA+IDAgJiYgdGhpcy51dGlscy5oYXNFeHBpcmVkKGV4cGlyZXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0V4cGlyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRiTWFuYWdlclNlcnZpY2UuY2xlYXJUYWJsZSh0aGlzLmRhdGFiYXNlIS50YWJsZSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IGZldGNoRnJvbUFQSSgpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZU1hbmFnZXJTZXJ2aWNlLnVwZGF0ZVN0b3JlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuZGF0YWJhc2UhLnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogeyAuLi50aGlzLmRhdGFiYXNlLCAuLi57IGV4cGlyZXM6IHRoaXMudXRpbHMuZXhwaXJlcyh0aGlzLmRhdGFiYXNlIS5leHBpcmVzSW4pfSB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGJNYW5hZ2VyU2VydmljZS5nZXRUYWJsZVJlY29yZHModGhpcy5kYXRhYmFzZSEudGFibGUpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKGRiRGF0YTogYW55KSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGJEYXRhKSAmJiBkYkRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YSQoZGJEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoZGJEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaEZyb21BUEkoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmZXRjaEZyb21BUEkoKTtcblxuICAgICAgfSlcbiAgICApXG4gIClcblxuICBwcml2YXRlIGluaXREQlN0b3JhZ2VBc3luYygpIHtcblxuICAgIGlmICh0aGlzLmRhdGFUeXBlICE9PSBEYXRhVHlwZS5BUlJBWSkge1xuICAgICAgY29uc29sZS53YXJuKCdEYXRhYmFzZSBzdG9yYWdlIHJlcXVpcmVzIGRhdGFUeXBlIHRvIGJlIEFSUkFZJyk7XG4gICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmFwaU9wdGlvbnMuYWRhcHRlcikge1xuICAgICAgY29uc29sZS53YXJuKCdEYXRhYmFzZSBzdG9yYWdlIHJlcXVpcmVzIGFuIGFkYXB0ZXIgdG8gZGVmaW5lIHRoZSBkYXRhIHNoYXBlJyk7XG4gICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRhdGFiYXNlPy50YWJsZSkge1xuICAgICAgY29uc29sZS53YXJuKCdEYXRhYmFzZSBzdG9yYWdlIHJlcXVpcmVzIGEgdGFibGUgbmFtZScpO1xuICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgIH1cblxuICAgIGNvbnN0IHNhbXBsZURhdGEgPSB0aGlzLmFwaU9wdGlvbnMuYWRhcHRlcj8uKHt9KSB8fCB7fTtcbiAgICBjb25zdCBzY2hlbWFLZXlzID0gT2JqZWN0LmtleXMoc2FtcGxlRGF0YSkuZmlsdGVyKGtleSA9PiBzYW1wbGVEYXRhW2tleV0gIT09IHVuZGVmaW5lZCk7XG5cbiAgICBsZXQgc2NoZW1hID0gJysraWQnO1xuXG4gICAgaWYgKHNjaGVtYUtleXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgb3RoZXJLZXlzID0gc2NoZW1hS2V5cy5maWx0ZXIoayA9PiBrICE9PSAnaWQnKTtcbiAgICAgIGlmIChvdGhlcktleXMubGVuZ3RoID4gMCkge1xuICAgICAgICBzY2hlbWEgKz0gJywgJyArIG90aGVyS2V5cy5qb2luKCcsICcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHRhYmxlRGVmID0gVGFibGVTY2hlbWFEZWYuYWRhcHQoe1xuICAgICAgdGFibGU6IHRoaXMuZGF0YWJhc2U/LnRhYmxlLFxuICAgICAgc2NoZW1hOiBzY2hlbWFcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmRiTWFuYWdlclNlcnZpY2UuY3JlYXRlRGF0YWJhc2VUYWJsZSh0YWJsZURlZik7XG5cbiAgfVxuXG4gIC8vIEZFVENIIFJFQ09SRFxuICByZWFkb25seSBmZXRjaFJlY29yZCA9IChvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucywgbWV0aG9kOiBzdHJpbmcpID0+XG4gICAgdGhpcy5lZmZlY3Q8YW55PigoKSA9PlxuICAgIG9mKFJlcXVlc3RPcHRpb25zLmFkYXB0KG9wdGlvbnMpKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChvcHRpb25zKSA9PiB7XG5cbiAgICAgICAgdGhpcy5zdHJlYW1lZFJlc3BvbnNlID0gW11cbiAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB0aGlzLnVwZGF0ZVJlcXVlc3RPcHRpb25zKG9wdGlvbnM/LmhlYWRlcnMpXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLmdldFJlcXVlc3QocmVxdWVzdE9wdGlvbnMsIG9wdGlvbnM/LnBhdGgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoZGF0YTogYW55KSA9PiB7XG5cbiAgICAgICAgICAgIGRhdGEgPSAoIWRhdGEpID8gKHRoaXMuZGF0YVR5cGUgPT09IERhdGFUeXBlLkFSUkFZKSA/IFtdIDoge30gOiBkYXRhXG5cbiAgICAgICAgICAgIGNvbnN0IGlkID0gKG9wdGlvbnMgYXMgYW55KS5wYXRoPy5sZW5ndGggPyBvcHRpb25zLnBhdGhbb3B0aW9ucy5wYXRoLmxlbmd0aCAtMV0gOiBudWxsXG5cbiAgICAgICAgICAgIGlmKG1ldGhvZCA9PT0gJ0RFTEVURScpIHRoaXMuZGVsZXRlRGF0YSQoeyBpZCB9IGFzIFQgJiB7IGlkOiBudW1iZXIgfSlcbiAgICAgICAgICAgIGlmKG1ldGhvZCA9PT0gJ1VQREFURScpIHRoaXMudXBkYXRlRGF0YSQoZGF0YSlcbiAgICAgICAgICAgIGlmKG1ldGhvZCA9PT0gJ0NSRUFURScpIHRoaXMuYWRkRGF0YSQoZGF0YSlcblxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNvbmNhdE1hcCgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNEYXRhYmFzZSAmJiB0aGlzLmRhdGFiYXNlPy50YWJsZSkge1xuICAgICAgICAgICAgICBjb25zdCBpZCA9IChvcHRpb25zIGFzIGFueSkucGF0aD8ubGVuZ3RoID8gb3B0aW9ucy5wYXRoW29wdGlvbnMucGF0aC5sZW5ndGggLTFdIDogbnVsbFxuXG4gICAgICAgICAgICAgIGlmKG1ldGhvZCA9PT0gJ0RFTEVURScgJiYgaWQpIHJldHVybiB0aGlzLmRiTWFuYWdlclNlcnZpY2UuZGVsZXRlVGFibGVSZWNvcmQodGhpcy5kYXRhYmFzZS50YWJsZSwgaWQpXG4gICAgICAgICAgICAgIGlmKG1ldGhvZCA9PT0gJ1VQREFURScgJiYgZGF0YSkgcmV0dXJuIHRoaXMuZGJNYW5hZ2VyU2VydmljZS51cGRhdGVUYWJsZVJlY29yZCh0aGlzLmRhdGFiYXNlLnRhYmxlLCBkYXRhKVxuICAgICAgICAgICAgICBpZihtZXRob2QgPT09ICdDUkVBVEUnICYmIGRhdGEpIHJldHVybiB0aGlzLmRiTWFuYWdlclNlcnZpY2UuY3JlYXRlVGFibGVSZWNvcmQodGhpcy5kYXRhYmFzZS50YWJsZSwgZGF0YSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvZihkYXRhKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcblxuICAgICAgfSlcbiAgICApXG4gIClcblxuICAvLyBDUkVBVEUgUkVDT1JEXG4gIHJlYWRvbmx5IGNyZWF0ZVJlY29yZCA9IChkYXRhOiBhbnl8bnVsbCwgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKSA9PlxuICAgIHRoaXMuZWZmZWN0PGFueT4oKCkgPT5cbiAgICAgIG9mKGRhdGEpLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoZGF0YTogYW55KSA9PiB7XG5cbiAgICAgICAgdGhpcy5zdHJlYW1lZFJlc3BvbnNlID0gW11cbiAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB0aGlzLnVwZGF0ZVJlcXVlc3RPcHRpb25zKG9wdGlvbnM/LmhlYWRlcnMpXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLnBvc3RSZXF1ZXN0KGRhdGEsIHJlcXVlc3RPcHRpb25zLCBvcHRpb25zPy5wYXRoKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgZGF0YSA9ICghZGF0YSkgPyAodGhpcy5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuQVJSQVkpID8gW10gOiB7fSA6IGRhdGFcbiAgICAgICAgICAgIHRoaXMuYWRkRGF0YSQoZGF0YSlcbiAgICAgICAgICAgIGlmKHRoaXMud3NDb25uZWN0aW9uKSB0aGlzLndzQ29tbXVuaWNhdGlvbignQ1JFQVRFJywgWy4uLm9wdGlvbnM/LnBhdGggfHwgW10sIGRhdGEuaWRdKVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNvbmNhdE1hcCgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNEYXRhYmFzZSAmJiB0aGlzLmRhdGFiYXNlPy50YWJsZSAmJiBkYXRhPy5pZCkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYk1hbmFnZXJTZXJ2aWNlLmNyZWF0ZVRhYmxlUmVjb3JkKHRoaXMuZGF0YWJhc2UudGFibGUsIGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9mKGRhdGEpO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcblxuICAgICAgfSlcbiAgICApXG4gIClcblxuICAvLyBVUERBVEUgUkVDT1JEXG4gIHJlYWRvbmx5IHVwZGF0ZVJlY29yZCA9IChkYXRhOiBhbnl8bnVsbCwgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKSA9PlxuICAgIHRoaXMuZWZmZWN0PGFueT4oKCkgPT5cbiAgICBvZihkYXRhKS5waXBlKFxuICAgICAgY29uY2F0TWFwKChkYXRhOiBhbnkpID0+IHtcblxuICAgICAgICB0aGlzLnN0cmVhbWVkUmVzcG9uc2UgPSBbXVxuICAgICAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHRoaXMudXBkYXRlUmVxdWVzdE9wdGlvbnMob3B0aW9ucz8uaGVhZGVycylcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwTWFuYWdlclNlcnZpY2UucHV0UmVxdWVzdChkYXRhLCByZXF1ZXN0T3B0aW9ucywgb3B0aW9ucz8ucGF0aClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGRhdGEgPSAoIWRhdGEpID8gKHRoaXMuZGF0YVR5cGUgPT09IERhdGFUeXBlLkFSUkFZKSA/IFtdIDoge30gOiBkYXRhXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURhdGEkKGRhdGEpXG4gICAgICAgICAgICBpZih0aGlzLndzQ29ubmVjdGlvbikgdGhpcy53c0NvbW11bmljYXRpb24oJ1VQREFURScsIFsuLi5vcHRpb25zPy5wYXRoIHx8IFtdXSlcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjb25jYXRNYXAoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzRGF0YWJhc2UgJiYgdGhpcy5kYXRhYmFzZT8udGFibGUgJiYgZGF0YT8uaWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGJNYW5hZ2VyU2VydmljZS51cGRhdGVUYWJsZVJlY29yZCh0aGlzLmRhdGFiYXNlLnRhYmxlLCBkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvZihkYXRhKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG5cbiAgICAgIH0pXG4gICAgKVxuICApXG5cbiAgLy8gREVMRVRFIFJFQ09SRFxuICByZWFkb25seSBkZWxldGVSZWNvcmQgPSAob3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKSA9PlxuICAgIHRoaXMuZWZmZWN0PGFueT4oKCkgPT5cbiAgICBvZihvcHRpb25zKS5waXBlKFxuICAgICAgY29uY2F0TWFwKChkYXRhOiBhbnkpID0+IHtcblxuICAgICAgICB0aGlzLnN0cmVhbWVkUmVzcG9uc2UgPSBbXVxuICAgICAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHRoaXMudXBkYXRlUmVxdWVzdE9wdGlvbnMob3B0aW9ucz8uaGVhZGVycylcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuZGVsZXRlUmVxdWVzdChyZXF1ZXN0T3B0aW9ucywgb3B0aW9ucz8ucGF0aClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGRhdGEgPSAoIWRhdGEpID8gKHRoaXMuZGF0YVR5cGUgPT09IERhdGFUeXBlLkFSUkFZKSA/IFtdIDoge30gOiBkYXRhXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZURhdGEkKGRhdGEpXG4gICAgICAgICAgICBpZih0aGlzLndzQ29ubmVjdGlvbikgdGhpcy53c0NvbW11bmljYXRpb24oJ0RFTEVURScsIFsuLi5vcHRpb25zPy5wYXRoIHx8IFtdXSlcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjb25jYXRNYXAoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzRGF0YWJhc2UgJiYgdGhpcy5kYXRhYmFzZT8udGFibGUgJiYgZGF0YT8uaWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGJNYW5hZ2VyU2VydmljZS5kZWxldGVUYWJsZVJlY29yZCh0aGlzLmRhdGFiYXNlLnRhYmxlLCBkYXRhLmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvZihkYXRhKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG5cbiAgICAgIH0pXG4gICAgKVxuICApXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gRkVUQ0ggU1RSRUFNXG5cbiAgcmVhZG9ubHkgY3JlYXRlU3RyZWFtID0gKGRhdGE6IGFueXxudWxsLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpID0+XG4gICAgdGhpcy5lZmZlY3Q8YW55PigoKSA9PlxuICAgIG9mKGRhdGEpLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuaXNQZW5kaW5nLm5leHQodHJ1ZSkpLFxuICAgICAgc3dpdGNoTWFwKChkYXRhOiBhbnkpID0+IHtcblxuICAgICAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHRoaXMudXBkYXRlUmVxdWVzdE9wdGlvbnMob3B0aW9ucz8uaGVhZGVycylcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwTWFuYWdlclNlcnZpY2UucG9zdFJlcXVlc3QoZGF0YSwgcmVxdWVzdE9wdGlvbnMsIG9wdGlvbnM/LnBhdGgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmKHJlcy5sZW5ndGggPiAwKSB0aGlzLnNldERhdGEkKHJlcylcbiAgICAgICAgICAgIHRoaXMuc3RyZWFtZWRSZXNwb25zZSA9IHJlc1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHNjYW4oKGFjYywgcmVzOiBhbnkpID0+IHtcblxuICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSBhY2MuY3VycmVudFxuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IHJlc1xuICAgICAgICAgICAgcmV0dXJuIHsgcHJldmlvdXMsIGN1cnJlbnQgfTtcblxuICAgICAgICAgIH0sIHsgcHJldmlvdXM6IG51bGwsIGN1cnJlbnQ6IG51bGwgfSksXG4gICAgICAgICAgdGFwKCh7IHByZXZpb3VzLCBjdXJyZW50IH0pID0+IHtcblxuICAgICAgICAgICAgaWYocHJldmlvdXMgJiYgSlNPTi5zdHJpbmdpZnkocHJldmlvdXMpID09PSBKU09OLnN0cmluZ2lmeShjdXJyZW50KSkge1xuICAgICAgICAgICAgICB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5pc1BlbmRpbmcubmV4dChmYWxzZSlcbiAgICAgICAgICAgICAgdGhpcy5zZXREYXRhJChbXSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLmlzUGVuZGluZy5uZXh0KHRydWUpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9KVxuICAgICAgICApXG5cbiAgICAgIH0pXG4gICAgKVxuXG4gIClcblxuICByZWFkb25seSBmZXRjaFN0cmVhbSA9IChvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpID0+XG4gICAgdGhpcy5lZmZlY3Q8YW55PigoKSA9PlxuICAgIG9mKG9wdGlvbnMpLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuaXNQZW5kaW5nLm5leHQodHJ1ZSkpLFxuICAgICAgc3dpdGNoTWFwKChvcHRpb25zOiBhbnkpID0+IHtcblxuICAgICAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHRoaXMudXBkYXRlUmVxdWVzdE9wdGlvbnMob3B0aW9ucz8uaGVhZGVycylcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuc3RyZWFtID0gdHJ1ZVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5nZXRSZXF1ZXN0KHJlcXVlc3RPcHRpb25zLCBvcHRpb25zPy5wYXRoKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKHJlczogYW55KSA9PiB7XG5cbiAgICAgICAgICAgIGlmKHJlcy5sZW5ndGggPiAwKSB0aGlzLnNldERhdGEkKHJlcylcbiAgICAgICAgICAgIHRoaXMuc3RyZWFtZWRSZXNwb25zZSA9IHJlc1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHNjYW4oKGFjYywgcmVzOiBhbnkpID0+IHtcblxuICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSBhY2MuY3VycmVudFxuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IHJlc1xuICAgICAgICAgICAgcmV0dXJuIHsgcHJldmlvdXMsIGN1cnJlbnQgfVxuXG4gICAgICAgICAgfSwgeyBwcmV2aW91czogbnVsbCwgY3VycmVudDogbnVsbCB9KSxcbiAgICAgICAgICB0YXAoKHsgcHJldmlvdXMsIGN1cnJlbnQgfSkgPT4ge1xuXG4gICAgICAgICAgICBpZihwcmV2aW91cyAmJiBKU09OLnN0cmluZ2lmeShwcmV2aW91cykgPT09IEpTT04uc3RyaW5naWZ5KGN1cnJlbnQpKSB7XG4gICAgICAgICAgICAgIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLmlzUGVuZGluZy5uZXh0KGZhbHNlKVxuICAgICAgICAgICAgICB0aGlzLnNldERhdGEkKFtdKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuaXNQZW5kaW5nLm5leHQodHJ1ZSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0pXG4gICAgICAgIClcblxuICAgICAgfSksXG4gICAgKVxuICApXG5cbiAgcHJpdmF0ZSB3c0NvbW11bmljYXRpb24obWV0aG9kOiBzdHJpbmcsIHBhdGg/OiBzdHJpbmd8bnVtYmVyW10pIHtcblxuICAgIGlmKHRoaXMud3NDb25uZWN0aW9uICYmIHRoaXMuYXBpT3B0aW9ucy53cykge1xuICAgICAgY29uc3Qgd3NTZXJ2ZXIgPSB0aGlzLmFwaU9wdGlvbnMud3MuaWRcbiAgICAgIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLnNlbmRNZXNzYWdlSW5DaGFubmVsKHdzU2VydmVyLCB7IG1ldGhvZCwgcGF0aCB9KVxuICAgIH1cblxuICB9XG5cbiAgd3NNZXNzYWdpbmcobWVzc2FnZTogQ2hhbm5lbE1lc3NhZ2UsIGNoYW5uZWw/OiBzdHJpbmcpIHtcblxuICAgIGNvbnN0IHVzZXIgPSB0aGlzLndzT3B0aW9ucz8udXNlckFkYXB0ZXI/LmFkYXB0ZXI/Lih0aGlzLnVzZXIudmFsdWUpIHx8IHRoaXMudXNlci52YWx1ZVxuICAgIGNvbnN0IG1lc3NhZ2VJbmZvID0gQ2hhbm5lbE1lc3NhZ2UuYWRhcHQoeyAuLi5tZXNzYWdlLCBmcm9tVXNlcjogdXNlciB9KVxuXG4gICAgaWYodGhpcy53c0Nvbm5lY3Rpb24gJiYgdGhpcy5hcGlPcHRpb25zLndzKSB7XG5cbiAgICAgIGNvbnN0IHdzU2VydmVyID0gKGNoYW5uZWwpID8gY2hhbm5lbCA6IHRoaXMuYXBpT3B0aW9ucy53cy5pZFxuXG4gICAgICBpZihtZXNzYWdlSW5mby50b1VzZXIgPT09ICdhbGxDaGFubmVscycpIHtcbiAgICAgICAgdGhpcy5odHRwTWFuYWdlclNlcnZpY2Uuc2VuZEJyb2FkY2FzdChtZXNzYWdlSW5mbylcbiAgICAgIH0gZWxzZSBpZihtZXNzYWdlSW5mby50b1VzZXIgPT09ICdhbGxJbkNoYW5uZWwnKSB7XG4gICAgICAgIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLnNlbmRNZXNzYWdlSW5DaGFubmVsKHdzU2VydmVyLCBtZXNzYWdlSW5mbylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLnNlbmRNZXNzYWdlVG9Vc2VyKHdzU2VydmVyLCBtZXNzYWdlSW5mbylcbiAgICAgIH1cblxuICAgIH1cblxuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTUlTQ1xuXG4gIHByaXZhdGUgaXNFbXB0eShvYmo6IGFueSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMFxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVSZXF1ZXN0T3B0aW9ucyhoZWFkZXJzPzogYW55KTogQXBpUmVxdWVzdCB7XG5cbiAgICBjb25zdCBvcHRpb25zID0gQXBpUmVxdWVzdC5hZGFwdCh7IC4uLnRoaXMuYXBpT3B0aW9ucyB9KVxuXG4gICAgb3B0aW9ucy5oZWFkZXJzID0gKGhlYWRlcnMpXG4gICAgICAgICAgPyB7IC4uLm9wdGlvbnMuaGVhZGVycywgLi4uaGVhZGVycyB9XG4gICAgICAgICAgOiB7IC4uLm9wdGlvbnMuaGVhZGVycyB9XG5cbiAgICByZXR1cm4gb3B0aW9uc1xuICB9XG5cbn1cbiJdfQ==
594
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1tYW5hZ2VyLXN0YXRlLnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9yZXF1ZXN0LW1hbmFnZXItc3RhdGUtc2VydmljZS9odHRwLW1hbmFnZXItc3RhdGUuc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGVBQWUsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFnQixLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVGLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2SSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pFLE9BQU8sRUFBZSxjQUFjLEVBQWUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ2pGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxXQUFXLEVBQUUsTUFBTSxr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LENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQTtJQUN0QyxDQUFDO0lBRU8sb0JBQW9CLENBQUMsT0FBYTtRQUV4QyxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQTtRQUV4RCxPQUFPLENBQUMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRTtZQUNwQyxDQUFDLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUU5QixPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDOytHQWgxQlUsdUJBQXVCLGtCQWdFeEIsUUFBUSxhQUNSLFVBQVUsYUFDVixVQUFVO21IQWxFVCx1QkFBdUI7OzRGQUF2Qix1QkFBdUI7a0JBRG5DLFVBQVU7OzBCQWlFTixNQUFNOzJCQUFDLFFBQVE7OzBCQUNmLE1BQU07MkJBQUMsVUFBVTs7MEJBQ2pCLE1BQU07MkJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50U3RvcmUgfSBmcm9tICdAbmdyeC9jb21wb25lbnQtc3RvcmUnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRpbWVyLCBtZXJnZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwLCBzd2l0Y2hNYXAsIGNvbmNhdE1hcCwgc2NhbiwgZGVsYXksIHRha2UsIG1hcCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCwgdGFrZVdoaWxlLCBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEYXRhYmFzZVN0b3JhZ2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvZGF0YWJhc2Utc3RvcmFnZS5tb2RlbCc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0LCBSZXF1ZXN0T3B0aW9ucywgV1NPcHRpb25zIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgQ2hhbm5lbEluZm8sIENoYW5uZWxNZXNzYWdlLCBVc2VyTWVzc2FnZSB9IGZyb20gJy4uL3dzLW1hbmFnZXItc2VydmljZS9tb2RlbHMnO1xuaW1wb3J0IHsgSFRUUE1hbmFnZXJTZXJ2aWNlLCBEYXRhVHlwZSB9IGZyb20gJy4uL3JlcXVlc3QtbWFuYWdlci1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBEYXRhYmFzZU1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vZGF0YWJhc2UtbWFuYWdlci1zZXJ2aWNlJztcbmltcG9ydCB7IFRhYmxlU2NoZW1hRGVmIH0gZnJvbSAnLi4vZGF0YWJhc2UtbWFuYWdlci1zZXJ2aWNlL21vZGVscy90YWJsZS1zY2hlbWEnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlTWFuYWdlclNlcnZpY2UsIFN0b3JhZ2VUeXBlIH0gZnJvbSAnLi4vbG9jYWwtc3RvcmFnZS1tYW5hZ2VyLXNlcnZpY2UnO1xuaW1wb3J0IHsgU2V0dGluZ09wdGlvbnMgfSBmcm9tICcuLi9sb2NhbC1zdG9yYWdlLW1hbmFnZXItc2VydmljZS9tb2RlbHMvc2V0dGluZy1vcHRpb25zLm1vZGVsJztcbmltcG9ydCB7IFV0aWxzU2VydmljZSB9IGZyb20gJy4uLy4uJztcblxuY29uc3QgQVBJX09QVFMgPSBuZXcgSW5qZWN0aW9uVG9rZW48QXBpUmVxdWVzdD4oJ0FQSV9PUFRTJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVBJU3RhdGVNYW5hZ2VyRGF0YTxUPiB7XG4gIGRhdGE6IFRbXVxuICBkYXRhT2JqZWN0OiBUIHwgbnVsbFxufVxuXG5jb25zdCBkZWZhdWx0U3RhdGU6IEFQSVN0YXRlTWFuYWdlckRhdGE8YW55PiA9IHtcbiAgZGF0YTogW10sXG4gIGRhdGFPYmplY3Q6IG51bGwsXG59O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSFRUUE1hbmFnZXJTdGF0ZVNlcnZpY2U8VCBleHRlbmRzIHsgaWQ6IG51bWJlcnxzdHJpbmcgfT4gZXh0ZW5kcyBDb21wb25lbnRTdG9yZTxBUElTdGF0ZU1hbmFnZXJEYXRhPFQ+PiB7XG5cbiAgaHR0cE1hbmFnZXJTZXJ2aWNlID0gaW5qZWN0KEhUVFBNYW5hZ2VyU2VydmljZSlcbiAgZGJNYW5hZ2VyU2VydmljZSA9IGluamVjdChEYXRhYmFzZU1hbmFnZXJTZXJ2aWNlKVxuICBsb2NhbFN0b3JhZ2VNYW5hZ2VyU2VydmljZSA9IGluamVjdChMb2NhbFN0b3JhZ2VNYW5hZ2VyU2VydmljZSlcbiAgdXRpbHMgPSBpbmplY3QoVXRpbHNTZXJ2aWNlKVxuXG4gIGVycm9yJCA9IHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLmVycm9yJFxuICBpc1BlbmRpbmckID0gdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuaXNQZW5kaW5nJC5waXBlKGRlbGF5KDEpKVxuXG4gIC8vIFBBR0lOQVRJT05cbiAgcHJpdmF0ZSBwYWdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApXG4gIHBhZ2UkID0gdGhpcy5wYWdlLmFzT2JzZXJ2YWJsZSgpXG5cbiAgcHJpdmF0ZSB0b3RhbFBhZ2VzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApXG4gIHRvdGFsUGFnZXMkID0gdGhpcy50b3RhbFBhZ2VzLmFzT2JzZXJ2YWJsZSgpXG5cbiAgcHJpdmF0ZSBwZXJjZW50YWdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApXG4gIHBlcmNlbnRhZ2UkID0gdGhpcy5wZXJjZW50YWdlLmFzT2JzZXJ2YWJsZSgpXG5cbiAgcHJpdmF0ZSBoYXNEYXRhYmFzZSA9IGZhbHNlXG5cbiAgc3RyZWFtZWRSZXNwb25zZSA9IFtdXG5cbiAgLy8gV1NcbiAgcHJpdmF0ZSBtYXhSZXRyaWVzOiBudW1iZXJcbiAgcHJpdmF0ZSByZXRyeURlbGF5OiBudW1iZXJcbiAgcHJpdmF0ZSBzaG91bGRSZXRyeSA9IHRydWVcblxuICBwcml2YXRlIHdzUmV0cnlBdHRlbXB0cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKVxuICB3c1JldHJ5QXR0ZW1wdHMkID0gdGhpcy53c1JldHJ5QXR0ZW1wdHMuYXNPYnNlcnZhYmxlKClcblxuICBwcml2YXRlIHdzTmV4dFJldHJ5OiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPlxuICB3c05leHRSZXRyeSQ6IE9ic2VydmFibGU8bnVtYmVyPlxuXG5cbiAgbWVzc2FnZXMkOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgY29ubmVjdGlvblN0YXR1cyQ6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgdXNlckxpc3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSlcbiAgdXNlckxpc3QkID0gdGhpcy51c2VyTGlzdC5hc09ic2VydmFibGUoKVxuXG4gIHByaXZhdGUgdXNlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55fG51bGw+KG51bGwpXG4gIHVzZXIkID0gdGhpcy51c2VyLmFzT2JzZXJ2YWJsZSgpXG5cbiAgcHJpdmF0ZSBjb21tdW5pY2F0aW9uTWVzc2FnZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFVzZXJNZXNzYWdlW10+KFtdKVxuICBjb21tdW5pY2F0aW9uTWVzc2FnZXMkID0gdGhpcy5jb21tdW5pY2F0aW9uTWVzc2FnZXMuYXNPYnNlcnZhYmxlKClcblxuICBwcml2YXRlIGxhdGVzdENvbW11bmljYXRpb25NZXNzYWdlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VXNlck1lc3NhZ2V8bnVsbD4obnVsbClcbiAgbGF0ZXN0Q29tbXVuaWNhdGlvbk1lc3NhZ2VzJCA9IHRoaXMubGF0ZXN0Q29tbXVuaWNhdGlvbk1lc3NhZ2VzLmFzT2JzZXJ2YWJsZSgpXG5cbiAgcHJpdmF0ZSB1c2VyQWN0aW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnl8bnVsbD4obnVsbClcbiAgdXNlckFjdGlvbiQgPSB0aGlzLnVzZXJBY3Rpb24uYXNPYnNlcnZhYmxlKClcblxuICBjaGFubmVsczogQ2hhbm5lbEluZm9bXSA9IFtdXG4gIGNoYW5uZWxMaXN0OiBzdHJpbmdbXSA9IFtdXG4gIG1lc3NhZ2VzOiBhbnlbXSA9IFtdXG5cbiAgd3NDb25uZWN0aW9uID0gZmFsc2VcbiAgd3NPcHRpb25zID0gV1NPcHRpb25zLmFkYXB0KClcblxuICBwdWJsaWMgc3RhdHVzJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KEFQSV9PUFRTKSBwcml2YXRlIGFwaU9wdGlvbnMgPSBBcGlSZXF1ZXN0LmFkYXB0KCksXG4gICAgQEluamVjdChcImRhdGFUeXBlXCIpIHByaXZhdGUgZGF0YVR5cGU6IERhdGFUeXBlIHwgdW5kZWZpbmVkLFxuICAgIEBJbmplY3QoXCJkYXRhYmFzZVwiKSBwcml2YXRlIGRhdGFiYXNlPzogRGF0YWJhc2VTdG9yYWdlIHwgdW5kZWZpbmVkXG4gICkge1xuXG4gICAgc3VwZXIoZGVmYXVsdFN0YXRlKTtcblxuICAgIHRoaXMubWF4UmV0cmllcyA9IHRoaXMuYXBpT3B0aW9ucy53cz8ucmV0cnk/LnRpbWVzIHx8IDNcbiAgICB0aGlzLnJldHJ5RGVsYXkgPSAodGhpcy5hcGlPcHRpb25zLndzPy5yZXRyeT8uZGVsYXkgJiYgdGhpcy5hcGlPcHRpb25zLndzLnJldHJ5LmRlbGF5ICogMTAwMCkgfHwgNSAqIDEwMDBcbiAgICB0aGlzLndzTmV4dFJldHJ5ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KHRoaXMucmV0cnlEZWxheSlcbiAgICB0aGlzLndzTmV4dFJldHJ5JCA9IHRoaXMud3NOZXh0UmV0cnkuYXNPYnNlcnZhYmxlKClcblxuICAgIHRoaXMuc2V0QXBpUmVxdWVzdE9wdGlvbnMoYXBpT3B0aW9ucywgZGF0YVR5cGUsIGRhdGFiYXNlKVxuICAgIHRoaXMuc3RhdHVzJCA9IHRoaXMuc2V0dXBDb25uZWN0aW9uU3RhdHVzKCk7XG5cbiAgICBpZiAodGhpcy5kYXRhYmFzZSAmJiB0aGlzLmRhdGFiYXNlLnRhYmxlKSB7XG5cbiAgICAgIHRoaXMubG9jYWxTdG9yYWdlTWFuYWdlclNlcnZpY2UuY3JlYXRlU3RvcmUoe1xuICAgICAgICBuYW1lOiB0aGlzLmRhdGFiYXNlLnRhYmxlLFxuICAgICAgICBkYXRhOiB7IC4uLnRoaXMuZGF0YWJhc2UsIC4uLnsgZXhwaXJlczogdGhpcy51dGlscy5leHBpcmVzKHRoaXMuZGF0YWJhc2UuZXhwaXJlc0luKX0gfSxcbiAgICAgICAgb3B0aW9uczogU2V0dGluZ09wdGlvbnMuYWRhcHQoe1xuICAgICAgICAgIHN0b3JhZ2U6IFN0b3JhZ2VUeXBlLkdMT0JBTCxcbiAgICAgICAgICBlbmNyeXB0ZWQ6IGZhbHNlLFxuICAgICAgICB9KVxuICAgICAgfSlcblxuICAgIH1cblxuICB9XG5cbiAgc2V0QXBpUmVxdWVzdE9wdGlvbnMoYXBpT3B0aW9ucz86IEFwaVJlcXVlc3QsIGRhdGFUeXBlPzogRGF0YVR5cGUsIGRhdGFiYXNlPzogRGF0YWJhc2VTdG9yYWdlKSB7XG5cbiAgICB0aGlzLmFwaU9wdGlvbnMgPSBBcGlSZXF1ZXN0LmFkYXB0KGFwaU9wdGlvbnMpXG4gICAgdGhpcy5kYXRhVHlwZSA9IChkYXRhVHlwZSkgPyBkYXRhVHlwZSA6IERhdGFUeXBlLkFSUkFZXG5cbiAgICB0aGlzLmhhc0RhdGFiYXNlID0gKHRoaXMuZGF0YWJhc2U/LnRhYmxlKSA/IHRydWUgOiBmYWxzZVxuICAgIHRoaXMuZGF0YWJhc2UgPSAodGhpcy5oYXNEYXRhYmFzZSkgPyBEYXRhYmFzZVN0b3JhZ2UuYWRhcHQoZGF0YWJhc2UpIDogdW5kZWZpbmVkXG5cbiAgICBpZih0aGlzLmRhdGFiYXNlKSB0aGlzLmluaXREQlN0b3JhZ2UoKVxuICAgIGlmKHRoaXMuYXBpT3B0aW9ucy53cykgdGhpcy5pbml0V1ModGhpcy5hcGlPcHRpb25zLndzIGFzIFdTT3B0aW9ucylcblxuICB9XG5cbiAgLy8gV2ViU29ja2V0XG4gIHByaXZhdGUgc2V0dXBDb25uZWN0aW9uU3RhdHVzKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5jb25uZWN0aW9uU3RhdHVzJC5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHN3aXRjaE1hcChzdGF0dXMgPT4ge1xuXG4gICAgICAgIGlmIChzdGF0dXMgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLnNob3VsZFJldHJ5ID0gdHJ1ZVxuICAgICAgICAgIHRoaXMud3NSZXRyeUF0dGVtcHRzLm5leHQoMCk7XG4gICAgICAgICAgdGhpcy53c05leHRSZXRyeS5uZXh0KDApO1xuICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5zaG91bGRSZXRyeSkgcmV0dXJuIG9mKGZhbHNlKVxuXG4gICAgICAgIGNvbnN0IGNvdW50ZG93bkVuZGVyJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAgICAgcmV0dXJuIHRpbWVyKDAsIHRoaXMucmV0cnlEZWxheSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZSh0aGlzLm1heFJldHJpZXMpLFxuICAgICAgICAgIHRhcChpID0+IHtcblxuICAgICAgICAgICAgY29uc3QgYXR0ZW1wdCA9IGkgKyAxO1xuICAgICAgICAgICAgdGhpcy53c1JldHJ5QXR0ZW1wdHMubmV4dChhdHRlbXB0KTtcbiAgICAgICAgICAgIGNvdW50ZG93bkVuZGVyJC5uZXh0KCk7XG5cbiAgICAgICAgICAgIGlmKHRoaXMuYXBpT3B0aW9ucy53cz8uand0VG9rZW4gIT09ICcnICYmIHRoaXMuYXBpT3B0aW9ucy53cz8ud3NTZXJ2ZXIgIT09ICcnKSB0aGlzLmluaXRXUyh0aGlzLmFwaU9wdGlvbnMud3MgYXMgV1NPcHRpb25zKTtcblxuICAgICAgICAgICAgaWYgKGF0dGVtcHQgPT09IHRoaXMubWF4UmV0cmllcykge1xuICAgICAgICAgICAgICB0aGlzLndzTmV4dFJldHJ5Lm5leHQoMClcbiAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmVycm9yKGDwn5qoIEZBSUxFRCBDT05ORUNUSU9OOiBUcmllZCAjJHthdHRlbXB0fSB0aW1lc2ApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyhg4pqg77iPIFJldHJ5IEF0dGVtcHQgIyR7YXR0ZW1wdH06IFJldHJ5aW5nIGluICR7dGhpcy5yZXRyeURlbGF5IC8gMTAwMH1zYCk7XG4gICAgICAgICAgICAgIGNvbnN0IHNlY29uZHMgPSB0aGlzLnJldHJ5RGVsYXkgLyAxMDAwO1xuXG4gICAgICAgICAgICAgIHRpbWVyKDAsIDEwMDApLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHRpY2sgPT4gc2Vjb25kcyAtIHRpY2spLFxuICAgICAgICAgICAgICAgIHRha2VXaGlsZSh2YWwgPT4gdmFsID49IDApLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbChjb3VudGRvd25FbmRlciQpXG4gICAgICAgICAgICAgICkuc3Vic2NyaWJlKHJlbWFpbmluZyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy53c05leHRSZXRyeS5uZXh0KHJlbWFpbmluZyk7XG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG1hcCgoKSA9PiBmYWxzZSlcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLy8gV2ViU29ja2V0XG4gIHJlYWRvbmx5IGluaXRXUyA9IHRoaXMuZWZmZWN0PFdTT3B0aW9ucz4oKHdzT3B0aW9ucyQpID0+XG4gICAgd3NPcHRpb25zJC5waXBlKFxuICAgICAgdGFwKCh3c09wdGlvbnMpID0+IHtcbiAgICAgICAgdGhpcy53c09wdGlvbnMgPSB3c09wdGlvbnNcbiAgICAgICAgaWYgKHdzT3B0aW9ucz8ud3NTZXJ2ZXIpIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLmNvbm5lY3Qod3NPcHRpb25zLCB3c09wdGlvbnMuand0VG9rZW4pXG4gICAgICB9KSxcbiAgICAgIHN3aXRjaE1hcCgod3NPcHRpb25zKSA9PlxuICAgICAgICBtZXJnZShcbiAgICAgICAgICB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5jb25uZWN0aW9uU3RhdHVzJC5waXBlKFxuICAgICAgICAgICAgdGFwKChpc0Nvbm5lY3RlZDogYW55KSA9PiB7XG5cbiAgICAgICAgICAgICAgdGhpcy53c0Nvbm5lY3Rpb24gPSBpc0Nvbm5lY3RlZFxuXG4gICAgICAgICAgICAgIGlmIChpc0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCfwn5+iIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIG9wZW4uJylcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn8J+UtCBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBjbG9zZWQuJylcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICksXG4gICAgICAgICAgdGhpcy5odHRwTWFuYWdlclNlcnZpY2UubWVzc2FnZXMkLnBpcGUoXG4gICAgICAgICAgICB0YXAoKG1lc3NhZ2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIW1lc3NhZ2UpIHJldHVyblxuXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSZWNlaXZlZDonLCBtZXNzYWdlLnR5cGUpXG5cbiAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXJyb3IgPT09ICdKV1RfSU5WQUxJRCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3VsZFJldHJ5ID0gZmFsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5kaXNjb25uZWN0KClcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChtZXNzYWdlLnR5cGUgPT09ICdzdWNjZXNzJykge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlci5uZXh0KG1lc3NhZ2UuZGF0YSlcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnY2hhbm5lbHNMaXN0JzpcblxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ/CfkqwgQ2hhbm5lbHM6JywgbWVzc2FnZS5jaGFubmVscylcblxuICAgICAgICAgICAgICAgICAgdGhpcy5jaGFubmVsTGlzdCA9IG1lc3NhZ2UuY2hhbm5lbHNcblxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hhbm5lbExpc3QuaW5jbHVkZXMod3NPcHRpb25zLmlkKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5zdWJzY3JpYmVUb0NoYW5uZWwod3NPcHRpb25zLmlkKVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuY3JlYXRlQ2hhbm5lbCh3c09wdGlvbnMuaWQpXG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnc3RhdGVNYW5nZXJNZXNzYWdlJzpcbiAgICAgICAgICAgICAgICAgIGlmKG1lc3NhZ2UuZGF0YS5zZXNzaW9uSWQgIT09IHRoaXMudXNlci52YWx1ZS5zZXNzaW9uSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ/CfkqwgTWVzc2FnZTonLCBtZXNzYWdlLmRhdGEpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlckFjdGlvbi5uZXh0KG1lc3NhZ2UuZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaFJlY29yZChSZXF1ZXN0T3B0aW9ucy5hZGFwdCh7IHBhdGg6IG1lc3NhZ2UuY29udGVudC5wYXRoIH0pLCBtZXNzYWdlLmNvbnRlbnQubWV0aG9kKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAvLyBjYXNlICdjaGFubmVsTWVzc2FnZSc6XG4gICAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZygn8J+SrCBNZXNzYWdlOicsIG1lc3NhZ2UuZGF0YSlcbiAgICAgICAgICAgICAgICAvLyAgIHRoaXMuZmV0Y2hSZWNvcmQoUmVxdWVzdE9wdGlvbnMuYWRhcHQoeyBwYXRoOiBtZXNzYWdlLmNvbnRlbnQucGF0aCB9KSwgbWVzc2FnZS5jb250ZW50Lm1ldGhvZClcbiAgICAgICAgICAgICAgICAvLyAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgLy8gY2FzZSAnY2hhbm5lbENvbW11bmljYXRpb24nOlxuICAgICAgICAgICAgICAgIC8vICAgY29uc29sZS5sb2coJ/CfkqwgTWVzc2FnZSBDb21tdW5pY2F0aW9uOicsIG1lc3NhZ2UuZGF0YSlcbiAgICAgICAgICAgICAgICAvLyAgIHRoaXMuYXBwZW5kTWVzc2FnZXMobWVzc2FnZS5kYXRhKVxuICAgICAgICAgICAgICAgIC8vICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAvLyBjYXNlICdjaGFubmVsQWxlcnRzJzpcbiAgICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCfwn5KsIE1lc3NhZ2UgQWxlcnRzOicsIG1lc3NhZ2UuZGF0YSlcbiAgICAgICAgICAgICAgICAvLyAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAndXNlcnNJbkNoYW5uZWwnOlxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ/CfkaUgVXNlcnM6JywgbWVzc2FnZS5kYXRhLnVzZXJzKVxuICAgICAgICAgICAgICAgICAgdGhpcy51c2VyTGlzdC5uZXh0KG1lc3NhZ2UuZGF0YS51c2VycylcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlKSB0aGlzLm1lc3NhZ2VzLnB1c2gobWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGFwcGVuZE1lc3NhZ2VzKG1lc3NhZ2U6IFVzZXJNZXNzYWdlKSB7XG4gICAgY29uc3QgY3VycmVudE1lc3NhZ2VzID0gdGhpcy5jb21tdW5pY2F0aW9uTWVzc2FnZXMudmFsdWVcbiAgICB0aGlzLmNvbW11bmljYXRpb25NZXNzYWdlcy5uZXh0KFsuLi5jdXJyZW50TWVzc2FnZXMsIG1lc3NhZ2VdKVxuICAgIHRoaXMubGF0ZXN0TWVzc2FnZSgpXG4gIH1cblxuICBsYXRlc3RNZXNzYWdlKCkge1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gdGhpcy5jb21tdW5pY2F0aW9uTWVzc2FnZXMudmFsdWVcbiAgICBjb25zdCBsYXRlc3RNZXNzYWdlID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0xXVxuICAgIHRoaXMubGF0ZXN0Q29tbXVuaWNhdGlvbk1lc3NhZ2VzLm5leHQobGF0ZXN0TWVzc2FnZSlcbiAgfVxuXG4gIGNsZWFyTWVzc2FnZXMoKSB7XG4gICAgdGhpcy5jb21tdW5pY2F0aW9uTWVzc2FnZXMubmV4dChbXSlcbiAgfVxuXG4gIGdldCBBcGlSZXF1ZXN0T3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlPcHRpb25zXG4gIH1cblxuICByZWFkb25seSBpbml0REJTdG9yYWdlID0gdGhpcy5lZmZlY3Q8dm9pZD4oKHRyaWdnZXIkKSA9PlxuICAgIHRyaWdnZXIkLnBpcGUoXG4gICAgICB0YXAoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5kYXRhVHlwZSAhPT0gRGF0YVR5cGUuQVJSQVkpIGNvbnNvbGUud2FybignRGF0YWJhc2Ugc3RvcmFnZSByZXF1aXJlcyBkYXRhVHlwZSB0byBiZSBBUlJBWScpXG4gICAgICAgIGlmICghdGhpcy5hcGlPcHRpb25zLmFkYXB0ZXIpIGNvbnNvbGUud2FybignRGF0YWJhc2Ugc3RvcmFnZSByZXF1aXJlcyBhbiBhZGFwdGVyIHRvIGRlZmluZSB0aGUgZGF0YSBzaGFwZScpXG4gICAgICAgIGlmICh0aGlzLmRhdGFiYXNlICYmIHRoaXMuZGF0YWJhc2U/LnRhYmxlID09PSAnJykgY29uc29sZS53YXJuKCdEYXRhYmFzZSBzdG9yYWdlIHJlcXVpcmVzIGEgdGFibGUgbmFtZScpXG4gICAgICB9KSxcbiAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmRhdGFUeXBlID09PSBEYXRhVHlwZS5BUlJBWSAmJiAhIXRoaXMuYXBpT3B0aW9ucy5hZGFwdGVyICYmICEhdGhpcy5kYXRhYmFzZT8udGFibGUpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2FtcGxlRGF0YSA9IHRoaXMuYXBpT3B0aW9ucy5hZGFwdGVyPy4oe30pIHx8IHt9XG4gICAgICAgIGNvbnN0IHNjaGVtYUtleXMgPSBPYmplY3Qua2V5cyhzYW1wbGVEYXRhKS5maWx0ZXIoa2V5ID0+IHNhbXBsZURhdGFba2V5XSAhPT0gdW5kZWZpbmVkKVxuXG4gICAgICAgIGxldCBzY2hlbWEgPSAnKytpZCdcblxuICAgICAgICBpZiAoc2NoZW1hS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3Qgb3RoZXJLZXlzID0gc2NoZW1hS2V5cy5maWx0ZXIoayA9PiBrICE9PSAnaWQnKVxuICAgICAgICAgIGlmIChvdGhlcktleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc2NoZW1hICs9ICcsICcgKyBvdGhlcktleXMuam9pbignLCAnKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRhYmxlRGVmID0gVGFibGVTY2hlbWFEZWYuYWRhcHQoe1xuICAgICAgICAgIHRhYmxlOiB0aGlzLmRhdGFiYXNlPy50YWJsZSxcbiAgICAgICAgICBzY2hlbWE6IHNjaGVtYVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5kYk1hbmFnZXJTZXJ2aWNlLmNyZWF0ZURhdGFiYXNlVGFibGUodGFibGVEZWYpXG4gICAgICB9KVxuICAgIClcbiAgKVxuXG4gIGluaXRpYWxpemVTdGF0ZShkYXRhOiBhbnkpIHtcbiAgICB0aGlzLnNldERhdGEkKGRhdGEpXG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBTRUxFQ1RPUlNcblxuICByZWFkb25seSBkYXRhJCA9IHRoaXMuc2VsZWN0KCh7IGRhdGEsIGRhdGFPYmplY3QgfSkgPT4ge1xuICAgIGNvbnN0IGlzQXJyYXkgPSggdGhpcy5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuQVJSQVkpID8gdHJ1ZSA6IGZhbHNlXG4gICAgcmV0dXJuIChpc0FycmF5KSA/IGRhdGEgOiBkYXRhT2JqZWN0XG4gIH0pXG5cbiAgcmVhZG9ubHkgc2VsZWN0UmVjb3JkJCA9IChpZDogbnVtYmVyKSA9PiB0aGlzLnNlbGVjdChcbiAgICB0aGlzLmRhdGEkLFxuICAgIChkYXRhKSA9PiB7XG4gICAgICBpZiAodGhpcy5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuQVJSQVkgJiYgQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICByZXR1cm4gZGF0YS5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gaWQpIGFzIFQgfCBudWxsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKGRhdGEgYXMgVCkuaWQgPT09IGlkID8gZGF0YSA6IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIClcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFVQREFURVJTXG4gIHByaXZhdGUgcmVhZG9ubHkgc2V0RGF0YSQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlOiBBUElTdGF0ZU1hbmFnZXJEYXRhPFQ+LCBkYXRhOiBUIHwgVFtdIHwgYW55KSA9PiB7XG5cbiAgICBpZiAoIWRhdGEpIHJldHVybiBzdGF0ZTtcblxuICAgIGlmICh0aGlzLmRhdGFUeXBlID09PSBEYXRhVHlwZS5BUlJBWSkge1xuXG4gICAgICBjb25zdCBkYXRhQXJyYXkgPSBBcnJheS5pc0FycmF5KGRhdGEpID8gZGF0YSA6IFtkYXRhXVxuXG4gICAgICBjb25zdCBzdGF0ZURhdGFTYW1wbGUgPSAoc3RhdGUuZGF0YS5sZW5ndGggPiAwKSA/IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFbMF0pIDogW11cbiAgICAgIGNvbnN0IG5ld0RhdGFTYW1wbGUgPSAoZGF0YUFycmF5Lmxlbmd0aCA+IDApID8gT2JqZWN0LmtleXMoZGF0YUFycmF5WzBdKSA6IFtdXG5cbiAgICAgIGNvbnN0IGlzU2FtZSA9IChzdGF0ZS5kYXRhLmxlbmd0aCA9PT0gMCkgPyBmYWxzZSA6IHN0YXRlRGF0YVNhbXBsZS5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiB2YWx1ZSA9PT0gbmV3RGF0YVNhbXBsZVtpbmRleF0pXG4gICAgICBjb25zdCB1cGRhdGVkRGF0YSA9ICghaXNTYW1lICYmIGRhdGFBcnJheS5sZW5ndGggIT09IDApID8gdGhpcy51cGRhdGVBcnJheVN0YXRlKFtdLCBkYXRhQXJyYXkpIDogdGhpcy51cGRhdGVBcnJheVN0YXRlKHN0YXRlLmRhdGEsIGRhdGFBcnJheSlcblxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGRhdGE6IHVwZGF0ZWREYXRhLCBkYXRhT2JqZWN0OiBudWxsIH0gYXMgQVBJU3RhdGVNYW5hZ2VyRGF0YTxUPjtcblxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkYXRhT2JqZWN0ID0gdGhpcy5pc0VtcHR5KGRhdGEpID8gbnVsbCA6IGRhdGE7XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgZGF0YTogW10sIGRhdGFPYmplY3Q6IGRhdGFPYmplY3QgfSBhcyBBUElTdGF0ZU1hbmFnZXJEYXRhPFQ+O1xuICAgIH1cblxuICB9KVxuXG4gIHByaXZhdGUgdXBkYXRlQXJyYXlTdGF0ZShjdXJyZW50RGF0YTogYW55W10sIG5ld0RhdGE6IGFueVtdKTogYW55W10ge1xuXG4gICAgY29uc3QgZmlsdGVyQ3VycmVudERhdGEgPSAoKSA9PiB7XG4gICAgICBjb25zdCBpZHMgPSB0aGlzLnN0cmVhbWVkUmVzcG9uc2UubWFwKChvYmo6IGFueSkgPT4gb2JqLmlkKVxuICAgICAgcmV0dXJuIGN1cnJlbnREYXRhLmZpbHRlcihvYmogPT4gKG9iai5pZCkgPyBpZHMuaW5jbHVkZXMob2JqLmlkKSA6IG9iailcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJlZEN1cnJlbnREYXRhID0gKHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLmlzUGVuZGluZy52YWx1ZSkgPyBjdXJyZW50RGF0YSA6IGZpbHRlckN1cnJlbnREYXRhKClcblxuICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gZmlsdGVyZWRDdXJyZW50RGF0YS5tYXAoaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld0l0ZW0gPSBuZXdEYXRhLmZpbmQobmV3SXRlbSA9PiB7XG4gICAgICAgICAgY29uc3QgaGFzSWQgPSAobmV3SXRlbT8uaWQgJiYgaXRlbT8uaWQpID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgcmV0dXJuIChoYXNJZCkgPyBuZXdJdGVtLmlkID09PSBpdGVtLmlkIDogSlNPTi5zdHJpbmdpZnkobmV3SXRlbSkgPT09IEpTT04uc3RyaW5naWZ5KGl0ZW0pXG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiAobmV3SXRlbSkgPyB7IC4uLml0ZW0sIC4uLm5ld0l0ZW0gfSA6IGl0ZW1cbiAgICB9KVxuXG4gICAgY29uc3QgYWRkZWREYXRhID0gbmV3RGF0YS5maWx0ZXIobmV3SXRlbSA9PiB7XG4gICAgICByZXR1cm4gIWZpbHRlcmVkQ3VycmVudERhdGEuc29tZShpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBoYXNJZCA9IChuZXdJdGVtPy5pZCAmJiBpdGVtPy5pZCkgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICByZXR1cm4gKGhhc0lkKSA/IGl0ZW0uaWQgPT09IG5ld0l0ZW0uaWQgOiBKU09OLnN0cmluZ2lmeShuZXdJdGVtKSA9PT0gSlNPTi5zdHJpbmdpZnkoaXRlbSlcbiAgICAgIH0pXG4gICAgfSlcblxuICAgIHJldHVybiBbLi4udXBkYXRlZERhdGEsIC4uLmFkZGVkRGF0YV1cblxuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhZGREYXRhJCA9IHRoaXMudXBkYXRlcigoc3RhdGU6IEFQSVN0YXRlTWFuYWdlckRhdGE8VD4sIGRhdGE6IFQpID0+IHtcblxuICBpZiAodGhpcy5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuQVJSQVkpIHtcbiAgICAgIGNvbnN0IGV4aXN0cyA9IHN0YXRlLmRhdGEuc29tZShpdGVtID0+IGl0ZW0uaWQgPT09IGRhdGEuaWQpO1xuXG4gICAgICBpZiAoZXhpc3RzKSB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSBzdGF0ZS5kYXRhLm1hcChpdGVtID0+XG4gICAgICAgICAgaXRlbS5pZCA9PT0gZGF0YS5pZCA/IGRhdGEgOiBpdGVtXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGRhdGE6IHVwZGF0ZWREYXRhIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IFsuLi5zdGF0ZS5kYXRhLCBkYXRhXTtcbiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGRhdGE6IG5ld1N0YXRlIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBkYXRhT2JqZWN0OiBkYXRhIH07XG4gICAgfVxuXG4gIH0pXG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZWxldGVEYXRhJCA9IHRoaXMudXBkYXRlcigoc3RhdGU6IEFQSVN0YXRlTWFuYWdlckRhdGE8VD4sIGRhdGE6IFQgJiB7IGlkOiBudW1iZXIgfSkgPT4ge1xuICAgIGlmICh0aGlzLmRhdGFUeXBlID09PSBEYXRhVHlwZS5BUlJBWSkge1xuICAgIGNvbnN0IG5ld1N0YXRlID0gc3RhdGUuZGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtLmlkICE9PSBkYXRhLmlkKVxuICAgIHJldHVybiB7IC4uLnN0YXRlLCAuLi57IGRhdGE6IG5ld1N0YXRlIH0gfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgLi4ueyBkYXRhT2JqZWN0OiBudWxsIH0gfVxuICAgIH1cbiAgfSlcblxuICBwcml2YXRlIHJlYWRvbmx5IHVwZGF0ZURhdGEkID0gdGhpcy51cGRhdGVyKChzdGF0ZTogQVBJU3RhdGVNYW5hZ2VyRGF0YTxUPiwgZGF0YTogVCkgPT4ge1xuXG4gICAgaWYgKHRoaXMuZGF0YVR5cGUgPT09IERhdGFUeXBlLkFSUkFZKSB7XG5cbiAgICAgIGNvbnN0IG9iakluZGV4ID0gc3RhdGUuZGF0YS5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBkYXRhLmlkKVxuXG4gICAgICBpZiAob2JqSW5kZXggPiAtMSkge1xuICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IFsuLi5zdGF0ZS5kYXRhXVxuICAgICAgICBuZXdTdGF0ZVtvYmpJbmRleF0gPSBkYXRhXG4gICAgICAgIHJldHVybiB7IC4uLnN0YXRlLCAuLi57IGRhdGE6IG5ld1N0YXRlIH0gfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhdGVcblxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgLi4ueyBkYXRhT2JqZWN0OiBkYXRhIH0gfVxuICAgIH1cblxuICB9KVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEVGRkVDVFNcblxuICByZWFkb25seSBjbGVhclJlY29yZHMgPSB0aGlzLmVmZmVjdChkYXRhID0+XG4gICAgZGF0YS5waXBlKFxuXG4gICAgICB0YXAoKCkgPT4ge1xuXG4gICAgICAgIGlmICh0aGlzLmRhdGFUeXBlID09PSBEYXRhVHlwZS5BUlJBWSkge1xuICAgICAgICAgIHRoaXMuc2V0RGF0YSQoW10pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhJCh7fSlcbiAgICAgICAgfVxuXG4gICAgICB9KSxcbiAgICAgIGNvbmNhdE1hcCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmhhc0RhdGFiYXNlICYmIHRoaXMuZGF0YWJhc2U/LnRhYmxlKSB7XG5cbiAgICAgICAgICBjb25zdCBjdXJyZW50RGF0YSA9IHRoaXMuZ2V0KCk/LmRhdGE7XG4gICAgICAgICAgY29uc3QgaWRzVG9EZWxldGUgPSBBcnJheS5pc0FycmF5KGN1cnJlbnREYXRhKSA/IGN1cnJlbnREYXRhLm1hcCgocjogYW55KSA9PiByLmlkKSA6IFtdO1xuXG4gICAgICAgICAgaWYgKGlkc1RvRGVsZXRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRiTWFuYWdlclNlcnZpY2UuZGVsZXRlVGFibGVSZWNvcmRzKHRoaXMuZGF0YWJhc2UudGFibGUsIGlkc1RvRGVsZXRlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICB9KVxuICApKVxuXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gQ1JVRCBPUEVSQVRJT05TXG5cbiAgLy8gRkVUQ0ggUkVDT1JEU1xuICByZWFkb25seSBmZXRjaFJlY29yZHMgPSAob3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKSA9PlxuICAgIHRoaXMuZWZmZWN0PGFueT4oKCkgPT5cbiAgICBvZihSZXF1ZXN0T3B0aW9ucy5hZGFwdChvcHRpb25zKSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG5cbiAgICAgICAgdGhpcy5zdHJlYW1lZFJlc3BvbnNlID0gW11cbiAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB0aGlzLnVwZGF0ZVJlcXVlc3RPcHRpb25zKG9wdGlvbnM/LmhlYWRlcnMpXG5cbiAgICAgICAgY29uc3QgZmV0Y2hGcm9tQVBJID0gKCkgPT4ge1xuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLmdldFJlcXVlc3QocmVxdWVzdE9wdGlvbnMsIG9wdGlvbnM/LnBhdGgpLnBpcGUoXG4gICAgICAgICAgICB0YXAoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBkYXRhID0gKCFkYXRhKSA/ICh0aGlzLmRhdGFUeXBlID09PSBEYXRhVHlwZS5BUlJBWSkgPyBbXSA6IHt9IDogZGF0YVxuICAgICAgICAgICAgICB0aGlzLnNldERhdGEkKGRhdGEpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmhhc0RhdGFiYXNlICYmIHRoaXMuZGF0YWJhc2U/LnRhYmxlICYmIEFycmF5LmlzQXJyYXkoZGF0YSkgJiYgZGF0YS5sZW5ndGggPiAwKSB7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZU1hbmFnZXJTZXJ2aWNlLnVwZGF0ZVN0b3JlKHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuZGF0YWJhc2UhLnRhYmxlLFxuICAgICAgICAgICAgICAgICAgZGF0YTogeyAuLi50aGlzLmRhdGFiYXNlLCAuLi57IGV4cGlyZXM6IHRoaXMudXRpbHMuZXhwaXJlcyh0aGlzLmRhdGFiYXNlIS5leHBpcmVzSW4pfSB9XG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRiTWFuYWdlclNlcnZpY2UuY3JlYXRlVGFibGVSZWNvcmRzKHRoaXMuZGF0YWJhc2UudGFibGUsIGRhdGEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBvZihkYXRhKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzRGF0YWJhc2UgJiYgdGhpcy5kYXRhYmFzZT8udGFibGUpIHtcblxuICAgICAgICAgIHJldHVybiB0aGlzLmRiTWFuYWdlclNlcnZpY2UuZGF0YWJhc2VFeGlzdHMoKS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKChkYkV4aXN0czogYm9vbGVhbikgPT4ge1xuXG4gICAgICAgICAgICAgIGlmICghZGJFeGlzdHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbml0T2JzOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLmluaXREQlN0b3JhZ2VBc3luYygpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpbml0T2JzLnBpcGUoXG4gICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gZmV0Y2hGcm9tQVBJKCkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmRiTWFuYWdlclNlcnZpY2UuaGFzRGF0YWJhc2VUYWJsZSh0aGlzLmRhdGFiYXNlIS50YWJsZSkucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHRhYmxlRXhpc3RzOiBib29sZWFuKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcblxuICAgICAgICAgICAgICAgICAgaWYgKCF0YWJsZUV4aXN0cykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbml0T2JzOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLmluaXREQlN0b3JhZ2VBc3luYygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5pdE9icy5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiBmZXRjaEZyb21BUEkoKSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxTdG9yYWdlTWFuYWdlclNlcnZpY2Uuc3RvcmUkKHRoaXMuZGF0YWJhc2UhLnRhYmxlKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHN0b3JlRGF0YTogYW55KSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBpcmVzID0gc3RvcmVEYXRhPy5leHBpcmVzIHx8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzRXhwaXJlZCA9IGV4cGlyZXMgPiAwICYmIHRoaXMudXRpbHMuaGFzRXhwaXJlZChleHBpcmVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNFeHBpcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYk1hbmFnZXJTZXJ2aWNlLmNsZWFyVGFibGUodGhpcy5kYXRhYmFzZSEudGFibGUpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiBmZXRjaEZyb21BUEkoKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VNYW5hZ2VyU2VydmljZS51cGRhdGVTdG9yZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmRhdGFiYXNlIS50YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHsgLi4udGhpcy5kYXRhYmFzZSwgLi4ueyBleHBpcmVzOiB0aGlzLnV0aWxzLmV4cGlyZXModGhpcy5kYXRhYmFzZSEuZXhwaXJlc0luKX0gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRiTWFuYWdlclNlcnZpY2UuZ2V0VGFibGVSZWNvcmRzKHRoaXMuZGF0YWJhc2UhLnRhYmxlKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKChkYkRhdGE6IGFueSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRiRGF0YSkgJiYgZGJEYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERhdGEkKGRiRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGRiRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmV0Y2hGcm9tQVBJKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmV0Y2hGcm9tQVBJKCk7XG5cbiAgICAgIH0pXG4gICAgKVxuICApXG5cbiAgcHJpdmF0ZSBpbml0REJTdG9yYWdlQXN5bmMoKSB7XG5cbiAgICBpZiAodGhpcy5kYXRhVHlwZSAhPT0gRGF0YVR5cGUuQVJSQVkpIHtcbiAgICAgIGNvbnNvbGUud2FybignRGF0YWJhc2Ugc3RvcmFnZSByZXF1aXJlcyBkYXRhVHlwZSB0byBiZSBBUlJBWScpO1xuICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5hcGlPcHRpb25zLmFkYXB0ZXIpIHtcbiAgICAgIGNvbnNvbGUud2FybignRGF0YWJhc2Ugc3RvcmFnZSByZXF1aXJlcyBhbiBhZGFwdGVyIHRvIGRlZmluZSB0aGUgZGF0YSBzaGFwZScpO1xuICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5kYXRhYmFzZT8udGFibGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignRGF0YWJhc2Ugc3RvcmFnZSByZXF1aXJlcyBhIHRhYmxlIG5hbWUnKTtcbiAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICB9XG5cbiAgICBjb25zdCBzYW1wbGVEYXRhID0gdGhpcy5hcGlPcHRpb25zLmFkYXB0ZXI/Lih7fSkgfHwge307XG4gICAgY29uc3Qgc2NoZW1hS2V5cyA9IE9iamVjdC5rZXlzKHNhbXBsZURhdGEpLmZpbHRlcihrZXkgPT4gc2FtcGxlRGF0YVtrZXldICE9PSB1bmRlZmluZWQpO1xuXG4gICAgbGV0IHNjaGVtYSA9ICcrK2lkJztcblxuICAgIGlmIChzY2hlbWFLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG90aGVyS2V5cyA9IHNjaGVtYUtleXMuZmlsdGVyKGsgPT4gayAhPT0gJ2lkJyk7XG4gICAgICBpZiAob3RoZXJLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc2NoZW1hICs9ICcsICcgKyBvdGhlcktleXMuam9pbignLCAnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB0YWJsZURlZiA9IFRhYmxlU2NoZW1hRGVmLmFkYXB0KHtcbiAgICAgIHRhYmxlOiB0aGlzLmRhdGFiYXNlPy50YWJsZSxcbiAgICAgIHNjaGVtYTogc2NoZW1hXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5kYk1hbmFnZXJTZXJ2aWNlLmNyZWF0ZURhdGFiYXNlVGFibGUodGFibGVEZWYpO1xuXG4gIH1cblxuICAvLyBGRVRDSCBSRUNPUkRcbiAgcmVhZG9ubHkgZmV0Y2hSZWNvcmQgPSAob3B0aW9uczogUmVxdWVzdE9wdGlvbnMsIG1ldGhvZDogc3RyaW5nKSA9PlxuICAgIHRoaXMuZWZmZWN0PGFueT4oKCkgPT5cbiAgICBvZihSZXF1ZXN0T3B0aW9ucy5hZGFwdChvcHRpb25zKSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgob3B0aW9ucykgPT4ge1xuXG4gICAgICAgIHRoaXMuc3RyZWFtZWRSZXNwb25zZSA9IFtdXG4gICAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gdGhpcy51cGRhdGVSZXF1ZXN0T3B0aW9ucyhvcHRpb25zPy5oZWFkZXJzKVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5nZXRSZXF1ZXN0KHJlcXVlc3RPcHRpb25zLCBvcHRpb25zPy5wYXRoKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKGRhdGE6IGFueSkgPT4ge1xuXG4gICAgICAgICAgICBkYXRhID0gKCFkYXRhKSA/ICh0aGlzLmRhdGFUeXBlID09PSBEYXRhVHlwZS5BUlJBWSkgPyBbXSA6IHt9IDogZGF0YVxuXG4gICAgICAgICAgICBjb25zdCBpZCA9IChvcHRpb25zIGFzIGFueSkucGF0aD8ubGVuZ3RoID8gb3B0aW9ucy5wYXRoW29wdGlvbnMucGF0aC5sZW5ndGggLTFdIDogbnVsbFxuXG4gICAgICAgICAgICBpZihtZXRob2QgPT09ICdERUxFVEUnKSB0aGlzLmRlbGV0ZURhdGEkKHsgaWQgfSBhcyBUICYgeyBpZDogbnVtYmVyIH0pXG4gICAgICAgICAgICBpZihtZXRob2QgPT09ICdVUERBVEUnKSB0aGlzLnVwZGF0ZURhdGEkKGRhdGEpXG4gICAgICAgICAgICBpZihtZXRob2QgPT09ICdDUkVBVEUnKSB0aGlzLmFkZERhdGEkKGRhdGEpXG5cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjb25jYXRNYXAoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzRGF0YWJhc2UgJiYgdGhpcy5kYXRhYmFzZT8udGFibGUpIHtcbiAgICAgICAgICAgICAgY29uc3QgaWQgPSAob3B0aW9ucyBhcyBhbnkpLnBhdGg/Lmxlbmd0aCA/IG9wdGlvbnMucGF0aFtvcHRpb25zLnBhdGgubGVuZ3RoIC0xXSA6IG51bGxcblxuICAgICAgICAgICAgICBpZihtZXRob2QgPT09ICdERUxFVEUnICYmIGlkKSByZXR1cm4gdGhpcy5kYk1hbmFnZXJTZXJ2aWNlLmRlbGV0ZVRhYmxlUmVjb3JkKHRoaXMuZGF0YWJhc2UudGFibGUsIGlkKVxuICAgICAgICAgICAgICBpZihtZXRob2QgPT09ICdVUERBVEUnICYmIGRhdGEpIHJldHVybiB0aGlzLmRiTWFuYWdlclNlcnZpY2UudXBkYXRlVGFibGVSZWNvcmQodGhpcy5kYXRhYmFzZS50YWJsZSwgZGF0YSlcbiAgICAgICAgICAgICAgaWYobWV0aG9kID09PSAnQ1JFQVRFJyAmJiBkYXRhKSByZXR1cm4gdGhpcy5kYk1hbmFnZXJTZXJ2aWNlLmNyZWF0ZVRhYmxlUmVjb3JkKHRoaXMuZGF0YWJhc2UudGFibGUsIGRhdGEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb2YoZGF0YSlcbiAgICAgICAgICB9KVxuICAgICAgICApXG5cbiAgICAgIH0pXG4gICAgKVxuICApXG5cbiAgLy8gQ1JFQVRFIFJFQ09SRFxuICByZWFkb25seSBjcmVhdGVSZWNvcmQgPSAoZGF0YTogYW55fG51bGwsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucykgPT5cbiAgICB0aGlzLmVmZmVjdDxhbnk+KCgpID0+XG4gICAgICBvZihkYXRhKS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKGRhdGE6IGFueSkgPT4ge1xuXG4gICAgICAgIHRoaXMuc3RyZWFtZWRSZXNwb25zZSA9IFtdXG4gICAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gdGhpcy51cGRhdGVSZXF1ZXN0T3B0aW9ucyhvcHRpb25zPy5oZWFkZXJzKVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5wb3N0UmVxdWVzdChkYXRhLCByZXF1ZXN0T3B0aW9ucywgb3B0aW9ucz8ucGF0aClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGRhdGEgPSAoIWRhdGEpID8gKHRoaXMuZGF0YVR5cGUgPT09IERhdGFUeXBlLkFSUkFZKSA/IFtdIDoge30gOiBkYXRhXG4gICAgICAgICAgICB0aGlzLmFkZERhdGEkKGRhdGEpXG4gICAgICAgICAgICBpZih0aGlzLndzQ29ubmVjdGlvbikgdGhpcy53c0NvbW11bmljYXRpb24oJ0NSRUFURScsIFsuLi5vcHRpb25zPy5wYXRoIHx8IFtdLCBkYXRhLmlkXSlcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjb25jYXRNYXAoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzRGF0YWJhc2UgJiYgdGhpcy5kYXRhYmFzZT8udGFibGUgJiYgZGF0YT8uaWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGJNYW5hZ2VyU2VydmljZS5jcmVhdGVUYWJsZVJlY29yZCh0aGlzLmRhdGFiYXNlLnRhYmxlLCBkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvZihkYXRhKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG5cbiAgICAgIH0pXG4gICAgKVxuICApXG5cbiAgLy8gVVBEQVRFIFJFQ09SRFxuICByZWFkb25seSB1cGRhdGVSZWNvcmQgPSAoZGF0YTogYW55fG51bGwsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucykgPT5cbiAgICB0aGlzLmVmZmVjdDxhbnk+KCgpID0+XG4gICAgb2YoZGF0YSkucGlwZShcbiAgICAgIGNvbmNhdE1hcCgoZGF0YTogYW55KSA9PiB7XG5cbiAgICAgICAgdGhpcy5zdHJlYW1lZFJlc3BvbnNlID0gW11cbiAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB0aGlzLnVwZGF0ZVJlcXVlc3RPcHRpb25zKG9wdGlvbnM/LmhlYWRlcnMpXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLnB1dFJlcXVlc3QoZGF0YSwgcmVxdWVzdE9wdGlvbnMsIG9wdGlvbnM/LnBhdGgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICBkYXRhID0gKCFkYXRhKSA/ICh0aGlzLmRhdGFUeXBlID09PSBEYXRhVHlwZS5BUlJBWSkgPyBbXSA6IHt9IDogZGF0YVxuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhJChkYXRhKVxuICAgICAgICAgICAgaWYodGhpcy53c0Nvbm5lY3Rpb24pIHRoaXMud3NDb21tdW5pY2F0aW9uKCdVUERBVEUnLCBbLi4ub3B0aW9ucz8ucGF0aCB8fCBbXV0pXG4gICAgICAgICAgfSksXG4gICAgICAgICAgY29uY2F0TWFwKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0RhdGFiYXNlICYmIHRoaXMuZGF0YWJhc2U/LnRhYmxlICYmIGRhdGE/LmlkKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmRiTWFuYWdlclNlcnZpY2UudXBkYXRlVGFibGVSZWNvcmQodGhpcy5kYXRhYmFzZS50YWJsZSwgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb2YoZGF0YSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuXG4gICAgICB9KVxuICAgIClcbiAgKVxuXG4gIC8vIERFTEVURSBSRUNPUkRcbiAgcmVhZG9ubHkgZGVsZXRlUmVjb3JkID0gKG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucykgPT5cbiAgICB0aGlzLmVmZmVjdDxhbnk+KCgpID0+XG4gICAgb2Yob3B0aW9ucykucGlwZShcbiAgICAgIGNvbmNhdE1hcCgoZGF0YTogYW55KSA9PiB7XG5cbiAgICAgICAgdGhpcy5zdHJlYW1lZFJlc3BvbnNlID0gW11cbiAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB0aGlzLnVwZGF0ZVJlcXVlc3RPcHRpb25zKG9wdGlvbnM/LmhlYWRlcnMpXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLmRlbGV0ZVJlcXVlc3QocmVxdWVzdE9wdGlvbnMsIG9wdGlvbnM/LnBhdGgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICBkYXRhID0gKCFkYXRhKSA/ICh0aGlzLmRhdGFUeXBlID09PSBEYXRhVHlwZS5BUlJBWSkgPyBbXSA6IHt9IDogZGF0YVxuICAgICAgICAgICAgdGhpcy5kZWxldGVEYXRhJChkYXRhKVxuICAgICAgICAgICAgaWYodGhpcy53c0Nvbm5lY3Rpb24pIHRoaXMud3NDb21tdW5pY2F0aW9uKCdERUxFVEUnLCBbLi4ub3B0aW9ucz8ucGF0aCB8fCBbXV0pXG4gICAgICAgICAgfSksXG4gICAgICAgICAgY29uY2F0TWFwKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0RhdGFiYXNlICYmIHRoaXMuZGF0YWJhc2U/LnRhYmxlICYmIGRhdGE/LmlkKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmRiTWFuYWdlclNlcnZpY2UuZGVsZXRlVGFibGVSZWNvcmQodGhpcy5kYXRhYmFzZS50YWJsZSwgZGF0YS5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb2YoZGF0YSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuXG4gICAgICB9KVxuICAgIClcbiAgKVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEZFVENIIFNUUkVBTVxuICByZWFkb25seSBjcmVhdGVTdHJlYW0gPSAoZGF0YTogYW55fG51bGwsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucykgPT5cbiAgICB0aGlzLmVmZmVjdDxhbnk+KCgpID0+XG4gICAgb2YoZGF0YSkucGlwZShcbiAgICAgIHRhcCgoKSA9PiB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5pc1BlbmRpbmcubmV4dCh0cnVlKSksXG4gICAgICBzd2l0Y2hNYXAoKGRhdGE6IGFueSkgPT4ge1xuXG4gICAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gdGhpcy51cGRhdGVSZXF1ZXN0T3B0aW9ucyhvcHRpb25zPy5oZWFkZXJzKVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5wb3N0UmVxdWVzdChkYXRhLCByZXF1ZXN0T3B0aW9ucywgb3B0aW9ucz8ucGF0aClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYocmVzLmxlbmd0aCA+IDApIHRoaXMuc2V0RGF0YSQocmVzKVxuICAgICAgICAgICAgdGhpcy5zdHJlYW1lZFJlc3BvbnNlID0gcmVzXG4gICAgICAgICAgfSksXG4gICAgICAgICAgc2NhbigoYWNjLCByZXM6IGFueSkgPT4ge1xuXG4gICAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IGFjYy5jdXJyZW50XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gcmVzXG4gICAgICAgICAgICByZXR1cm4geyBwcmV2aW91cywgY3VycmVudCB9O1xuXG4gICAgICAgICAgfSwgeyBwcmV2aW91czogbnVsbCwgY3VycmVudDogbnVsbCB9KSxcbiAgICAgICAgICB0YXAoKHsgcHJldmlvdXMsIGN1cnJlbnQgfSkgPT4ge1xuXG4gICAgICAgICAgICBpZihwcmV2aW91cyAmJiBKU09OLnN0cmluZ2lmeShwcmV2aW91cykgPT09IEpTT04uc3RyaW5naWZ5KGN1cnJlbnQpKSB7XG4gICAgICAgICAgICAgIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLmlzUGVuZGluZy5uZXh0KGZhbHNlKVxuICAgICAgICAgICAgICB0aGlzLnNldERhdGEkKFtdKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuaXNQZW5kaW5nLm5leHQodHJ1ZSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0pXG4gICAgICAgIClcblxuICAgICAgfSlcbiAgICApXG5cbiAgKVxuXG4gIHJlYWRvbmx5IGZldGNoU3RyZWFtID0gKG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucykgPT5cbiAgICB0aGlzLmVmZmVjdDxhbnk+KCgpID0+XG4gICAgb2Yob3B0aW9ucykucGlwZShcbiAgICAgIHRhcCgoKSA9PiB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5pc1BlbmRpbmcubmV4dCh0cnVlKSksXG4gICAgICBzd2l0Y2hNYXAoKG9wdGlvbnM6IGFueSkgPT4ge1xuXG4gICAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gdGhpcy51cGRhdGVSZXF1ZXN0T3B0aW9ucyhvcHRpb25zPy5oZWFkZXJzKVxuICAgICAgICByZXF1ZXN0T3B0aW9ucy5zdHJlYW0gPSB0cnVlXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLmdldFJlcXVlc3QocmVxdWVzdE9wdGlvbnMsIG9wdGlvbnM/LnBhdGgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgocmVzOiBhbnkpID0+IHtcblxuICAgICAgICAgICAgaWYocmVzLmxlbmd0aCA+IDApIHRoaXMuc2V0RGF0YSQocmVzKVxuICAgICAgICAgICAgdGhpcy5zdHJlYW1lZFJlc3BvbnNlID0gcmVzXG4gICAgICAgICAgfSksXG4gICAgICAgICAgc2NhbigoYWNjLCByZXM6IGFueSkgPT4ge1xuXG4gICAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IGFjYy5jdXJyZW50XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gcmVzXG4gICAgICAgICAgICByZXR1cm4geyBwcmV2aW91cywgY3VycmVudCB9XG5cbiAgICAgICAgICB9LCB7IHByZXZpb3VzOiBudWxsLCBjdXJyZW50OiBudWxsIH0pLFxuICAgICAgICAgIHRhcCgoeyBwcmV2aW91cywgY3VycmVudCB9KSA9PiB7XG5cbiAgICAgICAgICAgIGlmKHByZXZpb3VzICYmIEpTT04uc3RyaW5naWZ5KHByZXZpb3VzKSA9PT0gSlNPTi5zdHJpbmdpZnkoY3VycmVudCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuaXNQZW5kaW5nLm5leHQoZmFsc2UpXG4gICAgICAgICAgICAgIHRoaXMuc2V0RGF0YSQoW10pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5pc1BlbmRpbmcubmV4dCh0cnVlKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuXG4gICAgICB9KSxcbiAgICApXG4gIClcblxuICAvLyBXRUJTT0NLRVQgQ09NTVVOSUNBVElPTiAoU1RBVEUgTUFOQUdFUilcbiAgcHJpdmF0ZSB3c0NvbW11bmljYXRpb24obWV0aG9kOiBzdHJpbmcsIHBhdGg/OiBzdHJpbmd8bnVtYmVyW10pIHtcblxuICAgIGlmKHRoaXMud3NDb25uZWN0aW9uICYmIHRoaXMuYXBpT3B0aW9ucy53cykge1xuICAgICAgY29uc3Qgd3NTZXJ2ZXIgPSB0aGlzLmFwaU9wdGlvbnMud3MuaWRcbiAgICAgIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLnNlbmRNZXNzYWdlSW5DaGFubmVsKHdzU2VydmVyLCB7IG1ldGhvZCwgcGF0aCwgdXNlcjogdGhpcy5hcGlPcHRpb25zLndzLnVzZXIgfSlcbiAgICB9XG5cbiAgfVxuXG4gIHdzTWVzc2FnaW5nKG1lc3NhZ2U6IENoYW5uZWxNZXNzYWdlLCBjaGFubmVsPzogc3RyaW5nKSB7XG5cbiAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyLnZhbHVlIHx8IHRoaXMudXNlci52YWx1ZVxuICAgIGNvbnN0IG1lc3NhZ2VJbmZvID0gQ2hhbm5lbE1lc3NhZ2UuYWRhcHQoeyAuLi5tZXNzYWdlLCBmcm9tVXNlcjogdXNlciB9KVxuXG4gICAgaWYodGhpcy53c0Nvbm5lY3Rpb24gJiYgdGhpcy5hcGlPcHRpb25zLndzKSB7XG5cbiAgICAgIGNvbnN0IHdzU2VydmVyID0gKGNoYW5uZWwpID8gY2hhbm5lbCA6IHRoaXMuYXBpT3B0aW9ucy53cy5pZFxuXG4gICAgICBpZihtZXNzYWdlSW5mby50b1VzZXIgPT09ICdhbGxDaGFubmVscycpIHtcbiAgICAgICAgdGhpcy5odHRwTWFuYWdlclNlcnZpY2Uuc2VuZEJyb2FkY2FzdChtZXNzYWdlSW5mbylcbiAgICAgIH0gZWxzZSBpZihtZXNzYWdlSW5mby50b1VzZXIgPT09ICdhbGxJbkNoYW5uZWwnKSB7XG4gICAgICAgIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLnNlbmRNZXNzYWdlSW5DaGFubmVsKHdzU2VydmVyLCBtZXNzYWdlSW5mbylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLnNlbmRNZXNzYWdlVG9Vc2VyKHdzU2VydmVyLCBtZXNzYWdlSW5mbylcbiAgICAgIH1cblxuICAgIH1cblxuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTUlTQ1xuXG4gIHByaXZhdGUgaXNFbXB0eShvYmo6IGFueSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMFxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVSZXF1ZXN0T3B0aW9ucyhoZWFkZXJzPzogYW55KTogQXBpUmVxdWVzdCB7XG5cbiAgICBjb25zdCBvcHRpb25zID0gQXBpUmVxdWVzdC5hZGFwdCh7IC4uLnRoaXMuYXBpT3B0aW9ucyB9KVxuXG4gICAgb3B0aW9ucy5oZWFkZXJzID0gKGhlYWRlcnMpXG4gICAgICAgICAgPyB7IC4uLm9wdGlvbnMuaGVhZGVycywgLi4uaGVhZGVycyB9XG4gICAgICAgICAgOiB7IC4uLm9wdGlvbnMuaGVhZGVycyB9XG5cbiAgICByZXR1cm4gb3B0aW9uc1xuICB9XG5cbn1cbiJdfQ==
@@ -1,15 +1,15 @@
1
1
  export class WSOptions {
2
- constructor(id = '', wsServer = '', jwtToken = '', permissions, channels, userAdapter, retry) {
2
+ constructor(id = '', wsServer = '', jwtToken = '', permissions, channels, user, retry) {
3
3
  this.id = id;
4
4
  this.wsServer = wsServer;
5
5
  this.jwtToken = jwtToken;
6
6
  this.permissions = permissions;
7
7
  this.channels = channels;
8
- this.userAdapter = userAdapter;
8
+ this.user = user;
9
9
  this.retry = retry;
10
10
  }
11
11
  static adapt(item) {
12
- return new WSOptions(item?.id, item?.wsServer, item?.jwtToken, (item?.permissions) ? item.permissions.split(',').map((p) => p.trim()) : [], item?.channels, item?.userAdapter, item?.retry);
12
+ return new WSOptions(item?.id, item?.wsServer, item?.jwtToken, (item?.permissions) ? item.permissions.split(',').map((p) => p.trim()) : [], item?.channels, item?.user, item?.retry);
13
13
  }
14
14
  }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3Mtb3B0aW9ucy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2h0dHAtcmVxdWVzdC1tYW5hZ2VyL3NyYy9saWIvc2VydmljZXMvcmVxdWVzdC1tYW5hZ2VyLXN0YXRlLXNlcnZpY2UvbW9kZWxzL3dzLW9wdGlvbnMubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYUEsTUFBTSxPQUFPLFNBQVM7SUFFcEIsWUFDUyxLQUFhLEVBQUUsRUFDZixXQUFtQixFQUFFLEVBQ3JCLFdBQW1CLEVBQUUsRUFDckIsV0FBc0IsRUFDdEIsUUFBbUIsRUFDbkIsV0FBb0IsRUFDcEIsS0FBb0I7UUFOcEIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLGFBQVEsR0FBUixRQUFRLENBQWE7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNyQixnQkFBVyxHQUFYLFdBQVcsQ0FBVztRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLGdCQUFXLEdBQVgsV0FBVyxDQUFTO1FBQ3BCLFVBQUssR0FBTCxLQUFLLENBQWU7SUFDMUIsQ0FBQztJQUVKLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBVTtRQUVyQixPQUFPLElBQUksU0FBUyxDQUNsQixJQUFJLEVBQUUsRUFBRSxFQUNSLElBQUksRUFBRSxRQUFRLEVBQ2QsSUFBSSxFQUFFLFFBQVEsRUFDZCxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUNuRixJQUFJLEVBQUUsUUFBUSxFQUNkLElBQUksRUFBRSxXQUFXLEVBQ2pCLElBQUksRUFBRSxLQUFLLENBQ1osQ0FBQTtJQUVILENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJldHJ5T3B0aW9ucyB9IGZyb20gXCIuLi8uLi9yZXF1ZXN0LW1hbmFnZXItc2VydmljZXNcIlxuaW1wb3J0IHsgV1NVc2VyIH0gZnJvbSBcIi4vd3MtdXNlci5tb2RlbFwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgV1NPcHRpb25zSW50ZXJmYWNlIHtcbiAgICBpZDogc3RyaW5nLFxuICAgIHdzU2VydmVyOiBzdHJpbmcsXG4gICAgand0VG9rZW46IHN0cmluZyxcbiAgICBwZXJtaXNzaW9ucz86IHN0cmluZ1tdLFxuICAgIGNoYW5uZWxzPzogc3RyaW5nW10sXG4gICAgdXNlckFkYXB0ZXI/OiBXU1VzZXIsXG4gICAgcmV0cnk/OiBSZXRyeU9wdGlvbnNcbn1cblxuZXhwb3J0IGNsYXNzIFdTT3B0aW9ucyBpbXBsZW1lbnRzIFdTT3B0aW9uc0ludGVyZmFjZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGlkOiBzdHJpbmcgPSAnJyxcbiAgICBwdWJsaWMgd3NTZXJ2ZXI6IHN0cmluZyA9ICcnLFxuICAgIHB1YmxpYyBqd3RUb2tlbjogc3RyaW5nID0gJycsXG4gICAgcHVibGljIHBlcm1pc3Npb25zPzogc3RyaW5nW10sXG4gICAgcHVibGljIGNoYW5uZWxzPzogc3RyaW5nW10sXG4gICAgcHVibGljIHVzZXJBZGFwdGVyPzogV1NVc2VyLFxuICAgIHB1YmxpYyByZXRyeT86IFJldHJ5T3B0aW9uc1xuICApIHt9XG5cbiAgc3RhdGljIGFkYXB0KGl0ZW0/OiBhbnkpOiBXU09wdGlvbnMge1xuXG4gICAgcmV0dXJuIG5ldyBXU09wdGlvbnMoXG4gICAgICBpdGVtPy5pZCxcbiAgICAgIGl0ZW0/LndzU2VydmVyLFxuICAgICAgaXRlbT8uand0VG9rZW4sXG4gICAgICAoaXRlbT8ucGVybWlzc2lvbnMpID8gaXRlbS5wZXJtaXNzaW9ucy5zcGxpdCgnLCcpLm1hcCgocDogc3RyaW5nKSA9PiBwLnRyaW0oKSkgOiBbXSxcbiAgICAgIGl0ZW0/LmNoYW5uZWxzLFxuICAgICAgaXRlbT8udXNlckFkYXB0ZXIsXG4gICAgICBpdGVtPy5yZXRyeVxuICAgIClcblxuICB9XG5cbn1cbiJdfQ==
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3Mtb3B0aW9ucy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2h0dHAtcmVxdWVzdC1tYW5hZ2VyL3NyYy9saWIvc2VydmljZXMvcmVxdWVzdC1tYW5hZ2VyLXN0YXRlLXNlcnZpY2UvbW9kZWxzL3dzLW9wdGlvbnMubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBWUEsTUFBTSxPQUFPLFNBQVM7SUFFcEIsWUFDUyxLQUFhLEVBQUUsRUFDZixXQUFtQixFQUFFLEVBQ3JCLFdBQW1CLEVBQUUsRUFDckIsV0FBc0IsRUFDdEIsUUFBbUIsRUFDbkIsSUFBVSxFQUNWLEtBQW9CO1FBTnBCLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQ3JCLGFBQVEsR0FBUixRQUFRLENBQWE7UUFDckIsZ0JBQVcsR0FBWCxXQUFXLENBQVc7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixTQUFJLEdBQUosSUFBSSxDQUFNO1FBQ1YsVUFBSyxHQUFMLEtBQUssQ0FBZTtJQUMxQixDQUFDO0lBRUosTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFVO1FBRXJCLE9BQU8sSUFBSSxTQUFTLENBQ2xCLElBQUksRUFBRSxFQUFFLEVBQ1IsSUFBSSxFQUFFLFFBQVEsRUFDZCxJQUFJLEVBQUUsUUFBUSxFQUNkLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQ25GLElBQUksRUFBRSxRQUFRLEVBQ2QsSUFBSSxFQUFFLElBQUksRUFDVixJQUFJLEVBQUUsS0FBSyxDQUNaLENBQUE7SUFFSCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXRyeU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vcmVxdWVzdC1tYW5hZ2VyLXNlcnZpY2VzXCJcblxuZXhwb3J0IGludGVyZmFjZSBXU09wdGlvbnNJbnRlcmZhY2Uge1xuICAgIGlkOiBzdHJpbmcsXG4gICAgd3NTZXJ2ZXI6IHN0cmluZyxcbiAgICBqd3RUb2tlbjogc3RyaW5nLFxuICAgIHBlcm1pc3Npb25zPzogc3RyaW5nW10sXG4gICAgY2hhbm5lbHM/OiBzdHJpbmdbXSxcbiAgICB1c2VyPzogYW55LFxuICAgIHJldHJ5PzogUmV0cnlPcHRpb25zXG59XG5cbmV4cG9ydCBjbGFzcyBXU09wdGlvbnMgaW1wbGVtZW50cyBXU09wdGlvbnNJbnRlcmZhY2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBpZDogc3RyaW5nID0gJycsXG4gICAgcHVibGljIHdzU2VydmVyOiBzdHJpbmcgPSAnJyxcbiAgICBwdWJsaWMgand0VG9rZW46IHN0cmluZyA9ICcnLFxuICAgIHB1YmxpYyBwZXJtaXNzaW9ucz86IHN0cmluZ1tdLFxuICAgIHB1YmxpYyBjaGFubmVscz86IHN0cmluZ1tdLFxuICAgIHB1YmxpYyB1c2VyPzogYW55LFxuICAgIHB1YmxpYyByZXRyeT86IFJldHJ5T3B0aW9uc1xuICApIHt9XG5cbiAgc3RhdGljIGFkYXB0KGl0ZW0/OiBhbnkpOiBXU09wdGlvbnMge1xuXG4gICAgcmV0dXJuIG5ldyBXU09wdGlvbnMoXG4gICAgICBpdGVtPy5pZCxcbiAgICAgIGl0ZW0/LndzU2VydmVyLFxuICAgICAgaXRlbT8uand0VG9rZW4sXG4gICAgICAoaXRlbT8ucGVybWlzc2lvbnMpID8gaXRlbS5wZXJtaXNzaW9ucy5zcGxpdCgnLCcpLm1hcCgocDogc3RyaW5nKSA9PiBwLnRyaW0oKSkgOiBbXSxcbiAgICAgIGl0ZW0/LmNoYW5uZWxzLFxuICAgICAgaXRlbT8udXNlcixcbiAgICAgIGl0ZW0/LnJldHJ5XG4gICAgKVxuXG4gIH1cblxufVxuIl19
@@ -1,4 +1,4 @@
1
- import { LocalStorageManagerService } from './../local-storage-manager-service/local-storage-manager.service';
1
+ import { LocalStorageManagerService } from '../local-storage-manager-service/local-storage-manager.service';
2
2
  import { inject, Injectable } from '@angular/core';
3
3
  import { ComponentStore } from '@ngrx/component-store';
4
4
  import { StateStorageOptions } from './models/state-storage-options.model';
@@ -68,4 +68,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68
68
  providedIn: 'root'
69
69
  }]
70
70
  }], ctorParameters: () => [{ type: i1.StateStorageOptions }] });
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUtc3RhdGUtbWFuYWdlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9zdG9yZS1zdGF0ZS1tYW5hZ2VyLXNlcnZpY2Uvc3RvcmUtc3RhdGUtbWFuYWdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBTzFDLE1BQU0sT0FBTyx3QkFBd0UsU0FBUSxjQUFpQjtJQVM1RyxZQUNVLFVBQStCLG1CQUFtQixDQUFDLEtBQUssRUFBRTtRQUVsRSxLQUFLLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7UUFGckMsWUFBTyxHQUFQLE9BQU8sQ0FBbUQ7UUFScEUsK0JBQTBCLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUE7UUFFL0Qsa0JBQWEsR0FBRyxJQUFJLFlBQVksQ0FBQTtRQUNoQyxhQUFRLEdBQVEsSUFBSSxDQUFBO1FBRVosZ0JBQVcsR0FBRyxLQUFLLENBQUE7UUFrRDNCLFlBQVk7UUFDSCxVQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQzFDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyxPQUFPLEtBQUssS0FBSyxVQUFVLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO1FBQ2pGLENBQUMsQ0FBQyxDQUFDO1FBRUgsV0FBVztRQUNGLGVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQVMsRUFBRSxFQUFFO1lBRXRELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDaEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUE7WUFFL0MsSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTyxLQUFLLENBQUE7WUFDekIsTUFBTSxRQUFRLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFBO1lBQy9DLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDMUIsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUE7UUFFbEMsQ0FBQyxDQUFDLENBQUE7UUE3REEsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNwQixDQUFDO0lBRU8sTUFBTSxDQUFDLElBQUksQ0FBQyxPQUE0QjtRQUU5QyxNQUFNLEtBQUssR0FBRyxPQUFPLEVBQUUsS0FBSyxDQUFBO1FBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUUsS0FBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFFOUMsQ0FBQztJQUVELElBQUksQ0FBQyxPQUE2QjtRQUVoQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQTtRQUV2QixJQUFJLENBQUMsMEJBQTBCLENBQUMsV0FBVyxDQUFDO1lBQzFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUs7WUFDMUIsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFO1lBQzVCLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU87U0FDaEMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQzthQUMzRCxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFFekMsQ0FBQztJQUVELFlBQVk7UUFFVixPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUM7YUFDbEUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNiLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3ZCLENBQUMsQ0FBQyxDQUFBO0lBRUosQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFVO1FBQ3BCLElBQUcsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFNO1FBQzNCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxXQUFXLENBQUM7WUFDMUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSztZQUMxQixJQUFJLEVBQUUsS0FBSztTQUNaLENBQUMsQ0FBQTtJQUVKLENBQUM7K0dBdkRVLHdCQUF3QjttSEFBeEIsd0JBQXdCLGNBRnZCLE1BQU07OzRGQUVQLHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NhbFN0b3JhZ2VNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4vLi4vbG9jYWwtc3RvcmFnZS1tYW5hZ2VyLXNlcnZpY2UvbG9jYWwtc3RvcmFnZS1tYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRTdG9yZSB9IGZyb20gJ0BuZ3J4L2NvbXBvbmVudC1zdG9yZSc7XG5pbXBvcnQgeyBTdGF0ZVN0b3JhZ2VPcHRpb25zIH0gZnJvbSAnLi9tb2RlbHMvc3RhdGUtc3RvcmFnZS1vcHRpb25zLm1vZGVsJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgdGFrZSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRlU3RvcmVNYW5hZ2VyRGF0YTxUPiB7fVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTdG9yZVN0YXRlTWFuYWdlclNlcnZpY2U8VCBleHRlbmRzIG9iamVjdCA9IFN0YXRlU3RvcmVNYW5hZ2VyRGF0YTxhbnk+PiBleHRlbmRzIENvbXBvbmVudFN0b3JlPFQ+IHtcblxuICBsb2NhbFN0b3JhZ2VNYW5hZ2VyU2VydmljZSA9IGluamVjdChMb2NhbFN0b3JhZ2VNYW5hZ2VyU2VydmljZSlcblxuICBzdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvblxuICBzZXR0aW5nczogYW55ID0gbnVsbFxuXG4gIHByaXZhdGUgaXNSZXN0b3JpbmcgPSBmYWxzZVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgb3B0aW9uczogU3RhdGVTdG9yYWdlT3B0aW9ucyA9IFN0YXRlU3RvcmFnZU9wdGlvbnMuYWRhcHQoKVxuICApIHtcbiAgICBzdXBlcihTdG9yZVN0YXRlTWFuYWdlclNlcnZpY2UuaW5pdChvcHRpb25zKSlcbiAgICB0aGlzLmluaXQob3B0aW9ucylcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGluaXQob3B0aW9uczogU3RhdGVTdG9yYWdlT3B0aW9ucyk6IGFueSB7XG5cbiAgICBjb25zdCBtb2RlbCA9IG9wdGlvbnM/Lm1vZGVsXG4gICAgcmV0dXJuIChtb2RlbCkgPyAobW9kZWwgYXMgKCkgPT4gYW55KSgpIDoge31cblxuICB9XG5cbiAgaW5pdChvcHRpb25zPzogU3RhdGVTdG9yYWdlT3B0aW9ucykge1xuXG4gICAgdGhpcy5zZXR0aW5ncyA9IG9wdGlvbnNcblxuICAgIHRoaXMubG9jYWxTdG9yYWdlTWFuYWdlclNlcnZpY2UuY3JlYXRlU3RvcmUoe1xuICAgICAgbmFtZTogdGhpcy5zZXR0aW5ncz8uc3RvcmUsXG4gICAgICBkYXRhOiB0aGlzLnNldHRpbmdzPy5tb2RlbCgpLFxuICAgICAgb3B0aW9uczogdGhpcy5zZXR0aW5ncz8ub3B0aW9ucyxcbiAgICB9KVxuXG4gICAgdGhpcy5sb2NhbFN0b3JhZ2VNYW5hZ2VyU2VydmljZS5zdG9yZSQodGhpcy5zZXR0aW5ncz8uc3RvcmUpXG4gICAgLnN1YnNjcmliZShkYXRhID0+IHRoaXMuc2V0U3RhdGUoZGF0YSkpXG5cbiAgfVxuXG4gIHJlc3RvcmVTdGF0ZSgpOiBTdWJzY3JpcHRpb24ge1xuXG4gICAgcmV0dXJuIHRoaXMubG9jYWxTdG9yYWdlTWFuYWdlclNlcnZpY2Uuc3RvcmUkKHRoaXMuc2V0dGluZ3M/LnN0b3JlKVxuICAgIC5waXBlKHRha2UoMSkpXG4gICAgLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgIHRoaXMudXBkYXRlRGF0YShkYXRhKVxuICAgIH0pXG5cbiAgfVxuXG4gIHVwZGF0ZVN0YXRlKHN0YXRlOiBhbnkpIHtcbiAgICBpZih0aGlzLmlzUmVzdG9yaW5nKSByZXR1cm5cbiAgICB0aGlzLmxvY2FsU3RvcmFnZU1hbmFnZXJTZXJ2aWNlLnVwZGF0ZVN0b3JlKHtcbiAgICAgIG5hbWU6IHRoaXMuc2V0dGluZ3M/LnN0b3JlLFxuICAgICAgZGF0YTogc3RhdGVcbiAgICB9KVxuXG4gIH1cblxuICAvLyBTZWxlY3RvcnNcbiAgcmVhZG9ubHkgZGF0YSQgPSB0aGlzLnNlbGVjdCgoc3RhdGU6IGFueSkgPT4ge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5vcHRpb25zLm1vZGVsO1xuICAgIHJldHVybiAodHlwZW9mIG1vZGVsID09PSAnZnVuY3Rpb24nICYmICFtb2RlbC5wcm90b3R5cGUpID8gbW9kZWwoc3RhdGUpIDogc3RhdGVcbiAgfSk7XG5cbiAgLy8gVXBkYXRlcnNcbiAgcmVhZG9ubHkgdXBkYXRlRGF0YSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGRhdGE6IGFueSkgPT4ge1xuXG4gICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMoZGF0YSlbMF1cbiAgICBjb25zdCBoYXNLZXkgPSBPYmplY3Qua2V5cyhzdGF0ZSkuaW5jbHVkZXMoa2V5KVxuXG4gICAgaWYgKCFoYXNLZXkpIHJldHVybiBzdGF0ZVxuICAgIGNvbnN0IG5ld1N0YXRlID0geyAuLi5zdGF0ZSwgW2tleV06IGRhdGFba2V5XSB9XG4gICAgdGhpcy51cGRhdGVTdGF0ZShuZXdTdGF0ZSlcbiAgICByZXR1cm4geyAuLi5zdGF0ZSwgLi4ubmV3U3RhdGUgfVxuXG4gIH0pXG5cbn1cbiJdfQ==
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUtc3RhdGUtbWFuYWdlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9zdG9yZS1zdGF0ZS1tYW5hZ2VyLXNlcnZpY2Uvc3RvcmUtc3RhdGUtbWFuYWdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQzVHLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBTzFDLE1BQU0sT0FBTyx3QkFBd0UsU0FBUSxjQUFpQjtJQVM1RyxZQUNVLFVBQStCLG1CQUFtQixDQUFDLEtBQUssRUFBRTtRQUVsRSxLQUFLLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7UUFGckMsWUFBTyxHQUFQLE9BQU8sQ0FBbUQ7UUFScEUsK0JBQTBCLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUE7UUFFL0Qsa0JBQWEsR0FBRyxJQUFJLFlBQVksQ0FBQTtRQUNoQyxhQUFRLEdBQVEsSUFBSSxDQUFBO1FBRVosZ0JBQVcsR0FBRyxLQUFLLENBQUE7UUFrRDNCLFlBQVk7UUFDSCxVQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQzFDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyxPQUFPLEtBQUssS0FBSyxVQUFVLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO1FBQ2pGLENBQUMsQ0FBQyxDQUFDO1FBRUgsV0FBVztRQUNGLGVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQVMsRUFBRSxFQUFFO1lBRXRELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDaEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUE7WUFFL0MsSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTyxLQUFLLENBQUE7WUFDekIsTUFBTSxRQUFRLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFBO1lBQy9DLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDMUIsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUE7UUFFbEMsQ0FBQyxDQUFDLENBQUE7UUE3REEsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNwQixDQUFDO0lBRU8sTUFBTSxDQUFDLElBQUksQ0FBQyxPQUE0QjtRQUU5QyxNQUFNLEtBQUssR0FBRyxPQUFPLEVBQUUsS0FBSyxDQUFBO1FBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUUsS0FBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFFOUMsQ0FBQztJQUVELElBQUksQ0FBQyxPQUE2QjtRQUVoQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQTtRQUV2QixJQUFJLENBQUMsMEJBQTBCLENBQUMsV0FBVyxDQUFDO1lBQzFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUs7WUFDMUIsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFO1lBQzVCLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU87U0FDaEMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQzthQUMzRCxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFFekMsQ0FBQztJQUVELFlBQVk7UUFFVixPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUM7YUFDbEUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNiLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3ZCLENBQUMsQ0FBQyxDQUFBO0lBRUosQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFVO1FBQ3BCLElBQUcsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFNO1FBQzNCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxXQUFXLENBQUM7WUFDMUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSztZQUMxQixJQUFJLEVBQUUsS0FBSztTQUNaLENBQUMsQ0FBQTtJQUVKLENBQUM7K0dBdkRVLHdCQUF3QjttSEFBeEIsd0JBQXdCLGNBRnZCLE1BQU07OzRGQUVQLHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NhbFN0b3JhZ2VNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uL2xvY2FsLXN0b3JhZ2UtbWFuYWdlci1zZXJ2aWNlL2xvY2FsLXN0b3JhZ2UtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50U3RvcmUgfSBmcm9tICdAbmdyeC9jb21wb25lbnQtc3RvcmUnO1xuaW1wb3J0IHsgU3RhdGVTdG9yYWdlT3B0aW9ucyB9IGZyb20gJy4vbW9kZWxzL3N0YXRlLXN0b3JhZ2Utb3B0aW9ucy5tb2RlbCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIHRha2UgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTdGF0ZVN0b3JlTWFuYWdlckRhdGE8VD4ge31cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU3RvcmVTdGF0ZU1hbmFnZXJTZXJ2aWNlPFQgZXh0ZW5kcyBvYmplY3QgPSBTdGF0ZVN0b3JlTWFuYWdlckRhdGE8YW55Pj4gZXh0ZW5kcyBDb21wb25lbnRTdG9yZTxUPiB7XG5cbiAgbG9jYWxTdG9yYWdlTWFuYWdlclNlcnZpY2UgPSBpbmplY3QoTG9jYWxTdG9yYWdlTWFuYWdlclNlcnZpY2UpXG5cbiAgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb25cbiAgc2V0dGluZ3M6IGFueSA9IG51bGxcblxuICBwcml2YXRlIGlzUmVzdG9yaW5nID0gZmFsc2VcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG9wdGlvbnM6IFN0YXRlU3RvcmFnZU9wdGlvbnMgPSBTdGF0ZVN0b3JhZ2VPcHRpb25zLmFkYXB0KClcbiAgKSB7XG4gICAgc3VwZXIoU3RvcmVTdGF0ZU1hbmFnZXJTZXJ2aWNlLmluaXQob3B0aW9ucykpXG4gICAgdGhpcy5pbml0KG9wdGlvbnMpXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBpbml0KG9wdGlvbnM6IFN0YXRlU3RvcmFnZU9wdGlvbnMpOiBhbnkge1xuXG4gICAgY29uc3QgbW9kZWwgPSBvcHRpb25zPy5tb2RlbFxuICAgIHJldHVybiAobW9kZWwpID8gKG1vZGVsIGFzICgpID0+IGFueSkoKSA6IHt9XG5cbiAgfVxuXG4gIGluaXQob3B0aW9ucz86IFN0YXRlU3RvcmFnZU9wdGlvbnMpIHtcblxuICAgIHRoaXMuc2V0dGluZ3MgPSBvcHRpb25zXG5cbiAgICB0aGlzLmxvY2FsU3RvcmFnZU1hbmFnZXJTZXJ2aWNlLmNyZWF0ZVN0b3JlKHtcbiAgICAgIG5hbWU6IHRoaXMuc2V0dGluZ3M/LnN0b3JlLFxuICAgICAgZGF0YTogdGhpcy5zZXR0aW5ncz8ubW9kZWwoKSxcbiAgICAgIG9wdGlvbnM6IHRoaXMuc2V0dGluZ3M/Lm9wdGlvbnMsXG4gICAgfSlcblxuICAgIHRoaXMubG9jYWxTdG9yYWdlTWFuYWdlclNlcnZpY2Uuc3RvcmUkKHRoaXMuc2V0dGluZ3M/LnN0b3JlKVxuICAgIC5zdWJzY3JpYmUoZGF0YSA9PiB0aGlzLnNldFN0YXRlKGRhdGEpKVxuXG4gIH1cblxuICByZXN0b3JlU3RhdGUoKTogU3Vic2NyaXB0aW9uIHtcblxuICAgIHJldHVybiB0aGlzLmxvY2FsU3RvcmFnZU1hbmFnZXJTZXJ2aWNlLnN0b3JlJCh0aGlzLnNldHRpbmdzPy5zdG9yZSlcbiAgICAucGlwZSh0YWtlKDEpKVxuICAgIC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZURhdGEoZGF0YSlcbiAgICB9KVxuXG4gIH1cblxuICB1cGRhdGVTdGF0ZShzdGF0ZTogYW55KSB7XG4gICAgaWYodGhpcy5pc1Jlc3RvcmluZykgcmV0dXJuXG4gICAgdGhpcy5sb2NhbFN0b3JhZ2VNYW5hZ2VyU2VydmljZS51cGRhdGVTdG9yZSh7XG4gICAgICBuYW1lOiB0aGlzLnNldHRpbmdzPy5zdG9yZSxcbiAgICAgIGRhdGE6IHN0YXRlXG4gICAgfSlcblxuICB9XG5cbiAgLy8gU2VsZWN0b3JzXG4gIHJlYWRvbmx5IGRhdGEkID0gdGhpcy5zZWxlY3QoKHN0YXRlOiBhbnkpID0+IHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMub3B0aW9ucy5tb2RlbDtcbiAgICByZXR1cm4gKHR5cGVvZiBtb2RlbCA9PT0gJ2Z1bmN0aW9uJyAmJiAhbW9kZWwucHJvdG90eXBlKSA/IG1vZGVsKHN0YXRlKSA6IHN0YXRlXG4gIH0pO1xuXG4gIC8vIFVwZGF0ZXJzXG4gIHJlYWRvbmx5IHVwZGF0ZURhdGEgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBkYXRhOiBhbnkpID0+IHtcblxuICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKGRhdGEpWzBdXG4gICAgY29uc3QgaGFzS2V5ID0gT2JqZWN0LmtleXMoc3RhdGUpLmluY2x1ZGVzKGtleSlcblxuICAgIGlmICghaGFzS2V5KSByZXR1cm4gc3RhdGVcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHsgLi4uc3RhdGUsIFtrZXldOiBkYXRhW2tleV0gfVxuICAgIHRoaXMudXBkYXRlU3RhdGUobmV3U3RhdGUpXG4gICAgcmV0dXJuIHsgLi4uc3RhdGUsIC4uLm5ld1N0YXRlIH1cblxuICB9KVxuXG59XG4iXX0=
@@ -1,4 +1,5 @@
1
1
  export * from "./asymmetrical-encryption.service";
2
2
  export * from './symmetrical-encryption.service';
3
+ export * from './encryption-test.service';
3
4
  export * from './random';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL3V0aWxzL2VuY3J5cHRpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLGtDQUFrQyxDQUFDO0FBRWpELGNBQWMsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vYXN5bW1ldHJpY2FsLWVuY3J5cHRpb24uc2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSAnLi9zeW1tZXRyaWNhbC1lbmNyeXB0aW9uLnNlcnZpY2UnO1xuXG5leHBvcnQgKiBmcm9tICcuL3JhbmRvbSc7XG5cbiJdfQ==
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL3V0aWxzL2VuY3J5cHRpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsMkJBQTJCLENBQUM7QUFFMUMsY0FBYyxVQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9hc3ltbWV0cmljYWwtZW5jcnlwdGlvbi5zZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tICcuL3N5bW1ldHJpY2FsLWVuY3J5cHRpb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2VuY3J5cHRpb24tdGVzdC5zZXJ2aWNlJztcblxuZXhwb3J0ICogZnJvbSAnLi9yYW5kb20nO1xuXG4iXX0=
@@ -49,4 +49,16 @@ export const RandomSignature = () => {
49
49
  export const UUID = () => {
50
50
  return self.crypto.randomUUID();
51
51
  };
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy91dGlscy9lbmNyeXB0aW9uL3JhbmRvbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsR0FBRyxFQUFFO0lBQ3pCLE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3BDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDekQsTUFBTSxXQUFXLEdBQUcsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ2hELE9BQU8sV0FBVyxDQUFBO0FBQ3BCLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQVcsRUFBRSxHQUFXLEVBQUUsRUFBRTtJQUN2RCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFBO0FBQ3pDLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQVcsRUFBRSxHQUFXLEVBQUUsTUFBYyxFQUFFLEVBQUU7SUFDeEUsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFBO0lBQzVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFO1FBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFBO0lBQy9FLE9BQU8sT0FBTyxDQUFBO0FBQ2hCLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsR0FBVyxFQUFFLEdBQVcsRUFBRSxNQUFjLEVBQUUsRUFBRTtJQUM5RSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFFZCxxRkFBcUY7SUFDckYsSUFBSSxNQUFNLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDN0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDOUIsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO0lBQzdCLE1BQU0sV0FBVyxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUUsQ0FBQyxzQ0FBc0M7SUFFekUsT0FBTyxPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sSUFBSSxLQUFLLEdBQUcsV0FBVyxFQUFFLENBQUM7UUFFdEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7UUFFN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxLQUFLLElBQUksV0FBVyxFQUFFLENBQUM7UUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsR0FBRyxFQUFFO0lBRTVCLE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3BDLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2hDLE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDN0IsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBRTlCLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxHQUFHLEVBQUU7SUFFbEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDcEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDaEMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM3QixPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUVqQixDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFO0lBQ3ZCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQTtBQUNqQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgUmFuZG9tID0gKCkgPT4ge1xuICBjb25zdCB0eXBlZEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoMSlcbiAgY29uc3QgcmFuZG9tVmFsdWUgPSBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHR5cGVkQXJyYXkpWzBdXG4gIGNvbnN0IHJhbmRvbUZsb2F0ID0gcmFuZG9tVmFsdWUgLyBNYXRoLnBvdygyLCA4KVxuICByZXR1cm4gcmFuZG9tRmxvYXRcbn1cblxuZXhwb3J0IGNvbnN0IFJhbmRvbU51bWJlciA9IChtaW46IG51bWJlciwgbWF4OiBudW1iZXIpID0+IHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoUmFuZG9tKCkgKiBtYXgpICsgbWluXG59XG5cbmV4cG9ydCBjb25zdCBSYW5kb21OdW1iZXJzID0gKG1pbjogbnVtYmVyLCBtYXg6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpID0+IHtcbiAgY29uc3QgbnVtYmVyczogbnVtYmVyW10gPSBbXVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSBudW1iZXJzLnB1c2goTWF0aC5mbG9vcihSYW5kb20oKSAqIG1heCkgKyBtaW4pXG4gIHJldHVybiBudW1iZXJzXG59XG5cbmV4cG9ydCBjb25zdCBSYW5kb21OdW1iZXJzVW5pcXVlID0gKG1pbjogbnVtYmVyLCBtYXg6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpID0+IHtcbiAgbGV0IGNvdW50ID0gMDtcblxuICAvLyBBZGp1c3QgdGhlIGxlbmd0aCBpZiBpdCBleGNlZWRzIHRoZSBudW1iZXIgb2YgdW5pcXVlIG51bWJlcnMgcG9zc2libGUgaW4gdGhlIHJhbmdlXG4gIGlmIChsZW5ndGggPiAobWF4IC0gbWluICsgMSkpIHtcbiAgICBjb25zb2xlLmVycm9yKCdlcnJvciBlbmNvdW50ZXJlZCcpO1xuICAgIGxlbmd0aCA9IG1heCAtIG1pbiArIDE7XG4gIH1cblxuICBjb25zb2xlLmxvZygnbGVuZ3RoJywgbGVuZ3RoKTtcbiAgY29uc3QgbnVtYmVyczogbnVtYmVyW10gPSBbXTtcbiAgY29uc3QgbWF4QXR0ZW1wdHMgPSBsZW5ndGggKiAxMDAgOyAvLyBTYWZlZ3VhcmQgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wc1xuXG4gIHdoaWxlIChudW1iZXJzLmxlbmd0aCA8IGxlbmd0aCAmJiBjb3VudCA8IG1heEF0dGVtcHRzKSB7XG5cbiAgICBjb25zdCBudW0gPSBNYXRoLmZsb29yKFJhbmRvbSgpICogbWF4KSArIG1pbjtcblxuICAgIGlmICghbnVtYmVycy5pbmNsdWRlcyhudW0pKSB7XG4gICAgICBudW1iZXJzLnB1c2gobnVtKTtcbiAgICB9XG4gIH1cblxuICBpZiAoY291bnQgPj0gbWF4QXR0ZW1wdHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01heGltdW0gYXR0ZW1wdHMgZXhjZWVkZWQgd2hpbGUgZ2VuZXJhdGluZyB1bmlxdWUgbnVtYmVycycpO1xuICB9XG5cbiAgcmV0dXJuIG51bWJlcnM7XG59O1xuXG5leHBvcnQgY29uc3QgUmFuZG9tU3RyID0gKCkgPT4ge1xuXG4gIGNvbnN0IHR5cGVkQXJyYXkgPSBuZXcgVWludDhBcnJheSg4KVxuICBjb25zdCBhcnJheSA9IG5ldyBVaW50MzJBcnJheSgxKVxuICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycmF5KVxuICByZXR1cm4gYXJyYXlbMF0udG9TdHJpbmcoMzYpXG5cbn1cblxuZXhwb3J0IGNvbnN0IFJhbmRvbVNpZ25hdHVyZSA9ICgpID0+IHtcblxuICBjb25zdCB0eXBlZEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoOClcbiAgY29uc3QgYXJyYXkgPSBuZXcgVWludDMyQXJyYXkoMSlcbiAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnJheSlcbiAgcmV0dXJuIGFycmF5WzBdXG5cbn1cblxuZXhwb3J0IGNvbnN0IFVVSUQgPSAoKSA9PiB7XG4gIHJldHVybiBzZWxmLmNyeXB0by5yYW5kb21VVUlEKClcbn1cblxuXG4iXX0=
52
+ /**
53
+ * Generate a UUID string (legacy format)
54
+ */
55
+ export const UUID_STR = () => {
56
+ const s4 = () => {
57
+ return Math.floor((1 + Random()) * 0x10000)
58
+ .toString(16)
59
+ .substring(1);
60
+ };
61
+ // 'aaaaaaaa'-'aaaa'-'aaaa'-'aaaa'-'aaaaaaaaaaaa'
62
+ return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
63
+ };
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy91dGlscy9lbmNyeXB0aW9uL3JhbmRvbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsR0FBRyxFQUFFO0lBQ3pCLE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3BDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDekQsTUFBTSxXQUFXLEdBQUcsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ2hELE9BQU8sV0FBVyxDQUFBO0FBQ3BCLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQVcsRUFBRSxHQUFXLEVBQUUsRUFBRTtJQUN2RCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFBO0FBQ3pDLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQVcsRUFBRSxHQUFXLEVBQUUsTUFBYyxFQUFFLEVBQUU7SUFDeEUsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFBO0lBQzVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFO1FBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFBO0lBQy9FLE9BQU8sT0FBTyxDQUFBO0FBQ2hCLENBQUMsQ0FBQTtBQUVE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RUFBRSxDQUFDO0FBQ3ZGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBSYW5kb20gPSAoKSA9PiB7XG4gIGNvbnN0IHR5cGVkQXJyYXkgPSBuZXcgVWludDhBcnJheSgxKVxuICBjb25zdCByYW5kb21WYWx1ZSA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXModHlwZWRBcnJheSlbMF1cbiAgY29uc3QgcmFuZG9tRmxvYXQgPSByYW5kb21WYWx1ZSAvIE1hdGgucG93KDIsIDgpXG4gIHJldHVybiByYW5kb21GbG9hdFxufVxuXG5leHBvcnQgY29uc3QgUmFuZG9tTnVtYmVyID0gKG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcikgPT4ge1xuICByZXR1cm4gTWF0aC5mbG9vcihSYW5kb20oKSAqIG1heCkgKyBtaW5cbn1cblxuZXhwb3J0IGNvbnN0IFJhbmRvbU51bWJlcnMgPSAobWluOiBudW1iZXIsIG1heDogbnVtYmVyLCBsZW5ndGg6IG51bWJlcikgPT4ge1xuICBjb25zdCBudW1iZXJzOiBudW1iZXJbXSA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIG51bWJlcnMucHVzaChNYXRoLmZsb29yKFJhbmRvbSgpICogbWF4KSArIG1pbilcbiAgcmV0dXJuIG51bWJlcnNcbn1cblxuZXhwb3J0IGNvbnN0IFJhbmRvbU51bWJlcnNVbmlxdWUgPSAobWluOiBudW1iZXIsIG1heDogbnVtYmVyLCBsZW5ndGg6IG51bWJlcikgPT4ge1xuICBsZXQgY291bnQgPSAwO1xuXG4gIC8vIEFkanVzdCB0aGUgbGVuZ3RoIGlmIGl0IGV4Y2VlZHMgdGhlIG51bWJlciBvZiB1bmlxdWUgbnVtYmVycyBwb3NzaWJsZSBpbiB0aGUgcmFuZ2VcbiAgaWYgKGxlbmd0aCA+IChtYXggLSBtaW4gKyAxKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ2Vycm9yIGVuY291bnRlcmVkJyk7XG4gICAgbGVuZ3RoID0gbWF4IC0gbWluICsgMTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKCdsZW5ndGgnLCBsZW5ndGgpO1xuICBjb25zdCBudW1iZXJzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBtYXhBdHRlbXB0cyA9IGxlbmd0aCAqIDEwMCA7IC8vIFNhZmVndWFyZCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzXG5cbiAgd2hpbGUgKG51bWJlcnMubGVuZ3RoIDwgbGVuZ3RoICYmIGNvdW50IDwgbWF4QXR0ZW1wdHMpIHtcblxuICAgIGNvbnN0IG51bSA9IE1hdGguZmxvb3IoUmFuZG9tKCkgKiBtYXgpICsgbWluO1xuXG4gICAgaWYgKCFudW1iZXJzLmluY2x1ZGVzKG51bSkpIHtcbiAgICAgIG51bWJlcnMucHVzaChudW0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb3VudCA+PSBtYXhBdHRlbXB0cykge1xuICAgIHRocm93IG5ldyBFcnJvcignTWF4aW11bSBhdHRlbXB0cyBleGNlZWRlZCB3aGlsZSBnZW5lcmF0aW5nIHVuaXF1ZSBudW1iZXJzJyk7XG4gIH1cblxuICByZXR1cm4gbnVtYmVycztcbn07XG5cbmV4cG9ydCBjb25zdCBSYW5kb21TdHIgPSAoKSA9PiB7XG5cbiAgY29uc3QgdHlwZWRBcnJheSA9IG5ldyBVaW50OEFycmF5KDgpXG4gIGNvbnN0IGFycmF5ID0gbmV3IFVpbnQzMkFycmF5KDEpXG4gIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYXJyYXkpXG4gIHJldHVybiBhcnJheVswXS50b1N0cmluZygzNilcblxufVxuXG5leHBvcnQgY29uc3QgUmFuZG9tU2lnbmF0dXJlID0gKCkgPT4ge1xuXG4gIGNvbnN0IHR5cGVkQXJyYXkgPSBuZXcgVWludDhBcnJheSg4KVxuICBjb25zdCBhcnJheSA9IG5ldyBVaW50MzJBcnJheSgxKVxuICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycmF5KVxuICByZXR1cm4gYXJyYXlbMF1cblxufVxuXG5leHBvcnQgY29uc3QgVVVJRCA9ICgpID0+IHtcbiAgcmV0dXJuIHNlbGYuY3J5cHRvLnJhbmRvbVVVSUQoKVxufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgVVVJRCBzdHJpbmcgKGxlZ2FjeSBmb3JtYXQpXG4gKi9cbmV4cG9ydCBjb25zdCBVVUlEX1NUUiA9ICgpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBzNCA9ICgpID0+IHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcigoMSArIFJhbmRvbSgpKSAqIDB4MTAwMDApXG4gICAgICAudG9TdHJpbmcoMTYpXG4gICAgICAuc3Vic3RyaW5nKDEpO1xuICB9O1xuICAvLyAnYWFhYWFhYWEnLSdhYWFhJy0nYWFhYSctJ2FhYWEnLSdhYWFhYWFhYWFhYWEnXG4gIHJldHVybiBzNCgpICsgczQoKSArICctJyArIHM0KCkgKyAnLScgKyBzNCgpICsgJy0nICsgczQoKSArICctJyArIHM0KCkgKyBzNCgpICsgczQoKTtcbn07XG5cblxuIl19