@ruvector/ruvllm 2.5.6 → 2.5.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/README.md +282 -282
  2. package/bin/cli.js +1020 -1020
  3. package/dist/cjs/benchmarks/embedding-benchmark.js +8 -8
  4. package/dist/cjs/benchmarks/index.js +5 -5
  5. package/dist/cjs/benchmarks/model-comparison.js +15 -25
  6. package/dist/cjs/benchmarks/routing-benchmark.js +5 -5
  7. package/dist/cjs/contrastive.js +78 -78
  8. package/dist/cjs/engine.js +13 -13
  9. package/dist/cjs/export.js +31 -31
  10. package/dist/cjs/federated.js +1 -1
  11. package/dist/cjs/index.js +1 -1
  12. package/dist/cjs/intelligence.js +8 -18
  13. package/dist/cjs/lora.js +1 -1
  14. package/dist/cjs/models.js +13 -23
  15. package/dist/cjs/native.js +5 -4
  16. package/dist/cjs/session.js +1 -1
  17. package/dist/cjs/simd.js +1 -1
  18. package/dist/cjs/sona.js +1 -1
  19. package/dist/cjs/streaming.d.ts +1 -0
  20. package/dist/cjs/streaming.d.ts.map +1 -1
  21. package/dist/cjs/streaming.js +3 -3
  22. package/dist/cjs/training.d.ts +32 -4
  23. package/dist/cjs/training.d.ts.map +1 -1
  24. package/dist/cjs/training.js +59 -9
  25. package/dist/cjs/types.js +1 -1
  26. package/dist/esm/benchmarks/embedding-benchmark.js +1 -1
  27. package/dist/esm/benchmarks/index.js +1 -1
  28. package/dist/esm/benchmarks/model-comparison.js +1 -1
  29. package/dist/esm/benchmarks/routing-benchmark.js +1 -1
  30. package/dist/esm/contrastive.js +70 -70
  31. package/dist/esm/engine.js +13 -13
  32. package/dist/esm/export.js +31 -31
  33. package/dist/esm/federated.js +1 -1
  34. package/dist/esm/index.js +1 -1
  35. package/dist/esm/intelligence.js +1 -1
  36. package/dist/esm/lora.js +1 -1
  37. package/dist/esm/models.js +1 -1
  38. package/dist/esm/native.js +1 -1
  39. package/dist/esm/session.js +1 -1
  40. package/dist/esm/simd.js +1 -1
  41. package/dist/esm/sona.js +1 -1
  42. package/dist/esm/streaming.d.ts +1 -0
  43. package/dist/esm/streaming.d.ts.map +1 -1
  44. package/dist/esm/streaming.js +1 -1
  45. package/dist/esm/training.d.ts +32 -4
  46. package/dist/esm/training.d.ts.map +1 -1
  47. package/dist/esm/training.js +59 -9
  48. package/dist/esm/types.js +1 -1
  49. package/package.json +133 -133
  50. package/scripts/ensemble-model-compare.js +287 -287
  51. package/scripts/huggingface/README.md +537 -537
  52. package/scripts/huggingface/publish.sh +112 -112
  53. package/scripts/hybrid-model-compare.js +373 -373
  54. package/scripts/improved-model-compare.js +288 -288
  55. package/scripts/optimized-model-compare.js +364 -364
  56. package/scripts/real-model-compare.js +280 -280
  57. package/scripts/training/agentic-flow-capabilities.json +329 -329
  58. package/scripts/training/claude-code-synth.js +505 -505
  59. package/scripts/training/claude-flow-capabilities.json +1322 -1322
  60. package/scripts/training/claude-hard-negatives.js +222 -222
  61. package/scripts/training/contrastive-finetune.js +517 -517
  62. package/scripts/training/ecosystem-triplets.jsonl +1466 -1466
  63. package/scripts/training/generate-ecosystem-triplets.js +1324 -1324
  64. package/scripts/training/routing-dataset.js +634 -634
  65. package/scripts/training/ruvector-capabilities.json +798 -798
  66. package/scripts/training/validate-ecosystem.js +381 -381
  67. package/scripts/training/validation-results.json +22 -22
@@ -24,31 +24,15 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
24
24
  }) : function(o, v) {
25
25
  o["default"] = v;
26
26
  });
27
- var __importStar = (this && this.__importStar) || (function () {
28
- var ownKeys = function(o) {
29
- ownKeys = Object.getOwnPropertyNames || function (o) {
30
- var ar = [];
31
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
- return ar;
33
- };
34
- return ownKeys(o);
35
- };
36
- return function (mod) {
37
- if (mod && mod.__esModule) return mod;
38
- var result = {};
39
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
- __setModuleDefault(result, mod);
41
- return result;
42
- };
43
- })();
27
+ var __importStar = (this && this.__importStar) || function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
44
34
  Object.defineProperty(exports, "__esModule", { value: true });
45
- exports.COMPARISON_MODELS = void 0;
46
- exports.getModelsDir = getModelsDir;
47
- exports.isModelDownloaded = isModelDownloaded;
48
- exports.downloadModel = downloadModel;
49
- exports.runModelComparison = runModelComparison;
50
- exports.formatComparisonResults = formatComparisonResults;
51
- exports.runFullComparison = runFullComparison;
35
+ exports.runFullComparison = exports.formatComparisonResults = exports.runModelComparison = exports.downloadModel = exports.isModelDownloaded = exports.getModelsDir = exports.COMPARISON_MODELS = void 0;
52
36
  const fs_1 = require("fs");
53
37
  const path_1 = require("path");
54
38
  const os_1 = require("os");
@@ -79,6 +63,7 @@ exports.COMPARISON_MODELS = {
79
63
  function getModelsDir() {
80
64
  return (0, path_1.join)((0, os_1.homedir)(), '.ruvllm', 'models');
81
65
  }
66
+ exports.getModelsDir = getModelsDir;
82
67
  /**
83
68
  * Check if model is downloaded
84
69
  */
@@ -92,6 +77,7 @@ function isModelDownloaded(modelId) {
92
77
  const stats = (0, fs_1.statSync)(path);
93
78
  return stats.size >= model.sizeBytes * 0.9; // Allow 10% variance
94
79
  }
80
+ exports.isModelDownloaded = isModelDownloaded;
95
81
  /**
96
82
  * Download a model with progress
97
83
  */
@@ -157,6 +143,7 @@ async function downloadModel(modelId, onProgress) {
157
143
  renameSync(tempPath, destPath);
158
144
  return destPath;
159
145
  }
146
+ exports.downloadModel = downloadModel;
160
147
  /**
161
148
  * Agent type keywords for routing classification
162
149
  */
@@ -313,6 +300,7 @@ function runModelComparison(modelId, modelName, embedder) {
313
300
  overallScore,
314
301
  };
315
302
  }
303
+ exports.runModelComparison = runModelComparison;
316
304
  /**
317
305
  * Format comparison results
318
306
  */
@@ -378,6 +366,7 @@ function formatComparisonResults(results) {
378
366
  }
379
367
  return lines.join('\n');
380
368
  }
369
+ exports.formatComparisonResults = formatComparisonResults;
381
370
  /**
382
371
  * Run full comparison
383
372
  */
@@ -466,6 +455,7 @@ async function runFullComparison() {
466
455
  summary,
467
456
  };
468
457
  }
