socket-function 1.1.49 → 1.2.1

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 (53) hide show
  1. package/SocketFunction.d.ts +1 -1
  2. package/SocketFunctionTypes.d.ts +1 -1
  3. package/dist/SetProcessVariables.ts.cache +9 -0
  4. package/dist/SocketFunction.ts.cache +467 -0
  5. package/hot/HotReloadController.d.ts +3 -3
  6. package/hot/dist/HotReloadController.ts.cache +252 -0
  7. package/index.d.ts +10 -25
  8. package/package.json +1 -1
  9. package/require/CSSShim.d.ts +1 -1
  10. package/require/RequireController.d.ts +2 -2
  11. package/require/compileFlags.d.ts +1 -1
  12. package/require/dist/RequireController.ts.cache +386 -0
  13. package/require/dist/compileFlags.ts.cache +41 -0
  14. package/require/dist/extMapper.ts.cache +368 -0
  15. package/require/dist/require.ts.cache +676 -0
  16. package/require/require.d.ts +1 -1
  17. package/src/JSONLACKS/dist/JSONLACKS.ts.cache +469 -0
  18. package/src/callManager.d.ts +1 -1
  19. package/src/dist/CallFactory.ts.cache +930 -0
  20. package/src/dist/Zip.ts.cache +156 -0
  21. package/src/dist/batching.ts.cache +377 -0
  22. package/src/dist/bits.ts.cache +121 -0
  23. package/src/dist/buffers.ts.cache +76 -0
  24. package/src/dist/caching.ts.cache +302 -0
  25. package/src/dist/callHTTPHandler.ts.cache +264 -0
  26. package/src/dist/callManager.ts.cache +159 -0
  27. package/src/dist/certStore.ts.cache +59 -0
  28. package/src/dist/createSingleton.ts.cache +62 -0
  29. package/src/dist/fixLargeNetworkCalls.ts.cache +17 -0
  30. package/src/dist/forwardPort.ts.cache +222 -0
  31. package/src/dist/https.ts.cache +141 -0
  32. package/src/dist/misc.ts.cache +499 -0
  33. package/src/dist/nodeCache.ts.cache +136 -0
  34. package/src/dist/nodeProxy.ts.cache +57 -0
  35. package/src/dist/protocolNegotiation.ts.cache +101 -0
  36. package/src/dist/tlsParsing.ts.cache +85 -0
  37. package/src/dist/types.ts.cache +9 -0
  38. package/src/dist/webSocketServer.ts.cache +365 -0
  39. package/src/dist/websocketFactory.ts.cache +53 -0
  40. package/src/formatting/dist/colors.ts.cache +98 -0
  41. package/src/formatting/dist/format.ts.cache +396 -0
  42. package/src/formatting/dist/logColors.ts.cache +28 -0
  43. package/src/lz4/dist/LZ4.ts.cache +53 -0
  44. package/src/profiling/dist/getOwnTime.ts.cache +100 -0
  45. package/src/profiling/dist/measure.ts.cache +338 -0
  46. package/src/profiling/dist/stats.ts.cache +202 -0
  47. package/src/profiling/dist/statsFormat.ts.cache +45 -0
  48. package/src/profiling/getOwnTime.ts +7 -1
  49. package/src/profiling/measure.ts +25 -16
  50. package/test.ts +11 -5
  51. package/time/dist/trueTimeShim.ts.cache +656 -0
  52. package/time/trueTimeShim.d.ts +1 -16
  53. package/time/trueTimeShim.ts +7 -43
