tnp-core 18.0.47 → 18.0.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/README.md +1 -1
  2. package/assets/shared/shared_folder_info.txt +1 -1
  3. package/browser/esm2022/lib/core-imports.mjs +66 -5
  4. package/browser/esm2022/lib/core-models.mjs +51 -48
  5. package/browser/esm2022/lib/helpers-messages.mjs +9 -4
  6. package/browser/esm2022/lib/helpers.mjs +152 -369
  7. package/browser/esm2022/lib/utils.mjs +521 -8
  8. package/browser/fesm2022/tnp-core.mjs +1469 -1105
  9. package/browser/fesm2022/tnp-core.mjs.map +1 -1
  10. package/browser/lib/core-imports.d.ts +41 -1
  11. package/browser/lib/core-models.d.ts +51 -83
  12. package/browser/lib/helpers-messages.d.ts +6 -3
  13. package/browser/lib/helpers.d.ts +22 -0
  14. package/browser/lib/utils.d.ts +48 -0
  15. package/cli.backend.d.ts +1 -0
  16. package/cli.backend.js +15 -2
  17. package/cli.backend.js.map +1 -1
  18. package/client/esm2022/lib/core-imports.mjs +66 -5
  19. package/client/esm2022/lib/core-models.mjs +51 -48
  20. package/client/esm2022/lib/helpers-messages.mjs +9 -4
  21. package/client/esm2022/lib/helpers.mjs +152 -369
  22. package/client/esm2022/lib/utils.mjs +521 -8
  23. package/client/fesm2022/tnp-core.mjs +1469 -1105
  24. package/client/fesm2022/tnp-core.mjs.map +1 -1
  25. package/client/lib/core-imports.d.ts +41 -1
  26. package/client/lib/core-models.d.ts +51 -83
  27. package/client/lib/helpers-messages.d.ts +6 -3
  28. package/client/lib/helpers.d.ts +22 -0
  29. package/client/lib/utils.d.ts +48 -0
  30. package/index.js +15 -2
  31. package/index.js.map +1 -1
  32. package/lib/build-info._auto-generated_.js.map +1 -1
  33. package/lib/command-exists.js +20 -20
  34. package/lib/command-exists.js.map +1 -1
  35. package/lib/core-cli.js +49 -66
  36. package/lib/core-cli.js.map +1 -1
  37. package/lib/core-config.js.map +1 -1
  38. package/lib/core-imports.d.ts +41 -20
  39. package/lib/core-imports.js +202 -78
  40. package/lib/core-imports.js.map +1 -1
  41. package/lib/core-models.d.ts +51 -83
  42. package/lib/core-models.js +52 -47
  43. package/lib/core-models.js.map +1 -1
  44. package/lib/framework-name.js +2 -2
  45. package/lib/framework-name.js.map +1 -1
  46. package/lib/helpers-isomorphic.js +33 -52
  47. package/lib/helpers-isomorphic.js.map +1 -1
  48. package/lib/helpers-messages.d.ts +6 -3
  49. package/lib/helpers-messages.js +79 -102
  50. package/lib/helpers-messages.js.map +1 -1
  51. package/lib/helpers.d.ts +21 -3
  52. package/lib/helpers.js +718 -967
  53. package/lib/helpers.js.map +1 -1
  54. package/lib/index._auto-generated_.js.map +1 -1
  55. package/lib/index.js +23 -10
  56. package/lib/index.js.map +1 -1
  57. package/lib/node-chalk-mock.js +2 -2
  58. package/lib/node-chalk-mock.js.map +1 -1
  59. package/lib/node-path-mock.js +2 -2
  60. package/lib/node-path-mock.js.map +1 -1
  61. package/lib/progress-data.js +21 -23
  62. package/lib/progress-data.js.map +1 -1
  63. package/lib/public-api.js +19 -6
  64. package/lib/public-api.js.map +1 -1
  65. package/lib/required-global-npm-packages.js.map +1 -1
  66. package/lib/required.d.ts +44 -0
  67. package/lib/safe-types/glob.d.ts +102 -0
  68. package/lib/safe-types/minimatch/assert-valid-pattern.d.ts +1 -0
  69. package/lib/safe-types/minimatch/ast.d.ts +17 -0
  70. package/lib/safe-types/minimatch/brace-expressions.d.ts +7 -0
  71. package/lib/safe-types/minimatch/escape.d.ts +11 -0
  72. package/lib/safe-types/minimatch/index.d copy.d.ts +93 -0
  73. package/lib/safe-types/minimatch/index.d.ts +93 -0
  74. package/lib/safe-types/minimatch/unescapd.d.ts +16 -0
  75. package/lib/safe-types/minimatch/unescape.d.ts +16 -0
  76. package/lib/safe-types/minimatch.d.ts +0 -0
  77. package/lib/safe-types/rimraf.d.ts +28 -0
  78. package/lib/utils.d.ts +48 -1
  79. package/lib/utils.js +1252 -1146
  80. package/lib/utils.js.map +1 -1
  81. package/migrations/index.js +15 -2
  82. package/migrations/index.js.map +1 -1
  83. package/migrations/migrations_index._auto-generated_.js.map +1 -1
  84. package/package.json +26 -89
  85. package/src.d.ts +1 -1
  86. package/taon.jsonc +48 -58
  87. package/tmp-environment.json +8 -403
  88. package/websql/esm2022/lib/core-imports.mjs +66 -5
  89. package/websql/esm2022/lib/core-models.mjs +51 -48
  90. package/websql/esm2022/lib/helpers-messages.mjs +9 -4
  91. package/websql/esm2022/lib/helpers.mjs +152 -369
  92. package/websql/esm2022/lib/utils.mjs +521 -8
  93. package/websql/fesm2022/tnp-core.mjs +1466 -1102
  94. package/websql/fesm2022/tnp-core.mjs.map +1 -1
  95. package/websql/lib/core-imports.d.ts +41 -1
  96. package/websql/lib/core-models.d.ts +51 -83
  97. package/websql/lib/helpers-messages.d.ts +6 -3
  98. package/websql/lib/helpers.d.ts +22 -0
  99. package/websql/lib/utils.d.ts +48 -0
  100. package/browser/package.json +0 -25
  101. package/websql/package.json +0 -25
@@ -1,12 +1,8 @@
1
- import { CoreModels } from './core-models';
1
+ import { Blob } from 'buffer';
2
2
  import axios from 'axios';
3
- import { path, _, } from './core-imports'; /* */
3
+ import { path, _ } from './core-imports';
4
4
  import { dateformat } from './core-imports';
5
- /* */
6
- /* */
7
- /* */
8
- /* */
9
- /* */
5
+ import { CoreModels } from './core-models';
10
6
  const BLOB_SUPPORTED_IN_SQLJS = false;
11
7
  export var Utils;
12
8
  (function (Utils) {
@@ -20,6 +16,21 @@ export var Utils;
20
16
  : (seen[uniqueProperty ? item[uniqueProperty] : item] = true);
21
17
  });
22
18
  };
19
+ /**
20
+ * @param anyObject
21
+ * @returns object with sorted keys
22
+ */
23
+ Utils.sortKeys = (anyObject) => {
24
+ if (_.isArray(anyObject)) {
25
+ return anyObject.map(Utils.sortKeys);
26
+ }
27
+ if (_.isObject(anyObject)) {
28
+ return _.fromPairs(_.keys(anyObject)
29
+ .sort()
30
+ .map(key => [key, Utils.sortKeys(anyObject[key])]));
31
+ }
32
+ return anyObject;
33
+ };
23
34
  /**
24
35
  * Example:
25
36
  * new RegExp(escapeStringForRegEx('a.b.c'),'g') => /a\.b\.c/g
@@ -76,6 +87,72 @@ export var Utils;
76
87
  /* */
77
88
  return (void 0);
78
89
  };
90
+ /**
91
+ * Traverses the cache to search for all the cached
92
+ * files of the specified module name
93
+ */
94
+ const searchCache = (moduleName, callback) => {
95
+ /* */
96
+ /* */
97
+ /* */
98
+ /* */
99
+ /* */
100
+ /* */
101
+ /* */
102
+ /* */
103
+ /* */
104
+ /* */
105
+ /* */
106
+ /* */
107
+ /* */
108
+ /* */
109
+ /* */
110
+ /* */
111
+ /* */
112
+ /* */
113
+ /* */
114
+ /* */
115
+ return (void 0);
116
+ };
117
+ /**
118
+ * Removes a module from the cache
119
+ */
120
+ const purgeCache = moduleName => {
121
+ /* */
122
+ /* */
123
+ /* */
124
+ /* */
125
+ /* */
126
+ /* */
127
+ /* */
128
+ /* */
129
+ /* */
130
+ /* */
131
+ /* */
132
+ /* */
133
+ /* */
134
+ /* */
135
+ return (void 0);
136
+ };
137
+ Utils.requireUncached = (module) => {
138
+ /* */
139
+ /* */
140
+ /* */
141
+ /* */
142
+ return (void 0);
143
+ };
144
+ /**
145
+ * similar to camelCase but remove
146
+ * all non word / repeated characters
147
+ */
148
+ Utils.camelize = (str = '') => {
149
+ str = str.replace(/\W/g, '').toLowerCase();
150
+ return str
151
+ .replace(/(?:^\w|[A-Z]|\b\w)/g, function (word, index) {
152
+ return index == 0 ? word.toLowerCase() : word.toUpperCase();
153
+ })
154
+ .replace(/\s+/g, '');
155
+ };
79
156
  let json;
80
157
  (function (json) {
81
158
  json.getAtrributies = (jsonDeepPath, // lodash path to property in json ex. deep.path.to.prop
@@ -433,6 +510,294 @@ export var UtilsProcess;
433
510
  * TODO IMPLEMENT
434
511
  * start async node process
435
512
  */
513
+ UtilsProcess.startAsync = async (command, cwd, options) => {
514
+ /* */
515
+ /* */
516
+ /* */
517
+ /* */
518
+ /* */
519
+ /* */
520
+ /* */
521
+ /* */
522
+ /* */
523
+ /* */
524
+ /* */
525
+ /* */
526
+ /* */
527
+ /* */
528
+ /* */
529
+ /* */
530
+ /* */
531
+ /* */
532
+ /* */
533
+ /* */
534
+ /* */
535
+ /* */
536
+ /* */
537
+ /* */
538
+ /* */
539
+ /* */
540
+ /* */
541
+ /* */
542
+ /* */
543
+ /* */
544
+ /* */
545
+ /* */
546
+ /* */
547
+ /* */
548
+ /* */
549
+ /* */
550
+ /* */
551
+ /* */
552
+ /* */
553
+ /* */
554
+ /* */
555
+ /* */
556
+ /* */
557
+ /* */
558
+ /* */
559
+ /* */
560
+ /* */
561
+ /* */
562
+ /* */
563
+ /* */
564
+ /* */
565
+ /* */
566
+ /* */
567
+ /* */
568
+ /* */
569
+ /* */
570
+ /* */
571
+ /* */
572
+ /* */
573
+ /* */
574
+ /* */
575
+ /* */
576
+ /* */
577
+ /* */
578
+ /* */
579
+ /* */
580
+ /* */
581
+ /* */
582
+ /* */
583
+ /* */
584
+ /* */
585
+ /* */
586
+ /* */
587
+ /* */
588
+ /* */
589
+ /* */
590
+ /* */
591
+ /* */
592
+ /* */
593
+ /* */
594
+ /* */
595
+ /* */
596
+ /* */
597
+ /* */
598
+ /* */
599
+ /* */
600
+ /* */
601
+ /* */
602
+ /* */
603
+ /* */
604
+ /* */
605
+ /* */
606
+ /* */
607
+ /* */
608
+ /* */
609
+ /* */
610
+ /* */
611
+ /* */
612
+ /* */
613
+ /* */
614
+ /* */
615
+ /* */
616
+ /* */
617
+ /* */
618
+ /* */
619
+ /* */
620
+ /* */
621
+ /* */
622
+ /* */
623
+ /* */
624
+ /* */
625
+ /* */
626
+ /* */
627
+ /* */
628
+ /* */
629
+ /* */
630
+ /* */
631
+ /* */
632
+ /* */
633
+ /* */
634
+ /* */
635
+ /* */
636
+ /* */
637
+ /* */
638
+ /* */
639
+ /* */
640
+ /* */
641
+ /* */
642
+ /* */
643
+ /* */
644
+ /* */
645
+ /* */
646
+ /* */
647
+ /* */
648
+ /* */
649
+ /* */
650
+ /* */
651
+ /* */
652
+ /* */
653
+ /* */
654
+ /* */
655
+ /* */
656
+ /* */
657
+ /* */
658
+ /* */
659
+ /* */
660
+ /* */
661
+ /* */
662
+ /* */
663
+ /* */
664
+ /* */
665
+ /* */
666
+ /* */
667
+ /* */
668
+ /* */
669
+ /* */
670
+ /* */
671
+ /* */
672
+ /* */
673
+ /* */
674
+ /* */
675
+ /* */
676
+ /* */
677
+ /* */
678
+ /* */
679
+ /* */
680
+ /* */
681
+ /* */
682
+ /* */
683
+ /* */
684
+ /* */
685
+ /* */
686
+ /* */
687
+ /* */
688
+ /* */
689
+ /* */
690
+ /* */
691
+ /* */
692
+ /* */
693
+ /* */
694
+ /* */
695
+ /* */
696
+ /* */
697
+ /* */
698
+ /* */
699
+ /* */
700
+ /* */
701
+ /* */
702
+ /* */
703
+ /* */
704
+ /* */
705
+ /* */
706
+ /* */
707
+ /* */
708
+ /* */
709
+ /* */
710
+ /* */
711
+ /* */
712
+ /* */
713
+ /* */
714
+ /* */
715
+ /* */
716
+ /* */
717
+ /* */
718
+ /* */
719
+ /* */
720
+ /* */
721
+ /* */
722
+ /* */
723
+ /* */
724
+ /* */
725
+ /* */
726
+ /* */
727
+ /* */
728
+ /* */
729
+ /* */
730
+ /* */
731
+ /* */
732
+ /* */
733
+ /* */
734
+ /* */
735
+ /* */
736
+ /* */
737
+ /* */
738
+ /* */
739
+ /* */
740
+ /* */
741
+ /* */
742
+ /* */
743
+ /* */
744
+ /* */
745
+ /* */
746
+ /* */
747
+ /* */
748
+ /* */
749
+ /* */
750
+ /* */
751
+ /* */
752
+ /* */
753
+ /* */
754
+ /* */
755
+ /* */
756
+ /* */
757
+ /* */
758
+ /* */
759
+ /* */
760
+ /* */
761
+ /* */
762
+ /* */
763
+ /* */
764
+ /* */
765
+ /* */
766
+ /* */
767
+ /* */
768
+ /* */
769
+ /* */
770
+ /* */
771
+ /* */
772
+ /* */
773
+ /* */
774
+ /* */
775
+ /* */
776
+ /* */
777
+ /* */
778
+ /* */
779
+ /* */
780
+ /* */
781
+ /* */
782
+ /* */
783
+ /* */
784
+ /* */
785
+ /* */
786
+ /* */
787
+ /* */
788
+ /* */
789
+ /* */
790
+ /* */
791
+ /* */
792
+ /* */
793
+ /* */
794
+ /* */
795
+ /* */
796
+ /* */
797
+ /* */
798
+ /* */
799
+ return (void 0);
800
+ };
436
801
  /**
437
802
  * This let you start child process and resolve promise when some
438
803
  * condition is met. It is useful for example when you want to start
@@ -673,6 +1038,124 @@ export var UtilsProcess;
673
1038
  /* */
674
1039
  return (void 0);
675
1040
  };
1041
+ /**
1042
+ * Get CPU and memory usage for a single PID.
1043
+ */
1044
+ UtilsProcess.getUsageForPid = async (pid) => {
1045
+ /* */
1046
+ /* */
1047
+ /* */
1048
+ /* */
1049
+ /* */
1050
+ /* */
1051
+ /* */
1052
+ /* */
1053
+ /* */
1054
+ /* */
1055
+ /* */
1056
+ /* */
1057
+ /* */
1058
+ /* */
1059
+ /* */
1060
+ /* */
1061
+ /* */
1062
+ /* */
1063
+ /* */
1064
+ /* */
1065
+ /* */
1066
+ return (void 0);
1067
+ };
1068
+ /**
1069
+ * Return a list of direct child PIDs for the given PID on a Unix-like system.
1070
+ * Uses `ps -o pid= --ppid <pid>` to find child processes.
1071
+ */
1072
+ async function getChildPidsUnix(pid) {
1073
+ /* */
1074
+ /* */
1075
+ /* */
1076
+ /* */
1077
+ /* */
1078
+ /* */
1079
+ /* */
1080
+ /* */
1081
+ /* */
1082
+ /* */
1083
+ /* */
1084
+ /* */
1085
+ /* */
1086
+ /* */
1087
+ /* */
1088
+ return (void 0);
1089
+ }
1090
+ /**
1091
+ * Return a list of direct child PIDs for the given PID on Windows.
1092
+ * Uses `wmic process where (ParentProcessId=<pid>) get ProcessId` to find child processes.
1093
+ */
1094
+ async function getChildPidsWindows(pid) {
1095
+ /* */
1096
+ /* */
1097
+ /* */
1098
+ /* */
1099
+ /* */
1100
+ /* */
1101
+ /* */
1102
+ /* */
1103
+ /* */
1104
+ /* */
1105
+ /* */
1106
+ /* */
1107
+ /* */
1108
+ /* */
1109
+ /* */
1110
+ /* */
1111
+ return (void 0);
1112
+ }
1113
+ /**
1114
+ * Cross-platform function to list *direct* child PIDs of a given PID.
1115
+ * Uses the appropriate command depending on `process.platform`.
1116
+ */
1117
+ async function getChildPidsOnce(pid) {
1118
+ /* */
1119
+ /* */
1120
+ /* */
1121
+ /* */
1122
+ /* */
1123
+ /* */
1124
+ return (void 0);
1125
+ }
1126
+ UtilsProcess.getChildPidsOnce = getChildPidsOnce;
1127
+ /**
1128
+ * Get CPU and memory usage for the current process (the Node.js process itself),
1129
+ * plus any child processes spawned by it.
1130
+ */
1131
+ UtilsProcess.getCurrentProcessAndChildUsage = async () => {
1132
+ /* */
1133
+ /* */
1134
+ /* */
1135
+ /* */
1136
+ /* */
1137
+ /* */
1138
+ /* */
1139
+ /* */
1140
+ /* */
1141
+ /* */
1142
+ /* */
1143
+ /* */
1144
+ /* */
1145
+ /* */
1146
+ /* */
1147
+ /* */
1148
+ /* */
1149
+ /* */
1150
+ /* */
1151
+ /* */
1152
+ /* */
1153
+ /* */
1154
+ /* */
1155
+ /* */
1156
+ /* */
1157
+ return (void 0);
1158
+ };
676
1159
  })(UtilsProcess || (UtilsProcess = {}));
