@brainfish-ai/devdoc 0.1.38 → 0.1.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands/deploy.js +40 -15
- package/dist/cli/commands/upload.js +37 -2
- package/package.json +1 -1
|
@@ -52,6 +52,40 @@ const BINARY_EXTENSIONS = [
|
|
|
52
52
|
'.woff', '.woff2', '.ttf', '.otf', '.eot',
|
|
53
53
|
'.pdf',
|
|
54
54
|
];
|
|
55
|
+
// Map file extensions to MIME types
|
|
56
|
+
const MIME_TYPES = {
|
|
57
|
+
// Images
|
|
58
|
+
'.png': 'image/png',
|
|
59
|
+
'.jpg': 'image/jpeg',
|
|
60
|
+
'.jpeg': 'image/jpeg',
|
|
61
|
+
'.gif': 'image/gif',
|
|
62
|
+
'.webp': 'image/webp',
|
|
63
|
+
'.ico': 'image/x-icon',
|
|
64
|
+
'.svg': 'image/svg+xml',
|
|
65
|
+
// Videos
|
|
66
|
+
'.mp4': 'video/mp4',
|
|
67
|
+
'.webm': 'video/webm',
|
|
68
|
+
'.mov': 'video/quicktime',
|
|
69
|
+
// Audio
|
|
70
|
+
'.mp3': 'audio/mpeg',
|
|
71
|
+
'.wav': 'audio/wav',
|
|
72
|
+
'.ogg': 'audio/ogg',
|
|
73
|
+
// Fonts
|
|
74
|
+
'.woff': 'font/woff',
|
|
75
|
+
'.woff2': 'font/woff2',
|
|
76
|
+
'.ttf': 'font/ttf',
|
|
77
|
+
'.otf': 'font/otf',
|
|
78
|
+
'.eot': 'application/vnd.ms-fontobject',
|
|
79
|
+
// Documents
|
|
80
|
+
'.pdf': 'application/pdf',
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Get MIME type from file extension
|
|
84
|
+
*/
|
|
85
|
+
function getMimeType(filePath) {
|
|
86
|
+
const ext = path_1.default.extname(filePath).toLowerCase();
|
|
87
|
+
return MIME_TYPES[ext] || 'application/octet-stream';
|
|
88
|
+
}
|
|
55
89
|
// Simple prompt helper using readline
|
|
56
90
|
async function prompt(question, defaultValue) {
|
|
57
91
|
const readline = await Promise.resolve().then(() => __importStar(require('readline')));
|
|
@@ -430,16 +464,11 @@ async function collectFiles(projectRoot) {
|
|
|
430
464
|
continue;
|
|
431
465
|
await scanDirectory(fullDir, projectRoot, files);
|
|
432
466
|
}
|
|
433
|
-
// Include text-based assets from assets folder
|
|
467
|
+
// Include text-based assets from assets folder
|
|
434
468
|
const assetsDir = path_1.default.join(projectRoot, 'assets');
|
|
435
469
|
if (fs_extra_1.default.existsSync(assetsDir)) {
|
|
436
470
|
await scanPublicAssets(assetsDir, projectRoot, files);
|
|
437
471
|
}
|
|
438
|
-
// Also include public assets for backwards compatibility
|
|
439
|
-
const publicDir = path_1.default.join(projectRoot, 'public');
|
|
440
|
-
if (fs_extra_1.default.existsSync(publicDir)) {
|
|
441
|
-
await scanPublicAssets(publicDir, projectRoot, files);
|
|
442
|
-
}
|
|
443
472
|
return files;
|
|
444
473
|
}
|
|
445
474
|
/**
|
|
@@ -494,16 +523,11 @@ async function scanPublicAssets(dir, projectRoot, files) {
|
|
|
494
523
|
*/
|
|
495
524
|
async function collectAssets(projectRoot) {
|
|
496
525
|
const assets = [];
|
|
497
|
-
// Check assets folder
|
|
526
|
+
// Check assets folder
|
|
498
527
|
const assetsDir = path_1.default.join(projectRoot, 'assets');
|
|
499
528
|
if (fs_extra_1.default.existsSync(assetsDir)) {
|
|
500
529
|
await scanBinaryAssets(assetsDir, projectRoot, assets);
|
|
501
530
|
}
|
|
502
|
-
// Also check public folder for backwards compatibility
|
|
503
|
-
const publicDir = path_1.default.join(projectRoot, 'public');
|
|
504
|
-
if (fs_extra_1.default.existsSync(publicDir)) {
|
|
505
|
-
await scanBinaryAssets(publicDir, projectRoot, assets);
|
|
506
|
-
}
|
|
507
531
|
return assets;
|
|
508
532
|
}
|
|
509
533
|
/**
|
|
@@ -570,13 +594,14 @@ async function uploadAssets(assets, apiUrl, slug, apiKey) {
|
|
|
570
594
|
async function uploadAssetWithProgress(asset, apiUrl, slug, apiKey, onProgress) {
|
|
571
595
|
const fileBuffer = fs_extra_1.default.readFileSync(asset.fullPath);
|
|
572
596
|
const fileName = path_1.default.basename(asset.path);
|
|
597
|
+
const mimeType = getMimeType(asset.fullPath);
|
|
573
598
|
// Build multipart form data
|
|
574
599
|
const boundary = `----DevDocDeploy${Date.now()}`;
|
|
575
600
|
const CRLF = '\r\n';
|
|
576
601
|
const header = [
|
|
577
602
|
`--${boundary}`,
|
|
578
603
|
`Content-Disposition: form-data; name="file"; filename="${fileName}"`,
|
|
579
|
-
`Content-Type:
|
|
604
|
+
`Content-Type: ${mimeType}`,
|
|
580
605
|
'',
|
|
581
606
|
''
|
|
582
607
|
].join(CRLF);
|
|
@@ -592,7 +617,7 @@ async function uploadAssetWithProgress(asset, apiUrl, slug, apiKey, onProgress)
|
|
|
592
617
|
`--${boundary}`,
|
|
593
618
|
`Content-Disposition: form-data; name="path"`,
|
|
594
619
|
'',
|
|
595
|
-
asset.path.replace(/^
|
|
620
|
+
asset.path.replace(/^assets\//, ''), // Remove assets/ prefix
|
|
596
621
|
''
|
|
597
622
|
].join(CRLF);
|
|
598
623
|
const footer = `${CRLF}--${boundary}--${CRLF}`;
|
|
@@ -654,4 +679,4 @@ function createProgressBar(progress, width = 30) {
|
|
|
654
679
|
const percentage = Math.round(progress * 100);
|
|
655
680
|
return `[${bar}] ${percentage}%`;
|
|
656
681
|
}
|
|
657
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS9jb21tYW5kcy9kZXBsb3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0TkEsd0JBNFJDO0FBeGZELGdEQUF1QjtBQUN2Qix3REFBeUI7QUFDekIseUNBQXlEO0FBQ3pELCtDQUEyQztBQUMzQywrQ0FBaUQ7QUFFakQsdUJBQXVCO0FBQ3ZCLE1BQU0sY0FBYyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFBO0FBRXZDLCtDQUErQztBQUMvQyxNQUFNLGlCQUFpQixHQUFHO0lBQ3hCLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTTtJQUNoRCxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07SUFDdkIsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNO0lBQ3RCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNO0lBQ3pDLE1BQU07Q0FDUCxDQUFBO0FBNkNELHNDQUFzQztBQUN0QyxLQUFLLFVBQVUsTUFBTSxDQUFDLFFBQWdCLEVBQUUsWUFBcUI7SUFDM0QsTUFBTSxRQUFRLEdBQUcsd0RBQWEsVUFBVSxHQUFDLENBQUE7SUFDekMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztRQUNsQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7UUFDcEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0tBQ3ZCLENBQUMsQ0FBQTtJQUVGLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUM3QixNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUM1RCxFQUFFLENBQUMsUUFBUSxDQUFD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Q0FBQyxDQUFBO1FBQy9CLE1BQU0sS0FBSyxDQUFBO0lBQ2IsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsVUFBVSxDQUFDLEtBQWE7SUFDL0IsSUFBSSxLQUFLLEdBQUcsSUFBSTtRQUFFLE9BQU8sR0FBRyxLQUFLLElBQUksQ0FBQTtJQUNyQyxJQUFJLEtBQUssR0FBRyxJQUFJLEdBQUcsSUFBSTtRQUFFLE9BQU8sR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtJQUNqRSxPQUFPLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtBQUNuRCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGlCQUFpQixDQUFDLFFBQWdCLEVBQUUsUUFBZ0IsRUFBRTtJQUM3RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQTtJQUMzQyxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFBO0lBQzVCLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNsRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQTtJQUM3QyxPQUFPLElBQUksR0FBRyxLQUFLLFVBQVUsR0FBRyxDQUFBO0FBQ2xDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHsgbG9hZENvbmZpZywgdmFsaWRhdGVDb25maWcgfSBmcm9tICcuLi8uLi9jb25maWcnXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXInXG5pbXBvcnQgeyBERUZBVUxUX0FQSV9VUkwgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnXG5cbi8vIE1heCBhc3NldCBzaXplOiAyNU1CXG5jb25zdCBNQVhfQVNTRVRfU0laRSA9IDI1ICogMTAyNCAqIDEwMjRcblxuLy8gQmluYXJ5IGFzc2V0IGV4dGVuc2lvbnMgdG8gdXBsb2FkIHNlcGFyYXRlbHlcbmNvbnN0IEJJTkFSWV9FWFRFTlNJT05TID0gW1xuICAnLnBuZycsICcuanBnJywgJy5qcGVnJywgJy5naWYnLCAnLndlYnAnLCAnLmljbycsXG4gICcubXA0JywgJy53ZWJtJywgJy5tb3YnLFxuICAnLm1wMycsICcud2F2JywgJy5vZ2cnLFxuICAnLndvZmYnLCAnLndvZmYyJywgJy50dGYnLCAnLm90ZicsICcuZW90JyxcbiAgJy5wZGYnLFxuXVxuXG5pbnRlcmZhY2UgRGVwbG95T3B0aW9ucyB7XG4gIHVybD86IHN0cmluZ1xuICBhcGlLZXk/OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIFByb2plY3RGaWxlIHtcbiAgcGF0aDogc3RyaW5nXG4gIGNvbnRlbnQ6IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgQXNzZXRGaWxlIHtcbiAgcGF0aDogc3RyaW5nXG4gIGZ1bGxQYXRoOiBzdHJpbmdcbiAgc2l6ZTogbnVtYmVyXG59XG5cbmludGVyZmFjZSBEZXZEb2NDb25maWcge1xuICBwcm9qZWN0SWQ/OiBzdHJpbmdcbiAgbmFtZT86IHN0cmluZ1xuICBzbHVnPzogc3RyaW5nXG4gIHN1YmRvbWFpbj86IHN0cmluZ1xuICBhcGlLZXk/OiBzdHJpbmdcbiAgdXJsPzogc3RyaW5nXG4gIGxhc3REZXBsb3llZD86IHN0cmluZ1xuICBjcmVhdGVkQXQ/OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIFJlZ2lzdGVyUmVzcG9uc2Uge1xuICBzdWNjZXNzOiBib29sZWFuXG4gIHByb2plY3RJZDogc3RyaW5nXG4gIHNsdWc6IHN0cmluZ1xuICBzdWJkb21haW46IHN0cmluZ1xuICBhcGlLZXk6IHN0cmluZ1xuICB1cmw6IHN0cmluZ1xuICBlcnJvcj86IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgQ2hlY2tTdWJkb21haW5SZXNwb25zZSB7XG4gIGF2YWlsYWJsZTogYm9vbGVhblxuICBlcnJvcj86IHN0cmluZ1xuICBzdWdnZXN0aW9uPzogc3RyaW5nXG59XG5cbi8vIFNpbXBsZSBwcm9tcHQgaGVscGVyIHVzaW5nIHJlYWRsaW5lXG5hc3luYyBmdW5jdGlvbiBwcm9tcHQocXVlc3Rpb246IHN0cmluZywgZGVmYXVsdFZhbHVlPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVhZGxpbmUgPSBhd2FpdCBpbXBvcnQoJ3JlYWRsaW5lJylcbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQsXG4gIH0pXG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdEhpbnQgPSBkZWZhdWx0VmFsdWUgPyBgICgke2RlZmF1bHRWYWx1ZX0pYCA6ICcnXG4gICAgcmwucXVlc3Rpb24oYCR7cXVlc3Rpb259JHtkZWZhdWx0SGludH06IGAsIChhbnN3ZXIpID0+IHtcbiAgICAgIHJsLmNsb3NlKClcbiAgICAgIHJlc29sdmUoYW5zd2VyLnRyaW0oKSB8fCBkZWZhdWx0VmFsdWUgfHwgJycpXG4gICAgfSlcbiAgfSlcbn1cblxuLyoqXG4gKiBDaGVjayBzdWJkb21haW4gYXZhaWxhYmlsaXR5IHZpYSBBUElcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2hlY2tTdWJkb21haW5BdmFpbGFiaWxpdHkoXG4gIHN1YmRvbWFpbjogc3RyaW5nLFxuICBhcGlVcmw6IHN0cmluZ1xuKTogUHJvbWlzZTxDaGVja1N1YmRvbWFpblJlc3BvbnNlPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHthcGlVcmx9L2FwaS9zdWJkb21haW5zL2NoZWNrYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBzdWJkb21haW4gfSksXG4gICAgfSlcbiAgICBcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgQ2hlY2tTdWJkb21haW5SZXNwb25zZVxuICAgIHJldHVybiByZXN1bHRcbiAgfSBjYXRjaCB7XG4gICAgLy8gSWYgQVBJIGlzIHVuYXZhaWxhYmxlLCBhc3N1bWUgYXZhaWxhYmxlICh3aWxsIGZhaWwgYXQgcmVnaXN0cmF0aW9uIGlmIG5vdClcbiAgICByZXR1cm4geyBhdmFpbGFibGU6IHRydWUgfVxuICB9XG59XG5cbi8qKlxuICogQmFzaWMgc3ViZG9tYWluIGZvcm1hdCB2YWxpZGF0aW9uXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRTdWJkb21haW5Gb3JtYXQoc3ViZG9tYWluOiBzdHJpbmcpOiB7IHZhbGlkOiBib29sZWFuOyBlcnJvcj86IHN0cmluZyB9IHtcbiAgaWYgKCFzdWJkb21haW4pIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiAnU3ViZG9tYWluIGlzIHJlcXVpcmVkJyB9XG4gIH1cbiAgXG4gIGlmIChzdWJkb21haW4ubGVuZ3RoIDwgMykge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdTdWJkb21haW4gbXVzdCBiZSBhdCBsZWFzdCAzIGNoYXJhY3RlcnMnIH1cbiAgfVxuICBcbiAgaWYgKHN1YmRvbWFpbi5sZW5ndGggPiA2Mykge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdTdWJkb21haW4gbXVzdCBiZSA2MyBjaGFyYWN0ZXJzIG9yIGxlc3MnIH1cbiAgfVxuICBcbiAgaWYgKCEvXlthLXowLTldKFthLXowLTktXSpbYS16MC05XSk/JC8udGVzdChzdWJkb21haW4pKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ1N1YmRvbWFpbiBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aCBhbHBoYW51bWVyaWMsIGNhbiBjb250YWluIGh5cGhlbnMnIH1cbiAgfVxuICBcbiAgaWYgKC8tLS8udGVzdChzdWJkb21haW4pKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ1N1YmRvbWFpbiBjYW5ub3QgY29udGFpbiBjb25zZWN1dGl2ZSBoeXBoZW5zJyB9XG4gIH1cbiAgXG4gIHJldHVybiB7IHZhbGlkOiB0cnVlIH1cbn1cblxuaW50ZXJmYWNlIERvbWFpbkNvbmZpZyB7XG4gIGN1c3RvbURvbWFpbjogc3RyaW5nXG4gIHNlbz86IHtcbiAgICBjYW5vbmljYWw/OiBzdHJpbmdcbiAgfVxufVxuXG5pbnRlcmZhY2UgRG9tYWluU3RhdHVzUmVzcG9uc2Uge1xuICBoYXNDdXN0b21Eb21haW46IGJvb2xlYW5cbiAgZG9tYWluPzogc3RyaW5nXG4gIHN0YXR1cz86IHN0cmluZ1xuICBjdXN0b21Vcmw/OiBzdHJpbmdcbiAgbWVzc2FnZT86IHN0cmluZ1xuICBuZXh0U3RlcD86IHN0cmluZ1xufVxuXG4vKipcbiAqIENoZWNrIGZvciBkb21haW4uanNvbiBhbmQgZGlzcGxheSBjdXN0b20gZG9tYWluIHN0YXR1c1xuICovXG5hc3luYyBmdW5jdGlvbiBjaGVja0N1c3RvbURvbWFpblN0YXR1cyhcbiAgcHJvamVjdFJvb3Q6IHN0cmluZyxcbiAgYXBpVXJsOiBzdHJpbmcsXG4gIGFwaUtleTogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gQ2hlY2sgaWYgZG9tYWluLmpzb24gZXhpc3RzXG4gIGNvbnN0IGRvbWFpbkNvbmZpZ1BhdGggPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsICdkb21haW4uanNvbicpXG4gIFxuICBpZiAoIWZzLmV4aXN0c1N5bmMoZG9tYWluQ29uZmlnUGF0aCkpIHtcbiAgICByZXR1cm4gLy8gTm8gZG9tYWluLmpzb24sIG5vdGhpbmcgdG8gZG9cbiAgfVxuICBcbiAgbGV0IGRvbWFpbkNvbmZpZzogRG9tYWluQ29uZmlnXG4gIHRyeSB7XG4gICAgZG9tYWluQ29uZmlnID0gZnMucmVhZEpzb25TeW5jKGRvbWFpbkNvbmZpZ1BhdGgpIGFzIERvbWFpbkNvbmZpZ1xuICB9IGNhdGNoIHtcbiAgICBsb2dnZXIud2FybignRm91bmQgZG9tYWluLmpzb24gYnV0IGZhaWxlZCB0byBwYXJzZSBpdCcpXG4gICAgcmV0dXJuXG4gIH1cbiAgXG4gIGlmICghZG9tYWluQ29uZmlnLmN1c3RvbURvbWFpbikge1xuICAgIHJldHVyblxuICB9XG4gIFxuICBjb25zb2xlLmxvZygnJylcbiAgbG9nZ2VyLmluZm8oYEN1c3RvbSBkb21haW4gY29uZmlndXJlZDogJHtkb21haW5Db25maWcuY3VzdG9tRG9tYWlufWApXG4gIFxuICAvLyBDaGVjayBkb21haW4gc3RhdHVzIHZpYSBBUElcbiAgaWYgKCFhcGlLZXkpIHtcbiAgICBsb2dnZXIuaW5mbygnUnVuIFwiZGV2ZG9jIGRvbWFpbiBzdGF0dXNcIiB0byBjaGVjayBETlMgY29uZmlndXJhdGlvbicpXG4gICAgcmV0dXJuXG4gIH1cbiAgXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHthcGlVcmx9L2FwaS9kb21haW5zL3N0YXR1c2AsIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke2FwaUtleX1gLFxuICAgICAgfSxcbiAgICB9KVxuICAgIFxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBcbiAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgRG9tYWluU3RhdHVzUmVzcG9uc2VcbiAgICBcbiAgICBpZiAoIXN0YXR1cy5oYXNDdXN0b21Eb21haW4pIHtcbiAgICAgIC8vIERvbWFpbiBpbiBjb25maWcgYnV0IG5vdCByZWdpc3RlcmVkIHlldFxuICAgICAgY29uc29sZS5sb2coJycpXG4gICAgICBsb2dnZXIuaW5mbygnQ3VzdG9tIGRvbWFpbiBub3QgeWV0IHJlZ2lzdGVyZWQuJylcbiAgICAgIGxvZ2dlci5pbmZvKCdSdW4gXCJkZXZkb2MgZG9tYWluIGFkZCAnICsgZG9tYWluQ29uZmlnLmN1c3RvbURvbWFpbiArICdcIiB0byBzZXQgaXQgdXAnKVxuICAgIH0gZWxzZSBpZiAoc3RhdHVzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpIHtcbiAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgICAgY29uc29sZS5sb2coYCAgQWxzbyBsaXZlIGF0OiAke2xvZ2dlci5jeWFuKHN0YXR1cy5jdXN0b21VcmwgfHwgYGh0dHBzOi8vJHtzdGF0dXMuZG9tYWlufWApfWApXG4gICAgfSBlbHNlIGlmIChzdGF0dXMuc3RhdHVzID09PSAncGVuZGluZycpIHtcbiAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgICAgbG9nZ2VyLndhcm4oJ0N1c3RvbSBkb21haW4gcGVuZGluZyBETlMgY29uZmlndXJhdGlvbicpXG4gICAgICBsb2dnZXIuaW5mbygnUnVuIFwiZGV2ZG9jIGRvbWFpbiBzdGF0dXNcIiBmb3IgRE5TIHNldHVwIGluc3RydWN0aW9ucycpXG4gICAgfSBlbHNlIGlmIChzdGF0dXMuc3RhdHVzID09PSAnZG5zX3ZlcmlmaWVkJyB8fCBzdGF0dXMuc3RhdHVzID09PSAnc3NsX3Byb3Zpc2lvbmluZycpIHtcbiAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgICAgbG9nZ2VyLmluZm8oJ0N1c3RvbSBkb21haW4gRE5TIHZlcmlmaWVkLCBTU0wgY2VydGlmaWNhdGUgcHJvdmlzaW9uaW5nLi4uJylcbiAgICB9XG4gICAgXG4gIH0gY2F0Y2gge1xuICAgIC8vIElnbm9yZSBlcnJvcnMsIGRvbWFpbiBzdGF0dXMgaXMgaW5mb3JtYXRpb25hbFxuICB9XG59XG5cbi8qKlxuICogRGVwbG95IGRvY3VtZW50YXRpb24gdG8gRGV2RG9jIHBsYXRmb3JtXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZXBsb3kob3B0aW9uczogRGVwbG95T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwcm9qZWN0Um9vdCA9IHByb2Nlc3MuY3dkKClcbiAgY29uc3QgYXBpVXJsID0gb3B0aW9ucy51cmwgfHwgcHJvY2Vzcy5lbnYuREVWRE9DX0FQSV9VUkwgfHwgREVGQVVMVF9BUElfVVJMXG4gIFxuICBsb2dnZXIuaW5mbygnRGVwbG95aW5nIHRvIERldkRvYy4uLlxcbicpXG4gIFxuICAvLyBDaGVjayBmb3IgZG9jcy5qc29uXG4gIGNvbnN0IGNvbmZpZ1BhdGggPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsICdkb2NzLmpzb24nKVxuICBpZiAoIWZzLmV4aXN0c1N5bmMoY29uZmlnUGF0aCkpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ2RvY3MuanNvbiBub3QgZm91bmQgaW4gY3VycmVudCBkaXJlY3RvcnknKVxuICAgIGxvZ2dlci5pbmZvKCdNYWtlIHN1cmUgeW91IGFyZSBpbiBhIERldkRvYyBkb2N1bWVudGF0aW9uIHByb2plY3QgZGlyZWN0b3J5JylcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuICBcbiAgLy8gTG9hZCBhbmQgdmFsaWRhdGUgY29uZmlndXJhdGlvblxuICBsZXQgY29uZmlnOiBSZXR1cm5UeXBlPHR5cGVvZiBsb2FkQ29uZmlnPiBleHRlbmRzIFByb21pc2U8aW5mZXIgVD4gPyBUIDogbmV2ZXJcbiAgdHJ5IHtcbiAgICBjb25maWcgPSBhd2FpdCBsb2FkQ29uZmlnKHByb2plY3RSb290KVxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSB2YWxpZGF0ZUNvbmZpZyhjb25maWcpXG4gICAgXG4gICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ludmFsaWQgZG9jcy5qc29uIGNvbmZpZ3VyYXRpb246JylcbiAgICAgIHZhbGlkYXRpb24uZXJyb3JzLmZvckVhY2goZXJyID0+IGxvZ2dlci5lcnJvcihgICAtICR7ZXJyfWApKVxuICAgICAgcHJvY2Vzcy5leGl0KDEpXG4gICAgfVxuICAgIFxuICAgIGxvZ2dlci5zdWNjZXNzKGDinJMgQ29uZmlndXJhdGlvbiB2YWxpZDogJHtjb25maWcubmFtZSB8fCAnVW50aXRsZWQnfWApXG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKVxuICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGxvYWQgY29uZmlndXJhdGlvbjogJHttZXNzYWdlfWApXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbiAgXG4gIC8vIENoZWNrIGZvciBleGlzdGluZyBwcm9qZWN0IGNvbmZpZ1xuICBjb25zdCBkZXZkb2NDb25maWdQYXRoID0gcGF0aC5qb2luKHByb2plY3RSb290LCAnLmRldmRvYy5qc29uJylcbiAgbGV0IGRldmRvY0NvbmZpZzogRGV2RG9jQ29uZmlnIHwgbnVsbCA9IG51bGxcbiAgbGV0IGV4aXN0aW5nU2x1Zzogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgbGV0IGV4aXN0aW5nQXBpS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICBsZXQgZXhpc3RpbmdTdWJkb21haW46IHN0cmluZyB8IG51bGwgPSBudWxsXG4gIFxuICBpZiAoZnMuZXhpc3RzU3luYyhkZXZkb2NDb25maWdQYXRoKSkge1xuICAgIHRyeSB7XG4gICAgICBkZXZkb2NDb25maWcgPSBmcy5yZWFkSnNvblN5bmMoZGV2ZG9jQ29uZmlnUGF0aCkgYXMgRGV2RG9jQ29uZmlnXG4gICAgICBleGlzdGluZ1NsdWcgPSBkZXZkb2NDb25maWcuc2x1ZyB8fCBudWxsXG4gICAgICBleGlzdGluZ0FwaUtleSA9IGRldmRvY0NvbmZpZy5hcGlLZXkgfHwgbnVsbFxuICAgICAgZXhpc3RpbmdTdWJkb21haW4gPSBkZXZkb2NDb25maWcuc3ViZG9tYWluIHx8IG51bGxcbiAgICAgIGlmIChleGlzdGluZ1NsdWcgJiYgZXhpc3RpbmdBcGlLZXkpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oYERlcGxveWluZyBwcm9qZWN0OiAke2V4aXN0aW5nU2x1Z31gKVxuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gSWdub3JlIGVycm9ycyByZWFkaW5nIC5kZXZkb2MuanNvblxuICAgIH1cbiAgfVxuICBcbiAgLy8gR2V0IEFQSSBrZXkgZnJvbSBvcHRpb25zLCBlbnYgdmFyLCBvciAuZGV2ZG9jLmpzb25cbiAgbGV0IGFwaUtleSA9IG9wdGlvbnMuYXBpS2V5IHx8IHByb2Nlc3MuZW52LkRFVkRPQ19BUElfS0VZIHx8IGV4aXN0aW5nQXBpS2V5XG4gIFxuICAvLyBJZiBubyBBUEkga2V5LCB0aGlzIGlzIGEgZmlyc3QgZGVwbG95IC0gbmVlZCB0byByZWdpc3RlciB0aGUgc3ViZG9tYWluIGZpcnN0XG4gIGlmICghYXBpS2V5KSB7XG4gICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBzdWJkb21haW4gZnJvbSBpbml0XG4gICAgaWYgKCFleGlzdGluZ1N1YmRvbWFpbikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdObyBwcm9qZWN0IGNvbmZpZ3VyYXRpb24gZm91bmQuJylcbiAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgICAgbG9nZ2VyLmluZm8oJ1J1biBcImRldmRvYyBpbml0XCIgZmlyc3QgdG8gY29uZmlndXJlIHlvdXIgcHJvamVjdCcpXG4gICAgICBsb2dnZXIuaW5mbygnT3IgcHJvdmlkZSBhbiBBUEkga2V5IHZpYSAtLWFwaS1rZXkgZmxhZyBvciBERVZET0NfQVBJX0tFWSBlbnYgdmFyJylcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH1cbiAgICBcbiAgICBsZXQgc3ViZG9tYWluVG9SZWdpc3RlciA9IGV4aXN0aW5nU3ViZG9tYWluXG4gICAgbGV0IHJlZ2lzdGVyZWQgPSBmYWxzZVxuICAgIFxuICAgIC8vIExvb3AgdW50aWwgd2Ugc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyIGEgc3ViZG9tYWluXG4gICAgd2hpbGUgKCFyZWdpc3RlcmVkKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgUmVnaXN0ZXJpbmcgc3ViZG9tYWluICR7c3ViZG9tYWluVG9SZWdpc3Rlcn0uZGV2ZG9jLnNoLi4uYClcbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVnaXN0ZXJSZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2FwaVVybH0vYXBpL3Byb2plY3RzL3JlZ2lzdGVyYCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBuYW1lOiBkZXZkb2NDb25maWc/Lm5hbWUgfHwgY29uZmlnLm5hbWUgfHwgJ015IERvY3VtZW50YXRpb24nLFxuICAgICAgICAgICAgc2x1Zzogc3ViZG9tYWluVG9SZWdpc3RlcixcbiAgICAgICAgICAgIHN1YmRvbWFpbjogc3ViZG9tYWluVG9SZWdpc3RlcixcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSlcbiAgICAgICAgXG4gICAgICAgIGlmICghcmVnaXN0ZXJSZXNwb25zZS5vaykge1xuICAgICAgICAgIGNvbnN0IGVycm9yRGF0YSA9IGF3YWl0IHJlZ2lzdGVyUmVzcG9uc2UuanNvbigpLmNhdGNoKCgpID0+ICh7IGVycm9yOiAnVW5rbm93biBlcnJvcicgfSkpIGFzIHsgZXJyb3I/OiBzdHJpbmc7IGRldGFpbHM/OiBzdHJpbmcgfVxuICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yRGF0YS5lcnJvciB8fCBgSFRUUCAke3JlZ2lzdGVyUmVzcG9uc2Uuc3RhdHVzfWBcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBJZiBzdWJkb21haW4gaXMgdGFrZW4sIGFzayBmb3IgYSBuZXcgb25lXG4gICAgICAgICAgaWYgKGVycm9yTWVzc2FnZS5pbmNsdWRlcygnYWxyZWFkeSBleGlzdHMnKSB8fCBlcnJvck1lc3NhZ2UuaW5jbHVkZXMoJ2FscmVhZHkgdGFrZW4nKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJycpXG4gICAgICAgICAgICBsb2dnZXIud2FybihgU3ViZG9tYWluIFwiJHtzdWJkb21haW5Ub1JlZ2lzdGVyfVwiIGlzIG5vIGxvbmdlciBhdmFpbGFibGUuYClcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gR2V0IHN1Z2dlc3Rpb24gZnJvbSBBUElcbiAgICAgICAgICAgIGNvbnN0IGF2YWlsYWJpbGl0eSA9IGF3YWl0IGNoZWNrU3ViZG9tYWluQXZhaWxhYmlsaXR5KHN1YmRvbWFpblRvUmVnaXN0ZXIsIGFwaVVybClcbiAgICAgICAgICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBhdmFpbGFiaWxpdHkuc3VnZ2VzdGlvbiB8fCBgJHtzdWJkb21haW5Ub1JlZ2lzdGVyfS1kb2NzYFxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnJylcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBTdWdnZXN0aW9uOiAke3N1Z2dlc3Rpb259LmRldmRvYy5zaGApXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnJylcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gUHJvbXB0IGZvciBuZXcgc3ViZG9tYWluXG4gICAgICAgICAgICBsZXQgbmV3U3ViZG9tYWluID0gYXdhaXQgcHJvbXB0KCdFbnRlciBhIG5ldyBzdWJkb21haW4nLCBzdWdnZXN0aW9uKVxuICAgICAgICAgICAgbmV3U3ViZG9tYWluID0gbmV3U3ViZG9tYWluLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTktXS9nLCAnLScpLnJlcGxhY2UoL14tfC0kL2csICcnKVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBWYWxpZGF0ZSBmb3JtYXRcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdENoZWNrID0gaXNWYWxpZFN1YmRvbWFpbkZvcm1hdChuZXdTdWJkb21haW4pXG4gICAgICAgICAgICBpZiAoIWZvcm1hdENoZWNrLnZhbGlkKSB7XG4gICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihmb3JtYXRDaGVjay5lcnJvciEpXG4gICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHN1YmRvbWFpblRvUmVnaXN0ZXIgPSBuZXdTdWJkb21haW5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSlcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgcmVnaXN0ZXJSZXN1bHQgPSBhd2FpdCByZWdpc3RlclJlc3BvbnNlLmpzb24oKSBhcyBSZWdpc3RlclJlc3BvbnNlXG4gICAgICAgIFxuICAgICAgICAvLyBVcGRhdGUgbG9jYWwgY29uZmlnIHdpdGggQVBJIGtleVxuICAgICAgICBhcGlLZXkgPSByZWdpc3RlclJlc3VsdC5hcGlLZXlcbiAgICAgICAgZXhpc3RpbmdTbHVnID0gcmVnaXN0ZXJSZXN1bHQuc2x1Z1xuICAgICAgICBleGlzdGluZ1N1YmRvbWFpbiA9IHJlZ2lzdGVyUmVzdWx0LnN1YmRvbWFpblxuICAgICAgICBcbiAgICAgICAgLy8gU2F2ZSB0aGUgdXBkYXRlZCBjb25maWdcbiAgICAgICAgY29uc3QgdXBkYXRlZENvbmZpZzogRGV2RG9jQ29uZmlnID0ge1xuICAgICAgICAgIC4uLmRldmRvY0NvbmZpZyxcbiAgICAgICAgICBwcm9qZWN0SWQ6IHJlZ2lzdGVyUmVzdWx0LnByb2plY3RJZCxcbiAgICAgICAgICBzbHVnOiByZWdpc3RlclJlc3VsdC5zbHVnLFxuICAgICAgICAgIHN1YmRvbWFpbjogcmVnaXN0ZXJSZXN1bHQuc3ViZG9tYWluLFxuICAgICAgICAgIGFwaUtleTogcmVnaXN0ZXJSZXN1bHQuYXBpS2V5LFxuICAgICAgICAgIHVybDogcmVnaXN0ZXJSZXN1bHQudXJsLFxuICAgICAgICB9XG4gICAgICAgIGZzLndyaXRlSnNvblN5bmMoZGV2ZG9jQ29uZmlnUGF0aCwgdXBkYXRlZENvbmZpZywgeyBzcGFjZXM6IDIgfSlcbiAgICAgICAgXG4gICAgICAgIGxvZ2dlci5zdWNjZXNzKGDinJMgU3ViZG9tYWluICR7cmVnaXN0ZXJSZXN1bHQuc3ViZG9tYWlufS5kZXZkb2Muc2ggcmVnaXN0ZXJlZCFgKVxuICAgICAgICBjb25zb2xlLmxvZygnJylcbiAgICAgICAgcmVnaXN0ZXJlZCA9IHRydWVcbiAgICAgICAgXG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHJlZ2lzdGVyIHN1YmRvbWFpbjogJHttZXNzYWdlfWApXG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgLy8gQ29sbGVjdCBhbGwgY29udGVudCBmaWxlc1xuICBsb2dnZXIuaW5mbygnQnVuZGxpbmcgY29udGVudC4uLicpXG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgY29sbGVjdEZpbGVzKHByb2plY3RSb290KVxuICBsb2dnZXIuc3VjY2Vzcyhg4pyTIEZvdW5kICR7ZmlsZXMubGVuZ3RofSBjb250ZW50IGZpbGVzYClcbiAgXG4gIC8vIENvbGxlY3QgYmluYXJ5IGFzc2V0c1xuICBjb25zdCBhc3NldHMgPSBhd2FpdCBjb2xsZWN0QXNzZXRzKHByb2plY3RSb290KVxuICBpZiAoYXNzZXRzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCB0b3RhbEFzc2V0U2l6ZSA9IGFzc2V0cy5yZWR1Y2UoKHN1bSwgYSkgPT4gc3VtICsgYS5zaXplLCAwKVxuICAgIGxvZ2dlci5zdWNjZXNzKGDinJMgRm91bmQgJHthc3NldHMubGVuZ3RofSBhc3NldHMgKCR7Zm9ybWF0U2l6ZSh0b3RhbEFzc2V0U2l6ZSl9KWApXG4gIH1cbiAgXG4gIC8vIENhbGN1bGF0ZSBidW5kbGUgc2l6ZVxuICBjb25zdCB0b3RhbFNpemUgPSBmaWxlcy5yZWR1Y2UoKHN1bSwgZikgPT4gc3VtICsgZi5jb250ZW50Lmxlbmd0aCwgMClcbiAgY29uc3Qgc2l6ZUtCID0gKHRvdGFsU2l6ZSAvIDEwMjQpLnRvRml4ZWQoMSlcbiAgbG9nZ2VyLmluZm8oYENvbnRlbnQgYnVuZGxlOiAke3NpemVLQn0gS0JgKVxuICBcbiAgLy8gVXBsb2FkIGJpbmFyeSBhc3NldHMgZmlyc3QgKHdpdGggcHJvZ3Jlc3MpXG4gIGlmIChhc3NldHMubGVuZ3RoID4gMCAmJiBleGlzdGluZ1NsdWcgJiYgYXBpS2V5KSB7XG4gICAgY29uc29sZS5sb2coJycpXG4gICAgbG9nZ2VyLmluZm8oJ1VwbG9hZGluZyBhc3NldHMuLi4nKVxuICAgIFxuICAgIGNvbnN0IGFzc2V0UmVzdWx0cyA9IGF3YWl0IHVwbG9hZEFzc2V0cyhhc3NldHMsIGFwaVVybCwgZXhpc3RpbmdTbHVnLCBhcGlLZXkpXG4gICAgY29uc3Qgc3VjY2Vzc0NvdW50ID0gYXNzZXRSZXN1bHRzLmZpbHRlcihyID0+IHIuc3VjY2VzcykubGVuZ3RoXG4gICAgY29uc3QgZmFpbENvdW50ID0gYXNzZXRSZXN1bHRzLmZpbHRlcihyID0+ICFyLnN1Y2Nlc3MpLmxlbmd0aFxuICAgIFxuICAgIGlmIChmYWlsQ291bnQgPiAwKSB7XG4gICAgICBsb2dnZXIud2FybihgJHtzdWNjZXNzQ291bnR9IGFzc2V0cyB1cGxvYWRlZCwgJHtmYWlsQ291bnR9IGZhaWxlZGApXG4gICAgfSBlbHNlIGlmIChzdWNjZXNzQ291bnQgPiAwKSB7XG4gICAgICBsb2dnZXIuc3VjY2Vzcyhg4pyTICR7c3VjY2Vzc0NvdW50fSBhc3NldHMgdXBsb2FkZWRgKVxuICAgIH1cbiAgfSBlbHNlIGlmIChhc3NldHMubGVuZ3RoID4gMCAmJiAhZXhpc3RpbmdTbHVnKSB7XG4gICAgbG9nZ2VyLmluZm8oJ0Fzc2V0cyB3aWxsIGJlIHVwbG9hZGVkIG9uIG5leHQgZGVwbG95IChhZnRlciBwcm9qZWN0IHJlZ2lzdHJhdGlvbiknKVxuICB9XG4gIFxuICAvLyBEZXBsb3kgY29udGVudCB0byBBUElcbiAgY29uc29sZS5sb2coJycpXG4gIGxvZ2dlci5pbmZvKCdVcGxvYWRpbmcgY29udGVudC4uLicpXG4gIFxuICB0cnkge1xuICAgIGludGVyZmFjZSBEZXBsb3lSZXNwb25zZSB7XG4gICAgICBzdWNjZXNzOiBib29sZWFuXG4gICAgICBzbHVnOiBzdHJpbmdcbiAgICAgIHVybDogc3RyaW5nXG4gICAgICBibG9iVXJsOiBzdHJpbmdcbiAgICAgIGlzVXBkYXRlOiBib29sZWFuXG4gICAgICBmaWxlc0NvdW50OiBudW1iZXJcbiAgICAgIGFwaUtleT86IHN0cmluZ1xuICAgICAgZXJyb3I/OiBzdHJpbmdcbiAgICB9XG4gICAgXG4gICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgfVxuICAgIFxuICAgIC8vIEFkZCBBUEkga2V5IGhlYWRlciBmb3IgdXBkYXRlc1xuICAgIGlmIChhcGlLZXkpIHtcbiAgICAgIGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHthcGlLZXl9YFxuICAgIH1cbiAgICBcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2FwaVVybH0vYXBpL2RlcGxveWAsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVycyxcbiAgICAgIHJlZGlyZWN0OiAnZm9sbG93JywgLy8gRm9sbG93IHJlZGlyZWN0c1xuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBuYW1lOiBjb25maWcubmFtZSB8fCAnTXkgRG9jdW1lbnRhdGlvbicsXG4gICAgICAgIHNsdWc6IGV4aXN0aW5nU2x1ZyxcbiAgICAgICAgZG9jc0pzb246IGNvbmZpZyxcbiAgICAgICAgZmlsZXMsXG4gICAgICAgIGFwaUtleSwgLy8gQWxzbyBzZW5kIGluIGJvZHkgYXMgZmFsbGJhY2tcbiAgICAgIH0pLFxuICAgIH0pXG4gICAgXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgY29uc3QgZXJyb3JEYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpLmNhdGNoKCgpID0+ICh7IGVycm9yOiAnVW5rbm93biBlcnJvcicgfSkpIGFzIHsgZXJyb3I/OiBzdHJpbmc7IGRldGFpbHM/OiBzdHJpbmcgfVxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3JEYXRhLmVycm9yIHx8IGBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfWBcbiAgICAgIGNvbnN0IGRldGFpbHMgPSBlcnJvckRhdGEuZGV0YWlscyA/IGBcXG4gICBEZXRhaWxzOiAke2Vycm9yRGF0YS5kZXRhaWxzfWAgOiAnJ1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Vycm9yTWVzc2FnZX0ke2RldGFpbHN9YClcbiAgICB9XG4gICAgXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIERlcGxveVJlc3BvbnNlXG4gICAgXG4gICAgLy8gU2F2ZSBwcm9qZWN0IGNvbmZpZyBmb3IgZnV0dXJlIHVwZGF0ZXNcbiAgICBjb25zdCBuZXdEZXZEb2NDb25maWc6IERldkRvY0NvbmZpZyA9IHtcbiAgICAgIHNsdWc6IHJlc3VsdC5zbHVnLFxuICAgICAgdXJsOiByZXN1bHQudXJsLFxuICAgICAgbGFzdERlcGxveWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgfVxuICAgIFxuICAgIC8vIFNhdmUgQVBJIGtleSAoZnJvbSByZXNwb25zZSBmb3IgbmV3IHByb2plY3RzLCBvciBleGlzdGluZyBmb3IgdXBkYXRlcylcbiAgICBpZiAocmVzdWx0LmFwaUtleSkge1xuICAgICAgbmV3RGV2RG9jQ29uZmlnLmFwaUtleSA9IHJlc3VsdC5hcGlLZXlcbiAgICB9IGVsc2UgaWYgKGFwaUtleSkge1xuICAgICAgbmV3RGV2RG9jQ29uZmlnLmFwaUtleSA9IGFwaUtleVxuICAgIH1cbiAgICBcbiAgICBmcy53cml0ZUpzb25TeW5jKGRldmRvY0NvbmZpZ1BhdGgsIG5ld0RldkRvY0NvbmZpZywgeyBzcGFjZXM6IDIgfSlcbiAgICBcbiAgICAvLyBTdWNjZXNzIG1lc3NhZ2VcbiAgICBjb25zb2xlLmxvZygnJylcbiAgICBsb2dnZXIuc3VjY2VzcygnRGVwbG95bWVudCBzdWNjZXNzZnVsIScpXG4gICAgY29uc29sZS5sb2coJycpXG4gICAgY29uc29sZS5sb2coYCAgWW91ciBkb2NzIGFyZSBsaXZlIGF0OmApXG4gICAgY29uc29sZS5sb2coYCAgJHtsb2dnZXIuY3lhbihyZXN1bHQudXJsKX1gKVxuICAgIGNvbnNvbGUubG9nKCcnKVxuICAgIFxuICAgIGlmIChyZXN1bHQuaXNVcGRhdGUpIHtcbiAgICAgIGxvZ2dlci5pbmZvKCdQcm9qZWN0IHVwZGF0ZWQgd2l0aCBuZXcgY29udGVudCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBQcm9qZWN0IHNsdWc6ICR7cmVzdWx0LnNsdWd9YClcbiAgICAgIGxvZ2dlci5pbmZvKCdSdW4gXCJkZXZkb2MgZGVwbG95XCIgYWdhaW4gdG8gdXBkYXRlJylcbiAgICAgIFxuICAgICAgLy8gU2hvdyBBUEkga2V5IHdhcm5pbmcgZm9yIG5ldyBwcm9qZWN0c1xuICAgICAgaWYgKHJlc3VsdC5hcGlLZXkpIHtcbiAgICAgICAgY29uc29sZS5sb2coJycpXG4gICAgICAgIGxvZ2dlci53YXJuKCfimqDvuI8gIFNhdmUgeW91ciBBUEkga2V5IGZvciBDSS9DRCBkZXBsb3ltZW50czonKVxuICAgICAgICBjb25zb2xlLmxvZyhgICAgICR7cmVzdWx0LmFwaUtleX1gKVxuICAgICAgICBjb25zb2xlLmxvZygnJylcbiAgICAgICAgbG9nZ2VyLmluZm8oJ0FQSSBrZXkgc2F2ZWQgdG8gLmRldmRvYy5qc29uIChhZGQgdG8gLmdpdGlnbm9yZSEpJylcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgZm9yIGRvbWFpbi5qc29uIGFuZCBzaG93IGN1c3RvbSBkb21haW4gc3RhdHVzXG4gICAgYXdhaXQgY2hlY2tDdXN0b21Eb21haW5TdGF0dXMocHJvamVjdFJvb3QsIGFwaVVybCwgYXBpS2V5IHx8IHJlc3VsdC5hcGlLZXkgfHwgJycpXG4gICAgXG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKVxuICAgIGxvZ2dlci5lcnJvcihgRGVwbG95bWVudCBmYWlsZWQ6ICR7bWVzc2FnZX1gKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG59XG5cbi8qKlxuICogQ29sbGVjdCBhbGwgTURYIGFuZCBjb250ZW50IGZpbGVzIGZyb20gdGhlIHByb2plY3RcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29sbGVjdEZpbGVzKHByb2plY3RSb290OiBzdHJpbmcpOiBQcm9taXNlPFByb2plY3RGaWxlW10+IHtcbiAgY29uc3QgZmlsZXM6IFByb2plY3RGaWxlW10gPSBbXVxuICBcbiAgLy8gRGlyZWN0b3JpZXMgdG8gc2NhblxuICBjb25zdCBzY2FuRGlycyA9IFtcbiAgICAnJywgLy8gUm9vdCBkaXJlY3RvcnkgKGZvciBpbmRleC5tZHgsIHF1aWNrc3RhcnQubWR4LCBldGMuKVxuICAgICdndWlkZXMnLFxuICAgICdlc3NlbnRpYWxzJyxcbiAgICAnY29tcG9uZW50cycsXG4gICAgJ2FwaS1yZWZlcmVuY2UnLFxuICAgICdjaGFuZ2Vsb2cnLFxuICBdXG4gIFxuICBmb3IgKGNvbnN0IGRpciBvZiBzY2FuRGlycykge1xuICAgIGNvbnN0IGZ1bGxEaXIgPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsIGRpcilcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZnVsbERpcikpIGNvbnRpbnVlXG4gICAgXG4gICAgYXdhaXQgc2NhbkRpcmVjdG9yeShmdWxsRGlyLCBwcm9qZWN0Um9vdCwgZmlsZXMpXG4gIH1cbiAgXG4gIC8vIEluY2x1ZGUgdGV4dC1iYXNlZCBhc3NldHMgZnJvbSBhc3NldHMgZm9sZGVyIChuZXcgY29udmVudGlvbilcbiAgY29uc3QgYXNzZXRzRGlyID0gcGF0aC5qb2luKHByb2plY3RSb290LCAnYXNzZXRzJylcbiAgaWYgKGZzLmV4aXN0c1N5bmMoYXNzZXRzRGlyKSkge1xuICAgIGF3YWl0IHNjYW5QdWJsaWNBc3NldHMoYXNzZXRzRGlyLCBwcm9qZWN0Um9vdCwgZmlsZXMpXG4gIH1cbiAgXG4gIC8vIEFsc28gaW5jbHVkZSBwdWJsaWMgYXNzZXRzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBjb25zdCBwdWJsaWNEaXIgPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsICdwdWJsaWMnKVxuICBpZiAoZnMuZXhpc3RzU3luYyhwdWJsaWNEaXIpKSB7XG4gICAgYXdhaXQgc2NhblB1YmxpY0Fzc2V0cyhwdWJsaWNEaXIsIHByb2plY3RSb290LCBmaWxlcylcbiAgfVxuICBcbiAgcmV0dXJuIGZpbGVzXG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgc2NhbiBhIGRpcmVjdG9yeSBmb3IgTURYIGZpbGVzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNjYW5EaXJlY3RvcnkoXG4gIGRpcjogc3RyaW5nLFxuICBwcm9qZWN0Um9vdDogc3RyaW5nLFxuICBmaWxlczogUHJvamVjdEZpbGVbXVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGl0ZW1zID0gZnMucmVhZGRpclN5bmMoZGlyKVxuICBcbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgLy8gU2tpcCBjb21tb24gZGlyZWN0b3JpZXNcbiAgICBpZiAoWydub2RlX21vZHVsZXMnLCAnZGlzdCcsICcubmV4dCcsICcuZ2l0JywgJ3B1YmxpYyddLmluY2x1ZGVzKGl0ZW0pKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBcbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihkaXIsIGl0ZW0pXG4gICAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKGZ1bGxQYXRoKVxuICAgIFxuICAgIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGF3YWl0IHNjYW5EaXJlY3RvcnkoZnVsbFBhdGgsIHByb2plY3RSb290LCBmaWxlcylcbiAgICB9IGVsc2UgaWYgKGl0ZW0uZW5kc1dpdGgoJy5tZHgnKSB8fCBpdGVtLmVuZHNXaXRoKCcubWQnKSkge1xuICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcGF0aC5yZWxhdGl2ZShwcm9qZWN0Um9vdCwgZnVsbFBhdGgpXG4gICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZ1bGxQYXRoLCAndXRmLTgnKVxuICAgICAgXG4gICAgICBmaWxlcy5wdXNoKHtcbiAgICAgICAgcGF0aDogcmVsYXRpdmVQYXRoLFxuICAgICAgICBjb250ZW50LFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTY2FuIHB1YmxpYyBhc3NldHMgKFNWRywgaW1hZ2VzKSAtIHRleHQtYmFzZWQgb25seSBmb3IgY29udGVudCBidW5kbGVcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2NhblB1YmxpY0Fzc2V0cyhcbiAgZGlyOiBzdHJpbmcsXG4gIHByb2plY3RSb290OiBzdHJpbmcsXG4gIGZpbGVzOiBQcm9qZWN0RmlsZVtdXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgaXRlbXMgPSBmcy5yZWFkZGlyU3luYyhkaXIpXG4gIFxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihkaXIsIGl0ZW0pXG4gICAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKGZ1bGxQYXRoKVxuICAgIFxuICAgIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGF3YWl0IHNjYW5QdWJsaWNBc3NldHMoZnVsbFBhdGgsIHByb2plY3RSb290LCBmaWxlcylcbiAgICB9IGVsc2UgaWYgKGl0ZW0uZW5kc1dpdGgoJy5zdmcnKSB8fCBpdGVtLmVuZHNXaXRoKCcuanNvbicpKSB7XG4gICAgICAvLyBPbmx5IGluY2x1ZGUgdGV4dC1iYXNlZCBhc3NldHMgaW4gY29udGVudCBidW5kbGVcbiAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUocHJvamVjdFJvb3QsIGZ1bGxQYXRoKVxuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmdWxsUGF0aCwgJ3V0Zi04JylcbiAgICAgIFxuICAgICAgZmlsZXMucHVzaCh7XG4gICAgICAgIHBhdGg6IHJlbGF0aXZlUGF0aCxcbiAgICAgICAgY29udGVudCxcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ29sbGVjdCBiaW5hcnkgYXNzZXRzIGZyb20gYXNzZXRzIGZvbGRlciAoY29udmVudGlvbjogL2Fzc2V0cylcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29sbGVjdEFzc2V0cyhwcm9qZWN0Um9vdDogc3RyaW5nKTogUHJvbWlzZTxBc3NldEZpbGVbXT4ge1xuICBjb25zdCBhc3NldHM6IEFzc2V0RmlsZVtdID0gW11cbiAgXG4gIC8vIENoZWNrIGFzc2V0cyBmb2xkZXIgZmlyc3QgKG5ldyBjb252ZW50aW9uKVxuICBjb25zdCBhc3NldHNEaXIgPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsICdhc3NldHMnKVxuICBpZiAoZnMuZXhpc3RzU3luYyhhc3NldHNEaXIpKSB7XG4gICAgYXdhaXQgc2NhbkJpbmFyeUFzc2V0cyhhc3NldHNEaXIsIHByb2plY3RSb290LCBhc3NldHMpXG4gIH1cbiAgXG4gIC8vIEFsc28gY2hlY2sgcHVibGljIGZvbGRlciBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgY29uc3QgcHVibGljRGlyID0gcGF0aC5qb2luKHByb2plY3RSb290LCAncHVibGljJylcbiAgaWYgKGZzLmV4aXN0c1N5bmMocHVibGljRGlyKSkge1xuICAgIGF3YWl0IHNjYW5CaW5hcnlBc3NldHMocHVibGljRGlyLCBwcm9qZWN0Um9vdCwgYXNzZXRzKVxuICB9XG4gIFxuICByZXR1cm4gYXNzZXRzXG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgc2NhbiBmb3IgYmluYXJ5IGFzc2V0c1xuICovXG5hc3luYyBmdW5jdGlvbiBzY2FuQmluYXJ5QXNzZXRzKFxuICBkaXI6IHN0cmluZyxcbiAgcHJvamVjdFJvb3Q6IHN0cmluZyxcbiAgYXNzZXRzOiBBc3NldEZpbGVbXVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGl0ZW1zID0gZnMucmVhZGRpclN5bmMoZGlyKVxuICBcbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4oZGlyLCBpdGVtKVxuICAgIGNvbnN0IHN0YXQgPSBmcy5zdGF0U3luYyhmdWxsUGF0aClcbiAgICBcbiAgICBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBhd2FpdCBzY2FuQmluYXJ5QXNzZXRzKGZ1bGxQYXRoLCBwcm9qZWN0Um9vdCwgYXNzZXRzKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBleHQgPSBwYXRoLmV4dG5hbWUoaXRlbSkudG9Mb3dlckNhc2UoKVxuICAgICAgaWYgKEJJTkFSWV9FWFRFTlNJT05TLmluY2x1ZGVzKGV4dCkpIHtcbiAgICAgICAgLy8gQ2hlY2sgc2l6ZSBsaW1pdFxuICAgICAgICBpZiAoc3RhdC5zaXplID4gTUFYX0FTU0VUX1NJWkUpIHtcbiAgICAgICAgICBsb2dnZXIud2FybihgU2tpcHBpbmcgJHtpdGVtfTogZXhjZWVkcyAyNU1CIGxpbWl0ICgke2Zvcm1hdFNpemUoc3RhdC5zaXplKX0pYClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKHByb2plY3RSb290LCBmdWxsUGF0aClcbiAgICAgICAgYXNzZXRzLnB1c2goe1xuICAgICAgICAgIHBhdGg6IHJlbGF0aXZlUGF0aCxcbiAgICAgICAgICBmdWxsUGF0aCxcbiAgICAgICAgICBzaXplOiBzdGF0LnNpemUsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVXBsb2FkIGFzc2V0cyB3aXRoIHByb2dyZXNzIHRyYWNraW5nXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVwbG9hZEFzc2V0cyhcbiAgYXNzZXRzOiBBc3NldEZpbGVbXSxcbiAgYXBpVXJsOiBzdHJpbmcsXG4gIHNsdWc6IHN0cmluZyxcbiAgYXBpS2V5OiBzdHJpbmdcbik6IFByb21pc2U8QXJyYXk8eyBmaWxlOiBzdHJpbmc7IHN1Y2Nlc3M6IGJvb2xlYW47IHVybD86IHN0cmluZzsgZXJyb3I/OiBzdHJpbmcgfT4+IHtcbiAgY29uc3QgcmVzdWx0czogQXJyYXk8eyBmaWxlOiBzdHJpbmc7IHN1Y2Nlc3M6IGJvb2xlYW47IHVybD86IHN0cmluZzsgZXJyb3I/OiBzdHJpbmcgfT4gPSBbXVxuICBcbiAgZm9yIChjb25zdCBhc3NldCBvZiBhc3NldHMpIHtcbiAgICBjb25zdCBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoYXNzZXQucGF0aClcbiAgICBcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgICAke2ZpbGVOYW1lfTogYClcbiAgICBcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdXBsb2FkQXNzZXRXaXRoUHJvZ3Jlc3MoXG4gICAgICAgIGFzc2V0LFxuICAgICAgICBhcGlVcmwsXG4gICAgICAgIHNsdWcsXG4gICAgICAgIGFwaUtleSxcbiAgICAgICAgKHByb2dyZXNzLCBsb2FkZWQsIHRvdGFsKSA9PiB7XG4gICAgICAgICAgcHJvY2Vzcy5zdGRvdXQuY2xlYXJMaW5lKDApXG4gICAgICAgICAgcHJvY2Vzcy5zdGRvdXQuY3Vyc29yVG8oMClcbiAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgICAke2ZpbGVOYW1lfTogJHtjcmVhdGVQcm9ncmVzc0Jhcihwcm9ncmVzcyl9ICR7Zm9ybWF0U2l6ZShsb2FkZWQpfS8ke2Zvcm1hdFNpemUodG90YWwpfWApXG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgIFxuICAgICAgcHJvY2Vzcy5zdGRvdXQuY2xlYXJMaW5lKDApXG4gICAgICBwcm9jZXNzLnN0ZG91dC5jdXJzb3JUbygwKVxuICAgICAgY29uc29sZS5sb2coYCAgJHtsb2dnZXIuZ3JlZW4oJ+KckycpfSAke2ZpbGVOYW1lfSAoJHtmb3JtYXRTaXplKGFzc2V0LnNpemUpfSlgKVxuICAgICAgXG4gICAgICByZXN1bHRzLnB1c2goeyBmaWxlOiBmaWxlTmFtZSwgc3VjY2VzczogdHJ1ZSwgdXJsOiByZXN1bHQudXJsIH0pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcbiAgICAgIFxuICAgICAgcHJvY2Vzcy5zdGRvdXQuY2xlYXJMaW5lKDApXG4gICAgICBwcm9jZXNzLnN0ZG91dC5jdXJzb3JUbygwKVxuICAgICAgY29uc29sZS5sb2coYCAgJHtsb2dnZXIucmVkKCfinJcnKX0gJHtmaWxlTmFtZX06ICR7bWVzc2FnZX1gKVxuICAgICAgXG4gICAgICByZXN1bHRzLnB1c2goeyBmaWxlOiBmaWxlTmFtZSwgc3VjY2VzczogZmFsc2UsIGVycm9yOiBtZXNzYWdlIH0pXG4gICAgfVxuICB9XG4gIFxuICByZXR1cm4gcmVzdWx0c1xufVxuXG4vKipcbiAqIFVwbG9hZCBhIHNpbmdsZSBhc3NldCB3aXRoIHByb2dyZXNzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVwbG9hZEFzc2V0V2l0aFByb2dyZXNzKFxuICBhc3NldDogQXNzZXRGaWxlLFxuICBhcGlVcmw6IHN0cmluZyxcbiAgc2x1Zzogc3RyaW5nLFxuICBhcGlLZXk6IHN0cmluZyxcbiAgb25Qcm9ncmVzczogKHByb2dyZXNzOiBudW1iZXIsIGxvYWRlZDogbnVtYmVyLCB0b3RhbDogbnVtYmVyKSA9PiB2b2lkXG4pOiBQcm9taXNlPHsgdXJsOiBzdHJpbmcgfT4ge1xuICBjb25zdCBmaWxlQnVmZmVyID0gZnMucmVhZEZpbGVTeW5jKGFzc2V0LmZ1bGxQYXRoKVxuICBjb25zdCBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoYXNzZXQucGF0aClcbiAgXG4gIC8vIEJ1aWxkIG11bHRpcGFydCBmb3JtIGRhdGFcbiAgY29uc3QgYm91bmRhcnkgPSBgLS0tLURldkRvY0RlcGxveSR7RGF0ZS5ub3coKX1gXG4gIGNvbnN0IENSTEYgPSAnXFxyXFxuJ1xuICBcbiAgY29uc3QgaGVhZGVyID0gW1xuICAgIGAtLSR7Ym91bmRhcnl9YCxcbiAgICBgQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPVwiZmlsZVwiOyBmaWxlbmFtZT1cIiR7ZmlsZU5hbWV9XCJgLFxuICAgIGBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbWAsXG4gICAgJycsXG4gICAgJydcbiAgXS5qb2luKENSTEYpXG4gIFxuICBjb25zdCBzbHVnUGFydCA9IFtcbiAgICAnJyxcbiAgICBgLS0ke2JvdW5kYXJ5fWAsXG4gICAgYENvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT1cInNsdWdcImAsXG4gICAgJycsXG4gICAgc2x1ZyxcbiAgICAnJ1xuICBdLmpvaW4oQ1JMRilcbiAgXG4gIGNvbnN0IHBhdGhQYXJ0ID0gW1xuICAgIGAtLSR7Ym91bmRhcnl9YCxcbiAgICBgQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPVwicGF0aFwiYCxcbiAgICAnJyxcbiAgICBhc3NldC5wYXRoLnJlcGxhY2UoL15wdWJsaWNcXC8vLCAnJyksIC8vIFJlbW92ZSBwdWJsaWMvIHByZWZpeFxuICAgICcnXG4gIF0uam9pbihDUkxGKVxuICBcbiAgY29uc3QgZm9vdGVyID0gYCR7Q1JMRn0tLSR7Ym91bmRhcnl9LS0ke0NSTEZ9YFxuICBcbiAgY29uc3QgaGVhZGVyQnVmZmVyID0gQnVmZmVyLmZyb20oaGVhZGVyKVxuICBjb25zdCBzbHVnQnVmZmVyID0gQnVmZmVyLmZyb20oc2x1Z1BhcnQpXG4gIGNvbnN0IHBhdGhCdWZmZXIgPSBCdWZmZXIuZnJvbShwYXRoUGFydClcbiAgY29uc3QgZm9vdGVyQnVmZmVyID0gQnVmZmVyLmZyb20oZm9vdGVyKVxuICBcbiAgY29uc3QgdG90YWxTaXplID0gaGVhZGVyQnVmZmVyLmxlbmd0aCArIGZpbGVCdWZmZXIubGVuZ3RoICsgc2x1Z0J1ZmZlci5sZW5ndGggKyBwYXRoQnVmZmVyLmxlbmd0aCArIGZvb3RlckJ1ZmZlci5sZW5ndGhcbiAgY29uc3QgYm9keSA9IEJ1ZmZlci5jb25jYXQoW2hlYWRlckJ1ZmZlciwgZmlsZUJ1ZmZlciwgc2x1Z0J1ZmZlciwgcGF0aEJ1ZmZlciwgZm9vdGVyQnVmZmVyXSlcbiAgXG4gIC8vIFNpbXVsYXRlIHByb2dyZXNzXG4gIGxldCB1cGxvYWRlZCA9IDBcbiAgY29uc3QgY2h1bmtTaXplID0gTWF0aC5jZWlsKHRvdGFsU2l6ZSAvIDIwKVxuICBcbiAgY29uc3QgcHJvZ3Jlc3NJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICBpZiAodXBsb2FkZWQgPCB0b3RhbFNpemUgKiAwLjkpIHtcbiAgICAgIHVwbG9hZGVkID0gTWF0aC5taW4odXBsb2FkZWQgKyBjaHVua1NpemUsIHRvdGFsU2l6ZSAqIDAuOSlcbiAgICAgIG9uUHJvZ3Jlc3ModXBsb2FkZWQgLyB0b3RhbFNpemUsIHVwbG9hZGVkLCB0b3RhbFNpemUpXG4gICAgfVxuICB9LCA1MClcbiAgXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHthcGlVcmx9L2FwaS9hc3NldHMvdXBsb2FkYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiBgbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JHtib3VuZGFyeX1gLFxuICAgICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHthcGlLZXl9YCxcbiAgICAgIH0sXG4gICAgICBib2R5LFxuICAgIH0pXG4gICAgXG4gICAgY2xlYXJJbnRlcnZhbChwcm9ncmVzc0ludGVydmFsKVxuICAgIG9uUHJvZ3Jlc3MoMSwgdG90YWxTaXplLCB0b3RhbFNpemUpXG4gICAgXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgY29uc3QgZXJyb3IgPSBhd2FpdCByZXNwb25zZS5qc29uKCkuY2F0Y2goKCkgPT4gKHsgZXJyb3I6ICdVcGxvYWQgZmFpbGVkJyB9KSkgYXMgeyBlcnJvcj86IHN0cmluZyB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IuZXJyb3IgfHwgYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9YClcbiAgICB9XG4gICAgXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIHsgdXJsOiBzdHJpbmcgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjbGVhckludGVydmFsKHByb2dyZXNzSW50ZXJ2YWwpXG4gICAgdGhyb3cgZXJyb3JcbiAgfVxufVxuXG4vKipcbiAqIEZvcm1hdCBmaWxlIHNpemUgZm9yIGRpc3BsYXlcbiAqL1xuZnVuY3Rpb24gZm9ybWF0U2l6ZShieXRlczogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKGJ5dGVzIDwgMTAyNCkgcmV0dXJuIGAke2J5dGVzfSBCYFxuICBpZiAoYnl0ZXMgPCAxMDI0ICogMTAyNCkgcmV0dXJuIGAkeyhieXRlcyAvIDEwMjQpLnRvRml4ZWQoMSl9IEtCYFxuICByZXR1cm4gYCR7KGJ5dGVzIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCgyKX0gTUJgXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgcHJvZ3Jlc3MgYmFyIHN0cmluZ1xuICovXG5mdW5jdGlvbiBjcmVhdGVQcm9ncmVzc0Jhcihwcm9ncmVzczogbnVtYmVyLCB3aWR0aDogbnVtYmVyID0gMzApOiBzdHJpbmcge1xuICBjb25zdCBmaWxsZWQgPSBNYXRoLnJvdW5kKHdpZHRoICogcHJvZ3Jlc3MpXG4gIGNvbnN0IGVtcHR5ID0gd2lkdGggLSBmaWxsZWRcbiAgY29uc3QgYmFyID0gJ+KWiCcucmVwZWF0KGZpbGxlZCkgKyAn4paRJy5yZXBlYXQoZW1wdHkpXG4gIGNvbnN0IHBlcmNlbnRhZ2UgPSBNYXRoLnJvdW5kKHByb2dyZXNzICogMTAwKVxuICByZXR1cm4gYFske2Jhcn1dICR7cGVyY2VudGFnZX0lYFxufVxuIl19
|
|
682
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS9jb21tYW5kcy9kZXBsb3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnUUEsd0JBNFJDO0FBNWhCRCxnREFBdUI7QUFDdkIsd0RBQXlCO0FBQ3pCLHlDQUF5RDtBQUN6RCwrQ0FBMkM7QUFDM0MsK0NBQWlEO0FBRWpELHVCQUF1QjtBQUN2QixNQUFNLGNBQWMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQTtBQUV2QywrQ0FBK0M7QUFDL0MsTUFBTSxpQkFBaUIsR0FBRztJQUN4QixNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07SUFDaEQsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNO0lBQ3ZCLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTTtJQUN0QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTTtJQUN6QyxNQUFNO0NBQ1AsQ0FBQTtBQUVELG9DQUFvQztBQUNwQyxNQUFNLFVBQVUsR0FBMkI7SUFDekMsU0FBUztJQUNULE1BQU0sRUFBRSxXQUFXO0lBQ25CLE1BQU0sRUFBRSxZQUFZO0lBQ3BCLE9BQU8sRUFBRSxZQUFZO0lBQ3JCLE1BQU0sRUFBRSxXQUFXO0lBQ25CLE9BQU8sRUFBRSxZQUFZO0lBQ3JCLE1BQU0sRUFBRSxjQUFjO0lBQ3RCLE1BQU0sRUFBRSxlQUFlO0lBQ3ZCLFNBQVM7SUFDVCxNQUFNLEVBQUUsV0FBVztJQUNuQixPQUFPLEVBQUUsWUFBWTtJQUNyQixNQUFNLEVBQUUsaUJBQWlCO0lBQ3pCLFFBQVE7SUFDUixNQUFNLEVBQUUsWUFBWTtJQUNwQixNQUFNLEVBQUUsV0FBVztJQUNuQixNQUFNLEVBQUUsV0FBVztJQUNuQixRQUFRO0lBQ1IsT0FBTyxFQUFFLFdB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TUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNsRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQTtJQUM3QyxPQUFPLElBQUksR0FBRyxLQUFLLFVBQVUsR0FBRyxDQUFBO0FBQ2xDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHsgbG9hZENvbmZpZywgdmFsaWRhdGVDb25maWcgfSBmcm9tICcuLi8uLi9jb25maWcnXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXInXG5pbXBvcnQgeyBERUZBVUxUX0FQSV9VUkwgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnXG5cbi8vIE1heCBhc3NldCBzaXplOiAyNU1CXG5jb25zdCBNQVhfQVNTRVRfU0laRSA9IDI1ICogMTAyNCAqIDEwMjRcblxuLy8gQmluYXJ5IGFzc2V0IGV4dGVuc2lvbnMgdG8gdXBsb2FkIHNlcGFyYXRlbHlcbmNvbnN0IEJJTkFSWV9FWFRFTlNJT05TID0gW1xuICAnLnBuZycsICcuanBnJywgJy5qcGVnJywgJy5naWYnLCAnLndlYnAnLCAnLmljbycsXG4gICcubXA0JywgJy53ZWJtJywgJy5tb3YnLFxuICAnLm1wMycsICcud2F2JywgJy5vZ2cnLFxuICAnLndvZmYnLCAnLndvZmYyJywgJy50dGYnLCAnLm90ZicsICcuZW90JyxcbiAgJy5wZGYnLFxuXVxuXG4vLyBNYXAgZmlsZSBleHRlbnNpb25zIHRvIE1JTUUgdHlwZXNcbmNvbnN0IE1JTUVfVFlQRVM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIC8vIEltYWdlc1xuICAnLnBuZyc6ICdpbWFnZS9wbmcnLFxuICAnLmpwZyc6ICdpbWFnZS9qcGVnJyxcbiAgJy5qcGVnJzogJ2ltYWdlL2pwZWcnLFxuICAnLmdpZic6ICdpbWFnZS9naWYnLFxuICAnLndlYnAnOiAnaW1hZ2Uvd2VicCcsXG4gICcuaWNvJzogJ2ltYWdlL3gtaWNvbicsXG4gICcuc3ZnJzogJ2ltYWdlL3N2Zyt4bWwnLFxuICAvLyBWaWRlb3NcbiAgJy5tcDQnOiAndmlkZW8vbXA0JyxcbiAgJy53ZWJtJzogJ3ZpZGVvL3dlYm0nLFxuICAnLm1vdic6ICd2aWRlby9xdWlja3RpbWUnLFxuICAvLyBBdWRpb1xuICAnLm1wMyc6ICdhdWRpby9tcGVnJyxcbiAgJy53YXYnOiAnYXVkaW8vd2F2JyxcbiAgJy5vZ2cnOiAnYXVkaW8vb2dnJyxcbiAgLy8gRm9udHNcbiAgJy53b2ZmJzogJ2ZvbnQvd29mZicsXG4gICcud29mZjInOiAnZm9udC93b2ZmMicsXG4gICcudHRmJzogJ2ZvbnQvdHRmJyxcbiAgJy5vdGYnOiAnZm9udC9vdGYnLFxuICAnLmVvdCc6ICdhcHBsaWNhdGlvbi92bmQubXMtZm9udG9iamVjdCcsXG4gIC8vIERvY3VtZW50c1xuICAnLnBkZic6ICdhcHBsaWNhdGlvbi9wZGYnLFxufVxuXG4vKipcbiAqIEdldCBNSU1FIHR5cGUgZnJvbSBmaWxlIGV4dGVuc2lvblxuICovXG5mdW5jdGlvbiBnZXRNaW1lVHlwZShmaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZXh0ID0gcGF0aC5leHRuYW1lKGZpbGVQYXRoKS50b0xvd2VyQ2FzZSgpXG4gIHJldHVybiBNSU1FX1RZUEVTW2V4dF0gfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbn1cblxuaW50ZXJmYWNlIERlcGxveU9wdGlvbnMge1xuICB1cmw/OiBzdHJpbmdcbiAgYXBpS2V5Pzogc3RyaW5nXG59XG5cbmludGVyZmFjZSBQcm9qZWN0RmlsZSB7XG4gIHBhdGg6IHN0cmluZ1xuICBjb250ZW50OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIEFzc2V0RmlsZSB7XG4gIHBhdGg6IHN0cmluZ1xuICBmdWxsUGF0aDogc3RyaW5nXG4gIHNpemU6IG51bWJlclxufVxuXG5pbnRlcmZhY2UgRGV2RG9jQ29uZmlnIHtcbiAgcHJvamVjdElkPzogc3RyaW5nXG4gIG5hbWU/OiBzdHJpbmdcbiAgc2x1Zz86IHN0cmluZ1xuICBzdWJkb21haW4/OiBzdHJpbmdcbiAgYXBpS2V5Pzogc3RyaW5nXG4gIHVybD86IHN0cmluZ1xuICBsYXN0RGVwbG95ZWQ/OiBzdHJpbmdcbiAgY3JlYXRlZEF0Pzogc3RyaW5nXG59XG5cbmludGVyZmFjZSBSZWdpc3RlclJlc3BvbnNlIHtcbiAgc3VjY2VzczogYm9vbGVhblxuICBwcm9qZWN0SWQ6IHN0cmluZ1xuICBzbHVnOiBzdHJpbmdcbiAgc3ViZG9tYWluOiBzdHJpbmdcbiAgYXBpS2V5OiBzdHJpbmdcbiAgdXJsOiBzdHJpbmdcbiAgZXJyb3I/OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIENoZWNrU3ViZG9tYWluUmVzcG9uc2Uge1xuICBhdmFpbGFibGU6IGJvb2xlYW5cbiAgZXJyb3I/OiBzdHJpbmdcbiAgc3VnZ2VzdGlvbj86IHN0cmluZ1xufVxuXG4vLyBTaW1wbGUgcHJvbXB0IGhlbHBlciB1c2luZyByZWFkbGluZVxuYXN5bmMgZnVuY3Rpb24gcHJvbXB0KHF1ZXN0aW9uOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlYWRsaW5lID0gYXdhaXQgaW1wb3J0KCdyZWFkbGluZScpXG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHtcbiAgICBpbnB1dDogcHJvY2Vzcy5zdGRpbixcbiAgICBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0LFxuICB9KVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IGRlZmF1bHRIaW50ID0gZGVmYXVsdFZhbHVlID8gYCAoJHtkZWZhdWx0VmFsdWV9KWAgOiAnJ1xuICAgIHJsLnF1ZXN0aW9uKGAke3F1ZXN0aW9ufSR7ZGVmYXVsdEhpbnR9OiBgLCAoYW5zd2VyKSA9PiB7XG4gICAgICBybC5jbG9zZSgpXG4gICAgICByZXNvbHZlKGFuc3dlci50cmltKCkgfHwgZGVmYXVsdFZhbHVlIHx8ICcnKVxuICAgIH0pXG4gIH0pXG59XG5cbi8qKlxuICogQ2hlY2sgc3ViZG9tYWluIGF2YWlsYWJpbGl0eSB2aWEgQVBJXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNoZWNrU3ViZG9tYWluQXZhaWxhYmlsaXR5KFxuICBzdWJkb21haW46IHN0cmluZyxcbiAgYXBpVXJsOiBzdHJpbmdcbik6IFByb21pc2U8Q2hlY2tTdWJkb21haW5SZXNwb25zZT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7YXBpVXJsfS9hcGkvc3ViZG9tYWlucy9jaGVja2AsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgc3ViZG9tYWluIH0pLFxuICAgIH0pXG4gICAgXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIENoZWNrU3ViZG9tYWluUmVzcG9uc2VcbiAgICByZXR1cm4gcmVzdWx0XG4gIH0gY2F0Y2gge1xuICAgIC8vIElmIEFQSSBpcyB1bmF2YWlsYWJsZSwgYXNzdW1lIGF2YWlsYWJsZSAod2lsbCBmYWlsIGF0IHJlZ2lzdHJhdGlvbiBpZiBub3QpXG4gICAgcmV0dXJuIHsgYXZhaWxhYmxlOiB0cnVlIH1cbiAgfVxufVxuXG4vKipcbiAqIEJhc2ljIHN1YmRvbWFpbiBmb3JtYXQgdmFsaWRhdGlvblxuICovXG5mdW5jdGlvbiBpc1ZhbGlkU3ViZG9tYWluRm9ybWF0KHN1YmRvbWFpbjogc3RyaW5nKTogeyB2YWxpZDogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmcgfSB7XG4gIGlmICghc3ViZG9tYWluKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ1N1YmRvbWFpbiBpcyByZXF1aXJlZCcgfVxuICB9XG4gIFxuICBpZiAoc3ViZG9tYWluLmxlbmd0aCA8IDMpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiAnU3ViZG9tYWluIG11c3QgYmUgYXQgbGVhc3QgMyBjaGFyYWN0ZXJzJyB9XG4gIH1cbiAgXG4gIGlmIChzdWJkb21haW4ubGVuZ3RoID4gNjMpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiAnU3ViZG9tYWluIG11c3QgYmUgNjMgY2hhcmFjdGVycyBvciBsZXNzJyB9XG4gIH1cbiAgXG4gIGlmICghL15bYS16MC05XShbYS16MC05LV0qW2EtejAtOV0pPyQvLnRlc3Qoc3ViZG9tYWluKSkge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdTdWJkb21haW4gbXVzdCBzdGFydCBhbmQgZW5kIHdpdGggYWxwaGFudW1lcmljLCBjYW4gY29udGFpbiBoeXBoZW5zJyB9XG4gIH1cbiAgXG4gIGlmICgvLS0vLnRlc3Qoc3ViZG9tYWluKSkge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdTdWJkb21haW4gY2Fubm90IGNvbnRhaW4gY29uc2VjdXRpdmUgaHlwaGVucycgfVxuICB9XG4gIFxuICByZXR1cm4geyB2YWxpZDogdHJ1ZSB9XG59XG5cbmludGVyZmFjZSBEb21haW5Db25maWcge1xuICBjdXN0b21Eb21haW46IHN0cmluZ1xuICBzZW8/OiB7XG4gICAgY2Fub25pY2FsPzogc3RyaW5nXG4gIH1cbn1cblxuaW50ZXJmYWNlIERvbWFpblN0YXR1c1Jlc3BvbnNlIHtcbiAgaGFzQ3VzdG9tRG9tYWluOiBib29sZWFuXG4gIGRvbWFpbj86IHN0cmluZ1xuICBzdGF0dXM/OiBzdHJpbmdcbiAgY3VzdG9tVXJsPzogc3RyaW5nXG4gIG1lc3NhZ2U/OiBzdHJpbmdcbiAgbmV4dFN0ZXA/OiBzdHJpbmdcbn1cblxuLyoqXG4gKiBDaGVjayBmb3IgZG9tYWluLmpzb24gYW5kIGRpc3BsYXkgY3VzdG9tIGRvbWFpbiBzdGF0dXNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2hlY2tDdXN0b21Eb21haW5TdGF0dXMoXG4gIHByb2plY3RSb290OiBzdHJpbmcsXG4gIGFwaVVybDogc3RyaW5nLFxuICBhcGlLZXk6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIENoZWNrIGlmIGRvbWFpbi5qc29uIGV4aXN0c1xuICBjb25zdCBkb21haW5Db25maWdQYXRoID0gcGF0aC5qb2luKHByb2plY3RSb290LCAnZG9tYWluLmpzb24nKVxuICBcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGRvbWFpbkNvbmZpZ1BhdGgpKSB7XG4gICAgcmV0dXJuIC8vIE5vIGRvbWFpbi5qc29uLCBub3RoaW5nIHRvIGRvXG4gIH1cbiAgXG4gIGxldCBkb21haW5Db25maWc6IERvbWFpbkNvbmZpZ1xuICB0cnkge1xuICAgIGRvbWFpbkNvbmZpZyA9IGZzLnJlYWRKc29uU3luYyhkb21haW5Db25maWdQYXRoKSBhcyBEb21haW5Db25maWdcbiAgfSBjYXRjaCB7XG4gICAgbG9nZ2VyLndhcm4oJ0ZvdW5kIGRvbWFpbi5qc29uIGJ1dCBmYWlsZWQgdG8gcGFyc2UgaXQnKVxuICAgIHJldHVyblxuICB9XG4gIFxuICBpZiAoIWRvbWFpbkNvbmZpZy5jdXN0b21Eb21haW4pIHtcbiAgICByZXR1cm5cbiAgfVxuICBcbiAgY29uc29sZS5sb2coJycpXG4gIGxvZ2dlci5pbmZvKGBDdXN0b20gZG9tYWluIGNvbmZpZ3VyZWQ6ICR7ZG9tYWluQ29uZmlnLmN1c3RvbURvbWFpbn1gKVxuICBcbiAgLy8gQ2hlY2sgZG9tYWluIHN0YXR1cyB2aWEgQVBJXG4gIGlmICghYXBpS2V5KSB7XG4gICAgbG9nZ2VyLmluZm8oJ1J1biBcImRldmRvYyBkb21haW4gc3RhdHVzXCIgdG8gY2hlY2sgRE5TIGNvbmZpZ3VyYXRpb24nKVxuICAgIHJldHVyblxuICB9XG4gIFxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7YXBpVXJsfS9hcGkvZG9tYWlucy9zdGF0dXNgLCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHthcGlLZXl9YCxcbiAgICAgIH0sXG4gICAgfSlcbiAgICBcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgXG4gICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIERvbWFpblN0YXR1c1Jlc3BvbnNlXG4gICAgXG4gICAgaWYgKCFzdGF0dXMuaGFzQ3VzdG9tRG9tYWluKSB7XG4gICAgICAvLyBEb21haW4gaW4gY29uZmlnIGJ1dCBub3QgcmVnaXN0ZXJlZCB5ZXRcbiAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgICAgbG9nZ2VyLmluZm8oJ0N1c3RvbSBkb21haW4gbm90IHlldCByZWdpc3RlcmVkLicpXG4gICAgICBsb2dnZXIuaW5mbygnUnVuIFwiZGV2ZG9jIGRvbWFpbiBhZGQgJyArIGRvbWFpbkNvbmZpZy5jdXN0b21Eb21haW4gKyAnXCIgdG8gc2V0IGl0IHVwJylcbiAgICB9IGVsc2UgaWYgKHN0YXR1cy5zdGF0dXMgPT09ICdhY3RpdmUnKSB7XG4gICAgICBjb25zb2xlLmxvZygnJylcbiAgICAgIGNvbnNvbGUubG9nKGAgIEFsc28gbGl2ZSBhdDogJHtsb2dnZXIuY3lhbihzdGF0dXMuY3VzdG9tVXJsIHx8IGBodHRwczovLyR7c3RhdHVzLmRvbWFpbn1gKX1gKVxuICAgIH0gZWxzZSBpZiAoc3RhdHVzLnN0YXR1cyA9PT0gJ3BlbmRpbmcnKSB7XG4gICAgICBjb25zb2xlLmxvZygnJylcbiAgICAgIGxvZ2dlci53YXJuKCdDdXN0b20gZG9tYWluIHBlbmRpbmcgRE5TIGNvbmZpZ3VyYXRpb24nKVxuICAgICAgbG9nZ2VyLmluZm8oJ1J1biBcImRldmRvYyBkb21haW4gc3RhdHVzXCIgZm9yIEROUyBzZXR1cCBpbnN0cnVjdGlvbnMnKVxuICAgIH0gZWxzZSBpZiAoc3RhdHVzLnN0YXR1cyA9PT0gJ2Ruc192ZXJpZmllZCcgfHwgc3RhdHVzLnN0YXR1cyA9PT0gJ3NzbF9wcm92aXNpb25pbmcnKSB7XG4gICAgICBjb25zb2xlLmxvZygnJylcbiAgICAgIGxvZ2dlci5pbmZvKCdDdXN0b20gZG9tYWluIEROUyB2ZXJpZmllZCwgU1NMIGNlcnRpZmljYXRlIHByb3Zpc2lvbmluZy4uLicpXG4gICAgfVxuICAgIFxuICB9IGNhdGNoIHtcbiAgICAvLyBJZ25vcmUgZXJyb3JzLCBkb21haW4gc3RhdHVzIGlzIGluZm9ybWF0aW9uYWxcbiAgfVxufVxuXG4vKipcbiAqIERlcGxveSBkb2N1bWVudGF0aW9uIHRvIERldkRvYyBwbGF0Zm9ybVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVwbG95KG9wdGlvbnM6IERlcGxveU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcHJvamVjdFJvb3QgPSBwcm9jZXNzLmN3ZCgpXG4gIGNvbnN0IGFwaVVybCA9IG9wdGlvbnMudXJsIHx8IHByb2Nlc3MuZW52LkRFVkRPQ19BUElfVVJMIHx8IERFRkFVTFRfQVBJX1VSTFxuICBcbiAgbG9nZ2VyLmluZm8oJ0RlcGxveWluZyB0byBEZXZEb2MuLi5cXG4nKVxuICBcbiAgLy8gQ2hlY2sgZm9yIGRvY3MuanNvblxuICBjb25zdCBjb25maWdQYXRoID0gcGF0aC5qb2luKHByb2plY3RSb290LCAnZG9jcy5qc29uJylcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGNvbmZpZ1BhdGgpKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdkb2NzLmpzb24gbm90IGZvdW5kIGluIGN1cnJlbnQgZGlyZWN0b3J5JylcbiAgICBsb2dnZXIuaW5mbygnTWFrZSBzdXJlIHlvdSBhcmUgaW4gYSBEZXZEb2MgZG9jdW1lbnRhdGlvbiBwcm9qZWN0IGRpcmVjdG9yeScpXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbiAgXG4gIC8vIExvYWQgYW5kIHZhbGlkYXRlIGNvbmZpZ3VyYXRpb25cbiAgbGV0IGNvbmZpZzogUmV0dXJuVHlwZTx0eXBlb2YgbG9hZENvbmZpZz4gZXh0ZW5kcyBQcm9taXNlPGluZmVyIFQ+ID8gVCA6IG5ldmVyXG4gIHRyeSB7XG4gICAgY29uZmlnID0gYXdhaXQgbG9hZENvbmZpZyhwcm9qZWN0Um9vdClcbiAgICBjb25zdCB2YWxpZGF0aW9uID0gdmFsaWRhdGVDb25maWcoY29uZmlnKVxuICAgIFxuICAgIGlmICghdmFsaWRhdGlvbi52YWxpZCkge1xuICAgICAgbG9nZ2VyLmVycm9yKCdJbnZhbGlkIGRvY3MuanNvbiBjb25maWd1cmF0aW9uOicpXG4gICAgICB2YWxpZGF0aW9uLmVycm9ycy5mb3JFYWNoKGVyciA9PiBsb2dnZXIuZXJyb3IoYCAgLSAke2Vycn1gKSlcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH1cbiAgICBcbiAgICBsb2dnZXIuc3VjY2Vzcyhg4pyTIENvbmZpZ3VyYXRpb24gdmFsaWQ6ICR7Y29uZmlnLm5hbWUgfHwgJ1VudGl0bGVkJ31gKVxuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcbiAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBsb2FkIGNvbmZpZ3VyYXRpb246ICR7bWVzc2FnZX1gKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG4gIFxuICAvLyBDaGVjayBmb3IgZXhpc3RpbmcgcHJvamVjdCBjb25maWdcbiAgY29uc3QgZGV2ZG9jQ29uZmlnUGF0aCA9IHBhdGguam9pbihwcm9qZWN0Um9vdCwgJy5kZXZkb2MuanNvbicpXG4gIGxldCBkZXZkb2NDb25maWc6IERldkRvY0NvbmZpZyB8IG51bGwgPSBudWxsXG4gIGxldCBleGlzdGluZ1NsdWc6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gIGxldCBleGlzdGluZ0FwaUtleTogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgbGV0IGV4aXN0aW5nU3ViZG9tYWluOiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICBcbiAgaWYgKGZzLmV4aXN0c1N5bmMoZGV2ZG9jQ29uZmlnUGF0aCkpIHtcbiAgICB0cnkge1xuICAgICAgZGV2ZG9jQ29uZmlnID0gZnMucmVhZEpzb25TeW5jKGRldmRvY0NvbmZpZ1BhdGgpIGFzIERldkRvY0NvbmZpZ1xuICAgICAgZXhpc3RpbmdTbHVnID0gZGV2ZG9jQ29uZmlnLnNsdWcgfHwgbnVsbFxuICAgICAgZXhpc3RpbmdBcGlLZXkgPSBkZXZkb2NDb25maWcuYXBpS2V5IHx8IG51bGxcbiAgICAgIGV4aXN0aW5nU3ViZG9tYWluID0gZGV2ZG9jQ29uZmlnLnN1YmRvbWFpbiB8fCBudWxsXG4gICAgICBpZiAoZXhpc3RpbmdTbHVnICYmIGV4aXN0aW5nQXBpS2V5KSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBEZXBsb3lpbmcgcHJvamVjdDogJHtleGlzdGluZ1NsdWd9YClcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIElnbm9yZSBlcnJvcnMgcmVhZGluZyAuZGV2ZG9jLmpzb25cbiAgICB9XG4gIH1cbiAgXG4gIC8vIEdldCBBUEkga2V5IGZyb20gb3B0aW9ucywgZW52IHZhciwgb3IgLmRldmRvYy5qc29uXG4gIGxldCBhcGlLZXkgPSBvcHRpb25zLmFwaUtleSB8fCBwcm9jZXNzLmVudi5ERVZET0NfQVBJX0tFWSB8fCBleGlzdGluZ0FwaUtleVxuICBcbiAgLy8gSWYgbm8gQVBJIGtleSwgdGhpcyBpcyBhIGZpcnN0IGRlcGxveSAtIG5lZWQgdG8gcmVnaXN0ZXIgdGhlIHN1YmRvbWFpbiBmaXJzdFxuICBpZiAoIWFwaUtleSkge1xuICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgc3ViZG9tYWluIGZyb20gaW5pdFxuICAgIGlmICghZXhpc3RpbmdTdWJkb21haW4pIHtcbiAgICAgIGxvZ2dlci5lcnJvcignTm8gcHJvamVjdCBjb25maWd1cmF0aW9uIGZvdW5kLicpXG4gICAgICBjb25zb2xlLmxvZygnJylcbiAgICAgIGxvZ2dlci5pbmZvKCdSdW4gXCJkZXZkb2MgaW5pdFwiIGZpcnN0IHRvIGNvbmZpZ3VyZSB5b3VyIHByb2plY3QnKVxuICAgICAgbG9nZ2VyLmluZm8oJ09yIHByb3ZpZGUgYW4gQVBJIGtleSB2aWEgLS1hcGkta2V5IGZsYWcgb3IgREVWRE9DX0FQSV9LRVkgZW52IHZhcicpXG4gICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICB9XG4gICAgXG4gICAgbGV0IHN1YmRvbWFpblRvUmVnaXN0ZXIgPSBleGlzdGluZ1N1YmRvbWFpblxuICAgIGxldCByZWdpc3RlcmVkID0gZmFsc2VcbiAgICBcbiAgICAvLyBMb29wIHVudGlsIHdlIHN1Y2Nlc3NmdWxseSByZWdpc3RlciBhIHN1YmRvbWFpblxuICAgIHdoaWxlICghcmVnaXN0ZXJlZCkge1xuICAgICAgbG9nZ2VyLmluZm8oYFJlZ2lzdGVyaW5nIHN1YmRvbWFpbiAke3N1YmRvbWFpblRvUmVnaXN0ZXJ9LmRldmRvYy5zaC4uLmApXG4gICAgICBcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlZ2lzdGVyUmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHthcGlVcmx9L2FwaS9wcm9qZWN0cy9yZWdpc3RlcmAsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgbmFtZTogZGV2ZG9jQ29uZmlnPy5uYW1lIHx8IGNvbmZpZy5uYW1lIHx8ICdNeSBEb2N1bWVudGF0aW9uJyxcbiAgICAgICAgICAgIHNsdWc6IHN1YmRvbWFpblRvUmVnaXN0ZXIsXG4gICAgICAgICAgICBzdWJkb21haW46IHN1YmRvbWFpblRvUmVnaXN0ZXIsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pXG4gICAgICAgIFxuICAgICAgICBpZiAoIXJlZ2lzdGVyUmVzcG9uc2Uub2spIHtcbiAgICAgICAgICBjb25zdCBlcnJvckRhdGEgPSBhd2FpdCByZWdpc3RlclJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiAoeyBlcnJvcjogJ1Vua25vd24gZXJyb3InIH0pKSBhcyB7IGVycm9yPzogc3RyaW5nOyBkZXRhaWxzPzogc3RyaW5nIH1cbiAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvckRhdGEuZXJyb3IgfHwgYEhUVFAgJHtyZWdpc3RlclJlc3BvbnNlLnN0YXR1c31gXG4gICAgICAgICAgXG4gICAgICAgICAgLy8gSWYgc3ViZG9tYWluIGlzIHRha2VuLCBhc2sgZm9yIGEgbmV3IG9uZVxuICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2UuaW5jbHVkZXMoJ2FscmVhZHkgZXhpc3RzJykgfHwgZXJyb3JNZXNzYWdlLmluY2x1ZGVzKCdhbHJlYWR5IHRha2VuJykpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgICAgICAgICAgbG9nZ2VyLndhcm4oYFN1YmRvbWFpbiBcIiR7c3ViZG9tYWluVG9SZWdpc3Rlcn1cIiBpcyBubyBsb25nZXIgYXZhaWxhYmxlLmApXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEdldCBzdWdnZXN0aW9uIGZyb20gQVBJXG4gICAgICAgICAgICBjb25zdCBhdmFpbGFiaWxpdHkgPSBhd2FpdCBjaGVja1N1YmRvbWFpbkF2YWlsYWJpbGl0eShzdWJkb21haW5Ub1JlZ2lzdGVyLCBhcGlVcmwpXG4gICAgICAgICAgICBjb25zdCBzdWdnZXN0aW9uID0gYXZhaWxhYmlsaXR5LnN1Z2dlc3Rpb24gfHwgYCR7c3ViZG9tYWluVG9SZWdpc3Rlcn0tZG9jc2BcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc29sZS5sb2coJycpXG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhgU3VnZ2VzdGlvbjogJHtzdWdnZXN0aW9ufS5kZXZkb2Muc2hgKVxuICAgICAgICAgICAgY29uc29sZS5sb2coJycpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFByb21wdCBmb3IgbmV3IHN1YmRvbWFpblxuICAgICAgICAgICAgbGV0IG5ld1N1YmRvbWFpbiA9IGF3YWl0IHByb21wdCgnRW50ZXIgYSBuZXcgc3ViZG9tYWluJywgc3VnZ2VzdGlvbilcbiAgICAgICAgICAgIG5ld1N1YmRvbWFpbiA9IG5ld1N1YmRvbWFpbi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05LV0vZywgJy0nKS5yZXBsYWNlKC9eLXwtJC9nLCAnJylcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gVmFsaWRhdGUgZm9ybWF0XG4gICAgICAgICAgICBjb25zdCBmb3JtYXRDaGVjayA9IGlzVmFsaWRTdWJkb21haW5Gb3JtYXQobmV3U3ViZG9tYWluKVxuICAgICAgICAgICAgaWYgKCFmb3JtYXRDaGVjay52YWxpZCkge1xuICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoZm9ybWF0Q2hlY2suZXJyb3IhKVxuICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBzdWJkb21haW5Ub1JlZ2lzdGVyID0gbmV3U3ViZG9tYWluXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnJylcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHJlZ2lzdGVyUmVzdWx0ID0gYXdhaXQgcmVnaXN0ZXJSZXNwb25zZS5qc29uKCkgYXMgUmVnaXN0ZXJSZXNwb25zZVxuICAgICAgICBcbiAgICAgICAgLy8gVXBkYXRlIGxvY2FsIGNvbmZpZyB3aXRoIEFQSSBrZXlcbiAgICAgICAgYXBpS2V5ID0gcmVnaXN0ZXJSZXN1bHQuYXBpS2V5XG4gICAgICAgIGV4aXN0aW5nU2x1ZyA9IHJlZ2lzdGVyUmVzdWx0LnNsdWdcbiAgICAgICAgZXhpc3RpbmdTdWJkb21haW4gPSByZWdpc3RlclJlc3VsdC5zdWJkb21haW5cbiAgICAgICAgXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgY29uZmlnXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRDb25maWc6IERldkRvY0NvbmZpZyA9IHtcbiAgICAgICAgICAuLi5kZXZkb2NDb25maWcsXG4gICAgICAgICAgcHJvamVjdElkOiByZWdpc3RlclJlc3VsdC5wcm9qZWN0SWQsXG4gICAgICAgICAgc2x1ZzogcmVnaXN0ZXJSZXN1bHQuc2x1ZyxcbiAgICAgICAgICBzdWJkb21haW46IHJlZ2lzdGVyUmVzdWx0LnN1YmRvbWFpbixcbiAgICAgICAgICBhcGlLZXk6IHJlZ2lzdGVyUmVzdWx0LmFwaUtleSxcbiAgICAgICAgICB1cmw6IHJlZ2lzdGVyUmVzdWx0LnVybCxcbiAgICAgICAgfVxuICAgICAgICBmcy53cml0ZUpzb25TeW5jKGRldmRvY0NvbmZpZ1BhdGgsIHVwZGF0ZWRDb25maWcsIHsgc3BhY2VzOiAyIH0pXG4gICAgICAgIFxuICAgICAgICBsb2dnZXIuc3VjY2Vzcyhg4pyTIFN1YmRvbWFpbiAke3JlZ2lzdGVyUmVzdWx0LnN1YmRvbWFpbn0uZGV2ZG9jLnNoIHJlZ2lzdGVyZWQhYClcbiAgICAgICAgY29uc29sZS5sb2coJycpXG4gICAgICAgIHJlZ2lzdGVyZWQgPSB0cnVlXG4gICAgICAgIFxuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKVxuICAgICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byByZWdpc3RlciBzdWJkb21haW46ICR7bWVzc2FnZX1gKVxuICAgICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gIC8vIENvbGxlY3QgYWxsIGNvbnRlbnQgZmlsZXNcbiAgbG9nZ2VyLmluZm8oJ0J1bmRsaW5nIGNvbnRlbnQuLi4nKVxuICBjb25zdCBmaWxlcyA9IGF3YWl0IGNvbGxlY3RGaWxlcyhwcm9qZWN0Um9vdClcbiAgbG9nZ2VyLnN1Y2Nlc3MoYOKckyBGb3VuZCAke2ZpbGVzLmxlbmd0aH0gY29udGVudCBmaWxlc2ApXG4gIFxuICAvLyBDb2xsZWN0IGJpbmFyeSBhc3NldHNcbiAgY29uc3QgYXNzZXRzID0gYXdhaXQgY29sbGVjdEFzc2V0cyhwcm9qZWN0Um9vdClcbiAgaWYgKGFzc2V0cy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgdG90YWxBc3NldFNpemUgPSBhc3NldHMucmVkdWNlKChzdW0sIGEpID0+IHN1bSArIGEuc2l6ZSwgMClcbiAgICBsb2dnZXIuc3VjY2Vzcyhg4pyTIEZvdW5kICR7YXNzZXRzLmxlbmd0aH0gYXNzZXRzICgke2Zvcm1hdFNpemUodG90YWxBc3NldFNpemUpfSlgKVxuICB9XG4gIFxuICAvLyBDYWxjdWxhdGUgYnVuZGxlIHNpemVcbiAgY29uc3QgdG90YWxTaXplID0gZmlsZXMucmVkdWNlKChzdW0sIGYpID0+IHN1bSArIGYuY29udGVudC5sZW5ndGgsIDApXG4gIGNvbnN0IHNpemVLQiA9ICh0b3RhbFNpemUgLyAxMDI0KS50b0ZpeGVkKDEpXG4gIGxvZ2dlci5pbmZvKGBDb250ZW50IGJ1bmRsZTogJHtzaXplS0J9IEtCYClcbiAgXG4gIC8vIFVwbG9hZCBiaW5hcnkgYXNzZXRzIGZpcnN0ICh3aXRoIHByb2dyZXNzKVxuICBpZiAoYXNzZXRzLmxlbmd0aCA+IDAgJiYgZXhpc3RpbmdTbHVnICYmIGFwaUtleSkge1xuICAgIGNvbnNvbGUubG9nKCcnKVxuICAgIGxvZ2dlci5pbmZvKCdVcGxvYWRpbmcgYXNzZXRzLi4uJylcbiAgICBcbiAgICBjb25zdCBhc3NldFJlc3VsdHMgPSBhd2FpdCB1cGxvYWRBc3NldHMoYXNzZXRzLCBhcGlVcmwsIGV4aXN0aW5nU2x1ZywgYXBpS2V5KVxuICAgIGNvbnN0IHN1Y2Nlc3NDb3VudCA9IGFzc2V0UmVzdWx0cy5maWx0ZXIociA9PiByLnN1Y2Nlc3MpLmxlbmd0aFxuICAgIGNvbnN0IGZhaWxDb3VudCA9IGFzc2V0UmVzdWx0cy5maWx0ZXIociA9PiAhci5zdWNjZXNzKS5sZW5ndGhcbiAgICBcbiAgICBpZiAoZmFpbENvdW50ID4gMCkge1xuICAgICAgbG9nZ2VyLndhcm4oYCR7c3VjY2Vzc0NvdW50fSBhc3NldHMgdXBsb2FkZWQsICR7ZmFpbENvdW50fSBmYWlsZWRgKVxuICAgIH0gZWxzZSBpZiAoc3VjY2Vzc0NvdW50ID4gMCkge1xuICAgICAgbG9nZ2VyLnN1Y2Nlc3MoYOKckyAke3N1Y2Nlc3NDb3VudH0gYXNzZXRzIHVwbG9hZGVkYClcbiAgICB9XG4gIH0gZWxzZSBpZiAoYXNzZXRzLmxlbmd0aCA+IDAgJiYgIWV4aXN0aW5nU2x1Zykge1xuICAgIGxvZ2dlci5pbmZvKCdBc3NldHMgd2lsbCBiZSB1cGxvYWRlZCBvbiBuZXh0IGRlcGxveSAoYWZ0ZXIgcHJvamVjdCByZWdpc3RyYXRpb24pJylcbiAgfVxuICBcbiAgLy8gRGVwbG95IGNvbnRlbnQgdG8gQVBJXG4gIGNvbnNvbGUubG9nKCcnKVxuICBsb2dnZXIuaW5mbygnVXBsb2FkaW5nIGNvbnRlbnQuLi4nKVxuICBcbiAgdHJ5IHtcbiAgICBpbnRlcmZhY2UgRGVwbG95UmVzcG9uc2Uge1xuICAgICAgc3VjY2VzczogYm9vbGVhblxuICAgICAgc2x1Zzogc3RyaW5nXG4gICAgICB1cmw6IHN0cmluZ1xuICAgICAgYmxvYlVybDogc3RyaW5nXG4gICAgICBpc1VwZGF0ZTogYm9vbGVhblxuICAgICAgZmlsZXNDb3VudDogbnVtYmVyXG4gICAgICBhcGlLZXk/OiBzdHJpbmdcbiAgICAgIGVycm9yPzogc3RyaW5nXG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIH1cbiAgICBcbiAgICAvLyBBZGQgQVBJIGtleSBoZWFkZXIgZm9yIHVwZGF0ZXNcbiAgICBpZiAoYXBpS2V5KSB7XG4gICAgICBoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7YXBpS2V5fWBcbiAgICB9XG4gICAgXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHthcGlVcmx9L2FwaS9kZXBsb3lgLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnMsXG4gICAgICByZWRpcmVjdDogJ2ZvbGxvdycsIC8vIEZvbGxvdyByZWRpcmVjdHNcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgbmFtZTogY29uZmlnLm5hbWUgfHwgJ015IERvY3VtZW50YXRpb24nLFxuICAgICAgICBzbHVnOiBleGlzdGluZ1NsdWcsXG4gICAgICAgIGRvY3NKc29uOiBjb25maWcsXG4gICAgICAgIGZpbGVzLFxuICAgICAgICBhcGlLZXksIC8vIEFsc28gc2VuZCBpbiBib2R5IGFzIGZhbGxiYWNrXG4gICAgICB9KSxcbiAgICB9KVxuICAgIFxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIGNvbnN0IGVycm9yRGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiAoeyBlcnJvcjogJ1Vua25vd24gZXJyb3InIH0pKSBhcyB7IGVycm9yPzogc3RyaW5nOyBkZXRhaWxzPzogc3RyaW5nIH1cbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yRGF0YS5lcnJvciB8fCBgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c31gXG4gICAgICBjb25zdCBkZXRhaWxzID0gZXJyb3JEYXRhLmRldGFpbHMgPyBgXFxuICAgRGV0YWlsczogJHtlcnJvckRhdGEuZGV0YWlsc31gIDogJydcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlcnJvck1lc3NhZ2V9JHtkZXRhaWxzfWApXG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBEZXBsb3lSZXNwb25zZVxuICAgIFxuICAgIC8vIFNhdmUgcHJvamVjdCBjb25maWcgZm9yIGZ1dHVyZSB1cGRhdGVzXG4gICAgY29uc3QgbmV3RGV2RG9jQ29uZmlnOiBEZXZEb2NDb25maWcgPSB7XG4gICAgICBzbHVnOiByZXN1bHQuc2x1ZyxcbiAgICAgIHVybDogcmVzdWx0LnVybCxcbiAgICAgIGxhc3REZXBsb3llZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIH1cbiAgICBcbiAgICAvLyBTYXZlIEFQSSBrZXkgKGZyb20gcmVzcG9uc2UgZm9yIG5ldyBwcm9qZWN0cywgb3IgZXhpc3RpbmcgZm9yIHVwZGF0ZXMpXG4gICAgaWYgKHJlc3VsdC5hcGlLZXkpIHtcbiAgICAgIG5ld0RldkRvY0NvbmZpZy5hcGlLZXkgPSByZXN1bHQuYXBpS2V5XG4gICAgfSBlbHNlIGlmIChhcGlLZXkpIHtcbiAgICAgIG5ld0RldkRvY0NvbmZpZy5hcGlLZXkgPSBhcGlLZXlcbiAgICB9XG4gICAgXG4gICAgZnMud3JpdGVKc29uU3luYyhkZXZkb2NDb25maWdQYXRoLCBuZXdEZXZEb2NDb25maWcsIHsgc3BhY2VzOiAyIH0pXG4gICAgXG4gICAgLy8gU3VjY2VzcyBtZXNzYWdlXG4gICAgY29uc29sZS5sb2coJycpXG4gICAgbG9nZ2VyLnN1Y2Nlc3MoJ0RlcGxveW1lbnQgc3VjY2Vzc2Z1bCEnKVxuICAgIGNvbnNvbGUubG9nKCcnKVxuICAgIGNvbnNvbGUubG9nKGAgIFlvdXIgZG9jcyBhcmUgbGl2ZSBhdDpgKVxuICAgIGNvbnNvbGUubG9nKGAgICR7bG9nZ2VyLmN5YW4ocmVzdWx0LnVybCl9YClcbiAgICBjb25zb2xlLmxvZygnJylcbiAgICBcbiAgICBpZiAocmVzdWx0LmlzVXBkYXRlKSB7XG4gICAgICBsb2dnZXIuaW5mbygnUHJvamVjdCB1cGRhdGVkIHdpdGggbmV3IGNvbnRlbnQnKVxuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuaW5mbyhgUHJvamVjdCBzbHVnOiAke3Jlc3VsdC5zbHVnfWApXG4gICAgICBsb2dnZXIuaW5mbygnUnVuIFwiZGV2ZG9jIGRlcGxveVwiIGFnYWluIHRvIHVwZGF0ZScpXG4gICAgICBcbiAgICAgIC8vIFNob3cgQVBJIGtleSB3YXJuaW5nIGZvciBuZXcgcHJvamVjdHNcbiAgICAgIGlmIChyZXN1bHQuYXBpS2V5KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgICAgICBsb2dnZXIud2Fybign4pqg77iPICBTYXZlIHlvdXIgQVBJIGtleSBmb3IgQ0kvQ0QgZGVwbG95bWVudHM6JylcbiAgICAgICAgY29uc29sZS5sb2coYCAgICAke3Jlc3VsdC5hcGlLZXl9YClcbiAgICAgICAgY29uc29sZS5sb2coJycpXG4gICAgICAgIGxvZ2dlci5pbmZvKCdBUEkga2V5IHNhdmVkIHRvIC5kZXZkb2MuanNvbiAoYWRkIHRvIC5naXRpZ25vcmUhKScpXG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIENoZWNrIGZvciBkb21haW4uanNvbiBhbmQgc2hvdyBjdXN0b20gZG9tYWluIHN0YXR1c1xuICAgIGF3YWl0IGNoZWNrQ3VzdG9tRG9tYWluU3RhdHVzKHByb2plY3RSb290LCBhcGlVcmwsIGFwaUtleSB8fCByZXN1bHQuYXBpS2V5IHx8ICcnKVxuICAgIFxuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcbiAgICBsb2dnZXIuZXJyb3IoYERlcGxveW1lbnQgZmFpbGVkOiAke21lc3NhZ2V9YClcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxufVxuXG4vKipcbiAqIENvbGxlY3QgYWxsIE1EWCBhbmQgY29udGVudCBmaWxlcyBmcm9tIHRoZSBwcm9qZWN0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbGxlY3RGaWxlcyhwcm9qZWN0Um9vdDogc3RyaW5nKTogUHJvbWlzZTxQcm9qZWN0RmlsZVtdPiB7XG4gIGNvbnN0IGZpbGVzOiBQcm9qZWN0RmlsZVtdID0gW11cbiAgXG4gIC8vIERpcmVjdG9yaWVzIHRvIHNjYW5cbiAgY29uc3Qgc2NhbkRpcnMgPSBbXG4gICAgJycsIC8vIFJvb3QgZGlyZWN0b3J5IChmb3IgaW5kZXgubWR4LCBxdWlja3N0YXJ0Lm1keCwgZXRjLilcbiAgICAnZ3VpZGVzJyxcbiAgICAnZXNzZW50aWFscycsXG4gICAgJ2NvbXBvbmVudHMnLFxuICAgICdhcGktcmVmZXJlbmNlJyxcbiAgICAnY2hhbmdlbG9nJyxcbiAgXVxuICBcbiAgZm9yIChjb25zdCBkaXIgb2Ygc2NhbkRpcnMpIHtcbiAgICBjb25zdCBmdWxsRGlyID0gcGF0aC5qb2luKHByb2plY3RSb290LCBkaXIpXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGZ1bGxEaXIpKSBjb250aW51ZVxuICAgIFxuICAgIGF3YWl0IHNjYW5EaXJlY3RvcnkoZnVsbERpciwgcHJvamVjdFJvb3QsIGZpbGVzKVxuICB9XG4gIFxuICAvLyBJbmNsdWRlIHRleHQtYmFzZWQgYXNzZXRzIGZyb20gYXNzZXRzIGZvbGRlclxuICBjb25zdCBhc3NldHNEaXIgPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsICdhc3NldHMnKVxuICBpZiAoZnMuZXhpc3RzU3luYyhhc3NldHNEaXIpKSB7XG4gICAgYXdhaXQgc2NhblB1YmxpY0Fzc2V0cyhhc3NldHNEaXIsIHByb2plY3RSb290LCBmaWxlcylcbiAgfVxuICBcbiAgcmV0dXJuIGZpbGVzXG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgc2NhbiBhIGRpcmVjdG9yeSBmb3IgTURYIGZpbGVzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNjYW5EaXJlY3RvcnkoXG4gIGRpcjogc3RyaW5nLFxuICBwcm9qZWN0Um9vdDogc3RyaW5nLFxuICBmaWxlczogUHJvamVjdEZpbGVbXVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGl0ZW1zID0gZnMucmVhZGRpclN5bmMoZGlyKVxuICBcbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgLy8gU2tpcCBjb21tb24gZGlyZWN0b3JpZXNcbiAgICBpZiAoWydub2RlX21vZHVsZXMnLCAnZGlzdCcsICcubmV4dCcsICcuZ2l0JywgJ3B1YmxpYyddLmluY2x1ZGVzKGl0ZW0pKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBcbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihkaXIsIGl0ZW0pXG4gICAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKGZ1bGxQYXRoKVxuICAgIFxuICAgIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGF3YWl0IHNjYW5EaXJlY3RvcnkoZnVsbFBhdGgsIHByb2plY3RSb290LCBmaWxlcylcbiAgICB9IGVsc2UgaWYgKGl0ZW0uZW5kc1dpdGgoJy5tZHgnKSB8fCBpdGVtLmVuZHNXaXRoKCcubWQnKSkge1xuICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcGF0aC5yZWxhdGl2ZShwcm9qZWN0Um9vdCwgZnVsbFBhdGgpXG4gICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZ1bGxQYXRoLCAndXRmLTgnKVxuICAgICAgXG4gICAgICBmaWxlcy5wdXNoKHtcbiAgICAgICAgcGF0aDogcmVsYXRpdmVQYXRoLFxuICAgICAgICBjb250ZW50LFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTY2FuIHB1YmxpYyBhc3NldHMgKFNWRywgaW1hZ2VzKSAtIHRleHQtYmFzZWQgb25seSBmb3IgY29udGVudCBidW5kbGVcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2NhblB1YmxpY0Fzc2V0cyhcbiAgZGlyOiBzdHJpbmcsXG4gIHByb2plY3RSb290OiBzdHJpbmcsXG4gIGZpbGVzOiBQcm9qZWN0RmlsZVtdXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgaXRlbXMgPSBmcy5yZWFkZGlyU3luYyhkaXIpXG4gIFxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihkaXIsIGl0ZW0pXG4gICAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKGZ1bGxQYXRoKVxuICAgIFxuICAgIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGF3YWl0IHNjYW5QdWJsaWNBc3NldHMoZnVsbFBhdGgsIHByb2plY3RSb290LCBmaWxlcylcbiAgICB9IGVsc2UgaWYgKGl0ZW0uZW5kc1dpdGgoJy5zdmcnKSB8fCBpdGVtLmVuZHNXaXRoKCcuanNvbicpKSB7XG4gICAgICAvLyBPbmx5IGluY2x1ZGUgdGV4dC1iYXNlZCBhc3NldHMgaW4gY29udGVudCBidW5kbGVcbiAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUocHJvamVjdFJvb3QsIGZ1bGxQYXRoKVxuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmdWxsUGF0aCwgJ3V0Zi04JylcbiAgICAgIFxuICAgICAgZmlsZXMucHVzaCh7XG4gICAgICAgIHBhdGg6IHJlbGF0aXZlUGF0aCxcbiAgICAgICAgY29udGVudCxcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ29sbGVjdCBiaW5hcnkgYXNzZXRzIGZyb20gYXNzZXRzIGZvbGRlciAoY29udmVudGlvbjogL2Fzc2V0cylcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29sbGVjdEFzc2V0cyhwcm9qZWN0Um9vdDogc3RyaW5nKTogUHJvbWlzZTxBc3NldEZpbGVbXT4ge1xuICBjb25zdCBhc3NldHM6IEFzc2V0RmlsZVtdID0gW11cbiAgXG4gIC8vIENoZWNrIGFzc2V0cyBmb2xkZXJcbiAgY29uc3QgYXNzZXRzRGlyID0gcGF0aC5qb2luKHByb2plY3RSb290LCAnYXNzZXRzJylcbiAgaWYgKGZzLmV4aXN0c1N5bmMoYXNzZXRzRGlyKSkge1xuICAgIGF3YWl0IHNjYW5CaW5hcnlBc3NldHMoYXNzZXRzRGlyLCBwcm9qZWN0Um9vdCwgYXNzZXRzKVxuICB9XG4gIFxuICByZXR1cm4gYXNzZXRzXG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgc2NhbiBmb3IgYmluYXJ5IGFzc2V0c1xuICovXG5hc3luYyBmdW5jdGlvbiBzY2FuQmluYXJ5QXNzZXRzKFxuICBkaXI6IHN0cmluZyxcbiAgcHJvamVjdFJvb3Q6IHN0cmluZyxcbiAgYXNzZXRzOiBBc3NldEZpbGVbXVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGl0ZW1zID0gZnMucmVhZGRpclN5bmMoZGlyKVxuICBcbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4oZGlyLCBpdGVtKVxuICAgIGNvbnN0IHN0YXQgPSBmcy5zdGF0U3luYyhmdWxsUGF0aClcbiAgICBcbiAgICBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBhd2FpdCBzY2FuQmluYXJ5QXNzZXRzKGZ1bGxQYXRoLCBwcm9qZWN0Um9vdCwgYXNzZXRzKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBleHQgPSBwYXRoLmV4dG5hbWUoaXRlbSkudG9Mb3dlckNhc2UoKVxuICAgICAgaWYgKEJJTkFSWV9FWFRFTlNJT05TLmluY2x1ZGVzKGV4dCkpIHtcbiAgICAgICAgLy8gQ2hlY2sgc2l6ZSBsaW1pdFxuICAgICAgICBpZiAoc3RhdC5zaXplID4gTUFYX0FTU0VUX1NJWkUpIHtcbiAgICAgICAgICBsb2dnZXIud2FybihgU2tpcHBpbmcgJHtpdGVtfTogZXhjZWVkcyAyNU1CIGxpbWl0ICgke2Zvcm1hdFNpemUoc3RhdC5zaXplKX0pYClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKHByb2plY3RSb290LCBmdWxsUGF0aClcbiAgICAgICAgYXNzZXRzLnB1c2goe1xuICAgICAgICAgIHBhdGg6IHJlbGF0aXZlUGF0aCxcbiAgICAgICAgICBmdWxsUGF0aCxcbiAgICAgICAgICBzaXplOiBzdGF0LnNpemUsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVXBsb2FkIGFzc2V0cyB3aXRoIHByb2dyZXNzIHRyYWNraW5nXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVwbG9hZEFzc2V0cyhcbiAgYXNzZXRzOiBBc3NldEZpbGVbXSxcbiAgYXBpVXJsOiBzdHJpbmcsXG4gIHNsdWc6IHN0cmluZyxcbiAgYXBpS2V5OiBzdHJpbmdcbik6IFByb21pc2U8QXJyYXk8eyBmaWxlOiBzdHJpbmc7IHN1Y2Nlc3M6IGJvb2xlYW47IHVybD86IHN0cmluZzsgZXJyb3I/OiBzdHJpbmcgfT4+IHtcbiAgY29uc3QgcmVzdWx0czogQXJyYXk8eyBmaWxlOiBzdHJpbmc7IHN1Y2Nlc3M6IGJvb2xlYW47IHVybD86IHN0cmluZzsgZXJyb3I/OiBzdHJpbmcgfT4gPSBbXVxuICBcbiAgZm9yIChjb25zdCBhc3NldCBvZiBhc3NldHMpIHtcbiAgICBjb25zdCBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoYXNzZXQucGF0aClcbiAgICBcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgICAke2ZpbGVOYW1lfTogYClcbiAgICBcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdXBsb2FkQXNzZXRXaXRoUHJvZ3Jlc3MoXG4gICAgICAgIGFzc2V0LFxuICAgICAgICBhcGlVcmwsXG4gICAgICAgIHNsdWcsXG4gICAgICAgIGFwaUtleSxcbiAgICAgICAgKHByb2dyZXNzLCBsb2FkZWQsIHRvdGFsKSA9PiB7XG4gICAgICAgICAgcHJvY2Vzcy5zdGRvdXQuY2xlYXJMaW5lKDApXG4gICAgICAgICAgcHJvY2Vzcy5zdGRvdXQuY3Vyc29yVG8oMClcbiAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgICAke2ZpbGVOYW1lfTogJHtjcmVhdGVQcm9ncmVzc0Jhcihwcm9ncmVzcyl9ICR7Zm9ybWF0U2l6ZShsb2FkZWQpfS8ke2Zvcm1hdFNpemUodG90YWwpfWApXG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgIFxuICAgICAgcHJvY2Vzcy5zdGRvdXQuY2xlYXJMaW5lKDApXG4gICAgICBwcm9jZXNzLnN0ZG91dC5jdXJzb3JUbygwKVxuICAgICAgY29uc29sZS5sb2coYCAgJHtsb2dnZXIuZ3JlZW4oJ+KckycpfSAke2ZpbGVOYW1lfSAoJHtmb3JtYXRTaXplKGFzc2V0LnNpemUpfSlgKVxuICAgICAgXG4gICAgICByZXN1bHRzLnB1c2goeyBmaWxlOiBmaWxlTmFtZSwgc3VjY2VzczogdHJ1ZSwgdXJsOiByZXN1bHQudXJsIH0pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcbiAgICAgIFxuICAgICAgcHJvY2Vzcy5zdGRvdXQuY2xlYXJMaW5lKDApXG4gICAgICBwcm9jZXNzLnN0ZG91dC5jdXJzb3JUbygwKVxuICAgICAgY29uc29sZS5sb2coYCAgJHtsb2dnZXIucmVkKCfinJcnKX0gJHtmaWxlTmFtZX06ICR7bWVzc2FnZX1gKVxuICAgICAgXG4gICAgICByZXN1bHRzLnB1c2goeyBmaWxlOiBmaWxlTmFtZSwgc3VjY2VzczogZmFsc2UsIGVycm9yOiBtZXNzYWdlIH0pXG4gICAgfVxuICB9XG4gIFxuICByZXR1cm4gcmVzdWx0c1xufVxuXG4vKipcbiAqIFVwbG9hZCBhIHNpbmdsZSBhc3NldCB3aXRoIHByb2dyZXNzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVwbG9hZEFzc2V0V2l0aFByb2dyZXNzKFxuICBhc3NldDogQXNzZXRGaWxlLFxuICBhcGlVcmw6IHN0cmluZyxcbiAgc2x1Zzogc3RyaW5nLFxuICBhcGlLZXk6IHN0cmluZyxcbiAgb25Qcm9ncmVzczogKHByb2dyZXNzOiBudW1iZXIsIGxvYWRlZDogbnVtYmVyLCB0b3RhbDogbnVtYmVyKSA9PiB2b2lkXG4pOiBQcm9taXNlPHsgdXJsOiBzdHJpbmcgfT4ge1xuICBjb25zdCBmaWxlQnVmZmVyID0gZnMucmVhZEZpbGVTeW5jKGFzc2V0LmZ1bGxQYXRoKVxuICBjb25zdCBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoYXNzZXQucGF0aClcbiAgY29uc3QgbWltZVR5cGUgPSBnZXRNaW1lVHlwZShhc3NldC5mdWxsUGF0aClcbiAgXG4gIC8vIEJ1aWxkIG11bHRpcGFydCBmb3JtIGRhdGFcbiAgY29uc3QgYm91bmRhcnkgPSBgLS0tLURldkRvY0RlcGxveSR7RGF0ZS5ub3coKX1gXG4gIGNvbnN0IENSTEYgPSAnXFxyXFxuJ1xuICBcbiAgY29uc3QgaGVhZGVyID0gW1xuICAgIGAtLSR7Ym91bmRhcnl9YCxcbiAgICBgQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPVwiZmlsZVwiOyBmaWxlbmFtZT1cIiR7ZmlsZU5hbWV9XCJgLFxuICAgIGBDb250ZW50LVR5cGU6ICR7bWltZVR5cGV9YCxcbiAgICAnJyxcbiAgICAnJ1xuICBdLmpvaW4oQ1JMRilcbiAgXG4gIGNvbnN0IHNsdWdQYXJ0ID0gW1xuICAgICcnLFxuICAgIGAtLSR7Ym91bmRhcnl9YCxcbiAgICBgQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPVwic2x1Z1wiYCxcbiAgICAnJyxcbiAgICBzbHVnLFxuICAgICcnXG4gIF0uam9pbihDUkxGKVxuICBcbiAgY29uc3QgcGF0aFBhcnQgPSBbXG4gICAgYC0tJHtib3VuZGFyeX1gLFxuICAgIGBDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9XCJwYXRoXCJgLFxuICAgICcnLFxuICAgIGFzc2V0LnBhdGgucmVwbGFjZSgvXmFzc2V0c1xcLy8sICcnKSwgLy8gUmVtb3ZlIGFzc2V0cy8gcHJlZml4XG4gICAgJydcbiAgXS5qb2luKENSTEYpXG4gIFxuICBjb25zdCBmb290ZXIgPSBgJHtDUkxGfS0tJHtib3VuZGFyeX0tLSR7Q1JMRn1gXG4gIFxuICBjb25zdCBoZWFkZXJCdWZmZXIgPSBCdWZmZXIuZnJvbShoZWFkZXIpXG4gIGNvbnN0IHNsdWdCdWZmZXIgPSBCdWZmZXIuZnJvbShzbHVnUGFydClcbiAgY29uc3QgcGF0aEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHBhdGhQYXJ0KVxuICBjb25zdCBmb290ZXJCdWZmZXIgPSBCdWZmZXIuZnJvbShmb290ZXIpXG4gIFxuICBjb25zdCB0b3RhbFNpemUgPSBoZWFkZXJCdWZmZXIubGVuZ3RoICsgZmlsZUJ1ZmZlci5sZW5ndGggKyBzbHVnQnVmZmVyLmxlbmd0aCArIHBhdGhCdWZmZXIubGVuZ3RoICsgZm9vdGVyQnVmZmVyLmxlbmd0aFxuICBjb25zdCBib2R5ID0gQnVmZmVyLmNvbmNhdChbaGVhZGVyQnVmZmVyLCBmaWxlQnVmZmVyLCBzbHVnQnVmZmVyLCBwYXRoQnVmZmVyLCBmb290ZXJCdWZmZXJdKVxuICBcbiAgLy8gU2ltdWxhdGUgcHJvZ3Jlc3NcbiAgbGV0IHVwbG9hZGVkID0gMFxuICBjb25zdCBjaHVua1NpemUgPSBNYXRoLmNlaWwodG90YWxTaXplIC8gMjApXG4gIFxuICBjb25zdCBwcm9ncmVzc0ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIGlmICh1cGxvYWRlZCA8IHRvdGFsU2l6ZSAqIDAuOSkge1xuICAgICAgdXBsb2FkZWQgPSBNYXRoLm1pbih1cGxvYWRlZCArIGNodW5rU2l6ZSwgdG90YWxTaXplICogMC45KVxuICAgICAgb25Qcm9ncmVzcyh1cGxvYWRlZCAvIHRvdGFsU2l6ZSwgdXBsb2FkZWQsIHRvdGFsU2l6ZSlcbiAgICB9XG4gIH0sIDUwKVxuICBcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2FwaVVybH0vYXBpL2Fzc2V0cy91cGxvYWRgLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0ke2JvdW5kYXJ5fWAsXG4gICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke2FwaUtleX1gLFxuICAgICAgfSxcbiAgICAgIGJvZHksXG4gICAgfSlcbiAgICBcbiAgICBjbGVhckludGVydmFsKHByb2dyZXNzSW50ZXJ2YWwpXG4gICAgb25Qcm9ncmVzcygxLCB0b3RhbFNpemUsIHRvdGFsU2l6ZSlcbiAgICBcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiAoeyBlcnJvcjogJ1VwbG9hZCBmYWlsZWQnIH0pKSBhcyB7IGVycm9yPzogc3RyaW5nIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5lcnJvciB8fCBgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c31gKVxuICAgIH1cbiAgICBcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgeyB1cmw6IHN0cmluZyB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNsZWFySW50ZXJ2YWwocHJvZ3Jlc3NJbnRlcnZhbClcbiAgICB0aHJvdyBlcnJvclxuICB9XG59XG5cbi8qKlxuICogRm9ybWF0IGZpbGUgc2l6ZSBmb3IgZGlzcGxheVxuICovXG5mdW5jdGlvbiBmb3JtYXRTaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAoYnl0ZXMgPCAxMDI0KSByZXR1cm4gYCR7Ynl0ZXN9IEJgXG4gIGlmIChieXRlcyA8IDEwMjQgKiAxMDI0KSByZXR1cm4gYCR7KGJ5dGVzIC8gMTAyNCkudG9GaXhlZCgxKX0gS0JgXG4gIHJldHVybiBgJHsoYnl0ZXMgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDIpfSBNQmBcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwcm9ncmVzcyBiYXIgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVByb2dyZXNzQmFyKHByb2dyZXNzOiBudW1iZXIsIHdpZHRoOiBudW1iZXIgPSAzMCk6IHN0cmluZyB7XG4gIGNvbnN0IGZpbGxlZCA9IE1hdGgucm91bmQod2lkdGggKiBwcm9ncmVzcylcbiAgY29uc3QgZW1wdHkgPSB3aWR0aCAtIGZpbGxlZFxuICBjb25zdCBiYXIgPSAn4paIJy5yZXBlYXQoZmlsbGVkKSArICfilpEnLnJlcGVhdChlbXB0eSlcbiAgY29uc3QgcGVyY2VudGFnZSA9IE1hdGgucm91bmQocHJvZ3Jlc3MgKiAxMDApXG4gIHJldHVybiBgWyR7YmFyfV0gJHtwZXJjZW50YWdlfSVgXG59XG4iXX0=
|
|
@@ -11,6 +11,40 @@ const logger_1 = require("../../utils/logger");
|
|
|
11
11
|
const constants_1 = require("../../constants");
|
|
12
12
|
// Max file size: 25MB
|
|
13
13
|
const MAX_FILE_SIZE = 25 * 1024 * 1024;
|
|
14
|
+
// Map file extensions to MIME types
|
|
15
|
+
const MIME_TYPES = {
|
|
16
|
+
// Images
|
|
17
|
+
'.png': 'image/png',
|
|
18
|
+
'.jpg': 'image/jpeg',
|
|
19
|
+
'.jpeg': 'image/jpeg',
|
|
20
|
+
'.gif': 'image/gif',
|
|
21
|
+
'.webp': 'image/webp',
|
|
22
|
+
'.ico': 'image/x-icon',
|
|
23
|
+
'.svg': 'image/svg+xml',
|
|
24
|
+
// Videos
|
|
25
|
+
'.mp4': 'video/mp4',
|
|
26
|
+
'.webm': 'video/webm',
|
|
27
|
+
'.mov': 'video/quicktime',
|
|
28
|
+
// Audio
|
|
29
|
+
'.mp3': 'audio/mpeg',
|
|
30
|
+
'.wav': 'audio/wav',
|
|
31
|
+
'.ogg': 'audio/ogg',
|
|
32
|
+
// Fonts
|
|
33
|
+
'.woff': 'font/woff',
|
|
34
|
+
'.woff2': 'font/woff2',
|
|
35
|
+
'.ttf': 'font/ttf',
|
|
36
|
+
'.otf': 'font/otf',
|
|
37
|
+
'.eot': 'application/vnd.ms-fontobject',
|
|
38
|
+
// Documents
|
|
39
|
+
'.pdf': 'application/pdf',
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Get MIME type from file extension
|
|
43
|
+
*/
|
|
44
|
+
function getMimeType(filePath) {
|
|
45
|
+
const ext = path_1.default.extname(filePath).toLowerCase();
|
|
46
|
+
return MIME_TYPES[ext] || 'application/octet-stream';
|
|
47
|
+
}
|
|
14
48
|
/**
|
|
15
49
|
* Format file size for display
|
|
16
50
|
*/
|
|
@@ -48,6 +82,7 @@ async function uploadFileWithProgress(file, apiUrl, slug, apiKey, onProgress) {
|
|
|
48
82
|
}
|
|
49
83
|
// Read file
|
|
50
84
|
const fileBuffer = fs_extra_1.default.readFileSync(filePath);
|
|
85
|
+
const mimeType = getMimeType(filePath);
|
|
51
86
|
// Create form data manually for Node.js
|
|
52
87
|
const boundary = `----DevDocUpload${Date.now()}`;
|
|
53
88
|
const CRLF = '\r\n';
|
|
@@ -55,7 +90,7 @@ async function uploadFileWithProgress(file, apiUrl, slug, apiKey, onProgress) {
|
|
|
55
90
|
const header = [
|
|
56
91
|
`--${boundary}`,
|
|
57
92
|
`Content-Disposition: form-data; name="file"; filename="${fileName}"`,
|
|
58
|
-
`Content-Type:
|
|
93
|
+
`Content-Type: ${mimeType}`,
|
|
59
94
|
'',
|
|
60
95
|
''
|
|
61
96
|
].join(CRLF);
|
|
@@ -235,4 +270,4 @@ async function listAssets(options) {
|
|
|
235
270
|
process.exit(1);
|
|
236
271
|
}
|
|
237
272
|
}
|
|
238
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS9jb21tYW5kcy91cGxvYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUF1SkEsd0JBZ0dDO0FBS0QsZ0NBc0RDO0FBbFRELGdEQUF1QjtBQUN2Qix3REFBeUI7QUFDekIsK0NBQTJDO0FBQzNDLCtDQUFpRDtBQUVqRCxzQkFBc0I7QUFDdEIsTUFBTSxhQUFhLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUE7QUF1QnRDOztHQUVHO0FBQ0gsU0FBUyxVQUFVLENBQUMsS0FBYTtJQUMvQixJQUFJLEtBQUssR0FBRyxJQUFJO1FBQUUsT0FBTyxHQUFHLEtBQUssSUFBSSxDQUFBO0lBQ3JDLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJO1FBQUUsT0FBTyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO0lBQ2pFLE9BQU8sR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO0FBQ25ELENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsaUJBQWlCLENBQUMsUUFBZ0IsRUFBRSxRQUFnQixFQUFFO0lBQzdELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFBO0lBQzNDLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUE7SUFDNUIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2xELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFBO0lB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aUJBQWlCLENBQUMsQ0FBQTtZQUM5QixPQUFNO1FBQ1IsQ0FBQztRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ3RCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLENBQUMsUUFBUSxLQUFLLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQzlELE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxlQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDOUMsQ0FBQztRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDZixlQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLFdBQVcsQ0FBQyxDQUFBO0lBQ3RELENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxPQUFPLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3RFLGVBQU0sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFDakQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXInXG5pbXBvcnQgeyBERUZBVUxUX0FQSV9VUkwgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnXG5cbi8vIE1heCBmaWxlIHNpemU6IDI1TUJcbmNvbnN0IE1BWF9GSUxFX1NJWkUgPSAyNSAqIDEwMjQgKiAxMDI0XG5cbmludGVyZmFjZSBEZXZEb2NDb25maWcge1xuICBzbHVnOiBzdHJpbmdcbiAgYXBpS2V5Pzogc3RyaW5nXG4gIHVybD86IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgVXBsb2FkT3B0aW9ucyB7XG4gIHVybD86IHN0cmluZ1xuICBhcGlLZXk/OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIFVwbG9hZFJlc3BvbnNlIHtcbiAgc3VjY2VzczogYm9vbGVhblxuICB1cmw6IHN0cmluZ1xuICBwYXRoOiBzdHJpbmdcbiAgZmlsZU5hbWU6IHN0cmluZ1xuICBzaXplOiBudW1iZXJcbiAgY29udGVudFR5cGU6IHN0cmluZ1xuICBlcnJvcj86IHN0cmluZ1xufVxuXG4vKipcbiAqIEZvcm1hdCBmaWxlIHNpemUgZm9yIGRpc3BsYXlcbiAqL1xuZnVuY3Rpb24gZm9ybWF0U2l6ZShieXRlczogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKGJ5dGVzIDwgMTAyNCkgcmV0dXJuIGAke2J5dGVzfSBCYFxuICBpZiAoYnl0ZXMgPCAxMDI0ICogMTAyNCkgcmV0dXJuIGAkeyhieXRlcyAvIDEwMjQpLnRvRml4ZWQoMSl9IEtCYFxuICByZXR1cm4gYCR7KGJ5dGVzIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCgyKX0gTUJgXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgcHJvZ3Jlc3MgYmFyIHN0cmluZ1xuICovXG5mdW5jdGlvbiBjcmVhdGVQcm9ncmVzc0Jhcihwcm9ncmVzczogbnVtYmVyLCB3aWR0aDogbnVtYmVyID0gMzApOiBzdHJpbmcge1xuICBjb25zdCBmaWxsZWQgPSBNYXRoLnJvdW5kKHdpZHRoICogcHJvZ3Jlc3MpXG4gIGNvbnN0IGVtcHR5ID0gd2lkdGggLSBmaWxsZWRcbiAgY29uc3QgYmFyID0gJ+KWiCcucmVwZWF0KGZpbGxlZCkgKyAn4paRJy5yZXBlYXQoZW1wdHkpXG4gIGNvbnN0IHBlcmNlbnRhZ2UgPSBNYXRoLnJvdW5kKHByb2dyZXNzICogMTAwKVxuICByZXR1cm4gYFske2Jhcn1dICR7cGVyY2VudGFnZX0lYFxufVxuXG4vKipcbiAqIFVwbG9hZCBhIGZpbGUgd2l0aCBwcm9ncmVzcyB0cmFja2luZyB1c2luZyBYTUxIdHRwUmVxdWVzdC1saWtlIGFwcHJvYWNoXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVwbG9hZEZpbGVXaXRoUHJvZ3Jlc3MoXG4gIGZpbGU6IHN0cmluZyxcbiAgYXBpVXJsOiBzdHJpbmcsXG4gIHNsdWc6IHN0cmluZyxcbiAgYXBpS2V5OiBzdHJpbmcsXG4gIG9uUHJvZ3Jlc3M6IChwcm9ncmVzczogbnVtYmVyLCBsb2FkZWQ6IG51bWJlciwgdG90YWw6IG51bWJlcikgPT4gdm9pZFxuKTogUHJvbWlzZTxVcGxvYWRSZXNwb25zZT4ge1xuICBjb25zdCBmaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShmaWxlKVxuICBcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGZpbGVQYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSBub3QgZm91bmQ6ICR7ZmlsZVBhdGh9YClcbiAgfVxuICBcbiAgY29uc3Qgc3RhdHMgPSBmcy5zdGF0U3luYyhmaWxlUGF0aClcbiAgY29uc3QgZmlsZVNpemUgPSBzdGF0cy5zaXplXG4gIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlUGF0aClcbiAgXG4gIC8vIENoZWNrIGZpbGUgc2l6ZVxuICBpZiAoZmlsZVNpemUgPiBNQVhfRklMRV9TSVpFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIHNpemUgKCR7Zm9ybWF0U2l6ZShmaWxlU2l6ZSl9KSBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplIG9mIDI1TUJgKVxuICB9XG4gIFxuICAvLyBSZWFkIGZpbGVcbiAgY29uc3QgZmlsZUJ1ZmZlciA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aClcbiAgXG4gIC8vIENyZWF0ZSBmb3JtIGRhdGEgbWFudWFsbHkgZm9yIE5vZGUuanNcbiAgY29uc3QgYm91bmRhcnkgPSBgLS0tLURldkRvY1VwbG9hZCR7RGF0ZS5ub3coKX1gXG4gIGNvbnN0IENSTEYgPSAnXFxyXFxuJ1xuICBcbiAgLy8gQnVpbGQgbXVsdGlwYXJ0IGZvcm0gZGF0YVxuICBjb25zdCBoZWFkZXIgPSBbXG4gICAgYC0tJHtib3VuZGFyeX1gLFxuICAgIGBDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9XCJmaWxlXCI7IGZpbGVuYW1lPVwiJHtmaWxlTmFtZX1cImAsXG4gICAgYENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtYCxcbiAgICAnJyxcbiAgICAnJ1xuICBdLmpvaW4oQ1JMRilcbiAgXG4gIGNvbnN0IHNsdWdQYXJ0ID0gW1xuICAgICcnLFxuICAgIGAtLSR7Ym91bmRhcnl9YCxcbiAgICBgQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPVwic2x1Z1wiYCxcbiAgICAnJyxcbiAgICBzbHVnLFxuICAgICcnXG4gIF0uam9pbihDUkxGKVxuICBcbiAgY29uc3QgZm9vdGVyID0gYCR7Q1JMRn0tLSR7Ym91bmRhcnl9LS0ke0NSTEZ9YFxuICBcbiAgY29uc3QgaGVhZGVyQnVmZmVyID0gQnVmZmVyLmZyb20oaGVhZGVyKVxuICBjb25zdCBzbHVnQnVmZmVyID0gQnVmZmVyLmZyb20oc2x1Z1BhcnQpXG4gIGNvbnN0IGZvb3RlckJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGZvb3RlcilcbiAgXG4gIGNvbnN0IHRvdGFsU2l6ZSA9IGhlYWRlckJ1ZmZlci5sZW5ndGggKyBmaWxlQnVmZmVyLmxlbmd0aCArIHNsdWdCdWZmZXIubGVuZ3RoICsgZm9vdGVyQnVmZmVyLmxlbmd0aFxuICBcbiAgLy8gQ29tYmluZSBhbGwgcGFydHNcbiAgY29uc3QgYm9keSA9IEJ1ZmZlci5jb25jYXQoW2hlYWRlckJ1ZmZlciwgZmlsZUJ1ZmZlciwgc2x1Z0J1ZmZlciwgZm9vdGVyQnVmZmVyXSlcbiAgXG4gIC8vIFNpbXVsYXRlIHByb2dyZXNzIGZvciBiZXR0ZXIgVVggKHNpbmNlIGZldGNoIGRvZXNuJ3Qgc3VwcG9ydCB1cGxvYWQgcHJvZ3Jlc3MgbmF0aXZlbHkpXG4gIGxldCB1cGxvYWRlZCA9IDBcbiAgY29uc3QgY2h1bmtTaXplID0gTWF0aC5jZWlsKHRvdGFsU2l6ZSAvIDIwKSAvLyBTaW11bGF0ZSAyMCBwcm9ncmVzcyB1cGRhdGVzXG4gIFxuICBjb25zdCBwcm9ncmVzc0ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIGlmICh1cGxvYWRlZCA8IHRvdGFsU2l6ZSAqIDAuOSkgeyAvLyBPbmx5IGdvIHRvIDkwJSB1bnRpbCByZXNwb25zZVxuICAgICAgdXBsb2FkZWQgPSBNYXRoLm1pbih1cGxvYWRlZCArIGNodW5rU2l6ZSwgdG90YWxTaXplICogMC45KVxuICAgICAgb25Qcm9ncmVzcyh1cGxvYWRlZCAvIHRvdGFsU2l6ZSwgdXBsb2FkZWQsIHRvdGFsU2l6ZSlcbiAgICB9XG4gIH0sIDEwMClcbiAgXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHthcGlVcmx9L2FwaS9hc3NldHMvdXBsb2FkYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiBgbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JHtib3VuZGFyeX1gLFxuICAgICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHthcGlLZXl9YCxcbiAgICAgIH0sXG4gICAgICBib2R5LFxuICAgIH0pXG4gICAgXG4gICAgY2xlYXJJbnRlcnZhbChwcm9ncmVzc0ludGVydmFsKVxuICAgIFxuICAgIC8vIENvbXBsZXRlIHByb2dyZXNzXG4gICAgb25Qcm9ncmVzcygxLCB0b3RhbFNpemUsIHRvdGFsU2l6ZSlcbiAgICBcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiAoeyBlcnJvcjogJ1VwbG9hZCBmYWlsZWQnIH0pKSBhcyB7IGVycm9yPzogc3RyaW5nIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5lcnJvciB8fCBgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c31gKVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIFVwbG9hZFJlc3BvbnNlXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY2xlYXJJbnRlcnZhbChwcm9ncmVzc0ludGVydmFsKVxuICAgIHRocm93IGVycm9yXG4gIH1cbn1cblxuLyoqXG4gKiBVcGxvYWQgYXNzZXRzIHRvIERldkRvYyBzdG9yYWdlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGxvYWQoZmlsZXM6IHN0cmluZ1tdLCBvcHRpb25zOiBVcGxvYWRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByb2plY3RSb290ID0gcHJvY2Vzcy5jd2QoKVxuICBjb25zdCBhcGlVcmwgPSBvcHRpb25zLnVybCB8fCBwcm9jZXNzLmVudi5ERVZET0NfQVBJX1VSTCB8fCBERUZBVUxUX0FQSV9VUkxcbiAgXG4gIGlmIChmaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICBsb2dnZXIuZXJyb3IoJ05vIGZpbGVzIHNwZWNpZmllZCcpXG4gICAgbG9nZ2VyLmluZm8oJ1VzYWdlOiBkZXZkb2MgdXBsb2FkIDxmaWxlMT4gW2ZpbGUyXSAuLi4nKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG4gIFxuICAvLyBMb2FkIC5kZXZkb2MuanNvbiB0byBnZXQgcHJvamVjdCBpbmZvXG4gIGNvbnN0IGRldmRvY0NvbmZpZ1BhdGggPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsICcuZGV2ZG9jLmpzb24nKVxuICBcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGRldmRvY0NvbmZpZ1BhdGgpKSB7XG4gICAgbG9nZ2VyLmVycm9yKCcuZGV2ZG9jLmpzb24gbm90IGZvdW5kJylcbiAgICBsb2dnZXIuaW5mbygnUnVuIFwiZGV2ZG9jIGluaXRcIiBvciBcImRldmRvYyBkZXBsb3lcIiBmaXJzdCB0byBpbml0aWFsaXplIHlvdXIgcHJvamVjdCcpXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbiAgXG4gIGxldCBkZXZkb2NDb25maWc6IERldkRvY0NvbmZpZ1xuICB0cnkge1xuICAgIGRldmRvY0NvbmZpZyA9IGZzLnJlYWRKc29uU3luYyhkZXZkb2NDb25maWdQYXRoKSBhcyBEZXZEb2NDb25maWdcbiAgfSBjYXRjaCB7XG4gICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcmVhZCAuZGV2ZG9jLmpzb24nKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG4gIFxuICBjb25zdCBzbHVnID0gZGV2ZG9jQ29uZmlnLnNsdWdcbiAgY29uc3QgYXBpS2V5ID0gb3B0aW9ucy5hcGlLZXkgfHwgcHJvY2Vzcy5lbnYuREVWRE9DX0FQSV9LRVkgfHwgZGV2ZG9jQ29uZmlnLmFwaUtleVxuICBcbiAgaWYgKCFzbHVnKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdQcm9qZWN0IHNsdWcgbm90IGZvdW5kIGluIC5kZXZkb2MuanNvbicpXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbiAgXG4gIGlmICghYXBpS2V5KSB7XG4gICAgbG9nZ2VyLmVycm9yKCdBUEkga2V5IG5vdCBmb3VuZCcpXG4gICAgbG9nZ2VyLmluZm8oJ1Byb3ZpZGUgdmlhIC0tYXBpLWtleSwgREVWRE9DX0FQSV9LRVkgZW52IHZhciwgb3IgaW4gLmRldmRvYy5qc29uJylcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuICBcbiAgbG9nZ2VyLmluZm8oYFVwbG9hZGluZyAke2ZpbGVzLmxlbmd0aH0gZmlsZShzKSB0byAke3NsdWd9Li4uXFxuYClcbiAgXG4gIGNvbnN0IHJlc3VsdHM6IHsgZmlsZTogc3RyaW5nOyBzdWNjZXNzOiBib29sZWFuOyB1cmw/OiBzdHJpbmc7IGVycm9yPzogc3RyaW5nIH1bXSA9IFtdXG4gIFxuICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICBjb25zdCBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZSlcbiAgICBcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgICAke2ZpbGVOYW1lfTogYClcbiAgICBcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdXBsb2FkRmlsZVdpdGhQcm9ncmVzcyhcbiAgICAgICAgZmlsZSxcbiAgICAgICAgYXBpVXJsLFxuICAgICAgICBzbHVnLFxuICAgICAgICBhcGlLZXksXG4gICAgICAgIChwcm9ncmVzcywgbG9hZGVkLCB0b3RhbCkgPT4ge1xuICAgICAgICAgIC8vIENsZWFyIGxpbmUgYW5kIHJld3JpdGUgcHJvZ3Jlc3NcbiAgICAgICAgICBwcm9jZXNzLnN0ZG91dC5jbGVhckxpbmUoMClcbiAgICAgICAgICBwcm9jZXNzLnN0ZG91dC5jdXJzb3JUbygwKVxuICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAgICR7ZmlsZU5hbWV9OiAke2NyZWF0ZVByb2dyZXNzQmFyKHByb2dyZXNzKX0gJHtmb3JtYXRTaXplKGxvYWRlZCl9LyR7Zm9ybWF0U2l6ZSh0b3RhbCl9YClcbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgXG4gICAgICAvLyBDbGVhciBsaW5lIGFuZCBzaG93IHN1Y2Nlc3NcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LmNsZWFyTGluZSgwKVxuICAgICAgcHJvY2Vzcy5zdGRvdXQuY3Vyc29yVG8oMClcbiAgICAgIGNvbnNvbGUubG9nKGAgICR7bG9nZ2VyLmdyZWVuKCfinJMnKX0gJHtmaWxlTmFtZX0gKCR7Zm9ybWF0U2l6ZShyZXN1bHQuc2l6ZSl9KWApXG4gICAgICBjb25zb2xlLmxvZyhgICAgICR7bG9nZ2VyLmN5YW4ocmVzdWx0LnVybCl9YClcbiAgICAgIFxuICAgICAgcmVzdWx0cy5wdXNoKHsgZmlsZTogZmlsZU5hbWUsIHN1Y2Nlc3M6IHRydWUsIHVybDogcmVzdWx0LnVybCB9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgICBcbiAgICAgIC8vIENsZWFyIGxpbmUgYW5kIHNob3cgZXJyb3JcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LmNsZWFyTGluZSgwKVxuICAgICAgcHJvY2Vzcy5zdGRvdXQuY3Vyc29yVG8oMClcbiAgICAgIGNvbnNvbGUubG9nKGAgICR7bG9nZ2VyLnJlZCgn4pyXJyl9ICR7ZmlsZU5hbWV9OiAke21lc3NhZ2V9YClcbiAgICAgIFxuICAgICAgcmVzdWx0cy5wdXNoKHsgZmlsZTogZmlsZU5hbWUsIHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogbWVzc2FnZSB9KVxuICAgIH1cbiAgfVxuICBcbiAgLy8gU3VtbWFyeVxuICBjb25zb2xlLmxvZygnJylcbiAgY29uc3Qgc3VjY2Vzc2Z1bCA9IHJlc3VsdHMuZmlsdGVyKHIgPT4gci5zdWNjZXNzKS5sZW5ndGhcbiAgY29uc3QgZmFpbGVkID0gcmVzdWx0cy5maWx0ZXIociA9PiAhci5zdWNjZXNzKS5sZW5ndGhcbiAgXG4gIGlmIChmYWlsZWQgPT09IDApIHtcbiAgICBsb2dnZXIuc3VjY2VzcyhgQWxsICR7c3VjY2Vzc2Z1bH0gZmlsZShzKSB1cGxvYWRlZCBzdWNjZXNzZnVsbHkhYClcbiAgfSBlbHNlIGlmIChzdWNjZXNzZnVsID09PSAwKSB7XG4gICAgbG9nZ2VyLmVycm9yKGBBbGwgJHtmYWlsZWR9IGZpbGUocykgZmFpbGVkIHRvIHVwbG9hZGApXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLndhcm4oYCR7c3VjY2Vzc2Z1bH0gZmlsZShzKSB1cGxvYWRlZCwgJHtmYWlsZWR9IGZhaWxlZGApXG4gIH1cbn1cblxuLyoqXG4gKiBMaXN0IHVwbG9hZGVkIGFzc2V0c1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdEFzc2V0cyhvcHRpb25zOiBVcGxvYWRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByb2plY3RSb290ID0gcHJvY2Vzcy5jd2QoKVxuICBjb25zdCBhcGlVcmwgPSBvcHRpb25zLnVybCB8fCBwcm9jZXNzLmVudi5ERVZET0NfQVBJX1VSTCB8fCBERUZBVUxUX0FQSV9VUkxcbiAgXG4gIC8vIExvYWQgLmRldmRvYy5qc29uXG4gIGNvbnN0IGRldmRvY0NvbmZpZ1BhdGggPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsICcuZGV2ZG9jLmpzb24nKVxuICBcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGRldmRvY0NvbmZpZ1BhdGgpKSB7XG4gICAgbG9nZ2VyLmVycm9yKCcuZGV2ZG9jLmpzb24gbm90IGZvdW5kJylcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuICBcbiAgY29uc3QgZGV2ZG9jQ29uZmlnID0gZnMucmVhZEpzb25TeW5jKGRldmRvY0NvbmZpZ1BhdGgpIGFzIERldkRvY0NvbmZpZ1xuICBjb25zdCBzbHVnID0gZGV2ZG9jQ29uZmlnLnNsdWdcbiAgY29uc3QgYXBpS2V5ID0gb3B0aW9ucy5hcGlLZXkgfHwgcHJvY2Vzcy5lbnYuREVWRE9DX0FQSV9LRVkgfHwgZGV2ZG9jQ29uZmlnLmFwaUtleVxuICBcbiAgaWYgKCFzbHVnIHx8ICFhcGlLZXkpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ1Byb2plY3Qgc2x1ZyBvciBBUEkga2V5IG5vdCBmb3VuZCcpXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbiAgXG4gIGxvZ2dlci5pbmZvKGBGZXRjaGluZyBhc3NldHMgZm9yICR7c2x1Z30uLi5gKVxuICBcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2FwaVVybH0vYXBpL2Fzc2V0cz9zbHVnPSR7c2x1Z31gLCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke2FwaUtleX1gLFxuICAgICAgfSxcbiAgICB9KVxuICAgIFxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c31gKVxuICAgIH1cbiAgICBcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIHsgYXNzZXRzOiBBcnJheTx7IGZpbGVOYW1lOiBzdHJpbmc7IHNpemU6IG51bWJlcjsgdXJsOiBzdHJpbmc7IHVwbG9hZGVkQXQ6IHN0cmluZyB9PiB9XG4gICAgXG4gICAgaWYgKGRhdGEuYXNzZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbG9nZ2VyLmluZm8oJ05vIGFzc2V0cyBmb3VuZCcpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgXG4gICAgY29uc29sZS5sb2coJycpXG4gICAgY29uc29sZS5sb2coJ0Fzc2V0czonKVxuICAgIGZvciAoY29uc3QgYXNzZXQgb2YgZGF0YS5hc3NldHMpIHtcbiAgICAgIGNvbnNvbGUubG9nKGAgICR7YXNzZXQuZmlsZU5hbWV9ICgke2Zvcm1hdFNpemUoYXNzZXQuc2l6ZSl9KWApXG4gICAgICBjb25zb2xlLmxvZyhgICAgICR7bG9nZ2VyLmN5YW4oYXNzZXQudXJsKX1gKVxuICAgIH1cbiAgICBjb25zb2xlLmxvZygnJylcbiAgICBsb2dnZXIuaW5mbyhgVG90YWw6ICR7ZGF0YS5hc3NldHMubGVuZ3RofSBhc3NldChzKWApXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKVxuICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGxpc3QgYXNzZXRzOiAke21lc3NhZ2V9YClcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxufVxuIl19
|
|
273
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS9jb21tYW5kcy91cGxvYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUE0TEEsd0JBZ0dDO0FBS0QsZ0NBc0RDO0FBdlZELGdEQUF1QjtBQUN2Qix3REFBeUI7QUFDekIsK0NBQTJDO0FBQzNDLCtDQUFpRDtBQUVqRCxzQkFBc0I7QUFDdEIsTUFBTSxhQUFhLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUE7QUFFdEMsb0NBQW9DO0FBQ3BDLE1BQU0sVUFBVSxHQUEyQjtJQUN6QyxTQUFTO0lBQ1QsTUFBTSxFQUFFLFdBQVc7SUFDbkIsTUFBTSxFQUFFLFlBQVk7SUFDcEIsT0FBTyxFQUFFLFlBQVk7SUFDckIsTUFBTSxFQUFFLFdBQVc7SUFDbkIsT0FBTyxFQUFFLFlBQVk7SUFDckIsTUFBTSxFQUFFLGNBQWM7SUFDdEIsTUFBTSxFQUFFLGVBQWU7SUFDdkIsU0FBUztJQUNULE1BQU0sRUFBRSxXQUFXO0lBQ25CLE9BQU8sRUFBRSxZQUFZO0lBQ3JCLE1BQU0sRUFBRSxpQkFBaUI7SUFDekIsUUFBUTtJQUNSLE1BQU0sRUFBRSxZQUFZO0lBQ3BCLE1BQU0sRUFBRSxXQUFXO0lBQ25CLE1BQU0sRUFBRSxXQUFXO0lBQ25CLFFBQVE7SUFDUixPQUFPLEVBQUUsV0FBVztJQUNwQixRQUFRLEVBQUUsWUFBWTtJQUN0QixNQUFNLEVBQUUsVUFBVTtJQUNsQixNQUFNLEVBQUUsVUFBVTtJQUNsQixNQUFNLEVBQUUsK0JBQStCO0lBQ3ZDLFlBQVk7SUFDWixNQUFNLEVBQUUsaUJBQWlCO0NBQzFCLENBQUE7QUFFRDs7R0FFRztBQUNILFNBQVMsV0FBVyxDQUFDLFFBQWdCO0lBQ25DLE1BQU0sR0FBRyxHQUFHLGNBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDaEQsT0FBTyxVQUFVLENBQUMsR0FB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QU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksUUFBUSxLQUFLLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQzlFLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxlQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7WUFFN0MsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUE7UUFDbEUsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLE9BQU8sR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7WUFFdEUsNEJBQTRCO1lBQzVCLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQzNCLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxlQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFFBQVEsS0FBSyxPQUFPLEVBQUUsQ0FBQyxDQUFBO1lBRTNELE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFDbEUsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVO0lBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNmLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxD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QU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLENBQUMsUUFBUSxLQUFLLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQzlELE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxlQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDOUMsQ0FBQztRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDZixlQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLFdBQVcsQ0FBQyxDQUFBO0lBQ3RELENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxPQUFPLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3RFLGVBQU0sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFDakQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXInXG5pbXBvcnQgeyBERUZBVUxUX0FQSV9VUkwgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnXG5cbi8vIE1heCBmaWxlIHNpemU6IDI1TUJcbmNvbnN0IE1BWF9GSUxFX1NJWkUgPSAyNSAqIDEwMjQgKiAxMDI0XG5cbi8vIE1hcCBmaWxlIGV4dGVuc2lvbnMgdG8gTUlNRSB0eXBlc1xuY29uc3QgTUlNRV9UWVBFUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgLy8gSW1hZ2VzXG4gICcucG5nJzogJ2ltYWdlL3BuZycsXG4gICcuanBnJzogJ2ltYWdlL2pwZWcnLFxuICAnLmpwZWcnOiAnaW1hZ2UvanBlZycsXG4gICcuZ2lmJzogJ2ltYWdlL2dpZicsXG4gICcud2VicCc6ICdpbWFnZS93ZWJwJyxcbiAgJy5pY28nOiAnaW1hZ2UveC1pY29uJyxcbiAgJy5zdmcnOiAnaW1hZ2Uvc3ZnK3htbCcsXG4gIC8vIFZpZGVvc1xuICAnLm1wNCc6ICd2aWRlby9tcDQnLFxuICAnLndlYm0nOiAndmlkZW8vd2VibScsXG4gICcubW92JzogJ3ZpZGVvL3F1aWNrdGltZScsXG4gIC8vIEF1ZGlvXG4gICcubXAzJzogJ2F1ZGlvL21wZWcnLFxuICAnLndhdic6ICdhdWRpby93YXYnLFxuICAnLm9nZyc6ICdhdWRpby9vZ2cnLFxuICAvLyBGb250c1xuICAnLndvZmYnOiAnZm9udC93b2ZmJyxcbiAgJy53b2ZmMic6ICdmb250L3dvZmYyJyxcbiAgJy50dGYnOiAnZm9udC90dGYnLFxuICAnLm90Zic6ICdmb250L290ZicsXG4gICcuZW90JzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0JyxcbiAgLy8gRG9jdW1lbnRzXG4gICcucGRmJzogJ2FwcGxpY2F0aW9uL3BkZicsXG59XG5cbi8qKlxuICogR2V0IE1JTUUgdHlwZSBmcm9tIGZpbGUgZXh0ZW5zaW9uXG4gKi9cbmZ1bmN0aW9uIGdldE1pbWVUeXBlKGZpbGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBleHQgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpLnRvTG93ZXJDYXNlKClcbiAgcmV0dXJuIE1JTUVfVFlQRVNbZXh0XSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xufVxuXG5pbnRlcmZhY2UgRGV2RG9jQ29uZmlnIHtcbiAgc2x1Zzogc3RyaW5nXG4gIGFwaUtleT86IHN0cmluZ1xuICB1cmw/OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIFVwbG9hZE9wdGlvbnMge1xuICB1cmw/OiBzdHJpbmdcbiAgYXBpS2V5Pzogc3RyaW5nXG59XG5cbmludGVyZmFjZSBVcGxvYWRSZXNwb25zZSB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW5cbiAgdXJsOiBzdHJpbmdcbiAgcGF0aDogc3RyaW5nXG4gIGZpbGVOYW1lOiBzdHJpbmdcbiAgc2l6ZTogbnVtYmVyXG4gIGNvbnRlbnRUeXBlOiBzdHJpbmdcbiAgZXJyb3I/OiBzdHJpbmdcbn1cblxuLyoqXG4gKiBGb3JtYXQgZmlsZSBzaXplIGZvciBkaXNwbGF5XG4gKi9cbmZ1bmN0aW9uIGZvcm1hdFNpemUoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmIChieXRlcyA8IDEwMjQpIHJldHVybiBgJHtieXRlc30gQmBcbiAgaWYgKGJ5dGVzIDwgMTAyNCAqIDEwMjQpIHJldHVybiBgJHsoYnl0ZXMgLyAxMDI0KS50b0ZpeGVkKDEpfSBLQmBcbiAgcmV0dXJuIGAkeyhieXRlcyAvICgxMDI0ICogMTAyNCkpLnRvRml4ZWQoMil9IE1CYFxufVxuXG4vKipcbiAqIENyZWF0ZSBhIHByb2dyZXNzIGJhciBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gY3JlYXRlUHJvZ3Jlc3NCYXIocHJvZ3Jlc3M6IG51bWJlciwgd2lkdGg6IG51bWJlciA9IDMwKTogc3RyaW5nIHtcbiAgY29uc3QgZmlsbGVkID0gTWF0aC5yb3VuZCh3aWR0aCAqIHByb2dyZXNzKVxuICBjb25zdCBlbXB0eSA9IHdpZHRoIC0gZmlsbGVkXG4gIGNvbnN0IGJhciA9ICfilognLnJlcGVhdChmaWxsZWQpICsgJ+KWkScucmVwZWF0KGVtcHR5KVxuICBjb25zdCBwZXJjZW50YWdlID0gTWF0aC5yb3VuZChwcm9ncmVzcyAqIDEwMClcbiAgcmV0dXJuIGBbJHtiYXJ9XSAke3BlcmNlbnRhZ2V9JWBcbn1cblxuLyoqXG4gKiBVcGxvYWQgYSBmaWxlIHdpdGggcHJvZ3Jlc3MgdHJhY2tpbmcgdXNpbmcgWE1MSHR0cFJlcXVlc3QtbGlrZSBhcHByb2FjaFxuICovXG5hc3luYyBmdW5jdGlvbiB1cGxvYWRGaWxlV2l0aFByb2dyZXNzKFxuICBmaWxlOiBzdHJpbmcsXG4gIGFwaVVybDogc3RyaW5nLFxuICBzbHVnOiBzdHJpbmcsXG4gIGFwaUtleTogc3RyaW5nLFxuICBvblByb2dyZXNzOiAocHJvZ3Jlc3M6IG51bWJlciwgbG9hZGVkOiBudW1iZXIsIHRvdGFsOiBudW1iZXIpID0+IHZvaWRcbik6IFByb21pc2U8VXBsb2FkUmVzcG9uc2U+IHtcbiAgY29uc3QgZmlsZVBhdGggPSBwYXRoLnJlc29sdmUoZmlsZSlcbiAgXG4gIGlmICghZnMuZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgbm90IGZvdW5kOiAke2ZpbGVQYXRofWApXG4gIH1cbiAgXG4gIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMoZmlsZVBhdGgpXG4gIGNvbnN0IGZpbGVTaXplID0gc3RhdHMuc2l6ZVxuICBjb25zdCBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZVBhdGgpXG4gIFxuICAvLyBDaGVjayBmaWxlIHNpemVcbiAgaWYgKGZpbGVTaXplID4gTUFYX0ZJTEVfU0laRSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSBzaXplICgke2Zvcm1hdFNpemUoZmlsZVNpemUpfSkgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgc2l6ZSBvZiAyNU1CYClcbiAgfVxuICBcbiAgLy8gUmVhZCBmaWxlXG4gIGNvbnN0IGZpbGVCdWZmZXIgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgpXG4gIGNvbnN0IG1pbWVUeXBlID0gZ2V0TWltZVR5cGUoZmlsZVBhdGgpXG4gIFxuICAvLyBDcmVhdGUgZm9ybSBkYXRhIG1hbnVhbGx5IGZvciBOb2RlLmpzXG4gIGNvbnN0IGJvdW5kYXJ5ID0gYC0tLS1EZXZEb2NVcGxvYWQke0RhdGUubm93KCl9YFxuICBjb25zdCBDUkxGID0gJ1xcclxcbidcbiAgXG4gIC8vIEJ1aWxkIG11bHRpcGFydCBmb3JtIGRhdGFcbiAgY29uc3QgaGVhZGVyID0gW1xuICAgIGAtLSR7Ym91bmRhcnl9YCxcbiAgICBgQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPVwiZmlsZVwiOyBmaWxlbmFtZT1cIiR7ZmlsZU5hbWV9XCJgLFxuICAgIGBDb250ZW50LVR5cGU6ICR7bWltZVR5cGV9YCxcbiAgICAnJyxcbiAgICAnJ1xuICBdLmpvaW4oQ1JMRilcbiAgXG4gIGNvbnN0IHNsdWdQYXJ0ID0gW1xuICAgICcnLFxuICAgIGAtLSR7Ym91bmRhcnl9YCxcbiAgICBgQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPVwic2x1Z1wiYCxcbiAgICAnJyxcbiAgICBzbHVnLFxuICAgICcnXG4gIF0uam9pbihDUkxGKVxuICBcbiAgY29uc3QgZm9vdGVyID0gYCR7Q1JMRn0tLSR7Ym91bmRhcnl9LS0ke0NSTEZ9YFxuICBcbiAgY29uc3QgaGVhZGVyQnVmZmVyID0gQnVmZmVyLmZyb20oaGVhZGVyKVxuICBjb25zdCBzbHVnQnVmZmVyID0gQnVmZmVyLmZyb20oc2x1Z1BhcnQpXG4gIGNvbnN0IGZvb3RlckJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGZvb3RlcilcbiAgXG4gIGNvbnN0IHRvdGFsU2l6ZSA9IGhlYWRlckJ1ZmZlci5sZW5ndGggKyBmaWxlQnVmZmVyLmxlbmd0aCArIHNsdWdCdWZmZXIubGVuZ3RoICsgZm9vdGVyQnVmZmVyLmxlbmd0aFxuICBcbiAgLy8gQ29tYmluZSBhbGwgcGFydHNcbiAgY29uc3QgYm9keSA9IEJ1ZmZlci5jb25jYXQoW2hlYWRlckJ1ZmZlciwgZmlsZUJ1ZmZlciwgc2x1Z0J1ZmZlciwgZm9vdGVyQnVmZmVyXSlcbiAgXG4gIC8vIFNpbXVsYXRlIHByb2dyZXNzIGZvciBiZXR0ZXIgVVggKHNpbmNlIGZldGNoIGRvZXNuJ3Qgc3VwcG9ydCB1cGxvYWQgcHJvZ3Jlc3MgbmF0aXZlbHkpXG4gIGxldCB1cGxvYWRlZCA9IDBcbiAgY29uc3QgY2h1bmtTaXplID0gTWF0aC5jZWlsKHRvdGFsU2l6ZSAvIDIwKSAvLyBTaW11bGF0ZSAyMCBwcm9ncmVzcyB1cGRhdGVzXG4gIFxuICBjb25zdCBwcm9ncmVzc0ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIGlmICh1cGxvYWRlZCA8IHRvdGFsU2l6ZSAqIDAuOSkgeyAvLyBPbmx5IGdvIHRvIDkwJSB1bnRpbCByZXNwb25zZVxuICAgICAgdXBsb2FkZWQgPSBNYXRoLm1pbih1cGxvYWRlZCArIGNodW5rU2l6ZSwgdG90YWxTaXplICogMC45KVxuICAgICAgb25Qcm9ncmVzcyh1cGxvYWRlZCAvIHRvdGFsU2l6ZSwgdXBsb2FkZWQsIHRvdGFsU2l6ZSlcbiAgICB9XG4gIH0sIDEwMClcbiAgXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHthcGlVcmx9L2FwaS9hc3NldHMvdXBsb2FkYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiBgbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JHtib3VuZGFyeX1gLFxuICAgICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHthcGlLZXl9YCxcbiAgICAgIH0sXG4gICAgICBib2R5LFxuICAgIH0pXG4gICAgXG4gICAgY2xlYXJJbnRlcnZhbChwcm9ncmVzc0ludGVydmFsKVxuICAgIFxuICAgIC8vIENvbXBsZXRlIHByb2dyZXNzXG4gICAgb25Qcm9ncmVzcygxLCB0b3RhbFNpemUsIHRvdGFsU2l6ZSlcbiAgICBcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiAoeyBlcnJvcjogJ1VwbG9hZCBmYWlsZWQnIH0pKSBhcyB7IGVycm9yPzogc3RyaW5nIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5lcnJvciB8fCBgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c31gKVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIFVwbG9hZFJlc3BvbnNlXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY2xlYXJJbnRlcnZhbChwcm9ncmVzc0ludGVydmFsKVxuICAgIHRocm93IGVycm9yXG4gIH1cbn1cblxuLyoqXG4gKiBVcGxvYWQgYXNzZXRzIHRvIERldkRvYyBzdG9yYWdlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGxvYWQoZmlsZXM6IHN0cmluZ1tdLCBvcHRpb25zOiBVcGxvYWRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByb2plY3RSb290ID0gcHJvY2Vzcy5jd2QoKVxuICBjb25zdCBhcGlVcmwgPSBvcHRpb25zLnVybCB8fCBwcm9jZXNzLmVudi5ERVZET0NfQVBJX1VSTCB8fCBERUZBVUxUX0FQSV9VUkxcbiAgXG4gIGlmIChmaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICBsb2dnZXIuZXJyb3IoJ05vIGZpbGVzIHNwZWNpZmllZCcpXG4gICAgbG9nZ2VyLmluZm8oJ1VzYWdlOiBkZXZkb2MgdXBsb2FkIDxmaWxlMT4gW2ZpbGUyXSAuLi4nKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG4gIFxuICAvLyBMb2FkIC5kZXZkb2MuanNvbiB0byBnZXQgcHJvamVjdCBpbmZvXG4gIGNvbnN0IGRldmRvY0NvbmZpZ1BhdGggPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsICcuZGV2ZG9jLmpzb24nKVxuICBcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGRldmRvY0NvbmZpZ1BhdGgpKSB7XG4gICAgbG9nZ2VyLmVycm9yKCcuZGV2ZG9jLmpzb24gbm90IGZvdW5kJylcbiAgICBsb2dnZXIuaW5mbygnUnVuIFwiZGV2ZG9jIGluaXRcIiBvciBcImRldmRvYyBkZXBsb3lcIiBmaXJzdCB0byBpbml0aWFsaXplIHlvdXIgcHJvamVjdCcpXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbiAgXG4gIGxldCBkZXZkb2NDb25maWc6IERldkRvY0NvbmZpZ1xuICB0cnkge1xuICAgIGRldmRvY0NvbmZpZyA9IGZzLnJlYWRKc29uU3luYyhkZXZkb2NDb25maWdQYXRoKSBhcyBEZXZEb2NDb25maWdcbiAgfSBjYXRjaCB7XG4gICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcmVhZCAuZGV2ZG9jLmpzb24nKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG4gIFxuICBjb25zdCBzbHVnID0gZGV2ZG9jQ29uZmlnLnNsdWdcbiAgY29uc3QgYXBpS2V5ID0gb3B0aW9ucy5hcGlLZXkgfHwgcHJvY2Vzcy5lbnYuREVWRE9DX0FQSV9LRVkgfHwgZGV2ZG9jQ29uZmlnLmFwaUtleVxuICBcbiAgaWYgKCFzbHVnKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdQcm9qZWN0IHNsdWcgbm90IGZvdW5kIGluIC5kZXZkb2MuanNvbicpXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbiAgXG4gIGlmICghYXBpS2V5KSB7XG4gICAgbG9nZ2VyLmVycm9yKCdBUEkga2V5IG5vdCBmb3VuZCcpXG4gICAgbG9nZ2VyLmluZm8oJ1Byb3ZpZGUgdmlhIC0tYXBpLWtleSwgREVWRE9DX0FQSV9LRVkgZW52IHZhciwgb3IgaW4gLmRldmRvYy5qc29uJylcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuICBcbiAgbG9nZ2VyLmluZm8oYFVwbG9hZGluZyAke2ZpbGVzLmxlbmd0aH0gZmlsZShzKSB0byAke3NsdWd9Li4uXFxuYClcbiAgXG4gIGNvbnN0IHJlc3VsdHM6IHsgZmlsZTogc3RyaW5nOyBzdWNjZXNzOiBib29sZWFuOyB1cmw/OiBzdHJpbmc7IGVycm9yPzogc3RyaW5nIH1bXSA9IFtdXG4gIFxuICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICBjb25zdCBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZSlcbiAgICBcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgICAke2ZpbGVOYW1lfTogYClcbiAgICBcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdXBsb2FkRmlsZVdpdGhQcm9ncmVzcyhcbiAgICAgICAgZmlsZSxcbiAgICAgICAgYXBpVXJsLFxuICAgICAgICBzbHVnLFxuICAgICAgICBhcGlLZXksXG4gICAgICAgIChwcm9ncmVzcywgbG9hZGVkLCB0b3RhbCkgPT4ge1xuICAgICAgICAgIC8vIENsZWFyIGxpbmUgYW5kIHJld3JpdGUgcHJvZ3Jlc3NcbiAgICAgICAgICBwcm9jZXNzLnN0ZG91dC5jbGVhckxpbmUoMClcbiAgICAgICAgICBwcm9jZXNzLnN0ZG91dC5jdXJzb3JUbygwKVxuICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAgICR7ZmlsZU5hbWV9OiAke2NyZWF0ZVByb2dyZXNzQmFyKHByb2dyZXNzKX0gJHtmb3JtYXRTaXplKGxvYWRlZCl9LyR7Zm9ybWF0U2l6ZSh0b3RhbCl9YClcbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgXG4gICAgICAvLyBDbGVhciBsaW5lIGFuZCBzaG93IHN1Y2Nlc3NcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LmNsZWFyTGluZSgwKVxuICAgICAgcHJvY2Vzcy5zdGRvdXQuY3Vyc29yVG8oMClcbiAgICAgIGNvbnNvbGUubG9nKGAgICR7bG9nZ2VyLmdyZWVuKCfinJMnKX0gJHtmaWxlTmFtZX0gKCR7Zm9ybWF0U2l6ZShyZXN1bHQuc2l6ZSl9KWApXG4gICAgICBjb25zb2xlLmxvZyhgICAgICR7bG9nZ2VyLmN5YW4ocmVzdWx0LnVybCl9YClcbiAgICAgIFxuICAgICAgcmVzdWx0cy5wdXNoKHsgZmlsZTogZmlsZU5hbWUsIHN1Y2Nlc3M6IHRydWUsIHVybDogcmVzdWx0LnVybCB9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgICBcbiAgICAgIC8vIENsZWFyIGxpbmUgYW5kIHNob3cgZXJyb3JcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LmNsZWFyTGluZSgwKVxuICAgICAgcHJvY2Vzcy5zdGRvdXQuY3Vyc29yVG8oMClcbiAgICAgIGNvbnNvbGUubG9nKGAgICR7bG9nZ2VyLnJlZCgn4pyXJyl9ICR7ZmlsZU5hbWV9OiAke21lc3NhZ2V9YClcbiAgICAgIFxuICAgICAgcmVzdWx0cy5wdXNoKHsgZmlsZTogZmlsZU5hbWUsIHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogbWVzc2FnZSB9KVxuICAgIH1cbiAgfVxuICBcbiAgLy8gU3VtbWFyeVxuICBjb25zb2xlLmxvZygnJylcbiAgY29uc3Qgc3VjY2Vzc2Z1bCA9IHJlc3VsdHMuZmlsdGVyKHIgPT4gci5zdWNjZXNzKS5sZW5ndGhcbiAgY29uc3QgZmFpbGVkID0gcmVzdWx0cy5maWx0ZXIociA9PiAhci5zdWNjZXNzKS5sZW5ndGhcbiAgXG4gIGlmIChmYWlsZWQgPT09IDApIHtcbiAgICBsb2dnZXIuc3VjY2VzcyhgQWxsICR7c3VjY2Vzc2Z1bH0gZmlsZShzKSB1cGxvYWRlZCBzdWNjZXNzZnVsbHkhYClcbiAgfSBlbHNlIGlmIChzdWNjZXNzZnVsID09PSAwKSB7XG4gICAgbG9nZ2VyLmVycm9yKGBBbGwgJHtmYWlsZWR9IGZpbGUocykgZmFpbGVkIHRvIHVwbG9hZGApXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLndhcm4oYCR7c3VjY2Vzc2Z1bH0gZmlsZShzKSB1cGxvYWRlZCwgJHtmYWlsZWR9IGZhaWxlZGApXG4gIH1cbn1cblxuLyoqXG4gKiBMaXN0IHVwbG9hZGVkIGFzc2V0c1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdEFzc2V0cyhvcHRpb25zOiBVcGxvYWRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByb2plY3RSb290ID0gcHJvY2Vzcy5jd2QoKVxuICBjb25zdCBhcGlVcmwgPSBvcHRpb25zLnVybCB8fCBwcm9jZXNzLmVudi5ERVZET0NfQVBJX1VSTCB8fCBERUZBVUxUX0FQSV9VUkxcbiAgXG4gIC8vIExvYWQgLmRldmRvYy5qc29uXG4gIGNvbnN0IGRldmRvY0NvbmZpZ1BhdGggPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsICcuZGV2ZG9jLmpzb24nKVxuICBcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGRldmRvY0NvbmZpZ1BhdGgpKSB7XG4gICAgbG9nZ2VyLmVycm9yKCcuZGV2ZG9jLmpzb24gbm90IGZvdW5kJylcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuICBcbiAgY29uc3QgZGV2ZG9jQ29uZmlnID0gZnMucmVhZEpzb25TeW5jKGRldmRvY0NvbmZpZ1BhdGgpIGFzIERldkRvY0NvbmZpZ1xuICBjb25zdCBzbHVnID0gZGV2ZG9jQ29uZmlnLnNsdWdcbiAgY29uc3QgYXBpS2V5ID0gb3B0aW9ucy5hcGlLZXkgfHwgcHJvY2Vzcy5lbnYuREVWRE9DX0FQSV9LRVkgfHwgZGV2ZG9jQ29uZmlnLmFwaUtleVxuICBcbiAgaWYgKCFzbHVnIHx8ICFhcGlLZXkpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ1Byb2plY3Qgc2x1ZyBvciBBUEkga2V5IG5vdCBmb3VuZCcpXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbiAgXG4gIGxvZ2dlci5pbmZvKGBGZXRjaGluZyBhc3NldHMgZm9yICR7c2x1Z30uLi5gKVxuICBcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2FwaVVybH0vYXBpL2Fzc2V0cz9zbHVnPSR7c2x1Z31gLCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke2FwaUtleX1gLFxuICAgICAgfSxcbiAgICB9KVxuICAgIFxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c31gKVxuICAgIH1cbiAgICBcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIHsgYXNzZXRzOiBBcnJheTx7IGZpbGVOYW1lOiBzdHJpbmc7IHNpemU6IG51bWJlcjsgdXJsOiBzdHJpbmc7IHVwbG9hZGVkQXQ6IHN0cmluZyB9PiB9XG4gICAgXG4gICAgaWYgKGRhdGEuYXNzZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbG9nZ2VyLmluZm8oJ05vIGFzc2V0cyBmb3VuZCcpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgXG4gICAgY29uc29sZS5sb2coJycpXG4gICAgY29uc29sZS5sb2coJ0Fzc2V0czonKVxuICAgIGZvciAoY29uc3QgYXNzZXQgb2YgZGF0YS5hc3NldHMpIHtcbiAgICAgIGNvbnNvbGUubG9nKGAgICR7YXNzZXQuZmlsZU5hbWV9ICgke2Zvcm1hdFNpemUoYXNzZXQuc2l6ZSl9KWApXG4gICAgICBjb25zb2xlLmxvZyhgICAgICR7bG9nZ2VyLmN5YW4oYXNzZXQudXJsKX1gKVxuICAgIH1cbiAgICBjb25zb2xlLmxvZygnJylcbiAgICBsb2dnZXIuaW5mbyhgVG90YWw6ICR7ZGF0YS5hc3NldHMubGVuZ3RofSBhc3NldChzKWApXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKVxuICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGxpc3QgYXNzZXRzOiAke21lc3NhZ2V9YClcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxufVxuIl19
|
package/package.json
CHANGED