tas-uell-sdk 0.1.3 → 0.3.0

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 (29) hide show
  1. package/README.md +3 -0
  2. package/esm2020/lib/components/tas-btn/tas-btn.component.mjs +17 -15
  3. package/esm2020/lib/components/tas-feedback-modal/tas-feedback-modal.component.mjs +229 -0
  4. package/esm2020/lib/components/tas-floating-call/tas-floating-call.component.mjs +38 -3
  5. package/esm2020/lib/components/tas-incoming-appointment/tas-incoming-appointment.component.mjs +46 -8
  6. package/esm2020/lib/components/tas-videocall/tas-videocall.component.mjs +163 -43
  7. package/esm2020/lib/components/tas-waiting-room/tas-waiting-room.component.mjs +150 -34
  8. package/esm2020/lib/icons/tas-icons.mjs +17 -0
  9. package/esm2020/lib/interfaces/tas.interfaces.mjs +13 -1
  10. package/esm2020/lib/services/tas.service.mjs +127 -26
  11. package/esm2020/lib/tas-uell-sdk.module.mjs +8 -3
  12. package/esm2020/public-api.mjs +2 -1
  13. package/fesm2015/tas-uell-sdk.mjs +794 -124
  14. package/fesm2015/tas-uell-sdk.mjs.map +1 -1
  15. package/fesm2020/tas-uell-sdk.mjs +787 -123
  16. package/fesm2020/tas-uell-sdk.mjs.map +1 -1
  17. package/lib/components/tas-btn/tas-btn.component.d.ts +1 -0
  18. package/lib/components/tas-feedback-modal/tas-feedback-modal.component.d.ts +101 -0
  19. package/lib/components/tas-floating-call/tas-floating-call.component.d.ts +5 -0
  20. package/lib/components/tas-incoming-appointment/tas-incoming-appointment.component.d.ts +12 -1
  21. package/lib/components/tas-videocall/tas-videocall.component.d.ts +49 -6
  22. package/lib/components/tas-waiting-room/tas-waiting-room.component.d.ts +40 -12
  23. package/lib/icons/tas-icons.d.ts +8 -0
  24. package/lib/interfaces/tas.interfaces.d.ts +36 -3
  25. package/lib/services/tas.service.d.ts +27 -2
  26. package/lib/tas-uell-sdk.module.d.ts +5 -4
  27. package/package.json +1 -1
  28. package/public-api.d.ts +1 -0
  29. package/src/lib/styles/tas-global.scss +17 -0
