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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,13 +1,14 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _createClass from "@babel/runtime/helpers/createClass";
2
3
  import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized";
3
4
  import _inheritsLoose from "@babel/runtime/helpers/inheritsLoose";
4
5
  import _classPrivateFieldLooseBase from "@babel/runtime/helpers/classPrivateFieldLooseBase";
5
6
  import _classPrivateFieldLooseKey from "@babel/runtime/helpers/classPrivateFieldLooseKey";
6
7
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
7
8
 
8
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
9
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
9
10
 
10
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
11
+ 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; }
11
12
 
12
13
  function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
13
14
 
@@ -74,7 +75,6 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
74
75
  var _this;
75
76
 
76
77
  _this = _BaseClient.call(this, uaSession, env) || this;
77
- _this.jwt = void 0;
78
78
  Object.defineProperty(_assertThisInitialized(_this), _keys, {
79
79
  writable: true,
80
80
  value: void 0
@@ -332,7 +332,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
332
332
  var _addFileToHistory = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5(_ref5) {
333
333
  var _this2 = this;
334
334
 
335
- var fileId, vFileId, _yield$this$client$mu, addFileToHistory, vFile, file, users, input;
335
+ var fileId, vFileId, _yield$this$client, addFileToHistory, vFile, file, users, input;
336
336
 
337
337
  return _regeneratorRuntime.wrap(function _callee5$(_context5) {
338
338
  while (1) {
@@ -340,7 +340,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
340
340
  case 0:
341
341
  fileId = _ref5.fileId, vFileId = _ref5.vFileId;
342
342
  _context5.next = 3;
343
- return this.client.mutation({
343
+ return this.client("mutation")({
344
344
  addFileToHistory: [{
345
345
  fileId: fileId,
346
346
  vFileId: vFileId
@@ -348,8 +348,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
348
348
  });
349
349
 
350
350
  case 3:
351
- _yield$this$client$mu = _context5.sent;
352
- addFileToHistory = _yield$this$client$mu.addFileToHistory;
351
+ _yield$this$client = _context5.sent;
352
+ addFileToHistory = _yield$this$client.addFileToHistory;
353
353
  _context5.next = 7;
354
354
  return gqlVFileToInternal(addFileToHistory, _classPrivateFieldLooseBase(this, _keys)[_keys]);
355
355
 
@@ -379,7 +379,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
379
379
  })
380
380
  };
381
381
  _context5.next = 14;
382
- return this.client.mutation({
382
+ return this.client("mutation")({
383
383
  shareFileInHistory: [{
384
384
  input: input,
385
385
  vFileId: vFileId
@@ -408,13 +408,13 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
408
408
  var _uploadFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee9(_ref8) {
409
409
  var _this3 = this;
410
410
 
411
- var file, encryptProgress, uploadProgress, cancelToken, fileKey, fileBuffer, compressed, _yield$encrypt, encryptedFile, md5File, md5Encrypted, encryptedFileKey, _yield$this$client$mu2, uploadFile, uploadPartEnded, uploadEnded, chunkParts, _iterator2, _step2, _step2$value, index, chunk, progressParts, onProgress, byPart;
411
+ var file, encryptProgress, uploadProgress, signal, fileKey, fileBuffer, compressed, _yield$encrypt, encryptedFile, md5File, md5Encrypted, encryptedFileKey, _yield$this$client2, uploadFile, uploadPartEnded, uploadEnded, chunkParts, _iterator2, _step2, _step2$value, index, chunk, progressParts, onProgress, byPart;
412
412
 
413
413
  return _regeneratorRuntime.wrap(function _callee9$(_context9) {
414
414
  while (1) {
415
415
  switch (_context9.prev = _context9.next) {
416
416
  case 0:
417
- file = _ref8.file, encryptProgress = _ref8.encryptProgress, uploadProgress = _ref8.uploadProgress, cancelToken = _ref8.cancelToken;
417
+ file = _ref8.file, encryptProgress = _ref8.encryptProgress, uploadProgress = _ref8.uploadProgress, signal = _ref8.signal;
418
418
  fileKey = secretstreamKeygen();
419
419
 
420
420
  if (!(file instanceof File)) {
@@ -437,10 +437,9 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
437
437
 
438
438
  case 11:
439
439
  fileBuffer = _context9.t0;
440
- compressed = compress(fileBuffer); // TODO: use abort controller to cancel upload, and see typings
441
-
440
+ compressed = compress(fileBuffer);
442
441
  _context9.next = 15;
443
- return encrypt(fileKey, compressed, encryptProgress);
442
+ return encrypt(fileKey, compressed, encryptProgress, signal);
444
443
 
445
444
  case 15:
446
445
  _yield$encrypt = _context9.sent;
@@ -449,7 +448,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
449
448
  md5Encrypted = _yield$encrypt.md5Encrypted;
450
449
  encryptedFileKey = encryptCryptoBox(fileKey, _classPrivateFieldLooseBase(this, _keys)[_keys].publicKey, _classPrivateFieldLooseBase(this, _keys)[_keys].privateKey);
451
450
  _context9.next = 22;
452
- return this.client.mutation({
451
+ return this.client("mutation")({
453
452
  uploadFile: [{
454
453
  fileSize: encryptedFile.byteLength,
455
454
  fileSizeBefore: fileBuffer.byteLength,
@@ -468,8 +467,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
468
467
  });
469
468
 
470
469
  case 22:
471
- _yield$this$client$mu2 = _context9.sent;
472
- uploadFile = _yield$this$client$mu2.uploadFile;
470
+ _yield$this$client2 = _context9.sent;
471
+ uploadFile = _yield$this$client2.uploadFile;
473
472
 
474
473
  if (uploadFile) {
475
474
  _context9.next = 26;
@@ -500,14 +499,14 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
500
499
  case 30:
501
500
  uploadPartEnded = /*#__PURE__*/function () {
502
501
  var _ref9 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee6(md5, order) {
503
- var _yield$_this3$client$, uploadFilePartEnd;
502
+ var _yield$_this3$client, uploadFilePartEnd;
504
503
 
505
504
  return _regeneratorRuntime.wrap(function _callee6$(_context6) {
506
505
  while (1) {
507
506
  switch (_context6.prev = _context6.next) {
508
507
  case 0:
509
508
  _context6.next = 2;
510
- return _this3.client.mutation({
509
+ return _this3.client("mutation")({
511
510
  uploadFilePartEnd: [{
512
511
  fileId: uploadFile.fileId,
513
512
  md5: md5,
@@ -516,8 +515,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
516
515
  });
517
516
 
518
517
  case 2:
519
- _yield$_this3$client$ = _context6.sent;
520
- uploadFilePartEnd = _yield$_this3$client$.uploadFilePartEnd;
518
+ _yield$_this3$client = _context6.sent;
519
+ uploadFilePartEnd = _yield$_this3$client.uploadFilePartEnd;
521
520
  return _context6.abrupt("return", uploadFilePartEnd);
522
521
 
523
522
  case 5:
@@ -535,22 +534,22 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
535
534
 
536
535
  uploadEnded = /*#__PURE__*/function () {
537
536
  var _ref10 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee7() {
538
- var _yield$_this3$client$2, uploadFileEnd;
537
+ var _yield$_this3$client2, uploadFileEnd;
539
538
 
540
539
  return _regeneratorRuntime.wrap(function _callee7$(_context7) {
541
540
  while (1) {
542
541
  switch (_context7.prev = _context7.next) {
543
542
  case 0:
544
543
  _context7.next = 2;
545
- return _this3.client.mutation({
544
+ return _this3.client("mutation")({
546
545
  uploadFileEnd: [{
547
546
  fileId: uploadFile.fileId
548
547
  }, true]
549
548
  });
550
549
 
551
550
  case 2:
552
- _yield$_this3$client$2 = _context7.sent;
553
- uploadFileEnd = _yield$_this3$client$2.uploadFileEnd;
551
+ _yield$_this3$client2 = _context7.sent;
552
+ uploadFileEnd = _yield$_this3$client2.uploadFileEnd;
554
553
  return _context7.abrupt("return", uploadFileEnd != null ? uploadFileEnd : null);
555
554
 
556
555
  case 5:
@@ -638,44 +637,24 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
638
637
  }
639
638
 
640
639
  formData.append("file", new Blob([chunk.data]), uploadFile.fileId + "-" + chunk.order);
641
- _context8.prev = 6;
642
- _context8.next = 9;
640
+ _context8.next = 8;
643
641
  return axios.post(part.url, formData, {
644
642
  onUploadProgress: function onUploadProgress(progressEvent) {
645
643
  return onProgress(part.order, progressEvent);
646
644
  },
647
- cancelToken: cancelToken
645
+ signal: signal
648
646
  });
649
647
 
650
- case 9:
651
- _context8.next = 11;
648
+ case 8:
649
+ _context8.next = 10;
652
650
  return uploadPartEnded(chunk.md5, chunk.order);
653
651
 
654
- case 11:
655
- _context8.next = 19;
656
- break;
657
-
658
- case 13:
659
- _context8.prev = 13;
660
- _context8.t0 = _context8["catch"](6);
661
-
662
- if (!(_context8.t0.response.status === 0)) {
663
- _context8.next = 18;
664
- break;
665
- }
666
-
667
- _context8.next = 19;
668
- break;
669
-
670
- case 18:
671
- throw _context8.t0;
672
-
673
- case 19:
652
+ case 10:
674
653
  case "end":
675
654
  return _context8.stop();
676
655
  }
677
656
  }
678
- }, _callee8, null, [[6, 13]]);
657
+ }, _callee8);
679
658
  }));
680
659
 
681
660
  return function byPart(_x15) {
@@ -710,18 +689,18 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
710
689
 
711
690
  _proto.uploadFileInCloud = /*#__PURE__*/function () {
712
691
  var _uploadFileInCloud = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee10(_ref12) {
713
- var file, name, folderId, cancelToken, encryptProgress, uploadProgress, fileId;
692
+ var file, name, folderId, encryptProgress, uploadProgress, signal, fileId;
714
693
  return _regeneratorRuntime.wrap(function _callee10$(_context10) {
715
694
  while (1) {
716
695
  switch (_context10.prev = _context10.next) {
717
696
  case 0:
718
- file = _ref12.file, name = _ref12.name, folderId = _ref12.folderId, cancelToken = _ref12.cancelToken, encryptProgress = _ref12.encryptProgress, uploadProgress = _ref12.uploadProgress;
697
+ file = _ref12.file, name = _ref12.name, folderId = _ref12.folderId, encryptProgress = _ref12.encryptProgress, uploadProgress = _ref12.uploadProgress, signal = _ref12.signal;
719
698
  _context10.next = 3;
720
699
  return this.uploadFile({
721
700
  file: file,
722
701
  encryptProgress: encryptProgress,
723
702
  uploadProgress: uploadProgress,
724
- cancelToken: cancelToken
703
+ signal: signal
725
704
  });
726
705
 
727
706
  case 3:
@@ -790,7 +769,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
790
769
  _folder$parentFolder$2,
791
770
  _this4 = this;
792
771
 
793
- var name, parentFolderId, key, encryptedName, encryptedKey, _yield$this$client$mu3, createFolder, folder, users;
772
+ var name, parentFolderId, key, encryptedName, encryptedKey, _yield$this$client3, createFolder, folder, users;
794
773
 
795
774
  return _regeneratorRuntime.wrap(function _callee12$(_context12) {
796
775
  while (1) {
@@ -805,7 +784,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
805
784
  encryptedName = _context12.sent;
806
785
  encryptedKey = encryptCryptoBox(key, _classPrivateFieldLooseBase(this, _keys)[_keys].publicKey, _classPrivateFieldLooseBase(this, _keys)[_keys].privateKey);
807
786
  _context12.next = 8;
808
- return this.client.mutation({
787
+ return this.client("mutation")({
809
788
  createFolder: [{
810
789
  name: encryptedName,
811
790
  parentFolderId: parentFolderId,
@@ -814,8 +793,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
814
793
  });
815
794
 
816
795
  case 8:
817
- _yield$this$client$mu3 = _context12.sent;
818
- createFolder = _yield$this$client$mu3.createFolder;
796
+ _yield$this$client3 = _context12.sent;
797
+ createFolder = _yield$this$client3.createFolder;
819
798
 
820
799
  if (createFolder) {
821
800
  _context12.next = 12;
@@ -871,7 +850,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
871
850
 
872
851
  _proto.folder = /*#__PURE__*/function () {
873
852
  var _folder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee13(_temp) {
874
- var _ref16, id, deleted, _yield$this$client$qu, folder;
853
+ var _ref16, id, deleted, _yield$this$client4, folder;
875
854
 
876
855
  return _regeneratorRuntime.wrap(function _callee13$(_context13) {
877
856
  while (1) {
@@ -879,7 +858,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
879
858
  case 0:
880
859
  _ref16 = _temp === void 0 ? {} : _temp, id = _ref16.id, deleted = _ref16.deleted;
881
860
  _context13.next = 3;
882
- return this.client.query({
861
+ return this.client("query")({
883
862
  folder: [{
884
863
  deleted: deleted,
885
864
  id: id
@@ -887,8 +866,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
887
866
  });
888
867
 
889
868
  case 3:
890
- _yield$this$client$qu = _context13.sent;
891
- folder = _yield$this$client$qu.folder;
869
+ _yield$this$client4 = _context13.sent;
870
+ folder = _yield$this$client4.folder;
892
871
 
893
872
  if (folder) {
894
873
  _context13.next = 7;
@@ -917,7 +896,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
917
896
 
918
897
  _proto.file = /*#__PURE__*/function () {
919
898
  var _file = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee14(_ref17) {
920
- var id, _yield$this$client$qu2, file;
899
+ var id, _yield$this$client5, file;
921
900
 
922
901
  return _regeneratorRuntime.wrap(function _callee14$(_context14) {
923
902
  while (1) {
@@ -925,15 +904,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
925
904
  case 0:
926
905
  id = _ref17.id;
927
906
  _context14.next = 3;
928
- return this.client.query({
907
+ return this.client("query")({
929
908
  file: [{
930
909
  id: id
931
910
  }, gqlFileQuery]
932
911
  });
933
912
 
934
913
  case 3:
935
- _yield$this$client$qu2 = _context14.sent;
936
- file = _yield$this$client$qu2.file;
914
+ _yield$this$client5 = _context14.sent;
915
+ file = _yield$this$client5.file;
937
916
 
938
917
  if (file) {
939
918
  _context14.next = 7;
@@ -962,7 +941,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
962
941
 
963
942
  _proto.vFile = /*#__PURE__*/function () {
964
943
  var _vFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee15(_ref18) {
965
- var id, _yield$this$client$qu3, vFile;
944
+ var id, _yield$this$client6, vFile;
966
945
 
967
946
  return _regeneratorRuntime.wrap(function _callee15$(_context15) {
968
947
  while (1) {
@@ -970,15 +949,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
970
949
  case 0:
971
950
  id = _ref18.id;
972
951
  _context15.next = 3;
973
- return this.client.query({
952
+ return this.client("query")({
974
953
  vFile: [{
975
954
  id: id
976
955
  }, gqlVFileWithFolderQuery]
977
956
  });
978
957
 
979
958
  case 3:
980
- _yield$this$client$qu3 = _context15.sent;
981
- vFile = _yield$this$client$qu3.vFile;
959
+ _yield$this$client6 = _context15.sent;
960
+ vFile = _yield$this$client6.vFile;
982
961
 
983
962
  if (vFile) {
984
963
  _context15.next = 7;
@@ -1007,7 +986,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1007
986
 
1008
987
  _proto.mail = /*#__PURE__*/function () {
1009
988
  var _mail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee16(_ref19) {
1010
- var id, _yield$this$client$qu4, mail;
989
+ var id, _yield$this$client7, mail;
1011
990
 
1012
991
  return _regeneratorRuntime.wrap(function _callee16$(_context16) {
1013
992
  while (1) {
@@ -1015,15 +994,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1015
994
  case 0:
1016
995
  id = _ref19.id;
1017
996
  _context16.next = 3;
1018
- return this.client.query({
997
+ return this.client("query")({
1019
998
  mail: [{
1020
999
  id: id
1021
1000
  }, gqlMailQuery]
1022
1001
  });
1023
1002
 
1024
1003
  case 3:
1025
- _yield$this$client$qu4 = _context16.sent;
1026
- mail = _yield$this$client$qu4.mail;
1004
+ _yield$this$client7 = _context16.sent;
1005
+ mail = _yield$this$client7.mail;
1027
1006
 
1028
1007
  if (mail) {
1029
1008
  _context16.next = 7;
@@ -1052,7 +1031,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1052
1031
 
1053
1032
  _proto.shareVFile = /*#__PURE__*/function () {
1054
1033
  var _shareVFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee17(_ref20) {
1055
- var vFileId, userId, rights, vFile, user, nameKey, history, _iterator3, _step3, h, _yield$this$client$mu4, shareVFile;
1034
+ var vFileId, userId, rights, vFile, user, nameKey, history, _iterator3, _step3, h, _yield$this$client8, shareVFile;
1056
1035
 
1057
1036
  return _regeneratorRuntime.wrap(function _callee17$(_context17) {
1058
1037
  while (1) {
@@ -1130,7 +1109,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1130
1109
 
1131
1110
  case 23:
1132
1111
  _context17.next = 25;
1133
- return this.client.mutation({
1112
+ return this.client("mutation")({
1134
1113
  shareVFile: [{
1135
1114
  vFileId: vFileId,
1136
1115
  userId: userId,
@@ -1141,8 +1120,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1141
1120
  });
1142
1121
 
1143
1122
  case 25:
1144
- _yield$this$client$mu4 = _context17.sent;
1145
- shareVFile = _yield$this$client$mu4.shareVFile;
1123
+ _yield$this$client8 = _context17.sent;
1124
+ shareVFile = _yield$this$client8.shareVFile;
1146
1125
  return _context17.abrupt("return", shareVFile != null ? shareVFile : false);
1147
1126
 
1148
1127
  case 28:
@@ -1162,20 +1141,20 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1162
1141
 
1163
1142
  _proto.sharedVFiles = /*#__PURE__*/function () {
1164
1143
  var _sharedVFiles = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee18() {
1165
- var _yield$this$client$qu5, sharedVFiles, vFiles, _iterator4, _step4, vFile;
1144
+ var _yield$this$client9, sharedVFiles, vFiles, _iterator4, _step4, vFile;
1166
1145
 
1167
1146
  return _regeneratorRuntime.wrap(function _callee18$(_context18) {
1168
1147
  while (1) {
1169
1148
  switch (_context18.prev = _context18.next) {
1170
1149
  case 0:
1171
1150
  _context18.next = 2;
1172
- return this.client.query({
1151
+ return this.client("query")({
1173
1152
  sharedVFiles: gqlVFileWithFolderQuery
1174
1153
  });
1175
1154
 
1176
1155
  case 2:
1177
- _yield$this$client$qu5 = _context18.sent;
1178
- sharedVFiles = _yield$this$client$qu5.sharedVFiles;
1156
+ _yield$this$client9 = _context18.sent;
1157
+ sharedVFiles = _yield$this$client9.sharedVFiles;
1179
1158
  vFiles = new Array();
1180
1159
  _iterator4 = _createForOfIteratorHelperLoose(sharedVFiles);
1181
1160
 
@@ -1219,20 +1198,20 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1219
1198
 
1220
1199
  _proto.vFilesSharedWithMe = /*#__PURE__*/function () {
1221
1200
  var _vFilesSharedWithMe = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee19() {
1222
- var _yield$this$client$qu6, vFilesSharedWithMe, vFiles, _iterator5, _step5, vFile;
1201
+ var _yield$this$client10, vFilesSharedWithMe, vFiles, _iterator5, _step5, vFile;
1223
1202
 
1224
1203
  return _regeneratorRuntime.wrap(function _callee19$(_context19) {
1225
1204
  while (1) {
1226
1205
  switch (_context19.prev = _context19.next) {
1227
1206
  case 0:
1228
1207
  _context19.next = 2;
1229
- return this.client.query({
1208
+ return this.client("query")({
1230
1209
  vFilesSharedWithMe: gqlVFileWithFolderQuery
1231
1210
  });
1232
1211
 
1233
1212
  case 2:
1234
- _yield$this$client$qu6 = _context19.sent;
1235
- vFilesSharedWithMe = _yield$this$client$qu6.vFilesSharedWithMe;
1213
+ _yield$this$client10 = _context19.sent;
1214
+ vFilesSharedWithMe = _yield$this$client10.vFilesSharedWithMe;
1236
1215
  vFiles = new Array();
1237
1216
  _iterator5 = _createForOfIteratorHelperLoose(vFilesSharedWithMe);
1238
1217
 
@@ -1276,20 +1255,20 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1276
1255
 
1277
1256
  _proto.deletedVFiles = /*#__PURE__*/function () {
1278
1257
  var _deletedVFiles = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee20() {
1279
- var _yield$this$client$qu7, deletedVFiles, vFiles, _iterator6, _step6, vFile;
1258
+ var _yield$this$client11, deletedVFiles, vFiles, _iterator6, _step6, vFile;
1280
1259
 
1281
1260
  return _regeneratorRuntime.wrap(function _callee20$(_context20) {
1282
1261
  while (1) {
1283
1262
  switch (_context20.prev = _context20.next) {
1284
1263
  case 0:
1285
1264
  _context20.next = 2;
1286
- return this.client.query({
1265
+ return this.client("query")({
1287
1266
  deletedVFiles: gqlVFileQuery
1288
1267
  });
1289
1268
 
1290
1269
  case 2:
1291
- _yield$this$client$qu7 = _context20.sent;
1292
- deletedVFiles = _yield$this$client$qu7.deletedVFiles;
1270
+ _yield$this$client11 = _context20.sent;
1271
+ deletedVFiles = _yield$this$client11.deletedVFiles;
1293
1272
  vFiles = new Array();
1294
1273
  _iterator6 = _createForOfIteratorHelperLoose(deletedVFiles);
1295
1274
 
@@ -1333,20 +1312,20 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1333
1312
 
1334
1313
  _proto.sharedFolders = /*#__PURE__*/function () {
1335
1314
  var _sharedFolders = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee21() {
1336
- var _yield$this$client$qu8, sharedFolders, folders, _iterator7, _step7, folder;
1315
+ var _yield$this$client12, sharedFolders, folders, _iterator7, _step7, folder;
1337
1316
 
1338
1317
  return _regeneratorRuntime.wrap(function _callee21$(_context21) {
1339
1318
  while (1) {
1340
1319
  switch (_context21.prev = _context21.next) {
1341
1320
  case 0:
1342
1321
  _context21.next = 2;
1343
- return this.client.query({
1322
+ return this.client("query")({
1344
1323
  sharedFolders: gqlFolderQuery
1345
1324
  });
1346
1325
 
1347
1326
  case 2:
1348
- _yield$this$client$qu8 = _context21.sent;
1349
- sharedFolders = _yield$this$client$qu8.sharedFolders;
1327
+ _yield$this$client12 = _context21.sent;
1328
+ sharedFolders = _yield$this$client12.sharedFolders;
1350
1329
  folders = new Array();
1351
1330
  _iterator7 = _createForOfIteratorHelperLoose(sharedFolders);
1352
1331
 
@@ -1390,20 +1369,20 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1390
1369
 
1391
1370
  _proto.foldersSharedWithMe = /*#__PURE__*/function () {
1392
1371
  var _foldersSharedWithMe = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee22() {
1393
- var _yield$this$client$qu9, foldersSharedWithMe, folders, _iterator8, _step8, folder;
1372
+ var _yield$this$client13, foldersSharedWithMe, folders, _iterator8, _step8, folder;
1394
1373
 
1395
1374
  return _regeneratorRuntime.wrap(function _callee22$(_context22) {
1396
1375
  while (1) {
1397
1376
  switch (_context22.prev = _context22.next) {
1398
1377
  case 0:
1399
1378
  _context22.next = 2;
1400
- return this.client.query({
1379
+ return this.client("query")({
1401
1380
  foldersSharedWithMe: gqlFolderQuery
1402
1381
  });
1403
1382
 
1404
1383
  case 2:
1405
- _yield$this$client$qu9 = _context22.sent;
1406
- foldersSharedWithMe = _yield$this$client$qu9.foldersSharedWithMe;
1384
+ _yield$this$client13 = _context22.sent;
1385
+ foldersSharedWithMe = _yield$this$client13.foldersSharedWithMe;
1407
1386
  folders = new Array();
1408
1387
  _iterator8 = _createForOfIteratorHelperLoose(foldersSharedWithMe);
1409
1388
 
@@ -1447,20 +1426,20 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1447
1426
 
1448
1427
  _proto.deletedFolders = /*#__PURE__*/function () {
1449
1428
  var _deletedFolders = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee23() {
1450
- var _yield$this$client$qu10, deletedFolders, folders, _iterator9, _step9, folder;
1429
+ var _yield$this$client14, deletedFolders, folders, _iterator9, _step9, folder;
1451
1430
 
1452
1431
  return _regeneratorRuntime.wrap(function _callee23$(_context23) {
1453
1432
  while (1) {
1454
1433
  switch (_context23.prev = _context23.next) {
1455
1434
  case 0:
1456
1435
  _context23.next = 2;
1457
- return this.client.query({
1436
+ return this.client("query")({
1458
1437
  deletedFolders: gqlFolderQuery
1459
1438
  });
1460
1439
 
1461
1440
  case 2:
1462
- _yield$this$client$qu10 = _context23.sent;
1463
- deletedFolders = _yield$this$client$qu10.deletedFolders;
1441
+ _yield$this$client14 = _context23.sent;
1442
+ deletedFolders = _yield$this$client14.deletedFolders;
1464
1443
  folders = new Array();
1465
1444
  _iterator9 = _createForOfIteratorHelperLoose(deletedFolders);
1466
1445
 
@@ -1502,34 +1481,81 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1502
1481
  return deletedFolders;
1503
1482
  }();
1504
1483
 
1505
- _proto.shareFolder = /*#__PURE__*/function () {
1506
- var _shareFolder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee24(_ref21) {
1507
- var folderId, userId, rights, user, _yield$this$client$mu5, shareFolder, shareFolders, _iterator10, _step10, id, nameKey, _iterator11, _step11, _id, vFileInput, _yield$this$client$mu6, shareFolderFinish;
1484
+ _proto.deletedMails = /*#__PURE__*/function () {
1485
+ var _deletedMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee24(_ref21) {
1486
+ var mailType, _yield$this$client15, deletedMails, mails, _iterator10, _step10, m, mail;
1508
1487
 
1509
1488
  return _regeneratorRuntime.wrap(function _callee24$(_context24) {
1510
1489
  while (1) {
1511
1490
  switch (_context24.prev = _context24.next) {
1512
1491
  case 0:
1513
- folderId = _ref21.folderId, userId = _ref21.userId, rights = _ref21.rights;
1492
+ mailType = _ref21.mailType;
1514
1493
  _context24.next = 3;
1494
+ return this.client("query")({
1495
+ deletedMails: [{
1496
+ mailType: mailType
1497
+ }, gqlMailQuery]
1498
+ });
1499
+
1500
+ case 3:
1501
+ _yield$this$client15 = _context24.sent;
1502
+ deletedMails = _yield$this$client15.deletedMails;
1503
+ mails = new Array();
1504
+
1505
+ for (_iterator10 = _createForOfIteratorHelperLoose(deletedMails); !(_step10 = _iterator10()).done;) {
1506
+ m = _step10.value;
1507
+ mail = convertInternalMailToExternal(m, _classPrivateFieldLooseBase(this, _keys)[_keys]);
1508
+
1509
+ if (mail) {
1510
+ mails.push(mail);
1511
+ }
1512
+ }
1513
+
1514
+ return _context24.abrupt("return", mails);
1515
+
1516
+ case 8:
1517
+ case "end":
1518
+ return _context24.stop();
1519
+ }
1520
+ }
1521
+ }, _callee24, this);
1522
+ }));
1523
+
1524
+ function deletedMails(_x24) {
1525
+ return _deletedMails.apply(this, arguments);
1526
+ }
1527
+
1528
+ return deletedMails;
1529
+ }();
1530
+
1531
+ _proto.shareFolder = /*#__PURE__*/function () {
1532
+ var _shareFolder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee25(_ref22) {
1533
+ var folderId, userId, rights, user, _yield$this$client16, shareFolder, shareFolders, _iterator11, _step11, id, nameKey, _iterator12, _step12, _id, vFileInput, _yield$this$client17, shareFolderFinish;
1534
+
1535
+ return _regeneratorRuntime.wrap(function _callee25$(_context25) {
1536
+ while (1) {
1537
+ switch (_context25.prev = _context25.next) {
1538
+ case 0:
1539
+ folderId = _ref22.folderId, userId = _ref22.userId, rights = _ref22.rights;
1540
+ _context25.next = 3;
1515
1541
  return this.user({
1516
1542
  userId: userId,
1517
1543
  withPublicKey: true
1518
1544
  });
1519
1545
 
1520
1546
  case 3:
1521
- user = _context24.sent;
1547
+ user = _context25.sent;
1522
1548
 
1523
1549
  if (user) {
1524
- _context24.next = 6;
1550
+ _context25.next = 6;
1525
1551
  break;
1526
1552
  }
1527
1553
 
1528
- return _context24.abrupt("return", false);
1554
+ return _context25.abrupt("return", false);
1529
1555
 
1530
1556
  case 6:
1531
- _context24.next = 8;
1532
- return this.client.mutation({
1557
+ _context25.next = 8;
1558
+ return this.client("mutation")({
1533
1559
  shareFolder: [{
1534
1560
  folderId: folderId,
1535
1561
  userId: userId
@@ -1540,62 +1566,62 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1540
1566
  });
1541
1567
 
1542
1568
  case 8:
1543
- _yield$this$client$mu5 = _context24.sent;
1544
- shareFolder = _yield$this$client$mu5.shareFolder;
1569
+ _yield$this$client16 = _context25.sent;
1570
+ shareFolder = _yield$this$client16.shareFolder;
1545
1571
  shareFolders = {
1546
1572
  vFiles: [],
1547
1573
  folders: []
1548
1574
  };
1549
- _iterator10 = _createForOfIteratorHelperLoose(shareFolder.folders);
1575
+ _iterator11 = _createForOfIteratorHelperLoose(shareFolder.folders);
1550
1576
 
1551
1577
  case 12:
1552
- if ((_step10 = _iterator10()).done) {
1553
- _context24.next = 20;
1578
+ if ((_step11 = _iterator11()).done) {
1579
+ _context25.next = 20;
1554
1580
  break;
1555
1581
  }
1556
1582
 
1557
- id = _step10.value;
1558
- _context24.next = 16;
1583
+ id = _step11.value;
1584
+ _context25.next = 16;
1559
1585
  return this.perFolder(id, user.publicKey);
1560
1586
 
1561
1587
  case 16:
1562
- nameKey = _context24.sent;
1588
+ nameKey = _context25.sent;
1563
1589
 
1564
1590
  if (nameKey) {
1565
1591
  shareFolders.folders.push(nameKey);
1566
1592
  }
1567
1593
 
1568
1594
  case 18:
1569
- _context24.next = 12;
1595
+ _context25.next = 12;
1570
1596
  break;
1571
1597
 
1572
1598
  case 20:
1573
- _iterator11 = _createForOfIteratorHelperLoose(shareFolder.vFiles);
1599
+ _iterator12 = _createForOfIteratorHelperLoose(shareFolder.vFiles);
1574
1600
 
1575
1601
  case 21:
1576
- if ((_step11 = _iterator11()).done) {
1577
- _context24.next = 29;
1602
+ if ((_step12 = _iterator12()).done) {
1603
+ _context25.next = 29;
1578
1604
  break;
1579
1605
  }
1580
1606
 
1581
- _id = _step11.value;
1582
- _context24.next = 25;
1607
+ _id = _step12.value;
1608
+ _context25.next = 25;
1583
1609
  return this.perVFile(_id, user.publicKey);
1584
1610
 
1585
1611
  case 25:
1586
- vFileInput = _context24.sent;
1612
+ vFileInput = _context25.sent;
1587
1613
 
1588
1614
  if (vFileInput) {
1589
1615
  shareFolders.vFiles.push(vFileInput);
1590
1616
  }
1591
1617
 
1592
1618
  case 27:
1593
- _context24.next = 21;
1619
+ _context25.next = 21;
1594
1620
  break;
1595
1621
 
1596
1622
  case 29:
1597
- _context24.next = 31;
1598
- return this.client.mutation({
1623
+ _context25.next = 31;
1624
+ return this.client("mutation")({
1599
1625
  shareFolderFinish: [{
1600
1626
  rights: rights,
1601
1627
  userId: userId,
@@ -1604,19 +1630,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1604
1630
  });
1605
1631
 
1606
1632
  case 31:
1607
- _yield$this$client$mu6 = _context24.sent;
1608
- shareFolderFinish = _yield$this$client$mu6.shareFolderFinish;
1609
- return _context24.abrupt("return", shareFolderFinish != null ? shareFolderFinish : false);
1633
+ _yield$this$client17 = _context25.sent;
1634
+ shareFolderFinish = _yield$this$client17.shareFolderFinish;
1635
+ return _context25.abrupt("return", shareFolderFinish != null ? shareFolderFinish : false);
1610
1636
 
1611
1637
  case 34:
1612
1638
  case "end":
1613
- return _context24.stop();
1639
+ return _context25.stop();
1614
1640
  }
1615
1641
  }
1616
- }, _callee24, this);
1642
+ }, _callee25, this);
1617
1643
  }));
1618
1644
 
1619
- function shareFolder(_x24) {
1645
+ function shareFolder(_x25) {
1620
1646
  return _shareFolder.apply(this, arguments);
1621
1647
  }
1622
1648
 
@@ -1624,24 +1650,24 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1624
1650
  }();
1625
1651
 
1626
1652
  _proto.updateFolder = /*#__PURE__*/function () {
1627
- var _updateFolder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee25(_ref22) {
1653
+ var _updateFolder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee26(_ref23) {
1628
1654
  var _folder$userApp2;
1629
1655
 
1630
- var folderId, name, isFavorite, deletedAt, folder, _yield$this$client$mu7, updateFolder;
1656
+ var folderId, name, isFavorite, deletedAt, folder, _yield$this$client18, updateFolder;
1631
1657
 
1632
- return _regeneratorRuntime.wrap(function _callee25$(_context25) {
1658
+ return _regeneratorRuntime.wrap(function _callee26$(_context26) {
1633
1659
  while (1) {
1634
- switch (_context25.prev = _context25.next) {
1660
+ switch (_context26.prev = _context26.next) {
1635
1661
  case 0:
1636
- folderId = _ref22.folderId, name = _ref22.name, isFavorite = _ref22.isFavorite, deletedAt = _ref22.deletedAt;
1662
+ folderId = _ref23.folderId, name = _ref23.name, isFavorite = _ref23.isFavorite, deletedAt = _ref23.deletedAt;
1637
1663
  folder = foldersCache.get(folderId);
1638
1664
 
1639
1665
  if (folder) {
1640
- _context25.next = 8;
1666
+ _context26.next = 8;
1641
1667
  break;
1642
1668
  }
1643
1669
 
1644
- _context25.next = 5;
1670
+ _context26.next = 5;
1645
1671
  return this.folder({
1646
1672
  id: folderId
1647
1673
  });
@@ -1650,7 +1676,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1650
1676
  folder = foldersCache.get(folderId);
1651
1677
 
1652
1678
  if (folder) {
1653
- _context25.next = 8;
1679
+ _context26.next = 8;
1654
1680
  break;
1655
1681
  }
1656
1682
 
@@ -1658,38 +1684,38 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1658
1684
 
1659
1685
  case 8:
1660
1686
  if (!name) {
1661
- _context25.next = 19;
1687
+ _context26.next = 19;
1662
1688
  break;
1663
1689
  }
1664
1690
 
1665
1691
  if (!((_folder$userApp2 = folder.userApp) != null && _folder$userApp2.nameKey)) {
1666
- _context25.next = 15;
1692
+ _context26.next = 15;
1667
1693
  break;
1668
1694
  }
1669
1695
 
1670
- _context25.next = 12;
1696
+ _context26.next = 12;
1671
1697
  return encryptName(name, folder.userApp.nameKey);
1672
1698
 
1673
1699
  case 12:
1674
- _context25.t1 = _context25.sent;
1675
- _context25.next = 16;
1700
+ _context26.t1 = _context26.sent;
1701
+ _context26.next = 16;
1676
1702
  break;
1677
1703
 
1678
1704
  case 15:
1679
- _context25.t1 = name;
1705
+ _context26.t1 = name;
1680
1706
 
1681
1707
  case 16:
1682
- _context25.t0 = _context25.t1;
1683
- _context25.next = 20;
1708
+ _context26.t0 = _context26.t1;
1709
+ _context26.next = 20;
1684
1710
  break;
1685
1711
 
1686
1712
  case 19:
1687
- _context25.t0 = null;
1713
+ _context26.t0 = null;
1688
1714
 
1689
1715
  case 20:
1690
- name = _context25.t0;
1691
- _context25.next = 23;
1692
- return this.client.mutation({
1716
+ name = _context26.t0;
1717
+ _context26.next = 23;
1718
+ return this.client("mutation")({
1693
1719
  updateFolder: [{
1694
1720
  folderId: folderId,
1695
1721
  name: name,
@@ -1699,66 +1725,164 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1699
1725
  });
1700
1726
 
1701
1727
  case 23:
1702
- _yield$this$client$mu7 = _context25.sent;
1703
- updateFolder = _yield$this$client$mu7.updateFolder;
1728
+ _yield$this$client18 = _context26.sent;
1729
+ updateFolder = _yield$this$client18.updateFolder;
1704
1730
 
1705
1731
  if (updateFolder) {
1706
- _context25.next = 27;
1732
+ _context26.next = 27;
1707
1733
  break;
1708
1734
  }
1709
1735
 
1710
1736
  throw new Error("Can't update folder");
1711
1737
 
1712
1738
  case 27:
1713
- return _context25.abrupt("return", gqlFolderToExternalFolderFull(updateFolder, _classPrivateFieldLooseBase(this, _keys)[_keys]));
1739
+ return _context26.abrupt("return", gqlFolderToExternalFolderFull(updateFolder, _classPrivateFieldLooseBase(this, _keys)[_keys]));
1714
1740
 
1715
1741
  case 28:
1716
1742
  case "end":
1717
- return _context25.stop();
1743
+ return _context26.stop();
1718
1744
  }
1719
1745
  }
1720
- }, _callee25, this);
1746
+ }, _callee26, this);
1721
1747
  }));
1722
1748
 
1723
- function updateFolder(_x25) {
1749
+ function updateFolder(_x26) {
1724
1750
  return _updateFolder.apply(this, arguments);
1725
1751
  }
1726
1752
 
1727
1753
  return updateFolder;
1728
1754
  }();
1729
1755
 
1756
+ _proto.updateAppNotifications = /*#__PURE__*/function () {
1757
+ var _updateAppNotifications = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee27(notifications) {
1758
+ var _yield$this$client19, updateAppNotifications;
1759
+
1760
+ return _regeneratorRuntime.wrap(function _callee27$(_context27) {
1761
+ while (1) {
1762
+ switch (_context27.prev = _context27.next) {
1763
+ case 0:
1764
+ _context27.next = 2;
1765
+ return this.client("mutation")({
1766
+ updateAppNotifications: [notifications, {
1767
+ enableAll: true,
1768
+ mail: true,
1769
+ cloud: true,
1770
+ disableAllUntil: true
1771
+ }]
1772
+ });
1773
+
1774
+ case 2:
1775
+ _yield$this$client19 = _context27.sent;
1776
+ updateAppNotifications = _yield$this$client19.updateAppNotifications;
1777
+
1778
+ if (updateAppNotifications) {
1779
+ _context27.next = 6;
1780
+ break;
1781
+ }
1782
+
1783
+ return _context27.abrupt("return", null);
1784
+
1785
+ case 6:
1786
+ return _context27.abrupt("return", _objectSpread(_objectSpread({}, updateAppNotifications), {}, {
1787
+ disableAllUntil: updateAppNotifications.disableAllUntil ? new Date(updateAppNotifications.disableAllUntil) : null
1788
+ }));
1789
+
1790
+ case 7:
1791
+ case "end":
1792
+ return _context27.stop();
1793
+ }
1794
+ }
1795
+ }, _callee27, this);
1796
+ }));
1797
+
1798
+ function updateAppNotifications(_x27) {
1799
+ return _updateAppNotifications.apply(this, arguments);
1800
+ }
1801
+
1802
+ return updateAppNotifications;
1803
+ }();
1804
+
1805
+ _proto.appNotifications = /*#__PURE__*/function () {
1806
+ var _appNotifications = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee28() {
1807
+ var _yield$this$client20, appNotifications;
1808
+
1809
+ return _regeneratorRuntime.wrap(function _callee28$(_context28) {
1810
+ while (1) {
1811
+ switch (_context28.prev = _context28.next) {
1812
+ case 0:
1813
+ _context28.next = 2;
1814
+ return this.client("query")({
1815
+ appNotifications: {
1816
+ enableAll: true,
1817
+ mail: true,
1818
+ cloud: true,
1819
+ disableAllUntil: true
1820
+ }
1821
+ });
1822
+
1823
+ case 2:
1824
+ _yield$this$client20 = _context28.sent;
1825
+ appNotifications = _yield$this$client20.appNotifications;
1826
+
1827
+ if (appNotifications) {
1828
+ _context28.next = 6;
1829
+ break;
1830
+ }
1831
+
1832
+ return _context28.abrupt("return", null);
1833
+
1834
+ case 6:
1835
+ return _context28.abrupt("return", _objectSpread(_objectSpread({}, appNotifications), {}, {
1836
+ disableAllUntil: appNotifications.disableAllUntil ? new Date(appNotifications.disableAllUntil) : null
1837
+ }));
1838
+
1839
+ case 7:
1840
+ case "end":
1841
+ return _context28.stop();
1842
+ }
1843
+ }
1844
+ }, _callee28, this);
1845
+ }));
1846
+
1847
+ function appNotifications() {
1848
+ return _appNotifications.apply(this, arguments);
1849
+ }
1850
+
1851
+ return appNotifications;
1852
+ }();
1853
+
1730
1854
  _proto.createMail = /*#__PURE__*/function () {
1731
- var _createMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee26(data, customMessage) {
1855
+ var _createMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee29(data, customMessage) {
1732
1856
  var mail;
1733
- return _regeneratorRuntime.wrap(function _callee26$(_context26) {
1857
+ return _regeneratorRuntime.wrap(function _callee29$(_context29) {
1734
1858
  while (1) {
1735
- switch (_context26.prev = _context26.next) {
1859
+ switch (_context29.prev = _context29.next) {
1736
1860
  case 0:
1737
- _context26.next = 2;
1861
+ _context29.next = 2;
1738
1862
  return this.createDraftMail(data);
1739
1863
 
1740
1864
  case 2:
1741
- mail = _context26.sent;
1865
+ mail = _context29.sent;
1742
1866
 
1743
1867
  if (mail) {
1744
- _context26.next = 5;
1868
+ _context29.next = 5;
1745
1869
  break;
1746
1870
  }
1747
1871
 
1748
- return _context26.abrupt("return", false);
1872
+ return _context29.abrupt("return", false);
1749
1873
 
1750
1874
  case 5:
1751
- return _context26.abrupt("return", this.sendDraftMail(mail.mailIntegrityId, customMessage));
1875
+ return _context29.abrupt("return", this.sendDraftMail(mail.mailIntegrityId, customMessage));
1752
1876
 
1753
1877
  case 6:
1754
1878
  case "end":
1755
- return _context26.stop();
1879
+ return _context29.stop();
1756
1880
  }
1757
1881
  }
1758
- }, _callee26, this);
1882
+ }, _callee29, this);
1759
1883
  }));
1760
1884
 
1761
- function createMail(_x26, _x27) {
1885
+ function createMail(_x28, _x29) {
1762
1886
  return _createMail.apply(this, arguments);
1763
1887
  }
1764
1888
 
@@ -1766,15 +1890,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1766
1890
  }();
1767
1891
 
1768
1892
  _proto.waitingReceivedMails = /*#__PURE__*/function () {
1769
- var _waitingReceivedMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee27() {
1770
- var _yield$this$client$qu11, user;
1893
+ var _waitingReceivedMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee30() {
1894
+ var _yield$this$client21, user;
1771
1895
 
1772
- return _regeneratorRuntime.wrap(function _callee27$(_context27) {
1896
+ return _regeneratorRuntime.wrap(function _callee30$(_context30) {
1773
1897
  while (1) {
1774
- switch (_context27.prev = _context27.next) {
1898
+ switch (_context30.prev = _context30.next) {
1775
1899
  case 0:
1776
- _context27.next = 2;
1777
- return this.client.query({
1900
+ _context30.next = 2;
1901
+ return this.client("query")({
1778
1902
  user: [{}, {
1779
1903
  waitingReceivedMails: {
1780
1904
  date: true,
@@ -1801,18 +1925,18 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1801
1925
  });
1802
1926
 
1803
1927
  case 2:
1804
- _yield$this$client$qu11 = _context27.sent;
1805
- user = _yield$this$client$qu11.user;
1928
+ _yield$this$client21 = _context30.sent;
1929
+ user = _yield$this$client21.user;
1806
1930
 
1807
1931
  if (user) {
1808
- _context27.next = 6;
1932
+ _context30.next = 6;
1809
1933
  break;
1810
1934
  }
1811
1935
 
1812
1936
  throw new Error("Can't get waiting received mails");
1813
1937
 
1814
1938
  case 6:
1815
- return _context27.abrupt("return", user.waitingReceivedMails.map(function (m) {
1939
+ return _context30.abrupt("return", user.waitingReceivedMails.map(function (m) {
1816
1940
  return _objectSpread(_objectSpread({
1817
1941
  id: generate()
1818
1942
  }, m), {}, {
@@ -1822,10 +1946,10 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1822
1946
 
1823
1947
  case 7:
1824
1948
  case "end":
1825
- return _context27.stop();
1949
+ return _context30.stop();
1826
1950
  }
1827
1951
  }
1828
- }, _callee27, this);
1952
+ }, _callee30, this);
1829
1953
  }));
1830
1954
 
1831
1955
  function waitingReceivedMails() {
@@ -1836,25 +1960,25 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1836
1960
  }();
1837
1961
 
1838
1962
  _proto.updateDraftMail = /*#__PURE__*/function () {
1839
- var _updateDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee28(draftId, _ref23) {
1840
- var body, subject, files, recipientsIds, replyTo, drafts, draft, hashKey, hash, senderFiles, _iterator12, _step12, f, file, _yield$this$client$mu8, updateDraftMail;
1963
+ var _updateDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee31(draftId, _ref24) {
1964
+ var body, subject, files, recipientsIds, replyTo, drafts, draft, hashKey, hash, senderFiles, _iterator13, _step13, f, file, _yield$this$client22, updateDraftMail;
1841
1965
 
1842
- return _regeneratorRuntime.wrap(function _callee28$(_context28) {
1966
+ return _regeneratorRuntime.wrap(function _callee31$(_context31) {
1843
1967
  while (1) {
1844
- switch (_context28.prev = _context28.next) {
1968
+ switch (_context31.prev = _context31.next) {
1845
1969
  case 0:
1846
- body = _ref23.body, subject = _ref23.subject, files = _ref23.files, recipientsIds = _ref23.recipientsIds, replyTo = _ref23.replyTo;
1847
- _context28.next = 3;
1970
+ body = _ref24.body, subject = _ref24.subject, files = _ref24.files, recipientsIds = _ref24.recipientsIds, replyTo = _ref24.replyTo;
1971
+ _context31.next = 3;
1848
1972
  return this.draftMails();
1849
1973
 
1850
1974
  case 3:
1851
- drafts = _context28.sent;
1975
+ drafts = _context31.sent;
1852
1976
  draft = drafts.find(function (d) {
1853
1977
  return d.mailIntegrityId === draftId;
1854
1978
  });
1855
1979
 
1856
1980
  if (draft) {
1857
- _context28.next = 7;
1981
+ _context31.next = 7;
1858
1982
  break;
1859
1983
  }
1860
1984
 
@@ -1875,27 +1999,27 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1875
1999
  senderFiles = new Array();
1876
2000
 
1877
2001
  if (!files) {
1878
- _context28.next = 27;
2002
+ _context31.next = 27;
1879
2003
  break;
1880
2004
  }
1881
2005
 
1882
- _iterator12 = _createForOfIteratorHelperLoose(files);
2006
+ _iterator13 = _createForOfIteratorHelperLoose(files);
1883
2007
 
1884
2008
  case 13:
1885
- if ((_step12 = _iterator12()).done) {
1886
- _context28.next = 27;
2009
+ if ((_step13 = _iterator13()).done) {
2010
+ _context31.next = 27;
1887
2011
  break;
1888
2012
  }
1889
2013
 
1890
- f = _step12.value;
2014
+ f = _step13.value;
1891
2015
  file = filesCache.get(f.id);
1892
2016
 
1893
2017
  if (file) {
1894
- _context28.next = 22;
2018
+ _context31.next = 22;
1895
2019
  break;
1896
2020
  }
1897
2021
 
1898
- _context28.next = 19;
2022
+ _context31.next = 19;
1899
2023
  return this.file({
1900
2024
  id: f.id
1901
2025
  });
@@ -1904,7 +2028,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1904
2028
  file = filesCache.get(f.id);
1905
2029
 
1906
2030
  if (file) {
1907
- _context28.next = 22;
2031
+ _context31.next = 22;
1908
2032
  break;
1909
2033
  }
1910
2034
 
@@ -1912,11 +2036,11 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1912
2036
 
1913
2037
  case 22:
1914
2038
  if (file.user) {
1915
- _context28.next = 24;
2039
+ _context31.next = 24;
1916
2040
  break;
1917
2041
  }
1918
2042
 
1919
- return _context28.abrupt("continue", 25);
2043
+ return _context31.abrupt("continue", 25);
1920
2044
 
1921
2045
  case 24:
1922
2046
  senderFiles.push({
@@ -1926,12 +2050,12 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1926
2050
  });
1927
2051
 
1928
2052
  case 25:
1929
- _context28.next = 13;
2053
+ _context31.next = 13;
1930
2054
  break;
1931
2055
 
1932
2056
  case 27:
1933
- _context28.next = 29;
1934
- return this.client.mutation({
2057
+ _context31.next = 29;
2058
+ return this.client("mutation")({
1935
2059
  updateDraftMail: [{
1936
2060
  draftId: draftId,
1937
2061
  recipients: recipientsIds,
@@ -1945,28 +2069,28 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1945
2069
  });
1946
2070
 
1947
2071
  case 29:
1948
- _yield$this$client$mu8 = _context28.sent;
1949
- updateDraftMail = _yield$this$client$mu8.updateDraftMail;
2072
+ _yield$this$client22 = _context31.sent;
2073
+ updateDraftMail = _yield$this$client22.updateDraftMail;
1950
2074
 
1951
2075
  if (updateDraftMail) {
1952
- _context28.next = 33;
2076
+ _context31.next = 33;
1953
2077
  break;
1954
2078
  }
1955
2079
 
1956
- return _context28.abrupt("return", null);
2080
+ return _context31.abrupt("return", null);
1957
2081
 
1958
2082
  case 33:
1959
- return _context28.abrupt("return", convertInternalMailToExternal(updateDraftMail, _classPrivateFieldLooseBase(this, _keys)[_keys]));
2083
+ return _context31.abrupt("return", convertInternalMailToExternal(updateDraftMail, _classPrivateFieldLooseBase(this, _keys)[_keys]));
1960
2084
 
1961
2085
  case 34:
1962
2086
  case "end":
1963
- return _context28.stop();
2087
+ return _context31.stop();
1964
2088
  }
1965
2089
  }
1966
- }, _callee28, this);
2090
+ }, _callee31, this);
1967
2091
  }));
1968
2092
 
1969
- function updateDraftMail(_x28, _x29) {
2093
+ function updateDraftMail(_x30, _x31) {
1970
2094
  return _updateDraftMail.apply(this, arguments);
1971
2095
  }
1972
2096
 
@@ -1974,34 +2098,34 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1974
2098
  }();
1975
2099
 
1976
2100
  _proto.deleteDraftMail = /*#__PURE__*/function () {
1977
- var _deleteDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee29(draftId) {
1978
- var _yield$this$client$mu9, deleteDraftMail;
2101
+ var _deleteDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee32(draftId) {
2102
+ var _yield$this$client23, deleteDraftMail;
1979
2103
 
1980
- return _regeneratorRuntime.wrap(function _callee29$(_context29) {
2104
+ return _regeneratorRuntime.wrap(function _callee32$(_context32) {
1981
2105
  while (1) {
1982
- switch (_context29.prev = _context29.next) {
2106
+ switch (_context32.prev = _context32.next) {
1983
2107
  case 0:
1984
- _context29.next = 2;
1985
- return this.client.mutation({
2108
+ _context32.next = 2;
2109
+ return this.client("mutation")({
1986
2110
  deleteDraftMail: [{
1987
2111
  draftId: draftId
1988
2112
  }, true]
1989
2113
  });
1990
2114
 
1991
2115
  case 2:
1992
- _yield$this$client$mu9 = _context29.sent;
1993
- deleteDraftMail = _yield$this$client$mu9.deleteDraftMail;
1994
- return _context29.abrupt("return", deleteDraftMail != null ? deleteDraftMail : false);
2116
+ _yield$this$client23 = _context32.sent;
2117
+ deleteDraftMail = _yield$this$client23.deleteDraftMail;
2118
+ return _context32.abrupt("return", deleteDraftMail != null ? deleteDraftMail : false);
1995
2119
 
1996
2120
  case 5:
1997
2121
  case "end":
1998
- return _context29.stop();
2122
+ return _context32.stop();
1999
2123
  }
2000
2124
  }
2001
- }, _callee29, this);
2125
+ }, _callee32, this);
2002
2126
  }));
2003
2127
 
2004
- function deleteDraftMail(_x30) {
2128
+ function deleteDraftMail(_x32) {
2005
2129
  return _deleteDraftMail.apply(this, arguments);
2006
2130
  }
2007
2131
 
@@ -2009,16 +2133,16 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2009
2133
  }();
2010
2134
 
2011
2135
  _proto.deleteVFileSharing = /*#__PURE__*/function () {
2012
- var _deleteVFileSharing = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee30(_ref24) {
2013
- var vFileId, userId, _yield$this$client$mu10, deleteVFileSharing;
2136
+ var _deleteVFileSharing = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee33(_ref25) {
2137
+ var vFileId, userId, _yield$this$client24, deleteVFileSharing;
2014
2138
 
2015
- return _regeneratorRuntime.wrap(function _callee30$(_context30) {
2139
+ return _regeneratorRuntime.wrap(function _callee33$(_context33) {
2016
2140
  while (1) {
2017
- switch (_context30.prev = _context30.next) {
2141
+ switch (_context33.prev = _context33.next) {
2018
2142
  case 0:
2019
- vFileId = _ref24.vFileId, userId = _ref24.userId;
2020
- _context30.next = 3;
2021
- return this.client.mutation({
2143
+ vFileId = _ref25.vFileId, userId = _ref25.userId;
2144
+ _context33.next = 3;
2145
+ return this.client("mutation")({
2022
2146
  deleteVFileSharing: [{
2023
2147
  vFileId: vFileId,
2024
2148
  userId: userId
@@ -2026,19 +2150,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2026
2150
  });
2027
2151
 
2028
2152
  case 3:
2029
- _yield$this$client$mu10 = _context30.sent;
2030
- deleteVFileSharing = _yield$this$client$mu10.deleteVFileSharing;
2031
- return _context30.abrupt("return", deleteVFileSharing);
2153
+ _yield$this$client24 = _context33.sent;
2154
+ deleteVFileSharing = _yield$this$client24.deleteVFileSharing;
2155
+ return _context33.abrupt("return", deleteVFileSharing);
2032
2156
 
2033
2157
  case 6:
2034
2158
  case "end":
2035
- return _context30.stop();
2159
+ return _context33.stop();
2036
2160
  }
2037
2161
  }
2038
- }, _callee30, this);
2162
+ }, _callee33, this);
2039
2163
  }));
2040
2164
 
2041
- function deleteVFileSharing(_x31) {
2165
+ function deleteVFileSharing(_x33) {
2042
2166
  return _deleteVFileSharing.apply(this, arguments);
2043
2167
  }
2044
2168
 
@@ -2046,16 +2170,16 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2046
2170
  }();
2047
2171
 
2048
2172
  _proto.deleteFolderSharing = /*#__PURE__*/function () {
2049
- var _deleteFolderSharing = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee31(_ref25) {
2050
- var folderId, userId, _yield$this$client$mu11, deleteFolderSharing;
2173
+ var _deleteFolderSharing = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee34(_ref26) {
2174
+ var folderId, userId, _yield$this$client25, deleteFolderSharing;
2051
2175
 
2052
- return _regeneratorRuntime.wrap(function _callee31$(_context31) {
2176
+ return _regeneratorRuntime.wrap(function _callee34$(_context34) {
2053
2177
  while (1) {
2054
- switch (_context31.prev = _context31.next) {
2178
+ switch (_context34.prev = _context34.next) {
2055
2179
  case 0:
2056
- folderId = _ref25.folderId, userId = _ref25.userId;
2057
- _context31.next = 3;
2058
- return this.client.mutation({
2180
+ folderId = _ref26.folderId, userId = _ref26.userId;
2181
+ _context34.next = 3;
2182
+ return this.client("mutation")({
2059
2183
  deleteFolderSharing: [{
2060
2184
  folderId: folderId,
2061
2185
  userId: userId
@@ -2063,19 +2187,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2063
2187
  });
2064
2188
 
2065
2189
  case 3:
2066
- _yield$this$client$mu11 = _context31.sent;
2067
- deleteFolderSharing = _yield$this$client$mu11.deleteFolderSharing;
2068
- return _context31.abrupt("return", deleteFolderSharing);
2190
+ _yield$this$client25 = _context34.sent;
2191
+ deleteFolderSharing = _yield$this$client25.deleteFolderSharing;
2192
+ return _context34.abrupt("return", deleteFolderSharing);
2069
2193
 
2070
2194
  case 6:
2071
2195
  case "end":
2072
- return _context31.stop();
2196
+ return _context34.stop();
2073
2197
  }
2074
2198
  }
2075
- }, _callee31, this);
2199
+ }, _callee34, this);
2076
2200
  }));
2077
2201
 
2078
- function deleteFolderSharing(_x32) {
2202
+ function deleteFolderSharing(_x34) {
2079
2203
  return _deleteFolderSharing.apply(this, arguments);
2080
2204
  }
2081
2205
 
@@ -2083,78 +2207,78 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2083
2207
  }();
2084
2208
 
2085
2209
  _proto.duplicateVFile = /*#__PURE__*/function () {
2086
- var _duplicateVFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee32(_ref26) {
2087
- var fileId, folderId, customName, file, _yield$this$client$mu12, duplicateVFile;
2210
+ var _duplicateVFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee35(_ref27) {
2211
+ var vFileId, folderId, customName, file, _yield$this$client26, duplicateVFile;
2088
2212
 
2089
- return _regeneratorRuntime.wrap(function _callee32$(_context32) {
2213
+ return _regeneratorRuntime.wrap(function _callee35$(_context35) {
2090
2214
  while (1) {
2091
- switch (_context32.prev = _context32.next) {
2215
+ switch (_context35.prev = _context35.next) {
2092
2216
  case 0:
2093
- fileId = _ref26.fileId, folderId = _ref26.folderId, customName = _ref26.customName;
2094
- file = vFilesCache.get(fileId);
2217
+ vFileId = _ref27.vFileId, folderId = _ref27.folderId, customName = _ref27.customName;
2218
+ file = vFilesCache.get(vFileId);
2095
2219
 
2096
2220
  if (file) {
2097
- _context32.next = 8;
2221
+ _context35.next = 8;
2098
2222
  break;
2099
2223
  }
2100
2224
 
2101
- _context32.next = 5;
2225
+ _context35.next = 5;
2102
2226
  return this.vFile({
2103
- id: fileId
2227
+ id: vFileId
2104
2228
  });
2105
2229
 
2106
2230
  case 5:
2107
- file = vFilesCache.get(fileId);
2231
+ file = vFilesCache.get(vFileId);
2108
2232
 
2109
2233
  if (file) {
2110
- _context32.next = 8;
2234
+ _context35.next = 8;
2111
2235
  break;
2112
2236
  }
2113
2237
 
2114
- throw new Error("File (" + fileId + ") does not exists");
2238
+ throw new Error("File (" + vFileId + ") does not exists");
2115
2239
 
2116
2240
  case 8:
2117
2241
  if (!customName) {
2118
- _context32.next = 14;
2242
+ _context35.next = 14;
2119
2243
  break;
2120
2244
  }
2121
2245
 
2122
- _context32.next = 11;
2246
+ _context35.next = 11;
2123
2247
  return encryptName(customName, file.userApp.nameKey);
2124
2248
 
2125
2249
  case 11:
2126
- _context32.t0 = _context32.sent;
2127
- _context32.next = 15;
2250
+ _context35.t0 = _context35.sent;
2251
+ _context35.next = 15;
2128
2252
  break;
2129
2253
 
2130
2254
  case 14:
2131
- _context32.t0 = null;
2255
+ _context35.t0 = null;
2132
2256
 
2133
2257
  case 15:
2134
- customName = _context32.t0;
2135
- _context32.next = 18;
2136
- return this.client.mutation({
2258
+ customName = _context35.t0;
2259
+ _context35.next = 18;
2260
+ return this.client("mutation")({
2137
2261
  duplicateVFile: [{
2138
- fileId: fileId,
2262
+ vFileId: vFileId,
2139
2263
  folderId: folderId,
2140
2264
  customName: customName
2141
2265
  }, true]
2142
2266
  });
2143
2267
 
2144
2268
  case 18:
2145
- _yield$this$client$mu12 = _context32.sent;
2146
- duplicateVFile = _yield$this$client$mu12.duplicateVFile;
2147
- return _context32.abrupt("return", duplicateVFile);
2269
+ _yield$this$client26 = _context35.sent;
2270
+ duplicateVFile = _yield$this$client26.duplicateVFile;
2271
+ return _context35.abrupt("return", duplicateVFile);
2148
2272
 
2149
2273
  case 21:
2150
2274
  case "end":
2151
- return _context32.stop();
2275
+ return _context35.stop();
2152
2276
  }
2153
2277
  }
2154
- }, _callee32, this);
2278
+ }, _callee35, this);
2155
2279
  }));
2156
2280
 
2157
- function duplicateVFile(_x33) {
2281
+ function duplicateVFile(_x35) {
2158
2282
  return _duplicateVFile.apply(this, arguments);
2159
2283
  }
2160
2284
 
@@ -2162,35 +2286,35 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2162
2286
  }();
2163
2287
 
2164
2288
  _proto.deleteFolderCloudTrash = /*#__PURE__*/function () {
2165
- var _deleteFolderCloudTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee33(_ref27) {
2166
- var ids, _yield$this$client$mu13, deleteFolderCloudTrash;
2289
+ var _deleteFolderCloudTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee36(_ref28) {
2290
+ var ids, _yield$this$client27, deleteFolderCloudTrash;
2167
2291
 
2168
- return _regeneratorRuntime.wrap(function _callee33$(_context33) {
2292
+ return _regeneratorRuntime.wrap(function _callee36$(_context36) {
2169
2293
  while (1) {
2170
- switch (_context33.prev = _context33.next) {
2294
+ switch (_context36.prev = _context36.next) {
2171
2295
  case 0:
2172
- ids = _ref27.ids;
2173
- _context33.next = 3;
2174
- return this.client.mutation({
2296
+ ids = _ref28.ids;
2297
+ _context36.next = 3;
2298
+ return this.client("mutation")({
2175
2299
  deleteFolderCloudTrash: [{
2176
2300
  ids: ids
2177
2301
  }, true]
2178
2302
  });
2179
2303
 
2180
2304
  case 3:
2181
- _yield$this$client$mu13 = _context33.sent;
2182
- deleteFolderCloudTrash = _yield$this$client$mu13.deleteFolderCloudTrash;
2183
- return _context33.abrupt("return", deleteFolderCloudTrash != null ? deleteFolderCloudTrash : false);
2305
+ _yield$this$client27 = _context36.sent;
2306
+ deleteFolderCloudTrash = _yield$this$client27.deleteFolderCloudTrash;
2307
+ return _context36.abrupt("return", deleteFolderCloudTrash != null ? deleteFolderCloudTrash : false);
2184
2308
 
2185
2309
  case 6:
2186
2310
  case "end":
2187
- return _context33.stop();
2311
+ return _context36.stop();
2188
2312
  }
2189
2313
  }
2190
- }, _callee33, this);
2314
+ }, _callee36, this);
2191
2315
  }));
2192
2316
 
2193
- function deleteFolderCloudTrash(_x34) {
2317
+ function deleteFolderCloudTrash(_x36) {
2194
2318
  return _deleteFolderCloudTrash.apply(this, arguments);
2195
2319
  }
2196
2320
 
@@ -2198,35 +2322,35 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2198
2322
  }();
2199
2323
 
2200
2324
  _proto.deleteVFileCloudTrash = /*#__PURE__*/function () {
2201
- var _deleteVFileCloudTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee34(_ref28) {
2202
- var ids, _yield$this$client$mu14, deleteVFileCloudTrash;
2325
+ var _deleteVFileCloudTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee37(_ref29) {
2326
+ var ids, _yield$this$client28, deleteVFileCloudTrash;
2203
2327
 
2204
- return _regeneratorRuntime.wrap(function _callee34$(_context34) {
2328
+ return _regeneratorRuntime.wrap(function _callee37$(_context37) {
2205
2329
  while (1) {
2206
- switch (_context34.prev = _context34.next) {
2330
+ switch (_context37.prev = _context37.next) {
2207
2331
  case 0:
2208
- ids = _ref28.ids;
2209
- _context34.next = 3;
2210
- return this.client.mutation({
2332
+ ids = _ref29.ids;
2333
+ _context37.next = 3;
2334
+ return this.client("mutation")({
2211
2335
  deleteVFileCloudTrash: [{
2212
2336
  ids: ids
2213
2337
  }, true]
2214
2338
  });
2215
2339
 
2216
2340
  case 3:
2217
- _yield$this$client$mu14 = _context34.sent;
2218
- deleteVFileCloudTrash = _yield$this$client$mu14.deleteVFileCloudTrash;
2219
- return _context34.abrupt("return", deleteVFileCloudTrash != null ? deleteVFileCloudTrash : false);
2341
+ _yield$this$client28 = _context37.sent;
2342
+ deleteVFileCloudTrash = _yield$this$client28.deleteVFileCloudTrash;
2343
+ return _context37.abrupt("return", deleteVFileCloudTrash != null ? deleteVFileCloudTrash : false);
2220
2344
 
2221
2345
  case 6:
2222
2346
  case "end":
2223
- return _context34.stop();
2347
+ return _context37.stop();
2224
2348
  }
2225
2349
  }
2226
- }, _callee34, this);
2350
+ }, _callee37, this);
2227
2351
  }));
2228
2352
 
2229
- function deleteVFileCloudTrash(_x35) {
2353
+ function deleteVFileCloudTrash(_x37) {
2230
2354
  return _deleteVFileCloudTrash.apply(this, arguments);
2231
2355
  }
2232
2356
 
@@ -2234,35 +2358,35 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2234
2358
  }();
2235
2359
 
2236
2360
  _proto.deleteMailTrash = /*#__PURE__*/function () {
2237
- var _deleteMailTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee35(_ref29) {
2238
- var ids, _yield$this$client$mu15, deleteMailTrash;
2361
+ var _deleteMailTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee38(_ref30) {
2362
+ var ids, _yield$this$client29, deleteMailTrash;
2239
2363
 
2240
- return _regeneratorRuntime.wrap(function _callee35$(_context35) {
2364
+ return _regeneratorRuntime.wrap(function _callee38$(_context38) {
2241
2365
  while (1) {
2242
- switch (_context35.prev = _context35.next) {
2366
+ switch (_context38.prev = _context38.next) {
2243
2367
  case 0:
2244
- ids = _ref29.ids;
2245
- _context35.next = 3;
2246
- return this.client.mutation({
2368
+ ids = _ref30.ids;
2369
+ _context38.next = 3;
2370
+ return this.client("mutation")({
2247
2371
  deleteMailTrash: [{
2248
2372
  ids: ids
2249
2373
  }, true]
2250
2374
  });
2251
2375
 
2252
2376
  case 3:
2253
- _yield$this$client$mu15 = _context35.sent;
2254
- deleteMailTrash = _yield$this$client$mu15.deleteMailTrash;
2255
- return _context35.abrupt("return", deleteMailTrash);
2377
+ _yield$this$client29 = _context38.sent;
2378
+ deleteMailTrash = _yield$this$client29.deleteMailTrash;
2379
+ return _context38.abrupt("return", deleteMailTrash);
2256
2380
 
2257
2381
  case 6:
2258
2382
  case "end":
2259
- return _context35.stop();
2383
+ return _context38.stop();
2260
2384
  }
2261
2385
  }
2262
- }, _callee35, this);
2386
+ }, _callee38, this);
2263
2387
  }));
2264
2388
 
2265
- function deleteMailTrash(_x36) {
2389
+ function deleteMailTrash(_x38) {
2266
2390
  return _deleteMailTrash.apply(this, arguments);
2267
2391
  }
2268
2392
 
@@ -2270,29 +2394,29 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2270
2394
  }();
2271
2395
 
2272
2396
  _proto.emptyMailTrash = /*#__PURE__*/function () {
2273
- var _emptyMailTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee36() {
2274
- var _yield$this$client$mu16, emptyMailTrash;
2397
+ var _emptyMailTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee39() {
2398
+ var _yield$this$client30, emptyMailTrash;
2275
2399
 
2276
- return _regeneratorRuntime.wrap(function _callee36$(_context36) {
2400
+ return _regeneratorRuntime.wrap(function _callee39$(_context39) {
2277
2401
  while (1) {
2278
- switch (_context36.prev = _context36.next) {
2402
+ switch (_context39.prev = _context39.next) {
2279
2403
  case 0:
2280
- _context36.next = 2;
2281
- return this.client.mutation({
2404
+ _context39.next = 2;
2405
+ return this.client("mutation")({
2282
2406
  emptyMailTrash: true
2283
2407
  });
2284
2408
 
2285
2409
  case 2:
2286
- _yield$this$client$mu16 = _context36.sent;
2287
- emptyMailTrash = _yield$this$client$mu16.emptyMailTrash;
2288
- return _context36.abrupt("return", emptyMailTrash != null ? emptyMailTrash : false);
2410
+ _yield$this$client30 = _context39.sent;
2411
+ emptyMailTrash = _yield$this$client30.emptyMailTrash;
2412
+ return _context39.abrupt("return", emptyMailTrash != null ? emptyMailTrash : false);
2289
2413
 
2290
2414
  case 5:
2291
2415
  case "end":
2292
- return _context36.stop();
2416
+ return _context39.stop();
2293
2417
  }
2294
2418
  }
2295
- }, _callee36, this);
2419
+ }, _callee39, this);
2296
2420
  }));
2297
2421
 
2298
2422
  function emptyMailTrash() {
@@ -2303,29 +2427,29 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2303
2427
  }();
2304
2428
 
2305
2429
  _proto.emptyCloudTrash = /*#__PURE__*/function () {
2306
- var _emptyCloudTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee37() {
2307
- var _yield$this$client$mu17, emptyCloudTrash;
2430
+ var _emptyCloudTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee40() {
2431
+ var _yield$this$client31, emptyCloudTrash;
2308
2432
 
2309
- return _regeneratorRuntime.wrap(function _callee37$(_context37) {
2433
+ return _regeneratorRuntime.wrap(function _callee40$(_context40) {
2310
2434
  while (1) {
2311
- switch (_context37.prev = _context37.next) {
2435
+ switch (_context40.prev = _context40.next) {
2312
2436
  case 0:
2313
- _context37.next = 2;
2314
- return this.client.mutation({
2437
+ _context40.next = 2;
2438
+ return this.client("mutation")({
2315
2439
  emptyCloudTrash: true
2316
2440
  });
2317
2441
 
2318
2442
  case 2:
2319
- _yield$this$client$mu17 = _context37.sent;
2320
- emptyCloudTrash = _yield$this$client$mu17.emptyCloudTrash;
2321
- return _context37.abrupt("return", emptyCloudTrash != null ? emptyCloudTrash : false);
2443
+ _yield$this$client31 = _context40.sent;
2444
+ emptyCloudTrash = _yield$this$client31.emptyCloudTrash;
2445
+ return _context40.abrupt("return", emptyCloudTrash != null ? emptyCloudTrash : false);
2322
2446
 
2323
2447
  case 5:
2324
2448
  case "end":
2325
- return _context37.stop();
2449
+ return _context40.stop();
2326
2450
  }
2327
2451
  }
2328
- }, _callee37, this);
2452
+ }, _callee40, this);
2329
2453
  }));
2330
2454
 
2331
2455
  function emptyCloudTrash() {
@@ -2335,72 +2459,72 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2335
2459
  return emptyCloudTrash;
2336
2460
  }();
2337
2461
 
2338
- _proto.recoverFile = /*#__PURE__*/function () {
2339
- var _recoverFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee38(_ref30) {
2340
- var fileId, _yield$this$client$mu18, recoverFile;
2462
+ _proto.recoverVFile = /*#__PURE__*/function () {
2463
+ var _recoverVFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee41(_ref31) {
2464
+ var vFileId, _yield$this$client32, recoverVFile;
2341
2465
 
2342
- return _regeneratorRuntime.wrap(function _callee38$(_context38) {
2466
+ return _regeneratorRuntime.wrap(function _callee41$(_context41) {
2343
2467
  while (1) {
2344
- switch (_context38.prev = _context38.next) {
2468
+ switch (_context41.prev = _context41.next) {
2345
2469
  case 0:
2346
- fileId = _ref30.fileId;
2347
- _context38.next = 3;
2348
- return this.client.mutation({
2349
- recoverFile: [{
2350
- fileId: fileId
2470
+ vFileId = _ref31.vFileId;
2471
+ _context41.next = 3;
2472
+ return this.client("mutation")({
2473
+ recoverVFile: [{
2474
+ vFileId: vFileId
2351
2475
  }, true]
2352
2476
  });
2353
2477
 
2354
2478
  case 3:
2355
- _yield$this$client$mu18 = _context38.sent;
2356
- recoverFile = _yield$this$client$mu18.recoverFile;
2357
- return _context38.abrupt("return", recoverFile);
2479
+ _yield$this$client32 = _context41.sent;
2480
+ recoverVFile = _yield$this$client32.recoverVFile;
2481
+ return _context41.abrupt("return", recoverVFile);
2358
2482
 
2359
2483
  case 6:
2360
2484
  case "end":
2361
- return _context38.stop();
2485
+ return _context41.stop();
2362
2486
  }
2363
2487
  }
2364
- }, _callee38, this);
2488
+ }, _callee41, this);
2365
2489
  }));
2366
2490
 
2367
- function recoverFile(_x37) {
2368
- return _recoverFile.apply(this, arguments);
2491
+ function recoverVFile(_x39) {
2492
+ return _recoverVFile.apply(this, arguments);
2369
2493
  }
2370
2494
 
2371
- return recoverFile;
2495
+ return recoverVFile;
2372
2496
  }();
2373
2497
 
2374
2498
  _proto.recoverFolder = /*#__PURE__*/function () {
2375
- var _recoverFolder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee39(_ref31) {
2376
- var id, _yield$this$client$mu19, recoverFolder;
2499
+ var _recoverFolder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee42(_ref32) {
2500
+ var id, _yield$this$client33, recoverFolder;
2377
2501
 
2378
- return _regeneratorRuntime.wrap(function _callee39$(_context39) {
2502
+ return _regeneratorRuntime.wrap(function _callee42$(_context42) {
2379
2503
  while (1) {
2380
- switch (_context39.prev = _context39.next) {
2504
+ switch (_context42.prev = _context42.next) {
2381
2505
  case 0:
2382
- id = _ref31.id;
2383
- _context39.next = 3;
2384
- return this.client.mutation({
2506
+ id = _ref32.id;
2507
+ _context42.next = 3;
2508
+ return this.client("mutation")({
2385
2509
  recoverFolder: [{
2386
2510
  id: id
2387
2511
  }, true]
2388
2512
  });
2389
2513
 
2390
2514
  case 3:
2391
- _yield$this$client$mu19 = _context39.sent;
2392
- recoverFolder = _yield$this$client$mu19.recoverFolder;
2393
- return _context39.abrupt("return", recoverFolder != null ? recoverFolder : false);
2515
+ _yield$this$client33 = _context42.sent;
2516
+ recoverFolder = _yield$this$client33.recoverFolder;
2517
+ return _context42.abrupt("return", recoverFolder != null ? recoverFolder : false);
2394
2518
 
2395
2519
  case 6:
2396
2520
  case "end":
2397
- return _context39.stop();
2521
+ return _context42.stop();
2398
2522
  }
2399
2523
  }
2400
- }, _callee39, this);
2524
+ }, _callee42, this);
2401
2525
  }));
2402
2526
 
2403
- function recoverFolder(_x38) {
2527
+ function recoverFolder(_x40) {
2404
2528
  return _recoverFolder.apply(this, arguments);
2405
2529
  }
2406
2530
 
@@ -2408,35 +2532,35 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2408
2532
  }();
2409
2533
 
2410
2534
  _proto.recoverMail = /*#__PURE__*/function () {
2411
- var _recoverMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee40(_ref32) {
2412
- var mailId, _yield$this$client$mu20, recoverMail;
2535
+ var _recoverMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee43(_ref33) {
2536
+ var mailId, _yield$this$client34, recoverMail;
2413
2537
 
2414
- return _regeneratorRuntime.wrap(function _callee40$(_context40) {
2538
+ return _regeneratorRuntime.wrap(function _callee43$(_context43) {
2415
2539
  while (1) {
2416
- switch (_context40.prev = _context40.next) {
2540
+ switch (_context43.prev = _context43.next) {
2417
2541
  case 0:
2418
- mailId = _ref32.mailId;
2419
- _context40.next = 3;
2420
- return this.client.mutation({
2542
+ mailId = _ref33.mailId;
2543
+ _context43.next = 3;
2544
+ return this.client("mutation")({
2421
2545
  recoverMail: [{
2422
2546
  mailId: mailId
2423
2547
  }, true]
2424
2548
  });
2425
2549
 
2426
2550
  case 3:
2427
- _yield$this$client$mu20 = _context40.sent;
2428
- recoverMail = _yield$this$client$mu20.recoverMail;
2429
- return _context40.abrupt("return", recoverMail);
2551
+ _yield$this$client34 = _context43.sent;
2552
+ recoverMail = _yield$this$client34.recoverMail;
2553
+ return _context43.abrupt("return", recoverMail);
2430
2554
 
2431
2555
  case 6:
2432
2556
  case "end":
2433
- return _context40.stop();
2557
+ return _context43.stop();
2434
2558
  }
2435
2559
  }
2436
- }, _callee40, this);
2560
+ }, _callee43, this);
2437
2561
  }));
2438
2562
 
2439
- function recoverMail(_x39) {
2563
+ function recoverMail(_x41) {
2440
2564
  return _recoverMail.apply(this, arguments);
2441
2565
  }
2442
2566
 
@@ -2444,16 +2568,16 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2444
2568
  }();
2445
2569
 
2446
2570
  _proto.deleteFile = /*#__PURE__*/function () {
2447
- var _deleteFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee41(_ref33) {
2448
- var fileId, vFileId, _yield$this$client$mu21, deleteFile;
2571
+ var _deleteFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee44(_ref34) {
2572
+ var fileId, vFileId, _yield$this$client35, deleteFile;
2449
2573
 
2450
- return _regeneratorRuntime.wrap(function _callee41$(_context41) {
2574
+ return _regeneratorRuntime.wrap(function _callee44$(_context44) {
2451
2575
  while (1) {
2452
- switch (_context41.prev = _context41.next) {
2576
+ switch (_context44.prev = _context44.next) {
2453
2577
  case 0:
2454
- fileId = _ref33.fileId, vFileId = _ref33.vFileId;
2455
- _context41.next = 3;
2456
- return this.client.mutation({
2578
+ fileId = _ref34.fileId, vFileId = _ref34.vFileId;
2579
+ _context44.next = 3;
2580
+ return this.client("mutation")({
2457
2581
  deleteFile: [{
2458
2582
  fileId: fileId,
2459
2583
  vFileId: vFileId
@@ -2461,19 +2585,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2461
2585
  });
2462
2586
 
2463
2587
  case 3:
2464
- _yield$this$client$mu21 = _context41.sent;
2465
- deleteFile = _yield$this$client$mu21.deleteFile;
2466
- return _context41.abrupt("return", deleteFile);
2588
+ _yield$this$client35 = _context44.sent;
2589
+ deleteFile = _yield$this$client35.deleteFile;
2590
+ return _context44.abrupt("return", deleteFile);
2467
2591
 
2468
2592
  case 6:
2469
2593
  case "end":
2470
- return _context41.stop();
2594
+ return _context44.stop();
2471
2595
  }
2472
2596
  }
2473
- }, _callee41, this);
2597
+ }, _callee44, this);
2474
2598
  }));
2475
2599
 
2476
- function deleteFile(_x40) {
2600
+ function deleteFile(_x42) {
2477
2601
  return _deleteFile.apply(this, arguments);
2478
2602
  }
2479
2603
 
@@ -2481,35 +2605,35 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2481
2605
  }();
2482
2606
 
2483
2607
  _proto.deleteVFile = /*#__PURE__*/function () {
2484
- var _deleteVFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee42(_ref34) {
2485
- var fileId, _yield$this$client$mu22, deleteVFile;
2608
+ var _deleteVFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee45(_ref35) {
2609
+ var fileId, _yield$this$client36, deleteVFile;
2486
2610
 
2487
- return _regeneratorRuntime.wrap(function _callee42$(_context42) {
2611
+ return _regeneratorRuntime.wrap(function _callee45$(_context45) {
2488
2612
  while (1) {
2489
- switch (_context42.prev = _context42.next) {
2613
+ switch (_context45.prev = _context45.next) {
2490
2614
  case 0:
2491
- fileId = _ref34.fileId;
2492
- _context42.next = 3;
2493
- return this.client.mutation({
2615
+ fileId = _ref35.fileId;
2616
+ _context45.next = 3;
2617
+ return this.client("mutation")({
2494
2618
  deleteVFile: [{
2495
2619
  fileId: fileId
2496
2620
  }, true]
2497
2621
  });
2498
2622
 
2499
2623
  case 3:
2500
- _yield$this$client$mu22 = _context42.sent;
2501
- deleteVFile = _yield$this$client$mu22.deleteVFile;
2502
- return _context42.abrupt("return", deleteVFile);
2624
+ _yield$this$client36 = _context45.sent;
2625
+ deleteVFile = _yield$this$client36.deleteVFile;
2626
+ return _context45.abrupt("return", deleteVFile);
2503
2627
 
2504
2628
  case 6:
2505
2629
  case "end":
2506
- return _context42.stop();
2630
+ return _context45.stop();
2507
2631
  }
2508
2632
  }
2509
- }, _callee42, this);
2633
+ }, _callee45, this);
2510
2634
  }));
2511
2635
 
2512
- function deleteVFile(_x41) {
2636
+ function deleteVFile(_x43) {
2513
2637
  return _deleteVFile.apply(this, arguments);
2514
2638
  }
2515
2639
 
@@ -2517,35 +2641,35 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2517
2641
  }();
2518
2642
 
2519
2643
  _proto.deleteMail = /*#__PURE__*/function () {
2520
- var _deleteMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee43(_ref35) {
2521
- var mailId, _yield$this$client$mu23, deleteMail;
2644
+ var _deleteMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee46(_ref36) {
2645
+ var mailId, _yield$this$client37, deleteMail;
2522
2646
 
2523
- return _regeneratorRuntime.wrap(function _callee43$(_context43) {
2647
+ return _regeneratorRuntime.wrap(function _callee46$(_context46) {
2524
2648
  while (1) {
2525
- switch (_context43.prev = _context43.next) {
2649
+ switch (_context46.prev = _context46.next) {
2526
2650
  case 0:
2527
- mailId = _ref35.mailId;
2528
- _context43.next = 3;
2529
- return this.client.mutation({
2651
+ mailId = _ref36.mailId;
2652
+ _context46.next = 3;
2653
+ return this.client("mutation")({
2530
2654
  deleteMail: [{
2531
2655
  mailId: mailId
2532
2656
  }, true]
2533
2657
  });
2534
2658
 
2535
2659
  case 3:
2536
- _yield$this$client$mu23 = _context43.sent;
2537
- deleteMail = _yield$this$client$mu23.deleteMail;
2538
- return _context43.abrupt("return", deleteMail);
2660
+ _yield$this$client37 = _context46.sent;
2661
+ deleteMail = _yield$this$client37.deleteMail;
2662
+ return _context46.abrupt("return", deleteMail);
2539
2663
 
2540
2664
  case 6:
2541
2665
  case "end":
2542
- return _context43.stop();
2666
+ return _context46.stop();
2543
2667
  }
2544
2668
  }
2545
- }, _callee43, this);
2669
+ }, _callee46, this);
2546
2670
  }));
2547
2671
 
2548
- function deleteMail(_x42) {
2672
+ function deleteMail(_x44) {
2549
2673
  return _deleteMail.apply(this, arguments);
2550
2674
  }
2551
2675
 
@@ -2553,30 +2677,30 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2553
2677
  }();
2554
2678
 
2555
2679
  _proto.saveInCloud = /*#__PURE__*/function () {
2556
- var _saveInCloud = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee44(_ref36) {
2680
+ var _saveInCloud = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee47(_ref37) {
2557
2681
  var _this5 = this;
2558
2682
 
2559
- var fileId, name, folderId, key, file, _filesCache$get, _file2, receivedMails, mail, fileMail, fileKey, nameKey, encryptedName, encryptedNameKey, _yield$this$client$mu24, saveInCloud, vFile, me, others;
2683
+ var fileId, name, folderId, key, file, _filesCache$get, _file2, receivedMails, mail, fileMail, fileKey, nameKey, encryptedName, encryptedNameKey, _yield$this$client38, saveInCloud, vFile, me, others;
2560
2684
 
2561
- return _regeneratorRuntime.wrap(function _callee44$(_context44) {
2685
+ return _regeneratorRuntime.wrap(function _callee47$(_context47) {
2562
2686
  while (1) {
2563
- switch (_context44.prev = _context44.next) {
2687
+ switch (_context47.prev = _context47.next) {
2564
2688
  case 0:
2565
- fileId = _ref36.fileId, name = _ref36.name, folderId = _ref36.folderId;
2689
+ fileId = _ref37.fileId, name = _ref37.name, folderId = _ref37.folderId;
2566
2690
 
2567
2691
  if (!(folderId && !foldersCache.has(folderId))) {
2568
- _context44.next = 6;
2692
+ _context47.next = 6;
2569
2693
  break;
2570
2694
  }
2571
2695
 
2572
- _context44.next = 4;
2696
+ _context47.next = 4;
2573
2697
  return this.folder({
2574
2698
  id: folderId
2575
2699
  });
2576
2700
 
2577
2701
  case 4:
2578
2702
  if (foldersCache.has(folderId)) {
2579
- _context44.next = 6;
2703
+ _context47.next = 6;
2580
2704
  break;
2581
2705
  }
2582
2706
 
@@ -2587,11 +2711,11 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2587
2711
  file = filesCache.get(fileId);
2588
2712
 
2589
2713
  if (file) {
2590
- _context44.next = 31;
2714
+ _context47.next = 31;
2591
2715
  break;
2592
2716
  }
2593
2717
 
2594
- _context44.next = 11;
2718
+ _context47.next = 11;
2595
2719
  return this.file({
2596
2720
  id: fileId
2597
2721
  });
@@ -2600,15 +2724,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2600
2724
  _file2 = (_filesCache$get = filesCache.get(fileId)) != null ? _filesCache$get : null;
2601
2725
 
2602
2726
  if (_file2) {
2603
- _context44.next = 26;
2727
+ _context47.next = 26;
2604
2728
  break;
2605
2729
  }
2606
2730
 
2607
- _context44.next = 15;
2731
+ _context47.next = 15;
2608
2732
  return this.receivedMails();
2609
2733
 
2610
2734
  case 15:
2611
- receivedMails = _context44.sent;
2735
+ receivedMails = _context47.sent;
2612
2736
  mail = receivedMails.find(function (m) {
2613
2737
  return m.files.some(function (f) {
2614
2738
  return f.id === fileId;
@@ -2616,7 +2740,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2616
2740
  });
2617
2741
 
2618
2742
  if (mail) {
2619
- _context44.next = 19;
2743
+ _context47.next = 19;
2620
2744
  break;
2621
2745
  }
2622
2746
 
@@ -2628,7 +2752,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2628
2752
  });
2629
2753
 
2630
2754
  if (fileMail) {
2631
- _context44.next = 22;
2755
+ _context47.next = 22;
2632
2756
  break;
2633
2757
  }
2634
2758
 
@@ -2637,12 +2761,12 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2637
2761
  case 22:
2638
2762
  fileKey = decryptCryptoBox(sodium.from_hex(fileMail.key), mail.sender.publicKey, _classPrivateFieldLooseBase(this, _keys)[_keys].privateKey);
2639
2763
  key = sodium.to_hex(fileKey);
2640
- _context44.next = 29;
2764
+ _context47.next = 29;
2641
2765
  break;
2642
2766
 
2643
2767
  case 26:
2644
2768
  if (_file2.user) {
2645
- _context44.next = 28;
2769
+ _context47.next = 28;
2646
2770
  break;
2647
2771
  }
2648
2772
 
@@ -2652,12 +2776,12 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2652
2776
  key = _file2.user.key;
2653
2777
 
2654
2778
  case 29:
2655
- _context44.next = 34;
2779
+ _context47.next = 34;
2656
2780
  break;
2657
2781
 
2658
2782
  case 31:
2659
2783
  if (file.user) {
2660
- _context44.next = 33;
2784
+ _context47.next = 33;
2661
2785
  break;
2662
2786
  }
2663
2787
 
@@ -2668,7 +2792,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2668
2792
 
2669
2793
  case 34:
2670
2794
  if (!(key === "")) {
2671
- _context44.next = 36;
2795
+ _context47.next = 36;
2672
2796
  break;
2673
2797
  }
2674
2798
 
@@ -2677,14 +2801,14 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2677
2801
  case 36:
2678
2802
  key = sodium.to_hex(encryptCryptoBox(sodium.from_hex(key), _classPrivateFieldLooseBase(this, _keys)[_keys].publicKey, _classPrivateFieldLooseBase(this, _keys)[_keys].privateKey));
2679
2803
  nameKey = secretstreamKeygen();
2680
- _context44.next = 40;
2804
+ _context47.next = 40;
2681
2805
  return encryptName(name, sodium.to_hex(nameKey));
2682
2806
 
2683
2807
  case 40:
2684
- encryptedName = _context44.sent;
2808
+ encryptedName = _context47.sent;
2685
2809
  encryptedNameKey = sodium.to_hex(encryptCryptoBox(nameKey, _classPrivateFieldLooseBase(this, _keys)[_keys].publicKey, _classPrivateFieldLooseBase(this, _keys)[_keys].privateKey));
2686
- _context44.next = 44;
2687
- return this.client.mutation({
2810
+ _context47.next = 44;
2811
+ return this.client("mutation")({
2688
2812
  saveInCloud: [{
2689
2813
  fileId: fileId,
2690
2814
  key: key,
@@ -2695,31 +2819,31 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2695
2819
  });
2696
2820
 
2697
2821
  case 44:
2698
- _yield$this$client$mu24 = _context44.sent;
2699
- saveInCloud = _yield$this$client$mu24.saveInCloud;
2700
- _context44.next = 48;
2822
+ _yield$this$client38 = _context47.sent;
2823
+ saveInCloud = _yield$this$client38.saveInCloud;
2824
+ _context47.next = 48;
2701
2825
  return gqlVFileToExternal(saveInCloud, _classPrivateFieldLooseBase(this, _keys)[_keys]);
2702
2826
 
2703
2827
  case 48:
2704
- vFile = _context44.sent;
2705
- me = vFile.folder.users.find(function (_ref37) {
2706
- var u = _ref37[0];
2828
+ vFile = _context47.sent;
2829
+ me = vFile.folder.users.find(function (_ref38) {
2830
+ var u = _ref38[0];
2707
2831
  return u.publicKey === _classPrivateFieldLooseBase(_this5, _keys)[_keys].publicKey;
2708
2832
  });
2709
2833
 
2710
2834
  if (!(me && ["admin", "write"].includes(me[1]))) {
2711
- _context44.next = 54;
2835
+ _context47.next = 54;
2712
2836
  break;
2713
2837
  }
2714
2838
 
2715
- others = vFile.folder.users.filter(function (_ref38) {
2716
- var u = _ref38[0];
2839
+ others = vFile.folder.users.filter(function (_ref39) {
2840
+ var u = _ref39[0];
2717
2841
  return u.publicKey !== _classPrivateFieldLooseBase(_this5, _keys)[_keys].publicKey;
2718
2842
  });
2719
- _context44.next = 54;
2720
- return Promise.all(others.map(function (_ref39) {
2721
- var u = _ref39[0],
2722
- rights = _ref39[1];
2843
+ _context47.next = 54;
2844
+ return Promise.all(others.map(function (_ref40) {
2845
+ var u = _ref40[0],
2846
+ rights = _ref40[1];
2723
2847
  return _this5.shareVFile({
2724
2848
  vFileId: vFile.id,
2725
2849
  rights: rights,
@@ -2728,17 +2852,17 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2728
2852
  }));
2729
2853
 
2730
2854
  case 54:
2731
- return _context44.abrupt("return", vFile);
2855
+ return _context47.abrupt("return", vFile);
2732
2856
 
2733
2857
  case 55:
2734
2858
  case "end":
2735
- return _context44.stop();
2859
+ return _context47.stop();
2736
2860
  }
2737
2861
  }
2738
- }, _callee44, this);
2862
+ }, _callee47, this);
2739
2863
  }));
2740
2864
 
2741
- function saveInCloud(_x43) {
2865
+ function saveInCloud(_x45) {
2742
2866
  return _saveInCloud.apply(this, arguments);
2743
2867
  }
2744
2868
 
@@ -2746,55 +2870,55 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2746
2870
  }();
2747
2871
 
2748
2872
  _proto.sendDraftMail = /*#__PURE__*/function () {
2749
- var _sendDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee45(draftId, customMessage) {
2750
- var drafts, draft, recipients, temporaryRecipients, _iterator13, _step13, email, input, _iterator14, _step14, id, _input, _yield$this$client$mu25, sendDraftMail;
2873
+ var _sendDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee48(draftId, customMessage) {
2874
+ var drafts, draft, recipients, temporaryRecipients, _iterator14, _step14, email, input, _iterator15, _step15, id, _input, _yield$this$client39, sendDraftMail;
2751
2875
 
2752
- return _regeneratorRuntime.wrap(function _callee45$(_context45) {
2876
+ return _regeneratorRuntime.wrap(function _callee48$(_context48) {
2753
2877
  while (1) {
2754
- switch (_context45.prev = _context45.next) {
2878
+ switch (_context48.prev = _context48.next) {
2755
2879
  case 0:
2756
- _context45.next = 2;
2880
+ _context48.next = 2;
2757
2881
  return this.draftMails();
2758
2882
 
2759
2883
  case 2:
2760
- drafts = _context45.sent;
2884
+ drafts = _context48.sent;
2761
2885
  draft = drafts.find(function (d) {
2762
2886
  return d.mailIntegrityId === draftId;
2763
2887
  });
2764
2888
 
2765
2889
  if (draft) {
2766
- _context45.next = 6;
2890
+ _context48.next = 6;
2767
2891
  break;
2768
2892
  }
2769
2893
 
2770
- return _context45.abrupt("return", false);
2894
+ return _context48.abrupt("return", false);
2771
2895
 
2772
2896
  case 6:
2773
2897
  recipients = new Array();
2774
2898
  temporaryRecipients = new Array();
2775
- _iterator13 = _createForOfIteratorHelperLoose(draft.temporaryRecipients);
2899
+ _iterator14 = _createForOfIteratorHelperLoose(draft.temporaryRecipients);
2776
2900
 
2777
2901
  case 9:
2778
- if ((_step13 = _iterator13()).done) {
2779
- _context45.next = 19;
2902
+ if ((_step14 = _iterator14()).done) {
2903
+ _context48.next = 19;
2780
2904
  break;
2781
2905
  }
2782
2906
 
2783
- email = _step13.value.email;
2907
+ email = _step14.value.email;
2784
2908
 
2785
2909
  if (email) {
2786
- _context45.next = 13;
2910
+ _context48.next = 13;
2787
2911
  break;
2788
2912
  }
2789
2913
 
2790
- return _context45.abrupt("continue", 17);
2914
+ return _context48.abrupt("continue", 17);
2791
2915
 
2792
2916
  case 13:
2793
- _context45.next = 15;
2917
+ _context48.next = 15;
2794
2918
  return this._eachUser(draft.files, draft.subject, draft.body, email);
2795
2919
 
2796
2920
  case 15:
2797
- input = _context45.sent;
2921
+ input = _context48.sent;
2798
2922
 
2799
2923
  if (!input) {
2800
2924
  temporaryRecipients.push(email);
@@ -2803,24 +2927,24 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2803
2927
  }
2804
2928
 
2805
2929
  case 17:
2806
- _context45.next = 9;
2930
+ _context48.next = 9;
2807
2931
  break;
2808
2932
 
2809
2933
  case 19:
2810
- _iterator14 = _createForOfIteratorHelperLoose(draft.recipients);
2934
+ _iterator15 = _createForOfIteratorHelperLoose(draft.recipients);
2811
2935
 
2812
2936
  case 20:
2813
- if ((_step14 = _iterator14()).done) {
2814
- _context45.next = 28;
2937
+ if ((_step15 = _iterator15()).done) {
2938
+ _context48.next = 28;
2815
2939
  break;
2816
2940
  }
2817
2941
 
2818
- id = _step14.value.id;
2819
- _context45.next = 24;
2942
+ id = _step15.value.id;
2943
+ _context48.next = 24;
2820
2944
  return this._eachUser(draft.files, draft.subject, draft.body, id);
2821
2945
 
2822
2946
  case 24:
2823
- _input = _context45.sent;
2947
+ _input = _context48.sent;
2824
2948
 
2825
2949
  if (!_input) {
2826
2950
  temporaryRecipients.push(id);
@@ -2829,12 +2953,12 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2829
2953
  }
2830
2954
 
2831
2955
  case 26:
2832
- _context45.next = 20;
2956
+ _context48.next = 20;
2833
2957
  break;
2834
2958
 
2835
2959
  case 28:
2836
- _context45.next = 30;
2837
- return this.client.mutation({
2960
+ _context48.next = 30;
2961
+ return this.client("mutation")({
2838
2962
  sendDraftMail: [{
2839
2963
  temporaryRecipients: temporaryRecipients,
2840
2964
  recipients: recipients,
@@ -2844,19 +2968,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2844
2968
  });
2845
2969
 
2846
2970
  case 30:
2847
- _yield$this$client$mu25 = _context45.sent;
2848
- sendDraftMail = _yield$this$client$mu25.sendDraftMail;
2849
- return _context45.abrupt("return", sendDraftMail != null ? sendDraftMail : false);
2971
+ _yield$this$client39 = _context48.sent;
2972
+ sendDraftMail = _yield$this$client39.sendDraftMail;
2973
+ return _context48.abrupt("return", sendDraftMail != null ? sendDraftMail : false);
2850
2974
 
2851
2975
  case 33:
2852
2976
  case "end":
2853
- return _context45.stop();
2977
+ return _context48.stop();
2854
2978
  }
2855
2979
  }
2856
- }, _callee45, this);
2980
+ }, _callee48, this);
2857
2981
  }));
2858
2982
 
2859
- function sendDraftMail(_x44, _x45) {
2983
+ function sendDraftMail(_x46, _x47) {
2860
2984
  return _sendDraftMail.apply(this, arguments);
2861
2985
  }
2862
2986
 
@@ -2864,61 +2988,61 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2864
2988
  }();
2865
2989
 
2866
2990
  _proto.sendWaitingEmails = /*#__PURE__*/function () {
2867
- var _sendWaitingEmails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee46() {
2868
- var mails, filtered, _iterator15, _step15, mail, _iterator16, _step16, email, input;
2991
+ var _sendWaitingEmails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee49() {
2992
+ var mails, filtered, _iterator16, _step16, mail, _iterator17, _step17, email, input;
2869
2993
 
2870
- return _regeneratorRuntime.wrap(function _callee46$(_context46) {
2994
+ return _regeneratorRuntime.wrap(function _callee49$(_context49) {
2871
2995
  while (1) {
2872
- switch (_context46.prev = _context46.next) {
2996
+ switch (_context49.prev = _context49.next) {
2873
2997
  case 0:
2874
- _context46.next = 2;
2998
+ _context49.next = 2;
2875
2999
  return this.sentMails();
2876
3000
 
2877
3001
  case 2:
2878
- mails = _context46.sent;
3002
+ mails = _context49.sent;
2879
3003
  filtered = mails.filter(function (m) {
2880
3004
  return m.temporaryRecipients.length > 0;
2881
3005
  });
2882
- _iterator15 = _createForOfIteratorHelperLoose(filtered);
3006
+ _iterator16 = _createForOfIteratorHelperLoose(filtered);
2883
3007
 
2884
3008
  case 5:
2885
- if ((_step15 = _iterator15()).done) {
2886
- _context46.next = 22;
3009
+ if ((_step16 = _iterator16()).done) {
3010
+ _context49.next = 22;
2887
3011
  break;
2888
3012
  }
2889
3013
 
2890
- mail = _step15.value;
2891
- _iterator16 = _createForOfIteratorHelperLoose(mail.temporaryRecipients);
3014
+ mail = _step16.value;
3015
+ _iterator17 = _createForOfIteratorHelperLoose(mail.temporaryRecipients);
2892
3016
 
2893
3017
  case 8:
2894
- if ((_step16 = _iterator16()).done) {
2895
- _context46.next = 20;
3018
+ if ((_step17 = _iterator17()).done) {
3019
+ _context49.next = 20;
2896
3020
  break;
2897
3021
  }
2898
3022
 
2899
- email = _step16.value.email;
3023
+ email = _step17.value.email;
2900
3024
 
2901
3025
  if (email) {
2902
- _context46.next = 12;
3026
+ _context49.next = 12;
2903
3027
  break;
2904
3028
  }
2905
3029
 
2906
- return _context46.abrupt("continue", 18);
3030
+ return _context49.abrupt("continue", 18);
2907
3031
 
2908
3032
  case 12:
2909
- _context46.next = 14;
3033
+ _context49.next = 14;
2910
3034
  return this._eachUser(mail.files, mail.subject, mail.body, email);
2911
3035
 
2912
3036
  case 14:
2913
- input = _context46.sent;
3037
+ input = _context49.sent;
2914
3038
 
2915
3039
  if (!input) {
2916
- _context46.next = 18;
3040
+ _context49.next = 18;
2917
3041
  break;
2918
3042
  }
2919
3043
 
2920
- _context46.next = 18;
2921
- return this.client.mutation({
3044
+ _context49.next = 18;
3045
+ return this.client("mutation")({
2922
3046
  sendOneMail: [{
2923
3047
  mailIntegrityId: mail.mailIntegrityId,
2924
3048
  recipient: input
@@ -2926,22 +3050,22 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2926
3050
  });
2927
3051
 
2928
3052
  case 18:
2929
- _context46.next = 8;
3053
+ _context49.next = 8;
2930
3054
  break;
2931
3055
 
2932
3056
  case 20:
2933
- _context46.next = 5;
3057
+ _context49.next = 5;
2934
3058
  break;
2935
3059
 
2936
3060
  case 22:
2937
- return _context46.abrupt("return", false);
3061
+ return _context49.abrupt("return", false);
2938
3062
 
2939
3063
  case 23:
2940
3064
  case "end":
2941
- return _context46.stop();
3065
+ return _context49.stop();
2942
3066
  }
2943
3067
  }
2944
- }, _callee46, this);
3068
+ }, _callee49, this);
2945
3069
  }));
2946
3070
 
2947
3071
  function sendWaitingEmails() {
@@ -2952,37 +3076,37 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2952
3076
  }();
2953
3077
 
2954
3078
  _proto.createDraftMail = /*#__PURE__*/function () {
2955
- var _createDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee47(_ref40) {
2956
- var body, subject, files, recipientsIds, replyTo, hashKey, hash, senderFiles, _iterator17, _step17, f, file, _yield$this$client$mu26, createDraftMail;
3079
+ var _createDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee50(_ref41) {
3080
+ var body, subject, files, recipientsIds, replyTo, hashKey, hash, senderFiles, _iterator18, _step18, f, file, _yield$this$client40, createDraftMail;
2957
3081
 
2958
- return _regeneratorRuntime.wrap(function _callee47$(_context47) {
3082
+ return _regeneratorRuntime.wrap(function _callee50$(_context50) {
2959
3083
  while (1) {
2960
- switch (_context47.prev = _context47.next) {
3084
+ switch (_context50.prev = _context50.next) {
2961
3085
  case 0:
2962
- body = _ref40.body, subject = _ref40.subject, files = _ref40.files, recipientsIds = _ref40.recipientsIds, replyTo = _ref40.replyTo;
3086
+ body = _ref41.body, subject = _ref41.subject, files = _ref41.files, recipientsIds = _ref41.recipientsIds, replyTo = _ref41.replyTo;
2963
3087
  hashKey = sodium.randombytes_buf(sodium.crypto_generichash_KEYBYTES, "hex");
2964
3088
  hash = sodium.crypto_generichash(sodium.crypto_generichash_BYTES, JSON.stringify({
2965
3089
  body: body,
2966
3090
  subject: subject
2967
3091
  }), hashKey, "hex");
2968
3092
  senderFiles = new Array();
2969
- _iterator17 = _createForOfIteratorHelperLoose(files);
3093
+ _iterator18 = _createForOfIteratorHelperLoose(files);
2970
3094
 
2971
3095
  case 5:
2972
- if ((_step17 = _iterator17()).done) {
2973
- _context47.next = 19;
3096
+ if ((_step18 = _iterator18()).done) {
3097
+ _context50.next = 19;
2974
3098
  break;
2975
3099
  }
2976
3100
 
2977
- f = _step17.value;
3101
+ f = _step18.value;
2978
3102
  file = filesCache.get(f.id);
2979
3103
 
2980
3104
  if (file) {
2981
- _context47.next = 14;
3105
+ _context50.next = 14;
2982
3106
  break;
2983
3107
  }
2984
3108
 
2985
- _context47.next = 11;
3109
+ _context50.next = 11;
2986
3110
  return this.file({
2987
3111
  id: f.id
2988
3112
  });
@@ -2991,7 +3115,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2991
3115
  file = filesCache.get(f.id);
2992
3116
 
2993
3117
  if (file) {
2994
- _context47.next = 14;
3118
+ _context50.next = 14;
2995
3119
  break;
2996
3120
  }
2997
3121
 
@@ -2999,11 +3123,11 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2999
3123
 
3000
3124
  case 14:
3001
3125
  if (file.user) {
3002
- _context47.next = 16;
3126
+ _context50.next = 16;
3003
3127
  break;
3004
3128
  }
3005
3129
 
3006
- return _context47.abrupt("continue", 17);
3130
+ return _context50.abrupt("continue", 17);
3007
3131
 
3008
3132
  case 16:
3009
3133
  senderFiles.push({
@@ -3013,12 +3137,12 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3013
3137
  });
3014
3138
 
3015
3139
  case 17:
3016
- _context47.next = 5;
3140
+ _context50.next = 5;
3017
3141
  break;
3018
3142
 
3019
3143
  case 19:
3020
- _context47.next = 21;
3021
- return this.client.mutation({
3144
+ _context50.next = 21;
3145
+ return this.client("mutation")({
3022
3146
  createDraftMail: [{
3023
3147
  recipients: recipientsIds,
3024
3148
  replyTo: replyTo,
@@ -3031,28 +3155,28 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3031
3155
  });
3032
3156
 
3033
3157
  case 21:
3034
- _yield$this$client$mu26 = _context47.sent;
3035
- createDraftMail = _yield$this$client$mu26.createDraftMail;
3158
+ _yield$this$client40 = _context50.sent;
3159
+ createDraftMail = _yield$this$client40.createDraftMail;
3036
3160
 
3037
3161
  if (createDraftMail) {
3038
- _context47.next = 25;
3162
+ _context50.next = 25;
3039
3163
  break;
3040
3164
  }
3041
3165
 
3042
- return _context47.abrupt("return", null);
3166
+ return _context50.abrupt("return", null);
3043
3167
 
3044
3168
  case 25:
3045
- return _context47.abrupt("return", convertInternalMailToExternal(createDraftMail, _classPrivateFieldLooseBase(this, _keys)[_keys]));
3169
+ return _context50.abrupt("return", convertInternalMailToExternal(createDraftMail, _classPrivateFieldLooseBase(this, _keys)[_keys]));
3046
3170
 
3047
3171
  case 26:
3048
3172
  case "end":
3049
- return _context47.stop();
3173
+ return _context50.stop();
3050
3174
  }
3051
3175
  }
3052
- }, _callee47, this);
3176
+ }, _callee50, this);
3053
3177
  }));
3054
3178
 
3055
- function createDraftMail(_x46) {
3179
+ function createDraftMail(_x48) {
3056
3180
  return _createDraftMail.apply(this, arguments);
3057
3181
  }
3058
3182
 
@@ -3060,16 +3184,16 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3060
3184
  }();
3061
3185
 
3062
3186
  _proto.fileContent = /*#__PURE__*/function () {
3063
- var _fileContent = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee49(_ref41) {
3064
- var fileId, onDownloadProgress, progressDecrypt, abort, _yield$this$client$qu12, fileContent, progressParts, onProgress, parts, byPart, encryptedContent, md5Encrypted, key, src, md5Content;
3187
+ var _fileContent = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee52(_ref42) {
3188
+ var fileId, onDownloadProgress, progressDecrypt, signal, _yield$this$client41, fileContent, progressParts, onProgress, parts, byPart, encryptedContent, md5Encrypted, key, src, md5Content;
3065
3189
 
3066
- return _regeneratorRuntime.wrap(function _callee49$(_context49) {
3190
+ return _regeneratorRuntime.wrap(function _callee52$(_context52) {
3067
3191
  while (1) {
3068
- switch (_context49.prev = _context49.next) {
3192
+ switch (_context52.prev = _context52.next) {
3069
3193
  case 0:
3070
- fileId = _ref41.fileId, onDownloadProgress = _ref41.onDownloadProgress, progressDecrypt = _ref41.progressDecrypt, abort = _ref41.abort;
3071
- _context49.next = 3;
3072
- return this.client.query({
3194
+ fileId = _ref42.fileId, onDownloadProgress = _ref42.onDownloadProgress, progressDecrypt = _ref42.progressDecrypt, signal = _ref42.signal;
3195
+ _context52.next = 3;
3196
+ return this.client("query")({
3073
3197
  fileContent: [{
3074
3198
  fileId: fileId
3075
3199
  }, {
@@ -3113,11 +3237,11 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3113
3237
  });
3114
3238
 
3115
3239
  case 3:
3116
- _yield$this$client$qu12 = _context49.sent;
3117
- fileContent = _yield$this$client$qu12.fileContent;
3240
+ _yield$this$client41 = _context52.sent;
3241
+ fileContent = _yield$this$client41.fileContent;
3118
3242
 
3119
3243
  if (fileContent) {
3120
- _context49.next = 7;
3244
+ _context52.next = 7;
3121
3245
  break;
3122
3246
  }
3123
3247
 
@@ -3142,32 +3266,32 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3142
3266
  parts = new Array();
3143
3267
 
3144
3268
  byPart = /*#__PURE__*/function () {
3145
- var _ref42 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee48(part) {
3269
+ var _ref43 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee51(part) {
3146
3270
  var buf, md5Part;
3147
- return _regeneratorRuntime.wrap(function _callee48$(_context48) {
3271
+ return _regeneratorRuntime.wrap(function _callee51$(_context51) {
3148
3272
  while (1) {
3149
- switch (_context48.prev = _context48.next) {
3273
+ switch (_context51.prev = _context51.next) {
3150
3274
  case 0:
3151
- _context48.t0 = Uint8Array;
3152
- _context48.next = 3;
3275
+ _context51.t0 = Uint8Array;
3276
+ _context51.next = 3;
3153
3277
  return ky.get(part.contentUrl, {
3154
3278
  onDownloadProgress: function onDownloadProgress(pr) {
3155
3279
  return onProgress(part.order, pr);
3156
3280
  },
3157
- signal: abort == null ? void 0 : abort.signal
3281
+ signal: signal
3158
3282
  }).arrayBuffer();
3159
3283
 
3160
3284
  case 3:
3161
- _context48.t1 = _context48.sent;
3162
- buf = new _context48.t0(_context48.t1);
3163
- _context48.next = 7;
3285
+ _context51.t1 = _context51.sent;
3286
+ buf = new _context51.t0(_context51.t1);
3287
+ _context51.next = 7;
3164
3288
  return md5(buf);
3165
3289
 
3166
3290
  case 7:
3167
- md5Part = _context48.sent;
3291
+ md5Part = _context51.sent;
3168
3292
 
3169
3293
  if (!(md5Part !== part.md5)) {
3170
- _context48.next = 10;
3294
+ _context51.next = 10;
3171
3295
  break;
3172
3296
  }
3173
3297
 
@@ -3181,18 +3305,18 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3181
3305
 
3182
3306
  case 11:
3183
3307
  case "end":
3184
- return _context48.stop();
3308
+ return _context51.stop();
3185
3309
  }
3186
3310
  }
3187
- }, _callee48);
3311
+ }, _callee51);
3188
3312
  }));
3189
3313
 
3190
- return function byPart(_x48) {
3191
- return _ref42.apply(this, arguments);
3314
+ return function byPart(_x50) {
3315
+ return _ref43.apply(this, arguments);
3192
3316
  };
3193
3317
  }();
3194
3318
 
3195
- _context49.next = 13;
3319
+ _context52.next = 13;
3196
3320
  return promiseAllLimit(3, fileContent.parts.map(function (p) {
3197
3321
  return function () {
3198
3322
  return byPart(p);
@@ -3206,52 +3330,51 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3206
3330
  return p.data;
3207
3331
  })); // const md5Encrypted = await firstValueFrom(md5(of(encryptedContent)));
3208
3332
 
3209
- _context49.next = 16;
3333
+ _context52.next = 16;
3210
3334
  return md5(encryptedContent);
3211
3335
 
3212
3336
  case 16:
3213
- md5Encrypted = _context49.sent;
3337
+ md5Encrypted = _context52.sent;
3214
3338
 
3215
3339
  if (!(md5Encrypted !== fileContent.md5Encrypted)) {
3216
- _context49.next = 19;
3340
+ _context52.next = 19;
3217
3341
  break;
3218
3342
  }
3219
3343
 
3220
3344
  throw new Error("Encrypted content does not match");
3221
3345
 
3222
3346
  case 19:
3223
- key = decryptCryptoBox(sodium.from_hex(fileContent.key), fileContent.__typename === "FileContentReceivedMail" ? fileContent.senderPublicKey : fileContent.__typename === "FileContentCloud" ? fileContent.publicKey : _classPrivateFieldLooseBase(this, _keys)[_keys].publicKey, _classPrivateFieldLooseBase(this, _keys)[_keys].privateKey); // TODO add abort
3224
-
3225
- _context49.next = 22;
3226
- return decrypt(key, encryptedContent, progressDecrypt);
3347
+ key = decryptCryptoBox(sodium.from_hex(fileContent.key), fileContent.__typename === "FileContentReceivedMail" ? fileContent.senderPublicKey : fileContent.__typename === "FileContentCloud" ? fileContent.publicKey : _classPrivateFieldLooseBase(this, _keys)[_keys].publicKey, _classPrivateFieldLooseBase(this, _keys)[_keys].privateKey);
3348
+ _context52.next = 22;
3349
+ return decrypt(key, encryptedContent, progressDecrypt, signal);
3227
3350
 
3228
3351
  case 22:
3229
- src = _context49.sent;
3230
- _context49.next = 25;
3352
+ src = _context52.sent;
3353
+ _context52.next = 25;
3231
3354
  return md5(src);
3232
3355
 
3233
3356
  case 25:
3234
- md5Content = _context49.sent;
3357
+ md5Content = _context52.sent;
3235
3358
 
3236
3359
  if (!(md5Content !== fileContent.md5)) {
3237
- _context49.next = 28;
3360
+ _context52.next = 28;
3238
3361
  break;
3239
3362
  }
3240
3363
 
3241
3364
  throw new Error("Content does not match");
3242
3365
 
3243
3366
  case 28:
3244
- return _context49.abrupt("return", uncompress(src));
3367
+ return _context52.abrupt("return", uncompress(src));
3245
3368
 
3246
3369
  case 29:
3247
3370
  case "end":
3248
- return _context49.stop();
3371
+ return _context52.stop();
3249
3372
  }
3250
3373
  }
3251
- }, _callee49, this);
3374
+ }, _callee52, this);
3252
3375
  }));
3253
3376
 
3254
- function fileContent(_x47) {
3377
+ function fileContent(_x49) {
3255
3378
  return _fileContent.apply(this, arguments);
3256
3379
  }
3257
3380
 
@@ -3259,18 +3382,18 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3259
3382
  }();
3260
3383
 
3261
3384
  _proto.updateFile = /*#__PURE__*/function () {
3262
- var _updateFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee50(_ref43) {
3263
- var fileId, filename, isFavorite, deletedAt, file, encryptedName, _yield$this$client$mu27, updateFile;
3385
+ var _updateFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee53(_ref44) {
3386
+ var fileId, filename, isFavorite, deletedAt, file, encryptedName, _yield$this$client42, updateFile;
3264
3387
 
3265
- return _regeneratorRuntime.wrap(function _callee50$(_context50) {
3388
+ return _regeneratorRuntime.wrap(function _callee53$(_context53) {
3266
3389
  while (1) {
3267
- switch (_context50.prev = _context50.next) {
3390
+ switch (_context53.prev = _context53.next) {
3268
3391
  case 0:
3269
- fileId = _ref43.fileId, filename = _ref43.filename, isFavorite = _ref43.isFavorite, deletedAt = _ref43.deletedAt;
3392
+ fileId = _ref44.fileId, filename = _ref44.filename, isFavorite = _ref44.isFavorite, deletedAt = _ref44.deletedAt;
3270
3393
  file = vFilesCache.get(fileId);
3271
3394
 
3272
3395
  if (file) {
3273
- _context50.next = 4;
3396
+ _context53.next = 4;
3274
3397
  break;
3275
3398
  }
3276
3399
 
@@ -3278,25 +3401,25 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3278
3401
 
3279
3402
  case 4:
3280
3403
  if (!filename) {
3281
- _context50.next = 10;
3404
+ _context53.next = 10;
3282
3405
  break;
3283
3406
  }
3284
3407
 
3285
- _context50.next = 7;
3408
+ _context53.next = 7;
3286
3409
  return encryptName(filename, file.userApp.nameKey);
3287
3410
 
3288
3411
  case 7:
3289
- _context50.t0 = _context50.sent;
3290
- _context50.next = 11;
3412
+ _context53.t0 = _context53.sent;
3413
+ _context53.next = 11;
3291
3414
  break;
3292
3415
 
3293
3416
  case 10:
3294
- _context50.t0 = null;
3417
+ _context53.t0 = null;
3295
3418
 
3296
3419
  case 11:
3297
- encryptedName = _context50.t0;
3298
- _context50.next = 14;
3299
- return this.client.mutation({
3420
+ encryptedName = _context53.t0;
3421
+ _context53.next = 14;
3422
+ return this.client("mutation")({
3300
3423
  updateFile: [{
3301
3424
  fileId: fileId,
3302
3425
  filename: encryptedName,
@@ -3306,28 +3429,28 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3306
3429
  });
3307
3430
 
3308
3431
  case 14:
3309
- _yield$this$client$mu27 = _context50.sent;
3310
- updateFile = _yield$this$client$mu27.updateFile;
3432
+ _yield$this$client42 = _context53.sent;
3433
+ updateFile = _yield$this$client42.updateFile;
3311
3434
 
3312
3435
  if (updateFile) {
3313
- _context50.next = 18;
3436
+ _context53.next = 18;
3314
3437
  break;
3315
3438
  }
3316
3439
 
3317
3440
  throw new Error("Can't update file");
3318
3441
 
3319
3442
  case 18:
3320
- return _context50.abrupt("return", gqlVFileToExternal(updateFile, _classPrivateFieldLooseBase(this, _keys)[_keys]));
3443
+ return _context53.abrupt("return", gqlVFileToExternal(updateFile, _classPrivateFieldLooseBase(this, _keys)[_keys]));
3321
3444
 
3322
3445
  case 19:
3323
3446
  case "end":
3324
- return _context50.stop();
3447
+ return _context53.stop();
3325
3448
  }
3326
3449
  }
3327
- }, _callee50, this);
3450
+ }, _callee53, this);
3328
3451
  }));
3329
3452
 
3330
- function updateFile(_x49) {
3453
+ function updateFile(_x51) {
3331
3454
  return _updateFile.apply(this, arguments);
3332
3455
  }
3333
3456
 
@@ -3335,35 +3458,35 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3335
3458
  }();
3336
3459
 
3337
3460
  _proto.readMail = /*#__PURE__*/function () {
3338
- var _readMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee51(_ref44) {
3339
- var mailId, _yield$this$client$mu28, readMail;
3461
+ var _readMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee54(_ref45) {
3462
+ var mailId, _yield$this$client43, readMail;
3340
3463
 
3341
- return _regeneratorRuntime.wrap(function _callee51$(_context51) {
3464
+ return _regeneratorRuntime.wrap(function _callee54$(_context54) {
3342
3465
  while (1) {
3343
- switch (_context51.prev = _context51.next) {
3466
+ switch (_context54.prev = _context54.next) {
3344
3467
  case 0:
3345
- mailId = _ref44.mailId;
3346
- _context51.next = 3;
3347
- return this.client.mutation({
3468
+ mailId = _ref45.mailId;
3469
+ _context54.next = 3;
3470
+ return this.client("mutation")({
3348
3471
  readMail: [{
3349
3472
  mailId: mailId
3350
3473
  }, true]
3351
3474
  });
3352
3475
 
3353
3476
  case 3:
3354
- _yield$this$client$mu28 = _context51.sent;
3355
- readMail = _yield$this$client$mu28.readMail;
3356
- return _context51.abrupt("return", readMail != null ? readMail : false);
3477
+ _yield$this$client43 = _context54.sent;
3478
+ readMail = _yield$this$client43.readMail;
3479
+ return _context54.abrupt("return", readMail != null ? readMail : false);
3357
3480
 
3358
3481
  case 6:
3359
3482
  case "end":
3360
- return _context51.stop();
3483
+ return _context54.stop();
3361
3484
  }
3362
3485
  }
3363
- }, _callee51, this);
3486
+ }, _callee54, this);
3364
3487
  }));
3365
3488
 
3366
- function readMail(_x50) {
3489
+ function readMail(_x52) {
3367
3490
  return _readMail.apply(this, arguments);
3368
3491
  }
3369
3492
 
@@ -3371,35 +3494,35 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3371
3494
  }();
3372
3495
 
3373
3496
  _proto.unreadMail = /*#__PURE__*/function () {
3374
- var _unreadMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee52(_ref45) {
3375
- var mailId, _yield$this$client$mu29, unreadMail;
3497
+ var _unreadMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee55(_ref46) {
3498
+ var mailId, _yield$this$client44, unreadMail;
3376
3499
 
3377
- return _regeneratorRuntime.wrap(function _callee52$(_context52) {
3500
+ return _regeneratorRuntime.wrap(function _callee55$(_context55) {
3378
3501
  while (1) {
3379
- switch (_context52.prev = _context52.next) {
3502
+ switch (_context55.prev = _context55.next) {
3380
3503
  case 0:
3381
- mailId = _ref45.mailId;
3382
- _context52.next = 3;
3383
- return this.client.mutation({
3504
+ mailId = _ref46.mailId;
3505
+ _context55.next = 3;
3506
+ return this.client("mutation")({
3384
3507
  unreadMail: [{
3385
3508
  mailId: mailId
3386
3509
  }, true]
3387
3510
  });
3388
3511
 
3389
3512
  case 3:
3390
- _yield$this$client$mu29 = _context52.sent;
3391
- unreadMail = _yield$this$client$mu29.unreadMail;
3392
- return _context52.abrupt("return", unreadMail != null ? unreadMail : false);
3513
+ _yield$this$client44 = _context55.sent;
3514
+ unreadMail = _yield$this$client44.unreadMail;
3515
+ return _context55.abrupt("return", unreadMail != null ? unreadMail : false);
3393
3516
 
3394
3517
  case 6:
3395
3518
  case "end":
3396
- return _context52.stop();
3519
+ return _context55.stop();
3397
3520
  }
3398
3521
  }
3399
- }, _callee52, this);
3522
+ }, _callee55, this);
3400
3523
  }));
3401
3524
 
3402
- function unreadMail(_x51) {
3525
+ function unreadMail(_x53) {
3403
3526
  return _unreadMail.apply(this, arguments);
3404
3527
  }
3405
3528
 
@@ -3407,17 +3530,17 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3407
3530
  }();
3408
3531
 
3409
3532
  _proto.appSettings = /*#__PURE__*/function () {
3410
- var _appSettings = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee53() {
3533
+ var _appSettings = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee56() {
3411
3534
  var _user$appSettings;
3412
3535
 
3413
- var _yield$this$client$qu13, user;
3536
+ var _yield$this$client45, user;
3414
3537
 
3415
- return _regeneratorRuntime.wrap(function _callee53$(_context53) {
3538
+ return _regeneratorRuntime.wrap(function _callee56$(_context56) {
3416
3539
  while (1) {
3417
- switch (_context53.prev = _context53.next) {
3540
+ switch (_context56.prev = _context56.next) {
3418
3541
  case 0:
3419
- _context53.next = 2;
3420
- return this.client.query({
3542
+ _context56.next = 2;
3543
+ return this.client("query")({
3421
3544
  user: [{}, {
3422
3545
  appSettings: {
3423
3546
  autoDisconnectDelay: true,
@@ -3430,25 +3553,25 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3430
3553
  });
3431
3554
 
3432
3555
  case 2:
3433
- _yield$this$client$qu13 = _context53.sent;
3434
- user = _yield$this$client$qu13.user;
3556
+ _yield$this$client45 = _context56.sent;
3557
+ user = _yield$this$client45.user;
3435
3558
 
3436
3559
  if (user) {
3437
- _context53.next = 6;
3560
+ _context56.next = 6;
3438
3561
  break;
3439
3562
  }
3440
3563
 
3441
- return _context53.abrupt("return", null);
3564
+ return _context56.abrupt("return", null);
3442
3565
 
3443
3566
  case 6:
3444
- return _context53.abrupt("return", (_user$appSettings = user.appSettings) != null ? _user$appSettings : null);
3567
+ return _context56.abrupt("return", (_user$appSettings = user.appSettings) != null ? _user$appSettings : null);
3445
3568
 
3446
3569
  case 7:
3447
3570
  case "end":
3448
- return _context53.stop();
3571
+ return _context56.stop();
3449
3572
  }
3450
3573
  }
3451
- }, _callee53, this);
3574
+ }, _callee56, this);
3452
3575
  }));
3453
3576
 
3454
3577
  function appSettings() {
@@ -3459,15 +3582,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3459
3582
  }();
3460
3583
 
3461
3584
  _proto.updateAppSettings = /*#__PURE__*/function () {
3462
- var _updateAppSettings = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee54(settings) {
3463
- var _yield$this$client$mu30, updateAppSettings;
3585
+ var _updateAppSettings = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee57(settings) {
3586
+ var _yield$this$client46, updateAppSettings;
3464
3587
 
3465
- return _regeneratorRuntime.wrap(function _callee54$(_context54) {
3588
+ return _regeneratorRuntime.wrap(function _callee57$(_context57) {
3466
3589
  while (1) {
3467
- switch (_context54.prev = _context54.next) {
3590
+ switch (_context57.prev = _context57.next) {
3468
3591
  case 0:
3469
- _context54.next = 2;
3470
- return this.client.mutation({
3592
+ _context57.next = 2;
3593
+ return this.client("mutation")({
3471
3594
  updateAppSettings: [settings, {
3472
3595
  autoDisconnectDelay: true,
3473
3596
  cloudFileDaysForDelete: true,
@@ -3478,19 +3601,19 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3478
3601
  });
3479
3602
 
3480
3603
  case 2:
3481
- _yield$this$client$mu30 = _context54.sent;
3482
- updateAppSettings = _yield$this$client$mu30.updateAppSettings;
3483
- return _context54.abrupt("return", updateAppSettings);
3604
+ _yield$this$client46 = _context57.sent;
3605
+ updateAppSettings = _yield$this$client46.updateAppSettings;
3606
+ return _context57.abrupt("return", updateAppSettings);
3484
3607
 
3485
3608
  case 5:
3486
3609
  case "end":
3487
- return _context54.stop();
3610
+ return _context57.stop();
3488
3611
  }
3489
3612
  }
3490
- }, _callee54, this);
3613
+ }, _callee57, this);
3491
3614
  }));
3492
3615
 
3493
- function updateAppSettings(_x52) {
3616
+ function updateAppSettings(_x54) {
3494
3617
  return _updateAppSettings.apply(this, arguments);
3495
3618
  }
3496
3619
 
@@ -3498,31 +3621,31 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3498
3621
  }();
3499
3622
 
3500
3623
  _proto.receivedMails = /*#__PURE__*/function () {
3501
- var _receivedMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee55() {
3624
+ var _receivedMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee58() {
3502
3625
  var _user$receivedMails;
3503
3626
 
3504
- var _yield$this$client$qu14, user, mails, receivedMails, _iterator18, _step18, m, mail;
3627
+ var _yield$this$client47, user, mails, receivedMails, _iterator19, _step19, m, mail;
3505
3628
 
3506
- return _regeneratorRuntime.wrap(function _callee55$(_context55) {
3629
+ return _regeneratorRuntime.wrap(function _callee58$(_context58) {
3507
3630
  while (1) {
3508
- switch (_context55.prev = _context55.next) {
3631
+ switch (_context58.prev = _context58.next) {
3509
3632
  case 0:
3510
- _context55.next = 2;
3511
- return this.client.query({
3633
+ _context58.next = 2;
3634
+ return this.client("query")({
3512
3635
  user: [{}, {
3513
3636
  receivedMails: gqlMailQuery
3514
3637
  }]
3515
3638
  });
3516
3639
 
3517
3640
  case 2:
3518
- _yield$this$client$qu14 = _context55.sent;
3519
- user = _yield$this$client$qu14.user;
3641
+ _yield$this$client47 = _context58.sent;
3642
+ user = _yield$this$client47.user;
3520
3643
  mails = (_user$receivedMails = user == null ? void 0 : user.receivedMails) != null ? _user$receivedMails : []; // TODO get actual mails on this app only
3521
3644
 
3522
3645
  receivedMails = new Array();
3523
3646
 
3524
- for (_iterator18 = _createForOfIteratorHelperLoose(mails); !(_step18 = _iterator18()).done;) {
3525
- m = _step18.value;
3647
+ for (_iterator19 = _createForOfIteratorHelperLoose(mails); !(_step19 = _iterator19()).done;) {
3648
+ m = _step19.value;
3526
3649
  mail = convertInternalMailToExternal(m, _classPrivateFieldLooseBase(this, _keys)[_keys]);
3527
3650
 
3528
3651
  if (mail) {
@@ -3530,14 +3653,14 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3530
3653
  }
3531
3654
  }
3532
3655
 
3533
- return _context55.abrupt("return", receivedMails);
3656
+ return _context58.abrupt("return", receivedMails);
3534
3657
 
3535
3658
  case 8:
3536
3659
  case "end":
3537
- return _context55.stop();
3660
+ return _context58.stop();
3538
3661
  }
3539
3662
  }
3540
- }, _callee55, this);
3663
+ }, _callee58, this);
3541
3664
  }));
3542
3665
 
3543
3666
  function receivedMails() {
@@ -3548,31 +3671,31 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3548
3671
  }();
3549
3672
 
3550
3673
  _proto.sentMails = /*#__PURE__*/function () {
3551
- var _sentMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee56() {
3674
+ var _sentMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee59() {
3552
3675
  var _user$sentMails;
3553
3676
 
3554
- var _yield$this$client$qu15, user, mails, sentMails, _iterator19, _step19, m, mail;
3677
+ var _yield$this$client48, user, mails, sentMails, _iterator20, _step20, m, mail;
3555
3678
 
3556
- return _regeneratorRuntime.wrap(function _callee56$(_context56) {
3679
+ return _regeneratorRuntime.wrap(function _callee59$(_context59) {
3557
3680
  while (1) {
3558
- switch (_context56.prev = _context56.next) {
3681
+ switch (_context59.prev = _context59.next) {
3559
3682
  case 0:
3560
- _context56.next = 2;
3561
- return this.client.query({
3683
+ _context59.next = 2;
3684
+ return this.client("query")({
3562
3685
  user: [{}, {
3563
3686
  sentMails: gqlMailQuery
3564
3687
  }]
3565
3688
  });
3566
3689
 
3567
3690
  case 2:
3568
- _yield$this$client$qu15 = _context56.sent;
3569
- user = _yield$this$client$qu15.user;
3691
+ _yield$this$client48 = _context59.sent;
3692
+ user = _yield$this$client48.user;
3570
3693
  mails = (_user$sentMails = user == null ? void 0 : user.sentMails) != null ? _user$sentMails : []; // TODO get actual mails on this app only
3571
3694
 
3572
3695
  sentMails = new Array();
3573
3696
 
3574
- for (_iterator19 = _createForOfIteratorHelperLoose(mails); !(_step19 = _iterator19()).done;) {
3575
- m = _step19.value;
3697
+ for (_iterator20 = _createForOfIteratorHelperLoose(mails); !(_step20 = _iterator20()).done;) {
3698
+ m = _step20.value;
3576
3699
  mail = convertInternalMailToExternal(m, _classPrivateFieldLooseBase(this, _keys)[_keys]);
3577
3700
 
3578
3701
  if (mail) {
@@ -3580,14 +3703,14 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3580
3703
  }
3581
3704
  }
3582
3705
 
3583
- return _context56.abrupt("return", sentMails);
3706
+ return _context59.abrupt("return", sentMails);
3584
3707
 
3585
3708
  case 8:
3586
3709
  case "end":
3587
- return _context56.stop();
3710
+ return _context59.stop();
3588
3711
  }
3589
3712
  }
3590
- }, _callee56, this);
3713
+ }, _callee59, this);
3591
3714
  }));
3592
3715
 
3593
3716
  function sentMails() {
@@ -3598,31 +3721,31 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3598
3721
  }();
3599
3722
 
3600
3723
  _proto.draftMails = /*#__PURE__*/function () {
3601
- var _draftMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee57() {
3724
+ var _draftMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee60() {
3602
3725
  var _user$draftMails;
3603
3726
 
3604
- var _yield$this$client$qu16, user, mails, draftMails, _iterator20, _step20, m, draft;
3727
+ var _yield$this$client49, user, mails, draftMails, _iterator21, _step21, m, draft;
3605
3728
 
3606
- return _regeneratorRuntime.wrap(function _callee57$(_context57) {
3729
+ return _regeneratorRuntime.wrap(function _callee60$(_context60) {
3607
3730
  while (1) {
3608
- switch (_context57.prev = _context57.next) {
3731
+ switch (_context60.prev = _context60.next) {
3609
3732
  case 0:
3610
- _context57.next = 2;
3611
- return this.client.query({
3733
+ _context60.next = 2;
3734
+ return this.client("query")({
3612
3735
  user: [{}, {
3613
3736
  draftMails: gqlMailQuery
3614
3737
  }]
3615
3738
  });
3616
3739
 
3617
3740
  case 2:
3618
- _yield$this$client$qu16 = _context57.sent;
3619
- user = _yield$this$client$qu16.user;
3741
+ _yield$this$client49 = _context60.sent;
3742
+ user = _yield$this$client49.user;
3620
3743
  mails = (_user$draftMails = user == null ? void 0 : user.draftMails) != null ? _user$draftMails : []; // TODO get actual mails on this app only
3621
3744
 
3622
3745
  draftMails = new Array();
3623
3746
 
3624
- for (_iterator20 = _createForOfIteratorHelperLoose(mails); !(_step20 = _iterator20()).done;) {
3625
- m = _step20.value;
3747
+ for (_iterator21 = _createForOfIteratorHelperLoose(mails); !(_step21 = _iterator21()).done;) {
3748
+ m = _step21.value;
3626
3749
  draft = convertInternalMailToExternal(m, _classPrivateFieldLooseBase(this, _keys)[_keys]);
3627
3750
 
3628
3751
  if (draft) {
@@ -3630,14 +3753,14 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3630
3753
  }
3631
3754
  }
3632
3755
 
3633
- return _context57.abrupt("return", draftMails);
3756
+ return _context60.abrupt("return", draftMails);
3634
3757
 
3635
3758
  case 8:
3636
3759
  case "end":
3637
- return _context57.stop();
3760
+ return _context60.stop();
3638
3761
  }
3639
3762
  }
3640
- }, _callee57, this);
3763
+ }, _callee60, this);
3641
3764
  }));
3642
3765
 
3643
3766
  function draftMails() {
@@ -3647,6 +3770,46 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3647
3770
  return draftMails;
3648
3771
  }();
3649
3772
 
3773
+ _proto.unreadReceivedMailsCount = /*#__PURE__*/function () {
3774
+ var _unreadReceivedMailsCount = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee61() {
3775
+ var _yield$this$client50, unreadReceivedMailsCount;
3776
+
3777
+ return _regeneratorRuntime.wrap(function _callee61$(_context61) {
3778
+ while (1) {
3779
+ switch (_context61.prev = _context61.next) {
3780
+ case 0:
3781
+ _context61.next = 2;
3782
+ return this.client("query")({
3783
+ unreadReceivedMailsCount: true
3784
+ });
3785
+
3786
+ case 2:
3787
+ _yield$this$client50 = _context61.sent;
3788
+ unreadReceivedMailsCount = _yield$this$client50.unreadReceivedMailsCount;
3789
+ return _context61.abrupt("return", unreadReceivedMailsCount != null ? unreadReceivedMailsCount : 0);
3790
+
3791
+ case 5:
3792
+ case "end":
3793
+ return _context61.stop();
3794
+ }
3795
+ }
3796
+ }, _callee61, this);
3797
+ }));
3798
+
3799
+ function unreadReceivedMailsCount() {
3800
+ return _unreadReceivedMailsCount.apply(this, arguments);
3801
+ }
3802
+
3803
+ return unreadReceivedMailsCount;
3804
+ }();
3805
+
3806
+ _createClass(SecrecyClient, [{
3807
+ key: "publicKey",
3808
+ get: function get() {
3809
+ return _classPrivateFieldLooseBase(this, _keys)[_keys].publicKey;
3810
+ }
3811
+ }]);
3812
+
3650
3813
  return SecrecyClient;
3651
3814
  }(BaseClient);
3652
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvaW5kZXgudHMiXSwibmFtZXMiOlsia3kiLCJheGlvcyIsIkJhc2VDbGllbnQiLCJ2RmlsZXNDYWNoZSIsImZvbGRlcnNDYWNoZSIsImZpbGVzQ2FjaGUiLCJ1c2Vyc0NhY2hlIiwic2VjcmV0c3RyZWFtS2V5Z2VuIiwiZW5jcnlwdFNlY3JldHN0cmVhbSIsImNvbXByZXNzIiwidW5jb21wcmVzcyIsImdxbEZvbGRlclRvRXh0ZXJuYWwiLCJncWxGb2xkZXJUb0V4dGVybmFsRm9sZGVyRnVsbCIsImdxbFZGaWxlVG9FeHRlcm5hbCIsImdxbFZGaWxlVG9JbnRlcm5hbCIsImludGVybmFsVkZpbGVUb1ZGaWxlIiwiZ3FsRmlsZVRvRXh0ZXJuYWwiLCJzb2RpdW0iLCJkZWNyeXB0Q3J5cHRvQm94IiwiZW5jcnlwdENyeXB0b0JveCIsImdlbmVyYXRlIiwibWQ1IiwiZW5jcnlwdCIsImRlY3J5cHQiLCJjaHVua3MiLCJjb25jYXRlbmF0ZSIsImVudW1lcmF0ZSIsInByb21pc2VBbGxMaW1pdCIsImdxbEZpbGVRdWVyeSIsImdxbEZvbGRlclF1ZXJ5IiwiZ3FsRm9sZGVyRnVsbFF1ZXJ5IiwiZ3FsTWFpbFF1ZXJ5IiwiZ3FsVkZpbGVRdWVyeSIsImdxbFZGaWxlV2l0aEZvbGRlclF1ZXJ5IiwiY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwiLCJlbmNyeXB0TmFtZSIsIm5hbWUiLCJuYW1lS2V5IiwiZnJvbV9oZXgiLCJmcm9tX3N0cmluZyIsImRhdGEiLCJuYW1lRW5jcnlwdGVkIiwidG9faGV4IiwiU2VjcmVjeUNsaWVudCIsInVhU2Vzc2lvbiIsInVhS2V5cyIsInVhSnd0IiwiZW52Iiwiand0IiwicGVyRm9sZGVyIiwiZm9sZGVySWQiLCJwdWJsaWNLZXkiLCJmb2xkZXIiLCJnZXQiLCJpZCIsInVzZXJBcHAiLCJwcml2YXRlS2V5IiwicGVyVkZpbGUiLCJ2RmlsZUlkIiwidkZpbGUiLCJmaWxlcyIsImhpc3RvcnkiLCJtYXAiLCJmIiwia2V5IiwidXNlciIsIl9lYWNoVXNlciIsInN1YmplY3QiLCJib2R5IiwiaWRPck1haWwiLCJ1IiwidXNlcklkIiwid2l0aFB1YmxpY0tleSIsInVuZGVmaW5lZCIsIkVycm9yIiwicmVjaXBpZW50c0ZpbGVzIiwiQXJyYXkiLCJmaWxlSW5IaXN0b3J5IiwiZmlsZSIsInB1c2giLCJmaWxlS2V5IiwicmVjaXBpZW50SWQiLCJhZGRGaWxlVG9IaXN0b3J5IiwiZmlsZUlkIiwiY2xpZW50IiwibXV0YXRpb24iLCJmaW5kIiwidXNlcnMiLCJmaWx0ZXIiLCJpbnB1dCIsInNoYXJlRmlsZUluSGlzdG9yeSIsInVwbG9hZEZpbGUiLCJlbmNyeXB0UHJvZ3Jlc3MiLCJ1cGxvYWRQcm9ncmVzcyIsImNhbmNlbFRva2VuIiwiRmlsZSIsIlVpbnQ4QXJyYXkiLCJhcnJheUJ1ZmZlciIsImZpbGVCdWZmZXIiLCJjb21wcmVzc2VkIiwiZW5jcnlwdGVkRmlsZSIsIm1kNUZpbGUiLCJtZDVFbmNyeXB0ZWQiLCJlbmNyeXB0ZWRGaWxlS2V5IiwiZmlsZVNpemUiLCJieXRlTGVuZ3RoIiwiZmlsZVNpemVCZWZvcmUiLCJmaWxlUGFydFNpemUiLCJwYXJ0cyIsImZpZWxkcyIsIm9yZGVyIiwidXJsIiwidG90YWwiLCJjdXJyZW50IiwicGVyY2VudCIsImxlbmd0aCIsInVwbG9hZFBhcnRFbmRlZCIsInVwbG9hZEZpbGVQYXJ0RW5kIiwidXBsb2FkRW5kZWQiLCJ1cGxvYWRGaWxlRW5kIiwiY2h1bmtQYXJ0cyIsIk51bWJlciIsImluZGV4IiwiY2h1bmsiLCJwcm9ncmVzc1BhcnRzIiwib25Qcm9ncmVzcyIsInBhcnQiLCJwcm9ncmVzc0V2ZW50IiwiT2JqZWN0IiwidmFsdWVzIiwicmVkdWNlIiwicHJ2IiwiY3VyIiwibG9hZGVkIiwiYnlQYXJ0IiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsInAiLCJlbnRyaWVzIiwidmFsdWUiLCJhcHBlbmQiLCJCbG9iIiwicG9zdCIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJyZXNwb25zZSIsInN0YXR1cyIsInVwbG9hZEZpbGVJbkNsb3VkIiwic2F2ZUluQ2xvdWQiLCJsb2dvdXQiLCJzZXNzaW9uSWQiLCJjbGVhciIsImNyZWF0ZUZvbGRlciIsInBhcmVudEZvbGRlcklkIiwiZW5jcnlwdGVkTmFtZSIsImVuY3J5cHRlZEtleSIsInBhcmVudEZvbGRlciIsIlByb21pc2UiLCJhbGwiLCJyaWdodHMiLCJzaGFyZUZvbGRlciIsImRlbGV0ZWQiLCJxdWVyeSIsIm1haWwiLCJzaGFyZVZGaWxlIiwiaCIsInNoYXJlZFZGaWxlcyIsInZGaWxlcyIsInZGaWxlc1NoYXJlZFdpdGhNZSIsImRlbGV0ZWRWRmlsZXMiLCJzaGFyZWRGb2xkZXJzIiwiZm9sZGVycyIsImZvbGRlcnNTaGFyZWRXaXRoTWUiLCJkZWxldGVkRm9sZGVycyIsInNoYXJlRm9sZGVycyIsInZGaWxlSW5wdXQiLCJzaGFyZUZvbGRlckZpbmlzaCIsInVwZGF0ZUZvbGRlciIsImlzRmF2b3JpdGUiLCJkZWxldGVkQXQiLCJjcmVhdGVNYWlsIiwiY3VzdG9tTWVzc2FnZSIsImNyZWF0ZURyYWZ0TWFpbCIsInNlbmREcmFmdE1haWwiLCJtYWlsSW50ZWdyaXR5SWQiLCJ3YWl0aW5nUmVjZWl2ZWRNYWlscyIsImRhdGUiLCJhdHRhY2htZW50c0NvdW50Iiwic2VuZGVyIiwiZmlyc3RuYW1lIiwibGFzdG5hbWUiLCJlbWFpbCIsInJlY2lwaWVudHMiLCJ0ZW1wb3JhcnlSZWNpcGllbnRzIiwibSIsIkRhdGUiLCJ1cGRhdGVEcmFmdE1haWwiLCJkcmFmdElkIiwicmVjaXBpZW50c0lkcyIsInJlcGx5VG8iLCJkcmFmdE1haWxzIiwiZHJhZnRzIiwiZHJhZnQiLCJkIiwiaGFzaEtleSIsImhhc2giLCJyYW5kb21ieXRlc19idWYiLCJjcnlwdG9fZ2VuZXJpY2hhc2hfS0VZQllURVMiLCJjcnlwdG9fZ2VuZXJpY2hhc2giLCJjcnlwdG9fZ2VuZXJpY2hhc2hfQllURVMiLCJKU09OIiwic3RyaW5naWZ5Iiwic2VuZGVyRmlsZXMiLCJkZWxldGVEcmFmdE1haWwiLCJkZWxldGVWRmlsZVNoYXJpbmciLCJkZWxldGVGb2xkZXJTaGFyaW5nIiwiZHVwbGljYXRlVkZpbGUiLCJjdXN0b21OYW1lIiwiZGVsZXRlRm9sZGVyQ2xvdWRUcmFzaCIsImlkcyIsImRlbGV0ZVZGaWxlQ2xvdWRUcmFzaCIsImRlbGV0ZU1haWxUcmFzaCIsImVtcHR5TWFpbFRyYXNoIiwiZW1wdHlDbG91ZFRyYXNoIiwicmVjb3ZlckZpbGUiLCJyZWNvdmVyRm9sZGVyIiwicmVjb3Zlck1haWwiLCJtYWlsSWQiLCJkZWxldGVGaWxlIiwiZGVsZXRlVkZpbGUiLCJkZWxldGVNYWlsIiwiaGFzIiwicmVjZWl2ZWRNYWlscyIsInNvbWUiLCJmaWxlTWFpbCIsImVuY3J5cHRlZE5hbWVLZXkiLCJmaWxlbmFtZSIsIm1lIiwiaW5jbHVkZXMiLCJvdGhlcnMiLCJkcmFmdE1haWxJZCIsInNlbmRXYWl0aW5nRW1haWxzIiwic2VudE1haWxzIiwibWFpbHMiLCJmaWx0ZXJlZCIsInNlbmRPbmVNYWlsIiwicmVjaXBpZW50IiwiZmlsZUNvbnRlbnQiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJwcm9ncmVzc0RlY3J5cHQiLCJhYm9ydCIsIl9fdHlwZW5hbWUiLCJjb250ZW50VXJsIiwidG90YWxTaXplIiwic2VuZGVyUHVibGljS2V5IiwidHJhbnNmZXJyZWRCeXRlcyIsInRvdGFsQnl0ZXMiLCJwciIsInNpZ25hbCIsImJ1ZiIsIm1kNVBhcnQiLCJlbmNyeXB0ZWRDb250ZW50Iiwic29ydCIsImEiLCJiIiwic3JjIiwibWQ1Q29udGVudCIsInVwZGF0ZUZpbGUiLCJyZWFkTWFpbCIsInVucmVhZE1haWwiLCJhcHBTZXR0aW5ncyIsImF1dG9EaXNjb25uZWN0RGVsYXkiLCJjbG91ZEZpbGVEYXlzRm9yRGVsZXRlIiwiY2xvdWRGb2xkZXJEYXlzRm9yRGVsZXRlIiwiaGlzdG9yeUZpbGVEYXlzRm9yRGVsZXRlIiwiaGlzdG9yeU1heEZpbGVDb3VudCIsInVwZGF0ZUFwcFNl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QixvQkFBSVEsS0FBSixFQUFXO0FBQ1RGLGtCQUFBQSxVQUFVLENBQUN4SCxJQUFYLENBQWdCMEgsS0FBaEI7QUFDRDtBQUNGOztBQXJCSCxpREF1QlNGLFVBdkJUOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBcmpERjs7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTtBQUFBLEVBQW1Dck0sVUFBbkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERvd25sb2FkUHJvZ3Jlc3MgfSBmcm9tIFwia3lcIjtcbmltcG9ydCBreSBmcm9tIFwia3lcIjtcbmltcG9ydCB0eXBlIHsgQ2FuY2VsVG9rZW4gfSBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCB7IEJhc2VDbGllbnQgfSBmcm9tIFwiLi4vQmFzZUNsaWVudC5qc1wiO1xuaW1wb3J0IHsgdkZpbGVzQ2FjaGUsIGZvbGRlcnNDYWNoZSwgZmlsZXNDYWNoZSwgdXNlcnNDYWNoZSB9IGZyb20gXCIuLi9jYWNoZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9ncmVzcyB9IGZyb20gXCIuLi9jcnlwdG8vZmlsZS5qc1wiO1xuaW1wb3J0IHsgc2VjcmV0c3RyZWFtS2V5Z2VuLCBlbmNyeXB0U2VjcmV0c3RyZWFtIH0gZnJvbSBcIi4uL2NyeXB0by9maWxlLmpzXCI7XG5pbXBvcnQgeyBjb21wcmVzcywgdW5jb21wcmVzcyB9IGZyb20gXCIuLi9taW5pZnkvaW5kZXguanNcIjtcbmltcG9ydCB7XG4gIGdxbEZvbGRlclRvRXh0ZXJuYWwsXG4gIGdxbEZvbGRlclRvRXh0ZXJuYWxGb2xkZXJGdWxsXG59IGZyb20gXCIuL2NvbnZlcnQvZm9sZGVyLmpzXCI7XG5pbXBvcnQge1xuICBncWxWRmlsZVRvRXh0ZXJuYWwsXG4gIGdxbFZGaWxlVG9JbnRlcm5hbCxcbiAgaW50ZXJuYWxWRmlsZVRvVkZpbGVcbn0gZnJvbSBcIi4vY29udmVydC92RmlsZS5qc1wiO1xuaW1wb3J0IHR5cGUge1xuICBNYWlsRmlsZUlucHV0LFxuICBSZWNlaXZlZE1haWwsXG4gIFNlbnRNYWlsLFxuICBGb2xkZXIsXG4gIFZGaWxlV2l0aEZvbGRlcixcbiAgRm9sZGVyRnVsbCxcbiAgVXNlckFwcFNldHRpbmdzLFxuICBGaWxlIGFzIFNlY3JlY3lGaWxlLFxuICBXYWl0aW5nUmVjZWl2ZWRNYWlsLFxuICBEcmFmdE1haWwsXG4gIE1haWxSZWNpcGllbnRJbnB1dCxcbiAgVkZpbGUsXG4gIFNoYXJlRm9sZGVyc0lucHV0LFxuICBOYW1lS2V5SW5wdXQsXG4gIE5hbWVLZXlJbnB1dEZvbGRlcnMsXG4gIE1haWwsXG4gIFNoYXJlRmlsZUluSGlzdG9yeUlucHV0LFxuICBGaWxlUGFydFJlc3BvbnNlLFxuICBGaWxlQ29udGVudFBhcnRcbn0gZnJvbSBcIi4vdHlwZXMvaW5kZXguanNcIjtcbmltcG9ydCB7IGdxbEZpbGVUb0V4dGVybmFsIH0gZnJvbSBcIi4vY29udmVydC9maWxlLmpzXCI7XG5pbXBvcnQgeyBzb2RpdW0gfSBmcm9tIFwiLi4vc29kaXVtLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtleVBhaXIgfSBmcm9tIFwiLi4vY3J5cHRvL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBkZWNyeXB0Q3J5cHRvQm94LCBlbmNyeXB0Q3J5cHRvQm94IH0gZnJvbSBcIi4uL2NyeXB0by9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZWNyZWN5RW52IH0gZnJvbSBcIi4vaGVscGVycy5qc1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2hvcnRpZFwiO1xuaW1wb3J0IHsgbWQ1IH0gZnJvbSBcIi4uL3dvcmtlci9tZDUuanNcIjtcbmltcG9ydCB7IGVuY3J5cHQsIGRlY3J5cHQgfSBmcm9tIFwiLi4vd29ya2VyL3NvZGl1bS5qc1wiO1xuaW1wb3J0IHsgY2h1bmtzLCBjb25jYXRlbmF0ZSwgZW51bWVyYXRlLCBwcm9taXNlQWxsTGltaXQgfSBmcm9tIFwiLi4vdXRpbHMuanNcIjtcbmltcG9ydCB7XG4gIGdxbEZpbGVRdWVyeSxcbiAgZ3FsRm9sZGVyUXVlcnksXG4gIGdxbEZvbGRlckZ1bGxRdWVyeSxcbiAgZ3FsTWFpbFF1ZXJ5LFxuICBncWxWRmlsZVF1ZXJ5LFxuICBncWxWRmlsZVdpdGhGb2xkZXJRdWVyeVxufSBmcm9tIFwiLi90eXBlcy9xdWVyaWVzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFJpZ2h0cyB9IGZyb20gXCIuLi96ZXVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbCB9IGZyb20gXCIuL2NvbnZlcnQvbWFpbC5qc1wiO1xuLy8gaW1wb3J0IHsgbWQ1IH0gZnJvbSBcIi4uL3dvcmtlci9pbmRleC5qc1wiO1xuLy8gaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIG9mIH0gZnJvbSBcInJ4anNcIjtcblxuZXhwb3J0IHR5cGUgTmV3TWFpbCA9IHtcbiAgYm9keTogc3RyaW5nO1xuICBzdWJqZWN0OiBzdHJpbmc7XG4gIGZpbGVzOiB7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9W107XG4gIHJlY2lwaWVudHNJZHM6IHN0cmluZ1tdO1xuICByZXBseVRvPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCB0eXBlIFByb2dyZXNzQ2FsbGJhY2sgPSAocHJvZ3Jlc3M6IFByb2dyZXNzKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG5jb25zdCBlbmNyeXB0TmFtZSA9IGFzeW5jIChuYW1lOiBzdHJpbmcsIG5hbWVLZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgZW5jcnlwdFNlY3JldHN0cmVhbShcbiAgICBzb2RpdW0uZnJvbV9oZXgobmFtZUtleSksXG4gICAgc29kaXVtLmZyb21fc3RyaW5nKG5hbWUpXG4gICk7XG4gIGNvbnN0IG5hbWVFbmNyeXB0ZWQgPSBzb2RpdW0udG9faGV4KGRhdGEpO1xuICByZXR1cm4gbmFtZUVuY3J5cHRlZDtcbn07XG5cbmV4cG9ydCBjbGFzcyBTZWNyZWN5Q2xpZW50IGV4dGVuZHMgQmFzZUNsaWVudCB7XG4gIGp3dDogc3RyaW5nO1xuXG4gICNrZXlzOiBLZXlQYWlyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHVhU2Vzc2lvbjogc3RyaW5nLFxuICAgIHVhS2V5czogS2V5UGFpcixcbiAgICB1YUp3dDogc3RyaW5nLFxuICAgIGVudjogU2VjcmVjeUVudlxuICApIHtcbiAgICBzdXBlcih1YVNlc3Npb24sIGVudik7XG4gICAgdGhpcy5qd3QgPSB1YUp3dDtcbiAgICB0aGlzLiNrZXlzID0gdWFLZXlzO1xuICB9XG5cbiAgYXN5bmMgYWRkRmlsZVRvSGlzdG9yeSh7XG4gICAgZmlsZUlkLFxuICAgIHZGaWxlSWRcbiAgfToge1xuICAgIGZpbGVJZDogc3RyaW5nO1xuICAgIHZGaWxlSWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8VkZpbGU+IHtcbiAgICBjb25zdCB7IGFkZEZpbGVUb0hpc3RvcnkgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGFkZEZpbGVUb0hpc3Rvcnk6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICB2RmlsZUlkXG4gICAgICAgIH0sXG4gICAgICAgIGdxbFZGaWxlUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGNvbnN0IHZGaWxlID0gYXdhaXQgZ3FsVkZpbGVUb0ludGVybmFsKGFkZEZpbGVUb0hpc3RvcnksIHRoaXMuI2tleXMpO1xuICAgIGNvbnN0IGZpbGUgPSB2RmlsZS5oaXN0b3J5LmZpbmQoZiA9PiBmLmlkID09PSBmaWxlSWQpO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICBjb25zdCB1c2VycyA9IHZGaWxlLnVzZXJzLmZpbHRlcihcbiAgICAgICAgKFt1XSkgPT4gdS5wdWJsaWNLZXkgIT09IHRoaXMuI2tleXMucHVibGljS2V5XG4gICAgICApO1xuICAgICAgY29uc3QgaW5wdXQ6IFNoYXJlRmlsZUluSGlzdG9yeUlucHV0ID0ge1xuICAgICAgICBmaWxlSWQ6IGZpbGUuaWQsXG4gICAgICAgIHVzZXJzOiB1c2Vycy5tYXAoKFt1XSkgPT4gKHtcbiAgICAgICAgICBpZDogdS5pZCxcbiAgICAgICAgICBrZXk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgoZmlsZS51c2VyIS5rZXkpLFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9KSlcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgICAgc2hhcmVGaWxlSW5IaXN0b3J5OiBbeyBpbnB1dCwgdkZpbGVJZCB9LCB0cnVlXVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpbnRlcm5hbFZGaWxlVG9WRmlsZSh2RmlsZSk7XG4gIH1cblxuICBhc3luYyB1cGxvYWRGaWxlKHtcbiAgICBmaWxlLFxuICAgIGVuY3J5cHRQcm9ncmVzcyxcbiAgICB1cGxvYWRQcm9ncmVzcyxcbiAgICBjYW5jZWxUb2tlblxuICB9OiB7XG4gICAgZmlsZTogZ2xvYmFsVGhpcy5GaWxlIHwgVWludDhBcnJheTtcbiAgICBjYW5jZWxUb2tlbj86IENhbmNlbFRva2VuO1xuICAgIGVuY3J5cHRQcm9ncmVzcz86IFByb2dyZXNzQ2FsbGJhY2s7XG4gICAgdXBsb2FkUHJvZ3Jlc3M/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICAgIC8vIGFib3J0PzogQWJvcnRDb250cm9sbGVyO1xuICB9KTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc3QgZmlsZUtleSA9IHNlY3JldHN0cmVhbUtleWdlbigpO1xuICAgIGNvbnN0IGZpbGVCdWZmZXIgPVxuICAgICAgZmlsZSBpbnN0YW5jZW9mIEZpbGUgPyBuZXcgVWludDhBcnJheShhd2FpdCBmaWxlLmFycmF5QnVmZmVyKCkpIDogZmlsZTtcbiAgICBjb25zdCBjb21wcmVzc2VkID0gY29tcHJlc3MoZmlsZUJ1ZmZlcik7XG4gICAgLy8gVE9ETzogdXNlIGFib3J0IGNvbnRyb2xsZXIgdG8gY2FuY2VsIHVwbG9hZCwgYW5kIHNlZSB0eXBpbmdzXG4gICAgY29uc3Qge1xuICAgICAgZGF0YTogZW5jcnlwdGVkRmlsZSxcbiAgICAgIG1kNTogbWQ1RmlsZSxcbiAgICAgIG1kNUVuY3J5cHRlZFxuICAgIH0gPSBhd2FpdCBlbmNyeXB0KGZpbGVLZXksIGNvbXByZXNzZWQsIGVuY3J5cHRQcm9ncmVzcyk7XG5cbiAgICBjb25zdCBlbmNyeXB0ZWRGaWxlS2V5ID0gZW5jcnlwdENyeXB0b0JveChcbiAgICAgIGZpbGVLZXksXG4gICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICk7XG5cbiAgICBjb25zdCB7IHVwbG9hZEZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHVwbG9hZEZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVTaXplOiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgICAgZmlsZVNpemVCZWZvcmU6IGZpbGVCdWZmZXIuYnl0ZUxlbmd0aCxcbiAgICAgICAgICBmaWxlS2V5OiBzb2RpdW0udG9faGV4KGVuY3J5cHRlZEZpbGVLZXkpLFxuICAgICAgICAgIG1kNUVuY3J5cHRlZCxcbiAgICAgICAgICBtZDU6IG1kNUZpbGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZDogdHJ1ZSxcbiAgICAgICAgICBmaWxlUGFydFNpemU6IHRydWUsXG4gICAgICAgICAgcGFydHM6IHtcbiAgICAgICAgICAgIGZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgICAgdXJsOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVwbG9hZEZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHVwbG9hZFByb2dyZXNzPy4oe1xuICAgICAgdG90YWw6IGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgIGN1cnJlbnQ6IDAsXG4gICAgICBwZXJjZW50OiAwXG4gICAgfSk7XG5cbiAgICBpZiAodXBsb2FkRmlsZS5wYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHVwbG9hZFByb2dyZXNzPy4oe1xuICAgICAgICB0b3RhbDogZW5jcnlwdGVkRmlsZS5ieXRlTGVuZ3RoLFxuICAgICAgICBjdXJyZW50OiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgIHBlcmNlbnQ6IDFcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdXBsb2FkRmlsZS5maWxlSWQ7XG4gICAgfVxuXG4gICAgY29uc3QgdXBsb2FkUGFydEVuZGVkID0gYXN5bmMgKFxuICAgICAgbWQ1OiBzdHJpbmcsXG4gICAgICBvcmRlcjogbnVtYmVyXG4gICAgKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgICBjb25zdCB7IHVwbG9hZEZpbGVQYXJ0RW5kIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICAgIHVwbG9hZEZpbGVQYXJ0RW5kOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlsZUlkOiB1cGxvYWRGaWxlLmZpbGVJZCxcbiAgICAgICAgICAgIG1kNSxcbiAgICAgICAgICAgIG9yZGVyXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0cnVlXG4gICAgICAgIF1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdXBsb2FkRmlsZVBhcnRFbmQ7XG4gICAgfTtcblxuICAgIGNvbnN0IHVwbG9hZEVuZGVkID0gYXN5bmMgKCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4gPT4ge1xuICAgICAgY29uc3QgeyB1cGxvYWRGaWxlRW5kIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICAgIHVwbG9hZEZpbGVFbmQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWxlSWQ6IHVwbG9hZEZpbGUuZmlsZUlkXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0cnVlXG4gICAgICAgIF1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdXBsb2FkRmlsZUVuZCA/PyBudWxsO1xuICAgIH07XG5cbiAgICBjb25zdCBjaHVua1BhcnRzID0gbmV3IEFycmF5PHtcbiAgICAgIG9yZGVyOiBudW1iZXI7XG4gICAgICBkYXRhOiBVaW50OEFycmF5O1xuICAgICAgbWQ1OiBzdHJpbmc7XG4gICAgfT4oKTtcblxuICAgIGZvciAoY29uc3QgW2luZGV4LCBjaHVua10gb2YgZW51bWVyYXRlKFxuICAgICAgY2h1bmtzKGVuY3J5cHRlZEZpbGUsIE51bWJlcih1cGxvYWRGaWxlLmZpbGVQYXJ0U2l6ZSkpXG4gICAgKSkge1xuICAgICAgY2h1bmtQYXJ0cy5wdXNoKHtcbiAgICAgICAgb3JkZXI6IGluZGV4ICsgMSxcbiAgICAgICAgZGF0YTogY2h1bmssXG4gICAgICAgIG1kNTogYXdhaXQgbWQ1KGNodW5rKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvZ3Jlc3NQYXJ0czogUmVjb3JkPG51bWJlciwgUHJvZ3Jlc3NFdmVudD4gPSB7fTtcbiAgICBjb25zdCBvblByb2dyZXNzID0gKHBhcnQ6IG51bWJlciwgcHJvZ3Jlc3NFdmVudDogUHJvZ3Jlc3NFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgcHJvZ3Jlc3NQYXJ0c1twYXJ0XSA9IHByb2dyZXNzRXZlbnQ7XG4gICAgICBjb25zdCBjdXJyZW50ID0gT2JqZWN0LnZhbHVlcyhwcm9ncmVzc1BhcnRzKS5yZWR1Y2UoXG4gICAgICAgIChwcnYsIGN1cikgPT4gcHJ2ICsgY3VyLmxvYWRlZCxcbiAgICAgICAgMFxuICAgICAgKTtcbiAgICAgIHVwbG9hZFByb2dyZXNzPy4oe1xuICAgICAgICBwZXJjZW50OiBjdXJyZW50IC8gZW5jcnlwdGVkRmlsZS5ieXRlTGVuZ3RoLFxuICAgICAgICB0b3RhbDogZW5jcnlwdGVkRmlsZS5ieXRlTGVuZ3RoLFxuICAgICAgICBjdXJyZW50XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgYnlQYXJ0ID0gYXN5bmMgKHBhcnQ6IEZpbGVQYXJ0UmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICBjb25zdCBjaHVuayA9IGNodW5rUGFydHMuZmluZChwID0+IHAub3JkZXIgPT09IHBhcnQub3JkZXIpO1xuICAgICAgaWYgKCFjaHVuaykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwYXJ0LmZpZWxkcykpIHtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICBcImZpbGVcIixcbiAgICAgICAgbmV3IEJsb2IoW2NodW5rLmRhdGFdKSxcbiAgICAgICAgYCR7dXBsb2FkRmlsZS5maWxlSWR9LSR7Y2h1bmsub3JkZXJ9YFxuICAgICAgKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYXhpb3MucG9zdChwYXJ0LnVybCwgZm9ybURhdGEsIHtcbiAgICAgICAgICBvblVwbG9hZFByb2dyZXNzOiBwcm9ncmVzc0V2ZW50ID0+XG4gICAgICAgICAgICBvblByb2dyZXNzKHBhcnQub3JkZXIsIHByb2dyZXNzRXZlbnQpLFxuICAgICAgICAgIGNhbmNlbFRva2VuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IHVwbG9hZFBhcnRFbmRlZChjaHVuay5tZDUsIGNodW5rLm9yZGVyKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKChlIGFzIGFueSkucmVzcG9uc2Uuc3RhdHVzID09PSAwKSB7XG4gICAgICAgICAgLy8gVE9ETyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2t5L2lzc3Vlcy8zMDVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGF3YWl0IHByb21pc2VBbGxMaW1pdChcbiAgICAgIDMsXG4gICAgICB1cGxvYWRGaWxlLnBhcnRzLm1hcChwID0+ICgpOiBQcm9taXNlPHZvaWQ+ID0+IGJ5UGFydChwKSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHVwbG9hZEVuZGVkKCk7XG4gIH1cblxuICBhc3luYyB1cGxvYWRGaWxlSW5DbG91ZCh7XG4gICAgZmlsZSxcbiAgICBuYW1lLFxuICAgIGZvbGRlcklkLFxuICAgIGNhbmNlbFRva2VuLFxuICAgIGVuY3J5cHRQcm9ncmVzcyxcbiAgICB1cGxvYWRQcm9ncmVzc1xuICB9OiB7XG4gICAgZmlsZTogZ2xvYmFsVGhpcy5GaWxlIHwgVWludDhBcnJheTtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgY2FuY2VsVG9rZW4/OiBDYW5jZWxUb2tlbjtcbiAgICBmb2xkZXJJZD86IHN0cmluZztcbiAgICBlbmNyeXB0UHJvZ3Jlc3M/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICAgIHVwbG9hZFByb2dyZXNzPzogUHJvZ3Jlc3NDYWxsYmFjaztcbiAgfSk6IFByb21pc2U8VkZpbGVXaXRoRm9sZGVyPiB7XG4gICAgY29uc3QgZmlsZUlkID0gYXdhaXQgdGhpcy51cGxvYWRGaWxlKHtcbiAgICAgIGZpbGUsXG4gICAgICBlbmNyeXB0UHJvZ3Jlc3MsXG4gICAgICB1cGxvYWRQcm9ncmVzcyxcbiAgICAgIGNhbmNlbFRva2VuXG4gICAgfSk7XG4gICAgaWYgKCFmaWxlSWQpIHtcbiAgICAgIHRocm93IGBDYW4ndCB1cGxvYWQgZmlsZWA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNhdmVJbkNsb3VkKHsgZmlsZUlkLCBuYW1lLCBmb2xkZXJJZCB9KTtcbiAgfVxuXG4gIGFzeW5jIGxvZ291dChzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdkZpbGVzQ2FjaGUuY2xlYXIoKTtcbiAgICBmaWxlc0NhY2hlLmNsZWFyKCk7XG4gICAgZm9sZGVyc0NhY2hlLmNsZWFyKCk7XG4gICAgYXdhaXQgc3VwZXIubG9nb3V0KHNlc3Npb25JZCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVGb2xkZXIoe1xuICAgIG5hbWUsXG4gICAgcGFyZW50Rm9sZGVySWRcbiAgfToge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBwYXJlbnRGb2xkZXJJZD86IHN0cmluZyB8IG51bGw7XG4gIH0pOiBQcm9taXNlPEZvbGRlckZ1bGw+IHtcbiAgICBjb25zdCBrZXkgPSBzZWNyZXRzdHJlYW1LZXlnZW4oKTtcbiAgICBjb25zdCBlbmNyeXB0ZWROYW1lID0gYXdhaXQgZW5jcnlwdE5hbWUobmFtZSwgc29kaXVtLnRvX2hleChrZXkpKTtcbiAgICBjb25zdCBlbmNyeXB0ZWRLZXkgPSBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAga2V5LFxuICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICApO1xuICAgIGNvbnN0IHsgY3JlYXRlRm9sZGVyIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBjcmVhdGVGb2xkZXI6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IGVuY3J5cHRlZE5hbWUsXG4gICAgICAgICAgcGFyZW50Rm9sZGVySWQsXG4gICAgICAgICAga2V5OiBzb2RpdW0udG9faGV4KGVuY3J5cHRlZEtleSlcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsRm9sZGVyRnVsbFF1ZXJ5XG4gICAgICBdXG4gICAgfSk7XG4gICAgaWYgKCFjcmVhdGVGb2xkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgY3JlYXRlIGZvbGRlcmApO1xuICAgIH1cbiAgICBjb25zdCBmb2xkZXIgPSBhd2FpdCBncWxGb2xkZXJUb0V4dGVybmFsRm9sZGVyRnVsbChcbiAgICAgIGNyZWF0ZUZvbGRlcixcbiAgICAgIHRoaXMuI2tleXNcbiAgICApO1xuXG4gICAgY29uc3QgdXNlcnMgPVxuICAgICAgZm9sZGVyLnBhcmVudEZvbGRlcj8udXNlcnM/LmZpbHRlcihcbiAgICAgICAgKFt1XSkgPT4gdS5wdWJsaWNLZXkgIT09IHRoaXMuI2tleXMucHVibGljS2V5XG4gICAgICApID8/IFtdO1xuXG4gICAgaWYgKHVzZXJzLmxlbmd0aCkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHVzZXJzLm1hcCgoW3UsIHJpZ2h0c10pID0+XG4gICAgICAgICAgdGhpcy5zaGFyZUZvbGRlcih7XG4gICAgICAgICAgICBmb2xkZXJJZDogZm9sZGVyLmlkLFxuICAgICAgICAgICAgcmlnaHRzLFxuICAgICAgICAgICAgdXNlcklkOiB1LmlkXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9sZGVyO1xuICB9XG5cbiAgYXN5bmMgZm9sZGVyKHtcbiAgICBpZCxcbiAgICBkZWxldGVkXG4gIH06IHtcbiAgICBpZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgZGVsZXRlZD86IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9ID0ge30pOiBQcm9taXNlPEZvbGRlckZ1bGwgfCBudWxsPiB7XG4gICAgY29uc3QgeyBmb2xkZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIGZvbGRlcjogW3sgZGVsZXRlZCwgaWQgfSwgZ3FsRm9sZGVyRnVsbFF1ZXJ5XVxuICAgIH0pO1xuICAgIGlmICghZm9sZGVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGdxbEZvbGRlclRvRXh0ZXJuYWxGb2xkZXJGdWxsKGZvbGRlciwgdGhpcy4ja2V5cyk7XG4gIH1cblxuICBhc3luYyBmaWxlKHsgaWQgfTogeyBpZDogc3RyaW5nIH0pOiBQcm9taXNlPFNlY3JlY3lGaWxlIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZmlsZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgZmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsRmlsZVF1ZXJ5XG4gICAgICBdXG4gICAgfSk7XG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGdxbEZpbGVUb0V4dGVybmFsKGZpbGUsIHRoaXMuI2tleXMpO1xuICB9XG5cbiAgYXN5bmMgdkZpbGUoeyBpZCB9OiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8VkZpbGVXaXRoRm9sZGVyIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgdkZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIHZGaWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICBncWxWRmlsZVdpdGhGb2xkZXJRdWVyeVxuICAgICAgXVxuICAgIH0pO1xuICAgIGlmICghdkZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZ3FsVkZpbGVUb0V4dGVybmFsKHZGaWxlLCB0aGlzLiNrZXlzKSBhcyBQcm9taXNlPFZGaWxlV2l0aEZvbGRlcj47XG4gIH1cblxuICBhc3luYyBtYWlsKHsgaWQgfTogeyBpZDogc3RyaW5nIH0pOiBQcm9taXNlPE1haWwgfCBudWxsPiB7XG4gICAgY29uc3QgeyBtYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICBtYWlsOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICBncWxNYWlsUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghbWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKG1haWwsIHRoaXMuI2tleXMpO1xuICB9XG5cbiAgYXN5bmMgc2hhcmVWRmlsZSh7XG4gICAgdkZpbGVJZCxcbiAgICB1c2VySWQsXG4gICAgcmlnaHRzXG4gIH06IHtcbiAgICB2RmlsZUlkOiBzdHJpbmc7XG4gICAgdXNlcklkOiBzdHJpbmc7XG4gICAgcmlnaHRzOiBSaWdodHM7XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsZXQgdkZpbGUgPSB2RmlsZXNDYWNoZS5nZXQodkZpbGVJZCk7XG5cbiAgICBpZiAoIXZGaWxlKSB7XG4gICAgICBhd2FpdCB0aGlzLnZGaWxlKHsgaWQ6IHZGaWxlSWQgfSk7XG4gICAgICB2RmlsZSA9IHZGaWxlc0NhY2hlLmdldCh2RmlsZUlkKTtcblxuICAgICAgaWYgKCF2RmlsZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdXNlciA9IGF3YWl0IHRoaXMudXNlcih7IHVzZXJJZCwgd2l0aFB1YmxpY0tleTogdHJ1ZSB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWVLZXkgPSBzb2RpdW0udG9faGV4KFxuICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgc29kaXVtLmZyb21faGV4KHZGaWxlLnVzZXJBcHAubmFtZUtleSksXG4gICAgICAgIHVzZXIucHVibGljS2V5LFxuICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgaGlzdG9yeSA9IG5ldyBBcnJheTx7XG4gICAgICBpZDogc3RyaW5nO1xuICAgICAga2V5OiBzdHJpbmc7XG4gICAgfT4oKTtcblxuICAgIGZvciAoY29uc3QgaCBvZiB2RmlsZS5oaXN0b3J5KSB7XG4gICAgICBpZiAoIWgudXNlcikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGhpc3RvcnkucHVzaCh7XG4gICAgICAgIGlkOiBoLmlkLFxuICAgICAgICBrZXk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChoLnVzZXIua2V5KSxcbiAgICAgICAgICAgIHVzZXIucHVibGljS2V5LFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHNoYXJlVkZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHNoYXJlVkZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIHZGaWxlSWQsXG4gICAgICAgICAgdXNlcklkLFxuICAgICAgICAgIHJpZ2h0cyxcbiAgICAgICAgICBuYW1lS2V5LFxuICAgICAgICAgIGhpc3RvcnlcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNoYXJlVkZpbGUgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBzaGFyZWRWRmlsZXMoKTogUHJvbWlzZTxWRmlsZVdpdGhGb2xkZXJbXT4ge1xuICAgIGNvbnN0IHsgc2hhcmVkVkZpbGVzIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICBzaGFyZWRWRmlsZXM6IGdxbFZGaWxlV2l0aEZvbGRlclF1ZXJ5XG4gICAgfSk7XG5cbiAgICBjb25zdCB2RmlsZXMgPSBuZXcgQXJyYXk8VkZpbGVXaXRoRm9sZGVyPigpO1xuXG4gICAgZm9yIChjb25zdCB2RmlsZSBvZiBzaGFyZWRWRmlsZXMpIHtcbiAgICAgIHZGaWxlcy5wdXNoKFxuICAgICAgICAoYXdhaXQgZ3FsVkZpbGVUb0V4dGVybmFsKHZGaWxlLCB0aGlzLiNrZXlzKSkgYXMgVkZpbGVXaXRoRm9sZGVyXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2RmlsZXM7XG4gIH1cblxuICBhc3luYyB2RmlsZXNTaGFyZWRXaXRoTWUoKTogUHJvbWlzZTxWRmlsZVdpdGhGb2xkZXJbXT4ge1xuICAgIGNvbnN0IHsgdkZpbGVzU2hhcmVkV2l0aE1lIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICB2RmlsZXNTaGFyZWRXaXRoTWU6IGdxbFZGaWxlV2l0aEZvbGRlclF1ZXJ5XG4gICAgfSk7XG5cbiAgICBjb25zdCB2RmlsZXMgPSBuZXcgQXJyYXk8VkZpbGVXaXRoRm9sZGVyPigpO1xuXG4gICAgZm9yIChjb25zdCB2RmlsZSBvZiB2RmlsZXNTaGFyZWRXaXRoTWUpIHtcbiAgICAgIHZGaWxlcy5wdXNoKFxuICAgICAgICAoYXdhaXQgZ3FsVkZpbGVUb0V4dGVybmFsKHZGaWxlLCB0aGlzLiNrZXlzKSkgYXMgVkZpbGVXaXRoRm9sZGVyXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2RmlsZXM7XG4gIH1cblxuICBhc3luYyBkZWxldGVkVkZpbGVzKCk6IFByb21pc2U8VkZpbGVbXT4ge1xuICAgIGNvbnN0IHsgZGVsZXRlZFZGaWxlcyB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgZGVsZXRlZFZGaWxlczogZ3FsVkZpbGVRdWVyeVxuICAgIH0pO1xuXG4gICAgY29uc3QgdkZpbGVzID0gbmV3IEFycmF5PFZGaWxlPigpO1xuXG4gICAgZm9yIChjb25zdCB2RmlsZSBvZiBkZWxldGVkVkZpbGVzKSB7XG4gICAgICB2RmlsZXMucHVzaCgoYXdhaXQgZ3FsVkZpbGVUb0V4dGVybmFsKHZGaWxlLCB0aGlzLiNrZXlzKSkgYXMgVkZpbGUpO1xuICAgIH1cblxuICAgIHJldHVybiB2RmlsZXM7XG4gIH1cblxuICBhc3luYyBzaGFyZWRGb2xkZXJzKCk6IFByb21pc2U8Rm9sZGVyW10+IHtcbiAgICBjb25zdCB7IHNoYXJlZEZvbGRlcnMgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIHNoYXJlZEZvbGRlcnM6IGdxbEZvbGRlclF1ZXJ5XG4gICAgfSk7XG5cbiAgICBjb25zdCBmb2xkZXJzID0gbmV3IEFycmF5PEZvbGRlcj4oKTtcblxuICAgIGZvciAoY29uc3QgZm9sZGVyIG9mIHNoYXJlZEZvbGRlcnMpIHtcbiAgICAgIGZvbGRlcnMucHVzaChhd2FpdCBncWxGb2xkZXJUb0V4dGVybmFsKGZvbGRlciwgdGhpcy4ja2V5cykpO1xuICAgIH1cblxuICAgIHJldHVybiBmb2xkZXJzO1xuICB9XG5cbiAgYXN5bmMgZm9sZGVyc1NoYXJlZFdpdGhNZSgpOiBQcm9taXNlPEZvbGRlcltdPiB7XG4gICAgY29uc3QgeyBmb2xkZXJzU2hhcmVkV2l0aE1lIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICBmb2xkZXJzU2hhcmVkV2l0aE1lOiBncWxGb2xkZXJRdWVyeVxuICAgIH0pO1xuXG4gICAgY29uc3QgZm9sZGVycyA9IG5ldyBBcnJheTxGb2xkZXI+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGZvbGRlciBvZiBmb2xkZXJzU2hhcmVkV2l0aE1lKSB7XG4gICAgICBmb2xkZXJzLnB1c2goYXdhaXQgZ3FsRm9sZGVyVG9FeHRlcm5hbChmb2xkZXIsIHRoaXMuI2tleXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9sZGVycztcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZWRGb2xkZXJzKCk6IFByb21pc2U8Rm9sZGVyW10+IHtcbiAgICBjb25zdCB7IGRlbGV0ZWRGb2xkZXJzIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICBkZWxldGVkRm9sZGVyczogZ3FsRm9sZGVyUXVlcnlcbiAgICB9KTtcblxuICAgIGNvbnN0IGZvbGRlcnMgPSBuZXcgQXJyYXk8Rm9sZGVyPigpO1xuXG4gICAgZm9yIChjb25zdCBmb2xkZXIgb2YgZGVsZXRlZEZvbGRlcnMpIHtcbiAgICAgIGZvbGRlcnMucHVzaChhd2FpdCBncWxGb2xkZXJUb0V4dGVybmFsKGZvbGRlciwgdGhpcy4ja2V5cykpO1xuICAgIH1cblxuICAgIHJldHVybiBmb2xkZXJzO1xuICB9XG5cbiAgYXN5bmMgc2hhcmVGb2xkZXIoe1xuICAgIGZvbGRlcklkLFxuICAgIHVzZXJJZCxcbiAgICByaWdodHNcbiAgfToge1xuICAgIGZvbGRlcklkOiBzdHJpbmc7XG4gICAgdXNlcklkOiBzdHJpbmc7XG4gICAgcmlnaHRzOiBSaWdodHM7XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgdGhpcy51c2VyKHsgdXNlcklkLCB3aXRoUHVibGljS2V5OiB0cnVlIH0pO1xuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHsgc2hhcmVGb2xkZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHNoYXJlRm9sZGVyOiBbXG4gICAgICAgIHsgZm9sZGVySWQsIHVzZXJJZCB9LFxuICAgICAgICB7XG4gICAgICAgICAgdkZpbGVzOiB0cnVlLFxuICAgICAgICAgIGZvbGRlcnM6IHRydWVcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2hhcmVGb2xkZXJzOiBTaGFyZUZvbGRlcnNJbnB1dCA9IHtcbiAgICAgIHZGaWxlczogW10sXG4gICAgICBmb2xkZXJzOiBbXVxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IGlkIG9mIHNoYXJlRm9sZGVyLmZvbGRlcnMpIHtcbiAgICAgIGNvbnN0IG5hbWVLZXkgPSBhd2FpdCB0aGlzLnBlckZvbGRlcihpZCwgdXNlci5wdWJsaWNLZXkpO1xuICAgICAgaWYgKG5hbWVLZXkpIHtcbiAgICAgICAgc2hhcmVGb2xkZXJzLmZvbGRlcnMucHVzaChuYW1lS2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGlkIG9mIHNoYXJlRm9sZGVyLnZGaWxlcykge1xuICAgICAgY29uc3QgdkZpbGVJbnB1dCA9IGF3YWl0IHRoaXMucGVyVkZpbGUoaWQsIHVzZXIucHVibGljS2V5KTtcbiAgICAgIGlmICh2RmlsZUlucHV0KSB7XG4gICAgICAgIHNoYXJlRm9sZGVycy52RmlsZXMucHVzaCh2RmlsZUlucHV0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHNoYXJlRm9sZGVyRmluaXNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBzaGFyZUZvbGRlckZpbmlzaDogW1xuICAgICAgICB7XG4gICAgICAgICAgcmlnaHRzLFxuICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICBzaGFyZUZvbGRlcnNcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNoYXJlRm9sZGVyRmluaXNoID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRm9sZGVyKHtcbiAgICBmb2xkZXJJZCxcbiAgICBuYW1lLFxuICAgIGlzRmF2b3JpdGUsXG4gICAgZGVsZXRlZEF0XG4gIH06IHtcbiAgICBmb2xkZXJJZDogc3RyaW5nO1xuICAgIG5hbWU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGlzRmF2b3JpdGU/OiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBkZWxldGVkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8Rm9sZGVyRnVsbD4ge1xuICAgIGxldCBmb2xkZXIgPSBmb2xkZXJzQ2FjaGUuZ2V0KGZvbGRlcklkKTtcbiAgICBpZiAoIWZvbGRlcikge1xuICAgICAgYXdhaXQgdGhpcy5mb2xkZXIoeyBpZDogZm9sZGVySWQgfSk7XG4gICAgICBmb2xkZXIgPSBmb2xkZXJzQ2FjaGUuZ2V0KGZvbGRlcklkKTtcbiAgICAgIGlmICghZm9sZGVyKSB7XG4gICAgICAgIHRocm93IGBDYW4ndCBmaW5kIGZvbGRlciAke2ZvbGRlcklkfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbmFtZSA9IG5hbWVcbiAgICAgID8gZm9sZGVyLnVzZXJBcHA/Lm5hbWVLZXlcbiAgICAgICAgPyBhd2FpdCBlbmNyeXB0TmFtZShuYW1lLCBmb2xkZXIudXNlckFwcC5uYW1lS2V5KVxuICAgICAgICA6IG5hbWVcbiAgICAgIDogbnVsbDtcblxuICAgIGNvbnN0IHsgdXBkYXRlRm9sZGVyIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICB1cGRhdGVGb2xkZXI6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZvbGRlcklkLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgaXNGYXZvcml0ZSxcbiAgICAgICAgICBkZWxldGVkQXRcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsRm9sZGVyRnVsbFF1ZXJ5XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVwZGF0ZUZvbGRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgdXBkYXRlIGZvbGRlclwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3FsRm9sZGVyVG9FeHRlcm5hbEZvbGRlckZ1bGwodXBkYXRlRm9sZGVyLCB0aGlzLiNrZXlzKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZU1haWwoXG4gICAgZGF0YTogTmV3TWFpbCxcbiAgICBjdXN0b21NZXNzYWdlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBtYWlsID0gYXdhaXQgdGhpcy5jcmVhdGVEcmFmdE1haWwoZGF0YSk7XG4gICAgaWYgKCFtYWlsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlbmREcmFmdE1haWwobWFpbC5tYWlsSW50ZWdyaXR5SWQsIGN1c3RvbU1lc3NhZ2UpO1xuICB9XG5cbiAgYXN5bmMgd2FpdGluZ1JlY2VpdmVkTWFpbHMoKTogUHJvbWlzZTxXYWl0aW5nUmVjZWl2ZWRNYWlsW10+IHtcbiAgICBjb25zdCB7IHVzZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICB3YWl0aW5nUmVjZWl2ZWRNYWlsczoge1xuICAgICAgICAgICAgZGF0ZTogdHJ1ZSxcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzQ291bnQ6IHRydWUsXG4gICAgICAgICAgICBzZW5kZXI6IHtcbiAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgICAgICBwdWJsaWNLZXk6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWNpcGllbnRzOiB7XG4gICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgICAgICAgcHVibGljS2V5OiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGVtcG9yYXJ5UmVjaXBpZW50czoge1xuICAgICAgICAgICAgICBlbWFpbDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBnZXQgd2FpdGluZyByZWNlaXZlZCBtYWlsc1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNlci53YWl0aW5nUmVjZWl2ZWRNYWlscy5tYXAobSA9PiAoe1xuICAgICAgaWQ6IGdlbmVyYXRlKCksXG4gICAgICAuLi5tLFxuICAgICAgZGF0ZTogbmV3IERhdGUobS5kYXRlKVxuICAgIH0pKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZURyYWZ0TWFpbChcbiAgICBkcmFmdElkOiBzdHJpbmcsXG4gICAgeyBib2R5LCBzdWJqZWN0LCBmaWxlcywgcmVjaXBpZW50c0lkcywgcmVwbHlUbyB9OiBQYXJ0aWFsPE5ld01haWw+XG4gICk6IFByb21pc2U8RHJhZnRNYWlsIHwgbnVsbD4ge1xuICAgIGNvbnN0IGRyYWZ0cyA9IGF3YWl0IHRoaXMuZHJhZnRNYWlscygpO1xuICAgIGNvbnN0IGRyYWZ0ID0gZHJhZnRzLmZpbmQoZCA9PiBkLm1haWxJbnRlZ3JpdHlJZCA9PT0gZHJhZnRJZCk7XG4gICAgaWYgKCFkcmFmdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRyYWZ0ICR7ZHJhZnRJZH1gKTtcbiAgICB9XG4gICAgbGV0IGhhc2hLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIGxldCBoYXNoOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBpZiAoYm9keSB8fCBzdWJqZWN0KSB7XG4gICAgICBoYXNoS2V5ID0gc29kaXVtLnJhbmRvbWJ5dGVzX2J1ZihcbiAgICAgICAgc29kaXVtLmNyeXB0b19nZW5lcmljaGFzaF9LRVlCWVRFUyxcbiAgICAgICAgXCJoZXhcIlxuICAgICAgKTtcbiAgICAgIGhhc2ggPSBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoKFxuICAgICAgICBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoX0JZVEVTLFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7IGJvZHksIHN1YmplY3QgfSksXG4gICAgICAgIGhhc2hLZXksXG4gICAgICAgIFwiaGV4XCJcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHNlbmRlckZpbGVzID0gbmV3IEFycmF5PE1haWxGaWxlSW5wdXQ+KCk7XG4gICAgaWYgKGZpbGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGYgb2YgZmlsZXMpIHtcbiAgICAgICAgbGV0IGZpbGUgPSBmaWxlc0NhY2hlLmdldChmLmlkKTtcbiAgICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5maWxlKHsgaWQ6IGYuaWQgfSk7XG4gICAgICAgICAgZmlsZSA9IGZpbGVzQ2FjaGUuZ2V0KGYuaWQpO1xuICAgICAgICAgIGlmICghZmlsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7Zi5uYW1lfSAoJHtmLmlkfSkgZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZmlsZS51c2VyKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgc2VuZGVyRmlsZXMucHVzaCh7XG4gICAgICAgICAgaWQ6IGZpbGUuaWQsXG4gICAgICAgICAgZmlsZUtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhmaWxlLnVzZXIua2V5KSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICAgICAgbmFtZTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhmLm5hbWUpLFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHVwZGF0ZURyYWZ0TWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgdXBkYXRlRHJhZnRNYWlsOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBkcmFmdElkLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHJlY2lwaWVudHNJZHMsXG4gICAgICAgICAgcmVwbHlUbyxcbiAgICAgICAgICBib2R5OiBib2R5XG4gICAgICAgICAgICA/IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhib2R5KSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgc3ViamVjdDogc3ViamVjdFxuICAgICAgICAgICAgPyBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoc3ViamVjdCksXG4gICAgICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIHNlbmRlckZpbGVzLFxuICAgICAgICAgIGhhc2gsXG4gICAgICAgICAgaGFzaEtleVxuICAgICAgICB9LFxuICAgICAgICBncWxNYWlsUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXBkYXRlRHJhZnRNYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwoXG4gICAgICB1cGRhdGVEcmFmdE1haWwsXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKSBhcyBEcmFmdE1haWw7XG4gIH1cblxuICBhc3luYyBkZWxldGVEcmFmdE1haWwoZHJhZnRJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVEcmFmdE1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGRlbGV0ZURyYWZ0TWFpbDogW1xuICAgICAgICB7XG4gICAgICAgICAgZHJhZnRJZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG4gICAgcmV0dXJuIGRlbGV0ZURyYWZ0TWFpbCA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVZGaWxlU2hhcmluZyh7XG4gICAgdkZpbGVJZCxcbiAgICB1c2VySWRcbiAgfToge1xuICAgIHZGaWxlSWQ6IHN0cmluZztcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlVkZpbGVTaGFyaW5nIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBkZWxldGVWRmlsZVNoYXJpbmc6IFtcbiAgICAgICAge1xuICAgICAgICAgIHZGaWxlSWQsXG4gICAgICAgICAgdXNlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcbiAgICByZXR1cm4gZGVsZXRlVkZpbGVTaGFyaW5nO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRm9sZGVyU2hhcmluZyh7XG4gICAgZm9sZGVySWQsXG4gICAgdXNlcklkXG4gIH06IHtcbiAgICBmb2xkZXJJZDogc3RyaW5nO1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVGb2xkZXJTaGFyaW5nIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBkZWxldGVGb2xkZXJTaGFyaW5nOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmb2xkZXJJZCxcbiAgICAgICAgICB1c2VySWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVGb2xkZXJTaGFyaW5nO1xuICB9XG5cbiAgYXN5bmMgZHVwbGljYXRlVkZpbGUoe1xuICAgIGZpbGVJZCxcbiAgICBmb2xkZXJJZCxcbiAgICBjdXN0b21OYW1lXG4gIH06IHtcbiAgICBmaWxlSWQ6IHN0cmluZztcbiAgICBmb2xkZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgY3VzdG9tTmFtZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsZXQgZmlsZSA9IHZGaWxlc0NhY2hlLmdldChmaWxlSWQpO1xuICAgIGlmICghZmlsZSkge1xuICAgICAgYXdhaXQgdGhpcy52RmlsZSh7IGlkOiBmaWxlSWQgfSk7XG4gICAgICBmaWxlID0gdkZpbGVzQ2FjaGUuZ2V0KGZpbGVJZCk7XG4gICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICgke2ZpbGVJZH0pIGRvZXMgbm90IGV4aXN0c2ApO1xuICAgICAgfVxuICAgIH1cbiAgICBjdXN0b21OYW1lID0gY3VzdG9tTmFtZVxuICAgICAgPyBhd2FpdCBlbmNyeXB0TmFtZShjdXN0b21OYW1lLCBmaWxlLnVzZXJBcHAubmFtZUtleSlcbiAgICAgIDogbnVsbDtcblxuICAgIGNvbnN0IHsgZHVwbGljYXRlVkZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGR1cGxpY2F0ZVZGaWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlSWQsXG4gICAgICAgICAgZm9sZGVySWQsXG4gICAgICAgICAgY3VzdG9tTmFtZVxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZHVwbGljYXRlVkZpbGU7XG4gIH1cblxuICBhc3luYyBkZWxldGVGb2xkZXJDbG91ZFRyYXNoKHtcbiAgICBpZHNcbiAgfToge1xuICAgIGlkczogQXJyYXk8c3RyaW5nPjtcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlRm9sZGVyQ2xvdWRUcmFzaCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgZGVsZXRlRm9sZGVyQ2xvdWRUcmFzaDogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRzXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcbiAgICByZXR1cm4gZGVsZXRlRm9sZGVyQ2xvdWRUcmFzaCA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVZGaWxlQ2xvdWRUcmFzaCh7XG4gICAgaWRzXG4gIH06IHtcbiAgICBpZHM6IEFycmF5PHN0cmluZz47XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRlbGV0ZVZGaWxlQ2xvdWRUcmFzaCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgZGVsZXRlVkZpbGVDbG91ZFRyYXNoOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZHNcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVWRmlsZUNsb3VkVHJhc2ggPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBkZWxldGVNYWlsVHJhc2goeyBpZHMgfTogeyBpZHM6IEFycmF5PHN0cmluZz4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlTWFpbFRyYXNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBkZWxldGVNYWlsVHJhc2g6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkc1xuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG4gICAgcmV0dXJuIGRlbGV0ZU1haWxUcmFzaDtcbiAgfVxuXG4gIGFzeW5jIGVtcHR5TWFpbFRyYXNoKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZW1wdHlNYWlsVHJhc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGVtcHR5TWFpbFRyYXNoOiB0cnVlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW1wdHlNYWlsVHJhc2ggPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBlbXB0eUNsb3VkVHJhc2goKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBlbXB0eUNsb3VkVHJhc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGVtcHR5Q2xvdWRUcmFzaDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVtcHR5Q2xvdWRUcmFzaCA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIHJlY292ZXJGaWxlKHsgZmlsZUlkIH06IHsgZmlsZUlkOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgcmVjb3ZlckZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHJlY292ZXJGaWxlOiBbeyBmaWxlSWQgfSwgdHJ1ZV1cbiAgICB9KTtcblxuICAgIHJldHVybiByZWNvdmVyRmlsZTtcbiAgfVxuXG4gIGFzeW5jIHJlY292ZXJGb2xkZXIoeyBpZCB9OiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgcmVjb3ZlckZvbGRlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgcmVjb3ZlckZvbGRlcjogW3sgaWQgfSwgdHJ1ZV1cbiAgICB9KTtcblxuICAgIHJldHVybiByZWNvdmVyRm9sZGVyID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgcmVjb3Zlck1haWwoeyBtYWlsSWQgfTogeyBtYWlsSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyByZWNvdmVyTWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgcmVjb3Zlck1haWw6IFt7IG1haWxJZCB9LCB0cnVlXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlY292ZXJNYWlsO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRmlsZSh7XG4gICAgZmlsZUlkLFxuICAgIHZGaWxlSWRcbiAgfToge1xuICAgIGZpbGVJZDogc3RyaW5nO1xuICAgIHZGaWxlSWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlRmlsZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgZGVsZXRlRmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIHZGaWxlSWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVGaWxlO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlVkZpbGUoeyBmaWxlSWQgfTogeyBmaWxlSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVWRmlsZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgZGVsZXRlVkZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG4gICAgcmV0dXJuIGRlbGV0ZVZGaWxlO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlTWFpbCh7IG1haWxJZCB9OiB7IG1haWxJZDogc3RyaW5nIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRlbGV0ZU1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGRlbGV0ZU1haWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIG1haWxJZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG4gICAgcmV0dXJuIGRlbGV0ZU1haWw7XG4gIH1cblxuICBhc3luYyBzYXZlSW5DbG91ZCh7XG4gICAgZmlsZUlkLFxuICAgIG5hbWUsXG4gICAgZm9sZGVySWRcbiAgfToge1xuICAgIGZpbGVJZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBmb2xkZXJJZD86IHN0cmluZztcbiAgfSk6IFByb21pc2U8VkZpbGVXaXRoRm9sZGVyPiB7XG4gICAgaWYgKGZvbGRlcklkICYmICFmb2xkZXJzQ2FjaGUuaGFzKGZvbGRlcklkKSkge1xuICAgICAgYXdhaXQgdGhpcy5mb2xkZXIoeyBpZDogZm9sZGVySWQgfSk7XG4gICAgICBpZiAoIWZvbGRlcnNDYWNoZS5oYXMoZm9sZGVySWQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGZvbGRlciAke2ZvbGRlcklkfSBkb2VzIG5vdCBleGlzdHNgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQga2V5ID0gXCJcIjtcblxuICAgIGNvbnN0IGZpbGUgPSBmaWxlc0NhY2hlLmdldChmaWxlSWQpO1xuXG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICBhd2FpdCB0aGlzLmZpbGUoeyBpZDogZmlsZUlkIH0pO1xuICAgICAgY29uc3QgZmlsZSA9IGZpbGVzQ2FjaGUuZ2V0KGZpbGVJZCkgPz8gbnVsbDtcbiAgICAgIGlmICghZmlsZSkge1xuICAgICAgICBjb25zdCByZWNlaXZlZE1haWxzID0gYXdhaXQgdGhpcy5yZWNlaXZlZE1haWxzKCk7XG4gICAgICAgIGNvbnN0IG1haWwgPSByZWNlaXZlZE1haWxzLmZpbmQobSA9PlxuICAgICAgICAgIG0uZmlsZXMuc29tZShmID0+IGYuaWQgPT09IGZpbGVJZClcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIW1haWwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IGZpbmQgbWFpbCB3aXRoIHRoZSBmaWxlICR7ZmlsZUlkfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZU1haWwgPSBtYWlsLmZpbGVzLmZpbmQoZiA9PiBmLmlkID09PSBmaWxlSWQpO1xuXG4gICAgICAgIGlmICghZmlsZU1haWwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IGZpbmQgbWFpbCB3aXRoIHRoZSBmaWxlICR7ZmlsZUlkfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZUtleSA9IGRlY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgc29kaXVtLmZyb21faGV4KGZpbGVNYWlsLmtleSksXG4gICAgICAgICAgbWFpbC5zZW5kZXIucHVibGljS2V5LFxuICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICApO1xuXG4gICAgICAgIGtleSA9IHNvZGl1bS50b19oZXgoZmlsZUtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIWZpbGUudXNlcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgZXJyb3IgMVwiKTtcbiAgICAgICAgfVxuICAgICAgICBrZXkgPSBmaWxlLnVzZXIua2V5O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWZpbGUudXNlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVycm9yIDJcIik7XG4gICAgICB9XG4gICAgICBrZXkgPSBmaWxlLnVzZXIua2V5O1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09IFwiXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgZXJyb3IgM1wiKTtcbiAgICB9XG5cbiAgICBrZXkgPSBzb2RpdW0udG9faGV4KFxuICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgc29kaXVtLmZyb21faGV4KGtleSksXG4gICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgbmFtZUtleSA9IHNlY3JldHN0cmVhbUtleWdlbigpO1xuICAgIGNvbnN0IGVuY3J5cHRlZE5hbWUgPSBhd2FpdCBlbmNyeXB0TmFtZShuYW1lLCBzb2RpdW0udG9faGV4KG5hbWVLZXkpKTtcbiAgICBjb25zdCBlbmNyeXB0ZWROYW1lS2V5ID0gc29kaXVtLnRvX2hleChcbiAgICAgIGVuY3J5cHRDcnlwdG9Cb3gobmFtZUtleSwgdGhpcy4ja2V5cy5wdWJsaWNLZXksIHRoaXMuI2tleXMucHJpdmF0ZUtleSlcbiAgICApO1xuXG4gICAgY29uc3QgeyBzYXZlSW5DbG91ZCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgc2F2ZUluQ2xvdWQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgZm9sZGVySWQsXG4gICAgICAgICAgZmlsZW5hbWU6IGVuY3J5cHRlZE5hbWUsXG4gICAgICAgICAgbmFtZUtleTogZW5jcnlwdGVkTmFtZUtleVxuICAgICAgICB9LFxuICAgICAgICBncWxWRmlsZVdpdGhGb2xkZXJRdWVyeVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgY29uc3QgdkZpbGUgPSAoYXdhaXQgZ3FsVkZpbGVUb0V4dGVybmFsKFxuICAgICAgc2F2ZUluQ2xvdWQsXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKSkgYXMgVkZpbGVXaXRoRm9sZGVyO1xuXG4gICAgY29uc3QgbWUgPSB2RmlsZS5mb2xkZXIudXNlcnMuZmluZChcbiAgICAgIChbdV0pID0+IHUucHVibGljS2V5ID09PSB0aGlzLiNrZXlzLnB1YmxpY0tleVxuICAgICk7XG5cbiAgICBpZiAobWUgJiYgW1wiYWRtaW5cIiwgXCJ3cml0ZVwiXS5pbmNsdWRlcyhtZVsxXSkpIHtcbiAgICAgIGNvbnN0IG90aGVycyA9IHZGaWxlLmZvbGRlci51c2Vycy5maWx0ZXIoXG4gICAgICAgIChbdV0pID0+IHUucHVibGljS2V5ICE9PSB0aGlzLiNrZXlzLnB1YmxpY0tleVxuICAgICAgKTtcblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG90aGVycy5tYXAoKFt1LCByaWdodHNdKSA9PlxuICAgICAgICAgIHRoaXMuc2hhcmVWRmlsZSh7XG4gICAgICAgICAgICB2RmlsZUlkOiB2RmlsZS5pZCxcbiAgICAgICAgICAgIHJpZ2h0cyxcbiAgICAgICAgICAgIHVzZXJJZDogdS5pZFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZGaWxlO1xuICB9XG5cbiAgYXN5bmMgc2VuZERyYWZ0TWFpbChcbiAgICBkcmFmdElkOiBzdHJpbmcsXG4gICAgY3VzdG9tTWVzc2FnZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZHJhZnRzID0gYXdhaXQgdGhpcy5kcmFmdE1haWxzKCk7XG5cbiAgICBjb25zdCBkcmFmdCA9IGRyYWZ0cy5maW5kKGQgPT4gZC5tYWlsSW50ZWdyaXR5SWQgPT09IGRyYWZ0SWQpO1xuICAgIGlmICghZHJhZnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgcmVjaXBpZW50cyA9IG5ldyBBcnJheTxNYWlsUmVjaXBpZW50SW5wdXQ+KCk7XG5cbiAgICBjb25zdCB0ZW1wb3JhcnlSZWNpcGllbnRzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgIGZvciAoY29uc3QgeyBlbWFpbCB9IG9mIGRyYWZ0LnRlbXBvcmFyeVJlY2lwaWVudHMpIHtcbiAgICAgIGlmICghZW1haWwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMuX2VhY2hVc2VyKFxuICAgICAgICBkcmFmdC5maWxlcyxcbiAgICAgICAgZHJhZnQuc3ViamVjdCxcbiAgICAgICAgZHJhZnQuYm9keSxcbiAgICAgICAgZW1haWxcbiAgICAgICk7XG5cbiAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgdGVtcG9yYXJ5UmVjaXBpZW50cy5wdXNoKGVtYWlsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY2lwaWVudHMucHVzaChpbnB1dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB7IGlkIH0gb2YgZHJhZnQucmVjaXBpZW50cykge1xuICAgICAgY29uc3QgaW5wdXQgPSBhd2FpdCB0aGlzLl9lYWNoVXNlcihcbiAgICAgICAgZHJhZnQuZmlsZXMsXG4gICAgICAgIGRyYWZ0LnN1YmplY3QsXG4gICAgICAgIGRyYWZ0LmJvZHksXG4gICAgICAgIGlkXG4gICAgICApO1xuXG4gICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgIHRlbXBvcmFyeVJlY2lwaWVudHMucHVzaChpZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWNpcGllbnRzLnB1c2goaW5wdXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2VuZERyYWZ0TWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgc2VuZERyYWZ0TWFpbDogW1xuICAgICAgICB7XG4gICAgICAgICAgdGVtcG9yYXJ5UmVjaXBpZW50cyxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIGRyYWZ0TWFpbElkOiBkcmFmdC5tYWlsSW50ZWdyaXR5SWQsXG4gICAgICAgICAgY3VzdG9tTWVzc2FnZVxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2VuZERyYWZ0TWFpbCA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIHNlbmRXYWl0aW5nRW1haWxzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIFRPRE8gb3B0aSB0aGlzXG4gICAgY29uc3QgbWFpbHMgPSBhd2FpdCB0aGlzLnNlbnRNYWlscygpO1xuICAgIGNvbnN0IGZpbHRlcmVkID0gbWFpbHMuZmlsdGVyKG0gPT4gbS50ZW1wb3JhcnlSZWNpcGllbnRzLmxlbmd0aCA+IDApO1xuXG4gICAgZm9yIChjb25zdCBtYWlsIG9mIGZpbHRlcmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IHsgZW1haWwgfSBvZiBtYWlsLnRlbXBvcmFyeVJlY2lwaWVudHMpIHtcbiAgICAgICAgaWYgKCFlbWFpbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5fZWFjaFVzZXIoXG4gICAgICAgICAgbWFpbC5maWxlcyxcbiAgICAgICAgICBtYWlsLnN1YmplY3QsXG4gICAgICAgICAgbWFpbC5ib2R5LFxuICAgICAgICAgIGVtYWlsXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgICAgICAgc2VuZE9uZU1haWw6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1haWxJbnRlZ3JpdHlJZDogbWFpbC5tYWlsSW50ZWdyaXR5SWQsXG4gICAgICAgICAgICAgICAgcmVjaXBpZW50OiBpbnB1dFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlRHJhZnRNYWlsKHtcbiAgICBib2R5LFxuICAgIHN1YmplY3QsXG4gICAgZmlsZXMsXG4gICAgcmVjaXBpZW50c0lkcyxcbiAgICByZXBseVRvXG4gIH06IE5ld01haWwpOiBQcm9taXNlPERyYWZ0TWFpbCB8IG51bGw+IHtcbiAgICBjb25zdCBoYXNoS2V5ID0gc29kaXVtLnJhbmRvbWJ5dGVzX2J1ZihcbiAgICAgIHNvZGl1bS5jcnlwdG9fZ2VuZXJpY2hhc2hfS0VZQllURVMsXG4gICAgICBcImhleFwiXG4gICAgKTtcbiAgICBjb25zdCBoYXNoID0gc29kaXVtLmNyeXB0b19nZW5lcmljaGFzaChcbiAgICAgIHNvZGl1bS5jcnlwdG9fZ2VuZXJpY2hhc2hfQllURVMsXG4gICAgICBKU09OLnN0cmluZ2lmeSh7IGJvZHksIHN1YmplY3QgfSksXG4gICAgICBoYXNoS2V5LFxuICAgICAgXCJoZXhcIlxuICAgICk7XG4gICAgY29uc3Qgc2VuZGVyRmlsZXMgPSBuZXcgQXJyYXk8TWFpbEZpbGVJbnB1dD4oKTtcbiAgICBmb3IgKGNvbnN0IGYgb2YgZmlsZXMpIHtcbiAgICAgIGxldCBmaWxlID0gZmlsZXNDYWNoZS5nZXQoZi5pZCk7XG4gICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5maWxlKHsgaWQ6IGYuaWQgfSk7XG4gICAgICAgIGZpbGUgPSBmaWxlc0NhY2hlLmdldChmLmlkKTtcbiAgICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7Zi5uYW1lfSAoJHtmLmlkfSkgZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghZmlsZS51c2VyKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgc2VuZGVyRmlsZXMucHVzaCh7XG4gICAgICAgIGlkOiBmaWxlLmlkLFxuICAgICAgICBmaWxlS2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoZmlsZS51c2VyLmtleSksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgbmFtZTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGYubmFtZSksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBjcmVhdGVEcmFmdE1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGNyZWF0ZURyYWZ0TWFpbDogW1xuICAgICAgICB7XG4gICAgICAgICAgcmVjaXBpZW50czogcmVjaXBpZW50c0lkcyxcbiAgICAgICAgICByZXBseVRvLFxuICAgICAgICAgIGJvZHk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoYm9keSksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIHN1YmplY3Q6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoc3ViamVjdCksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIHNlbmRlckZpbGVzLFxuICAgICAgICAgIGhhc2gsXG4gICAgICAgICAgaGFzaEtleVxuICAgICAgICB9LFxuICAgICAgICBncWxNYWlsUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghY3JlYXRlRHJhZnRNYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwoXG4gICAgICBjcmVhdGVEcmFmdE1haWwsXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKSBhcyBEcmFmdE1haWw7XG4gIH1cblxuICBhc3luYyBmaWxlQ29udGVudCh7XG4gICAgZmlsZUlkLFxuICAgIG9uRG93bmxvYWRQcm9ncmVzcyxcbiAgICBwcm9ncmVzc0RlY3J5cHQsXG4gICAgYWJvcnRcbiAgfToge1xuICAgIGZpbGVJZDogc3RyaW5nO1xuICAgIG9uRG93bmxvYWRQcm9ncmVzcz86IChwcm9ncmVzczogRG93bmxvYWRQcm9ncmVzcykgPT4gdm9pZDtcbiAgICBwcm9ncmVzc0RlY3J5cHQ/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICAgIGFib3J0PzogQWJvcnRDb250cm9sbGVyO1xuICB9KTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gICAgY29uc3QgeyBmaWxlQ29udGVudCB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgZmlsZUNvbnRlbnQ6IFtcbiAgICAgICAgeyBmaWxlSWQgfSxcbiAgICAgICAge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgXCIuLi5vbiBGaWxlQ29udGVudENsb3VkXCI6IHtcbiAgICAgICAgICAgIHBhcnRzOiB7XG4gICAgICAgICAgICAgIGNvbnRlbnRVcmw6IHRydWUsXG4gICAgICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgICAgICBtZDU6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBrZXk6IHRydWUsXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHRydWUsXG4gICAgICAgICAgICB0b3RhbFNpemU6IHRydWUsXG4gICAgICAgICAgICBtZDU6IHRydWUsXG4gICAgICAgICAgICBtZDVFbmNyeXB0ZWQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRmlsZUNvbnRlbnRSZWNlaXZlZE1haWxcIjoge1xuICAgICAgICAgICAgcGFydHM6IHtcbiAgICAgICAgICAgICAgY29udGVudFVybDogdHJ1ZSxcbiAgICAgICAgICAgICAgb3JkZXI6IHRydWUsXG4gICAgICAgICAgICAgIG1kNTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtleTogdHJ1ZSxcbiAgICAgICAgICAgIHNlbmRlclB1YmxpY0tleTogdHJ1ZSxcbiAgICAgICAgICAgIHRvdGFsU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1kNTogdHJ1ZSxcbiAgICAgICAgICAgIG1kNUVuY3J5cHRlZDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBGaWxlQ29udGVudFNlbnRNYWlsXCI6IHtcbiAgICAgICAgICAgIHBhcnRzOiB7XG4gICAgICAgICAgICAgIGNvbnRlbnRVcmw6IHRydWUsXG4gICAgICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgICAgICBtZDU6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBrZXk6IHRydWUsXG4gICAgICAgICAgICB0b3RhbFNpemU6IHRydWUsXG4gICAgICAgICAgICBtZDU6IHRydWUsXG4gICAgICAgICAgICBtZDVFbmNyeXB0ZWQ6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZmlsZUNvbnRlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAke2ZpbGVJZH0gZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvZ3Jlc3NQYXJ0czogUmVjb3JkPG51bWJlciwgRG93bmxvYWRQcm9ncmVzcz4gPSB7fTtcbiAgICBjb25zdCBvblByb2dyZXNzID0gKFxuICAgICAgcGFydDogbnVtYmVyLFxuICAgICAgcHJvZ3Jlc3NFdmVudDogRG93bmxvYWRQcm9ncmVzc1xuICAgICk6IHZvaWQgPT4ge1xuICAgICAgcHJvZ3Jlc3NQYXJ0c1twYXJ0XSA9IHByb2dyZXNzRXZlbnQ7XG4gICAgICBjb25zdCB0cmFuc2ZlcnJlZEJ5dGVzID0gT2JqZWN0LnZhbHVlcyhwcm9ncmVzc1BhcnRzKS5yZWR1Y2UoXG4gICAgICAgIChwcnYsIGN1cikgPT4gcHJ2ICsgY3VyLnRyYW5zZmVycmVkQnl0ZXMsXG4gICAgICAgIDBcbiAgICAgICk7XG4gICAgICBjb25zdCB0b3RhbEJ5dGVzID0gTnVtYmVyKGZpbGVDb250ZW50LnRvdGFsU2l6ZSk7XG4gICAgICBvbkRvd25sb2FkUHJvZ3Jlc3M/Lih7XG4gICAgICAgIHBlcmNlbnQ6IHRyYW5zZmVycmVkQnl0ZXMgLyB0b3RhbEJ5dGVzLFxuICAgICAgICB0b3RhbEJ5dGVzLFxuICAgICAgICB0cmFuc2ZlcnJlZEJ5dGVzXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcGFydHMgPSBuZXcgQXJyYXk8eyBkYXRhOiBVaW50OEFycmF5OyBvcmRlcjogbnVtYmVyIH0+KCk7XG5cbiAgICBjb25zdCBieVBhcnQgPSBhc3luYyAocGFydDogRmlsZUNvbnRlbnRQYXJ0KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBidWYgPSBuZXcgVWludDhBcnJheShcbiAgICAgICAgYXdhaXQga3lcbiAgICAgICAgICAuZ2V0KHBhcnQuY29udGVudFVybCwge1xuICAgICAgICAgICAgb25Eb3dubG9hZFByb2dyZXNzOiBwciA9PiBvblByb2dyZXNzKHBhcnQub3JkZXIsIHByKSxcbiAgICAgICAgICAgIHNpZ25hbDogYWJvcnQ/LnNpZ25hbFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmFycmF5QnVmZmVyKClcbiAgICAgICk7XG4gICAgICBjb25zdCBtZDVQYXJ0ID0gYXdhaXQgbWQ1KGJ1Zik7XG4gICAgICBpZiAobWQ1UGFydCAhPT0gcGFydC5tZDUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG1kNSBmb3IgcGFydCAke3BhcnQub3JkZXJ9IG9mIGZpbGUgJHtmaWxlSWR9YCk7XG4gICAgICB9XG4gICAgICBwYXJ0cy5wdXNoKHtcbiAgICAgICAgZGF0YTogYnVmLFxuICAgICAgICBvcmRlcjogcGFydC5vcmRlclxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGF3YWl0IHByb21pc2VBbGxMaW1pdChcbiAgICAgIDMsXG4gICAgICBmaWxlQ29udGVudC5wYXJ0cy5tYXAocCA9PiAoKTogUHJvbWlzZTx2b2lkPiA9PiBieVBhcnQocCkpXG4gICAgKTtcblxuICAgIGNvbnN0IGVuY3J5cHRlZENvbnRlbnQgPSBjb25jYXRlbmF0ZShcbiAgICAgIC4uLnBhcnRzLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgLSBiLm9yZGVyKS5tYXAocCA9PiBwLmRhdGEpXG4gICAgKTtcblxuICAgIC8vIGNvbnN0IG1kNUVuY3J5cHRlZCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKG1kNShvZihlbmNyeXB0ZWRDb250ZW50KSkpO1xuICAgIGNvbnN0IG1kNUVuY3J5cHRlZCA9IGF3YWl0IG1kNShlbmNyeXB0ZWRDb250ZW50KTtcblxuICAgIGlmIChtZDVFbmNyeXB0ZWQgIT09IGZpbGVDb250ZW50Lm1kNUVuY3J5cHRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbmNyeXB0ZWQgY29udGVudCBkb2VzIG5vdCBtYXRjaGApO1xuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IGRlY3J5cHRDcnlwdG9Cb3goXG4gICAgICBzb2RpdW0uZnJvbV9oZXgoZmlsZUNvbnRlbnQua2V5KSxcbiAgICAgIGZpbGVDb250ZW50Ll9fdHlwZW5hbWUgPT09IFwiRmlsZUNvbnRlbnRSZWNlaXZlZE1haWxcIlxuICAgICAgICA/IGZpbGVDb250ZW50LnNlbmRlclB1YmxpY0tleVxuICAgICAgICA6IGZpbGVDb250ZW50Ll9fdHlwZW5hbWUgPT09IFwiRmlsZUNvbnRlbnRDbG91ZFwiXG4gICAgICAgID8gZmlsZUNvbnRlbnQucHVibGljS2V5XG4gICAgICAgIDogdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICApO1xuXG4gICAgLy8gVE9ETyBhZGQgYWJvcnRcbiAgICBjb25zdCBzcmMgPSBhd2FpdCBkZWNyeXB0KGtleSwgZW5jcnlwdGVkQ29udGVudCwgcHJvZ3Jlc3NEZWNyeXB0KTtcblxuICAgIC8vIGNvbnN0IG1kNUNvbnRlbnQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShtZDUob2Yoc3JjKSkpO1xuICAgIGNvbnN0IG1kNUNvbnRlbnQgPSBhd2FpdCBtZDUoc3JjKTtcblxuICAgIGlmIChtZDVDb250ZW50ICE9PSBmaWxlQ29udGVudC5tZDUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29udGVudCBkb2VzIG5vdCBtYXRjaGApO1xuICAgIH1cblxuICAgIHJldHVybiB1bmNvbXByZXNzKHNyYyk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVGaWxlKHtcbiAgICBmaWxlSWQsXG4gICAgZmlsZW5hbWUsXG4gICAgaXNGYXZvcml0ZSxcbiAgICBkZWxldGVkQXRcbiAgfToge1xuICAgIGZpbGVJZDogc3RyaW5nO1xuICAgIGZpbGVuYW1lPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBpc0Zhdm9yaXRlPzogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgZGVsZXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFZGaWxlPiB7XG4gICAgY29uc3QgZmlsZSA9IHZGaWxlc0NhY2hlLmdldChmaWxlSWQpO1xuICAgIGlmICghZmlsZSkge1xuICAgICAgdGhyb3cgYENhbid0IGZpbmQgZmlsZSAke2ZpbGVJZH1gO1xuICAgIH1cblxuICAgIGNvbnN0IGVuY3J5cHRlZE5hbWUgPSBmaWxlbmFtZVxuICAgICAgPyBhd2FpdCBlbmNyeXB0TmFtZShmaWxlbmFtZSwgZmlsZS51c2VyQXBwLm5hbWVLZXkpXG4gICAgICA6IG51bGw7XG5cbiAgICBjb25zdCB7IHVwZGF0ZUZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHVwZGF0ZUZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBmaWxlbmFtZTogZW5jcnlwdGVkTmFtZSxcbiAgICAgICAgICBpc0Zhdm9yaXRlLFxuICAgICAgICAgIGRlbGV0ZWRBdFxuICAgICAgICB9LFxuICAgICAgICBncWxWRmlsZVF1ZXJ5XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVwZGF0ZUZpbGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IHVwZGF0ZSBmaWxlXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBncWxWRmlsZVRvRXh0ZXJuYWwodXBkYXRlRmlsZSwgdGhpcy4ja2V5cyk7XG4gIH1cblxuICBhc3luYyByZWFkTWFpbCh7IG1haWxJZCB9OiB7IG1haWxJZDogc3RyaW5nIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IHJlYWRNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICByZWFkTWFpbDogW3sgbWFpbElkIH0sIHRydWVdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVhZE1haWwgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyB1bnJlYWRNYWlsKHsgbWFpbElkIH06IHsgbWFpbElkOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgdW5yZWFkTWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgdW5yZWFkTWFpbDogW3sgbWFpbElkIH0sIHRydWVdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdW5yZWFkTWFpbCA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGFwcFNldHRpbmdzKCk6IFByb21pc2U8VXNlckFwcFNldHRpbmdzIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgdXNlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgdXNlcjogW1xuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIGFwcFNldHRpbmdzOiB7XG4gICAgICAgICAgICBhdXRvRGlzY29ubmVjdERlbGF5OiB0cnVlLFxuICAgICAgICAgICAgY2xvdWRGaWxlRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICAgIGNsb3VkRm9sZGVyRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICAgIGhpc3RvcnlGaWxlRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICAgIGhpc3RvcnlNYXhGaWxlQ291bnQ6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzZXIuYXBwU2V0dGluZ3MgPz8gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUFwcFNldHRpbmdzKFxuICAgIHNldHRpbmdzOiBQYXJ0aWFsPFVzZXJBcHBTZXR0aW5ncz5cbiAgKTogUHJvbWlzZTxVc2VyQXBwU2V0dGluZ3M+IHtcbiAgICBjb25zdCB7IHVwZGF0ZUFwcFNldHRpbmdzIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICB1cGRhdGVBcHBTZXR0aW5nczogW1xuICAgICAgICBzZXR0aW5ncyxcbiAgICAgICAge1xuICAgICAgICAgIGF1dG9EaXNjb25uZWN0RGVsYXk6IHRydWUsXG4gICAgICAgICAgY2xvdWRGaWxlRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICBjbG91ZEZvbGRlckRheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgaGlzdG9yeUZpbGVEYXlzRm9yRGVsZXRlOiB0cnVlLFxuICAgICAgICAgIGhpc3RvcnlNYXhGaWxlQ291bnQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVwZGF0ZUFwcFNldHRpbmdzO1xuICB9XG5cbiAgYXN5bmMgcmVjZWl2ZWRNYWlscygpOiBQcm9taXNlPFJlY2VpdmVkTWFpbFtdPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICB1c2VyOiBbXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgcmVjZWl2ZWRNYWlsczogZ3FsTWFpbFF1ZXJ5XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGNvbnN0IG1haWxzID0gdXNlcj8ucmVjZWl2ZWRNYWlscyA/PyBbXTtcblxuICAgIC8vIFRPRE8gZ2V0IGFjdHVhbCBtYWlscyBvbiB0aGlzIGFwcCBvbmx5XG5cbiAgICBjb25zdCByZWNlaXZlZE1haWxzID0gbmV3IEFycmF5PFJlY2VpdmVkTWFpbD4oKTtcblxuICAgIGZvciAoY29uc3QgbSBvZiBtYWlscykge1xuICAgICAgY29uc3QgbWFpbCA9IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKG0sIHRoaXMuI2tleXMpO1xuICAgICAgaWYgKG1haWwpIHtcbiAgICAgICAgcmVjZWl2ZWRNYWlscy5wdXNoKG1haWwgYXMgUmVjZWl2ZWRNYWlsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVjZWl2ZWRNYWlscztcbiAgfVxuXG4gIGFzeW5jIHNlbnRNYWlscygpOiBQcm9taXNlPFNlbnRNYWlsW10+IHtcbiAgICBjb25zdCB7IHVzZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBzZW50TWFpbHM6IGdxbE1haWxRdWVyeVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBjb25zdCBtYWlscyA9IHVzZXI/LnNlbnRNYWlscyA/PyBbXTtcblxuICAgIC8vIFRPRE8gZ2V0IGFjdHVhbCBtYWlscyBvbiB0aGlzIGFwcCBvbmx5XG5cbiAgICBjb25zdCBzZW50TWFpbHMgPSBuZXcgQXJyYXk8U2VudE1haWw+KCk7XG5cbiAgICBmb3IgKGNvbnN0IG0gb2YgbWFpbHMpIHtcbiAgICAgIGNvbnN0IG1haWwgPSBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbChtLCB0aGlzLiNrZXlzKTtcbiAgICAgIGlmIChtYWlsKSB7XG4gICAgICAgIHNlbnRNYWlscy5wdXNoKG1haWwgYXMgU2VudE1haWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzZW50TWFpbHM7XG4gIH1cblxuICBhc3luYyBkcmFmdE1haWxzKCk6IFByb21pc2U8RHJhZnRNYWlsW10+IHtcbiAgICBjb25zdCB7IHVzZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBkcmFmdE1haWxzOiBncWxNYWlsUXVlcnlcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgY29uc3QgbWFpbHMgPSB1c2VyPy5kcmFmdE1haWxzID8/IFtdO1xuXG4gICAgLy8gVE9ETyBnZXQgYWN0dWFsIG1haWxzIG9uIHRoaXMgYXBwIG9ubHlcblxuICAgIGNvbnN0IGRyYWZ0TWFpbHMgPSBuZXcgQXJyYXk8RHJhZnRNYWlsPigpO1xuXG4gICAgZm9yIChjb25zdCBtIG9mIG1haWxzKSB7XG4gICAgICBjb25zdCBkcmFmdCA9IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKG0sIHRoaXMuI2tleXMpIGFzIERyYWZ0TWFpbDtcbiAgICAgIGlmIChkcmFmdCkge1xuICAgICAgICBkcmFmdE1haWxzLnB1c2goZHJhZnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkcmFmdE1haWxzO1xuICB9XG5cbiAgcHJpdmF0ZSBwZXJGb2xkZXIgPSBhc3luYyAoXG4gICAgZm9sZGVySWQ6IHN0cmluZyxcbiAgICBwdWJsaWNLZXk6IHN0cmluZ1xuICApOiBQcm9taXNlPE5hbWVLZXlJbnB1dEZvbGRlcnMgfCBudWxsPiA9PiB7XG4gICAgbGV0IGZvbGRlciA9IGZvbGRlcnNDYWNoZS5nZXQoZm9sZGVySWQpO1xuXG4gICAgaWYgKCFmb2xkZXIpIHtcbiAgICAgIGF3YWl0IHRoaXMuZm9sZGVyKHsgaWQ6IGZvbGRlcklkIH0pO1xuICAgICAgZm9sZGVyID0gZm9sZGVyc0NhY2hlLmdldChmb2xkZXJJZCk7XG5cbiAgICAgIGlmICghZm9sZGVyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZm9sZGVyLnVzZXJBcHA/Lm5hbWVLZXkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogZm9sZGVySWQsXG4gICAgICBuYW1lS2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmb2xkZXIudXNlckFwcC5uYW1lS2V5KSxcbiAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgIClcbiAgICAgIClcbiAgICB9O1xuICB9O1xuXG4gIHByaXZhdGUgcGVyVkZpbGUgPSBhc3luYyAoXG4gICAgdkZpbGVJZDogc3RyaW5nLFxuICAgIHB1YmxpY0tleTogc3RyaW5nXG4gICk6IFByb21pc2U8TmFtZUtleUlucHV0IHwgbnVsbD4gPT4ge1xuICAgIGxldCB2RmlsZSA9IHZGaWxlc0NhY2hlLmdldCh2RmlsZUlkKTtcblxuICAgIGlmICghdkZpbGUpIHtcbiAgICAgIGF3YWl0IHRoaXMudkZpbGUoeyBpZDogdkZpbGVJZCB9KTtcbiAgICAgIHZGaWxlID0gdkZpbGVzQ2FjaGUuZ2V0KHZGaWxlSWQpO1xuXG4gICAgICBpZiAoIXZGaWxlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogdkZpbGUuaWQsXG4gICAgICBuYW1lS2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX2hleCh2RmlsZS51c2VyQXBwLm5hbWVLZXkpLFxuICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIGZpbGVzOiB2RmlsZS5oaXN0b3J5Lm1hcChmID0+ICh7XG4gICAgICAgIGlkOiBmLmlkLFxuICAgICAgICBrZXk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmLnVzZXIhLmtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH0pKVxuICAgIH07XG4gIH07XG5cbiAgcHJpdmF0ZSBfZWFjaFVzZXIgPSBhc3luYyAoXG4gICAgZmlsZXM6IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXSxcbiAgICBzdWJqZWN0OiBzdHJpbmcsXG4gICAgYm9keTogc3RyaW5nLFxuICAgIGlkT3JNYWlsOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxNYWlsUmVjaXBpZW50SW5wdXQgfCBudWxsPiA9PiB7XG4gICAgbGV0IHUgPSB1c2Vyc0NhY2hlLmdldChpZE9yTWFpbCk7XG4gICAgaWYgKCF1IHx8ICEoXCJwdWJsaWNLZXlcIiBpbiB1KSkge1xuICAgICAgdSA9XG4gICAgICAgIChhd2FpdCB0aGlzLnVzZXIoe1xuICAgICAgICAgIHVzZXJJZDogaWRPck1haWwsXG4gICAgICAgICAgd2l0aFB1YmxpY0tleTogdHJ1ZVxuICAgICAgICB9KSkgPz8gdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoIXUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCEoXCJwdWJsaWNLZXlcIiBpbiB1KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVc2VyICR7aWRPck1haWx9IGhhdmUgbm8gcHVibGljIGtleWApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlY2lwaWVudHNGaWxlcyA9IG5ldyBBcnJheTxNYWlsRmlsZUlucHV0PigpO1xuXG4gICAgZm9yIChjb25zdCBmIG9mIGZpbGVzKSB7XG4gICAgICBsZXQgZmlsZUluSGlzdG9yeSA9IGZpbGVzQ2FjaGUuZ2V0KGYuaWQpO1xuICAgICAgaWYgKCFmaWxlSW5IaXN0b3J5KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmlsZSh7IGlkOiBmLmlkIH0pO1xuICAgICAgICBmaWxlSW5IaXN0b3J5ID0gZmlsZXNDYWNoZS5nZXQoZi5pZCk7XG4gICAgICAgIGlmICghZmlsZUluSGlzdG9yeSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAke2YubmFtZX0gKCR7Zi5pZH0pIGRvZXMgbm90IGV4aXN0c2ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBrZXkgPSBmaWxlSW5IaXN0b3J5LnVzZXI/LmtleTtcbiAgICAgIGlmICgha2V5KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVjaXBpZW50c0ZpbGVzLnB1c2goe1xuICAgICAgICBpZDogZi5pZCxcbiAgICAgICAgbmFtZTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGYubmFtZSksXG4gICAgICAgICAgICB1LnB1YmxpY0tleSxcbiAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgZmlsZUtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgc29kaXVtLmZyb21faGV4KGtleSksXG4gICAgICAgICAgICB1LnB1YmxpY0tleSxcbiAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlY2lwaWVudElkOiB1LmlkLFxuICAgICAgYm9keTogc29kaXVtLnRvX2hleChcbiAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoYm9keSksXG4gICAgICAgICAgdS5wdWJsaWNLZXksXG4gICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgIClcbiAgICAgICksXG4gICAgICBzdWJqZWN0OiBzb2RpdW0udG9faGV4KFxuICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhzdWJqZWN0KSxcbiAgICAgICAgICB1LnB1YmxpY0tleSxcbiAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIGZpbGVzOiByZWNpcGllbnRzRmlsZXNcbiAgICB9O1xuICB9O1xufVxuIl19
3815
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvaW5kZXgudHMiXSwibmFtZXMiOlsia3kiLCJheGlvcyIsIkJhc2VDbGllbnQiLCJ2RmlsZXNDYWNoZSIsImZvbGRlcnNDYWNoZSIsImZpbGVzQ2FjaGUiLCJ1c2Vyc0NhY2hlIiwic2VjcmV0c3RyZWFtS2V5Z2VuIiwiZW5jcnlwdFNlY3JldHN0cmVhbSIsImNvbXByZXNzIiwidW5jb21wcmVzcyIsImdxbEZvbGRlclRvRXh0ZXJuYWwiLCJncWxGb2xkZXJUb0V4dGVybmFsRm9sZGVyRnVsbCIsImdxbFZGaWxlVG9FeHRlcm5hbCIsImdxbFZGaWxlVG9JbnRlcm5hbCIsImludGVybmFsVkZpbGVUb1ZGaWxlIiwiZ3FsRmlsZVRvRXh0ZXJuYWwiLCJzb2RpdW0iLCJkZWNyeXB0Q3J5cHRvQm94IiwiZW5jcnlwdENyeXB0b0JveCIsImdlbmVyYXRlIiwibWQ1IiwiZW5jcnlwdCIsImRlY3J5cHQiLCJjaHVua3MiLCJjb25jYXRlbmF0ZSIsImVudW1lcmF0ZSIsInByb21pc2VBbGxMaW1pdCIsImdxbEZpbGVRdWVyeSIsImdxbEZvbGRlclF1ZXJ5IiwiZ3FsRm9sZGVyRnVsbFF1ZXJ5IiwiZ3FsTWFpbFF1ZXJ5IiwiZ3FsVkZpbGVRdWVyeSIsImdxbFZGaWxlV2l0aEZvbGRlclF1ZXJ5IiwiY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwiLCJlbmNyeXB0TmFtZSIsIm5hbWUiLCJuYW1lS2V5IiwiZnJvbV9oZXgiLCJmcm9tX3N0cmluZyIsImRhdGEiLCJuYW1lRW5jcnlwdGVkIiwidG9faGV4IiwiU2VjcmVjeUNsaWVudCIsInVhU2Vzc2lvbiIsInVhS2V5cyIsInVhSnd0IiwiZW52IiwicGVyRm9sZGVyIiwiZm9sZGVySWQiLCJwdWJsaWNLZXkiLCJmb2xkZXIiLCJnZXQiLCJpZCIsInVzZXJBcHAiLCJwcml2YXRlS2V5IiwicGVyVkZpbGUiLCJ2RmlsZUlkIiwidkZpbGUiLCJmaWxlcyIsImhpc3RvcnkiLCJtYXAiLCJmIiwia2V5IiwidXNlciIsIl9lYWNoVXNlciIsInN1YmplY3QiLCJib2R5IiwiaWRPck1haWwiLCJ1IiwidXNlcklkIiwid2l0aFB1YmxpY0tleSIsInVuZGVmaW5lZCIsIkVycm9yIiwicmVjaXBpZW50c0ZpbGVzIiwiQXJyYXkiLCJmaWxlSW5IaXN0b3J5IiwiZmlsZSIsInB1c2giLCJmaWxlS2V5IiwicmVjaXBpZW50SWQiLCJqd3QiLCJhZGRGaWxlVG9IaXN0b3J5IiwiZmlsZUlkIiwiY2xpZW50IiwiZmluZCIsInVzZXJzIiwiZmlsdGVyIiwiaW5wdXQiLCJzaGFyZUZpbGVJbkhpc3RvcnkiLCJ1cGxvYWRGaWxlIiwiZW5jcnlwdFByb2dyZXNzIiwidXBsb2FkUHJvZ3Jlc3MiLCJzaWduYWwiLCJGaWxlIiwiVWludDhBcnJheSIsImFycmF5QnVmZmVyIiwiZmlsZUJ1ZmZlciIsImNvbXByZXNzZWQiLCJlbmNyeXB0ZWRGaWxlIiwibWQ1RmlsZSIsIm1kNUVuY3J5cHRlZCIsImVuY3J5cHRlZEZpbGVLZXkiLCJmaWxlU2l6ZSIsImJ5dGVMZW5ndGgiLCJmaWxlU2l6ZUJlZm9yZSIsImZpbGVQYXJ0U2l6ZSIsInBhcnRzIiwiZmllbGRzIiwib3JkZXIiLCJ1cmwiLCJ0b3RhbCIsImN1cnJlbnQiLCJwZXJjZW50IiwibGVuZ3RoIiwidXBsb2FkUGFydEVuZGVkIiwidXBsb2FkRmlsZVBhcnRFbmQiLCJ1cGxvYWRFbmRlZCIsInVwbG9hZEZpbGVFbmQiLCJjaHVua1BhcnRzIiwiTnVtYmVyIiwiaW5kZXgiLCJjaHVuayIsInByb2dyZXNzUGFydHMiLCJvblByb2dyZXNzIiwicGFydCIsInByb2dyZXNzRXZlbnQiLCJPYmplY3QiLCJ2YWx1ZXMiLCJyZWR1Y2UiLCJwcnYiLCJjdXIiLCJsb2FkZWQiLCJieVBhcnQiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwicCIsImVudHJpZXMiLCJ2YWx1ZSIsImFwcGVuZCIsIkJsb2IiLCJwb3N0Iiwib25VcGxvYWRQcm9ncmVzcyIsInVwbG9hZEZpbGVJbkNsb3VkIiwic2F2ZUluQ2xvdWQiLCJsb2dvdXQiLCJzZXNzaW9uSWQiLCJjbGVhciIsImNyZWF0ZUZvbGRlciIsInBhcmVudEZvbGRlcklkIiwiZW5jcnlwdGVkTmFtZSIsImVuY3J5cHRlZEtleSIsInBhcmVudEZvbGRlciIsIlByb21pc2UiLCJhbGwiLCJyaWdodHMiLCJzaGFyZUZvbGRlciIsImRlbGV0ZWQiLCJtYWlsIiwic2hhcmVWRmlsZSIsImgiLCJzaGFyZWRWRmlsZXMiLCJ2RmlsZXMiLCJ2RmlsZXNTaGFyZWRXaXRoTWUiLCJkZWxldGVkVkZpbGVzIiwic2hhcmVkRm9sZGVycyIsImZvbGRlcnMiLCJmb2xkZXJzU2hhcmVkV2l0aE1lIiwiZGVsZXRlZEZvbGRlcnMiLCJkZWxldGVkTWFpbHMiLCJtYWlsVHlwZSIsIm1haWxzIiwibSIsInNoYXJlRm9sZGVycyIsInZGaWxlSW5wdXQiLCJzaGFyZUZvbGRlckZpbmlzaCIsInVwZGF0ZUZvbGRlciIsImlzRmF2b3JpdGUiLCJkZWxldGVkQXQiLCJ1cGRhdGVBcHBOb3RpZmljYXRpb25zIiwibm90aWZpY2F0aW9ucyIsImVuYWJsZUFsbCIsImNsb3VkIiwiZGlzYWJsZUFsbFVudGlsIiwiRGF0ZSIsImFwcE5vdGlmaWNhdGlvbnMiLCJjcmVhdGVNYWlsIiwiY3VzdG9tTWVzc2FnZSIsImNyZWF0ZURyYWZ0TWFpbCIsInNlbmREcmFmdE1haWwiLCJtYWlsSW50ZWdyaXR5SWQiLCJ3YWl0aW5nUmVjZWl2ZWRNYWlscyIsImRhdGUiLCJhdHRhY2htZW50c0NvdW50Iiwic2VuZGVyIiwiZmlyc3RuYW1lIiwibGFzdG5hbWUiLCJlbWFpbCIsInJlY2lwaWVudHMiLCJ0ZW1wb3JhcnlSZWNpcGllbnRzIiwidXBkYXRlRHJhZnRNYWlsIiwiZHJhZnRJZCIsInJlY2lwaWVudHNJZHMiLCJyZXBseVRvIiwiZHJhZnRNYWlscyIsImRyYWZ0cyIsImRyYWZ0IiwiZCIsImhhc2hLZXkiLCJoYXNoIiwicmFuZG9tYnl0ZXNfYnVmIiwiY3J5cHRvX2dlbmVyaWNoYXNoX0tFWUJZVEVTIiwiY3J5cHRvX2dlbmVyaWNoYXNoIiwiY3J5cHRvX2dlbmVyaWNoYXNoX0JZVEVTIiwiSlNPTiIsInN0cmluZ2lmeSIsInNlbmRlckZpbGVzIiwiZGVsZXRlRHJhZnRNYWlsIiwiZGVsZXRlVkZpbGVTaGFyaW5nIiwiZGVsZXRlRm9sZGVyU2hhcmluZyIsImR1cGxpY2F0ZVZGaWxlIiwiY3VzdG9tTmFtZSIsImRlbGV0ZUZvbGRlckNsb3VkVHJhc2giLCJpZHMiLCJkZWxldGVWRmlsZUNsb3VkVHJhc2giLCJkZWxldGVNYWlsVHJhc2giLCJlbXB0eU1haWxUcmFzaCIsImVtcHR5Q2xvdWRUcmFzaCIsInJlY292ZXJWRmlsZSIsInJlY292ZXJGb2xkZXIiLCJyZWNvdmVyTWFpbCIsIm1haWxJZCIsImRlbGV0ZUZpbGUiLCJkZWxldGVWRmlsZSIsImRlbGV0ZU1haWwiLCJoYXMiLCJyZWNlaXZlZE1haWxzIiwic29tZSIsImZpbGVNYWlsIiwiZW5jcnlwdGVkTmFtZUtleSIsImZpbGVuYW1lIiwibWUiLCJpbmNsdWRlcyIsIm90aGVycyIsImRyYWZ0TWFpbElkIiwic2VuZFdhaXRpbmdFbWFpbHMiLCJzZW50TWFpbHMiLCJmaWx0ZXJlZCIsInNlbmRPbmVNYWlsIiwicmVjaXBpZW50IiwiZmlsZUNvbnRlbnQiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJwcm9ncmVzc0RlY3J5cHQiLCJfX3R5cGVuYW1lIiwiY29udGVudFVybCIsInRvdGFsU2l6ZSIsInNlbmRlclB1YmxpY0tleSIsInRyYW5zZmVycmVkQnl0ZXMiLCJ0b3RhbEJ5dGVzIiwicHIiLCJidWYiLCJtZDVQYXJ0IiwiZW5jcnlwdGVkQ29udGVudCIsInNvcnQiLCJhIiwiYiIsInNyYyIsIm1kNUNvbnRlbnQiLCJ1cGRhdGVGaWxlIiwicmVhZE1haWwiLCJ1bnJlYWRNYWlsIiwiYXBwU2V0dGluZ3MiLCJhdXRvRGlzY29ubmVjdERlbGF5IiwiY2xvdWRGaWxlRGF5c0ZvckRlbGV0ZSIsImNsb3VkRm9sZGVyRGF5c0ZvckRlbGV0ZSIsImhpc3RvcnlGaWxlRGF5c0ZvckRlbGV0ZSIsImhpc3RvcnlNYXhGaWxlQ291bnQiLCJ1cGRhdGVBcHBTZXR0aW5ncyIsInNldHRpbmdzIiwidW5yZWFkUmVjZWl2ZWRNYWlsc0NvdW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsT0FBT0EsRUFBUCxNQUFlLElBQWY7QUFDQSxPQUFPQyxLQUFQLE1BQWtCLE9BQWxCO0FBQ0EsU0FBU0MsVUFBVCxRQUEyQixrQkFBM0I7QUFDQSxTQUFTQyxXQUFULEVBQXNCQyxZQUF0QixFQUFvQ0MsVUFBcEMsRUFBZ0RDLFVBQWhELFFBQWtFLGFBQWxFO0FBRUEsU0FBU0Msa0JBQVQsRUFBNkJDLG1CQUE3QixRQUF3RCxtQkFBeEQ7QUFDQSxTQUFTQyxRQUFULEVBQW1CQyxVQUFuQixRQUFxQyxvQkFBckM7QUFDQSxTQUNFQyxtQkFERixFQUVFQyw2QkFGRixRQUdPLHFCQUhQO0FBSUEsU0FDRUMsa0JBREYsRUFFRUMsa0JBRkYsRUFHRUMsb0JBSEYsUUFJTyxvQkFKUDtBQTJCQSxTQUFTQyxpQkFBVCxRQUFrQyxtQkFBbEM7QUFDQSxTQUFTQyxNQUFULFFBQXVCLGNBQXZCO0FBRUEsU0FBU0MsZ0JBQVQsRUFBMkJDLGdCQUEzQixRQUFtRCxvQkFBbkQ7QUFFQSxTQUFTQyxRQUFULFFBQXlCLFNBQXpCO0FBQ0EsU0FBU0MsR0FBVCxRQUFvQixrQkFBcEI7QUFDQSxTQUFTQyxPQUFULEVBQWtCQyxPQUFsQixRQUFpQyxxQkFBakM7QUFDQSxTQUFTQyxNQUFULEVBQWlCQyxXQUFqQixFQUE4QkMsU0FBOUIsRUFBeUNDLGVBQXpDLFFBQWdFLGFBQWhFO0FBQ0EsU0FDRUMsWUFERixFQUVFQyxjQUZGLEVBR0VDLGtCQUhGLEVBSUVDLFlBSkYsRUFLRUMsYUFMRixFQU1FQyx1QkFORixRQU9PLG9CQVBQO0FBU0EsU0FBU0MsNkJBQVQsUUFBOEMsbUJBQTlDLEMsQ0FDQTtBQUNBOztBQVlBLElBQU1DLFdBQVc7QUFBQSxzRUFBRyxpQkFBT0Ms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QXB0RFI7QUFBQSw2RkFvdERFO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHFCQUM2QyxLQUFLbk0sTUFBTCxDQUFZLE9BQVosRUFBcUI7QUFDOURtTSxnQkFBQUEsd0JBQXdCLEVBQUU7QUFEb0MsZUFBckIsQ0FEN0M7O0FBQUE7QUFBQTtBQUNVQSxjQUFBQSx3QkFEVix3QkFDVUEsd0JBRFY7QUFBQSxpREFLU0Esd0JBTFQsV0FLU0Esd0JBTFQsR0FLcUMsQ0FMckM7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FwdERGOztBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQSxTQWdCRSxlQUF3QjtBQUN0QixhQUFPLGdEQUFXck8sU0FBbEI7QUFDRDtBQWxCSDs7QUFBQTtBQUFBLEVBQW1DaEQsVUFBbkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE1haWxUeXBlIH0gZnJvbSBcIi4vLi4vemV1cy9pbmRleFwiO1xuaW1wb3J0IHR5cGUgeyBEb3dubG9hZFByb2dyZXNzIH0gZnJvbSBcImt5XCI7XG5pbXBvcnQga3kgZnJvbSBcImt5XCI7XG5pbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQgeyBCYXNlQ2xpZW50IH0gZnJvbSBcIi4uL0Jhc2VDbGllbnQuanNcIjtcbmltcG9ydCB7IHZGaWxlc0NhY2hlLCBmb2xkZXJzQ2FjaGUsIGZpbGVzQ2FjaGUsIHVzZXJzQ2FjaGUgfSBmcm9tIFwiLi4vY2FjaGUuanNcIjtcbmltcG9ydCB0eXBlIHsgUHJvZ3Jlc3MgfSBmcm9tIFwiLi4vY3J5cHRvL2ZpbGUuanNcIjtcbmltcG9ydCB7IHNlY3JldHN0cmVhbUtleWdlbiwgZW5jcnlwdFNlY3JldHN0cmVhbSB9IGZyb20gXCIuLi9jcnlwdG8vZmlsZS5qc1wiO1xuaW1wb3J0IHsgY29tcHJlc3MsIHVuY29tcHJlc3MgfSBmcm9tIFwiLi4vbWluaWZ5L2luZGV4LmpzXCI7XG5pbXBvcnQge1xuICBncWxGb2xkZXJUb0V4dGVybmFsLFxuICBncWxGb2xkZXJUb0V4dGVybmFsRm9sZGVyRnVsbFxufSBmcm9tIFwiLi9jb252ZXJ0L2ZvbGRlci5qc1wiO1xuaW1wb3J0IHtcbiAgZ3FsVkZpbGVUb0V4dGVybmFsLFxuICBncWxWRmlsZVRvSW50ZXJuYWwsXG4gIGludGVybmFsVkZpbGVUb1ZGaWxlXG59IGZyb20gXCIuL2NvbnZlcnQvdkZpbGUuanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgTWFpbEZpbGVJbnB1dCxcbiAgUmVjZWl2ZWRNYWlsLFxuICBTZW50TWFpbCxcbiAgRm9sZGVyLFxuICBWRmlsZVdpdGhGb2xkZXIsXG4gIEZvbGRlckZ1bGwsXG4gIFVzZXJBcHBTZXR0aW5ncyxcbiAgVXNlckFwcE5vdGlmaWNhdGlvbnMsXG4gIEZpbGUgYXMgU2VjcmVjeUZpbGUsXG4gIFdhaXRpbmdSZWNlaXZlZE1haWwsXG4gIERyYWZ0TWFpbCxcbiAgTWFpbFJlY2lwaWVudElucHV0LFxuICBWRmlsZSxcbiAgU2hhcmVGb2xkZXJzSW5wdXQsXG4gIE5hbWVLZXlJbnB1dCxcbiAgTmFtZUtleUlucHV0Rm9sZGVycyxcbiAgTWFpbCxcbiAgU2hhcmVGaWxlSW5IaXN0b3J5SW5wdXQsXG4gIEZpbGVQYXJ0UmVzcG9uc2UsXG4gIEZpbGVDb250ZW50UGFydFxufSBmcm9tIFwiLi90eXBlcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ3FsRmlsZVRvRXh0ZXJuYWwgfSBmcm9tIFwiLi9jb252ZXJ0L2ZpbGUuanNcIjtcbmltcG9ydCB7IHNvZGl1bSB9IGZyb20gXCIuLi9zb2RpdW0uanNcIjtcbmltcG9ydCB0eXBlIHsgS2V5UGFpciB9IGZyb20gXCIuLi9jcnlwdG8vaW5kZXguanNcIjtcbmltcG9ydCB7IGRlY3J5cHRDcnlwdG9Cb3gsIGVuY3J5cHRDcnlwdG9Cb3ggfSBmcm9tIFwiLi4vY3J5cHRvL2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNlY3JlY3lFbnYgfSBmcm9tIFwiLi9oZWxwZXJzLmpzXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzaG9ydGlkXCI7XG5pbXBvcnQgeyBtZDUgfSBmcm9tIFwiLi4vd29ya2VyL21kNS5qc1wiO1xuaW1wb3J0IHsgZW5jcnlwdCwgZGVjcnlwdCB9IGZyb20gXCIuLi93b3JrZXIvc29kaXVtLmpzXCI7XG5pbXBvcnQgeyBjaHVua3MsIGNvbmNhdGVuYXRlLCBlbnVtZXJhdGUsIHByb21pc2VBbGxMaW1pdCB9IGZyb20gXCIuLi91dGlscy5qc1wiO1xuaW1wb3J0IHtcbiAgZ3FsRmlsZVF1ZXJ5LFxuICBncWxGb2xkZXJRdWVyeSxcbiAgZ3FsRm9sZGVyRnVsbFF1ZXJ5LFxuICBncWxNYWlsUXVlcnksXG4gIGdxbFZGaWxlUXVlcnksXG4gIGdxbFZGaWxlV2l0aEZvbGRlclF1ZXJ5XG59IGZyb20gXCIuL3R5cGVzL3F1ZXJpZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgUmlnaHRzIH0gZnJvbSBcIi4uL3pldXMvaW5kZXguanNcIjtcbmltcG9ydCB7IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsIH0gZnJvbSBcIi4vY29udmVydC9tYWlsLmpzXCI7XG4vLyBpbXBvcnQgeyBtZDUgfSBmcm9tIFwiLi4vd29ya2VyL2luZGV4LmpzXCI7XG4vLyBpbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgb2YgfSBmcm9tIFwicnhqc1wiO1xuXG5leHBvcnQgdHlwZSBOZXdNYWlsID0ge1xuICBib2R5OiBzdHJpbmc7XG4gIHN1YmplY3Q6IHN0cmluZztcbiAgZmlsZXM6IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXTtcbiAgcmVjaXBpZW50c0lkczogc3RyaW5nW107XG4gIHJlcGx5VG8/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgUHJvZ3Jlc3NDYWxsYmFjayA9IChwcm9ncmVzczogUHJvZ3Jlc3MpID0+IFByb21pc2U8dm9pZD47XG5cbmNvbnN0IGVuY3J5cHROYW1lID0gYXN5bmMgKG5hbWU6IHN0cmluZywgbmFtZUtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBlbmNyeXB0U2VjcmV0c3RyZWFtKFxuICAgIHNvZGl1bS5mcm9tX2hleChuYW1lS2V5KSxcbiAgICBzb2RpdW0uZnJvbV9zdHJpbmcobmFtZSlcbiAgKTtcbiAgY29uc3QgbmFtZUVuY3J5cHRlZCA9IHNvZGl1bS50b19oZXgoZGF0YSk7XG4gIHJldHVybiBuYW1lRW5jcnlwdGVkO1xufTtcblxuZXhwb3J0IGNsYXNzIFNlY3JlY3lDbGllbnQgZXh0ZW5kcyBCYXNlQ2xpZW50IHtcbiAgand0OiBzdHJpbmc7XG5cbiAgI2tleXM6IEtleVBhaXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgdWFTZXNzaW9uOiBzdHJpbmcsXG4gICAgdWFLZXlzOiBLZXlQYWlyLFxuICAgIHVhSnd0OiBzdHJpbmcsXG4gICAgZW52OiBTZWNyZWN5RW52XG4gICkge1xuICAgIHN1cGVyKHVhU2Vzc2lvbiwgZW52KTtcbiAgICB0aGlzLmp3dCA9IHVhSnd0O1xuICAgIHRoaXMuI2tleXMgPSB1YUtleXM7XG4gIH1cblxuICBnZXQgcHVibGljS2V5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI2tleXMucHVibGljS2V5O1xuICB9XG5cbiAgYXN5bmMgYWRkRmlsZVRvSGlzdG9yeSh7XG4gICAgZmlsZUlkLFxuICAgIHZGaWxlSWRcbiAgfToge1xuICAgIGZpbGVJZDogc3RyaW5nO1xuICAgIHZGaWxlSWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8VkZpbGU+IHtcbiAgICBjb25zdCB7IGFkZEZpbGVUb0hpc3RvcnkgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgYWRkRmlsZVRvSGlzdG9yeTogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIHZGaWxlSWRcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsVkZpbGVRdWVyeVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgY29uc3QgdkZpbGUgPSBhd2FpdCBncWxWRmlsZVRvSW50ZXJuYWwoYWRkRmlsZVRvSGlzdG9yeSwgdGhpcy4ja2V5cyk7XG4gICAgY29uc3QgZmlsZSA9IHZGaWxlLmhpc3RvcnkuZmluZChmID0+IGYuaWQgPT09IGZpbGVJZCk7XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIGNvbnN0IHVzZXJzID0gdkZpbGUudXNlcnMuZmlsdGVyKFxuICAgICAgICAoW3VdKSA9PiB1LnB1YmxpY0tleSAhPT0gdGhpcy4ja2V5cy5wdWJsaWNLZXlcbiAgICAgICk7XG4gICAgICBjb25zdCBpbnB1dDogU2hhcmVGaWxlSW5IaXN0b3J5SW5wdXQgPSB7XG4gICAgICAgIGZpbGVJZDogZmlsZS5pZCxcbiAgICAgICAgdXNlcnM6IHVzZXJzLm1hcCgoW3VdKSA9PiAoe1xuICAgICAgICAgIGlkOiB1LmlkLFxuICAgICAgICAgIGtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmaWxlLnVzZXIhLmtleSksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH0pKVxuICAgICAgfTtcblxuICAgICAgYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICAgIHNoYXJlRmlsZUluSGlzdG9yeTogW3sgaW5wdXQsIHZGaWxlSWQgfSwgdHJ1ZV1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaW50ZXJuYWxWRmlsZVRvVkZpbGUodkZpbGUpO1xuICB9XG5cbiAgYXN5bmMgdXBsb2FkRmlsZSh7XG4gICAgZmlsZSxcbiAgICBlbmNyeXB0UHJvZ3Jlc3MsXG4gICAgdXBsb2FkUHJvZ3Jlc3MsXG4gICAgc2lnbmFsXG4gIH06IHtcbiAgICBmaWxlOiBnbG9iYWxUaGlzLkZpbGUgfCBVaW50OEFycmF5O1xuICAgIGVuY3J5cHRQcm9ncmVzcz86IFByb2dyZXNzQ2FsbGJhY2s7XG4gICAgdXBsb2FkUHJvZ3Jlc3M/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc3QgZmlsZUtleSA9IHNlY3JldHN0cmVhbUtleWdlbigpO1xuICAgIGNvbnN0IGZpbGVCdWZmZXIgPVxuICAgICAgZmlsZSBpbnN0YW5jZW9mIEZpbGUgPyBuZXcgVWludDhBcnJheShhd2FpdCBmaWxlLmFycmF5QnVmZmVyKCkpIDogZmlsZTtcbiAgICBjb25zdCBjb21wcmVzc2VkID0gY29tcHJlc3MoZmlsZUJ1ZmZlcik7XG5cbiAgICBjb25zdCB7XG4gICAgICBkYXRhOiBlbmNyeXB0ZWRGaWxlLFxuICAgICAgbWQ1OiBtZDVGaWxlLFxuICAgICAgbWQ1RW5jcnlwdGVkXG4gICAgfSA9IGF3YWl0IGVuY3J5cHQoZmlsZUtleSwgY29tcHJlc3NlZCwgZW5jcnlwdFByb2dyZXNzLCBzaWduYWwpO1xuXG4gICAgY29uc3QgZW5jcnlwdGVkRmlsZUtleSA9IGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICBmaWxlS2V5LFxuICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICApO1xuXG4gICAgY29uc3QgeyB1cGxvYWRGaWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHVwbG9hZEZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVTaXplOiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgICAgZmlsZVNpemVCZWZvcmU6IGZpbGVCdWZmZXIuYnl0ZUxlbmd0aCxcbiAgICAgICAgICBmaWxlS2V5OiBzb2RpdW0udG9faGV4KGVuY3J5cHRlZEZpbGVLZXkpLFxuICAgICAgICAgIG1kNUVuY3J5cHRlZCxcbiAgICAgICAgICBtZDU6IG1kNUZpbGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZDogdHJ1ZSxcbiAgICAgICAgICBmaWxlUGFydFNpemU6IHRydWUsXG4gICAgICAgICAgcGFydHM6IHtcbiAgICAgICAgICAgIGZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgICAgdXJsOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVwbG9hZEZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHVwbG9hZFByb2dyZXNzPy4oe1xuICAgICAgdG90YWw6IGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgIGN1cnJlbnQ6IDAsXG4gICAgICBwZXJjZW50OiAwXG4gICAgfSk7XG5cbiAgICBpZiAodXBsb2FkRmlsZS5wYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHVwbG9hZFByb2dyZXNzPy4oe1xuICAgICAgICB0b3RhbDogZW5jcnlwdGVkRmlsZS5ieXRlTGVuZ3RoLFxuICAgICAgICBjdXJyZW50OiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgIHBlcmNlbnQ6IDFcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdXBsb2FkRmlsZS5maWxlSWQ7XG4gICAgfVxuXG4gICAgY29uc3QgdXBsb2FkUGFydEVuZGVkID0gYXN5bmMgKFxuICAgICAgbWQ1OiBzdHJpbmcsXG4gICAgICBvcmRlcjogbnVtYmVyXG4gICAgKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgICBjb25zdCB7IHVwbG9hZEZpbGVQYXJ0RW5kIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgICAgdXBsb2FkRmlsZVBhcnRFbmQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWxlSWQ6IHVwbG9hZEZpbGUuZmlsZUlkLFxuICAgICAgICAgICAgbWQ1LFxuICAgICAgICAgICAgb3JkZXJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRydWVcbiAgICAgICAgXVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB1cGxvYWRGaWxlUGFydEVuZDtcbiAgICB9O1xuXG4gICAgY29uc3QgdXBsb2FkRW5kZWQgPSBhc3luYyAoKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiA9PiB7XG4gICAgICBjb25zdCB7IHVwbG9hZEZpbGVFbmQgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgICB1cGxvYWRGaWxlRW5kOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlsZUlkOiB1cGxvYWRGaWxlLmZpbGVJZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICBdXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHVwbG9hZEZpbGVFbmQgPz8gbnVsbDtcbiAgICB9O1xuXG4gICAgY29uc3QgY2h1bmtQYXJ0cyA9IG5ldyBBcnJheTx7XG4gICAgICBvcmRlcjogbnVtYmVyO1xuICAgICAgZGF0YTogVWludDhBcnJheTtcbiAgICAgIG1kNTogc3RyaW5nO1xuICAgIH0+KCk7XG5cbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgY2h1bmtdIG9mIGVudW1lcmF0ZShcbiAgICAgIGNodW5rcyhlbmNyeXB0ZWRGaWxlLCBOdW1iZXIodXBsb2FkRmlsZS5maWxlUGFydFNpemUpKVxuICAgICkpIHtcbiAgICAgIGNodW5rUGFydHMucHVzaCh7XG4gICAgICAgIG9yZGVyOiBpbmRleCArIDEsXG4gICAgICAgIGRhdGE6IGNodW5rLFxuICAgICAgICBtZDU6IGF3YWl0IG1kNShjaHVuaylcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2dyZXNzUGFydHM6IFJlY29yZDxudW1iZXIsIFByb2dyZXNzRXZlbnQ+ID0ge307XG4gICAgY29uc3Qgb25Qcm9ncmVzcyA9IChwYXJ0OiBudW1iZXIsIHByb2dyZXNzRXZlbnQ6IFByb2dyZXNzRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIHByb2dyZXNzUGFydHNbcGFydF0gPSBwcm9ncmVzc0V2ZW50O1xuICAgICAgY29uc3QgY3VycmVudCA9IE9iamVjdC52YWx1ZXMocHJvZ3Jlc3NQYXJ0cykucmVkdWNlKFxuICAgICAgICAocHJ2LCBjdXIpID0+IHBydiArIGN1ci5sb2FkZWQsXG4gICAgICAgIDBcbiAgICAgICk7XG4gICAgICB1cGxvYWRQcm9ncmVzcz8uKHtcbiAgICAgICAgcGVyY2VudDogY3VycmVudCAvIGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgICAgdG90YWw6IGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgICAgY3VycmVudFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJ5UGFydCA9IGFzeW5jIChwYXJ0OiBGaWxlUGFydFJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgY29uc3QgY2h1bmsgPSBjaHVua1BhcnRzLmZpbmQocCA9PiBwLm9yZGVyID09PSBwYXJ0Lm9yZGVyKTtcbiAgICAgIGlmICghY2h1bmspIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFydC5maWVsZHMpKSB7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgXCJmaWxlXCIsXG4gICAgICAgIG5ldyBCbG9iKFtjaHVuay5kYXRhXSksXG4gICAgICAgIGAke3VwbG9hZEZpbGUuZmlsZUlkfS0ke2NodW5rLm9yZGVyfWBcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IGF4aW9zLnBvc3QocGFydC51cmwsIGZvcm1EYXRhLCB7XG4gICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IHByb2dyZXNzRXZlbnQgPT5cbiAgICAgICAgICBvblByb2dyZXNzKHBhcnQub3JkZXIsIHByb2dyZXNzRXZlbnQpLFxuICAgICAgICBzaWduYWxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB1cGxvYWRQYXJ0RW5kZWQoY2h1bmsubWQ1LCBjaHVuay5vcmRlcik7XG4gICAgICAvLyBpZiAoKGUgYXMgYW55KS5yZXNwb25zZS5zdGF0dXMgPT09IDApIHtcbiAgICAgIC8vICAgLy8gVE9ETyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2t5L2lzc3Vlcy8zMDVcbiAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAvLyAgIHRocm93IGU7XG4gICAgICAvLyB9XG4gICAgfTtcblxuICAgIGF3YWl0IHByb21pc2VBbGxMaW1pdChcbiAgICAgIDMsXG4gICAgICB1cGxvYWRGaWxlLnBhcnRzLm1hcChwID0+ICgpOiBQcm9taXNlPHZvaWQ+ID0+IGJ5UGFydChwKSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHVwbG9hZEVuZGVkKCk7XG4gIH1cblxuICBhc3luYyB1cGxvYWRGaWxlSW5DbG91ZCh7XG4gICAgZmlsZSxcbiAgICBuYW1lLFxuICAgIGZvbGRlcklkLFxuICAgIGVuY3J5cHRQcm9ncmVzcyxcbiAgICB1cGxvYWRQcm9ncmVzcyxcbiAgICBzaWduYWxcbiAgfToge1xuICAgIGZpbGU6IGdsb2JhbFRoaXMuRmlsZSB8IFVpbnQ4QXJyYXk7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGZvbGRlcklkPzogc3RyaW5nO1xuICAgIGVuY3J5cHRQcm9ncmVzcz86IFByb2dyZXNzQ2FsbGJhY2s7XG4gICAgdXBsb2FkUHJvZ3Jlc3M/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxWRmlsZVdpdGhGb2xkZXI+IHtcbiAgICBjb25zdCBmaWxlSWQgPSBhd2FpdCB0aGlzLnVwbG9hZEZpbGUoe1xuICAgICAgZmlsZSxcbiAgICAgIGVuY3J5cHRQcm9ncmVzcyxcbiAgICAgIHVwbG9hZFByb2dyZXNzLFxuICAgICAgc2lnbmFsXG4gICAgfSk7XG4gICAgaWYgKCFmaWxlSWQpIHtcbiAgICAgIHRocm93IGBDYW4ndCB1cGxvYWQgZmlsZWA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNhdmVJbkNsb3VkKHsgZmlsZUlkLCBuYW1lLCBmb2xkZXJJZCB9KTtcbiAgfVxuXG4gIGFzeW5jIGxvZ291dChzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdkZpbGVzQ2FjaGUuY2xlYXIoKTtcbiAgICBmaWxlc0NhY2hlLmNsZWFyKCk7XG4gICAgZm9sZGVyc0NhY2hlLmNsZWFyKCk7XG4gICAgYXdhaXQgc3VwZXIubG9nb3V0KHNlc3Npb25JZCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVGb2xkZXIoe1xuICAgIG5hbWUsXG4gICAgcGFyZW50Rm9sZGVySWRcbiAgfToge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBwYXJlbnRGb2xkZXJJZD86IHN0cmluZyB8IG51bGw7XG4gIH0pOiBQcm9taXNlPEZvbGRlckZ1bGw+IHtcbiAgICBjb25zdCBrZXkgPSBzZWNyZXRzdHJlYW1LZXlnZW4oKTtcbiAgICBjb25zdCBlbmNyeXB0ZWROYW1lID0gYXdhaXQgZW5jcnlwdE5hbWUobmFtZSwgc29kaXVtLnRvX2hleChrZXkpKTtcbiAgICBjb25zdCBlbmNyeXB0ZWRLZXkgPSBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAga2V5LFxuICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICApO1xuICAgIGNvbnN0IHsgY3JlYXRlRm9sZGVyIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGNyZWF0ZUZvbGRlcjogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogZW5jcnlwdGVkTmFtZSxcbiAgICAgICAgICBwYXJlbnRGb2xkZXJJZCxcbiAgICAgICAgICBrZXk6IHNvZGl1bS50b19oZXgoZW5jcnlwdGVkS2V5KVxuICAgICAgICB9LFxuICAgICAgICBncWxGb2xkZXJGdWxsUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcbiAgICBpZiAoIWNyZWF0ZUZvbGRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBjcmVhdGUgZm9sZGVyYCk7XG4gICAgfVxuICAgIGNvbnN0IGZvbGRlciA9IGF3YWl0IGdxbEZvbGRlclRvRXh0ZXJuYWxGb2xkZXJGdWxsKFxuICAgICAgY3JlYXRlRm9sZGVyLFxuICAgICAgdGhpcy4ja2V5c1xuICAgICk7XG5cbiAgICBjb25zdCB1c2VycyA9XG4gICAgICBmb2xkZXIucGFyZW50Rm9sZGVyPy51c2Vycz8uZmlsdGVyKFxuICAgICAgICAoW3VdKSA9PiB1LnB1YmxpY0tleSAhPT0gdGhpcy4ja2V5cy5wdWJsaWNLZXlcbiAgICAgICkgPz8gW107XG5cbiAgICBpZiAodXNlcnMubGVuZ3RoKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgdXNlcnMubWFwKChbdSwgcmlnaHRzXSkgPT5cbiAgICAgICAgICB0aGlzLnNoYXJlRm9sZGVyKHtcbiAgICAgICAgICAgIGZvbGRlcklkOiBmb2xkZXIuaWQsXG4gICAgICAgICAgICByaWdodHMsXG4gICAgICAgICAgICB1c2VySWQ6IHUuaWRcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBmb2xkZXI7XG4gIH1cblxuICBhc3luYyBmb2xkZXIoe1xuICAgIGlkLFxuICAgIGRlbGV0ZWRcbiAgfToge1xuICAgIGlkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBkZWxldGVkPzogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0gPSB7fSk6IFByb21pc2U8Rm9sZGVyRnVsbCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGZvbGRlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICBmb2xkZXI6IFt7IGRlbGV0ZWQsIGlkIH0sIGdxbEZvbGRlckZ1bGxRdWVyeV1cbiAgICB9KTtcbiAgICBpZiAoIWZvbGRlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBncWxGb2xkZXJUb0V4dGVybmFsRm9sZGVyRnVsbChmb2xkZXIsIHRoaXMuI2tleXMpO1xuICB9XG5cbiAgYXN5bmMgZmlsZSh7IGlkIH06IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxTZWNyZWN5RmlsZSB8IG51bGw+IHtcbiAgICBjb25zdCB7IGZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsRmlsZVF1ZXJ5XG4gICAgICBdXG4gICAgfSk7XG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGdxbEZpbGVUb0V4dGVybmFsKGZpbGUsIHRoaXMuI2tleXMpO1xuICB9XG5cbiAgYXN5bmMgdkZpbGUoeyBpZCB9OiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8VkZpbGVXaXRoRm9sZGVyIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgdkZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgdkZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIGdxbFZGaWxlV2l0aEZvbGRlclF1ZXJ5XG4gICAgICBdXG4gICAgfSk7XG4gICAgaWYgKCF2RmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBncWxWRmlsZVRvRXh0ZXJuYWwodkZpbGUsIHRoaXMuI2tleXMpIGFzIFByb21pc2U8VkZpbGVXaXRoRm9sZGVyPjtcbiAgfVxuXG4gIGFzeW5jIG1haWwoeyBpZCB9OiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8TWFpbCB8IG51bGw+IHtcbiAgICBjb25zdCB7IG1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgbWFpbDogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsTWFpbFF1ZXJ5XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIW1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbChtYWlsLCB0aGlzLiNrZXlzKTtcbiAgfVxuXG4gIGFzeW5jIHNoYXJlVkZpbGUoe1xuICAgIHZGaWxlSWQsXG4gICAgdXNlcklkLFxuICAgIHJpZ2h0c1xuICB9OiB7XG4gICAgdkZpbGVJZDogc3RyaW5nO1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICAgIHJpZ2h0czogUmlnaHRzO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbGV0IHZGaWxlID0gdkZpbGVzQ2FjaGUuZ2V0KHZGaWxlSWQpO1xuXG4gICAgaWYgKCF2RmlsZSkge1xuICAgICAgYXdhaXQgdGhpcy52RmlsZSh7IGlkOiB2RmlsZUlkIH0pO1xuICAgICAgdkZpbGUgPSB2RmlsZXNDYWNoZS5nZXQodkZpbGVJZCk7XG5cbiAgICAgIGlmICghdkZpbGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLnVzZXIoeyB1c2VySWQsIHdpdGhQdWJsaWNLZXk6IHRydWUgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBuYW1lS2V5ID0gc29kaXVtLnRvX2hleChcbiAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgIHNvZGl1bS5mcm9tX2hleCh2RmlsZS51c2VyQXBwLm5hbWVLZXkpLFxuICAgICAgICB1c2VyLnB1YmxpY0tleSxcbiAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IGhpc3RvcnkgPSBuZXcgQXJyYXk8e1xuICAgICAgaWQ6IHN0cmluZztcbiAgICAgIGtleTogc3RyaW5nO1xuICAgIH0+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGggb2YgdkZpbGUuaGlzdG9yeSkge1xuICAgICAgaWYgKCFoLnVzZXIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBoaXN0b3J5LnB1c2goe1xuICAgICAgICBpZDogaC5pZCxcbiAgICAgICAga2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgoaC51c2VyLmtleSksXG4gICAgICAgICAgICB1c2VyLnB1YmxpY0tleSxcbiAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBzaGFyZVZGaWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHNoYXJlVkZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIHZGaWxlSWQsXG4gICAgICAgICAgdXNlcklkLFxuICAgICAgICAgIHJpZ2h0cyxcbiAgICAgICAgICBuYW1lS2V5LFxuICAgICAgICAgIGhpc3RvcnlcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNoYXJlVkZpbGUgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBzaGFyZWRWRmlsZXMoKTogUHJvbWlzZTxWRmlsZVdpdGhGb2xkZXJbXT4ge1xuICAgIGNvbnN0IHsgc2hhcmVkVkZpbGVzIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHNoYXJlZFZGaWxlczogZ3FsVkZpbGVXaXRoRm9sZGVyUXVlcnlcbiAgICB9KTtcblxuICAgIGNvbnN0IHZGaWxlcyA9IG5ldyBBcnJheTxWRmlsZVdpdGhGb2xkZXI+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHZGaWxlIG9mIHNoYXJlZFZGaWxlcykge1xuICAgICAgdkZpbGVzLnB1c2goXG4gICAgICAgIChhd2FpdCBncWxWRmlsZVRvRXh0ZXJuYWwodkZpbGUsIHRoaXMuI2tleXMpKSBhcyBWRmlsZVdpdGhGb2xkZXJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZGaWxlcztcbiAgfVxuXG4gIGFzeW5jIHZGaWxlc1NoYXJlZFdpdGhNZSgpOiBQcm9taXNlPFZGaWxlV2l0aEZvbGRlcltdPiB7XG4gICAgY29uc3QgeyB2RmlsZXNTaGFyZWRXaXRoTWUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgdkZpbGVzU2hhcmVkV2l0aE1lOiBncWxWRmlsZVdpdGhGb2xkZXJRdWVyeVxuICAgIH0pO1xuXG4gICAgY29uc3QgdkZpbGVzID0gbmV3IEFycmF5PFZGaWxlV2l0aEZvbGRlcj4oKTtcblxuICAgIGZvciAoY29uc3QgdkZpbGUgb2YgdkZpbGVzU2hhcmVkV2l0aE1lKSB7XG4gICAgICB2RmlsZXMucHVzaChcbiAgICAgICAgKGF3YWl0IGdxbFZGaWxlVG9FeHRlcm5hbCh2RmlsZSwgdGhpcy4ja2V5cykpIGFzIFZGaWxlV2l0aEZvbGRlclxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdkZpbGVzO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlZFZGaWxlcygpOiBQcm9taXNlPFZGaWxlW10+IHtcbiAgICBjb25zdCB7IGRlbGV0ZWRWRmlsZXMgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZGVsZXRlZFZGaWxlczogZ3FsVkZpbGVRdWVyeVxuICAgIH0pO1xuXG4gICAgY29uc3QgdkZpbGVzID0gbmV3IEFycmF5PFZGaWxlPigpO1xuXG4gICAgZm9yIChjb25zdCB2RmlsZSBvZiBkZWxldGVkVkZpbGVzKSB7XG4gICAgICB2RmlsZXMucHVzaCgoYXdhaXQgZ3FsVkZpbGVUb0V4dGVybmFsKHZGaWxlLCB0aGlzLiNrZXlzKSkgYXMgVkZpbGUpO1xuICAgIH1cblxuICAgIHJldHVybiB2RmlsZXM7XG4gIH1cblxuICBhc3luYyBzaGFyZWRGb2xkZXJzKCk6IFByb21pc2U8Rm9sZGVyW10+IHtcbiAgICBjb25zdCB7IHNoYXJlZEZvbGRlcnMgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgc2hhcmVkRm9sZGVyczogZ3FsRm9sZGVyUXVlcnlcbiAgICB9KTtcblxuICAgIGNvbnN0IGZvbGRlcnMgPSBuZXcgQXJyYXk8Rm9sZGVyPigpO1xuXG4gICAgZm9yIChjb25zdCBmb2xkZXIgb2Ygc2hhcmVkRm9sZGVycykge1xuICAgICAgZm9sZGVycy5wdXNoKGF3YWl0IGdxbEZvbGRlclRvRXh0ZXJuYWwoZm9sZGVyLCB0aGlzLiNrZXlzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvbGRlcnM7XG4gIH1cblxuICBhc3luYyBmb2xkZXJzU2hhcmVkV2l0aE1lKCk6IFByb21pc2U8Rm9sZGVyW10+IHtcbiAgICBjb25zdCB7IGZvbGRlcnNTaGFyZWRXaXRoTWUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZm9sZGVyc1NoYXJlZFdpdGhNZTogZ3FsRm9sZGVyUXVlcnlcbiAgICB9KTtcblxuICAgIGNvbnN0IGZvbGRlcnMgPSBuZXcgQXJyYXk8Rm9sZGVyPigpO1xuXG4gICAgZm9yIChjb25zdCBmb2xkZXIgb2YgZm9sZGVyc1NoYXJlZFdpdGhNZSkge1xuICAgICAgZm9sZGVycy5wdXNoKGF3YWl0IGdxbEZvbGRlclRvRXh0ZXJuYWwoZm9sZGVyLCB0aGlzLiNrZXlzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvbGRlcnM7XG4gIH1cblxuICBhc3luYyBkZWxldGVkRm9sZGVycygpOiBQcm9taXNlPEZvbGRlcltdPiB7XG4gICAgY29uc3QgeyBkZWxldGVkRm9sZGVycyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICBkZWxldGVkRm9sZGVyczogZ3FsRm9sZGVyUXVlcnlcbiAgICB9KTtcblxuICAgIGNvbnN0IGZvbGRlcnMgPSBuZXcgQXJyYXk8Rm9sZGVyPigpO1xuXG4gICAgZm9yIChjb25zdCBmb2xkZXIgb2YgZGVsZXRlZEZvbGRlcnMpIHtcbiAgICAgIGZvbGRlcnMucHVzaChhd2FpdCBncWxGb2xkZXJUb0V4dGVybmFsKGZvbGRlciwgdGhpcy4ja2V5cykpO1xuICAgIH1cblxuICAgIHJldHVybiBmb2xkZXJzO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlZE1haWxzKHsgbWFpbFR5cGUgfTogeyBtYWlsVHlwZTogTWFpbFR5cGUgfSk6IFByb21pc2U8TWFpbFtdPiB7XG4gICAgY29uc3QgeyBkZWxldGVkTWFpbHMgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZGVsZXRlZE1haWxzOiBbeyBtYWlsVHlwZSB9LCBncWxNYWlsUXVlcnldXG4gICAgfSk7XG5cbiAgICBjb25zdCBtYWlscyA9IG5ldyBBcnJheTxNYWlsPigpO1xuXG4gICAgZm9yIChjb25zdCBtIG9mIGRlbGV0ZWRNYWlscykge1xuICAgICAgY29uc3QgbWFpbCA9IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKG0sIHRoaXMuI2tleXMpO1xuICAgICAgaWYgKG1haWwpIHtcbiAgICAgICAgbWFpbHMucHVzaChtYWlsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWFpbHM7XG4gIH1cblxuICBhc3luYyBzaGFyZUZvbGRlcih7XG4gICAgZm9sZGVySWQsXG4gICAgdXNlcklkLFxuICAgIHJpZ2h0c1xuICB9OiB7XG4gICAgZm9sZGVySWQ6IHN0cmluZztcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgICByaWdodHM6IFJpZ2h0cztcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLnVzZXIoeyB1c2VySWQsIHdpdGhQdWJsaWNLZXk6IHRydWUgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgeyBzaGFyZUZvbGRlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBzaGFyZUZvbGRlcjogW1xuICAgICAgICB7IGZvbGRlcklkLCB1c2VySWQgfSxcbiAgICAgICAge1xuICAgICAgICAgIHZGaWxlczogdHJ1ZSxcbiAgICAgICAgICBmb2xkZXJzOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGNvbnN0IHNoYXJlRm9sZGVyczogU2hhcmVGb2xkZXJzSW5wdXQgPSB7XG4gICAgICB2RmlsZXM6IFtdLFxuICAgICAgZm9sZGVyczogW11cbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBpZCBvZiBzaGFyZUZvbGRlci5mb2xkZXJzKSB7XG4gICAgICBjb25zdCBuYW1lS2V5ID0gYXdhaXQgdGhpcy5wZXJGb2xkZXIoaWQsIHVzZXIucHVibGljS2V5KTtcbiAgICAgIGlmIChuYW1lS2V5KSB7XG4gICAgICAgIHNoYXJlRm9sZGVycy5mb2xkZXJzLnB1c2gobmFtZUtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpZCBvZiBzaGFyZUZvbGRlci52RmlsZXMpIHtcbiAgICAgIGNvbnN0IHZGaWxlSW5wdXQgPSBhd2FpdCB0aGlzLnBlclZGaWxlKGlkLCB1c2VyLnB1YmxpY0tleSk7XG4gICAgICBpZiAodkZpbGVJbnB1dCkge1xuICAgICAgICBzaGFyZUZvbGRlcnMudkZpbGVzLnB1c2godkZpbGVJbnB1dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyBzaGFyZUZvbGRlckZpbmlzaCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBzaGFyZUZvbGRlckZpbmlzaDogW1xuICAgICAgICB7XG4gICAgICAgICAgcmlnaHRzLFxuICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICBzaGFyZUZvbGRlcnNcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNoYXJlRm9sZGVyRmluaXNoID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRm9sZGVyKHtcbiAgICBmb2xkZXJJZCxcbiAgICBuYW1lLFxuICAgIGlzRmF2b3JpdGUsXG4gICAgZGVsZXRlZEF0XG4gIH06IHtcbiAgICBmb2xkZXJJZDogc3RyaW5nO1xuICAgIG5hbWU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGlzRmF2b3JpdGU/OiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBkZWxldGVkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8Rm9sZGVyRnVsbD4ge1xuICAgIGxldCBmb2xkZXIgPSBmb2xkZXJzQ2FjaGUuZ2V0KGZvbGRlcklkKTtcbiAgICBpZiAoIWZvbGRlcikge1xuICAgICAgYXdhaXQgdGhpcy5mb2xkZXIoeyBpZDogZm9sZGVySWQgfSk7XG4gICAgICBmb2xkZXIgPSBmb2xkZXJzQ2FjaGUuZ2V0KGZvbGRlcklkKTtcbiAgICAgIGlmICghZm9sZGVyKSB7XG4gICAgICAgIHRocm93IGBDYW4ndCBmaW5kIGZvbGRlciAke2ZvbGRlcklkfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbmFtZSA9IG5hbWVcbiAgICAgID8gZm9sZGVyLnVzZXJBcHA/Lm5hbWVLZXlcbiAgICAgICAgPyBhd2FpdCBlbmNyeXB0TmFtZShuYW1lLCBmb2xkZXIudXNlckFwcC5uYW1lS2V5KVxuICAgICAgICA6IG5hbWVcbiAgICAgIDogbnVsbDtcblxuICAgIGNvbnN0IHsgdXBkYXRlRm9sZGVyIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHVwZGF0ZUZvbGRlcjogW1xuICAgICAgICB7XG4gICAgICAgICAgZm9sZGVySWQsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpc0Zhdm9yaXRlLFxuICAgICAgICAgIGRlbGV0ZWRBdFxuICAgICAgICB9LFxuICAgICAgICBncWxGb2xkZXJGdWxsUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXBkYXRlRm9sZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCB1cGRhdGUgZm9sZGVyXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBncWxGb2xkZXJUb0V4dGVybmFsRm9sZGVyRnVsbCh1cGRhdGVGb2xkZXIsIHRoaXMuI2tleXMpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlQXBwTm90aWZpY2F0aW9ucyhcbiAgICBub3RpZmljYXRpb25zOiBQYXJ0aWFsPFVzZXJBcHBOb3RpZmljYXRpb25zPlxuICApOiBQcm9taXNlPFVzZXJBcHBOb3RpZmljYXRpb25zIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgdXBkYXRlQXBwTm90aWZpY2F0aW9ucyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICB1cGRhdGVBcHBOb3RpZmljYXRpb25zOiBbXG4gICAgICAgIG5vdGlmaWNhdGlvbnMsXG4gICAgICAgIHtcbiAgICAgICAgICBlbmFibGVBbGw6IHRydWUsXG4gICAgICAgICAgbWFpbDogdHJ1ZSxcbiAgICAgICAgICBjbG91ZDogdHJ1ZSxcbiAgICAgICAgICBkaXNhYmxlQWxsVW50aWw6IHRydWVcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVBcHBOb3RpZmljYXRpb25zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udXBkYXRlQXBwTm90aWZpY2F0aW9ucyxcbiAgICAgIGRpc2FibGVBbGxVbnRpbDogdXBkYXRlQXBwTm90aWZpY2F0aW9ucy5kaXNhYmxlQWxsVW50aWxcbiAgICAgICAgPyBuZXcgRGF0ZSh1cGRhdGVBcHBOb3RpZmljYXRpb25zLmRpc2FibGVBbGxVbnRpbClcbiAgICAgICAgOiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGFwcE5vdGlmaWNhdGlvbnMoKTogUHJvbWlzZTxVc2VyQXBwTm90aWZpY2F0aW9ucyB8IG51bGw+IHtcbiAgICBjb25zdCB7IGFwcE5vdGlmaWNhdGlvbnMgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgYXBwTm90aWZpY2F0aW9uczoge1xuICAgICAgICBlbmFibGVBbGw6IHRydWUsXG4gICAgICAgIG1haWw6IHRydWUsXG4gICAgICAgIGNsb3VkOiB0cnVlLFxuICAgICAgICBkaXNhYmxlQWxsVW50aWw6IHRydWVcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghYXBwTm90aWZpY2F0aW9ucykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFwcE5vdGlmaWNhdGlvbnMsXG4gICAgICBkaXNhYmxlQWxsVW50aWw6IGFwcE5vdGlmaWNhdGlvbnMuZGlzYWJsZUFsbFVudGlsXG4gICAgICAgID8gbmV3IERhdGUoYXBwTm90aWZpY2F0aW9ucy5kaXNhYmxlQWxsVW50aWwpXG4gICAgICAgIDogbnVsbFxuICAgIH07XG4gIH1cblxuICBhc3luYyBjcmVhdGVNYWlsKFxuICAgIGRhdGE6IE5ld01haWwsXG4gICAgY3VzdG9tTWVzc2FnZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbWFpbCA9IGF3YWl0IHRoaXMuY3JlYXRlRHJhZnRNYWlsKGRhdGEpO1xuICAgIGlmICghbWFpbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZW5kRHJhZnRNYWlsKG1haWwubWFpbEludGVncml0eUlkLCBjdXN0b21NZXNzYWdlKTtcbiAgfVxuXG4gIGFzeW5jIHdhaXRpbmdSZWNlaXZlZE1haWxzKCk6IFByb21pc2U8V2FpdGluZ1JlY2VpdmVkTWFpbFtdPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICB3YWl0aW5nUmVjZWl2ZWRNYWlsczoge1xuICAgICAgICAgICAgZGF0ZTogdHJ1ZSxcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzQ291bnQ6IHRydWUsXG4gICAgICAgICAgICBzZW5kZXI6IHtcbiAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgICAgICBwdWJsaWNLZXk6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWNpcGllbnRzOiB7XG4gICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgICAgICAgcHVibGljS2V5OiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGVtcG9yYXJ5UmVjaXBpZW50czoge1xuICAgICAgICAgICAgICBlbWFpbDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBnZXQgd2FpdGluZyByZWNlaXZlZCBtYWlsc1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNlci53YWl0aW5nUmVjZWl2ZWRNYWlscy5tYXAobSA9PiAoe1xuICAgICAgaWQ6IGdlbmVyYXRlKCksXG4gICAgICAuLi5tLFxuICAgICAgZGF0ZTogbmV3IERhdGUobS5kYXRlKVxuICAgIH0pKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZURyYWZ0TWFpbChcbiAgICBkcmFmdElkOiBzdHJpbmcsXG4gICAgeyBib2R5LCBzdWJqZWN0LCBmaWxlcywgcmVjaXBpZW50c0lkcywgcmVwbHlUbyB9OiBQYXJ0aWFsPE5ld01haWw+XG4gICk6IFByb21pc2U8RHJhZnRNYWlsIHwgbnVsbD4ge1xuICAgIGNvbnN0IGRyYWZ0cyA9IGF3YWl0IHRoaXMuZHJhZnRNYWlscygpO1xuICAgIGNvbnN0IGRyYWZ0ID0gZHJhZnRzLmZpbmQoZCA9PiBkLm1haWxJbnRlZ3JpdHlJZCA9PT0gZHJhZnRJZCk7XG4gICAgaWYgKCFkcmFmdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRyYWZ0ICR7ZHJhZnRJZH1gKTtcbiAgICB9XG4gICAgbGV0IGhhc2hLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIGxldCBoYXNoOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBpZiAoYm9keSB8fCBzdWJqZWN0KSB7XG4gICAgICBoYXNoS2V5ID0gc29kaXVtLnJhbmRvbWJ5dGVzX2J1ZihcbiAgICAgICAgc29kaXVtLmNyeXB0b19nZW5lcmljaGFzaF9LRVlCWVRFUyxcbiAgICAgICAgXCJoZXhcIlxuICAgICAgKTtcbiAgICAgIGhhc2ggPSBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoKFxuICAgICAgICBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoX0JZVEVTLFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7IGJvZHksIHN1YmplY3QgfSksXG4gICAgICAgIGhhc2hLZXksXG4gICAgICAgIFwiaGV4XCJcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHNlbmRlckZpbGVzID0gbmV3IEFycmF5PE1haWxGaWxlSW5wdXQ+KCk7XG4gICAgaWYgKGZpbGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGYgb2YgZmlsZXMpIHtcbiAgICAgICAgbGV0IGZpbGUgPSBmaWxlc0NhY2hlLmdldChmLmlkKTtcbiAgICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5maWxlKHsgaWQ6IGYuaWQgfSk7XG4gICAgICAgICAgZmlsZSA9IGZpbGVzQ2FjaGUuZ2V0KGYuaWQpO1xuICAgICAgICAgIGlmICghZmlsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7Zi5uYW1lfSAoJHtmLmlkfSkgZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZmlsZS51c2VyKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgc2VuZGVyRmlsZXMucHVzaCh7XG4gICAgICAgICAgaWQ6IGZpbGUuaWQsXG4gICAgICAgICAgZmlsZUtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhmaWxlLnVzZXIua2V5KSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICAgICAgbmFtZTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhmLm5hbWUpLFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHVwZGF0ZURyYWZ0TWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICB1cGRhdGVEcmFmdE1haWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIGRyYWZ0SWQsXG4gICAgICAgICAgcmVjaXBpZW50czogcmVjaXBpZW50c0lkcyxcbiAgICAgICAgICByZXBseVRvLFxuICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgICAgID8gc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGJvZHkpLFxuICAgICAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBzdWJqZWN0OiBzdWJqZWN0XG4gICAgICAgICAgICA/IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhzdWJqZWN0KSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgc2VuZGVyRmlsZXMsXG4gICAgICAgICAgaGFzaCxcbiAgICAgICAgICBoYXNoS2V5XG4gICAgICAgIH0sXG4gICAgICAgIGdxbE1haWxRdWVyeVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVEcmFmdE1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbChcbiAgICAgIHVwZGF0ZURyYWZ0TWFpbCxcbiAgICAgIHRoaXMuI2tleXNcbiAgICApIGFzIERyYWZ0TWFpbDtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZURyYWZ0TWFpbChkcmFmdElkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRlbGV0ZURyYWZ0TWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkZWxldGVEcmFmdE1haWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIGRyYWZ0SWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVEcmFmdE1haWwgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBkZWxldGVWRmlsZVNoYXJpbmcoe1xuICAgIHZGaWxlSWQsXG4gICAgdXNlcklkXG4gIH06IHtcbiAgICB2RmlsZUlkOiBzdHJpbmc7XG4gICAgdXNlcklkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRlbGV0ZVZGaWxlU2hhcmluZyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkZWxldGVWRmlsZVNoYXJpbmc6IFtcbiAgICAgICAge1xuICAgICAgICAgIHZGaWxlSWQsXG4gICAgICAgICAgdXNlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcbiAgICByZXR1cm4gZGVsZXRlVkZpbGVTaGFyaW5nO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRm9sZGVyU2hhcmluZyh7XG4gICAgZm9sZGVySWQsXG4gICAgdXNlcklkXG4gIH06IHtcbiAgICBmb2xkZXJJZDogc3RyaW5nO1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVGb2xkZXJTaGFyaW5nIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZUZvbGRlclNoYXJpbmc6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZvbGRlcklkLFxuICAgICAgICAgIHVzZXJJZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG4gICAgcmV0dXJuIGRlbGV0ZUZvbGRlclNoYXJpbmc7XG4gIH1cblxuICBhc3luYyBkdXBsaWNhdGVWRmlsZSh7XG4gICAgdkZpbGVJZCxcbiAgICBmb2xkZXJJZCxcbiAgICBjdXN0b21OYW1lXG4gIH06IHtcbiAgICB2RmlsZUlkOiBzdHJpbmc7XG4gICAgZm9sZGVySWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGN1c3RvbU5hbWU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbGV0IGZpbGUgPSB2RmlsZXNDYWNoZS5nZXQodkZpbGVJZCk7XG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICBhd2FpdCB0aGlzLnZGaWxlKHsgaWQ6IHZGaWxlSWQgfSk7XG4gICAgICBmaWxlID0gdkZpbGVzQ2FjaGUuZ2V0KHZGaWxlSWQpO1xuICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAoJHt2RmlsZUlkfSkgZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICB9XG4gICAgfVxuICAgIGN1c3RvbU5hbWUgPSBjdXN0b21OYW1lXG4gICAgICA/IGF3YWl0IGVuY3J5cHROYW1lKGN1c3RvbU5hbWUsIGZpbGUudXNlckFwcC5uYW1lS2V5KVxuICAgICAgOiBudWxsO1xuXG4gICAgY29uc3QgeyBkdXBsaWNhdGVWRmlsZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkdXBsaWNhdGVWRmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgdkZpbGVJZCxcbiAgICAgICAgICBmb2xkZXJJZCxcbiAgICAgICAgICBjdXN0b21OYW1lXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBkdXBsaWNhdGVWRmlsZTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZvbGRlckNsb3VkVHJhc2goe1xuICAgIGlkc1xuICB9OiB7XG4gICAgaWRzOiBBcnJheTxzdHJpbmc+O1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVGb2xkZXJDbG91ZFRyYXNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZUZvbGRlckNsb3VkVHJhc2g6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkc1xuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG4gICAgcmV0dXJuIGRlbGV0ZUZvbGRlckNsb3VkVHJhc2ggPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBkZWxldGVWRmlsZUNsb3VkVHJhc2goe1xuICAgIGlkc1xuICB9OiB7XG4gICAgaWRzOiBBcnJheTxzdHJpbmc+O1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVWRmlsZUNsb3VkVHJhc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgZGVsZXRlVkZpbGVDbG91ZFRyYXNoOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZHNcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVWRmlsZUNsb3VkVHJhc2ggPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBkZWxldGVNYWlsVHJhc2goeyBpZHMgfTogeyBpZHM6IEFycmF5PHN0cmluZz4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlTWFpbFRyYXNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZU1haWxUcmFzaDogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRzXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcbiAgICByZXR1cm4gZGVsZXRlTWFpbFRyYXNoO1xuICB9XG5cbiAgYXN5bmMgZW1wdHlNYWlsVHJhc2goKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBlbXB0eU1haWxUcmFzaCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBlbXB0eU1haWxUcmFzaDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVtcHR5TWFpbFRyYXNoID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgZW1wdHlDbG91ZFRyYXNoKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZW1wdHlDbG91ZFRyYXNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGVtcHR5Q2xvdWRUcmFzaDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVtcHR5Q2xvdWRUcmFzaCA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIHJlY292ZXJWRmlsZSh7IHZGaWxlSWQgfTogeyB2RmlsZUlkOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgcmVjb3ZlclZGaWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHJlY292ZXJWRmlsZTogW3sgdkZpbGVJZCB9LCB0cnVlXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlY292ZXJWRmlsZTtcbiAgfVxuXG4gIGFzeW5jIHJlY292ZXJGb2xkZXIoeyBpZCB9OiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgcmVjb3ZlckZvbGRlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICByZWNvdmVyRm9sZGVyOiBbeyBpZCB9LCB0cnVlXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlY292ZXJGb2xkZXIgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyByZWNvdmVyTWFpbCh7IG1haWxJZCB9OiB7IG1haWxJZDogc3RyaW5nIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IHJlY292ZXJNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHJlY292ZXJNYWlsOiBbeyBtYWlsSWQgfSwgdHJ1ZV1cbiAgICB9KTtcblxuICAgIHJldHVybiByZWNvdmVyTWFpbDtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZpbGUoe1xuICAgIGZpbGVJZCxcbiAgICB2RmlsZUlkXG4gIH06IHtcbiAgICBmaWxlSWQ6IHN0cmluZztcbiAgICB2RmlsZUlkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRlbGV0ZUZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgZGVsZXRlRmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIHZGaWxlSWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVGaWxlO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlVkZpbGUoeyBmaWxlSWQgfTogeyBmaWxlSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVWRmlsZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkZWxldGVWRmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlsZUlkXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcbiAgICByZXR1cm4gZGVsZXRlVkZpbGU7XG4gIH1cblxuICBhc3luYyBkZWxldGVNYWlsKHsgbWFpbElkIH06IHsgbWFpbElkOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlTWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkZWxldGVNYWlsOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBtYWlsSWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVNYWlsO1xuICB9XG5cbiAgYXN5bmMgc2F2ZUluQ2xvdWQoe1xuICAgIGZpbGVJZCxcbiAgICBuYW1lLFxuICAgIGZvbGRlcklkXG4gIH06IHtcbiAgICBmaWxlSWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZm9sZGVySWQ/OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFZGaWxlV2l0aEZvbGRlcj4ge1xuICAgIGlmIChmb2xkZXJJZCAmJiAhZm9sZGVyc0NhY2hlLmhhcyhmb2xkZXJJZCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuZm9sZGVyKHsgaWQ6IGZvbGRlcklkIH0pO1xuICAgICAgaWYgKCFmb2xkZXJzQ2FjaGUuaGFzKGZvbGRlcklkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmb2xkZXIgJHtmb2xkZXJJZH0gZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGtleSA9IFwiXCI7XG5cbiAgICBjb25zdCBmaWxlID0gZmlsZXNDYWNoZS5nZXQoZmlsZUlkKTtcblxuICAgIGlmICghZmlsZSkge1xuICAgICAgYXdhaXQgdGhpcy5maWxlKHsgaWQ6IGZpbGVJZCB9KTtcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc0NhY2hlLmdldChmaWxlSWQpID8/IG51bGw7XG4gICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgY29uc3QgcmVjZWl2ZWRNYWlscyA9IGF3YWl0IHRoaXMucmVjZWl2ZWRNYWlscygpO1xuICAgICAgICBjb25zdCBtYWlsID0gcmVjZWl2ZWRNYWlscy5maW5kKG0gPT5cbiAgICAgICAgICBtLmZpbGVzLnNvbWUoZiA9PiBmLmlkID09PSBmaWxlSWQpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFtYWlsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBmaW5kIG1haWwgd2l0aCB0aGUgZmlsZSAke2ZpbGVJZH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVNYWlsID0gbWFpbC5maWxlcy5maW5kKGYgPT4gZi5pZCA9PT0gZmlsZUlkKTtcblxuICAgICAgICBpZiAoIWZpbGVNYWlsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBmaW5kIG1haWwgd2l0aCB0aGUgZmlsZSAke2ZpbGVJZH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVLZXkgPSBkZWNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmaWxlTWFpbC5rZXkpLFxuICAgICAgICAgIG1haWwuc2VuZGVyLnB1YmxpY0tleSxcbiAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgKTtcblxuICAgICAgICBrZXkgPSBzb2RpdW0udG9faGV4KGZpbGVLZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFmaWxlLnVzZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVycm9yIDFcIik7XG4gICAgICAgIH1cbiAgICAgICAga2V5ID0gZmlsZS51c2VyLmtleTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFmaWxlLnVzZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBlcnJvciAyXCIpO1xuICAgICAgfVxuICAgICAga2V5ID0gZmlsZS51c2VyLmtleTtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSBcIlwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVycm9yIDNcIik7XG4gICAgfVxuXG4gICAga2V5ID0gc29kaXVtLnRvX2hleChcbiAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgIHNvZGl1bS5mcm9tX2hleChrZXkpLFxuICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IG5hbWVLZXkgPSBzZWNyZXRzdHJlYW1LZXlnZW4oKTtcbiAgICBjb25zdCBlbmNyeXB0ZWROYW1lID0gYXdhaXQgZW5jcnlwdE5hbWUobmFtZSwgc29kaXVtLnRvX2hleChuYW1lS2V5KSk7XG4gICAgY29uc3QgZW5jcnlwdGVkTmFtZUtleSA9IHNvZGl1bS50b19oZXgoXG4gICAgICBlbmNyeXB0Q3J5cHRvQm94KG5hbWVLZXksIHRoaXMuI2tleXMucHVibGljS2V5LCB0aGlzLiNrZXlzLnByaXZhdGVLZXkpXG4gICAgKTtcblxuICAgIGNvbnN0IHsgc2F2ZUluQ2xvdWQgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgc2F2ZUluQ2xvdWQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgZm9sZGVySWQsXG4gICAgICAgICAgZmlsZW5hbWU6IGVuY3J5cHRlZE5hbWUsXG4gICAgICAgICAgbmFtZUtleTogZW5jcnlwdGVkTmFtZUtleVxuICAgICAgICB9LFxuICAgICAgICBncWxWRmlsZVdpdGhGb2xkZXJRdWVyeVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgY29uc3QgdkZpbGUgPSAoYXdhaXQgZ3FsVkZpbGVUb0V4dGVybmFsKFxuICAgICAgc2F2ZUluQ2xvdWQsXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKSkgYXMgVkZpbGVXaXRoRm9sZGVyO1xuXG4gICAgY29uc3QgbWUgPSB2RmlsZS5mb2xkZXIudXNlcnMuZmluZChcbiAgICAgIChbdV0pID0+IHUucHVibGljS2V5ID09PSB0aGlzLiNrZXlzLnB1YmxpY0tleVxuICAgICk7XG5cbiAgICBpZiAobWUgJiYgW1wiYWRtaW5cIiwgXCJ3cml0ZVwiXS5pbmNsdWRlcyhtZVsxXSkpIHtcbiAgICAgIGNvbnN0IG90aGVycyA9IHZGaWxlLmZvbGRlci51c2Vycy5maWx0ZXIoXG4gICAgICAgIChbdV0pID0+IHUucHVibGljS2V5ICE9PSB0aGlzLiNrZXlzLnB1YmxpY0tleVxuICAgICAgKTtcblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG90aGVycy5tYXAoKFt1LCByaWdodHNdKSA9PlxuICAgICAgICAgIHRoaXMuc2hhcmVWRmlsZSh7XG4gICAgICAgICAgICB2RmlsZUlkOiB2RmlsZS5pZCxcbiAgICAgICAgICAgIHJpZ2h0cyxcbiAgICAgICAgICAgIHVzZXJJZDogdS5pZFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZGaWxlO1xuICB9XG5cbiAgYXN5bmMgc2VuZERyYWZ0TWFpbChcbiAgICBkcmFmdElkOiBzdHJpbmcsXG4gICAgY3VzdG9tTWVzc2FnZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZHJhZnRzID0gYXdhaXQgdGhpcy5kcmFmdE1haWxzKCk7XG5cbiAgICBjb25zdCBkcmFmdCA9IGRyYWZ0cy5maW5kKGQgPT4gZC5tYWlsSW50ZWdyaXR5SWQgPT09IGRyYWZ0SWQpO1xuICAgIGlmICghZHJhZnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgcmVjaXBpZW50cyA9IG5ldyBBcnJheTxNYWlsUmVjaXBpZW50SW5wdXQ+KCk7XG5cbiAgICBjb25zdCB0ZW1wb3JhcnlSZWNpcGllbnRzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgIGZvciAoY29uc3QgeyBlbWFpbCB9IG9mIGRyYWZ0LnRlbXBvcmFyeVJlY2lwaWVudHMpIHtcbiAgICAgIGlmICghZW1haWwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMuX2VhY2hVc2VyKFxuICAgICAgICBkcmFmdC5maWxlcyxcbiAgICAgICAgZHJhZnQuc3ViamVjdCxcbiAgICAgICAgZHJhZnQuYm9keSxcbiAgICAgICAgZW1haWxcbiAgICAgICk7XG5cbiAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgdGVtcG9yYXJ5UmVjaXBpZW50cy5wdXNoKGVtYWlsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY2lwaWVudHMucHVzaChpbnB1dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB7IGlkIH0gb2YgZHJhZnQucmVjaXBpZW50cykge1xuICAgICAgY29uc3QgaW5wdXQgPSBhd2FpdCB0aGlzLl9lYWNoVXNlcihcbiAgICAgICAgZHJhZnQuZmlsZXMsXG4gICAgICAgIGRyYWZ0LnN1YmplY3QsXG4gICAgICAgIGRyYWZ0LmJvZHksXG4gICAgICAgIGlkXG4gICAgICApO1xuXG4gICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgIHRlbXBvcmFyeVJlY2lwaWVudHMucHVzaChpZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWNpcGllbnRzLnB1c2goaW5wdXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2VuZERyYWZ0TWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBzZW5kRHJhZnRNYWlsOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZW1wb3JhcnlSZWNpcGllbnRzLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgZHJhZnRNYWlsSWQ6IGRyYWZ0Lm1haWxJbnRlZ3JpdHlJZCxcbiAgICAgICAgICBjdXN0b21NZXNzYWdlXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBzZW5kRHJhZnRNYWlsID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgc2VuZFdhaXRpbmdFbWFpbHMoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gVE9ETyBvcHRpIHRoaXNcbiAgICBjb25zdCBtYWlscyA9IGF3YWl0IHRoaXMuc2VudE1haWxzKCk7XG4gICAgY29uc3QgZmlsdGVyZWQgPSBtYWlscy5maWx0ZXIobSA9PiBtLnRlbXBvcmFyeVJlY2lwaWVudHMubGVuZ3RoID4gMCk7XG5cbiAgICBmb3IgKGNvbnN0IG1haWwgb2YgZmlsdGVyZWQpIHtcbiAgICAgIGZvciAoY29uc3QgeyBlbWFpbCB9IG9mIG1haWwudGVtcG9yYXJ5UmVjaXBpZW50cykge1xuICAgICAgICBpZiAoIWVtYWlsKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5wdXQgPSBhd2FpdCB0aGlzLl9lYWNoVXNlcihcbiAgICAgICAgICBtYWlsLmZpbGVzLFxuICAgICAgICAgIG1haWwuc3ViamVjdCxcbiAgICAgICAgICBtYWlsLmJvZHksXG4gICAgICAgICAgZW1haWxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgICAgICAgIHNlbmRPbmVNYWlsOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYWlsSW50ZWdyaXR5SWQ6IG1haWwubWFpbEludGVncml0eUlkLFxuICAgICAgICAgICAgICAgIHJlY2lwaWVudDogaW5wdXRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZURyYWZ0TWFpbCh7XG4gICAgYm9keSxcbiAgICBzdWJqZWN0LFxuICAgIGZpbGVzLFxuICAgIHJlY2lwaWVudHNJZHMsXG4gICAgcmVwbHlUb1xuICB9OiBOZXdNYWlsKTogUHJvbWlzZTxEcmFmdE1haWwgfCBudWxsPiB7XG4gICAgY29uc3QgaGFzaEtleSA9IHNvZGl1bS5yYW5kb21ieXRlc19idWYoXG4gICAgICBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoX0tFWUJZVEVTLFxuICAgICAgXCJoZXhcIlxuICAgICk7XG4gICAgY29uc3QgaGFzaCA9IHNvZGl1bS5jcnlwdG9fZ2VuZXJpY2hhc2goXG4gICAgICBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoX0JZVEVTLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoeyBib2R5LCBzdWJqZWN0IH0pLFxuICAgICAgaGFzaEtleSxcbiAgICAgIFwiaGV4XCJcbiAgICApO1xuICAgIGNvbnN0IHNlbmRlckZpbGVzID0gbmV3IEFycmF5PE1haWxGaWxlSW5wdXQ+KCk7XG4gICAgZm9yIChjb25zdCBmIG9mIGZpbGVzKSB7XG4gICAgICBsZXQgZmlsZSA9IGZpbGVzQ2FjaGUuZ2V0KGYuaWQpO1xuICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmlsZSh7IGlkOiBmLmlkIH0pO1xuICAgICAgICBmaWxlID0gZmlsZXNDYWNoZS5nZXQoZi5pZCk7XG4gICAgICAgIGlmICghZmlsZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAke2YubmFtZX0gKCR7Zi5pZH0pIGRvZXMgbm90IGV4aXN0c2ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWZpbGUudXNlcikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHNlbmRlckZpbGVzLnB1c2goe1xuICAgICAgICBpZDogZmlsZS5pZCxcbiAgICAgICAgZmlsZUtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGZpbGUudXNlci5rZXkpLFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIG5hbWU6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhmLm5hbWUpLFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY3JlYXRlRHJhZnRNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGNyZWF0ZURyYWZ0TWFpbDogW1xuICAgICAgICB7XG4gICAgICAgICAgcmVjaXBpZW50czogcmVjaXBpZW50c0lkcyxcbiAgICAgICAgICByZXBseVRvLFxuICAgICAgICAgIGJvZHk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoYm9keSksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIHN1YmplY3Q6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoc3ViamVjdCksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIHNlbmRlckZpbGVzLFxuICAgICAgICAgIGhhc2gsXG4gICAgICAgICAgaGFzaEtleVxuICAgICAgICB9LFxuICAgICAgICBncWxNYWlsUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghY3JlYXRlRHJhZnRNYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwoXG4gICAgICBjcmVhdGVEcmFmdE1haWwsXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKSBhcyBEcmFmdE1haWw7XG4gIH1cblxuICBhc3luYyBmaWxlQ29udGVudCh7XG4gICAgZmlsZUlkLFxuICAgIG9uRG93bmxvYWRQcm9ncmVzcyxcbiAgICBwcm9ncmVzc0RlY3J5cHQsXG4gICAgc2lnbmFsXG4gIH06IHtcbiAgICBmaWxlSWQ6IHN0cmluZztcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3M/OiAocHJvZ3Jlc3M6IERvd25sb2FkUHJvZ3Jlc3MpID0+IHZvaWQ7XG4gICAgcHJvZ3Jlc3NEZWNyeXB0PzogUHJvZ3Jlc3NDYWxsYmFjaztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8VWludDhBcnJheT4ge1xuICAgIGNvbnN0IHsgZmlsZUNvbnRlbnQgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZmlsZUNvbnRlbnQ6IFtcbiAgICAgICAgeyBmaWxlSWQgfSxcbiAgICAgICAge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgXCIuLi5vbiBGaWxlQ29udGVudENsb3VkXCI6IHtcbiAgICAgICAgICAgIHBhcnRzOiB7XG4gICAgICAgICAgICAgIGNvbnRlbnRVcmw6IHRydWUsXG4gICAgICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgICAgICBtZDU6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBrZXk6IHRydWUsXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHRydWUsXG4gICAgICAgICAgICB0b3RhbFNpemU6IHRydWUsXG4gICAgICAgICAgICBtZDU6IHRydWUsXG4gICAgICAgICAgICBtZDVFbmNyeXB0ZWQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRmlsZUNvbnRlbnRSZWNlaXZlZE1haWxcIjoge1xuICAgICAgICAgICAgcGFydHM6IHtcbiAgICAgICAgICAgICAgY29udGVudFVybDogdHJ1ZSxcbiAgICAgICAgICAgICAgb3JkZXI6IHRydWUsXG4gICAgICAgICAgICAgIG1kNTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtleTogdHJ1ZSxcbiAgICAgICAgICAgIHNlbmRlclB1YmxpY0tleTogdHJ1ZSxcbiAgICAgICAgICAgIHRvdGFsU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1kNTogdHJ1ZSxcbiAgICAgICAgICAgIG1kNUVuY3J5cHRlZDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBGaWxlQ29udGVudFNlbnRNYWlsXCI6IHtcbiAgICAgICAgICAgIHBhcnRzOiB7XG4gICAgICAgICAgICAgIGNvbnRlbnRVcmw6IHRydWUsXG4gICAgICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgICAgICBtZDU6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBrZXk6IHRydWUsXG4gICAgICAgICAgICB0b3RhbFNpemU6IHRydWUsXG4gICAgICAgICAgICBtZDU6IHRydWUsXG4gICAgICAgICAgICBtZDVFbmNyeXB0ZWQ6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZmlsZUNvbnRlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAke2ZpbGVJZH0gZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvZ3Jlc3NQYXJ0czogUmVjb3JkPG51bWJlciwgRG93bmxvYWRQcm9ncmVzcz4gPSB7fTtcbiAgICBjb25zdCBvblByb2dyZXNzID0gKFxuICAgICAgcGFydDogbnVtYmVyLFxuICAgICAgcHJvZ3Jlc3NFdmVudDogRG93bmxvYWRQcm9ncmVzc1xuICAgICk6IHZvaWQgPT4ge1xuICAgICAgcHJvZ3Jlc3NQYXJ0c1twYXJ0XSA9IHByb2dyZXNzRXZlbnQ7XG4gICAgICBjb25zdCB0cmFuc2ZlcnJlZEJ5dGVzID0gT2JqZWN0LnZhbHVlcyhwcm9ncmVzc1BhcnRzKS5yZWR1Y2UoXG4gICAgICAgIChwcnYsIGN1cikgPT4gcHJ2ICsgY3VyLnRyYW5zZmVycmVkQnl0ZXMsXG4gICAgICAgIDBcbiAgICAgICk7XG4gICAgICBjb25zdCB0b3RhbEJ5dGVzID0gTnVtYmVyKGZpbGVDb250ZW50LnRvdGFsU2l6ZSk7XG4gICAgICBvbkRvd25sb2FkUHJvZ3Jlc3M/Lih7XG4gICAgICAgIHBlcmNlbnQ6IHRyYW5zZmVycmVkQnl0ZXMgLyB0b3RhbEJ5dGVzLFxuICAgICAgICB0b3RhbEJ5dGVzLFxuICAgICAgICB0cmFuc2ZlcnJlZEJ5dGVzXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcGFydHMgPSBuZXcgQXJyYXk8eyBkYXRhOiBVaW50OEFycmF5OyBvcmRlcjogbnVtYmVyIH0+KCk7XG5cbiAgICBjb25zdCBieVBhcnQgPSBhc3luYyAocGFydDogRmlsZUNvbnRlbnRQYXJ0KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBidWYgPSBuZXcgVWludDhBcnJheShcbiAgICAgICAgYXdhaXQga3lcbiAgICAgICAgICAuZ2V0KHBhcnQuY29udGVudFVybCwge1xuICAgICAgICAgICAgb25Eb3dubG9hZFByb2dyZXNzOiBwciA9PiBvblByb2dyZXNzKHBhcnQub3JkZXIsIHByKSxcbiAgICAgICAgICAgIHNpZ25hbDogc2lnbmFsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuYXJyYXlCdWZmZXIoKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IG1kNVBhcnQgPSBhd2FpdCBtZDUoYnVmKTtcbiAgICAgIGlmIChtZDVQYXJ0ICE9PSBwYXJ0Lm1kNSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbWQ1IGZvciBwYXJ0ICR7cGFydC5vcmRlcn0gb2YgZmlsZSAke2ZpbGVJZH1gKTtcbiAgICAgIH1cbiAgICAgIHBhcnRzLnB1c2goe1xuICAgICAgICBkYXRhOiBidWYsXG4gICAgICAgIG9yZGVyOiBwYXJ0Lm9yZGVyXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXdhaXQgcHJvbWlzZUFsbExpbWl0KFxuICAgICAgMyxcbiAgICAgIGZpbGVDb250ZW50LnBhcnRzLm1hcChwID0+ICgpOiBQcm9taXNlPHZvaWQ+ID0+IGJ5UGFydChwKSlcbiAgICApO1xuXG4gICAgY29uc3QgZW5jcnlwdGVkQ29udGVudCA9IGNvbmNhdGVuYXRlKFxuICAgICAgLi4ucGFydHMuc29ydCgoYSwgYikgPT4gYS5vcmRlciAtIGIub3JkZXIpLm1hcChwID0+IHAuZGF0YSlcbiAgICApO1xuXG4gICAgLy8gY29uc3QgbWQ1RW5jcnlwdGVkID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20obWQ1KG9mKGVuY3J5cHRlZENvbnRlbnQpKSk7XG4gICAgY29uc3QgbWQ1RW5jcnlwdGVkID0gYXdhaXQgbWQ1KGVuY3J5cHRlZENvbnRlbnQpO1xuXG4gICAgaWYgKG1kNUVuY3J5cHRlZCAhPT0gZmlsZUNvbnRlbnQubWQ1RW5jcnlwdGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVuY3J5cHRlZCBjb250ZW50IGRvZXMgbm90IG1hdGNoYCk7XG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gZGVjcnlwdENyeXB0b0JveChcbiAgICAgIHNvZGl1bS5mcm9tX2hleChmaWxlQ29udGVudC5rZXkpLFxuICAgICAgZmlsZUNvbnRlbnQuX190eXBlbmFtZSA9PT0gXCJGaWxlQ29udGVudFJlY2VpdmVkTWFpbFwiXG4gICAgICAgID8gZmlsZUNvbnRlbnQuc2VuZGVyUHVibGljS2V5XG4gICAgICAgIDogZmlsZUNvbnRlbnQuX190eXBlbmFtZSA9PT0gXCJGaWxlQ29udGVudENsb3VkXCJcbiAgICAgICAgPyBmaWxlQ29udGVudC5wdWJsaWNLZXlcbiAgICAgICAgOiB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICk7XG5cbiAgICBjb25zdCBzcmMgPSBhd2FpdCBkZWNyeXB0KGtleSwgZW5jcnlwdGVkQ29udGVudCwgcHJvZ3Jlc3NEZWNyeXB0LCBzaWduYWwpO1xuXG4gICAgLy8gY29uc3QgbWQ1Q29udGVudCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKG1kNShvZihzcmMpKSk7XG4gICAgY29uc3QgbWQ1Q29udGVudCA9IGF3YWl0IG1kNShzcmMpO1xuXG4gICAgaWYgKG1kNUNvbnRlbnQgIT09IGZpbGVDb250ZW50Lm1kNSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb250ZW50IGRvZXMgbm90IG1hdGNoYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuY29tcHJlc3Moc3JjKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUZpbGUoe1xuICAgIGZpbGVJZCxcbiAgICBmaWxlbmFtZSxcbiAgICBpc0Zhdm9yaXRlLFxuICAgIGRlbGV0ZWRBdFxuICB9OiB7XG4gICAgZmlsZUlkOiBzdHJpbmc7XG4gICAgZmlsZW5hbWU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGlzRmF2b3JpdGU/OiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBkZWxldGVkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8VkZpbGU+IHtcbiAgICBjb25zdCBmaWxlID0gdkZpbGVzQ2FjaGUuZ2V0KGZpbGVJZCk7XG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICB0aHJvdyBgQ2FuJ3QgZmluZCBmaWxlICR7ZmlsZUlkfWA7XG4gICAgfVxuXG4gICAgY29uc3QgZW5jcnlwdGVkTmFtZSA9IGZpbGVuYW1lXG4gICAgICA/IGF3YWl0IGVuY3J5cHROYW1lKGZpbGVuYW1lLCBmaWxlLnVzZXJBcHAubmFtZUtleSlcbiAgICAgIDogbnVsbDtcblxuICAgIGNvbnN0IHsgdXBkYXRlRmlsZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICB1cGRhdGVGaWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlSWQsXG4gICAgICAgICAgZmlsZW5hbWU6IGVuY3J5cHRlZE5hbWUsXG4gICAgICAgICAgaXNGYXZvcml0ZSxcbiAgICAgICAgICBkZWxldGVkQXRcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsVkZpbGVRdWVyeVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVGaWxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCB1cGRhdGUgZmlsZVwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3FsVkZpbGVUb0V4dGVybmFsKHVwZGF0ZUZpbGUsIHRoaXMuI2tleXMpO1xuICB9XG5cbiAgYXN5bmMgcmVhZE1haWwoeyBtYWlsSWQgfTogeyBtYWlsSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyByZWFkTWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICByZWFkTWFpbDogW3sgbWFpbElkIH0sIHRydWVdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVhZE1haWwgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyB1bnJlYWRNYWlsKHsgbWFpbElkIH06IHsgbWFpbElkOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgdW5yZWFkTWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICB1bnJlYWRNYWlsOiBbeyBtYWlsSWQgfSwgdHJ1ZV1cbiAgICB9KTtcblxuICAgIHJldHVybiB1bnJlYWRNYWlsID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgYXBwU2V0dGluZ3MoKTogUHJvbWlzZTxVc2VyQXBwU2V0dGluZ3MgfCBudWxsPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBhcHBTZXR0aW5nczoge1xuICAgICAgICAgICAgYXV0b0Rpc2Nvbm5lY3REZWxheTogdHJ1ZSxcbiAgICAgICAgICAgIGNsb3VkRmlsZURheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgICBjbG91ZEZvbGRlckRheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgICBoaXN0b3J5RmlsZURheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgICBoaXN0b3J5TWF4RmlsZUNvdW50OiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB1c2VyLmFwcFNldHRpbmdzID8/IG51bGw7XG4gIH1cblxuICBhc3luYyB1cGRhdGVBcHBTZXR0aW5ncyhcbiAgICBzZXR0aW5nczogUGFydGlhbDxVc2VyQXBwU2V0dGluZ3M+XG4gICk6IFByb21pc2U8VXNlckFwcFNldHRpbmdzPiB7XG4gICAgY29uc3QgeyB1cGRhdGVBcHBTZXR0aW5ncyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICB1cGRhdGVBcHBTZXR0aW5nczogW1xuICAgICAgICBzZXR0aW5ncyxcbiAgICAgICAge1xuICAgICAgICAgIGF1dG9EaXNjb25uZWN0RGVsYXk6IHRydWUsXG4gICAgICAgICAgY2xvdWRGaWxlRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICBjbG91ZEZvbGRlckRheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgaGlzdG9yeUZpbGVEYXlzRm9yRGVsZXRlOiB0cnVlLFxuICAgICAgICAgIGhpc3RvcnlNYXhGaWxlQ291bnQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVwZGF0ZUFwcFNldHRpbmdzO1xuICB9XG5cbiAgYXN5bmMgcmVjZWl2ZWRNYWlscygpOiBQcm9taXNlPFJlY2VpdmVkTWFpbFtdPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICByZWNlaXZlZE1haWxzOiBncWxNYWlsUXVlcnlcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgY29uc3QgbWFpbHMgPSB1c2VyPy5yZWNlaXZlZE1haWxzID8/IFtdO1xuXG4gICAgLy8gVE9ETyBnZXQgYWN0dWFsIG1haWxzIG9uIHRoaXMgYXBwIG9ubHlcblxuICAgIGNvbnN0IHJlY2VpdmVkTWFpbHMgPSBuZXcgQXJyYXk8UmVjZWl2ZWRNYWlsPigpO1xuXG4gICAgZm9yIChjb25zdCBtIG9mIG1haWxzKSB7XG4gICAgICBjb25zdCBtYWlsID0gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwobSwgdGhpcy4ja2V5cyk7XG4gICAgICBpZiAobWFpbCkge1xuICAgICAgICByZWNlaXZlZE1haWxzLnB1c2gobWFpbCBhcyBSZWNlaXZlZE1haWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZWNlaXZlZE1haWxzO1xuICB9XG5cbiAgYXN5bmMgc2VudE1haWxzKCk6IFByb21pc2U8U2VudE1haWxbXT4ge1xuICAgIGNvbnN0IHsgdXNlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICB1c2VyOiBbXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgc2VudE1haWxzOiBncWxNYWlsUXVlcnlcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgY29uc3QgbWFpbHMgPSB1c2VyPy5zZW50TWFpbHMgPz8gW107XG5cbiAgICAvLyBUT0RPIGdldCBhY3R1YWwgbWFpbHMgb24gdGhpcyBhcHAgb25seVxuXG4gICAgY29uc3Qgc2VudE1haWxzID0gbmV3IEFycmF5PFNlbnRNYWlsPigpO1xuXG4gICAgZm9yIChjb25zdCBtIG9mIG1haWxzKSB7XG4gICAgICBjb25zdCBtYWlsID0gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwobSwgdGhpcy4ja2V5cyk7XG4gICAgICBpZiAobWFpbCkge1xuICAgICAgICBzZW50TWFpbHMucHVzaChtYWlsIGFzIFNlbnRNYWlsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2VudE1haWxzO1xuICB9XG5cbiAgYXN5bmMgZHJhZnRNYWlscygpOiBQcm9taXNlPERyYWZ0TWFpbFtdPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBkcmFmdE1haWxzOiBncWxNYWlsUXVlcnlcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgY29uc3QgbWFpbHMgPSB1c2VyPy5kcmFmdE1haWxzID8/IFtdO1xuXG4gICAgLy8gVE9ETyBnZXQgYWN0dWFsIG1haWxzIG9uIHRoaXMgYXBwIG9ubHlcblxuICAgIGNvbnN0IGRyYWZ0TWFpbHMgPSBuZXcgQXJyYXk8RHJhZnRNYWlsPigpO1xuXG4gICAgZm9yIChjb25zdCBtIG9mIG1haWxzKSB7XG4gICAgICBjb25zdCBkcmFmdCA9IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKG0sIHRoaXMuI2tleXMpIGFzIERyYWZ0TWFpbDtcbiAgICAgIGlmIChkcmFmdCkge1xuICAgICAgICBkcmFmdE1haWxzLnB1c2goZHJhZnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkcmFmdE1haWxzO1xuICB9XG5cbiAgcHJpdmF0ZSBwZXJGb2xkZXIgPSBhc3luYyAoXG4gICAgZm9sZGVySWQ6IHN0cmluZyxcbiAgICBwdWJsaWNLZXk6IHN0cmluZ1xuICApOiBQcm9taXNlPE5hbWVLZXlJbnB1dEZvbGRlcnMgfCBudWxsPiA9PiB7XG4gICAgbGV0IGZvbGRlciA9IGZvbGRlcnNDYWNoZS5nZXQoZm9sZGVySWQpO1xuXG4gICAgaWYgKCFmb2xkZXIpIHtcbiAgICAgIGF3YWl0IHRoaXMuZm9sZGVyKHsgaWQ6IGZvbGRlcklkIH0pO1xuICAgICAgZm9sZGVyID0gZm9sZGVyc0NhY2hlLmdldChmb2xkZXJJZCk7XG5cbiAgICAgIGlmICghZm9sZGVyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZm9sZGVyLnVzZXJBcHA/Lm5hbWVLZXkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogZm9sZGVySWQsXG4gICAgICBuYW1lS2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmb2xkZXIudXNlckFwcC5uYW1lS2V5KSxcbiAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgIClcbiAgICAgIClcbiAgICB9O1xuICB9O1xuXG4gIHByaXZhdGUgcGVyVkZpbGUgPSBhc3luYyAoXG4gICAgdkZpbGVJZDogc3RyaW5nLFxuICAgIHB1YmxpY0tleTogc3RyaW5nXG4gICk6IFByb21pc2U8TmFtZUtleUlucHV0IHwgbnVsbD4gPT4ge1xuICAgIGxldCB2RmlsZSA9IHZGaWxlc0NhY2hlLmdldCh2RmlsZUlkKTtcblxuICAgIGlmICghdkZpbGUpIHtcbiAgICAgIGF3YWl0IHRoaXMudkZpbGUoeyBpZDogdkZpbGVJZCB9KTtcbiAgICAgIHZGaWxlID0gdkZpbGVzQ2FjaGUuZ2V0KHZGaWxlSWQpO1xuXG4gICAgICBpZiAoIXZGaWxlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogdkZpbGUuaWQsXG4gICAgICBuYW1lS2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX2hleCh2RmlsZS51c2VyQXBwLm5hbWVLZXkpLFxuICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIGZpbGVzOiB2RmlsZS5oaXN0b3J5Lm1hcChmID0+ICh7XG4gICAgICAgIGlkOiBmLmlkLFxuICAgICAgICBrZXk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmLnVzZXIhLmtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH0pKVxuICAgIH07XG4gIH07XG5cbiAgYXN5bmMgdW5yZWFkUmVjZWl2ZWRNYWlsc0NvdW50KCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgeyB1bnJlYWRSZWNlaXZlZE1haWxzQ291bnQgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgdW5yZWFkUmVjZWl2ZWRNYWlsc0NvdW50OiB0cnVlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdW5yZWFkUmVjZWl2ZWRNYWlsc0NvdW50ID8/IDA7XG4gIH1cblxuICBwcml2YXRlIF9lYWNoVXNlciA9IGFzeW5jIChcbiAgICBmaWxlczogeyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfVtdLFxuICAgIHN1YmplY3Q6IHN0cmluZyxcbiAgICBib2R5OiBzdHJpbmcsXG4gICAgaWRPck1haWw6IHN0cmluZ1xuICApOiBQcm9taXNlPE1haWxSZWNpcGllbnRJbnB1dCB8IG51bGw+ID0+IHtcbiAgICBsZXQgdSA9IHVzZXJzQ2FjaGUuZ2V0KGlkT3JNYWlsKTtcbiAgICBpZiAoIXUgfHwgIShcInB1YmxpY0tleVwiIGluIHUpKSB7XG4gICAgICB1ID1cbiAgICAgICAgKGF3YWl0IHRoaXMudXNlcih7XG4gICAgICAgICAgdXNlcklkOiBpZE9yTWFpbCxcbiAgICAgICAgICB3aXRoUHVibGljS2V5OiB0cnVlXG4gICAgICAgIH0pKSA/PyB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICghdSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIShcInB1YmxpY0tleVwiIGluIHUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVzZXIgJHtpZE9yTWFpbH0gaGF2ZSBubyBwdWJsaWMga2V5YCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVjaXBpZW50c0ZpbGVzID0gbmV3IEFycmF5PE1haWxGaWxlSW5wdXQ+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGYgb2YgZmlsZXMpIHtcbiAgICAgIGxldCBmaWxlSW5IaXN0b3J5ID0gZmlsZXNDYWNoZS5nZXQoZi5pZCk7XG4gICAgICBpZiAoIWZpbGVJbkhpc3RvcnkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5maWxlKHsgaWQ6IGYuaWQgfSk7XG4gICAgICAgIGZpbGVJbkhpc3RvcnkgPSBmaWxlc0NhY2hlLmdldChmLmlkKTtcbiAgICAgICAgaWYgKCFmaWxlSW5IaXN0b3J5KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7Zi5uYW1lfSAoJHtmLmlkfSkgZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleSA9IGZpbGVJbkhpc3RvcnkudXNlcj8ua2V5O1xuICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZWNpcGllbnRzRmlsZXMucHVzaCh7XG4gICAgICAgIGlkOiBmLmlkLFxuICAgICAgICBuYW1lOiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoZi5uYW1lKSxcbiAgICAgICAgICAgIHUucHVibGljS2V5LFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBmaWxlS2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgoa2V5KSxcbiAgICAgICAgICAgIHUucHVibGljS2V5LFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVjaXBpZW50SWQ6IHUuaWQsXG4gICAgICBib2R5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhib2R5KSxcbiAgICAgICAgICB1LnB1YmxpY0tleSxcbiAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIHN1YmplY3Q6IHNvZGl1bS50b19oZXgoXG4gICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKHN1YmplY3QpLFxuICAgICAgICAgIHUucHVibGljS2V5LFxuICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICApXG4gICAgICApLFxuICAgICAgZmlsZXM6IHJlY2lwaWVudHNGaWxlc1xuICAgIH07XG4gIH07XG59XG4iXX0=