677
1160
  export var UtilsOs;
678
1161
  (function (UtilsOs) {
@@ -730,6 +1213,21 @@ export var UtilsOs;
730
1213
  }
731
1214
  return false;
732
1215
  };
1216
+ /**
1217
+ * Check whether the current process is running inside
1218
+ * a Visual Studio Code extension.
1219
+ */
1220
+ UtilsOs.isRunningInVscodeExtension = () => {
1221
+ /* */
1222
+ /* */
1223
+ /* */
1224
+ /* */
1225
+ /* */
1226
+ /* */
1227
+ /* */
1228
+ /* */
1229
+ return (void 0);
1230
+ };
733
1231
  /**
734
1232
  * Check wether the current process is running inside
735
1233
  * windows subsystem for linux (WSL).
@@ -755,6 +1253,13 @@ export var UtilsOs;
755
1253
  /* */
756
1254
  return (void 0);
757
1255
  };
1256
+ UtilsOs.isRunningInWindowsCmd = () => {
1257
+ return false;
1258
+ /* */
1259
+ /* */
1260
+ /* */
1261
+ return (void 0);
1262
+ };
758
1263
  UtilsOs.isRunningInDocker = () => {
759
1264
  return false;
760
1265
  /* */
@@ -888,6 +1393,13 @@ export var UtilsMigrations;
888
1393
  })(UtilsMigrations || (UtilsMigrations = {}));
889
1394
  export var UtilsTerminal;