@@ -30,6 +30,7 @@ export class TasWaitingRoomComponent {
30
30
  this.state = WaitingRoomState.CHECKING_STATUS;
31
31
  this.WaitingRoomState = WaitingRoomState; // Expose enum to template
32
32
  this.errorMessage = '';
33
+ this.showErrorDetails = false;
33
34
  this.isJoinable = false;
34
35
  // Session data from status response
35
36
  this.resolvedSessionId = '';
@@ -41,19 +42,40 @@ export class TasWaitingRoomComponent {
41
42
  this.videoCallModalRef = null;
42
43
  // Geolocation
43
44
  this.geoPosition = null;
45
+ this.geoWasDenied = false; // Tracks if user denied geo permission
46
+ this.geoResultSent = false; // Tracks if geo result was already sent
47
+ // Permission tracking for auto-join
48
+ this.mediaPermissionsGranted = false;
49
+ this.geoPermissionsResolved = false;
50
+ // Auto-retry tracking
51
+ this.retryCount = 0;
52
+ this.MAX_RETRIES = 1;
44
53
  }
45
54
  /** Whether current user is an owner */
46
55
  get isOwner() {
47
56
  return this.currentUser?.role === TasUserRole.OWNER;
48
57
  }
58
+ /** Whether we're still requesting permissions (for template) */
59
+ get isRequestingPermissions() {
60
+ return !this.mediaPermissionsGranted || (!this.geoPermissionsResolved && !this.isOwner && !this.isBackoffice);
61
+ }
62
+ /** Whether we're waiting for admission after permissions granted (for template) */
63
+ get isWaitingForAdmission() {
64
+ return this.mediaPermissionsGranted &&
65
+ (this.geoPermissionsResolved || this.isOwner || this.isBackoffice) &&
66
+ !this.isJoinable;
67
+ }
49
68
  ngOnInit() {
50
69
  console.log('[TAS DEBUG] TasWaitingRoomComponent.ngOnInit');
51
70
  this.requestMediaPermissions();
71
+ // Request geolocation permission and cache it (but don't send to backend yet)
72
+ // The cached position will be sent when owner requests it via activateGeo
52
73
  this.requestGeolocation();
53
74
  this.checkStatus();
54
75
  }
55
76
  /**
56
77
  * Request camera and microphone permissions.
78
+ * Triggers auto-join when permissions are resolved.
57
79
  */
58
80
  async requestMediaPermissions() {
59
81
  console.log('[TAS DEBUG] Requesting media permissions...');
@@ -62,37 +84,71 @@ export class TasWaitingRoomComponent {
62
84
  // Stop tracks immediately - we just needed the permission
63
85
  stream.getTracks().forEach(track => track.stop());
64
86
  console.log('[TAS DEBUG] Media permissions granted');
87
+ this.mediaPermissionsGranted = true;
65
88
  }
66
89
  catch (error) {
67
90
  console.warn('[TAS DEBUG] Media permissions denied or unavailable:', error);
91
+ // Still allow joining - some users may not have camera/mic
92
+ this.mediaPermissionsGranted = true;
68
93
  }
94
+ this.tryAutoJoin();
95
+ this.cdr.detectChanges();
69
96
  }
70
97
  /**
71
- * Request geolocation immediately on init.
98
+ * Request geolocation permission and cache result.
72
99
  * Only for regular users (not owners/backoffice).
73
- * If user allows, store position and send to backend.
100
+ * Actual send to backend happens after we have videoCallId.
101
+ * Triggers auto-join when geolocation is resolved.
74
102
  */
75
103
  async requestGeolocation() {
76
104
  // Only request geolocation for regular users, not owners/backoffice
77
105
  if (this.isOwner || this.isBackoffice) {
78
106
  console.log('[TAS DEBUG] Skipping geolocation for owner/backoffice');
107
+ this.geoPermissionsResolved = true;
79
108
  return;
80
109
  }
81
- console.log('[TAS DEBUG] Requesting geolocation...');
110
+ console.log('[TAS DEBUG] Requesting geolocation permission...');
82
111
  const position = await this.geolocationService.getCurrentPosition();
83
112
  if (position) {
84
- console.log('[TAS DEBUG] Geolocation obtained:', position);
113
+ console.log('[TAS DEBUG] Geolocation granted:', position);
85
114
  this.geoPosition = position;
86
- // Send to backend when videoCallId is available
87
- this.sendGeolocationToBackend();
115
+ this.geoWasDenied = false;
88
116
  }
89
117
  else {
90
118
  console.log('[TAS DEBUG] Geolocation denied or unavailable');
119
+ this.geoPosition = null;
120
+ this.geoWasDenied = true;
121
+ }
122
+ this.geoPermissionsResolved = true;
123
+ // If we already have videoCallId, send now. Otherwise, it will be sent after status response.
124
+ this.sendGeoResultToBackend();
125
+ this.tryAutoJoin();
126
+ this.cdr.detectChanges();
127
+ }
128
+ /**
129
+ * Send geo result to backend (granted or denied).
130
+ * Only sends if videoCallId is available and not already sent.
131
+ */
132
+ sendGeoResultToBackend() {
133
+ if (!this.videoCallId) {
134
+ console.log('[TAS DEBUG] Cannot send geo result: videoCallId not available yet');
135
+ return;
136
+ }
137
+ if (this.geoResultSent) {
138
+ console.log('[TAS DEBUG] Geo result already sent, skipping');
139
+ return;
140
+ }
141
+ if (this.geoPosition) {
142
+ this.sendGeolocationToBackend();
143
+ this.geoResultSent = true;
144
+ }
145
+ else if (this.geoWasDenied) {
146
+ this.sendGeoDenialToBackend();
147
+ this.geoResultSent = true;
91
148
  }
92
149
  }
93
150
  /**
94
- * Send geolocation to backend via modify user endpoint.
95
- * NOTE: Endpoint call is prepared but may not be active yet.
151
+ * Send granted geolocation to backend via modify user endpoint.
96
152
  */
97
153
  sendGeolocationToBackend() {
98
154
  if (!this.geoPosition || !this.videoCallId) {
@@ -100,7 +156,6 @@ export class TasWaitingRoomComponent {
100
156
  }
101
157
  console.log('[TAS DEBUG] Sending geolocation to backend...');
102
158
  const body = {
103
- userId: this.currentUser?.id,
104
159
  videoCallId: this.videoCallId,
105
160
  action: UserCallAction.ACTIVATE_GEOLOCATION,
106
161
  latitude: this.geoPosition.latitude,
@@ -111,6 +166,23 @@ export class TasWaitingRoomComponent {
111
166
  error: (err) => console.error('[TAS DEBUG] Failed to send geolocation:', err),
112
167
  });
113
168
  }
169
+ /**
170
+ * Send geolocation denial to backend via modify user endpoint.
171
+ */
172
+ sendGeoDenialToBackend() {
173
+ if (!this.videoCallId) {
174
+ return;
175
+ }
176
+ console.log('[TAS DEBUG] Sending geo denial to backend...');
177
+ const body = {
178
+ videoCallId: this.videoCallId,
179
+ action: UserCallAction.DENY_GEOLOCATION,
180
+ };
181
+ this.tasService.modifyProxyVideoUser(body).subscribe({
182
+ next: () => console.log('[TAS DEBUG] Geo denial sent successfully'),
183
+ error: (err) => console.error('[TAS DEBUG] Failed to send geo denial:', err),
184
+ });
185
+ }
114
186
  ngOnDestroy() {
115
187
  console.log('[TAS DEBUG] TasWaitingRoomComponent.ngOnDestroy');
116
188
  this.subscriptions.unsubscribe();
@@ -144,8 +216,8 @@ export class TasWaitingRoomComponent {
144
216
  this.resolvedAppointmentId = content.appointmentId;
145
217
  this.videoCallId = content.videoCallId;
146
218
  console.log('[TAS DEBUG] Status response:', content);
147
- // Try to send geolocation now that we have videoCallId
148
- this.sendGeolocationToBackend();
219
+ // Now that we have videoCallId, send geo result if not already sent
220
+ this.sendGeoResultToBackend();
149
221
  // Start polling for status updates
150
222
  this.tasService.startStatusPolling(statusParams);
151
223
  // Subscribe to joinable status
@@ -161,7 +233,8 @@ export class TasWaitingRoomComponent {
161
233
  }));
162
234
  }
163
235
  /**
164
- * Handle changes to joinable status
236
+ * Handle changes to joinable status.
237
+ * Triggers auto-join when joinable becomes true.
165
238
  */
166
239
  handleJoinableChange(joinable) {
167
240
  console.log('[TAS DEBUG] handleJoinableChange called', {
@@ -177,10 +250,11 @@ export class TasWaitingRoomComponent {
177
250
  console.log('[TAS DEBUG] Skipping state update - already in:', this.state);
178
251
  return;
179
252
  }
180
- // Both users and owners: show join button based on joinable
253
+ // Update state and attempt auto-join
181
254
  if (joinable) {
182
- console.log('[TAS DEBUG] Joinable is true, showing join button');
255
+ console.log('[TAS DEBUG] Joinable is true, attempting auto-join');
183
256
  this.state = WaitingRoomState.READY;
257
+ this.tryAutoJoin();
184
258
  }
185
259
  else {
186
260
  console.log('[TAS DEBUG] Waiting for joinable...');
@@ -189,11 +263,33 @@ export class TasWaitingRoomComponent {
189
263
  this.cdr.detectChanges();
190
264
  }
191
265
  /**
192
- * Called when user clicks the join button.
193
- * Calls /start to get token then auto-joins.
266
+ * Attempt to auto-join the session when all conditions are met.
267
+ * - For owners: just need joinable + sessionId
268
+ * - For users: need media permissions + geo resolved + joinable + sessionId
194
269
  */
195
- joinSession() {
196
- this.startSessionAndJoin();
270
+ tryAutoJoin() {
271
+ // Don't try if already joining or in error
272
+ if (this.state === WaitingRoomState.GETTING_TOKEN ||
273
+ this.state === WaitingRoomState.JOINING) {
274
+ console.log('[TAS DEBUG] tryAutoJoin skipped - already in state:', this.state);
275
+ return;
276
+ }
277
+ // For owners: just need joinable
278
+ if (this.isOwner) {
279
+ if (this.isJoinable && this.resolvedSessionId) {
280
+ console.log('[TAS DEBUG] Owner auto-joining...');
281
+ this.startSessionAndJoin();
282
+ }
283
+ return;
284
+ }
285
+ // For users: need media + geo resolved + joinable
286
+ if (this.mediaPermissionsGranted &&
287
+ this.geoPermissionsResolved &&
288
+ this.isJoinable &&
289
+ this.resolvedSessionId) {
290
+ console.log('[TAS DEBUG] User auto-joining...');
291
+ this.startSessionAndJoin();
292
+ }
197
293
  }
198
294
  /**
199
295
  * Check if user has owner/backoffice role
@@ -246,30 +342,50 @@ export class TasWaitingRoomComponent {
246
342
  },
247
343
  error: (err) => {
248
344
  console.error('[TAS DEBUG] /start request failed:', err);
249
- this.state = WaitingRoomState.ERROR;
250
- this.errorMessage = err?.error?.message || err?.message || 'Error al iniciar la sesión. Por favor, intente nuevamente.';
251
- this.tasService.stopStatusPolling();
252
- console.log('[TAS DEBUG] State set to ERROR, errorMessage:', this.errorMessage);
253
- this.cdr.detectChanges();
345
+ // Auto-retry on first failure
346
+ if (this.retryCount < this.MAX_RETRIES) {
347
+ this.retryCount++;
348
+ console.log('[TAS DEBUG] Auto-retrying... attempt:', this.retryCount);
349
+ this.state = WaitingRoomState.CHECKING_STATUS;
350
+ this.cdr.detectChanges();
351
+ setTimeout(() => this.startSessionAndJoin(), 2000);
352
+ }
353
+ else {
354
+ // Show error after retry fails
355
+ this.state = WaitingRoomState.ERROR;
356
+ this.errorMessage = err?.error?.message || err?.message || 'Error al iniciar la sesión. Por favor, intente nuevamente.';
357
+ this.tasService.stopStatusPolling();
358
+ console.log('[TAS DEBUG] State set to ERROR, errorMessage:', this.errorMessage);
359
+ this.cdr.detectChanges();
360
+ }
254
361
  },
255
362
  }));
256
363
  }
257
364
  /**
258
- * Closes the waiting room
259
- */
260
- cancel() {
261
- this.tasService.stopStatusPolling();
262
- this.activeModal.dismiss('cancel');
263
- }
264
- /**
265
- * Retry after an error
365
+ * Retry after an error.
366
+ * Resets retry count and restarts the flow.
266
367
  */
267
368
  retry() {
268
369
  this.state = WaitingRoomState.CHECKING_STATUS;
269
370
  this.errorMessage = '';
371
+ this.showErrorDetails = false;
270
372
  this.token = '';
373
+ this.retryCount = 0; // Reset retry count for auto-retry
271
374
  this.checkStatus();
272
375
  }
376
+ /**
377
+ * Toggle the error details dropdown visibility.
378
+ */
379
+ toggleErrorDetails() {
380
+ this.showErrorDetails = !this.showErrorDetails;
381
+ }
382
+ /**
383
+ * Close the waiting room modal.
384
+ */
385
+ close() {
386
+ this.tasService.stopStatusPolling();
387
+ this.activeModal.dismiss('close');
388
+ }
273
389
  openVideoCallModal() {
274
390
  this.videoCallModalRef = this.modalService.open(TasVideocallComponent, {
275
391
  size: 'xl',
@@ -293,10 +409,10 @@ export class TasWaitingRoomComponent {
293
409
  }
294
410
  }
295
411
  TasWaitingRoomComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TasWaitingRoomComponent, deps: [{ token: i1.NgbActiveModal }, { token: i2.TasService }, { token: i3.GeolocationService }, { token: i1.NgbModal }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
296
- TasWaitingRoomComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: TasWaitingRoomComponent, selector: "tas-waiting-room", inputs: { roomType: "roomType", entityId: "entityId", tenant: "tenant", businessRole: "businessRole", currentUser: "currentUser" }, ngImport: i0, template: "<div class=\"tas-waiting-room\">\n <!-- Header -->\n <div class=\"waiting-room-header\">\n <h2 class=\"header-title\">Iniciar turno</h2>\n <button type=\"button\" class=\"close-btn\" (click)=\"cancel()\" aria-label=\"Close\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"waiting-room-content\">\n <!-- CHECKING_STATUS State -->\n <div class=\"state-container\" *ngIf=\"state === WaitingRoomState.CHECKING_STATUS\">\n <div class=\"state-icon loading\">\n <div class=\"spinner\"></div>\n </div>\n <p class=\"state-message\">Verificando estado de la sesi\u00F3n...</p>\n </div>\n\n <!-- WAITING_FOR_JOINABLE State -->\n <div class=\"state-container\" *ngIf=\"state === WaitingRoomState.WAITING_FOR_JOINABLE\">\n <div class=\"state-icon loading\">\n <div class=\"spinner\"></div>\n </div>\n <p class=\"state-message\">Esperando que la sesi\u00F3n est\u00E9 disponible...</p>\n <p class=\"state-submessage\">Por favor, permanec\u00E9 en esta pantalla.</p>\n </div>\n\n <!-- READY State (Join button enabled) -->\n <div class=\"state-container\" *ngIf=\"state === WaitingRoomState.READY\">\n <div class=\"state-icon ready\">\n <i class=\"fa fa-check-circle\"></i>\n </div>\n <p class=\"state-message success\">\u00A1La sala est\u00E1 lista!</p>\n <button type=\"button\" class=\"btn action-btn join-btn\" (click)=\"joinSession()\">\n <i class=\"fa fa-sign-in\"></i>\n Unirse a la llamada\n </button>\n </div>\n\n <!-- JOINING State (Auto-joining) -->\n <div class=\"state-container\" *ngIf=\"state === WaitingRoomState.JOINING\">\n <div class=\"state-icon loading\">\n <div class=\"spinner\"></div>\n </div>\n <p class=\"state-message\">Ingresando a la llamada...</p>\n </div>\n\n <!-- GETTING_TOKEN State -->\n <div class=\"state-container\" *ngIf=\"state === WaitingRoomState.GETTING_TOKEN\">\n <div class=\"state-icon loading\">\n <div class=\"spinner\"></div>\n </div>\n <p class=\"state-message\">Conectando...</p>\n </div>\n\n <!-- ERROR State -->\n <div class=\"state-container\" *ngIf=\"state === WaitingRoomState.ERROR\">\n <div class=\"state-icon error\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n </div>\n <p class=\"state-message error\">Ocurri\u00F3 un error</p>\n <p class=\"error-details\" *ngIf=\"errorMessage\">\n {{ errorMessage }}\n </p>\n <button type=\"button\" class=\"btn action-btn retry-btn\" (click)=\"retry()\">\n <i class=\"fa fa-refresh\"></i>\n Reintentar\n </button>\n </div>\n </div>\n</div>\n", styles: [".tas-waiting-room{display:flex;flex-direction:column;min-height:420px;background:#ffffff;border-radius:5px;overflow:hidden}.waiting-room-header{position:relative;padding:20px 40px;border-bottom:1px solid #e9ecef;display:flex;align-items:center;justify-content:space-between}.waiting-room-header .header-title{margin:0;font-size:18px;font-weight:600;line-height:24px;color:#212529}.waiting-room-header .close-btn{width:32px;height:32px;border:none;background:transparent;border-radius:4px;color:#6c757d;cursor:pointer;transition:all .2s ease;font-size:20px;display:flex;align-items:center;justify-content:center}.waiting-room-header .close-btn:hover{background:#f8f9fa;color:#212529}.waiting-title{font-size:16px;font-weight:600;color:#212529;margin-bottom:8px}.waiting-room-content{flex:1;display:flex;align-items:center;justify-content:center;padding:32px 40px;background:#ffffff}.state-container{text-align:center;max-width:400px;width:100%}.mode-tabs{display:flex;justify-content:center;gap:8px;margin-bottom:24px;padding:4px;background:#f8f9fa;border-radius:8px}.mode-tab{flex:1;padding:10px 16px;font-size:13px;font-weight:600;border:none;border-radius:6px;background:transparent;color:#6c757d;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center;gap:8px}.mode-tab i{font-size:14px}.mode-tab:hover{color:#212529}.mode-tab.active{background:#ffffff;color:#1da4b1;box-shadow:0 2px 8px #00000014}.mode-content{animation:fadeIn .3s ease}.session-input-container{display:flex;flex-direction:column;gap:16px;margin-top:8px}.session-input{width:100%;padding:14px 16px;font-size:14px;border:2px solid #e9ecef;border-radius:8px;background:#ffffff;color:#212529;transition:all .2s ease;text-align:center;font-family:Monaco,Consolas,monospace;letter-spacing:.5px}.session-input::placeholder{color:#6c757d;font-family:inherit;letter-spacing:normal}.session-input:focus{outline:none;border-color:#1da4b1;box-shadow:0 0 0 3px #1da4b126}.session-input:hover:not(:focus){border-color:#6c757d}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.state-icon{width:80px;height:80px;margin:0 auto 24px;border-radius:50%;display:flex;align-items:center;justify-content:center}.state-icon i{font-size:36px}.state-icon.idle{background:rgba(29,164,177,.1);border:2px dashed #1da4b1}.state-icon.idle i{color:#1da4b1}.state-icon.loading{background:rgba(29,164,177,.1);border:2px solid #1da4b1}.state-icon.ready{background:linear-gradient(135deg,#1da4b1 0%,#38b89a 100%);box-shadow:0 4px 16px #1da4b14d}.state-icon.ready i{color:#fff}.state-icon.error{background:rgba(238,49,107,.1);border:2px solid #ee316b}.state-icon.error i{color:#ee316b}.spinner{width:40px;height:40px;border:3px solid #e9ecef;border-top-color:#1da4b1;border-radius:50%;animation:spin 1s linear infinite}.state-message{font-size:16px;font-weight:600;margin:0 0 8px;color:#212529;line-height:24px}.state-message.success{color:#1da4b1}.state-message.error{color:#ee316b}.state-submessage{font-size:14px;color:#6c757d;margin:0 0 24px;font-weight:400}.error-details{font-size:13px;color:#ee316b;margin:0 0 24px;padding:12px 16px;background:rgba(238,49,107,.08);border-radius:8px;border:1px solid rgba(238,49,107,.2)}.progress-steps{display:flex;justify-content:center;gap:24px;margin:24px 0 32px}.step{display:flex;flex-direction:column;align-items:center;gap:8px}.step .step-indicator{width:32px;height:32px;border-radius:50%;background:#f8f9fa;border:2px solid #e9ecef;display:flex;align-items:center;justify-content:center;transition:all .3s ease}.step .step-indicator i{font-size:12px;color:#fff}.step .step-label{font-size:11px;color:#6c757d;text-transform:uppercase;letter-spacing:.5px;font-weight:500}.step.active .step-indicator{background:rgba(29,164,177,.1);border-color:#1da4b1;animation:pulse-active 1.5s infinite}.step.active .step-label{color:#1da4b1;font-weight:600}.step.completed .step-indicator{background:#1da4b1;border-color:#1da4b1}.step.completed .step-label{color:#1da4b1;font-weight:600}.action-btn{padding:12px 32px;font-size:16px;font-weight:600;border-radius:4px;border:none;cursor:pointer;transition:all .2s ease;display:inline-flex;align-items:center;gap:10px}.action-btn i{font-size:16px}.action-btn.create-btn{background:#0077b3;color:#fff;box-shadow:0 2px 8px #0077b340}.action-btn.create-btn:hover{background:#005c8a;box-shadow:0 4px 12px #0077b359}.action-btn.create-btn:active{transform:translateY(1px)}.action-btn.join-btn{background:#1da4b1;color:#fff;box-shadow:0 2px 8px #1da4b140;animation:pulse-ready 2s infinite}.action-btn.join-btn:hover{background:#17848e;box-shadow:0 4px 12px #1da4b159}.action-btn.join-btn:active{transform:translateY(1px)}.action-btn.retry-btn{background:transparent;color:#6c757d;border:1px solid #e9ecef}.action-btn.retry-btn:hover{background:#f8f9fa;border-color:#6c757d;color:#212529}.waiting-room-footer{padding:16px 40px 24px;background:#ffffff;border-top:1px solid #e9ecef;display:flex;justify-content:center}.waiting-room-footer .cancel-btn{padding:10px 24px;font-size:14px;font-weight:600;border-radius:4px;background:transparent;color:#6c757d;border:none;cursor:pointer;transition:all .2s ease}.waiting-room-footer .cancel-btn:hover{background:#f8f9fa;color:#212529}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse-active{0%,to{box-shadow:0 0 #1da4b166}50%{box-shadow:0 0 0 8px #1da4b100}}@keyframes pulse-ready{0%,to{box-shadow:0 2px 8px #1da4b140}50%{box-shadow:0 4px 16px #1da4b166}}@media (max-width: 576px){.tas-waiting-room{min-height:380px}.waiting-room-header{padding:24px 24px 20px}.waiting-room-header .header-icon{width:56px;height:56px}.waiting-room-header .header-icon i{font-size:22px}.waiting-room-header .header-title{font-size:18px}.waiting-room-content{padding:24px}.state-icon{width:64px;height:64px}.state-icon i{font-size:28px}.spinner{width:32px;height:32px}.progress-steps{gap:12px}.step .step-indicator{width:28px;height:28px}.step .step-label{font-size:9px}.action-btn{padding:10px 24px;font-size:14px}.waiting-room-footer{padding:16px 24px 20px}}\n"], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
412
+ TasWaitingRoomComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: TasWaitingRoomComponent, selector: "tas-waiting-room", inputs: { roomType: "roomType", entityId: "entityId", tenant: "tenant", businessRole: "businessRole", currentUser: "currentUser" }, ngImport: i0, template: "<div class=\"tas-waiting-room\">\n <div class=\"waiting-room-content\">\n <div class=\"state-container\">\n <!-- Loading states (show spinner) -->\n <ng-container *ngIf=\"state !== WaitingRoomState.ERROR\">\n <div class=\"state-icon loading\">\n <div class=\"spinner\"></div>\n </div>\n \n <!-- Requesting permissions -->\n <ng-container *ngIf=\"isRequestingPermissions\">\n <p class=\"state-message\">Solicitando permisos...</p>\n <p class=\"state-submessage\">Por favor, acept\u00E1 los permisos de c\u00E1mara y micr\u00F3fono.</p>\n </ng-container>\n \n <!-- Waiting for admission (permissions granted, not joinable yet) -->\n <ng-container *ngIf=\"isWaitingForAdmission\">\n <p class=\"state-message\">Medicina laboral va a admitirte</p>\n <p class=\"state-submessage\">Por favor, permanec\u00E9 en esta pantalla.</p>\n </ng-container>\n \n <!-- Getting token / Joining -->\n <ng-container *ngIf=\"state === WaitingRoomState.GETTING_TOKEN || state === WaitingRoomState.JOINING\">\n <p class=\"state-message\">Conectando...</p>\n </ng-container>\n \n <!-- Checking status (when not requesting permissions) -->\n <ng-container *ngIf=\"state === WaitingRoomState.CHECKING_STATUS && !isRequestingPermissions\">\n <p class=\"state-message\">Verificando estado...</p>\n </ng-container>\n </ng-container>\n\n <!-- Error state (show error icon and message) -->\n <ng-container *ngIf=\"state === WaitingRoomState.ERROR\">\n <div class=\"state-icon error\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n </div>\n <p class=\"state-message error\">Ocurri\u00F3 un error</p>\n \n <!-- Collapsible error details -->\n <div class=\"error-dropdown\" *ngIf=\"errorMessage\">\n <button \n type=\"button\" \n class=\"error-toggle-btn\"\n (click)=\"toggleErrorDetails()\"\n [attr.aria-expanded]=\"showErrorDetails\"\n aria-controls=\"error-details-content\"\n >\n <span>Ver detalles del error</span>\n <i class=\"fa\" [class.fa-chevron-down]=\"!showErrorDetails\" [class.fa-chevron-up]=\"showErrorDetails\"></i>\n </button>\n <div \n id=\"error-details-content\"\n class=\"error-details-content\"\n [class.expanded]=\"showErrorDetails\"\n >\n <p class=\"error-details-text\">{{ errorMessage }}</p>\n </div>\n </div>\n \n <div class=\"error-actions\">\n <button type=\"button\" class=\"btn action-btn retry-btn\" (click)=\"retry()\">\n <i class=\"fa fa-refresh\"></i>\n Reintentar\n </button>\n <button type=\"button\" class=\"btn action-btn close-btn\" (click)=\"close()\">\n Cerrar\n </button>\n </div>\n </ng-container>\n </div>\n </div>\n</div>\n", styles: [".tas-waiting-room{display:flex;flex-direction:column;min-height:300px;background:#ffffff;border-radius:5px;overflow:hidden}.waiting-room-content{flex:1;display:flex;align-items:center;justify-content:center;padding:32px 40px;background:#ffffff}.state-container{text-align:center;max-width:400px;width:100%}.state-icon{width:80px;height:80px;margin:0 auto 24px;border-radius:50%;display:flex;align-items:center;justify-content:center}.state-icon i{font-size:36px}.state-icon.loading{background:rgba(29,164,177,.1);border:2px solid #1da4b1}.state-icon.error{background:rgba(238,49,107,.1);border:2px solid #ee316b}.state-icon.error i{color:#ee316b}.spinner{width:40px;height:40px;border:3px solid #e9ecef;border-top-color:#1da4b1;border-radius:50%;animation:spin 1s linear infinite}.state-message{font-size:16px;font-weight:600;margin:0 0 8px;color:#212529;line-height:24px}.state-message.error{color:#ee316b}.state-submessage{font-size:14px;color:#6c757d;margin:0 0 24px;font-weight:400}.error-dropdown{margin:16px 0;width:100%}.error-toggle-btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:10px 16px;font-size:13px;font-weight:500;color:#6c757d;background:transparent;border:1px solid #e9ecef;border-radius:6px;cursor:pointer;transition:all .2s ease}.error-toggle-btn:hover{background:#f8f9fa;border-color:#6c757d;color:#212529}.error-toggle-btn i{font-size:12px;transition:transform .2s ease}.error-details-content{max-height:0;overflow:hidden;transition:max-height .3s ease,padding .3s ease}.error-details-content.expanded{max-height:200px;padding-top:12px}.error-details-text{font-size:12px;color:#ee316b;margin:0;padding:12px 16px;background:rgba(238,49,107,.08);border-radius:8px;border:1px solid rgba(238,49,107,.2);text-align:left;word-break:break-word;max-height:150px;overflow-y:auto}.error-actions{display:flex;justify-content:center;gap:12px;margin-top:16px}.action-btn{padding:12px 32px;font-size:16px;font-weight:600;border-radius:4px;border:none;cursor:pointer;transition:all .2s ease;display:inline-flex;align-items:center;gap:10px}.action-btn i{font-size:16px}.action-btn.retry-btn{background:transparent;color:#6c757d;border:1px solid #e9ecef}.action-btn.retry-btn:hover{background:#f8f9fa;border-color:#6c757d;color:#212529}.action-btn.close-btn{background:#ee316b;color:#fff;border:none}.action-btn.close-btn:hover{background:#da124f}@keyframes spin{to{transform:rotate(360deg)}}@media (max-width: 576px){.tas-waiting-room{min-height:250px}.waiting-room-content{padding:24px}.state-icon{width:64px;height:64px}.state-icon i{font-size:28px}.spinner{width:32px;height:32px}.action-btn{padding:10px 24px;font-size:14px}}\n"], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
297
413
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TasWaitingRoomComponent, decorators: [{
298
414
  type: Component,
299
- args: [{ selector: 'tas-waiting-room', template: "<div class=\"tas-waiting-room\">\n <!-- Header -->\n <div class=\"waiting-room-header\">\n <h2 class=\"header-title\">Iniciar turno</h2>\n <button type=\"button\" class=\"close-btn\" (click)=\"cancel()\" aria-label=\"Close\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"waiting-room-content\">\n <!-- CHECKING_STATUS State -->\n <div class=\"state-container\" *ngIf=\"state === WaitingRoomState.CHECKING_STATUS\">\n <div class=\"state-icon loading\">\n <div class=\"spinner\"></div>\n </div>\n <p class=\"state-message\">Verificando estado de la sesi\u00F3n...</p>\n </div>\n\n <!-- WAITING_FOR_JOINABLE State -->\n <div class=\"state-container\" *ngIf=\"state === WaitingRoomState.WAITING_FOR_JOINABLE\">\n <div class=\"state-icon loading\">\n <div class=\"spinner\"></div>\n </div>\n <p class=\"state-message\">Esperando que la sesi\u00F3n est\u00E9 disponible...</p>\n <p class=\"state-submessage\">Por favor, permanec\u00E9 en esta pantalla.</p>\n </div>\n\n <!-- READY State (Join button enabled) -->\n <div class=\"state-container\" *ngIf=\"state === WaitingRoomState.READY\">\n <div class=\"state-icon ready\">\n <i class=\"fa fa-check-circle\"></i>\n </div>\n <p class=\"state-message success\">\u00A1La sala est\u00E1 lista!</p>\n <button type=\"button\" class=\"btn action-btn join-btn\" (click)=\"joinSession()\">\n <i class=\"fa fa-sign-in\"></i>\n Unirse a la llamada\n </button>\n </div>\n\n <!-- JOINING State (Auto-joining) -->\n <div class=\"state-container\" *ngIf=\"state === WaitingRoomState.JOINING\">\n <div class=\"state-icon loading\">\n <div class=\"spinner\"></div>\n </div>\n <p class=\"state-message\">Ingresando a la llamada...</p>\n </div>\n\n <!-- GETTING_TOKEN State -->\n <div class=\"state-container\" *ngIf=\"state === WaitingRoomState.GETTING_TOKEN\">\n <div class=\"state-icon loading\">\n <div class=\"spinner\"></div>\n </div>\n <p class=\"state-message\">Conectando...</p>\n </div>\n\n <!-- ERROR State -->\n <div class=\"state-container\" *ngIf=\"state === WaitingRoomState.ERROR\">\n <div class=\"state-icon error\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n </div>\n <p class=\"state-message error\">Ocurri\u00F3 un error</p>\n <p class=\"error-details\" *ngIf=\"errorMessage\">\n {{ errorMessage }}\n </p>\n <button type=\"button\" class=\"btn action-btn retry-btn\" (click)=\"retry()\">\n <i class=\"fa fa-refresh\"></i>\n Reintentar\n </button>\n </div>\n </div>\n</div>\n", styles: [".tas-waiting-room{display:flex;flex-direction:column;min-height:420px;background:#ffffff;border-radius:5px;overflow:hidden}.waiting-room-header{position:relative;padding:20px 40px;border-bottom:1px solid #e9ecef;display:flex;align-items:center;justify-content:space-between}.waiting-room-header .header-title{margin:0;font-size:18px;font-weight:600;line-height:24px;color:#212529}.waiting-room-header .close-btn{width:32px;height:32px;border:none;background:transparent;border-radius:4px;color:#6c757d;cursor:pointer;transition:all .2s ease;font-size:20px;display:flex;align-items:center;justify-content:center}.waiting-room-header .close-btn:hover{background:#f8f9fa;color:#212529}.waiting-title{font-size:16px;font-weight:600;color:#212529;margin-bottom:8px}.waiting-room-content{flex:1;display:flex;align-items:center;justify-content:center;padding:32px 40px;background:#ffffff}.state-container{text-align:center;max-width:400px;width:100%}.mode-tabs{display:flex;justify-content:center;gap:8px;margin-bottom:24px;padding:4px;background:#f8f9fa;border-radius:8px}.mode-tab{flex:1;padding:10px 16px;font-size:13px;font-weight:600;border:none;border-radius:6px;background:transparent;color:#6c757d;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center;gap:8px}.mode-tab i{font-size:14px}.mode-tab:hover{color:#212529}.mode-tab.active{background:#ffffff;color:#1da4b1;box-shadow:0 2px 8px #00000014}.mode-content{animation:fadeIn .3s ease}.session-input-container{display:flex;flex-direction:column;gap:16px;margin-top:8px}.session-input{width:100%;padding:14px 16px;font-size:14px;border:2px solid #e9ecef;border-radius:8px;background:#ffffff;color:#212529;transition:all .2s ease;text-align:center;font-family:Monaco,Consolas,monospace;letter-spacing:.5px}.session-input::placeholder{color:#6c757d;font-family:inherit;letter-spacing:normal}.session-input:focus{outline:none;border-color:#1da4b1;box-shadow:0 0 0 3px #1da4b126}.session-input:hover:not(:focus){border-color:#6c757d}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.state-icon{width:80px;height:80px;margin:0 auto 24px;border-radius:50%;display:flex;align-items:center;justify-content:center}.state-icon i{font-size:36px}.state-icon.idle{background:rgba(29,164,177,.1);border:2px dashed #1da4b1}.state-icon.idle i{color:#1da4b1}.state-icon.loading{background:rgba(29,164,177,.1);border:2px solid #1da4b1}.state-icon.ready{background:linear-gradient(135deg,#1da4b1 0%,#38b89a 100%);box-shadow:0 4px 16px #1da4b14d}.state-icon.ready i{color:#fff}.state-icon.error{background:rgba(238,49,107,.1);border:2px solid #ee316b}.state-icon.error i{color:#ee316b}.spinner{width:40px;height:40px;border:3px solid #e9ecef;border-top-color:#1da4b1;border-radius:50%;animation:spin 1s linear infinite}.state-message{font-size:16px;font-weight:600;margin:0 0 8px;color:#212529;line-height:24px}.state-message.success{color:#1da4b1}.state-message.error{color:#ee316b}.state-submessage{font-size:14px;color:#6c757d;margin:0 0 24px;font-weight:400}.error-details{font-size:13px;color:#ee316b;margin:0 0 24px;padding:12px 16px;background:rgba(238,49,107,.08);border-radius:8px;border:1px solid rgba(238,49,107,.2)}.progress-steps{display:flex;justify-content:center;gap:24px;margin:24px 0 32px}.step{display:flex;flex-direction:column;align-items:center;gap:8px}.step .step-indicator{width:32px;height:32px;border-radius:50%;background:#f8f9fa;border:2px solid #e9ecef;display:flex;align-items:center;justify-content:center;transition:all .3s ease}.step .step-indicator i{font-size:12px;color:#fff}.step .step-label{font-size:11px;color:#6c757d;text-transform:uppercase;letter-spacing:.5px;font-weight:500}.step.active .step-indicator{background:rgba(29,164,177,.1);border-color:#1da4b1;animation:pulse-active 1.5s infinite}.step.active .step-label{color:#1da4b1;font-weight:600}.step.completed .step-indicator{background:#1da4b1;border-color:#1da4b1}.step.completed .step-label{color:#1da4b1;font-weight:600}.action-btn{padding:12px 32px;font-size:16px;font-weight:600;border-radius:4px;border:none;cursor:pointer;transition:all .2s ease;display:inline-flex;align-items:center;gap:10px}.action-btn i{font-size:16px}.action-btn.create-btn{background:#0077b3;color:#fff;box-shadow:0 2px 8px #0077b340}.action-btn.create-btn:hover{background:#005c8a;box-shadow:0 4px 12px #0077b359}.action-btn.create-btn:active{transform:translateY(1px)}.action-btn.join-btn{background:#1da4b1;color:#fff;box-shadow:0 2px 8px #1da4b140;animation:pulse-ready 2s infinite}.action-btn.join-btn:hover{background:#17848e;box-shadow:0 4px 12px #1da4b159}.action-btn.join-btn:active{transform:translateY(1px)}.action-btn.retry-btn{background:transparent;color:#6c757d;border:1px solid #e9ecef}.action-btn.retry-btn:hover{background:#f8f9fa;border-color:#6c757d;color:#212529}.waiting-room-footer{padding:16px 40px 24px;background:#ffffff;border-top:1px solid #e9ecef;display:flex;justify-content:center}.waiting-room-footer .cancel-btn{padding:10px 24px;font-size:14px;font-weight:600;border-radius:4px;background:transparent;color:#6c757d;border:none;cursor:pointer;transition:all .2s ease}.waiting-room-footer .cancel-btn:hover{background:#f8f9fa;color:#212529}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse-active{0%,to{box-shadow:0 0 #1da4b166}50%{box-shadow:0 0 0 8px #1da4b100}}@keyframes pulse-ready{0%,to{box-shadow:0 2px 8px #1da4b140}50%{box-shadow:0 4px 16px #1da4b166}}@media (max-width: 576px){.tas-waiting-room{min-height:380px}.waiting-room-header{padding:24px 24px 20px}.waiting-room-header .header-icon{width:56px;height:56px}.waiting-room-header .header-icon i{font-size:22px}.waiting-room-header .header-title{font-size:18px}.waiting-room-content{padding:24px}.state-icon{width:64px;height:64px}.state-icon i{font-size:28px}.spinner{width:32px;height:32px}.progress-steps{gap:12px}.step .step-indicator{width:28px;height:28px}.step .step-label{font-size:9px}.action-btn{padding:10px 24px;font-size:14px}.waiting-room-footer{padding:16px 24px 20px}}\n"] }]
415
+ args: [{ selector: 'tas-waiting-room', template: "<div class=\"tas-waiting-room\">\n <div class=\"waiting-room-content\">\n <div class=\"state-container\">\n <!-- Loading states (show spinner) -->\n <ng-container *ngIf=\"state !== WaitingRoomState.ERROR\">\n <div class=\"state-icon loading\">\n <div class=\"spinner\"></div>\n </div>\n \n <!-- Requesting permissions -->\n <ng-container *ngIf=\"isRequestingPermissions\">\n <p class=\"state-message\">Solicitando permisos...</p>\n <p class=\"state-submessage\">Por favor, acept\u00E1 los permisos de c\u00E1mara y micr\u00F3fono.</p>\n </ng-container>\n \n <!-- Waiting for admission (permissions granted, not joinable yet) -->\n <ng-container *ngIf=\"isWaitingForAdmission\">\n <p class=\"state-message\">Medicina laboral va a admitirte</p>\n <p class=\"state-submessage\">Por favor, permanec\u00E9 en esta pantalla.</p>\n </ng-container>\n \n <!-- Getting token / Joining -->\n <ng-container *ngIf=\"state === WaitingRoomState.GETTING_TOKEN || state === WaitingRoomState.JOINING\">\n <p class=\"state-message\">Conectando...</p>\n </ng-container>\n \n <!-- Checking status (when not requesting permissions) -->\n <ng-container *ngIf=\"state === WaitingRoomState.CHECKING_STATUS && !isRequestingPermissions\">\n <p class=\"state-message\">Verificando estado...</p>\n </ng-container>\n </ng-container>\n\n <!-- Error state (show error icon and message) -->\n <ng-container *ngIf=\"state === WaitingRoomState.ERROR\">\n <div class=\"state-icon error\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n </div>\n <p class=\"state-message error\">Ocurri\u00F3 un error</p>\n \n <!-- Collapsible error details -->\n <div class=\"error-dropdown\" *ngIf=\"errorMessage\">\n <button \n type=\"button\" \n class=\"error-toggle-btn\"\n (click)=\"toggleErrorDetails()\"\n [attr.aria-expanded]=\"showErrorDetails\"\n aria-controls=\"error-details-content\"\n >\n <span>Ver detalles del error</span>\n <i class=\"fa\" [class.fa-chevron-down]=\"!showErrorDetails\" [class.fa-chevron-up]=\"showErrorDetails\"></i>\n </button>\n <div \n id=\"error-details-content\"\n class=\"error-details-content\"\n [class.expanded]=\"showErrorDetails\"\n >\n <p class=\"error-details-text\">{{ errorMessage }}</p>\n </div>\n </div>\n \n <div class=\"error-actions\">\n <button type=\"button\" class=\"btn action-btn retry-btn\" (click)=\"retry()\">\n <i class=\"fa fa-refresh\"></i>\n Reintentar\n </button>\n <button type=\"button\" class=\"btn action-btn close-btn\" (click)=\"close()\">\n Cerrar\n </button>\n </div>\n </ng-container>\n </div>\n </div>\n</div>\n", styles: [".tas-waiting-room{display:flex;flex-direction:column;min-height:300px;background:#ffffff;border-radius:5px;overflow:hidden}.waiting-room-content{flex:1;display:flex;align-items:center;justify-content:center;padding:32px 40px;background:#ffffff}.state-container{text-align:center;max-width:400px;width:100%}.state-icon{width:80px;height:80px;margin:0 auto 24px;border-radius:50%;display:flex;align-items:center;justify-content:center}.state-icon i{font-size:36px}.state-icon.loading{background:rgba(29,164,177,.1);border:2px solid #1da4b1}.state-icon.error{background:rgba(238,49,107,.1);border:2px solid #ee316b}.state-icon.error i{color:#ee316b}.spinner{width:40px;height:40px;border:3px solid #e9ecef;border-top-color:#1da4b1;border-radius:50%;animation:spin 1s linear infinite}.state-message{font-size:16px;font-weight:600;margin:0 0 8px;color:#212529;line-height:24px}.state-message.error{color:#ee316b}.state-submessage{font-size:14px;color:#6c757d;margin:0 0 24px;font-weight:400}.error-dropdown{margin:16px 0;width:100%}.error-toggle-btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:10px 16px;font-size:13px;font-weight:500;color:#6c757d;background:transparent;border:1px solid #e9ecef;border-radius:6px;cursor:pointer;transition:all .2s ease}.error-toggle-btn:hover{background:#f8f9fa;border-color:#6c757d;color:#212529}.error-toggle-btn i{font-size:12px;transition:transform .2s ease}.error-details-content{max-height:0;overflow:hidden;transition:max-height .3s ease,padding .3s ease}.error-details-content.expanded{max-height:200px;padding-top:12px}.error-details-text{font-size:12px;color:#ee316b;margin:0;padding:12px 16px;background:rgba(238,49,107,.08);border-radius:8px;border:1px solid rgba(238,49,107,.2);text-align:left;word-break:break-word;max-height:150px;overflow-y:auto}.error-actions{display:flex;justify-content:center;gap:12px;margin-top:16px}.action-btn{padding:12px 32px;font-size:16px;font-weight:600;border-radius:4px;border:none;cursor:pointer;transition:all .2s ease;display:inline-flex;align-items:center;gap:10px}.action-btn i{font-size:16px}.action-btn.retry-btn{background:transparent;color:#6c757d;border:1px solid #e9ecef}.action-btn.retry-btn:hover{background:#f8f9fa;border-color:#6c757d;color:#212529}.action-btn.close-btn{background:#ee316b;color:#fff;border:none}.action-btn.close-btn:hover{background:#da124f}@keyframes spin{to{transform:rotate(360deg)}}@media (max-width: 576px){.tas-waiting-room{min-height:250px}.waiting-room-content{padding:24px}.state-icon{width:64px;height:64px}.state-icon i{font-size:28px}.spinner{width:32px;height:32px}.action-btn{padding:10px 24px;font-size:14px}}\n"] }]
300
416
  }], ctorParameters: function () { return [{ type: i1.NgbActiveModal }, { type: i2.TasService }, { type: i3.GeolocationService }, { type: i1.NgbModal }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { roomType: [{
301
417
  type: Input
302
418
  }], entityId: [{
@@ -308,4 +424,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
308
424
  }], currentUser: [{
309
425
  type: Input
310
426
  }] } });
311
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy13YWl0aW5nLXJvb20vdGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy13YWl0aW5nLXJvb20vdGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBSXZGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUVMLFdBQVcsRUFDWCxlQUFlLEVBQ2YsV0FBVyxFQUNYLGNBQWMsR0FFZixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7Ozs7QUFFakYsTUFBTSxDQUFOLElBQVksZ0JBT1g7QUFQRCxXQUFZLGdCQUFnQjtJQUMxQix1REFBbUMsQ0FBQTtJQUNuQyxpRUFBNkMsQ0FBQTtJQUM3QyxtQ0FBZSxDQUFBO0lBQ2YsbURBQStCLENBQUE7SUFDL0IsdUNBQW1CLENBQUE7SUFDbkIsbUNBQWUsQ0FBQTtBQUNqQixDQUFDLEVBUFcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQU8zQjtBQU9ELE1BQU0sT0FBTyx1QkFBdUI7SUFrQ2xDLFlBQ1MsV0FBMkIsRUFDMUIsVUFBc0IsRUFDdEIsa0JBQXNDLEVBQ3RDLFlBQXNCLEVBQ3RCLEdBQXNCO1FBSnZCLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMxQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FB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IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIElucHV0LCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdiQWN0aXZlTW9kYWwsIE5nYk1vZGFsLCBOZ2JNb2RhbFJlZiB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IFRhc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90YXMuc2VydmljZSc7XG5pbXBvcnQgeyBHZW9sb2NhdGlvblNlcnZpY2UsIEdlb1Bvc2l0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZ2VvbG9jYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIFRhc0N1cnJlbnRVc2VyLFxuICBUYXNSb29tVHlwZSxcbiAgVGFzQnVzaW5lc3NSb2xlLFxuICBUYXNVc2VyUm9sZSxcbiAgVXNlckNhbGxBY3Rpb24sXG4gIFByb3h5VmlkZW9Vc2VyTW9kaWZ5UmVxdWVzdCxcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy90YXMuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBUYXNWaWRlb2NhbGxDb21wb25lbnQgfSBmcm9tICcuLi90YXMtdmlkZW9jYWxsL3Rhcy12aWRlb2NhbGwuY29tcG9uZW50JztcblxuZXhwb3J0IGVudW0gV2FpdGluZ1Jvb21TdGF0ZSB7XG4gIENIRUNLSU5HX1NUQVRVUyA9ICdDSEVDS0lOR19TVEFUVVMnLFxuICBXQUlUSU5HX0ZPUl9KT0lOQUJMRSA9ICdXQUlUSU5HX0ZPUl9KT0lOQUJMRScsXG4gIFJFQURZID0gJ1JFQURZJyxcbiAgR0VUVElOR19UT0tFTiA9ICdHRVRUSU5HX1RPS0VOJyxcbiAgSk9JTklORyA9ICdKT0lOSU5HJyxcbiAgRVJST1IgPSAnRVJST1InLFxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0YXMtd2FpdGluZy1yb29tJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Rhcy13YWl0aW5nLXJvb20uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YXMtd2FpdGluZy1yb29tLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFRhc1dhaXRpbmdSb29tQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvLyBTdGF0dXMgZW5kcG9pbnQgcGFyYW1zXG4gIEBJbnB1dCgpIHJvb21UeXBlOiBUYXNSb29tVHlwZSA9IFRhc1Jvb21UeXBlLlRBUztcbiAgQElucHV0KCkgZW50aXR5SWQhOiBudW1iZXI7XG4gIEBJbnB1dCgpIHRlbmFudCE6IHN0cmluZztcbiAgQElucHV0KCkgYnVzaW5lc3NSb2xlOiBUYXNCdXNpbmVzc1JvbGUgPSBUYXNCdXNpbmVzc1JvbGUuVVNFUjtcblxuICAvLyBVc2VyIGluZm8gZm9yIHRva2VuIHJlcXVlc3RcbiAgQElucHV0KCkgY3VycmVudFVzZXIhOiBUYXNDdXJyZW50VXNlcjtcblxuICAvLyBDb21wb25lbnQgc3RhdGVcbiAgcHVibGljIHN0YXRlOiBXYWl0aW5nUm9vbVN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZS5DSEVDS0lOR19TVEFUVVM7XG4gIHB1YmxpYyBXYWl0aW5nUm9vbVN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZTsgLy8gRXhwb3NlIGVudW0gdG8gdGVtcGxhdGVcbiAgcHVibGljIGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBpc0pvaW5hYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gU2Vzc2lvbiBkYXRhIGZyb20gc3RhdHVzIHJlc3BvbnNlXG4gIHByaXZhdGUgcmVzb2x2ZWRTZXNzaW9uSWQ6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIHJlc29sdmVkQXBwb2ludG1lbnRJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdG9rZW46IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIHZpZGVvQ2FsbElkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAvLyBTdWJzY3JpcHRpb25zXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSB2aWRlb0NhbGxNb2RhbFJlZjogTmdiTW9kYWxSZWYgfCBudWxsID0gbnVsbDtcblxuICAvLyBHZW9sb2NhdGlvblxuICBwcml2YXRlIGdlb1Bvc2l0aW9uOiBHZW9Qb3NpdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBXaGV0aGVyIGN1cnJlbnQgdXNlciBpcyBhbiBvd25lciAqL1xuICBwdWJsaWMgZ2V0IGlzT3duZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFVzZXI/LnJvbGUgPT09IFRhc1VzZXJSb2xlLk9XTkVSO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCxcbiAgICBwcml2YXRlIHRhc1NlcnZpY2U6IFRhc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBnZW9sb2NhdGlvblNlcnZpY2U6IEdlb2xvY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gVGFzV2FpdGluZ1Jvb21Db21wb25lbnQubmdPbkluaXQnKTtcbiAgICB0aGlzLnJlcXVlc3RNZWRpYVBlcm1pc3Npb25zKCk7XG4gICAgdGhpcy5yZXF1ZXN0R2VvbG9jYXRpb24oKTtcbiAgICB0aGlzLmNoZWNrU3RhdHVzKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdCBjYW1lcmEgYW5kIG1pY3JvcGhvbmUgcGVybWlzc2lvbnMuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlcXVlc3RNZWRpYVBlcm1pc3Npb25zKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBSZXF1ZXN0aW5nIG1lZGlhIHBlcm1pc3Npb25zLi4uJyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgYXVkaW86IHRydWUsIHZpZGVvOiB0cnVlIH0pO1xuICAgICAgLy8gU3RvcCB0cmFja3MgaW1tZWRpYXRlbHkgLSB3ZSBqdXN0IG5lZWRlZCB0aGUgcGVybWlzc2lvblxuICAgICAgc3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4gdHJhY2suc3RvcCgpKTtcbiAgICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBNZWRpYSBwZXJtaXNzaW9ucyBncmFudGVkJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybignW1RBUyBERUJVR10gTWVkaWEgcGVybWlzc2lvbnMgZGVuaWVkIG9yIHVuYXZhaWxhYmxlOicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdCBnZW9sb2NhdGlvbiBpbW1lZGlhdGVseSBvbiBpbml0LlxuICAgKiBPbmx5IGZvciByZWd1bGFyIHVzZXJzIChub3Qgb3duZXJzL2JhY2tvZmZpY2UpLlxuICAgKiBJZiB1c2VyIGFsbG93cywgc3RvcmUgcG9zaXRpb24gYW5kIHNlbmQgdG8gYmFja2VuZC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVxdWVzdEdlb2xvY2F0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIE9ubHkgcmVxdWVzdCBnZW9sb2NhdGlvbiBmb3IgcmVndWxhciB1c2Vycywgbm90IG93bmVycy9iYWNrb2ZmaWNlXG4gICAgaWYgKHRoaXMuaXNPd25lciB8fCB0aGlzLmlzQmFja29mZmljZSkge1xuICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIFNraXBwaW5nIGdlb2xvY2F0aW9uIGZvciBvd25lci9iYWNrb2ZmaWNlJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIFJlcXVlc3RpbmcgZ2VvbG9jYXRpb24uLi4nKTtcbiAgICBjb25zdCBwb3NpdGlvbiA9IGF3YWl0IHRoaXMuZ2VvbG9jYXRpb25TZXJ2aWNlLmdldEN1cnJlbnRQb3NpdGlvbigpO1xuICAgIGlmIChwb3NpdGlvbikge1xuICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIEdlb2xvY2F0aW9uIG9idGFpbmVkOicsIHBvc2l0aW9uKTtcbiAgICAgIHRoaXMuZ2VvUG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICAgIC8vIFNlbmQgdG8gYmFja2VuZCB3aGVuIHZpZGVvQ2FsbElkIGlzIGF2YWlsYWJsZVxuICAgICAgdGhpcy5zZW5kR2VvbG9jYXRpb25Ub0JhY2tlbmQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIEdlb2xvY2F0aW9uIGRlbmllZCBvciB1bmF2YWlsYWJsZScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGdlb2xvY2F0aW9uIHRvIGJhY2tlbmQgdmlhIG1vZGlmeSB1c2VyIGVuZHBvaW50LlxuICAgKiBOT1RFOiBFbmRwb2ludCBjYWxsIGlzIHByZXBhcmVkIGJ1dCBtYXkgbm90IGJlIGFjdGl2ZSB5ZXQuXG4gICAqL1xuICBwcml2YXRlIHNlbmRHZW9sb2NhdGlvblRvQmFja2VuZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZ2VvUG9zaXRpb24gfHwgIXRoaXMudmlkZW9DYWxsSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gU2VuZGluZyBnZW9sb2NhdGlvbiB0byBiYWNrZW5kLi4uJyk7XG4gICAgY29uc3QgYm9keTogUHJveHlWaWRlb1VzZXJNb2RpZnlSZXF1ZXN0ID0ge1xuICAgICAgdXNlcklkOiB0aGlzLmN1cnJlbnRVc2VyPy5pZCxcbiAgICAgIHZpZGVvQ2FsbElkOiB0aGlzLnZpZGVvQ2FsbElkLFxuICAgICAgYWN0aW9uOiBVc2VyQ2FsbEFjdGlvbi5BQ1RJVkFURV9HRU9MT0NBVElPTixcbiAgICAgIGxhdGl0dWRlOiB0aGlzLmdlb1Bvc2l0aW9uLmxhdGl0dWRlLFxuICAgICAgbG9uZ2l0dWRlOiB0aGlzLmdlb1Bvc2l0aW9uLmxvbmdpdHVkZSxcbiAgICB9O1xuICAgIFxuICAgIHRoaXMudGFzU2VydmljZS5tb2RpZnlQcm94eVZpZGVvVXNlcihib2R5KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4gY29uc29sZS5sb2coJ1tUQVMgREVCVUddIEdlb2xvY2F0aW9uIHNlbnQgc3VjY2Vzc2Z1bGx5JyksXG4gICAgICBlcnJvcjogKGVycikgPT4gY29uc29sZS5lcnJvcignW1RBUyBERUJVR10gRmFpbGVkIHRvIHNlbmQgZ2VvbG9jYXRpb246JywgZXJyKSxcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBUYXNXYWl0aW5nUm9vbUNvbXBvbmVudC5uZ09uRGVzdHJveScpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMudGFzU2VydmljZS5zdG9wU3RhdHVzUG9sbGluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHN0YXR1cyB0byBnZXQgc2Vzc2lvbiBpbmZvXG4gICAqL1xuICBwcml2YXRlIGNoZWNrU3RhdHVzKCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBjaGVja1N0YXR1cyBjYWxsZWQgd2l0aDonLCB7XG4gICAgICByb29tVHlwZTogdGhpcy5yb29tVHlwZSxcbiAgICAgIGVudGl0eUlkOiB0aGlzLmVudGl0eUlkLFxuICAgICAgdGVuYW50OiB0aGlzLnRlbmFudCxcbiAgICAgIGJ1c2luZXNzUm9sZTogdGhpcy5idXNpbmVzc1JvbGUsXG4gICAgICBjdXJyZW50VXNlcjogdGhpcy5jdXJyZW50VXNlcixcbiAgICB9KTtcblxuICAgIHRoaXMuc3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLkNIRUNLSU5HX1NUQVRVUztcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuXG4gICAgY29uc3Qgc3RhdHVzUGFyYW1zID0ge1xuICAgICAgcm9vbVR5cGU6IHRoaXMucm9vbVR5cGUsXG4gICAgICBlbnRpdHlJZDogdGhpcy5lbnRpdHlJZCxcbiAgICAgIHRlbmFudDogdGhpcy50ZW5hbnQsXG4gICAgICBidXNpbmVzc1JvbGU6IHRoaXMuYnVzaW5lc3NSb2xlLFxuICAgIH07XG5cbiAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gQ2FsbGluZyBnZXRQcm94eVZpZGVvU3RhdHVzLi4uJyk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50YXNTZXJ2aWNlLmdldFByb3h5VmlkZW9TdGF0dXMoc3RhdHVzUGFyYW1zKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gcmVzcG9uc2UuY29udGVudDtcblxuICAgICAgICAgIC8vIFN0b3JlIHNlc3Npb24gaW5mbyBmcm9tIHJlc3BvbnNlXG4gICAgICAgICAgdGhpcy5yZXNvbHZlZFNlc3Npb25JZCA9IGNvbnRlbnQuc2Vzc2lvbklkO1xuICAgICAgICAgIHRoaXMucmVzb2x2ZWRBcHBvaW50bWVudElkID0gY29udGVudC5hcHBvaW50bWVudElkO1xuICAgICAgICAgIHRoaXMudmlkZW9DYWxsSWQgPSBjb250ZW50LnZpZGVvQ2FsbElkO1xuXG4gICAgICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIFN0YXR1cyByZXNwb25zZTonLCBjb250ZW50KTtcblxuICAgICAgICAgIC8vIFRyeSB0byBzZW5kIGdlb2xvY2F0aW9uIG5vdyB0aGF0IHdlIGhhdmUgdmlkZW9DYWxsSWRcbiAgICAgICAgICB0aGlzLnNlbmRHZW9sb2NhdGlvblRvQmFja2VuZCgpO1xuXG4gICAgICAgICAgLy8gU3RhcnQgcG9sbGluZyBmb3Igc3RhdHVzIHVwZGF0ZXNcbiAgICAgICAgICB0aGlzLnRhc1NlcnZpY2Uuc3RhcnRTdGF0dXNQb2xsaW5nKHN0YXR1c1BhcmFtcyk7XG5cbiAgICAgICAgICAvLyBTdWJzY3JpYmUgdG8gam9pbmFibGUgc3RhdHVzXG4gICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMudGFzU2VydmljZS5qb2luYWJsZSQuc3Vic2NyaWJlKChqb2luYWJsZSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmhhbmRsZUpvaW5hYmxlQ2hhbmdlKGpvaW5hYmxlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbVEFTIERFQlVHXSBTdGF0dXMgY2hlY2sgZmFpbGVkOicsIGVycik7XG4gICAgICAgICAgdGhpcy5zdGF0ZSA9IFdhaXRpbmdSb29tU3RhdGUuRVJST1I7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnRXJyb3IgY2hlY2tpbmcgc2Vzc2lvbiBzdGF0dXMuIFBsZWFzZSB0cnkgYWdhaW4uJztcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgY2hhbmdlcyB0byBqb2luYWJsZSBzdGF0dXNcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlSm9pbmFibGVDaGFuZ2Uoam9pbmFibGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gaGFuZGxlSm9pbmFibGVDaGFuZ2UgY2FsbGVkJywge1xuICAgICAgam9pbmFibGUsXG4gICAgICBjdXJyZW50U3RhdGU6IHRoaXMuc3RhdGUsXG4gICAgICByZXNvbHZlZFNlc3Npb25JZDogdGhpcy5yZXNvbHZlZFNlc3Npb25JZCxcbiAgICB9KTtcblxuICAgIHRoaXMuaXNKb2luYWJsZSA9IGpvaW5hYmxlO1xuXG4gICAgLy8gRG9uJ3QgdXBkYXRlIHN0YXRlIGlmIGFscmVhZHkgZ2V0dGluZyB0b2tlbiwgam9pbmluZywgb3IgaW4gZXJyb3JcbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXRlID09PSBXYWl0aW5nUm9vbVN0YXRlLkdFVFRJTkdfVE9LRU4gfHxcbiAgICAgIHRoaXMuc3RhdGUgPT09IFdhaXRpbmdSb29tU3RhdGUuSk9JTklORyB8fFxuICAgICAgdGhpcy5zdGF0ZSA9PT0gV2FpdGluZ1Jvb21TdGF0ZS5FUlJPUlxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIFNraXBwaW5nIHN0YXRlIHVwZGF0ZSAtIGFscmVhZHkgaW46JywgdGhpcy5zdGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQm90aCB1c2VycyBhbmQgb3duZXJzOiBzaG93IGpvaW4gYnV0dG9uIGJhc2VkIG9uIGpvaW5hYmxlXG4gICAgaWYgKGpvaW5hYmxlKSB7XG4gICAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gSm9pbmFibGUgaXMgdHJ1ZSwgc2hvd2luZyBqb2luIGJ1dHRvbicpO1xuICAgICAgdGhpcy5zdGF0ZSA9IFdhaXRpbmdSb29tU3RhdGUuUkVBRFk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBXYWl0aW5nIGZvciBqb2luYWJsZS4uLicpO1xuICAgICAgdGhpcy5zdGF0ZSA9IFdhaXRpbmdSb29tU3RhdGUuV0FJVElOR19GT1JfSk9JTkFCTEU7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB1c2VyIGNsaWNrcyB0aGUgam9pbiBidXR0b24uXG4gICAqIENhbGxzIC9zdGFydCB0byBnZXQgdG9rZW4gdGhlbiBhdXRvLWpvaW5zLlxuICAgKi9cbiAgcHVibGljIGpvaW5TZXNzaW9uKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhcnRTZXNzaW9uQW5kSm9pbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHVzZXIgaGFzIG93bmVyL2JhY2tvZmZpY2Ugcm9sZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgaXNCYWNrb2ZmaWNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmJ1c2luZXNzUm9sZSA9PT0gVGFzQnVzaW5lc3NSb2xlLkJBQ0tPRkZJQ0UgfHxcbiAgICAgIHRoaXMuYnVzaW5lc3NSb2xlID09PSBUYXNCdXNpbmVzc1JvbGUuQURNSU5fTUFOQUdFUiB8fFxuICAgICAgdGhpcy5idXNpbmVzc1JvbGUgPT09IFRhc0J1c2luZXNzUm9sZS5NQU5BR0VSXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBzZXNzaW9uIGFuZCBqb2luIC0gY2FsbGVkIHdoZW4gdXNlciBjbGlja3Mgam9pbiBidXR0b25cbiAgICovXG4gIHByaXZhdGUgc3RhcnRTZXNzaW9uQW5kSm9pbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVzb2x2ZWRTZXNzaW9uSWQpIHtcbiAgICAgIHRoaXMuc3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLkVSUk9SO1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnU2Vzc2lvbiBJRCBub3QgYXZhaWxhYmxlJztcbiAgICAgIHRoaXMudGFzU2VydmljZS5zdG9wU3RhdHVzUG9sbGluZygpO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLkdFVFRJTkdfVE9LRU47XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gQ2FsbGluZyAvc3RhcnQgZm9yIHNlc3Npb246JywgdGhpcy5yZXNvbHZlZFNlc3Npb25JZCk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50YXNTZXJ2aWNlXG4gICAgICAgIC5zdGFydFByb3h5VmlkZW9TZXNzaW9uKHtcbiAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMucmVzb2x2ZWRTZXNzaW9uSWQsXG4gICAgICAgICAgbmFtZTogdGhpcy5jdXJyZW50VXNlci5uYW1lLFxuICAgICAgICAgIGxhc3RuYW1lOiB0aGlzLmN1cnJlbnRVc2VyLmxhc3RuYW1lLFxuICAgICAgICB9KVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAodG9rZW5SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIFRva2VuIHJlc3BvbnNlOicsIHRva2VuUmVzcG9uc2UpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBIYW5kbGUgY2FzZSB3aGVyZSBIVFRQIGFkYXB0ZXIgcmV0dXJucyBlcnJvciBpbiBuZXh0IGluc3RlYWQgb2YgZXJyb3IgaGFuZGxlclxuICAgICAgICAgICAgaWYgKCF0b2tlblJlc3BvbnNlPy5jb250ZW50Py50b2tlbikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbVEFTIERFQlVHXSBJbnZhbGlkIHRva2VuIHJlc3BvbnNlOicsIHRva2VuUmVzcG9uc2UpO1xuICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZS5FUlJPUjtcbiAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAodG9rZW5SZXNwb25zZSBhcyBhbnkpPy5tZXNzYWdlIHx8ICdFcnJvciBhbCBpbmljaWFyIGxhIHNlc2nDs24uIFJlc3B1ZXN0YSBpbnbDoWxpZGEuJztcbiAgICAgICAgICAgICAgdGhpcy50YXNTZXJ2aWNlLnN0b3BTdGF0dXNQb2xsaW5nKCk7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gVG9rZW4gb2J0YWluZWQgc3VjY2Vzc2Z1bGx5LCBqb2luaW5nIHNlc3Npb24uLi4nKTtcbiAgICAgICAgICAgIHRoaXMudG9rZW4gPSB0b2tlblJlc3BvbnNlLmNvbnRlbnQudG9rZW47XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZS5KT0lOSU5HO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBBdXRvLWpvaW4gaW1tZWRpYXRlbHlcbiAgICAgICAgICAgIHRoaXMudGFzU2VydmljZS5zdG9wU3RhdHVzUG9sbGluZygpO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5jbG9zZSgnam9pbmluZycpO1xuICAgICAgICAgICAgdGhpcy5vcGVuVmlkZW9DYWxsTW9kYWwoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbVEFTIERFQlVHXSAvc3RhcnQgcmVxdWVzdCBmYWlsZWQ6JywgZXJyKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLkVSUk9SO1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnI/LmVycm9yPy5tZXNzYWdlIHx8IGVycj8ubWVzc2FnZSB8fCAnRXJyb3IgYWwgaW5pY2lhciBsYSBzZXNpw7NuLiBQb3IgZmF2b3IsIGludGVudGUgbnVldmFtZW50ZS4nO1xuICAgICAgICAgICAgdGhpcy50YXNTZXJ2aWNlLnN0b3BTdGF0dXNQb2xsaW5nKCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gU3RhdGUgc2V0IHRvIEVSUk9SLCBlcnJvck1lc3NhZ2U6JywgdGhpcy5lcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSB3YWl0aW5nIHJvb21cbiAgICovXG4gIGNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLnRhc1NlcnZpY2Uuc3RvcFN0YXR1c1BvbGxpbmcoKTtcbiAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoJ2NhbmNlbCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJ5IGFmdGVyIGFuIGVycm9yXG4gICAqL1xuICByZXRyeSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZS5DSEVDS0lOR19TVEFUVVM7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLnRva2VuID0gJyc7XG4gICAgdGhpcy5jaGVja1N0YXR1cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuVmlkZW9DYWxsTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy52aWRlb0NhbGxNb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oVGFzVmlkZW9jYWxsQ29tcG9uZW50LCB7XG4gICAgICBzaXplOiAneGwnLFxuICAgICAgd2luZG93Q2xhc3M6ICd0YXMtdmlkZW8tbW9kYWwnLFxuICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxuICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgdGhpcy52aWRlb0NhbGxNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5zZXNzaW9uSWQgPSB0aGlzLnJlc29sdmVkU2Vzc2lvbklkO1xuICAgIHRoaXMudmlkZW9DYWxsTW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudG9rZW4gPSB0aGlzLnRva2VuO1xuICAgIHRoaXMudmlkZW9DYWxsTW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuYXBwb2ludG1lbnRJZCA9IHRoaXMucmVzb2x2ZWRBcHBvaW50bWVudElkO1xuICAgIHRoaXMudmlkZW9DYWxsTW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudmlkZW9DYWxsSWQgPSB0aGlzLnZpZGVvQ2FsbElkO1xuICAgIHRoaXMudmlkZW9DYWxsTW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudXNlcklkID0gdGhpcy5jdXJyZW50VXNlcj8uaWQ7XG4gICAgdGhpcy52aWRlb0NhbGxNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50ZW5hbnQgPSB0aGlzLnRlbmFudDtcbiAgICB0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmJ1c2luZXNzUm9sZSA9IHRoaXMuYnVzaW5lc3NSb2xlO1xuICAgIHRoaXMudmlkZW9DYWxsTW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuaXNSZXR1cm5pbmdGcm9tUGlwID0gZmFsc2U7XG5cbiAgICB0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmLnJlc3VsdC50aGVuKFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmID0gbnVsbDtcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMudmlkZW9DYWxsTW9kYWxSZWYgPSBudWxsO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0YXMtd2FpdGluZy1yb29tXCI+XG4gIDwhLS0gSGVhZGVyIC0tPlxuICA8ZGl2IGNsYXNzPVwid2FpdGluZy1yb29tLWhlYWRlclwiPlxuICAgIDxoMiBjbGFzcz1cImhlYWRlci10aXRsZVwiPkluaWNpYXIgdHVybm88L2gyPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2UtYnRuXCIgKGNsaWNrKT1cImNhbmNlbCgpXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8IS0tIENvbnRlbnQgLS0+XG4gIDxkaXYgY2xhc3M9XCJ3YWl0aW5nLXJvb20tY29udGVudFwiPlxuICAgIDwhLS0gQ0hFQ0tJTkdfU1RBVFVTIFN0YXRlIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJzdGF0ZS1jb250YWluZXJcIiAqbmdJZj1cInN0YXRlID09PSBXYWl0aW5nUm9vbVN0YXRlLkNIRUNLSU5HX1NUQVRVU1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInN0YXRlLWljb24gbG9hZGluZ1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lclwiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8cCBjbGFzcz1cInN0YXRlLW1lc3NhZ2VcIj5WZXJpZmljYW5kbyBlc3RhZG8gZGUgbGEgc2VzacOzbi4uLjwvcD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gV0FJVElOR19GT1JfSk9JTkFCTEUgU3RhdGUgLS0+XG4gICAgPGRpdiBjbGFzcz1cInN0YXRlLWNvbnRhaW5lclwiICpuZ0lmPVwic3RhdGUgPT09IFdhaXRpbmdSb29tU3RhdGUuV0FJVElOR19GT1JfSk9JTkFCTEVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdGF0ZS1pY29uIGxvYWRpbmdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXJcIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHAgY2xhc3M9XCJzdGF0ZS1tZXNzYWdlXCI+RXNwZXJhbmRvIHF1ZSBsYSBzZXNpw7NuIGVzdMOpIGRpc3BvbmlibGUuLi48L3A+XG4gICAgICA8cCBjbGFzcz1cInN0YXRlLXN1Ym1lc3NhZ2VcIj5Qb3IgZmF2b3IsIHBlcm1hbmVjw6kgZW4gZXN0YSBwYW50YWxsYS48L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFJFQURZIFN0YXRlIChKb2luIGJ1dHRvbiBlbmFibGVkKSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwic3RhdGUtY29udGFpbmVyXCIgKm5nSWY9XCJzdGF0ZSA9PT0gV2FpdGluZ1Jvb21TdGF0ZS5SRUFEWVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInN0YXRlLWljb24gcmVhZHlcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGVjay1jaXJjbGVcIj48L2k+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxwIGNsYXNzPVwic3RhdGUtbWVzc2FnZSBzdWNjZXNzXCI+wqFMYSBzYWxhIGVzdMOhIGxpc3RhITwvcD5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGFjdGlvbi1idG4gam9pbi1idG5cIiAoY2xpY2spPVwiam9pblNlc3Npb24oKVwiPlxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNpZ24taW5cIj48L2k+XG4gICAgICAgIFVuaXJzZSBhIGxhIGxsYW1hZGFcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBKT0lOSU5HIFN0YXRlIChBdXRvLWpvaW5pbmcpIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJzdGF0ZS1jb250YWluZXJcIiAqbmdJZj1cInN0YXRlID09PSBXYWl0aW5nUm9vbVN0YXRlLkpPSU5JTkdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdGF0ZS1pY29uIGxvYWRpbmdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXJcIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHAgY2xhc3M9XCJzdGF0ZS1tZXNzYWdlXCI+SW5ncmVzYW5kbyBhIGxhIGxsYW1hZGEuLi48L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEdFVFRJTkdfVE9LRU4gU3RhdGUgLS0+XG4gICAgPGRpdiBjbGFzcz1cInN0YXRlLWNvbnRhaW5lclwiICpuZ0lmPVwic3RhdGUgPT09IFdhaXRpbmdSb29tU3RhdGUuR0VUVElOR19UT0tFTlwiPlxuICAgICAgPGRpdiBjbGFzcz1cInN0YXRlLWljb24gbG9hZGluZ1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lclwiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8cCBjbGFzcz1cInN0YXRlLW1lc3NhZ2VcIj5Db25lY3RhbmRvLi4uPC9wPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBFUlJPUiBTdGF0ZSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwic3RhdGUtY29udGFpbmVyXCIgKm5nSWY9XCJzdGF0ZSA9PT0gV2FpdGluZ1Jvb21TdGF0ZS5FUlJPUlwiPlxuICAgICAgPGRpdiBjbGFzcz1cInN0YXRlLWljb24gZXJyb3JcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZVwiPjwvaT5cbiAgICAgIDwvZGl2PlxuICAgICAgPHAgY2xhc3M9XCJzdGF0ZS1tZXNzYWdlIGVycm9yXCI+T2N1cnJpw7MgdW4gZXJyb3I8L3A+XG4gICAgICA8cCBjbGFzcz1cImVycm9yLWRldGFpbHNcIiAqbmdJZj1cImVycm9yTWVzc2FnZVwiPlxuICAgICAgICB7eyBlcnJvck1lc3NhZ2UgfX1cbiAgICAgIDwvcD5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGFjdGlvbi1idG4gcmV0cnktYnRuXCIgKGNsaWNrKT1cInJldHJ5KClcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1yZWZyZXNoXCI+PC9pPlxuICAgICAgICBSZWludGVudGFyXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
427
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy13YWl0aW5nLXJvb20vdGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy13YWl0aW5nLXJvb20vdGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBSXZGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUVMLFdBQVcsRUFDWCxlQUFlLEVBQ2YsV0FBVyxFQUNYLGNBQWMsR0FFZixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7Ozs7QUFFakYsTUFBTSxDQUFOLElBQVksZ0JBT1g7QUFQRCxXQUFZLGdCQUFnQjtJQUMxQix1REFBbUMsQ0FBQTtJQUNuQyxpRUFBNkMsQ0FBQTtJQUM3QyxtQ0FBZSxDQUFBO0lBQ2YsbURBQStCLENBQUE7SUFDL0IsdUNBQW1CLENBQUE7SUFDbkIsbUNBQWUsQ0FBQTtBQUNqQixDQUFDLEVBUFcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQU8zQjtBQU9ELE1BQU0sT0FBTyx1QkFBdUI7SUF5RGxDLFlBQ1MsV0FBMkIsRUFDMUIsVUFBc0IsRUFDdEIsa0JBQXNDLEVBQ3RDLFlBQXNCLEVBQ3RCLEdBQXNCO1FBSnZCLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMxQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FB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LGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUNoQyxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7O3FIQTljVSx1QkFBdUI7eUdBQXZCLHVCQUF1Qiw0TEM3QnBDLGloR0F5RUE7NEZENUNhLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxrQkFBa0I7c05BTW5CLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5wdXQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCwgTmdiTW9kYWwsIE5nYk1vZGFsUmVmIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuaW1wb3J0IHsgVGFzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Rhcy5zZXJ2aWNlJztcbmltcG9ydCB7IEdlb2xvY2F0aW9uU2VydmljZSwgR2VvUG9zaXRpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9nZW9sb2NhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgVGFzQ3VycmVudFVzZXIsXG4gIFRhc1Jvb21UeXBlLFxuICBUYXNCdXNpbmVzc1JvbGUsXG4gIFRhc1VzZXJSb2xlLFxuICBVc2VyQ2FsbEFjdGlvbixcbiAgUHJveHlWaWRlb1VzZXJNb2RpZnlSZXF1ZXN0LFxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3Rhcy5pbnRlcmZhY2VzJztcbmltcG9ydCB7IFRhc1ZpZGVvY2FsbENvbXBvbmVudCB9IGZyb20gJy4uL3Rhcy12aWRlb2NhbGwvdGFzLXZpZGVvY2FsbC5jb21wb25lbnQnO1xuXG5leHBvcnQgZW51bSBXYWl0aW5nUm9vbVN0YXRlIHtcbiAgQ0hFQ0tJTkdfU1RBVFVTID0gJ0NIRUNLSU5HX1NUQVRVUycsXG4gIFdBSVRJTkdfRk9SX0pPSU5BQkxFID0gJ1dBSVRJTkdfRk9SX0pPSU5BQkxFJyxcbiAgUkVBRFkgPSAnUkVBRFknLFxuICBHRVRUSU5HX1RPS0VOID0gJ0dFVFRJTkdfVE9LRU4nLFxuICBKT0lOSU5HID0gJ0pPSU5JTkcnLFxuICBFUlJPUiA9ICdFUlJPUicsXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Rhcy13YWl0aW5nLXJvb20nLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Rhcy13YWl0aW5nLXJvb20uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFzV2FpdGluZ1Jvb21Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8vIFN0YXR1cyBlbmRwb2ludCBwYXJhbXNcbiAgQElucHV0KCkgcm9vbVR5cGU6IFRhc1Jvb21UeXBlID0gVGFzUm9vbVR5cGUuVEFTO1xuICBASW5wdXQoKSBlbnRpdHlJZCE6IG51bWJlcjtcbiAgQElucHV0KCkgdGVuYW50ITogc3RyaW5nO1xuICBASW5wdXQoKSBidXNpbmVzc1JvbGU6IFRhc0J1c2luZXNzUm9sZSA9IFRhc0J1c2luZXNzUm9sZS5VU0VSO1xuXG4gIC8vIFVzZXIgaW5mbyBmb3IgdG9rZW4gcmVxdWVzdFxuICBASW5wdXQoKSBjdXJyZW50VXNlciE6IFRhc0N1cnJlbnRVc2VyO1xuXG4gIC8vIENvbXBvbmVudCBzdGF0ZVxuICBwdWJsaWMgc3RhdGU6IFdhaXRpbmdSb29tU3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLkNIRUNLSU5HX1NUQVRVUztcbiAgcHVibGljIFdhaXRpbmdSb29tU3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlOyAvLyBFeHBvc2UgZW51bSB0byB0ZW1wbGF0ZVxuICBwdWJsaWMgZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIHNob3dFcnJvckRldGFpbHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGlzSm9pbmFibGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBTZXNzaW9uIGRhdGEgZnJvbSBzdGF0dXMgcmVzcG9uc2VcbiAgcHJpdmF0ZSByZXNvbHZlZFNlc3Npb25JZDogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgcmVzb2x2ZWRBcHBvaW50bWVudElkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB0b2tlbjogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgdmlkZW9DYWxsSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIC8vIFN1YnNjcmlwdGlvbnNcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIHZpZGVvQ2FsbE1vZGFsUmVmOiBOZ2JNb2RhbFJlZiB8IG51bGwgPSBudWxsO1xuXG4gIC8vIEdlb2xvY2F0aW9uXG4gIHByaXZhdGUgZ2VvUG9zaXRpb246IEdlb1Bvc2l0aW9uIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZ2VvV2FzRGVuaWVkOiBib29sZWFuID0gZmFsc2U7IC8vIFRyYWNrcyBpZiB1c2VyIGRlbmllZCBnZW8gcGVybWlzc2lvblxuICBwcml2YXRlIGdlb1Jlc3VsdFNlbnQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gVHJhY2tzIGlmIGdlbyByZXN1bHQgd2FzIGFscmVhZHkgc2VudFxuXG4gIC8vIFBlcm1pc3Npb24gdHJhY2tpbmcgZm9yIGF1dG8tam9pblxuICBwcml2YXRlIG1lZGlhUGVybWlzc2lvbnNHcmFudGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgZ2VvUGVybWlzc2lvbnNSZXNvbHZlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIEF1dG8tcmV0cnkgdHJhY2tpbmdcbiAgcHJpdmF0ZSByZXRyeUNvdW50OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIHJlYWRvbmx5IE1BWF9SRVRSSUVTID0gMTtcblxuICAvKiogV2hldGhlciBjdXJyZW50IHVzZXIgaXMgYW4gb3duZXIgKi9cbiAgcHVibGljIGdldCBpc093bmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRVc2VyPy5yb2xlID09PSBUYXNVc2VyUm9sZS5PV05FUjtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHdlJ3JlIHN0aWxsIHJlcXVlc3RpbmcgcGVybWlzc2lvbnMgKGZvciB0ZW1wbGF0ZSkgKi9cbiAgcHVibGljIGdldCBpc1JlcXVlc3RpbmdQZXJtaXNzaW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMubWVkaWFQZXJtaXNzaW9uc0dyYW50ZWQgfHwgKCF0aGlzLmdlb1Blcm1pc3Npb25zUmVzb2x2ZWQgJiYgIXRoaXMuaXNPd25lciAmJiAhdGhpcy5pc0JhY2tvZmZpY2UpO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgd2UncmUgd2FpdGluZyBmb3IgYWRtaXNzaW9uIGFmdGVyIHBlcm1pc3Npb25zIGdyYW50ZWQgKGZvciB0ZW1wbGF0ZSkgKi9cbiAgcHVibGljIGdldCBpc1dhaXRpbmdGb3JBZG1pc3Npb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubWVkaWFQZXJtaXNzaW9uc0dyYW50ZWQgJiYgXG4gICAgICAgICAgICh0aGlzLmdlb1Blcm1pc3Npb25zUmVzb2x2ZWQgfHwgdGhpcy5pc093bmVyIHx8IHRoaXMuaXNCYWNrb2ZmaWNlKSAmJiBcbiAgICAgICAgICAgIXRoaXMuaXNKb2luYWJsZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWwsXG4gICAgcHJpdmF0ZSB0YXNTZXJ2aWNlOiBUYXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2VvbG9jYXRpb25TZXJ2aWNlOiBHZW9sb2NhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIFRhc1dhaXRpbmdSb29tQ29tcG9uZW50Lm5nT25Jbml0Jyk7XG4gICAgdGhpcy5yZXF1ZXN0TWVkaWFQZXJtaXNzaW9ucygpO1xuICAgIC8vIFJlcXVlc3QgZ2VvbG9jYXRpb24gcGVybWlzc2lvbiBhbmQgY2FjaGUgaXQgKGJ1dCBkb24ndCBzZW5kIHRvIGJhY2tlbmQgeWV0KVxuICAgIC8vIFRoZSBjYWNoZWQgcG9zaXRpb24gd2lsbCBiZSBzZW50IHdoZW4gb3duZXIgcmVxdWVzdHMgaXQgdmlhIGFjdGl2YXRlR2VvXG4gICAgdGhpcy5yZXF1ZXN0R2VvbG9jYXRpb24oKTtcbiAgICB0aGlzLmNoZWNrU3RhdHVzKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdCBjYW1lcmEgYW5kIG1pY3JvcGhvbmUgcGVybWlzc2lvbnMuXG4gICAqIFRyaWdnZXJzIGF1dG8tam9pbiB3aGVuIHBlcm1pc3Npb25zIGFyZSByZXNvbHZlZC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVxdWVzdE1lZGlhUGVybWlzc2lvbnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIFJlcXVlc3RpbmcgbWVkaWEgcGVybWlzc2lvbnMuLi4nKTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RyZWFtID0gYXdhaXQgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoeyBhdWRpbzogdHJ1ZSwgdmlkZW86IHRydWUgfSk7XG4gICAgICAvLyBTdG9wIHRyYWNrcyBpbW1lZGlhdGVseSAtIHdlIGp1c3QgbmVlZGVkIHRoZSBwZXJtaXNzaW9uXG4gICAgICBzdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpO1xuICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIE1lZGlhIHBlcm1pc3Npb25zIGdyYW50ZWQnKTtcbiAgICAgIHRoaXMubWVkaWFQZXJtaXNzaW9uc0dyYW50ZWQgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tUQVMgREVCVUddIE1lZGlhIHBlcm1pc3Npb25zIGRlbmllZCBvciB1bmF2YWlsYWJsZTonLCBlcnJvcik7XG4gICAgICAvLyBTdGlsbCBhbGxvdyBqb2luaW5nIC0gc29tZSB1c2VycyBtYXkgbm90IGhhdmUgY2FtZXJhL21pY1xuICAgICAgdGhpcy5tZWRpYVBlcm1pc3Npb25zR3JhbnRlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMudHJ5QXV0b0pvaW4oKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdCBnZW9sb2NhdGlvbiBwZXJtaXNzaW9uIGFuZCBjYWNoZSByZXN1bHQuXG4gICAqIE9ubHkgZm9yIHJlZ3VsYXIgdXNlcnMgKG5vdCBvd25lcnMvYmFja29mZmljZSkuXG4gICAqIEFjdHVhbCBzZW5kIHRvIGJhY2tlbmQgaGFwcGVucyBhZnRlciB3ZSBoYXZlIHZpZGVvQ2FsbElkLlxuICAgKiBUcmlnZ2VycyBhdXRvLWpvaW4gd2hlbiBnZW9sb2NhdGlvbiBpcyByZXNvbHZlZC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVxdWVzdEdlb2xvY2F0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIE9ubHkgcmVxdWVzdCBnZW9sb2NhdGlvbiBmb3IgcmVndWxhciB1c2Vycywgbm90IG93bmVycy9iYWNrb2ZmaWNlXG4gICAgaWYgKHRoaXMuaXNPd25lciB8fCB0aGlzLmlzQmFja29mZmljZSkge1xuICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIFNraXBwaW5nIGdlb2xvY2F0aW9uIGZvciBvd25lci9iYWNrb2ZmaWNlJyk7XG4gICAgICB0aGlzLmdlb1Blcm1pc3Npb25zUmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBSZXF1ZXN0aW5nIGdlb2xvY2F0aW9uIHBlcm1pc3Npb24uLi4nKTtcbiAgICBjb25zdCBwb3NpdGlvbiA9IGF3YWl0IHRoaXMuZ2VvbG9jYXRpb25TZXJ2aWNlLmdldEN1cnJlbnRQb3NpdGlvbigpO1xuICAgIFxuICAgIGlmIChwb3NpdGlvbikge1xuICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIEdlb2xvY2F0aW9uIGdyYW50ZWQ6JywgcG9zaXRpb24pO1xuICAgICAgdGhpcy5nZW9Qb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgICAgdGhpcy5nZW9XYXNEZW5pZWQgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIEdlb2xvY2F0aW9uIGRlbmllZCBvciB1bmF2YWlsYWJsZScpO1xuICAgICAgdGhpcy5nZW9Qb3NpdGlvbiA9IG51bGw7XG4gICAgICB0aGlzLmdlb1dhc0RlbmllZCA9IHRydWU7XG4gICAgfVxuICAgIFxuICAgIHRoaXMuZ2VvUGVybWlzc2lvbnNSZXNvbHZlZCA9IHRydWU7XG4gICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIHZpZGVvQ2FsbElkLCBzZW5kIG5vdy4gT3RoZXJ3aXNlLCBpdCB3aWxsIGJlIHNlbnQgYWZ0ZXIgc3RhdHVzIHJlc3BvbnNlLlxuICAgIHRoaXMuc2VuZEdlb1Jlc3VsdFRvQmFja2VuZCgpO1xuICAgIHRoaXMudHJ5QXV0b0pvaW4oKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBnZW8gcmVzdWx0IHRvIGJhY2tlbmQgKGdyYW50ZWQgb3IgZGVuaWVkKS5cbiAgICogT25seSBzZW5kcyBpZiB2aWRlb0NhbGxJZCBpcyBhdmFpbGFibGUgYW5kIG5vdCBhbHJlYWR5IHNlbnQuXG4gICAqL1xuICBwcml2YXRlIHNlbmRHZW9SZXN1bHRUb0JhY2tlbmQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnZpZGVvQ2FsbElkKSB7XG4gICAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gQ2Fubm90IHNlbmQgZ2VvIHJlc3VsdDogdmlkZW9DYWxsSWQgbm90IGF2YWlsYWJsZSB5ZXQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5nZW9SZXN1bHRTZW50KSB7XG4gICAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gR2VvIHJlc3VsdCBhbHJlYWR5IHNlbnQsIHNraXBwaW5nJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2VvUG9zaXRpb24pIHtcbiAgICAgIHRoaXMuc2VuZEdlb2xvY2F0aW9uVG9CYWNrZW5kKCk7XG4gICAgICB0aGlzLmdlb1Jlc3VsdFNlbnQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5nZW9XYXNEZW5pZWQpIHtcbiAgICAgIHRoaXMuc2VuZEdlb0RlbmlhbFRvQmFja2VuZCgpO1xuICAgICAgdGhpcy5nZW9SZXN1bHRTZW50ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBncmFudGVkIGdlb2xvY2F0aW9uIHRvIGJhY2tlbmQgdmlhIG1vZGlmeSB1c2VyIGVuZHBvaW50LlxuICAgKi9cbiAgcHJpdmF0ZSBzZW5kR2VvbG9jYXRpb25Ub0JhY2tlbmQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmdlb1Bvc2l0aW9uIHx8ICF0aGlzLnZpZGVvQ2FsbElkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIFNlbmRpbmcgZ2VvbG9jYXRpb24gdG8gYmFja2VuZC4uLicpO1xuICAgIGNvbnN0IGJvZHk6IFByb3h5VmlkZW9Vc2VyTW9kaWZ5UmVxdWVzdCA9IHtcbiAgICAgIHZpZGVvQ2FsbElkOiB0aGlzLnZpZGVvQ2FsbElkLFxuICAgICAgYWN0aW9uOiBVc2VyQ2FsbEFjdGlvbi5BQ1RJVkFURV9HRU9MT0NBVElPTixcbiAgICAgIGxhdGl0dWRlOiB0aGlzLmdlb1Bvc2l0aW9uLmxhdGl0dWRlLFxuICAgICAgbG9uZ2l0dWRlOiB0aGlzLmdlb1Bvc2l0aW9uLmxvbmdpdHVkZSxcbiAgICB9O1xuICAgIFxuICAgIHRoaXMudGFzU2VydmljZS5tb2RpZnlQcm94eVZpZGVvVXNlcihib2R5KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4gY29uc29sZS5sb2coJ1tUQVMgREVCVUddIEdlb2xvY2F0aW9uIHNlbnQgc3VjY2Vzc2Z1bGx5JyksXG4gICAgICBlcnJvcjogKGVycikgPT4gY29uc29sZS5lcnJvcignW1RBUyBERUJVR10gRmFpbGVkIHRvIHNlbmQgZ2VvbG9jYXRpb246JywgZXJyKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGdlb2xvY2F0aW9uIGRlbmlhbCB0byBiYWNrZW5kIHZpYSBtb2RpZnkgdXNlciBlbmRwb2ludC5cbiAgICovXG4gIHByaXZhdGUgc2VuZEdlb0RlbmlhbFRvQmFja2VuZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudmlkZW9DYWxsSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gU2VuZGluZyBnZW8gZGVuaWFsIHRvIGJhY2tlbmQuLi4nKTtcbiAgICBjb25zdCBib2R5OiBQcm94eVZpZGVvVXNlck1vZGlmeVJlcXVlc3QgPSB7XG4gICAgICB2aWRlb0NhbGxJZDogdGhpcy52aWRlb0NhbGxJZCxcbiAgICAgIGFjdGlvbjogVXNlckNhbGxBY3Rpb24uREVOWV9HRU9MT0NBVElPTixcbiAgICB9O1xuICAgIFxuICAgIHRoaXMudGFzU2VydmljZS5tb2RpZnlQcm94eVZpZGVvVXNlcihib2R5KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4gY29uc29sZS5sb2coJ1tUQVMgREVCVUddIEdlbyBkZW5pYWwgc2VudCBzdWNjZXNzZnVsbHknKSxcbiAgICAgIGVycm9yOiAoZXJyKSA9PiBjb25zb2xlLmVycm9yKCdbVEFTIERFQlVHXSBGYWlsZWQgdG8gc2VuZCBnZW8gZGVuaWFsOicsIGVyciksXG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gVGFzV2FpdGluZ1Jvb21Db21wb25lbnQubmdPbkRlc3Ryb3knKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnRhc1NlcnZpY2Uuc3RvcFN0YXR1c1BvbGxpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBzdGF0dXMgdG8gZ2V0IHNlc3Npb24gaW5mb1xuICAgKi9cbiAgcHJpdmF0ZSBjaGVja1N0YXR1cygpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gY2hlY2tTdGF0dXMgY2FsbGVkIHdpdGg6Jywge1xuICAgICAgcm9vbVR5cGU6IHRoaXMucm9vbVR5cGUsXG4gICAgICBlbnRpdHlJZDogdGhpcy5lbnRpdHlJZCxcbiAgICAgIHRlbmFudDogdGhpcy50ZW5hbnQsXG4gICAgICBidXNpbmVzc1JvbGU6IHRoaXMuYnVzaW5lc3NSb2xlLFxuICAgICAgY3VycmVudFVzZXI6IHRoaXMuY3VycmVudFVzZXIsXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZS5DSEVDS0lOR19TVEFUVVM7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcblxuICAgIGNvbnN0IHN0YXR1c1BhcmFtcyA9IHtcbiAgICAgIHJvb21UeXBlOiB0aGlzLnJvb21UeXBlLFxuICAgICAgZW50aXR5SWQ6IHRoaXMuZW50aXR5SWQsXG4gICAgICB0ZW5hbnQ6IHRoaXMudGVuYW50LFxuICAgICAgYnVzaW5lc3NSb2xlOiB0aGlzLmJ1c2luZXNzUm9sZSxcbiAgICB9O1xuXG4gICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIENhbGxpbmcgZ2V0UHJveHlWaWRlb1N0YXR1cy4uLicpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMudGFzU2VydmljZS5nZXRQcm94eVZpZGVvU3RhdHVzKHN0YXR1c1BhcmFtcykuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29udGVudCA9IHJlc3BvbnNlLmNvbnRlbnQ7XG5cbiAgICAgICAgICAvLyBTdG9yZSBzZXNzaW9uIGluZm8gZnJvbSByZXNwb25zZVxuICAgICAgICAgIHRoaXMucmVzb2x2ZWRTZXNzaW9uSWQgPSBjb250ZW50LnNlc3Npb25JZDtcbiAgICAgICAgICB0aGlzLnJlc29sdmVkQXBwb2ludG1lbnRJZCA9IGNvbnRlbnQuYXBwb2ludG1lbnRJZDtcbiAgICAgICAgICB0aGlzLnZpZGVvQ2FsbElkID0gY29udGVudC52aWRlb0NhbGxJZDtcblxuICAgICAgICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBTdGF0dXMgcmVzcG9uc2U6JywgY29udGVudCk7XG5cbiAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIHZpZGVvQ2FsbElkLCBzZW5kIGdlbyByZXN1bHQgaWYgbm90IGFscmVhZHkgc2VudFxuICAgICAgICAgIHRoaXMuc2VuZEdlb1Jlc3VsdFRvQmFja2VuZCgpO1xuXG4gICAgICAgICAgLy8gU3RhcnQgcG9sbGluZyBmb3Igc3RhdHVzIHVwZGF0ZXNcbiAgICAgICAgICB0aGlzLnRhc1NlcnZpY2Uuc3RhcnRTdGF0dXNQb2xsaW5nKHN0YXR1c1BhcmFtcyk7XG5cbiAgICAgICAgICAvLyBTdWJzY3JpYmUgdG8gam9pbmFibGUgc3RhdHVzXG4gICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMudGFzU2VydmljZS5qb2luYWJsZSQuc3Vic2NyaWJlKChqb2luYWJsZSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmhhbmRsZUpvaW5hYmxlQ2hhbmdlKGpvaW5hYmxlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbVEFTIERFQlVHXSBTdGF0dXMgY2hlY2sgZmFpbGVkOicsIGVycik7XG4gICAgICAgICAgdGhpcy5zdGF0ZSA9IFdhaXRpbmdSb29tU3RhdGUuRVJST1I7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnRXJyb3IgY2hlY2tpbmcgc2Vzc2lvbiBzdGF0dXMuIFBsZWFzZSB0cnkgYWdhaW4uJztcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgY2hhbmdlcyB0byBqb2luYWJsZSBzdGF0dXMuXG4gICAqIFRyaWdnZXJzIGF1dG8tam9pbiB3aGVuIGpvaW5hYmxlIGJlY29tZXMgdHJ1ZS5cbiAgICovXG4gIHByaXZhdGUgaGFuZGxlSm9pbmFibGVDaGFuZ2Uoam9pbmFibGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gaGFuZGxlSm9pbmFibGVDaGFuZ2UgY2FsbGVkJywge1xuICAgICAgam9pbmFibGUsXG4gICAgICBjdXJyZW50U3RhdGU6IHRoaXMuc3RhdGUsXG4gICAgICByZXNvbHZlZFNlc3Npb25JZDogdGhpcy5yZXNvbHZlZFNlc3Npb25JZCxcbiAgICB9KTtcblxuICAgIHRoaXMuaXNKb2luYWJsZSA9IGpvaW5hYmxlO1xuXG4gICAgLy8gRG9uJ3QgdXBkYXRlIHN0YXRlIGlmIGFscmVhZHkgZ2V0dGluZyB0b2tlbiwgam9pbmluZywgb3IgaW4gZXJyb3JcbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXRlID09PSBXYWl0aW5nUm9vbVN0YXRlLkdFVFRJTkdfVE9LRU4gfHxcbiAgICAgIHRoaXMuc3RhdGUgPT09IFdhaXRpbmdSb29tU3RhdGUuSk9JTklORyB8fFxuICAgICAgdGhpcy5zdGF0ZSA9PT0gV2FpdGluZ1Jvb21TdGF0ZS5FUlJPUlxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIFNraXBwaW5nIHN0YXRlIHVwZGF0ZSAtIGFscmVhZHkgaW46JywgdGhpcy5zdGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHN0YXRlIGFuZCBhdHRlbXB0IGF1dG8tam9pblxuICAgIGlmIChqb2luYWJsZSkge1xuICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIEpvaW5hYmxlIGlzIHRydWUsIGF0dGVtcHRpbmcgYXV0by1qb2luJyk7XG4gICAgICB0aGlzLnN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZS5SRUFEWTtcbiAgICAgIHRoaXMudHJ5QXV0b0pvaW4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIFdhaXRpbmcgZm9yIGpvaW5hYmxlLi4uJyk7XG4gICAgICB0aGlzLnN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZS5XQUlUSU5HX0ZPUl9KT0lOQUJMRTtcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHQgdG8gYXV0by1qb2luIHRoZSBzZXNzaW9uIHdoZW4gYWxsIGNvbmRpdGlvbnMgYXJlIG1ldC5cbiAgICogLSBGb3Igb3duZXJzOiBqdXN0IG5lZWQgam9pbmFibGUgKyBzZXNzaW9uSWRcbiAgICogLSBGb3IgdXNlcnM6IG5lZWQgbWVkaWEgcGVybWlzc2lvbnMgKyBnZW8gcmVzb2x2ZWQgKyBqb2luYWJsZSArIHNlc3Npb25JZFxuICAgKi9cbiAgcHJpdmF0ZSB0cnlBdXRvSm9pbigpOiB2b2lkIHtcbiAgICAvLyBEb24ndCB0cnkgaWYgYWxyZWFkeSBqb2luaW5nIG9yIGluIGVycm9yXG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IFdhaXRpbmdSb29tU3RhdGUuR0VUVElOR19UT0tFTiB8fCBcbiAgICAgICAgdGhpcy5zdGF0ZSA9PT0gV2FpdGluZ1Jvb21TdGF0ZS5KT0lOSU5HKSB7XG4gICAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gdHJ5QXV0b0pvaW4gc2tpcHBlZCAtIGFscmVhZHkgaW4gc3RhdGU6JywgdGhpcy5zdGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRm9yIG93bmVyczoganVzdCBuZWVkIGpvaW5hYmxlXG4gICAgaWYgKHRoaXMuaXNPd25lcikge1xuICAgICAgaWYgKHRoaXMuaXNKb2luYWJsZSAmJiB0aGlzLnJlc29sdmVkU2Vzc2lvbklkKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBPd25lciBhdXRvLWpvaW5pbmcuLi4nKTtcbiAgICAgICAgdGhpcy5zdGFydFNlc3Npb25BbmRKb2luKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRm9yIHVzZXJzOiBuZWVkIG1lZGlhICsgZ2VvIHJlc29sdmVkICsgam9pbmFibGVcbiAgICBpZiAodGhpcy5tZWRpYVBlcm1pc3Npb25zR3JhbnRlZCAmJiBcbiAgICAgICAgdGhpcy5nZW9QZXJtaXNzaW9uc1Jlc29sdmVkICYmIFxuICAgICAgICB0aGlzLmlzSm9pbmFibGUgJiYgXG4gICAgICAgIHRoaXMucmVzb2x2ZWRTZXNzaW9uSWQpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBVc2VyIGF1dG8tam9pbmluZy4uLicpO1xuICAgICAgdGhpcy5zdGFydFNlc3Npb25BbmRKb2luKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHVzZXIgaGFzIG93bmVyL2JhY2tvZmZpY2Ugcm9sZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgaXNCYWNrb2ZmaWNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmJ1c2luZXNzUm9sZSA9PT0gVGFzQnVzaW5lc3NSb2xlLkJBQ0tPRkZJQ0UgfHxcbiAgICAgIHRoaXMuYnVzaW5lc3NSb2xlID09PSBUYXNCdXNpbmVzc1JvbGUuQURNSU5fTUFOQUdFUiB8fFxuICAgICAgdGhpcy5idXNpbmVzc1JvbGUgPT09IFRhc0J1c2luZXNzUm9sZS5NQU5BR0VSXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBzZXNzaW9uIGFuZCBqb2luIC0gY2FsbGVkIHdoZW4gdXNlciBjbGlja3Mgam9pbiBidXR0b25cbiAgICovXG4gIHByaXZhdGUgc3RhcnRTZXNzaW9uQW5kSm9pbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVzb2x2ZWRTZXNzaW9uSWQpIHtcbiAgICAgIHRoaXMuc3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLkVSUk9SO1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnU2Vzc2lvbiBJRCBub3QgYXZhaWxhYmxlJztcbiAgICAgIHRoaXMudGFzU2VydmljZS5zdG9wU3RhdHVzUG9sbGluZygpO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLkdFVFRJTkdfVE9LRU47XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gQ2FsbGluZyAvc3RhcnQgZm9yIHNlc3Npb246JywgdGhpcy5yZXNvbHZlZFNlc3Npb25JZCk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50YXNTZXJ2aWNlXG4gICAgICAgIC5zdGFydFByb3h5VmlkZW9TZXNzaW9uKHtcbiAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMucmVzb2x2ZWRTZXNzaW9uSWQsXG4gICAgICAgICAgbmFtZTogdGhpcy5jdXJyZW50VXNlci5uYW1lLFxuICAgICAgICAgIGxhc3RuYW1lOiB0aGlzLmN1cnJlbnRVc2VyLmxhc3RuYW1lLFxuICAgICAgICB9KVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAodG9rZW5SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIFRva2VuIHJlc3BvbnNlOicsIHRva2VuUmVzcG9uc2UpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBIYW5kbGUgY2FzZSB3aGVyZSBIVFRQIGFkYXB0ZXIgcmV0dXJucyBlcnJvciBpbiBuZXh0IGluc3RlYWQgb2YgZXJyb3IgaGFuZGxlclxuICAgICAgICAgICAgaWYgKCF0b2tlblJlc3BvbnNlPy5jb250ZW50Py50b2tlbikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbVEFTIERFQlVHXSBJbnZhbGlkIHRva2VuIHJlc3BvbnNlOicsIHRva2VuUmVzcG9uc2UpO1xuICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZS5FUlJPUjtcbiAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAodG9rZW5SZXNwb25zZSBhcyBhbnkpPy5tZXNzYWdlIHx8ICdFcnJvciBhbCBpbmljaWFyIGxhIHNlc2nDs24uIFJlc3B1ZXN0YSBpbnbDoWxpZGEuJztcbiAgICAgICAgICAgICAgdGhpcy50YXNTZXJ2aWNlLnN0b3BTdGF0dXNQb2xsaW5nKCk7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gVG9rZW4gb2J0YWluZWQgc3VjY2Vzc2Z1bGx5LCBqb2luaW5nIHNlc3Npb24uLi4nKTtcbiAgICAgICAgICAgIHRoaXMudG9rZW4gPSB0b2tlblJlc3BvbnNlLmNvbnRlbnQudG9rZW47XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZS5KT0lOSU5HO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBBdXRvLWpvaW4gaW1tZWRpYXRlbHlcbiAgICAgICAgICAgIHRoaXMudGFzU2VydmljZS5zdG9wU3RhdHVzUG9sbGluZygpO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5jbG9zZSgnam9pbmluZycpO1xuICAgICAgICAgICAgdGhpcy5vcGVuVmlkZW9DYWxsTW9kYWwoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbVEFTIERFQlVHXSAvc3RhcnQgcmVxdWVzdCBmYWlsZWQ6JywgZXJyKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gQXV0by1yZXRyeSBvbiBmaXJzdCBmYWlsdXJlXG4gICAgICAgICAgICBpZiAodGhpcy5yZXRyeUNvdW50IDwgdGhpcy5NQVhfUkVUUklFUykge1xuICAgICAgICAgICAgICB0aGlzLnJldHJ5Q291bnQrKztcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIEF1dG8tcmV0cnlpbmcuLi4gYXR0ZW1wdDonLCB0aGlzLnJldHJ5Q291bnQpO1xuICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZS5DSEVDS0lOR19TVEFUVVM7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnN0YXJ0U2Vzc2lvbkFuZEpvaW4oKSwgMjAwMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBTaG93IGVycm9yIGFmdGVyIHJldHJ5IGZhaWxzXG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLkVSUk9SO1xuICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyPy5tZXNzYWdlIHx8ICdFcnJvciBhbCBpbmljaWFyIGxhIHNlc2nDs24uIFBvciBmYXZvciwgaW50ZW50ZSBudWV2YW1lbnRlLic7XG4gICAgICAgICAgICAgIHRoaXMudGFzU2VydmljZS5zdG9wU3RhdHVzUG9sbGluZygpO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gU3RhdGUgc2V0IHRvIEVSUk9SLCBlcnJvck1lc3NhZ2U6JywgdGhpcy5lcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBSZXRyeSBhZnRlciBhbiBlcnJvci5cbiAgICogUmVzZXRzIHJldHJ5IGNvdW50IGFuZCByZXN0YXJ0cyB0aGUgZmxvdy5cbiAgICovXG4gIHJldHJ5KCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLkNIRUNLSU5HX1NUQVRVUztcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMuc2hvd0Vycm9yRGV0YWlscyA9IGZhbHNlO1xuICAgIHRoaXMudG9rZW4gPSAnJztcbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwOyAvLyBSZXNldCByZXRyeSBjb3VudCBmb3IgYXV0by1yZXRyeVxuICAgIHRoaXMuY2hlY2tTdGF0dXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGUgdGhlIGVycm9yIGRldGFpbHMgZHJvcGRvd24gdmlzaWJpbGl0eS5cbiAgICovXG4gIHRvZ2dsZUVycm9yRGV0YWlscygpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dFcnJvckRldGFpbHMgPSAhdGhpcy5zaG93RXJyb3JEZXRhaWxzO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIHRoZSB3YWl0aW5nIHJvb20gbW9kYWwuXG4gICAqL1xuICBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRhc1NlcnZpY2Uuc3RvcFN0YXR1c1BvbGxpbmcoKTtcbiAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoJ2Nsb3NlJyk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5WaWRlb0NhbGxNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihUYXNWaWRlb2NhbGxDb21wb25lbnQsIHtcbiAgICAgIHNpemU6ICd4bCcsXG4gICAgICB3aW5kb3dDbGFzczogJ3Rhcy12aWRlby1tb2RhbCcsXG4gICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXG4gICAgICBrZXlib2FyZDogZmFsc2UsXG4gICAgfSk7XG5cbiAgICB0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnNlc3Npb25JZCA9IHRoaXMucmVzb2x2ZWRTZXNzaW9uSWQ7XG4gICAgdGhpcy52aWRlb0NhbGxNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50b2tlbiA9IHRoaXMudG9rZW47XG4gICAgdGhpcy52aWRlb0NhbGxNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5hcHBvaW50bWVudElkID0gdGhpcy5yZXNvbHZlZEFwcG9pbnRtZW50SWQ7XG4gICAgdGhpcy52aWRlb0NhbGxNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS52aWRlb0NhbGxJZCA9IHRoaXMudmlkZW9DYWxsSWQ7XG4gICAgdGhpcy52aWRlb0NhbGxNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS51c2VySWQgPSB0aGlzLmN1cnJlbnRVc2VyPy5pZDtcbiAgICB0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRlbmFudCA9IHRoaXMudGVuYW50O1xuICAgIHRoaXMudmlkZW9DYWxsTW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuYnVzaW5lc3NSb2xlID0gdGhpcy5idXNpbmVzc1JvbGU7XG4gICAgdGhpcy52aWRlb0NhbGxNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5pc1JldHVybmluZ0Zyb21QaXAgPSBmYWxzZTtcblxuICAgIHRoaXMudmlkZW9DYWxsTW9kYWxSZWYucmVzdWx0LnRoZW4oXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMudmlkZW9DYWxsTW9kYWxSZWYgPSBudWxsO1xuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy52aWRlb0NhbGxNb2RhbFJlZiA9IG51bGw7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRhcy13YWl0aW5nLXJvb21cIj5cbiAgPGRpdiBjbGFzcz1cIndhaXRpbmctcm9vbS1jb250ZW50XCI+XG4gICAgPGRpdiBjbGFzcz1cInN0YXRlLWNvbnRhaW5lclwiPlxuICAgICAgPCEtLSBMb2FkaW5nIHN0YXRlcyAoc2hvdyBzcGlubmVyKSAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0ZSAhPT0gV2FpdGluZ1Jvb21TdGF0ZS5FUlJPUlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdGUtaWNvbiBsb2FkaW5nXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXJcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIFxuICAgICAgICA8IS0tIFJlcXVlc3RpbmcgcGVybWlzc2lvbnMgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1JlcXVlc3RpbmdQZXJtaXNzaW9uc1wiPlxuICAgICAgICAgIDxwIGNsYXNzPVwic3RhdGUtbWVzc2FnZVwiPlNvbGljaXRhbmRvIHBlcm1pc29zLi4uPC9wPlxuICAgICAgICAgIDxwIGNsYXNzPVwic3RhdGUtc3VibWVzc2FnZVwiPlBvciBmYXZvciwgYWNlcHTDoSBsb3MgcGVybWlzb3MgZGUgY8OhbWFyYSB5IG1pY3LDs2Zvbm8uPC9wPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgXG4gICAgICAgIDwhLS0gV2FpdGluZyBmb3IgYWRtaXNzaW9uIChwZXJtaXNzaW9ucyBncmFudGVkLCBub3Qgam9pbmFibGUgeWV0KSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzV2FpdGluZ0ZvckFkbWlzc2lvblwiPlxuICAgICAgICAgIDxwIGNsYXNzPVwic3RhdGUtbWVzc2FnZVwiPk1lZGljaW5hIGxhYm9yYWwgdmEgYSBhZG1pdGlydGU8L3A+XG4gICAgICAgICAgPHAgY2xhc3M9XCJzdGF0ZS1zdWJtZXNzYWdlXCI+UG9yIGZhdm9yLCBwZXJtYW5lY8OpIGVuIGVzdGEgcGFudGFsbGEuPC9wPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgXG4gICAgICAgIDwhLS0gR2V0dGluZyB0b2tlbiAvIEpvaW5pbmcgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0ZSA9PT0gV2FpdGluZ1Jvb21TdGF0ZS5HRVRUSU5HX1RPS0VOIHx8IHN0YXRlID09PSBXYWl0aW5nUm9vbVN0YXRlLkpPSU5JTkdcIj5cbiAgICAgICAgICA8cCBjbGFzcz1cInN0YXRlLW1lc3NhZ2VcIj5Db25lY3RhbmRvLi4uPC9wPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgXG4gICAgICAgIDwhLS0gQ2hlY2tpbmcgc3RhdHVzICh3aGVuIG5vdCByZXF1ZXN0aW5nIHBlcm1pc3Npb25zKSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXRlID09PSBXYWl0aW5nUm9vbVN0YXRlLkNIRUNLSU5HX1NUQVRVUyAmJiAhaXNSZXF1ZXN0aW5nUGVybWlzc2lvbnNcIj5cbiAgICAgICAgICA8cCBjbGFzcz1cInN0YXRlLW1lc3NhZ2VcIj5WZXJpZmljYW5kbyBlc3RhZG8uLi48L3A+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gRXJyb3Igc3RhdGUgKHNob3cgZXJyb3IgaWNvbiBhbmQgbWVzc2FnZSkgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RhdGUgPT09IFdhaXRpbmdSb29tU3RhdGUuRVJST1JcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0YXRlLWljb24gZXJyb3JcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCI+PC9pPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHAgY2xhc3M9XCJzdGF0ZS1tZXNzYWdlIGVycm9yXCI+T2N1cnJpw7MgdW4gZXJyb3I8L3A+XG4gICAgICAgIFxuICAgICAgICA8IS0tIENvbGxhcHNpYmxlIGVycm9yIGRldGFpbHMgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlcnJvci1kcm9wZG93blwiICpuZ0lmPVwiZXJyb3JNZXNzYWdlXCI+XG4gICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcbiAgICAgICAgICAgIGNsYXNzPVwiZXJyb3ItdG9nZ2xlLWJ0blwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRXJyb3JEZXRhaWxzKClcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJzaG93RXJyb3JEZXRhaWxzXCJcbiAgICAgICAgICAgIGFyaWEtY29udHJvbHM9XCJlcnJvci1kZXRhaWxzLWNvbnRlbnRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPlZlciBkZXRhbGxlcyBkZWwgZXJyb3I8L3NwYW4+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhXCIgW2NsYXNzLmZhLWNoZXZyb24tZG93bl09XCIhc2hvd0Vycm9yRGV0YWlsc1wiIFtjbGFzcy5mYS1jaGV2cm9uLXVwXT1cInNob3dFcnJvckRldGFpbHNcIj48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGRpdiBcbiAgICAgICAgICAgIGlkPVwiZXJyb3ItZGV0YWlscy1jb250ZW50XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXJyb3ItZGV0YWlscy1jb250ZW50XCJcbiAgICAgICAgICAgIFtjbGFzcy5leHBhbmRlZF09XCJzaG93RXJyb3JEZXRhaWxzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cCBjbGFzcz1cImVycm9yLWRldGFpbHMtdGV4dFwiPnt7IGVycm9yTWVzc2FnZSB9fTwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIFxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyb3ItYWN0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGFjdGlvbi1idG4gcmV0cnktYnRuXCIgKGNsaWNrKT1cInJldHJ5KClcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcmVmcmVzaFwiPjwvaT5cbiAgICAgICAgICAgIFJlaW50ZW50YXJcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBhY3Rpb24tYnRuIGNsb3NlLWJ0blwiIChjbGljayk9XCJjbG9zZSgpXCI+XG4gICAgICAgICAgICBDZXJyYXJcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,17 @@
1
+ /**
2
+ * SVG icons used internally by TAS SDK components.
3
+ * Icons are stored as strings to avoid asset bundling complexity.
4
+ */
5
+ export const TAS_ICONS = {
6
+ home: `<svg width="120" height="100" viewBox="0 0 120 100" fill="none" xmlns="http://www.w3.org/2000/svg">
7
+ <rect x="10" width="100" height="100" rx="50" fill="#44D8E8" fill-opacity="0.2"/>
8
+ <path d="M45 70C43.625 70 42.4479 69.5104 41.4688 68.5313C40.4896 67.5521 40 66.375 40 65V46.5625L37.5 48.5C36.9583 48.9167 36.3438 49.0833 35.6562 49C34.9688 48.9167 34.4167 48.5833 34 48C33.5833 47.4583 33.4271 46.8542 33.5312 46.1875C33.6354 45.5208 33.9583 44.9792 34.5 44.5625L56.9375 27.3125C57.3958 26.9792 57.8854 26.7292 58.4062 26.5625C58.9271 26.3958 59.4583 26.3125 60 26.3125C60.5417 26.3125 61.0729 26.3958 61.5938 26.5625C62.1146 26.7292 62.6042 26.9792 63.0625 27.3125L85.5 44.5C86.0417 44.9167 86.3646 45.4583 86.4688 46.125C86.5729 46.7917 86.4167 47.4167 86 48C85.5833 48.5833 85.0417 48.9063 84.375 48.9688C83.7083 49.0313 83.0833 48.8542 82.5 48.4375L60 31.25L45 42.75V65H50.0625C50.7708 65 51.3542 65.2396 51.8125 65.7188C52.2708 66.1979 52.5 66.7917 52.5 67.5C52.5 68.2083 52.2604 68.8021 51.7812 69.2813C51.3021 69.7604 50.7083 70 50 70H45ZM67.3125 73.9375C66.9792 73.9375 66.6667 73.875 66.375 73.75C66.0833 73.625 65.8125 73.4375 65.5625 73.1875L58.5 66.125C58 65.625 57.75 65.0417 57.75 64.375C57.75 63.7083 58 63.125 58.5 62.625C59 62.125 59.5833 61.875 60.25 61.875C60.9167 61.875 61.5 62.125 62 62.625L67.3125 67.875L79.6875 55.5C80.1875 55 80.7812 54.7604 81.4688 54.7813C82.1562 54.8021 82.75 55.0625 83.25 55.5625C83.75 56.0625 84 56.6458 84 57.3125C84 57.9792 83.75 58.5625 83.25 59.0625L69.0625 73.1875C68.8125 73.4375 68.5417 73.625 68.25 73.75C67.9583 73.875 67.6458 73.9375 67.3125 73.9375Z" fill="white"/>
9
+ <path d="M110 5L106.575 3.425L105 0L103.425 3.425L100 5L103.425 6.575L105 10L106.575 6.575L110 5Z" fill="#44D8E8"/>
10
+ <path d="M10 51L6.575 49.425L5 46L3.425 49.425L0 51L3.425 52.575L5 56L6.575 52.575L10 51Z" fill="#44D8E8"/>
11
+ <path d="M95 43.5L93.2875 42.7125L92.5 41L91.7125 42.7125L90 43.5L91.7125 44.2875L92.5 46L93.2875 44.2875L95 43.5Z" fill="#44D8E8"/>
12
+ <path d="M42 4.5L40.2875 3.7125L39.5 2L38.7125 3.7125L37 4.5L38.7125 5.2875L39.5 7L40.2875 5.2875L42 4.5Z" fill="#44D8E8"/>
13
+ <path d="M88 83.5L86.2875 82.7125L85.5 81L84.7125 82.7125L83 83.5L84.7125 84.2875L85.5 86L86.2875 84.2875L88 83.5Z" fill="#44D8E8"/>
14
+ <path d="M120 97.5L118.287 96.7125L117.5 95L116.713 96.7125L115 97.5L116.713 98.2875L117.5 100L118.287 98.2875L120 97.5Z" fill="#44D8E8"/>
15
+ </svg>`,
16
+ };
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLWljb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFzLXVlbGwtc2RrL3NyYy9saWIvaWNvbnMvdGFzLWljb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRztJQUN2QixJQUFJLEVBQUU7Ozs7Ozs7OztPQVNEO0NBQ0csQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU1ZHIGljb25zIHVzZWQgaW50ZXJuYWxseSBieSBUQVMgU0RLIGNvbXBvbmVudHMuXG4gKiBJY29ucyBhcmUgc3RvcmVkIGFzIHN0cmluZ3MgdG8gYXZvaWQgYXNzZXQgYnVuZGxpbmcgY29tcGxleGl0eS5cbiAqL1xuXG5leHBvcnQgY29uc3QgVEFTX0lDT05TID0ge1xuICBob21lOiBgPHN2ZyB3aWR0aD1cIjEyMFwiIGhlaWdodD1cIjEwMFwiIHZpZXdCb3g9XCIwIDAgMTIwIDEwMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuPHJlY3QgeD1cIjEwXCIgd2lkdGg9XCIxMDBcIiBoZWlnaHQ9XCIxMDBcIiByeD1cIjUwXCIgZmlsbD1cIiM0NEQ4RThcIiBmaWxsLW9wYWNpdHk9XCIwLjJcIi8+XG48cGF0aCBkPVwiTTQ1IDcwQzQzLjYyNSA3MCA0Mi40NDc5IDY5LjUxMDQgNDEuNDY4OCA2OC41MzEzQzQwLjQ4OTYgNjcuNTUyMSA0MCA2Ni4zNzUgNDAgNjVWNDYuNTYyNUwzNy41IDQ4LjVDMzYuOTU4MyA0OC45MTY3IDM2LjM0MzggNDkuMDgzMyAzNS42NTYyIDQ5QzM0Ljk2ODggNDguOTE2NyAzNC40MTY3IDQ4LjU4MzMgMzQgNDhDMzMuNTgzMyA0Ny40NTgzIDMzLjQyNzEgNDYuODU0MiAzMy41MzEyIDQ2LjE4NzVDMzMuNjM1NCA0NS41MjA4IDMzLjk1ODMgNDQuOTc5MiAzNC41IDQ0LjU2MjVMNTYuOTM3NSAyNy4zMTI1QzU3LjM5NTggMjYuOTc5MiA1Ny44ODU0IDI2LjcyOTIgNTguNDA2MiAyNi41NjI1QzU4LjkyNzEgMjYuMzk1OCA1OS40NTgzIDI2LjMxMjUgNjAgMjYuMzEyNUM2MC41NDE3IDI2LjMxMjUgNjEuMDcyOSAyNi4zOTU4IDYxLjU5MzggMjYuNTYyNUM2Mi4xMTQ2IDI2LjcyOTIgNjIuNjA0MiAyNi45NzkyIDYzLjA2MjUgMjcuMzEyNUw4NS41IDQ0LjVDODYuMDQxNyA0NC45MTY3IDg2LjM2NDYgNDUuNDU4MyA4Ni40Njg4IDQ2LjEyNUM4Ni41NzI5IDQ2Ljc5MTcgODYuNDE2NyA0Ny40MTY3IDg2IDQ4Qzg1LjU4MzMgNDguNTgzMyA4NS4wNDE3IDQ4LjkwNjMgODQuMzc1IDQ4Ljk2ODhDODMuNzA4MyA0OS4wMzEzIDgzLjA4MzMgNDguODU0MiA4Mi41IDQ4LjQzNzVMNjAgMzEuMjVMNDUgNDIuNzVWNjVINTAuMDYyNUM1MC43NzA4IDY1IDUxLjM1NDIgNjUuMjM5NiA1MS44MTI1IDY1LjcxODhDNTIuMjcwOCA2Ni4xOTc5IDUyLjUgNjYuNzkxNyA1Mi41IDY3LjVDNTIuNSA2OC4yMDgzIDUyLjI2MDQgNjguODAyMSA1MS43ODEyIDY5LjI4MTNDNTEuMzAyMSA2OS43NjA0IDUwLjcwODMgNzAgNTAgNzBINDVaTTY3LjMxMjUgNzMuOTM3NUM2Ni45NzkyIDczLjkzNzUgNjYuNjY2NyA3My44NzUgNjYuMzc1IDczLjc1QzY2LjA4MzMgNzMuNjI1IDY1LjgxMjUgNzMuNDM3NSA2NS41NjI1IDczLjE4NzVMNTguNSA2Ni4xMjVDNTggNjUuNjI1IDU3Ljc1IDY1LjA0MTcgNTcuNzUgNjQuMzc1QzU3Ljc1IDYzLjcwODMgNTggNjMuMTI1IDU4LjUgNjIuNjI1QzU5IDYyLjEyNSA1OS41ODMzIDYxLjg3NSA2MC4yNSA2MS44NzVDNjAuOTE2NyA2MS44NzUgNjEuNSA2Mi4xMjUgNjIgNjIuNjI1TDY3LjMxMjUgNjcuODc1TDc5LjY4NzUgNTUuNUM4MC4xODc1IDU1IDgwLjc4MTIgNTQuNzYwNCA4MS40Njg4IDU0Ljc4MTNDODIuMTU2MiA1NC44MDIxIDgyLjc1IDU1LjA2MjUgODMuMjUgNTUuNTYyNUM4My43NSA1Ni4wNjI1IDg0IDU2LjY0NTggODQgNTcuMzEyNUM4NCA1Ny45NzkyIDgzLjc1IDU4LjU2MjUgODMuMjUgNTkuMDYyNUw2OS4wNjI1IDczLjE4NzVDNjguODEyNSA3My40Mzc1IDY4LjU0MTcgNzMuNjI1IDY4LjI1IDczLjc1QzY3Ljk1ODMgNzMuODc1IDY3LjY0NTggNzMuOTM3NSA2Ny4zMTI1IDczLjkzNzVaXCIgZmlsbD1cIndoaXRlXCIvPlxuPHBhdGggZD1cIk0xMTAgNUwxMDYuNTc1IDMuNDI1TDEwNSAwTDEwMy40MjUgMy40MjVMMTAwIDVMMTAzLjQyNSA2LjU3NUwxMDUgMTBMMTA2LjU3NSA2LjU3NUwxMTAgNVpcIiBmaWxsPVwiIzQ0RDhFOFwiLz5cbjxwYXRoIGQ9XCJNMTAgNTFMNi41NzUgNDkuNDI1TDUgNDZMMy40MjUgNDkuNDI1TDAgNTFMMy40MjUgNTIuNTc1TDUgNTZMNi41NzUgNTIuNTc1TDEwIDUxWlwiIGZpbGw9XCIjNDREOEU4XCIvPlxuPHBhdGggZD1cIk05NSA0My41TDkzLjI4NzUgNDIuNzEyNUw5Mi41IDQxTDkxLjcxMjUgNDIuNzEyNUw5MCA0My41TDkxLjcxMjUgNDQuMjg3NUw5Mi41IDQ2TDkzLjI4NzUgNDQuMjg3NUw5NSA0My41WlwiIGZpbGw9XCIjNDREOEU4XCIvPlxuPHBhdGggZD1cIk00MiA0LjVMNDAuMjg3NSAzLjcxMjVMMzkuNSAyTDM4LjcxMjUgMy43MTI1TDM3IDQuNUwzOC43MTI1IDUuMjg3NUwzOS41IDdMNDAuMjg3NSA1LjI4NzVMNDIgNC41WlwiIGZpbGw9XCIjNDREOEU4XCIvPlxuPHBhdGggZD1cIk04OCA4My41TDg2LjI4NzUgODIuNzEyNUw4NS41IDgxTDg0LjcxMjUgODIuNzEyNUw4MyA4My41TDg0LjcxMjUgODQuMjg3NUw4NS41IDg2TDg2LjI4NzUgODQuMjg3NUw4OCA4My41WlwiIGZpbGw9XCIjNDREOEU4XCIvPlxuPHBhdGggZD1cIk0xMjAgOTcuNUwxMTguMjg3IDk2LjcxMjVMMTE3LjUgOTVMMTE2LjcxMyA5Ni43MTI1TDExNSA5Ny41TDExNi43MTMgOTguMjg3NUwxMTcuNSAxMDBMMTE4LjI4NyA5OC4yODc1TDEyMCA5Ny41WlwiIGZpbGw9XCIjNDREOEU4XCIvPlxuPC9zdmc+YCxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFRhc0ljb25OYW1lID0ga2V5b2YgdHlwZW9mIFRBU19JQ09OUztcbiJdfQ==