@secrecy/lib 1.0.0-dev.20 → 1.0.0-dev.24

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.
package/lib/BaseClient.js CHANGED
@@ -6,6 +6,7 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
6
6
 
7
7
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8
8
 
9
+ /* eslint-disable @typescript-eslint/naming-convention */
9
10
  import { serialize } from "bson";
10
11
  import { getLink } from "@secrecy/lib-utils";
11
12
  import { usersCache } from "./cache.js";
@@ -49,16 +50,26 @@ var getUserSelector = function getUserSelector(userId, withPublicKey) {
49
50
  user: [{
50
51
  userId: userId
51
52
  }, {
52
- id: true,
53
- firstname: true,
54
- lastname: true,
55
- lang: true,
56
- publicKey: withPublicKey ? true : undefined,
57
- email: true,
58
- phone: true,
59
- role: true,
60
- deletedAt: true,
61
- lastLogin: true
53
+ "...on ErrorNotFound": {
54
+ __typename: true,
55
+ message: true,
56
+ field: true
57
+ },
58
+ "...on UserResponse": {
59
+ __typename: true,
60
+ user: {
61
+ id: true,
62
+ firstname: true,
63
+ lastname: true,
64
+ lang: true,
65
+ publicKey: withPublicKey ? true : undefined,
66
+ email: true,
67
+ phone: true,
68
+ role: true,
69
+ deletedAt: true,
70
+ lastLogin: true
71
+ }
72
+ }
62
73
  }]
63
74
  }),
64
75
  user = _Selector.user;