@@ -0,0 +1,368 @@
1
+ "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
3
+ //exports.getContentTypeFromBuffer = exports.getExtContentType = void 0;
4
+ function getExtContentType(ext) {
5
+ // Images
6
+ if (ext === ".svg")
7
+ return "image/svg+xml";
8
+ if (ext === ".ico")
9
+ return "image/x-icon";
10
+ if (ext === ".png")
11
+ return "image/png";
12
+ if (ext === ".jpg")
13
+ return "image/jpeg";
14
+ if (ext === ".jpeg")
15
+ return "image/jpeg";
16
+ if (ext === ".gif")
17
+ return "image/gif";
18
+ if (ext === ".webp")
19
+ return "image/webp";
20
+ if (ext === ".avif")
21
+ return "image/avif";
22
+ if (ext === ".heic")
23
+ return "image/heic";
24
+ if (ext === ".heif")
25
+ return "image/heif";
26
+ if (ext === ".bmp")
27
+ return "image/bmp";
28
+ if (ext === ".tiff")
29
+ return "image/tiff";
30
+ if (ext === ".tif")
31
+ return "image/tiff";
32
+ if (ext === ".jxl")
33
+ return "image/jxl";
34
+ // Audio
35
+ if (ext === ".mp3")
36
+ return "audio/mpeg";
37
+ if (ext === ".wav")
38
+ return "audio/wav";
39
+ if (ext === ".ogg")
40
+ return "audio/ogg";
41
+ if (ext === ".m4a")
42
+ return "audio/mp4";
43
+ if (ext === ".aac")
44
+ return "audio/aac";
45
+ if (ext === ".flac")
46
+ return "audio/flac";
47
+ if (ext === ".wma")
48
+ return "audio/x-ms-wma";
49
+ if (ext === ".opus")
50
+ return "audio/opus";
51
+ // Video
52
+ if (ext === ".mp4")
53
+ return "video/mp4";
54
+ if (ext === ".webm")
55
+ return "video/webm";
56
+ if (ext === ".mkv")
57
+ return "video/x-matroska";
58
+ if (ext === ".avi")
59
+ return "video/x-msvideo";
60
+ if (ext === ".mov")
61
+ return "video/quicktime";
62
+ if (ext === ".wmv")
63
+ return "video/x-ms-wmv";
64
+ if (ext === ".flv")
65
+ return "video/x-flv";
66
+ if (ext === ".m4v")
67
+ return "video/x-m4v";
68
+ // Web files
69
+ if (ext === ".html")
70
+ return "text/html";
71
+ if (ext === ".htm")
72
+ return "text/html";
73
+ if (ext === ".css")
74
+ return "text/css";
75
+ if (ext === ".js")
76
+ return "text/javascript";
77
+ if (ext === ".mjs")
78
+ return "text/javascript";
79
+ if (ext === ".json")
80
+ return "application/json";
81
+ if (ext === ".xml")
82
+ return "application/xml";
83
+ if (ext === ".rss")
84
+ return "application/rss+xml";
85
+ if (ext === ".atom")
86
+ return "application/atom+xml";
87
+ // Documents
88
+ if (ext === ".pdf")
89
+ return "application/pdf";
90
+ if (ext === ".doc")
91
+ return "application/msword";
92
+ if (ext === ".docx")
93
+ return "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
94
+ if (ext === ".xls")
95
+ return "application/vnd.ms-excel";
96
+ if (ext === ".xlsx")
97
+ return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
98
+ if (ext === ".ppt")
99
+ return "application/vnd.ms-powerpoint";
100
+ if (ext === ".pptx")
101
+ return "application/vnd.openxmlformats-officedocument.presentationml.presentation";
102
+ if (ext === ".odt")
103
+ return "application/vnd.oasis.opendocument.text";
104
+ if (ext === ".ods")
105
+ return "application/vnd.oasis.opendocument.spreadsheet";
106
+ if (ext === ".odp")
107
+ return "application/vnd.oasis.opendocument.presentation";
108
+ if (ext === ".rtf")
109
+ return "application/rtf";
110
+ // Text files
111
+ if (ext === ".txt")
112
+ return "text/plain";
113
+ if (ext === ".md")
114
+ return "text/markdown";
115
+ if (ext === ".csv")
116
+ return "text/csv";
117
+ if (ext === ".log")
118
+ return "text/plain";
119
+ // Programming files
120
+ if (ext === ".ts")
121
+ return "text/typescript";
122
+ if (ext === ".tsx")
123
+ return "text/typescript";
124
+ if (ext === ".jsx")
125
+ return "text/javascript";
126
+ if (ext === ".py")
127
+ return "text/x-python";
128
+ if (ext === ".java")
129
+ return "text/x-java-source";
130
+ if (ext === ".c")
131
+ return "text/x-c";
132
+ if (ext === ".cpp")
133
+ return "text/x-c++";
134
+ if (ext === ".h")
135
+ return "text/x-c";
136
+ if (ext === ".hpp")
137
+ return "text/x-c++";
138
+ if (ext === ".cs")
139
+ return "text/x-csharp";
140
+ if (ext === ".php")
141
+ return "text/x-php";
142
+ if (ext === ".rb")
143
+ return "text/x-ruby";
144
+ if (ext === ".go")
145
+ return "text/x-go";
146
+ if (ext === ".rs")
147
+ return "text/x-rust";
148
+ if (ext === ".swift")
149
+ return "text/x-swift";
150
+ if (ext === ".kt")
151
+ return "text/x-kotlin";
152
+ if (ext === ".scala")
153
+ return "text/x-scala";
154
+ if (ext === ".sh")
155
+ return "text/x-shellscript";
156
+ if (ext === ".bat")
157
+ return "text/x-msdos-batch";
158
+ if (ext === ".ps1")
159
+ return "text/x-powershell";
160
+ // Archives
161
+ if (ext === ".zip")
162
+ return "application/zip";
163
+ if (ext === ".rar")
164
+ return "application/vnd.rar";
165
+ if (ext === ".tar")
166
+ return "application/x-tar";
167
+ if (ext === ".gz")
168
+ return "application/gzip";
169
+ if (ext === ".bz2")
170
+ return "application/x-bzip2";
171
+ if (ext === ".7z")
172
+ return "application/x-7z-compressed";
173
+ if (ext === ".xz")
174
+ return "application/x-xz";
175
+ // Fonts
176
+ if (ext === ".ttf")
177
+ return "font/ttf";
178
+ if (ext === ".otf")
179
+ return "font/otf";
180
+ if (ext === ".woff")
181
+ return "font/woff";
182
+ if (ext === ".woff2")
183
+ return "font/woff2";
184
+ if (ext === ".eot")
185
+ return "application/vnd.ms-fontobject";
186
+ // Other common formats
187
+ if (ext === ".epub")
188
+ return "application/epub+zip";
189
+ if (ext === ".mobi")
190
+ return "application/x-mobipocket-ebook";
191
+ if (ext === ".apk")
192
+ return "application/vnd.android.package-archive";
193
+ if (ext === ".dmg")
194
+ return "application/x-apple-diskimage";
195
+ if (ext === ".iso")
196
+ return "application/x-iso9660-image";
197
+ if (ext === ".exe")
198
+ return "application/x-msdownload";
199
+ if (ext === ".msi")
200
+ return "application/x-msi";
201
+ if (ext === ".deb")
202
+ return "application/x-debian-package";
203
+ if (ext === ".rpm")
204
+ return "application/x-rpm";
205
+ console.warn(`Unknown extension, ${ext}`);
206
+ return "text/plain";
207
+ }
208
+ exports.getExtContentType = getExtContentType;
209
+ function getContentTypeFromBuffer(buffer) {
210
+ if (buffer.length < 4)
211
+ return undefined;
212
+ // Helper function to check if buffer starts with specific bytes
213
+ const startsWith = (bytes) => {
214
+ if (buffer.length < bytes.length)
215
+ return false;
216
+ for (let i = 0; i < bytes.length; i++) {
217
+ if (buffer[i] !== bytes[i])
218
+ return false;
219
+ }
220
+ return true;
221
+ };
222
+ // Helper function to check bytes at specific offset
223
+ const hasAtOffset = (offset, bytes) => {
224
+ if (buffer.length < offset + bytes.length)
225
+ return false;
226
+ for (let i = 0; i < bytes.length; i++) {
227
+ if (buffer[offset + i] !== bytes[i])
228
+ return false;
229
+ }
230
+ return true;
231
+ };
232
+ // Images
233
+ if (startsWith([0xFF, 0xD8, 0xFF]))
234
+ return "image/jpeg";
235
+ if (startsWith([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A]))
236
+ return "image/png";
237
+ if (startsWith([0x47, 0x49, 0x46, 0x38]))
238
+ return "image/gif";
239
+ if (startsWith([0x42, 0x4D]))
240
+ return "image/bmp";
241
+ if (startsWith([0x49, 0x49, 0x2A, 0x00]) || startsWith([0x4D, 0x4D, 0x00, 0x2A]))
242
+ return "image/tiff";
243
+ if (startsWith([0x00, 0x00, 0x01, 0x00]))
244
+ return "image/x-icon";
245
+ if (buffer.toString("ascii", 0, 4) === "<svg" || buffer.toString("ascii", 0, 5) === "<?xml") {
246
+ if (buffer.toString("utf8").includes("<svg"))
247
+ return "image/svg+xml";
248
+ }
249
+ // WebP and modern image formats
250
+ if (startsWith([0x52, 0x49, 0x46, 0x46]) && hasAtOffset(8, [0x57, 0x45, 0x42, 0x50]))
251
+ return "image/webp";
252
+ if (hasAtOffset(4, [0x66, 0x74, 0x79, 0x70, 0x61, 0x76, 0x69, 0x66]))
253
+ return "image/avif";
254
+ if (hasAtOffset(4, [0x66, 0x74, 0x79, 0x70, 0x68, 0x65, 0x69, 0x63]))
255
+ return "image/heic";
256
+ if (hasAtOffset(4, [0x66, 0x74, 0x79, 0x70, 0x6D, 0x69, 0x66, 0x31]))
257
+ return "image/heif";
258
+ // Audio
259
+ if (startsWith([0xFF, 0xFB]) || startsWith([0xFF, 0xF3]) || startsWith([0xFF, 0xF2]))
260
+ return "audio/mpeg";
261
+ if (startsWith([0x49, 0x44, 0x33]))
262
+ return "audio/mpeg"; // MP3 with ID3
263
+ if (startsWith([0x52, 0x49, 0x46, 0x46]) && hasAtOffset(8, [0x57, 0x41, 0x56, 0x45]))
264
+ return "audio/wav";
265
+ if (startsWith([0x4F, 0x67, 0x67, 0x53]))
266
+ return "audio/ogg";
267
+ if (startsWith([0x66, 0x4C, 0x61, 0x43]))
268
+ return "audio/flac";
269
+ if (hasAtOffset(4, [0x66, 0x74, 0x79, 0x70, 0x4D, 0x34, 0x41]))
270
+ return "audio/mp4";
271
+ // Video
272
+ if (hasAtOffset(4, [0x66, 0x74, 0x79, 0x70])) {
273
+ const ftyp = buffer.toString("ascii", 8, 12);
274
+ if (ftyp.startsWith("mp4") || ftyp.startsWith("isom") || ftyp.startsWith("M4V"))
275
+ return "video/mp4";
276
+ if (ftyp.startsWith("qt"))
277
+ return "video/quicktime";
278
+ }
279
+ if (startsWith([0x1A, 0x45, 0xDF, 0xA3]))
280
+ return "video/webm"; // Also mkv
281
+ if (startsWith([0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11]))
282
+ return "video/x-ms-wmv";
283
+ if (startsWith([0x46, 0x4C, 0x56, 0x01]))
284
+ return "video/x-flv";
285
+ if (startsWith([0x52, 0x49, 0x46, 0x46]) && hasAtOffset(8, [0x41, 0x56, 0x49, 0x20]))
286
+ return "video/x-msvideo";
287
+ // Documents
288
+ if (startsWith([0x25, 0x50, 0x44, 0x46]))
289
+ return "application/pdf";
290
+ if (startsWith([0x50, 0x4B, 0x03, 0x04]) || startsWith([0x50, 0x4B, 0x05, 0x06]) || startsWith([0x50, 0x4B, 0x07, 0x08])) {
291
+ // ZIP-based formats - need to check internal structure
292
+ const content = buffer.toString("ascii", 30, 100);
293
+ if (content.includes("word/"))
294
+ return "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
295
+ if (content.includes("xl/"))
296
+ return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
297
+ if (content.includes("ppt/"))
298
+ return "application/vnd.openxmlformats-officedocument.presentationml.presentation";
299
+ if (content.includes("META-INF/")) {
300
+ if (content.includes("content.xml"))
301
+ return "application/vnd.oasis.opendocument.text";
302
+ }
303
+ return "application/zip";
304
+ }
305
+ if (startsWith([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])) {
306
+ // Microsoft Office legacy formats
307
+ return "application/msword"; // Could also be Excel or PowerPoint
308
+ }
309
+ if (startsWith([0x7B, 0x5C, 0x72, 0x74, 0x66]))
310
+ return "application/rtf";
311
+ // Archives
312
+ if (startsWith([0x52, 0x61, 0x72, 0x21, 0x1A, 0x07]))
313
+ return "application/vnd.rar";
314
+ if (startsWith([0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C]))
315
+ return "application/x-7z-compressed";
316
+ if (startsWith([0x1F, 0x8B]))
317
+ return "application/gzip";
318
+ if (startsWith([0x42, 0x5A, 0x68]))
319
+ return "application/x-bzip2";
320
+ if (startsWith([0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00]))
321
+ return "application/x-xz";
322
+ if (startsWith([0x75, 0x73, 0x74, 0x61, 0x72]))
323
+ return "application/x-tar";
324
+ // Executables
325
+ if (startsWith([0x4D, 0x5A]))
326
+ return "application/x-msdownload"; // Windows PE
327
+ if (startsWith([0x7F, 0x45, 0x4C, 0x46]))
328
+ return "application/x-executable"; // Linux ELF
329
+ if (startsWith([0xCA, 0xFE, 0xBA, 0xBE]) || startsWith([0xFE, 0xED, 0xFA, 0xCE]))
330
+ return "application/x-mach-binary"; // macOS binary
331
+ if (startsWith([0x50, 0x4B, 0x03, 0x04]) && buffer.toString("ascii", 30, 50).includes("AndroidManifest.xml"))
332
+ return "application/vnd.android.package-archive";
333
+ // Fonts
334
+ if (startsWith([0x00, 0x01, 0x00, 0x00]))
335
+ return "font/ttf";
336
+ if (startsWith([0x4F, 0x54, 0x54, 0x4F]))
337
+ return "font/otf";
338
+ if (startsWith([0x77, 0x4F, 0x46, 0x46]))
339
+ return "font/woff";
340
+ if (startsWith([0x77, 0x4F, 0x46, 0x32]))
341
+ return "font/woff2";
342
+ // Web files (text-based, check for common patterns)
343
+ const textStart = buffer.toString("utf8", 0, Math.min(100, buffer.length)).toLowerCase();
344
+ if (textStart.includes("<!doctype html") || textStart.includes("<html"))
345
+ return "text/html";
346
+ if (textStart.includes("<?xml"))
347
+ return "application/xml";
348
+ if (textStart.startsWith("{") || textStart.startsWith("[")) {
349
+ try {
350
+ JSON.parse(buffer.toString("utf8"));
351
+ return "application/json";
352
+ }
353
+ catch (_a) {
354
+ // Not JSON
355
+ }
356
+ }
357
+ // Other formats
358
+ if (startsWith([0x25, 0x21, 0x50, 0x53]))
359
+ return "application/postscript";
360
+ if (startsWith([0x38, 0x42, 0x50, 0x53]))
361
+ return "image/vnd.adobe.photoshop";
362
+ if (startsWith([0x49, 0x49, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x43, 0x52]))
363
+ return "image/x-canon-cr2";
364
+ return undefined;
365
+ }
366
+ exports.getContentTypeFromBuffer = getContentTypeFromBuffer;
367
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0TWFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXh0TWFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLFNBQWdCLGlCQUFpQixDQUFDLEdBQVc7SUFDekMsU0FBUztJQUNULElBQUksR0FBRyxLQUFLLE1BQU07UUFBRSxPQUFPLGVBQWUsQ0FBQztJQUMzQyxJQUFJLEdBQUcsS0FBSyxNQUFNO1FBQUUsT0FBTyxjQUFjLENBQUM7SUFDMUMsSUFBSSxHQUFHLEtBQUssTUFBTTtRQUFFLE9BQU8sV0FBVyxDQUFDO0lBQ3ZDLElBQUksR0FBRyxLQUFLLE1BQU07UUFBRSxPQUFPLFlBQVksQ0FBQztJQUN4QyxJQUFJLEdBQUcsS0FBSyxPQUFPO1FBQUUsT0FBTyxZQUFZLENBQUM7SUFDekMsSUFBSSxHQUFHLEtBQUssTUFBTTtRQUFFLE9BQU8sV0FBVyxDQUFDO0lBQ3ZDLElBQUksR0FBRyxLQUFLLE9BQU87UUFBRSxPQUFPLFlBQVksQ0FBQztJQUN6QyxJQUFJLEdBQUcsS0FBSyxPQUFPO1FBQUUsT0FBTyxZQUFZLENBQUM7SUFDekMsSUFBSSxHQUFHLEtBQUssT0FBTztRQUFFLE9BQU8sWUFBWSxDQUFDO0lBQ3pDLElBQUksR0FBRyxLQUFLLE9BQU87UUFBRSxPQUFPLFlBQVksQ0FBQztJQUN6QyxJQUFJLEdBQUcsS0FBSyxNQUFNO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDdkMsSUFBSSxHQUFHLEtBQUssT0FBTztRQUFFLE9BQU8sWUFBWSxDQUFDO0lBQ3pDLElBQUksR0FBRyxLQUFLLE1BQU07UUFBRSxPQUFPLFlBQVksQ0FBQztJQUN4QyxJQUFJLEdBQUcsS0FBSyxNQUFNO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFFdkMsUUFBUTtJQUNSLElBQUksR0FBRyxLQUFLLE1BQU07UUFBRSxPQUFPLFlBQVksQ0FBQztJQUN4QyxJQUFJLEdBQUcsS0FBSyxNQUFNO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDdkMsSUFBSSxH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LGtCQUFrQixDQUFDO1FBQzlCLENBQUM7UUFBQyxXQUFNLENBQUM7WUFDTCxXQUFXO1FBQ2YsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0I7SUFDaEIsSUFBSSxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUFFLE9BQU8sd0JBQXdCLENBQUM7SUFDMUUsSUFBSSxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUFFLE9BQU8sMkJBQTJCLENBQUM7SUFDN0UsSUFBSSxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUFFLE9BQU8sbUJBQW1CLENBQUM7SUFFekcsT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQztBQW5IRCw0REFtSEMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZ2V0RXh0Q29udGVudFR5cGUoZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIEltYWdlc1xuICAgIGlmIChleHQgPT09IFwiLnN2Z1wiKSByZXR1cm4gXCJpbWFnZS9zdmcreG1sXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuaWNvXCIpIHJldHVybiBcImltYWdlL3gtaWNvblwiO1xuICAgIGlmIChleHQgPT09IFwiLnBuZ1wiKSByZXR1cm4gXCJpbWFnZS9wbmdcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5qcGdcIikgcmV0dXJuIFwiaW1hZ2UvanBlZ1wiO1xuICAgIGlmIChleHQgPT09IFwiLmpwZWdcIikgcmV0dXJuIFwiaW1hZ2UvanBlZ1wiO1xuICAgIGlmIChleHQgPT09IFwiLmdpZlwiKSByZXR1cm4gXCJpbWFnZS9naWZcIjtcbiAgICBpZiAoZXh0ID09PSBcIi53ZWJwXCIpIHJldHVybiBcImltYWdlL3dlYnBcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5hdmlmXCIpIHJldHVybiBcImltYWdlL2F2aWZcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5oZWljXCIpIHJldHVybiBcImltYWdlL2hlaWNcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5oZWlmXCIpIHJldHVybiBcImltYWdlL2hlaWZcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5ibXBcIikgcmV0dXJuIFwiaW1hZ2UvYm1wXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIudGlmZlwiKSByZXR1cm4gXCJpbWFnZS90aWZmXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIudGlmXCIpIHJldHVybiBcImltYWdlL3RpZmZcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5qeGxcIikgcmV0dXJuIFwiaW1hZ2UvanhsXCI7XG5cbiAgICAvLyBBdWRpb1xuICAgIGlmIChleHQgPT09IFwiLm1wM1wiKSByZXR1cm4gXCJhdWRpby9tcGVnXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIud2F2XCIpIHJldHVybiBcImF1ZGlvL3dhdlwiO1xuICAgIGlmIChleHQgPT09IFwiLm9nZ1wiKSByZXR1cm4gXCJhdWRpby9vZ2dcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5tNGFcIikgcmV0dXJuIFwiYXVkaW8vbXA0XCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuYWFjXCIpIHJldHVybiBcImF1ZGlvL2FhY1wiO1xuICAgIGlmIChleHQgPT09IFwiLmZsYWNcIikgcmV0dXJuIFwiYXVkaW8vZmxhY1wiO1xuICAgIGlmIChleHQgPT09IFwiLndtYVwiKSByZXR1cm4gXCJhdWRpby94LW1zLXdtYVwiO1xuICAgIGlmIChleHQgPT09IFwiLm9wdXNcIikgcmV0dXJuIFwiYXVkaW8vb3B1c1wiO1xuXG4gICAgLy8gVmlkZW9cbiAgICBpZiAoZXh0ID09PSBcIi5tcDRcIikgcmV0dXJuIFwidmlkZW8vbXA0XCI7XG4gICAgaWYgKGV4dCA9PT0gXCIud2VibVwiKSByZXR1cm4gXCJ2aWRlby93ZWJtXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIubWt2XCIpIHJldHVybiBcInZpZGVvL3gtbWF0cm9za2FcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5hdmlcIikgcmV0dXJuIFwidmlkZW8veC1tc3ZpZGVvXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIubW92XCIpIHJldHVybiBcInZpZGVvL3F1aWNrdGltZVwiO1xuICAgIGlmIChleHQgPT09IFwiLndtdlwiKSByZXR1cm4gXCJ2aWRlby94LW1zLXdtdlwiO1xuICAgIGlmIChleHQgPT09IFwiLmZsdlwiKSByZXR1cm4gXCJ2aWRlby94LWZsdlwiO1xuICAgIGlmIChleHQgPT09IFwiLm00dlwiKSByZXR1cm4gXCJ2aWRlby94LW00dlwiO1xuXG4gICAgLy8gV2ViIGZpbGVzXG4gICAgaWYgKGV4dCA9PT0gXCIuaHRtbFwiKSByZXR1cm4gXCJ0ZXh0L2h0bWxcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5odG1cIikgcmV0dXJuIFwidGV4dC9odG1sXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuY3NzXCIpIHJldHVybiBcInRleHQvY3NzXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuanNcIikgcmV0dXJuIFwidGV4dC9qYXZhc2NyaXB0XCI7XG4gICAgaWYgKGV4dCA9PT0gXCIubWpzXCIpIHJldHVybiBcInRleHQvamF2YXNjcmlwdFwiO1xuICAgIGlmIChleHQgPT09IFwiLmpzb25cIikgcmV0dXJuIFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgIGlmIChleHQgPT09IFwiLnhtbFwiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi94bWxcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5yc3NcIikgcmV0dXJuIFwiYXBwbGljYXRpb24vcnNzK3htbFwiO1xuICAgIGlmIChleHQgPT09IFwiLmF0b21cIikgcmV0dXJuIFwiYXBwbGljYXRpb24vYXRvbSt4bWxcIjtcblxuICAgIC8vIERvY3VtZW50c1xuICAgIGlmIChleHQgPT09IFwiLnBkZlwiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi9wZGZcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5kb2NcIikgcmV0dXJuIFwiYXBwbGljYXRpb24vbXN3b3JkXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuZG9jeFwiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudFwiO1xuICAgIGlmIChleHQgPT09IFwiLnhsc1wiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWxcIjtcbiAgICBpZiAoZXh0ID09PSBcIi54bHN4XCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0XCI7XG4gICAgaWYgKGV4dCA9PT0gXCIucHB0XCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50XCI7XG4gICAgaWYgKGV4dCA9PT0gXCIucHB0eFwiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIub2R0XCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dFwiO1xuICAgIGlmIChleHQgPT09IFwiLm9kc1wiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0XCI7XG4gICAgaWYgKGV4dCA9PT0gXCIub2RwXCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQucHJlc2VudGF0aW9uXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIucnRmXCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3J0ZlwiO1xuXG4gICAgLy8gVGV4dCBmaWxlc1xuICAgIGlmIChleHQgPT09IFwiLnR4dFwiKSByZXR1cm4gXCJ0ZXh0L3BsYWluXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIubWRcIikgcmV0dXJuIFwidGV4dC9tYXJrZG93blwiO1xuICAgIGlmIChleHQgPT09IFwiLmNzdlwiKSByZXR1cm4gXCJ0ZXh0L2NzdlwiO1xuICAgIGlmIChleHQgPT09IFwiLmxvZ1wiKSByZXR1cm4gXCJ0ZXh0L3BsYWluXCI7XG5cbiAgICAvLyBQcm9ncmFtbWluZyBmaWxlc1xuICAgIGlmIChleHQgPT09IFwiLnRzXCIpIHJldHVybiBcInRleHQvdHlwZXNjcmlwdFwiO1xuICAgIGlmIChleHQgPT09IFwiLnRzeFwiKSByZXR1cm4gXCJ0ZXh0L3R5cGVzY3JpcHRcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5qc3hcIikgcmV0dXJuIFwidGV4dC9qYXZhc2NyaXB0XCI7XG4gICAgaWYgKGV4dCA9PT0gXCIucHlcIikgcmV0dXJuIFwidGV4dC94LXB5dGhvblwiO1xuICAgIGlmIChleHQgPT09IFwiLmphdmFcIikgcmV0dXJuIFwidGV4dC94LWphdmEtc291cmNlXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuY1wiKSByZXR1cm4gXCJ0ZXh0L3gtY1wiO1xuICAgIGlmIChleHQgPT09IFwiLmNwcFwiKSByZXR1cm4gXCJ0ZXh0L3gtYysrXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuaFwiKSByZXR1cm4gXCJ0ZXh0L3gtY1wiO1xuICAgIGlmIChleHQgPT09IFwiLmhwcFwiKSByZXR1cm4gXCJ0ZXh0L3gtYysrXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuY3NcIikgcmV0dXJuIFwidGV4dC94LWNzaGFycFwiO1xuICAgIGlmIChleHQgPT09IFwiLnBocFwiKSByZXR1cm4gXCJ0ZXh0L3gtcGhwXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIucmJcIikgcmV0dXJuIFwidGV4dC94LXJ1YnlcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5nb1wiKSByZXR1cm4gXCJ0ZXh0L3gtZ29cIjtcbiAgICBpZiAoZXh0ID09PSBcIi5yc1wiKSByZXR1cm4gXCJ0ZXh0L3gtcnVzdFwiO1xuICAgIGlmIChleHQgPT09IFwiLnN3aWZ0XCIpIHJldHVybiBcInRleHQveC1zd2lmdFwiO1xuICAgIGlmIChleHQgPT09IFwiLmt0XCIpIHJldHVybiBcInRleHQveC1rb3RsaW5cIjtcbiAgICBpZiAoZXh0ID09PSBcIi5zY2FsYVwiKSByZXR1cm4gXCJ0ZXh0L3gtc2NhbGFcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5zaFwiKSByZXR1cm4gXCJ0ZXh0L3gtc2hlbGxzY3JpcHRcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5iYXRcIikgcmV0dXJuIFwidGV4dC94LW1zZG9zLWJhdGNoXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIucHMxXCIpIHJldHVybiBcInRleHQveC1wb3dlcnNoZWxsXCI7XG5cbiAgICAvLyBBcmNoaXZlc1xuICAgIGlmIChleHQgPT09IFwiLnppcFwiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi96aXBcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5yYXJcIikgcmV0dXJuIFwiYXBwbGljYXRpb24vdm5kLnJhclwiO1xuICAgIGlmIChleHQgPT09IFwiLnRhclwiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi94LXRhclwiO1xuICAgIGlmIChleHQgPT09IFwiLmd6XCIpIHJldHVybiBcImFwcGxpY2F0aW9uL2d6aXBcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5iejJcIikgcmV0dXJuIFwiYXBwbGljYXRpb24veC1iemlwMlwiO1xuICAgIGlmIChleHQgPT09IFwiLjd6XCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3gtN3otY29tcHJlc3NlZFwiO1xuICAgIGlmIChleHQgPT09IFwiLnh6XCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3gteHpcIjtcblxuICAgIC8vIEZvbnRzXG4gICAgaWYgKGV4dCA9PT0gXCIudHRmXCIpIHJldHVybiBcImZvbnQvdHRmXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIub3RmXCIpIHJldHVybiBcImZvbnQvb3RmXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIud29mZlwiKSByZXR1cm4gXCJmb250L3dvZmZcIjtcbiAgICBpZiAoZXh0ID09PSBcIi53b2ZmMlwiKSByZXR1cm4gXCJmb250L3dvZmYyXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuZW90XCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0XCI7XG5cbiAgICAvLyBPdGhlciBjb21tb24gZm9ybWF0c1xuICAgIGlmIChleHQgPT09IFwiLmVwdWJcIikgcmV0dXJuIFwiYXBwbGljYXRpb24vZXB1Yit6aXBcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5tb2JpXCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3gtbW9iaXBvY2tldC1lYm9va1wiO1xuICAgIGlmIChleHQgPT09IFwiLmFwa1wiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi92bmQuYW5kcm9pZC5wYWNrYWdlLWFyY2hpdmVcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5kbWdcIikgcmV0dXJuIFwiYXBwbGljYXRpb24veC1hcHBsZS1kaXNraW1hZ2VcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5pc29cIikgcmV0dXJuIFwiYXBwbGljYXRpb24veC1pc285NjYwLWltYWdlXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuZXhlXCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3gtbXNkb3dubG9hZFwiO1xuICAgIGlmIChleHQgPT09IFwiLm1zaVwiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi94LW1zaVwiO1xuICAgIGlmIChleHQgPT09IFwiLmRlYlwiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi94LWRlYmlhbi1wYWNrYWdlXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIucnBtXCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3gtcnBtXCI7XG5cbiAgICBjb25zb2xlLndhcm4oYFVua25vd24gZXh0ZW5zaW9uLCAke2V4dH1gKTtcbiAgICByZXR1cm4gXCJ0ZXh0L3BsYWluXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250ZW50VHlwZUZyb21CdWZmZXIoYnVmZmVyOiBCdWZmZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmIChidWZmZXIubGVuZ3RoIDwgNCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBidWZmZXIgc3RhcnRzIHdpdGggc3BlY2lmaWMgYnl0ZXNcbiAgICBjb25zdCBzdGFydHNXaXRoID0gKGJ5dGVzOiBudW1iZXJbXSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IGJ5dGVzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoYnVmZmVyW2ldICE9PSBieXRlc1tpXSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgYnl0ZXMgYXQgc3BlY2lmaWMgb2Zmc2V0XG4gICAgY29uc3QgaGFzQXRPZmZzZXQgPSAob2Zmc2V0OiBudW1iZXIsIGJ5dGVzOiBudW1iZXJbXSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IG9mZnNldCArIGJ5dGVzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoYnVmZmVyW29mZnNldCArIGldICE9PSBieXRlc1tpXSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICAvLyBJbWFnZXNcbiAgICBpZiAoc3RhcnRzV2l0aChbMHhGRiwgMHhEOCwgMHhGRl0pKSByZXR1cm4gXCJpbWFnZS9qcGVnXCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4ODksIDB4NTAsIDB4NEUsIDB4NDcsIDB4MEQsIDB4MEEsIDB4MUEsIDB4MEFdKSkgcmV0dXJuIFwiaW1hZ2UvcG5nXCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4NDcsIDB4NDksIDB4NDYsIDB4MzhdKSkgcmV0dXJuIFwiaW1hZ2UvZ2lmXCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4NDIsIDB4NERdKSkgcmV0dXJuIFwiaW1hZ2UvYm1wXCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4NDksIDB4NDksIDB4MkEsIDB4MDBdKSB8fCBzdGFydHNXaXRoKFsweDRELCAweDRELCAweDAwLCAweDJBXSkpIHJldHVybiBcImltYWdlL3RpZmZcIjtcbiAgICBpZiAoc3RhcnRzV2l0aChbMHgwMCwgMHgwMCwgMHgwMSwgMHgwMF0pKSByZXR1cm4gXCJpbWFnZS94LWljb25cIjtcbiAgICBpZiAoYnVmZmVyLnRvU3RyaW5nKFwiYXNjaWlcIiwgMCwgNCkgPT09IFwiPHN2Z1wiIHx8IGJ1ZmZlci50b1N0cmluZyhcImFzY2lpXCIsIDAsIDUpID09PSBcIjw/eG1sXCIpIHtcbiAgICAgICAgaWYgKGJ1ZmZlci50b1N0cmluZyhcInV0ZjhcIikuaW5jbHVkZXMoXCI8c3ZnXCIpKSByZXR1cm4gXCJpbWFnZS9zdmcreG1sXCI7XG4gICAgfVxuXG4gICAgLy8gV2ViUCBhbmQgbW9kZXJuIGltYWdlIGZvcm1hdHNcbiAgICBpZiAoc3RhcnRzV2l0aChbMHg1MiwgMHg0OSwgMHg0NiwgMHg0Nl0pICYmIGhhc0F0T2Zmc2V0KDgsIFsweDU3LCAweDQ1LCAweDQyLCAweDUwXSkpIHJldHVybiBcImltYWdlL3dlYnBcIjtcbiAgICBpZiAoaGFzQXRPZmZzZXQoNCwgWzB4NjYsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjEsIDB4NzYsIDB4NjksIDB4NjZdKSkgcmV0dXJuIFwiaW1hZ2UvYXZpZlwiO1xuICAgIGlmIChoYXNBdE9mZnNldCg0LCBbMHg2NiwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2OCwgMHg2NSwgMHg2OSwgMHg2M10pKSByZXR1cm4gXCJpbWFnZS9oZWljXCI7XG4gICAgaWYgKGhhc0F0T2Zmc2V0KDQsIFsweDY2LCAweDc0LCAweDc5LCAweDcwLCAweDZELCAweDY5LCAweDY2LCAweDMxXSkpIHJldHVybiBcImltYWdlL2hlaWZcIjtcblxuICAgIC8vIEF1ZGlvXG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4RkYsIDB4RkJdKSB8fCBzdGFydHNXaXRoKFsweEZGLCAweEYzXSkgfHwgc3RhcnRzV2l0aChbMHhGRiwgMHhGMl0pKSByZXR1cm4gXCJhdWRpby9tcGVnXCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4NDksIDB4NDQsIDB4MzNdKSkgcmV0dXJuIFwiYXVkaW8vbXBlZ1wiOyAvLyBNUDMgd2l0aCBJRDNcbiAgICBpZiAoc3RhcnRzV2l0aChbMHg1MiwgMHg0OSwgMHg0NiwgMHg0Nl0pICYmIGhhc0F0T2Zmc2V0KDgsIFsweDU3LCAweDQxLCAweDU2LCAweDQ1XSkpIHJldHVybiBcImF1ZGlvL3dhdlwiO1xuICAgIGlmIChzdGFydHNXaXRoKFsweDRGLCAweDY3LCAweDY3LCAweDUzXSkpIHJldHVybiBcImF1ZGlvL29nZ1wiO1xuICAgIGlmIChzdGFydHNXaXRoKFsweDY2LCAweDRDLCAweDYxLCAweDQzXSkpIHJldHVybiBcImF1ZGlvL2ZsYWNcIjtcbiAgICBpZiAoaGFzQXRPZmZzZXQoNCwgWzB4NjYsIDB4NzQsIDB4NzksIDB4NzAsIDB4NEQsIDB4MzQsIDB4NDFdKSkgcmV0dXJuIFwiYXVkaW8vbXA0XCI7XG5cbiAgICAvLyBWaWRlb1xuICAgIGlmIChoYXNBdE9mZnNldCg0LCBbMHg2NiwgMHg3NCwgMHg3OSwgMHg3MF0pKSB7XG4gICAgICAgIGNvbnN0IGZ0eXAgPSBidWZmZXIudG9TdHJpbmcoXCJhc2NpaVwiLCA4LCAxMik7XG4gICAgICAgIGlmIChmdHlwLnN0YXJ0c1dpdGgoXCJtcDRcIikgfHwgZnR5cC5zdGFydHNXaXRoKFwiaXNvbVwiKSB8fCBmdHlwLnN0YXJ0c1dpdGgoXCJNNFZcIikpIHJldHVybiBcInZpZGVvL21wNFwiO1xuICAgICAgICBpZiAoZnR5cC5zdGFydHNXaXRoKFwicXRcIikpIHJldHVybiBcInZpZGVvL3F1aWNrdGltZVwiO1xuICAgIH1cbiAgICBpZiAoc3RhcnRzV2l0aChbMHgxQSwgMHg0NSwgMHhERiwgMHhBM10pKSByZXR1cm4gXCJ2aWRlby93ZWJtXCI7IC8vIEFsc28gbWt2XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4MzAsIDB4MjYsIDB4QjIsIDB4NzUsIDB4OEUsIDB4NjYsIDB4Q0YsIDB4MTFdKSkgcmV0dXJuIFwidmlkZW8veC1tcy13bXZcIjtcbiAgICBpZiAoc3RhcnRzV2l0aChbMHg0NiwgMHg0QywgMHg1NiwgMHgwMV0pKSByZXR1cm4gXCJ2aWRlby94LWZsdlwiO1xuICAgIGlmIChzdGFydHNXaXRoKFsweDUyLCAweDQ5LCAweDQ2LCAweDQ2XSkgJiYgaGFzQXRPZmZzZXQoOCwgWzB4NDEsIDB4NTYsIDB4NDksIDB4MjBdKSkgcmV0dXJuIFwidmlkZW8veC1tc3ZpZGVvXCI7XG5cbiAgICAvLyBEb2N1bWVudHNcbiAgICBpZiAoc3RhcnRzV2l0aChbMHgyNSwgMHg1MCwgMHg0NCwgMHg0Nl0pKSByZXR1cm4gXCJhcHBsaWNhdGlvbi9wZGZcIjtcbiAgICBpZiAoc3RhcnRzV2l0aChbMHg1MCwgMHg0QiwgMHgwMywgMHgwNF0pIHx8IHN0YXJ0c1dpdGgoWzB4NTAsIDB4NEIsIDB4MDUsIDB4MDZdKSB8fCBzdGFydHNXaXRoKFsweDUwLCAweDRCLCAweDA3LCAweDA4XSkpIHtcbiAgICAgICAgLy8gWklQLWJhc2VkIGZvcm1hdHMgLSBuZWVkIHRvIGNoZWNrIGludGVybmFsIHN0cnVjdHVyZVxuICAgICAgICBjb25zdCBjb250ZW50ID0gYnVmZmVyLnRvU3RyaW5nKFwiYXNjaWlcIiwgMzAsIDEwMCk7XG4gICAgICAgIGlmIChjb250ZW50LmluY2x1ZGVzKFwid29yZC9cIikpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50XCI7XG4gICAgICAgIGlmIChjb250ZW50LmluY2x1ZGVzKFwieGwvXCIpKSByZXR1cm4gXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldFwiO1xuICAgICAgICBpZiAoY29udGVudC5pbmNsdWRlcyhcInBwdC9cIikpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVzZW50YXRpb25cIjtcbiAgICAgICAgaWYgKGNvbnRlbnQuaW5jbHVkZXMoXCJNRVRBLUlORi9cIikpIHtcbiAgICAgICAgICAgIGlmIChjb250ZW50LmluY2x1ZGVzKFwiY29udGVudC54bWxcIikpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dFwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcImFwcGxpY2F0aW9uL3ppcFwiO1xuICAgIH1cbiAgICBpZiAoc3RhcnRzV2l0aChbMHhEMCwgMHhDRiwgMHgxMSwgMHhFMCwgMHhBMSwgMHhCMSwgMHgxQSwgMHhFMV0pKSB7XG4gICAgICAgIC8vIE1pY3Jvc29mdCBPZmZpY2UgbGVnYWN5IGZvcm1hdHNcbiAgICAgICAgcmV0dXJuIFwiYXBwbGljYXRpb24vbXN3b3JkXCI7IC8vIENvdWxkIGFsc28gYmUgRXhjZWwgb3IgUG93ZXJQb2ludFxuICAgIH1cbiAgICBpZiAoc3RhcnRzV2l0aChbMHg3QiwgMHg1QywgMHg3MiwgMHg3NCwgMHg2Nl0pKSByZXR1cm4gXCJhcHBsaWNhdGlvbi9ydGZcIjtcblxuICAgIC8vIEFyY2hpdmVzXG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4NTIsIDB4NjEsIDB4NzIsIDB4MjEsIDB4MUEsIDB4MDddKSkgcmV0dXJuIFwiYXBwbGljYXRpb24vdm5kLnJhclwiO1xuICAgIGlmIChzdGFydHNXaXRoKFsweDM3LCAweDdBLCAweEJDLCAweEFGLCAweDI3LCAweDFDXSkpIHJldHVybiBcImFwcGxpY2F0aW9uL3gtN3otY29tcHJlc3NlZFwiO1xuICAgIGlmIChzdGFydHNXaXRoKFsweDFGLCAweDhCXSkpIHJldHVybiBcImFwcGxpY2F0aW9uL2d6aXBcIjtcbiAgICBpZiAoc3RhcnRzV2l0aChbMHg0MiwgMHg1QSwgMHg2OF0pKSByZXR1cm4gXCJhcHBsaWNhdGlvbi94LWJ6aXAyXCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4RkQsIDB4MzcsIDB4N0EsIDB4NTgsIDB4NUEsIDB4MDBdKSkgcmV0dXJuIFwiYXBwbGljYXRpb24veC14elwiO1xuICAgIGlmIChzdGFydHNXaXRoKFsweDc1LCAweDczLCAweDc0LCAweDYxLCAweDcyXSkpIHJldHVybiBcImFwcGxpY2F0aW9uL3gtdGFyXCI7XG5cbiAgICAvLyBFeGVjdXRhYmxlc1xuICAgIGlmIChzdGFydHNXaXRoKFsweDRELCAweDVBXSkpIHJldHVybiBcImFwcGxpY2F0aW9uL3gtbXNkb3dubG9hZFwiOyAvLyBXaW5kb3dzIFBFXG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4N0YsIDB4NDUsIDB4NEMsIDB4NDZdKSkgcmV0dXJuIFwiYXBwbGljYXRpb24veC1leGVjdXRhYmxlXCI7IC8vIExpbnV4IEVMRlxuICAgIGlmIChzdGFydHNXaXRoKFsweENBLCAweEZFLCAweEJBLCAweEJFXSkgfHwgc3RhcnRzV2l0aChbMHhGRSwgMHhFRCwgMHhGQSwgMHhDRV0pKSByZXR1cm4gXCJhcHBsaWNhdGlvbi94LW1hY2gtYmluYXJ5XCI7IC8vIG1hY09TIGJpbmFyeVxuICAgIGlmIChzdGFydHNXaXRoKFsweDUwLCAweDRCLCAweDAzLCAweDA0XSkgJiYgYnVmZmVyLnRvU3RyaW5nKFwiYXNjaWlcIiwgMzAsIDUwKS5pbmNsdWRlcyhcIkFuZHJvaWRNYW5pZmVzdC54bWxcIikpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5hbmRyb2lkLnBhY2thZ2UtYXJjaGl2ZVwiO1xuXG4gICAgLy8gRm9udHNcbiAgICBpZiAoc3RhcnRzV2l0aChbMHgwMCwgMHgwMSwgMHgwMCwgMHgwMF0pKSByZXR1cm4gXCJmb250L3R0ZlwiO1xuICAgIGlmIChzdGFydHNXaXRoKFsweDRGLCAweDU0LCAweDU0LCAweDRGXSkpIHJldHVybiBcImZvbnQvb3RmXCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4NzcsIDB4NEYsIDB4NDYsIDB4NDZdKSkgcmV0dXJuIFwiZm9udC93b2ZmXCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4NzcsIDB4NEYsIDB4NDYsIDB4MzJdKSkgcmV0dXJuIFwiZm9udC93b2ZmMlwiO1xuXG4gICAgLy8gV2ViIGZpbGVzICh0ZXh0LWJhc2VkLCBjaGVjayBmb3IgY29tbW9uIHBhdHRlcm5zKVxuICAgIGNvbnN0IHRleHRTdGFydCA9IGJ1ZmZlci50b1N0cmluZyhcInV0ZjhcIiwgMCwgTWF0aC5taW4oMTAwLCBidWZmZXIubGVuZ3RoKSkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodGV4dFN0YXJ0LmluY2x1ZGVzKFwiPCFkb2N0eXBlIGh0bWxcIikgfHwgdGV4dFN0YXJ0LmluY2x1ZGVzKFwiPGh0bWxcIikpIHJldHVybiBcInRleHQvaHRtbFwiO1xuICAgIGlmICh0ZXh0U3RhcnQuaW5jbHVkZXMoXCI8P3htbFwiKSkgcmV0dXJuIFwiYXBwbGljYXRpb24veG1sXCI7XG4gICAgaWYgKHRleHRTdGFydC5zdGFydHNXaXRoKFwie1wiKSB8fCB0ZXh0U3RhcnQuc3RhcnRzV2l0aChcIltcIikpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIEpTT04ucGFyc2UoYnVmZmVyLnRvU3RyaW5nKFwidXRmOFwiKSk7XG4gICAgICAgICAgICByZXR1cm4gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gTm90IEpTT05cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE90aGVyIGZvcm1hdHNcbiAgICBpZiAoc3RhcnRzV2l0aChbMHgyNSwgMHgyMSwgMHg1MCwgMHg1M10pKSByZXR1cm4gXCJhcHBsaWNhdGlvbi9wb3N0c2NyaXB0XCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4MzgsIDB4NDIsIDB4NTAsIDB4NTNdKSkgcmV0dXJuIFwiaW1hZ2Uvdm5kLmFkb2JlLnBob3Rvc2hvcFwiO1xuICAgIGlmIChzdGFydHNXaXRoKFsweDQ5LCAweDQ5LCAweDJBLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDUyXSkpIHJldHVybiBcImltYWdlL3gtY2Fub24tY3IyXCI7XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufSJdfQ==
368
+ /* _JS_SOURCE_HASH = "31430a60ee12fc081021e85b3401362b1c834094ccf75e6ea4f11e3fec7bf37b"; */