valtech-components 4.0.395 → 4.0.397

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.
@@ -2,6 +2,7 @@ import { Injectable, inject } from '@angular/core';
2
2
  import { Auth } from '@angular/fire/auth';
3
3
  import { collection, collectionData, Firestore, doc, docData, limit, orderBy, query, runTransaction, setDoc, } from '@angular/fire/firestore';
4
4
  import { map, of, tap } from 'rxjs';
5
+ import { AuthService } from '../../../services/auth/auth.service';
5
6
  import { FirebaseService } from '../../../services/firebase/firebase.service';
6
7
  import { applyChessimalsMove, createChessimalsGame, resignChessimalsGame } from './chessimals-engine';
7
8
  import { MiniGamePlayerProfileService } from './mini-game-player-profile.service';
@@ -10,13 +11,14 @@ const COLLECTION_PATH = 'miniGames/chessimals/games';
10
11
  const GAME_TTL_MS = 24 * 60 * 60 * 1000;
11
12
  export class ChessimalsOnlineService {
12
13
  constructor() {
13
- this.auth = inject(Auth);
14
+ this.firebaseAuth = inject(Auth);
15
+ this.auth = inject(AuthService);
14
16
  this.firestore = inject(Firestore);
15
17
  this.firebase = inject(FirebaseService);
16
18
  this.profiles = inject(MiniGamePlayerProfileService);
17
19
  }
18
20
  get currentUid() {
19
- return this.auth.currentUser?.uid;
21
+ return this.firebaseAuth.currentUser?.uid;
20
22
  }
21
23
  normalizeGameId(value) {
22
24
  const raw = (value ?? '').trim().toUpperCase();
@@ -86,11 +88,11 @@ export class ChessimalsOnlineService {
86
88
  this.assertNotExpired(state);
87
89
  if (this.isParticipant(state, uid))
88
90
  return;
89
- if (state.status === 'waiting' && state.online?.lobby?.uid === uid)
91
+ if (this.isHostWaiting(state, uid))
90
92
  return;
91
93
  if (state.status !== 'waiting' || !state.online?.lobby)
92
94
  return;
93
- if (state.online.pendingGuest?.uid === uid)
95
+ if (this.isPendingGuest(state, uid))
94
96
  return;
95
97
  const now = new Date();
96
98
  const guest = this.createParticipant(uid, now.toISOString());
@@ -115,7 +117,7 @@ export class ChessimalsOnlineService {
115
117
  throw new Error('CHESSIMALS_GAME_NOT_FOUND');
116
118
  const state = snapshot.data();
117
119
  this.assertNotExpired(state);
118
- if (state.status !== 'waiting' || state.online?.lobby?.uid !== uid || !state.online.pendingGuest)
120
+ if (!this.isHostWaiting(state, uid) || !state.online.pendingGuest)
119
121
  return;
120
122
  const now = new Date();
121
123
  const [hostSide, guestSide] = Math.random() > 0.5 ? ['white', 'black'] : ['black', 'white'];
@@ -151,7 +153,7 @@ export class ChessimalsOnlineService {
151
153
  throw new Error('CHESSIMALS_GAME_NOT_FOUND');
152
154
  const state = snapshot.data();
153
155
  this.assertNotExpired(state);
154
- if (state.status !== 'waiting' || state.online?.lobby?.uid !== uid || !state.online.pendingGuest)
156
+ if (!this.isHostWaiting(state, uid) || !state.online.pendingGuest)
155
157
  return;
156
158
  const now = new Date();
157
159
  const online = { ...state.online, updatedAt: now.toISOString() };
@@ -253,8 +255,12 @@ export class ChessimalsOnlineService {
253
255
  const participants = state.online?.participants;
254
256
  if (!participants?.white || !participants.black || !state.online)
255
257
  return;
256
- const requests = Array.from(new Set([...(state.online.rematchRequests ?? []), uid]));
257
- const bothReady = [participants.white.uid, participants.black.uid].every((item) => requests.includes(item));
258
+ const currentParticipant = this.participantForSide(state, this.participantSide(state, uid));
259
+ const requestKey = this.participantKey(currentParticipant);
260
+ if (!requestKey)
261
+ return;
262
+ const requests = Array.from(new Set([...(state.online.rematchRequests ?? []), requestKey]));
263
+ const bothReady = [participants.white, participants.black].every((item) => this.participantRequestKeys(item).some((key) => requests.includes(key)));
258
264
  const now = new Date();
259
265
  if (!bothReady) {
260
266
  transaction.set(ref, {
@@ -285,20 +291,62 @@ export class ChessimalsOnlineService {
285
291
  });
286
292
  }
287
293
  participantSide(state, uid = this.currentUid) {
288
- if (!uid)
289
- return undefined;
290
- const participants = state.online?.participants;
291
- if (participants?.white?.uid === uid)
292
- return 'white';
293
- if (participants?.black?.uid === uid)
294
- return 'black';
294
+ const entries = this.participantEntries(state);
295
+ const currentSeatKey = this.currentSeatKey(uid);
296
+ if (currentSeatKey) {
297
+ const seatMatch = entries.find(([, participant]) => this.participantKey(participant) === currentSeatKey);
298
+ if (seatMatch)
299
+ return seatMatch[0];
300
+ }
301
+ if (uid) {
302
+ const currentProfile = this.profiles.activeProfile();
303
+ if (currentProfile) {
304
+ const legacyProfileMatch = entries.find(([, participant]) => participant.uid === uid
305
+ && participant.avatar === currentProfile.avatar
306
+ && this.normalizeColor(participant.color) === this.normalizeColor(currentProfile.color));
307
+ if (legacyProfileMatch)
308
+ return legacyProfileMatch[0];
309
+ }
310
+ const uidMatches = entries.filter(([, participant]) => participant.uid === uid);
311
+ if (uidMatches.length === 1)
312
+ return uidMatches[0][0];
313
+ }
314
+ const accountUserId = this.auth.user()?.userId;
315
+ if (accountUserId) {
316
+ const accountMatches = entries.filter(([, participant]) => participant.accountUserId === accountUserId);
317
+ if (accountMatches.length === 1)
318
+ return accountMatches[0][0];
319
+ }
295
320
  return undefined;
296
321
  }
297
322
  isParticipant(state, uid = this.currentUid) {
298
323
  return !!this.participantSide(state, uid);
299
324
  }
300
325
  isHostWaiting(state, uid = this.currentUid) {
301
- return !!uid && state.status === 'waiting' && state.online?.lobby?.uid === uid;
326
+ return state.status === 'waiting' && this.matchesCurrentParticipant(state.online?.lobby, uid);
327
+ }
328
+ isPendingGuest(state, uid = this.currentUid) {
329
+ return state.status === 'waiting' && this.matchesCurrentParticipant(state.online?.pendingGuest, uid);
330
+ }
331
+ hasCurrentRematchRequest(state, uid = this.currentUid) {
332
+ const side = this.participantSide(state, uid);
333
+ const participant = this.participantForSide(state, side);
334
+ return this.participantRequestKeys(participant).some((key) => (state.online?.rematchRequests ?? []).includes(key));
335
+ }
336
+ hasOpponentRematchRequest(state, uid = this.currentUid) {
337
+ const side = this.participantSide(state, uid);
338
+ if (!side)
339
+ return false;
340
+ const opponent = this.participantForSide(state, side === 'white' ? 'black' : 'white');
341
+ return this.participantRequestKeys(opponent).some((key) => (state.online?.rematchRequests ?? []).includes(key));
342
+ }
343
+ participantKey(participant) {
344
+ return participant?.seatKey
345
+ || this.buildSeatKey(participant?.uid, participant?.profileId)
346
+ || participant?.profileId
347
+ || participant?.accountUserId
348
+ || participant?.uid
349
+ || '';
302
350
  }
303
351
  shareUrl(gameId, baseRoute = '/mini-games') {
304
352
  const origin = typeof window === 'undefined' ? '' : window.location.origin;
@@ -328,7 +376,7 @@ export class ChessimalsOnlineService {
328
376
  }
329
377
  async ensureUser() {
330
378
  await this.firebase.whenFirebaseAuthReady();
331
- const user = this.auth.currentUser;
379
+ const user = this.firebaseAuth.currentUser;
332
380
  if (user?.uid) {
333
381
  await user.getIdToken();
334
382
  return user.uid;
@@ -344,16 +392,88 @@ export class ChessimalsOnlineService {
344
392
  }
345
393
  }
346
394
  createParticipant(uid, joinedAt) {
395
+ const user = this.auth.user();
396
+ const firebaseUser = this.firebaseAuth.currentUser;
347
397
  const profile = this.profiles.activeProfile();
398
+ const handle = this.normalizeHandle(user?.handle);
399
+ const avatarUrl = user?.avatarUrl?.trim() || firebaseUser?.photoURL?.trim() || undefined;
400
+ const email = user?.email?.trim() || firebaseUser?.email?.trim() || undefined;
401
+ const profileId = profile?.id ?? user?.userId ?? uid;
348
402
  return {
349
403
  uid,
350
- profileId: profile?.id ?? 'local-player',
351
- name: this.profiles.displayName(profile, 'Jugador'),
404
+ accountUserId: user?.userId,
405
+ profileId,
406
+ seatKey: this.buildSeatKey(uid, profileId),
407
+ name: user?.name?.trim()
408
+ || firebaseUser?.displayName?.trim()
409
+ || email
410
+ || this.profiles.displayName(profile, 'Jugador'),
411
+ handle,
412
+ email,
352
413
  avatar: profile?.avatar ?? '♟️',
414
+ avatarUrl,
353
415
  color: profile?.color ?? '#ff00b2',
354
416
  joinedAt,
355
417
  };
356
418
  }
419
+ normalizeHandle(handle) {
420
+ const trimmed = handle?.trim();
421
+ if (!trimmed)
422
+ return undefined;
423
+ return trimmed.startsWith('@') ? trimmed : `@${trimmed}`;
424
+ }
425
+ buildSeatKey(uid, profileId) {
426
+ const normalizedUid = uid?.trim();
427
+ const normalizedProfileId = profileId?.trim();
428
+ if (!normalizedUid || !normalizedProfileId)
429
+ return undefined;
430
+ return `${normalizedUid}:${normalizedProfileId}`;
431
+ }
432
+ currentSeatKey(uid = this.currentUid) {
433
+ return this.buildSeatKey(uid, this.profiles.activeProfile()?.id);
434
+ }
435
+ participantForSide(state, side) {
436
+ if (!side)
437
+ return undefined;
438
+ return state.online?.participants?.[side];
439
+ }
440
+ participantEntries(state) {
441
+ const participants = state.online?.participants;
442
+ return ['white', 'black']
443
+ .map((side) => [side, participants?.[side]])
444
+ .filter((entry) => !!entry[1]);
445
+ }
446
+ participantRequestKeys(participant) {
447
+ if (!participant)
448
+ return [];
449
+ const keys = [
450
+ this.participantKey(participant),
451
+ participant.uid,
452
+ participant.accountUserId,
453
+ participant.profileId,
454
+ ];
455
+ return Array.from(new Set(keys.filter((key) => !!key)));
456
+ }
457
+ matchesCurrentParticipant(participant, uid = this.currentUid) {
458
+ if (!participant)
459
+ return false;
460
+ const seatKey = this.currentSeatKey(uid);
461
+ if (seatKey && this.participantKey(participant) === seatKey)
462
+ return true;
463
+ const profile = this.profiles.activeProfile();
464
+ if (uid && profile) {
465
+ return participant.uid === uid
466
+ && participant.avatar === profile.avatar
467
+ && this.normalizeColor(participant.color) === this.normalizeColor(profile.color);
468
+ }
469
+ if (uid && participant.uid === uid)
470
+ return true;
471
+ const accountUserId = this.auth.user()?.userId;
472
+ return !!accountUserId && participant.accountUserId === accountUserId;
473
+ }
474
+ normalizeColor(color) {
475
+ return (color ?? '').trim().toLowerCase();
476
+ }
357
477
  withUpdatedAt(state, date = new Date()) {
358
478
  if (!state.online)
359
479
  return state;
@@ -372,10 +492,13 @@ export class ChessimalsOnlineService {
372
492
  };
373
493
  }
374
494
  createMoveLogEntry(args) {
495
+ const participant = this.participantForSide(args.state, args.side);
375
496
  return this.withoutUndefined({
376
497
  id: args.id,
377
498
  at: new Date().toISOString(),
378
499
  uid: args.uid,
500
+ profileId: participant?.profileId,
501
+ seatKey: this.participantKey(participant) || undefined,
379
502
  side: args.side,
380
503
  status: args.status,
381
504
  code: args.code,
@@ -400,8 +523,8 @@ export class ChessimalsOnlineService {
400
523
  if (!state.online)
401
524
  return undefined;
402
525
  const side = this.participantSide(state, uid);
403
- const isLobbyHost = state.online.lobby?.uid === uid;
404
- const isPendingGuest = state.online.pendingGuest?.uid === uid;
526
+ const isLobbyHost = this.isHostWaiting(state, uid);
527
+ const isPendingGuest = this.isPendingGuest(state, uid);
405
528
  if (!side && !isLobbyHost && !isPendingGuest)
406
529
  return undefined;
407
530
  const opponent = side
@@ -472,4 +595,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
472
595
  type: Injectable,
473
596
  args: [{ providedIn: 'root' }]
474
597
  }] });
475
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlc3NpbWFscy1vbmxpbmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvbWluaS1nYW1lcy9jaGVzc2ltYWxzLW9ubGluZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEVBQ0wsVUFBVSxFQUNWLGNBQWMsRUFDZCxTQUFTLEVBQ1QsR0FBRyxFQUNILE9BQU8sRUFDUCxLQUFLLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxjQUFjLEVBQ2QsTUFBTSxHQUNQLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFjLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7QUFXbEYsTUFBTSxlQUFlLEdBQUcsNEJBQTRCLENBQUM7QUFDckQsTUFBTSxXQUFXLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBR3hDLE1BQU0sT0FBTyx1QkFBdUI7SUFEcEM7UUFFbUIsU0FBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixjQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlCLGFBQVEsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbkMsYUFBUSxHQUFH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QUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEF1dGggfSBmcm9tICdAYW5ndWxhci9maXJlL2F1dGgnO1xuaW1wb3J0IHtcbiAgY29sbGVjdGlvbixcbiAgY29sbGVjdGlvbkRhdGEsXG4gIEZpcmVzdG9yZSxcbiAgZG9jLFxuICBkb2NEYXRhLFxuICBsaW1pdCxcbiAgb3JkZXJCeSxcbiAgcXVlcnksXG4gIHJ1blRyYW5zYWN0aW9uLFxuICBzZXREb2MsXG59IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvZmlyZXN0b3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG1hcCwgb2YsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBGaXJlYmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9maXJlYmFzZS9maXJlYmFzZS5zZXJ2aWNlJztcbmltcG9ydCB7IGFwcGx5Q2hlc3NpbWFsc01vdmUsIGNyZWF0ZUNoZXNzaW1hbHNHYW1lLCByZXNpZ25DaGVzc2ltYWxzR2FtZSB9IGZyb20gJy4vY2hlc3NpbWFscy1lbmdpbmUnO1xuaW1wb3J0IHsgTWluaUdhbWVQbGF5ZXJQcm9maWxlU2VydmljZSB9IGZyb20gJy4vbWluaS1nYW1lLXBsYXllci1wcm9maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ2hlc3NpbWFsc0JvYXJkU2l6ZSxcbiAgQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgQ2hlc3NpbWFsc0hpc3RvcnlFbnRyeSxcbiAgQ2hlc3NpbWFsc01vdmUsXG4gIENoZXNzaW1hbHNNb3ZlTG9nRW50cnksXG4gIENoZXNzaW1hbHNPbmxpbmVQYXJ0aWNpcGFudCxcbiAgQ2hlc3NpbWFsc1BsYXllckNvbG9yLFxufSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgQ09MTEVDVElPTl9QQVRIID0gJ21pbmlHYW1lcy9jaGVzc2ltYWxzL2dhbWVzJztcbmNvbnN0IEdBTUVfVFRMX01TID0gMjQgKiA2MCAqIDYwICogMTAwMDtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBDaGVzc2ltYWxzT25saW5lU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0aCA9IGluamVjdChBdXRoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmaXJlc3RvcmUgPSBpbmplY3QoRmlyZXN0b3JlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmaXJlYmFzZSA9IGluamVjdChGaXJlYmFzZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHByb2ZpbGVzID0gaW5qZWN0KE1pbmlHYW1lUGxheWVyUHJvZmlsZVNlcnZpY2UpO1xuXG4gIGdldCBjdXJyZW50VWlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aC5jdXJyZW50VXNlcj8udWlkO1xuICB9XG5cbiAgbm9ybWFsaXplR2FtZUlkKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJhdyA9ICh2YWx1ZSA/PyAnJykudHJpbSgpLnRvVXBwZXJDYXNlKCk7XG4gICAgY29uc3QgZGVjb2RlZCA9IHRoaXMuZGVjb2RlSW5wdXQocmF3KTtcbiAgICBjb25zdCBwYXRoU2VnbWVudCA9IGRlY29kZWQuc3BsaXQoL1s/I10vKVswXS5zcGxpdCgnLycpLmZpbHRlcihCb29sZWFuKS5wb3AoKSA/PyBkZWNvZGVkO1xuICAgIGNvbnN0IG1hdGNoID0gcGF0aFNlZ21lbnQubWF0Y2goL1tBLVowLTldezR9LT9bQS1aMC05XXs0fS8pPy5bMF1cbiAgICAgID8/IGRlY29kZWQubWF0Y2goL1tBLVowLTldezR9LT9bQS1aMC05XXs0fS8pPy5bMF1cbiAgICAgID8/IGRlY29kZWQ7XG4gICAgY29uc3QgY29tcGFjdCA9IG1hdGNoLnJlcGxhY2UoL1teQS1aMC05XS9nLCAnJykuc2xpY2UoMCwgOCk7XG4gICAgaWYgKGNvbXBhY3QubGVuZ3RoIDw9IDQpIHJldHVybiBjb21wYWN0O1xuICAgIHJldHVybiBgJHtjb21wYWN0LnNsaWNlKDAsIDQpfS0ke2NvbXBhY3Quc2xpY2UoNCwgOCl9YDtcbiAgfVxuXG4gIGlzVmFsaWRHYW1lSWQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXltBLVowLTldezR9LVtBLVowLTldezR9JC8udGVzdCh0aGlzLm5vcm1hbGl6ZUdhbWVJZCh2YWx1ZSkpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlR2FtZShib2FyZFNpemU6IENoZXNzaW1hbHNCb2FyZFNpemUpOiBQcm9taXNlPENoZXNzaW1hbHNHYW1lU3RhdGU+IHtcbiAgICBjb25zdCB1aWQgPSBhd2FpdCB0aGlzLmVuc3VyZVVzZXIoKTtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IGV4cGlyZXNBdCA9IG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgKyBHQU1FX1RUTF9NUyk7XG4gICAgY29uc3QgZ2FtZUlkID0gdGhpcy5jcmVhdGVHYW1lSWQoKTtcbiAgICBjb25zdCBob3N0ID0gdGhpcy5jcmVhdGVQYXJ0aWNpcGFudCh1aWQsIG5vdy50b0lTT1N0cmluZygpKTtcbiAgICBjb25zdCBzdGF0ZSA9IGNyZWF0ZUNoZXNzaW1hbHNHYW1lKGJvYXJkU2l6ZSwge1xuICAgICAgaWQ6IGdhbWVJZCxcbiAgICAgIG1vZGU6ICdvbmxpbmUnLFxuICAgICAgc3RhdHVzOiAnd2FpdGluZycsXG4gICAgICBvbmxpbmU6IHtcbiAgICAgICAgZ2FtZUlkLFxuICAgICAgICBob3N0VWlkOiB1aWQsXG4gICAgICAgIGNyZWF0ZWRBdDogbm93LnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHVwZGF0ZWRBdDogbm93LnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGV4cGlyZXNBdDogZXhwaXJlc0F0LnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGV4cGlyZXNBdE1zOiBleHBpcmVzQXQuZ2V0VGltZSgpLFxuICAgICAgICByb3VuZDogMSxcbiAgICAgICAgbG9iYnk6IGhvc3QsXG4gICAgICAgIHJlbWF0Y2hSZXF1ZXN0czogW10sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgbmV4dCA9IHRoaXMud2l0aFVwZGF0ZWRBdChzdGF0ZSwgbm93KTtcbiAgICBhd2FpdCBzZXREb2ModGhpcy5nYW1lUmVmKGdhbWVJZCksIG5leHQpO1xuICAgIGF3YWl0IHRoaXMuc2F2ZUN1cnJlbnRVc2VySGlzdG9yeShuZXh0KTtcbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuXG4gIHdhdGNoR2FtZShnYW1lSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Q2hlc3NpbWFsc0dhbWVTdGF0ZSB8IG51bGw+IHtcbiAgICBjb25zdCBub3JtYWxpemVkR2FtZUlkID0gdGhpcy5ub3JtYWxpemVHYW1lSWQoZ2FtZUlkKTtcbiAgICByZXR1cm4gZG9jRGF0YSh0aGlzLmdhbWVSZWYobm9ybWFsaXplZEdhbWVJZCkpLnBpcGUoXG4gICAgICBtYXAoKHZhbHVlKSA9PiAodmFsdWUgPyAodmFsdWUgYXMgQ2hlc3NpbWFsc0dhbWVTdGF0ZSkgOiBudWxsKSksXG4gICAgICB0YXAoKHN0YXRlKSA9PiB7XG4gICAgICAgIGlmIChzdGF0ZSkgdm9pZCB0aGlzLnNhdmVDdXJyZW50VXNlckhpc3Rvcnkoc3RhdGUpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHdhdGNoSGlzdG9yeShsaW1pdENvdW50ID0gOCk6IE9ic2VydmFibGU8Q2hlc3NpbWFsc0hpc3RvcnlFbnRyeVtdPiB7XG4gICAgY29uc3QgdWlkID0gdGhpcy5jdXJyZW50VWlkO1xuICAgIGlmICghdWlkKSByZXR1cm4gb2YoW10pO1xuICAgIGNvbnN0IGhpc3RvcnlRdWVyeSA9IHF1ZXJ5KFxuICAgICAgY29sbGVjdGlvbih0aGlzLmZpcmVzdG9yZSwgdGhpcy5oaXN0b3J5UGF0aCh1aWQpKSxcbiAgICAgIG9yZGVyQnkoJ3VwZGF0ZWRBdCcsICdkZXNjJyksXG4gICAgICBsaW1pdChsaW1pdENvdW50KSxcbiAgICApO1xuICAgIHJldHVybiBjb2xsZWN0aW9uRGF0YShoaXN0b3J5UXVlcnkpLnBpcGUobWFwKChpdGVtcykgPT4gaXRlbXMgYXMgQ2hlc3NpbWFsc0hpc3RvcnlFbnRyeVtdKSk7XG4gIH1cblxuICBhc3luYyBqb2luR2FtZShnYW1lSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRHYW1lSWQgPSB0aGlzLm5vcm1hbGl6ZUdhbWVJZChnYW1lSWQpO1xuICAgIGNvbnN0IHVpZCA9IGF3YWl0IHRoaXMuZW5zdXJlVXNlcigpO1xuICAgIGF3YWl0IHJ1blRyYW5zYWN0aW9uKHRoaXMuZmlyZXN0b3JlLCBhc3luYyAodHJhbnNhY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMuZ2FtZVJlZihub3JtYWxpemVkR2FtZUlkKTtcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgdHJhbnNhY3Rpb24uZ2V0KHJlZik7XG4gICAgICBpZiAoIXNuYXBzaG90LmV4aXN0cygpKSB0aHJvdyBuZXcgRXJyb3IoJ0NIRVNTSU1BTFNfR0FNRV9OT1RfRk9VTkQnKTtcblxuICAgICAgY29uc3Qgc3RhdGUgPSBzbmFwc2hvdC5kYXRhKCkgYXMgQ2hlc3NpbWFsc0dhbWVTdGF0ZTtcbiAgICAgIHRoaXMuYXNzZXJ0Tm90RXhwaXJlZChzdGF0ZSk7XG5cbiAgICAgIGlmICh0aGlzLmlzUGFydGljaXBhbnQoc3RhdGUsIHVpZCkpIHJldHVybjtcbiAgICAgIGlmIChzdGF0ZS5zdGF0dXMgPT09ICd3YWl0aW5nJyAmJiBzdGF0ZS5vbmxpbmU/LmxvYmJ5Py51aWQgPT09IHVpZCkgcmV0dXJuO1xuICAgICAgaWYgKHN0YXRlLnN0YXR1cyAhPT0gJ3dhaXRpbmcnIHx8ICFzdGF0ZS5vbmxpbmU/LmxvYmJ5KSByZXR1cm47XG5cbiAgICAgIGlmIChzdGF0ZS5vbmxpbmUucGVuZGluZ0d1ZXN0Py51aWQgPT09IHVpZCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgY29uc3QgZ3Vlc3QgPSB0aGlzLmNyZWF0ZVBhcnRpY2lwYW50KHVpZCwgbm93LnRvSVNPU3RyaW5nKCkpO1xuICAgICAgY29uc3QgbmV4dDogQ2hlc3NpbWFsc0dhbWVTdGF0ZSA9IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIG9ubGluZToge1xuICAgICAgICAgIC4uLnN0YXRlLm9ubGluZSxcbiAgICAgICAgICB1cGRhdGVkQXQ6IG5vdy50b0lTT1N0cmluZygpLFxuICAgICAgICAgIHBlbmRpbmdHdWVzdDogZ3Vlc3QsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICB0cmFuc2FjdGlvbi5zZXQocmVmLCBuZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGFjY2VwdEd1ZXN0KGdhbWVJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEdhbWVJZCA9IHRoaXMubm9ybWFsaXplR2FtZUlkKGdhbWVJZCk7XG4gICAgY29uc3QgdWlkID0gYXdhaXQgdGhpcy5lbnN1cmVVc2VyKCk7XG4gICAgYXdhaXQgcnVuVHJhbnNhY3Rpb24odGhpcy5maXJlc3RvcmUsIGFzeW5jICh0cmFuc2FjdGlvbikgPT4ge1xuICAgICAgY29uc3QgcmVmID0gdGhpcy5nYW1lUmVmKG5vcm1hbGl6ZWRHYW1lSWQpO1xuICAgICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCB0cmFuc2FjdGlvbi5nZXQocmVmKTtcbiAgICAgIGlmICghc25hcHNob3QuZXhpc3RzKCkpIHRocm93IG5ldyBFcnJvcignQ0hFU1NJTUFMU19HQU1FX05PVF9GT1VORCcpO1xuXG4gICAgICBjb25zdCBzdGF0ZSA9IHNuYXBzaG90LmRhdGEoKSBhcyBDaGVzc2ltYWxzR2FtZVN0YXRlO1xuICAgICAgdGhpcy5hc3NlcnROb3RFeHBpcmVkKHN0YXRlKTtcbiAgICAgIGlmIChzdGF0ZS5zdGF0dXMgIT09ICd3YWl0aW5nJyB8fCBzdGF0ZS5vbmxpbmU/LmxvYmJ5Py51aWQgIT09IHVpZCB8fCAhc3RhdGUub25saW5lLnBlbmRpbmdHdWVzdCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgY29uc3QgW2hvc3RTaWRlLCBndWVzdFNpZGVdID0gTWF0aC5yYW5kb20oKSA+IDAuNSA/IFsnd2hpdGUnLCAnYmxhY2snXSA6IFsnYmxhY2snLCAnd2hpdGUnXTtcbiAgICAgIGNvbnN0IGxvYmJ5ID0gc3RhdGUub25saW5lLmxvYmJ5O1xuICAgICAgY29uc3QgZ3Vlc3QgPSBzdGF0ZS5vbmxpbmUucGVuZGluZ0d1ZXN0O1xuICAgICAgY29uc3Qgb25saW5lOiBOb25OdWxsYWJsZTxDaGVzc2ltYWxzR2FtZVN0YXRlWydvbmxpbmUnXT4gPSB7IC4uLnN0YXRlLm9ubGluZSB9O1xuICAgICAgZGVsZXRlIG9ubGluZS5sb2JieTtcbiAgICAgIGRlbGV0ZSBvbmxpbmUucGVuZGluZ0d1ZXN0O1xuXG4gICAgICBjb25zdCBuZXh0OiBDaGVzc2ltYWxzR2FtZVN0YXRlID0ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhdHVzOiAnaW5fcHJvZ3Jlc3MnLFxuICAgICAgICBjdXJyZW50VHVybjogJ3doaXRlJyxcbiAgICAgICAgb25saW5lOiB7XG4gICAgICAgICAgLi4ub25saW5lLFxuICAgICAgICAgIHVwZGF0ZWRBdDogbm93LnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgcGFydGljaXBhbnRzOiB7XG4gICAgICAgICAgICBbaG9zdFNpZGVdOiB7IC4uLmxvYmJ5LCBzaWRlOiBob3N0U2lkZSBhcyBDaGVzc2ltYWxzUGxheWVyQ29sb3IgfSxcbiAgICAgICAgICAgIFtndWVzdFNpZGVdOiB7IC4uLmd1ZXN0LCBzaWRlOiBndWVzdFNpZGUgYXMgQ2hlc3NpbWFsc1BsYXllckNvbG9yIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZW1hdGNoUmVxdWVzdHM6IFtdLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgdHJhbnNhY3Rpb24uc2V0KHJlZiwgbmV4dCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyByZWplY3RHdWVzdChnYW1lSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRHYW1lSWQgPSB0aGlzLm5vcm1hbGl6ZUdhbWVJZChnYW1lSWQpO1xuICAgIGNvbnN0IHVpZCA9IGF3YWl0IHRoaXMuZW5zdXJlVXNlcigpO1xuICAgIGF3YWl0IHJ1blRyYW5zYWN0aW9uKHRoaXMuZmlyZXN0b3JlLCBhc3luYyAodHJhbnNhY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMuZ2FtZVJlZihub3JtYWxpemVkR2FtZUlkKTtcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgdHJhbnNhY3Rpb24uZ2V0KHJlZik7XG4gICAgICBpZiAoIXNuYXBzaG90LmV4aXN0cygpKSB0aHJvdyBuZXcgRXJyb3IoJ0NIRVNTSU1BTFNfR0FNRV9OT1RfRk9VTkQnKTtcblxuICAgICAgY29uc3Qgc3RhdGUgPSBzbmFwc2hvdC5kYXRhKCkgYXMgQ2hlc3NpbWFsc0dhbWVTdGF0ZTtcbiAgICAgIHRoaXMuYXNzZXJ0Tm90RXhwaXJlZChzdGF0ZSk7XG4gICAgICBpZiAoc3RhdGUuc3RhdHVzICE9PSAnd2FpdGluZycgfHwgc3RhdGUub25saW5lPy5sb2JieT8udWlkICE9PSB1aWQgfHwgIXN0YXRlLm9ubGluZS5wZW5kaW5nR3Vlc3QpIHJldHVybjtcblxuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IG9ubGluZTogTm9uTnVsbGFibGU8Q2hlc3NpbWFsc0dhbWVTdGF0ZVsnb25saW5lJ10+ID0geyAuLi5zdGF0ZS5vbmxpbmUsIHVwZGF0ZWRBdDogbm93LnRvSVNPU3RyaW5nKCkgfTtcbiAgICAgIGRlbGV0ZSBvbmxpbmUucGVuZGluZ0d1ZXN0O1xuICAgICAgdHJhbnNhY3Rpb24uc2V0KHJlZiwgeyAuLi5zdGF0ZSwgb25saW5lIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbW92ZShnYW1lSWQ6IHN0cmluZywgbW92ZTogQ2hlc3NpbWFsc01vdmUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBub3JtYWxpemVkR2FtZUlkID0gdGhpcy5ub3JtYWxpemVHYW1lSWQoZ2FtZUlkKTtcbiAgICBjb25zdCB1aWQgPSBhd2FpdCB0aGlzLmVuc3VyZVVzZXIoKTtcbiAgICBjb25zdCBvcGVyYXRpb25JZCA9IHRoaXMuY3JlYXRlT3BlcmF0aW9uSWQoKTtcbiAgICBsZXQgcmVqZWN0ZWRFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gICAgYXdhaXQgcnVuVHJhbnNhY3Rpb24odGhpcy5maXJlc3RvcmUsIGFzeW5jICh0cmFuc2FjdGlvbikgPT4ge1xuICAgICAgY29uc3QgcmVmID0gdGhpcy5nYW1lUmVmKG5vcm1hbGl6ZWRHYW1lSWQpO1xuICAgICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCB0cmFuc2FjdGlvbi5nZXQocmVmKTtcbiAgICAgIGlmICghc25hcHNob3QuZXhpc3RzKCkpIHRocm93IG5ldyBFcnJvcignQ0hFU1NJTUFMU19HQU1FX05PVF9GT1VORCcpO1xuXG4gICAgICBjb25zdCBzdGF0ZSA9IHNuYXBzaG90LmRhdGEoKSBhcyBDaGVzc2ltYWxzR2FtZVN0YXRlO1xuICAgICAgY29uc3Qgc2lkZSA9IHRoaXMucGFydGljaXBhbnRTaWRlKHN0YXRlLCB1aWQpO1xuICAgICAgY29uc3QgcmVqZWN0ID0gKGNvZGU6IHN0cmluZywgZXJyb3I/OiB1bmtub3duKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IG5leHRFcnJvciA9IG5ldyBFcnJvcihjb2RlKTtcbiAgICAgICAgcmVqZWN0ZWRFcnJvciA9IG5leHRFcnJvcjtcbiAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmNyZWF0ZU1vdmVMb2dFbnRyeSh7XG4gICAgICAgICAgaWQ6IG9wZXJhdGlvbklkLFxuICAgICAgICAgIHVpZCxcbiAgICAgICAgICBzaWRlLFxuICAgICAgICAgIHN0YXR1czogJ3JlamVjdGVkJyxcbiAgICAgICAgICBjb2RlLFxuICAgICAgICAgIG1lc3NhZ2U6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogY29kZSxcbiAgICAgICAgICBtb3ZlLFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICB9KTtcbiAgICAgICAgdHJhbnNhY3Rpb24uc2V0KHJlZiwgdGhpcy53aXRoTW92ZUxvZyhzdGF0ZSwgZW50cnkpKTtcbiAgICAgIH07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuYXNzZXJ0Tm90RXhwaXJlZChzdGF0ZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZWplY3QoJ0NIRVNTSU1BTFNfR0FNRV9FWFBJUkVEJywgZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghc2lkZSB8fCBzaWRlICE9PSBzdGF0ZS5jdXJyZW50VHVybikge1xuICAgICAgICByZWplY3QoJ0NIRVNTSU1BTFNfTk9UX1lPVVJfVFVSTicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWQgPSBhcHBseUNoZXNzaW1hbHNNb3ZlKHN0YXRlLCBtb3ZlKTtcbiAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmNyZWF0ZU1vdmVMb2dFbnRyeSh7XG4gICAgICAgICAgaWQ6IG9wZXJhdGlvbklkLFxuICAgICAgICAgIHVpZCxcbiAgICAgICAgICBzaWRlLFxuICAgICAgICAgIHN0YXR1czogJ2FjY2VwdGVkJyxcbiAgICAgICAgICBtb3ZlLFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIHVwZGF0ZWQsXG4gICAgICAgIH0pO1xuICAgICAgICB0cmFuc2FjdGlvbi5zZXQocmVmLCB0aGlzLndpdGhNb3ZlTG9nKHVwZGF0ZWQsIGVudHJ5KSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZWplY3QoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnQ0hFU1NJTUFMU19JTExFR0FMX01PVkUnLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHJlamVjdGVkRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0NoZXNzaW1hbHNdIG9ubGluZSBtb3ZlIHJlamVjdGVkJywgeyBnYW1lSWQ6IG5vcm1hbGl6ZWRHYW1lSWQsIG9wZXJhdGlvbklkLCBtb3ZlLCBjb2RlOiByZWplY3RlZEVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICB0aHJvdyByZWplY3RlZEVycm9yO1xuICAgIH1cbiAgICBjb25zb2xlLmluZm8oJ1tDaGVzc2ltYWxzXSBvbmxpbmUgbW92ZSBhY2NlcHRlZCcsIHsgZ2FtZUlkOiBub3JtYWxpemVkR2FtZUlkLCBvcGVyYXRpb25JZCwgbW92ZSB9KTtcbiAgfVxuXG4gIGFzeW5jIHJlc2lnbihnYW1lSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRHYW1lSWQgPSB0aGlzLm5vcm1hbGl6ZUdhbWVJZChnYW1lSWQpO1xuICAgIGNvbnN0IHVpZCA9IGF3YWl0IHRoaXMuZW5zdXJlVXNlcigpO1xuICAgIGF3YWl0IHJ1blRyYW5zYWN0aW9uKHRoaXMuZmlyZXN0b3JlLCBhc3luYyAodHJhbnNhY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMuZ2FtZVJlZihub3JtYWxpemVkR2FtZUlkKTtcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgdHJhbnNhY3Rpb24uZ2V0KHJlZik7XG4gICAgICBpZiAoIXNuYXBzaG90LmV4aXN0cygpKSB0aHJvdyBuZXcgRXJyb3IoJ0NIRVNTSU1BTFNfR0FNRV9OT1RfRk9VTkQnKTtcblxuICAgICAgY29uc3Qgc3RhdGUgPSBzbmFwc2hvdC5kYXRhKCkgYXMgQ2hlc3NpbWFsc0dhbWVTdGF0ZTtcbiAgICAgIHRoaXMuYXNzZXJ0Tm90RXhwaXJlZChzdGF0ZSk7XG4gICAgICBjb25zdCBzaWRlID0gdGhpcy5wYXJ0aWNpcGFudFNpZGUoc3RhdGUsIHVpZCk7XG4gICAgICBpZiAoIXNpZGUgfHwgc3RhdGUuc3RhdHVzID09PSAnZmluaXNoZWQnKSByZXR1cm47XG5cbiAgICAgIHRyYW5zYWN0aW9uLnNldChyZWYsIHRoaXMud2l0aFVwZGF0ZWRBdChyZXNpZ25DaGVzc2ltYWxzR2FtZShzdGF0ZSwgc2lkZSkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJlcXVlc3RSZW1hdGNoKGdhbWVJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEdhbWVJZCA9IHRoaXMubm9ybWFsaXplR2FtZUlkKGdhbWVJZCk7XG4gICAgY29uc3QgdWlkID0gYXdhaXQgdGhpcy5lbnN1cmVVc2VyKCk7XG4gICAgYXdhaXQgcnVuVHJhbnNhY3Rpb24odGhpcy5maXJlc3RvcmUsIGFzeW5jICh0cmFuc2FjdGlvbikgPT4ge1xuICAgICAgY29uc3QgcmVmID0gdGhpcy5nYW1lUmVmKG5vcm1hbGl6ZWRHYW1lSWQpO1xuICAgICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCB0cmFuc2FjdGlvbi5nZXQocmVmKTtcbiAgICAgIGlmICghc25hcHNob3QuZXhpc3RzKCkpIHRocm93IG5ldyBFcnJvcignQ0hFU1NJTUFMU19HQU1FX05PVF9GT1VORCcpO1xuXG4gICAgICBjb25zdCBzdGF0ZSA9IHNuYXBzaG90LmRhdGEoKSBhcyBDaGVzc2ltYWxzR2FtZVN0YXRlO1xuICAgICAgdGhpcy5hc3NlcnROb3RFeHBpcmVkKHN0YXRlKTtcbiAgICAgIGlmIChzdGF0ZS5zdGF0dXMgIT09ICdmaW5pc2hlZCcpIHJldHVybjtcbiAgICAgIGlmICghdGhpcy5pc1BhcnRpY2lwYW50KHN0YXRlLCB1aWQpKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHBhcnRpY2lwYW50cyA9IHN0YXRlLm9ubGluZT8ucGFydGljaXBhbnRzO1xuICAgICAgaWYgKCFwYXJ0aWNpcGFudHM/LndoaXRlIHx8ICFwYXJ0aWNpcGFudHMuYmxhY2sgfHwgIXN0YXRlLm9ubGluZSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCByZXF1ZXN0cyA9IEFycmF5LmZyb20obmV3IFNldChbLi4uKHN0YXRlLm9ubGluZS5yZW1hdGNoUmVxdWVzdHMgPz8gW10pLCB1aWRdKSk7XG4gICAgICBjb25zdCBib3RoUmVhZHkgPSBbcGFydGljaXBhbnRzLndoaXRlLnVpZCwgcGFydGljaXBhbnRzLmJsYWNrLnVpZF0uZXZlcnkoKGl0ZW0pID0+IHJlcXVlc3RzLmluY2x1ZGVzKGl0ZW0pKTtcbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG5cbiAgICAgIGlmICghYm90aFJlYWR5KSB7XG4gICAgICAgIHRyYW5zYWN0aW9uLnNldChyZWYsIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBvbmxpbmU6IHsgLi4uc3RhdGUub25saW5lLCB1cGRhdGVkQXQ6IG5vdy50b0lTT1N0cmluZygpLCByZW1hdGNoUmVxdWVzdHM6IHJlcXVlc3RzIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFt3aGl0ZSwgYmxhY2tdID0gTWF0aC5yYW5kb20oKSA+IDAuNVxuICAgICAgICA/IFtwYXJ0aWNpcGFudHMud2hpdGUsIHBhcnRpY2lwYW50cy5ibGFja11cbiAgICAgICAgOiBbcGFydGljaXBhbnRzLmJsYWNrLCBwYXJ0aWNpcGFudHMud2hpdGVdO1xuICAgICAgY29uc3QgbmV4dCA9IGNyZWF0ZUNoZXNzaW1hbHNHYW1lKHN0YXRlLmJvYXJkU2l6ZSwge1xuICAgICAgICBpZDogc3RhdGUuaWQsXG4gICAgICAgIG1vZGU6ICdvbmxpbmUnLFxuICAgICAgICBzdGF0dXM6ICdpbl9wcm9ncmVzcycsXG4gICAgICAgIG9ubGluZToge1xuICAgICAgICAgIC4uLnN0YXRlLm9ubGluZSxcbiAgICAgICAgICB1cGRhdGVkQXQ6IG5vdy50b0lTT1N0cmluZygpLFxuICAgICAgICAgIHJvdW5kOiBzdGF0ZS5vbmxpbmUucm91bmQgKyAxLFxuICAgICAgICAgIHBhcnRpY2lwYW50czoge1xuICAgICAgICAgICAgd2hpdGU6IHsgLi4ud2hpdGUsIHNpZGU6ICd3aGl0ZScgfSxcbiAgICAgICAgICAgIGJsYWNrOiB7IC4uLmJsYWNrLCBzaWRlOiAnYmxhY2snIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZW1hdGNoUmVxdWVzdHM6IFtdLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHRyYW5zYWN0aW9uLnNldChyZWYsIG5leHQpO1xuICAgIH0pO1xuICB9XG5cbiAgcGFydGljaXBhbnRTaWRlKHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLCB1aWQgPSB0aGlzLmN1cnJlbnRVaWQpOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IgfCB1bmRlZmluZWQge1xuICAgIGlmICghdWlkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHBhcnRpY2lwYW50cyA9IHN0YXRlLm9ubGluZT8ucGFydGljaXBhbnRzO1xuICAgIGlmIChwYXJ0aWNpcGFudHM/LndoaXRlPy51aWQgPT09IHVpZCkgcmV0dXJuICd3aGl0ZSc7XG4gICAgaWYgKHBhcnRpY2lwYW50cz8uYmxhY2s/LnVpZCA9PT0gdWlkKSByZXR1cm4gJ2JsYWNrJztcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaXNQYXJ0aWNpcGFudChzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSwgdWlkID0gdGhpcy5jdXJyZW50VWlkKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5wYXJ0aWNpcGFudFNpZGUoc3RhdGUsIHVpZCk7XG4gIH1cblxuICBpc0hvc3RXYWl0aW5nKHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLCB1aWQgPSB0aGlzLmN1cnJlbnRVaWQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF1aWQgJiYgc3RhdGUuc3RhdHVzID09PSAnd2FpdGluZycgJiYgc3RhdGUub25saW5lPy5sb2JieT8udWlkID09PSB1aWQ7XG4gIH1cblxuICBzaGFyZVVybChnYW1lSWQ6IHN0cmluZywgYmFzZVJvdXRlID0gJy9taW5pLWdhbWVzJyk6IHN0cmluZyB7XG4gICAgY29uc3Qgb3JpZ2luID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgPyAnJyA6IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgY29uc3Qgbm9ybWFsaXplZEJhc2VSb3V0ZSA9IGAvJHtiYXNlUm91dGUucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpIHx8ICdtaW5pLWdhbWVzJ31gO1xuICAgIHJldHVybiBgJHtvcmlnaW59JHtub3JtYWxpemVkQmFzZVJvdXRlfS9jaGVzc2ltYWxzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMubm9ybWFsaXplR2FtZUlkKGdhbWVJZCkpfWA7XG4gIH1cblxuICBwcm9qZWN0aW9uU2hhcmVVcmwoZ2FtZUlkOiBzdHJpbmcsIGJhc2VSb3V0ZSA9ICcvbWluaS1nYW1lcycpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLnNoYXJlVXJsKGdhbWVJZCwgYmFzZVJvdXRlKX0vcHJvamVjdGlvbmA7XG4gIH1cblxuICBhc3luYyBzYXZlQ3VycmVudFVzZXJIaXN0b3J5KHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdWlkID0gdGhpcy5jdXJyZW50VWlkO1xuICAgIGlmICghdWlkIHx8IHN0YXRlLm1vZGUgIT09ICdvbmxpbmUnKSByZXR1cm47XG4gICAgY29uc3QgZW50cnkgPSB0aGlzLmNyZWF0ZUhpc3RvcnlFbnRyeShzdGF0ZSwgdWlkKTtcbiAgICBpZiAoIWVudHJ5KSByZXR1cm47XG4gICAgYXdhaXQgc2V0RG9jKHRoaXMuaGlzdG9yeVJlZih1aWQsIHN0YXRlLmlkKSwgdGhpcy53aXRob3V0VW5kZWZpbmVkKGVudHJ5KSwgeyBtZXJnZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2FtZVJlZihnYW1lSWQ6IHN0cmluZykge1xuICAgIHJldHVybiBkb2ModGhpcy5maXJlc3RvcmUsIGAke0NPTExFQ1RJT05fUEFUSH0vJHtnYW1lSWR9YCk7XG4gIH1cblxuICBwcml2YXRlIGhpc3RvcnlQYXRoKHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYHVzZXJzLyR7dWlkfS9taW5pR2FtZXMvY2hlc3NpbWFscy9oaXN0b3J5YDtcbiAgfVxuXG4gIHByaXZhdGUgaGlzdG9yeVJlZih1aWQ6IHN0cmluZywgZ2FtZUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZG9jKHRoaXMuZmlyZXN0b3JlLCBgJHt0aGlzLmhpc3RvcnlQYXRoKHVpZCl9LyR7Z2FtZUlkfWApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVVc2VyKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgYXdhaXQgdGhpcy5maXJlYmFzZS53aGVuRmlyZWJhc2VBdXRoUmVhZHkoKTtcbiAgICBjb25zdCB1c2VyID0gdGhpcy5hdXRoLmN1cnJlbnRVc2VyO1xuICAgIGlmICh1c2VyPy51aWQpIHtcbiAgICAgIGF3YWl0IHVzZXIuZ2V0SWRUb2tlbigpO1xuICAgICAgcmV0dXJuIHVzZXIudWlkO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NIRVNTSU1BTFNfTE9HSU5fUkVRVUlSRUQnKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVjb2RlSW5wdXQodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUGFydGljaXBhbnQodWlkOiBzdHJpbmcsIGpvaW5lZEF0OiBzdHJpbmcpOiBDaGVzc2ltYWxzT25saW5lUGFydGljaXBhbnQge1xuICAgIGNvbnN0IHByb2ZpbGUgPSB0aGlzLnByb2ZpbGVzLmFjdGl2ZVByb2ZpbGUoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdWlkLFxuICAgICAgcHJvZmlsZUlkOiBwcm9maWxlPy5pZCA/PyAnbG9jYWwtcGxheWVyJyxcbiAgICAgIG5hbWU6IHRoaXMucHJvZmlsZXMuZGlzcGxheU5hbWUocHJvZmlsZSwgJ0p1Z2Fkb3InKSxcbiAgICAgIGF2YXRhcjogcHJvZmlsZT8uYXZhdGFyID8/ICfimZ/vuI8nLFxuICAgICAgY29sb3I6IHByb2ZpbGU/LmNvbG9yID8/ICcjZmYwMGIyJyxcbiAgICAgIGpvaW5lZEF0LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHdpdGhVcGRhdGVkQXQoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsIGRhdGUgPSBuZXcgRGF0ZSgpKTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSB7XG4gICAgaWYgKCFzdGF0ZS5vbmxpbmUpIHJldHVybiBzdGF0ZTtcbiAgICByZXR1cm4geyAuLi5zdGF0ZSwgb25saW5lOiB7IC4uLnN0YXRlLm9ubGluZSwgdXBkYXRlZEF0OiBkYXRlLnRvSVNPU3RyaW5nKCkgfSB9O1xuICB9XG5cbiAgcHJpdmF0ZSB3aXRoTW92ZUxvZyhzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSwgZW50cnk6IENoZXNzaW1hbHNNb3ZlTG9nRW50cnksIGRhdGUgPSBuZXcgRGF0ZSgpKTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSB7XG4gICAgaWYgKCFzdGF0ZS5vbmxpbmUpIHJldHVybiB0aGlzLndpdGhVcGRhdGVkQXQoc3RhdGUsIGRhdGUpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG9ubGluZToge1xuICAgICAgICAuLi5zdGF0ZS5vbmxpbmUsXG4gICAgICAgIHVwZGF0ZWRBdDogZGF0ZS50b0lTT1N0cmluZygpLFxuICAgICAgICBtb3ZlTG9nOiBbLi4uKHN0YXRlLm9ubGluZS5tb3ZlTG9nID8/IFtdKSwgZW50cnldLnNsaWNlKC04MCksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU1vdmVMb2dFbnRyeShhcmdzOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB1aWQ6IHN0cmluZztcbiAgICBzaWRlPzogQ2hlc3NpbWFsc1BsYXllckNvbG9yO1xuICAgIHN0YXR1czogQ2hlc3NpbWFsc01vdmVMb2dFbnRyeVsnc3RhdHVzJ107XG4gICAgY29kZT86IHN0cmluZztcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgIG1vdmU6IENoZXNzaW1hbHNNb3ZlO1xuICAgIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlO1xuICAgIHVwZGF0ZWQ/OiBDaGVzc2ltYWxzR2FtZVN0YXRlO1xuICB9KTogQ2hlc3NpbWFsc01vdmVMb2dFbnRyeSB7XG4gICAgcmV0dXJuIHRoaXMud2l0aG91dFVuZGVmaW5lZCh7XG4gICAgICBpZDogYXJncy5pZCxcbiAgICAgIGF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB1aWQ6IGFyZ3MudWlkLFxuICAgICAgc2lkZTogYXJncy5zaWRlLFxuICAgICAgc3RhdHVzOiBhcmdzLnN0YXR1cyxcbiAgICAgIGNvZGU6IGFyZ3MuY29kZSxcbiAgICAgIG1lc3NhZ2U6IGFyZ3MubWVzc2FnZSxcbiAgICAgIG1vdmU6IHRoaXMuc2FuaXRpemVNb3ZlKGFyZ3MubW92ZSksXG4gICAgICBtb3ZlQ291bnRCZWZvcmU6IGFyZ3Muc3RhdGUubW92ZUNvdW50LFxuICAgICAgbW92ZUNvdW50QWZ0ZXI6IGFyZ3MudXBkYXRlZD8ubW92ZUNvdW50LFxuICAgICAgY3VycmVudFR1cm5CZWZvcmU6IGFyZ3Muc3RhdGUuY3VycmVudFR1cm4sXG4gICAgfSkgYXMgQ2hlc3NpbWFsc01vdmVMb2dFbnRyeTtcbiAgfVxuXG4gIHByaXZhdGUgc2FuaXRpemVNb3ZlKG1vdmU6IENoZXNzaW1hbHNNb3ZlKTogQ2hlc3NpbWFsc01vdmUge1xuICAgIHJldHVybiB0aGlzLndpdGhvdXRVbmRlZmluZWQoe1xuICAgICAgcGllY2VJZDogbW92ZS5waWVjZUlkLFxuICAgICAgZnJvbTogeyAuLi5tb3ZlLmZyb20gfSxcbiAgICAgIHRvOiB7IC4uLm1vdmUudG8gfSxcbiAgICAgIGtpbmQ6IG1vdmUua2luZCxcbiAgICAgIGFuaW1hbDogbW92ZS5hbmltYWwsXG4gICAgICBjYXB0dXJlc1BpZWNlSWQ6IG1vdmUuY2FwdHVyZXNQaWVjZUlkLFxuICAgIH0pIGFzIENoZXNzaW1hbHNNb3ZlO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVIaXN0b3J5RW50cnkoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsIHVpZDogc3RyaW5nKTogQ2hlc3NpbWFsc0hpc3RvcnlFbnRyeSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFzdGF0ZS5vbmxpbmUpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBzaWRlID0gdGhpcy5wYXJ0aWNpcGFudFNpZGUoc3RhdGUsIHVpZCk7XG4gICAgY29uc3QgaXNMb2JieUhvc3QgPSBzdGF0ZS5vbmxpbmUubG9iYnk/LnVpZCA9PT0gdWlkO1xuICAgIGNvbnN0IGlzUGVuZGluZ0d1ZXN0ID0gc3RhdGUub25saW5lLnBlbmRpbmdHdWVzdD8udWlkID09PSB1aWQ7XG4gICAgaWYgKCFzaWRlICYmICFpc0xvYmJ5SG9zdCAmJiAhaXNQZW5kaW5nR3Vlc3QpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBvcHBvbmVudCA9IHNpZGVcbiAgICAgID8gc2lkZSA9PT0gJ3doaXRlJ1xuICAgICAgICA/IHN0YXRlLm9ubGluZS5wYXJ0aWNpcGFudHM/LmJsYWNrXG4gICAgICAgIDogc3RhdGUub25saW5lLnBhcnRpY2lwYW50cz8ud2hpdGVcbiAgICAgIDogaXNMb2JieUhvc3RcbiAgICAgICAgPyBzdGF0ZS5vbmxpbmUucGVuZGluZ0d1ZXN0XG4gICAgICAgIDogc3RhdGUub25saW5lLmxvYmJ5O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGdhbWVJZDogc3RhdGUuaWQsXG4gICAgICBtb2RlOiAnb25saW5lJyxcbiAgICAgIGJvYXJkU2l6ZTogc3RhdGUuYm9hcmRTaXplLFxuICAgICAgc3RhdHVzOiBzdGF0ZS5zdGF0dXMsXG4gICAgICBvdXRjb21lOiB0aGlzLmhpc3RvcnlPdXRjb21lKHN0YXRlLCB1aWQsIHNpZGUsIGlzUGVuZGluZ0d1ZXN0KSxcbiAgICAgIHNpZGUsXG4gICAgICBvcHBvbmVudFVpZDogb3Bwb25lbnQ/LnVpZCxcbiAgICAgIG9wcG9uZW50TmFtZTogb3Bwb25lbnQ/Lm5hbWUsXG4gICAgICB3aW5uZXI6IHN0YXRlLndpbm5lcixcbiAgICAgIHdpbm5lclJlYXNvbjogc3RhdGUud2lubmVyUmVhc29uLFxuICAgICAgbW92ZUNvdW50OiBzdGF0ZS5tb3ZlQ291bnQsXG4gICAgICByb3VuZDogc3RhdGUub25saW5lLnJvdW5kLFxuICAgICAgY3JlYXRlZEF0OiBzdGF0ZS5vbmxpbmUuY3JlYXRlZEF0LFxuICAgICAgdXBkYXRlZEF0OiBzdGF0ZS5vbmxpbmUudXBkYXRlZEF0LFxuICAgICAgZmluaXNoZWRBdDogc3RhdGUuc3RhdHVzID09PSAnZmluaXNoZWQnID8gc3RhdGUub25saW5lLnVwZGF0ZWRBdCA6IHVuZGVmaW5lZCxcbiAgICAgIGV4cGlyZXNBdDogc3RhdGUub25saW5lLmV4cGlyZXNBdCxcbiAgICAgIHJlbWF0Y2hPZjogc3RhdGUub25saW5lLnJlbWF0Y2hPZixcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB3aXRob3V0VW5kZWZpbmVkPFQgZXh0ZW5kcyBvYmplY3Q+KHZhbHVlOiBUKTogUGFydGlhbDxUPiB7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5maWx0ZXIoKFssIGVudHJ5XSkgPT4gZW50cnkgIT09IHVuZGVmaW5lZCksXG4gICAgKSBhcyBQYXJ0aWFsPFQ+O1xuICB9XG5cbiAgcHJpdmF0ZSBoaXN0b3J5T3V0Y29tZShcbiAgICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgICB1aWQ6IHN0cmluZyxcbiAgICBzaWRlOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IgfCB1bmRlZmluZWQsXG4gICAgaXNQZW5kaW5nR3Vlc3Q6IGJvb2xlYW4sXG4gICk6IENoZXNzaW1hbHNIaXN0b3J5RW50cnlbJ291dGNvbWUnXSB7XG4gICAgaWYgKHN0YXRlLnN0YXR1cyA9PT0gJ2ZpbmlzaGVkJyAmJiBzaWRlICYmIHN0YXRlLndpbm5lcikgcmV0dXJuIHN0YXRlLndpbm5lciA9PT0gc2lkZSA/ICd3b24nIDogJ2xvc3QnO1xuICAgIGlmIChzdGF0ZS5zdGF0dXMgPT09ICdpbl9wcm9ncmVzcycpIHJldHVybiAnaW5fcHJvZ3Jlc3MnO1xuICAgIGlmIChpc1BlbmRpbmdHdWVzdCkgcmV0dXJuICdwZW5kaW5nJztcbiAgICByZXR1cm4gJ3dhaXRpbmcnO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3NlcnROb3RFeHBpcmVkKHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlKTogdm9pZCB7XG4gICAgaWYgKChzdGF0ZS5vbmxpbmU/LmV4cGlyZXNBdE1zID8/IDApIDwgRGF0ZS5ub3coKSkgdGhyb3cgbmV3IEVycm9yKCdDSEVTU0lNQUxTX0dBTUVfRVhQSVJFRCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVHYW1lSWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBhbHBoYWJldCA9ICdBQkNERUZHSEpLTE1OUFFSU1RVVldYWVoyMzQ1Njc4OSc7XG4gICAgY29uc3QgbWFrZVBhcnQgPSAoKTogc3RyaW5nID0+IEFycmF5LmZyb20oeyBsZW5ndGg6IDQgfSwgKCkgPT4gYWxwaGFiZXRbdGhpcy5yYW5kb21JbmRleChhbHBoYWJldC5sZW5ndGgpXSkuam9pbignJyk7XG4gICAgcmV0dXJuIGAke21ha2VQYXJ0KCl9LSR7bWFrZVBhcnQoKX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVPcGVyYXRpb25JZCgpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiAncmFuZG9tVVVJRCcgaW4gY3J5cHRvKSByZXR1cm4gY3J5cHRvLnJhbmRvbVVVSUQoKTtcbiAgICByZXR1cm4gYCR7RGF0ZS5ub3coKS50b1N0cmluZygzNil9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgMTApfWA7XG4gIH1cblxuICBwcml2YXRlIHJhbmRvbUluZGV4KG1heDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAodHlwZW9mIGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICAgICAgY29uc3QgdmFsdWVzID0gbmV3IFVpbnQzMkFycmF5KDEpO1xuICAgICAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyh2YWx1ZXMpO1xuICAgICAgcmV0dXJuIHZhbHVlc1swXSAlIG1heDtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG1heCk7XG4gIH1cblxufVxuIl19
598
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlc3NpbWFscy1vbmxpbmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvbWluaS1nYW1lcy9jaGVzc2ltYWxzLW9ubGluZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEVBQ0wsVUFBVSxFQUNWLGNBQWMsRUFDZCxTQUFTLEVBQ1QsR0FBRyxFQUNILE9BQU8sRUFDUCxLQUFLLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxjQUFjLEVBQ2QsTUFBTSxHQUNQLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFjLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDOUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBV2xGLE1BQU0sZUFBZSxHQUFHLDRCQUE0QixDQUFDO0FBQ3JELE1BQU0sV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUd4QyxNQUFNLE9BQU8sdUJBQXVCO0lBRHBDO1FBRW1CLGlCQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLFNBQUksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0IsY0FBUyxH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QjtrQkFEbkMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEF1dGggfSBmcm9tICdAYW5ndWxhci9maXJlL2F1dGgnO1xuaW1wb3J0IHtcbiAgY29sbGVjdGlvbixcbiAgY29sbGVjdGlvbkRhdGEsXG4gIEZpcmVzdG9yZSxcbiAgZG9jLFxuICBkb2NEYXRhLFxuICBsaW1pdCxcbiAgb3JkZXJCeSxcbiAgcXVlcnksXG4gIHJ1blRyYW5zYWN0aW9uLFxuICBzZXREb2MsXG59IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvZmlyZXN0b3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG1hcCwgb2YsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGgvYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IEZpcmViYXNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpcmViYXNlL2ZpcmViYXNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgYXBwbHlDaGVzc2ltYWxzTW92ZSwgY3JlYXRlQ2hlc3NpbWFsc0dhbWUsIHJlc2lnbkNoZXNzaW1hbHNHYW1lIH0gZnJvbSAnLi9jaGVzc2ltYWxzLWVuZ2luZSc7XG5pbXBvcnQgeyBNaW5pR2FtZVBsYXllclByb2ZpbGVTZXJ2aWNlIH0gZnJvbSAnLi9taW5pLWdhbWUtcGxheWVyLXByb2ZpbGUuc2VydmljZSc7XG5pbXBvcnQge1xuICBDaGVzc2ltYWxzQm9hcmRTaXplLFxuICBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBDaGVzc2ltYWxzSGlzdG9yeUVudHJ5LFxuICBDaGVzc2ltYWxzTW92ZSxcbiAgQ2hlc3NpbWFsc01vdmVMb2dFbnRyeSxcbiAgQ2hlc3NpbWFsc09ubGluZVBhcnRpY2lwYW50LFxuICBDaGVzc2ltYWxzUGxheWVyQ29sb3IsXG59IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBDT0xMRUNUSU9OX1BBVEggPSAnbWluaUdhbWVzL2NoZXNzaW1hbHMvZ2FtZXMnO1xuY29uc3QgR0FNRV9UVExfTVMgPSAyNCAqIDYwICogNjAgKiAxMDAwO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIENoZXNzaW1hbHNPbmxpbmVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBmaXJlYmFzZUF1dGggPSBpbmplY3QoQXV0aCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0aCA9IGluamVjdChBdXRoU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlyZXN0b3JlID0gaW5qZWN0KEZpcmVzdG9yZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlyZWJhc2UgPSBpbmplY3QoRmlyZWJhc2VTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9maWxlcyA9IGluamVjdChNaW5pR2FtZVBsYXllclByb2ZpbGVTZXJ2aWNlKTtcblxuICBnZXQgY3VycmVudFVpZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZpcmViYXNlQXV0aC5jdXJyZW50VXNlcj8udWlkO1xuICB9XG5cbiAgbm9ybWFsaXplR2FtZUlkKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJhdyA9ICh2YWx1ZSA/PyAnJykudHJpbSgpLnRvVXBwZXJDYXNlKCk7XG4gICAgY29uc3QgZGVjb2RlZCA9IHRoaXMuZGVjb2RlSW5wdXQocmF3KTtcbiAgICBjb25zdCBwYXRoU2VnbWVudCA9IGRlY29kZWQuc3BsaXQoL1s/I10vKVswXS5zcGxpdCgnLycpLmZpbHRlcihCb29sZWFuKS5wb3AoKSA/PyBkZWNvZGVkO1xuICAgIGNvbnN0IG1hdGNoID0gcGF0aFNlZ21lbnQubWF0Y2goL1tBLVowLTldezR9LT9bQS1aMC05XXs0fS8pPy5bMF1cbiAgICAgID8/IGRlY29kZWQubWF0Y2goL1tBLVowLTldezR9LT9bQS1aMC05XXs0fS8pPy5bMF1cbiAgICAgID8/IGRlY29kZWQ7XG4gICAgY29uc3QgY29tcGFjdCA9IG1hdGNoLnJlcGxhY2UoL1teQS1aMC05XS9nLCAnJykuc2xpY2UoMCwgOCk7XG4gICAgaWYgKGNvbXBhY3QubGVuZ3RoIDw9IDQpIHJldHVybiBjb21wYWN0O1xuICAgIHJldHVybiBgJHtjb21wYWN0LnNsaWNlKDAsIDQpfS0ke2NvbXBhY3Quc2xpY2UoNCwgOCl9YDtcbiAgfVxuXG4gIGlzVmFsaWRHYW1lSWQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXltBLVowLTldezR9LVtBLVowLTldezR9JC8udGVzdCh0aGlzLm5vcm1hbGl6ZUdhbWVJZCh2YWx1ZSkpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlR2FtZShib2FyZFNpemU6IENoZXNzaW1hbHNCb2FyZFNpemUpOiBQcm9taXNlPENoZXNzaW1hbHNHYW1lU3RhdGU+IHtcbiAgICBjb25zdCB1aWQgPSBhd2FpdCB0aGlzLmVuc3VyZVVzZXIoKTtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IGV4cGlyZXNBdCA9IG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgKyBHQU1FX1RUTF9NUyk7XG4gICAgY29uc3QgZ2FtZUlkID0gdGhpcy5jcmVhdGVHYW1lSWQoKTtcbiAgICBjb25zdCBob3N0ID0gdGhpcy5jcmVhdGVQYXJ0aWNpcGFudCh1aWQsIG5vdy50b0lTT1N0cmluZygpKTtcbiAgICBjb25zdCBzdGF0ZSA9IGNyZWF0ZUNoZXNzaW1hbHNHYW1lKGJvYXJkU2l6ZSwge1xuICAgICAgaWQ6IGdhbWVJZCxcbiAgICAgIG1vZGU6ICdvbmxpbmUnLFxuICAgICAgc3RhdHVzOiAnd2FpdGluZycsXG4gICAgICBvbmxpbmU6IHtcbiAgICAgICAgZ2FtZUlkLFxuICAgICAgICBob3N0VWlkOiB1aWQsXG4gICAgICAgIGNyZWF0ZWRBdDogbm93LnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHVwZGF0ZWRBdDogbm93LnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGV4cGlyZXNBdDogZXhwaXJlc0F0LnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGV4cGlyZXNBdE1zOiBleHBpcmVzQXQuZ2V0VGltZSgpLFxuICAgICAgICByb3VuZDogMSxcbiAgICAgICAgbG9iYnk6IGhvc3QsXG4gICAgICAgIHJlbWF0Y2hSZXF1ZXN0czogW10sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgbmV4dCA9IHRoaXMud2l0aFVwZGF0ZWRBdChzdGF0ZSwgbm93KTtcbiAgICBhd2FpdCBzZXREb2ModGhpcy5nYW1lUmVmKGdhbWVJZCksIG5leHQpO1xuICAgIGF3YWl0IHRoaXMuc2F2ZUN1cnJlbnRVc2VySGlzdG9yeShuZXh0KTtcbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuXG4gIHdhdGNoR2FtZShnYW1lSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Q2hlc3NpbWFsc0dhbWVTdGF0ZSB8IG51bGw+IHtcbiAgICBjb25zdCBub3JtYWxpemVkR2FtZUlkID0gdGhpcy5ub3JtYWxpemVHYW1lSWQoZ2FtZUlkKTtcbiAgICByZXR1cm4gZG9jRGF0YSh0aGlzLmdhbWVSZWYobm9ybWFsaXplZEdhbWVJZCkpLnBpcGUoXG4gICAgICBtYXAoKHZhbHVlKSA9PiAodmFsdWUgPyAodmFsdWUgYXMgQ2hlc3NpbWFsc0dhbWVTdGF0ZSkgOiBudWxsKSksXG4gICAgICB0YXAoKHN0YXRlKSA9PiB7XG4gICAgICAgIGlmIChzdGF0ZSkgdm9pZCB0aGlzLnNhdmVDdXJyZW50VXNlckhpc3Rvcnkoc3RhdGUpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHdhdGNoSGlzdG9yeShsaW1pdENvdW50ID0gOCk6IE9ic2VydmFibGU8Q2hlc3NpbWFsc0hpc3RvcnlFbnRyeVtdPiB7XG4gICAgY29uc3QgdWlkID0gdGhpcy5jdXJyZW50VWlkO1xuICAgIGlmICghdWlkKSByZXR1cm4gb2YoW10pO1xuICAgIGNvbnN0IGhpc3RvcnlRdWVyeSA9IHF1ZXJ5KFxuICAgICAgY29sbGVjdGlvbih0aGlzLmZpcmVzdG9yZSwgdGhpcy5oaXN0b3J5UGF0aCh1aWQpKSxcbiAgICAgIG9yZGVyQnkoJ3VwZGF0ZWRBdCcsICdkZXNjJyksXG4gICAgICBsaW1pdChsaW1pdENvdW50KSxcbiAgICApO1xuICAgIHJldHVybiBjb2xsZWN0aW9uRGF0YShoaXN0b3J5UXVlcnkpLnBpcGUobWFwKChpdGVtcykgPT4gaXRlbXMgYXMgQ2hlc3NpbWFsc0hpc3RvcnlFbnRyeVtdKSk7XG4gIH1cblxuICBhc3luYyBqb2luR2FtZShnYW1lSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRHYW1lSWQgPSB0aGlzLm5vcm1hbGl6ZUdhbWVJZChnYW1lSWQpO1xuICAgIGNvbnN0IHVpZCA9IGF3YWl0IHRoaXMuZW5zdXJlVXNlcigpO1xuICAgIGF3YWl0IHJ1blRyYW5zYWN0aW9uKHRoaXMuZmlyZXN0b3JlLCBhc3luYyAodHJhbnNhY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMuZ2FtZVJlZihub3JtYWxpemVkR2FtZUlkKTtcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgdHJhbnNhY3Rpb24uZ2V0KHJlZik7XG4gICAgICBpZiAoIXNuYXBzaG90LmV4aXN0cygpKSB0aHJvdyBuZXcgRXJyb3IoJ0NIRVNTSU1BTFNfR0FNRV9OT1RfRk9VTkQnKTtcblxuICAgICAgY29uc3Qgc3RhdGUgPSBzbmFwc2hvdC5kYXRhKCkgYXMgQ2hlc3NpbWFsc0dhbWVTdGF0ZTtcbiAgICAgIHRoaXMuYXNzZXJ0Tm90RXhwaXJlZChzdGF0ZSk7XG5cbiAgICAgIGlmICh0aGlzLmlzUGFydGljaXBhbnQoc3RhdGUsIHVpZCkpIHJldHVybjtcbiAgICAgIGlmICh0aGlzLmlzSG9zdFdhaXRpbmcoc3RhdGUsIHVpZCkpIHJldHVybjtcbiAgICAgIGlmIChzdGF0ZS5zdGF0dXMgIT09ICd3YWl0aW5nJyB8fCAhc3RhdGUub25saW5lPy5sb2JieSkgcmV0dXJuO1xuXG4gICAgICBpZiAodGhpcy5pc1BlbmRpbmdHdWVzdChzdGF0ZSwgdWlkKSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgY29uc3QgZ3Vlc3QgPSB0aGlzLmNyZWF0ZVBhcnRpY2lwYW50KHVpZCwgbm93LnRvSVNPU3RyaW5nKCkpO1xuICAgICAgY29uc3QgbmV4dDogQ2hlc3NpbWFsc0dhbWVTdGF0ZSA9IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIG9ubGluZToge1xuICAgICAgICAgIC4uLnN0YXRlLm9ubGluZSxcbiAgICAgICAgICB1cGRhdGVkQXQ6IG5vdy50b0lTT1N0cmluZygpLFxuICAgICAgICAgIHBlbmRpbmdHdWVzdDogZ3Vlc3QsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICB0cmFuc2FjdGlvbi5zZXQocmVmLCBuZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGFjY2VwdEd1ZXN0KGdhbWVJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEdhbWVJZCA9IHRoaXMubm9ybWFsaXplR2FtZUlkKGdhbWVJZCk7XG4gICAgY29uc3QgdWlkID0gYXdhaXQgdGhpcy5lbnN1cmVVc2VyKCk7XG4gICAgYXdhaXQgcnVuVHJhbnNhY3Rpb24odGhpcy5maXJlc3RvcmUsIGFzeW5jICh0cmFuc2FjdGlvbikgPT4ge1xuICAgICAgY29uc3QgcmVmID0gdGhpcy5nYW1lUmVmKG5vcm1hbGl6ZWRHYW1lSWQpO1xuICAgICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCB0cmFuc2FjdGlvbi5nZXQocmVmKTtcbiAgICAgIGlmICghc25hcHNob3QuZXhpc3RzKCkpIHRocm93IG5ldyBFcnJvcignQ0hFU1NJTUFMU19HQU1FX05PVF9GT1VORCcpO1xuXG4gICAgICBjb25zdCBzdGF0ZSA9IHNuYXBzaG90LmRhdGEoKSBhcyBDaGVzc2ltYWxzR2FtZVN0YXRlO1xuICAgICAgdGhpcy5hc3NlcnROb3RFeHBpcmVkKHN0YXRlKTtcbiAgICAgIGlmICghdGhpcy5pc0hvc3RXYWl0aW5nKHN0YXRlLCB1aWQpIHx8ICFzdGF0ZS5vbmxpbmUucGVuZGluZ0d1ZXN0KSByZXR1cm47XG5cbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICBjb25zdCBbaG9zdFNpZGUsIGd1ZXN0U2lkZV0gPSBNYXRoLnJhbmRvbSgpID4gMC41ID8gWyd3aGl0ZScsICdibGFjayddIDogWydibGFjaycsICd3aGl0ZSddO1xuICAgICAgY29uc3QgbG9iYnkgPSBzdGF0ZS5vbmxpbmUubG9iYnk7XG4gICAgICBjb25zdCBndWVzdCA9IHN0YXRlLm9ubGluZS5wZW5kaW5nR3Vlc3Q7XG4gICAgICBjb25zdCBvbmxpbmU6IE5vbk51bGxhYmxlPENoZXNzaW1hbHNHYW1lU3RhdGVbJ29ubGluZSddPiA9IHsgLi4uc3RhdGUub25saW5lIH07XG4gICAgICBkZWxldGUgb25saW5lLmxvYmJ5O1xuICAgICAgZGVsZXRlIG9ubGluZS5wZW5kaW5nR3Vlc3Q7XG5cbiAgICAgIGNvbnN0IG5leHQ6IENoZXNzaW1hbHNHYW1lU3RhdGUgPSB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzdGF0dXM6ICdpbl9wcm9ncmVzcycsXG4gICAgICAgIGN1cnJlbnRUdXJuOiAnd2hpdGUnLFxuICAgICAgICBvbmxpbmU6IHtcbiAgICAgICAgICAuLi5vbmxpbmUsXG4gICAgICAgICAgdXBkYXRlZEF0OiBub3cudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICBwYXJ0aWNpcGFudHM6IHtcbiAgICAgICAgICAgIFtob3N0U2lkZV06IHsgLi4ubG9iYnksIHNpZGU6IGhvc3RTaWRlIGFzIENoZXNzaW1hbHNQbGF5ZXJDb2xvciB9LFxuICAgICAgICAgICAgW2d1ZXN0U2lkZV06IHsgLi4uZ3Vlc3QsIHNpZGU6IGd1ZXN0U2lkZSBhcyBDaGVzc2ltYWxzUGxheWVyQ29sb3IgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlbWF0Y2hSZXF1ZXN0czogW10sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICB0cmFuc2FjdGlvbi5zZXQocmVmLCBuZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJlamVjdEd1ZXN0KGdhbWVJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEdhbWVJZCA9IHRoaXMubm9ybWFsaXplR2FtZUlkKGdhbWVJZCk7XG4gICAgY29uc3QgdWlkID0gYXdhaXQgdGhpcy5lbnN1cmVVc2VyKCk7XG4gICAgYXdhaXQgcnVuVHJhbnNhY3Rpb24odGhpcy5maXJlc3RvcmUsIGFzeW5jICh0cmFuc2FjdGlvbikgPT4ge1xuICAgICAgY29uc3QgcmVmID0gdGhpcy5nYW1lUmVmKG5vcm1hbGl6ZWRHYW1lSWQpO1xuICAgICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCB0cmFuc2FjdGlvbi5nZXQocmVmKTtcbiAgICAgIGlmICghc25hcHNob3QuZXhpc3RzKCkpIHRocm93IG5ldyBFcnJvcignQ0hFU1NJTUFMU19HQU1FX05PVF9GT1VORCcpO1xuXG4gICAgICBjb25zdCBzdGF0ZSA9IHNuYXBzaG90LmRhdGEoKSBhcyBDaGVzc2ltYWxzR2FtZVN0YXRlO1xuICAgICAgdGhpcy5hc3NlcnROb3RFeHBpcmVkKHN0YXRlKTtcbiAgICAgIGlmICghdGhpcy5pc0hvc3RXYWl0aW5nKHN0YXRlLCB1aWQpIHx8ICFzdGF0ZS5vbmxpbmUucGVuZGluZ0d1ZXN0KSByZXR1cm47XG5cbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICBjb25zdCBvbmxpbmU6IE5vbk51bGxhYmxlPENoZXNzaW1hbHNHYW1lU3RhdGVbJ29ubGluZSddPiA9IHsgLi4uc3RhdGUub25saW5lLCB1cGRhdGVkQXQ6IG5vdy50b0lTT1N0cmluZygpIH07XG4gICAgICBkZWxldGUgb25saW5lLnBlbmRpbmdHdWVzdDtcbiAgICAgIHRyYW5zYWN0aW9uLnNldChyZWYsIHsgLi4uc3RhdGUsIG9ubGluZSB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG1vdmUoZ2FtZUlkOiBzdHJpbmcsIG1vdmU6IENoZXNzaW1hbHNNb3ZlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEdhbWVJZCA9IHRoaXMubm9ybWFsaXplR2FtZUlkKGdhbWVJZCk7XG4gICAgY29uc3QgdWlkID0gYXdhaXQgdGhpcy5lbnN1cmVVc2VyKCk7XG4gICAgY29uc3Qgb3BlcmF0aW9uSWQgPSB0aGlzLmNyZWF0ZU9wZXJhdGlvbklkKCk7XG4gICAgbGV0IHJlamVjdGVkRXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICAgIGF3YWl0IHJ1blRyYW5zYWN0aW9uKHRoaXMuZmlyZXN0b3JlLCBhc3luYyAodHJhbnNhY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMuZ2FtZVJlZihub3JtYWxpemVkR2FtZUlkKTtcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgdHJhbnNhY3Rpb24uZ2V0KHJlZik7XG4gICAgICBpZiAoIXNuYXBzaG90LmV4aXN0cygpKSB0aHJvdyBuZXcgRXJyb3IoJ0NIRVNTSU1BTFNfR0FNRV9OT1RfRk9VTkQnKTtcblxuICAgICAgY29uc3Qgc3RhdGUgPSBzbmFwc2hvdC5kYXRhKCkgYXMgQ2hlc3NpbWFsc0dhbWVTdGF0ZTtcbiAgICAgIGNvbnN0IHNpZGUgPSB0aGlzLnBhcnRpY2lwYW50U2lkZShzdGF0ZSwgdWlkKTtcbiAgICAgIGNvbnN0IHJlamVjdCA9IChjb2RlOiBzdHJpbmcsIGVycm9yPzogdW5rbm93bik6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBuZXcgRXJyb3IoY29kZSk7XG4gICAgICAgIHJlamVjdGVkRXJyb3IgPSBuZXh0RXJyb3I7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5jcmVhdGVNb3ZlTG9nRW50cnkoe1xuICAgICAgICAgIGlkOiBvcGVyYXRpb25JZCxcbiAgICAgICAgICB1aWQsXG4gICAgICAgICAgc2lkZSxcbiAgICAgICAgICBzdGF0dXM6ICdyZWplY3RlZCcsXG4gICAgICAgICAgY29kZSxcbiAgICAgICAgICBtZXNzYWdlOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IGNvZGUsXG4gICAgICAgICAgbW92ZSxcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRyYW5zYWN0aW9uLnNldChyZWYsIHRoaXMud2l0aE1vdmVMb2coc3RhdGUsIGVudHJ5KSk7XG4gICAgICB9O1xuXG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmFzc2VydE5vdEV4cGlyZWQoc3RhdGUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmVqZWN0KCdDSEVTU0lNQUxTX0dBTUVfRVhQSVJFRCcsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXNpZGUgfHwgc2lkZSAhPT0gc3RhdGUuY3VycmVudFR1cm4pIHtcbiAgICAgICAgcmVqZWN0KCdDSEVTU0lNQUxTX05PVF9ZT1VSX1RVUk4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB1cGRhdGVkID0gYXBwbHlDaGVzc2ltYWxzTW92ZShzdGF0ZSwgbW92ZSk7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5jcmVhdGVNb3ZlTG9nRW50cnkoe1xuICAgICAgICAgIGlkOiBvcGVyYXRpb25JZCxcbiAgICAgICAgICB1aWQsXG4gICAgICAgICAgc2lkZSxcbiAgICAgICAgICBzdGF0dXM6ICdhY2NlcHRlZCcsXG4gICAgICAgICAgbW92ZSxcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICB1cGRhdGVkLFxuICAgICAgICB9KTtcbiAgICAgICAgdHJhbnNhY3Rpb24uc2V0KHJlZiwgdGhpcy53aXRoTW92ZUxvZyh1cGRhdGVkLCBlbnRyeSkpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmVqZWN0KGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ0NIRVNTSU1BTFNfSUxMRUdBTF9NT1ZFJywgZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChyZWplY3RlZEVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tDaGVzc2ltYWxzXSBvbmxpbmUgbW92ZSByZWplY3RlZCcsIHsgZ2FtZUlkOiBub3JtYWxpemVkR2FtZUlkLCBvcGVyYXRpb25JZCwgbW92ZSwgY29kZTogcmVqZWN0ZWRFcnJvci5tZXNzYWdlIH0pO1xuICAgICAgdGhyb3cgcmVqZWN0ZWRFcnJvcjtcbiAgICB9XG4gICAgY29uc29sZS5pbmZvKCdbQ2hlc3NpbWFsc10gb25saW5lIG1vdmUgYWNjZXB0ZWQnLCB7IGdhbWVJZDogbm9ybWFsaXplZEdhbWVJZCwgb3BlcmF0aW9uSWQsIG1vdmUgfSk7XG4gIH1cblxuICBhc3luYyByZXNpZ24oZ2FtZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBub3JtYWxpemVkR2FtZUlkID0gdGhpcy5ub3JtYWxpemVHYW1lSWQoZ2FtZUlkKTtcbiAgICBjb25zdCB1aWQgPSBhd2FpdCB0aGlzLmVuc3VyZVVzZXIoKTtcbiAgICBhd2FpdCBydW5UcmFuc2FjdGlvbih0aGlzLmZpcmVzdG9yZSwgYXN5bmMgKHRyYW5zYWN0aW9uKSA9PiB7XG4gICAgICBjb25zdCByZWYgPSB0aGlzLmdhbWVSZWYobm9ybWFsaXplZEdhbWVJZCk7XG4gICAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHRyYW5zYWN0aW9uLmdldChyZWYpO1xuICAgICAgaWYgKCFzbmFwc2hvdC5leGlzdHMoKSkgdGhyb3cgbmV3IEVycm9yKCdDSEVTU0lNQUxTX0dBTUVfTk9UX0ZPVU5EJyk7XG5cbiAgICAgIGNvbnN0IHN0YXRlID0gc25hcHNob3QuZGF0YSgpIGFzIENoZXNzaW1hbHNHYW1lU3RhdGU7XG4gICAgICB0aGlzLmFzc2VydE5vdEV4cGlyZWQoc3RhdGUpO1xuICAgICAgY29uc3Qgc2lkZSA9IHRoaXMucGFydGljaXBhbnRTaWRlKHN0YXRlLCB1aWQpO1xuICAgICAgaWYgKCFzaWRlIHx8IHN0YXRlLnN0YXR1cyA9PT0gJ2ZpbmlzaGVkJykgcmV0dXJuO1xuXG4gICAgICB0cmFuc2FjdGlvbi5zZXQocmVmLCB0aGlzLndpdGhVcGRhdGVkQXQocmVzaWduQ2hlc3NpbWFsc0dhbWUoc3RhdGUsIHNpZGUpKSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyByZXF1ZXN0UmVtYXRjaChnYW1lSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRHYW1lSWQgPSB0aGlzLm5vcm1hbGl6ZUdhbWVJZChnYW1lSWQpO1xuICAgIGNvbnN0IHVpZCA9IGF3YWl0IHRoaXMuZW5zdXJlVXNlcigpO1xuICAgIGF3YWl0IHJ1blRyYW5zYWN0aW9uKHRoaXMuZmlyZXN0b3JlLCBhc3luYyAodHJhbnNhY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMuZ2FtZVJlZihub3JtYWxpemVkR2FtZUlkKTtcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgdHJhbnNhY3Rpb24uZ2V0KHJlZik7XG4gICAgICBpZiAoIXNuYXBzaG90LmV4aXN0cygpKSB0aHJvdyBuZXcgRXJyb3IoJ0NIRVNTSU1BTFNfR0FNRV9OT1RfRk9VTkQnKTtcblxuICAgICAgY29uc3Qgc3RhdGUgPSBzbmFwc2hvdC5kYXRhKCkgYXMgQ2hlc3NpbWFsc0dhbWVTdGF0ZTtcbiAgICAgIHRoaXMuYXNzZXJ0Tm90RXhwaXJlZChzdGF0ZSk7XG4gICAgICBpZiAoc3RhdGUuc3RhdHVzICE9PSAnZmluaXNoZWQnKSByZXR1cm47XG4gICAgICBpZiAoIXRoaXMuaXNQYXJ0aWNpcGFudChzdGF0ZSwgdWlkKSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBwYXJ0aWNpcGFudHMgPSBzdGF0ZS5vbmxpbmU/LnBhcnRpY2lwYW50cztcbiAgICAgIGlmICghcGFydGljaXBhbnRzPy53aGl0ZSB8fCAhcGFydGljaXBhbnRzLmJsYWNrIHx8ICFzdGF0ZS5vbmxpbmUpIHJldHVybjtcblxuICAgICAgY29uc3QgY3VycmVudFBhcnRpY2lwYW50ID0gdGhpcy5wYXJ0aWNpcGFudEZvclNpZGUoc3RhdGUsIHRoaXMucGFydGljaXBhbnRTaWRlKHN0YXRlLCB1aWQpKTtcbiAgICAgIGNvbnN0IHJlcXVlc3RLZXkgPSB0aGlzLnBhcnRpY2lwYW50S2V5KGN1cnJlbnRQYXJ0aWNpcGFudCk7XG4gICAgICBpZiAoIXJlcXVlc3RLZXkpIHJldHVybjtcblxuICAgICAgY29uc3QgcmVxdWVzdHMgPSBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLihzdGF0ZS5vbmxpbmUucmVtYXRjaFJlcXVlc3RzID8/IFtdKSwgcmVxdWVzdEtleV0pKTtcbiAgICAgIGNvbnN0IGJvdGhSZWFkeSA9IFtwYXJ0aWNpcGFudHMud2hpdGUsIHBhcnRpY2lwYW50cy5ibGFja10uZXZlcnkoKGl0ZW0pID0+XG4gICAgICAgIHRoaXMucGFydGljaXBhbnRSZXF1ZXN0S2V5cyhpdGVtKS5zb21lKChrZXkpID0+IHJlcXVlc3RzLmluY2x1ZGVzKGtleSkpLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG5cbiAgICAgIGlmICghYm90aFJlYWR5KSB7XG4gICAgICAgIHRyYW5zYWN0aW9uLnNldChyZWYsIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBvbmxpbmU6IHsgLi4uc3RhdGUub25saW5lLCB1cGRhdGVkQXQ6IG5vdy50b0lTT1N0cmluZygpLCByZW1hdGNoUmVxdWVzdHM6IHJlcXVlc3RzIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFt3aGl0ZSwgYmxhY2tdID0gTWF0aC5yYW5kb20oKSA+IDAuNVxuICAgICAgICA/IFtwYXJ0aWNpcGFudHMud2hpdGUsIHBhcnRpY2lwYW50cy5ibGFja11cbiAgICAgICAgOiBbcGFydGljaXBhbnRzLmJsYWNrLCBwYXJ0aWNpcGFudHMud2hpdGVdO1xuICAgICAgY29uc3QgbmV4dCA9IGNyZWF0ZUNoZXNzaW1hbHNHYW1lKHN0YXRlLmJvYXJkU2l6ZSwge1xuICAgICAgICBpZDogc3RhdGUuaWQsXG4gICAgICAgIG1vZGU6ICdvbmxpbmUnLFxuICAgICAgICBzdGF0dXM6ICdpbl9wcm9ncmVzcycsXG4gICAgICAgIG9ubGluZToge1xuICAgICAgICAgIC4uLnN0YXRlLm9ubGluZSxcbiAgICAgICAgICB1cGRhdGVkQXQ6IG5vdy50b0lTT1N0cmluZygpLFxuICAgICAgICAgIHJvdW5kOiBzdGF0ZS5vbmxpbmUucm91bmQgKyAxLFxuICAgICAgICAgIHBhcnRpY2lwYW50czoge1xuICAgICAgICAgICAgd2hpdGU6IHsgLi4ud2hpdGUsIHNpZGU6ICd3aGl0ZScgfSxcbiAgICAgICAgICAgIGJsYWNrOiB7IC4uLmJsYWNrLCBzaWRlOiAnYmxhY2snIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZW1hdGNoUmVxdWVzdHM6IFtdLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHRyYW5zYWN0aW9uLnNldChyZWYsIG5leHQpO1xuICAgIH0pO1xuICB9XG5cbiAgcGFydGljaXBhbnRTaWRlKHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLCB1aWQgPSB0aGlzLmN1cnJlbnRVaWQpOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGVudHJpZXMgPSB0aGlzLnBhcnRpY2lwYW50RW50cmllcyhzdGF0ZSk7XG4gICAgY29uc3QgY3VycmVudFNlYXRLZXkgPSB0aGlzLmN1cnJlbnRTZWF0S2V5KHVpZCk7XG4gICAgaWYgKGN1cnJlbnRTZWF0S2V5KSB7XG4gICAgICBjb25zdCBzZWF0TWF0Y2ggPSBlbnRyaWVzLmZpbmQoKFssIHBhcnRpY2lwYW50XSkgPT4gdGhpcy5wYXJ0aWNpcGFudEtleShwYXJ0aWNpcGFudCkgPT09IGN1cnJlbnRTZWF0S2V5KTtcbiAgICAgIGlmIChzZWF0TWF0Y2gpIHJldHVybiBzZWF0TWF0Y2hbMF07XG4gICAgfVxuXG4gICAgaWYgKHVpZCkge1xuICAgICAgY29uc3QgY3VycmVudFByb2ZpbGUgPSB0aGlzLnByb2ZpbGVzLmFjdGl2ZVByb2ZpbGUoKTtcbiAgICAgIGlmIChjdXJyZW50UHJvZmlsZSkge1xuICAgICAgICBjb25zdCBsZWdhY3lQcm9maWxlTWF0Y2ggPSBlbnRyaWVzLmZpbmQoKFssIHBhcnRpY2lwYW50XSkgPT5cbiAgICAgICAgICBwYXJ0aWNpcGFudC51aWQgPT09IHVpZFxuICAgICAgICAgICYmIHBhcnRpY2lwYW50LmF2YXRhciA9PT0gY3VycmVudFByb2ZpbGUuYXZhdGFyXG4gICAgICAgICAgJiYgdGhpcy5ub3JtYWxpemVDb2xvcihwYXJ0aWNpcGFudC5jb2xvcikgPT09IHRoaXMubm9ybWFsaXplQ29sb3IoY3VycmVudFByb2ZpbGUuY29sb3IpLFxuICAgICAgICApO1xuICAgICAgICBpZiAobGVnYWN5UHJvZmlsZU1hdGNoKSByZXR1cm4gbGVnYWN5UHJvZmlsZU1hdGNoWzBdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB1aWRNYXRjaGVzID0gZW50cmllcy5maWx0ZXIoKFssIHBhcnRpY2lwYW50XSkgPT4gcGFydGljaXBhbnQudWlkID09PSB1aWQpO1xuICAgICAgaWYgKHVpZE1hdGNoZXMubGVuZ3RoID09PSAxKSByZXR1cm4gdWlkTWF0Y2hlc1swXVswXTtcbiAgICB9XG5cbiAgICBjb25zdCBhY2NvdW50VXNlcklkID0gdGhpcy5hdXRoLnVzZXIoKT8udXNlcklkO1xuICAgIGlmIChhY2NvdW50VXNlcklkKSB7XG4gICAgICBjb25zdCBhY2NvdW50TWF0Y2hlcyA9IGVudHJpZXMuZmlsdGVyKChbLCBwYXJ0aWNpcGFudF0pID0+IHBhcnRpY2lwYW50LmFjY291bnRVc2VySWQgPT09IGFjY291bnRVc2VySWQpO1xuICAgICAgaWYgKGFjY291bnRNYXRjaGVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGFjY291bnRNYXRjaGVzWzBdWzBdO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpc1BhcnRpY2lwYW50KHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLCB1aWQgPSB0aGlzLmN1cnJlbnRVaWQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnBhcnRpY2lwYW50U2lkZShzdGF0ZSwgdWlkKTtcbiAgfVxuXG4gIGlzSG9zdFdhaXRpbmcoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsIHVpZCA9IHRoaXMuY3VycmVudFVpZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdGF0ZS5zdGF0dXMgPT09ICd3YWl0aW5nJyAmJiB0aGlzLm1hdGNoZXNDdXJyZW50UGFydGljaXBhbnQoc3RhdGUub25saW5lPy5sb2JieSwgdWlkKTtcbiAgfVxuXG4gIGlzUGVuZGluZ0d1ZXN0KHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLCB1aWQgPSB0aGlzLmN1cnJlbnRVaWQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3RhdGUuc3RhdHVzID09PSAnd2FpdGluZycgJiYgdGhpcy5tYXRjaGVzQ3VycmVudFBhcnRpY2lwYW50KHN0YXRlLm9ubGluZT8ucGVuZGluZ0d1ZXN0LCB1aWQpO1xuICB9XG5cbiAgaGFzQ3VycmVudFJlbWF0Y2hSZXF1ZXN0KHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLCB1aWQgPSB0aGlzLmN1cnJlbnRVaWQpOiBib29sZWFuIHtcbiAgICBjb25zdCBzaWRlID0gdGhpcy5wYXJ0aWNpcGFudFNpZGUoc3RhdGUsIHVpZCk7XG4gICAgY29uc3QgcGFydGljaXBhbnQgPSB0aGlzLnBhcnRpY2lwYW50Rm9yU2lkZShzdGF0ZSwgc2lkZSk7XG4gICAgcmV0dXJuIHRoaXMucGFydGljaXBhbnRSZXF1ZXN0S2V5cyhwYXJ0aWNpcGFudCkuc29tZSgoa2V5KSA9PiAoc3RhdGUub25saW5lPy5yZW1hdGNoUmVxdWVzdHMgPz8gW10pLmluY2x1ZGVzKGtleSkpO1xuICB9XG5cbiAgaGFzT3Bwb25lbnRSZW1hdGNoUmVxdWVzdChzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSwgdWlkID0gdGhpcy5jdXJyZW50VWlkKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2lkZSA9IHRoaXMucGFydGljaXBhbnRTaWRlKHN0YXRlLCB1aWQpO1xuICAgIGlmICghc2lkZSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IG9wcG9uZW50ID0gdGhpcy5wYXJ0aWNpcGFudEZvclNpZGUoc3RhdGUsIHNpZGUgPT09ICd3aGl0ZScgPyAnYmxhY2snIDogJ3doaXRlJyk7XG4gICAgcmV0dXJuIHRoaXMucGFydGljaXBhbnRSZXF1ZXN0S2V5cyhvcHBvbmVudCkuc29tZSgoa2V5KSA9PiAoc3RhdGUub25saW5lPy5yZW1hdGNoUmVxdWVzdHMgPz8gW10pLmluY2x1ZGVzKGtleSkpO1xuICB9XG5cbiAgcGFydGljaXBhbnRLZXkocGFydGljaXBhbnQ/OiBDaGVzc2ltYWxzT25saW5lUGFydGljaXBhbnQpOiBzdHJpbmcge1xuICAgIHJldHVybiBwYXJ0aWNpcGFudD8uc2VhdEtleVxuICAgICAgfHwgdGhpcy5idWlsZFNlYXRLZXkocGFydGljaXBhbnQ/LnVpZCwgcGFydGljaXBhbnQ/LnByb2ZpbGVJZClcbiAgICAgIHx8IHBhcnRpY2lwYW50Py5wcm9maWxlSWRcbiAgICAgIHx8IHBhcnRpY2lwYW50Py5hY2NvdW50VXNlcklkXG4gICAgICB8fCBwYXJ0aWNpcGFudD8udWlkXG4gICAgICB8fCAnJztcbiAgfVxuXG4gIHNoYXJlVXJsKGdhbWVJZDogc3RyaW5nLCBiYXNlUm91dGUgPSAnL21pbmktZ2FtZXMnKTogc3RyaW5nIHtcbiAgICBjb25zdCBvcmlnaW4gPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/ICcnIDogd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICBjb25zdCBub3JtYWxpemVkQmFzZVJvdXRlID0gYC8ke2Jhc2VSb3V0ZS5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJykgfHwgJ21pbmktZ2FtZXMnfWA7XG4gICAgcmV0dXJuIGAke29yaWdpbn0ke25vcm1hbGl6ZWRCYXNlUm91dGV9L2NoZXNzaW1hbHMvJHtlbmNvZGVVUklDb21wb25lbnQodGhpcy5ub3JtYWxpemVHYW1lSWQoZ2FtZUlkKSl9YDtcbiAgfVxuXG4gIHByb2plY3Rpb25TaGFyZVVybChnYW1lSWQ6IHN0cmluZywgYmFzZVJvdXRlID0gJy9taW5pLWdhbWVzJyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuc2hhcmVVcmwoZ2FtZUlkLCBiYXNlUm91dGUpfS9wcm9qZWN0aW9uYDtcbiAgfVxuXG4gIGFzeW5jIHNhdmVDdXJyZW50VXNlckhpc3Rvcnkoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB1aWQgPSB0aGlzLmN1cnJlbnRVaWQ7XG4gICAgaWYgKCF1aWQgfHwgc3RhdGUubW9kZSAhPT0gJ29ubGluZScpIHJldHVybjtcbiAgICBjb25zdCBlbnRyeSA9IHRoaXMuY3JlYXRlSGlzdG9yeUVudHJ5KHN0YXRlLCB1aWQpO1xuICAgIGlmICghZW50cnkpIHJldHVybjtcbiAgICBhd2FpdCBzZXREb2ModGhpcy5oaXN0b3J5UmVmKHVpZCwgc3RhdGUuaWQpLCB0aGlzLndpdGhvdXRVbmRlZmluZWQoZW50cnkpLCB7IG1lcmdlOiB0cnVlIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnYW1lUmVmKGdhbWVJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRvYyh0aGlzLmZpcmVzdG9yZSwgYCR7Q09MTEVDVElPTl9QQVRIfS8ke2dhbWVJZH1gKTtcbiAgfVxuXG4gIHByaXZhdGUgaGlzdG9yeVBhdGgodWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgdXNlcnMvJHt1aWR9L21pbmlHYW1lcy9jaGVzc2ltYWxzL2hpc3RvcnlgO1xuICB9XG5cbiAgcHJpdmF0ZSBoaXN0b3J5UmVmKHVpZDogc3RyaW5nLCBnYW1lSWQ6IHN0cmluZykge1xuICAgIHJldHVybiBkb2ModGhpcy5maXJlc3RvcmUsIGAke3RoaXMuaGlzdG9yeVBhdGgodWlkKX0vJHtnYW1lSWR9YCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuc3VyZVVzZXIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhd2FpdCB0aGlzLmZpcmViYXNlLndoZW5GaXJlYmFzZUF1dGhSZWFkeSgpO1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmZpcmViYXNlQXV0aC5jdXJyZW50VXNlcjtcbiAgICBpZiAodXNlcj8udWlkKSB7XG4gICAgICBhd2FpdCB1c2VyLmdldElkVG9rZW4oKTtcbiAgICAgIHJldHVybiB1c2VyLnVpZDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDSEVTU0lNQUxTX0xPR0lOX1JFUVVJUkVEJyk7XG4gIH1cblxuICBwcml2YXRlIGRlY29kZUlucHV0KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVBhcnRpY2lwYW50KHVpZDogc3RyaW5nLCBqb2luZWRBdDogc3RyaW5nKTogQ2hlc3NpbWFsc09ubGluZVBhcnRpY2lwYW50IHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy5hdXRoLnVzZXIoKTtcbiAgICBjb25zdCBmaXJlYmFzZVVzZXIgPSB0aGlzLmZpcmViYXNlQXV0aC5jdXJyZW50VXNlcjtcbiAgICBjb25zdCBwcm9maWxlID0gdGhpcy5wcm9maWxlcy5hY3RpdmVQcm9maWxlKCk7XG4gICAgY29uc3QgaGFuZGxlID0gdGhpcy5ub3JtYWxpemVIYW5kbGUodXNlcj8uaGFuZGxlKTtcbiAgICBjb25zdCBhdmF0YXJVcmwgPSB1c2VyPy5hdmF0YXJVcmw/LnRyaW0oKSB8fCBmaXJlYmFzZVVzZXI/LnBob3RvVVJMPy50cmltKCkgfHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGVtYWlsID0gdXNlcj8uZW1haWw/LnRyaW0oKSB8fCBmaXJlYmFzZVVzZXI/LmVtYWlsPy50cmltKCkgfHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByb2ZpbGVJZCA9IHByb2ZpbGU/LmlkID8/IHVzZXI/LnVzZXJJZCA/PyB1aWQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdWlkLFxuICAgICAgYWNjb3VudFVzZXJJZDogdXNlcj8udXNlcklkLFxuICAgICAgcHJvZmlsZUlkLFxuICAgICAgc2VhdEtleTogdGhpcy5idWlsZFNlYXRLZXkodWlkLCBwcm9maWxlSWQpLFxuICAgICAgbmFtZTogdXNlcj8ubmFtZT8udHJpbSgpXG4gICAgICAgIHx8IGZpcmViYXNlVXNlcj8uZGlzcGxheU5hbWU/LnRyaW0oKVxuICAgICAgICB8fCBlbWFpbFxuICAgICAgICB8fCB0aGlzLnByb2ZpbGVzLmRpc3BsYXlOYW1lKHByb2ZpbGUsICdKdWdhZG9yJyksXG4gICAgICBoYW5kbGUsXG4gICAgICBlbWFpbCxcbiAgICAgIGF2YXRhcjogcHJvZmlsZT8uYXZhdGFyID8/ICfimZ/vuI8nLFxuICAgICAgYXZhdGFyVXJsLFxuICAgICAgY29sb3I6IHByb2ZpbGU/LmNvbG9yID8/ICcjZmYwMGIyJyxcbiAgICAgIGpvaW5lZEF0LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZUhhbmRsZShoYW5kbGU/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHRyaW1tZWQgPSBoYW5kbGU/LnRyaW0oKTtcbiAgICBpZiAoIXRyaW1tZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRyaW1tZWQuc3RhcnRzV2l0aCgnQCcpID8gdHJpbW1lZCA6IGBAJHt0cmltbWVkfWA7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VhdEtleSh1aWQ/OiBzdHJpbmcsIHByb2ZpbGVJZD86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFVpZCA9IHVpZD8udHJpbSgpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRQcm9maWxlSWQgPSBwcm9maWxlSWQ/LnRyaW0oKTtcbiAgICBpZiAoIW5vcm1hbGl6ZWRVaWQgfHwgIW5vcm1hbGl6ZWRQcm9maWxlSWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGAke25vcm1hbGl6ZWRVaWR9OiR7bm9ybWFsaXplZFByb2ZpbGVJZH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBjdXJyZW50U2VhdEtleSh1aWQgPSB0aGlzLmN1cnJlbnRVaWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkU2VhdEtleSh1aWQsIHRoaXMucHJvZmlsZXMuYWN0aXZlUHJvZmlsZSgpPy5pZCk7XG4gIH1cblxuICBwcml2YXRlIHBhcnRpY2lwYW50Rm9yU2lkZShcbiAgICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgICBzaWRlPzogQ2hlc3NpbWFsc1BsYXllckNvbG9yLFxuICApOiBDaGVzc2ltYWxzT25saW5lUGFydGljaXBhbnQgfCB1bmRlZmluZWQge1xuICAgIGlmICghc2lkZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc3RhdGUub25saW5lPy5wYXJ0aWNpcGFudHM/LltzaWRlXTtcbiAgfVxuXG4gIHByaXZhdGUgcGFydGljaXBhbnRFbnRyaWVzKHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlKTogW0NoZXNzaW1hbHNQbGF5ZXJDb2xvciwgQ2hlc3NpbWFsc09ubGluZVBhcnRpY2lwYW50XVtdIHtcbiAgICBjb25zdCBwYXJ0aWNpcGFudHMgPSBzdGF0ZS5vbmxpbmU/LnBhcnRpY2lwYW50cztcbiAgICByZXR1cm4gKFsnd2hpdGUnLCAnYmxhY2snXSBhcyBDaGVzc2ltYWxzUGxheWVyQ29sb3JbXSlcbiAgICAgIC5tYXAoKHNpZGUpID0+IFtzaWRlLCBwYXJ0aWNpcGFudHM/LltzaWRlXV0gYXMgW0NoZXNzaW1hbHNQbGF5ZXJDb2xvciwgQ2hlc3NpbWFsc09ubGluZVBhcnRpY2lwYW50IHwgdW5kZWZpbmVkXSlcbiAgICAgIC5maWx0ZXIoKGVudHJ5KTogZW50cnkgaXMgW0NoZXNzaW1hbHNQbGF5ZXJDb2xvciwgQ2hlc3NpbWFsc09ubGluZVBhcnRpY2lwYW50XSA9PiAhIWVudHJ5WzFdKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFydGljaXBhbnRSZXF1ZXN0S2V5cyhwYXJ0aWNpcGFudD86IENoZXNzaW1hbHNPbmxpbmVQYXJ0aWNpcGFudCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXBhcnRpY2lwYW50KSByZXR1cm4gW107XG4gICAgY29uc3Qga2V5cyA9IFtcbiAgICAgIHRoaXMucGFydGljaXBhbnRLZXkocGFydGljaXBhbnQpLFxuICAgICAgcGFydGljaXBhbnQudWlkLFxuICAgICAgcGFydGljaXBhbnQuYWNjb3VudFVzZXJJZCxcbiAgICAgIHBhcnRpY2lwYW50LnByb2ZpbGVJZCxcbiAgICBdO1xuICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoa2V5cy5maWx0ZXIoKGtleSk6IGtleSBpcyBzdHJpbmcgPT4gISFrZXkpKSk7XG4gIH1cblxuICBwcml2YXRlIG1hdGNoZXNDdXJyZW50UGFydGljaXBhbnQocGFydGljaXBhbnQ/OiBDaGVzc2ltYWxzT25saW5lUGFydGljaXBhbnQsIHVpZCA9IHRoaXMuY3VycmVudFVpZCk6IGJvb2xlYW4ge1xuICAgIGlmICghcGFydGljaXBhbnQpIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IHNlYXRLZXkgPSB0aGlzLmN1cnJlbnRTZWF0S2V5KHVpZCk7XG4gICAgaWYgKHNlYXRLZXkgJiYgdGhpcy5wYXJ0aWNpcGFudEtleShwYXJ0aWNpcGFudCkgPT09IHNlYXRLZXkpIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgcHJvZmlsZSA9IHRoaXMucHJvZmlsZXMuYWN0aXZlUHJvZmlsZSgpO1xuICAgIGlmICh1aWQgJiYgcHJvZmlsZSkge1xuICAgICAgcmV0dXJuIHBhcnRpY2lwYW50LnVpZCA9PT0gdWlkXG4gICAgICAgICYmIHBhcnRpY2lwYW50LmF2YXRhciA9PT0gcHJvZmlsZS5hdmF0YXJcbiAgICAgICAgJiYgdGhpcy5ub3JtYWxpemVDb2xvcihwYXJ0aWNpcGFudC5jb2xvcikgPT09IHRoaXMubm9ybWFsaXplQ29sb3IocHJvZmlsZS5jb2xvcik7XG4gICAgfVxuXG4gICAgaWYgKHVpZCAmJiBwYXJ0aWNpcGFudC51aWQgPT09IHVpZCkgcmV0dXJuIHRydWU7XG4gICAgY29uc3QgYWNjb3VudFVzZXJJZCA9IHRoaXMuYXV0aC51c2VyKCk/LnVzZXJJZDtcbiAgICByZXR1cm4gISFhY2NvdW50VXNlcklkICYmIHBhcnRpY2lwYW50LmFjY291bnRVc2VySWQgPT09IGFjY291bnRVc2VySWQ7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZUNvbG9yKGNvbG9yPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKGNvbG9yID8/ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgd2l0aFVwZGF0ZWRBdChzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSwgZGF0ZSA9IG5ldyBEYXRlKCkpOiBDaGVzc2ltYWxzR2FtZVN0YXRlIHtcbiAgICBpZiAoIXN0YXRlLm9ubGluZSkgcmV0dXJuIHN0YXRlO1xuICAgIHJldHVybiB7IC4uLnN0YXRlLCBvbmxpbmU6IHsgLi4uc3RhdGUub25saW5lLCB1cGRhdGVkQXQ6IGRhdGUudG9JU09TdHJpbmcoKSB9IH07XG4gIH1cblxuICBwcml2YXRlIHdpdGhNb3ZlTG9nKHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLCBlbnRyeTogQ2hlc3NpbWFsc01vdmVMb2dFbnRyeSwgZGF0ZSA9IG5ldyBEYXRlKCkpOiBDaGVzc2ltYWxzR2FtZVN0YXRlIHtcbiAgICBpZiAoIXN0YXRlLm9ubGluZSkgcmV0dXJuIHRoaXMud2l0aFVwZGF0ZWRBdChzdGF0ZSwgZGF0ZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgb25saW5lOiB7XG4gICAgICAgIC4uLnN0YXRlLm9ubGluZSxcbiAgICAgICAgdXBkYXRlZEF0OiBkYXRlLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIG1vdmVMb2c6IFsuLi4oc3RhdGUub25saW5lLm1vdmVMb2cgPz8gW10pLCBlbnRyeV0uc2xpY2UoLTgwKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTW92ZUxvZ0VudHJ5KGFyZ3M6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHVpZDogc3RyaW5nO1xuICAgIHNpZGU/OiBDaGVzc2ltYWxzUGxheWVyQ29sb3I7XG4gICAgc3RhdHVzOiBDaGVzc2ltYWxzTW92ZUxvZ0VudHJ5WydzdGF0dXMnXTtcbiAgICBjb2RlPzogc3RyaW5nO1xuICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgbW92ZTogQ2hlc3NpbWFsc01vdmU7XG4gICAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGU7XG4gICAgdXBkYXRlZD86IENoZXNzaW1hbHNHYW1lU3RhdGU7XG4gIH0pOiBDaGVzc2ltYWxzTW92ZUxvZ0VudHJ5IHtcbiAgICBjb25zdCBwYXJ0aWNpcGFudCA9IHRoaXMucGFydGljaXBhbnRGb3JTaWRlKGFyZ3Muc3RhdGUsIGFyZ3Muc2lkZSk7XG4gICAgcmV0dXJuIHRoaXMud2l0aG91dFVuZGVmaW5lZCh7XG4gICAgICBpZDogYXJncy5pZCxcbiAgICAgIGF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB1aWQ6IGFyZ3MudWlkLFxuICAgICAgcHJvZmlsZUlkOiBwYXJ0aWNpcGFudD8ucHJvZmlsZUlkLFxuICAgICAgc2VhdEtleTogdGhpcy5wYXJ0aWNpcGFudEtleShwYXJ0aWNpcGFudCkgfHwgdW5kZWZpbmVkLFxuICAgICAgc2lkZTogYXJncy5zaWRlLFxuICAgICAgc3RhdHVzOiBhcmdzLnN0YXR1cyxcbiAgICAgIGNvZGU6IGFyZ3MuY29kZSxcbiAgICAgIG1lc3NhZ2U6IGFyZ3MubWVzc2FnZSxcbiAgICAgIG1vdmU6IHRoaXMuc2FuaXRpemVNb3ZlKGFyZ3MubW92ZSksXG4gICAgICBtb3ZlQ291bnRCZWZvcmU6IGFyZ3Muc3RhdGUubW92ZUNvdW50LFxuICAgICAgbW92ZUNvdW50QWZ0ZXI6IGFyZ3MudXBkYXRlZD8ubW92ZUNvdW50LFxuICAgICAgY3VycmVudFR1cm5CZWZvcmU6IGFyZ3Muc3RhdGUuY3VycmVudFR1cm4sXG4gICAgfSkgYXMgQ2hlc3NpbWFsc01vdmVMb2dFbnRyeTtcbiAgfVxuXG4gIHByaXZhdGUgc2FuaXRpemVNb3ZlKG1vdmU6IENoZXNzaW1hbHNNb3ZlKTogQ2hlc3NpbWFsc01vdmUge1xuICAgIHJldHVybiB0aGlzLndpdGhvdXRVbmRlZmluZWQoe1xuICAgICAgcGllY2VJZDogbW92ZS5waWVjZUlkLFxuICAgICAgZnJvbTogeyAuLi5tb3ZlLmZyb20gfSxcbiAgICAgIHRvOiB7IC4uLm1vdmUudG8gfSxcbiAgICAgIGtpbmQ6IG1vdmUua2luZCxcbiAgICAgIGFuaW1hbDogbW92ZS5hbmltYWwsXG4gICAgICBjYXB0dXJlc1BpZWNlSWQ6IG1vdmUuY2FwdHVyZXNQaWVjZUlkLFxuICAgIH0pIGFzIENoZXNzaW1hbHNNb3ZlO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVIaXN0b3J5RW50cnkoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsIHVpZDogc3RyaW5nKTogQ2hlc3NpbWFsc0hpc3RvcnlFbnRyeSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFzdGF0ZS5vbmxpbmUpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBzaWRlID0gdGhpcy5wYXJ0aWNpcGFudFNpZGUoc3RhdGUsIHVpZCk7XG4gICAgY29uc3QgaXNMb2JieUhvc3QgPSB0aGlzLmlzSG9zdFdhaXRpbmcoc3RhdGUsIHVpZCk7XG4gICAgY29uc3QgaXNQZW5kaW5nR3Vlc3QgPSB0aGlzLmlzUGVuZGluZ0d1ZXN0KHN0YXRlLCB1aWQpO1xuICAgIGlmICghc2lkZSAmJiAhaXNMb2JieUhvc3QgJiYgIWlzUGVuZGluZ0d1ZXN0KSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgY29uc3Qgb3Bwb25lbnQgPSBzaWRlXG4gICAgICA/IHNpZGUgPT09ICd3aGl0ZSdcbiAgICAgICAgPyBzdGF0ZS5vbmxpbmUucGFydGljaXBhbnRzPy5ibGFja1xuICAgICAgICA6IHN0YXRlLm9ubGluZS5wYXJ0aWNpcGFudHM/LndoaXRlXG4gICAgICA6IGlzTG9iYnlIb3N0XG4gICAgICAgID8gc3RhdGUub25saW5lLnBlbmRpbmdHdWVzdFxuICAgICAgICA6IHN0YXRlLm9ubGluZS5sb2JieTtcblxuICAgIHJldHVybiB7XG4gICAgICBnYW1lSWQ6IHN0YXRlLmlkLFxuICAgICAgbW9kZTogJ29ubGluZScsXG4gICAgICBib2FyZFNpemU6IHN0YXRlLmJvYXJkU2l6ZSxcbiAgICAgIHN0YXR1czogc3RhdGUuc3RhdHVzLFxuICAgICAgb3V0Y29tZTogdGhpcy5oaXN0b3J5T3V0Y29tZShzdGF0ZSwgdWlkLCBzaWRlLCBpc1BlbmRpbmdHdWVzdCksXG4gICAgICBzaWRlLFxuICAgICAgb3Bwb25lbnRVaWQ6IG9wcG9uZW50Py51aWQsXG4gICAgICBvcHBvbmVudE5hbWU6IG9wcG9uZW50Py5uYW1lLFxuICAgICAgd2lubmVyOiBzdGF0ZS53aW5uZXIsXG4gICAgICB3aW5uZXJSZWFzb246IHN0YXRlLndpbm5lclJlYXNvbixcbiAgICAgIG1vdmVDb3VudDogc3RhdGUubW92ZUNvdW50LFxuICAgICAgcm91bmQ6IHN0YXRlLm9ubGluZS5yb3VuZCxcbiAgICAgIGNyZWF0ZWRBdDogc3RhdGUub25saW5lLmNyZWF0ZWRBdCxcbiAgICAgIHVwZGF0ZWRBdDogc3RhdGUub25saW5lLnVwZGF0ZWRBdCxcbiAgICAgIGZpbmlzaGVkQXQ6IHN0YXRlLnN0YXR1cyA9PT0gJ2ZpbmlzaGVkJyA/IHN0YXRlLm9ubGluZS51cGRhdGVkQXQgOiB1bmRlZmluZWQsXG4gICAgICBleHBpcmVzQXQ6IHN0YXRlLm9ubGluZS5leHBpcmVzQXQsXG4gICAgICByZW1hdGNoT2Y6IHN0YXRlLm9ubGluZS5yZW1hdGNoT2YsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgd2l0aG91dFVuZGVmaW5lZDxUIGV4dGVuZHMgb2JqZWN0Pih2YWx1ZTogVCk6IFBhcnRpYWw8VD4ge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuZmlsdGVyKChbLCBlbnRyeV0pID0+IGVudHJ5ICE9PSB1bmRlZmluZWQpLFxuICAgICkgYXMgUGFydGlhbDxUPjtcbiAgfVxuXG4gIHByaXZhdGUgaGlzdG9yeU91dGNvbWUoXG4gICAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gICAgdWlkOiBzdHJpbmcsXG4gICAgc2lkZTogQ2hlc3NpbWFsc1BsYXllckNvbG9yIHwgdW5kZWZpbmVkLFxuICAgIGlzUGVuZGluZ0d1ZXN0OiBib29sZWFuLFxuICApOiBDaGVzc2ltYWxzSGlzdG9yeUVudHJ5WydvdXRjb21lJ10ge1xuICAgIGlmIChzdGF0ZS5zdGF0dXMgPT09ICdmaW5pc2hlZCcgJiYgc2lkZSAmJiBzdGF0ZS53aW5uZXIpIHJldHVybiBzdGF0ZS53aW5uZXIgPT09IHNpZGUgPyAnd29uJyA6ICdsb3N0JztcbiAgICBpZiAoc3RhdGUuc3RhdHVzID09PSAnaW5fcHJvZ3Jlc3MnKSByZXR1cm4gJ2luX3Byb2dyZXNzJztcbiAgICBpZiAoaXNQZW5kaW5nR3Vlc3QpIHJldHVybiAncGVuZGluZyc7XG4gICAgcmV0dXJuICd3YWl0aW5nJztcbiAgfVxuXG4gIHByaXZhdGUgYXNzZXJ0Tm90RXhwaXJlZChzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSk6IHZvaWQge1xuICAgIGlmICgoc3RhdGUub25saW5lPy5leHBpcmVzQXRNcyA/PyAwKSA8IERhdGUubm93KCkpIHRocm93IG5ldyBFcnJvcignQ0hFU1NJTUFMU19HQU1FX0VYUElSRUQnKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlR2FtZUlkKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYWxwaGFiZXQgPSAnQUJDREVGR0hKS0xNTlBRUlNUVVZXWFlaMjM0NTY3ODknO1xuICAgIGNvbnN0IG1ha2VQYXJ0ID0gKCk6IHN0cmluZyA9PiBBcnJheS5mcm9tKHsgbGVuZ3RoOiA0IH0sICgpID0+IGFscGhhYmV0W3RoaXMucmFuZG9tSW5kZXgoYWxwaGFiZXQubGVuZ3RoKV0pLmpvaW4oJycpO1xuICAgIHJldHVybiBgJHttYWtlUGFydCgpfS0ke21ha2VQYXJ0KCl9YDtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT3BlcmF0aW9uSWQoKTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgJ3JhbmRvbVVVSUQnIGluIGNyeXB0bykgcmV0dXJuIGNyeXB0by5yYW5kb21VVUlEKCk7XG4gICAgcmV0dXJuIGAke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKX1gO1xuICB9XG5cbiAgcHJpdmF0ZSByYW5kb21JbmRleChtYXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IG5ldyBVaW50MzJBcnJheSgxKTtcbiAgICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXModmFsdWVzKTtcbiAgICAgIHJldHVybiB2YWx1ZXNbMF0gJSBtYXg7XG4gICAgfVxuICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBtYXgpO1xuICB9XG5cbn1cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL21pbmktZ2FtZXMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIE1pbmlHYW1lU3RhdHVzID0gJ2F2YWlsYWJsZScgfCAnc29vbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWluaUdhbWVEZWZpbml0aW9uIHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgaWNvbjogc3RyaW5nO1xuICByb3V0ZT86IHN0cmluZztcbiAgc3RhdHVzPzogTWluaUdhbWVTdGF0dXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWluaUdhbWVQbGF5ZXJQcm9maWxlIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBhdmF0YXI6IHN0cmluZztcbiAgY29sb3I6IHN0cmluZztcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIHVwZGF0ZWRBdDogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBNZW1vcnlHYW1lRGlmZmljdWx0eSA9ICdlYXN5JyB8ICdtZWRpdW0nIHwgJ2hhcmQnO1xuXG5leHBvcnQgdHlwZSBNZW1vcnlHYW1lTW9kZSA9ICdjbGFzc2ljJyB8ICdyZWxheGVkJyB8ICd0aW1lZCc7XG5cbmV4cG9ydCB0eXBlIE1lbW9yeUdhbWVQcm9maWxlID0gJ2tpZCcgfCAnY2xhc3NpYycgfCAnbmluamEnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1lbW9yeUdhbWVDYXJkIHtcbiAgaWQ6IHN0cmluZztcbiAgc3ltYm9sOiBzdHJpbmc7XG4gIG1hdGNoZWQ6IGJvb2xlYW47XG4gIGZsaXBwZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFNpbW9uR2FtZU1vZGUgPSAna2lkJyB8ICdjbGFzc2ljJyB8ICduaW5qYSc7XG5cbmV4cG9ydCB0eXBlIFNpbW9uR2FtZVBoYXNlID0gJ2hvbWUnIHwgJ3Nob3dpbmcnIHwgJ3dhaXRpbmcnIHwgJ3N1Y2Nlc3MnIHwgJ2ZhaWxlZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2ltb25QYWQge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBjb2xvcjogc3RyaW5nO1xuICB0b25lOiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIENoZXNzaW1hbHNCb2FyZFNpemUgPSA2IHwgODtcbmV4cG9ydCB0eXBlIENoZXNzaW1hbHNQbGF5ZXJDb2xvciA9ICd3aGl0ZScgfCAnYmxhY2snO1xuZXhwb3J0IHR5cGUgQ2hlc3NpbWFsc0FuaW1hbFR5cGUgPSAnZWFnbGUnIHwgJ2J1bGwnIHwgJ2thbmdhcm9vJyB8ICdsaW9uJztcbmV4cG9ydCB0eXBlIENoZXNzaW1hbHNNb3ZlS2luZCA9ICdiYXNpYycgfCAncG93ZXInO1xuZXhwb3J0IHR5cGUgQ2hlc3NpbWFsc1dpblJlYXNvbiA9ICdwcm9tb3Rpb24nIHwgJ2VsaW1pbmF0aW9uJyB8ICdyZXNpZ25hdGlvbic7XG5leHBvcnQgdHlwZSBDaGVzc2ltYWxzR2FtZU1vZGUgPSAnbG9jYWwnIHwgJ29ubGluZSc7XG5leHBvcnQgdHlwZSBDaGVzc2ltYWxzTG9jYWxNb2RlID0gJ29uZS1kZXZpY2UnIHwgJ2JvdCc7XG5leHBvcnQgdHlwZSBDaGVzc2ltYWxzQm90RGlmZmljdWx0eSA9ICdlYXN5JyB8ICdub3JtYWwnIHwgJ2hhcmQnO1xuZXhwb3J0IHR5cGUgQ2hlc3NpbWFsc0dhbWVTdGF0dXMgPSAnd2FpdGluZycgfCAnaW5fcHJvZ3Jlc3MnIHwgJ2ZpbmlzaGVkJyB8ICdleHBpcmVkJztcblxuZXhwb3J0IGludGVyZmFjZSBDaGVzc2ltYWxzUG9zaXRpb24ge1xuICByb3c6IG51bWJlcjtcbiAgY29sOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlc3NpbWFsc1BpZWNlIHtcbiAgaWQ6IHN0cmluZztcbiAgY29sb3I6IENoZXNzaW1hbHNQbGF5ZXJDb2xvcjtcbiAgcG9zaXRpb246IENoZXNzaW1hbHNQb3NpdGlvbjtcbiAgY2FwdHVyZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlc3NpbWFsc1Bvd2VyQ2FyZCB7XG4gIHR5cGU6IENoZXNzaW1hbHNBbmltYWxUeXBlO1xuICB1c2VkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoZXNzaW1hbHNQbGF5ZXJTdGF0ZSB7XG4gIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3I7XG4gIHBvd2VyVW5sb2NrZWQ6IGJvb2xlYW47XG4gIGNhcmRzOiBSZWNvcmQ8Q2hlc3NpbWFsc0FuaW1hbFR5cGUsIENoZXNzaW1hbHNQb3dlckNhcmQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoZXNzaW1hbHNNb3ZlIHtcbiAgcGllY2VJZDogc3RyaW5nO1xuICBmcm9tOiBDaGVzc2ltYWxzUG9zaXRpb247XG4gIHRvOiBDaGVzc2ltYWxzUG9zaXRpb247XG4gIGtpbmQ6IENoZXNzaW1hbHNNb3ZlS2luZDtcbiAgYW5pbWFsPzogQ2hlc3NpbWFsc0FuaW1hbFR5cGU7XG4gIGNhcHR1cmVzUGllY2VJZD86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQ2hlc3NpbWFsc01vdmVMb2dTdGF0dXMgPSAnYWNjZXB0ZWQnIHwgJ3JlamVjdGVkJztcblxuZXhwb3J0IGludGVyZmFjZSBDaGVzc2ltYWxzTW92ZUxvZ0VudHJ5IHtcbiAgaWQ6IHN0cmluZztcbiAgYXQ6IHN0cmluZztcbiAgdWlkOiBzdHJpbmc7XG4gIHNpZGU/OiBDaGVzc2ltYWxzUGxheWVyQ29sb3I7XG4gIHN0YXR1czogQ2hlc3NpbWFsc01vdmVMb2dTdGF0dXM7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIG1vdmU6IENoZXNzaW1hbHNNb3ZlO1xuICBtb3ZlQ291bnRCZWZvcmU6IG51bWJlcjtcbiAgbW92ZUNvdW50QWZ0ZXI/OiBudW1iZXI7XG4gIGN1cnJlbnRUdXJuQmVmb3JlOiBDaGVzc2ltYWxzUGxheWVyQ29sb3I7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlc3NpbWFsc09ubGluZVBhcnRpY2lwYW50IHtcbiAgdWlkOiBzdHJpbmc7XG4gIHByb2ZpbGVJZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGF2YXRhcjogc3RyaW5nO1xuICBjb2xvcjogc3RyaW5nO1xuICBzaWRlPzogQ2hlc3NpbWFsc1BsYXllckNvbG9yO1xuICBqb2luZWRBdDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoZXNzaW1hbHNPbmxpbmVTdGF0ZSB7XG4gIGdhbWVJZDogc3RyaW5nO1xuICBob3N0VWlkOiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbiAgZXhwaXJlc0F0OiBzdHJpbmc7XG4gIGV4cGlyZXNBdE1zOiBudW1iZXI7XG4gIHJvdW5kOiBudW1iZXI7XG4gIHJlbWF0Y2hPZj86IHN0cmluZztcbiAgbG9iYnk/OiBDaGVzc2ltYWxzT25saW5lUGFydGljaXBhbnQ7XG4gIHBlbmRpbmdHdWVzdD86IENoZXNzaW1hbHNPbmxpbmVQYXJ0aWNpcGFudDtcbiAgcGFydGljaXBhbnRzPzogUGFydGlhbDxSZWNvcmQ8Q2hlc3NpbWFsc1BsYXllckNvbG9yLCBDaGVzc2ltYWxzT25saW5lUGFydGljaXBhbnQ+PjtcbiAgcmVtYXRjaFJlcXVlc3RzPzogc3RyaW5nW107XG4gIG1vdmVMb2c/OiBDaGVzc2ltYWxzTW92ZUxvZ0VudHJ5W107XG59XG5cbmV4cG9ydCB0eXBlIENoZXNzaW1hbHNIaXN0b3J5T3V0Y29tZSA9ICd3YWl0aW5nJyB8ICdwZW5kaW5nJyB8ICdpbl9wcm9ncmVzcycgfCAnd29uJyB8ICdsb3N0JyB8ICdkZWNsaW5lZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlc3NpbWFsc0hpc3RvcnlFbnRyeSB7XG4gIGdhbWVJZDogc3RyaW5nO1xuICBtb2RlOiAnb25saW5lJztcbiAgYm9hcmRTaXplOiBDaGVzc2ltYWxzQm9hcmRTaXplO1xuICBzdGF0dXM6IENoZXNzaW1hbHNHYW1lU3RhdHVzO1xuICBvdXRjb21lOiBDaGVzc2ltYWxzSGlzdG9yeU91dGNvbWU7XG4gIHNpZGU/OiBDaGVzc2ltYWxzUGxheWVyQ29sb3I7XG4gIG9wcG9uZW50VWlkPzogc3RyaW5nO1xuICBvcHBvbmVudE5hbWU/OiBzdHJpbmc7XG4gIHdpbm5lcj86IENoZXNzaW1hbHNQbGF5ZXJDb2xvcjtcbiAgd2lubmVyUmVhc29uPzogQ2hlc3NpbWFsc1dpblJlYXNvbjtcbiAgbW92ZUNvdW50OiBudW1iZXI7XG4gIHJvdW5kOiBudW1iZXI7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbiAgZmluaXNoZWRBdD86IHN0cmluZztcbiAgZXhwaXJlc0F0Pzogc3RyaW5nO1xuICByZW1hdGNoT2Y/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlc3NpbWFsc0dhbWVTdGF0ZSB7XG4gIGlkOiBzdHJpbmc7XG4gIG1vZGU6IENoZXNzaW1hbHNHYW1lTW9kZTtcbiAgYm9hcmRTaXplOiBDaGVzc2ltYWxzQm9hcmRTaXplO1xuICBzdGF0dXM6IENoZXNzaW1hbHNHYW1lU3RhdHVzO1xuICBjdXJyZW50VHVybjogQ2hlc3NpbWFsc1BsYXllckNvbG9yO1xuICBwaWVjZXM6IENoZXNzaW1hbHNQaWVjZVtdO1xuICBwbGF5ZXJzOiBSZWNvcmQ8Q2hlc3NpbWFsc1BsYXllckNvbG9yLCBDaGVzc2ltYWxzUGxheWVyU3RhdGU+O1xuICB3aW5uZXI/OiBDaGVzc2ltYWxzUGxheWVyQ29sb3I7XG4gIHdpbm5lclJlYXNvbj86IENoZXNzaW1hbHNXaW5SZWFzb247XG4gIG1vdmVDb3VudDogbnVtYmVyO1xuICBsYXN0TW92ZT86IENoZXNzaW1hbHNNb3ZlO1xuICBvbmxpbmU/OiBDaGVzc2ltYWxzT25saW5lU3RhdGU7XG59XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL21pbmktZ2FtZXMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIE1pbmlHYW1lU3RhdHVzID0gJ2F2YWlsYWJsZScgfCAnc29vbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWluaUdhbWVEZWZpbml0aW9uIHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgaWNvbjogc3RyaW5nO1xuICByb3V0ZT86IHN0cmluZztcbiAgc3RhdHVzPzogTWluaUdhbWVTdGF0dXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWluaUdhbWVQbGF5ZXJQcm9maWxlIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBhdmF0YXI6IHN0cmluZztcbiAgY29sb3I6IHN0cmluZztcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIHVwZGF0ZWRBdDogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBNZW1vcnlHYW1lRGlmZmljdWx0eSA9ICdlYXN5JyB8ICdtZWRpdW0nIHwgJ2hhcmQnO1xuXG5leHBvcnQgdHlwZSBNZW1vcnlHYW1lTW9kZSA9ICdjbGFzc2ljJyB8ICdyZWxheGVkJyB8ICd0aW1lZCc7XG5cbmV4cG9ydCB0eXBlIE1lbW9yeUdhbWVQcm9maWxlID0gJ2tpZCcgfCAnY2xhc3NpYycgfCAnbmluamEnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1lbW9yeUdhbWVDYXJkIHtcbiAgaWQ6IHN0cmluZztcbiAgc3ltYm9sOiBzdHJpbmc7XG4gIG1hdGNoZWQ6IGJvb2xlYW47XG4gIGZsaXBwZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFNpbW9uR2FtZU1vZGUgPSAna2lkJyB8ICdjbGFzc2ljJyB8ICduaW5qYSc7XG5cbmV4cG9ydCB0eXBlIFNpbW9uR2FtZVBoYXNlID0gJ2hvbWUnIHwgJ3Nob3dpbmcnIHwgJ3dhaXRpbmcnIHwgJ3N1Y2Nlc3MnIHwgJ2ZhaWxlZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2ltb25QYWQge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBjb2xvcjogc3RyaW5nO1xuICB0b25lOiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIENoZXNzaW1hbHNCb2FyZFNpemUgPSA2IHwgODtcbmV4cG9ydCB0eXBlIENoZXNzaW1hbHNQbGF5ZXJDb2xvciA9ICd3aGl0ZScgfCAnYmxhY2snO1xuZXhwb3J0IHR5cGUgQ2hlc3NpbWFsc0FuaW1hbFR5cGUgPSAnZWFnbGUnIHwgJ2J1bGwnIHwgJ2thbmdhcm9vJyB8ICdsaW9uJztcbmV4cG9ydCB0eXBlIENoZXNzaW1hbHNNb3ZlS2luZCA9ICdiYXNpYycgfCAncG93ZXInO1xuZXhwb3J0IHR5cGUgQ2hlc3NpbWFsc1dpblJlYXNvbiA9ICdwcm9tb3Rpb24nIHwgJ2VsaW1pbmF0aW9uJyB8ICdyZXNpZ25hdGlvbic7XG5leHBvcnQgdHlwZSBDaGVzc2ltYWxzR2FtZU1vZGUgPSAnbG9jYWwnIHwgJ29ubGluZSc7XG5leHBvcnQgdHlwZSBDaGVzc2ltYWxzTG9jYWxNb2RlID0gJ29uZS1kZXZpY2UnIHwgJ2JvdCc7XG5leHBvcnQgdHlwZSBDaGVzc2ltYWxzQm90RGlmZmljdWx0eSA9ICdlYXN5JyB8ICdub3JtYWwnIHwgJ2hhcmQnO1xuZXhwb3J0IHR5cGUgQ2hlc3NpbWFsc0dhbWVTdGF0dXMgPSAnd2FpdGluZycgfCAnaW5fcHJvZ3Jlc3MnIHwgJ2ZpbmlzaGVkJyB8ICdleHBpcmVkJztcblxuZXhwb3J0IGludGVyZmFjZSBDaGVzc2ltYWxzUG9zaXRpb24ge1xuICByb3c6IG51bWJlcjtcbiAgY29sOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlc3NpbWFsc1BpZWNlIHtcbiAgaWQ6IHN0cmluZztcbiAgY29sb3I6IENoZXNzaW1hbHNQbGF5ZXJDb2xvcjtcbiAgcG9zaXRpb246IENoZXNzaW1hbHNQb3NpdGlvbjtcbiAgY2FwdHVyZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlc3NpbWFsc1Bvd2VyQ2FyZCB7XG4gIHR5cGU6IENoZXNzaW1hbHNBbmltYWxUeXBlO1xuICB1c2VkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoZXNzaW1hbHNQbGF5ZXJTdGF0ZSB7XG4gIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3I7XG4gIHBvd2VyVW5sb2NrZWQ6IGJvb2xlYW47XG4gIGNhcmRzOiBSZWNvcmQ8Q2hlc3NpbWFsc0FuaW1hbFR5cGUsIENoZXNzaW1hbHNQb3dlckNhcmQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoZXNzaW1hbHNNb3ZlIHtcbiAgcGllY2VJZDogc3RyaW5nO1xuICBmcm9tOiBDaGVzc2ltYWxzUG9zaXRpb247XG4gIHRvOiBDaGVzc2ltYWxzUG9zaXRpb247XG4gIGtpbmQ6IENoZXNzaW1hbHNNb3ZlS2luZDtcbiAgYW5pbWFsPzogQ2hlc3NpbWFsc0FuaW1hbFR5cGU7XG4gIGNhcHR1cmVzUGllY2VJZD86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQ2hlc3NpbWFsc01vdmVMb2dTdGF0dXMgPSAnYWNjZXB0ZWQnIHwgJ3JlamVjdGVkJztcblxuZXhwb3J0IGludGVyZmFjZSBDaGVzc2ltYWxzTW92ZUxvZ0VudHJ5IHtcbiAgaWQ6IHN0cmluZztcbiAgYXQ6IHN0cmluZztcbiAgdWlkOiBzdHJpbmc7XG4gIHByb2ZpbGVJZD86IHN0cmluZztcbiAgc2VhdEtleT86IHN0cmluZztcbiAgc2lkZT86IENoZXNzaW1hbHNQbGF5ZXJDb2xvcjtcbiAgc3RhdHVzOiBDaGVzc2ltYWxzTW92ZUxvZ1N0YXR1cztcbiAgY29kZT86IHN0cmluZztcbiAgbWVzc2FnZT86IHN0cmluZztcbiAgbW92ZTogQ2hlc3NpbWFsc01vdmU7XG4gIG1vdmVDb3VudEJlZm9yZTogbnVtYmVyO1xuICBtb3ZlQ291bnRBZnRlcj86IG51bWJlcjtcbiAgY3VycmVudFR1cm5CZWZvcmU6IENoZXNzaW1hbHNQbGF5ZXJDb2xvcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGVzc2ltYWxzT25saW5lUGFydGljaXBhbnQge1xuICB1aWQ6IHN0cmluZztcbiAgYWNjb3VudFVzZXJJZD86IHN0cmluZztcbiAgcHJvZmlsZUlkOiBzdHJpbmc7XG4gIHNlYXRLZXk/OiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgaGFuZGxlPzogc3RyaW5nO1xuICBlbWFpbD86IHN0cmluZztcbiAgYXZhdGFyOiBzdHJpbmc7XG4gIGF2YXRhclVybD86IHN0cmluZztcbiAgY29sb3I6IHN0cmluZztcbiAgc2lkZT86IENoZXNzaW1hbHNQbGF5ZXJDb2xvcjtcbiAgam9pbmVkQXQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGVzc2ltYWxzT25saW5lU3RhdGUge1xuICBnYW1lSWQ6IHN0cmluZztcbiAgaG9zdFVpZDogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgdXBkYXRlZEF0OiBzdHJpbmc7XG4gIGV4cGlyZXNBdDogc3RyaW5nO1xuICBleHBpcmVzQXRNczogbnVtYmVyO1xuICByb3VuZDogbnVtYmVyO1xuICByZW1hdGNoT2Y/OiBzdHJpbmc7XG4gIGxvYmJ5PzogQ2hlc3NpbWFsc09ubGluZVBhcnRpY2lwYW50O1xuICBwZW5kaW5nR3Vlc3Q/OiBDaGVzc2ltYWxzT25saW5lUGFydGljaXBhbnQ7XG4gIHBhcnRpY2lwYW50cz86IFBhcnRpYWw8UmVjb3JkPENoZXNzaW1hbHNQbGF5ZXJDb2xvciwgQ2hlc3NpbWFsc09ubGluZVBhcnRpY2lwYW50Pj47XG4gIHJlbWF0Y2hSZXF1ZXN0cz86IHN0cmluZ1tdO1xuICBtb3ZlTG9nPzogQ2hlc3NpbWFsc01vdmVMb2dFbnRyeVtdO1xufVxuXG5leHBvcnQgdHlwZSBDaGVzc2ltYWxzSGlzdG9yeU91dGNvbWUgPSAnd2FpdGluZycgfCAncGVuZGluZycgfCAnaW5fcHJvZ3Jlc3MnIHwgJ3dvbicgfCAnbG9zdCcgfCAnZGVjbGluZWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENoZXNzaW1hbHNIaXN0b3J5RW50cnkge1xuICBnYW1lSWQ6IHN0cmluZztcbiAgbW9kZTogJ29ubGluZSc7XG4gIGJvYXJkU2l6ZTogQ2hlc3NpbWFsc0JvYXJkU2l6ZTtcbiAgc3RhdHVzOiBDaGVzc2ltYWxzR2FtZVN0YXR1cztcbiAgb3V0Y29tZTogQ2hlc3NpbWFsc0hpc3RvcnlPdXRjb21lO1xuICBzaWRlPzogQ2hlc3NpbWFsc1BsYXllckNvbG9yO1xuICBvcHBvbmVudFVpZD86IHN0cmluZztcbiAgb3Bwb25lbnROYW1lPzogc3RyaW5nO1xuICB3aW5uZXI/OiBDaGVzc2ltYWxzUGxheWVyQ29sb3I7XG4gIHdpbm5lclJlYXNvbj86IENoZXNzaW1hbHNXaW5SZWFzb247XG4gIG1vdmVDb3VudDogbnVtYmVyO1xuICByb3VuZDogbnVtYmVyO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgdXBkYXRlZEF0OiBzdHJpbmc7XG4gIGZpbmlzaGVkQXQ/OiBzdHJpbmc7XG4gIGV4cGlyZXNBdD86IHN0cmluZztcbiAgcmVtYXRjaE9mPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoZXNzaW1hbHNHYW1lU3RhdGUge1xuICBpZDogc3RyaW5nO1xuICBtb2RlOiBDaGVzc2ltYWxzR2FtZU1vZGU7XG4gIGJvYXJkU2l6ZTogQ2hlc3NpbWFsc0JvYXJkU2l6ZTtcbiAgc3RhdHVzOiBDaGVzc2ltYWxzR2FtZVN0YXR1cztcbiAgY3VycmVudFR1cm46IENoZXNzaW1hbHNQbGF5ZXJDb2xvcjtcbiAgcGllY2VzOiBDaGVzc2ltYWxzUGllY2VbXTtcbiAgcGxheWVyczogUmVjb3JkPENoZXNzaW1hbHNQbGF5ZXJDb2xvciwgQ2hlc3NpbWFsc1BsYXllclN0YXRlPjtcbiAgd2lubmVyPzogQ2hlc3NpbWFsc1BsYXllckNvbG9yO1xuICB3aW5uZXJSZWFzb24/OiBDaGVzc2ltYWxzV2luUmVhc29uO1xuICBtb3ZlQ291bnQ6IG51bWJlcjtcbiAgbGFzdE1vdmU/OiBDaGVzc2ltYWxzTW92ZTtcbiAgb25saW5lPzogQ2hlc3NpbWFsc09ubGluZVN0YXRlO1xufVxuIl19
@@ -2,5 +2,5 @@
2
2
  * Current version of valtech-components.
3
3
  * This is automatically updated during the publish process.
4
4
  */
5
- export const VERSION = '4.0.395';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC4zOTUnO1xuIl19
5
+ export const VERSION = '4.0.397';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC4zOTcnO1xuIl19