890
1395
  (function (UtilsTerminal) {
1396
+ UtilsTerminal.wait = (second) => {
1397
+ return new Promise((resolve, reject) => {
1398
+ setTimeout(() => {
1399
+ resolve(void 0);
1400
+ }, second * 1000);
1401
+ });
1402
+ };
891
1403
  UtilsTerminal.clearConsole = () => {
892
1404
  /* */
893
1405
  /* */
@@ -1270,6 +1782,7 @@ export var UtilsTerminal;
1270
1782
  /* */
1271
1783
  /* */
1272
1784
  /* */
1785
+ /* */
1273
1786
  return (void 0);
1274
1787
  };
1275
1788
  UtilsTerminal.pressAnyKeyToContinueAsync = (options) => {
@@ -1383,4 +1896,4 @@ export var UtilsTerminal;
1383
1896
  })(UtilsTerminal || (UtilsTerminal = {}));
1384
1897
  ;
1385
1898
  ({}); // @--end-of-file-for-module=tnp-core lib/utils.ts
1386
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC13ZWJzcWwvdG5wLWNvcmUvcHJvamVjdHMvdG5wLWNvcmUvc3JjL2xpYi91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sS0FBd0IsTUFBTSxPQUFPLENBQUM7QUFDN0MsT0FBTyxFQUFJLElBQUksRUFBSSxDQUFDLEdBQTZDLE1BQU0sZ0JBQWdCLENBQUMsQ0FBQSxLQUFLO0FBVTdGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBQ0wsS0FBSztBQUdMLE1BQU0sdUJBQXVCLEdBQUcsS0FBSyxDQUFDO0FBR3RDLE1BQU0sS0FBVyxLQUFLLENBOG1CckI7QUE5bUJELFdBQWlCLEtBQUs7SUFFUCxlQUFTLEdBQUcsQ0FDdkIsS0FBWSxFQUNaLGNBQXdCLEVBQ3hCLEVBQUU7UUFDRixJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZCxPQUFPLEtBQUs7YUFDVCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hCLE1BQU0sQ0FBQyxVQUFVLElBQUk7WUFDcEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3RFLENBQUMsQ0FBQyxLQUFLO2dCQUNQLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFRLENB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SztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDLENBQUM7SUFJVywyQkFBYyxHQUFHLEdBQUcsRUFBRTtRQUNyQyxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDLENBQUM7SUFJRjs7O09BR0c7SUFDVSxxQ0FBd0IsR0FBRyxDQUN0QyxPQUFlLEVBQ2YsT0FBeUQsRUFDekQsRUFBRTtRQUNOLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtB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Q0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQztJQUlGOzs7T0FHRztJQUNVLHlDQUEyQixHQUFHLEtBQUssRUFHOUMsT0FBZSxFQUNmLE9BTUMsRUFDRCxFQUFFO1FBQ04sS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQztJQUlGOzs7T0FHRztJQUNVLG9DQUFzQixHQUFHLEtBQUssRUFHekMsT0FBZSxFQUNmLE9BTUMsRUFDRCxFQUFFO1FBQ04sS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDLENBQUM7SUFJVyxvQkFBTSxHQUFHLEtBQUssRUFBYyxPQVF4QyxFQUFjLEVBQUU7UUFDbkIsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0lBS1csOEJBQWdCLEdBQUcsR0FBUyxFQUFFO1FBQzdDLEtBQUs7UUFDTCxLQUFLO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0lBSVcsbUJBQUssR0FBRyxLQUFLLEVBQUUsRUFDMUIsWUFBWSxFQUNaLFFBQVEsRUFDUixRQUFRLEVBQUUsd0NBQXdDO01BTW5ELEVBQW1CLEVBQUU7UUFDeEIsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0lBSVcscUJBQU8sR0FBRyxLQUFLLEVBQUUsT0FZN0IsRUFBRSxFQUFFO1FBQ1AsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0lBSVcsd0NBQTBCLEdBQUcsQ0FBQyxPQUUxQyxFQUFpQixFQUFFO1FBQ3RCLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQztJQUlGOztPQUVHO0lBQ1UseUJBQVcsR0FBRyxDQUFDLE9BQThCLEVBQUUsRUFBRTtRQUNoRSxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDLENBQUM7SUFJVyw2QkFBZSxHQUFHLEtBQUssRUFDbEMsSUFBdUIsRUFDdkIsUUFBUSxHQUFHLE1BQU0sRUFDRixFQUFFO1FBQ3JCLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0lBSUY7Ozs7OztPQU1HO0lBQ1UsdUNBQXlCLEdBQUcsQ0FDdkMsSUFBdUIsRUFDUixFQUFFO1FBQ3JCLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQztBQUVKLENBQUMsRUEvbUJnQixhQUFhLEtBQWIsYUFBYSxRQSttQjdCO0FBR0EsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxrREFBa0QiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuaW1wb3J0IHsgQ29yZU1vZGVscyB9IGZyb20gJy4vY29yZS1tb2RlbHMnO1xuaW1wb3J0IGF4aW9zLCB7IEF4aW9zUmVzcG9uc2UgfSBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyAgIHBhdGgsICAgXywgICBjcm9zc1BsYXRmb3JtUGF0aCwgLyogKi8gLyogKi8gLyogKi8gICAgfSBmcm9tICcuL2NvcmUtaW1wb3J0cyc7LyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG5cbmltcG9ydCB7IEhlbHBlcnMgfSBmcm9tICcuL2luZGV4JztcbmltcG9ydCB7IGRhdGVmb3JtYXQgfSBmcm9tICcuL2NvcmUtaW1wb3J0cyc7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG5cbmNvbnN0IEJMT0JfU1VQUE9SVEVEX0lOX1NRTEpTID0gZmFsc2U7XG5cblxuZXhwb3J0IG5hbWVzcGFjZSBVdGlscyB7XG5cbiAgZXhwb3J0IGNvbnN0IHVuaXFBcnJheSA9IDxUID0gYW55PihcbiAgICBhcnJheTogYW55W10sXG4gICAgdW5pcXVlUHJvcGVydHk/OiBrZXlvZiBULFxuICApID0+IHtcbiAgICB2YXIgc2VlbiA9IHt9O1xuICAgIHJldHVybiBhcnJheVxuICAgICAgLmZpbHRlcihmID0+ICEhZilcbiAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHNlZW4uaGFzT3duUHJvcGVydHkodW5pcXVlUHJvcGVydHkgPyBpdGVtW3VuaXF1ZVByb3BlcnR5XSA6IGl0ZW0pXG4gICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgIDogKHNlZW5bdW5pcXVlUHJvcGVydHkgPyBpdGVtW3VuaXF1ZVByb3BlcnR5XSA6IGl0ZW1dID0gdHJ1ZSk7XG4gICAgICB9KSBhcyBUW107XG4gIH07XG5cblxuXG4gIC8qKlxuICAgKiBFeGFtcGxlOlxuICAgKiBuZXcgUmVnRXhwKGVzY2FwZVN0cmluZ0ZvclJlZ0V4KCdhLmIuYycpLCdnJykgPT4gL2FcXC5iXFwuYy9nXG4gICAqL1xuICBleHBvcnQgY29uc3QgZXNjYXBlU3RyaW5nRm9yUmVnRXggPSAoc3RyaW5nRm9yUmVnRXhwOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gc3RyaW5nRm9yUmVnRXhwLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuICB9O1xuXG5cblxuICBleHBvcnQgZnVuY3Rpb24gcmVtb3ZlQ2hhbGtTcGVjaWFsQ2hhcnMoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuXG4gICAgY29uc3QgYW5zaVJlZ2V4ID0gL1xcdTAwMWJcXFtbMC05O10qbS9nO1xuXG5cbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoYW5zaVJlZ2V4LCAnJyk7XG4gIH1cblxuXG5cbiAgZXhwb3J0IGNvbnN0IGZ1bGxEYXRlVGltZSA9ICgpID0+IHtcbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuXG5cbiAgZXhwb3J0IGNvbnN0IGZ1bGxEYXRlID0gKCkgPT4ge1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG5cblxuICBjb25zdCB0YWtlblBvcnRzID0gW107XG4gIGV4cG9ydCBjb25zdCBnZXRGcmVlUG9ydCA9IGFzeW5jIChvcHRpb25zPzoge1xuICAgIHN0YXJ0RnJvbT86IG51bWJlcjtcbiAgfSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG5cblxuICBpbnRlcmZhY2UgQXR0ckpzb25jUHJvcCB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZhbHVlPzogYW55O1xuICB9XG4gIGV4cG9ydCBuYW1lc3BhY2UganNvbiB7XG4gICAgZXhwb3J0IGNvbnN0IGdldEF0cnJpYnV0aWVzID0gKFxuICAgICAganNvbkRlZXBQYXRoOiBzdHJpbmcsIC8vIGxvZGFzaCBwYXRoIHRvIHByb3BlcnR5IGluIGpzb24gZXguIGRlZXAucGF0aC50by5wcm9wXG4gICAgICBmaWxlQ29udGVudDogc3RyaW5nLCAvLyBqc29uYyBvciBqc29uNSAtIGpzb24gd2l0aCBjb21tZW50c1xuICAgICk6IEF0dHJKc29uY1Byb3BbXSA9PiB7XG4gICAgICBjb25zdCBsaW5lcyA9IGZpbGVDb250ZW50LnNwbGl0KCdcXG4nKTtcblxuICAgICAgY29uc3QgcGF0aFBhcnRzID0ganNvbkRlZXBQYXRoLnNwbGl0KCcuJykucmVkdWNlKChhLCBiKSA9PiB7XG4gICAgICAgIGlmIChhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBbYl07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFzdDogc3RyaW5nID0gYVthLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKGxhc3Quc3RhcnRzV2l0aChgWydgKSAmJiBiLmVuZHNXaXRoKGAnXWApKSB8fFxuICAgICAgICAgIChsYXN0LnN0YXJ0c1dpdGgoYFtcImApICYmIGIuZW5kc1dpdGgoYFwiXWApKVxuICAgICAgICApIHtcbiAgICAgICAgICBhW2EubGVuZ3RoIC0gMV0gPSBbbGFzdCwgYl0uam9pbignLicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGEucHVzaChiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH0sIFtdKTtcblxuXG4gICAgICBjb25zdCBrZXlOYW1lID0gcGF0aFBhcnRzLnBvcCgpIS5yZXBsYWNlKC9eXFxbXCIoLispXCJcXF0kLywgJyQxJyk7XG4gICAgICBsZXQgY3VycmVudFBhdGggPSAnJztcbiAgICAgIGxldCBhdHRyaWJ1dGVzOiBBdHRySnNvbmNQcm9wW10gPSBbXTtcbiAgICAgIGxldCBjb2xsZWN0ZWRDb21tZW50czogc3RyaW5nW10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgIGNvbnN0IHRyaW1tZWRMaW5lID0gbGluZS50cmltKCk7XG5cbiAgICAgICAgaWYgKHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoJy8vJykpIHtcblxuICAgICAgICAgIGNvbGxlY3RlZENvbW1lbnRzLnB1c2godHJpbW1lZExpbmUpO1xuXG5cbiAgICAgICAgfSBlbHNlIGlmICh0cmltbWVkTGluZS5zdGFydHNXaXRoKCdcIicpIHx8IHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoXCInXCIpKSB7XG5cbiAgICAgICAgICBjb25zdCBtYXRjaCA9IHRyaW1tZWRMaW5lLm1hdGNoKC9bXCInXShbXlwiJ10rKVtcIiddXFxzKjovKTtcblxuICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gbWF0Y2hbMV07XG4gICAgICAgICAgICBjdXJyZW50UGF0aCA9IGN1cnJlbnRQYXRoXG4gICAgICAgICAgICAgID8gYCR7Y3VycmVudFBhdGh9LiR7a2V5LmluY2x1ZGVzKCcuJykgPyBgWycke2tleX0nXWAgOiBrZXl9YFxuICAgICAgICAgICAgICA6IGtleTtcblxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIChjdXJyZW50UGF0aC5lbmRzV2l0aChrZXlOYW1lKSAmJlxuICAgICAgICAgICAgICAgICFjdXJyZW50UGF0aC5lbmRzV2l0aCgnLycgKyBrZXlOYW1lKSkgfHxcbiAgICAgICAgICAgICAgY3VycmVudFBhdGguZW5kc1dpdGgoYFsnJHtrZXlOYW1lfSddYClcbiAgICAgICAgICAgICkge1xuXG5cblxuXG5cbiAgICAgICAgICAgICAgYXR0cmlidXRlcyA9IGV4dHJhY3RBdHRyaWJ1dGVzRnJvbUNvbW1lbnRzKGNvbGxlY3RlZENvbW1lbnRzKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgY29sbGVjdGVkQ29tbWVudHMgPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gICAgfTtcblxuICAgIGNvbnN0IGV4dHJhY3RBdHRyaWJ1dGVzRnJvbUNvbW1lbnRzID0gKFxuICAgICAgY29tbWVudHM6IHN0cmluZ1tdLFxuICAgICk6IEF0dHJKc29uY1Byb3BbXSA9PiB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGVzOiBBdHRySnNvbmNQcm9wW10gPSBbXTtcbiAgICAgIGNvbnN0IGF0dHJSZWdleCA9IC9AKFxcdyspKD86XFxzKj1cXHMqKFteXFxzQF0rKSk/L2c7XG5cbiAgICAgIGZvciAoY29uc3QgY29tbWVudCBvZiBjb21tZW50cykge1xuICAgICAgICBsZXQgbWF0Y2g7XG4gICAgICAgIHdoaWxlICgobWF0Y2ggPSBhdHRyUmVnZXguZXhlYyhjb21tZW50KSkgIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBbLCBuYW1lLCB2YWx1ZV0gPSBtYXRjaDtcblxuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQXR0cmlidXRlID0gYXR0cmlidXRlcy5maW5kKFxuICAgICAgICAgICAgYXR0ciA9PiBhdHRyLm5hbWUgPT09IGBAJHtuYW1lfWAsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChleGlzdGluZ0F0dHJpYnV0ZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4aXN0aW5nQXR0cmlidXRlLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nQXR0cmlidXRlLnZhbHVlLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nQXR0cmlidXRlLnZhbHVlID0gW2V4aXN0aW5nQXR0cmlidXRlLnZhbHVlLCB2YWx1ZV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXR0cmlidXRlcy5wdXNoKHtcbiAgICAgICAgICAgICAgbmFtZTogYEAke25hbWV9YCxcbiAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlID8gdmFsdWUgOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cblxuICAgICAgYXR0cmlidXRlcy5mb3JFYWNoKGF0dHIgPT4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhdHRyLnZhbHVlKSAmJiBhdHRyLnZhbHVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGF0dHIudmFsdWUgPSBhdHRyLnZhbHVlWzBdO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gICAgfTtcbiAgfVxuXG5cblxuXG5cbiAgZXhwb3J0IGVudW0gRGJCaW5hcnlGb3JtYXRFbnVtIHtcbiAgICBCbG9iID0gJ0Jsb2InLFxuICAgIEZpbGUgPSAnRmlsZScsXG4gICAgc3RyaW5nID0gJ3N0cmluZycsXG4vKiAqL1xuLyogKi9cbiAgXG4gIH1cblxuICBleHBvcnQgdHlwZSBEYkJpbmFyeUZvcm1hdEZvckJyb3dzZXIgPSBCbG9iIHwgRmlsZSB8IHN0cmluZztcbi8qICovXG4vKiAqL1xuICBcblxuICAvKipcbiAgICogQmluYXJ5IGZvcm1hdCB0aGF0IGNhbiBiZSBzdG9yZWQgaW4gZGF0YWJhc2VcbiAgICpcbiAgICogZm9yIG5vZGVqcyA9PiBCdWZmZXJcbiAgICogZm9yIHNxbC5qcyA9PiBzdHJpbmcgKHNob3VsYiBiZSBibG9iIC0gYnV0IG5vdCBzdXBwb3J0ZWQpXG4gICAqXG4gICAqL1xuICBleHBvcnQgdHlwZSBEYkJpbmFyeUZvcm1hdCA9XG4gICAgfCBEYkJpbmFyeUZvcm1hdEZvckJyb3dzZXJcbi8qICovXG4vKiAqL1xuICBcblxuICBleHBvcnQgbmFtZXNwYWNlIGJpbmFyeSB7XG5cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgZm9yIEJST1dTRVIgT05MWVxuICAgICAqXG4gICAgICogQHBhcmFtIGJ1ZmZlclxuICAgICAqIEBwYXJhbSBjb250ZW50VHlwZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFycmF5QnVmZmVyVG9CbG9iKFxuICAgICAgYnVmZmVyOiBBcnJheUJ1ZmZlcixcbiAgICAgIGNvbnRlbnRUeXBlOiBDb3JlTW9kZWxzLkNvbnRlbnRUeXBlLFxuICAgICk6IFByb21pc2U8QmxvYj4ge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG5ldyBCbG9iKFtidWZmZXJdLCB7IHR5cGU6IGNvbnRlbnRUeXBlIH0pO1xuICAgIH1cblxuXG5cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgZm9yIEJST1dTRVIgT05MWVxuICAgICAqIEBwYXJhbSBibG9iXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gYmxvYlRvQXJyYXlCdWZmZXIoYmxvYjogQmxvYik6IFByb21pc2U8QXJyYXlCdWZmZXI+IHtcbiAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgIHJlYWRlci5hZGRFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdCBhcyBhbnkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgcmVqZWN0KTsgLy8gQHRzLWlnbm9yZVxuICAgICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYik7XG4gICAgICB9KTtcbiAgICB9XG5cblxuXG4gICAgLyoqXG4gICAgICogaXQgaXMgcmV2ZXJzIHRvIGJhc2U2NHRvQmxvYlxuICAgICAqIEBwYXJhbSBibG9iXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gYmxvYlRvQmFzZTY0KGJsb2I6IEJsb2IpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIF8pID0+IHtcbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdCk7IC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7XG4gICAgICB9KTtcbiAgICB9XG5cblxuXG4gICAgLyoqXG4gICAgICogaXQgaXMgcmV2ZXJzIHRvIGJsb2JUb0Jhc2U2NCgpXG4gICAgICogQHBhcmFtIGJhc2U2NERhdGFcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBiYXNlNjR0b0Jsb2IoXG4gICAgICBiYXNlNjREYXRhOiBzdHJpbmcsXG4gICAgICBjb250ZW50VHlwZU92ZXJyaWRlPzogQ29yZU1vZGVscy5Db250ZW50VHlwZSxcbiAgICApOiBQcm9taXNlPEJsb2I+IHtcbiAgICAgIGxldCBjb250ZW50X3R5cGU6IENvcmVNb2RlbHMuQ29udGVudFR5cGUgPSB2b2lkIDAgYXMgYW55O1xuICAgICAgbGV0IGZpbGVfYmFzZTY0OiBzdHJpbmcgPSB2b2lkIDAgYXMgYW55O1xuICAgICAgaWYgKCFjb250ZW50VHlwZU92ZXJyaWRlKSB7XG4gICAgICAgIGNvbnN0IG0gPSAvXmRhdGE6KC4rPyk7YmFzZTY0LCguKykkLy5leGVjKGJhc2U2NERhdGEpO1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgW3Rhb24tZnJhbWV3b3JrXVtiYXNlNjR0b0Jsb2JdIE5vdCBhIGJhc2U2NCBibG9iIFske2Jhc2U2NERhdGF9XWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBbX18sIGNvbnRlbnR0eXBlLCBmaWxlYmFzZTY0XSA9IG07XG4gICAgICAgIGNvbnRlbnRfdHlwZSA9IGNvbnRlbnR0eXBlIGFzIGFueTtcbiAgICAgICAgZmlsZV9iYXNlNjQgPSBmaWxlYmFzZTY0O1xuICAgICAgfVxuICAgICAgY29udGVudF90eXBlID0gKFxuICAgICAgICBjb250ZW50VHlwZU92ZXJyaWRlID8gY29udGVudFR5cGVPdmVycmlkZSA6IGNvbnRlbnRfdHlwZSB8fCAnJ1xuICAgICAgKSBhcyBhbnk7XG4gICAgICBiYXNlNjREYXRhID0gY29udGVudFR5cGVPdmVycmlkZSA/IGJhc2U2NERhdGEgOiBmaWxlX2Jhc2U2NDtcbiAgICAgIGNvbnN0IHNsaWNlU2l6ZSA9IDEwMjQ7XG4gICAgICBjb25zdCBieXRlQ2hhcmFjdGVycyA9IGF0b2IoYmFzZTY0RGF0YSk7XG4gICAgICBjb25zdCBieXRlc0xlbmd0aCA9IGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aDtcbiAgICAgIGNvbnN0IHNsaWNlc0NvdW50ID0gTWF0aC5jZWlsKGJ5dGVzTGVuZ3RoIC8gc2xpY2VTaXplKTtcbiAgICAgIGNvbnN0IGJ5dGVBcnJheXMgPSBuZXcgQXJyYXkoc2xpY2VzQ291bnQpO1xuXG4gICAgICBmb3IgKGxldCBzbGljZUluZGV4ID0gMDsgc2xpY2VJbmRleCA8IHNsaWNlc0NvdW50OyArK3NsaWNlSW5kZXgpIHtcbiAgICAgICAgY29uc3QgYmVnaW4gPSBzbGljZUluZGV4ICogc2xpY2VTaXplO1xuICAgICAgICBjb25zdCBlbmQgPSBNYXRoLm1pbihiZWdpbiArIHNsaWNlU2l6ZSwgYnl0ZXNMZW5ndGgpO1xuXG4gICAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IEFycmF5KGVuZCAtIGJlZ2luKTtcblxuICAgICAgICBmb3IgKGxldCBvZmZzZXQgPSBiZWdpbiwgaSA9IDA7IG9mZnNldCA8IGVuZDsgKytpLCArK29mZnNldCkge1xuICAgICAgICAgIGJ5dGVzW2ldID0gYnl0ZUNoYXJhY3RlcnNbb2Zmc2V0XS5jaGFyQ29kZUF0KDApO1xuICAgICAgICB9XG4gICAgICAgIGJ5dGVBcnJheXNbc2xpY2VJbmRleF0gPSBuZXcgVWludDhBcnJheShieXRlcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IEJsb2IoYnl0ZUFycmF5cywgeyB0eXBlOiBjb250ZW50X3R5cGUgfSk7XG4gICAgfVxuXG5cblxuXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJhc2U2NHRvRGJCaW5hcnlGb3JtYXQoXG4gICAgICB0ZXh0OiBzdHJpbmcsXG4gICAgKTogUHJvbWlzZTxEYkJpbmFyeUZvcm1hdD4ge1xuICAgICAgbGV0IHJlc3VsdDogRGJCaW5hcnlGb3JtYXQ7XG5cbiAgICAgIHJlc3VsdCA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChCTE9CX1NVUFBPUlRFRF9JTl9TUUxKUykge1xuICAgICAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCBiYXNlNjR0b0Jsb2IodGV4dCk7XG4gICAgICAgICAgcmV0dXJuIGJsb2I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQgYXMgYW55O1xuICAgICAgfSkoKTtcblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cblxuXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRiQmluYXJ5Rm9ybWF0VG9CYXNlNjQoXG4gICAgICBiaW5hcnlGb3JtYXQ6IERiQmluYXJ5Rm9ybWF0LFxuICAgICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICBsZXQgcmVzdWx0OiBzdHJpbmc7XG5cbiAgICAgIHJlc3VsdCA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChCTE9CX1NVUFBPUlRFRF9JTl9TUUxKUykge1xuICAgICAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCBibG9iVG9CYXNlNjQoYmluYXJ5Rm9ybWF0IGFzIGFueSk7XG4gICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJpbmFyeUZvcm1hdCBhcyBhbnk7XG4gICAgICB9KSgpO1xuXG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG5cblxuXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRleHRUb0RiQmluYXJ5Rm9ybWF0KFxuICAgICAgdGV4dDogc3RyaW5nLFxuICAgICk6IFByb21pc2U8RGJCaW5hcnlGb3JtYXQ+IHtcbiAgICAgIGxldCByZXN1bHQ6IERiQmluYXJ5Rm9ybWF0O1xuXG4gICAgICByZXN1bHQgPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoQkxPQl9TVVBQT1JURURfSU5fU1FMSlMpIHtcbiAgICAgICAgICBjb25zdCBibG9iID0gYXdhaXQgdGV4dFRvQmxvYih0ZXh0KTtcbiAgICAgICAgICByZXR1cm4gYmxvYjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dCBhcyBhbnk7XG4gICAgICB9KSgpO1xuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuXG5cbiAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gZGJCaW5hcnlGb3JtYXRUb1RleHQoXG4gICAgICBiaW5hcnlGb3JtYXQ6IERiQmluYXJ5Rm9ybWF0LFxuICAgICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICBsZXQgcmVzdWx0OiBzdHJpbmc7XG5cbiAgICAgIHJlc3VsdCA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChCTE9CX1NVUFBPUlRFRF9JTl9TUUxKUykge1xuICAgICAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCBibG9iVG9UZXh0KGJpbmFyeUZvcm1hdCBhcyBhbnkpO1xuICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiaW5hcnlGb3JtYXQgYXMgYW55O1xuICAgICAgfSkoKTtcblxuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuXG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG5cblxuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuXG5cblxuICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaWxlVG9CbG9iKGZpbGU6IEZpbGUpIHtcbiAgICAgIHJldHVybiBuZXcgQmxvYihbbmV3IFVpbnQ4QXJyYXkoYXdhaXQgZmlsZS5hcnJheUJ1ZmZlcigpKV0sIHtcbiAgICAgICAgdHlwZTogZmlsZS50eXBlLFxuICAgICAgfSk7XG4gICAgfVxuXG5cblxuICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBibG9iVG9GaWxlKFxuICAgICAgYmxvYjogQmxvYixcbiAgICAgIG5hbWVGb3JGaWxlOiBzdHJpbmcgPSAnbXktZmlsZS1uYW1lJyxcbiAgICApOiBQcm9taXNlPEZpbGU+IHtcbiAgICAgIGlmICghbmFtZUZvckZpbGUpIHtcbiAgICAgICAgbmFtZUZvckZpbGUgPSAnbm9uYW1lZmlsZScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgIH1cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBuZXcgRmlsZShbYmxvYl0sIG5hbWVGb3JGaWxlKTtcbiAgICB9XG5cblxuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuXG5cblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuXG5cblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcblxuXG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG5cblxuXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRleHRUb0Jsb2IoXG4gICAgICB0ZXh0OiBzdHJpbmcsXG4gICAgICB0eXBlOiBDb3JlTW9kZWxzLkNvbnRlbnRUeXBlID0gJ3RleHQvcGxhaW4nLFxuICAgICk6IFByb21pc2U8QmxvYj4ge1xuICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFt0ZXh0XSwgeyB0eXBlIH0pO1xuICAgICAgcmV0dXJuIGJsb2I7XG4gICAgfVxuXG5cblxuICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBibG9iVG9UZXh0KGJsb2I6IEJsb2IpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgcmV0dXJuIGF3YWl0IGJsb2IudGV4dCgpO1xuICAgIH1cblxuXG5cbiAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gdGV4dFRvRmlsZShcbiAgICAgIHRleHQ6IHN0cmluZyxcbiAgICAgIGZpbGVSZWxhdGl2ZVBhdGhPck5hbWU6IHN0cmluZyxcbiAgICApOiBQcm9taXNlPEZpbGU+IHtcblxuICAgICAgY29uc3QgZXh0ID0gcGF0aC5leHRuYW1lKGZpbGVSZWxhdGl2ZVBhdGhPck5hbWUpO1xuXG4gICAgICBjb25zdCB0eXBlID0gQ29yZU1vZGVscy5taW1lVHlwZXNbZXh0XTtcbiAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbdGV4dF0sIHsgdHlwZSB9KTtcbiAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBibG9iVG9GaWxlKGJsb2IsIGZpbGVSZWxhdGl2ZVBhdGhPck5hbWUpO1xuXG5cblxuXG5cbiAgICAgIHJldHVybiBmaWxlO1xuICAgIH1cblxuXG5cbiAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gZmlsZVRvVGV4dChmaWxlOiBGaWxlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgIHJldHVybiBhd2FpdCBmaWxlLnRleHQoKTtcbiAgICB9XG5cblxuXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGpzb25Ub0Jsb2IoanNvbk9iajogb2JqZWN0KTogUHJvbWlzZTxCbG9iPiB7XG4gICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KGpzb25PYmosIG51bGwsIDIpXSwge1xuICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBibG9iO1xuICAgIH1cblxuXG5cbiAgICAvKipcbiAgICAgKiBUT0RPIE5PVCBURVNURURcbiAgICAgKi9cbiAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gYmxvYlRvSnNvbihibG9iOiBCbG9iKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGF3YWl0IGJsb2IudGV4dCgpKTtcbiAgICB9XG5cblxuXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEJsb2JGcm9tKHVybDogc3RyaW5nKTogUHJvbWlzZTxCbG9iPiB7XG4gICAgICBjb25zdCByZXNwb25zZTogQXhpb3NSZXNwb25zZTxCbG9iPiA9IGF3YWl0IGF4aW9zKHtcbiAgICAgICAgdXJsLFxuICAgICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgICByZXNwb25zZVR5cGU6ICdibG9iJyxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfVxuXG4gIH1cblxuXG5cbiAgZXhwb3J0IG5hbWVzcGFjZSBjc3Mge1xuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGl4ZWxzQ3NzIHBpeGVscyBleC4gMTAwcHhcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBudW1WYWx1ZShwaXhlbHNDc3M6IHN0cmluZyB8IG51bWJlcik6IG51bWJlciB7XG5cbiAgICAgIHJldHVybiBwYXJzZUludChcbiAgICAgICAgcGl4ZWxzQ3NzPy50b1N0cmluZygpPy5yZXBsYWNlKCdweCcsICcnKSxcblxuXG4gICAgICApO1xuICAgIH1cblxuICB9XG5cbn1cblxuXG5cbmV4cG9ydCBuYW1lc3BhY2UgVXRpbHNQcm9jZXNzIHtcblxuICBpbnRlcmZhY2UgUmVzb2x2ZVByb21pc2VNc2cge1xuICAgIC8qKlxuICAgICAqIHVudGlsIHRoaXMgc3RyaW5nIGlzIGluIG91dHB1dCBvZiBzdGRvdXRcbiAgICAgKi9cbiAgICBzdGRvdXQ/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICAvKipcbiAgICAgKiB1bnRpbCB0aGlzIHN0cmluZyBpcyBpbiBvdXRwdXQgb2Ygc3RkZXJyXG4gICAgICovXG4gICAgc3RkZXJyPzogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgLyoqXG4gICAgICogYnkgZGVmYXVsdCBvbmx5IHJlc29sdmUgd2hlbiBleGl0IGNvZGUgaXMgMFxuICAgICAqL1xuICAgIHJlc29sdmVBZnRlckFueUV4aXRDb2RlPzogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc1N0YXJ0T3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogYnkgZGVmYXVsdCBpcyBwcm9jZXNzLmN3ZCgpO1xuICAgICAqL1xuICAgIGN3ZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBieSBkZWZhdWx0IGlzIGZhbHNlXG4gICAgICovXG4gICAgc2hvd0NvbW1hbmQ/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIE1vZGlmeSBvdXRwdXQgbGluZSBieSBsaW5lXG4gICAgICovXG4gICAgb3V0cHV0TGluZVJlcGxhY2U/OiAob3V0cHV0TGluZVN0ZGVyT3JTdGRvdXQ6IHN0cmluZykgPT4gc3RyaW5nO1xuICAgIHJlc29sdmVQcm9taXNlTXNnPzogUmVzb2x2ZVByb21pc2VNc2c7XG4gICAgLyoqXG4gICAgICogUHJlZml4IG1lc3NhZ2VzIG91dHB1dCBmcm9tIGNoaWxkX3Byb2Nlc3NcbiAgICAgKi9cbiAgICBwcmVmaXg/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVHJ5IGNvbW1hbmQgYWdhaW4gYWZ0ZXIgZmFpbCBhZnRlciBuIG1pbGxpc2Vjb25kc1xuICAgICAqL1xuICAgIHRyeUFnYWluV2hlbkZhaWxBZnRlcj86IG51bWJlcjtcbiAgICBhc2tUb1RyeUFnYWluT25FcnJvcj86IGJvb2xlYW47XG4gICAgZXhpdE9uRXJyb3JDYWxsYmFjaz86IChjb2RlOiBudW1iZXIpID0+IHZvaWQ7XG4gICAgLyoqXG4gICAgICogVXNlIGJpZyBidWZmZXIgZm9yIGJpZyB3ZWJwYWNrIGxvZ3NcbiAgICAgKiAoaXQgbWF5IHNsb3cgZG93biBzbWFsbGVyIHByb2Nlc3NlcyBleGVjdXRpb24pXG4gICAgICovXG4gICAgYmlnZ2VyQnVmZmVyPzogYm9vbGVhbjtcbiAgICBoaWRlT3V0cHV0Pzoge1xuICAgICAgc3Rkb3V0PzogYm9vbGVhbjtcbiAgICAgIHN0ZGVycj86IGJvb2xlYW47XG4gICAgfTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogVE9ETyBJTVBMRU1FTlRcbiAgICogc3RhcnQgYXN5bmMgbm9kZSBwcm9jZXNzXG4gICAqL1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAvKipcbiAgICogVGhpcyBsZXQgeW91IHN0YXJ0IGNoaWxkIHByb2Nlc3MgYW5kIHJlc29sdmUgcHJvbWlzZSB3aGVuIHNvbWVcbiAgICogY29uZGl0aW9uIGlzIG1ldC4gSXQgaXMgdXNlZnVsIGZvciBleGFtcGxlIHdoZW4geW91IHdhbnQgdG8gc3RhcnRcbiAgICogcHJvY2VzcyBhbmQgd2FpdCB1bnRpbCBzb21lIG91dHB1dCBpcyBpbiBzdGRvdXQgb3Igc3RkZXJyLlxuICAgKi9cbiAgZXhwb3J0IGNvbnN0IHN0YXJ0QXN5bmNDaGlsZFByb2Nlc3NDb21tYW5kVW50aWwgPSBhc3luYyAoXG4gICAgY29tbWFuZDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIC8qKlxuICAgICAgICogdGVscyB3aGVuIHRvIHJlc29sdmUgcHJvbWlzZVxuICAgICAgICovXG4gICAgICB1bnRpbE9wdGlvbnM6IFJlc29sdmVQcm9taXNlTXNnO1xuICAgICAgZGlzcGxheU91dHB1dEluUGFyZW50UHJvY2Vzcz86IGJvb2xlYW47XG4gICAgICByZXNvbHZlQWZ0ZXJBbnlFeGl0Q29kZT86IGJvb2xlYW47XG4gICAgICBjd2Q/OiBzdHJpbmc7XG4gICAgfSxcbiAgKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuXG5cbiAgZXhwb3J0IGNvbnN0IGdldEdpdEJhc2hQYXRoID0gKCkgPT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuXG5cbiAgLyoqXG4gICAqIFRPRE8gSU1QTEVNRU5UXG4gICAqIHN0YXJ0IGFzeW5jIG5vZGUgcHJvY2Vzc1xuICAgKi9cbiAgZXhwb3J0IGNvbnN0IHN0YXJ0SW5OZXdUZXJtaW5hbFdpbmRvdyA9IChcbiAgICBjb21tYW5kOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFBpY2s8UHJvY2Vzc1N0YXJ0T3B0aW9ucywgJ2N3ZCcgfCAnaGlkZU91dHB1dCc+LFxuICApID0+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuXG5cbiAgZXhwb3J0IGNvbnN0IGdldEJhc2hPclNoZWxsTmFtZSA9ICgpOlxuICAgIHwgJ2Jyb3dzZXInXG4gICAgfCAnY21kJ1xuICAgIHwgJ3Bvd2Vyc2hlbGwnXG4gICAgfCAnZ2l0YmFzaCdcbiAgICB8ICdjeWd3aW4nXG4gICAgfCAndW5rbm93bidcbiAgICB8ICdiYXNoJ1xuICAgIHwgJ3pzaCdcbiAgICB8ICdmaXNoJ1xuICAgIHwgJ3NoJyA9PiB7XG5cbiAgICByZXR1cm4gJ2Jyb3dzZXInO1xuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxufVxuXG5cblxuXG5leHBvcnQgbmFtZXNwYWNlIFV0aWxzT3Mge1xuXG4gIC8qKlxuICAgKiBjaGVjayBpZiBzY3JpcHQgaXMgcnVubmluZyBpbiBjbGllbnQgYnJvd3NlclxuICAgKiAod2Vic3FsIG1vZGVsIC0+IGlzIGFsc28gY29uc2lkZXJlZCBhcyBicm93c2VyXG4gICAqIGJlY2F1c2UgaXQgaXMgcnVubmluZyBpbiBicm93c2VyKVxuICAgKi9cbiAgZXhwb3J0IGNvbnN0IGlzUnVubmluZ0luQnJvd3NlciA9ICgpOiBib29sZWFuID0+IHtcbi8qICovXG4vKiAqL1xuICBcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuXG5cbiAgLyoqXG4gICAqIGNoZWNrIGlmIHNjcmlwdCBpcyBydW5uaW5nIGluIG5vZGVqc1xuICAgKiAoYmFja2VuZCBzY3JpcHQgb3IgZWxlY3Ryb24gc2NyaXB0KVxuICAgKi9cbiAgZXhwb3J0IGNvbnN0IGlzUnVubmluZ0luTm9kZSA9ICgpOiBib29sZWFuID0+IHtcbi8qICovXG4vKiAqL1xuICBcbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cblxuXG4gIC8qKlxuICAgKiBjaGVjayBpZiBzY3JpcHQgaXMgcnVubmluZyBzcGVjaWFsXG4gICAqIGJyb3dzZXIgbW9kZSB0aGF0IGhhcyBzcWwuanMgYmFja2VuZFxuICAgKiBhbmQgZXhlY3V0ZXMgc3FsIHF1ZXJpZXMgaW4gYnJvd3NlclxuICAgKi9cbiAgZXhwb3J0IGNvbnN0IGlzUnVubmluZ0luV2ViU1FMID0gKCk6IGJvb2xlYW4gPT4ge1xuLyogKi9cbi8qICovXG4gIFxuXG5cbiAgICByZXR1cm4gdHJ1ZTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuXG5cbiAgLyoqXG4gICAqIGNoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgcHJvY2VzcyBpcyBydW5uaW5nIGluc2lkZVxuICAgKiBFbGVjdHJvbiBiYWNrZW5kIG9yIGJyb3dzZXIuXG4gICAqL1xuICBleHBvcnQgY29uc3QgaXNSdW5uaW5nSW5FbGVjdHJvbiA9ICgpOiBib29sZWFuID0+IHtcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgdHlwZW9mIHdpbmRvdy5wcm9jZXNzID09PSAnb2JqZWN0JyAmJlxuICAgICAgd2luZG93LnByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJ1xuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICB0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICEhcHJvY2Vzcy52ZXJzaW9ucy5lbGVjdHJvblxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgbmF2aWdhdG9yID09PSAnb2JqZWN0JyAmJlxuICAgICAgdHlwZW9mIG5hdmlnYXRvci51c2VyQWdlbnQgPT09ICdzdHJpbmcnICYmXG4gICAgICBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0VsZWN0cm9uJykgPj0gMFxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG5cblxuICAvKipcbiAgICogQ2hlY2sgd2V0aGVyIHRoZSBjdXJyZW50IHByb2Nlc3MgaXMgcnVubmluZyBpbnNpZGVcbiAgICogd2luZG93cyBzdWJzeXN0ZW0gZm9yIGxpbnV4IChXU0wpLlxuICAgKi9cbiAgZXhwb3J0IGNvbnN0IGlzUnVubmluZ0luV3NsID0gKCk6IGJvb2xlYW4gPT4ge1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuXG5cbiAgZXhwb3J0IGNvbnN0IGlzUnVubmluZ0luRG9ja2VyID0gKCk6IGJvb2xlYW4gPT4ge1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG5cblxuICBleHBvcnQgY29uc3QgaXNSdW5uaW5nSW5MaW51eEdyYXBoaWNzQ2FwYWJsZUVudmlyb25tZW50ID0gKCk6IGJvb2xlYW4gPT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cblxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IHByb2Nlc3MgaXMgcnVubmluZyBpbiBDTEkgbW9kZS5cbiAgICovXG4gIGV4cG9ydCBjb25zdCBpc1J1bm5pbmdJbkNsaU1vZGUgPSAoKTogYm9vbGVhbiA9PiB7XG5cbiAgICByZXR1cm4gZmFsc2U7XG5cbi8qICovXG4vKiAqL1xuICAgICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG5cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBwcm9jZXNzIGlzIHJ1bm5pbmcgaW4gbW9jaGEgdGVzdC5cbiAgICovXG4gIGV4cG9ydCBjb25zdCBpc1J1bm5pbmdJbk1vY2hhVGVzdCA9ICgpOiBib29sZWFuID0+IHtcblxuICAgIHJldHVybiBmYWxzZTtcblxuLyogKi9cbi8qICovXG4gICAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cblxuXG4gIGNvbnN0IGlzUG9ydEluVXNlT25Ib3N0ID0gKHBvcnQ6IG51bWJlciwgaG9zdDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBnaXZlbiBwb3J0IGlzIGFscmVhZHkgaW4gdXNlIChib3VuZCBieSBhbm90aGVyIHByb2Nlc3MpLlxuICAgKlxuICAgKiBAcGFyYW0gcG9ydCAtIFRoZSBwb3J0IG51bWJlciB0byBjaGVjay5cbiAgICogQHBhcmFtIGhvc3QgLSBUaGUgaG9zdG5hbWUgb3IgSVAgYWRkcmVzcyB0byBiaW5kIHRvIChkZWZhdWx0OiAnMTI3LjAuMC4xJykuXG4gICAqIEByZXR1cm5zIFByb21pc2U8Ym9vbGVhbj4gLSBSZXNvbHZlcyB0byBgdHJ1ZWAgaWYgdGhlIHBvcnQgaXMgaW4gdXNlLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIGV4cG9ydCBjb25zdCBpc1BvcnRJblVzZSA9IGFzeW5jIChcbiAgICBwb3J0OiBudW1iZXIsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIC8qKlxuICAgICAgICogJzEyNy4wLjAuMScgZXRjLi5cbiAgICAgICAqL1xuICAgICAgY2hlY2tGb3JTcGVjaWZpY09ubHlIb3N0Pzogc3RyaW5nO1xuICAgIH0sXG4gICk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cbn1cblxuXG5cbmV4cG9ydCBuYW1lc3BhY2UgVXRpbHNTdHJpbmcge1xuXG4gIGV4cG9ydCBjb25zdCBrZWJhYkNhc2VOb1NwbGl0TnVtYmVycyA9IChpbnB1dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgaW5wdXRcblxuICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCAnLScpXG5cbiAgICAgICAgLnJlcGxhY2UoLyhbYS16MC05XSkoW0EtWl0pL2csICckMS0kMicpXG5cbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICApO1xuICB9O1xuXG59XG5cblxuXG4vKipcbiAqIFRhb24gbWlncmF0aW9uIHV0aWxpdGllc1xuICovXG5leHBvcnQgbmFtZXNwYWNlIFV0aWxzTWlncmF0aW9ucyB7XG4gIGV4cG9ydCBjb25zdCBnZXRUaW1lc3RhbXBGcm9tQ2xhc3NOYW1lID0gKFxuICAgIGNsYXNzTmFtZTogc3RyaW5nLFxuICApOiBudW1iZXIgfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IFttYXliZVRpbWVzdGFtcDEsIG1heWJlVGltZXN0YW1wMl0gPSBjbGFzc05hbWUuc3BsaXQoJ18nKSB8fCBbXTtcblxuICAgIGNvbnN0IHRpbWVzdGFtcDEgPSBwYXJzZUludChtYXliZVRpbWVzdGFtcDEpO1xuICAgIGNvbnN0IHRpbWVzdGFtcDIgPSBwYXJzZUludChtYXliZVRpbWVzdGFtcDIpO1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9ICFfLmlzTmFOKHRpbWVzdGFtcDEpID8gdGltZXN0YW1wMSA6IHRpbWVzdGFtcDI7XG4gICAgcmV0dXJuIGlzVmFsaWRUaW1lc3RhbXAodGltZXN0YW1wKSA/IHRpbWVzdGFtcCA6IHZvaWQgMDtcbiAgfTtcblxuICBleHBvcnQgY29uc3QgZ2V0Rm9ybWF0dGVkVGltZXN0YW1wRnJvbUNsYXNzTmFtZSA9IChcbiAgICBjbGFzc05hbWU6IHN0cmluZyxcbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBnZXRUaW1lc3RhbXBGcm9tQ2xhc3NOYW1lKGNsYXNzTmFtZSk7XG4gICAgaWYgKCF0aW1lc3RhbXApIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIHJldHVybiBmb3JtYXRUaW1lc3RhbXAodGltZXN0YW1wKTtcbiAgfTtcblxuICBleHBvcnQgY29uc3QgZm9ybWF0VGltZXN0YW1wID0gKHRpbWVzdGFtcDogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBkYXRlRnJvbVRpbWVzdGFtcDogRGF0ZSA9IG5ldyBEYXRlKHRpbWVzdGFtcCk7XG4gICAgcmV0dXJuIGAke2RhdGVmb3JtYXQoZGF0ZUZyb21UaW1lc3RhbXAsICdkZC1tbS15eXl5IEhIOk1NOnNzJyl9YDtcbiAgfTtcblxuICBleHBvcnQgY29uc3QgaXNWYWxpZFRpbWVzdGFtcCA9ICh2YWx1ZTogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBmYWxzZTsgLy8gTXVzdCBiZSBhIG51bWJlclxuICAgIH1cblxuICAgIGNvbnN0IG1pblRpbWVzdGFtcCA9IDA7IC8vIE1pbmltdW0gcG9zc2libGUgdGltZXN0YW1wIChVbml4IGVwb2NoKVxuICAgIGNvbnN0IG1heFRpbWVzdGFtcCA9IDg2NDAwMDAwMDAwMDAwMDA7IC8vIE1heCBzYWZlIHRpbWVzdGFtcCBpbiBKUyAocmVwcmVzZW50cyB5ZWFyIH4yNzU3NjApXG5cbiAgICByZXR1cm4gdmFsdWUgPj0gbWluVGltZXN0YW1wICYmIHZhbHVlIDw9IG1heFRpbWVzdGFtcDtcbiAgfTtcbn1cblxuXG5cbmV4cG9ydCBuYW1lc3BhY2UgVXRpbHNUZXJtaW5hbCB7XG5cbiAgdHlwZSBTZWxlY3RBY3Rpb25DaG9pY2UgPSB7XG4gICAgW2Nob2ljZTogc3RyaW5nXToge1xuICAgICAgLyoqXG4gICAgICAgKiBUaXRsZSBvZiB0aGUgY2hvaWNlXG4gICAgICAgKi9cbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIC8qKlxuICAgICAgICogQWN0aW9uIHRvIGV4ZWN1dGVcbiAgICAgICAqL1xuICAgICAgYWN0aW9uPzogKCkgPT4gYW55O1xuICAgICAgLyoqXG4gICAgICAgKiBJZiBjaG9pY2UgaXMgdmlzaWJsZVxuICAgICAgICogIGRlZmF1bHQ6IHRydWVcbiAgICAgICAqL1xuICAgICAgdmlzaWJsZT86IGJvb2xlYW47XG4gICAgfTtcbiAgfTtcblxuXG5cbiAgZXhwb3J0IGNvbnN0IGNsZWFyQ29uc29sZSA9ICgpOiB2b2lkID0+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cblxuXG4gIGNvbnN0IHRyYW5zZm9ybUNob2ljZXMgPSAoXG4gICAgY2hvaWNlczogYW55LFxuICApOiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W10gPT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuXG5cbiAgZXhwb3J0IGNvbnN0IG11bHRpc2VsZWN0ID0gYXN5bmMgPFQgPSBzdHJpbmc+KG9wdGlvbnM6IHtcbiAgICBxdWVzdGlvbjogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIElmIHRydWUsIHRoZW4gb25seSBvbmUgY2hvaWNlIGNhbiBiZSBzZWxlY3RlZFxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBzZWxlY3QgaW5zdGVhZFxuICAgICAqL1xuICAgIG9ubHlPbmVDaG9pY2U/OiBib29sZWFuO1xuICAgIGNob2ljZXM6XG4gICAgICB8IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogVCB9W11cbiAgICAgIHwgeyBbY2hvaWNlOiBzdHJpbmddOiB7IG5hbWU6IHN0cmluZyB9IH07XG4gICAgYXV0b2NvbXBsZXRlPzogYm9vbGVhbjtcbiAgICBkZWZhdWx0U2VsZWN0ZWQ/OiBzdHJpbmdbXTtcbiAgfSk6IFByb21pc2U8VFtdPiA9PiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuXG5cbiAgLyoqXG4gICAqIFNpbWlsYXIgdG8gc2VsZWN0IGJ1dCBleGVjdXRlcyBhY3Rpb24gaWYgcHJvdmlkZWRcbiAgICogQHJldHVybnMgc2VsZWN0ZWQgYW5kIGV4ZWN1dGVkIHZhbHVlXG4gICAqL1xuICBleHBvcnQgY29uc3QgbXVsdGlzZWxlY3RBY3Rpb25BbmRFeGVjdXRlID0gYXN5bmMgPFxuICAgIENIT0lDRSBleHRlbmRzIFNlbGVjdEFjdGlvbkNob2ljZSA9IFNlbGVjdEFjdGlvbkNob2ljZSxcbiAgPihcbiAgICBjaG9pY2VzOiBDSE9JQ0UsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIHF1ZXN0aW9uPzogc3RyaW5nO1xuICAgICAgYXV0b2NvbXBsZXRlPzogYm9vbGVhbjtcbiAgICAgIGRlZmF1bHRTZWxlY3RlZD86IHN0cmluZztcbiAgICAgIGhpbnQ/OiBzdHJpbmc7XG4gICAgICBleGVjdXRlQWN0aW9uc09uRGVmYXVsdD86IGJvb2xlYW47XG4gICAgfSxcbiAgKSA9PiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuXG5cbiAgLyoqXG4gICAqIFNpbWlsYXIgdG8gc2VsZWN0IGJ1dCBleGVjdXRlcyBhY3Rpb24gaWYgcHJvdmlkZWRcbiAgICogQHJldHVybnMgc2VsZWN0ZWQgYW5kIGV4ZWN1dGVkIHZhbHVlXG4gICAqL1xuICBleHBvcnQgY29uc3Qgc2VsZWN0QWN0aW9uQW5kRXhlY3V0ZSA9IGFzeW5jIDxcbiAgICBDSE9JQ0UgZXh0ZW5kcyBTZWxlY3RBY3Rpb25DaG9pY2UgPSBTZWxlY3RBY3Rpb25DaG9pY2UsXG4gID4oXG4gICAgY2hvaWNlczogQ0hPSUNFLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBxdWVzdGlvbj86IHN0cmluZztcbiAgICAgIGF1dG9jb21wbGV0ZT86IGJvb2xlYW47XG4gICAgICBkZWZhdWx0U2VsZWN0ZWQ/OiBzdHJpbmc7XG4gICAgICBoaW50Pzogc3RyaW5nO1xuICAgICAgZXhlY3V0ZUFjdGlvbk9uRGVmYXVsdD86IGJvb2xlYW47XG4gICAgfSxcbiAgKSA9PiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cblxuXG4gIGV4cG9ydCBjb25zdCBzZWxlY3QgPSBhc3luYyA8VCA9IHN0cmluZz4ob3B0aW9uczoge1xuICAgIHF1ZXN0aW9uOiBzdHJpbmc7XG4gICAgY2hvaWNlczpcbiAgICAgIHwgeyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBUIH1bXVxuICAgICAgfCB7IFtjaG9pY2U6IHN0cmluZ106IHsgbmFtZTogc3RyaW5nIH0gfTtcbiAgICBhdXRvY29tcGxldGU/OiBib29sZWFuO1xuICAgIGRlZmF1bHRTZWxlY3RlZD86IHN0cmluZztcbiAgICBoaW50Pzogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxUPiA9PiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG5cblxuXG4gIGV4cG9ydCBjb25zdCBwaXBlRW50ZXJUb1N0ZGluID0gKCk6IHZvaWQgPT4ge1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG5cblxuICBleHBvcnQgY29uc3QgaW5wdXQgPSBhc3luYyAoe1xuICAgIGRlZmF1bHRWYWx1ZSxcbiAgICBxdWVzdGlvbixcbiAgICByZXF1aXJlZCwgLy8gVE9ETyBzb21ldGhpbmcgaXMgd2VyaWQgd2l0aCByZXF1aXJlZFxuICB9OiB7XG4gICAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xuICAgIHF1ZXN0aW9uOiBzdHJpbmc7XG4gICAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICAgIHZhbGlkYXRlPzogKHZhbHVlOiBzdHJpbmcpID0+IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuXG5cbiAgZXhwb3J0IGNvbnN0IGNvbmZpcm0gPSBhc3luYyAob3B0aW9ucz86IHtcbiAgICAvKipcbiAgICAgKiBkZWZhdWx0OiBBcmUgeW91IHN1cmU/XG4gICAgICovXG4gICAgbWVzc2FnZT86IHN0cmluZztcbiAgICBjYWxsYmFja1RydWU/OiAoKSA9PiBhbnk7XG4gICAgY2FsbGJhY2tGYWxzZT86ICgpID0+IGFueTtcbiAgICAvKipcbiAgICAgKiBkZWZhdWx0OiB0cnVlXG4gICAgICovXG4gICAgZGVmYXVsdFZhbHVlPzogYm9vbGVhbjtcbiAgICBlbmdpbmU/OiAnaW5xdWlyZXItdG9nZ2xlJyB8ICdwcm9tcHRzJyB8ICdlbnF1aXJlcicgfCAnQGlucXVpcmVyL3Byb21wdHMnO1xuICB9KSA9PiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG5cblxuICBleHBvcnQgY29uc3QgcHJlc3NBbnlLZXlUb0NvbnRpbnVlQXN5bmMgPSAob3B0aW9ucz86IHtcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xuICB9KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG5cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIFV0aWxzVGVybWluYWwucHJlc3NBbnlLZXlUb0NvbnRpbnVlQXN5bmMoKVxuICAgKi9cbiAgZXhwb3J0IGNvbnN0IHByZXNzQW55S2V5ID0gKG9wdGlvbnM/OiB7IG1lc3NhZ2U/OiBzdHJpbmcgfSkgPT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuXG5cbiAgZXhwb3J0IGNvbnN0IHByZXZpZXdMb25nTGlzdCA9IGFzeW5jIChcbiAgICBsaXN0OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICBsaXN0TmFtZSA9ICdMaXN0JyxcbiAgKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cblxuXG4gIC8qKlxuICAgKiBEaXNwbGF5cyBhIGxvbmcgbGlzdCBpbiB0aGUgY29uc29sZSB1c2luZyBhIHBhZ2VyIGxpa2UgYGxlc3NgLlxuICAgKiBSZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHVzZXIgZXhpdHMgdGhlIHBhZ2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGlzdCAtIFRoZSBsb25nIHN0cmluZyBjb250ZW50IHRvIGRpc3BsYXkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBwYWdlciBleGl0cy5cbiAgICovXG4gIGV4cG9ydCBjb25zdCBwcmV2aWV3TG9uZ0xpc3RHaXRMb2dMaWtlID0gKFxuICAgIGxpc3Q6IHN0cmluZyB8IHN0cmluZ1tdLFxuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cbn1cblxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dG5wLWNvcmUgbGliL3V0aWxzLnRzIl19
1899
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC13ZWJzcWwvdG5wLWNvcmUvcHJvamVjdHMvdG5wLWNvcmUvc3JjL2xpYi91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBSTlCLE9BQU8sS0FBd0IsTUFBTSxPQUFPLENBQUM7QUFFN0MsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQWdDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzVDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNM0MsTUFBTSx1QkFBdUIsR0FBRyxLQUFLLENBQUM7QUFHdEMsTUFBTSxLQUFXLEtBQUssQ0E2c0JyQjtBQTdzQkQsV0FBaUIsS0FBSztJQUVQLGVBQVMsR0FBRyxDQUN2QixLQUFZLEVBQ1osY0FBd0IsRUFDeEIsRUFBRTtRQUNGLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNkLE9BQU8sS0FBSzthQUNULE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDaEIsTUFBTSxDQUFDLFVBQVUsSUFBSTtZQUNwQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDdEUsQ0FBQyxDQUFDLEtBQUs7Z0JBQ1AsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNsRSxDQUFDLENBQVEsQ0FBQztJQUNkLENBQUMsQ0FBQztJ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SztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQztJQWFGOzs7O09BSUc7SUFDVSwrQ0FBa0MsR0FBRyxLQUFLLEVBQ3JELE9BQWUsRUFDZixPQVFDLEVBQ2MsRUFBRTtRQUNyQixLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0lBSVcsMkJBQWMsR0FBRyxHQUFHLEVBQUU7UUFDckMsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0lBSUY7OztPQUdHO0lBQ1UscUNBQXdCLEdBQUcsQ0FDdEMsT0FBZSxFQUNmLE9BQXlELEVBQ3pELEVBQUU7UUFDTixLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFL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SztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDLENBQUM7SUFJRjs7O09BR0c7SUFDVSx5Q0FBMkIsR0FBRyxLQUFLLEVBRzlDLE9BQWUsRUFDZixPQU1DLEVBQ0QsRUFBRTtRQUNOLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FB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Q0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQztJQUlXLHFCQUFPLEdBQUcsS0FBSyxFQUFFLE9BWTdCLEVBQUUsRUFBRTtRQUNQLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDLENBQUM7SUFJVyx3Q0FBMEIsR0FBRyxDQUFDLE9BRTFDLEVBQWlCLEVBQUU7UUFDdEIsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0lBSUY7O09BRUc7SUFDVSx5QkFBVyxHQUFHLENBQUMsT0FBOEIsRUFBRSxFQUFFO1FBQ2hFLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQztJQUlXLDZCQUFlLEdBQUcsS0FBSyxFQUNsQyxJQUF1QixFQUN2QixRQUFRLEdBQUcsTUFBTSxFQUNGLEVBQUU7UUFDckIsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDLENBQUM7SUFJRjs7Ozs7O09BTUc7SUFDVSx1Q0FBeUIsR0FBRyxDQUN2QyxJQUF1QixFQUNSLEVBQUU7UUFDckIsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0FBRUosQ0FBQyxFQTFuQmdCLGFBQWEsS0FBYixhQUFhLFFBMG5CN0I7QUFHQSxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGtEQUFrRCIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5cbmltcG9ydCB7IEJsb2IgfSBmcm9tICdidWZmZXInO1xuaW1wb3J0ICogYXMgbmV0IGZyb20gJ25ldCc7XG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICd1dGlsJztcblxuaW1wb3J0IGF4aW9zLCB7IEF4aW9zUmVzcG9uc2UgfSBmcm9tICdheGlvcyc7XG5cbmltcG9ydCB7IHBhdGgsIF8sIGNyb3NzUGxhdGZvcm1QYXRoLCBvcywgY2hhbGsgfSBmcm9tICcuL2NvcmUtaW1wb3J0cyc7XG5pbXBvcnQgeyBkYXRlZm9ybWF0IH0gZnJvbSAnLi9jb3JlLWltcG9ydHMnO1xuaW1wb3J0IHsgc3Bhd24sIGNoaWxkX3Byb2Nlc3MgfSBmcm9tICcuL2NvcmUtaW1wb3J0cyc7XG5pbXBvcnQgeyBmc2UgfSBmcm9tICcuL2NvcmUtaW1wb3J0cyc7XG5pbXBvcnQgeyBDb3JlTW9kZWxzIH0gZnJvbSAnLi9jb3JlLW1vZGVscyc7XG5cbmltcG9ydCB7IEhlbHBlcnMgfSBmcm9tICcuL2luZGV4JztcbmltcG9ydCB7IENoaWxkUHJvY2VzcyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuXG5cbmNvbnN0IEJMT0JfU1VQUE9SVEVEX0lOX1NRTEpTID0gZmFsc2U7XG5cblxuZXhwb3J0IG5hbWVzcGFjZSBVdGlscyB7XG5cbiAgZXhwb3J0IGNvbnN0IHVuaXFBcnJheSA9IDxUID0gYW55PihcbiAgICBhcnJheTogYW55W10sXG4gICAgdW5pcXVlUHJvcGVydHk/OiBrZXlvZiBULFxuICApID0+IHtcbiAgICB2YXIgc2VlbiA9IHt9O1xuICAgIHJldHVybiBhcnJheVxuICAgICAgLmZpbHRlcihmID0+ICEhZilcbiAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHNlZW4uaGFzT3duUHJvcGVydHkodW5pcXVlUHJvcGVydHkgPyBpdGVtW3VuaXF1ZVByb3BlcnR5XSA6IGl0ZW0pXG4gICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgIDogKHNlZW5bdW5pcXVlUHJvcGVydHkgPyBpdGVtW3VuaXF1ZVByb3BlcnR5XSA6IGl0ZW1dID0gdHJ1ZSk7XG4gICAgICB9KSBhcyBUW107XG4gIH07XG5cblxuXG4gIC8qKlxuICAgKiBAcGFyYW0gYW55T2JqZWN0XG4gICAqIEByZXR1cm5zIG9iamVjdCB3aXRoIHNvcnRlZCBrZXlzXG4gICAqL1xuICBleHBvcnQgY29uc3Qgc29ydEtleXMgPSAoYW55T2JqZWN0OiBhbnkpOiBhbnkgPT4ge1xuICAgIGlmIChfLmlzQXJyYXkoYW55T2JqZWN0KSkge1xuICAgICAgcmV0dXJuIGFueU9iamVjdC5tYXAoc29ydEtleXMpO1xuICAgIH1cbiAgICBpZiAoXy5pc09iamVjdChhbnlPYmplY3QpKSB7XG4gICAgICByZXR1cm4gXy5mcm9tUGFpcnMoXG4gICAgICAgIF8ua2V5cyhhbnlPYmplY3QpXG4gICAgICAgICAgLnNvcnQoKVxuICAgICAgICAgIC5tYXAoa2V5ID0+IFtrZXksIHNvcnRLZXlzKGFueU9iamVjdFtrZXldKV0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGFueU9iamVjdDtcbiAgfTtcblxuXG5cbiAgLyoqXG4gICAqIEV4YW1wbGU6XG4gICAqIG5ldyBSZWdFeHAoZXNjYXBlU3RyaW5nRm9yUmVnRXgoJ2EuYi5jJyksJ2cnKSA9PiAvYVxcLmJcXC5jL2dcbiAgICovXG4gIGV4cG9ydCBjb25zdCBlc2NhcGVTdHJpbmdGb3JSZWdFeCA9IChzdHJpbmdGb3JSZWdFeHA6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBzdHJpbmdGb3JSZWdFeHAucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG4gIH07XG5cblxuXG4gIGV4cG9ydCBmdW5jdGlvbiByZW1vdmVDaGFsa1NwZWNpYWxDaGFycyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG5cbiAgICBjb25zdCBhbnNpUmVnZXggPSAvXFx1MDAxYlxcW1swLTk7XSptL2c7XG5cblxuICAgIHJldHVybiBzdHIucmVwbGFjZShhbnNpUmVnZXgsICcnKTtcbiAgfVxuXG5cblxuICBleHBvcnQgY29uc3QgZnVsbERhdGVUaW1lID0gKCkgPT4ge1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG5cblxuICBleHBvcnQgY29uc3QgZnVsbERhdGUgPSAoKSA9PiB7XG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cblxuXG4gIGNvbnN0IHRha2VuUG9ydHMgPSBbXTtcbiAgZXhwb3J0IGNvbnN0IGdldEZyZWVQb3J0ID0gYXN5bmMgKG9wdGlvbnM/OiB7XG4gICAgc3RhcnRGcm9tPzogbnVtYmVyO1xuICB9KTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cblxuXG4gIC8qKlxuICAgKiBUcmF2ZXJzZXMgdGhlIGNhY2hlIHRvIHNlYXJjaCBmb3IgYWxsIHRoZSBjYWNoZWRcbiAgICogZmlsZXMgb2YgdGhlIHNwZWNpZmllZCBtb2R1bGUgbmFtZVxuICAgKi9cbiAgY29uc3Qgc2VhcmNoQ2FjaGUgPSAobW9kdWxlTmFtZSwgY2FsbGJhY2spID0+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuICAvKipcbiAgICogUmVtb3ZlcyBhIG1vZHVsZSBmcm9tIHRoZSBjYWNoZVxuICAgKi9cbiAgY29uc3QgcHVyZ2VDYWNoZSA9IG1vZHVsZU5hbWUgPT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG4gIGV4cG9ydCBjb25zdCByZXF1aXJlVW5jYWNoZWQgPSAobW9kdWxlOiBzdHJpbmcpID0+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG5cblxuXG4gIC8qKlxuICAgKiBzaW1pbGFyIHRvIGNhbWVsQ2FzZSBidXQgcmVtb3ZlXG4gICAqIGFsbCBub24gd29yZCAvIHJlcGVhdGVkIGNoYXJhY3RlcnNcbiAgICovXG4gIGV4cG9ydCBjb25zdCBjYW1lbGl6ZSA9IChzdHI6IHN0cmluZyA9ICcnKSA9PiB7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcVy9nLCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gc3RyXG4gICAgICAucmVwbGFjZSgvKD86Xlxcd3xbQS1aXXxcXGJcXHcpL2csIGZ1bmN0aW9uICh3b3JkLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gaW5kZXggPT0gMCA/IHdvcmQudG9Mb3dlckNhc2UoKSA6IHdvcmQudG9VcHBlckNhc2UoKTtcbiAgICAgIH0pXG4gICAgICAucmVwbGFjZSgvXFxzKy9nLCAnJyk7XG4gIH07XG5cblxuXG4gIGludGVyZmFjZSBBdHRySnNvbmNQcm9wIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmFsdWU/OiBhbnk7XG4gIH1cbiAgZXhwb3J0IG5hbWVzcGFjZSBqc29uIHtcbiAgICBleHBvcnQgY29uc3QgZ2V0QXRycmlidXRpZXMgPSAoXG4gICAgICBqc29uRGVlcFBhdGg6IHN0cmluZywgLy8gbG9kYXNoIHBhdGggdG8gcHJvcGVydHkgaW4ganNvbiBleC4gZGVlcC5wYXRoLnRvLnByb3BcbiAgICAgIGZpbGVDb250ZW50OiBzdHJpbmcsIC8vIGpzb25jIG9yIGpzb241IC0ganNvbiB3aXRoIGNvbW1lbnRzXG4gICAgKTogQXR0ckpzb25jUHJvcFtdID0+IHtcbiAgICAgIGNvbnN0IGxpbmVzID0gZmlsZUNvbnRlbnQuc3BsaXQoJ1xcbicpO1xuXG4gICAgICBjb25zdCBwYXRoUGFydHMgPSBqc29uRGVlcFBhdGguc3BsaXQoJy4nKS5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICAgICAgaWYgKGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIFtiXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXN0OiBzdHJpbmcgPSBhW2EubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmIChcbiAgICAgICAgICAobGFzdC5zdGFydHNXaXRoKGBbJ2ApICYmIGIuZW5kc1dpdGgoYCddYCkpIHx8XG4gICAgICAgICAgKGxhc3Quc3RhcnRzV2l0aChgW1wiYCkgJiYgYi5lbmRzV2l0aChgXCJdYCkpXG4gICAgICAgICkge1xuICAgICAgICAgIGFbYS5sZW5ndGggLSAxXSA9IFtsYXN0LCBiXS5qb2luKCcuJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYS5wdXNoKGIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhO1xuICAgICAgfSwgW10pO1xuXG5cbiAgICAgIGNvbnN0IGtleU5hbWUgPSBwYXRoUGFydHMucG9wKCkhLnJlcGxhY2UoL15cXFtcIiguKylcIlxcXSQvLCAnJDEnKTtcbiAgICAgIGxldCBjdXJyZW50UGF0aCA9ICcnO1xuICAgICAgbGV0IGF0dHJpYnV0ZXM6IEF0dHJKc29uY1Byb3BbXSA9IFtdO1xuICAgICAgbGV0IGNvbGxlY3RlZENvbW1lbnRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgY29uc3QgdHJpbW1lZExpbmUgPSBsaW5lLnRyaW0oKTtcblxuICAgICAgICBpZiAodHJpbW1lZExpbmUuc3RhcnRzV2l0aCgnLy8nKSkge1xuXG4gICAgICAgICAgY29sbGVjdGVkQ29tbWVudHMucHVzaCh0cmltbWVkTGluZSk7XG5cblxuICAgICAgICB9IGVsc2UgaWYgKHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoJ1wiJykgfHwgdHJpbW1lZExpbmUuc3RhcnRzV2l0aChcIidcIikpIHtcblxuICAgICAgICAgIGNvbnN0IG1hdGNoID0gdHJpbW1lZExpbmUubWF0Y2goL1tcIiddKFteXCInXSspW1wiJ11cXHMqOi8pO1xuXG4gICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgIGN1cnJlbnRQYXRoID0gY3VycmVudFBhdGhcbiAgICAgICAgICAgICAgPyBgJHtjdXJyZW50UGF0aH0uJHtrZXkuaW5jbHVkZXMoJy4nKSA/IGBbJyR7a2V5fSddYCA6IGtleX1gXG4gICAgICAgICAgICAgIDoga2V5O1xuXG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKGN1cnJlbnRQYXRoLmVuZHNXaXRoKGtleU5hbWUpICYmXG4gICAgICAgICAgICAgICAgIWN1cnJlbnRQYXRoLmVuZHNXaXRoKCcvJyArIGtleU5hbWUpKSB8fFxuICAgICAgICAgICAgICBjdXJyZW50UGF0aC5lbmRzV2l0aChgWycke2tleU5hbWV9J11gKVxuICAgICAgICAgICAgKSB7XG5cblxuXG5cblxuICAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gZXh0cmFjdEF0dHJpYnV0ZXNGcm9tQ29tbWVudHMoY29sbGVjdGVkQ29tbWVudHMpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICBjb2xsZWN0ZWRDb21tZW50cyA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgICB9O1xuXG4gICAgY29uc3QgZXh0cmFjdEF0dHJpYnV0ZXNGcm9tQ29tbWVudHMgPSAoXG4gICAgICBjb21tZW50czogc3RyaW5nW10sXG4gICAgKTogQXR0ckpzb25jUHJvcFtdID0+IHtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXM6IEF0dHJKc29uY1Byb3BbXSA9IFtdO1xuICAgICAgY29uc3QgYXR0clJlZ2V4ID0gL0AoXFx3KykoPzpcXHMqPVxccyooW15cXHNAXSspKT8vZztcblxuICAgICAgZm9yIChjb25zdCBjb21tZW50IG9mIGNvbW1lbnRzKSB7XG4gICAgICAgIGxldCBtYXRjaDtcbiAgICAgICAgd2hpbGUgKChtYXRjaCA9IGF0dHJSZWdleC5leGVjKGNvbW1lbnQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IFssIG5hbWUsIHZhbHVlXSA9IG1hdGNoO1xuXG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdBdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLmZpbmQoXG4gICAgICAgICAgICBhdHRyID0+IGF0dHIubmFtZSA9PT0gYEAke25hbWV9YCxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGV4aXN0aW5nQXR0cmlidXRlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXhpc3RpbmdBdHRyaWJ1dGUudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgZXhpc3RpbmdBdHRyaWJ1dGUudmFsdWUucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZXhpc3RpbmdBdHRyaWJ1dGUudmFsdWUgPSBbZXhpc3RpbmdBdHRyaWJ1dGUudmFsdWUsIHZhbHVlXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzLnB1c2goe1xuICAgICAgICAgICAgICBuYW1lOiBgQCR7bmFtZX1gLFxuICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUgPyB2YWx1ZSA6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuXG4gICAgICBhdHRyaWJ1dGVzLmZvckVhY2goYXR0ciA9PiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGF0dHIudmFsdWUpICYmIGF0dHIudmFsdWUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgYXR0ci52YWx1ZSA9IGF0dHIudmFsdWVbMF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgICB9O1xuICB9XG5cblxuXG5cblxuICBleHBvcnQgZW51bSBEYkJpbmFyeUZvcm1hdEVudW0ge1xuICAgIEJsb2IgPSAnQmxvYicsXG4gICAgRmlsZSA9ICdGaWxlJyxcbiAgICBzdHJpbmcgPSAnc3RyaW5nJyxcbi8qICovXG4vKiAqL1xuICBcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIERiQmluYXJ5Rm9ybWF0Rm9yQnJvd3NlciA9IEJsb2IgfCBGaWxlIHwgc3RyaW5nO1xuLyogKi9cbi8qICovXG4gIFxuXG4gIC8qKlxuICAgKiBCaW5hcnkgZm9ybWF0IHRoYXQgY2FuIGJlIHN0b3JlZCBpbiBkYXRhYmFzZVxuICAgKlxuICAgKiBmb3Igbm9kZWpzID0+IEJ1ZmZlclxuICAgKiBmb3Igc3FsLmpzID0+IHN0cmluZyAoc2hvdWxiIGJlIGJsb2IgLSBidXQgbm90IHN1cHBvcnRlZClcbiAgICpcbiAgICovXG4gIGV4cG9ydCB0eXBlIERiQmluYXJ5Rm9ybWF0ID1cbiAgICB8IERiQmluYXJ5Rm9ybWF0Rm9yQnJvd3NlclxuLyogKi9cbi8qICovXG4gIFxuXG4gIGV4cG9ydCBuYW1lc3BhY2UgYmluYXJ5IHtcblxuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBmb3IgQlJPV1NFUiBPTkxZXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYnVmZmVyXG4gICAgICogQHBhcmFtIGNvbnRlbnRUeXBlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gYXJyYXlCdWZmZXJUb0Jsb2IoXG4gICAgICBidWZmZXI6IEFycmF5QnVmZmVyLFxuICAgICAgY29udGVudFR5cGU6IENvcmVNb2RlbHMuQ29udGVudFR5cGUsXG4gICAgKTogUHJvbWlzZTxCbG9iPiB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogY29udGVudFR5cGUgfSk7XG4gICAgfVxuXG5cblxuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBmb3IgQlJPV1NFUiBPTkxZXG4gICAgICogQHBhcmFtIGJsb2JcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBibG9iVG9BcnJheUJ1ZmZlcihibG9iOiBCbG9iKTogUHJvbWlzZTxBcnJheUJ1ZmZlcj4ge1xuICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgcmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShyZWFkZXIucmVzdWx0IGFzIGFueSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZWFkZXIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCByZWplY3QpOyAvLyBAdHMtaWdub3JlXG4gICAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKTtcbiAgICAgIH0pO1xuICAgIH1cblxuXG5cbiAgICAvKipcbiAgICAgKiBpdCBpcyByZXZlcnMgdG8gYmFzZTY0dG9CbG9iXG4gICAgICogQHBhcmFtIGJsb2JcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBibG9iVG9CYXNlNjQoYmxvYjogQmxvYik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgXykgPT4ge1xuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIub25sb2FkZW5kID0gKCkgPT4gcmVzb2x2ZShyZWFkZXIucmVzdWx0KTsgLy8gQHRzLWlnbm9yZVxuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcbiAgICAgIH0pO1xuICAgIH1cblxuXG5cbiAgICAvKipcbiAgICAgKiBpdCBpcyByZXZlcnMgdG8gYmxvYlRvQmFzZTY0KClcbiAgICAgKiBAcGFyYW0gYmFzZTY0RGF0YVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJhc2U2NHRvQmxvYihcbiAgICAgIGJhc2U2NERhdGE6IHN0cmluZyxcbiAgICAgIGNvbnRlbnRUeXBlT3ZlcnJpZGU/OiBDb3JlTW9kZWxzLkNvbnRlbnRUeXBlLFxuICAgICk6IFByb21pc2U8QmxvYj4ge1xuICAgICAgbGV0IGNvbnRlbnRfdHlwZTogQ29yZU1vZGVscy5Db250ZW50VHlwZSA9IHZvaWQgMCBhcyBhbnk7XG4gICAgICBsZXQgZmlsZV9iYXNlNjQ6IHN0cmluZyA9IHZvaWQgMCBhcyBhbnk7XG4gICAgICBpZiAoIWNvbnRlbnRUeXBlT3ZlcnJpZGUpIHtcbiAgICAgICAgY29uc3QgbSA9IC9eZGF0YTooLis/KTtiYXNlNjQsKC4rKSQvLmV4ZWMoYmFzZTY0RGF0YSk7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBbdGFvbi1mcmFtZXdvcmtdW2Jhc2U2NHRvQmxvYl0gTm90IGEgYmFzZTY0IGJsb2IgWyR7YmFzZTY0RGF0YX1dYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIFtfXywgY29udGVudHR5cGUsIGZpbGViYXNlNjRdID0gbTtcbiAgICAgICAgY29udGVudF90eXBlID0gY29udGVudHR5cGUgYXMgYW55O1xuICAgICAgICBmaWxlX2Jhc2U2NCA9IGZpbGViYXNlNjQ7XG4gICAgICB9XG4gICAgICBjb250ZW50X3R5cGUgPSAoXG4gICAgICAgIGNvbnRlbnRUeXBlT3ZlcnJpZGUgPyBjb250ZW50VHlwZU92ZXJyaWRlIDogY29udGVudF90eXBlIHx8ICcnXG4gICAgICApIGFzIGFueTtcbiAgICAgIGJhc2U2NERhdGEgPSBjb250ZW50VHlwZU92ZXJyaWRlID8gYmFzZTY0RGF0YSA6IGZpbGVfYmFzZTY0O1xuICAgICAgY29uc3Qgc2xpY2VTaXplID0gMTAyNDtcbiAgICAgIGNvbnN0IGJ5dGVDaGFyYWN0ZXJzID0gYXRvYihiYXNlNjREYXRhKTtcbiAgICAgIGNvbnN0IGJ5dGVzTGVuZ3RoID0gYnl0ZUNoYXJhY3RlcnMubGVuZ3RoO1xuICAgICAgY29uc3Qgc2xpY2VzQ291bnQgPSBNYXRoLmNlaWwoYnl0ZXNMZW5ndGggLyBzbGljZVNpemUpO1xuICAgICAgY29uc3QgYnl0ZUFycmF5cyA9IG5ldyBBcnJheShzbGljZXNDb3VudCk7XG5cbiAgICAgIGZvciAobGV0IHNsaWNlSW5kZXggPSAwOyBzbGljZUluZGV4IDwgc2xpY2VzQ291bnQ7ICsrc2xpY2VJbmRleCkge1xuICAgICAgICBjb25zdCBiZWdpbiA9IHNsaWNlSW5kZXggKiBzbGljZVNpemU7XG4gICAgICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKGJlZ2luICsgc2xpY2VTaXplLCBieXRlc0xlbmd0aCk7XG5cbiAgICAgICAgY29uc3QgYnl0ZXMgPSBuZXcgQXJyYXkoZW5kIC0gYmVnaW4pO1xuXG4gICAgICAgIGZvciAobGV0IG9mZnNldCA9IGJlZ2luLCBpID0gMDsgb2Zmc2V0IDwgZW5kOyArK2ksICsrb2Zmc2V0KSB7XG4gICAgICAgICAgYnl0ZXNbaV0gPSBieXRlQ2hhcmFjdGVyc1tvZmZzZXRdLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgIH1cbiAgICAgICAgYnl0ZUFycmF5c1tzbGljZUluZGV4XSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgQmxvYihieXRlQXJyYXlzLCB7IHR5cGU6IGNvbnRlbnRfdHlwZSB9KTtcbiAgICB9XG5cblxuXG5cbiAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gYmFzZTY0dG9EYkJpbmFyeUZvcm1hdChcbiAgICAgIHRleHQ6IHN0cmluZyxcbiAgICApOiBQcm9taXNlPERiQmluYXJ5Rm9ybWF0PiB7XG4gICAgICBsZXQgcmVzdWx0OiBEYkJpbmFyeUZvcm1hdDtcblxuICAgICAgcmVzdWx0ID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKEJMT0JfU1VQUE9SVEVEX0lOX1NRTEpTKSB7XG4gICAgICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IGJhc2U2NHRvQmxvYih0ZXh0KTtcbiAgICAgICAgICByZXR1cm4gYmxvYjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dCBhcyBhbnk7XG4gICAgICB9KSgpO1xuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuXG5cbiAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gZGJCaW5hcnlGb3JtYXRUb0Jhc2U2NChcbiAgICAgIGJpbmFyeUZvcm1hdDogRGJCaW5hcnlGb3JtYXQsXG4gICAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgIGxldCByZXN1bHQ6IHN0cmluZztcblxuICAgICAgcmVzdWx0ID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKEJMT0JfU1VQUE9SVEVEX0lOX1NRTEpTKSB7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IGJsb2JUb0Jhc2U2NChiaW5hcnlGb3JtYXQgYXMgYW55KTtcbiAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYmluYXJ5Rm9ybWF0IGFzIGFueTtcbiAgICAgIH0pKCk7XG5cblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cblxuXG5cbiAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gdGV4dFRvRGJCaW5hcnlGb3JtYXQoXG4gICAgICB0ZXh0OiBzdHJpbmcsXG4gICAgKTogUHJvbWlzZTxEYkJpbmFyeUZvcm1hdD4ge1xuICAgICAgbGV0IHJlc3VsdDogRGJCaW5hcnlGb3JtYXQ7XG5cbiAgICAgIHJlc3VsdCA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChCTE9CX1NVUFBPUlRFRF9JTl9TUUxKUykge1xuICAgICAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCB0ZXh0VG9CbG9iKHRleHQpO1xuICAgICAgICAgIHJldHVybiBibG9iO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0IGFzIGFueTtcbiAgICAgIH0pKCk7XG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG5cblxuICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBkYkJpbmFyeUZvcm1hdFRvVGV4dChcbiAgICAgIGJpbmFyeUZvcm1hdDogRGJCaW5hcnlGb3JtYXQsXG4gICAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgIGxldCByZXN1bHQ6IHN0cmluZztcblxuICAgICAgcmVzdWx0ID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKEJMT0JfU1VQUE9SVEVEX0lOX1NRTEpTKSB7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IGJsb2JUb1RleHQoYmluYXJ5Rm9ybWF0IGFzIGFueSk7XG4gICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJpbmFyeUZvcm1hdCBhcyBhbnk7XG4gICAgICB9KSgpO1xuXG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG5cblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcblxuXG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG5cblxuXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbGVUb0Jsb2IoZmlsZTogRmlsZSkge1xuICAgICAgcmV0dXJuIG5ldyBCbG9iKFtuZXcgVWludDhBcnJheShhd2FpdCBmaWxlLmFycmF5QnVmZmVyKCkpXSwge1xuICAgICAgICB0eXBlOiBmaWxlLnR5cGUsXG4gICAgICB9KTtcbiAgICB9XG5cblxuXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJsb2JUb0ZpbGUoXG4gICAgICBibG9iOiBCbG9iLFxuICAgICAgbmFtZUZvckZpbGU6IHN0cmluZyA9ICdteS1maWxlLW5hbWUnLFxuICAgICk6IFByb21pc2U8RmlsZT4ge1xuICAgICAgaWYgKCFuYW1lRm9yRmlsZSkge1xuICAgICAgICBuYW1lRm9yRmlsZSA9ICdub25hbWVmaWxlJyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgfVxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG5ldyBGaWxlKFtibG9iXSwgbmFtZUZvckZpbGUpO1xuICAgIH1cblxuXG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG5cblxuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG5cblxuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuXG5cblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcblxuXG5cbiAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gdGV4dFRvQmxvYihcbiAgICAgIHRleHQ6IHN0cmluZyxcbiAgICAgIHR5cGU6IENvcmVNb2RlbHMuQ29udGVudFR5cGUgPSAndGV4dC9wbGFpbicsXG4gICAgKTogUHJvbWlzZTxCbG9iPiB7XG4gICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3RleHRdLCB7IHR5cGUgfSk7XG4gICAgICByZXR1cm4gYmxvYjtcbiAgICB9XG5cblxuXG4gICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJsb2JUb1RleHQoYmxvYjogQmxvYik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICByZXR1cm4gYXdhaXQgYmxvYi50ZXh0KCk7XG4gICAgfVxuXG5cblxuICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXh0VG9GaWxlKFxuICAgICAgdGV4dDogc3RyaW5nLFxuICAgICAgZmlsZVJlbGF0aXZlUGF0aE9yTmFtZTogc3RyaW5nLFxuICAgICk6IFByb21pc2U8RmlsZT4ge1xuXG4gICAgICBjb25zdCBleHQgPSBwYXRoLmV4dG5hbWUoZmlsZVJlbGF0aXZlUGF0aE9yTmFtZSk7XG5cbiAgICAgIGNvbnN0IHR5cGUgPSBDb3JlTW9kZWxzLm1pbWVUeXBlc1tleHRdO1xuICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFt0ZXh0XSwgeyB0eXBlIH0pO1xuICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGJsb2JUb0ZpbGUoYmxvYiwgZmlsZVJlbGF0aXZlUGF0aE9yTmFtZSk7XG5cblxuXG5cblxuICAgICAgcmV0dXJuIGZpbGU7XG4gICAgfVxuXG5cblxuICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaWxlVG9UZXh0KGZpbGU6IEZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgcmV0dXJuIGF3YWl0IGZpbGUudGV4dCgpO1xuICAgIH1cblxuXG5cbiAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24ganNvblRvQmxvYihqc29uT2JqOiBvYmplY3QpOiBQcm9taXNlPEJsb2I+IHtcbiAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkoanNvbk9iaiwgbnVsbCwgMildLCB7XG4gICAgICAgIHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGJsb2I7XG4gICAgfVxuXG5cblxuICAgIC8qKlxuICAgICAqIFRPRE8gTk9UIFRFU1RFRFxuICAgICAqL1xuICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBibG9iVG9Kc29uKGJsb2I6IEJsb2IpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoYXdhaXQgYmxvYi50ZXh0KCkpO1xuICAgIH1cblxuXG5cbiAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QmxvYkZyb20odXJsOiBzdHJpbmcpOiBQcm9taXNlPEJsb2I+IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBBeGlvc1Jlc3BvbnNlPEJsb2I+ID0gYXdhaXQgYXhpb3Moe1xuICAgICAgICB1cmwsXG4gICAgICAgIG1ldGhvZDogJ2dldCcsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9XG5cbiAgfVxuXG5cblxuICBleHBvcnQgbmFtZXNwYWNlIGNzcyB7XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwaXhlbHNDc3MgcGl4ZWxzIGV4LiAxMDBweFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIG51bVZhbHVlKHBpeGVsc0Nzczogc3RyaW5nIHwgbnVtYmVyKTogbnVtYmVyIHtcblxuICAgICAgcmV0dXJuIHBhcnNlSW50KFxuICAgICAgICBwaXhlbHNDc3M/LnRvU3RyaW5nKCk/LnJlcGxhY2UoJ3B4JywgJycpLFxuXG5cbiAgICAgICk7XG4gICAgfVxuXG4gIH1cblxufVxuXG5cblxuZXhwb3J0IG5hbWVzcGFjZSBVdGlsc1Byb2Nlc3Mge1xuXG4gIGludGVyZmFjZSBSZXNvbHZlUHJvbWlzZU1zZyB7XG4gICAgLyoqXG4gICAgICogdW50aWwgdGhpcyBzdHJpbmcgaXMgaW4gb3V0cHV0IG9mIHN0ZG91dFxuICAgICAqL1xuICAgIHN0ZG91dD86IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIC8qKlxuICAgICAqIHVudGlsIHRoaXMgc3RyaW5nIGlzIGluIG91dHB1dCBvZiBzdGRlcnJcbiAgICAgKi9cbiAgICBzdGRlcnI/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICAvKipcbiAgICAgKiBieSBkZWZhdWx0IG9ubHkgcmVzb2x2ZSB3aGVuIGV4aXQgY29kZSBpcyAwXG4gICAgICovXG4gICAgcmVzb2x2ZUFmdGVyQW55RXhpdENvZGU/OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzU3RhcnRPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBieSBkZWZhdWx0IGlzIHByb2Nlc3MuY3dkKCk7XG4gICAgICovXG4gICAgY3dkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIGJ5IGRlZmF1bHQgaXMgZmFsc2VcbiAgICAgKi9cbiAgICBzaG93Q29tbWFuZD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogTW9kaWZ5IG91dHB1dCBsaW5lIGJ5IGxpbmVcbiAgICAgKi9cbiAgICBvdXRwdXRMaW5lUmVwbGFjZT86IChvdXRwdXRMaW5lU3RkZXJPclN0ZG91dDogc3RyaW5nKSA9PiBzdHJpbmc7XG4gICAgcmVzb2x2ZVByb21pc2VNc2c/OiBSZXNvbHZlUHJvbWlzZU1zZztcbiAgICAvKipcbiAgICAgKiBQcmVmaXggbWVzc2FnZXMgb3V0cHV0IGZyb20gY2hpbGRfcHJvY2Vzc1xuICAgICAqL1xuICAgIHByZWZpeD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUcnkgY29tbWFuZCBhZ2FpbiBhZnRlciBmYWlsIGFmdGVyIG4gbWlsbGlzZWNvbmRzXG4gICAgICovXG4gICAgdHJ5QWdhaW5XaGVuRmFpbEFmdGVyPzogbnVtYmVyO1xuICAgIGFza1RvVHJ5QWdhaW5PbkVycm9yPzogYm9vbGVhbjtcbiAgICBleGl0T25FcnJvckNhbGxiYWNrPzogKGNvZGU6IG51bWJlcikgPT4gdm9pZDtcbiAgICAvKipcbiAgICAgKiBVc2UgYmlnIGJ1ZmZlciBmb3IgYmlnIHdlYnBhY2sgbG9nc1xuICAgICAqIChpdCBtYXkgc2xvdyBkb3duIHNtYWxsZXIgcHJvY2Vzc2VzIGV4ZWN1dGlvbilcbiAgICAgKi9cbiAgICBiaWdnZXJCdWZmZXI/OiBib29sZWFuO1xuICAgIGhpZGVPdXRwdXQ/OiB7XG4gICAgICBzdGRvdXQ/OiBib29sZWFuO1xuICAgICAgc3RkZXJyPzogYm9vbGVhbjtcbiAgICB9O1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBUT0RPIElNUExFTUVOVFxuICAgKiBzdGFydCBhc3luYyBub2RlIHByb2Nlc3NcbiAgICovXG4gIGV4cG9ydCBjb25zdCBzdGFydEFzeW5jID0gYXN5bmMgKFxuICAgIGNvbW1hbmQ6IHN0cmluZyxcbiAgICBjd2Q6IHN0cmluZyxcblxuICAgIG9wdGlvbnM/OiBPbWl0PENvcmVNb2RlbHMuRXhlY3V0ZU9wdGlvbnMsICd0cnlBZ2FpbldoZW5GYWlsQWZ0ZXInPixcbiAgKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAvKipcbiAgICogVGhpcyBsZXQgeW91IHN0YXJ0IGNoaWxkIHByb2Nlc3MgYW5kIHJlc29sdmUgcHJvbWlzZSB3aGVuIHNvbWVcbiAgICogY29uZGl0aW9uIGlzIG1ldC4gSXQgaXMgdXNlZnVsIGZvciBleGFtcGxlIHdoZW4geW91IHdhbnQgdG8gc3RhcnRcbiAgICogcHJvY2VzcyBhbmQgd2FpdCB1bnRpbCBzb21lIG91dHB1dCBpcyBpbiBzdGRvdXQgb3Igc3RkZXJyLlxuICAgKi9cbiAgZXhwb3J0IGNvbnN0IHN0YXJ0QXN5bmNDaGlsZFByb2Nlc3NDb21tYW5kVW50aWwgPSBhc3luYyAoXG4gICAgY29tbWFuZDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIC8qKlxuICAgICAgICogdGVscyB3aGVuIHRvIHJlc29sdmUgcHJvbWlzZVxuICAgICAgICovXG4gICAgICB1bnRpbE9wdGlvbnM6IFJlc29sdmVQcm9taXNlTXNnO1xuICAgICAgZGlzcGxheU91dHB1dEluUGFyZW50UHJvY2Vzcz86IGJvb2xlYW47XG4gICAgICByZXNvbHZlQWZ0ZXJBbnlFeGl0Q29kZT86IGJvb2xlYW47XG4gICAgICBjd2Q/OiBzdHJpbmc7XG4gICAgfSxcbiAgKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuXG5cbiAgZXhwb3J0IGNvbnN0IGdldEdpdEJhc2hQYXRoID0gKCkgPT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuXG5cbiAgLyoqXG4gICAqIFRPRE8gSU1QTEVNRU5UXG4gICAqIHN0YXJ0IGFzeW5jIG5vZGUgcHJvY2Vzc1xuICAgKi9cbiAgZXhwb3J0IGNvbnN0IHN0YXJ0SW5OZXdUZXJtaW5hbFdpbmRvdyA9IChcbiAgICBjb21tYW5kOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFBpY2s8UHJvY2Vzc1N0YXJ0T3B0aW9ucywgJ2N3ZCcgfCAnaGlkZU91dHB1dCc+LFxuICApID0+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuXG5cbiAgZXhwb3J0IGNvbnN0IGdldEJhc2hPclNoZWxsTmFtZSA9ICgpOlxuICAgIHwgJ2Jyb3dzZXInXG4gICAgfCAnY21kJ1xuICAgIHwgJ3Bvd2Vyc2hlbGwnXG4gICAgfCAnZ2l0YmFzaCdcbiAgICB8ICdjeWd3aW4nXG4gICAgfCAndW5rbm93bidcbiAgICB8ICdiYXNoJ1xuICAgIHwgJ3pzaCdcbiAgICB8ICdmaXNoJ1xuICAgIHwgJ3NoJyA9PiB7XG5cbiAgICByZXR1cm4gJ2Jyb3dzZXInO1xuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuXG4gIC8qKlxuICAgKiBHZXQgQ1BVIGFuZCBtZW1vcnkgdXNhZ2UgZm9yIGEgc2luZ2xlIFBJRC5cbiAgICovXG4gIGV4cG9ydCBjb25zdCBnZXRVc2FnZUZvclBpZCA9IGFzeW5jIChcbiAgICBwaWQ6IG51bWJlcixcbiAgKTogUHJvbWlzZTx7IGNwdTogbnVtYmVyOyBtZW1vcnlJbkdCOiBudW1iZXI7IG1lbW9yeUluTUI6IG51bWJlciB9PiA9PiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBsaXN0IG9mIGRpcmVjdCBjaGlsZCBQSURzIGZvciB0aGUgZ2l2ZW4gUElEIG9uIGEgVW5peC1saWtlIHN5c3RlbS5cbiAgICogVXNlcyBgcHMgLW8gcGlkPSAtLXBwaWQgPHBpZD5gIHRvIGZpbmQgY2hpbGQgcHJvY2Vzc2VzLlxuICAgKi9cbiAgYXN5bmMgZnVuY3Rpb24gZ2V0Q2hpbGRQaWRzVW5peChwaWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyW10+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgbGlzdCBvZiBkaXJlY3QgY2hpbGQgUElEcyBmb3IgdGhlIGdpdmVuIFBJRCBvbiBXaW5kb3dzLlxuICAgKiBVc2VzIGB3bWljIHByb2Nlc3Mgd2hlcmUgKFBhcmVudFByb2Nlc3NJZD08cGlkPikgZ2V0IFByb2Nlc3NJZGAgdG8gZmluZCBjaGlsZCBwcm9jZXNzZXMuXG4gICAqL1xuICBhc3luYyBmdW5jdGlvbiBnZXRDaGlsZFBpZHNXaW5kb3dzKHBpZDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuICAvKipcbiAgICogQ3Jvc3MtcGxhdGZvcm0gZnVuY3Rpb24gdG8gbGlzdCAqZGlyZWN0KiBjaGlsZCBQSURzIG9mIGEgZ2l2ZW4gUElELlxuICAgKiBVc2VzIHRoZSBhcHByb3ByaWF0ZSBjb21tYW5kIGRlcGVuZGluZyBvbiBgcHJvY2Vzcy5wbGF0Zm9ybWAuXG4gICAqL1xuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q2hpbGRQaWRzT25jZShwaWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyW10+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IENQVSBhbmQgbWVtb3J5IHVzYWdlIGZvciB0aGUgY3VycmVudCBwcm9jZXNzICh0aGUgTm9kZS5qcyBwcm9jZXNzIGl0c2VsZiksXG4gICAqIHBsdXMgYW55IGNoaWxkIHByb2Nlc3NlcyBzcGF3bmVkIGJ5IGl0LlxuICAgKi9cbiAgZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRQcm9jZXNzQW5kQ2hpbGRVc2FnZSA9IGFzeW5jICgpOiBQcm9taXNlPHtcbiAgICBjdXJyZW50OiB7IGNwdTogbnVtYmVyOyBtZW1vcnlJbk1COiBudW1iZXIgfTtcbiAgICBjaGlsZHJlbjogQXJyYXk8eyBwaWQ6IG51bWJlcjsgY3B1OiBudW1iZXI7IG1lbW9yeUluTUI6IG51bWJlciB9PjtcbiAgfT4gPT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG59XG5cblxuXG5cbmV4cG9ydCBuYW1lc3BhY2UgVXRpbHNPcyB7XG5cbiAgLyoqXG4gICAqIGNoZWNrIGlmIHNjcmlwdCBpcyBydW5uaW5nIGluIGNsaWVudCBicm93c2VyXG4gICAqICh3ZWJzcWwgbW9kZWwgLT4gaXMgYWxzbyBjb25zaWRlcmVkIGFzIGJyb3dzZXJcbiAgICogYmVjYXVzZSBpdCBpcyBydW5uaW5nIGluIGJyb3dzZXIpXG4gICAqL1xuICBleHBvcnQgY29uc3QgaXNSdW5uaW5nSW5Ccm93c2VyID0gKCk6IGJvb2xlYW4gPT4ge1xuLyogKi9cbi8qICovXG4gIFxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG5cblxuICAvKipcbiAgICogY2hlY2sgaWYgc2NyaXB0IGlzIHJ1bm5pbmcgaW4gbm9kZWpzXG4gICAqIChiYWNrZW5kIHNjcmlwdCBvciBlbGVjdHJvbiBzY3JpcHQpXG4gICAqL1xuICBleHBvcnQgY29uc3QgaXNSdW5uaW5nSW5Ob2RlID0gKCk6IGJvb2xlYW4gPT4ge1xuLyogKi9cbi8qICovXG4gIFxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuXG5cbiAgLyoqXG4gICAqIGNoZWNrIGlmIHNjcmlwdCBpcyBydW5uaW5nIHNwZWNpYWxcbiAgICogYnJvd3NlciBtb2RlIHRoYXQgaGFzIHNxbC5qcyBiYWNrZW5kXG4gICAqIGFuZCBleGVjdXRlcyBzcWwgcXVlcmllcyBpbiBicm93c2VyXG4gICAqL1xuICBleHBvcnQgY29uc3QgaXNSdW5uaW5nSW5XZWJTUUwgPSAoKTogYm9vbGVhbiA9PiB7XG4vKiAqL1xuLyogKi9cbiAgXG5cblxuICAgIHJldHVybiB0cnVlO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG5cblxuICAvKipcbiAgICogY2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBwcm9jZXNzIGlzIHJ1bm5pbmcgaW5zaWRlXG4gICAqIEVsZWN0cm9uIGJhY2tlbmQgb3IgYnJvd3Nlci5cbiAgICovXG4gIGV4cG9ydCBjb25zdCBpc1J1bm5pbmdJbkVsZWN0cm9uID0gKCk6IGJvb2xlYW4gPT4ge1xuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmIChcbiAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICB0eXBlb2Ygd2luZG93LnByb2Nlc3MgPT09ICdvYmplY3QnICYmXG4gICAgICB3aW5kb3cucHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zID09PSAnb2JqZWN0JyAmJlxuICAgICAgISFwcm9jZXNzLnZlcnNpb25zLmVsZWN0cm9uXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBuYXZpZ2F0b3IgPT09ICdvYmplY3QnICYmXG4gICAgICB0eXBlb2YgbmF2aWdhdG9yLnVzZXJBZ2VudCA9PT0gJ3N0cmluZycgJiZcbiAgICAgIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignRWxlY3Ryb24nKSA+PSAwXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cblxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IHByb2Nlc3MgaXMgcnVubmluZyBpbnNpZGVcbiAgICogYSBWaXN1YWwgU3R1ZGlvIENvZGUgZXh0ZW5zaW9uLlxuICAgKi9cbiAgZXhwb3J0IGNvbnN0IGlzUnVubmluZ0luVnNjb2RlRXh0ZW5zaW9uID0gKCk6IGJvb2xlYW4gPT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG5cblxuICAvKipcbiAgICogQ2hlY2sgd2V0aGVyIHRoZSBjdXJyZW50IHByb2Nlc3MgaXMgcnVubmluZyBpbnNpZGVcbiAgICogd2luZG93cyBzdWJzeXN0ZW0gZm9yIGxpbnV4IChXU0wpLlxuICAgKi9cbiAgZXhwb3J0IGNvbnN0IGlzUnVubmluZ0luV3NsID0gKCk6IGJvb2xlYW4gPT4ge1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuXG5cbiAgZXhwb3J0IGNvbnN0IGlzUnVubmluZ0luV2luZG93c0NtZDogKCkgPT4gYm9vbGVhbiA9ICgpID0+IHtcblxuICAgIHJldHVybiBmYWxzZTtcblxuLyogKi9cbi8qICovXG4vKiAqL1xuICAgICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG5cblxuICBleHBvcnQgY29uc3QgaXNSdW5uaW5nSW5Eb2NrZXIgPSAoKTogYm9vbGVhbiA9PiB7XG5cbiAgICByZXR1cm4gZmFsc2U7XG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cblxuXG4gIGV4cG9ydCBjb25zdCBpc1J1bm5pbmdJbkxpbnV4R3JhcGhpY3NDYXBhYmxlRW52aXJvbm1lbnQgPSAoKTogYm9vbGVhbiA9PiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuXG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgcHJvY2VzcyBpcyBydW5uaW5nIGluIENMSSBtb2RlLlxuICAgKi9cbiAgZXhwb3J0IGNvbnN0IGlzUnVubmluZ0luQ2xpTW9kZSA9ICgpOiBib29sZWFuID0+IHtcblxuICAgIHJldHVybiBmYWxzZTtcblxuLyogKi9cbi8qICovXG4gICAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cblxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IHByb2Nlc3MgaXMgcnVubmluZyBpbiBtb2NoYSB0ZXN0LlxuICAgKi9cbiAgZXhwb3J0IGNvbnN0IGlzUnVubmluZ0luTW9jaGFUZXN0ID0gKCk6IGJvb2xlYW4gPT4ge1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4vKiAqL1xuLyogKi9cbiAgICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuXG5cbiAgY29uc3QgaXNQb3J0SW5Vc2VPbkhvc3QgPSAocG9ydDogbnVtYmVyLCBob3N0OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIGdpdmVuIHBvcnQgaXMgYWxyZWFkeSBpbiB1c2UgKGJvdW5kIGJ5IGFub3RoZXIgcHJvY2VzcykuXG4gICAqXG4gICAqIEBwYXJhbSBwb3J0IC0gVGhlIHBvcnQgbnVtYmVyIHRvIGNoZWNrLlxuICAgKiBAcGFyYW0gaG9zdCAtIFRoZSBob3N0bmFtZSBvciBJUCBhZGRyZXNzIHRvIGJpbmQgdG8gKGRlZmF1bHQ6ICcxMjcuMC4wLjEnKS5cbiAgICogQHJldHVybnMgUHJvbWlzZTxib29sZWFuPiAtIFJlc29sdmVzIHRvIGB0cnVlYCBpZiB0aGUgcG9ydCBpcyBpbiB1c2UsIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgKi9cbiAgZXhwb3J0IGNvbnN0IGlzUG9ydEluVXNlID0gYXN5bmMgKFxuICAgIHBvcnQ6IG51bWJlcixcbiAgICBvcHRpb25zPzoge1xuICAgICAgLyoqXG4gICAgICAgKiAnMTI3LjAuMC4xJyBldGMuLlxuICAgICAgICovXG4gICAgICBjaGVja0ZvclNwZWNpZmljT25seUhvc3Q/OiBzdHJpbmc7XG4gICAgfSxcbiAgKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxufVxuXG5cblxuZXhwb3J0IG5hbWVzcGFjZSBVdGlsc1N0cmluZyB7XG5cbiAgZXhwb3J0IGNvbnN0IGtlYmFiQ2FzZU5vU3BsaXROdW1iZXJzID0gKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICBpbnB1dFxuXG4gICAgICAgIC5yZXBsYWNlKC9cXHMrL2csICctJylcblxuICAgICAgICAucmVwbGFjZSgvKFthLXowLTldKShbQS1aXSkvZywgJyQxLSQyJylcblxuICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICk7XG4gIH07XG5cbn1cblxuXG5cbi8qKlxuICogVGFvbiBtaWdyYXRpb24gdXRpbGl0aWVzXG4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgVXRpbHNNaWdyYXRpb25zIHtcbiAgZXhwb3J0IGNvbnN0IGdldFRpbWVzdGFtcEZyb21DbGFzc05hbWUgPSAoXG4gICAgY2xhc3NOYW1lOiBzdHJpbmcsXG4gICk6IG51bWJlciB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3QgW21heWJlVGltZXN0YW1wMSwgbWF5YmVUaW1lc3RhbXAyXSA9IGNsYXNzTmFtZS5zcGxpdCgnXycpIHx8IFtdO1xuXG4gICAgY29uc3QgdGltZXN0YW1wMSA9IHBhcnNlSW50KG1heWJlVGltZXN0YW1wMSk7XG4gICAgY29uc3QgdGltZXN0YW1wMiA9IHBhcnNlSW50KG1heWJlVGltZXN0YW1wMik7XG4gICAgY29uc3QgdGltZXN0YW1wID0gIV8uaXNOYU4odGltZXN0YW1wMSkgPyB0aW1lc3RhbXAxIDogdGltZXN0YW1wMjtcbiAgICByZXR1cm4gaXNWYWxpZFRpbWVzdGFtcCh0aW1lc3RhbXApID8gdGltZXN0YW1wIDogdm9pZCAwO1xuICB9O1xuXG4gIGV4cG9ydCBjb25zdCBnZXRGb3JtYXR0ZWRUaW1lc3RhbXBGcm9tQ2xhc3NOYW1lID0gKFxuICAgIGNsYXNzTmFtZTogc3RyaW5nLFxuICApOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IGdldFRpbWVzdGFtcEZyb21DbGFzc05hbWUoY2xhc3NOYW1lKTtcbiAgICBpZiAoIXRpbWVzdGFtcCkge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1hdFRpbWVzdGFtcCh0aW1lc3RhbXApO1xuICB9O1xuXG4gIGV4cG9ydCBjb25zdCBmb3JtYXRUaW1lc3RhbXAgPSAodGltZXN0YW1wOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IGRhdGVGcm9tVGltZXN0YW1wOiBEYXRlID0gbmV3IERhdGUodGltZXN0YW1wKTtcbiAgICByZXR1cm4gYCR7ZGF0ZWZvcm1hdChkYXRlRnJvbVRpbWVzdGFtcCwgJ2RkLW1tLXl5eXkgSEg6TU06c3MnKX1gO1xuICB9O1xuXG4gIGV4cG9ydCBjb25zdCBpc1ZhbGlkVGltZXN0YW1wID0gKHZhbHVlOiBhbnkpOiBib29sZWFuID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGZhbHNlOyAvLyBNdXN0IGJlIGEgbnVtYmVyXG4gICAgfVxuXG4gICAgY29uc3QgbWluVGltZXN0YW1wID0gMDsgLy8gTWluaW11bSBwb3NzaWJsZSB0aW1lc3RhbXAgKFVuaXggZXBvY2gpXG4gICAgY29uc3QgbWF4VGltZXN0YW1wID0gODY0MDAwMDAwMDAwMDAwMDsgLy8gTWF4IHNhZmUgdGltZXN0YW1wIGluIEpTIChyZXByZXNlbnRzIHllYXIgfjI3NTc2MClcblxuICAgIHJldHVybiB2YWx1ZSA+PSBtaW5UaW1lc3RhbXAgJiYgdmFsdWUgPD0gbWF4VGltZXN0YW1wO1xuICB9O1xufVxuXG5cblxuZXhwb3J0IG5hbWVzcGFjZSBVdGlsc1Rlcm1pbmFsIHtcblxuICB0eXBlIFNlbGVjdEFjdGlvbkNob2ljZSA9IHtcbiAgICBbY2hvaWNlOiBzdHJpbmddOiB7XG4gICAgICAvKipcbiAgICAgICAqIFRpdGxlIG9mIHRoZSBjaG9pY2VcbiAgICAgICAqL1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgLyoqXG4gICAgICAgKiBBY3Rpb24gdG8gZXhlY3V0ZVxuICAgICAgICovXG4gICAgICBhY3Rpb24/OiAoKSA9PiBhbnk7XG4gICAgICAvKipcbiAgICAgICAqIElmIGNob2ljZSBpcyB2aXNpYmxlXG4gICAgICAgKiAgZGVmYXVsdDogdHJ1ZVxuICAgICAgICovXG4gICAgICB2aXNpYmxlPzogYm9vbGVhbjtcbiAgICB9O1xuICB9O1xuXG5cblxuICBleHBvcnQgY29uc3Qgd2FpdCA9IChzZWNvbmQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgcmVzb2x2ZSh2b2lkIDApO1xuICAgICAgfSwgc2Vjb25kICogMTAwMCk7XG4gICAgfSk7XG4gIH07XG5cblxuXG4gIGV4cG9ydCBjb25zdCBjbGVhckNvbnNvbGUgPSAoKTogdm9pZCA9PiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG5cblxuICBjb25zdCB0cmFuc2Zvcm1DaG9pY2VzID0gKFxuICAgIGNob2ljZXM6IGFueSxcbiAgKTogeyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cblxuXG4gIGV4cG9ydCBjb25zdCBtdWx0aXNlbGVjdCA9IGFzeW5jIDxUID0gc3RyaW5nPihvcHRpb25zOiB7XG4gICAgcXVlc3Rpb246IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBJZiB0cnVlLCB0aGVuIG9ubHkgb25lIGNob2ljZSBjYW4gYmUgc2VsZWN0ZWRcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2Ugc2VsZWN0IGluc3RlYWRcbiAgICAgKi9cbiAgICBvbmx5T25lQ2hvaWNlPzogYm9vbGVhbjtcbiAgICBjaG9pY2VzOlxuICAgICAgfCB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IFQgfVtdXG4gICAgICB8IHsgW2Nob2ljZTogc3RyaW5nXTogeyBuYW1lOiBzdHJpbmcgfSB9O1xuICAgIGF1dG9jb21wbGV0ZT86IGJvb2xlYW47XG4gICAgZGVmYXVsdFNlbGVjdGVkPzogc3RyaW5nW107XG4gIH0pOiBQcm9taXNlPFRbXT4gPT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cblxuXG4gIC8qKlxuICAgKiBTaW1pbGFyIHRvIHNlbGVjdCBidXQgZXhlY3V0ZXMgYWN0aW9uIGlmIHByb3ZpZGVkXG4gICAqIEByZXR1cm5zIHNlbGVjdGVkIGFuZCBleGVjdXRlZCB2YWx1ZVxuICAgKi9cbiAgZXhwb3J0IGNvbnN0IG11bHRpc2VsZWN0QWN0aW9uQW5kRXhlY3V0ZSA9IGFzeW5jIDxcbiAgICBDSE9JQ0UgZXh0ZW5kcyBTZWxlY3RBY3Rpb25DaG9pY2UgPSBTZWxlY3RBY3Rpb25DaG9pY2UsXG4gID4oXG4gICAgY2hvaWNlczogQ0hPSUNFLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBxdWVzdGlvbj86IHN0cmluZztcbiAgICAgIGF1dG9jb21wbGV0ZT86IGJvb2xlYW47XG4gICAgICBkZWZhdWx0U2VsZWN0ZWQ/OiBzdHJpbmc7XG4gICAgICBoaW50Pzogc3RyaW5nO1xuICAgICAgZXhlY3V0ZUFjdGlvbnNPbkRlZmF1bHQ/OiBib29sZWFuO1xuICAgIH0sXG4gICkgPT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cblxuXG4gIC8qKlxuICAgKiBTaW1pbGFyIHRvIHNlbGVjdCBidXQgZXhlY3V0ZXMgYWN0aW9uIGlmIHByb3ZpZGVkXG4gICAqIEByZXR1cm5zIHNlbGVjdGVkIGFuZCBleGVjdXRlZCB2YWx1ZVxuICAgKi9cbiAgZXhwb3J0IGNvbnN0IHNlbGVjdEFjdGlvbkFuZEV4ZWN1dGUgPSBhc3luYyA8XG4gICAgQ0hPSUNFIGV4dGVuZHMgU2VsZWN0QWN0aW9uQ2hvaWNlID0gU2VsZWN0QWN0aW9uQ2hvaWNlLFxuICA+KFxuICAgIGNob2ljZXM6IENIT0lDRSxcbiAgICBvcHRpb25zPzoge1xuICAgICAgcXVlc3Rpb24/OiBzdHJpbmc7XG4gICAgICBhdXRvY29tcGxldGU/OiBib29sZWFuO1xuICAgICAgZGVmYXVsdFNlbGVjdGVkPzogc3RyaW5nO1xuICAgICAgaGludD86IHN0cmluZztcbiAgICAgIGV4ZWN1dGVBY3Rpb25PbkRlZmF1bHQ/OiBib29sZWFuO1xuICAgIH0sXG4gICkgPT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG5cblxuICBleHBvcnQgY29uc3Qgc2VsZWN0ID0gYXN5bmMgPFQgPSBzdHJpbmc+KG9wdGlvbnM6IHtcbiAgICBxdWVzdGlvbjogc3RyaW5nO1xuICAgIGNob2ljZXM6XG4gICAgICB8IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogVCB9W11cbiAgICAgIHwgeyBbY2hvaWNlOiBzdHJpbmddOiB7IG5hbWU6IHN0cmluZyB9IH07XG4gICAgYXV0b2NvbXBsZXRlPzogYm9vbGVhbjtcbiAgICBkZWZhdWx0U2VsZWN0ZWQ/OiBzdHJpbmc7XG4gICAgaGludD86IHN0cmluZztcbiAgfSk6IFByb21pc2U8VD4gPT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuXG5cblxuICBleHBvcnQgY29uc3QgcGlwZUVudGVyVG9TdGRpbiA9ICgpOiB2b2lkID0+IHtcbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuXG5cbiAgZXhwb3J0IGNvbnN0IGlucHV0ID0gYXN5bmMgKHtcbiAgICBkZWZhdWx0VmFsdWUsXG4gICAgcXVlc3Rpb24sXG4gICAgcmVxdWlyZWQsIC8vIFRPRE8gc29tZXRoaW5nIGlzIHdlcmlkIHdpdGggcmVxdWlyZWRcbiAgfToge1xuICAgIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcbiAgICBxdWVzdGlvbjogc3RyaW5nO1xuICAgIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgICB2YWxpZGF0ZT86ICh2YWx1ZTogc3RyaW5nKSA9PiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cblxuXG4gIGV4cG9ydCBjb25zdCBjb25maXJtID0gYXN5bmMgKG9wdGlvbnM/OiB7XG4gICAgLyoqXG4gICAgICogZGVmYXVsdDogQXJlIHlvdSBzdXJlP1xuICAgICAqL1xuICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgY2FsbGJhY2tUcnVlPzogKCkgPT4gYW55O1xuICAgIGNhbGxiYWNrRmFsc2U/OiAoKSA9PiBhbnk7XG4gICAgLyoqXG4gICAgICogZGVmYXVsdDogdHJ1ZVxuICAgICAqL1xuICAgIGRlZmF1bHRWYWx1ZT86IGJvb2xlYW47XG4gICAgZW5naW5lPzogJ2lucXVpcmVyLXRvZ2dsZScgfCAncHJvbXB0cycgfCAnZW5xdWlyZXInIHwgJ0BpbnF1aXJlci9wcm9tcHRzJztcbiAgfSkgPT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cblxuXG4gIGV4cG9ydCBjb25zdCBwcmVzc0FueUtleVRvQ29udGludWVBc3luYyA9IChvcHRpb25zPzoge1xuICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cblxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgVXRpbHNUZXJtaW5hbC5wcmVzc0FueUtleVRvQ29udGludWVBc3luYygpXG4gICAqL1xuICBleHBvcnQgY29uc3QgcHJlc3NBbnlLZXkgPSAob3B0aW9ucz86IHsgbWVzc2FnZT86IHN0cmluZyB9KSA9PiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG5cblxuICBleHBvcnQgY29uc3QgcHJldmlld0xvbmdMaXN0ID0gYXN5bmMgKFxuICAgIGxpc3Q6IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgIGxpc3ROYW1lID0gJ0xpc3QnLFxuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuXG5cbiAgLyoqXG4gICAqIERpc3BsYXlzIGEgbG9uZyBsaXN0IGluIHRoZSBjb25zb2xlIHVzaW5nIGEgcGFnZXIgbGlrZSBgbGVzc2AuXG4gICAqIFJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgdXNlciBleGl0cyB0aGUgcGFnZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsaXN0IC0gVGhlIGxvbmcgc3RyaW5nIGNvbnRlbnQgdG8gZGlzcGxheS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHBhZ2VyIGV4aXRzLlxuICAgKi9cbiAgZXhwb3J0IGNvbnN0IHByZXZpZXdMb25nTGlzdEdpdExvZ0xpa2UgPSAoXG4gICAgbGlzdDogc3RyaW5nIHwgc3RyaW5nW10sXG4gICk6IFByb21pc2U8dm9pZD4gPT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxufVxuXG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT10bnAtY29yZSBsaWIvdXRpbHMudHMiXX0=