@@ -72,7 +83,7 @@ function getUser(_x) {
72
83
 
73
84
  function _getUser() {
74
85
  _getUser = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee27(params) {
75
- var selector, _yield$params$client, user;
86
+ var selector, _yield$params$client, userResponse;
76
87
 
77
88
  return _regeneratorRuntime.wrap(function _callee27$(_context27) {
78
89
  while (1) {
@@ -86,9 +97,9 @@ function _getUser() {
86
97
 
87
98
  case 3:
88
99
  _yield$params$client = _context27.sent;
89
- user = _yield$params$client.user;
100
+ userResponse = _yield$params$client.user;
90
101
 
91
- if (user) {
102
+ if (userResponse) {
92
103
  _context27.next = 7;
93
104
  break;
94
105
  }
@@ -96,12 +107,31 @@ function _getUser() {
96
107
  return _context27.abrupt("return", null);
97
108
 
98
109
  case 7:
99
- return _context27.abrupt("return", _objectSpread(_objectSpread({}, user), {}, {
100
- lastLogin: new Date(user.lastLogin),
101
- deletedAt: user.deletedAt ? new Date(user.deletedAt) : null
102
- }));
110
+ if (!(userResponse.__typename === "ErrorNotFound")) {
111
+ _context27.next = 9;
112
+ break;
113
+ }
114
+
115
+ return _context27.abrupt("return", userResponse);
116
+
117
+ case 9:
118
+ if (userResponse.user) {
119
+ _context27.next = 11;
120
+ break;
121
+ }
103
122
 
104
- case 8:
123
+ return _context27.abrupt("return", null);
124
+
125
+ case 11:
126
+ return _context27.abrupt("return", {
127
+ __typename: "SuccessResponse",
128
+ data: _objectSpread(_objectSpread({}, userResponse.user), {}, {
129
+ lastLogin: new Date(userResponse.user.lastLogin),
130
+ deletedAt: userResponse.user.deletedAt ? new Date(userResponse.user.deletedAt) : null
131
+ })
132
+ });
133
+
134
+ case 12:
105
135
  case "end":
106
136
  return _context27.stop();
107
137
  }
@@ -121,9 +151,8 @@ export var BaseClient = /*#__PURE__*/function () {
121
151
 
122
152
  _proto.sessions = /*#__PURE__*/function () {
123
153
  var _sessions = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
124
- var _data$user$sessions$m, _data$user;
154
+ var data, userResponse, _userResponse$user$se, _sessions2;
125
155
 
126
- var data, sessions;
127
156
  return _regeneratorRuntime.wrap(function _callee$(_context) {
128
157
  while (1) {
129
158
  switch (_context.prev = _context.next) {
@@ -131,23 +160,33 @@ export var BaseClient = /*#__PURE__*/function () {
131
160
  _context.next = 2;
132
161
  return this.client("query")({
133
162
  user: [{}, {
134
- sessions: {
135
- id: true,
136
- lastActivity: true,
137
- userAgent: true,
138
- ip: true,
139
- city: true,
140
- country: true,
141
- appSessions: {
142
- id: true,
143
- lastActivity: true,
144
- userAgent: true,
145
- ip: true,
146
- city: true,
147
- country: true,
148
- userApp: {
149
- app: {
150
- name: true
163
+ "...on ErrorNotFound": {
164
+ __typename: true,
165
+ field: true,
166
+ message: true
167
+ },
168
+ "...on UserResponse": {
169
+ __typename: true,
170
+ user: {
171
+ sessions: {
172
+ id: true,
173
+ lastActivity: true,
174
+ userAgent: true,
175
+ ip: true,
176
+ city: true,
177
+ country: true,
178
+ appSessions: {
179
+ id: true,
180
+ lastActivity: true,
181
+ userAgent: true,
182
+ ip: true,
183
+ city: true,
184
+ country: true,
185
+ userApp: {
186
+ app: {
187
+ name: true
188
+ }
189
+ }
151
190
  }
152
191
  }
153
192
  }
@@ -157,7 +196,31 @@ export var BaseClient = /*#__PURE__*/function () {
157
196
 
158
197
  case 2:
159
198
  data = _context.sent;
160
- sessions = (_data$user$sessions$m = (_data$user = data.user) == null ? void 0 : _data$user.sessions.map(function (s) {
199
+
200
+ if (data.user) {
201
+ _context.next = 5;
202
+ break;
203
+ }
204
+
205
+ return _context.abrupt("return", null);
206
+
207
+ case 5:
208
+ userResponse = data.user;
209
+
210
+ if (!(userResponse.__typename === "UserResponse")) {
211
+ _context.next = 11;
212
+ break;
213
+ }
214
+
215
+ if (userResponse.user) {
216
+ _context.next = 9;
217
+ break;
218
+ }
219
+
220
+ return _context.abrupt("return", null);
221
+
222
+ case 9:
223
+ _sessions2 = (_userResponse$user$se = userResponse.user.sessions.map(function (s) {
161
224
  return {
162
225
  id: s.id,
163
226
  ip: s.ip,
@@ -179,10 +242,16 @@ export var BaseClient = /*#__PURE__*/function () {
179
242
  };
180
243
  })
181
244
  };
182
- })) != null ? _data$user$sessions$m : [];
183
- return _context.abrupt("return", sessions);
245
+ })) != null ? _userResponse$user$se : [];
246
+ return _context.abrupt("return", {
247
+ __typename: "SuccessResponse",
248
+ data: _sessions2
249
+ });
184
250
 
185
- case 5:
251
+ case 11:
252
+ return _context.abrupt("return", userResponse);
253
+
254
+ case 12:
186
255
  case "end":
187
256
  return _context.stop();
188
257
  }
@@ -221,7 +290,20 @@ export var BaseClient = /*#__PURE__*/function () {
221
290
  return this.client("mutation")({
222
291
  logout: [{
223
292
  sessionId: sessionId
224
- }, true]
293
+ }, {
294
+ "...on ErrorAccessDenied": {
295
+ __typename: true,
296
+ message: true
297
+ },
298
+ "...on ErrorBasic": {
299
+ __typename: true,
300
+ message: true
301
+ },
302
+ "...on LogoutResponse": {
303
+ __typename: true,
304
+ logout: true
305
+ }
306
+ }]
225
307
  });
226
308
 
227
309
  case 4:
@@ -290,12 +372,28 @@ export var BaseClient = /*#__PURE__*/function () {
290
372
  user = _context4.sent;
291
373
 
292
374
  if (user) {
293
- usersCache.set(user.id, user);
375
+ _context4.next = 5;
376
+ break;
294
377
  }
295
378
 
296
- return _context4.abrupt("return", user);
379
+ return _context4.abrupt("return", null);
297
380
 
298
381
  case 5:
382
+ if (!(user.__typename === "ErrorNotFound")) {
383
+ _context4.next = 7;
384
+ break;
385
+ }
386
+
387
+ return _context4.abrupt("return", user);
388
+
389
+ case 7:
390
+ if (user) {
391
+ usersCache.set(user.data.id, user.data);
392
+ }
393
+
394
+ return _context4.abrupt("return", user);
395
+
396
+ case 9:
299
397
  case "end":
300
398
  return _context4.stop();
301
399
  }
@@ -328,12 +426,28 @@ export var BaseClient = /*#__PURE__*/function () {
328
426
  user = _context5.sent;
329
427
 
330
428
  if (user) {
331
- usersCache.set(user.id, user);
429
+ _context5.next = 5;
430
+ break;
332
431
  }
333
432
 
334
- return _context5.abrupt("return", user);
433
+ return _context5.abrupt("return", null);
335
434
 
336
435
  case 5:
436
+ if (!(user.__typename === "ErrorNotFound")) {
437
+ _context5.next = 7;
438
+ break;
439
+ }
440
+
441
+ return _context5.abrupt("return", user);
442
+
443
+ case 7:
444
+ if (user) {
445
+ usersCache.set(user.data.id, user.data);
446
+ }
447
+
448
+ return _context5.abrupt("return", user);
449
+
450
+ case 9:
337
451
  case "end":
338
452
  return _context5.stop();
339
453
  }
@@ -364,15 +478,28 @@ export var BaseClient = /*#__PURE__*/function () {
364
478
  lastname: lastname,
365
479
  lang: lang
366
480
  }, {
367
- id: true,
368
- firstname: true,
369
- lastname: true,
370
- lang: true,
371
- email: true,
372
- phone: true,
373
- role: true,
374
- deletedAt: true,
375
- lastLogin: true
481
+ "...on ErrorAccessDenied": {
482
+ __typename: true,
483
+ message: true
484
+ },
485
+ "...on ErrorNotFound": {
486
+ __typename: true,
487
+ message: true
488
+ },
489
+ "...on UpdateProfileResponse": {
490
+ __typename: true,
491
+ updateProfile: {
492
+ id: true,
493
+ firstname: true,
494
+ lastname: true,
495
+ lang: true,
496
+ email: true,
497
+ phone: true,
498
+ role: true,
499
+ deletedAt: true,
500
+ lastLogin: true
501
+ }
502
+ }
376
503
  }]
377
504
  });
378
505
 
@@ -385,15 +512,49 @@ export var BaseClient = /*#__PURE__*/function () {
385
512
  break;
386
513
  }
387
514
 
388
- throw new Error("Should not happen");
515
+ return _context6.abrupt("return", null);
389
516
 
390
517
  case 7:
391
- return _context6.abrupt("return", _objectSpread(_objectSpread({}, updateProfile), {}, {
392
- lastLogin: new Date(updateProfile.lastLogin),
393
- deletedAt: updateProfile.deletedAt ? new Date(updateProfile.deletedAt) : null
394
- }));
518
+ if (!(updateProfile.__typename === "ErrorAccessDenied")) {
519
+ _context6.next = 9;
520
+ break;
521
+ }
395
522
 
396
- case 8:
523
+ return _context6.abrupt("return", updateProfile);
524
+
525
+ case 9:
526
+ if (!(updateProfile.__typename === "ErrorNotFound")) {
527
+ _context6.next = 11;
528
+ break;
529
+ }
530
+
531
+ return _context6.abrupt("return", updateProfile);
532
+
533
+ case 11:
534
+ if (updateProfile.updateProfile) {
535
+ _context6.next = 13;
536
+ break;
537
+ }
538
+
539
+ return _context6.abrupt("return", null);
540
+
541
+ case 13:
542
+ return _context6.abrupt("return", {
543
+ __typename: "SuccessResponse",
544
+ data: {
545
+ email: updateProfile.updateProfile.email,
546
+ firstname: updateProfile.updateProfile.firstname,
547
+ id: updateProfile.updateProfile.id,
548
+ lang: updateProfile.updateProfile.lang,
549
+ lastLogin: new Date(updateProfile.updateProfile.lastLogin),
550
+ lastname: updateProfile.updateProfile.lastname,
551
+ phone: updateProfile.updateProfile.phone,
552
+ role: updateProfile.updateProfile.role,
553
+ deletedAt: updateProfile.updateProfile.deletedAt ? new Date(updateProfile.updateProfile.deletedAt) : null
554
+ }
555
+ });
556
+
557
+ case 14:
397
558
  case "end":
398
559
  return _context6.stop();
399
560
  }
@@ -419,33 +580,38 @@ export var BaseClient = /*#__PURE__*/function () {
419
580
  _context7.next = 2;
420
581
  return BaseClient._getBaseClient(env, sessionId)("query")({
421
582
  plans: {
422
- kind: true,
423
- codes: true,
424
- limits: {
425
- downloadBandwidth: true,
426
- downloadCount: true,
427
- hardFileCount: true,
428
- hardFileSize: true,
429
- perFileSize: true,
430
- uploadBandwidth: true,
431
- uploadCount: true,
432
- receivedMails: {
433
- count: true,
434
- fileCount: true,
435
- fileSize: true,
436
- hardCount: true,
437
- hardFileCount: true,
438
- hardFileSize: true,
439
- perFileSize: true
440
- },
441
- sentMails: {
442
- count: true,
443
- fileCount: true,
444
- fileSize: true,
445
- hardCount: true,
446
- hardFileCount: true,
447
- hardFileSize: true,
448
- perFileSize: true
583
+ "...on PlanResponse": {
584
+ __typename: true,
585
+ plan: {
586
+ kind: true,
587
+ codes: true,
588
+ limits: {
589
+ downloadBandwidth: true,
590
+ downloadCount: true,
591
+ hardFileCount: true,
592
+ hardFileSize: true,
593
+ perFileSize: true,
594
+ uploadBandwidth: true,
595
+ uploadCount: true,
596
+ receivedMails: {
597
+ count: true,
598
+ fileCount: true,
599
+ fileSize: true,
600
+ hardCount: true,
601
+ hardFileCount: true,
602
+ hardFileSize: true,
603
+ perFileSize: true
604
+ },
605
+ sentMails: {
606
+ count: true,
607
+ fileCount: true,
608
+ fileSize: true,
609
+ hardCount: true,
610
+ hardFileCount: true,
611
+ hardFileSize: true,
612
+ perFileSize: true
613
+ }
614
+ }
449
615
  }
450
616
  }
451
617
  }
@@ -454,9 +620,21 @@ export var BaseClient = /*#__PURE__*/function () {
454
620
  case 2:
455
621
  _yield$BaseClient$_ge = _context7.sent;
456
622
  plans = _yield$BaseClient$_ge.plans;
457
- return _context7.abrupt("return", plans);
458
623
 
459
- case 5:
624
+ if (plans) {
625
+ _context7.next = 6;
626
+ break;
627
+ }
628
+
629
+ return _context7.abrupt("return", null);
630
+
631
+ case 6:
632
+ return _context7.abrupt("return", {
633
+ __typename: "SuccessResponse",
634
+ data: plans.plan
635
+ });
636
+
637
+ case 7:
460
638
  case "end":
461
639
  return _context7.stop();
462
640
  }
@@ -473,6 +651,8 @@ export var BaseClient = /*#__PURE__*/function () {
473
651
 
474
652
  _proto.pay = /*#__PURE__*/function () {
475
653
  var _pay = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee8(planCode, input, autoRenew) {
654
+ var _pay$pay;
655
+
476
656
  var _yield$this$client2, pay;
477
657
 
478
658
  return _regeneratorRuntime.wrap(function _callee8$(_context8) {
@@ -485,15 +665,44 @@ export var BaseClient = /*#__PURE__*/function () {
485
665
  input: input,
486
666
  planCode: planCode,
487
667
  autoRenew: autoRenew
488
- }, true]
668
+ }, {
669
+ "...on ErrorAccessDenied": {
670
+ __typename: true,
671
+ message: true
672
+ },
673
+ "...on PayResponse": {
674
+ __typename: true,
675
+ pay: true
676
+ }
677
+ }]
489
678
  });
490
679
 
491
680
  case 2:
492
681
  _yield$this$client2 = _context8.sent;
493
682
  pay = _yield$this$client2.pay;
494
- return _context8.abrupt("return", pay != null ? pay : false);
495
683
 
496
- case 5:
684
+ if (pay) {
685
+ _context8.next = 6;
686
+ break;
687
+ }
688
+
689
+ return _context8.abrupt("return", null);
690
+
691
+ case 6:
692
+ if (!(pay.__typename === "ErrorAccessDenied")) {
693
+ _context8.next = 8;
694
+ break;
695
+ }
696
+
697
+ return _context8.abrupt("return", pay);
698
+
699
+ case 8:
700
+ return _context8.abrupt("return", {
701
+ __typename: "SuccessResponse",
702
+ data: (_pay$pay = pay.pay) != null ? _pay$pay : false
703
+ });
704
+
705
+ case 9:
497
706
  case "end":
498
707
  return _context8.stop();
499
708
  }
@@ -510,6 +719,8 @@ export var BaseClient = /*#__PURE__*/function () {
510
719
 
511
720
  _proto.cancelPayment = /*#__PURE__*/function () {
512
721
  var _cancelPayment = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee9() {
722
+ var _cancelPayment$cancel;
723
+
513
724
  var _yield$this$client3, cancelPayment;
514
725
 
515
726
  return _regeneratorRuntime.wrap(function _callee9$(_context9) {
@@ -518,15 +729,44 @@ export var BaseClient = /*#__PURE__*/function () {
518
729
  case 0:
519
730
  _context9.next = 2;
520
731
  return this.client("mutation")({
521
- cancelPayment: true
732
+ cancelPayment: {
733
+ "...on ErrorAccessDenied": {
734
+ __typename: true,
735
+ message: true
736
+ },
737
+ "...on CancelPaymentResponse": {
738
+ __typename: true,
739
+ cancelPayment: true
740
+ }
741
+ }
522
742
  });
523
743
 
524
744
  case 2:
525
745
  _yield$this$client3 = _context9.sent;
526
746
  cancelPayment = _yield$this$client3.cancelPayment;
527
- return _context9.abrupt("return", cancelPayment != null ? cancelPayment : false);
528
747
 
529
- case 5:
748
+ if (cancelPayment) {
749
+ _context9.next = 6;
750
+ break;
751
+ }
752
+
753
+ return _context9.abrupt("return", null);
754
+
755
+ case 6:
756
+ if (!(cancelPayment.__typename === "ErrorAccessDenied")) {
757
+ _context9.next = 8;
758
+ break;
759
+ }
760
+
761
+ return _context9.abrupt("return", cancelPayment);
762
+
763
+ case 8:
764
+ return _context9.abrupt("return", {
765
+ __typename: "SuccessResponse",
766
+ data: (_cancelPayment$cancel = cancelPayment.cancelPayment) != null ? _cancelPayment$cancel : false
767
+ });
768
+
769
+ case 9:
530
770
  case "end":
531
771
  return _context9.stop();
532
772
  }
@@ -543,7 +783,7 @@ export var BaseClient = /*#__PURE__*/function () {
543
783
 
544
784
  _proto.paymentInfos = /*#__PURE__*/function () {
545
785
  var _paymentInfos = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee10() {
546
- var _yield$this$client4, paymentInfos;
786
+ var _yield$this$client4, paymentInfos, result;
547
787
 
548
788
  return _regeneratorRuntime.wrap(function _callee10$(_context10) {
549
789
  while (1) {
@@ -552,33 +792,42 @@ export var BaseClient = /*#__PURE__*/function () {
552
792
  _context10.next = 2;
553
793
  return this.client("query")({
554
794
  paymentInfos: {
555
- hostedUrl: true,
556
- currentSubscription: {
557
- autorenew: true,
558
- activatedAt: true,
559
- currentPeriodEndsAt: true,
560
- currentPeriodStartedAt: true,
561
- canceledAt: true,
562
- createdAt: true,
563
- expiresAt: true,
564
- pausedAt: true,
565
- trialEndsAt: true,
566
- trialStartedAt: true,
567
- updatedAt: true,
568
- state: true,
569
- collectionMethod: true,
570
- plan: true,
571
- planCode: true,
572
- total: true
795
+ "...on ErrorAccessDenied": {
796
+ __typename: true,
797
+ message: true
573
798
  },
574
- invoices: {
575
- pdf: true,
576
- date: true,
577
- due: true,
578
- status: true,
579
- total: true,
580
- name: true,
581
- currency: true
799
+ "...on PaymentInfosResponse": {
800
+ __typename: true,
801
+ paymentInfos: {
802
+ hostedUrl: true,
803
+ currentSubscription: {
804
+ autorenew: true,
805
+ activatedAt: true,
806
+ currentPeriodEndsAt: true,
807
+ currentPeriodStartedAt: true,
808
+ canceledAt: true,
809
+ createdAt: true,
810
+ expiresAt: true,
811
+ pausedAt: true,
812
+ trialEndsAt: true,
813
+ trialStartedAt: true,
814
+ updatedAt: true,
815
+ state: true,
816
+ collectionMethod: true,
817
+ plan: true,
818
+ planCode: true,
819
+ total: true
820
+ },
821
+ invoices: {
822
+ pdf: true,
823
+ date: true,
824
+ due: true,
825
+ status: true,
826
+ total: true,
827
+ name: true,
828
+ currency: true
829
+ }
830
+ }
582
831
  }
583
832
  }
584
833
  });
@@ -595,9 +844,29 @@ export var BaseClient = /*#__PURE__*/function () {
595
844
  return _context10.abrupt("return", null);
596
845
 
597
846
  case 6:
598
- return _context10.abrupt("return", internalToPaymentInfos(paymentInfos));
847
+ if (!(paymentInfos.__typename === "ErrorAccessDenied")) {
848
+ _context10.next = 8;
849
+ break;
850
+ }
599
851
 
600
- case 7:
852
+ return _context10.abrupt("return", paymentInfos);
853
+
854
+ case 8:
855
+ if (paymentInfos.paymentInfos) {
856
+ _context10.next = 10;
857
+ break;
858
+ }
859
+
860
+ return _context10.abrupt("return", null);
861
+
862
+ case 10:
863
+ result = internalToPaymentInfos(paymentInfos.paymentInfos);
864
+ return _context10.abrupt("return", {
865
+ __typename: "SuccessResponse",
866
+ data: result
867
+ });
868
+
869
+ case 12:
601
870
  case "end":
602
871
  return _context10.stop();
603
872
  }
@@ -623,28 +892,47 @@ export var BaseClient = /*#__PURE__*/function () {
623
892
  _context11.next = 2;
624
893
  return this.client("query")({
625
894
  limits: {
626
- cloud: {
627
- size: true,
628
- maxSize: true,
629
- count: true,
630
- maxCount: true
895
+ "...on ErrorAccessDenied": {
896
+ __typename: true,
897
+ message: true
631
898
  },
632
- mail: {
633
- received: {
899
+ "...on ErrorLimit": {
900
+ __typename: true,
901
+ message: true
902
+ },
903
+ "...on ErrorNotExist": {
904
+ __typename: true,
905
+ message: true
906
+ },
907
+ "...on ErrorNotFound": {
908
+ __typename: true,
909
+ message: true
910
+ },
911
+ "...on QueryLimits": {
912
+ __typename: true,
913
+ cloud: {
914
+ size: true,
915
+ maxSize: true,
634
916
  count: true,
635
- maxCount: true,
636
- fileCount: true,
637
- maxFileCount: true,
638
- fileSize: true,
639
- maxFileSize: true
917
+ maxCount: true
640
918
  },
641
- sent: {
642
- count: true,
643
- maxCount: true,
644
- fileCount: true,
645
- maxFileCount: true,
646
- fileSize: true,
647
- maxFileSize: true
919
+ mail: {
920
+ received: {
921
+ count: true,
922
+ maxCount: true,
923
+ fileCount: true,
924
+ maxFileCount: true,
925
+ fileSize: true,
926
+ maxFileSize: true
927
+ },
928
+ sent: {
929
+ count: true,
930
+ maxCount: true,
931
+ fileCount: true,
932
+ maxFileCount: true,
933
+ fileSize: true,
934
+ maxFileSize: true
935
+ }
648
936
  }
649
937
  }
650
938
  }
@@ -662,35 +950,70 @@ export var BaseClient = /*#__PURE__*/function () {
662
950
  return _context11.abrupt("return", null);
663
951
 
664
952
  case 6:
953
+ if (!(limits.__typename === "ErrorAccessDenied")) {
954
+ _context11.next = 8;
955
+ break;
956
+ }
957
+
958
+ return _context11.abrupt("return", limits);
959
+
960
+ case 8:
961
+ if (!(limits.__typename === "ErrorNotExist")) {
962
+ _context11.next = 10;
963
+ break;
964
+ }
965
+
966
+ return _context11.abrupt("return", limits);
967
+
968
+ case 10:
969
+ if (!(limits.__typename === "ErrorLimit")) {
970
+ _context11.next = 12;
971
+ break;
972
+ }
973
+
974
+ return _context11.abrupt("return", limits);
975
+
976
+ case 12:
977
+ if (!(limits.__typename === "ErrorNotFound")) {
978
+ _context11.next = 14;
979
+ break;
980
+ }
981
+
982
+ return _context11.abrupt("return", limits);
983
+
984
+ case 14:
665
985
  cloud = limits.cloud, mail = limits.mail;
666
986
  return _context11.abrupt("return", {
667
- cloud: {
668
- count: BigInt(cloud.count),
669
- size: BigInt(cloud.size),
670
- maxCount: cloud.maxCount ? BigInt(cloud.maxCount) : null,
671
- maxSize: cloud.maxSize ? BigInt(cloud.maxSize) : null
672
- },
673
- mail: {
674
- received: {
675
- count: BigInt(mail.received.count),
676
- maxCount: mail.received.maxCount ? BigInt(mail.received.maxCount) : null,
677
- fileCount: BigInt(mail.received.fileCount),
678
- maxFileCount: mail.received.maxFileCount ? BigInt(mail.received.maxFileCount) : null,
679
- fileSize: BigInt(mail.received.fileSize),
680
- maxFileSize: mail.received.maxFileSize ? BigInt(mail.received.maxFileSize) : null
987
+ __typename: "SuccessResponse",
988
+ data: {
989
+ cloud: {
990
+ count: BigInt(cloud.count),
991
+ size: BigInt(cloud.size),
992
+ maxCount: cloud.maxCount ? BigInt(cloud.maxCount) : null,
993
+ maxSize: cloud.maxSize ? BigInt(cloud.maxSize) : null
681
994
  },
682
- sent: {
683
- count: BigInt(mail.sent.count),
684
- maxCount: mail.sent.maxCount ? BigInt(mail.sent.maxCount) : null,
685
- fileCount: BigInt(mail.sent.fileCount),
686
- maxFileCount: mail.sent.maxFileCount ? BigInt(mail.sent.maxFileCount) : null,
687
- fileSize: BigInt(mail.sent.fileSize),
688
- maxFileSize: mail.sent.maxFileSize ? BigInt(mail.sent.maxFileSize) : null
995
+ mail: {
996
+ received: {
997
+ count: BigInt(mail.received.count),
998
+ maxCount: mail.received.maxCount ? BigInt(mail.received.maxCount) : null,
999
+ fileCount: BigInt(mail.received.fileCount),
1000
+ maxFileCount: mail.received.maxFileCount ? BigInt(mail.received.maxFileCount) : null,
1001
+ fileSize: BigInt(mail.received.fileSize),
1002
+ maxFileSize: mail.received.maxFileSize ? BigInt(mail.received.maxFileSize) : null
1003
+ },
1004
+ sent: {
1005
+ count: BigInt(mail.sent.count),
1006
+ maxCount: mail.sent.maxCount ? BigInt(mail.sent.maxCount) : null,
1007
+ fileCount: BigInt(mail.sent.fileCount),
1008
+ maxFileCount: mail.sent.maxFileCount ? BigInt(mail.sent.maxFileCount) : null,
1009
+ fileSize: BigInt(mail.sent.fileSize),
1010
+ maxFileSize: mail.sent.maxFileSize ? BigInt(mail.sent.maxFileSize) : null
1011
+ }
689
1012
  }
690
1013
  }
691
1014
  });
692
1015
 
693
- case 8:
1016
+ case 16:
694
1017
  case "end":
695
1018
  return _context11.stop();
696
1019
  }
@@ -707,8 +1030,6 @@ export var BaseClient = /*#__PURE__*/function () {
707
1030
 
708
1031
  _proto.godFatherAndChildren = /*#__PURE__*/function () {
709
1032
  var _godFatherAndChildren = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee12() {
710
- var _user$godFather;
711
-
712
1033
  var _yield$this$client6, user;
713
1034
 
714
1035
  return _regeneratorRuntime.wrap(function _callee12$(_context12) {
@@ -718,19 +1039,26 @@ export var BaseClient = /*#__PURE__*/function () {
718
1039
  _context12.next = 2;
719
1040
  return this.client("query")({
720
1041
  user: [{}, {
721
- godChildren: {
722
- id: true,
723
- firstname: true,
724
- lastname: true,
725
- email: true,
726
- phone: true
1042
+ "...on ErrorNotFound": {
1043
+ __typename: true,
1044
+ message: true
727
1045
  },
728
- godFather: {
729
- id: true,
730
- firstname: true,
731
- lastname: true,
732
- email: true,
733
- phone: true
1046
+ "...on UserResponse": {
1047
+ __typename: true,
1048
+ godChildren: {
1049
+ id: true,
1050
+ firstname: true,
1051
+ lastname: true,
1052
+ email: true,
1053
+ phone: true
1054
+ },
1055
+ godFather: {
1056
+ id: true,
1057
+ firstname: true,
1058
+ lastname: true,
1059
+ email: true,
1060
+ phone: true
1061
+ }
734
1062
  }
735
1063
  }]
736
1064
  });
@@ -747,11 +1075,23 @@ export var BaseClient = /*#__PURE__*/function () {
747
1075
  return _context12.abrupt("return", null);
748
1076
 
749
1077
  case 6:
750
- return _context12.abrupt("return", _objectSpread(_objectSpread({}, user), {}, {
751
- godFather: (_user$godFather = user.godFather) != null ? _user$godFather : null
752
- }));
1078
+ if (!(user.__typename === "ErrorNotFound")) {
1079
+ _context12.next = 8;
1080
+ break;
1081
+ }
753
1082
 
754
- case 7:
1083
+ return _context12.abrupt("return", user);
1084
+
1085
+ case 8:
1086
+ return _context12.abrupt("return", {
1087
+ __typename: "SuccessResponse",
1088
+ data: {
1089
+ godChildren: user.godChildren,
1090
+ godFather: user.godFather
1091
+ }
1092
+ });
1093
+
1094
+ case 9:
755
1095
  case "end":
756
1096
  return _context12.stop();
757
1097
  }
@@ -768,7 +1108,7 @@ export var BaseClient = /*#__PURE__*/function () {
768
1108
 
769
1109
  BaseClient.updateAppDBConfig = /*#__PURE__*/function () {
770
1110
  var _updateAppDBConfig = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee13(_ref2) {
771
- var appCode, config, env, sessionId, _yield$BaseClient$_ge2, dbConfig;
1111
+ var appCode, config, env, sessionId, _yield$BaseClient$_ge2, dbConfigMutation;
772
1112
 
773
1113
  return _regeneratorRuntime.wrap(function _callee13$(_context13) {
774
1114
  while (1) {
@@ -777,18 +1117,47 @@ export var BaseClient = /*#__PURE__*/function () {
777
1117
  appCode = _ref2.appCode, config = _ref2.config, env = _ref2.env, sessionId = _ref2.sessionId;
778
1118
  _context13.next = 3;
779
1119
  return BaseClient._getBaseClient(env, sessionId)("mutation")({
780
- dbConfig: [{
1120
+ dbConfigMutation: [{
781
1121
  appCode: appCode,
782
1122
  config: JSON.stringify(config)
783
- }, true]
1123
+ }, {
1124
+ "...on ErrorAccessDenied": {
1125
+ __typename: true,
1126
+ message: true
1127
+ },
1128
+ "...on DbConfigMutationResponse": {
1129
+ __typename: true,
1130
+ dbConfigMutation: true
1131
+ }
1132
+ }]
784
1133
  });
785
1134
 
786
1135
  case 3:
787
1136
  _yield$BaseClient$_ge2 = _context13.sent;
788
- dbConfig = _yield$BaseClient$_ge2.dbConfig;
789
- return _context13.abrupt("return", dbConfig);
1137
+ dbConfigMutation = _yield$BaseClient$_ge2.dbConfigMutation;
790
1138
 
791
- case 6:
1139
+ if (dbConfigMutation) {
1140
+ _context13.next = 7;
1141
+ break;
1142
+ }
1143
+
1144
+ return _context13.abrupt("return", null);
1145
+
1146
+ case 7:
1147
+ if (!(dbConfigMutation.__typename === "ErrorAccessDenied")) {
1148
+ _context13.next = 9;
1149
+ break;
1150
+ }
1151
+
1152
+ return _context13.abrupt("return", dbConfigMutation);
1153
+
1154
+ case 9:
1155
+ return _context13.abrupt("return", {
1156
+ __typename: "SuccessResponse",
1157
+ data: dbConfigMutation.dbConfigMutation
1158
+ });
1159
+
1160
+ case 10:
792
1161
  case "end":
793
1162
  return _context13.stop();
794
1163
  }
@@ -815,15 +1184,68 @@ export var BaseClient = /*#__PURE__*/function () {
815
1184
  return BaseClient._getBaseClient(env, sessionId)("query")({
816
1185
  dbConfig: [{
817
1186
  appCode: appCode
818
- }, true]
1187
+ }, {
1188
+ "...on ErrorAccessDenied": {
1189
+ __typename: true,
1190
+ message: true
1191
+ },
1192
+ "...on ErrorNotFound": {
1193
+ __typename: true,
1194
+ message: true
1195
+ },
1196
+ "...on ErrorNotExist": {
1197
+ __typename: true,
1198
+ message: true
1199
+ },
1200
+ "...on DbConfigResponse": {
1201
+ __typename: true,
1202
+ json: true
1203
+ }
1204
+ }]
819
1205
  });
820
1206
 
821
1207
  case 2:
822
1208
  _yield$BaseClient$_ge3 = _context14.sent;
823
1209
  dbConfig = _yield$BaseClient$_ge3.dbConfig;
1210
+
1211
+ if (dbConfig) {
1212
+ _context14.next = 6;
1213
+ break;
1214
+ }
1215
+
1216
+ return _context14.abrupt("return", null);
1217
+
1218
+ case 6:
1219
+ if (!(dbConfig.__typename === "ErrorAccessDenied")) {
1220
+ _context14.next = 8;
1221
+ break;
1222
+ }
1223
+
824
1224
  return _context14.abrupt("return", dbConfig);
825
1225
 
826
- case 5:
1226
+ case 8:
1227
+ if (!(dbConfig.__typename === "ErrorNotFound")) {
1228
+ _context14.next = 10;
1229
+ break;
1230
+ }
1231
+
1232
+ return _context14.abrupt("return", dbConfig);
1233
+
1234
+ case 10:
1235
+ if (!(dbConfig.__typename === "ErrorNotExist")) {
1236
+ _context14.next = 12;
1237
+ break;
1238
+ }
1239
+
1240
+ return _context14.abrupt("return", dbConfig);
1241
+
1242
+ case 12:
1243
+ return _context14.abrupt("return", {
1244
+ __typename: "SuccessResponse",
1245
+ data: dbConfig.json
1246
+ });
1247
+
1248
+ case 13:
827
1249
  case "end":
828
1250
  return _context14.stop();
829
1251
  }
@@ -852,18 +1274,47 @@ export var BaseClient = /*#__PURE__*/function () {
852
1274
  faq: [{
853
1275
  lang: lang
854
1276
  }, {
855
- answer: true,
856
- order: true,
857
- question: true
1277
+ "...on ErrorAccessDenied": {
1278
+ __typename: true,
1279
+ message: true
1280
+ },
1281
+ "...on FaqResponse": {
1282
+ __typename: true,
1283
+ faq: {
1284
+ answer: true,
1285
+ order: true,
1286
+ question: true
1287
+ }
1288
+ }
858
1289
  }]
859
1290
  });
860
1291
 
861
1292
  case 3:
862
1293
  _yield$BaseClient$_ge4 = _context15.sent;
863
1294
  faq = _yield$BaseClient$_ge4.faq;
1295
+
1296
+ if (faq) {
1297
+ _context15.next = 7;
1298
+ break;
1299
+ }
1300
+
1301
+ return _context15.abrupt("return", null);
1302
+
1303
+ case 7:
1304
+ if (!(faq.__typename === "ErrorAccessDenied")) {
1305
+ _context15.next = 9;
1306
+ break;
1307
+ }
1308
+
864
1309
  return _context15.abrupt("return", faq);
865
1310
 
866
- case 6:
1311
+ case 9:
1312
+ return _context15.abrupt("return", {
1313
+ __typename: "SuccessResponse",
1314
+ data: faq.faq
1315
+ });
1316
+
1317
+ case 10:
867
1318
  case "end":
868
1319
  return _context15.stop();
869
1320
  }
@@ -892,29 +1343,58 @@ export var BaseClient = /*#__PURE__*/function () {
892
1343
  blog: [{
893
1344
  lang: lang
894
1345
  }, {
895
- id: true,
896
- blogId: true,
897
- author: true,
898
- body: true,
899
- date: true,
900
- image: true,
901
- imageAlt: true,
902
- summary: true,
903
- title: true,
904
- order: true
1346
+ "...on ErrorLangNotExist": {
1347
+ __typename: true,
1348
+ message: true
1349
+ },
1350
+ "...on BlogResponse": {
1351
+ __typename: true,
1352
+ blogItems: {
1353
+ id: true,
1354
+ blogId: true,
1355
+ author: true,
1356
+ body: true,
1357
+ date: true,
1358
+ image: true,
1359
+ imageAlt: true,
1360
+ summary: true,
1361
+ title: true,
1362
+ order: true
1363
+ }
1364
+ }
905
1365
  }]
906
1366
  });
907
1367
 
908
1368
  case 3:
909
1369
  _yield$BaseClient$_ge5 = _context16.sent;
910
1370
  blog = _yield$BaseClient$_ge5.blog;
911
- return _context16.abrupt("return", blog.map(function (b) {
912
- return _objectSpread(_objectSpread({}, b), {}, {
913
- date: new Date(b.date)
914
- });
915
- }));
916
1371
 
917
- case 6:
1372
+ if (blog) {
1373
+ _context16.next = 7;
1374
+ break;
1375
+ }
1376
+
1377
+ return _context16.abrupt("return", null);
1378
+
1379
+ case 7:
1380
+ if (!(blog.__typename === "ErrorLangNotExist")) {
1381
+ _context16.next = 9;
1382
+ break;
1383
+ }
1384
+
1385
+ return _context16.abrupt("return", blog);
1386
+
1387
+ case 9:
1388
+ return _context16.abrupt("return", {
1389
+ __typename: "SuccessResponse",
1390
+ data: blog.blogItems.map(function (b) {
1391
+ return _objectSpread(_objectSpread({}, b), {}, {
1392
+ date: new Date(b.date)
1393
+ });
1394
+ })
1395
+ });
1396
+
1397
+ case 10:
918
1398
  case "end":
919
1399
  return _context16.stop();
920
1400
  }
@@ -943,19 +1423,32 @@ export var BaseClient = /*#__PURE__*/function () {
943
1423
  reportedUserId: reportedUserId,
944
1424
  customMessage: customMessage
945
1425
  }, {
946
- id: true,
947
- customMessage: true,
948
- user: {
949
- id: true,
950
- firstname: true,
951
- lastname: true,
952
- email: true
1426
+ "...on ErrorAccessDenied": {
1427
+ __typename: true,
1428
+ message: true
953
1429
  },
954
- reportedUser: {
955
- id: true,
956
- firstname: true,
957
- lastname: true,
958
- email: true
1430
+ "...on ErrorNotFound": {
1431
+ __typename: true,
1432
+ message: true
1433
+ },
1434
+ "...on SendReportResponse": {
1435
+ __typename: true,
1436
+ sendReport: {
1437
+ id: true,
1438
+ customMessage: true,
1439
+ user: {
1440
+ id: true,
1441
+ firstname: true,
1442
+ lastname: true,
1443
+ email: true
1444
+ },
1445
+ reportedUser: {
1446
+ id: true,
1447
+ firstname: true,
1448
+ lastname: true,
1449
+ email: true
1450
+ }
1451
+ }
959
1452
  }
960
1453
  }]
961
1454
  });
@@ -963,9 +1456,45 @@ export var BaseClient = /*#__PURE__*/function () {
963
1456
  case 2:
964
1457
  _yield$this$client7 = _context17.sent;
965
1458
  sendReport = _yield$this$client7.sendReport;
1459
+
1460
+ if (sendReport) {
1461
+ _context17.next = 6;
1462
+ break;
1463
+ }
1464
+
1465
+ return _context17.abrupt("return", null);
1466
+
1467
+ case 6:
1468
+ if (!(sendReport.__typename === "ErrorAccessDenied")) {
1469
+ _context17.next = 8;
1470
+ break;
1471
+ }
1472
+
966
1473
  return _context17.abrupt("return", sendReport);
967
1474
 
968
- case 5:
1475
+ case 8:
1476
+ if (!(sendReport.__typename === "ErrorNotFound")) {
1477
+ _context17.next = 10;
1478
+ break;
1479
+ }
1480
+
1481
+ return _context17.abrupt("return", sendReport);
1482
+
1483
+ case 10:
1484
+ if (sendReport.sendReport) {
1485
+ _context17.next = 12;
1486
+ break;
1487
+ }
1488
+
1489
+ return _context17.abrupt("return", null);
1490
+
1491
+ case 12:
1492
+ return _context17.abrupt("return", {
1493
+ __typename: "SuccessResponse",
1494
+ data: sendReport.sendReport
1495
+ });
1496
+
1497
+ case 13:
969
1498
  case "end":
970
1499
  return _context17.stop();
971
1500
  }
@@ -993,15 +1522,52 @@ export var BaseClient = /*#__PURE__*/function () {
993
1522
  return BaseClient._getBaseClient(env, sessionId)("mutation")({
994
1523
  deleteUser: [{
995
1524
  userId: userId
996
- }, true]
1525
+ }, {
1526
+ "...on ErrorAccessDenied": {
1527
+ __typename: true,
1528
+ message: true
1529
+ },
1530
+ "...on DeleteUserResponse": {
1531
+ __typename: true,
1532
+ deleteUser: true
1533
+ }
1534
+ }]
997
1535
  });
998
1536
 
999
1537
  case 3:
1000
1538
  _yield$BaseClient$_ge6 = _context18.sent;
1001
1539
  deleteUser = _yield$BaseClient$_ge6.deleteUser;
1002
- return _context18.abrupt("return", deleteUser != null ? deleteUser : false);
1003
1540
 
1004
- case 6:
1541
+ if (deleteUser) {
1542
+ _context18.next = 7;
1543
+ break;
1544
+ }
1545
+
1546
+ return _context18.abrupt("return", null);
1547
+
1548
+ case 7:
1549
+ if (!(deleteUser.__typename === "ErrorAccessDenied")) {
1550
+ _context18.next = 9;
1551
+ break;
1552
+ }
1553
+
1554
+ return _context18.abrupt("return", deleteUser);
1555
+
1556
+ case 9:
1557
+ if (deleteUser.deleteUser) {
1558
+ _context18.next = 11;
1559
+ break;
1560
+ }
1561
+
1562
+ return _context18.abrupt("return", null);
1563
+
1564
+ case 11:
1565
+ return _context18.abrupt("return", {
1566
+ __typename: "SuccessResponse",
1567
+ data: deleteUser.deleteUser
1568
+ });
1569
+
1570
+ case 12:
1005
1571
  case "end":
1006
1572
  return _context18.stop();
1007
1573
  }
@@ -1030,15 +1596,68 @@ export var BaseClient = /*#__PURE__*/function () {
1030
1596
  dbGet: [{
1031
1597
  field: field,
1032
1598
  userId: userId
1033
- }, true]
1599
+ }, {
1600
+ "...on ErrorAccessDenied": {
1601
+ __typename: true,
1602
+ message: true
1603
+ },
1604
+ "...on ErrorNotExist": {
1605
+ __typename: true,
1606
+ message: true
1607
+ },
1608
+ "...on ErrorNotFound": {
1609
+ __typename: true,
1610
+ message: true
1611
+ },
1612
+ "...on DbGetResponse": {
1613
+ __typename: true,
1614
+ json: true
1615
+ }
1616
+ }]
1034
1617
  });
1035
1618
 
1036
1619
  case 3:
1037
1620
  _yield$this$client8 = _context19.sent;
1038
1621
  dbGet = _yield$this$client8.dbGet;
1039
- return _context19.abrupt("return", dbGet.res);
1040
1622
 
1041
- case 6:
1623
+ if (dbGet) {
1624
+ _context19.next = 7;
1625
+ break;
1626
+ }
1627
+
1628
+ return _context19.abrupt("return", null);
1629
+
1630
+ case 7:
1631
+ if (!(dbGet.__typename === "ErrorAccessDenied")) {
1632
+ _context19.next = 9;
1633
+ break;
1634
+ }
1635
+
1636
+ return _context19.abrupt("return", dbGet);
1637
+
1638
+ case 9:
1639
+ if (!(dbGet.__typename === "ErrorNotExist")) {
1640
+ _context19.next = 11;
1641
+ break;
1642
+ }
1643
+
1644
+ return _context19.abrupt("return", dbGet);
1645
+
1646
+ case 11:
1647
+ if (!(dbGet.__typename === "ErrorNotFound")) {
1648
+ _context19.next = 13;
1649
+ break;
1650
+ }
1651
+
1652
+ return _context19.abrupt("return", dbGet);
1653
+
1654
+ case 13:
1655
+ return _context19.abrupt("return", {
1656
+ __typename: "SuccessResponse",
1657
+ data: dbGet.json
1658
+ });
1659
+
1660
+ case 14:
1042
1661
  case "end":
1043
1662
  return _context19.stop();
1044
1663
  }
@@ -1076,15 +1695,64 @@ export var BaseClient = /*#__PURE__*/function () {
1076
1695
  dbSet: [{
1077
1696
  userId: userId,
1078
1697
  value: serialize(value).toString("base64")
1079
- }, true]
1698
+ }, {
1699
+ "...on ErrorAccessDenied": {
1700
+ __typename: true,
1701
+ message: true
1702
+ },
1703
+ "...on ErrorNotFound": {
1704
+ __typename: true,
1705
+ message: true
1706
+ },
1707
+ "...on DbSetResponse": {
1708
+ __typename: true,
1709
+ dbSet: true
1710
+ }
1711
+ }]
1080
1712
  });
1081
1713
 
1082
1714
  case 5:
1083
1715
  _yield$this$client9 = _context20.sent;
1084
1716
  dbSet = _yield$this$client9.dbSet;
1085
- return _context20.abrupt("return", dbSet.res);
1086
1717
 
1087
- case 8:
1718
+ if (dbSet) {
1719
+ _context20.next = 9;
1720
+ break;
1721
+ }
1722
+
1723
+ return _context20.abrupt("return", null);
1724
+
1725
+ case 9:
1726
+ if (!(dbSet.__typename === "ErrorAccessDenied")) {
1727
+ _context20.next = 11;
1728
+ break;
1729
+ }
1730
+
1731
+ return _context20.abrupt("return", dbSet);
1732
+
1733
+ case 11:
1734
+ if (!(dbSet.__typename === "ErrorNotFound")) {
1735
+ _context20.next = 13;
1736
+ break;
1737
+ }
1738
+
1739
+ return _context20.abrupt("return", dbSet);
1740
+
1741
+ case 13:
1742
+ if (dbSet.dbSet) {
1743
+ _context20.next = 15;
1744
+ break;
1745
+ }
1746
+
1747
+ return _context20.abrupt("return", null);
1748
+
1749
+ case 15:
1750
+ return _context20.abrupt("return", {
1751
+ __typename: "SuccessResponse",
1752
+ data: dbSet.dbSet.res
1753
+ });
1754
+
1755
+ case 16:
1088
1756
  case "end":
1089
1757
  return _context20.stop();
1090
1758
  }
@@ -1113,15 +1781,68 @@ export var BaseClient = /*#__PURE__*/function () {
1113
1781
  dbSearch: [{
1114
1782
  search: search,
1115
1783
  field: field
1116
- }, true]
1784
+ }, {
1785
+ "...on ErrorAccessDenied": {
1786
+ __typename: true,
1787
+ message: true
1788
+ },
1789
+ "...on ErrorBasic": {
1790
+ __typename: true,
1791
+ message: true
1792
+ },
1793
+ "...on ErrorNotExist": {
1794
+ __typename: true,
1795
+ message: true
1796
+ },
1797
+ "...on DbSearchResponse": {
1798
+ __typename: true,
1799
+ json: true
1800
+ }
1801
+ }]
1117
1802
  });
1118
1803
 
1119
1804
  case 3:
1120
1805
  _yield$this$client10 = _context21.sent;
1121
1806
  dbSearch = _yield$this$client10.dbSearch;
1807
+
1808
+ if (dbSearch) {
1809
+ _context21.next = 7;
1810
+ break;
1811
+ }
1812
+
1813
+ return _context21.abrupt("return", null);
1814
+
1815
+ case 7:
1816
+ if (!(dbSearch.__typename === "ErrorAccessDenied")) {
1817
+ _context21.next = 9;
1818
+ break;
1819
+ }
1820
+
1122
1821
  return _context21.abrupt("return", dbSearch);
1123
1822
 
1124
- case 6:
1823
+ case 9:
1824
+ if (!(dbSearch.__typename === "ErrorBasic")) {
1825
+ _context21.next = 11;
1826
+ break;
1827
+ }
1828
+
1829
+ return _context21.abrupt("return", dbSearch);
1830
+
1831
+ case 11:
1832
+ if (!(dbSearch.__typename === "ErrorNotExist")) {
1833
+ _context21.next = 13;
1834
+ break;
1835
+ }
1836
+
1837
+ return _context21.abrupt("return", dbSearch);
1838
+
1839
+ case 13:
1840
+ return _context21.abrupt("return", {
1841
+ __typename: "SuccessResponse",
1842
+ data: dbSearch.json
1843
+ });
1844
+
1845
+ case 14:
1125
1846
  case "end":
1126
1847
  return _context21.stop();
1127
1848
  }
@@ -1138,6 +1859,8 @@ export var BaseClient = /*#__PURE__*/function () {
1138
1859
 
1139
1860
  _proto.deleteFolder = /*#__PURE__*/function () {
1140
1861
  var _deleteFolder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee22(_ref9) {
1862
+ var _deleteFolder$deleteF;
1863
+
1141
1864
  var id, _yield$this$client11, deleteFolder;
1142
1865
 
1143
1866
  return _regeneratorRuntime.wrap(function _callee22$(_context22) {
@@ -1149,15 +1872,56 @@ export var BaseClient = /*#__PURE__*/function () {
1149
1872
  return this.client("mutation")({
1150
1873
  deleteFolder: [{
1151
1874
  id: id
1152
- }, true]
1875
+ }, {
1876
+ "...on ErrorNotExist": {
1877
+ __typename: true,
1878
+ message: true
1879
+ },
1880
+ "...on ErrorAccessDenied": {
1881
+ __typename: true,
1882
+ message: true
1883
+ },
1884
+ "...on DeleteFolderResponse": {
1885
+ __typename: true,
1886
+ deleteFolder: true
1887
+ }
1888
+ }]
1153
1889
  });
1154
1890
 
1155
1891
  case 3:
1156
1892
  _yield$this$client11 = _context22.sent;
1157
1893
  deleteFolder = _yield$this$client11.deleteFolder;
1158
- return _context22.abrupt("return", deleteFolder != null ? deleteFolder : false);
1159
1894
 
1160
- case 6:
1895
+ if (deleteFolder) {
1896
+ _context22.next = 7;
1897
+ break;
1898
+ }
1899
+
1900
+ return _context22.abrupt("return", null);
1901
+
1902
+ case 7:
1903
+ if (!(deleteFolder.__typename === "ErrorNotExist")) {
1904
+ _context22.next = 9;
1905
+ break;
1906
+ }
1907
+
1908
+ return _context22.abrupt("return", deleteFolder);
1909
+
1910
+ case 9:
1911
+ if (!(deleteFolder.__typename === "ErrorAccessDenied")) {
1912
+ _context22.next = 11;
1913
+ break;
1914
+ }
1915
+
1916
+ return _context22.abrupt("return", deleteFolder);
1917
+
1918
+ case 11:
1919
+ return _context22.abrupt("return", {
1920
+ __typename: "SuccessResponse",
1921
+ data: (_deleteFolder$deleteF = deleteFolder.deleteFolder) != null ? _deleteFolder$deleteF : false
1922
+ });
1923
+
1924
+ case 12:
1161
1925
  case "end":
1162
1926
  return _context22.stop();
1163
1927
  }
@@ -1174,6 +1938,8 @@ export var BaseClient = /*#__PURE__*/function () {
1174
1938
 
1175
1939
  _proto.moveFolders = /*#__PURE__*/function () {
1176
1940
  var _moveFolders = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee23(_ref10) {
1941
+ var _moveFolders$moveFold;
1942
+
1177
1943
  var foldersId, parentFolderId, _yield$this$client12, moveFolders;
1178
1944
 
1179
1945
  return _regeneratorRuntime.wrap(function _callee23$(_context23) {
@@ -1186,15 +1952,44 @@ export var BaseClient = /*#__PURE__*/function () {
1186
1952
  moveFolders: [{
1187
1953
  foldersId: foldersId,
1188
1954
  parentFolderId: parentFolderId
1189
- }, true]
1955
+ }, {
1956
+ "...on ErrorAccessDenied": {
1957
+ __typename: true,
1958
+ message: true
1959
+ },
1960
+ "...on MoveFoldersResponse": {
1961
+ __typename: true,
1962
+ moveFolders: true
1963
+ }
1964
+ }]
1190
1965
  });
1191
1966
 
1192
1967
  case 3:
1193
1968
  _yield$this$client12 = _context23.sent;
1194
1969
  moveFolders = _yield$this$client12.moveFolders;
1195
- return _context23.abrupt("return", moveFolders != null ? moveFolders : false);
1196
1970
 
1197
- case 6:
1971
+ if (moveFolders) {
1972
+ _context23.next = 7;
1973
+ break;
1974
+ }
1975
+
1976
+ return _context23.abrupt("return", null);
1977
+
1978
+ case 7:
1979
+ if (!(moveFolders.__typename === "ErrorAccessDenied")) {
1980
+ _context23.next = 9;
1981
+ break;
1982
+ }
1983
+
1984
+ return _context23.abrupt("return", moveFolders);
1985
+
1986
+ case 9:
1987
+ return _context23.abrupt("return", {
1988
+ __typename: "SuccessResponse",
1989
+ data: (_moveFolders$moveFold = moveFolders.moveFolders) != null ? _moveFolders$moveFold : false
1990
+ });
1991
+
1992
+ case 10:
1198
1993
  case "end":
1199
1994
  return _context23.stop();
1200
1995
  }
@@ -1211,6 +2006,8 @@ export var BaseClient = /*#__PURE__*/function () {
1211
2006
 
1212
2007
  _proto.moveFiles = /*#__PURE__*/function () {
1213
2008
  var _moveFiles = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee24(_ref11) {
2009
+ var _moveFiles$moveFiles;
2010
+
1214
2011
  var filesId, parentFolderId, _yield$this$client13, moveFiles;
1215
2012
 
1216
2013
  return _regeneratorRuntime.wrap(function _callee24$(_context24) {
@@ -1223,15 +2020,44 @@ export var BaseClient = /*#__PURE__*/function () {
1223
2020
  moveFiles: [{
1224
2021
  filesId: filesId,
1225
2022
  parentFolderId: parentFolderId
1226
- }, true]
2023
+ }, {
2024
+ "...on ErrorAccessDenied": {
2025
+ __typename: true,
2026
+ message: true
2027
+ },
2028
+ "...on MoveFilesResponse": {
2029
+ __typename: true,
2030
+ moveFiles: true
2031
+ }
2032
+ }]
1227
2033
  });
1228
2034
 
1229
2035
  case 3:
1230
2036
  _yield$this$client13 = _context24.sent;
1231
2037
  moveFiles = _yield$this$client13.moveFiles;
1232
- return _context24.abrupt("return", moveFiles != null ? moveFiles : false);
1233
2038
 
1234
- case 6:
2039
+ if (moveFiles) {
2040
+ _context24.next = 7;
2041
+ break;
2042
+ }
2043
+
2044
+ return _context24.abrupt("return", null);
2045
+
2046
+ case 7:
2047
+ if (!(moveFiles.__typename === "ErrorAccessDenied")) {
2048
+ _context24.next = 9;
2049
+ break;
2050
+ }
2051
+
2052
+ return _context24.abrupt("return", moveFiles);
2053
+
2054
+ case 9:
2055
+ return _context24.abrupt("return", {
2056
+ __typename: "SuccessResponse",
2057
+ data: (_moveFiles$moveFiles = moveFiles.moveFiles) != null ? _moveFiles$moveFiles : false
2058
+ });
2059
+
2060
+ case 10:
1235
2061
  case "end":
1236
2062
  return _context24.stop();
1237
2063
  }
@@ -1260,8 +2086,15 @@ export var BaseClient = /*#__PURE__*/function () {
1260
2086
  folderSize: [{
1261
2087
  folderId: folderId
1262
2088
  }, {
1263
- size: true,
1264
- sizeBefore: true
2089
+ "...on ErrorAccessDenied": {
2090
+ __typename: true,
2091
+ message: true
2092
+ },
2093
+ "...on FolderSizeResponse": {
2094
+ __typename: true,
2095
+ size: true,
2096
+ sizeBefore: true
2097
+ }
1265
2098
  }]
1266
2099
  });
1267
2100
 
@@ -1277,12 +2110,23 @@ export var BaseClient = /*#__PURE__*/function () {
1277
2110
  return _context25.abrupt("return", null);
1278
2111
 
1279
2112
  case 7:
2113
+ if (!(folderSize.__typename === "ErrorAccessDenied")) {
2114
+ _context25.next = 9;
2115
+ break;
2116
+ }
2117
+
2118
+ return _context25.abrupt("return", folderSize);
2119
+
2120
+ case 9:
1280
2121
  return _context25.abrupt("return", {
1281
- size: BigInt(folderSize.size),
1282
- sizeBefore: BigInt(folderSize.sizeBefore)
2122
+ __typename: "SuccessResponse",
2123
+ data: {
2124
+ size: BigInt(folderSize.size),
2125
+ sizeBefore: BigInt(folderSize.sizeBefore)
2126
+ }
1283
2127
  });
1284
2128
 
1285
- case 8:
2129
+ case 10:
1286
2130
  case "end":
1287
2131
  return _context25.stop();
1288
2132
  }
@@ -1321,12 +2165,20 @@ export var BaseClient = /*#__PURE__*/function () {
1321
2165
  return _context26.abrupt("return", null);
1322
2166
 
1323
2167
  case 6:
2168
+ if (!(me.__typename === "ErrorNotFound")) {
2169
+ _context26.next = 8;
2170
+ break;
2171
+ }
2172
+
2173
+ return _context26.abrupt("return", null);
2174
+
2175
+ case 8:
1324
2176
  return _context26.abrupt("return", getLink({
1325
2177
  app: "auth",
1326
- path: "/sign-up?gf=" + btoa(me.email) + "&au=" + btoa(backUrl)
2178
+ path: "/sign-up?gf=" + btoa(me.data.email) + "&au=" + btoa(backUrl)
1327
2179
  }));
1328
2180
 
1329
- case 7:
2181
+ case 9:
1330
2182
  case "end":
1331
2183
  return _context26.stop();
1332
2184
  }
@@ -1353,17 +2205,16 @@ BaseClient.getBaseUrl = function (env, graphcdn) {
1353
2205
  graphcdn = true;
1354
2206
  }
1355
2207
 
1356
- if (process.env.NODE_ENV === "test") {
1357
- return "http://localhost:4000/graphql";
2208
+ var apiUrl = process.env.SECRECY_API_URL;
2209
+
2210
+ if (apiUrl) {
2211
+ return apiUrl;
1358
2212
  }
1359
2213
 
1360
2214
  switch (env) {
1361
2215
  case "prod":
1362
2216
  return graphcdn ? "https://secrecy.graphcdn.app" : "https://api.secrecy.me/graphql";
1363
2217
 
1364
- case "staging":
1365
- return "https://api.staging.secrecy.me/graphql";
1366
-
1367
2218
  case "dev":
1368
2219
  default:
1369
2220
  return "https://api.dev.secrecy.me/graphql";
@@ -1373,4 +2224,4 @@ BaseClient.getBaseUrl = function (env, graphcdn) {
1373
2224
  BaseClient._getBaseClient = function (env, session) {
1374
2225
  return createThunder(BaseClient.getBaseUrl(env), session);
1375
2226
  };
1376
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNlQ2xpZW50LnRzIl0sIm5hbWVzIjpbInNlcmlhbGl6ZSIsImdldExpbmsiLCJ1c2Vyc0NhY2hlIiwiZ2V0U3RvcmFnZSIsIlNlbGVjdG9yIiwiY3JlYXRlVGh1bmRlciIsImludGVybmFsVG9QYXltZW50SW5mb3MiLCJwIiwiY3VycmVudFN1YnNjcmlwdGlvbiIsInN0YXRlIiwiY29sbGVjdGlvbk1ldGhvZCIsImFjdGl2YXRlZEF0IiwiRGF0ZSIsImNyZWF0ZWRBdCIsInVwZGF0ZWRBdCIsInRyaWFsRW5kc0F0IiwidHJpYWxTdGFydGVkQXQiLCJwYXVzZWRBdCIsImN1cnJlbnRQZXJpb2RFbmRzQXQiLCJjdXJyZW50UGVyaW9kU3RhcnRlZEF0IiwiY2FuY2VsZWRBdCIsImV4cGlyZXNBdCIsImludm9pY2VzIiwibWFwIiwiaSIsImRhdGUiLCJkdWUiLCJzdGF0dXMiLCJwbGFuc0NvZGVzIiwiaXNWYWxpZFBsYW4iLCJwbGFuQ29kZSIsImluY2x1ZGVzIiwiZ2V0VXNlclNlbGVjdG9yIiwidXNlcklkIiwid2l0aFB1YmxpY0tleSIsInVzZXIiLCJpZCIsImZpcnN0bmFtZSIsImxhc3RuYW1lIiwibGFuZyIsInB1YmxpY0tleSIsInVuZGVmaW5lZCIsImVtYWlsIiwicGhvbmUiLCJyb2xlIiwiZGVsZXRlZEF0IiwibGFzdExvZ2luIiwiZ2V0VXNlciIsInBhcmFtcyIsInNlbGVjdG9yIiwiY2xpZW50IiwiQmFzZUNsaWVudCIsInNlc3Npb24iLCJlbnYiLCJzZXNzaW9uSWQiLCJfZ2V0QmFzZUNsaWVudCIsInNlc3Npb25zIiwibGFzdEFjdGl2aXR5IiwidXNlckFnZW50IiwiaXAiLCJjaXR5IiwiY291bnRyeSIsImFwcFNlc3Npb25zIiwidXNlckFwcCIsImFwcCIsIm5hbWUiLCJkYXRhIiwicyIsImEiLCJsb2dvdXQiLCJsb2NhbCIsImp3dCIsImNsZWFyIiwidXNlckFwcEtleXMiLCJ1c2VyQXBwU2Vzc2lvbiIsIm1lIiwic2V0IiwidXBkYXRlUHJvZmlsZSIsIkVycm9yIiwicGxhbnMiLCJraW5kIiwiY29kZXMiLCJsaW1pdHMiLCJkb3dubG9hZEJhbmR3aWR0aCIsImRvd25sb2FkQ291bnQiLCJoYXJkRmlsZUNvdW50IiwiaGFyZEZpbGVTaXplIiwicGVyRmlsZVNpemUiLCJ1cGxvYWRCYW5kd2lkdGgiLCJ1cGxvYWRDb3VudCIsInJlY2VpdmVkTWFpbHMiLCJjb3VudCIsImZpbGVDb3VudCIsImZpbGVTaXplIiwiaGFyZENvdW50Iiwic2VudE1haWxzIiwicGF5IiwiaW5wdXQiLCJhdXRvUmVuZXciLCJjYW5jZWxQYXltZW50IiwicGF5bWVudEluZm9zIiwiaG9zdGVkVXJsIiwiYXV0b3JlbmV3IiwicGxhbiIsInRvdGFsIiwicGRmIiwiY3VycmVuY3kiLCJjbG91ZCIsInNpemUiLCJtYXhTaXplIiwibWF4Q291bnQiLCJtYWlsIiwicmVjZWl2ZWQiLCJtYXhGaWxlQ291bnQiLCJtYXhGaWxlU2l6ZSIsInNlbnQiLCJCaWdJbnQiLCJnb2RGYXRoZXJBbmRDaGlsZHJlbiIsImdvZENoaWxkcmVuIiwiZ29kRmF0aGVyIiwidXBkYXRlQXBwREJDb25maWciLCJhcHBDb2RlIiwiY29uZmlnIiwiZGJDb25maWciLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0QXBwREJDb25maWciLCJnZXRGQVEiLCJmYXEiLCJhbnN3ZXIiLCJvcmRlciIsInF1ZXN0aW9uIiwiZ2V0QmxvZyIsImJsb2ciLCJibG9nSWQiLCJhdXRob3IiLCJib2R5IiwiaW1hZ2UiLCJpbWFnZUFsdCIsInN1bW1hcnkiLCJ0aXRsZSIsImIiLCJyZXBvcnRVc2VyIiwicmVwb3J0ZWRVc2VySWQiLCJjdXN0b21NZXNzYWdlIiwic2VuZFJlcG9ydCIsInJlcG9ydGVkVXNlciIsImRlbGV0ZVVzZXIiLCJkYkdldCIsImZpZWxkIiwicmVzIiwiZGJTZXQiLCJ2YWx1ZSIsInRvU3RyaW5nIiwiZGJTZWFyY2giLCJzZWFyY2giLCJkZWxldGVGb2xkZXIiLCJtb3ZlRm9sZGVycyIsImZvbGRlcnNJZCIsInBhcmVudEZvbGRlcklkIiwibW92ZUZpbGVzIiwiZmlsZXNJZCIsImZvbGRlclNpemUiLCJmb2xkZXJJZCIsInNpemVCZWZvcmUiLCJnZXRTcG9uc29yc2hpcExpbmsiLCJiYWNrVXJsIiwicGF0aCIsImJ0b2EiLCJnZXRCYXNlVXJsIiwiZ3JhcGhjZG4iLCJwcm9jZXNzIiwiTk9ERV9FTlYiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBRUEsU0FBU0EsU0FBVCxRQUEwQixNQUExQjtBQUNBLFNBQVNDLE9BQVQsUUFBd0Isb0JBQXhCO0FBQ0EsU0FBU0MsVUFBVCxRQUEyQixZQUEzQjtBQUdBLFNBQVNDLFVBQVQsUUFBMkIscUJBQTNCO0FBUUEsU0FBU0MsUUFBVCxRQUF5QixpQkFBekI7QUFDQSxTQUFTQyxhQUFULFFBQThCLGtCQUE5Qjs7QUF5S0EsU0FBU0Msc0JBQVQsQ0FBZ0NDLENBQWhDLEVBQXVFO0FBQ3JFLHlDQUNLQSxDQURMO0FBRUVDLElBQUFBLG1CQUFtQixrQ0FDZEQsQ0FBQyxDQUFDQyxtQkFEWTtBQUVqQkMsTUFBQUEsS0FBSyxFQUFFRixDQUFDLENBQUNDLG1CQUFGLENBQXNCQyxLQUZaO0FBR2pCQyxNQUFBQSxnQkFBZ0IsRUFBRUgsQ0FBQyxDQUFDQyxtQkFBRixDQUNmRSxnQkFKYztBQUtqQkMsTUFBQUEsV0FBVyxFQUFFSixDQUFDLENBQUNDLG1CQUFGLENBQXNCRyxXQUF0QixHQUNULElBQUlDLElBQUosQ0FBU0wsQ0FBQyxDQUFDQyxtQkFBRixDQUFzQkcsV0FBL0IsQ0FEUyxHQUVULElBUGE7QUFRakJFLE1BQUFBLFNBQVMsRUFBRU4sQ0FBQyxDQUFDQyxtQkFBRixDQUFzQkssU0FBdEIsR0FDUCxJQUFJRCxJQUFKLENBQVNMLENBQUMsQ0FBQ0MsbUJBQUYsQ0FBc0JLLFNBQS9CLENBRE8sR0FFUCxJQVZhO0FBV2pCQyxNQUFBQSxTQUFTLEVBQUVQLENBQUMsQ0FBQ0MsbUJBQUYsQ0FBc0JNLFNBQXRCLEdBQ1AsSUFBSUYsSUFBSixDQUFTTCxDQUFDLENB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QUFSLENBQVl1SCxRQUFaLEtBQXlCLE1BQTdCLEVBQXFDO0FBQ25DLFdBQU8sK0JBQVA7QUFDRDs7QUFFRCxVQUFRdkgsR0FBUjtBQUNFLFNBQUssTUFBTDtBQUNFLGFBQU9xSCxRQUFRLEdBQ1gsOEJBRFcsR0FFWCxnQ0FGSjs7QUFHRixTQUFLLFNBQUw7QUFDRSxhQUFPLHdDQUFQOztBQUNGLFNBQUssS0FBTDtBQUNBO0FBQ0UsYUFBTyxvQ0FBUDtBQVRKO0FBV0QsQzs7QUFwQlV2SCxVLENBc0JhSSxjLEdBQWlCLFVBQ3ZDRixHQUR1QyxFQUV2Q0QsT0FGdUM7QUFBQSxTQUl2Qy9DLGFBQWEsQ0FBQzhDLFVBQVUsQ0FBQ3NILFVBQVgsQ0FBc0JwSCxHQUF0QixDQUFELEVBQTZCRCxPQUE3QixDQUowQjtBQUFBLEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERvd25sb2FkUHJvZ3Jlc3MgYXMgRExQcm9ncmVzcyB9IGZyb20gXCJreVwiO1xuaW1wb3J0IHR5cGUgeyBEb2N1bWVudCB9IGZyb20gXCJic29uXCI7XG5pbXBvcnQgeyBzZXJpYWxpemUgfSBmcm9tIFwiYnNvblwiO1xuaW1wb3J0IHsgZ2V0TGluayB9IGZyb20gXCJAc2VjcmVjeS9saWItdXRpbHNcIjtcbmltcG9ydCB7IHVzZXJzQ2FjaGUgfSBmcm9tIFwiLi9jYWNoZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBVc2VyU2Vzc2lvbiB9IGZyb20gXCIuL2NsaWVudC90eXBlcy9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZWNyZWN5RW52IH0gZnJvbSBcIi4vY2xpZW50L2hlbHBlcnMuanNcIjtcbmltcG9ydCB7IGdldFN0b3JhZ2UgfSBmcm9tIFwiLi9jbGllbnQvc3RvcmFnZS5qc1wiO1xuaW1wb3J0IHR5cGUge1xuICBMYW5nLFxuICBQYXlJbnB1dFR5cGUsXG4gIFBsYW5LaW5kLFxuICBUaHVuZGVyLFxuICBVc2VyUm9sZVxufSBmcm9tIFwiLi96ZXVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBTZWxlY3RvciB9IGZyb20gXCIuL3pldXMvaW5kZXguanNcIjtcbmltcG9ydCB7IGNyZWF0ZVRodW5kZXIgfSBmcm9tIFwiLi9aZXVzVGh1bmRlci5qc1wiO1xuXG5leHBvcnQgdHlwZSBEb3dubG9hZFByb2dyZXNzID0gRExQcm9ncmVzcztcblxuZXhwb3J0IHR5cGUgUGF5SW5wdXQgPSB7XG4gIHR5cGU6IFBheUlucHV0VHlwZTtcbiAgdG9rZW46IHN0cmluZztcbiAgZmlyc3ROYW1lOiBzdHJpbmc7XG4gIGxhc3ROYW1lOiBzdHJpbmc7XG4gIHN0cmVldDogc3RyaW5nO1xuICBwb3N0YWxDb2RlOiBzdHJpbmc7XG4gIGNpdHk6IHN0cmluZztcbiAgY291bnRyeTogc3RyaW5nO1xuICBtb250aDogc3RyaW5nO1xuICB5ZWFyOiBzdHJpbmc7XG4gIGN2djogc3RyaW5nO1xuICBudW1iZXI6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIE1haWxMaW1pdHMgPSB7XG4gIGNvdW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBmaWxlQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGZpbGVTaXplPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoYXJkQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhhcmRGaWxlQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhhcmRGaWxlU2l6ZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcGVyRmlsZVNpemU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBMaW1pdHMgPSB7XG4gIGRvd25sb2FkQmFuZHdpZHRoPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkb3dubG9hZENvdW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoYXJkRmlsZUNvdW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoYXJkRmlsZVNpemU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHBlckZpbGVTaXplPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWNlaXZlZE1haWxzOiBNYWlsTGltaXRzO1xuICBzZW50TWFpbHM6IE1haWxMaW1pdHM7XG4gIHVwbG9hZEJhbmR3aWR0aD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdXBsb2FkQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBHb2RVc2VyID0ge1xuICBpZDogc3RyaW5nO1xuICBmaXJzdG5hbWU6IHN0cmluZztcbiAgbGFzdG5hbWU6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgcGhvbmU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEdvZEZhdGhlckFuZENoaWxkcmVuID0ge1xuICBnb2RGYXRoZXI6IEdvZFVzZXIgfCBudWxsO1xuICBnb2RDaGlsZHJlbjogR29kVXNlcltdO1xufTtcblxuZXhwb3J0IHR5cGUgUGxhbiA9IHtcbiAgY29kZXM6IHN0cmluZ1tdO1xuICBraW5kOiBQbGFuS2luZDtcbiAgbGltaXRzOiBMaW1pdHM7XG59O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpcHRpb25TdGF0ZSA9XG4gIHwgXCJhY3RpdmVcIlxuICB8IFwiY2FuY2VsZWRcIlxuICB8IFwicGF1c2VkXCJcbiAgfCBcImV4cGlyZWRcIlxuICB8IFwiZnV0dXJlXCJcbiAgfCBcImluX3RyaWFsXCJcbiAgfCBcImxpdmVcIlxuICB8IFwicGFzdF9kdWVcIjtcblxuZXhwb3J0IHR5cGUgU3Vic2NyaXB0aW9uQ29sbGVjdGlvbk1ldGhvZCA9IFwiYXV0b21hdGljXCIgfCBcIm1hbnVhbFwiO1xuXG50eXBlIEludGVybmFsU3Vic2NyaXB0aW9uID0ge1xuICBhdXRvcmVuZXc6IGJvb2xlYW47XG4gIGFjdGl2YXRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3VycmVudFBlcmlvZEVuZHNBdD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGN1cnJlbnRQZXJpb2RTdGFydGVkQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjYW5jZWxlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3JlYXRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgZXhwaXJlc0F0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcGF1c2VkQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB0cmlhbEVuZHNBdD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHRyaWFsU3RhcnRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdXBkYXRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY29sbGVjdGlvbk1ldGhvZDogc3RyaW5nO1xuICBzdGF0ZTogc3RyaW5nO1xuICBwbGFuPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcGxhbkNvZGU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB0b3RhbD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQ7XG59O1xuXG50eXBlIFJlY3VybHlJbnZvaWNlU3RhdHVzID1cbiAgfCBcInBlbmRpbmdcIlxuICB8IFwicGFpZFwiXG4gIHwgXCJmYWlsZWRcIlxuICB8IFwicGFzdF9kdWVcIlxuICB8IFwib3BlblwiXG4gIHwgXCJjbG9zZWRcIlxuICB8IFwidm9pZGVkXCJcbiAgfCBcInByb2Nlc3NpbmdcIjtcblxudHlwZSBJbnRlcm5hbFJlY3VybHlJbnZvaWNlcyA9IHtcbiAgcGRmOiBzdHJpbmc7XG4gIGRhdGU6IHN0cmluZztcbiAgZHVlOiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xuICB0b3RhbDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGN1cnJlbmN5OiBzdHJpbmc7XG59O1xuXG50eXBlIEludGVybmFsUGF5bWVudEluZm9zID0ge1xuICBob3N0ZWRVcmw6IHN0cmluZztcbiAgY3VycmVudFN1YnNjcmlwdGlvbjogSW50ZXJuYWxTdWJzY3JpcHRpb247XG4gIGludm9pY2VzOiBJbnRlcm5hbFJlY3VybHlJbnZvaWNlc1tdO1xufTtcblxuZXhwb3J0IHR5cGUgU3Vic2NyaXB0aW9uID0ge1xuICBhdXRvcmVuZXc6IGJvb2xlYW47XG4gIGFjdGl2YXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGN1cnJlbnRQZXJpb2RFbmRzQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3VycmVudFBlcmlvZFN0YXJ0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjYW5jZWxlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGNyZWF0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBleHBpcmVzQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcGF1c2VkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdHJpYWxFbmRzQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdHJpYWxTdGFydGVkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdXBkYXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGNvbGxlY3Rpb25NZXRob2Q6IFN1YnNjcmlwdGlvbkNvbGxlY3Rpb25NZXRob2Q7XG4gIHN0YXRlOiBTdWJzY3JpcHRpb25TdGF0ZTtcbiAgcGxhbj86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHBsYW5Db2RlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdG90YWw/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgUmVjdXJseUludm9pY2VzID0ge1xuICBwZGY6IHN0cmluZztcbiAgZGF0ZTogRGF0ZTtcbiAgZHVlOiBEYXRlO1xuICBzdGF0dXM6IFJlY3VybHlJbnZvaWNlU3RhdHVzO1xuICB0b3RhbDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGN1cnJlbmN5OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBQYXltZW50SW5mb3MgPSB7XG4gIGhvc3RlZFVybDogc3RyaW5nO1xuICBjdXJyZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIGludm9pY2VzOiBSZWN1cmx5SW52b2ljZXNbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFNlbmRSZXBvcnQgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHVzZXI6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGZpcnN0bmFtZTogc3RyaW5nO1xuICAgIGxhc3RuYW1lOiBzdHJpbmc7XG4gICAgZW1haWw6IHN0cmluZztcbiAgfTtcbiAgcmVwb3J0ZWRVc2VyOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBmaXJzdG5hbWU6IHN0cmluZztcbiAgICBsYXN0bmFtZTogc3RyaW5nO1xuICAgIGVtYWlsOiBzdHJpbmc7XG4gIH07XG4gIGN1c3RvbU1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5mdW5jdGlvbiBpbnRlcm5hbFRvUGF5bWVudEluZm9zKHA6IEludGVybmFsUGF5bWVudEluZm9zKTogUGF5bWVudEluZm9zIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5wLFxuICAgIGN1cnJlbnRTdWJzY3JpcHRpb246IHtcbiAgICAgIC4uLnAuY3VycmVudFN1YnNjcmlwdGlvbixcbiAgICAgIHN0YXRlOiBwLmN1cnJlbnRTdWJzY3JpcHRpb24uc3RhdGUgYXMgU3Vic2NyaXB0aW9uU3RhdGUsXG4gICAgICBjb2xsZWN0aW9uTWV0aG9kOiBwLmN1cnJlbnRTdWJzY3JpcHRpb25cbiAgICAgICAgLmNvbGxlY3Rpb25NZXRob2QgYXMgU3Vic2NyaXB0aW9uQ29sbGVjdGlvbk1ldGhvZCxcbiAgICAgIGFjdGl2YXRlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24uYWN0aXZhdGVkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24uYWN0aXZhdGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGNyZWF0ZWRBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLmNyZWF0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi5jcmVhdGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHVwZGF0ZWRBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLnVwZGF0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi51cGRhdGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRyaWFsRW5kc0F0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxFbmRzQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxFbmRzQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRyaWFsU3RhcnRlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxTdGFydGVkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxTdGFydGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHBhdXNlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24ucGF1c2VkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24ucGF1c2VkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGN1cnJlbnRQZXJpb2RFbmRzQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5jdXJyZW50UGVyaW9kRW5kc0F0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLmN1cnJlbnRQZXJpb2RFbmRzQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGN1cnJlbnRQZXJpb2RTdGFydGVkQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5jdXJyZW50UGVyaW9kU3RhcnRlZEF0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLmN1cnJlbnRQZXJpb2RTdGFydGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGNhbmNlbGVkQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5jYW5jZWxlZEF0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLmNhbmNlbGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGV4cGlyZXNBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLmV4cGlyZXNBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi5leHBpcmVzQXQpXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG4gICAgaW52b2ljZXM6IHAuaW52b2ljZXMubWFwKGkgPT4gKHtcbiAgICAgIC4uLmksXG4gICAgICBkYXRlOiBuZXcgRGF0ZShpLmRhdGUpLFxuICAgICAgZHVlOiBuZXcgRGF0ZShpLmR1ZSksXG4gICAgICBzdGF0dXM6IGkuc3RhdHVzIGFzIFJlY3VybHlJbnZvaWNlU3RhdHVzXG4gICAgfSkpXG4gIH07XG59XG5cbmNvbnN0IHBsYW5zQ29kZXMgPSBbXG4gIFwiYmFzaWNfbW9udGhcIixcbiAgXCJhZHZhbmNlZF9tb250aFwiLFxuICBcInByb19tb250aFwiLFxuICBcImJhc2ljX3llYXJcIixcbiAgXCJhZHZhbmNlZF95ZWFyXCIsXG4gIFwicHJvX3llYXJcIlxuXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgU2VjcmVjeVBsYW5zQ29kZXMgPSB0eXBlb2YgcGxhbnNDb2Rlc1tudW1iZXJdO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFBsYW4ocGxhbkNvZGU6IHN0cmluZyk6IHBsYW5Db2RlIGlzIFNlY3JlY3lQbGFuc0NvZGVzIHtcbiAgcmV0dXJuIHBsYW5zQ29kZXMuaW5jbHVkZXMocGxhbkNvZGUgYXMgU2VjcmVjeVBsYW5zQ29kZXMpO1xufVxuXG5leHBvcnQgdHlwZSBVc2VyRGF0YTxcbiAgVCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbj4gPSB7XG4gIGlzU3VwZXJ1c2VyOiBib29sZWFuO1xuICBpc1NlYXJjaGFibGU6IGJvb2xlYW47XG59ICYgVDtcblxuZXhwb3J0IHR5cGUgRm9sZGVyU2l6ZSA9IHsgc2l6ZTogYmlnaW50OyBzaXplQmVmb3JlOiBiaWdpbnQgfTtcblxuY29uc3QgZ2V0VXNlclNlbGVjdG9yID0gKFxuICB1c2VySWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIHdpdGhQdWJsaWNLZXk6IGJvb2xlYW4gfCB1bmRlZmluZWRcbikgPT4ge1xuICBjb25zdCB7IHVzZXIgfSA9IFNlbGVjdG9yKFwiUXVlcnlcIikoe1xuICAgIHVzZXI6IFtcbiAgICAgIHsgdXNlcklkIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiB0cnVlLFxuICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICBsYW5nOiB0cnVlLFxuICAgICAgICBwdWJsaWNLZXk6IHdpdGhQdWJsaWNLZXkgPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgcGhvbmU6IHRydWUsXG4gICAgICAgIHJvbGU6IHRydWUsXG4gICAgICAgIGRlbGV0ZWRBdDogdHJ1ZSxcbiAgICAgICAgbGFzdExvZ2luOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9KTtcbiAgcmV0dXJuIHVzZXI7XG59O1xuXG5leHBvcnQgdHlwZSBBcHBEQkNvbmZpZ0ZpZWxkID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IFwic3RyaW5nXCIgfCBcIm51bWJlclwiIHwgXCJib29sZWFuXCIgfCBcIm9iamVjdFwiO1xuICBpc0FycmF5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaXNOdWxsYWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGlzRWRpdGFibGU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBpc0tleT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGRlZmF1bHQ/OiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgQXBwREJDb25maWcgPSB7XG4gIGZpZWxkczogQXBwREJDb25maWdGaWVsZFtdO1xufTtcblxuZXhwb3J0IHR5cGUgRmFxSXRlbSA9IHtcbiAgb3JkZXI6IG51bWJlcjtcbiAgcXVlc3Rpb246IHN0cmluZztcbiAgYW5zd2VyOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBCbG9nSXRlbSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgYmxvZ0lkOiBzdHJpbmc7XG4gIG9yZGVyOiBudW1iZXI7XG4gIGF1dGhvcjogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG4gIGRhdGU6IERhdGU7XG4gIGltYWdlOiBzdHJpbmc7XG4gIGltYWdlQWx0OiBzdHJpbmc7XG4gIHN1bW1hcnk6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFVzZXJCYXNlID0ge1xuICBlbWFpbDogc3RyaW5nO1xuICBwaG9uZTogc3RyaW5nO1xuICBsYXN0bmFtZTogc3RyaW5nO1xuICByb2xlOiBVc2VyUm9sZTtcbiAgZmlyc3RuYW1lOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIGRlbGV0ZWRBdDogRGF0ZSB8IG51bGw7XG4gIGxhc3RMb2dpbjogRGF0ZTtcbiAgbGFuZzogTGFuZztcbn07XG5cbnR5cGUgV2l0aFB1YmxpY0tleSA9IHsgd2l0aFB1YmxpY0tleT86IGJvb2xlYW4gfTtcblxuZXhwb3J0IHR5cGUgVXNlcjxUIGV4dGVuZHMgV2l0aFB1YmxpY0tleSA9IFdpdGhQdWJsaWNLZXk+ID0gVCBleHRlbmRzIHtcbiAgd2l0aFB1YmxpY0tleTogdHJ1ZTtcbn1cbiAgPyBVc2VyQmFzZSAmIHsgcHVibGljS2V5OiBzdHJpbmcgfVxuICA6IFVzZXJCYXNlO1xuXG50eXBlIENsYXNzR2V0VXNlclBhcmFtcyA9IFdpdGhQdWJsaWNLZXkgJiB7XG4gIHVzZXJJZD86IHN0cmluZztcbn07XG50eXBlIEdldFVzZXJQYXJhbXMgPSBDbGFzc0dldFVzZXJQYXJhbXMgJiB7XG4gIGNsaWVudDogUmV0dXJuVHlwZTx0eXBlb2YgVGh1bmRlcj47XG59O1xuXG50eXBlIFN0YXRpY0dldFVzZXJQYXJhbXMgPSBDbGFzc0dldFVzZXJQYXJhbXMgJiB7XG4gIGVudjogU2VjcmVjeUVudjtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFVzZXI8VSBleHRlbmRzIFdpdGhQdWJsaWNLZXk+KFxuICBwYXJhbXM6IEdldFVzZXJQYXJhbXNcbik6IFByb21pc2U8VXNlcjxVPiB8IG51bGw+IHtcbiAgY29uc3Qgc2VsZWN0b3IgPSBnZXRVc2VyU2VsZWN0b3IocGFyYW1zLnVzZXJJZCwgcGFyYW1zLndpdGhQdWJsaWNLZXkpO1xuICBjb25zdCB7IHVzZXIgfSA9IGF3YWl0IHBhcmFtcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgdXNlcjogc2VsZWN0b3JcbiAgfSk7XG5cbiAgaWYgKCF1c2VyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnVzZXIsXG4gICAgbGFzdExvZ2luOiBuZXcgRGF0ZSh1c2VyLmxhc3RMb2dpbiksXG4gICAgZGVsZXRlZEF0OiB1c2VyLmRlbGV0ZWRBdCA/IG5ldyBEYXRlKHVzZXIuZGVsZXRlZEF0KSA6IG51bGxcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgQ2xvdWRMaW1pdHMgPSB7XG4gIGNvdW50OiBiaWdpbnQ7XG4gIG1heENvdW50OiBiaWdpbnQgfCBudWxsO1xuICBzaXplOiBiaWdpbnQ7XG4gIG1heFNpemU6IGJpZ2ludCB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBNYWlsTGltaXRzVmFsdWVzID0ge1xuICBjb3VudDogYmlnaW50O1xuICBtYXhDb3VudDogYmlnaW50IHwgbnVsbDtcbiAgZmlsZVNpemU6IGJpZ2ludDtcbiAgbWF4RmlsZVNpemU6IGJpZ2ludCB8IG51bGw7XG4gIGZpbGVDb3VudDogYmlnaW50O1xuICBtYXhGaWxlQ291bnQ6IGJpZ2ludCB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBRdWVyeUxpbWl0cyA9IHtcbiAgY2xvdWQ6IENsb3VkTGltaXRzO1xuICBtYWlsOiB7XG4gICAgc2VudDogTWFpbExpbWl0c1ZhbHVlcztcbiAgICByZWNlaXZlZDogTWFpbExpbWl0c1ZhbHVlcztcbiAgfTtcbn07XG5cbmV4cG9ydCBjbGFzcyBCYXNlQ2xpZW50IHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBnZXRCYXNlVXJsID0gKFxuICAgIGVudjogU2VjcmVjeUVudiA9IFwicHJvZFwiLFxuICAgIGdyYXBoY2RuID0gdHJ1ZVxuICApOiBzdHJpbmcgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJ0ZXN0XCIpIHtcbiAgICAgIHJldHVybiBcImh0dHA6Ly9sb2NhbGhvc3Q6NDAwMC9ncmFwaHFsXCI7XG4gICAgfVxuXG4gICAgc3dpdGNoIChlbnYpIHtcbiAgICAgIGNhc2UgXCJwcm9kXCI6XG4gICAgICAgIHJldHVybiBncmFwaGNkblxuICAgICAgICAgID8gXCJodHRwczovL3NlY3JlY3kuZ3JhcGhjZG4uYXBwXCJcbiAgICAgICAgICA6IFwiaHR0cHM6Ly9hcGkuc2VjcmVjeS5tZS9ncmFwaHFsXCI7XG4gICAgICBjYXNlIFwic3RhZ2luZ1wiOlxuICAgICAgICByZXR1cm4gXCJodHRwczovL2FwaS5zdGFnaW5nLnNlY3JlY3kubWUvZ3JhcGhxbFwiO1xuICAgICAgY2FzZSBcImRldlwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9hcGkuZGV2LnNlY3JlY3kubWUvZ3JhcGhxbFwiO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZ2V0QmFzZUNsaWVudCA9IChcbiAgICBlbnY6IFNlY3JlY3lFbnYsXG4gICAgc2Vzc2lvbj86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUmV0dXJuVHlwZTx0eXBlb2YgVGh1bmRlcj4gPT5cbiAgICBjcmVhdGVUaHVuZGVyKEJhc2VDbGllbnQuZ2V0QmFzZVVybChlbnYpLCBzZXNzaW9uKTtcblxuICBwcm90ZWN0ZWQgY2xpZW50OiBSZXR1cm5UeXBlPHR5cGVvZiBUaHVuZGVyPjtcblxuICBwdWJsaWMgc2Vzc2lvbklkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2Vzc2lvbjogc3RyaW5nLCBlbnY6IFNlY3JlY3lFbnYpIHtcbiAgICB0aGlzLnNlc3Npb25JZCA9IHNlc3Npb247XG4gICAgdGhpcy5jbGllbnQgPSBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KGVudiwgc2Vzc2lvbik7XG4gIH1cblxuICBhc3luYyBzZXNzaW9ucygpOiBQcm9taXNlPFVzZXJTZXNzaW9uW10+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICB1c2VyOiBbXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgc2Vzc2lvbnM6IHtcbiAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgbGFzdEFjdGl2aXR5OiB0cnVlLFxuICAgICAgICAgICAgdXNlckFnZW50OiB0cnVlLFxuICAgICAgICAgICAgaXA6IHRydWUsXG4gICAgICAgICAgICBjaXR5OiB0cnVlLFxuICAgICAgICAgICAgY291bnRyeTogdHJ1ZSxcbiAgICAgICAgICAgIGFwcFNlc3Npb25zOiB7XG4gICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICBsYXN0QWN0aXZpdHk6IHRydWUsXG4gICAgICAgICAgICAgIHVzZXJBZ2VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgaXA6IHRydWUsXG4gICAgICAgICAgICAgIGNpdHk6IHRydWUsXG4gICAgICAgICAgICAgIGNvdW50cnk6IHRydWUsXG4gICAgICAgICAgICAgIHVzZXJBcHA6IHtcbiAgICAgICAgICAgICAgICBhcHA6IHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGNvbnN0IHNlc3Npb25zOiBVc2VyU2Vzc2lvbltdID1cbiAgICAgIGRhdGEudXNlcj8uc2Vzc2lvbnMubWFwKHMgPT4gKHtcbiAgICAgICAgaWQ6IHMuaWQsXG4gICAgICAgIGlwOiBzLmlwLFxuICAgICAgICBjaXR5OiBzLmNpdHksXG4gICAgICAgIGNvdW50cnk6IHMuY291bnRyeSxcbiAgICAgICAgbGFzdEFjdGl2aXR5OiBzLmxhc3RBY3Rpdml0eSA/IG5ldyBEYXRlKHMubGFzdEFjdGl2aXR5KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgdXNlckFnZW50OiBzLnVzZXJBZ2VudCxcbiAgICAgICAgYXBwU2Vzc2lvbnM6IHMuYXBwU2Vzc2lvbnMubWFwKGEgPT4gKHtcbiAgICAgICAgICBpZDogYS5pZCxcbiAgICAgICAgICBpcDogYS5pcCxcbiAgICAgICAgICBjaXR5OiBhLmNpdHksXG4gICAgICAgICAgY291bnRyeTogYS5jb3VudHJ5LFxuICAgICAgICAgIGxhc3RBY3Rpdml0eTogYS5sYXN0QWN0aXZpdHkgPyBuZXcgRGF0ZShhLmxhc3RBY3Rpdml0eSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgdXNlckFnZW50OiBhLnVzZXJBZ2VudCxcbiAgICAgICAgICBhcHA6IGEudXNlckFwcD8uYXBwLm5hbWUgPz8gXCJcIlxuICAgICAgICB9KSlcbiAgICAgIH0pKSA/PyBbXTtcblxuICAgIHJldHVybiBzZXNzaW9ucztcbiAgfVxuXG4gIGFzeW5jIGxvZ291dChzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFzZXNzaW9uSWQpIHtcbiAgICAgIGNvbnN0IGxvY2FsID0gZ2V0U3RvcmFnZShmYWxzZSk7XG4gICAgICBjb25zdCBzZXNzaW9uID0gZ2V0U3RvcmFnZSh0cnVlKTtcbiAgICAgIGxvY2FsLmp3dC5jbGVhcigpO1xuICAgICAgbG9jYWwudXNlckFwcEtleXMuY2xlYXIoKTtcbiAgICAgIGxvY2FsLnVzZXJBcHBTZXNzaW9uLmNsZWFyKCk7XG4gICAgICBzZXNzaW9uLmp3dC5jbGVhcigpO1xuICAgICAgc2Vzc2lvbi51c2VyQXBwS2V5cy5jbGVhcigpO1xuICAgICAgc2Vzc2lvbi51c2VyQXBwU2Vzc2lvbi5jbGVhcigpO1xuICAgICAgdXNlcnNDYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICAgIGxvZ291dDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlc3Npb25JZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbWU8VCBleHRlbmRzIFdpdGhQdWJsaWNLZXkgPSBXaXRoUHVibGljS2V5PihcbiAgICBwYXJhbXM/OiBUXG4gICk6IFByb21pc2U8VXNlcjxUPiB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy51c2VyKHBhcmFtcyB8fCAoeyB3aXRoUHVibGljS2V5OiB0cnVlIH0gYXMgVCkpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHVzZXI8VCBleHRlbmRzIFN0YXRpY0dldFVzZXJQYXJhbXM+KFxuICAgIHBhcmFtczogVCxcbiAgICBzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8VXNlcjxUPiB8IG51bGw+IHtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgZ2V0VXNlcjxUPih7XG4gICAgICBjbGllbnQ6IHRoaXMuX2dldEJhc2VDbGllbnQocGFyYW1zLmVudiwgc2Vzc2lvbklkKSxcbiAgICAgIHVzZXJJZDogcGFyYW1zLnVzZXJJZCxcbiAgICAgIHdpdGhQdWJsaWNLZXk6IHBhcmFtcy53aXRoUHVibGljS2V5XG4gICAgfSk7XG5cbiAgICBpZiAodXNlcikge1xuICAgICAgdXNlcnNDYWNoZS5zZXQodXNlci5pZCwgdXNlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzZXI7XG4gIH1cblxuICBhc3luYyB1c2VyPFQgZXh0ZW5kcyBDbGFzc0dldFVzZXJQYXJhbXM+KHBhcmFtczogVCk6IFByb21pc2U8VXNlcjxUPiB8IG51bGw+IHtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgZ2V0VXNlcjxUPih7XG4gICAgICBjbGllbnQ6IHRoaXMuY2xpZW50LFxuICAgICAgdXNlcklkOiBwYXJhbXMudXNlcklkLFxuICAgICAgd2l0aFB1YmxpY0tleTogcGFyYW1zLndpdGhQdWJsaWNLZXlcbiAgICB9KTtcblxuICAgIGlmICh1c2VyKSB7XG4gICAgICB1c2Vyc0NhY2hlLnNldCh1c2VyLmlkLCB1c2VyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNlcjtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVByb2ZpbGUoe1xuICAgIGZpcnN0bmFtZSxcbiAgICBsYXN0bmFtZSxcbiAgICBsYW5nXG4gIH06IHtcbiAgICBmaXJzdG5hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgbGFzdG5hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgbGFuZzogTGFuZyB8IG51bGw7XG4gIH0pOiBQcm9taXNlPFVzZXI+IHtcbiAgICBjb25zdCB7IHVwZGF0ZVByb2ZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgdXBkYXRlUHJvZmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlyc3RuYW1lLFxuICAgICAgICAgIGxhc3RuYW1lLFxuICAgICAgICAgIGxhbmdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICBsYW5nOiB0cnVlLFxuICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgIHBob25lOiB0cnVlLFxuICAgICAgICAgIHJvbGU6IHRydWUsXG4gICAgICAgICAgZGVsZXRlZEF0OiB0cnVlLFxuICAgICAgICAgIGxhc3RMb2dpbjogdHJ1ZVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVwZGF0ZVByb2ZpbGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi51cGRhdGVQcm9maWxlLFxuICAgICAgbGFzdExvZ2luOiBuZXcgRGF0ZSh1cGRhdGVQcm9maWxlLmxhc3RMb2dpbiksXG4gICAgICBkZWxldGVkQXQ6IHVwZGF0ZVByb2ZpbGUuZGVsZXRlZEF0XG4gICAgICAgID8gbmV3IERhdGUodXBkYXRlUHJvZmlsZS5kZWxldGVkQXQpXG4gICAgICAgIDogbnVsbFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcGxhbnMoXG4gICAgZW52OiBTZWNyZWN5RW52LFxuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxQbGFuW10+IHtcbiAgICBjb25zdCB7IHBsYW5zIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KGVudiwgc2Vzc2lvbklkKShcInF1ZXJ5XCIpKHtcbiAgICAgIHBsYW5zOiB7XG4gICAgICAgIGtpbmQ6IHRydWUsXG4gICAgICAgIGNvZGVzOiB0cnVlLFxuICAgICAgICBsaW1pdHM6IHtcbiAgICAgICAgICBkb3dubG9hZEJhbmR3aWR0aDogdHJ1ZSxcbiAgICAgICAgICBkb3dubG9hZENvdW50OiB0cnVlLFxuICAgICAgICAgIGhhcmRGaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgaGFyZEZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgIHBlckZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgIHVwbG9hZEJhbmR3aWR0aDogdHJ1ZSxcbiAgICAgICAgICB1cGxvYWRDb3VudDogdHJ1ZSxcbiAgICAgICAgICByZWNlaXZlZE1haWxzOiB7XG4gICAgICAgICAgICBjb3VudDogdHJ1ZSxcbiAgICAgICAgICAgIGZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgIGZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgaGFyZENvdW50OiB0cnVlLFxuICAgICAgICAgICAgaGFyZEZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgIGhhcmRGaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgIHBlckZpbGVTaXplOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZW50TWFpbHM6IHtcbiAgICAgICAgICAgIGNvdW50OiB0cnVlLFxuICAgICAgICAgICAgZmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgZmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgICBoYXJkQ291bnQ6IHRydWUsXG4gICAgICAgICAgICBoYXJkRmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgaGFyZEZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgcGVyRmlsZVNpemU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBwbGFucztcbiAgfVxuXG4gIGFzeW5jIHBheShcbiAgICBwbGFuQ29kZTogU2VjcmVjeVBsYW5zQ29kZXMsXG4gICAgaW5wdXQ6IFBheUlucHV0LFxuICAgIGF1dG9SZW5ldz86IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgcGF5IH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHBheTogW1xuICAgICAgICB7XG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgcGxhbkNvZGUsXG4gICAgICAgICAgYXV0b1JlbmV3XG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBwYXkgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBjYW5jZWxQYXltZW50KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgY2FuY2VsUGF5bWVudCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBjYW5jZWxQYXltZW50OiB0cnVlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gY2FuY2VsUGF5bWVudCA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIHBheW1lbnRJbmZvcygpOiBQcm9taXNlPFBheW1lbnRJbmZvcyB8IG51bGw+IHtcbiAgICBjb25zdCB7IHBheW1lbnRJbmZvcyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICBwYXltZW50SW5mb3M6IHtcbiAgICAgICAgaG9zdGVkVXJsOiB0cnVlLFxuICAgICAgICBjdXJyZW50U3Vic2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXV0b3JlbmV3OiB0cnVlLFxuICAgICAgICAgIGFjdGl2YXRlZEF0OiB0cnVlLFxuICAgICAgICAgIGN1cnJlbnRQZXJpb2RFbmRzQXQ6IHRydWUsXG4gICAgICAgICAgY3VycmVudFBlcmlvZFN0YXJ0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICBjYW5jZWxlZEF0OiB0cnVlLFxuICAgICAgICAgIGNyZWF0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICBleHBpcmVzQXQ6IHRydWUsXG4gICAgICAgICAgcGF1c2VkQXQ6IHRydWUsXG4gICAgICAgICAgdHJpYWxFbmRzQXQ6IHRydWUsXG4gICAgICAgICAgdHJpYWxTdGFydGVkQXQ6IHRydWUsXG4gICAgICAgICAgdXBkYXRlZEF0OiB0cnVlLFxuICAgICAgICAgIHN0YXRlOiB0cnVlLFxuICAgICAgICAgIGNvbGxlY3Rpb25NZXRob2Q6IHRydWUsXG4gICAgICAgICAgcGxhbjogdHJ1ZSxcbiAgICAgICAgICBwbGFuQ29kZTogdHJ1ZSxcblxuICAgICAgICAgIHRvdGFsOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGludm9pY2VzOiB7XG4gICAgICAgICAgcGRmOiB0cnVlLFxuICAgICAgICAgIGRhdGU6IHRydWUsXG4gICAgICAgICAgZHVlOiB0cnVlLFxuICAgICAgICAgIHN0YXR1czogdHJ1ZSxcbiAgICAgICAgICB0b3RhbDogdHJ1ZSxcbiAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgIGN1cnJlbmN5OiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghcGF5bWVudEluZm9zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZXJuYWxUb1BheW1lbnRJbmZvcyhwYXltZW50SW5mb3MpO1xuICB9XG5cbiAgYXN5bmMgbGltaXRzKCk6IFByb21pc2U8UXVlcnlMaW1pdHMgfCBudWxsPiB7XG4gICAgY29uc3QgeyBsaW1pdHMgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgbGltaXRzOiB7XG4gICAgICAgIGNsb3VkOiB7XG4gICAgICAgICAgc2l6ZTogdHJ1ZSxcbiAgICAgICAgICBtYXhTaXplOiB0cnVlLFxuICAgICAgICAgIGNvdW50OiB0cnVlLFxuICAgICAgICAgIG1heENvdW50OiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIG1haWw6IHtcbiAgICAgICAgICByZWNlaXZlZDoge1xuICAgICAgICAgICAgY291bnQ6IHRydWUsXG4gICAgICAgICAgICBtYXhDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgIGZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgIG1heEZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgIGZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgbWF4RmlsZVNpemU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbnQ6IHtcbiAgICAgICAgICAgIGNvdW50OiB0cnVlLFxuICAgICAgICAgICAgbWF4Q291bnQ6IHRydWUsXG4gICAgICAgICAgICBmaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICBtYXhGaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICBmaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1heEZpbGVTaXplOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWxpbWl0cykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgeyBjbG91ZCwgbWFpbCB9ID0gbGltaXRzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNsb3VkOiB7XG4gICAgICAgIGNvdW50OiBCaWdJbnQoY2xvdWQuY291bnQpLFxuICAgICAgICBzaXplOiBCaWdJbnQoY2xvdWQuc2l6ZSksXG4gICAgICAgIG1heENvdW50OiBjbG91ZC5tYXhDb3VudCA/IEJpZ0ludChjbG91ZC5tYXhDb3VudCkgOiBudWxsLFxuICAgICAgICBtYXhTaXplOiBjbG91ZC5tYXhTaXplID8gQmlnSW50KGNsb3VkLm1heFNpemUpIDogbnVsbFxuICAgICAgfSxcbiAgICAgIG1haWw6IHtcbiAgICAgICAgcmVjZWl2ZWQ6IHtcbiAgICAgICAgICBjb3VudDogQmlnSW50KG1haWwucmVjZWl2ZWQuY291bnQpLFxuICAgICAgICAgIG1heENvdW50OiBtYWlsLnJlY2VpdmVkLm1heENvdW50XG4gICAgICAgICAgICA/IEJpZ0ludChtYWlsLnJlY2VpdmVkLm1heENvdW50KVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIGZpbGVDb3VudDogQmlnSW50KG1haWwucmVjZWl2ZWQuZmlsZUNvdW50KSxcbiAgICAgICAgICBtYXhGaWxlQ291bnQ6IG1haWwucmVjZWl2ZWQubWF4RmlsZUNvdW50XG4gICAgICAgICAgICA/IEJpZ0ludChtYWlsLnJlY2VpdmVkLm1heEZpbGVDb3VudClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBmaWxlU2l6ZTogQmlnSW50KG1haWwucmVjZWl2ZWQuZmlsZVNpemUpLFxuICAgICAgICAgIG1heEZpbGVTaXplOiBtYWlsLnJlY2VpdmVkLm1heEZpbGVTaXplXG4gICAgICAgICAgICA/IEJpZ0ludChtYWlsLnJlY2VpdmVkLm1heEZpbGVTaXplKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIH0sXG4gICAgICAgIHNlbnQ6IHtcbiAgICAgICAgICBjb3VudDogQmlnSW50KG1haWwuc2VudC5jb3VudCksXG4gICAgICAgICAgbWF4Q291bnQ6IG1haWwuc2VudC5tYXhDb3VudCA/IEJpZ0ludChtYWlsLnNlbnQubWF4Q291bnQpIDogbnVsbCxcbiAgICAgICAgICBmaWxlQ291bnQ6IEJpZ0ludChtYWlsLnNlbnQuZmlsZUNvdW50KSxcbiAgICAgICAgICBtYXhGaWxlQ291bnQ6IG1haWwuc2VudC5tYXhGaWxlQ291bnRcbiAgICAgICAgICAgID8gQmlnSW50KG1haWwuc2VudC5tYXhGaWxlQ291bnQpXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgZmlsZVNpemU6IEJpZ0ludChtYWlsLnNlbnQuZmlsZVNpemUpLFxuICAgICAgICAgIG1heEZpbGVTaXplOiBtYWlsLnNlbnQubWF4RmlsZVNpemVcbiAgICAgICAgICAgID8gQmlnSW50KG1haWwuc2VudC5tYXhGaWxlU2l6ZSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGdvZEZhdGhlckFuZENoaWxkcmVuKCk6IFByb21pc2U8R29kRmF0aGVyQW5kQ2hpbGRyZW4gfCBudWxsPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBnb2RDaGlsZHJlbjoge1xuICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgICAgcGhvbmU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdvZEZhdGhlcjoge1xuICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgICAgcGhvbmU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnVzZXIsXG4gICAgICBnb2RGYXRoZXI6IHVzZXIuZ29kRmF0aGVyID8/IG51bGxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHVwZGF0ZUFwcERCQ29uZmlnKHtcbiAgICBhcHBDb2RlLFxuICAgIGNvbmZpZyxcbiAgICBlbnYsXG4gICAgc2Vzc2lvbklkXG4gIH06IHtcbiAgICBhcHBDb2RlOiBzdHJpbmc7XG4gICAgY29uZmlnOiBBcHBEQkNvbmZpZztcbiAgICBlbnY6IFNlY3JlY3lFbnY7XG4gICAgc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8QXBwREJDb25maWc+IHtcbiAgICBjb25zdCB7IGRiQ29uZmlnIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KFxuICAgICAgZW52LFxuICAgICAgc2Vzc2lvbklkXG4gICAgKShcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRiQ29uZmlnOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhcHBDb2RlLFxuICAgICAgICAgIGNvbmZpZzogSlNPTi5zdHJpbmdpZnkoY29uZmlnKVxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGJDb25maWc7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZ2V0QXBwREJDb25maWcoXG4gICAgYXBwQ29kZTogc3RyaW5nLFxuICAgIGVudjogU2VjcmVjeUVudixcbiAgICBzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8QXBwREJDb25maWc+IHtcbiAgICBjb25zdCB7IGRiQ29uZmlnIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KFxuICAgICAgZW52LFxuICAgICAgc2Vzc2lvbklkXG4gICAgKShcInF1ZXJ5XCIpKHtcbiAgICAgIGRiQ29uZmlnOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhcHBDb2RlXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBkYkNvbmZpZztcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBnZXRGQVEoe1xuICAgIGxhbmcsXG4gICAgZW52LFxuICAgIHNlc3Npb25JZFxuICB9OiB7XG4gICAgbGFuZz86IExhbmc7XG4gICAgZW52OiBTZWNyZWN5RW52O1xuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPEZhcUl0ZW1bXT4ge1xuICAgIGNvbnN0IHsgZmFxIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KGVudiwgc2Vzc2lvbklkKShcInF1ZXJ5XCIpKHtcbiAgICAgIGZhcTogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFuZ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYW5zd2VyOiB0cnVlLFxuICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgIHF1ZXN0aW9uOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBmYXE7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZ2V0QmxvZyh7XG4gICAgZW52LFxuICAgIGxhbmcsXG4gICAgc2Vzc2lvbklkXG4gIH06IHtcbiAgICBlbnY6IFNlY3JlY3lFbnY7XG4gICAgbGFuZz86IExhbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPEJsb2dJdGVtW10+IHtcbiAgICBjb25zdCB7IGJsb2cgfSA9IGF3YWl0IEJhc2VDbGllbnQuX2dldEJhc2VDbGllbnQoZW52LCBzZXNzaW9uSWQpKFwicXVlcnlcIikoe1xuICAgICAgYmxvZzogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFuZ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgYmxvZ0lkOiB0cnVlLFxuICAgICAgICAgIGF1dGhvcjogdHJ1ZSxcbiAgICAgICAgICBib2R5OiB0cnVlLFxuICAgICAgICAgIGRhdGU6IHRydWUsXG4gICAgICAgICAgaW1hZ2U6IHRydWUsXG4gICAgICAgICAgaW1hZ2VBbHQ6IHRydWUsXG4gICAgICAgICAgc3VtbWFyeTogdHJ1ZSxcbiAgICAgICAgICB0aXRsZTogdHJ1ZSxcbiAgICAgICAgICBvcmRlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYmxvZy5tYXAoYiA9PiAoeyAuLi5iLCBkYXRlOiBuZXcgRGF0ZShiLmRhdGUpIH0pKTtcbiAgfVxuXG4gIGFzeW5jIHJlcG9ydFVzZXIoXG4gICAgcmVwb3J0ZWRVc2VySWQ6IHN0cmluZyxcbiAgICBjdXN0b21NZXNzYWdlPzogc3RyaW5nXG4gICk6IFByb21pc2U8U2VuZFJlcG9ydCB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHsgc2VuZFJlcG9ydCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBzZW5kUmVwb3J0OiBbXG4gICAgICAgIHtcbiAgICAgICAgICByZXBvcnRlZFVzZXJJZCxcbiAgICAgICAgICBjdXN0b21NZXNzYWdlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICBjdXN0b21NZXNzYWdlOiB0cnVlLFxuICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWFpbDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVwb3J0ZWRVc2VyOiB7XG4gICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZW1haWw6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBzZW5kUmVwb3J0O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGRlbGV0ZVVzZXIoe1xuICAgIHNlc3Npb25JZCxcbiAgICB1c2VySWQsXG4gICAgZW52XG4gIH06IHtcbiAgICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgICB1c2VySWQ/OiBzdHJpbmc7XG4gICAgZW52OiBTZWNyZWN5RW52O1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVVc2VyIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KFxuICAgICAgZW52LFxuICAgICAgc2Vzc2lvbklkXG4gICAgKShcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZVVzZXI6IFtcbiAgICAgICAge1xuICAgICAgICAgIHVzZXJJZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGVsZXRlVXNlciA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGRiR2V0PFU+KHtcbiAgICBmaWVsZCxcbiAgICB1c2VySWRcbiAgfToge1xuICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgdXNlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8VT4ge1xuICAgIGNvbnN0IHsgZGJHZXQgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZGJHZXQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgIHVzZXJJZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGJHZXQucmVzO1xuICB9XG5cbiAgYXN5bmMgZGJTZXQ8VCBleHRlbmRzIFVzZXJEYXRhLCBVIGV4dGVuZHMgRG9jdW1lbnQ+KHtcbiAgICB2YWx1ZSxcbiAgICB1c2VySWRcbiAgfToge1xuICAgIHZhbHVlOiBVO1xuICAgIHVzZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGB2YWx1ZSBzaG91bGQgYmUgYW4gb2JqZWN0IGluY2x1ZGluZyBmaWVsZHMgeW91IHdhbnQgdG8gdXBkYXRlLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBkYlNldCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkYlNldDogW1xuICAgICAgICB7XG4gICAgICAgICAgdXNlcklkLFxuICAgICAgICAgIHZhbHVlOiBzZXJpYWxpemUodmFsdWUpLnRvU3RyaW5nKFwiYmFzZTY0XCIpXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBkYlNldC5yZXM7XG4gIH1cblxuICBhc3luYyBkYlNlYXJjaDxUPih7XG4gICAgc2VhcmNoLFxuICAgIGZpZWxkXG4gIH06IHtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIHNlYXJjaDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxUW10+IHtcbiAgICBjb25zdCB7IGRiU2VhcmNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIGRiU2VhcmNoOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzZWFyY2gsXG4gICAgICAgICAgZmllbGRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRiU2VhcmNoO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRm9sZGVyKHsgaWQgfTogeyBpZDogc3RyaW5nIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRlbGV0ZUZvbGRlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkZWxldGVGb2xkZXI6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBkZWxldGVGb2xkZXIgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBtb3ZlRm9sZGVycyh7XG4gICAgZm9sZGVyc0lkLFxuICAgIHBhcmVudEZvbGRlcklkXG4gIH06IHtcbiAgICBmb2xkZXJzSWQ6IHN0cmluZ1tdO1xuICAgIHBhcmVudEZvbGRlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgbW92ZUZvbGRlcnMgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgbW92ZUZvbGRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZvbGRlcnNJZCxcbiAgICAgICAgICBwYXJlbnRGb2xkZXJJZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbW92ZUZvbGRlcnMgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBtb3ZlRmlsZXMoe1xuICAgIGZpbGVzSWQsXG4gICAgcGFyZW50Rm9sZGVySWRcbiAgfToge1xuICAgIGZpbGVzSWQ6IHN0cmluZ1tdO1xuICAgIHBhcmVudEZvbGRlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgbW92ZUZpbGVzIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIG1vdmVGaWxlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlsZXNJZCxcbiAgICAgICAgICBwYXJlbnRGb2xkZXJJZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbW92ZUZpbGVzID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgZm9sZGVyU2l6ZSh7XG4gICAgZm9sZGVySWRcbiAgfToge1xuICAgIGZvbGRlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8Rm9sZGVyU2l6ZSB8IG51bGw+IHtcbiAgICBjb25zdCB7IGZvbGRlclNpemUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZm9sZGVyU2l6ZTogW1xuICAgICAgICB7XG4gICAgICAgICAgZm9sZGVySWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNpemU6IHRydWUsXG4gICAgICAgICAgc2l6ZUJlZm9yZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWZvbGRlclNpemUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzaXplOiBCaWdJbnQoZm9sZGVyU2l6ZS5zaXplKSxcbiAgICAgIHNpemVCZWZvcmU6IEJpZ0ludChmb2xkZXJTaXplLnNpemVCZWZvcmUpXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGdldFNwb25zb3JzaGlwTGluayh7XG4gICAgYmFja1VybFxuICB9OiB7XG4gICAgYmFja1VybDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc3QgbWUgPSBhd2FpdCB0aGlzLm1lKHsgd2l0aFB1YmxpY0tleTogZmFsc2UgfSk7XG5cbiAgICBpZiAoIW1lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0TGluayh7XG4gICAgICBhcHA6IFwiYXV0aFwiLFxuICAgICAgcGF0aDogYC9zaWduLXVwP2dmPSR7YnRvYShtZS5lbWFpbCl9JmF1PSR7YnRvYShiYWNrVXJsKX1gXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
2227
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNlQ2xpZW50LnRzIl0sIm5hbWVzIjpbInNlcmlhbGl6ZSIsImdldExpbmsiLCJ1c2Vyc0NhY2hlIiwiZ2V0U3RvcmFnZSIsIlNlbGVjdG9yIiwiY3JlYXRlVGh1bmRlciIsImludGVybmFsVG9QYXltZW50SW5mb3MiLCJwIiwiY3VycmVudFN1YnNjcmlwdGlvbiIsInN0YXRlIiwiY29sbGVjdGlvbk1ldGhvZCIsImFjdGl2YXRlZEF0IiwiRGF0ZSIsImNyZWF0ZWRBdCIsInVwZGF0ZWRBdCIsInRyaWFsRW5kc0F0IiwidHJpYWxTdGFydGVkQXQiLCJwYXVzZWRBdCIsImN1cnJlbnRQZXJpb2RFbmRzQXQiLCJjdXJyZW50UGVyaW9kU3RhcnRlZEF0IiwiY2FuY2VsZWRBdCIsImV4cGlyZXNBdCIsImludm9pY2VzIiwibWFwIiwiaSIsImRhdGUiLCJkdWUiLCJzdGF0dXMiLCJwbGFuc0NvZGVzIiwiaXNWYWxpZFBsYW4iLCJwbGFuQ29kZSIsImluY2x1ZGVzIiwiZ2V0VXNlclNlbGVjdG9yIiwidXNlcklkIiwid2l0aFB1YmxpY0tleSIsInVzZXIiLCJfX3R5cGVuYW1lIiwibWVzc2FnZSIsImZpZWxkIiwiaWQiLCJmaXJzdG5hbWUiLCJsYXN0bmFtZSIsImxhbmciLCJwdWJsaWNLZXkiLCJ1bmRlZmluZWQiLCJlbWFpbCIsInBob25lIiwicm9sZSIsImRlbGV0ZWRBdCIsImxhc3RMb2dpbiIsImdldFVzZXIiLCJwYXJhbXMiLCJzZWxlY3RvciIsImNsaWVudCIsInVzZXJSZXNwb25zZSIsImRhdGEiLCJCYXNlQ2xpZW50Iiwic2Vzc2lvbiIsImVudiIsInNlc3Npb25JZCIsIl9nZXRCYXNlQ2xpZW50Iiwic2Vzc2lvbnMiLCJsYXN0QWN0aXZpdHkiLCJ1c2VyQWdlbnQiLCJpcCIsImNpdHkiLCJjb3VudHJ5IiwiYXBwU2Vzc2lvbnMiLCJ1c2VyQXBwIiwiYXBwIiwibmFtZSIsInMiLCJhIiwibG9nb3V0IiwibG9jYWwiLCJqd3QiLCJjbGVhciIsInVzZXJBcHBLZXlzIiwidXNlckFwcFNlc3Npb24iLCJtZSIsInNldCIsInVwZGF0ZVByb2ZpbGUiLCJwbGFucyIsInBsYW4iLCJraW5kIiwiY29kZXMiLCJsaW1pdHMiLCJkb3dubG9hZEJhbmR3aWR0aCIsImRvd25sb2FkQ291bnQiLCJoYXJkRmlsZUNvdW50IiwiaGFyZEZpbGVTaXplIiwicGVyRmlsZVNpemUiLCJ1cGxvYWRCYW5kd2lkdGgiLCJ1cGxvYWRDb3VudCIsInJlY2VpdmVkTWFpbHMiLCJjb3VudCIsImZpbGVDb3VudCIsImZpbGVTaXplIiwiaGFyZENvdW50Iiwic2VudE1haWxzIiwicGF5IiwiaW5wdXQiLCJhdXRvUmVuZXciLCJjYW5jZWxQYXltZW50IiwicGF5bWVudEluZm9zIiwiaG9zdGVkVXJsIiwiYXV0b3JlbmV3IiwidG90YWwiLCJwZGYiLCJjdXJyZW5jeSIsInJlc3VsdCIsImNsb3VkIiwic2l6ZSIsIm1heFNpemUiLCJtYXhDb3VudCIsIm1haWwiLCJyZWNlaXZlZCIsIm1heEZpbGVDb3VudCIsIm1heEZpbGVTaXplIiwic2VudCIsIkJpZ0ludCIsImdvZEZhdGhlckFuZENoaWxkcmVuIiwiZ29kQ2hpbGRyZW4iLCJnb2RGYXRoZXIiLCJ1cGRhdGVBcHBEQkNvbmZpZyIsImFwcENvZGUiLCJjb25maWciLCJkYkNvbmZpZ011dGF0aW9uIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldEFwcERCQ29uZmlnIiwiZGJDb25maWciLCJqc29uIiwiZ2V0RkFRIiwiZmFxIiwiYW5zd2VyIiwib3JkZXIiLCJxdWVzdGlvbiIsImdldEJsb2ciLCJibG9nIiwiYmxvZ0l0ZW1zIiwiYmxvZ0lkIiwiYXV0aG9yIiwiYm9keSIsImltYWdlIiwiaW1hZ2VBbHQiLCJzdW1tYXJ5IiwidGl0bGUiLCJiIiwicmVwb3J0VXNlciIsInJlcG9ydGVkVXNlcklkIiwiY3VzdG9tTWVzc2FnZSIsInNlbmRSZXBvcnQiLCJyZXBvcnRlZFVzZXIiLCJkZWxldGVVc2VyIiwiZGJHZXQiLCJkYlNldCIsInZhbHVlIiwiRXJyb3IiLCJ0b1N0cmluZyIsInJlcyIsImRiU2VhcmNoIiwic2VhcmNoIiwiZGVsZXRlRm9sZGVyIiwibW92ZUZvbGRlcnMiLCJmb2xkZXJzSWQiLCJwYXJlbnRGb2xkZXJJZCIsIm1vdmVGaWxlcyIsImZpbGVzSWQiLCJmb2xkZXJTaXplIiwiZm9sZGVySWQiLCJzaXplQmVmb3JlIiwiZ2V0U3BvbnNvcnNoaXBMaW5rIiwiYmFja1VybCIsInBhdGgiLCJidG9hIiwiZ2V0QmFzZVVybCIsImdyYXBoY2RuIiwiYXBpVXJsIiwicHJvY2VzcyIsIlNFQ1JFQ1lfQVBJX1VSTCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUdBLFNBQVNBLFNBQVQsUUFBMEIsTUFBMUI7QUFDQSxTQUFTQyxPQUFULFFBQXdCLG9CQUF4QjtBQUNBLFNBQVNDLFVBQVQsUUFBMkIsWUFBM0I7QUFHQSxTQUFTQyxVQUFULFFBQTJCLHFCQUEzQjtBQVFBLFNBQVNDLFFBQVQsUUFBeUIsaUJBQXpCO0FBQ0EsU0FBU0MsYUFBVCxRQUE4QixrQkFBOUI7O0FBc0xBLFNBQVNDLHNCQUFULENBQWdDQyxDQUFoQyxFQUF1RTtBQUNyRSx5Q0FDS0EsQ0FETDtBQUVFQyxJQUFBQSxtQkFBbUIsa0NBQ2RELENBQUMsQ0FBQ0MsbUJBRFk7QUFFakJDLE1BQUFBLEtBQUssRUFBRUYsQ0FBQyxDQUFDQyxtQkFBRixDQUFzQkMsS0FGWjtBQUdqQkMsTUFBQUEsZ0JBQWdCLEVBQUVILENBQUMsQ0FBQ0MsbUJBQUYsQ0FDZkUsZ0JBSmM7QUFLakJDLE1BQUFBLFdBQVcsRUFBRUosQ0FBQyxDQUFDQyxtQkFBRixDQUFzQkcsV0FBdEIsR0FDVCxJQUFJQyxJQUFKLENBQVNMLENBQUMsQ0FBQ0MsbUJBQUYsQ0FBc0JHLFdBQS9CLENBRFMsR0FFVCxJQVBhO0FBUWpCRSxNQUFBQSxTQUFTLEVBQUVOLENBQUMsQ0FBQ0MsbUJBQUYsQ0FBc0JLLFNBQXRCLEdBQ1AsSUFBSUQsSUFBSixDQUFTTCxDQUFDLENBQUNDLG1CQUFGLENBQXNC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LGMsR0FBaUIsVUFDdkNGLEdBRHVDLEVBRXZDRCxPQUZ1QztBQUFBLFNBSXZDcEQsYUFBYSxDQUFDbUQsVUFBVSxDQUFDd0gsVUFBWCxDQUFzQnRILEdBQXRCLENBQUQsRUFBNkJELE9BQTdCLENBSjBCO0FBQUEsQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuaW1wb3J0IHR5cGUgeyBEb3dubG9hZFByb2dyZXNzIGFzIERMUHJvZ3Jlc3MgfSBmcm9tIFwia3lcIjtcbmltcG9ydCB0eXBlIHsgRG9jdW1lbnQgfSBmcm9tIFwiYnNvblwiO1xuaW1wb3J0IHsgc2VyaWFsaXplIH0gZnJvbSBcImJzb25cIjtcbmltcG9ydCB7IGdldExpbmsgfSBmcm9tIFwiQHNlY3JlY3kvbGliLXV0aWxzXCI7XG5pbXBvcnQgeyB1c2Vyc0NhY2hlIH0gZnJvbSBcIi4vY2FjaGUuanNcIjtcbmltcG9ydCB0eXBlIHsgVXNlclNlc3Npb24gfSBmcm9tIFwiLi9jbGllbnQvdHlwZXMvaW5kZXguanNcIjtcbmltcG9ydCB0eXBlIHsgU2VjcmVjeUVudiB9IGZyb20gXCIuL2NsaWVudC9oZWxwZXJzLmpzXCI7XG5pbXBvcnQgeyBnZXRTdG9yYWdlIH0gZnJvbSBcIi4vY2xpZW50L3N0b3JhZ2UuanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgTGFuZyxcbiAgUGF5SW5wdXRUeXBlLFxuICBQbGFuS2luZCxcbiAgVGh1bmRlcixcbiAgVXNlclJvbGVcbn0gZnJvbSBcIi4vemV1cy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tIFwiLi96ZXVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVUaHVuZGVyIH0gZnJvbSBcIi4vWmV1c1RodW5kZXIuanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgRXJyb3JBY2Nlc3NEZW5pZWQsXG4gIEVycm9yTGltaXQsXG4gIEVycm9yTm90Rm91bmQsXG4gIEVycm9yTm90RXhpc3QsXG4gIEVycm9yTGFuZ05vdEV4aXN0LFxuICBFcnJvckJhc2ljXG59IGZyb20gXCIuL2Vycm9yLmpzXCI7XG5cbmV4cG9ydCB0eXBlIFN1Y2Nlc3NSZXNwb25zZTxUPiA9IHtcbiAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIjtcbiAgZGF0YTogVDtcbn07XG5cbmV4cG9ydCB0eXBlIERvd25sb2FkUHJvZ3Jlc3MgPSBETFByb2dyZXNzO1xuXG5leHBvcnQgdHlwZSBQYXlJbnB1dCA9IHtcbiAgdHlwZTogUGF5SW5wdXRUeXBlO1xuICB0b2tlbjogc3RyaW5nO1xuICBmaXJzdE5hbWU6IHN0cmluZztcbiAgbGFzdE5hbWU6IHN0cmluZztcbiAgc3RyZWV0OiBzdHJpbmc7XG4gIHBvc3RhbENvZGU6IHN0cmluZztcbiAgY2l0eTogc3RyaW5nO1xuICBjb3VudHJ5OiBzdHJpbmc7XG4gIG1vbnRoOiBzdHJpbmc7XG4gIHllYXI6IHN0cmluZztcbiAgY3Z2OiBzdHJpbmc7XG4gIG51bWJlcjogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgTWFpbExpbWl0cyA9IHtcbiAgY291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGZpbGVDb3VudD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZmlsZVNpemU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhhcmRDb3VudD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaGFyZEZpbGVDb3VudD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaGFyZEZpbGVTaXplPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwZXJGaWxlU2l6ZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCB0eXBlIExpbWl0cyA9IHtcbiAgZG93bmxvYWRCYW5kd2lkdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGRvd25sb2FkQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhhcmRGaWxlQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhhcmRGaWxlU2l6ZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcGVyRmlsZVNpemU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlY2VpdmVkTWFpbHM6IE1haWxMaW1pdHM7XG4gIHNlbnRNYWlsczogTWFpbExpbWl0cztcbiAgdXBsb2FkQmFuZHdpZHRoPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICB1cGxvYWRDb3VudD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCB0eXBlIEdvZFVzZXIgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGZpcnN0bmFtZTogc3RyaW5nO1xuICBsYXN0bmFtZTogc3RyaW5nO1xuICBlbWFpbDogc3RyaW5nO1xuICBwaG9uZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgR29kRmF0aGVyQW5kQ2hpbGRyZW4gPSB7XG4gIGdvZEZhdGhlcjogR29kVXNlciB8IG51bGw7XG4gIGdvZENoaWxkcmVuOiBHb2RVc2VyW107XG59O1xuXG5leHBvcnQgdHlwZSBQbGFuID0ge1xuICBjb2Rlczogc3RyaW5nW107XG4gIGtpbmQ6IFBsYW5LaW5kO1xuICBsaW1pdHM6IExpbWl0cztcbn07XG5cbmV4cG9ydCB0eXBlIFN1YnNjcmlwdGlvblN0YXRlID1cbiAgfCBcImFjdGl2ZVwiXG4gIHwgXCJjYW5jZWxlZFwiXG4gIHwgXCJwYXVzZWRcIlxuICB8IFwiZXhwaXJlZFwiXG4gIHwgXCJmdXR1cmVcIlxuICB8IFwiaW5fdHJpYWxcIlxuICB8IFwibGl2ZVwiXG4gIHwgXCJwYXN0X2R1ZVwiO1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpcHRpb25Db2xsZWN0aW9uTWV0aG9kID0gXCJhdXRvbWF0aWNcIiB8IFwibWFudWFsXCI7XG5cbnR5cGUgSW50ZXJuYWxTdWJzY3JpcHRpb24gPSB7XG4gIGF1dG9yZW5ldzogYm9vbGVhbjtcbiAgYWN0aXZhdGVkQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjdXJyZW50UGVyaW9kRW5kc0F0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3VycmVudFBlcmlvZFN0YXJ0ZWRBdD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGNhbmNlbGVkQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjcmVhdGVkQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBleHBpcmVzQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBwYXVzZWRBdD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHRyaWFsRW5kc0F0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdHJpYWxTdGFydGVkQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB1cGRhdGVkQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjb2xsZWN0aW9uTWV0aG9kOiBzdHJpbmc7XG4gIHN0YXRlOiBzdHJpbmc7XG4gIHBsYW4/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBwbGFuQ29kZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHRvdGFsPzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZDtcbn07XG5cbnR5cGUgUmVjdXJseUludm9pY2VTdGF0dXMgPVxuICB8IFwicGVuZGluZ1wiXG4gIHwgXCJwYWlkXCJcbiAgfCBcImZhaWxlZFwiXG4gIHwgXCJwYXN0X2R1ZVwiXG4gIHwgXCJvcGVuXCJcbiAgfCBcImNsb3NlZFwiXG4gIHwgXCJ2b2lkZWRcIlxuICB8IFwicHJvY2Vzc2luZ1wiO1xuXG50eXBlIEludGVybmFsUmVjdXJseUludm9pY2VzID0ge1xuICBwZGY6IHN0cmluZztcbiAgZGF0ZTogc3RyaW5nO1xuICBkdWU6IHN0cmluZztcbiAgc3RhdHVzOiBzdHJpbmc7XG4gIHRvdGFsOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgY3VycmVuY3k6IHN0cmluZztcbn07XG5cbnR5cGUgSW50ZXJuYWxQYXltZW50SW5mb3MgPSB7XG4gIGhvc3RlZFVybDogc3RyaW5nO1xuICBjdXJyZW50U3Vic2NyaXB0aW9uOiBJbnRlcm5hbFN1YnNjcmlwdGlvbjtcbiAgaW52b2ljZXM6IEludGVybmFsUmVjdXJseUludm9pY2VzW107XG59O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpcHRpb24gPSB7XG4gIGF1dG9yZW5ldzogYm9vbGVhbjtcbiAgYWN0aXZhdGVkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3VycmVudFBlcmlvZEVuZHNBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjdXJyZW50UGVyaW9kU3RhcnRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGNhbmNlbGVkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3JlYXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGV4cGlyZXNBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBwYXVzZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB0cmlhbEVuZHNBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB0cmlhbFN0YXJ0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB1cGRhdGVkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY29sbGVjdGlvbk1ldGhvZDogU3Vic2NyaXB0aW9uQ29sbGVjdGlvbk1ldGhvZDtcbiAgc3RhdGU6IFN1YnNjcmlwdGlvblN0YXRlO1xuICBwbGFuPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcGxhbkNvZGU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB0b3RhbD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBSZWN1cmx5SW52b2ljZXMgPSB7XG4gIHBkZjogc3RyaW5nO1xuICBkYXRlOiBEYXRlO1xuICBkdWU6IERhdGU7XG4gIHN0YXR1czogUmVjdXJseUludm9pY2VTdGF0dXM7XG4gIHRvdGFsOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgY3VycmVuY3k6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFBheW1lbnRJbmZvcyA9IHtcbiAgaG9zdGVkVXJsOiBzdHJpbmc7XG4gIGN1cnJlbnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgaW52b2ljZXM6IFJlY3VybHlJbnZvaWNlc1tdO1xufTtcblxuZXhwb3J0IHR5cGUgU2VuZFJlcG9ydCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdXNlcjoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZmlyc3RuYW1lOiBzdHJpbmc7XG4gICAgbGFzdG5hbWU6IHN0cmluZztcbiAgICBlbWFpbDogc3RyaW5nO1xuICB9O1xuICByZXBvcnRlZFVzZXI6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGZpcnN0bmFtZTogc3RyaW5nO1xuICAgIGxhc3RuYW1lOiBzdHJpbmc7XG4gICAgZW1haWw6IHN0cmluZztcbiAgfTtcbiAgY3VzdG9tTWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn07XG5cbmZ1bmN0aW9uIGludGVybmFsVG9QYXltZW50SW5mb3MocDogSW50ZXJuYWxQYXltZW50SW5mb3MpOiBQYXltZW50SW5mb3Mge1xuICByZXR1cm4ge1xuICAgIC4uLnAsXG4gICAgY3VycmVudFN1YnNjcmlwdGlvbjoge1xuICAgICAgLi4ucC5jdXJyZW50U3Vic2NyaXB0aW9uLFxuICAgICAgc3RhdGU6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5zdGF0ZSBhcyBTdWJzY3JpcHRpb25TdGF0ZSxcbiAgICAgIGNvbGxlY3Rpb25NZXRob2Q6IHAuY3VycmVudFN1YnNjcmlwdGlvblxuICAgICAgICAuY29sbGVjdGlvbk1ldGhvZCBhcyBTdWJzY3JpcHRpb25Db2xsZWN0aW9uTWV0aG9kLFxuICAgICAgYWN0aXZhdGVkQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5hY3RpdmF0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi5hY3RpdmF0ZWRBdClcbiAgICAgICAgOiBudWxsLFxuICAgICAgY3JlYXRlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24uY3JlYXRlZEF0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLmNyZWF0ZWRBdClcbiAgICAgICAgOiBudWxsLFxuICAgICAgdXBkYXRlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24udXBkYXRlZEF0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLnVwZGF0ZWRBdClcbiAgICAgICAgOiBudWxsLFxuICAgICAgdHJpYWxFbmRzQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi50cmlhbEVuZHNBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi50cmlhbEVuZHNBdClcbiAgICAgICAgOiBudWxsLFxuICAgICAgdHJpYWxTdGFydGVkQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi50cmlhbFN0YXJ0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi50cmlhbFN0YXJ0ZWRBdClcbiAgICAgICAgOiBudWxsLFxuICAgICAgcGF1c2VkQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5wYXVzZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi5wYXVzZWRBdClcbiAgICAgICAgOiBudWxsLFxuICAgICAgY3VycmVudFBlcmlvZEVuZHNBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLmN1cnJlbnRQZXJpb2RFbmRzQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24uY3VycmVudFBlcmlvZEVuZHNBdClcbiAgICAgICAgOiBudWxsLFxuICAgICAgY3VycmVudFBlcmlvZFN0YXJ0ZWRBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLmN1cnJlbnRQZXJpb2RTdGFydGVkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24uY3VycmVudFBlcmlvZFN0YXJ0ZWRBdClcbiAgICAgICAgOiBudWxsLFxuICAgICAgY2FuY2VsZWRBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLmNhbmNlbGVkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24uY2FuY2VsZWRBdClcbiAgICAgICAgOiBudWxsLFxuICAgICAgZXhwaXJlc0F0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24uZXhwaXJlc0F0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLmV4cGlyZXNBdClcbiAgICAgICAgOiBudWxsXG4gICAgfSxcbiAgICBpbnZvaWNlczogcC5pbnZvaWNlcy5tYXAoaSA9PiAoe1xuICAgICAgLi4uaSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKGkuZGF0ZSksXG4gICAgICBkdWU6IG5ldyBEYXRlKGkuZHVlKSxcbiAgICAgIHN0YXR1czogaS5zdGF0dXMgYXMgUmVjdXJseUludm9pY2VTdGF0dXNcbiAgICB9KSlcbiAgfTtcbn1cblxuY29uc3QgcGxhbnNDb2RlcyA9IFtcbiAgXCJiYXNpY19tb250aFwiLFxuICBcImFkdmFuY2VkX21vbnRoXCIsXG4gIFwicHJvX21vbnRoXCIsXG4gIFwiYmFzaWNfeWVhclwiLFxuICBcImFkdmFuY2VkX3llYXJcIixcbiAgXCJwcm9feWVhclwiXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBTZWNyZWN5UGxhbnNDb2RlcyA9IHR5cGVvZiBwbGFuc0NvZGVzW251bWJlcl07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkUGxhbihwbGFuQ29kZTogc3RyaW5nKTogcGxhbkNvZGUgaXMgU2VjcmVjeVBsYW5zQ29kZXMge1xuICByZXR1cm4gcGxhbnNDb2Rlcy5pbmNsdWRlcyhwbGFuQ29kZSBhcyBTZWNyZWN5UGxhbnNDb2Rlcyk7XG59XG5cbmV4cG9ydCB0eXBlIFVzZXJEYXRhPFxuICBUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuPiA9IHtcbiAgaXNTdXBlcnVzZXI6IGJvb2xlYW47XG4gIGlzU2VhcmNoYWJsZTogYm9vbGVhbjtcbn0gJiBUO1xuXG5leHBvcnQgdHlwZSBGb2xkZXJTaXplID0geyBzaXplOiBiaWdpbnQ7IHNpemVCZWZvcmU6IGJpZ2ludCB9O1xuXG5jb25zdCBnZXRVc2VyU2VsZWN0b3IgPSAoXG4gIHVzZXJJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgd2l0aFB1YmxpY0tleTogYm9vbGVhbiB8IHVuZGVmaW5lZFxuKSA9PiB7XG4gIGNvbnN0IHsgdXNlciB9ID0gU2VsZWN0b3IoXCJRdWVyeVwiKSh7XG4gICAgdXNlcjogW1xuICAgICAgeyB1c2VySWQgfSxcbiAgICAgIHtcbiAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWUsXG4gICAgICAgICAgZmllbGQ6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBVc2VyUmVzcG9uc2VcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgdXNlcjoge1xuICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGxhbmc6IHRydWUsXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHdpdGhQdWJsaWNLZXkgPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZW1haWw6IHRydWUsXG4gICAgICAgICAgICBwaG9uZTogdHJ1ZSxcbiAgICAgICAgICAgIHJvbGU6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVkQXQ6IHRydWUsXG4gICAgICAgICAgICBsYXN0TG9naW46IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdXG4gIH0pO1xuICByZXR1cm4gdXNlcjtcbn07XG5cbmV4cG9ydCB0eXBlIEFwcERCQ29uZmlnRmllbGQgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogXCJzdHJpbmdcIiB8IFwibnVtYmVyXCIgfCBcImJvb2xlYW5cIiB8IFwib2JqZWN0XCI7XG4gIGlzQXJyYXk/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBpc051bGxhYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaXNFZGl0YWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGlzS2V5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgZGVmYXVsdD86IHVua25vd247XG59O1xuXG5leHBvcnQgdHlwZSBBcHBEQkNvbmZpZyA9IHtcbiAgZmllbGRzOiBBcHBEQkNvbmZpZ0ZpZWxkW107XG59O1xuXG5leHBvcnQgdHlwZSBGYXFJdGVtID0ge1xuICBvcmRlcjogbnVtYmVyO1xuICBxdWVzdGlvbjogc3RyaW5nO1xuICBhbnN3ZXI6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEJsb2dJdGVtID0ge1xuICBpZDogc3RyaW5nO1xuICBibG9nSWQ6IHN0cmluZztcbiAgb3JkZXI6IG51bWJlcjtcbiAgYXV0aG9yOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgZGF0ZTogRGF0ZTtcbiAgaW1hZ2U6IHN0cmluZztcbiAgaW1hZ2VBbHQ6IHN0cmluZztcbiAgc3VtbWFyeTogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVXNlckJhc2UgPSB7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIHBob25lOiBzdHJpbmc7XG4gIGxhc3RuYW1lOiBzdHJpbmc7XG4gIHJvbGU6IFVzZXJSb2xlO1xuICBmaXJzdG5hbWU6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgZGVsZXRlZEF0OiBEYXRlIHwgbnVsbDtcbiAgbGFzdExvZ2luOiBEYXRlO1xuICBsYW5nOiBMYW5nO1xufTtcblxudHlwZSBXaXRoUHVibGljS2V5ID0geyB3aXRoUHVibGljS2V5PzogYm9vbGVhbiB9O1xuXG5leHBvcnQgdHlwZSBVc2VyPFQgZXh0ZW5kcyBXaXRoUHVibGljS2V5ID0gV2l0aFB1YmxpY0tleT4gPSBUIGV4dGVuZHMge1xuICB3aXRoUHVibGljS2V5OiB0cnVlO1xufVxuICA/IFVzZXJCYXNlICYgeyBwdWJsaWNLZXk6IHN0cmluZyB9XG4gIDogVXNlckJhc2U7XG5cbnR5cGUgQ2xhc3NHZXRVc2VyUGFyYW1zID0gV2l0aFB1YmxpY0tleSAmIHtcbiAgdXNlcklkPzogc3RyaW5nO1xufTtcbnR5cGUgR2V0VXNlclBhcmFtcyA9IENsYXNzR2V0VXNlclBhcmFtcyAmIHtcbiAgY2xpZW50OiBSZXR1cm5UeXBlPHR5cGVvZiBUaHVuZGVyPjtcbn07XG5cbnR5cGUgU3RhdGljR2V0VXNlclBhcmFtcyA9IENsYXNzR2V0VXNlclBhcmFtcyAmIHtcbiAgZW52OiBTZWNyZWN5RW52O1xufTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0VXNlcjxVIGV4dGVuZHMgV2l0aFB1YmxpY0tleT4oXG4gIHBhcmFtczogR2V0VXNlclBhcmFtc1xuKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8VXNlcjxVPj4gfCBFcnJvck5vdEZvdW5kIHwgbnVsbD4ge1xuICBjb25zdCBzZWxlY3RvciA9IGdldFVzZXJTZWxlY3RvcihwYXJhbXMudXNlcklkLCBwYXJhbXMud2l0aFB1YmxpY0tleSk7XG4gIGNvbnN0IHsgdXNlcjogdXNlclJlc3BvbnNlIH0gPSBhd2FpdCBwYXJhbXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgIHVzZXI6IHNlbGVjdG9yXG4gIH0pO1xuXG4gIGlmICghdXNlclJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodXNlclJlc3BvbnNlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgcmV0dXJuIHVzZXJSZXNwb25zZTtcbiAgfVxuXG4gIGlmICghdXNlclJlc3BvbnNlLnVzZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICBkYXRhOiB7XG4gICAgICAuLi51c2VyUmVzcG9uc2UudXNlcixcbiAgICAgIGxhc3RMb2dpbjogbmV3IERhdGUodXNlclJlc3BvbnNlLnVzZXIubGFzdExvZ2luKSxcbiAgICAgIGRlbGV0ZWRBdDogdXNlclJlc3BvbnNlLnVzZXIuZGVsZXRlZEF0XG4gICAgICAgID8gbmV3IERhdGUodXNlclJlc3BvbnNlLnVzZXIuZGVsZXRlZEF0KVxuICAgICAgICA6IG51bGxcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIENsb3VkTGltaXRzID0ge1xuICBjb3VudDogYmlnaW50O1xuICBtYXhDb3VudDogYmlnaW50IHwgbnVsbDtcbiAgc2l6ZTogYmlnaW50O1xuICBtYXhTaXplOiBiaWdpbnQgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgTWFpbExpbWl0c1ZhbHVlcyA9IHtcbiAgY291bnQ6IGJpZ2ludDtcbiAgbWF4Q291bnQ6IGJpZ2ludCB8IG51bGw7XG4gIGZpbGVTaXplOiBiaWdpbnQ7XG4gIG1heEZpbGVTaXplOiBiaWdpbnQgfCBudWxsO1xuICBmaWxlQ291bnQ6IGJpZ2ludDtcbiAgbWF4RmlsZUNvdW50OiBiaWdpbnQgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgUXVlcnlMaW1pdHMgPSB7XG4gIGNsb3VkOiBDbG91ZExpbWl0cztcbiAgbWFpbDoge1xuICAgIHNlbnQ6IE1haWxMaW1pdHNWYWx1ZXM7XG4gICAgcmVjZWl2ZWQ6IE1haWxMaW1pdHNWYWx1ZXM7XG4gIH07XG59O1xuXG5leHBvcnQgY2xhc3MgQmFzZUNsaWVudCB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZ2V0QmFzZVVybCA9IChcbiAgICBlbnY6IFNlY3JlY3lFbnYgPSBcInByb2RcIixcbiAgICBncmFwaGNkbiA9IHRydWVcbiAgKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBhcGlVcmwgPSBwcm9jZXNzLmVudi5TRUNSRUNZX0FQSV9VUkw7XG4gICAgaWYgKGFwaVVybCkge1xuICAgICAgcmV0dXJuIGFwaVVybDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGVudikge1xuICAgICAgY2FzZSBcInByb2RcIjpcbiAgICAgICAgcmV0dXJuIGdyYXBoY2RuXG4gICAgICAgICAgPyBcImh0dHBzOi8vc2VjcmVjeS5ncmFwaGNkbi5hcHBcIlxuICAgICAgICAgIDogXCJodHRwczovL2FwaS5zZWNyZWN5Lm1lL2dyYXBocWxcIjtcbiAgICAgIGNhc2UgXCJkZXZcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBcImh0dHBzOi8vYXBpLmRldi5zZWNyZWN5Lm1lL2dyYXBocWxcIjtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2dldEJhc2VDbGllbnQgPSAoXG4gICAgZW52OiBTZWNyZWN5RW52LFxuICAgIHNlc3Npb24/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFJldHVyblR5cGU8dHlwZW9mIFRodW5kZXI+ID0+XG4gICAgY3JlYXRlVGh1bmRlcihCYXNlQ2xpZW50LmdldEJhc2VVcmwoZW52KSwgc2Vzc2lvbik7XG5cbiAgcHJvdGVjdGVkIGNsaWVudDogUmV0dXJuVHlwZTx0eXBlb2YgVGh1bmRlcj47XG5cbiAgcHVibGljIHNlc3Npb25JZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNlc3Npb246IHN0cmluZywgZW52OiBTZWNyZWN5RW52KSB7XG4gICAgdGhpcy5zZXNzaW9uSWQgPSBzZXNzaW9uO1xuICAgIHRoaXMuY2xpZW50ID0gQmFzZUNsaWVudC5fZ2V0QmFzZUNsaWVudChlbnYsIHNlc3Npb24pO1xuICB9XG5cbiAgYXN5bmMgc2Vzc2lvbnMoKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8VXNlclNlc3Npb25bXT4gfCBFcnJvck5vdEZvdW5kIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICB1c2VyOiBbXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBmaWVsZDogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gVXNlclJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICB1c2VyOiB7XG4gICAgICAgICAgICAgIHNlc3Npb25zOiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdEFjdGl2aXR5OiB0cnVlLFxuICAgICAgICAgICAgICAgIHVzZXJBZ2VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpcDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjaXR5OiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvdW50cnk6IHRydWUsXG4gICAgICAgICAgICAgICAgYXBwU2Vzc2lvbnM6IHtcbiAgICAgICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgbGFzdEFjdGl2aXR5OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgdXNlckFnZW50OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgaXA6IHRydWUsXG4gICAgICAgICAgICAgICAgICBjaXR5OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgY291bnRyeTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHVzZXJBcHA6IHtcbiAgICAgICAgICAgICAgICAgICAgYXBwOiB7XG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRhdGEudXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHVzZXJSZXNwb25zZSA9IGRhdGEudXNlcjtcbiAgICBpZiAodXNlclJlc3BvbnNlLl9fdHlwZW5hbWUgPT09IFwiVXNlclJlc3BvbnNlXCIpIHtcbiAgICAgIGlmICghdXNlclJlc3BvbnNlLnVzZXIpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBzZXNzaW9uczogVXNlclNlc3Npb25bXSA9XG4gICAgICAgIHVzZXJSZXNwb25zZS51c2VyLnNlc3Npb25zLm1hcChzID0+ICh7XG4gICAgICAgICAgaWQ6IHMuaWQsXG4gICAgICAgICAgaXA6IHMuaXAsXG4gICAgICAgICAgY2l0eTogcy5jaXR5LFxuICAgICAgICAgIGNvdW50cnk6IHMuY291bnRyeSxcbiAgICAgICAgICBsYXN0QWN0aXZpdHk6IHMubGFzdEFjdGl2aXR5ID8gbmV3IERhdGUocy5sYXN0QWN0aXZpdHkpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHVzZXJBZ2VudDogcy51c2VyQWdlbnQsXG4gICAgICAgICAgYXBwU2Vzc2lvbnM6IHMuYXBwU2Vzc2lvbnMubWFwKGEgPT4gKHtcbiAgICAgICAgICAgIGlkOiBhLmlkLFxuICAgICAgICAgICAgaXA6IGEuaXAsXG4gICAgICAgICAgICBjaXR5OiBhLmNpdHksXG4gICAgICAgICAgICBjb3VudHJ5OiBhLmNvdW50cnksXG4gICAgICAgICAgICBsYXN0QWN0aXZpdHk6IGEubGFzdEFjdGl2aXR5ID8gbmV3IERhdGUoYS5sYXN0QWN0aXZpdHkpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdXNlckFnZW50OiBhLnVzZXJBZ2VudCxcbiAgICAgICAgICAgIGFwcDogYS51c2VyQXBwPy5hcHAubmFtZSA/PyBcIlwiXG4gICAgICAgICAgfSkpXG4gICAgICAgIH0pKSA/PyBbXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICAgIGRhdGE6IHNlc3Npb25zXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB1c2VyUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBsb2dvdXQoc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghc2Vzc2lvbklkKSB7XG4gICAgICBjb25zdCBsb2NhbCA9IGdldFN0b3JhZ2UoZmFsc2UpO1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IGdldFN0b3JhZ2UodHJ1ZSk7XG4gICAgICBsb2NhbC5qd3QuY2xlYXIoKTtcbiAgICAgIGxvY2FsLnVzZXJBcHBLZXlzLmNsZWFyKCk7XG4gICAgICBsb2NhbC51c2VyQXBwU2Vzc2lvbi5jbGVhcigpO1xuICAgICAgc2Vzc2lvbi5qd3QuY2xlYXIoKTtcbiAgICAgIHNlc3Npb24udXNlckFwcEtleXMuY2xlYXIoKTtcbiAgICAgIHNlc3Npb24udXNlckFwcFNlc3Npb24uY2xlYXIoKTtcbiAgICAgIHVzZXJzQ2FjaGUuY2xlYXIoKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgICBsb2dvdXQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZXNzaW9uSWQ6IHNlc3Npb25JZFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIi4uLm9uIEVycm9yQmFzaWNcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCIuLi5vbiBMb2dvdXRSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGxvZ291dDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvL1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG1lPFQgZXh0ZW5kcyBXaXRoUHVibGljS2V5ID0gV2l0aFB1YmxpY0tleT4oXG4gICAgcGFyYW1zPzogVFxuICApOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxVc2VyPFQ+PiB8IEVycm9yTm90Rm91bmQgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMudXNlcihwYXJhbXMgfHwgKHsgd2l0aFB1YmxpY0tleTogdHJ1ZSB9IGFzIFQpKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyB1c2VyPFQgZXh0ZW5kcyBTdGF0aWNHZXRVc2VyUGFyYW1zPihcbiAgICBwYXJhbXM6IFQsXG4gICAgc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxVc2VyPFQ+PiB8IEVycm9yTm90Rm91bmQgfCBudWxsPiB7XG4gICAgY29uc3QgdXNlciA9IGF3YWl0IGdldFVzZXI8VD4oe1xuICAgICAgY2xpZW50OiB0aGlzLl9nZXRCYXNlQ2xpZW50KHBhcmFtcy5lbnYsIHNlc3Npb25JZCksXG4gICAgICB1c2VySWQ6IHBhcmFtcy51c2VySWQsXG4gICAgICB3aXRoUHVibGljS2V5OiBwYXJhbXMud2l0aFB1YmxpY0tleVxuICAgIH0pO1xuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXNlci5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIpIHtcbiAgICAgIHVzZXJzQ2FjaGUuc2V0KHVzZXIuZGF0YS5pZCwgdXNlci5kYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNlcjtcbiAgfVxuXG4gIGFzeW5jIHVzZXI8VCBleHRlbmRzIENsYXNzR2V0VXNlclBhcmFtcz4oXG4gICAgcGFyYW1zOiBUXG4gICk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPFVzZXI8VD4+IHwgRXJyb3JOb3RGb3VuZCB8IG51bGw+IHtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgZ2V0VXNlcjxUPih7XG4gICAgICBjbGllbnQ6IHRoaXMuY2xpZW50LFxuICAgICAgdXNlcklkOiBwYXJhbXMudXNlcklkLFxuICAgICAgd2l0aFB1YmxpY0tleTogcGFyYW1zLndpdGhQdWJsaWNLZXlcbiAgICB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGlmICh1c2VyKSB7XG4gICAgICB1c2Vyc0NhY2hlLnNldCh1c2VyLmRhdGEuaWQsIHVzZXIuZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzZXI7XG4gIH1cblxuICBhc3luYyB1cGRhdGVQcm9maWxlKHtcbiAgICBmaXJzdG5hbWUsXG4gICAgbGFzdG5hbWUsXG4gICAgbGFuZ1xuICB9OiB7XG4gICAgZmlyc3RuYW1lOiBzdHJpbmcgfCBudWxsO1xuICAgIGxhc3RuYW1lOiBzdHJpbmcgfCBudWxsO1xuICAgIGxhbmc6IExhbmcgfCBudWxsO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8VXNlcj4gfCBFcnJvck5vdEZvdW5kIHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgdXBkYXRlUHJvZmlsZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICB1cGRhdGVQcm9maWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaXJzdG5hbWUsXG4gICAgICAgICAgbGFzdG5hbWUsXG4gICAgICAgICAgbGFuZ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFVwZGF0ZVByb2ZpbGVSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdXBkYXRlUHJvZmlsZToge1xuICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbGFuZzogdHJ1ZSxcbiAgICAgICAgICAgICAgZW1haWw6IHRydWUsXG4gICAgICAgICAgICAgIHBob25lOiB0cnVlLFxuICAgICAgICAgICAgICByb2xlOiB0cnVlLFxuICAgICAgICAgICAgICBkZWxldGVkQXQ6IHRydWUsXG4gICAgICAgICAgICAgIGxhc3RMb2dpbjogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVQcm9maWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlUHJvZmlsZS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiB1cGRhdGVQcm9maWxlO1xuICAgIH1cblxuICAgIGlmICh1cGRhdGVQcm9maWxlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gdXBkYXRlUHJvZmlsZTtcbiAgICB9XG5cbiAgICBpZiAoIXVwZGF0ZVByb2ZpbGUudXBkYXRlUHJvZmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGVtYWlsOiB1cGRhdGVQcm9maWxlLnVwZGF0ZVByb2ZpbGUuZW1haWwsXG4gICAgICAgIGZpcnN0bmFtZTogdXBkYXRlUHJvZmlsZS51cGRhdGVQcm9maWxlLmZpcnN0bmFtZSxcbiAgICAgICAgaWQ6IHVwZGF0ZVByb2ZpbGUudXBkYXRlUHJvZmlsZS5pZCxcbiAgICAgICAgbGFuZzogdXBkYXRlUHJvZmlsZS51cGRhdGVQcm9maWxlLmxhbmcsXG4gICAgICAgIGxhc3RMb2dpbjogbmV3IERhdGUodXBkYXRlUHJvZmlsZS51cGRhdGVQcm9maWxlLmxhc3RMb2dpbiksXG4gICAgICAgIGxhc3RuYW1lOiB1cGRhdGVQcm9maWxlLnVwZGF0ZVByb2ZpbGUubGFzdG5hbWUsXG4gICAgICAgIHBob25lOiB1cGRhdGVQcm9maWxlLnVwZGF0ZVByb2ZpbGUucGhvbmUsXG4gICAgICAgIHJvbGU6IHVwZGF0ZVByb2ZpbGUudXBkYXRlUHJvZmlsZS5yb2xlLFxuICAgICAgICBkZWxldGVkQXQ6IHVwZGF0ZVByb2ZpbGUudXBkYXRlUHJvZmlsZS5kZWxldGVkQXRcbiAgICAgICAgICA/IG5ldyBEYXRlKHVwZGF0ZVByb2ZpbGUudXBkYXRlUHJvZmlsZS5kZWxldGVkQXQpXG4gICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBwbGFucyhcbiAgICBlbnY6IFNlY3JlY3lFbnYsXG4gICAgc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxQbGFuW10+IHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgcGxhbnMgfSA9IGF3YWl0IEJhc2VDbGllbnQuX2dldEJhc2VDbGllbnQoZW52LCBzZXNzaW9uSWQpKFwicXVlcnlcIikoe1xuICAgICAgcGxhbnM6IHtcbiAgICAgICAgXCIuLi5vbiBQbGFuUmVzcG9uc2VcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgcGxhbjoge1xuICAgICAgICAgICAga2luZDogdHJ1ZSxcbiAgICAgICAgICAgIGNvZGVzOiB0cnVlLFxuICAgICAgICAgICAgbGltaXRzOiB7XG4gICAgICAgICAgICAgIGRvd25sb2FkQmFuZHdpZHRoOiB0cnVlLFxuICAgICAgICAgICAgICBkb3dubG9hZENvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBoYXJkRmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBoYXJkRmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgICAgIHBlckZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgICB1cGxvYWRCYW5kd2lkdGg6IHRydWUsXG4gICAgICAgICAgICAgIHVwbG9hZENvdW50OiB0cnVlLFxuICAgICAgICAgICAgICByZWNlaXZlZE1haWxzOiB7XG4gICAgICAgICAgICAgICAgY291bnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgZmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhhcmRDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoYXJkRmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGhhcmRGaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwZXJGaWxlU2l6ZTogdHJ1ZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBzZW50TWFpbHM6IHtcbiAgICAgICAgICAgICAgICBjb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgZmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgICAgICAgaGFyZENvdW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGhhcmRGaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgaGFyZEZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgICAgIHBlckZpbGVTaXplOiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghcGxhbnMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcGxhbnMucGxhblxuICAgIH07XG4gIH1cblxuICBhc3luYyBwYXkoXG4gICAgcGxhbkNvZGU6IFNlY3JlY3lQbGFuc0NvZGVzLFxuICAgIGlucHV0OiBQYXlJbnB1dCxcbiAgICBhdXRvUmVuZXc/OiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgcGF5IH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHBheTogW1xuICAgICAgICB7XG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgcGxhbkNvZGUsXG4gICAgICAgICAgYXV0b1JlbmV3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFBheVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBwYXk6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghcGF5KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocGF5Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHBheTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHBheS5wYXkgPz8gZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgY2FuY2VsUGF5bWVudCgpOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IGNhbmNlbFBheW1lbnQgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgY2FuY2VsUGF5bWVudDoge1xuICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBDYW5jZWxQYXltZW50UmVzcG9uc2VcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgY2FuY2VsUGF5bWVudDogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWNhbmNlbFBheW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChjYW5jZWxQYXltZW50Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGNhbmNlbFBheW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBjYW5jZWxQYXltZW50LmNhbmNlbFBheW1lbnQgPz8gZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcGF5bWVudEluZm9zKCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPFBheW1lbnRJbmZvcz4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBwYXltZW50SW5mb3MgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgcGF5bWVudEluZm9zOiB7XG4gICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIFBheW1lbnRJbmZvc1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIHBheW1lbnRJbmZvczoge1xuICAgICAgICAgICAgaG9zdGVkVXJsOiB0cnVlLFxuICAgICAgICAgICAgY3VycmVudFN1YnNjcmlwdGlvbjoge1xuICAgICAgICAgICAgICBhdXRvcmVuZXc6IHRydWUsXG4gICAgICAgICAgICAgIGFjdGl2YXRlZEF0OiB0cnVlLFxuICAgICAgICAgICAgICBjdXJyZW50UGVyaW9kRW5kc0F0OiB0cnVlLFxuICAgICAgICAgICAgICBjdXJyZW50UGVyaW9kU3RhcnRlZEF0OiB0cnVlLFxuICAgICAgICAgICAgICBjYW5jZWxlZEF0OiB0cnVlLFxuICAgICAgICAgICAgICBjcmVhdGVkQXQ6IHRydWUsXG4gICAgICAgICAgICAgIGV4cGlyZXNBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgcGF1c2VkQXQ6IHRydWUsXG4gICAgICAgICAgICAgIHRyaWFsRW5kc0F0OiB0cnVlLFxuICAgICAgICAgICAgICB0cmlhbFN0YXJ0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgdXBkYXRlZEF0OiB0cnVlLFxuICAgICAgICAgICAgICBzdGF0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgY29sbGVjdGlvbk1ldGhvZDogdHJ1ZSxcbiAgICAgICAgICAgICAgcGxhbjogdHJ1ZSxcbiAgICAgICAgICAgICAgcGxhbkNvZGU6IHRydWUsXG4gICAgICAgICAgICAgIHRvdGFsOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW52b2ljZXM6IHtcbiAgICAgICAgICAgICAgcGRmOiB0cnVlLFxuICAgICAgICAgICAgICBkYXRlOiB0cnVlLFxuICAgICAgICAgICAgICBkdWU6IHRydWUsXG4gICAgICAgICAgICAgIHN0YXR1czogdHJ1ZSxcbiAgICAgICAgICAgICAgdG90YWw6IHRydWUsXG4gICAgICAgICAgICAgIG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGN1cnJlbmN5OiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIXBheW1lbnRJbmZvcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHBheW1lbnRJbmZvcy5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBwYXltZW50SW5mb3M7XG4gICAgfVxuXG4gICAgaWYgKCFwYXltZW50SW5mb3MucGF5bWVudEluZm9zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gaW50ZXJuYWxUb1BheW1lbnRJbmZvcyhwYXltZW50SW5mb3MucGF5bWVudEluZm9zKTtcbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHJlc3VsdFxuICAgIH07XG4gIH1cblxuICBhc3luYyBsaW1pdHMoKTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxRdWVyeUxpbWl0cz5cbiAgICB8IEVycm9yQWNjZXNzRGVuaWVkXG4gICAgfCBFcnJvck5vdEV4aXN0XG4gICAgfCBFcnJvckxpbWl0XG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgbGltaXRzIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIGxpbWl0czoge1xuICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBFcnJvckxpbWl0XCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBRdWVyeUxpbWl0c1wiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBjbG91ZDoge1xuICAgICAgICAgICAgc2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1heFNpemU6IHRydWUsXG4gICAgICAgICAgICBjb3VudDogdHJ1ZSxcbiAgICAgICAgICAgIG1heENvdW50OiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtYWlsOiB7XG4gICAgICAgICAgICByZWNlaXZlZDoge1xuICAgICAgICAgICAgICBjb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgbWF4Q291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgbWF4RmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBmaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbWF4RmlsZVNpemU6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZW50OiB7XG4gICAgICAgICAgICAgIGNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBtYXhDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBtYXhGaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgICBtYXhGaWxlU2l6ZTogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFsaW1pdHMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChsaW1pdHMuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gbGltaXRzO1xuICAgIH1cbiAgICBpZiAobGltaXRzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RFeGlzdFwiKSB7XG4gICAgICByZXR1cm4gbGltaXRzO1xuICAgIH1cbiAgICBpZiAobGltaXRzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JMaW1pdFwiKSB7XG4gICAgICByZXR1cm4gbGltaXRzO1xuICAgIH1cbiAgICBpZiAobGltaXRzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gbGltaXRzO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY2xvdWQsIG1haWwgfSA9IGxpbWl0cztcblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YToge1xuICAgICAgICBjbG91ZDoge1xuICAgICAgICAgIGNvdW50OiBCaWdJbnQoY2xvdWQuY291bnQpLFxuICAgICAgICAgIHNpemU6IEJpZ0ludChjbG91ZC5zaXplKSxcbiAgICAgICAgICBtYXhDb3VudDogY2xvdWQubWF4Q291bnQgPyBCaWdJbnQoY2xvdWQubWF4Q291bnQpIDogbnVsbCxcbiAgICAgICAgICBtYXhTaXplOiBjbG91ZC5tYXhTaXplID8gQmlnSW50KGNsb3VkLm1heFNpemUpIDogbnVsbFxuICAgICAgICB9LFxuICAgICAgICBtYWlsOiB7XG4gICAgICAgICAgcmVjZWl2ZWQ6IHtcbiAgICAgICAgICAgIGNvdW50OiBCaWdJbnQobWFpbC5yZWNlaXZlZC5jb3VudCksXG4gICAgICAgICAgICBtYXhDb3VudDogbWFpbC5yZWNlaXZlZC5tYXhDb3VudFxuICAgICAgICAgICAgICA/IEJpZ0ludChtYWlsLnJlY2VpdmVkLm1heENvdW50KVxuICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICBmaWxlQ291bnQ6IEJpZ0ludChtYWlsLnJlY2VpdmVkLmZpbGVDb3VudCksXG4gICAgICAgICAgICBtYXhGaWxlQ291bnQ6IG1haWwucmVjZWl2ZWQubWF4RmlsZUNvdW50XG4gICAgICAgICAgICAgID8gQmlnSW50KG1haWwucmVjZWl2ZWQubWF4RmlsZUNvdW50KVxuICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICBmaWxlU2l6ZTogQmlnSW50KG1haWwucmVjZWl2ZWQuZmlsZVNpemUpLFxuICAgICAgICAgICAgbWF4RmlsZVNpemU6IG1haWwucmVjZWl2ZWQubWF4RmlsZVNpemVcbiAgICAgICAgICAgICAgPyBCaWdJbnQobWFpbC5yZWNlaXZlZC5tYXhGaWxlU2l6ZSlcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZW50OiB7XG4gICAgICAgICAgICBjb3VudDogQmlnSW50KG1haWwuc2VudC5jb3VudCksXG4gICAgICAgICAgICBtYXhDb3VudDogbWFpbC5zZW50Lm1heENvdW50ID8gQmlnSW50KG1haWwuc2VudC5tYXhDb3VudCkgOiBudWxsLFxuICAgICAgICAgICAgZmlsZUNvdW50OiBCaWdJbnQobWFpbC5zZW50LmZpbGVDb3VudCksXG4gICAgICAgICAgICBtYXhGaWxlQ291bnQ6IG1haWwuc2VudC5tYXhGaWxlQ291bnRcbiAgICAgICAgICAgICAgPyBCaWdJbnQobWFpbC5zZW50Lm1heEZpbGVDb3VudClcbiAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgZmlsZVNpemU6IEJpZ0ludChtYWlsLnNlbnQuZmlsZVNpemUpLFxuICAgICAgICAgICAgbWF4RmlsZVNpemU6IG1haWwuc2VudC5tYXhGaWxlU2l6ZVxuICAgICAgICAgICAgICA/IEJpZ0ludChtYWlsLnNlbnQubWF4RmlsZVNpemUpXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBhc3luYyBnb2RGYXRoZXJBbmRDaGlsZHJlbigpOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxHb2RGYXRoZXJBbmRDaGlsZHJlbj4gfCBFcnJvck5vdEZvdW5kIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHVzZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgdXNlcjogW1xuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVc2VyUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGdvZENoaWxkcmVuOiB7XG4gICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgICAgICAgcGhvbmU6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnb2RGYXRoZXI6IHtcbiAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgICAgICBwaG9uZTogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXNlci5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGdvZENoaWxkcmVuOiB1c2VyLmdvZENoaWxkcmVuLFxuICAgICAgICBnb2RGYXRoZXI6IHVzZXIuZ29kRmF0aGVyXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyB1cGRhdGVBcHBEQkNvbmZpZyh7XG4gICAgYXBwQ29kZSxcbiAgICBjb25maWcsXG4gICAgZW52LFxuICAgIHNlc3Npb25JZFxuICB9OiB7XG4gICAgYXBwQ29kZTogc3RyaW5nO1xuICAgIGNvbmZpZzogQXBwREJDb25maWc7XG4gICAgZW52OiBTZWNyZWN5RW52O1xuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxBcHBEQkNvbmZpZz4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGRiQ29uZmlnTXV0YXRpb24gfSA9IGF3YWl0IEJhc2VDbGllbnQuX2dldEJhc2VDbGllbnQoXG4gICAgICBlbnYsXG4gICAgICBzZXNzaW9uSWRcbiAgICApKFwibXV0YXRpb25cIikoe1xuICAgICAgZGJDb25maWdNdXRhdGlvbjogW1xuICAgICAgICB7XG4gICAgICAgICAgYXBwQ29kZSxcbiAgICAgICAgICBjb25maWc6IEpTT04uc3RyaW5naWZ5KGNvbmZpZylcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJDb25maWdNdXRhdGlvblJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkYkNvbmZpZ011dGF0aW9uOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRiQ29uZmlnTXV0YXRpb24pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkYkNvbmZpZ011dGF0aW9uLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRiQ29uZmlnTXV0YXRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkYkNvbmZpZ011dGF0aW9uLmRiQ29uZmlnTXV0YXRpb25cbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGdldEFwcERCQ29uZmlnKFxuICAgIGFwcENvZGU6IHN0cmluZyxcbiAgICBlbnY6IFNlY3JlY3lFbnYsXG4gICAgc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPFxuICAgIHwgU3VjY2Vzc1Jlc3BvbnNlPEFwcERCQ29uZmlnPlxuICAgIHwgRXJyb3JBY2Nlc3NEZW5pZWRcbiAgICB8IEVycm9yTm90Rm91bmRcbiAgICB8IEVycm9yTm90RXhpc3RcbiAgICB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBkYkNvbmZpZyB9ID0gYXdhaXQgQmFzZUNsaWVudC5fZ2V0QmFzZUNsaWVudChcbiAgICAgIGVudixcbiAgICAgIHNlc3Npb25JZFxuICAgICkoXCJxdWVyeVwiKSh7XG4gICAgICBkYkNvbmZpZzogW1xuICAgICAgICB7XG4gICAgICAgICAgYXBwQ29kZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJDb25maWdSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAganNvbjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYkNvbmZpZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRiQ29uZmlnLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRiQ29uZmlnO1xuICAgIH1cblxuICAgIGlmIChkYkNvbmZpZy5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIGRiQ29uZmlnO1xuICAgIH1cblxuICAgIGlmIChkYkNvbmZpZy5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGRiQ29uZmlnO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGJDb25maWcuanNvblxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZ2V0RkFRKHtcbiAgICBsYW5nLFxuICAgIGVudixcbiAgICBzZXNzaW9uSWRcbiAgfToge1xuICAgIGxhbmc/OiBMYW5nO1xuICAgIGVudjogU2VjcmVjeUVudjtcbiAgICBzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8RmFxSXRlbVtdPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZmFxIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KGVudiwgc2Vzc2lvbklkKShcInF1ZXJ5XCIpKHtcbiAgICAgIGZhcTogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFuZ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBGYXFSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZmFxOiB7XG4gICAgICAgICAgICAgIGFuc3dlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgb3JkZXI6IHRydWUsXG4gICAgICAgICAgICAgIHF1ZXN0aW9uOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWZhcSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGZhcS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBmYXE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBmYXEuZmFxXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBnZXRCbG9nKHtcbiAgICBlbnYsXG4gICAgbGFuZyxcbiAgICBzZXNzaW9uSWRcbiAgfToge1xuICAgIGVudjogU2VjcmVjeUVudjtcbiAgICBsYW5nPzogTGFuZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPEJsb2dJdGVtW10+IHwgRXJyb3JMYW5nTm90RXhpc3QgfCBudWxsPiB7XG4gICAgY29uc3QgeyBibG9nIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KGVudiwgc2Vzc2lvbklkKShcInF1ZXJ5XCIpKHtcbiAgICAgIGJsb2c6IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhbmdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JMYW5nTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gQmxvZ1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBibG9nSXRlbXM6IHtcbiAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgIGJsb2dJZDogdHJ1ZSxcbiAgICAgICAgICAgICAgYXV0aG9yOiB0cnVlLFxuICAgICAgICAgICAgICBib2R5OiB0cnVlLFxuICAgICAgICAgICAgICBkYXRlOiB0cnVlLFxuICAgICAgICAgICAgICBpbWFnZTogdHJ1ZSxcbiAgICAgICAgICAgICAgaW1hZ2VBbHQ6IHRydWUsXG4gICAgICAgICAgICAgIHN1bW1hcnk6IHRydWUsXG4gICAgICAgICAgICAgIHRpdGxlOiB0cnVlLFxuICAgICAgICAgICAgICBvcmRlcjogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFibG9nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoYmxvZy5fX3R5cGVuYW1lID09PSBcIkVycm9yTGFuZ05vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiBibG9nO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogYmxvZy5ibG9nSXRlbXMubWFwKGIgPT4gKHsgLi4uYiwgZGF0ZTogbmV3IERhdGUoYi5kYXRlKSB9KSlcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcmVwb3J0VXNlcihcbiAgICByZXBvcnRlZFVzZXJJZDogc3RyaW5nLFxuICAgIGN1c3RvbU1lc3NhZ2U/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8U2VuZFJlcG9ydD4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90Rm91bmQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgc2VuZFJlcG9ydCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBzZW5kUmVwb3J0OiBbXG4gICAgICAgIHtcbiAgICAgICAgICByZXBvcnRlZFVzZXJJZCxcbiAgICAgICAgICBjdXN0b21NZXNzYWdlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gU2VuZFJlcG9ydFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBzZW5kUmVwb3J0OiB7XG4gICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICBjdXN0b21NZXNzYWdlOiB0cnVlLFxuICAgICAgICAgICAgICB1c2VyOiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgIGVtYWlsOiB0cnVlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHJlcG9ydGVkVXNlcjoge1xuICAgICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbWFpbDogdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXNlbmRSZXBvcnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChzZW5kUmVwb3J0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHNlbmRSZXBvcnQ7XG4gICAgfVxuXG4gICAgaWYgKHNlbmRSZXBvcnQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBzZW5kUmVwb3J0O1xuICAgIH1cblxuICAgIGlmICghc2VuZFJlcG9ydC5zZW5kUmVwb3J0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHNlbmRSZXBvcnQuc2VuZFJlcG9ydFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZGVsZXRlVXNlcih7XG4gICAgc2Vzc2lvbklkLFxuICAgIHVzZXJJZCxcbiAgICBlbnZcbiAgfToge1xuICAgIHNlc3Npb25JZDogc3RyaW5nO1xuICAgIHVzZXJJZD86IHN0cmluZztcbiAgICBlbnY6IFNlY3JlY3lFbnY7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZGVsZXRlVXNlciB9ID0gYXdhaXQgQmFzZUNsaWVudC5fZ2V0QmFzZUNsaWVudChcbiAgICAgIGVudixcbiAgICAgIHNlc3Npb25JZFxuICAgICkoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkZWxldGVVc2VyOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB1c2VySWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGVsZXRlVXNlclJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVVc2VyOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRlbGV0ZVVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkZWxldGVVc2VyLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZVVzZXI7XG4gICAgfVxuXG4gICAgaWYgKCFkZWxldGVVc2VyLmRlbGV0ZVVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGVsZXRlVXNlci5kZWxldGVVc2VyXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRiR2V0PFU+KHtcbiAgICBmaWVsZCxcbiAgICB1c2VySWRcbiAgfToge1xuICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgdXNlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8XG4gICAgfCBTdWNjZXNzUmVzcG9uc2U8VT5cbiAgICB8IEVycm9yQWNjZXNzRGVuaWVkXG4gICAgfCBFcnJvck5vdEV4aXN0XG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZGJHZXQgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZGJHZXQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgIHVzZXJJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJHZXRSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAganNvbjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYkdldCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRiR2V0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRiR2V0O1xuICAgIH1cblxuICAgIGlmIChkYkdldC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGRiR2V0O1xuICAgIH1cblxuICAgIGlmIChkYkdldC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIGRiR2V0O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGJHZXQuanNvblxuICAgIH07XG4gIH1cblxuICBhc3luYyBkYlNldDxUIGV4dGVuZHMgVXNlckRhdGEsIFUgZXh0ZW5kcyBEb2N1bWVudD4oe1xuICAgIHZhbHVlLFxuICAgIHVzZXJJZFxuICB9OiB7XG4gICAgdmFsdWU6IFU7XG4gICAgdXNlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPFQ+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBFcnJvck5vdEZvdW5kIHwgbnVsbD4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHZhbHVlIHNob3VsZCBiZSBhbiBvYmplY3QgaW5jbHVkaW5nIGZpZWxkcyB5b3Ugd2FudCB0byB1cGRhdGUuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGRiU2V0IH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRiU2V0OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgdmFsdWU6IHNlcmlhbGl6ZSh2YWx1ZSkudG9TdHJpbmcoXCJiYXNlNjRcIilcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEYlNldFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkYlNldDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYlNldCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRiU2V0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRiU2V0O1xuICAgIH1cblxuICAgIGlmIChkYlNldC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIGRiU2V0O1xuICAgIH1cblxuICAgIGlmICghZGJTZXQuZGJTZXQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGJTZXQuZGJTZXQucmVzXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRiU2VhcmNoPFQ+KHtcbiAgICBzZWFyY2gsXG4gICAgZmllbGRcbiAgfToge1xuICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgc2VhcmNoOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxUW10+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBFcnJvckJhc2ljIHwgRXJyb3JOb3RFeGlzdCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBkYlNlYXJjaCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICBkYlNlYXJjaDogW1xuICAgICAgICB7XG4gICAgICAgICAgc2VhcmNoLFxuICAgICAgICAgIGZpZWxkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQmFzaWNcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEYlNlYXJjaFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBqc29uOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRiU2VhcmNoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGJTZWFyY2guX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGJTZWFyY2g7XG4gICAgfVxuXG4gICAgaWYgKGRiU2VhcmNoLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JCYXNpY1wiKSB7XG4gICAgICByZXR1cm4gZGJTZWFyY2g7XG4gICAgfVxuXG4gICAgaWYgKGRiU2VhcmNoLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RFeGlzdFwiKSB7XG4gICAgICByZXR1cm4gZGJTZWFyY2g7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkYlNlYXJjaC5qc29uXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZvbGRlcih7XG4gICAgaWRcbiAgfToge1xuICAgIGlkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yTm90RXhpc3QgfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBkZWxldGVGb2xkZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgZGVsZXRlRm9sZGVyOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERlbGV0ZUZvbGRlclJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVGb2xkZXI6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGVsZXRlRm9sZGVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlRm9sZGVyLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RFeGlzdFwiKSB7XG4gICAgICByZXR1cm4gZGVsZXRlRm9sZGVyO1xuICAgIH1cblxuICAgIGlmIChkZWxldGVGb2xkZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGVsZXRlRm9sZGVyO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGVsZXRlRm9sZGVyLmRlbGV0ZUZvbGRlciA/PyBmYWxzZVxuICAgIH07XG4gIH1cblxuICBhc3luYyBtb3ZlRm9sZGVycyh7XG4gICAgZm9sZGVyc0lkLFxuICAgIHBhcmVudEZvbGRlcklkXG4gIH06IHtcbiAgICBmb2xkZXJzSWQ6IHN0cmluZ1tdO1xuICAgIHBhcmVudEZvbGRlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBtb3ZlRm9sZGVycyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBtb3ZlRm9sZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgZm9sZGVyc0lkLFxuICAgICAgICAgIHBhcmVudEZvbGRlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIE1vdmVGb2xkZXJzUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1vdmVGb2xkZXJzOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIW1vdmVGb2xkZXJzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobW92ZUZvbGRlcnMuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gbW92ZUZvbGRlcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBtb3ZlRm9sZGVycy5tb3ZlRm9sZGVycyA/PyBmYWxzZVxuICAgIH07XG4gIH1cblxuICBhc3luYyBtb3ZlRmlsZXMoe1xuICAgIGZpbGVzSWQsXG4gICAgcGFyZW50Rm9sZGVySWRcbiAgfToge1xuICAgIGZpbGVzSWQ6IHN0cmluZ1tdO1xuICAgIHBhcmVudEZvbGRlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBtb3ZlRmlsZXMgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgbW92ZUZpbGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlc0lkLFxuICAgICAgICAgIHBhcmVudEZvbGRlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIE1vdmVGaWxlc1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtb3ZlRmlsZXM6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghbW92ZUZpbGVzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobW92ZUZpbGVzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIG1vdmVGaWxlcztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IG1vdmVGaWxlcy5tb3ZlRmlsZXMgPz8gZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZm9sZGVyU2l6ZSh7XG4gICAgZm9sZGVySWRcbiAgfToge1xuICAgIGZvbGRlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPEZvbGRlclNpemU+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBmb2xkZXJTaXplIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIGZvbGRlclNpemU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZvbGRlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEZvbGRlclNpemVSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgc2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgIHNpemVCZWZvcmU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZm9sZGVyU2l6ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGZvbGRlclNpemUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZm9sZGVyU2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgc2l6ZTogQmlnSW50KGZvbGRlclNpemUuc2l6ZSksXG4gICAgICAgIHNpemVCZWZvcmU6IEJpZ0ludChmb2xkZXJTaXplLnNpemVCZWZvcmUpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGdldFNwb25zb3JzaGlwTGluayh7XG4gICAgYmFja1VybFxuICB9OiB7XG4gICAgYmFja1VybDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc3QgbWUgPSBhd2FpdCB0aGlzLm1lKHsgd2l0aFB1YmxpY0tleTogZmFsc2UgfSk7XG5cbiAgICBpZiAoIW1lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobWUuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRMaW5rKHtcbiAgICAgIGFwcDogXCJhdXRoXCIsXG4gICAgICBwYXRoOiBgL3NpZ24tdXA/Z2Y9JHtidG9hKG1lLmRhdGEuZW1haWwpfSZhdT0ke2J0b2EoYmFja1VybCl9YFxuICAgIH0pO1xuICB9XG59XG4iXX0=