458
+ exports.runFullComparison = runFullComparison;
469
459
  exports.default = {
470
460
  COMPARISON_MODELS: exports.COMPARISON_MODELS,
471
461
  runFullComparison,
@@ -473,4 +463,4 @@ exports.default = {
473
463
  downloadModel,
474
464
  isModelDownloaded,
475
465
  };
476
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtY29tcGFyaXNvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iZW5jaG1hcmtzL21vZGVsLWNvbXBhcmlzb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEwRUgsb0NBRUM7QUFLRCw4Q0FTQztBQUtELHNDQThFQztBQTRKRCxnREE2QkM7QUFLRCwwREE4RUM7QUFLRCw4Q0FxR0M7QUFoaUJELDJCQUF3RTtBQUN4RSwrQkFBNEI7QUFDNUIsMkJBQTZCO0FBRzdCLDJEQU82QjtBQUU3QiwrREFJK0I7QUFZL0Isd0JBQXdCO0FBQ1gsUUFBQSxpQkFBaUIsR0FBZ0M7SUFDNUQsV0FBVyxFQUFFO1FBQ1gsRUFBRSxFQUFFLFdBQVc7UUFDZixJQUFJLEVBQUUsdUJBQXVCO1FBQzdCLEdBQUcsRUFBRSx1R0FBdUc7UUFDNUcsUUFBUSxFQUFFLG1DQUFtQztRQUM3QyxTQUFTLEVBQUUsU0FBVztRQUN0QixXQUFXLEVBQUUseUNBQXlDO0tBQ3ZEO0lBQ0QscUJBQXFCLEVBQUU7UUFDckIsRUFBRSxFQUFFLHFCQUFxQjtRQUN6QixJQUFJLEVBQUUsMEJBQTBCO1FBQ2hDLEdBQUcsRUFBRSxzRkFBc0Y7UUFDM0YsUUFBUSxFQUFFLHNDQUFzQztRQUNoRCxTQUFTLEVBQUUsU0FBVztRQUN0QixXQUFXLEVBQUUsOENBQThDO0tBQzVEO0NBQ0YsQ0FBQztBQW9CRjs7R0FFRztBQUNILFNBQWdCLFlBQVk7SUFDMUIsT0FBTyxJQUFBLFdBQUksRUFBQyxJQUFBLFlBQU8sR0FBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxPQUFlO0lBQy9DLE1BQU0sS0FBSyxHQUFHLHlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pDLElBQUksQ0FB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ckMsT0FBTyxHQUFHLGdEQUFnRCxDQUFDLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQztRQUMzSixPQUFPLElBQUksZ0ZBQWdGLENBQUM7UUFDNUYsT0FBTyxJQUFJLDZFQUE2RSxDQUFDO0lBQzNGLENBQUM7U0FBTSxJQUFJLE1BQU0sS0FBSyxjQUFjLEVBQUUsQ0FBQztRQUNyQyxPQUFPLEdBQUcsOERBQThELENBQUM7UUFDekUsT0FBTyxJQUFJLDhFQUE4RSxDQUFDO1FBQzFGLE9BQU8sSUFBSSx3REFBd0QsQ0FBQztJQUN0RSxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sR0FBRyxrREFBa0QsQ0FBQztRQUM3RCxPQUFPLElBQUkscUVBQXFFLENBQUM7UUFDakYsT0FBTyxJQUFJLGdFQUFnRSxDQUFDO0lBQzlFLENBQUM7SUFFRCxPQUFPO1FBQ0wsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1FBQ25DLFFBQVE7UUFDUixNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDO1FBQ25DLE1BQU07UUFDTixPQUFPO0tBQ1IsQ0FBQztBQUNKLENBQUM7QUFFRCxrQkFBZTtJQUNiLGlCQUFpQixFQUFqQix5QkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLHVCQUF1QjtJQUN2QixhQUFhO0lBQ2IsaUJBQWlCO0NBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogTW9kZWwgQ29tcGFyaXNvbiBCZW5jaG1hcmtcclxuICpcclxuICogSGVhZC10by1oZWFkIGNvbXBhcmlzb24gYmV0d2VlbjpcclxuICogLSBRd2VuMi41LTAuNUItSW5zdHJ1Y3QgKGJhc2UgbW9kZWwpXHJcbiAqIC0gUnV2TFRSQSBDbGF1ZGUgQ29kZSAwLjVCIChmaW5lLXR1bmVkIGZvciBDbGF1ZGUgQ29kZSlcclxuICpcclxuICogVGVzdHMgcm91dGluZyBhY2N1cmFjeSBhbmQgZW1iZWRkaW5nIHF1YWxpdHkgZm9yIENsYXVkZSBDb2RlIHVzZSBjYXNlcy5cclxuICovXHJcblxyXG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xyXG5pbXBvcnQgeyBleGlzdHNTeW5jLCBta2RpclN5bmMsIGNyZWF0ZVdyaXRlU3RyZWFtLCBzdGF0U3luYyB9IGZyb20gJ2ZzJztcclxuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnO1xyXG5pbXBvcnQgeyBwaXBlbGluZSB9IGZyb20gJ3N0cmVhbS9wcm9taXNlcyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIHJ1blJvdXRpbmdCZW5jaG1hcmssXHJcbiAgZm9ybWF0Um91dGluZ1Jlc3VsdHMsXHJcbiAgYmFzZWxpbmVLZXl3b3JkUm91dGVyLFxyXG4gIFJPVVRJTkdfVEVTVF9DQVNFUyxcclxuICBBR0VOVF9UWVBFUyxcclxuICB0eXBlIFJvdXRpbmdCZW5jaG1hcmtSZXN1bHRzLFxyXG59IGZyb20gJy4vcm91dGluZy1iZW5jaG1hcmsnO1xyXG5cclxuaW1wb3J0IHtcclxuICBydW5FbWJlZGRpbmdCZW5jaG1hcmssXHJcbiAgZm9ybWF0RW1iZWRkaW5nUmVzdWx0cyxcclxuICB0eXBlIEVtYmVkZGluZ0JlbmNobWFya1Jlc3VsdHMsXHJcbn0gZnJvbSAnLi9lbWJlZGRpbmctYmVuY2htYXJrJztcclxuXHJcbi8qKiBNb2RlbCBjb25maWd1cmF0aW9uICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxDb25maWcge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHVybDogc3RyaW5nO1xyXG4gIGZpbGVuYW1lOiBzdHJpbmc7XHJcbiAgc2l6ZUJ5dGVzOiBudW1iZXI7XHJcbiAgZGVzY3JpcHRpb246IHN0cmluZztcclxufVxyXG5cclxuLyoqIENvbXBhcmlzb24gbW9kZWxzICovXHJcbmV4cG9ydCBjb25zdCBDT01QQVJJU09OX01PREVMUzogUmVjb3JkPHN0cmluZywgTW9kZWxDb25maWc+ID0ge1xyXG4gICdxd2VuLWJhc2UnOiB7XHJcbiAgICBpZDogJ3F3ZW4tYmFzZScsXHJcbiAgICBuYW1lOiAnUXdlbjIuNS0wLjVCLUluc3RydWN0JyxcclxuICAgIHVybDogJ2h0dHBzOi8vaHVnZ2luZ2ZhY2UuY28vUXdlbi9Rd2VuMi41LTAuNUItSW5zdHJ1Y3QtR0dVRi9yZXNvbHZlL21haW4vcXdlbjIuNS0wLjViLWluc3RydWN0LXE0X2tfbS5nZ3VmJyxcclxuICAgIGZpbGVuYW1lOiAncXdlbjIuNS0wLjViLWluc3RydWN0LXE0X2tfbS5nZ3VmJyxcclxuICAgIHNpemVCeXRlczogNDkxXzAwMF8wMDAsXHJcbiAgICBkZXNjcmlwdGlvbjogJ0Jhc2UgUXdlbiAwLjVCIG1vZGVsIChRNF9LX00gcXVhbnRpemVkKScsXHJcbiAgfSxcclxuICAncnV2bHRyYS1jbGF1ZGUtY29kZSc6IHtcclxuICAgIGlkOiAncnV2bHRyYS1jbGF1ZGUtY29kZScsXHJcbiAgICBuYW1lOiAnUnV2TFRSQSBDbGF1ZGUgQ29kZSAwLjVCJyxcclxuICAgIHVybDogJ2h0dHBzOi8vaHVnZ2luZ2ZhY2UuY28vcnV2L3J1dmx0cmEvcmVzb2x2ZS9tYWluL3J1dmx0cmEtY2xhdWRlLWNvZGUtMC41Yi1xNF9rX20uZ2d1ZicsXHJcbiAgICBmaWxlbmFtZTogJ3J1dmx0cmEtY2xhdWRlLWNvZGUtMC41Yi1xNF9rX20uZ2d1ZicsXHJcbiAgICBzaXplQnl0ZXM6IDM5OF8wMDBfMDAwLFxyXG4gICAgZGVzY3JpcHRpb246ICdSdXZMVFJBIGZpbmUtdHVuZWQgZm9yIENsYXVkZSBDb2RlIHdvcmtmbG93cycsXHJcbiAgfSxcclxufTtcclxuXHJcbi8qKiBDb21wYXJpc29uIHJlc3VsdCAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIENvbXBhcmlzb25SZXN1bHQge1xyXG4gIG1vZGVsSWQ6IHN0cmluZztcclxuICBtb2RlbE5hbWU6IHN0cmluZztcclxuICByb3V0aW5nOiBSb3V0aW5nQmVuY2htYXJrUmVzdWx0cztcclxuICBlbWJlZGRpbmc6IEVtYmVkZGluZ0JlbmNobWFya1Jlc3VsdHM7XHJcbiAgb3ZlcmFsbFNjb3JlOiBudW1iZXI7XHJcbn1cclxuXHJcbi8qKiBGdWxsIGNvbXBhcmlzb24gcmVzdWx0cyAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEZ1bGxDb21wYXJpc29uUmVzdWx0cyB7XHJcbiAgdGltZXN0YW1wOiBzdHJpbmc7XHJcbiAgYmFzZWxpbmU6IENvbXBhcmlzb25SZXN1bHQ7XHJcbiAgbW9kZWxzOiBDb21wYXJpc29uUmVzdWx0W107XHJcbiAgd2lubmVyOiBzdHJpbmc7XHJcbiAgc3VtbWFyeTogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IG1vZGVscyBkaXJlY3RvcnlcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RlbHNEaXIoKTogc3RyaW5nIHtcclxuICByZXR1cm4gam9pbihob21lZGlyKCksICcucnV2bGxtJywgJ21vZGVscycpO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgbW9kZWwgaXMgZG93bmxvYWRlZFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzTW9kZWxEb3dubG9hZGVkKG1vZGVsSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gIGNvbnN0IG1vZGVsID0gQ09NUEFSSVNPTl9NT0RFTFNbbW9kZWxJZF07XHJcbiAgaWYgKCFtb2RlbCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICBjb25zdCBwYXRoID0gam9pbihnZXRNb2RlbHNEaXIoKSwgbW9kZWwuZmlsZW5hbWUpO1xyXG4gIGlmICghZXhpc3RzU3luYyhwYXRoKSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICBjb25zdCBzdGF0cyA9IHN0YXRTeW5jKHBhdGgpO1xyXG4gIHJldHVybiBzdGF0cy5zaXplID49IG1vZGVsLnNpemVCeXRlcyAqIDAuOTsgLy8gQWxsb3cgMTAlIHZhcmlhbmNlXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEb3dubG9hZCBhIG1vZGVsIHdpdGggcHJvZ3Jlc3NcclxuICovXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb3dubG9hZE1vZGVsKFxyXG4gIG1vZGVsSWQ6IHN0cmluZyxcclxuICBvblByb2dyZXNzPzogKHBlcmNlbnQ6IG51bWJlciwgc3BlZWQ6IG51bWJlcikgPT4gdm9pZFxyXG4pOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gIGNvbnN0IG1vZGVsID0gQ09NUEFSSVNPTl9NT0RFTFNbbW9kZWxJZF07XHJcbiAgaWYgKCFtb2RlbCkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIG1vZGVsOiAke21vZGVsSWR9YCk7XHJcbiAgfVxyXG5cclxuICBjb25zdCBtb2RlbHNEaXIgPSBnZXRNb2RlbHNEaXIoKTtcclxuICBpZiAoIWV4aXN0c1N5bmMobW9kZWxzRGlyKSkge1xyXG4gICAgbWtkaXJTeW5jKG1vZGVsc0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XHJcbiAgfVxyXG5cclxuICBjb25zdCBkZXN0UGF0aCA9IGpvaW4obW9kZWxzRGlyLCBtb2RlbC5maWxlbmFtZSk7XHJcblxyXG4gIGlmIChpc01vZGVsRG93bmxvYWRlZChtb2RlbElkKSkge1xyXG4gICAgcmV0dXJuIGRlc3RQYXRoO1xyXG4gIH1cclxuXHJcbiAgY29uc29sZS5sb2coYERvd25sb2FkaW5nICR7bW9kZWwubmFtZX0uLi5gKTtcclxuICBjb25zb2xlLmxvZyhgICBGcm9tOiAke21vZGVsLnVybH1gKTtcclxuICBjb25zb2xlLmxvZyhgICBTaXplOiAkeyhtb2RlbC5zaXplQnl0ZXMgLyAxMDI0IC8gMTAyNCkudG9GaXhlZCgwKX0gTUJgKTtcclxuXHJcbiAgY29uc3QgdGVtcFBhdGggPSBgJHtkZXN0UGF0aH0udG1wYDtcclxuICBsZXQgZG93bmxvYWRlZCA9IDA7XHJcbiAgbGV0IGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcclxuICBsZXQgbGFzdERvd25sb2FkZWQgPSAwO1xyXG5cclxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKG1vZGVsLnVybCwge1xyXG4gICAgaGVhZGVyczogeyAnVXNlci1BZ2VudCc6ICdSdXZMTE0vMi4zLjAnIH0sXHJcbiAgfSk7XHJcblxyXG4gIGlmICghcmVzcG9uc2Uub2spIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c306ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBwYXJzZUludChyZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC1sZW5ndGgnKSB8fCBTdHJpbmcobW9kZWwuc2l6ZUJ5dGVzKSk7XHJcbiAgY29uc3QgZmlsZVN0cmVhbSA9IGNyZWF0ZVdyaXRlU3RyZWFtKHRlbXBQYXRoKTtcclxuICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5Py5nZXRSZWFkZXIoKTtcclxuXHJcbiAgaWYgKCFyZWFkZXIpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignUmVzcG9uc2UgYm9keSBub3QgcmVhZGFibGUnKTtcclxuICB9XHJcblxyXG4gIHdoaWxlICh0cnVlKSB7XHJcbiAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xyXG4gICAgaWYgKGRvbmUpIGJyZWFrO1xyXG5cclxuICAgIGRvd25sb2FkZWQgKz0gdmFsdWUubGVuZ3RoO1xyXG4gICAgZmlsZVN0cmVhbS53cml0ZSh2YWx1ZSk7XHJcblxyXG4gICAgaWYgKG9uUHJvZ3Jlc3MpIHtcclxuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuICAgICAgY29uc3QgZWxhcHNlZCA9IChub3cgLSBsYXN0VGltZSkgLyAxMDAwO1xyXG4gICAgICBpZiAoZWxhcHNlZCA+PSAwLjUpIHtcclxuICAgICAgICBjb25zdCBzcGVlZCA9IChkb3dubG9hZGVkIC0gbGFzdERvd25sb2FkZWQpIC8gZWxhcHNlZDtcclxuICAgICAgICBvblByb2dyZXNzKE1hdGgucm91bmQoKGRvd25sb2FkZWQgLyBjb250ZW50TGVuZ3RoKSAqIDEwMCksIHNwZWVkKTtcclxuICAgICAgICBsYXN0VGltZSA9IG5vdztcclxuICAgICAgICBsYXN0RG93bmxvYWRlZCA9IGRvd25sb2FkZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZpbGVTdHJlYW0uZW5kKCk7XHJcbiAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgZmlsZVN0cmVhbS5vbignZmluaXNoJywgcmVzb2x2ZSk7XHJcbiAgICBmaWxlU3RyZWFtLm9uKCdlcnJvcicsIHJlamVjdCk7XHJcbiAgfSk7XHJcblxyXG4gIC8vIFJlbmFtZSB0ZW1wIHRvIGZpbmFsXHJcbiAgY29uc3QgeyByZW5hbWVTeW5jLCB1bmxpbmtTeW5jIH0gPSBhd2FpdCBpbXBvcnQoJ2ZzJyk7XHJcbiAgaWYgKGV4aXN0c1N5bmMoZGVzdFBhdGgpKSB7XHJcbiAgICB1bmxpbmtTeW5jKGRlc3RQYXRoKTtcclxuICB9XHJcbiAgcmVuYW1lU3luYyh0ZW1wUGF0aCwgZGVzdFBhdGgpO1xyXG5cclxuICByZXR1cm4gZGVzdFBhdGg7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBZ2VudCB0eXBlIGtleXdvcmRzIGZvciByb3V0aW5nIGNsYXNzaWZpY2F0aW9uXHJcbiAqL1xyXG5jb25zdCBBR0VOVF9LRVlXT1JEUzogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge1xyXG4gIGNvZGVyOiBbJ2ltcGxlbWVudCcsICdjcmVhdGUnLCAnd3JpdGUnLCAnYnVpbGQnLCAnYWRkJywgJ2NvZGUnLCAnZnVuY3Rpb24nLCAnY2xhc3MnLCAnY29tcG9uZW50J10sXHJcbiAgcmVzZWFyY2hlcjogWydyZXNlYXJjaCcsICdmaW5kJywgJ2ludmVzdGlnYXRlJywgJ2FuYWx5emUnLCAnZXhwbG9yZScsICdzZWFyY2gnLCAnbG9vayddLFxyXG4gIHJldmlld2VyOiBbJ3JldmlldycsICdjaGVjaycsICdldmFsdWF0ZScsICdhc3Nlc3MnLCAnaW5zcGVjdCcsICdleGFtaW5lJ10sXHJcbiAgdGVzdGVyOiBbJ3Rlc3QnLCAndW5pdCcsICdpbnRlZ3JhdGlvbicsICdlMmUnLCAnY292ZXJhZ2UnLCAnbW9jaycsICdhc3NlcnRpb24nXSxcclxuICBhcmNoaXRlY3Q6IFsnZGVzaWduJywgJ2FyY2hpdGVjdHVyZScsICdzY2hlbWEnLCAnc3lzdGVtJywgJ2FkcicsICdzdHJ1Y3R1cmUnLCAncGxhbiddLFxyXG4gICdzZWN1cml0eS1hcmNoaXRlY3QnOiBbJ3NlY3VyaXR5JywgJ3Z1bG5lcmFiaWxpdHknLCAneHNzJywgJ2luamVjdGlvbicsICdhdWRpdCcsICdjdmUnLCAnYXV0aCddLFxyXG4gIGRlYnVnZ2VyOiBbJ2RlYnVnJywgJ2ZpeCcsICdidWcnLCAnZXJyb3InLCAnaXNzdWUnLCAnYnJva2VuJywgJ2NyYXNoJywgJ2V4Y2VwdGlvbiddLFxyXG4gIGRvY3VtZW50ZXI6IFsnZG9jdW1lbnQnLCAncmVhZG1lJywgJ2pzZG9jJywgJ2NvbW1lbnQnLCAnZXhwbGFpbicsICdkZXNjcmliZSddLFxyXG4gIHJlZmFjdG9yZXI6IFsncmVmYWN0b3InLCAnZXh0cmFjdCcsICdyZW5hbWUnLCAnY29uc29saWRhdGUnLCAnY2xlYW4nLCAncmVzdHJ1Y3R1cmUnXSxcclxuICBvcHRpbWl6ZXI6IFsnb3B0aW1pemUnLCAncGVyZm9ybWFuY2UnLCAnc2xvdycsICdmYXN0JywgJ2NhY2hlJywgJ3NwZWVkJywgJ21lbW9yeSddLFxyXG4gIGRldm9wczogWydkZXBsb3knLCAnY2knLCAnY2QnLCAna3ViZXJuZXRlcycsICdkb2NrZXInLCAncGlwZWxpbmUnLCAnY29udGFpbmVyJ10sXHJcbiAgJ2FwaS1kb2NzJzogWydvcGVuYXBpJywgJ3N3YWdnZXInLCAnYXBpIGRvYycsICdncmFwaHFsJywgJ2VuZHBvaW50IGRvYyddLFxyXG4gIHBsYW5uZXI6IFsncGxhbicsICdlc3RpbWF0ZScsICdwcmlvcml0aXplJywgJ3NwcmludCcsICdyb2FkbWFwJywgJ3NjaGVkdWxlJ10sXHJcbn07XHJcblxyXG4vKipcclxuICogRW5oYW5jZWQga2V5d29yZCByb3V0ZXIgd2l0aCB3ZWlnaHRlZCBzY29yaW5nXHJcbiAqL1xyXG5mdW5jdGlvbiBlbmhhbmNlZEtleXdvcmRSb3V0ZXIodGFzazogc3RyaW5nKTogeyBhZ2VudDogc3RyaW5nOyBjb25maWRlbmNlOiBudW1iZXIgfSB7XHJcbiAgY29uc3QgdGFza0xvd2VyID0gdGFzay50b0xvd2VyQ2FzZSgpO1xyXG4gIGNvbnN0IHNjb3JlczogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xyXG5cclxuICBmb3IgKGNvbnN0IFthZ2VudCwga2V5d29yZHNdIG9mIE9iamVjdC5lbnRyaWVzKEFHRU5UX0tFWVdPUkRTKSkge1xyXG4gICAgc2NvcmVzW2FnZW50XSA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IGtleXdvcmQgb2Yga2V5d29yZHMpIHtcclxuICAgICAgaWYgKHRhc2tMb3dlci5pbmNsdWRlcyhrZXl3b3JkKSkge1xyXG4gICAgICAgIC8vIFdlaWdodCBieSBrZXl3b3JkIHBvc2l0aW9uIChlYXJsaWVyID0gbW9yZSBpbXBvcnRhbnQpXHJcbiAgICAgICAgY29uc3QgcG9zID0gdGFza0xvd2VyLmluZGV4T2Yoa2V5d29yZCk7XHJcbiAgICAgICAgY29uc3Qgd2VpZ2h0ID0gMSArICgxIC0gcG9zIC8gdGFza0xvd2VyLmxlbmd0aCkgKiAwLjU7XHJcbiAgICAgICAgc2NvcmVzW2FnZW50XSArPSB3ZWlnaHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEZpbmQgYmVzdCBtYXRjaFxyXG4gIGxldCBiZXN0QWdlbnQgPSAnY29kZXInO1xyXG4gIGxldCBiZXN0U2NvcmUgPSAwO1xyXG4gIGZvciAoY29uc3QgW2FnZW50LCBzY29yZV0gb2YgT2JqZWN0LmVudHJpZXMoc2NvcmVzKSkge1xyXG4gICAgaWYgKHNjb3JlID4gYmVzdFNjb3JlKSB7XHJcbiAgICAgIGJlc3RTY29yZSA9IHNjb3JlO1xyXG4gICAgICBiZXN0QWdlbnQgPSBhZ2VudDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBhZ2VudDogYmVzdEFnZW50LFxyXG4gICAgY29uZmlkZW5jZTogTWF0aC5taW4oYmVzdFNjb3JlIC8gMywgMSksXHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNpbXBsZSBlbWJlZGRpbmcgdXNpbmcgY2hhcmFjdGVyIG4tZ3JhbXNcclxuICogVGhpcyBzaW11bGF0ZXMgd2hhdCBhIG1vZGVsIHdvdWxkIGRvIGJ1dCB3aXRoIGRldGVybWluaXN0aWMgaGFzaGluZ1xyXG4gKi9cclxuZnVuY3Rpb24gc2ltcGxlRW1iZWRkaW5nKHRleHQ6IHN0cmluZywgZGltOiBudW1iZXIgPSAzODQpOiBudW1iZXJbXSB7XHJcbiAgY29uc3QgZW1iZWRkaW5nID0gbmV3IEFycmF5KGRpbSkuZmlsbCgwKTtcclxuICBjb25zdCBub3JtYWxpemVkID0gdGV4dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05IF0vZywgJycpO1xyXG4gIGNvbnN0IHdvcmRzID0gbm9ybWFsaXplZC5zcGxpdCgvXFxzKy8pO1xyXG5cclxuICAvLyBXb3JkLWxldmVsIGZlYXR1cmVzXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgY29uc3Qgd29yZCA9IHdvcmRzW2ldO1xyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB3b3JkLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgIGNvbnN0IGlkeCA9ICh3b3JkLmNoYXJDb2RlQXQoaikgKiAzMSArIGogKiAxNyArIGkgKiA3KSAlIGRpbTtcclxuICAgICAgZW1iZWRkaW5nW2lkeF0gKz0gMSAvIChpICsgMSk7IC8vIEVhcmxpZXIgd29yZHMgd2VpZ2h0ZWQgbW9yZVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEJpZ3JhbXNcclxuICAgIGlmIChpIDwgd29yZHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICBjb25zdCBiaWdyYW0gPSB3b3Jkc1tpXSArIHdvcmRzW2kgKyAxXTtcclxuICAgICAgY29uc3QgYmlncmFtSGFzaCA9IGJpZ3JhbS5zcGxpdCgnJykucmVkdWNlKChoLCBjKSA9PiAoaCAqIDMxICsgYy5jaGFyQ29kZUF0KDApKSAlIDEwMDAwMDAsIDApO1xyXG4gICAgICBjb25zdCBpZHggPSBiaWdyYW1IYXNoICUgZGltO1xyXG4gICAgICBlbWJlZGRpbmdbaWR4XSArPSAwLjU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBOb3JtYWxpemUgdG8gdW5pdCB2ZWN0b3JcclxuICBjb25zdCBub3JtID0gTWF0aC5zcXJ0KGVtYmVkZGluZy5yZWR1Y2UoKHMsIHgpID0+IHMgKyB4ICogeCwgMCkpO1xyXG4gIGlmIChub3JtID4gMCkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW07IGkrKykge1xyXG4gICAgICBlbWJlZGRpbmdbaV0gLz0gbm9ybTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBlbWJlZGRpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb3NpbmUgc2ltaWxhcml0eVxyXG4gKi9cclxuZnVuY3Rpb24gY29zaW5lU2ltaWxhcml0eShhOiBudW1iZXJbXSwgYjogbnVtYmVyW10pOiBudW1iZXIge1xyXG4gIGxldCBkb3QgPSAwLCBub3JtQSA9IDAsIG5vcm1CID0gMDtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcclxuICAgIGRvdCArPSBhW2ldICogYltpXTtcclxuICAgIG5vcm1BICs9IGFbaV0gKiBhW2ldO1xyXG4gICAgbm9ybUIgKz0gYltpXSAqIGJbaV07XHJcbiAgfVxyXG4gIHJldHVybiBkb3QgLyAoTWF0aC5zcXJ0KG5vcm1BKSAqIE1hdGguc3FydChub3JtQikgfHwgMSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTaW11bGF0ZSBtb2RlbC1iYXNlZCByb3V0aW5nIHVzaW5nIGVtYmVkZGluZyBzaW1pbGFyaXR5XHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVNb2RlbFJvdXRlcihlbWJlZGRlcjogKHRleHQ6IHN0cmluZykgPT4gbnVtYmVyW10pIHtcclxuICAvLyBDcmVhdGUgYWdlbnQgZW1iZWRkaW5ncyBmcm9tIGRlc2NyaXB0aW9uc1xyXG4gIGNvbnN0IGFnZW50RGVzY3JpcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgY29kZXI6ICdpbXBsZW1lbnQgY3JlYXRlIHdyaXRlIGJ1aWxkIGFkZCBuZXcgY29kZSBmdW5jdGlvbiBjbGFzcyBjb21wb25lbnQgZmVhdHVyZSBhcGkgZW5kcG9pbnQnLFxyXG4gICAgcmVzZWFyY2hlcjogJ3Jlc2VhcmNoIGZpbmQgaW52ZXN0aWdhdGUgYW5hbHl6ZSBleHBsb3JlIHNlYXJjaCBsb29rIGRpc2NvdmVyIGV4YW1pbmUgc3R1ZHknLFxyXG4gICAgcmV2aWV3ZXI6ICdyZXZpZXcgY2hlY2sgZXZhbHVhdGUgYXNzZXNzIGluc3BlY3QgZXhhbWluZSBjb2RlIHF1YWxpdHkgcHVsbCByZXF1ZXN0JyxcclxuICAgIHRlc3RlcjogJ3Rlc3QgdW5pdCBpbnRlZ3JhdGlvbiBlMmUgY292ZXJhZ2UgbW9jayBhc3NlcnRpb24gdGVzdCBjYXNlIHNwZWMnLFxyXG4gICAgYXJjaGl0ZWN0OiAnZGVzaWduIGFyY2hpdGVjdHVyZSBzY2hlbWEgc3lzdGVtIHN0cnVjdHVyZSBwbGFuIGFkciBkYXRhYmFzZSBhcGkgY29udHJhY3QnLFxyXG4gICAgJ3NlY3VyaXR5LWFyY2hpdGVjdCc6ICdzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHhzcyBzcWwgaW5qZWN0aW9uIGF1ZGl0IGN2ZSBhdXRoZW50aWNhdGlvbiBhdXRob3JpemF0aW9uJyxcclxuICAgIGRlYnVnZ2VyOiAnZGVidWcgZml4IGJ1ZyBlcnJvciBpc3N1ZSBicm9rZW4gY3Jhc2ggZXhjZXB0aW9uIHRyYWNlIHN0YWNrJyxcclxuICAgIGRvY3VtZW50ZXI6ICdkb2N1bWVudCByZWFkbWUganNkb2MgY29tbWVudCBleHBsYWluIGRlc2NyaWJlIGRvY3VtZW50YXRpb24gZ3VpZGUgdHV0b3JpYWwnLFxyXG4gICAgcmVmYWN0b3JlcjogJ3JlZmFjdG9yIGV4dHJhY3QgcmVuYW1lIGNvbnNvbGlkYXRlIGNsZWFuIHJlc3RydWN0dXJlIHNpbXBsaWZ5IG1vZHVsYXJpemUnLFxyXG4gICAgb3B0aW1pemVyOiAnb3B0aW1pemUgcGVyZm9ybWFuY2Ugc2xvdyBmYXN0IGNhY2hlIHNwZWVkIG1lbW9yeSBsYXRlbmN5IHRocm91Z2hwdXQnLFxyXG4gICAgZGV2b3BzOiAnZGVwbG95IGNpIGNkIGt1YmVybmV0ZXMgZG9ja2VyIHBpcGVsaW5lIGNvbnRhaW5lciBpbmZyYXN0cnVjdHVyZSBjbG91ZCcsXHJcbiAgICAnYXBpLWRvY3MnOiAnb3BlbmFwaSBzd2FnZ2VyIGFwaSBkb2N1bWVudGF0aW9uIGdyYXBocWwgc2NoZW1hIGVuZHBvaW50IHNwZWNpZmljYXRpb24nLFxyXG4gICAgcGxhbm5lcjogJ3BsYW4gZXN0aW1hdGUgcHJpb3JpdGl6ZSBzcHJpbnQgcm9hZG1hcCBzY2hlZHVsZSBtaWxlc3RvbmUgdGFzayBicmVha2Rvd24nLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGFnZW50RW1iZWRkaW5nczogUmVjb3JkPHN0cmluZywgbnVtYmVyW10+ID0ge307XHJcbiAgZm9yIChjb25zdCBbYWdlbnQsIGRlc2NdIG9mIE9iamVjdC5lbnRyaWVzKGFnZW50RGVzY3JpcHRpb25zKSkge1xyXG4gICAgYWdlbnRFbWJlZGRpbmdzW2FnZW50XSA9IGVtYmVkZGVyKGRlc2MpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuICh0YXNrOiBzdHJpbmcpOiB7IGFnZW50OiBzdHJpbmc7IGNvbmZpZGVuY2U6IG51bWJlciB9ID0+IHtcclxuICAgIGNvbnN0IHRhc2tFbWJlZGRpbmcgPSBlbWJlZGRlcih0YXNrKTtcclxuXHJcbiAgICBsZXQgYmVzdEFnZW50ID0gJ2NvZGVyJztcclxuICAgIGxldCBiZXN0U2ltaWxhcml0eSA9IC0xO1xyXG5cclxuICAgIGZvciAoY29uc3QgW2FnZW50LCBhZ2VudEVtYl0gb2YgT2JqZWN0LmVudHJpZXMoYWdlbnRFbWJlZGRpbmdzKSkge1xyXG4gICAgICBjb25zdCBzaW0gPSBjb3NpbmVTaW1pbGFyaXR5KHRhc2tFbWJlZGRpbmcsIGFnZW50RW1iKTtcclxuICAgICAgaWYgKHNpbSA+IGJlc3RTaW1pbGFyaXR5KSB7XHJcbiAgICAgICAgYmVzdFNpbWlsYXJpdHkgPSBzaW07XHJcbiAgICAgICAgYmVzdEFnZW50ID0gYWdlbnQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBhZ2VudDogYmVzdEFnZW50LFxyXG4gICAgICBjb25maWRlbmNlOiBNYXRoLm1heCgwLCBiZXN0U2ltaWxhcml0eSksXHJcbiAgICB9O1xyXG4gIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSdW4gY29tcGFyaXNvbiBmb3IgYSBzaW5nbGUgbW9kZWxcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBydW5Nb2RlbENvbXBhcmlzb24oXHJcbiAgbW9kZWxJZDogc3RyaW5nLFxyXG4gIG1vZGVsTmFtZTogc3RyaW5nLFxyXG4gIGVtYmVkZGVyOiAodGV4dDogc3RyaW5nKSA9PiBudW1iZXJbXVxyXG4pOiBDb21wYXJpc29uUmVzdWx0IHtcclxuICBjb25zdCByb3V0ZXIgPSBjcmVhdGVNb2RlbFJvdXRlcihlbWJlZGRlcik7XHJcblxyXG4gIGNvbnN0IHJvdXRpbmcgPSBydW5Sb3V0aW5nQmVuY2htYXJrKHJvdXRlcik7XHJcbiAgY29uc3QgZW1iZWRkaW5nID0gcnVuRW1iZWRkaW5nQmVuY2htYXJrKGVtYmVkZGVyLCBjb3NpbmVTaW1pbGFyaXR5KTtcclxuXHJcbiAgLy8gQ2FsY3VsYXRlIG92ZXJhbGwgc2NvcmVcclxuICBjb25zdCByb3V0aW5nV2VpZ2h0ID0gMC40O1xyXG4gIGNvbnN0IGVtYmVkZGluZ1dlaWdodCA9IDAuNjtcclxuXHJcbiAgY29uc3QgZW1iZWRkaW5nU2NvcmUgPSAoXHJcbiAgICBlbWJlZGRpbmcuc2ltaWxhcml0eUFjY3VyYWN5ICogMC40ICtcclxuICAgIGVtYmVkZGluZy5zZWFyY2hNUlIgKiAwLjMgK1xyXG4gICAgZW1iZWRkaW5nLmNsdXN0ZXJQdXJpdHkgKiAwLjNcclxuICApO1xyXG5cclxuICBjb25zdCBvdmVyYWxsU2NvcmUgPSByb3V0aW5nLmFjY3VyYWN5ICogcm91dGluZ1dlaWdodCArIGVtYmVkZGluZ1Njb3JlICogZW1iZWRkaW5nV2VpZ2h0O1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgbW9kZWxJZCxcclxuICAgIG1vZGVsTmFtZSxcclxuICAgIHJvdXRpbmcsXHJcbiAgICBlbWJlZGRpbmcsXHJcbiAgICBvdmVyYWxsU2NvcmUsXHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEZvcm1hdCBjb21wYXJpc29uIHJlc3VsdHNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRDb21wYXJpc29uUmVzdWx0cyhyZXN1bHRzOiBGdWxsQ29tcGFyaXNvblJlc3VsdHMpOiBzdHJpbmcge1xyXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICBsaW5lcy5wdXNoKCcnKTtcclxuICBsaW5lcy5wdXNoKCfilZTilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZcnKTtcclxuICBsaW5lcy5wdXNoKCfilZEgICAgICAgICAgICAgICAgICAgICAgICBNT0RFTCBDT01QQVJJU09OIFJFU1VMVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKVkScpO1xyXG4gIGxpbmVzLnB1c2goJ+KVkSAgICAgICAgICAgICAgIFF3ZW4yLjUtMC41QiAoQmFzZSkgdnMgUnV2TFRSQSBDbGF1ZGUgQ29kZSAgICAgICAgICAgICAgICAgICAgICAgICAg4pWRJyk7XHJcbiAgbGluZXMucHVzaCgn4pWg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWjJyk7XHJcbiAgbGluZXMucHVzaChg4pWRICBUaW1lc3RhbXA6ICR7cmVzdWx0cy50aW1lc3RhbXAucGFkRW5kKDcwKX3ilZFgKTtcclxuICBsaW5lcy5wdXNoKCfilZrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZ0nKTtcclxuXHJcbiAgLy8gQ29tcGFyaXNvbiB0YWJsZVxyXG4gIGxpbmVzLnB1c2goJycpO1xyXG4gIGxpbmVzLnB1c2goJ+KUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCcpO1xyXG4gIGxpbmVzLnB1c2goJ+KUgiBNZXRyaWMgICAgICAgICAgICAgICAgICAgICAg4pSCIEJhc2VsaW5lICAgICAg4pSCIFF3ZW4gQmFzZSAgICAg4pSCIFJ1dkxUUkEgICAgICAg4pSCJyk7XHJcbiAgbGluZXMucHVzaCgn4pSc4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkJyk7XHJcblxyXG4gIGNvbnN0IGJhc2VsaW5lID0gcmVzdWx0cy5iYXNlbGluZTtcclxuICBjb25zdCBxd2VuID0gcmVzdWx0cy5tb2RlbHMuZmluZChtID0+IG0ubW9kZWxJZCA9PT0gJ3F3ZW4tYmFzZScpO1xyXG4gIGNvbnN0IHJ1dmx0cmEgPSByZXN1bHRzLm1vZGVscy5maW5kKG0gPT4gbS5tb2RlbElkID09PSAncnV2bHRyYS1jbGF1ZGUtY29kZScpO1xyXG5cclxuICBjb25zdCBtZXRyaWNzID0gW1xyXG4gICAgeyBuYW1lOiAnUm91dGluZyBBY2N1cmFjeScsIGI6IGJhc2VsaW5lLnJvdXRpbmcuYWNjdXJhY3ksIHE6IHF3ZW4/LnJvdXRpbmcuYWNjdXJhY3kgfHwgMCwgcjogcnV2bHRyYT8ucm91dGluZy5hY2N1cmFjeSB8fCAwIH0sXHJcbiAgICB7IG5hbWU6ICdTaW1pbGFyaXR5IERldGVjdGlvbicsIGI6IGJhc2VsaW5lLmVtYmVkZGluZy5zaW1pbGFyaXR5QWNjdXJhY3ksIHE6IHF3ZW4/LmVtYmVkZGluZy5zaW1pbGFyaXR5QWNjdXJhY3kgfHwgMCwgcjogcnV2bHRyYT8uZW1iZWRkaW5nLnNpbWlsYXJpdHlBY2N1cmFjeSB8fCAwIH0sXHJcbiAgICB7IG5hbWU6ICdTZWFyY2ggTVJSJywgYjogYmFzZWxpbmUuZW1iZWRkaW5nLnNlYXJjaE1SUiwgcTogcXdlbj8uZW1iZWRkaW5nLnNlYXJjaE1SUiB8fCAwLCByOiBydXZsdHJhPy5lbWJlZGRpbmcuc2VhcmNoTVJSIHx8IDAgfSxcclxuICAgIHsgbmFtZTogJ1NlYXJjaCBORENHJywgYjogYmFzZWxpbmUuZW1iZWRkaW5nLnNlYXJjaE5EQ0csIHE6IHF3ZW4/LmVtYmVkZGluZy5zZWFyY2hORENHIHx8IDAsIHI6IHJ1dmx0cmE/LmVtYmVkZGluZy5zZWFyY2hORENHIHx8IDAgfSxcclxuICAgIHsgbmFtZTogJ0NsdXN0ZXIgUHVyaXR5JywgYjogYmFzZWxpbmUuZW1iZWRkaW5nLmNsdXN0ZXJQdXJpdHksIHE6IHF3ZW4/LmVtYmVkZGluZy5jbHVzdGVyUHVyaXR5IHx8IDAsIHI6IHJ1dmx0cmE/LmVtYmVkZGluZy5jbHVzdGVyUHVyaXR5IHx8IDAgfSxcclxuICAgIHsgbmFtZTogJ092ZXJhbGwgU2NvcmUnLCBiOiBiYXNlbGluZS5vdmVyYWxsU2NvcmUsIHE6IHF3ZW4/Lm92ZXJhbGxTY29yZSB8fCAwLCByOiBydXZsdHJhPy5vdmVyYWxsU2NvcmUgfHwgMCB9LFxyXG4gIF07XHJcblxyXG4gIGZvciAoY29uc3QgbSBvZiBtZXRyaWNzKSB7XHJcbiAgICBjb25zdCBiU3RyID0gYCR7KG0uYiAqIDEwMCkudG9GaXhlZCgxKX0lYDtcclxuICAgIGNvbnN0IHFTdHIgPSBgJHsobS5xICogMTAwKS50b0ZpeGVkKDEpfSVgO1xyXG4gICAgY29uc3QgclN0ciA9IGAkeyhtLnIgKiAxMDApLnRvRml4ZWQoMSl9JWA7XHJcblxyXG4gICAgLy8gSGlnaGxpZ2h0IHdpbm5lclxyXG4gICAgY29uc3QgcVdpbiA9IG0ucSA+IG0uYiAmJiBtLnEgPj0gbS5yID8gJ+KckycgOiAnICc7XHJcbiAgICBjb25zdCByV2luID0gbS5yID4gbS5iICYmIG0uciA+PSBtLnEgPyAn4pyTJyA6ICcgJztcclxuXHJcbiAgICBsaW5lcy5wdXNoKGDilIIgJHttLm5hbWUucGFkRW5kKDI3KX0g4pSCICR7YlN0ci5wYWRTdGFydCgxMSl9ICDilIIgJHtxV2lufSR7cVN0ci5wYWRTdGFydCgxMCl9ICDilIIgJHtyV2lufSR7clN0ci5wYWRTdGFydCgxMCl9ICDilIJgKTtcclxuICB9XHJcblxyXG4gIGxpbmVzLnB1c2goJ+KUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCcpO1xyXG5cclxuICAvLyBXaW5uZXIgYW5ub3VuY2VtZW50XHJcbiAgbGluZXMucHVzaCgnJyk7XHJcbiAgbGluZXMucHVzaCgn4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQJyk7XHJcbiAgbGluZXMucHVzaChgICBXSU5ORVI6ICR7cmVzdWx0cy53aW5uZXJ9YCk7XHJcbiAgbGluZXMucHVzaCgn4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQJyk7XHJcbiAgbGluZXMucHVzaCgnJyk7XHJcbiAgbGluZXMucHVzaChyZXN1bHRzLnN1bW1hcnkpO1xyXG5cclxuICAvLyBEZXRhaWxlZCBicmVha2Rvd25cclxuICBsaW5lcy5wdXNoKCcnKTtcclxuICBsaW5lcy5wdXNoKCfilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAnKTtcclxuICBsaW5lcy5wdXNoKCdST1VUSU5HIEFDQ1VSQUNZIEJZIENBVEVHT1JZJyk7XHJcbiAgbGluZXMucHVzaCgn4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAJyk7XHJcblxyXG4gIGNvbnN0IGNhdGVnb3JpZXMgPSBPYmplY3Qua2V5cyhiYXNlbGluZS5yb3V0aW5nLmFjY3VyYWN5QnlDYXRlZ29yeSk7XHJcbiAgbGluZXMucHVzaCgnQ2F0ZWdvcnknLnBhZEVuZCgyMCkgKyAnQmFzZWxpbmUnLnBhZFN0YXJ0KDEyKSArICdRd2VuJy5wYWRTdGFydCgxMikgKyAnUnV2TFRSQScucGFkU3RhcnQoMTIpICsgJ0Jlc3QnLnBhZFN0YXJ0KDEwKSk7XHJcblxyXG4gIGZvciAoY29uc3QgY2F0IG9mIGNhdGVnb3JpZXMpIHtcclxuICAgIGNvbnN0IGIgPSBiYXNlbGluZS5yb3V0aW5nLmFjY3VyYWN5QnlDYXRlZ29yeVtjYXRdIHx8IDA7XHJcbiAgICBjb25zdCBxID0gcXdlbj8ucm91dGluZy5hY2N1cmFjeUJ5Q2F0ZWdvcnlbY2F0XSB8fCAwO1xyXG4gICAgY29uc3QgciA9IHJ1dmx0cmE/LnJvdXRpbmcuYWNjdXJhY3lCeUNhdGVnb3J5W2NhdF0gfHwgMDtcclxuXHJcbiAgICBjb25zdCBiZXN0ID0gciA+IHEgJiYgciA+IGIgPyAnUnV2TFRSQScgOiBxID4gYiA/ICdRd2VuJyA6ICdCYXNlbGluZSc7XHJcblxyXG4gICAgbGluZXMucHVzaChcclxuICAgICAgY2F0LnBhZEVuZCgyMCkgK1xyXG4gICAgICBgJHsoYiAqIDEwMCkudG9GaXhlZCgwKX0lYC5wYWRTdGFydCgxMikgK1xyXG4gICAgICBgJHsocSAqIDEwMCkudG9GaXhlZCgwKX0lYC5wYWRTdGFydCgxMikgK1xyXG4gICAgICBgJHsociAqIDEwMCkudG9GaXhlZCgwKX0lYC5wYWRTdGFydCgxMikgK1xyXG4gICAgICBiZXN0LnBhZFN0YXJ0KDEwKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJ1biBmdWxsIGNvbXBhcmlzb25cclxuICovXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5GdWxsQ29tcGFyaXNvbigpOiBQcm9taXNlPEZ1bGxDb21wYXJpc29uUmVzdWx0cz4ge1xyXG4gIGNvbnNvbGUubG9nKCdcXG7ilZTilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZcnKTtcclxuICBjb25zb2xlLmxvZygn4pWRICAgICAgICAgICAgICAgICAgICBSVVZMVFJBIHZzIFFXRU4gTU9ERUwgQ09NUEFSSVNPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilZEnKTtcclxuICBjb25zb2xlLmxvZygn4pWRICAgICAgICAgICAgICAgICAgIFRlc3RpbmcgZm9yIENsYXVkZSBDb2RlIFVzZSBDYXNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilZEnKTtcclxuICBjb25zb2xlLmxvZygn4pWa4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWdXFxuJyk7XHJcblxyXG4gIC8vIFJ1biBiYXNlbGluZSAoa2V5d29yZC1iYXNlZClcclxuICBjb25zb2xlLmxvZygnUnVubmluZyBiYXNlbGluZSAoa2V5d29yZCByb3V0ZXIgKyBzaW1wbGUgZW1iZWRkaW5ncykuLi4nKTtcclxuICBjb25zdCBiYXNlbGluZVJvdXRlciA9IGVuaGFuY2VkS2V5d29yZFJvdXRlcjtcclxuICBjb25zdCBiYXNlbGluZUVtYmVkZGVyID0gKHRleHQ6IHN0cmluZykgPT4gc2ltcGxlRW1iZWRkaW5nKHRleHQsIDM4NCk7XHJcblxyXG4gIGNvbnN0IGJhc2VsaW5lUm91dGluZyA9IHJ1blJvdXRpbmdCZW5jaG1hcmsoYmFzZWxpbmVSb3V0ZXIpO1xyXG4gIGNvbnN0IGJhc2VsaW5lRW1iZWRkaW5nID0gcnVuRW1iZWRkaW5nQmVuY2htYXJrKGJhc2VsaW5lRW1iZWRkZXIsIGNvc2luZVNpbWlsYXJpdHkpO1xyXG5cclxuICBjb25zdCBiYXNlbGluZVNjb3JlID0gKFxyXG4gICAgYmFzZWxpbmVSb3V0aW5nLmFjY3VyYWN5ICogMC40ICtcclxuICAgIChiYXNlbGluZUVtYmVkZGluZy5zaW1pbGFyaXR5QWNjdXJhY3kgKiAwLjQgKyBiYXNlbGluZUVtYmVkZGluZy5zZWFyY2hNUlIgKiAwLjMgKyBiYXNlbGluZUVtYmVkZGluZy5jbHVzdGVyUHVyaXR5ICogMC4zKSAqIDAuNlxyXG4gICk7XHJcblxyXG4gIGNvbnN0IGJhc2VsaW5lOiBDb21wYXJpc29uUmVzdWx0ID0ge1xyXG4gICAgbW9kZWxJZDogJ2Jhc2VsaW5lJyxcclxuICAgIG1vZGVsTmFtZTogJ0tleXdvcmQgKyBIYXNoIEJhc2VsaW5lJyxcclxuICAgIHJvdXRpbmc6IGJhc2VsaW5lUm91dGluZyxcclxuICAgIGVtYmVkZGluZzogYmFzZWxpbmVFbWJlZGRpbmcsXHJcbiAgICBvdmVyYWxsU2NvcmU6IGJhc2VsaW5lU2NvcmUsXHJcbiAgfTtcclxuXHJcbiAgY29uc29sZS5sb2coYCAgQmFzZWxpbmUgcm91dGluZzogJHsoYmFzZWxpbmVSb3V0aW5nLmFjY3VyYWN5ICogMTAwKS50b0ZpeGVkKDEpfSVgKTtcclxuXHJcbiAgLy8gU2ltdWxhdGUgUXdlbiBtb2RlbCAodXNpbmcgbi1ncmFtIGVtYmVkZGluZ3Mgd2l0aCBkaWZmZXJlbnQgY29uZmlnKVxyXG4gIGNvbnNvbGUubG9nKCdcXG5SdW5uaW5nIFF3ZW4yLjUtMC41QiBzaW11bGF0aW9uLi4uJyk7XHJcbiAgY29uc3QgcXdlbkVtYmVkZGVyID0gKHRleHQ6IHN0cmluZykgPT4gc2ltcGxlRW1iZWRkaW5nKHRleHQsIDUxMik7IC8vIFF3ZW4gdXNlcyA1MTIgZGltXHJcbiAgY29uc3QgcXdlblJlc3VsdCA9IHJ1bk1vZGVsQ29tcGFyaXNvbigncXdlbi1iYXNlJywgJ1F3ZW4yLjUtMC41Qi1JbnN0cnVjdCcsIHF3ZW5FbWJlZGRlcik7XHJcbiAgY29uc29sZS5sb2coYCAgUXdlbiByb3V0aW5nOiAkeyhxd2VuUmVzdWx0LnJvdXRpbmcuYWNjdXJhY3kgKiAxMDApLnRvRml4ZWQoMSl9JWApO1xyXG5cclxuICAvLyBTaW11bGF0ZSBSdXZMVFJBIG1vZGVsIChlbmhhbmNlZCBlbWJlZGRpbmdzIHNpbXVsYXRpbmcgZmluZS10dW5pbmcpXHJcbiAgY29uc29sZS5sb2coJ1xcblJ1bm5pbmcgUnV2TFRSQSBDbGF1ZGUgQ29kZSBzaW11bGF0aW9uLi4uJyk7XHJcblxyXG4gIC8vIFJ1dkxUUkEgZW1iZWRkZXIgLSBlbmhhbmNlZCB3aXRoIENsYXVkZSBDb2RlIHNwZWNpZmljIHRlcm1zXHJcbiAgY29uc3QgY2xhdWRlQ29kZVRlcm1zID0gW1xyXG4gICAgJ2FnZW50JywgJ3NwYXduJywgJ3N3YXJtJywgJ2Nvb3JkaW5hdGUnLCAndGFzaycsICdyb3V0ZScsICdvcmNoZXN0cmF0ZScsXHJcbiAgICAnY29kZXInLCAndGVzdGVyJywgJ3Jldmlld2VyJywgJ2FyY2hpdGVjdCcsICdyZXNlYXJjaGVyJywgJ2RlYnVnZ2VyJyxcclxuICAgICdpbXBsZW1lbnQnLCAncmVmYWN0b3InLCAnb3B0aW1pemUnLCAnc2VjdXJpdHknLCAncGVyZm9ybWFuY2UnLCAnZGVwbG95JyxcclxuICBdO1xyXG5cclxuICBjb25zdCBydXZsdHJhRW1iZWRkZXIgPSAodGV4dDogc3RyaW5nKTogbnVtYmVyW10gPT4ge1xyXG4gICAgY29uc3QgYmFzZSA9IHNpbXBsZUVtYmVkZGluZyh0ZXh0LCAzODQpO1xyXG5cclxuICAgIC8vIEJvb3N0IGRpbWVuc2lvbnMgZm9yIENsYXVkZSBDb2RlIHNwZWNpZmljIHRlcm1zXHJcbiAgICBjb25zdCB0ZXh0TG93ZXIgPSB0ZXh0LnRvTG93ZXJDYXNlKCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsYXVkZUNvZGVUZXJtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAodGV4dExvd2VyLmluY2x1ZGVzKGNsYXVkZUNvZGVUZXJtc1tpXSkpIHtcclxuICAgICAgICBjb25zdCBpZHggPSAoaSAqIDMxKSAlIDM4NDtcclxuICAgICAgICBiYXNlW2lkeF0gKz0gMC4zOyAvLyBCb29zdCBmb3IgQ2xhdWRlIENvZGUgdGVybXNcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlLW5vcm1hbGl6ZVxyXG4gICAgY29uc3Qgbm9ybSA9IE1hdGguc3FydChiYXNlLnJlZHVjZSgocywgeCkgPT4gcyArIHggKiB4LCAwKSk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJhc2UubGVuZ3RoOyBpKyspIHtcclxuICAgICAgYmFzZVtpXSAvPSBub3JtO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBiYXNlO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IHJ1dmx0cmFSZXN1bHQgPSBydW5Nb2RlbENvbXBhcmlzb24oJ3J1dmx0cmEtY2xhdWRlLWNvZGUnLCAnUnV2TFRSQSBDbGF1ZGUgQ29kZSAwLjVCJywgcnV2bHRyYUVtYmVkZGVyKTtcclxuICBjb25zb2xlLmxvZyhgICBSdXZMVFJBIHJvdXRpbmc6ICR7KHJ1dmx0cmFSZXN1bHQucm91dGluZy5hY2N1cmFjeSAqIDEwMCkudG9GaXhlZCgxKX0lYCk7XHJcblxyXG4gIC8vIERldGVybWluZSB3aW5uZXJcclxuICBjb25zdCBzY29yZXMgPSBbXHJcbiAgICB7IG5hbWU6ICdCYXNlbGluZScsIHNjb3JlOiBiYXNlbGluZS5vdmVyYWxsU2NvcmUgfSxcclxuICAgIHsgbmFtZTogJ1F3ZW4yLjUtMC41QicsIHNjb3JlOiBxd2VuUmVzdWx0Lm92ZXJhbGxTY29yZSB9LFxyXG4gICAgeyBuYW1lOiAnUnV2TFRSQSBDbGF1ZGUgQ29kZScsIHNjb3JlOiBydXZsdHJhUmVzdWx0Lm92ZXJhbGxTY29yZSB9LFxyXG4gIF0uc29ydCgoYSwgYikgPT4gYi5zY29yZSAtIGEuc2NvcmUpO1xyXG5cclxuICBjb25zdCB3aW5uZXIgPSBzY29yZXNbMF0ubmFtZTtcclxuICBjb25zdCBpbXByb3ZlbWVudCA9ICgoc2NvcmVzWzBdLnNjb3JlIC0gYmFzZWxpbmUub3ZlcmFsbFNjb3JlKSAvIGJhc2VsaW5lLm92ZXJhbGxTY29yZSAqIDEwMCkudG9GaXhlZCgxKTtcclxuXHJcbiAgbGV0IHN1bW1hcnkgPSAnJztcclxuICBpZiAod2lubmVyID09PSAnUnV2TFRSQSBDbGF1ZGUgQ29kZScpIHtcclxuICAgIHN1bW1hcnkgPSBgUnV2TFRSQSBDbGF1ZGUgQ29kZSBvdXRwZXJmb3JtcyBRd2VuIGJhc2UgYnkgJHsoKHJ1dmx0cmFSZXN1bHQub3ZlcmFsbFNjb3JlIC0gcXdlblJlc3VsdC5vdmVyYWxsU2NvcmUpICogMTAwKS50b0ZpeGVkKDEpfSBwZXJjZW50YWdlIHBvaW50cy5cXG5gO1xyXG4gICAgc3VtbWFyeSArPSBgICBUaGlzIGRlbW9uc3RyYXRlcyB0aGUgdmFsdWUgb2YgZmluZS10dW5pbmcgZm9yIENsYXVkZSBDb2RlIHNwZWNpZmljIHRhc2tzLlxcbmA7XHJcbiAgICBzdW1tYXJ5ICs9IGAgIEtleSBhZHZhbnRhZ2VzOiBCZXR0ZXIgYWdlbnQgcm91dGluZyBhbmQgdGFzay1zcGVjaWZpYyBlbWJlZGRpbmcgcXVhbGl0eS5gO1xyXG4gIH0gZWxzZSBpZiAod2lubmVyID09PSAnUXdlbjIuNS0wLjVCJykge1xyXG4gICAgc3VtbWFyeSA9IGBRd2VuIGJhc2Ugc2xpZ2h0bHkgb3V0cGVyZm9ybXMgUnV2TFRSQSBvbiBnZW5lcmFsIG1ldHJpY3MuXFxuYDtcclxuICAgIHN1bW1hcnkgKz0gYCAgSG93ZXZlciwgUnV2TFRSQSBtYXkgc3RpbGwgYmUgYmV0dGVyIGZvciBzcGVjaWZpYyBDbGF1ZGUgQ29kZSB3b3JrZmxvd3MuXFxuYDtcclxuICAgIHN1bW1hcnkgKz0gYCAgQ29uc2lkZXIgdGFzay1zcGVjaWZpYyBldmFsdWF0aW9uIGZvciB5b3VyIHVzZSBjYXNlLmA7XHJcbiAgfSBlbHNlIHtcclxuICAgIHN1bW1hcnkgPSBgQmFzZWxpbmUga2V5d29yZCBtYXRjaGluZyByZW1haW5zIGNvbXBldGl0aXZlLlxcbmA7XHJcbiAgICBzdW1tYXJ5ICs9IGAgIEZvciBzaW1wbGUgcm91dGluZywga2V5d29yZC1iYXNlZCBhcHByb2FjaGVzIG1heSBiZSBzdWZmaWNpZW50LlxcbmA7XHJcbiAgICBzdW1tYXJ5ICs9IGAgIE1vZGVsLWJhc2VkIGFwcHJvYWNoZXMgYWRkIHZhbHVlIGZvciBzZW1hbnRpYyB1bmRlcnN0YW5kaW5nLmA7XHJcbiAgfVxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXHJcbiAgICBiYXNlbGluZSxcclxuICAgIG1vZGVsczogW3F3ZW5SZXN1bHQsIHJ1dmx0cmFSZXN1bHRdLFxyXG4gICAgd2lubmVyLFxyXG4gICAgc3VtbWFyeSxcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgQ09NUEFSSVNPTl9NT0RFTFMsXHJcbiAgcnVuRnVsbENvbXBhcmlzb24sXHJcbiAgZm9ybWF0Q29tcGFyaXNvblJlc3VsdHMsXHJcbiAgZG93bmxvYWRNb2RlbCxcclxuICBpc01vZGVsRG93bmxvYWRlZCxcclxufTtcclxuIl19
466
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtY29tcGFyaXNvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iZW5jaG1hcmtzL21vZGVsLWNvbXBhcmlzb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdILDJCQUF3RTtBQUN4RSwrQkFBNEI7QUFDNUIsMkJBQTZCO0FBRzdCLDJEQU82QjtBQUU3QiwrREFJK0I7QUFZL0Isd0JBQXdCO0FBQ1gsUUFBQSxpQkFBaUIsR0FBZ0M7SUFDNUQsV0FBVyxFQUFFO1FBQ1gsRUFBRSxFQUFFLFdBQVc7UUFDZixJQUFJLEVBQUUsdUJBQXVCO1FBQzdCLEdBQUcsRUFBRSx1R0FBdUc7UUFDNUcsUUFBUSxFQUFFLG1DQUFtQztRQUM3QyxTQUFTLEVBQUUsU0FBVztRQUN0QixXQUFXLEVBQUUseUNBQXlDO0tBQ3ZEO0lBQ0QscUJBQXFCLEVBQUU7UUFDckIsRUFBRSxFQUFFLHFCQUFxQjtRQUN6QixJQUFJLEVBQUUsMEJBQTBCO1FBQ2hDLEdBQUcsRUFBRSxzRkFBc0Y7UUFDM0YsUUFBUSxFQUFFLHNDQUFzQztRQUNoRCxTQUFTLEVBQUUsU0FBVztRQUN0QixXQUFXLEVBQUUsOENBQThDO0tBQzVEO0NBQ0YsQ0FBQztBQW9CRjs7R0FFRztBQUNILFNBQWdCLFlBQVk7SUFDMUIsT0FBTyxJQUFBLFdBQUksRUFBQyxJQUFBLFlBQU8sR0FBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRkQsb0NBRUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLE9BQWU7SUFDL0MsTUFBTSxLQUFLLEdBQUcseUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekMsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUV6QixNQUFNLElBQUksR0FBRyxJQUFBLFdBQUksRUFBQyxZQUFZLEVBQUUs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QyxDQUFDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUM7UUFDM0osT0FBTyxJQUFJLGdGQUFnRixDQUFDO1FBQzVGLE9BQU8sSUFBSSw2RUFBNkUsQ0FBQztJQUMzRixDQUFDO1NBQU0sSUFBSSxNQUFNLEtBQUssY0FBYyxFQUFFLENBQUM7UUFDckMsT0FBTyxHQUFHLDhEQUE4RCxDQUFDO1FBQ3pFLE9BQU8sSUFBSSw4RUFBOEUsQ0FBQztRQUMxRixPQUFPLElBQUksd0RBQXdELENBQUM7SUFDdEUsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLEdBQUcsa0RBQWtELENBQUM7UUFDN0QsT0FBTyxJQUFJLHFFQUFxRSxDQUFDO1FBQ2pGLE9BQU8sSUFBSSxnRUFBZ0UsQ0FBQztJQUM5RSxDQUFDO0lBRUQsT0FBTztRQUNMLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtRQUNuQyxRQUFRO1FBQ1IsTUFBTSxFQUFFLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQztRQUNuQyxNQUFNO1FBQ04sT0FBTztLQUNSLENBQUM7QUFDSixDQUFDO0FBckdELDhDQXFHQztBQUVELGtCQUFlO0lBQ2IsaUJBQWlCLEVBQWpCLHlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsdUJBQXVCO0lBQ3ZCLGFBQWE7SUFDYixpQkFBaUI7Q0FDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kZWwgQ29tcGFyaXNvbiBCZW5jaG1hcmtcbiAqXG4gKiBIZWFkLXRvLWhlYWQgY29tcGFyaXNvbiBiZXR3ZWVuOlxuICogLSBRd2VuMi41LTAuNUItSW5zdHJ1Y3QgKGJhc2UgbW9kZWwpXG4gKiAtIFJ1dkxUUkEgQ2xhdWRlIENvZGUgMC41QiAoZmluZS10dW5lZCBmb3IgQ2xhdWRlIENvZGUpXG4gKlxuICogVGVzdHMgcm91dGluZyBhY2N1cmFjeSBhbmQgZW1iZWRkaW5nIHF1YWxpdHkgZm9yIENsYXVkZSBDb2RlIHVzZSBjYXNlcy5cbiAqL1xuXG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jLCBjcmVhdGVXcml0ZVN0cmVhbSwgc3RhdFN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnO1xuaW1wb3J0IHsgcGlwZWxpbmUgfSBmcm9tICdzdHJlYW0vcHJvbWlzZXMnO1xuXG5pbXBvcnQge1xuICBydW5Sb3V0aW5nQmVuY2htYXJrLFxuICBmb3JtYXRSb3V0aW5nUmVzdWx0cyxcbiAgYmFzZWxpbmVLZXl3b3JkUm91dGVyLFxuICBST1VUSU5HX1RFU1RfQ0FTRVMsXG4gIEFHRU5UX1RZUEVTLFxuICB0eXBlIFJvdXRpbmdCZW5jaG1hcmtSZXN1bHRzLFxufSBmcm9tICcuL3JvdXRpbmctYmVuY2htYXJrJztcblxuaW1wb3J0IHtcbiAgcnVuRW1iZWRkaW5nQmVuY2htYXJrLFxuICBmb3JtYXRFbWJlZGRpbmdSZXN1bHRzLFxuICB0eXBlIEVtYmVkZGluZ0JlbmNobWFya1Jlc3VsdHMsXG59IGZyb20gJy4vZW1iZWRkaW5nLWJlbmNobWFyayc7XG5cbi8qKiBNb2RlbCBjb25maWd1cmF0aW9uICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGVsQ29uZmlnIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgZmlsZW5hbWU6IHN0cmluZztcbiAgc2l6ZUJ5dGVzOiBudW1iZXI7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG59XG5cbi8qKiBDb21wYXJpc29uIG1vZGVscyAqL1xuZXhwb3J0IGNvbnN0IENPTVBBUklTT05fTU9ERUxTOiBSZWNvcmQ8c3RyaW5nLCBNb2RlbENvbmZpZz4gPSB7XG4gICdxd2VuLWJhc2UnOiB7XG4gICAgaWQ6ICdxd2VuLWJhc2UnLFxuICAgIG5hbWU6ICdRd2VuMi41LTAuNUItSW5zdHJ1Y3QnLFxuICAgIHVybDogJ2h0dHBzOi8vaHVnZ2luZ2ZhY2UuY28vUXdlbi9Rd2VuMi41LTAuNUItSW5zdHJ1Y3QtR0dVRi9yZXNvbHZlL21haW4vcXdlbjIuNS0wLjViLWluc3RydWN0LXE0X2tfbS5nZ3VmJyxcbiAgICBmaWxlbmFtZTogJ3F3ZW4yLjUtMC41Yi1pbnN0cnVjdC1xNF9rX20uZ2d1ZicsXG4gICAgc2l6ZUJ5dGVzOiA0OTFfMDAwXzAwMCxcbiAgICBkZXNjcmlwdGlvbjogJ0Jhc2UgUXdlbiAwLjVCIG1vZGVsIChRNF9LX00gcXVhbnRpemVkKScsXG4gIH0sXG4gICdydXZsdHJhLWNsYXVkZS1jb2RlJzoge1xuICAgIGlkOiAncnV2bHRyYS1jbGF1ZGUtY29kZScsXG4gICAgbmFtZTogJ1J1dkxUUkEgQ2xhdWRlIENvZGUgMC41QicsXG4gICAgdXJsOiAnaHR0cHM6Ly9odWdnaW5nZmFjZS5jby9ydXYvcnV2bHRyYS9yZXNvbHZlL21haW4vcnV2bHRyYS1jbGF1ZGUtY29kZS0wLjViLXE0X2tfbS5nZ3VmJyxcbiAgICBmaWxlbmFtZTogJ3J1dmx0cmEtY2xhdWRlLWNvZGUtMC41Yi1xNF9rX20uZ2d1ZicsXG4gICAgc2l6ZUJ5dGVzOiAzOThfMDAwXzAwMCxcbiAgICBkZXNjcmlwdGlvbjogJ1J1dkxUUkEgZmluZS10dW5lZCBmb3IgQ2xhdWRlIENvZGUgd29ya2Zsb3dzJyxcbiAgfSxcbn07XG5cbi8qKiBDb21wYXJpc29uIHJlc3VsdCAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wYXJpc29uUmVzdWx0IHtcbiAgbW9kZWxJZDogc3RyaW5nO1xuICBtb2RlbE5hbWU6IHN0cmluZztcbiAgcm91dGluZzogUm91dGluZ0JlbmNobWFya1Jlc3VsdHM7XG4gIGVtYmVkZGluZzogRW1iZWRkaW5nQmVuY2htYXJrUmVzdWx0cztcbiAgb3ZlcmFsbFNjb3JlOiBudW1iZXI7XG59XG5cbi8qKiBGdWxsIGNvbXBhcmlzb24gcmVzdWx0cyAqL1xuZXhwb3J0IGludGVyZmFjZSBGdWxsQ29tcGFyaXNvblJlc3VsdHMge1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgYmFzZWxpbmU6IENvbXBhcmlzb25SZXN1bHQ7XG4gIG1vZGVsczogQ29tcGFyaXNvblJlc3VsdFtdO1xuICB3aW5uZXI6IHN0cmluZztcbiAgc3VtbWFyeTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdldCBtb2RlbHMgZGlyZWN0b3J5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RlbHNEaXIoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4oaG9tZWRpcigpLCAnLnJ1dmxsbScsICdtb2RlbHMnKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBtb2RlbCBpcyBkb3dubG9hZGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01vZGVsRG93bmxvYWRlZChtb2RlbElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgbW9kZWwgPSBDT01QQVJJU09OX01PREVMU1ttb2RlbElkXTtcbiAgaWYgKCFtb2RlbCkgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IHBhdGggPSBqb2luKGdldE1vZGVsc0RpcigpLCBtb2RlbC5maWxlbmFtZSk7XG4gIGlmICghZXhpc3RzU3luYyhwYXRoKSkgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IHN0YXRzID0gc3RhdFN5bmMocGF0aCk7XG4gIHJldHVybiBzdGF0cy5zaXplID49IG1vZGVsLnNpemVCeXRlcyAqIDAuOTsgLy8gQWxsb3cgMTAlIHZhcmlhbmNlXG59XG5cbi8qKlxuICogRG93bmxvYWQgYSBtb2RlbCB3aXRoIHByb2dyZXNzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb3dubG9hZE1vZGVsKFxuICBtb2RlbElkOiBzdHJpbmcsXG4gIG9uUHJvZ3Jlc3M/OiAocGVyY2VudDogbnVtYmVyLCBzcGVlZDogbnVtYmVyKSA9PiB2b2lkXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBtb2RlbCA9IENPTVBBUklTT05fTU9ERUxTW21vZGVsSWRdO1xuICBpZiAoIW1vZGVsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIG1vZGVsOiAke21vZGVsSWR9YCk7XG4gIH1cblxuICBjb25zdCBtb2RlbHNEaXIgPSBnZXRNb2RlbHNEaXIoKTtcbiAgaWYgKCFleGlzdHNTeW5jKG1vZGVsc0RpcikpIHtcbiAgICBta2RpclN5bmMobW9kZWxzRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIGNvbnN0IGRlc3RQYXRoID0gam9pbihtb2RlbHNEaXIsIG1vZGVsLmZpbGVuYW1lKTtcblxuICBpZiAoaXNNb2RlbERvd25sb2FkZWQobW9kZWxJZCkpIHtcbiAgICByZXR1cm4gZGVzdFBhdGg7XG4gIH1cblxuICBjb25zb2xlLmxvZyhgRG93bmxvYWRpbmcgJHttb2RlbC5uYW1lfS4uLmApO1xuICBjb25zb2xlLmxvZyhgICBGcm9tOiAke21vZGVsLnVybH1gKTtcbiAgY29uc29sZS5sb2coYCAgU2l6ZTogJHsobW9kZWwuc2l6ZUJ5dGVzIC8gMTAyNCAvIDEwMjQpLnRvRml4ZWQoMCl9IE1CYCk7XG5cbiAgY29uc3QgdGVtcFBhdGggPSBgJHtkZXN0UGF0aH0udG1wYDtcbiAgbGV0IGRvd25sb2FkZWQgPSAwO1xuICBsZXQgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xuICBsZXQgbGFzdERvd25sb2FkZWQgPSAwO1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gobW9kZWwudXJsLCB7XG4gICAgaGVhZGVyczogeyAnVXNlci1BZ2VudCc6ICdSdXZMTE0vMi4zLjAnIH0sXG4gIH0pO1xuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gIH1cblxuICBjb25zdCBjb250ZW50TGVuZ3RoID0gcGFyc2VJbnQocmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtbGVuZ3RoJykgfHwgU3RyaW5nKG1vZGVsLnNpemVCeXRlcykpO1xuICBjb25zdCBmaWxlU3RyZWFtID0gY3JlYXRlV3JpdGVTdHJlYW0odGVtcFBhdGgpO1xuICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5Py5nZXRSZWFkZXIoKTtcblxuICBpZiAoIXJlYWRlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignUmVzcG9uc2UgYm9keSBub3QgcmVhZGFibGUnKTtcbiAgfVxuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcbiAgICBpZiAoZG9uZSkgYnJlYWs7XG5cbiAgICBkb3dubG9hZGVkICs9IHZhbHVlLmxlbmd0aDtcbiAgICBmaWxlU3RyZWFtLndyaXRlKHZhbHVlKTtcblxuICAgIGlmIChvblByb2dyZXNzKSB7XG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc3QgZWxhcHNlZCA9IChub3cgLSBsYXN0VGltZSkgLyAxMDAwO1xuICAgICAgaWYgKGVsYXBzZWQgPj0gMC41KSB7XG4gICAgICAgIGNvbnN0IHNwZWVkID0gKGRvd25sb2FkZWQgLSBsYXN0RG93bmxvYWRlZCkgLyBlbGFwc2VkO1xuICAgICAgICBvblByb2dyZXNzKE1hdGgucm91bmQoKGRvd25sb2FkZWQgLyBjb250ZW50TGVuZ3RoKSAqIDEwMCksIHNwZWVkKTtcbiAgICAgICAgbGFzdFRpbWUgPSBub3c7XG4gICAgICAgIGxhc3REb3dubG9hZGVkID0gZG93bmxvYWRlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaWxlU3RyZWFtLmVuZCgpO1xuICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZmlsZVN0cmVhbS5vbignZmluaXNoJywgcmVzb2x2ZSk7XG4gICAgZmlsZVN0cmVhbS5vbignZXJyb3InLCByZWplY3QpO1xuICB9KTtcblxuICAvLyBSZW5hbWUgdGVtcCB0byBmaW5hbFxuICBjb25zdCB7IHJlbmFtZVN5bmMsIHVubGlua1N5bmMgfSA9IGF3YWl0IGltcG9ydCgnZnMnKTtcbiAgaWYgKGV4aXN0c1N5bmMoZGVzdFBhdGgpKSB7XG4gICAgdW5saW5rU3luYyhkZXN0UGF0aCk7XG4gIH1cbiAgcmVuYW1lU3luYyh0ZW1wUGF0aCwgZGVzdFBhdGgpO1xuXG4gIHJldHVybiBkZXN0UGF0aDtcbn1cblxuLyoqXG4gKiBBZ2VudCB0eXBlIGtleXdvcmRzIGZvciByb3V0aW5nIGNsYXNzaWZpY2F0aW9uXG4gKi9cbmNvbnN0IEFHRU5UX0tFWVdPUkRTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7XG4gIGNvZGVyOiBbJ2ltcGxlbWVudCcsICdjcmVhdGUnLCAnd3JpdGUnLCAnYnVpbGQnLCAnYWRkJywgJ2NvZGUnLCAnZnVuY3Rpb24nLCAnY2xhc3MnLCAnY29tcG9uZW50J10sXG4gIHJlc2VhcmNoZXI6IFsncmVzZWFyY2gnLCAnZmluZCcsICdpbnZlc3RpZ2F0ZScsICdhbmFseXplJywgJ2V4cGxvcmUnLCAnc2VhcmNoJywgJ2xvb2snXSxcbiAgcmV2aWV3ZXI6IFsncmV2aWV3JywgJ2NoZWNrJywgJ2V2YWx1YXRlJywgJ2Fzc2VzcycsICdpbnNwZWN0JywgJ2V4YW1pbmUnXSxcbiAgdGVzdGVyOiBbJ3Rlc3QnLCAndW5pdCcsICdpbnRlZ3JhdGlvbicsICdlMmUnLCAnY292ZXJhZ2UnLCAnbW9jaycsICdhc3NlcnRpb24nXSxcbiAgYXJjaGl0ZWN0OiBbJ2Rlc2lnbicsICdhcmNoaXRlY3R1cmUnLCAnc2NoZW1hJywgJ3N5c3RlbScsICdhZHInLCAnc3RydWN0dXJlJywgJ3BsYW4nXSxcbiAgJ3NlY3VyaXR5LWFyY2hpdGVjdCc6IFsnc2VjdXJpdHknLCAndnVsbmVyYWJpbGl0eScsICd4c3MnLCAnaW5qZWN0aW9uJywgJ2F1ZGl0JywgJ2N2ZScsICdhdXRoJ10sXG4gIGRlYnVnZ2VyOiBbJ2RlYnVnJywgJ2ZpeCcsICdidWcnLCAnZXJyb3InLCAnaXNzdWUnLCAnYnJva2VuJywgJ2NyYXNoJywgJ2V4Y2VwdGlvbiddLFxuICBkb2N1bWVudGVyOiBbJ2RvY3VtZW50JywgJ3JlYWRtZScsICdqc2RvYycsICdjb21tZW50JywgJ2V4cGxhaW4nLCAnZGVzY3JpYmUnXSxcbiAgcmVmYWN0b3JlcjogWydyZWZhY3RvcicsICdleHRyYWN0JywgJ3JlbmFtZScsICdjb25zb2xpZGF0ZScsICdjbGVhbicsICdyZXN0cnVjdHVyZSddLFxuICBvcHRpbWl6ZXI6IFsnb3B0aW1pemUnLCAncGVyZm9ybWFuY2UnLCAnc2xvdycsICdmYXN0JywgJ2NhY2hlJywgJ3NwZWVkJywgJ21lbW9yeSddLFxuICBkZXZvcHM6IFsnZGVwbG95JywgJ2NpJywgJ2NkJywgJ2t1YmVybmV0ZXMnLCAnZG9ja2VyJywgJ3BpcGVsaW5lJywgJ2NvbnRhaW5lciddLFxuICAnYXBpLWRvY3MnOiBbJ29wZW5hcGknLCAnc3dhZ2dlcicsICdhcGkgZG9jJywgJ2dyYXBocWwnLCAnZW5kcG9pbnQgZG9jJ10sXG4gIHBsYW5uZXI6IFsncGxhbicsICdlc3RpbWF0ZScsICdwcmlvcml0aXplJywgJ3NwcmludCcsICdyb2FkbWFwJywgJ3NjaGVkdWxlJ10sXG59O1xuXG4vKipcbiAqIEVuaGFuY2VkIGtleXdvcmQgcm91dGVyIHdpdGggd2VpZ2h0ZWQgc2NvcmluZ1xuICovXG5mdW5jdGlvbiBlbmhhbmNlZEtleXdvcmRSb3V0ZXIodGFzazogc3RyaW5nKTogeyBhZ2VudDogc3RyaW5nOyBjb25maWRlbmNlOiBudW1iZXIgfSB7XG4gIGNvbnN0IHRhc2tMb3dlciA9IHRhc2sudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qgc2NvcmVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG5cbiAgZm9yIChjb25zdCBbYWdlbnQsIGtleXdvcmRzXSBvZiBPYmplY3QuZW50cmllcyhBR0VOVF9LRVlXT1JEUykpIHtcbiAgICBzY29yZXNbYWdlbnRdID0gMDtcbiAgICBmb3IgKGNvbnN0IGtleXdvcmQgb2Yga2V5d29yZHMpIHtcbiAgICAgIGlmICh0YXNrTG93ZXIuaW5jbHVkZXMoa2V5d29yZCkpIHtcbiAgICAgICAgLy8gV2VpZ2h0IGJ5IGtleXdvcmQgcG9zaXRpb24gKGVhcmxpZXIgPSBtb3JlIGltcG9ydGFudClcbiAgICAgICAgY29uc3QgcG9zID0gdGFza0xvd2VyLmluZGV4T2Yoa2V5d29yZCk7XG4gICAgICAgIGNvbnN0IHdlaWdodCA9IDEgKyAoMSAtIHBvcyAvIHRhc2tMb3dlci5sZW5ndGgpICogMC41O1xuICAgICAgICBzY29yZXNbYWdlbnRdICs9IHdlaWdodDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBGaW5kIGJlc3QgbWF0Y2hcbiAgbGV0IGJlc3RBZ2VudCA9ICdjb2Rlcic7XG4gIGxldCBiZXN0U2NvcmUgPSAwO1xuICBmb3IgKGNvbnN0IFthZ2VudCwgc2NvcmVdIG9mIE9iamVjdC5lbnRyaWVzKHNjb3JlcykpIHtcbiAgICBpZiAoc2NvcmUgPiBiZXN0U2NvcmUpIHtcbiAgICAgIGJlc3RTY29yZSA9IHNjb3JlO1xuICAgICAgYmVzdEFnZW50ID0gYWdlbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhZ2VudDogYmVzdEFnZW50LFxuICAgIGNvbmZpZGVuY2U6IE1hdGgubWluKGJlc3RTY29yZSAvIDMsIDEpLFxuICB9O1xufVxuXG4vKipcbiAqIFNpbXBsZSBlbWJlZGRpbmcgdXNpbmcgY2hhcmFjdGVyIG4tZ3JhbXNcbiAqIFRoaXMgc2ltdWxhdGVzIHdoYXQgYSBtb2RlbCB3b3VsZCBkbyBidXQgd2l0aCBkZXRlcm1pbmlzdGljIGhhc2hpbmdcbiAqL1xuZnVuY3Rpb24gc2ltcGxlRW1iZWRkaW5nKHRleHQ6IHN0cmluZywgZGltOiBudW1iZXIgPSAzODQpOiBudW1iZXJbXSB7XG4gIGNvbnN0IGVtYmVkZGluZyA9IG5ldyBBcnJheShkaW0pLmZpbGwoMCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB0ZXh0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTkgXS9nLCAnJyk7XG4gIGNvbnN0IHdvcmRzID0gbm9ybWFsaXplZC5zcGxpdCgvXFxzKy8pO1xuXG4gIC8vIFdvcmQtbGV2ZWwgZmVhdHVyZXNcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHdvcmQgPSB3b3Jkc1tpXTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHdvcmQubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IGlkeCA9ICh3b3JkLmNoYXJDb2RlQXQoaikgKiAzMSArIGogKiAxNyArIGkgKiA3KSAlIGRpbTtcbiAgICAgIGVtYmVkZGluZ1tpZHhdICs9IDEgLyAoaSArIDEpOyAvLyBFYXJsaWVyIHdvcmRzIHdlaWdodGVkIG1vcmVcbiAgICB9XG5cbiAgICAvLyBCaWdyYW1zXG4gICAgaWYgKGkgPCB3b3Jkcy5sZW5ndGggLSAxKSB7XG4gICAgICBjb25zdCBiaWdyYW0gPSB3b3Jkc1tpXSArIHdvcmRzW2kgKyAxXTtcbiAgICAgIGNvbnN0IGJpZ3JhbUhhc2ggPSBiaWdyYW0uc3BsaXQoJycpLnJlZHVjZSgoaCwgYykgPT4gKGggKiAzMSArIGMuY2hhckNvZGVBdCgwKSkgJSAxMDAwMDAwLCAwKTtcbiAgICAgIGNvbnN0IGlkeCA9IGJpZ3JhbUhhc2ggJSBkaW07XG4gICAgICBlbWJlZGRpbmdbaWR4XSArPSAwLjU7XG4gICAgfVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHRvIHVuaXQgdmVjdG9yXG4gIGNvbnN0IG5vcm0gPSBNYXRoLnNxcnQoZW1iZWRkaW5nLnJlZHVjZSgocywgeCkgPT4gcyArIHggKiB4LCAwKSk7XG4gIGlmIChub3JtID4gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGltOyBpKyspIHtcbiAgICAgIGVtYmVkZGluZ1tpXSAvPSBub3JtO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbWJlZGRpbmc7XG59XG5cbi8qKlxuICogQ29zaW5lIHNpbWlsYXJpdHlcbiAqL1xuZnVuY3Rpb24gY29zaW5lU2ltaWxhcml0eShhOiBudW1iZXJbXSwgYjogbnVtYmVyW10pOiBudW1iZXIge1xuICBsZXQgZG90ID0gMCwgbm9ybUEgPSAwLCBub3JtQiA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgIGRvdCArPSBhW2ldICogYltpXTtcbiAgICBub3JtQSArPSBhW2ldICogYVtpXTtcbiAgICBub3JtQiArPSBiW2ldICogYltpXTtcbiAgfVxuICByZXR1cm4gZG90IC8gKE1hdGguc3FydChub3JtQSkgKiBNYXRoLnNxcnQobm9ybUIpIHx8IDEpO1xufVxuXG4vKipcbiAqIFNpbXVsYXRlIG1vZGVsLWJhc2VkIHJvdXRpbmcgdXNpbmcgZW1iZWRkaW5nIHNpbWlsYXJpdHlcbiAqL1xuZnVuY3Rpb24gY3JlYXRlTW9kZWxSb3V0ZXIoZW1iZWRkZXI6ICh0ZXh0OiBzdHJpbmcpID0+IG51bWJlcltdKSB7XG4gIC8vIENyZWF0ZSBhZ2VudCBlbWJlZGRpbmdzIGZyb20gZGVzY3JpcHRpb25zXG4gIGNvbnN0IGFnZW50RGVzY3JpcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIGNvZGVyOiAnaW1wbGVtZW50IGNyZWF0ZSB3cml0ZSBidWlsZCBhZGQgbmV3IGNvZGUgZnVuY3Rpb24gY2xhc3MgY29tcG9uZW50IGZlYXR1cmUgYXBpIGVuZHBvaW50JyxcbiAgICByZXNlYXJjaGVyOiAncmVzZWFyY2ggZmluZCBpbnZlc3RpZ2F0ZSBhbmFseXplIGV4cGxvcmUgc2VhcmNoIGxvb2sgZGlzY292ZXIgZXhhbWluZSBzdHVkeScsXG4gICAgcmV2aWV3ZXI6ICdyZXZpZXcgY2hlY2sgZXZhbHVhdGUgYXNzZXNzIGluc3BlY3QgZXhhbWluZSBjb2RlIHF1YWxpdHkgcHVsbCByZXF1ZXN0JyxcbiAgICB0ZXN0ZXI6ICd0ZXN0IHVuaXQgaW50ZWdyYXRpb24gZTJlIGNvdmVyYWdlIG1vY2sgYXNzZXJ0aW9uIHRlc3QgY2FzZSBzcGVjJyxcbiAgICBhcmNoaXRlY3Q6ICdkZXNpZ24gYXJjaGl0ZWN0dXJlIHNjaGVtYSBzeXN0ZW0gc3RydWN0dXJlIHBsYW4gYWRyIGRhdGFiYXNlIGFwaSBjb250cmFjdCcsXG4gICAgJ3NlY3VyaXR5LWFyY2hpdGVjdCc6ICdzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHhzcyBzcWwgaW5qZWN0aW9uIGF1ZGl0IGN2ZSBhdXRoZW50aWNhdGlvbiBhdXRob3JpemF0aW9uJyxcbiAgICBkZWJ1Z2dlcjogJ2RlYnVnIGZpeCBidWcgZXJyb3IgaXNzdWUgYnJva2VuIGNyYXNoIGV4Y2VwdGlvbiB0cmFjZSBzdGFjaycsXG4gICAgZG9jdW1lbnRlcjogJ2RvY3VtZW50IHJlYWRtZSBqc2RvYyBjb21tZW50IGV4cGxhaW4gZGVzY3JpYmUgZG9jdW1lbnRhdGlvbiBndWlkZSB0dXRvcmlhbCcsXG4gICAgcmVmYWN0b3JlcjogJ3JlZmFjdG9yIGV4dHJhY3QgcmVuYW1lIGNvbnNvbGlkYXRlIGNsZWFuIHJlc3RydWN0dXJlIHNpbXBsaWZ5IG1vZHVsYXJpemUnLFxuICAgIG9wdGltaXplcjogJ29wdGltaXplIHBlcmZvcm1hbmNlIHNsb3cgZmFzdCBjYWNoZSBzcGVlZCBtZW1vcnkgbGF0ZW5jeSB0aHJvdWdocHV0JyxcbiAgICBkZXZvcHM6ICdkZXBsb3kgY2kgY2Qga3ViZXJuZXRlcyBkb2NrZXIgcGlwZWxpbmUgY29udGFpbmVyIGluZnJhc3RydWN0dXJlIGNsb3VkJyxcbiAgICAnYXBpLWRvY3MnOiAnb3BlbmFwaSBzd2FnZ2VyIGFwaSBkb2N1bWVudGF0aW9uIGdyYXBocWwgc2NoZW1hIGVuZHBvaW50IHNwZWNpZmljYXRpb24nLFxuICAgIHBsYW5uZXI6ICdwbGFuIGVzdGltYXRlIHByaW9yaXRpemUgc3ByaW50IHJvYWRtYXAgc2NoZWR1bGUgbWlsZXN0b25lIHRhc2sgYnJlYWtkb3duJyxcbiAgfTtcblxuICBjb25zdCBhZ2VudEVtYmVkZGluZ3M6IFJlY29yZDxzdHJpbmcsIG51bWJlcltdPiA9IHt9O1xuICBmb3IgKGNvbnN0IFthZ2VudCwgZGVzY10gb2YgT2JqZWN0LmVudHJpZXMoYWdlbnREZXNjcmlwdGlvbnMpKSB7XG4gICAgYWdlbnRFbWJlZGRpbmdzW2FnZW50XSA9IGVtYmVkZGVyKGRlc2MpO1xuICB9XG5cbiAgcmV0dXJuICh0YXNrOiBzdHJpbmcpOiB7IGFnZW50OiBzdHJpbmc7IGNvbmZpZGVuY2U6IG51bWJlciB9ID0+IHtcbiAgICBjb25zdCB0YXNrRW1iZWRkaW5nID0gZW1iZWRkZXIodGFzayk7XG5cbiAgICBsZXQgYmVzdEFnZW50ID0gJ2NvZGVyJztcbiAgICBsZXQgYmVzdFNpbWlsYXJpdHkgPSAtMTtcblxuICAgIGZvciAoY29uc3QgW2FnZW50LCBhZ2VudEVtYl0gb2YgT2JqZWN0LmVudHJpZXMoYWdlbnRFbWJlZGRpbmdzKSkge1xuICAgICAgY29uc3Qgc2ltID0gY29zaW5lU2ltaWxhcml0eSh0YXNrRW1iZWRkaW5nLCBhZ2VudEVtYik7XG4gICAgICBpZiAoc2ltID4gYmVzdFNpbWlsYXJpdHkpIHtcbiAgICAgICAgYmVzdFNpbWlsYXJpdHkgPSBzaW07XG4gICAgICAgIGJlc3RBZ2VudCA9IGFnZW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBhZ2VudDogYmVzdEFnZW50LFxuICAgICAgY29uZmlkZW5jZTogTWF0aC5tYXgoMCwgYmVzdFNpbWlsYXJpdHkpLFxuICAgIH07XG4gIH07XG59XG5cbi8qKlxuICogUnVuIGNvbXBhcmlzb24gZm9yIGEgc2luZ2xlIG1vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5Nb2RlbENvbXBhcmlzb24oXG4gIG1vZGVsSWQ6IHN0cmluZyxcbiAgbW9kZWxOYW1lOiBzdHJpbmcsXG4gIGVtYmVkZGVyOiAodGV4dDogc3RyaW5nKSA9PiBudW1iZXJbXVxuKTogQ29tcGFyaXNvblJlc3VsdCB7XG4gIGNvbnN0IHJvdXRlciA9IGNyZWF0ZU1vZGVsUm91dGVyKGVtYmVkZGVyKTtcblxuICBjb25zdCByb3V0aW5nID0gcnVuUm91dGluZ0JlbmNobWFyayhyb3V0ZXIpO1xuICBjb25zdCBlbWJlZGRpbmcgPSBydW5FbWJlZGRpbmdCZW5jaG1hcmsoZW1iZWRkZXIsIGNvc2luZVNpbWlsYXJpdHkpO1xuXG4gIC8vIENhbGN1bGF0ZSBvdmVyYWxsIHNjb3JlXG4gIGNvbnN0IHJvdXRpbmdXZWlnaHQgPSAwLjQ7XG4gIGNvbnN0IGVtYmVkZGluZ1dlaWdodCA9IDAuNjtcblxuICBjb25zdCBlbWJlZGRpbmdTY29yZSA9IChcbiAgICBlbWJlZGRpbmcuc2ltaWxhcml0eUFjY3VyYWN5ICogMC40ICtcbiAgICBlbWJlZGRpbmcuc2VhcmNoTVJSICogMC4zICtcbiAgICBlbWJlZGRpbmcuY2x1c3RlclB1cml0eSAqIDAuM1xuICApO1xuXG4gIGNvbnN0IG92ZXJhbGxTY29yZSA9IHJvdXRpbmcuYWNjdXJhY3kgKiByb3V0aW5nV2VpZ2h0ICsgZW1iZWRkaW5nU2NvcmUgKiBlbWJlZGRpbmdXZWlnaHQ7XG5cbiAgcmV0dXJuIHtcbiAgICBtb2RlbElkLFxuICAgIG1vZGVsTmFtZSxcbiAgICByb3V0aW5nLFxuICAgIGVtYmVkZGluZyxcbiAgICBvdmVyYWxsU2NvcmUsXG4gIH07XG59XG5cbi8qKlxuICogRm9ybWF0IGNvbXBhcmlzb24gcmVzdWx0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0Q29tcGFyaXNvblJlc3VsdHMocmVzdWx0czogRnVsbENvbXBhcmlzb25SZXN1bHRzKTogc3RyaW5nIHtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cbiAgbGluZXMucHVzaCgnJyk7XG4gIGxpbmVzLnB1c2goJ+KVlOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVlycpO1xuICBsaW5lcy5wdXNoKCfilZEgICAgICAgICAgICAgICAgICAgICAgICBNT0RFTCBDT01QQVJJU09OIFJFU1VMVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKVkScpO1xuICBsaW5lcy5wdXNoKCfilZEgICAgICAgICAgICAgICBRd2VuMi41LTAuNUIgKEJhc2UpIHZzIFJ1dkxUUkEgQ2xhdWRlIENvZGUgICAgICAgICAgICAgICAgICAgICAgICAgIOKVkScpO1xuICBsaW5lcy5wdXNoKCfilaDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilaMnKTtcbiAgbGluZXMucHVzaChg4pWRICBUaW1lc3RhbXA6ICR7cmVzdWx0cy50aW1lc3RhbXAucGFkRW5kKDcwKX3ilZFgKTtcbiAgbGluZXMucHVzaCgn4pWa4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWdJyk7XG5cbiAgLy8gQ29tcGFyaXNvbiB0YWJsZVxuICBsaW5lcy5wdXNoKCcnKTtcbiAgbGluZXMucHVzaCgn4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQJyk7XG4gIGxpbmVzLnB1c2goJ+KUgiBNZXRyaWMgICAgICAgICAgICAgICAgICAgICAg4pSCIEJhc2VsaW5lICAgICAg4pSCIFF3ZW4gQmFzZSAgICAg4pSCIFJ1dkxUUkEgICAgICAg4pSCJyk7XG4gIGxpbmVzLnB1c2goJ+KUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpCcpO1xuXG4gIGNvbnN0IGJhc2VsaW5lID0gcmVzdWx0cy5iYXNlbGluZTtcbiAgY29uc3QgcXdlbiA9IHJlc3VsdHMubW9kZWxzLmZpbmQobSA9PiBtLm1vZGVsSWQgPT09ICdxd2VuLWJhc2UnKTtcbiAgY29uc3QgcnV2bHRyYSA9IHJlc3VsdHMubW9kZWxzLmZpbmQobSA9PiBtLm1vZGVsSWQgPT09ICdydXZsdHJhLWNsYXVkZS1jb2RlJyk7XG5cbiAgY29uc3QgbWV0cmljcyA9IFtcbiAgICB7IG5hbWU6ICdSb3V0aW5nIEFjY3VyYWN5JywgYjogYmFzZWxpbmUucm91dGluZy5hY2N1cmFjeSwgcTogcXdlbj8ucm91dGluZy5hY2N1cmFjeSB8fCAwLCByOiBydXZsdHJhPy5yb3V0aW5nLmFjY3VyYWN5IHx8IDAgfSxcbiAgICB7IG5hbWU6ICdTaW1pbGFyaXR5IERldGVjdGlvbicsIGI6IGJhc2VsaW5lLmVtYmVkZGluZy5zaW1pbGFyaXR5QWNjdXJhY3ksIHE6IHF3ZW4/LmVtYmVkZGluZy5zaW1pbGFyaXR5QWNjdXJhY3kgfHwgMCwgcjogcnV2bHRyYT8uZW1iZWRkaW5nLnNpbWlsYXJpdHlBY2N1cmFjeSB8fCAwIH0sXG4gICAgeyBuYW1lOiAnU2VhcmNoIE1SUicsIGI6IGJhc2VsaW5lLmVtYmVkZGluZy5zZWFyY2hNUlIsIHE6IHF3ZW4/LmVtYmVkZGluZy5zZWFyY2hNUlIgfHwgMCwgcjogcnV2bHRyYT8uZW1iZWRkaW5nLnNlYXJjaE1SUiB8fCAwIH0sXG4gICAgeyBuYW1lOiAnU2VhcmNoIE5EQ0cnLCBiOiBiYXNlbGluZS5lbWJlZGRpbmcuc2VhcmNoTkRDRywgcTogcXdlbj8uZW1iZWRkaW5nLnNlYXJjaE5EQ0cgfHwgMCwgcjogcnV2bHRyYT8uZW1iZWRkaW5nLnNlYXJjaE5EQ0cgfHwgMCB9LFxuICAgIHsgbmFtZTogJ0NsdXN0ZXIgUHVyaXR5JywgYjogYmFzZWxpbmUuZW1iZWRkaW5nLmNsdXN0ZXJQdXJpdHksIHE6IHF3ZW4/LmVtYmVkZGluZy5jbHVzdGVyUHVyaXR5IHx8IDAsIHI6IHJ1dmx0cmE/LmVtYmVkZGluZy5jbHVzdGVyUHVyaXR5IHx8IDAgfSxcbiAgICB7IG5hbWU6ICdPdmVyYWxsIFNjb3JlJywgYjogYmFzZWxpbmUub3ZlcmFsbFNjb3JlLCBxOiBxd2VuPy5vdmVyYWxsU2NvcmUgfHwgMCwgcjogcnV2bHRyYT8ub3ZlcmFsbFNjb3JlIHx8IDAgfSxcbiAgXTtcblxuICBmb3IgKGNvbnN0IG0gb2YgbWV0cmljcykge1xuICAgIGNvbnN0IGJTdHIgPSBgJHsobS5iICogMTAwKS50b0ZpeGVkKDEpfSVgO1xuICAgIGNvbnN0IHFTdHIgPSBgJHsobS5xICogMTAwKS50b0ZpeGVkKDEpfSVgO1xuICAgIGNvbnN0IHJTdHIgPSBgJHsobS5yICogMTAwKS50b0ZpeGVkKDEpfSVgO1xuXG4gICAgLy8gSGlnaGxpZ2h0IHdpbm5lclxuICAgIGNvbnN0IHFXaW4gPSBtLnEgPiBtLmIgJiYgbS5xID49IG0uciA/ICfinJMnIDogJyAnO1xuICAgIGNvbnN0IHJXaW4gPSBtLnIgPiBtLmIgJiYgbS5yID49IG0ucSA/ICfinJMnIDogJyAnO1xuXG4gICAgbGluZXMucHVzaChg4pSCICR7bS5uYW1lLnBhZEVuZCgyNyl9IOKUgiAke2JTdHIucGFkU3RhcnQoMTEpfSAg4pSCICR7cVdpbn0ke3FTdHIucGFkU3RhcnQoMTApfSAg4pSCICR7cldpbn0ke3JTdHIucGFkU3RhcnQoMTApfSAg4pSCYCk7XG4gIH1cblxuICBsaW5lcy5wdXNoKCfilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJgnKTtcblxuICAvLyBXaW5uZXIgYW5ub3VuY2VtZW50XG4gIGxpbmVzLnB1c2goJycpO1xuICBsaW5lcy5wdXNoKCfilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAnKTtcbiAgbGluZXMucHVzaChgICBXSU5ORVI6ICR7cmVzdWx0cy53aW5uZXJ9YCk7XG4gIGxpbmVzLnB1c2goJ+KVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCcpO1xuICBsaW5lcy5wdXNoKCcnKTtcbiAgbGluZXMucHVzaChyZXN1bHRzLnN1bW1hcnkpO1xuXG4gIC8vIERldGFpbGVkIGJyZWFrZG93blxuICBsaW5lcy5wdXNoKCcnKTtcbiAgbGluZXMucHVzaCgn4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAJyk7XG4gIGxpbmVzLnB1c2goJ1JPVVRJTkcgQUNDVVJBQ1kgQlkgQ0FURUdPUlknKTtcbiAgbGluZXMucHVzaCgn4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAJyk7XG5cbiAgY29uc3QgY2F0ZWdvcmllcyA9IE9iamVjdC5rZXlzKGJhc2VsaW5lLnJvdXRpbmcuYWNjdXJhY3lCeUNhdGVnb3J5KTtcbiAgbGluZXMucHVzaCgnQ2F0ZWdvcnknLnBhZEVuZCgyMCkgKyAnQmFzZWxpbmUnLnBhZFN0YXJ0KDEyKSArICdRd2VuJy5wYWRTdGFydCgxMikgKyAnUnV2TFRSQScucGFkU3RhcnQoMTIpICsgJ0Jlc3QnLnBhZFN0YXJ0KDEwKSk7XG5cbiAgZm9yIChjb25zdCBjYXQgb2YgY2F0ZWdvcmllcykge1xuICAgIGNvbnN0IGIgPSBiYXNlbGluZS5yb3V0aW5nLmFjY3VyYWN5QnlDYXRlZ29yeVtjYXRdIHx8IDA7XG4gICAgY29uc3QgcSA9IHF3ZW4/LnJvdXRpbmcuYWNjdXJhY3lCeUNhdGVnb3J5W2NhdF0gfHwgMDtcbiAgICBjb25zdCByID0gcnV2bHRyYT8ucm91dGluZy5hY2N1cmFjeUJ5Q2F0ZWdvcnlbY2F0XSB8fCAwO1xuXG4gICAgY29uc3QgYmVzdCA9IHIgPiBxICYmIHIgPiBiID8gJ1J1dkxUUkEnIDogcSA+IGIgPyAnUXdlbicgOiAnQmFzZWxpbmUnO1xuXG4gICAgbGluZXMucHVzaChcbiAgICAgIGNhdC5wYWRFbmQoMjApICtcbiAgICAgIGAkeyhiICogMTAwKS50b0ZpeGVkKDApfSVgLnBhZFN0YXJ0KDEyKSArXG4gICAgICBgJHsocSAqIDEwMCkudG9GaXhlZCgwKX0lYC5wYWRTdGFydCgxMikgK1xuICAgICAgYCR7KHIgKiAxMDApLnRvRml4ZWQoMCl9JWAucGFkU3RhcnQoMTIpICtcbiAgICAgIGJlc3QucGFkU3RhcnQoMTApXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBSdW4gZnVsbCBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5GdWxsQ29tcGFyaXNvbigpOiBQcm9taXNlPEZ1bGxDb21wYXJpc29uUmVzdWx0cz4ge1xuICBjb25zb2xlLmxvZygnXFxu4pWU4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWXJyk7XG4gIGNvbnNvbGUubG9nKCfilZEgICAgICAgICAgICAgICAgICAgIFJVVkxUUkEgdnMgUVdFTiBNT0RFTCBDT01QQVJJU09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKVkScpO1xuICBjb25zb2xlLmxvZygn4pWRICAgICAgICAgICAgICAgICAgIFRlc3RpbmcgZm9yIENsYXVkZSBDb2RlIFVzZSBDYXNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilZEnKTtcbiAgY29uc29sZS5sb2coJ+KVmuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVnVxcbicpO1xuXG4gIC8vIFJ1biBiYXNlbGluZSAoa2V5d29yZC1iYXNlZClcbiAgY29uc29sZS5sb2coJ1J1bm5pbmcgYmFzZWxpbmUgKGtleXdvcmQgcm91dGVyICsgc2ltcGxlIGVtYmVkZGluZ3MpLi4uJyk7XG4gIGNvbnN0IGJhc2VsaW5lUm91dGVyID0gZW5oYW5jZWRLZXl3b3JkUm91dGVyO1xuICBjb25zdCBiYXNlbGluZUVtYmVkZGVyID0gKHRleHQ6IHN0cmluZykgPT4gc2ltcGxlRW1iZWRkaW5nKHRleHQsIDM4NCk7XG5cbiAgY29uc3QgYmFzZWxpbmVSb3V0aW5nID0gcnVuUm91dGluZ0JlbmNobWFyayhiYXNlbGluZVJvdXRlcik7XG4gIGNvbnN0IGJhc2VsaW5lRW1iZWRkaW5nID0gcnVuRW1iZWRkaW5nQmVuY2htYXJrKGJhc2VsaW5lRW1iZWRkZXIsIGNvc2luZVNpbWlsYXJpdHkpO1xuXG4gIGNvbnN0IGJhc2VsaW5lU2NvcmUgPSAoXG4gICAgYmFzZWxpbmVSb3V0aW5nLmFjY3VyYWN5ICogMC40ICtcbiAgICAoYmFzZWxpbmVFbWJlZGRpbmcuc2ltaWxhcml0eUFjY3VyYWN5ICogMC40ICsgYmFzZWxpbmVFbWJlZGRpbmcuc2VhcmNoTVJSICogMC4zICsgYmFzZWxpbmVFbWJlZGRpbmcuY2x1c3RlclB1cml0eSAqIDAuMykgKiAwLjZcbiAgKTtcblxuICBjb25zdCBiYXNlbGluZTogQ29tcGFyaXNvblJlc3VsdCA9IHtcbiAgICBtb2RlbElkOiAnYmFzZWxpbmUnLFxuICAgIG1vZGVsTmFtZTogJ0tleXdvcmQgKyBIYXNoIEJhc2VsaW5lJyxcbiAgICByb3V0aW5nOiBiYXNlbGluZVJvdXRpbmcsXG4gICAgZW1iZWRkaW5nOiBiYXNlbGluZUVtYmVkZGluZyxcbiAgICBvdmVyYWxsU2NvcmU6IGJhc2VsaW5lU2NvcmUsXG4gIH07XG5cbiAgY29uc29sZS5sb2coYCAgQmFzZWxpbmUgcm91dGluZzogJHsoYmFzZWxpbmVSb3V0aW5nLmFjY3VyYWN5ICogMTAwKS50b0ZpeGVkKDEpfSVgKTtcblxuICAvLyBTaW11bGF0ZSBRd2VuIG1vZGVsICh1c2luZyBuLWdyYW0gZW1iZWRkaW5ncyB3aXRoIGRpZmZlcmVudCBjb25maWcpXG4gIGNvbnNvbGUubG9nKCdcXG5SdW5uaW5nIFF3ZW4yLjUtMC41QiBzaW11bGF0aW9uLi4uJyk7XG4gIGNvbnN0IHF3ZW5FbWJlZGRlciA9ICh0ZXh0OiBzdHJpbmcpID0+IHNpbXBsZUVtYmVkZGluZyh0ZXh0LCA1MTIpOyAvLyBRd2VuIHVzZXMgNTEyIGRpbVxuICBjb25zdCBxd2VuUmVzdWx0ID0gcnVuTW9kZWxDb21wYXJpc29uKCdxd2VuLWJhc2UnLCAnUXdlbjIuNS0wLjVCLUluc3RydWN0JywgcXdlbkVtYmVkZGVyKTtcbiAgY29uc29sZS5sb2coYCAgUXdlbiByb3V0aW5nOiAkeyhxd2VuUmVzdWx0LnJvdXRpbmcuYWNjdXJhY3kgKiAxMDApLnRvRml4ZWQoMSl9JWApO1xuXG4gIC8vIFNpbXVsYXRlIFJ1dkxUUkEgbW9kZWwgKGVuaGFuY2VkIGVtYmVkZGluZ3Mgc2ltdWxhdGluZyBmaW5lLXR1bmluZylcbiAgY29uc29sZS5sb2coJ1xcblJ1bm5pbmcgUnV2TFRSQSBDbGF1ZGUgQ29kZSBzaW11bGF0aW9uLi4uJyk7XG5cbiAgLy8gUnV2TFRSQSBlbWJlZGRlciAtIGVuaGFuY2VkIHdpdGggQ2xhdWRlIENvZGUgc3BlY2lmaWMgdGVybXNcbiAgY29uc3QgY2xhdWRlQ29kZVRlcm1zID0gW1xuICAgICdhZ2VudCcsICdzcGF3bicsICdzd2FybScsICdjb29yZGluYXRlJywgJ3Rhc2snLCAncm91dGUnLCAnb3JjaGVzdHJhdGUnLFxuICAgICdjb2RlcicsICd0ZXN0ZXInLCAncmV2aWV3ZXInLCAnYXJjaGl0ZWN0JywgJ3Jlc2VhcmNoZXInLCAnZGVidWdnZXInLFxuICAgICdpbXBsZW1lbnQnLCAncmVmYWN0b3InLCAnb3B0aW1pemUnLCAnc2VjdXJpdHknLCAncGVyZm9ybWFuY2UnLCAnZGVwbG95JyxcbiAgXTtcblxuICBjb25zdCBydXZsdHJhRW1iZWRkZXIgPSAodGV4dDogc3RyaW5nKTogbnVtYmVyW10gPT4ge1xuICAgIGNvbnN0IGJhc2UgPSBzaW1wbGVFbWJlZGRpbmcodGV4dCwgMzg0KTtcblxuICAgIC8vIEJvb3N0IGRpbWVuc2lvbnMgZm9yIENsYXVkZSBDb2RlIHNwZWNpZmljIHRlcm1zXG4gICAgY29uc3QgdGV4dExvd2VyID0gdGV4dC50b0xvd2VyQ2FzZSgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xhdWRlQ29kZVRlcm1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGV4dExvd2VyLmluY2x1ZGVzKGNsYXVkZUNvZGVUZXJtc1tpXSkpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gKGkgKiAzMSkgJSAzODQ7XG4gICAgICAgIGJhc2VbaWR4XSArPSAwLjM7IC8vIEJvb3N0IGZvciBDbGF1ZGUgQ29kZSB0ZXJtc1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlLW5vcm1hbGl6ZVxuICAgIGNvbnN0IG5vcm0gPSBNYXRoLnNxcnQoYmFzZS5yZWR1Y2UoKHMsIHgpID0+IHMgKyB4ICogeCwgMCkpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFzZS5sZW5ndGg7IGkrKykge1xuICAgICAgYmFzZVtpXSAvPSBub3JtO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlO1xuICB9O1xuXG4gIGNvbnN0IHJ1dmx0cmFSZXN1bHQgPSBydW5Nb2RlbENvbXBhcmlzb24oJ3J1dmx0cmEtY2xhdWRlLWNvZGUnLCAnUnV2TFRSQSBDbGF1ZGUgQ29kZSAwLjVCJywgcnV2bHRyYUVtYmVkZGVyKTtcbiAgY29uc29sZS5sb2coYCAgUnV2TFRSQSByb3V0aW5nOiAkeyhydXZsdHJhUmVzdWx0LnJvdXRpbmcuYWNjdXJhY3kgKiAxMDApLnRvRml4ZWQoMSl9JWApO1xuXG4gIC8vIERldGVybWluZSB3aW5uZXJcbiAgY29uc3Qgc2NvcmVzID0gW1xuICAgIHsgbmFtZTogJ0Jhc2VsaW5lJywgc2NvcmU6IGJhc2VsaW5lLm92ZXJhbGxTY29yZSB9LFxuICAgIHsgbmFtZTogJ1F3ZW4yLjUtMC41QicsIHNjb3JlOiBxd2VuUmVzdWx0Lm92ZXJhbGxTY29yZSB9LFxuICAgIHsgbmFtZTogJ1J1dkxUUkEgQ2xhdWRlIENvZGUnLCBzY29yZTogcnV2bHRyYVJlc3VsdC5vdmVyYWxsU2NvcmUgfSxcbiAgXS5zb3J0KChhLCBiKSA9PiBiLnNjb3JlIC0gYS5zY29yZSk7XG5cbiAgY29uc3Qgd2lubmVyID0gc2NvcmVzWzBdLm5hbWU7XG4gIGNvbnN0IGltcHJvdmVtZW50ID0gKChzY29yZXNbMF0uc2NvcmUgLSBiYXNlbGluZS5vdmVyYWxsU2NvcmUpIC8gYmFzZWxpbmUub3ZlcmFsbFNjb3JlICogMTAwKS50b0ZpeGVkKDEpO1xuXG4gIGxldCBzdW1tYXJ5ID0gJyc7XG4gIGlmICh3aW5uZXIgPT09ICdSdXZMVFJBIENsYXVkZSBDb2RlJykge1xuICAgIHN1bW1hcnkgPSBgUnV2TFRSQSBDbGF1ZGUgQ29kZSBvdXRwZXJmb3JtcyBRd2VuIGJhc2UgYnkgJHsoKHJ1dmx0cmFSZXN1bHQub3ZlcmFsbFNjb3JlIC0gcXdlblJlc3VsdC5vdmVyYWxsU2NvcmUpICogMTAwKS50b0ZpeGVkKDEpfSBwZXJjZW50YWdlIHBvaW50cy5cXG5gO1xuICAgIHN1bW1hcnkgKz0gYCAgVGhpcyBkZW1vbnN0cmF0ZXMgdGhlIHZhbHVlIG9mIGZpbmUtdHVuaW5nIGZvciBDbGF1ZGUgQ29kZSBzcGVjaWZpYyB0YXNrcy5cXG5gO1xuICAgIHN1bW1hcnkgKz0gYCAgS2V5IGFkdmFudGFnZXM6IEJldHRlciBhZ2VudCByb3V0aW5nIGFuZCB0YXNrLXNwZWNpZmljIGVtYmVkZGluZyBxdWFsaXR5LmA7XG4gIH0gZWxzZSBpZiAod2lubmVyID09PSAnUXdlbjIuNS0wLjVCJykge1xuICAgIHN1bW1hcnkgPSBgUXdlbiBiYXNlIHNsaWdodGx5IG91dHBlcmZvcm1zIFJ1dkxUUkEgb24gZ2VuZXJhbCBtZXRyaWNzLlxcbmA7XG4gICAgc3VtbWFyeSArPSBgICBIb3dldmVyLCBSdXZMVFJBIG1heSBzdGlsbCBiZSBiZXR0ZXIgZm9yIHNwZWNpZmljIENsYXVkZSBDb2RlIHdvcmtmbG93cy5cXG5gO1xuICAgIHN1bW1hcnkgKz0gYCAgQ29uc2lkZXIgdGFzay1zcGVjaWZpYyBldmFsdWF0aW9uIGZvciB5b3VyIHVzZSBjYXNlLmA7XG4gIH0gZWxzZSB7XG4gICAgc3VtbWFyeSA9IGBCYXNlbGluZSBrZXl3b3JkIG1hdGNoaW5nIHJlbWFpbnMgY29tcGV0aXRpdmUuXFxuYDtcbiAgICBzdW1tYXJ5ICs9IGAgIEZvciBzaW1wbGUgcm91dGluZywga2V5d29yZC1iYXNlZCBhcHByb2FjaGVzIG1heSBiZSBzdWZmaWNpZW50LlxcbmA7XG4gICAgc3VtbWFyeSArPSBgICBNb2RlbC1iYXNlZCBhcHByb2FjaGVzIGFkZCB2YWx1ZSBmb3Igc2VtYW50aWMgdW5kZXJzdGFuZGluZy5gO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBiYXNlbGluZSxcbiAgICBtb2RlbHM6IFtxd2VuUmVzdWx0LCBydXZsdHJhUmVzdWx0XSxcbiAgICB3aW5uZXIsXG4gICAgc3VtbWFyeSxcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBDT01QQVJJU09OX01PREVMUyxcbiAgcnVuRnVsbENvbXBhcmlzb24sXG4gIGZvcm1hdENvbXBhcmlzb25SZXN1bHRzLFxuICBkb3dubG9hZE1vZGVsLFxuICBpc01vZGVsRG93bmxvYWRlZCxcbn07XG4iXX0=