@dollhousemcp/mcp-server 1.9.6 → 1.9.8

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.
@@ -21,6 +21,14 @@ import * as path from 'path';
21
21
  import * as fs from 'fs/promises';
22
22
  import * as yaml from 'js-yaml';
23
23
  import * as crypto from 'crypto';
24
+ // Character code constants for whitespace detection
25
+ // Makes the code more readable and maintainable
26
+ const WHITESPACE_CHARS = {
27
+ SPACE: 32,
28
+ TAB: 9,
29
+ NEWLINE: 10,
30
+ CARRIAGE_RETURN: 13
31
+ };
24
32
  export class MemoryManager {
25
33
  portfolioManager;
26
34
  memoriesDir;
@@ -88,8 +96,18 @@ export class MemoryManager {
88
96
  // Check if this is pure YAML (doesn't start with frontmatter markers)
89
97
  let parsed;
90
98
  // Efficient format detection without creating trimmed copy
99
+ // Performance optimization: Use character codes instead of regex for whitespace detection
100
+ // Credit: Jeet Singh (@jeetsingh008) - PR #1035
91
101
  let firstNonWhitespace = 0;
92
- while (firstNonWhitespace < content.length && /\s/.test(content[firstNonWhitespace])) {
102
+ while (firstNonWhitespace < content.length) {
103
+ const charCode = content.charCodeAt(firstNonWhitespace);
104
+ // Check if character is NOT whitespace
105
+ if (charCode !== WHITESPACE_CHARS.SPACE &&
106
+ charCode !== WHITESPACE_CHARS.TAB &&
107
+ charCode !== WHITESPACE_CHARS.NEWLINE &&
108
+ charCode !== WHITESPACE_CHARS.CARRIAGE_RETURN) {
109
+ break;
110
+ }
93
111
  firstNonWhitespace++;
94
112
  }
95
113
  // Handle empty content edge case
@@ -584,9 +602,15 @@ export class MemoryManager {
584
602
  */
585
603
  async validateAndResolvePath(filePath) {
586
604
  // SECURITY FIX: Comprehensive path validation
605
+ // Enhanced validation inspired by Jeet Singh (@jeetsingh008) - PR #1035
606
+ // First normalize the path to resolve any ./ or ../ sequences
587
607
  const normalized = path.normalize(filePath);
588
- // Check for path traversal attempts
589
- if (normalized.includes('..') || path.isAbsolute(normalized)) {
608
+ // Check for path traversal attempts - both in original and normalized
609
+ // Check both the normalized path and the original for any traversal patterns
610
+ if (normalized.includes('..') ||
611
+ filePath.includes('..') ||
612
+ path.isAbsolute(normalized) ||
613
+ path.isAbsolute(filePath)) {
590
614
  SecurityMonitor.logSecurityEvent({
591
615
  type: 'PATH_TRAVERSAL_ATTEMPT',
592
616
  severity: 'HIGH',
@@ -654,4 +678,4 @@ export class MemoryManager {
654
678
  return match ? parseInt(match[1]) : MEMORY_CONSTANTS.DEFAULT_RETENTION_DAYS;
655
679
  }
656
680
  }
657
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtb3J5TWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9tZW1vcmllcy9NZW1vcnlNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUErQixNQUFNLGFBQWEsQ0FBQztBQUdsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUUsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFakMsTUFBTSxPQUFPLGFBQWE7SUFDaEIsZ0JBQWdCLENBQW1CO0lBQ25DLFdBQVcsQ0FBUztJQUNwQixXQUFXLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUM7SUFDN0MsZ0JBQWdCLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFMUQsOEVBQThFO0lBQzlFLDJDQUEyQztJQUNuQyxnQkFBZ0IsR0FBb0IsSUFBSSxDQUFDO0lBQ3pDLHlCQUF5QixHQUFXLENBQUMsQ0FBQztJQUU5QztRQUNFLElBQUksQ0FBQyxn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Q0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDO0lBQzlFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTWVtb3J5TWFuYWdlciAtIEltcGxlbWVudGF0aW9uIG9mIElFbGVtZW50TWFuYWdlciBmb3IgTWVtb3J5IGVsZW1lbnRzXG4gKiBIYW5kbGVzIENSVUQgb3BlcmF0aW9ucyBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgZm9yIG1lbW9yaWVzIGltcGxlbWVudGluZyBJRWxlbWVudFxuICogXG4gKiBGSVhFUyBJTVBMRU1FTlRFRDpcbiAqIDEuIENSSVRJQ0FMOiBGaXhlZCByYWNlIGNvbmRpdGlvbnMgaW4gZmlsZSBvcGVyYXRpb25zIGJ5IHVzaW5nIEZpbGVMb2NrTWFuYWdlciBmb3IgYXRvbWljIHJlYWRzL3dyaXRlc1xuICogMi4gSElHSDogRml4ZWQgdW52YWxpZGF0ZWQgWUFNTCBwYXJzaW5nIHZ1bG5lcmFiaWxpdHkgYnkgdXNpbmcgU2VjdXJlWWFtbFBhcnNlclxuICogMy4gTUVESVVNOiBBbGwgdXNlciBpbnB1dHMgYXJlIG5vdyB2YWxpZGF0ZWQgYW5kIHNhbml0aXplZFxuICogNC4gTUVESVVNOiBBdWRpdCBsb2dnaW5nIGFkZGVkIGZvciBzZWN1cml0eSBvcGVyYXRpb25zXG4gKiA1LiBNRURJVU06IFBhdGggdmFsaWRhdGlvbiBwcmV2ZW50cyBkaXJlY3RvcnkgdHJhdmVyc2FsIGF0dGFja3NcbiAqL1xuXG5pbXBvcnQgeyBNZW1vcnksIE1lbW9yeU1ldGFkYXRhLCBNZW1vcnlFbnRyeSB9IGZyb20gJy4vTWVtb3J5LmpzJztcbmltcG9ydCB7IElFbGVtZW50TWFuYWdlciB9IGZyb20gJy4uLy4uL3R5cGVzL2VsZW1lbnRzL0lFbGVtZW50TWFuYWdlci5qcyc7XG5pbXBvcnQgeyBFbGVtZW50VmFsaWRhdGlvblJlc3VsdCB9IGZyb20gJy4uLy4uL3R5cGVzL2VsZW1lbnRzL0lFbGVtZW50LmpzJztcbmltcG9ydCB7IEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vLi4vcG9ydGZvbGlvL3R5cGVzLmpzJztcbmltcG9ydCB7IFBvcnRmb2xpb01hbmFnZXIgfSBmcm9tICcuLi8uLi9wb3J0Zm9saW8vUG9ydGZvbGlvTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBGaWxlTG9ja01hbmFnZXIgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9maWxlTG9ja01hbmFnZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJlWWFtbFBhcnNlciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3NlY3VyZVlhbWxQYXJzZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgc2FuaXRpemVJbnB1dCB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L0lucHV0VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IE1FTU9SWV9DT05TVEFOVFMsIE1FTU9SWV9TRUNVUklUWV9FVkVOVFMgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tICdqcy15YW1sJztcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tICdjcnlwdG8nO1xuXG5leHBvcnQgY2xhc3MgTWVtb3J5TWFuYWdlciBpbXBsZW1lbnRzIElFbGVtZW50TWFuYWdlcjxNZW1vcnk+IHtcbiAgcHJpdmF0ZSBwb3J0Zm9saW9NYW5hZ2VyOiBQb3J0Zm9saW9NYW5hZ2VyO1xuICBwcml2YXRlIG1lbW9yaWVzRGlyOiBzdHJpbmc7XG4gIHByaXZhdGUgbWVtb3J5Q2FjaGU6IE1hcDxzdHJpbmcsIE1lbW9yeT4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgY29udGVudEhhc2hJbmRleDogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTtcblxuICAvLyBQRVJGT1JNQU5DRSBJTVBST1ZFTUVOVDogQ2FjaGUgZm9yIGRhdGUgZm9sZGVycyB0byBhdm9pZCBkaXJlY3Rvcnkgc2Nhbm5pbmdcbiAgLy8gSW52YWxpZGF0ZWQgd2hlbiBuZXcgZm9sZGVycyBhcmUgY3JlYXRlZFxuICBwcml2YXRlIGRhdGVGb2xkZXJzQ2FjaGU6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZGF0ZUZvbGRlcnNDYWNoZVRpbWVzdGFtcDogbnVtYmVyID0gMDtcbiAgXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucG9ydGZvbGlvTWFuYWdlciA9IFBvcnRmb2xpb01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICB0aGlzLm1lbW9yaWVzRGlyID0gdGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuTUVNT1JZKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIExvYWQgYSBtZW1vcnkgZnJvbSBmaWxlXG4gICAqIFNFQ1VSSVRZIEZJWCAjMTogVXNlcyBGaWxlTG9ja01hbmFnZXIuYXRvbWljUmVhZEZpbGUoKSBpbnN0ZWFkIG9mIGZzLnJlYWRGaWxlKClcbiAgICogdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgYW5kIGVuc3VyZSBhdG9taWMgZmlsZSBvcGVyYXRpb25zXG4gICAqIEBwYXJhbSBmaWxlUGF0aCBQYXRoIHRvIHRoZSBtZW1vcnkgZmlsZSB0byBsb2FkXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBsb2FkZWQgTWVtb3J5IGluc3RhbmNlXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBXaGVuIGZpbGUgY2Fubm90IGJlIGZvdW5kIG9yIHBhdGggdmFsaWRhdGlvbiBmYWlsc1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gV2hlbiBZQU1MIHBhcnNpbmcgZmFpbHMgb3IgY29udGVudCBpcyBtYWxmb3JtZWRcbiAgICogQHRocm93cyB7RXJyb3J9IFdoZW4gbWVtb3J5IHZhbGlkYXRpb24gZmFpbHMgYWZ0ZXIgbG9hZGluZ1xuICAgKi9cbiAgYXN5bmMgbG9hZChmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxNZW1vcnk+IHtcbiAgICB0cnkge1xuICAgICAgbGV0IGZ1bGxQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICAgIC8vIENoZWNrIGlmIGl0J3MgYSByZWxhdGl2ZSBwYXRoIChubyBkYXRlIGZvbGRlcilcbiAgICAgIGlmICghZmlsZVBhdGguaW5jbHVkZXMocGF0aC5zZXApIHx8ICFmaWxlUGF0aC5tYXRjaCgvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9LykpIHtcbiAgICAgICAgLy8gU2VhcmNoIGluIGRhdGUgZm9sZGVyc1xuICAgICAgICBjb25zdCBkYXRlRm9sZGVycyA9IGF3YWl0IHRoaXMuZ2V0RGF0ZUZvbGRlcnMoKTtcbiAgICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XG5cbiAgICAgICAgZm9yIChjb25zdCBkYXRlRm9sZGVyIG9mIGRhdGVGb2xkZXJzKSB7XG4gICAgICAgICAgY29uc3QgdGVzdFBhdGggPSBwYXRoLmpvaW4odGhpcy5tZW1vcmllc0RpciwgZGF0ZUZvbGRlciwgZmlsZVBhdGgpO1xuICAgICAgICAgIGlmIChhd2FpdCBmcy5hY2Nlc3ModGVzdFBhdGgpLnRoZW4oKCkgPT4gdHJ1ZSkuY2F0Y2goKCkgPT4gZmFsc2UpKSB7XG4gICAgICAgICAgICBmdWxsUGF0aCA9IHRlc3RQYXRoO1xuICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgIC8vIEZhbGwgYmFjayB0byByb290IGRpcmVjdG9yeSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBkdXJpbmcgdHJhbnNpdGlvblxuICAgICAgICAgIGZ1bGxQYXRoID0gYXdhaXQgdGhpcy52YWxpZGF0ZUFuZFJlc29sdmVQYXRoKGZpbGVQYXRoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnVsbFBhdGggPSBhd2FpdCB0aGlzLnZhbGlkYXRlQW5kUmVzb2x2ZVBhdGgoZmlsZVBhdGgpO1xuICAgICAgfVxuXG4gICAgICAvLyBFbnN1cmUgZnVsbFBhdGggaXMgZGVmaW5lZFxuICAgICAgaWYgKCFmdWxsUGF0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCByZXNvbHZlIHBhdGg6ICR7ZmlsZVBhdGh9YCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGNhY2hlIGZpcnN0XG4gICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLm1lbW9yeUNhY2hlLmdldChmdWxsUGF0aCk7XG4gICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENSSVRJQ0FMIEZJWDogVXNlIGF0b21pYyBmaWxlIHJlYWQgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnNcbiAgICAgIC8vIFByZXZpb3VzbHk6IGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShmdWxsUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICAvLyBOb3c6IFVzZXMgRmlsZUxvY2tNYW5hZ2VyIHdpdGggcHJvcGVyIGVuY29kaW5nIG9iamVjdCBmb3JtYXRcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBGaWxlTG9ja01hbmFnZXIuYXRvbWljUmVhZEZpbGUoZnVsbFBhdGgsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG4gICAgICBcbiAgICAgIC8vIEhJR0ggU0VWRVJJVFkgRklYOiBVc2UgU2VjdXJlWWFtbFBhcnNlciB0byBwcmV2ZW50IFlBTUwgaW5qZWN0aW9uIGF0dGFja3NcbiAgICAgIC8vIFByZXZpb3VzbHk6IENvdWxkIHVzZSB1bnNhZmUgWUFNTCBwYXJzaW5nXG4gICAgICAvLyBOb3c6IFVzZXMgU2VjdXJlWWFtbFBhcnNlciB3aGljaCB2YWxpZGF0ZXMgY29udGVudCBhbmQgcHJldmVudHMgbWFsaWNpb3VzIHBhdHRlcm5zXG5cbiAgICAgIC8vIE1lbW9yeSBmaWxlcyBhcmUgcHVyZSBZQU1MICh1bmxpa2Ugb3RoZXIgZWxlbWVudHMgd2hpY2ggYXJlIG1hcmtkb3duIHdpdGggZnJvbnRtYXR0ZXIpXG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIHB1cmUgWUFNTCAoZG9lc24ndCBzdGFydCB3aXRoIGZyb250bWF0dGVyIG1hcmtlcnMpXG4gICAgICBsZXQgcGFyc2VkOiBhbnk7XG5cbiAgICAgIC8vIEVmZmljaWVudCBmb3JtYXQgZGV0ZWN0aW9uIHdpdGhvdXQgY3JlYXRpbmcgdHJpbW1lZCBjb3B5XG4gICAgICBsZXQgZmlyc3ROb25XaGl0ZXNwYWNlID0gMDtcbiAgICAgIHdoaWxlIChmaXJzdE5vbldoaXRlc3BhY2UgPCBjb250ZW50Lmxlbmd0aCAmJiAvXFxzLy50ZXN0KGNvbnRlbnRbZmlyc3ROb25XaGl0ZXNwYWNlXSkpIHtcbiAgICAgICAgZmlyc3ROb25XaGl0ZXNwYWNlKys7XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBlbXB0eSBjb250ZW50IGVkZ2UgY2FzZVxuICAgICAgaWYgKGZpcnN0Tm9uV2hpdGVzcGFjZSA9PT0gY29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgLy8gRW1wdHkgb3IgYWxsIHdoaXRlc3BhY2UgZmlsZSAtIGNyZWF0ZSBtaW5pbWFsIHZhbGlkIHN0cnVjdHVyZVxuICAgICAgICBwYXJzZWQgPSB7IGRhdGE6IHt9LCBjb250ZW50OiAnJyB9O1xuICAgICAgfSBlbHNlIGlmICghY29udGVudC5zdGFydHNXaXRoKCctLS0nLCBmaXJzdE5vbldoaXRlc3BhY2UpKSB7XG4gICAgICAgIC8vIFB1cmUgWUFNTCBmaWxlIC0gd3JhcCBpdCB3aXRoIGZyb250bWF0dGVyIG1hcmtlcnMgZm9yIFNlY3VyZVlhbWxQYXJzZXJcbiAgICAgICAgY29uc3Qgd3JhcHBlZENvbnRlbnQgPSBgLS0tXFxuJHtjb250ZW50fVxcbi0tLVxcbmA7XG4gICAgICAgIGNvbnN0IHBhcnNlUmVzdWx0ID0gU2VjdXJlWWFtbFBhcnNlci5wYXJzZSh3cmFwcGVkQ29udGVudCwge1xuICAgICAgICAgIG1heFlhbWxTaXplOiBNRU1PUllfQ09OU1RBTlRTLk1BWF9ZQU1MX1NJWkUsXG4gICAgICAgICAgdmFsaWRhdGVDb250ZW50OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBGb3IgcHVyZSBZQU1MLCB0aGUgZW50aXJlIGNvbnRlbnQgYmVjb21lcyB0aGUgZGF0YSwgbm8gbWFya2Rvd24gY29udGVudFxuICAgICAgICBwYXJzZWQgPSB7IGRhdGE6IHBhcnNlUmVzdWx0LmRhdGEsIGNvbnRlbnQ6ICcnIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGaWxlIHdpdGggZnJvbnRtYXR0ZXIgKHNob3VsZG4ndCBoYXBwZW4gZm9yIG1lbW9yaWVzLCBidXQgaGFuZGxlIGl0KVxuICAgICAgICBwYXJzZWQgPSBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlKGNvbnRlbnQsIHtcbiAgICAgICAgICBtYXhZYW1sU2l6ZTogTUVNT1JZX0NPTlNUQU5UUy5NQVhfWUFNTF9TSVpFLFxuICAgICAgICAgIHZhbGlkYXRlQ29udGVudDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gRXh0cmFjdCBtZXRhZGF0YSBhbmQgY29udGVudFxuICAgICAgY29uc3QgeyBtZXRhZGF0YSwgY29udGVudDogbWVtb3J5Q29udGVudCB9ID0gdGhpcy5wYXJzZU1lbW9yeUZpbGUocGFyc2VkKTtcbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIG1lbW9yeSBpbnN0YW5jZVxuICAgICAgY29uc3QgbWVtb3J5ID0gbmV3IE1lbW9yeShtZXRhZGF0YSk7XG4gICAgICBcbiAgICAgIC8vIExvYWQgc2F2ZWQgZW50cmllcyBpZiBwcmVzZW50XG4gICAgICAvLyBNZW1vcnkgZmlsZXMgaGF2ZSBlbnRyaWVzIGFzIGEgdG9wLWxldmVsIGtleSBpbiB0aGUgWUFNTFxuICAgICAgY29uc3QgZW50cmllcyA9IHBhcnNlZC5kYXRhPy5lbnRyaWVzO1xuICAgICAgaWYgKGVudHJpZXMpIHtcbiAgICAgICAgbWVtb3J5LmRlc2VyaWFsaXplKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBpZDogbWVtb3J5LmlkLFxuICAgICAgICAgIHR5cGU6IG1lbW9yeS50eXBlLFxuICAgICAgICAgIHZlcnNpb246IG1lbW9yeS52ZXJzaW9uLFxuICAgICAgICAgIG1ldGFkYXRhOiBtZW1vcnkubWV0YWRhdGEsXG4gICAgICAgICAgZXh0ZW5zaW9uczogbWVtb3J5LmV4dGVuc2lvbnMsXG4gICAgICAgICAgZW50cmllczogZW50cmllc1xuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENhY2hlIHRoZSBsb2FkZWQgbWVtb3J5XG4gICAgICB0aGlzLm1lbW9yeUNhY2hlLnNldChmdWxsUGF0aCwgbWVtb3J5KTtcbiAgICAgIFxuICAgICAgLy8gTG9nIHN1Y2Nlc3NmdWwgbG9hZFxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiBNRU1PUllfU0VDVVJJVFlfRVZFTlRTLk1FTU9SWV9MT0FERUQsXG4gICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgc291cmNlOiAnTWVtb3J5TWFuYWdlci5sb2FkJyxcbiAgICAgICAgZGV0YWlsczogYExvYWRlZCBtZW1vcnkgZnJvbSAke3BhdGguYmFzZW5hbWUoZnVsbFBhdGgpfWBcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICByZXR1cm4gbWVtb3J5O1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogTUVNT1JZX1NFQ1VSSVRZX0VWRU5UUy5NRU1PUllfTE9BRF9GQUlMRUQsXG4gICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgc291cmNlOiAnTWVtb3J5TWFuYWdlci5sb2FkJyxcbiAgICAgICAgZGV0YWlsczogYEZhaWxlZCB0byBsb2FkIG1lbW9yeSBmcm9tICR7ZmlsZVBhdGh9OiAke2Vycm9yfWBcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBtZW1vcnk6ICR7ZXJyb3J9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGRhdGUtYmFzZWQgcGF0aCBmb3IgbWVtb3J5IHN0b3JhZ2VcbiAgICogQ3JlYXRlcyBZWVlZLU1NLUREIGZvbGRlciBzdHJ1Y3R1cmUgdG8gcHJldmVudCBmbGF0IGRpcmVjdG9yeSBpc3N1ZXNcbiAgICogQHBhcmFtIGVsZW1lbnQgTWVtb3J5IGVsZW1lbnQgdG8gc2F2ZVxuICAgKiBAcGFyYW0gZmlsZU5hbWUgT3B0aW9uYWwgY3VzdG9tIGZpbGVuYW1lXG4gICAqIEByZXR1cm5zIEZ1bGwgcGF0aCB0byBtZW1vcnkgZmlsZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZW5lcmF0ZU1lbW9yeVBhdGgoZWxlbWVudDogTWVtb3J5LCBmaWxlTmFtZT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgZGF0ZUZvbGRlciA9IGAke2RhdGUuZ2V0RnVsbFllYXIoKX0tJHtTdHJpbmcoZGF0ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKX0tJHtTdHJpbmcoZGF0ZS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyl9YDtcbiAgICBjb25zdCBkYXRlUGF0aCA9IHBhdGguam9pbih0aGlzLm1lbW9yaWVzRGlyLCBkYXRlRm9sZGVyKTtcblxuICAgIC8vIEVuc3VyZSBkYXRlIGZvbGRlciBleGlzdHNcbiAgICBhd2FpdCBmcy5ta2RpcihkYXRlUGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAvLyBQRVJGT1JNQU5DRSBJTVBST1ZFTUVOVDogSW52YWxpZGF0ZSBkYXRlIGZvbGRlcnMgY2FjaGUgc2luY2Ugd2UgY3JlYXRlZCBhIG5ldyBmb2xkZXJcbiAgICB0aGlzLmRhdGVGb2xkZXJzQ2FjaGUgPSBudWxsO1xuXG4gICAgLy8gR2VuZXJhdGUgZmlsZW5hbWVcbiAgICBjb25zdCBiYXNlTmFtZSA9IGZpbGVOYW1lIHx8IGAke2VsZW1lbnQubWV0YWRhdGEubmFtZT8udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICctJykgfHwgJ21lbW9yeSd9LnlhbWxgO1xuICAgIGxldCBmaW5hbE5hbWUgPSBiYXNlTmFtZTtcbiAgICBsZXQgdmVyc2lvbiA9IDE7XG5cbiAgICAvLyBIYW5kbGUgY29sbGlzaW9ucyB3aXRoIHZlcnNpb24gc3VmZml4XG4gICAgd2hpbGUgKGF3YWl0IGZzLmFjY2VzcyhwYXRoLmpvaW4oZGF0ZVBhdGgsIGZpbmFsTmFtZSkpLnRoZW4oKCkgPT4gdHJ1ZSkuY2F0Y2goKCkgPT4gZmFsc2UpKSB7XG4gICAgICB2ZXJzaW9uKys7XG4gICAgICBmaW5hbE5hbWUgPSBiYXNlTmFtZS5yZXBsYWNlKCcueWFtbCcsIGAtdiR7dmVyc2lvbn0ueWFtbGApO1xuICAgIH1cblxuICAgIHJldHVybiBwYXRoLmpvaW4oZGF0ZVBhdGgsIGZpbmFsTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIFNIQS0yNTYgaGFzaCBvZiBtZW1vcnkgY29udGVudCBmb3IgZGVkdXBsaWNhdGlvblxuICAgKiBJbXBsZW1lbnRzIElzc3VlICM5OTQgLSBDb250ZW50LWJhc2VkIGRlZHVwbGljYXRpb25cbiAgICovXG4gIHByaXZhdGUgY2FsY3VsYXRlQ29udGVudEhhc2goZWxlbWVudDogTWVtb3J5KTogc3RyaW5nIHtcbiAgICBjb25zdCBjb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgbWV0YWRhdGE6IGVsZW1lbnQubWV0YWRhdGEsXG4gICAgICBlbnRyaWVzOiBKU09OLnBhcnNlKGVsZW1lbnQuc2VyaWFsaXplKCkpLmVudHJpZXNcbiAgICB9KTtcbiAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShjb250ZW50KS5kaWdlc3QoJ2hleCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgZGF0ZSBmb2xkZXJzIGluIG1lbW9yaWVzIGRpcmVjdG9yeVxuICAgKiBQRVJGT1JNQU5DRSBJTVBST1ZFTUVOVDogVXNlcyBjYWNoZSB0byBhdm9pZCByZXBlYXRlZCBkaXJlY3Rvcnkgc2Nhbm5pbmdcbiAgICogQ2FjaGUgaXMgaW52YWxpZGF0ZWQgd2hlbiBuZXcgZm9sZGVycyBhcmUgY3JlYXRlZCBvciBhZnRlciA2MCBzZWNvbmRzXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIGRhdGUgZm9sZGVyIG5hbWVzXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldERhdGVGb2xkZXJzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IENBQ0hFX1RUTCA9IDYwMDAwOyAvLyA2MCBzZWNvbmRzXG5cbiAgICAvLyBSZXR1cm4gY2FjaGVkIHJlc3VsdCBpZiB2YWxpZFxuICAgIGlmICh0aGlzLmRhdGVGb2xkZXJzQ2FjaGUgIT09IG51bGwgJiZcbiAgICAgICAgKG5vdyAtIHRoaXMuZGF0ZUZvbGRlcnNDYWNoZVRpbWVzdGFtcCkgPCBDQUNIRV9UVEwpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGVGb2xkZXJzQ2FjaGU7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCBmcy5yZWFkZGlyKHRoaXMubWVtb3JpZXNEaXIsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgICAgIGNvbnN0IGZvbGRlcnMgPSBlbnRyaWVzXG4gICAgICAgIC5maWx0ZXIoZW50cnkgPT4gZW50cnkuaXNEaXJlY3RvcnkoKSAmJiAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC8udGVzdChlbnRyeS5uYW1lKSlcbiAgICAgICAgLm1hcChlbnRyeSA9PiBlbnRyeS5uYW1lKVxuICAgICAgICAuc29ydCgpXG4gICAgICAgIC5yZXZlcnNlKCk7IC8vIE1vc3QgcmVjZW50IGZpcnN0XG5cbiAgICAgIC8vIENhY2hlIHRoZSByZXN1bHRcbiAgICAgIHRoaXMuZGF0ZUZvbGRlcnNDYWNoZSA9IGZvbGRlcnM7XG4gICAgICB0aGlzLmRhdGVGb2xkZXJzQ2FjaGVUaW1lc3RhbXAgPSBub3c7XG5cbiAgICAgIHJldHVybiBmb2xkZXJzO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoKGVycm9yIGFzIGFueSkuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgLy8gQ2FjaGUgZW1wdHkgcmVzdWx0XG4gICAgICAgIHRoaXMuZGF0ZUZvbGRlcnNDYWNoZSA9IFtdO1xuICAgICAgICB0aGlzLmRhdGVGb2xkZXJzQ2FjaGVUaW1lc3RhbXAgPSBub3c7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGEgbWVtb3J5IHRvIGZpbGVcbiAgICogU0VDVVJJVFkgRklYICMxOiBVc2VzIEZpbGVMb2NrTWFuYWdlci5hdG9taWNXcml0ZUZpbGUoKSBmb3IgYXRvbWljIG9wZXJhdGlvbnNcbiAgICogQHBhcmFtIGVsZW1lbnQgTWVtb3J5IGVsZW1lbnQgdG8gc2F2ZVxuICAgKiBAcGFyYW0gZmlsZVBhdGggT3B0aW9uYWwgY3VzdG9tIGZpbGUgcGF0aCwgZGVmYXVsdHMgdG8gZGF0ZS1iYXNlZCBwYXRoXG4gICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHNhdmUgaXMgY29tcGxldGVcbiAgICogQHRocm93cyB7RXJyb3J9IFdoZW4gbWVtb3J5IHZhbGlkYXRpb24gZmFpbHMgYmVmb3JlIHNhdmluZ1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gV2hlbiBwYXRoIHZhbGlkYXRpb24gZmFpbHMgb3IgZmlsZSBzeXN0ZW0gZXJyb3JzIG9jY3VyXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBXaGVuIGF0b21pYyB3cml0ZSBvcGVyYXRpb24gZmFpbHNcbiAgICovXG4gIGFzeW5jIHNhdmUoZWxlbWVudDogTWVtb3J5LCBmaWxlUGF0aD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSBlbGVtZW50XG4gICAgICBjb25zdCB2YWxpZGF0aW9uID0gZWxlbWVudC52YWxpZGF0ZSgpO1xuICAgICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBtZW1vcnk6ICR7dmFsaWRhdGlvbi5lcnJvcnM/Lm1hcChlID0+IGUubWVzc2FnZSkuam9pbignLCAnKX1gKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2FsY3VsYXRlIGNvbnRlbnQgaGFzaCBmb3IgZGVkdXBsaWNhdGlvblxuICAgICAgY29uc3QgY29udGVudEhhc2ggPSB0aGlzLmNhbGN1bGF0ZUNvbnRlbnRIYXNoKGVsZW1lbnQpO1xuICAgICAgY29uc3QgZXhpc3RpbmdQYXRoID0gdGhpcy5jb250ZW50SGFzaEluZGV4LmdldChjb250ZW50SGFzaCk7XG5cbiAgICAgIGlmIChleGlzdGluZ1BhdGgpIHtcbiAgICAgICAgLy8gTG9nIGR1cGxpY2F0ZSBkZXRlY3Rpb25cbiAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgIHR5cGU6ICdNRU1PUllfRFVQTElDQVRFX0RFVEVDVEVEJyxcbiAgICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgICAgc291cmNlOiAnTWVtb3J5TWFuYWdlci5zYXZlJyxcbiAgICAgICAgICBkZXRhaWxzOiBgRHVwbGljYXRlIGNvbnRlbnQgZGV0ZWN0ZWQuIEV4aXN0aW5nOiAke2V4aXN0aW5nUGF0aH1gXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBHZW5lcmF0ZSBkYXRlLWJhc2VkIHBhdGggaWYgbm90IHByb3ZpZGVkXG4gICAgICBjb25zdCBmdWxsUGF0aCA9IGZpbGVQYXRoXG4gICAgICAgID8gYXdhaXQgdGhpcy52YWxpZGF0ZUFuZFJlc29sdmVQYXRoKGZpbGVQYXRoKVxuICAgICAgICA6IGF3YWl0IHRoaXMuZ2VuZXJhdGVNZW1vcnlQYXRoKGVsZW1lbnQpO1xuXG4gICAgICAvLyBFbnN1cmUgcGFyZW50IGRpcmVjdG9yeSBleGlzdHMgKGZvciBkYXRlIGZvbGRlcnMpXG4gICAgICBhd2FpdCBmcy5ta2RpcihwYXRoLmRpcm5hbWUoZnVsbFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIFxuICAgICAgLy8gR2V0IG1lbW9yeSBzdGF0aXN0aWNzXG4gICAgICBjb25zdCBzdGF0cyA9IGVsZW1lbnQuZ2V0U3RhdHMoKTtcbiAgICAgIFxuICAgICAgLy8gUHJlcGFyZSBkYXRhIGZvciBzYXZpbmdcbiAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgIG1ldGFkYXRhOiBlbGVtZW50Lm1ldGFkYXRhLFxuICAgICAgICBleHRlbnNpb25zOiBlbGVtZW50LmV4dGVuc2lvbnMsXG4gICAgICAgIHN0YXRzOiB7XG4gICAgICAgICAgdG90YWxFbnRyaWVzOiBzdGF0cy50b3RhbEVudHJpZXMsXG4gICAgICAgICAgdG90YWxTaXplOiBzdGF0cy50b3RhbFNpemUsXG4gICAgICAgICAgb2xkZXN0RW50cnk6IHN0YXRzLm9sZGVzdEVudHJ5Py50b0lTT1N0cmluZygpLFxuICAgICAgICAgIG5ld2VzdEVudHJ5OiBzdGF0cy5uZXdlc3RFbnRyeT8udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICB0b3BUYWdzOiBBcnJheS5mcm9tKHN0YXRzLnRhZ0ZyZXF1ZW5jeS5lbnRyaWVzKCkpXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYlsxXSAtIGFbMV0pXG4gICAgICAgICAgICAuc2xpY2UoMCwgMTApXG4gICAgICAgICAgICAubWFwKChbdGFnLCBjb3VudF0pID0+ICh7IHRhZywgY291bnQgfSkpXG4gICAgICAgIH0sXG4gICAgICAgIGVudHJpZXM6IEpTT04ucGFyc2UoZWxlbWVudC5zZXJpYWxpemUoKSkuZW50cmllc1xuICAgICAgfTtcbiAgICAgIFxuICAgICAgLy8gU0VDVVJJVFkgRklYOiBVc2Ugc2VjdXJlIFlBTUwgZHVtcGluZyB3aXRoIHNhZmV0eSBvcHRpb25zXG4gICAgICAvLyBQcmV2aW91c2x5OiBDb3VsZCBhbGxvdyBkYW5nZXJvdXMgWUFNTCBmZWF0dXJlc1xuICAgICAgLy8gTm93OiBVc2VzIEZBSUxTQUZFX1NDSEVNQSBhbmQgc2VjdXJpdHkgb3B0aW9ucyB0byBwcmV2ZW50IGNvZGUgZXhlY3V0aW9uXG4gICAgICBjb25zdCB5YW1sQ29udGVudCA9IHlhbWwuZHVtcChkYXRhLCB7XG4gICAgICAgIHNjaGVtYTogeWFtbC5GQUlMU0FGRV9TQ0hFTUEsXG4gICAgICAgIG5vUmVmczogdHJ1ZSxcbiAgICAgICAgc2tpcEludmFsaWQ6IHRydWUsXG4gICAgICAgIHNvcnRLZXlzOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgLy8gQ1JJVElDQUwgRklYOiBVc2UgYXRvbWljIGZpbGUgd3JpdGUgdG8gcHJldmVudCBjb3JydXB0aW9uXG4gICAgICAvLyBQcmV2aW91c2x5OiBhd2FpdCBmcy53cml0ZUZpbGUoZnVsbFBhdGgsIHlhbWxDb250ZW50LCAndXRmLTgnKTtcbiAgICAgIC8vIE5vdzogVXNlcyBGaWxlTG9ja01hbmFnZXIgZm9yIGF0b21pYyB3cml0ZSB3aXRoIHByb3BlciBlbmNvZGluZ1xuICAgICAgYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1dyaXRlRmlsZShmdWxsUGF0aCwgeWFtbENvbnRlbnQsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSBjYWNoZVxuICAgICAgdGhpcy5tZW1vcnlDYWNoZS5zZXQoZnVsbFBhdGgsIGVsZW1lbnQpO1xuXG4gICAgICAvLyBVcGRhdGUgY29udGVudCBoYXNoIGluZGV4XG4gICAgICB0aGlzLmNvbnRlbnRIYXNoSW5kZXguc2V0KGNvbnRlbnRIYXNoLCBmdWxsUGF0aCk7XG5cbiAgICAgIC8vIExvZyBzdWNjZXNzZnVsIHNhdmVcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogTUVNT1JZX1NFQ1VSSVRZX0VWRU5UUy5NRU1PUllfU0FWRUQsXG4gICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgc291cmNlOiAnTWVtb3J5TWFuYWdlci5zYXZlJyxcbiAgICAgICAgZGV0YWlsczogYFNhdmVkIG1lbW9yeSB0byAke3BhdGguYmFzZW5hbWUoZnVsbFBhdGgpfSB3aXRoICR7c3RhdHMudG90YWxFbnRyaWVzfSBlbnRyaWVzYFxuICAgICAgfSk7XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiBNRU1PUllfU0VDVVJJVFlfRVZFTlRTLk1FTU9SWV9TQVZFX0ZBSUxFRCxcbiAgICAgICAgc2V2ZXJpdHk6ICdISUdIJyxcbiAgICAgICAgc291cmNlOiAnTWVtb3J5TWFuYWdlci5zYXZlJyxcbiAgICAgICAgZGV0YWlsczogYEZhaWxlZCB0byBzYXZlIG1lbW9yeSB0byAke2ZpbGVQYXRofTogJHtlcnJvcn1gXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNhdmUgbWVtb3J5OiAke2Vycm9yfWApO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIExpc3QgYWxsIGF2YWlsYWJsZSBtZW1vcmllc1xuICAgKi9cbiAgYXN5bmMgbGlzdCgpOiBQcm9taXNlPE1lbW9yeVtdPiB7XG4gICAgY29uc3QgbWVtb3JpZXM6IE1lbW9yeVtdID0gW107XG5cbiAgICB0cnkge1xuICAgICAgLy8gR2V0IGFsbCBkYXRlIGZvbGRlcnNcbiAgICAgIGNvbnN0IGRhdGVGb2xkZXJzID0gYXdhaXQgdGhpcy5nZXREYXRlRm9sZGVycygpO1xuXG4gICAgICAvLyBBbHNvIGNoZWNrIHJvb3QgZGlyZWN0b3J5IGZvciBhbnkgbWVtb3J5IGZpbGVzXG4gICAgICAvLyBNZW1vcnkgZmlsZXMgc2hvdWxkIGJlIC55YW1sIGZvcm1hdCBvbmx5XG4gICAgICBjb25zdCByb290RmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKHRoaXMubWVtb3JpZXNEaXIpXG4gICAgICAgIC50aGVuKGZpbGVzID0+IGZpbGVzLmZpbHRlcihmID0+IGYuZW5kc1dpdGgoJy55YW1sJykpKVxuICAgICAgICAuY2F0Y2goKCkgPT4gW10pO1xuXG4gICAgICAvLyBQcm9jZXNzIHJvb3QgZmlsZXMgZmlyc3QgKGxlZ2FjeSlcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiByb290RmlsZXMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBtZW1vcnkgPSBhd2FpdCB0aGlzLmxvYWQoZmlsZSk7XG4gICAgICAgICAgbWVtb3JpZXMucHVzaChtZW1vcnkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICAgIHR5cGU6IE1FTU9SWV9TRUNVUklUWV9FVkVOVFMuTUVNT1JZX0xJU1RfSVRFTV9GQUlMRUQsXG4gICAgICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgICAgICBzb3VyY2U6ICdNZW1vcnlNYW5hZ2VyLmxpc3QnLFxuICAgICAgICAgICAgZGV0YWlsczogYEZhaWxlZCB0byBsb2FkICR7ZmlsZX06ICR7ZXJyb3J9YFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFByb2Nlc3MgZGF0ZSBmb2xkZXJzXG4gICAgICBmb3IgKGNvbnN0IGRhdGVGb2xkZXIgb2YgZGF0ZUZvbGRlcnMpIHtcbiAgICAgICAgY29uc3QgZm9sZGVyUGF0aCA9IHBhdGguam9pbih0aGlzLm1lbW9yaWVzRGlyLCBkYXRlRm9sZGVyKTtcbiAgICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKGZvbGRlclBhdGgpXG4gICAgICAgICAgLnRoZW4oZmlsZXMgPT4gZmlsZXMuZmlsdGVyKGYgPT4gZi5lbmRzV2l0aCgnLnlhbWwnKSkpXG4gICAgICAgICAgLmNhdGNoKCgpID0+IFtdKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgbWVtb3J5ID0gYXdhaXQgdGhpcy5sb2FkKHBhdGguam9pbihkYXRlRm9sZGVyLCBmaWxlKSk7XG4gICAgICAgICAgICBtZW1vcmllcy5wdXNoKG1lbW9yeSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICAgICAgdHlwZTogTUVNT1JZX1NFQ1VSSVRZX0VWRU5UUy5NRU1PUllfTElTVF9JVEVNX0ZBSUxFRCxcbiAgICAgICAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICAgICAgICBzb3VyY2U6ICdNZW1vcnlNYW5hZ2VyLmxpc3QnLFxuICAgICAgICAgICAgICBkZXRhaWxzOiBgRmFpbGVkIHRvIGxvYWQgJHtkYXRlRm9sZGVyfS8ke2ZpbGV9OiAke2Vycm9yfWBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWVtb3JpZXM7XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvciBhcyBhbnkpLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIC8vIERpcmVjdG9yeSBkb2Vzbid0IGV4aXN0IHlldFxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGaW5kIG1lbW9yaWVzIG1hdGNoaW5nIGEgcHJlZGljYXRlXG4gICAqL1xuICBhc3luYyBmaW5kKHByZWRpY2F0ZTogKGVsZW1lbnQ6IE1lbW9yeSkgPT4gYm9vbGVhbik6IFByb21pc2U8TWVtb3J5IHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgbWVtb3JpZXMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcbiAgICByZXR1cm4gbWVtb3JpZXMuZmluZChwcmVkaWNhdGUpO1xuICB9XG4gIFxuICAvKipcbiAgICogRmluZCBtdWx0aXBsZSBtZW1vcmllcyBtYXRjaGluZyBhIHByZWRpY2F0ZVxuICAgKi9cbiAgYXN5bmMgZmluZE1hbnkocHJlZGljYXRlOiAoZWxlbWVudDogTWVtb3J5KSA9PiBib29sZWFuKTogUHJvbWlzZTxNZW1vcnlbXT4ge1xuICAgIGNvbnN0IG1lbW9yaWVzID0gYXdhaXQgdGhpcy5saXN0KCk7XG4gICAgcmV0dXJuIG1lbW9yaWVzLmZpbHRlcihwcmVkaWNhdGUpO1xuICB9XG4gIFxuICAvKipcbiAgICogRGVsZXRlIGEgbWVtb3J5IGZpbGVcbiAgICogU0VDVVJJVFk6IFZhbGlkYXRlcyBwYXRoIGFuZCBsb2dzIGRlbGV0aW9uXG4gICAqL1xuICBhc3luYyBkZWxldGUoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IGF3YWl0IHRoaXMudmFsaWRhdGVBbmRSZXNvbHZlUGF0aChmaWxlUGF0aCk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGZpbGUgZXhpc3RzXG4gICAgICBhd2FpdCBmcy5hY2Nlc3MoZnVsbFBhdGgpO1xuICAgICAgXG4gICAgICAvLyBEZWxldGUgdGhlIGZpbGVcbiAgICAgIGF3YWl0IGZzLnVubGluayhmdWxsUGF0aCk7XG4gICAgICBcbiAgICAgIC8vIFJlbW92ZSBmcm9tIGNhY2hlXG4gICAgICB0aGlzLm1lbW9yeUNhY2hlLmRlbGV0ZShmdWxsUGF0aCk7XG4gICAgICBcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogTUVNT1JZX1NFQ1VSSVRZX0VWRU5UUy5NRU1PUllfREVMRVRFRCxcbiAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICBzb3VyY2U6ICdNZW1vcnlNYW5hZ2VyLmRlbGV0ZScsXG4gICAgICAgIGRldGFpbHM6IGBEZWxldGVkIG1lbW9yeSBmaWxlOiAke3BhdGguYmFzZW5hbWUoZnVsbFBhdGgpfWBcbiAgICAgIH0pO1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAvLyBGaWxlIGRvZXNuJ3QgZXhpc3QsIG5vdCBhbiBlcnJvciBmb3IgZGVsZXRlIG9wZXJhdGlvblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIG1lbW9yeSBmaWxlIGV4aXN0c1xuICAgKi9cbiAgYXN5bmMgZXhpc3RzKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZnVsbFBhdGggPSBhd2FpdCB0aGlzLnZhbGlkYXRlQW5kUmVzb2x2ZVBhdGgoZmlsZVBhdGgpO1xuICAgICAgYXdhaXQgZnMuYWNjZXNzKGZ1bGxQYXRoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBtZW1vcnkgd2l0aCBtZXRhZGF0YVxuICAgKi9cbiAgYXN5bmMgY3JlYXRlKG1ldGFkYXRhOiBQYXJ0aWFsPE1lbW9yeU1ldGFkYXRhPik6IFByb21pc2U8TWVtb3J5PiB7XG4gICAgcmV0dXJuIG5ldyBNZW1vcnkobWV0YWRhdGEpO1xuICB9XG4gIFxuICAvKipcbiAgICogSW1wb3J0IGEgbWVtb3J5IGZyb20gSlNPTi9ZQU1MIHN0cmluZ1xuICAgKiBTRUNVUklUWTogRnVsbCB2YWxpZGF0aW9uIG9mIGltcG9ydGVkIGNvbnRlbnRcbiAgICogQHBhcmFtIGRhdGEgSlNPTiBvciBZQU1MIHN0cmluZyBjb250YWluaW5nIG1lbW9yeSBkYXRhXG4gICAqIEBwYXJhbSBmb3JtYXQgRm9ybWF0IG9mIHRoZSBpbnB1dCBkYXRhICgnanNvbicgb3IgJ3lhbWwnKVxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgaW1wb3J0ZWQgTWVtb3J5IGluc3RhbmNlXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBXaGVuIEpTT04vWUFNTCBwYXJzaW5nIGZhaWxzXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBXaGVuIGltcG9ydGVkIGRhdGEgaXMgbWlzc2luZyByZXF1aXJlZCBmaWVsZHNcbiAgICogQHRocm93cyB7RXJyb3J9IFdoZW4gWUFNTCBjb250ZW50IGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIHNpemVcbiAgICogQHRocm93cyB7RXJyb3J9IFdoZW4gaW1wb3J0ZWQgbWVtb3J5IGZhaWxzIHZhbGlkYXRpb25cbiAgICovXG4gIGFzeW5jIGltcG9ydEVsZW1lbnQoZGF0YTogc3RyaW5nLCBmb3JtYXQ6ICdqc29uJyB8ICd5YW1sJyA9ICd5YW1sJyk6IFByb21pc2U8TWVtb3J5PiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBwYXJzZWQ6IGFueTtcbiAgICAgIFxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIHBhcnNlZCA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBISUdIIFNFVkVSSVRZIEZJWDogVXNlIHNlY3VyZSBZQU1MIHBhcnNpbmdcbiAgICAgICAgLy8gTWVtb3J5IGltcG9ydCBleHBlY3RzIHB1cmUgWUFNTCAobm90IGZyb250bWF0dGVyKSwgc28gd2UgcGFyc2UgaXQgc2VjdXJlbHlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBGaXJzdCB2YWxpZGF0ZSB0aGUgWUFNTCBjb250ZW50IHNpemVcbiAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPiBNRU1PUllfQ09OU1RBTlRTLk1BWF9ZQU1MX1NJWkUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWUFNTCBjb250ZW50IGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIHNpemUnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQ3JlYXRlIGEgd3JhcHBlciB0byB1c2UgU2VjdXJlWWFtbFBhcnNlciB3aXRoIHB1cmUgWUFNTFxuICAgICAgICAgIC8vIEFkZCBtaW5pbWFsIGZyb250bWF0dGVyIG1hcmtlcnMgdG8gc2F0aXNmeSBwYXJzZXJcbiAgICAgICAgICBjb25zdCB3cmFwcGVkWWFtbCA9IGAtLS1cXG4ke2RhdGF9XFxuLS0tXFxuYDtcbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBwYXJzZVJlc3VsdCA9IFNlY3VyZVlhbWxQYXJzZXIucGFyc2Uod3JhcHBlZFlhbWwsIHtcbiAgICAgICAgICAgIG1heFlhbWxTaXplOiBNRU1PUllfQ09OU1RBTlRTLk1BWF9ZQU1MX1NJWkUsXG4gICAgICAgICAgICB2YWxpZGF0ZUNvbnRlbnQ6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBFeHRyYWN0IHRoZSBwYXJzZWQgZGF0YSAod2lsbCBiZSBpbiB0aGUgJ2RhdGEnIHByb3BlcnR5KVxuICAgICAgICAgIHBhcnNlZCA9IHBhcnNlUmVzdWx0LmRhdGE7XG4gICAgICAgICAgXG4gICAgICAgIH0gY2F0Y2ggKHlhbWxFcnJvcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBZQU1MOiAke3lhbWxFcnJvcn1gKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gVmFsaWRhdGUgaXQncyBhbiBvYmplY3RcbiAgICAgICAgaWYgKCFwYXJzZWQgfHwgdHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lBTUwgbXVzdCBjb250YWluIGFuIG9iamVjdCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEhhbmRsZSBkaWZmZXJlbnQgc3RydWN0dXJlcyBmcm9tIFlBTUwgcGFyc2luZ1xuICAgICAgbGV0IG1ldGFkYXRhID0gcGFyc2VkLm1ldGFkYXRhO1xuICAgICAgbGV0IGVudHJpZXMgPSBwYXJzZWQuZW50cmllcyB8fCAocGFyc2VkLmRhdGEgJiYgcGFyc2VkLmRhdGEuZW50cmllcyk7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIHJlcXVpcmVkIGZpZWxkc1xuICAgICAgaWYgKCFtZXRhZGF0YSB8fCAhbWV0YWRhdGEubmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01lbW9yeSBtdXN0IGhhdmUgbWV0YWRhdGEgd2l0aCBuYW1lJyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENyZWF0ZSBtZW1vcnkgaW5zdGFuY2VcbiAgICAgIGNvbnN0IG1lbW9yeSA9IG5ldyBNZW1vcnkobWV0YWRhdGEpO1xuICAgICAgXG4gICAgICAvLyBMb2FkIGVudHJpZXMgaWYgcHJlc2VudFxuICAgICAgaWYgKGVudHJpZXMpIHtcbiAgICAgICAgbWVtb3J5LmRlc2VyaWFsaXplKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBpZDogbWVtb3J5LmlkLFxuICAgICAgICAgIHR5cGU6IG1lbW9yeS50eXBlLFxuICAgICAgICAgIHZlcnNpb246IG1lbW9yeS52ZXJzaW9uLFxuICAgICAgICAgIG1ldGFkYXRhOiBtZW1vcnkubWV0YWRhdGEsXG4gICAgICAgICAgZXh0ZW5zaW9uczogbWVtb3J5LmV4dGVuc2lvbnMsXG4gICAgICAgICAgZW50cmllczogZW50cmllc1xuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJldHVybiBtZW1vcnk7XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiBNRU1PUllfU0VDVVJJVFlfRVZFTlRTLk1FTU9SWV9JTVBPUlRfRkFJTEVELFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ01lbW9yeU1hbmFnZXIuaW1wb3J0RWxlbWVudCcsXG4gICAgICAgIGRldGFpbHM6IGBGYWlsZWQgdG8gaW1wb3J0IG1lbW9yeTogJHtlcnJvcn1gXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGltcG9ydCBtZW1vcnk6ICR7ZXJyb3J9YCk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogRXhwb3J0IGEgbWVtb3J5IHRvIFlBTUwgc3RyaW5nXG4gICAqL1xuICBhc3luYyBleHBvcnRFbGVtZW50KGVsZW1lbnQ6IE1lbW9yeSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3Qgc3RhdHMgPSBlbGVtZW50LmdldFN0YXRzKCk7XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIG1ldGFkYXRhOiBlbGVtZW50Lm1ldGFkYXRhLFxuICAgICAgZXh0ZW5zaW9uczogZWxlbWVudC5leHRlbnNpb25zLFxuICAgICAgc3RhdHM6IHtcbiAgICAgICAgdG90YWxFbnRyaWVzOiBzdGF0cy50b3RhbEVudHJpZXMsXG4gICAgICAgIHRvdGFsU2l6ZTogc3RhdHMudG90YWxTaXplLFxuICAgICAgICBvbGRlc3RFbnRyeTogc3RhdHMub2xkZXN0RW50cnk/LnRvSVNPU3RyaW5nKCksXG4gICAgICAgIG5ld2VzdEVudHJ5OiBzdGF0cy5uZXdlc3RFbnRyeT8udG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIGVudHJpZXM6IEpTT04ucGFyc2UoZWxlbWVudC5zZXJpYWxpemUoKSkuZW50cmllc1xuICAgIH07XG4gICAgXG4gICAgLy8gU0VDVVJJVFkgRklYOiBVc2Ugc2VjdXJlIFlBTUwgZHVtcGluZ1xuICAgIHJldHVybiB5YW1sLmR1bXAoZGF0YSwge1xuICAgICAgc2NoZW1hOiB5YW1sLkZBSUxTQUZFX1NDSEVNQSxcbiAgICAgIG5vUmVmczogdHJ1ZSxcbiAgICAgIHNraXBJbnZhbGlkOiB0cnVlLFxuICAgICAgc29ydEtleXM6IHRydWVcbiAgICB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFZhbGlkYXRlIGEgbWVtb3J5IGVsZW1lbnRcbiAgICovXG4gIHZhbGlkYXRlKGVsZW1lbnQ6IE1lbW9yeSk6IEVsZW1lbnRWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICByZXR1cm4gZWxlbWVudC52YWxpZGF0ZSgpO1xuICB9XG4gIFxuICAvKipcbiAgICogVmFsaWRhdGUgYW5kIHJlc29sdmUgYSBmaWxlIHBhdGhcbiAgICogU0VDVVJJVFk6IFByZXZlbnRzIGRpcmVjdG9yeSB0cmF2ZXJzYWwgYXR0YWNrc1xuICAgKi9cbiAgdmFsaWRhdGVQYXRoKGZpbGVQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgLy8gUGVyZm9ybSBzeW5jaHJvbm91cyB2YWxpZGF0aW9uIGNoZWNrc1xuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IHBhdGgubm9ybWFsaXplKGZpbGVQYXRoKTtcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgZm9yIHBhdGggdHJhdmVyc2FsIGF0dGVtcHRzXG4gICAgICBpZiAobm9ybWFsaXplZC5pbmNsdWRlcygnLi4nKSB8fCBwYXRoLmlzQWJzb2x1dGUobm9ybWFsaXplZCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBFbnN1cmUgcHJvcGVyIGV4dGVuc2lvblxuICAgICAgaWYgKCFub3JtYWxpemVkLmVuZHNXaXRoKCcubWQnKSAmJiAhbm9ybWFsaXplZC5lbmRzV2l0aCgnLnlhbWwnKSAmJiAhbm9ybWFsaXplZC5lbmRzV2l0aCgnLnltbCcpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHRoZSBlbGVtZW50IHR5cGUgdGhpcyBtYW5hZ2VyIGhhbmRsZXNcbiAgICovXG4gIGdldEVsZW1lbnRUeXBlKCk6IEVsZW1lbnRUeXBlIHtcbiAgICByZXR1cm4gRWxlbWVudFR5cGUuTUVNT1JZO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHRoZSBmaWxlIGV4dGVuc2lvbiBmb3IgbWVtb3J5IGZpbGVzXG4gICAqL1xuICBnZXRGaWxlRXh0ZW5zaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICcueWFtbCc7XG4gIH1cbiAgXG4gIC8vIFByaXZhdGUgaGVscGVyIG1ldGhvZHNcbiAgXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhbmQgcmVzb2x2ZSBhIGZpbGUgcGF0aCB0byBwcmV2ZW50IHNlY3VyaXR5IGlzc3Vlc1xuICAgKiBAcGFyYW0gZmlsZVBhdGggUGF0aCB0byB2YWxpZGF0ZSBhbmQgcmVzb2x2ZVxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgdmFsaWRhdGVkIGZ1bGwgcGF0aFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gV2hlbiBwYXRoIGNvbnRhaW5zIHRyYXZlcnNhbCBhdHRlbXB0cyAoLi4vKVxuICAgKiBAdGhyb3dzIHtFcnJvcn0gV2hlbiBwYXRoIGlzIGFic29sdXRlIG9yIGludmFsaWRcbiAgICogQHRocm93cyB7RXJyb3J9IFdoZW4gZmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQgKC5tZCwgLnlhbWwsIC55bWwpXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBXaGVuIHJlc29sdmVkIHBhdGggd291bGQgYmUgb3V0c2lkZSBtZW1vcmllcyBkaXJlY3RvcnlcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVBbmRSZXNvbHZlUGF0aChmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyBTRUNVUklUWSBGSVg6IENvbXByZWhlbnNpdmUgcGF0aCB2YWxpZGF0aW9uXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHBhdGgubm9ybWFsaXplKGZpbGVQYXRoKTtcbiAgICBcbiAgICAvLyBDaGVjayBmb3IgcGF0aCB0cmF2ZXJzYWwgYXR0ZW1wdHNcbiAgICBpZiAobm9ybWFsaXplZC5pbmNsdWRlcygnLi4nKSB8fCBwYXRoLmlzQWJzb2x1dGUobm9ybWFsaXplZCkpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1BBVEhfVFJBVkVSU0FMX0FUVEVNUFQnLFxuICAgICAgICBzZXZlcml0eTogJ0hJR0gnLFxuICAgICAgICBzb3VyY2U6ICdNZW1vcnlNYW5hZ2VyLnZhbGlkYXRlQW5kUmVzb2x2ZVBhdGgnLFxuICAgICAgICBkZXRhaWxzOiBgQmxvY2tlZCBwYXRoIHRyYXZlcnNhbCBhdHRlbXB0OiAke2ZpbGVQYXRofWBcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZpbGUgcGF0aDogUGF0aCB0cmF2ZXJzYWwgZGV0ZWN0ZWQnKTtcbiAgICB9XG4gICAgXG4gICAgLy8gRW5zdXJlIHByb3BlciBleHRlbnNpb24gLSBtZW1vcmllcyBzaG91bGQgb25seSBiZSAueWFtbCBvciAueW1sXG4gICAgaWYgKCFub3JtYWxpemVkLmVuZHNXaXRoKCcueWFtbCcpICYmICFub3JtYWxpemVkLmVuZHNXaXRoKCcueW1sJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWVtb3J5IGZpbGVzIG11c3QgaGF2ZSAueWFtbCBvciAueW1sIGV4dGVuc2lvbicpO1xuICAgIH1cbiAgICBcbiAgICAvLyBDb25zdHJ1Y3QgZnVsbCBwYXRoXG4gICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4odGhpcy5tZW1vcmllc0Rpciwgbm9ybWFsaXplZCk7XG4gICAgXG4gICAgLy8gVmVyaWZ5IGl0J3Mgd2l0aGluIG1lbW9yaWVzIGRpcmVjdG9yeVxuICAgIGNvbnN0IHJlbGF0aXZlID0gcGF0aC5yZWxhdGl2ZSh0aGlzLm1lbW9yaWVzRGlyLCBmdWxsUGF0aCk7XG4gICAgaWYgKHJlbGF0aXZlLnN0YXJ0c1dpdGgoJy4uJykgfHwgcGF0aC5pc0Fic29sdXRlKHJlbGF0aXZlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaWxlIHBhdGggbXVzdCBiZSB3aXRoaW4gbWVtb3JpZXMgZGlyZWN0b3J5Jyk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBmdWxsUGF0aDtcbiAgfVxuICBcbiAgcHJpdmF0ZSBwYXJzZU1lbW9yeUZpbGUocGFyc2VkOiBhbnkpOiB7IG1ldGFkYXRhOiBNZW1vcnlNZXRhZGF0YTsgY29udGVudDogc3RyaW5nIH0ge1xuICAgIC8vIEZJWDogU2VjdXJlWWFtbFBhcnNlciByZXR1cm5zIGRhdGEgaW4gJ2RhdGEnIHByb3BlcnR5LCBub3QgJ21ldGFkYXRhJ1xuICAgIC8vIEZvciBtYXJrZG93biBmaWxlcyB3aXRoIFlBTUwgZnJvbnRtYXR0ZXIsIHRoZSBzdHJ1Y3R1cmUgaXM6XG4gICAgLy8gcGFyc2VkLmRhdGEgPSBZQU1MIGZyb250bWF0dGVyIHZhbHVlc1xuICAgIC8vIHBhcnNlZC5jb250ZW50ID0gbWFya2Rvd24gY29udGVudCBhZnRlciBmcm9udG1hdHRlclxuXG4gICAgLy8gRm9yIHB1cmUgWUFNTCBtZW1vcnkgZmlsZXMsIHdlIG5lZWQgdG8gY2hlY2sgaWYgbWV0YWRhdGEgaXMgZGlyZWN0bHkgaW4gZGF0YVxuICAgIGNvbnN0IHlhbWxEYXRhID0gcGFyc2VkLmRhdGEgfHwge307XG5cbiAgICAvLyBNZW1vcnkgZmlsZXMgc2F2ZWQgYnkgdGhlIHN5c3RlbSBoYXZlIG1ldGFkYXRhIGFzIGEgdG9wLWxldmVsIGtleVxuICAgIGNvbnN0IG1ldGFkYXRhU291cmNlID0geWFtbERhdGEubWV0YWRhdGEgfHwgeWFtbERhdGE7XG5cbiAgICAvLyBFeHRyYWN0IG1ldGFkYXRhIHdpdGggdmFsaWRhdGlvblxuICAgIGNvbnN0IG1ldGFkYXRhOiBNZW1vcnlNZXRhZGF0YSA9IHtcbiAgICAgIG5hbWU6IHNhbml0aXplSW5wdXQobWV0YWRhdGFTb3VyY2UubmFtZSB8fCAnVW5uYW1lZCBNZW1vcnknLCAxMDApLFxuICAgICAgZGVzY3JpcHRpb246IG1ldGFkYXRhU291cmNlLmRlc2NyaXB0aW9uID9cbiAgICAgICAgc2FuaXRpemVJbnB1dChtZXRhZGF0YVNvdXJjZS5kZXNjcmlwdGlvbiwgNTAwKSA6XG4gICAgICAgICcnLFxuICAgICAgdmVyc2lvbjogbWV0YWRhdGFTb3VyY2UudmVyc2lvbiB8fCAnMS4wLjAnLFxuICAgICAgYXV0aG9yOiBtZXRhZGF0YVNvdXJjZS5hdXRob3IsXG4gICAgICBjcmVhdGVkOiBtZXRhZGF0YVNvdXJjZS5jcmVhdGVkLFxuICAgICAgbW9kaWZpZWQ6IG1ldGFkYXRhU291cmNlLm1vZGlmaWVkIHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHRhZ3M6IEFycmF5LmlzQXJyYXkobWV0YWRhdGFTb3VyY2UudGFncykgP1xuICAgICAgICBtZXRhZGF0YVNvdXJjZS50YWdzLm1hcCgodGFnOiBzdHJpbmcpID0+IHNhbml0aXplSW5wdXQodGFnLCBNRU1PUllfQ09OU1RBTlRTLk1BWF9UQUdfTEVOR1RIKSkgOlxuICAgICAgICBbXSxcbiAgICAgIHN0b3JhZ2VCYWNrZW5kOiBtZXRhZGF0YVNvdXJjZS5zdG9yYWdlX2JhY2tlbmQgfHwgbWV0YWRhdGFTb3VyY2Uuc3RvcmFnZUJhY2tlbmQgfHwgTUVNT1JZX0NPTlNUQU5UUy5ERUZBVUxUX1NUT1JBR0VfQkFDS0VORCxcbiAgICAgIHJldGVudGlvbkRheXM6IG1ldGFkYXRhU291cmNlLnJldGVudGlvbl9wb2xpY3k/LmRlZmF1bHQgP1xuICAgICAgICB0aGlzLnBhcnNlUmV0ZW50aW9uRGF5cyhtZXRhZGF0YVNvdXJjZS5yZXRlbnRpb25fcG9saWN5LmRlZmF1bHQpIDpcbiAgICAgICAgKG1ldGFkYXRhU291cmNlLnJldGVudGlvbkRheXMgfHwgTUVNT1JZX0NPTlNUQU5UUy5ERUZBVUxUX1JFVEVOVElPTl9EQVlTKSxcbiAgICAgIHByaXZhY3lMZXZlbDogbWV0YWRhdGFTb3VyY2UucHJpdmFjeV9sZXZlbCB8fCBtZXRhZGF0YVNvdXJjZS5wcml2YWN5TGV2ZWwgfHwgTUVNT1JZX0NPTlNUQU5UUy5ERUZBVUxUX1BSSVZBQ1lfTEVWRUwsXG4gICAgICBzZWFyY2hhYmxlOiBtZXRhZGF0YVNvdXJjZS5zZWFyY2hhYmxlICE9PSBmYWxzZSxcbiAgICAgIG1heEVudHJpZXM6IG1ldGFkYXRhU291cmNlLm1heEVudHJpZXMgfHwgTUVNT1JZX0NPTlNUQU5UUy5NQVhfRU5UUklFU19ERUZBVUxUXG4gICAgfTtcblxuICAgIC8vIEV4dHJhY3QgY29udGVudCAoaWYgYW55KVxuICAgIGNvbnN0IGNvbnRlbnQgPSBwYXJzZWQuY29udGVudCB8fCAnJztcblxuICAgIHJldHVybiB7IG1ldGFkYXRhLCBjb250ZW50IH07XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIHRvIHBhcnNlIHJldGVudGlvbiBkYXlzIGZyb20gdmFyaW91cyBmb3JtYXRzXG4gICAqL1xuICBwcml2YXRlIHBhcnNlUmV0ZW50aW9uRGF5cyhyZXRlbnRpb246IHN0cmluZyB8IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHR5cGVvZiByZXRlbnRpb24gPT09ICdudW1iZXInKSByZXR1cm4gcmV0ZW50aW9uO1xuICAgIGlmIChyZXRlbnRpb24gPT09ICdwZXJtYW5lbnQnIHx8IHJldGVudGlvbiA9PT0gJ3BlcnBldHVhbCcpIHJldHVybiA5OTk5OTk7XG4gICAgY29uc3QgbWF0Y2ggPSByZXRlbnRpb24ubWF0Y2goLyhcXGQrKVxccypkYXlzPy9pKTtcbiAgICByZXR1cm4gbWF0Y2ggPyBwYXJzZUludChtYXRjaFsxXSkgOiBNRU1PUllfQ09OU1RBTlRTLkRFRkFVTFRfUkVURU5USU9OX0RBWVM7XG4gIH1cbn0iXX0=
681
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtb3J5TWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9tZW1vcmllcy9NZW1vcnlNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUErQixNQUFNLGFBQWEsQ0FBQztBQUdsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUUsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFakMsb0RBQW9EO0FBQ3BELGdEQUFnRDtBQUNoRCxNQUFNLGdCQUFnQixHQUFHO0lBQ3ZCLEtBQUssRUFBRSxFQUFFO0lBQ1QsR0FBRyxFQUFFLENBQUM7SUFDTixPQUFPLEVBQUUsRUFBRTtJQUNYLGVBQWUsRUFBRSxFQUFFO0NBQ1gsQ0FBQztBQUVYLE1BQU0sT0FBTyxhQUFhO0lBQ2hCLGdCQUFnQixDQUFtQjtJQUNuQyxXQUFXLENBQVM7SUFDcEIsV0FBVyxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzdD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Y0FBYyxDQUFDLFVBQVUsS0FBSyxLQUFLO1lBQy9DLFVBQVUsRUFBRSxjQUFjLENBQUMsVUFBVSxJQUFJLGdCQUFnQixDQUFDLG1CQUFtQjtTQUM5RSxDQUFDO1FBRUYsMkJBQTJCO1FBQzNCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO1FBRXJDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ssa0JBQWtCLENBQUMsU0FBMEI7UUFDbkQsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDcEQsSUFBSSxTQUFTLEtBQUssV0FBVyxJQUFJLFNBQVMsS0FBSyxXQUFXO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFDMUUsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDO0lBQzlFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTWVtb3J5TWFuYWdlciAtIEltcGxlbWVudGF0aW9uIG9mIElFbGVtZW50TWFuYWdlciBmb3IgTWVtb3J5IGVsZW1lbnRzXG4gKiBIYW5kbGVzIENSVUQgb3BlcmF0aW9ucyBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgZm9yIG1lbW9yaWVzIGltcGxlbWVudGluZyBJRWxlbWVudFxuICogXG4gKiBGSVhFUyBJTVBMRU1FTlRFRDpcbiAqIDEuIENSSVRJQ0FMOiBGaXhlZCByYWNlIGNvbmRpdGlvbnMgaW4gZmlsZSBvcGVyYXRpb25zIGJ5IHVzaW5nIEZpbGVMb2NrTWFuYWdlciBmb3IgYXRvbWljIHJlYWRzL3dyaXRlc1xuICogMi4gSElHSDogRml4ZWQgdW52YWxpZGF0ZWQgWUFNTCBwYXJzaW5nIHZ1bG5lcmFiaWxpdHkgYnkgdXNpbmcgU2VjdXJlWWFtbFBhcnNlclxuICogMy4gTUVESVVNOiBBbGwgdXNlciBpbnB1dHMgYXJlIG5vdyB2YWxpZGF0ZWQgYW5kIHNhbml0aXplZFxuICogNC4gTUVESVVNOiBBdWRpdCBsb2dnaW5nIGFkZGVkIGZvciBzZWN1cml0eSBvcGVyYXRpb25zXG4gKiA1LiBNRURJVU06IFBhdGggdmFsaWRhdGlvbiBwcmV2ZW50cyBkaXJlY3RvcnkgdHJhdmVyc2FsIGF0dGFja3NcbiAqL1xuXG5pbXBvcnQgeyBNZW1vcnksIE1lbW9yeU1ldGFkYXRhLCBNZW1vcnlFbnRyeSB9IGZyb20gJy4vTWVtb3J5LmpzJztcbmltcG9ydCB7IElFbGVtZW50TWFuYWdlciB9IGZyb20gJy4uLy4uL3R5cGVzL2VsZW1lbnRzL0lFbGVtZW50TWFuYWdlci5qcyc7XG5pbXBvcnQgeyBFbGVtZW50VmFsaWRhdGlvblJlc3VsdCB9IGZyb20gJy4uLy4uL3R5cGVzL2VsZW1lbnRzL0lFbGVtZW50LmpzJztcbmltcG9ydCB7IEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vLi4vcG9ydGZvbGlvL3R5cGVzLmpzJztcbmltcG9ydCB7IFBvcnRmb2xpb01hbmFnZXIgfSBmcm9tICcuLi8uLi9wb3J0Zm9saW8vUG9ydGZvbGlvTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBGaWxlTG9ja01hbmFnZXIgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9maWxlTG9ja01hbmFnZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJlWWFtbFBhcnNlciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3NlY3VyZVlhbWxQYXJzZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgc2FuaXRpemVJbnB1dCB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L0lucHV0VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IE1FTU9SWV9DT05TVEFOVFMsIE1FTU9SWV9TRUNVUklUWV9FVkVOVFMgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tICdqcy15YW1sJztcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tICdjcnlwdG8nO1xuXG4vLyBDaGFyYWN0ZXIgY29kZSBjb25zdGFudHMgZm9yIHdoaXRlc3BhY2UgZGV0ZWN0aW9uXG4vLyBNYWtlcyB0aGUgY29kZSBtb3JlIHJlYWRhYmxlIGFuZCBtYWludGFpbmFibGVcbmNvbnN0IFdISVRFU1BBQ0VfQ0hBUlMgPSB7XG4gIFNQQUNFOiAzMixcbiAgVEFCOiA5LFxuICBORVdMSU5FOiAxMCxcbiAgQ0FSUklBR0VfUkVUVVJOOiAxM1xufSBhcyBjb25zdDtcblxuZXhwb3J0IGNsYXNzIE1lbW9yeU1hbmFnZXIgaW1wbGVtZW50cyBJRWxlbWVudE1hbmFnZXI8TWVtb3J5PiB7XG4gIHByaXZhdGUgcG9ydGZvbGlvTWFuYWdlcjogUG9ydGZvbGlvTWFuYWdlcjtcbiAgcHJpdmF0ZSBtZW1vcmllc0Rpcjogc3RyaW5nO1xuICBwcml2YXRlIG1lbW9yeUNhY2hlOiBNYXA8c3RyaW5nLCBNZW1vcnk+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIGNvbnRlbnRIYXNoSW5kZXg6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKCk7XG5cbiAgLy8gUEVSRk9STUFOQ0UgSU1QUk9WRU1FTlQ6IENhY2hlIGZvciBkYXRlIGZvbGRlcnMgdG8gYXZvaWQgZGlyZWN0b3J5IHNjYW5uaW5nXG4gIC8vIEludmFsaWRhdGVkIHdoZW4gbmV3IGZvbGRlcnMgYXJlIGNyZWF0ZWRcbiAgcHJpdmF0ZSBkYXRlRm9sZGVyc0NhY2hlOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGRhdGVGb2xkZXJzQ2FjaGVUaW1lc3RhbXA6IG51bWJlciA9IDA7XG4gIFxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnBvcnRmb2xpb01hbmFnZXIgPSBQb3J0Zm9saW9NYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgdGhpcy5tZW1vcmllc0RpciA9IHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLk1FTU9SWSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBMb2FkIGEgbWVtb3J5IGZyb20gZmlsZVxuICAgKiBTRUNVUklUWSBGSVggIzE6IFVzZXMgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1JlYWRGaWxlKCkgaW5zdGVhZCBvZiBmcy5yZWFkRmlsZSgpXG4gICAqIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGFuZCBlbnN1cmUgYXRvbWljIGZpbGUgb3BlcmF0aW9uc1xuICAgKiBAcGFyYW0gZmlsZVBhdGggUGF0aCB0byB0aGUgbWVtb3J5IGZpbGUgdG8gbG9hZFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgbG9hZGVkIE1lbW9yeSBpbnN0YW5jZVxuICAgKiBAdGhyb3dzIHtFcnJvcn0gV2hlbiBmaWxlIGNhbm5vdCBiZSBmb3VuZCBvciBwYXRoIHZhbGlkYXRpb24gZmFpbHNcbiAgICogQHRocm93cyB7RXJyb3J9IFdoZW4gWUFNTCBwYXJzaW5nIGZhaWxzIG9yIGNvbnRlbnQgaXMgbWFsZm9ybWVkXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBXaGVuIG1lbW9yeSB2YWxpZGF0aW9uIGZhaWxzIGFmdGVyIGxvYWRpbmdcbiAgICovXG4gIGFzeW5jIGxvYWQoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8TWVtb3J5PiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBmdWxsUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgICAvLyBDaGVjayBpZiBpdCdzIGEgcmVsYXRpdmUgcGF0aCAobm8gZGF0ZSBmb2xkZXIpXG4gICAgICBpZiAoIWZpbGVQYXRoLmluY2x1ZGVzKHBhdGguc2VwKSB8fCAhZmlsZVBhdGgubWF0Y2goL15cXGR7NH0tXFxkezJ9LVxcZHsyfS8pKSB7XG4gICAgICAgIC8vIFNlYXJjaCBpbiBkYXRlIGZvbGRlcnNcbiAgICAgICAgY29uc3QgZGF0ZUZvbGRlcnMgPSBhd2FpdCB0aGlzLmdldERhdGVGb2xkZXJzKCk7XG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAoY29uc3QgZGF0ZUZvbGRlciBvZiBkYXRlRm9sZGVycykge1xuICAgICAgICAgIGNvbnN0IHRlc3RQYXRoID0gcGF0aC5qb2luKHRoaXMubWVtb3JpZXNEaXIsIGRhdGVGb2xkZXIsIGZpbGVQYXRoKTtcbiAgICAgICAgICBpZiAoYXdhaXQgZnMuYWNjZXNzKHRlc3RQYXRoKS50aGVuKCgpID0+IHRydWUpLmNhdGNoKCgpID0+IGZhbHNlKSkge1xuICAgICAgICAgICAgZnVsbFBhdGggPSB0ZXN0UGF0aDtcbiAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAvLyBGYWxsIGJhY2sgdG8gcm9vdCBkaXJlY3RvcnkgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZHVyaW5nIHRyYW5zaXRpb25cbiAgICAgICAgICBmdWxsUGF0aCA9IGF3YWl0IHRoaXMudmFsaWRhdGVBbmRSZXNvbHZlUGF0aChmaWxlUGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZ1bGxQYXRoID0gYXdhaXQgdGhpcy52YWxpZGF0ZUFuZFJlc29sdmVQYXRoKGZpbGVQYXRoKTtcbiAgICAgIH1cblxuICAgICAgLy8gRW5zdXJlIGZ1bGxQYXRoIGlzIGRlZmluZWRcbiAgICAgIGlmICghZnVsbFBhdGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgcmVzb2x2ZSBwYXRoOiAke2ZpbGVQYXRofWApO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDaGVjayBjYWNoZSBmaXJzdFxuICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy5tZW1vcnlDYWNoZS5nZXQoZnVsbFBhdGgpO1xuICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDUklUSUNBTCBGSVg6IFVzZSBhdG9taWMgZmlsZSByZWFkIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG4gICAgICAvLyBQcmV2aW91c2x5OiBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoZnVsbFBhdGgsICd1dGYtOCcpO1xuICAgICAgLy8gTm93OiBVc2VzIEZpbGVMb2NrTWFuYWdlciB3aXRoIHByb3BlciBlbmNvZGluZyBvYmplY3QgZm9ybWF0XG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1JlYWRGaWxlKGZ1bGxQYXRoLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICAgICAgXG4gICAgICAvLyBISUdIIFNFVkVSSVRZIEZJWDogVXNlIFNlY3VyZVlhbWxQYXJzZXIgdG8gcHJldmVudCBZQU1MIGluamVjdGlvbiBhdHRhY2tzXG4gICAgICAvLyBQcmV2aW91c2x5OiBDb3VsZCB1c2UgdW5zYWZlIFlBTUwgcGFyc2luZ1xuICAgICAgLy8gTm93OiBVc2VzIFNlY3VyZVlhbWxQYXJzZXIgd2hpY2ggdmFsaWRhdGVzIGNvbnRlbnQgYW5kIHByZXZlbnRzIG1hbGljaW91cyBwYXR0ZXJuc1xuXG4gICAgICAvLyBNZW1vcnkgZmlsZXMgYXJlIHB1cmUgWUFNTCAodW5saWtlIG90aGVyIGVsZW1lbnRzIHdoaWNoIGFyZSBtYXJrZG93biB3aXRoIGZyb250bWF0dGVyKVxuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBwdXJlIFlBTUwgKGRvZXNuJ3Qgc3RhcnQgd2l0aCBmcm9udG1hdHRlciBtYXJrZXJzKVxuICAgICAgbGV0IHBhcnNlZDogYW55O1xuXG4gICAgICAvLyBFZmZpY2llbnQgZm9ybWF0IGRldGVjdGlvbiB3aXRob3V0IGNyZWF0aW5nIHRyaW1tZWQgY29weVxuICAgICAgLy8gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOiBVc2UgY2hhcmFjdGVyIGNvZGVzIGluc3RlYWQgb2YgcmVnZXggZm9yIHdoaXRlc3BhY2UgZGV0ZWN0aW9uXG4gICAgICAvLyBDcmVkaXQ6IEplZXQgU2luZ2ggKEBqZWV0c2luZ2gwMDgpIC0gUFIgIzEwMzVcbiAgICAgIGxldCBmaXJzdE5vbldoaXRlc3BhY2UgPSAwO1xuICAgICAgd2hpbGUgKGZpcnN0Tm9uV2hpdGVzcGFjZSA8IGNvbnRlbnQubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGNoYXJDb2RlID0gY29udGVudC5jaGFyQ29kZUF0KGZpcnN0Tm9uV2hpdGVzcGFjZSk7XG4gICAgICAgIC8vIENoZWNrIGlmIGNoYXJhY3RlciBpcyBOT1Qgd2hpdGVzcGFjZVxuICAgICAgICBpZiAoY2hhckNvZGUgIT09IFdISVRFU1BBQ0VfQ0hBUlMuU1BBQ0UgJiZcbiAgICAgICAgICAgIGNoYXJDb2RlICE9PSBXSElURVNQQUNFX0NIQVJTLlRBQiAmJlxuICAgICAgICAgICAgY2hhckNvZGUgIT09IFdISVRFU1BBQ0VfQ0hBUlMuTkVXTElORSAmJlxuICAgICAgICAgICAgY2hhckNvZGUgIT09IFdISVRFU1BBQ0VfQ0hBUlMuQ0FSUklBR0VfUkVUVVJOKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZmlyc3ROb25XaGl0ZXNwYWNlKys7XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBlbXB0eSBjb250ZW50IGVkZ2UgY2FzZVxuICAgICAgaWYgKGZpcnN0Tm9uV2hpdGVzcGFjZSA9PT0gY29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgLy8gRW1wdHkgb3IgYWxsIHdoaXRlc3BhY2UgZmlsZSAtIGNyZWF0ZSBtaW5pbWFsIHZhbGlkIHN0cnVjdHVyZVxuICAgICAgICBwYXJzZWQgPSB7IGRhdGE6IHt9LCBjb250ZW50OiAnJyB9O1xuICAgICAgfSBlbHNlIGlmICghY29udGVudC5zdGFydHNXaXRoKCctLS0nLCBmaXJzdE5vbldoaXRlc3BhY2UpKSB7XG4gICAgICAgIC8vIFB1cmUgWUFNTCBmaWxlIC0gd3JhcCBpdCB3aXRoIGZyb250bWF0dGVyIG1hcmtlcnMgZm9yIFNlY3VyZVlhbWxQYXJzZXJcbiAgICAgICAgY29uc3Qgd3JhcHBlZENvbnRlbnQgPSBgLS0tXFxuJHtjb250ZW50fVxcbi0tLVxcbmA7XG4gICAgICAgIGNvbnN0IHBhcnNlUmVzdWx0ID0gU2VjdXJlWWFtbFBhcnNlci5wYXJzZSh3cmFwcGVkQ29udGVudCwge1xuICAgICAgICAgIG1heFlhbWxTaXplOiBNRU1PUllfQ09OU1RBTlRTLk1BWF9ZQU1MX1NJWkUsXG4gICAgICAgICAgdmFsaWRhdGVDb250ZW50OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBGb3IgcHVyZSBZQU1MLCB0aGUgZW50aXJlIGNvbnRlbnQgYmVjb21lcyB0aGUgZGF0YSwgbm8gbWFya2Rvd24gY29udGVudFxuICAgICAgICBwYXJzZWQgPSB7IGRhdGE6IHBhcnNlUmVzdWx0LmRhdGEsIGNvbnRlbnQ6ICcnIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGaWxlIHdpdGggZnJvbnRtYXR0ZXIgKHNob3VsZG4ndCBoYXBwZW4gZm9yIG1lbW9yaWVzLCBidXQgaGFuZGxlIGl0KVxuICAgICAgICBwYXJzZWQgPSBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlKGNvbnRlbnQsIHtcbiAgICAgICAgICBtYXhZYW1sU2l6ZTogTUVNT1JZX0NPTlNUQU5UUy5NQVhfWUFNTF9TSVpFLFxuICAgICAgICAgIHZhbGlkYXRlQ29udGVudDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gRXh0cmFjdCBtZXRhZGF0YSBhbmQgY29udGVudFxuICAgICAgY29uc3QgeyBtZXRhZGF0YSwgY29udGVudDogbWVtb3J5Q29udGVudCB9ID0gdGhpcy5wYXJzZU1lbW9yeUZpbGUocGFyc2VkKTtcbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIG1lbW9yeSBpbnN0YW5jZVxuICAgICAgY29uc3QgbWVtb3J5ID0gbmV3IE1lbW9yeShtZXRhZGF0YSk7XG4gICAgICBcbiAgICAgIC8vIExvYWQgc2F2ZWQgZW50cmllcyBpZiBwcmVzZW50XG4gICAgICAvLyBNZW1vcnkgZmlsZXMgaGF2ZSBlbnRyaWVzIGFzIGEgdG9wLWxldmVsIGtleSBpbiB0aGUgWUFNTFxuICAgICAgY29uc3QgZW50cmllcyA9IHBhcnNlZC5kYXRhPy5lbnRyaWVzO1xuICAgICAgaWYgKGVudHJpZXMpIHtcbiAgICAgICAgbWVtb3J5LmRlc2VyaWFsaXplKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBpZDogbWVtb3J5LmlkLFxuICAgICAgICAgIHR5cGU6IG1lbW9yeS50eXBlLFxuICAgICAgICAgIHZlcnNpb246IG1lbW9yeS52ZXJzaW9uLFxuICAgICAgICAgIG1ldGFkYXRhOiBtZW1vcnkubWV0YWRhdGEsXG4gICAgICAgICAgZXh0ZW5zaW9uczogbWVtb3J5LmV4dGVuc2lvbnMsXG4gICAgICAgICAgZW50cmllczogZW50cmllc1xuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENhY2hlIHRoZSBsb2FkZWQgbWVtb3J5XG4gICAgICB0aGlzLm1lbW9yeUNhY2hlLnNldChmdWxsUGF0aCwgbWVtb3J5KTtcbiAgICAgIFxuICAgICAgLy8gTG9nIHN1Y2Nlc3NmdWwgbG9hZFxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiBNRU1PUllfU0VDVVJJVFlfRVZFTlRTLk1FTU9SWV9MT0FERUQsXG4gICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgc291cmNlOiAnTWVtb3J5TWFuYWdlci5sb2FkJyxcbiAgICAgICAgZGV0YWlsczogYExvYWRlZCBtZW1vcnkgZnJvbSAke3BhdGguYmFzZW5hbWUoZnVsbFBhdGgpfWBcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICByZXR1cm4gbWVtb3J5O1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogTUVNT1JZX1NFQ1VSSVRZX0VWRU5UUy5NRU1PUllfTE9BRF9GQUlMRUQsXG4gICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgc291cmNlOiAnTWVtb3J5TWFuYWdlci5sb2FkJyxcbiAgICAgICAgZGV0YWlsczogYEZhaWxlZCB0byBsb2FkIG1lbW9yeSBmcm9tICR7ZmlsZVBhdGh9OiAke2Vycm9yfWBcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBtZW1vcnk6ICR7ZXJyb3J9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGRhdGUtYmFzZWQgcGF0aCBmb3IgbWVtb3J5IHN0b3JhZ2VcbiAgICogQ3JlYXRlcyBZWVlZLU1NLUREIGZvbGRlciBzdHJ1Y3R1cmUgdG8gcHJldmVudCBmbGF0IGRpcmVjdG9yeSBpc3N1ZXNcbiAgICogQHBhcmFtIGVsZW1lbnQgTWVtb3J5IGVsZW1lbnQgdG8gc2F2ZVxuICAgKiBAcGFyYW0gZmlsZU5hbWUgT3B0aW9uYWwgY3VzdG9tIGZpbGVuYW1lXG4gICAqIEByZXR1cm5zIEZ1bGwgcGF0aCB0byBtZW1vcnkgZmlsZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZW5lcmF0ZU1lbW9yeVBhdGgoZWxlbWVudDogTWVtb3J5LCBmaWxlTmFtZT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgZGF0ZUZvbGRlciA9IGAke2RhdGUuZ2V0RnVsbFllYXIoKX0tJHtTdHJpbmcoZGF0ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKX0tJHtTdHJpbmcoZGF0ZS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyl9YDtcbiAgICBjb25zdCBkYXRlUGF0aCA9IHBhdGguam9pbih0aGlzLm1lbW9yaWVzRGlyLCBkYXRlRm9sZGVyKTtcblxuICAgIC8vIEVuc3VyZSBkYXRlIGZvbGRlciBleGlzdHNcbiAgICBhd2FpdCBmcy5ta2RpcihkYXRlUGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAvLyBQRVJGT1JNQU5DRSBJTVBST1ZFTUVOVDogSW52YWxpZGF0ZSBkYXRlIGZvbGRlcnMgY2FjaGUgc2luY2Ugd2UgY3JlYXRlZCBhIG5ldyBmb2xkZXJcbiAgICB0aGlzLmRhdGVGb2xkZXJzQ2FjaGUgPSBudWxsO1xuXG4gICAgLy8gR2VuZXJhdGUgZmlsZW5hbWVcbiAgICBjb25zdCBiYXNlTmFtZSA9IGZpbGVOYW1lIHx8IGAke2VsZW1lbnQubWV0YWRhdGEubmFtZT8udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICctJykgfHwgJ21lbW9yeSd9LnlhbWxgO1xuICAgIGxldCBmaW5hbE5hbWUgPSBiYXNlTmFtZTtcbiAgICBsZXQgdmVyc2lvbiA9IDE7XG5cbiAgICAvLyBIYW5kbGUgY29sbGlzaW9ucyB3aXRoIHZlcnNpb24gc3VmZml4XG4gICAgd2hpbGUgKGF3YWl0IGZzLmFjY2VzcyhwYXRoLmpvaW4oZGF0ZVBhdGgsIGZpbmFsTmFtZSkpLnRoZW4oKCkgPT4gdHJ1ZSkuY2F0Y2goKCkgPT4gZmFsc2UpKSB7XG4gICAgICB2ZXJzaW9uKys7XG4gICAgICBmaW5hbE5hbWUgPSBiYXNlTmFtZS5yZXBsYWNlKCcueWFtbCcsIGAtdiR7dmVyc2lvbn0ueWFtbGApO1xuICAgIH1cblxuICAgIHJldHVybiBwYXRoLmpvaW4oZGF0ZVBhdGgsIGZpbmFsTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIFNIQS0yNTYgaGFzaCBvZiBtZW1vcnkgY29udGVudCBmb3IgZGVkdXBsaWNhdGlvblxuICAgKiBJbXBsZW1lbnRzIElzc3VlICM5OTQgLSBDb250ZW50LWJhc2VkIGRlZHVwbGljYXRpb25cbiAgICovXG4gIHByaXZhdGUgY2FsY3VsYXRlQ29udGVudEhhc2goZWxlbWVudDogTWVtb3J5KTogc3RyaW5nIHtcbiAgICBjb25zdCBjb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgbWV0YWRhdGE6IGVsZW1lbnQubWV0YWRhdGEsXG4gICAgICBlbnRyaWVzOiBKU09OLnBhcnNlKGVsZW1lbnQuc2VyaWFsaXplKCkpLmVudHJpZXNcbiAgICB9KTtcbiAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShjb250ZW50KS5kaWdlc3QoJ2hleCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgZGF0ZSBmb2xkZXJzIGluIG1lbW9yaWVzIGRpcmVjdG9yeVxuICAgKiBQRVJGT1JNQU5DRSBJTVBST1ZFTUVOVDogVXNlcyBjYWNoZSB0byBhdm9pZCByZXBlYXRlZCBkaXJlY3Rvcnkgc2Nhbm5pbmdcbiAgICogQ2FjaGUgaXMgaW52YWxpZGF0ZWQgd2hlbiBuZXcgZm9sZGVycyBhcmUgY3JlYXRlZCBvciBhZnRlciA2MCBzZWNvbmRzXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIGRhdGUgZm9sZGVyIG5hbWVzXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldERhdGVGb2xkZXJzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IENBQ0hFX1RUTCA9IDYwMDAwOyAvLyA2MCBzZWNvbmRzXG5cbiAgICAvLyBSZXR1cm4gY2FjaGVkIHJlc3VsdCBpZiB2YWxpZFxuICAgIGlmICh0aGlzLmRhdGVGb2xkZXJzQ2FjaGUgIT09IG51bGwgJiZcbiAgICAgICAgKG5vdyAtIHRoaXMuZGF0ZUZvbGRlcnNDYWNoZVRpbWVzdGFtcCkgPCBDQUNIRV9UVEwpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGVGb2xkZXJzQ2FjaGU7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCBmcy5yZWFkZGlyKHRoaXMubWVtb3JpZXNEaXIsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgICAgIGNvbnN0IGZvbGRlcnMgPSBlbnRyaWVzXG4gICAgICAgIC5maWx0ZXIoZW50cnkgPT4gZW50cnkuaXNEaXJlY3RvcnkoKSAmJiAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC8udGVzdChlbnRyeS5uYW1lKSlcbiAgICAgICAgLm1hcChlbnRyeSA9PiBlbnRyeS5uYW1lKVxuICAgICAgICAuc29ydCgpXG4gICAgICAgIC5yZXZlcnNlKCk7IC8vIE1vc3QgcmVjZW50IGZpcnN0XG5cbiAgICAgIC8vIENhY2hlIHRoZSByZXN1bHRcbiAgICAgIHRoaXMuZGF0ZUZvbGRlcnNDYWNoZSA9IGZvbGRlcnM7XG4gICAgICB0aGlzLmRhdGVGb2xkZXJzQ2FjaGVUaW1lc3RhbXAgPSBub3c7XG5cbiAgICAgIHJldHVybiBmb2xkZXJzO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoKGVycm9yIGFzIGFueSkuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgLy8gQ2FjaGUgZW1wdHkgcmVzdWx0XG4gICAgICAgIHRoaXMuZGF0ZUZvbGRlcnNDYWNoZSA9IFtdO1xuICAgICAgICB0aGlzLmRhdGVGb2xkZXJzQ2FjaGVUaW1lc3RhbXAgPSBub3c7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGEgbWVtb3J5IHRvIGZpbGVcbiAgICogU0VDVVJJVFkgRklYICMxOiBVc2VzIEZpbGVMb2NrTWFuYWdlci5hdG9taWNXcml0ZUZpbGUoKSBmb3IgYXRvbWljIG9wZXJhdGlvbnNcbiAgICogQHBhcmFtIGVsZW1lbnQgTWVtb3J5IGVsZW1lbnQgdG8gc2F2ZVxuICAgKiBAcGFyYW0gZmlsZVBhdGggT3B0aW9uYWwgY3VzdG9tIGZpbGUgcGF0aCwgZGVmYXVsdHMgdG8gZGF0ZS1iYXNlZCBwYXRoXG4gICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHNhdmUgaXMgY29tcGxldGVcbiAgICogQHRocm93cyB7RXJyb3J9IFdoZW4gbWVtb3J5IHZhbGlkYXRpb24gZmFpbHMgYmVmb3JlIHNhdmluZ1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gV2hlbiBwYXRoIHZhbGlkYXRpb24gZmFpbHMgb3IgZmlsZSBzeXN0ZW0gZXJyb3JzIG9jY3VyXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBXaGVuIGF0b21pYyB3cml0ZSBvcGVyYXRpb24gZmFpbHNcbiAgICovXG4gIGFzeW5jIHNhdmUoZWxlbWVudDogTWVtb3J5LCBmaWxlUGF0aD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSBlbGVtZW50XG4gICAgICBjb25zdCB2YWxpZGF0aW9uID0gZWxlbWVudC52YWxpZGF0ZSgpO1xuICAgICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBtZW1vcnk6ICR7dmFsaWRhdGlvbi5lcnJvcnM/Lm1hcChlID0+IGUubWVzc2FnZSkuam9pbignLCAnKX1gKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2FsY3VsYXRlIGNvbnRlbnQgaGFzaCBmb3IgZGVkdXBsaWNhdGlvblxuICAgICAgY29uc3QgY29udGVudEhhc2ggPSB0aGlzLmNhbGN1bGF0ZUNvbnRlbnRIYXNoKGVsZW1lbnQpO1xuICAgICAgY29uc3QgZXhpc3RpbmdQYXRoID0gdGhpcy5jb250ZW50SGFzaEluZGV4LmdldChjb250ZW50SGFzaCk7XG5cbiAgICAgIGlmIChleGlzdGluZ1BhdGgpIHtcbiAgICAgICAgLy8gTG9nIGR1cGxpY2F0ZSBkZXRlY3Rpb25cbiAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgIHR5cGU6ICdNRU1PUllfRFVQTElDQVRFX0RFVEVDVEVEJyxcbiAgICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgICAgc291cmNlOiAnTWVtb3J5TWFuYWdlci5zYXZlJyxcbiAgICAgICAgICBkZXRhaWxzOiBgRHVwbGljYXRlIGNvbnRlbnQgZGV0ZWN0ZWQuIEV4aXN0aW5nOiAke2V4aXN0aW5nUGF0aH1gXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBHZW5lcmF0ZSBkYXRlLWJhc2VkIHBhdGggaWYgbm90IHByb3ZpZGVkXG4gICAgICBjb25zdCBmdWxsUGF0aCA9IGZpbGVQYXRoXG4gICAgICAgID8gYXdhaXQgdGhpcy52YWxpZGF0ZUFuZFJlc29sdmVQYXRoKGZpbGVQYXRoKVxuICAgICAgICA6IGF3YWl0IHRoaXMuZ2VuZXJhdGVNZW1vcnlQYXRoKGVsZW1lbnQpO1xuXG4gICAgICAvLyBFbnN1cmUgcGFyZW50IGRpcmVjdG9yeSBleGlzdHMgKGZvciBkYXRlIGZvbGRlcnMpXG4gICAgICBhd2FpdCBmcy5ta2RpcihwYXRoLmRpcm5hbWUoZnVsbFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIFxuICAgICAgLy8gR2V0IG1lbW9yeSBzdGF0aXN0aWNzXG4gICAgICBjb25zdCBzdGF0cyA9IGVsZW1lbnQuZ2V0U3RhdHMoKTtcbiAgICAgIFxuICAgICAgLy8gUHJlcGFyZSBkYXRhIGZvciBzYXZpbmdcbiAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgIG1ldGFkYXRhOiBlbGVtZW50Lm1ldGFkYXRhLFxuICAgICAgICBleHRlbnNpb25zOiBlbGVtZW50LmV4dGVuc2lvbnMsXG4gICAgICAgIHN0YXRzOiB7XG4gICAgICAgICAgdG90YWxFbnRyaWVzOiBzdGF0cy50b3RhbEVudHJpZXMsXG4gICAgICAgICAgdG90YWxTaXplOiBzdGF0cy50b3RhbFNpemUsXG4gICAgICAgICAgb2xkZXN0RW50cnk6IHN0YXRzLm9sZGVzdEVudHJ5Py50b0lTT1N0cmluZygpLFxuICAgICAgICAgIG5ld2VzdEVudHJ5OiBzdGF0cy5uZXdlc3RFbnRyeT8udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICB0b3BUYWdzOiBBcnJheS5mcm9tKHN0YXRzLnRhZ0ZyZXF1ZW5jeS5lbnRyaWVzKCkpXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYlsxXSAtIGFbMV0pXG4gICAgICAgICAgICAuc2xpY2UoMCwgMTApXG4gICAgICAgICAgICAubWFwKChbdGFnLCBjb3VudF0pID0+ICh7IHRhZywgY291bnQgfSkpXG4gICAgICAgIH0sXG4gICAgICAgIGVudHJpZXM6IEpTT04ucGFyc2UoZWxlbWVudC5zZXJpYWxpemUoKSkuZW50cmllc1xuICAgICAgfTtcbiAgICAgIFxuICAgICAgLy8gU0VDVVJJVFkgRklYOiBVc2Ugc2VjdXJlIFlBTUwgZHVtcGluZyB3aXRoIHNhZmV0eSBvcHRpb25zXG4gICAgICAvLyBQcmV2aW91c2x5OiBDb3VsZCBhbGxvdyBkYW5nZXJvdXMgWUFNTCBmZWF0dXJlc1xuICAgICAgLy8gTm93OiBVc2VzIEZBSUxTQUZFX1NDSEVNQSBhbmQgc2VjdXJpdHkgb3B0aW9ucyB0byBwcmV2ZW50IGNvZGUgZXhlY3V0aW9uXG4gICAgICBjb25zdCB5YW1sQ29udGVudCA9IHlhbWwuZHVtcChkYXRhLCB7XG4gICAgICAgIHNjaGVtYTogeWFtbC5GQUlMU0FGRV9TQ0hFTUEsXG4gICAgICAgIG5vUmVmczogdHJ1ZSxcbiAgICAgICAgc2tpcEludmFsaWQ6IHRydWUsXG4gICAgICAgIHNvcnRLZXlzOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgLy8gQ1JJVElDQUwgRklYOiBVc2UgYXRvbWljIGZpbGUgd3JpdGUgdG8gcHJldmVudCBjb3JydXB0aW9uXG4gICAgICAvLyBQcmV2aW91c2x5OiBhd2FpdCBmcy53cml0ZUZpbGUoZnVsbFBhdGgsIHlhbWxDb250ZW50LCAndXRmLTgnKTtcbiAgICAgIC8vIE5vdzogVXNlcyBGaWxlTG9ja01hbmFnZXIgZm9yIGF0b21pYyB3cml0ZSB3aXRoIHByb3BlciBlbmNvZGluZ1xuICAgICAgYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1dyaXRlRmlsZShmdWxsUGF0aCwgeWFtbENvbnRlbnQsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSBjYWNoZVxuICAgICAgdGhpcy5tZW1vcnlDYWNoZS5zZXQoZnVsbFBhdGgsIGVsZW1lbnQpO1xuXG4gICAgICAvLyBVcGRhdGUgY29udGVudCBoYXNoIGluZGV4XG4gICAgICB0aGlzLmNvbnRlbnRIYXNoSW5kZXguc2V0KGNvbnRlbnRIYXNoLCBmdWxsUGF0aCk7XG5cbiAgICAgIC8vIExvZyBzdWNjZXNzZnVsIHNhdmVcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogTUVNT1JZX1NFQ1VSSVRZX0VWRU5UUy5NRU1PUllfU0FWRUQsXG4gICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgc291cmNlOiAnTWVtb3J5TWFuYWdlci5zYXZlJyxcbiAgICAgICAgZGV0YWlsczogYFNhdmVkIG1lbW9yeSB0byAke3BhdGguYmFzZW5hbWUoZnVsbFBhdGgpfSB3aXRoICR7c3RhdHMudG90YWxFbnRyaWVzfSBlbnRyaWVzYFxuICAgICAgfSk7XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiBNRU1PUllfU0VDVVJJVFlfRVZFTlRTLk1FTU9SWV9TQVZFX0ZBSUxFRCxcbiAgICAgICAgc2V2ZXJpdHk6ICdISUdIJyxcbiAgICAgICAgc291cmNlOiAnTWVtb3J5TWFuYWdlci5zYXZlJyxcbiAgICAgICAgZGV0YWlsczogYEZhaWxlZCB0byBzYXZlIG1lbW9yeSB0byAke2ZpbGVQYXRofTogJHtlcnJvcn1gXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNhdmUgbWVtb3J5OiAke2Vycm9yfWApO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIExpc3QgYWxsIGF2YWlsYWJsZSBtZW1vcmllc1xuICAgKi9cbiAgYXN5bmMgbGlzdCgpOiBQcm9taXNlPE1lbW9yeVtdPiB7XG4gICAgY29uc3QgbWVtb3JpZXM6IE1lbW9yeVtdID0gW107XG5cbiAgICB0cnkge1xuICAgICAgLy8gR2V0IGFsbCBkYXRlIGZvbGRlcnNcbiAgICAgIGNvbnN0IGRhdGVGb2xkZXJzID0gYXdhaXQgdGhpcy5nZXREYXRlRm9sZGVycygpO1xuXG4gICAgICAvLyBBbHNvIGNoZWNrIHJvb3QgZGlyZWN0b3J5IGZvciBhbnkgbWVtb3J5IGZpbGVzXG4gICAgICAvLyBNZW1vcnkgZmlsZXMgc2hvdWxkIGJlIC55YW1sIGZvcm1hdCBvbmx5XG4gICAgICBjb25zdCByb290RmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKHRoaXMubWVtb3JpZXNEaXIpXG4gICAgICAgIC50aGVuKGZpbGVzID0+IGZpbGVzLmZpbHRlcihmID0+IGYuZW5kc1dpdGgoJy55YW1sJykpKVxuICAgICAgICAuY2F0Y2goKCkgPT4gW10pO1xuXG4gICAgICAvLyBQcm9jZXNzIHJvb3QgZmlsZXMgZmlyc3QgKGxlZ2FjeSlcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiByb290RmlsZXMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBtZW1vcnkgPSBhd2FpdCB0aGlzLmxvYWQoZmlsZSk7XG4gICAgICAgICAgbWVtb3JpZXMucHVzaChtZW1vcnkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICAgIHR5cGU6IE1FTU9SWV9TRUNVUklUWV9FVkVOVFMuTUVNT1JZX0xJU1RfSVRFTV9GQUlMRUQsXG4gICAgICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgICAgICBzb3VyY2U6ICdNZW1vcnlNYW5hZ2VyLmxpc3QnLFxuICAgICAgICAgICAgZGV0YWlsczogYEZhaWxlZCB0byBsb2FkICR7ZmlsZX06ICR7ZXJyb3J9YFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFByb2Nlc3MgZGF0ZSBmb2xkZXJzXG4gICAgICBmb3IgKGNvbnN0IGRhdGVGb2xkZXIgb2YgZGF0ZUZvbGRlcnMpIHtcbiAgICAgICAgY29uc3QgZm9sZGVyUGF0aCA9IHBhdGguam9pbih0aGlzLm1lbW9yaWVzRGlyLCBkYXRlRm9sZGVyKTtcbiAgICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKGZvbGRlclBhdGgpXG4gICAgICAgICAgLnRoZW4oZmlsZXMgPT4gZmlsZXMuZmlsdGVyKGYgPT4gZi5lbmRzV2l0aCgnLnlhbWwnKSkpXG4gICAgICAgICAgLmNhdGNoKCgpID0+IFtdKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgbWVtb3J5ID0gYXdhaXQgdGhpcy5sb2FkKHBhdGguam9pbihkYXRlRm9sZGVyLCBmaWxlKSk7XG4gICAgICAgICAgICBtZW1vcmllcy5wdXNoKG1lbW9yeSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICAgICAgdHlwZTogTUVNT1JZX1NFQ1VSSVRZX0VWRU5UUy5NRU1PUllfTElTVF9JVEVNX0ZBSUxFRCxcbiAgICAgICAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICAgICAgICBzb3VyY2U6ICdNZW1vcnlNYW5hZ2VyLmxpc3QnLFxuICAgICAgICAgICAgICBkZXRhaWxzOiBgRmFpbGVkIHRvIGxvYWQgJHtkYXRlRm9sZGVyfS8ke2ZpbGV9OiAke2Vycm9yfWBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWVtb3JpZXM7XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvciBhcyBhbnkpLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIC8vIERpcmVjdG9yeSBkb2Vzbid0IGV4aXN0IHlldFxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGaW5kIG1lbW9yaWVzIG1hdGNoaW5nIGEgcHJlZGljYXRlXG4gICAqL1xuICBhc3luYyBmaW5kKHByZWRpY2F0ZTogKGVsZW1lbnQ6IE1lbW9yeSkgPT4gYm9vbGVhbik6IFByb21pc2U8TWVtb3J5IHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgbWVtb3JpZXMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcbiAgICByZXR1cm4gbWVtb3JpZXMuZmluZChwcmVkaWNhdGUpO1xuICB9XG4gIFxuICAvKipcbiAgICogRmluZCBtdWx0aXBsZSBtZW1vcmllcyBtYXRjaGluZyBhIHByZWRpY2F0ZVxuICAgKi9cbiAgYXN5bmMgZmluZE1hbnkocHJlZGljYXRlOiAoZWxlbWVudDogTWVtb3J5KSA9PiBib29sZWFuKTogUHJvbWlzZTxNZW1vcnlbXT4ge1xuICAgIGNvbnN0IG1lbW9yaWVzID0gYXdhaXQgdGhpcy5saXN0KCk7XG4gICAgcmV0dXJuIG1lbW9yaWVzLmZpbHRlcihwcmVkaWNhdGUpO1xuICB9XG4gIFxuICAvKipcbiAgICogRGVsZXRlIGEgbWVtb3J5IGZpbGVcbiAgICogU0VDVVJJVFk6IFZhbGlkYXRlcyBwYXRoIGFuZCBsb2dzIGRlbGV0aW9uXG4gICAqL1xuICBhc3luYyBkZWxldGUoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IGF3YWl0IHRoaXMudmFsaWRhdGVBbmRSZXNvbHZlUGF0aChmaWxlUGF0aCk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGZpbGUgZXhpc3RzXG4gICAgICBhd2FpdCBmcy5hY2Nlc3MoZnVsbFBhdGgpO1xuICAgICAgXG4gICAgICAvLyBEZWxldGUgdGhlIGZpbGVcbiAgICAgIGF3YWl0IGZzLnVubGluayhmdWxsUGF0aCk7XG4gICAgICBcbiAgICAgIC8vIFJlbW92ZSBmcm9tIGNhY2hlXG4gICAgICB0aGlzLm1lbW9yeUNhY2hlLmRlbGV0ZShmdWxsUGF0aCk7XG4gICAgICBcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogTUVNT1JZX1NFQ1VSSVRZX0VWRU5UUy5NRU1PUllfREVMRVRFRCxcbiAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICBzb3VyY2U6ICdNZW1vcnlNYW5hZ2VyLmRlbGV0ZScsXG4gICAgICAgIGRldGFpbHM6IGBEZWxldGVkIG1lbW9yeSBmaWxlOiAke3BhdGguYmFzZW5hbWUoZnVsbFBhdGgpfWBcbiAgICAgIH0pO1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAvLyBGaWxlIGRvZXNuJ3QgZXhpc3QsIG5vdCBhbiBlcnJvciBmb3IgZGVsZXRlIG9wZXJhdGlvblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIG1lbW9yeSBmaWxlIGV4aXN0c1xuICAgKi9cbiAgYXN5bmMgZXhpc3RzKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZnVsbFBhdGggPSBhd2FpdCB0aGlzLnZhbGlkYXRlQW5kUmVzb2x2ZVBhdGgoZmlsZVBhdGgpO1xuICAgICAgYXdhaXQgZnMuYWNjZXNzKGZ1bGxQYXRoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBtZW1vcnkgd2l0aCBtZXRhZGF0YVxuICAgKi9cbiAgYXN5bmMgY3JlYXRlKG1ldGFkYXRhOiBQYXJ0aWFsPE1lbW9yeU1ldGFkYXRhPik6IFByb21pc2U8TWVtb3J5PiB7XG4gICAgcmV0dXJuIG5ldyBNZW1vcnkobWV0YWRhdGEpO1xuICB9XG4gIFxuICAvKipcbiAgICogSW1wb3J0IGEgbWVtb3J5IGZyb20gSlNPTi9ZQU1MIHN0cmluZ1xuICAgKiBTRUNVUklUWTogRnVsbCB2YWxpZGF0aW9uIG9mIGltcG9ydGVkIGNvbnRlbnRcbiAgICogQHBhcmFtIGRhdGEgSlNPTiBvciBZQU1MIHN0cmluZyBjb250YWluaW5nIG1lbW9yeSBkYXRhXG4gICAqIEBwYXJhbSBmb3JtYXQgRm9ybWF0IG9mIHRoZSBpbnB1dCBkYXRhICgnanNvbicgb3IgJ3lhbWwnKVxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgaW1wb3J0ZWQgTWVtb3J5IGluc3RhbmNlXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBXaGVuIEpTT04vWUFNTCBwYXJzaW5nIGZhaWxzXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBXaGVuIGltcG9ydGVkIGRhdGEgaXMgbWlzc2luZyByZXF1aXJlZCBmaWVsZHNcbiAgICogQHRocm93cyB7RXJyb3J9IFdoZW4gWUFNTCBjb250ZW50IGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIHNpemVcbiAgICogQHRocm93cyB7RXJyb3J9IFdoZW4gaW1wb3J0ZWQgbWVtb3J5IGZhaWxzIHZhbGlkYXRpb25cbiAgICovXG4gIGFzeW5jIGltcG9ydEVsZW1lbnQoZGF0YTogc3RyaW5nLCBmb3JtYXQ6ICdqc29uJyB8ICd5YW1sJyA9ICd5YW1sJyk6IFByb21pc2U8TWVtb3J5PiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBwYXJzZWQ6IGFueTtcbiAgICAgIFxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIHBhcnNlZCA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBISUdIIFNFVkVSSVRZIEZJWDogVXNlIHNlY3VyZSBZQU1MIHBhcnNpbmdcbiAgICAgICAgLy8gTWVtb3J5IGltcG9ydCBleHBlY3RzIHB1cmUgWUFNTCAobm90IGZyb250bWF0dGVyKSwgc28gd2UgcGFyc2UgaXQgc2VjdXJlbHlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBGaXJzdCB2YWxpZGF0ZSB0aGUgWUFNTCBjb250ZW50IHNpemVcbiAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPiBNRU1PUllfQ09OU1RBTlRTLk1BWF9ZQU1MX1NJWkUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWUFNTCBjb250ZW50IGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIHNpemUnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQ3JlYXRlIGEgd3JhcHBlciB0byB1c2UgU2VjdXJlWWFtbFBhcnNlciB3aXRoIHB1cmUgWUFNTFxuICAgICAgICAgIC8vIEFkZCBtaW5pbWFsIGZyb250bWF0dGVyIG1hcmtlcnMgdG8gc2F0aXNmeSBwYXJzZXJcbiAgICAgICAgICBjb25zdCB3cmFwcGVkWWFtbCA9IGAtLS1cXG4ke2RhdGF9XFxuLS0tXFxuYDtcbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBwYXJzZVJlc3VsdCA9IFNlY3VyZVlhbWxQYXJzZXIucGFyc2Uod3JhcHBlZFlhbWwsIHtcbiAgICAgICAgICAgIG1heFlhbWxTaXplOiBNRU1PUllfQ09OU1RBTlRTLk1BWF9ZQU1MX1NJWkUsXG4gICAgICAgICAgICB2YWxpZGF0ZUNvbnRlbnQ6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBFeHRyYWN0IHRoZSBwYXJzZWQgZGF0YSAod2lsbCBiZSBpbiB0aGUgJ2RhdGEnIHByb3BlcnR5KVxuICAgICAgICAgIHBhcnNlZCA9IHBhcnNlUmVzdWx0LmRhdGE7XG4gICAgICAgICAgXG4gICAgICAgIH0gY2F0Y2ggKHlhbWxFcnJvcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBZQU1MOiAke3lhbWxFcnJvcn1gKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gVmFsaWRhdGUgaXQncyBhbiBvYmplY3RcbiAgICAgICAgaWYgKCFwYXJzZWQgfHwgdHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lBTUwgbXVzdCBjb250YWluIGFuIG9iamVjdCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEhhbmRsZSBkaWZmZXJlbnQgc3RydWN0dXJlcyBmcm9tIFlBTUwgcGFyc2luZ1xuICAgICAgbGV0IG1ldGFkYXRhID0gcGFyc2VkLm1ldGFkYXRhO1xuICAgICAgbGV0IGVudHJpZXMgPSBwYXJzZWQuZW50cmllcyB8fCAocGFyc2VkLmRhdGEgJiYgcGFyc2VkLmRhdGEuZW50cmllcyk7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIHJlcXVpcmVkIGZpZWxkc1xuICAgICAgaWYgKCFtZXRhZGF0YSB8fCAhbWV0YWRhdGEubmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01lbW9yeSBtdXN0IGhhdmUgbWV0YWRhdGEgd2l0aCBuYW1lJyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENyZWF0ZSBtZW1vcnkgaW5zdGFuY2VcbiAgICAgIGNvbnN0IG1lbW9yeSA9IG5ldyBNZW1vcnkobWV0YWRhdGEpO1xuICAgICAgXG4gICAgICAvLyBMb2FkIGVudHJpZXMgaWYgcHJlc2VudFxuICAgICAgaWYgKGVudHJpZXMpIHtcbiAgICAgICAgbWVtb3J5LmRlc2VyaWFsaXplKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBpZDogbWVtb3J5LmlkLFxuICAgICAgICAgIHR5cGU6IG1lbW9yeS50eXBlLFxuICAgICAgICAgIHZlcnNpb246IG1lbW9yeS52ZXJzaW9uLFxuICAgICAgICAgIG1ldGFkYXRhOiBtZW1vcnkubWV0YWRhdGEsXG4gICAgICAgICAgZXh0ZW5zaW9uczogbWVtb3J5LmV4dGVuc2lvbnMsXG4gICAgICAgICAgZW50cmllczogZW50cmllc1xuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJldHVybiBtZW1vcnk7XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiBNRU1PUllfU0VDVVJJVFlfRVZFTlRTLk1FTU9SWV9JTVBPUlRfRkFJTEVELFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ01lbW9yeU1hbmFnZXIuaW1wb3J0RWxlbWVudCcsXG4gICAgICAgIGRldGFpbHM6IGBGYWlsZWQgdG8gaW1wb3J0IG1lbW9yeTogJHtlcnJvcn1gXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGltcG9ydCBtZW1vcnk6ICR7ZXJyb3J9YCk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogRXhwb3J0IGEgbWVtb3J5IHRvIFlBTUwgc3RyaW5nXG4gICAqL1xuICBhc3luYyBleHBvcnRFbGVtZW50KGVsZW1lbnQ6IE1lbW9yeSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3Qgc3RhdHMgPSBlbGVtZW50LmdldFN0YXRzKCk7XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIG1ldGFkYXRhOiBlbGVtZW50Lm1ldGFkYXRhLFxuICAgICAgZXh0ZW5zaW9uczogZWxlbWVudC5leHRlbnNpb25zLFxuICAgICAgc3RhdHM6IHtcbiAgICAgICAgdG90YWxFbnRyaWVzOiBzdGF0cy50b3RhbEVudHJpZXMsXG4gICAgICAgIHRvdGFsU2l6ZTogc3RhdHMudG90YWxTaXplLFxuICAgICAgICBvbGRlc3RFbnRyeTogc3RhdHMub2xkZXN0RW50cnk/LnRvSVNPU3RyaW5nKCksXG4gICAgICAgIG5ld2VzdEVudHJ5OiBzdGF0cy5uZXdlc3RFbnRyeT8udG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIGVudHJpZXM6IEpTT04ucGFyc2UoZWxlbWVudC5zZXJpYWxpemUoKSkuZW50cmllc1xuICAgIH07XG4gICAgXG4gICAgLy8gU0VDVVJJVFkgRklYOiBVc2Ugc2VjdXJlIFlBTUwgZHVtcGluZ1xuICAgIHJldHVybiB5YW1sLmR1bXAoZGF0YSwge1xuICAgICAgc2NoZW1hOiB5YW1sLkZBSUxTQUZFX1NDSEVNQSxcbiAgICAgIG5vUmVmczogdHJ1ZSxcbiAgICAgIHNraXBJbnZhbGlkOiB0cnVlLFxuICAgICAgc29ydEtleXM6IHRydWVcbiAgICB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFZhbGlkYXRlIGEgbWVtb3J5IGVsZW1lbnRcbiAgICovXG4gIHZhbGlkYXRlKGVsZW1lbnQ6IE1lbW9yeSk6IEVsZW1lbnRWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICByZXR1cm4gZWxlbWVudC52YWxpZGF0ZSgpO1xuICB9XG4gIFxuICAvKipcbiAgICogVmFsaWRhdGUgYW5kIHJlc29sdmUgYSBmaWxlIHBhdGhcbiAgICogU0VDVVJJVFk6IFByZXZlbnRzIGRpcmVjdG9yeSB0cmF2ZXJzYWwgYXR0YWNrc1xuICAgKi9cbiAgdmFsaWRhdGVQYXRoKGZpbGVQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgLy8gUGVyZm9ybSBzeW5jaHJvbm91cyB2YWxpZGF0aW9uIGNoZWNrc1xuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IHBhdGgubm9ybWFsaXplKGZpbGVQYXRoKTtcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgZm9yIHBhdGggdHJhdmVyc2FsIGF0dGVtcHRzXG4gICAgICBpZiAobm9ybWFsaXplZC5pbmNsdWRlcygnLi4nKSB8fCBwYXRoLmlzQWJzb2x1dGUobm9ybWFsaXplZCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBFbnN1cmUgcHJvcGVyIGV4dGVuc2lvblxuICAgICAgaWYgKCFub3JtYWxpemVkLmVuZHNXaXRoKCcubWQnKSAmJiAhbm9ybWFsaXplZC5lbmRzV2l0aCgnLnlhbWwnKSAmJiAhbm9ybWFsaXplZC5lbmRzV2l0aCgnLnltbCcpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHRoZSBlbGVtZW50IHR5cGUgdGhpcyBtYW5hZ2VyIGhhbmRsZXNcbiAgICovXG4gIGdldEVsZW1lbnRUeXBlKCk6IEVsZW1lbnRUeXBlIHtcbiAgICByZXR1cm4gRWxlbWVudFR5cGUuTUVNT1JZO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHRoZSBmaWxlIGV4dGVuc2lvbiBmb3IgbWVtb3J5IGZpbGVzXG4gICAqL1xuICBnZXRGaWxlRXh0ZW5zaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICcueWFtbCc7XG4gIH1cbiAgXG4gIC8vIFByaXZhdGUgaGVscGVyIG1ldGhvZHNcbiAgXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhbmQgcmVzb2x2ZSBhIGZpbGUgcGF0aCB0byBwcmV2ZW50IHNlY3VyaXR5IGlzc3Vlc1xuICAgKiBAcGFyYW0gZmlsZVBhdGggUGF0aCB0byB2YWxpZGF0ZSBhbmQgcmVzb2x2ZVxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgdmFsaWRhdGVkIGZ1bGwgcGF0aFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gV2hlbiBwYXRoIGNvbnRhaW5zIHRyYXZlcnNhbCBhdHRlbXB0cyAoLi4vKVxuICAgKiBAdGhyb3dzIHtFcnJvcn0gV2hlbiBwYXRoIGlzIGFic29sdXRlIG9yIGludmFsaWRcbiAgICogQHRocm93cyB7RXJyb3J9IFdoZW4gZmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQgKC5tZCwgLnlhbWwsIC55bWwpXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBXaGVuIHJlc29sdmVkIHBhdGggd291bGQgYmUgb3V0c2lkZSBtZW1vcmllcyBkaXJlY3RvcnlcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVBbmRSZXNvbHZlUGF0aChmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyBTRUNVUklUWSBGSVg6IENvbXByZWhlbnNpdmUgcGF0aCB2YWxpZGF0aW9uXG4gICAgLy8gRW5oYW5jZWQgdmFsaWRhdGlvbiBpbnNwaXJlZCBieSBKZWV0IFNpbmdoIChAamVldHNpbmdoMDA4KSAtIFBSICMxMDM1XG5cbiAgICAvLyBGaXJzdCBub3JtYWxpemUgdGhlIHBhdGggdG8gcmVzb2x2ZSBhbnkgLi8gb3IgLi4vIHNlcXVlbmNlc1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBwYXRoLm5vcm1hbGl6ZShmaWxlUGF0aCk7XG5cbiAgICAvLyBDaGVjayBmb3IgcGF0aCB0cmF2ZXJzYWwgYXR0ZW1wdHMgLSBib3RoIGluIG9yaWdpbmFsIGFuZCBub3JtYWxpemVkXG4gICAgLy8gQ2hlY2sgYm90aCB0aGUgbm9ybWFsaXplZCBwYXRoIGFuZCB0aGUgb3JpZ2luYWwgZm9yIGFueSB0cmF2ZXJzYWwgcGF0dGVybnNcbiAgICBpZiAobm9ybWFsaXplZC5pbmNsdWRlcygnLi4nKSB8fFxuICAgICAgICBmaWxlUGF0aC5pbmNsdWRlcygnLi4nKSB8fFxuICAgICAgICBwYXRoLmlzQWJzb2x1dGUobm9ybWFsaXplZCkgfHxcbiAgICAgICAgcGF0aC5pc0Fic29sdXRlKGZpbGVQYXRoKSkge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnUEFUSF9UUkFWRVJTQUxfQVRURU1QVCcsXG4gICAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICAgIHNvdXJjZTogJ01lbW9yeU1hbmFnZXIudmFsaWRhdGVBbmRSZXNvbHZlUGF0aCcsXG4gICAgICAgIGRldGFpbHM6IGBCbG9ja2VkIHBhdGggdHJhdmVyc2FsIGF0dGVtcHQ6ICR7ZmlsZVBhdGh9YFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZmlsZSBwYXRoOiBQYXRoIHRyYXZlcnNhbCBkZXRlY3RlZCcpO1xuICAgIH1cbiAgICBcbiAgICAvLyBFbnN1cmUgcHJvcGVyIGV4dGVuc2lvbiAtIG1lbW9yaWVzIHNob3VsZCBvbmx5IGJlIC55YW1sIG9yIC55bWxcbiAgICBpZiAoIW5vcm1hbGl6ZWQuZW5kc1dpdGgoJy55YW1sJykgJiYgIW5vcm1hbGl6ZWQuZW5kc1dpdGgoJy55bWwnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZW1vcnkgZmlsZXMgbXVzdCBoYXZlIC55YW1sIG9yIC55bWwgZXh0ZW5zaW9uJyk7XG4gICAgfVxuICAgIFxuICAgIC8vIENvbnN0cnVjdCBmdWxsIHBhdGhcbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbih0aGlzLm1lbW9yaWVzRGlyLCBub3JtYWxpemVkKTtcbiAgICBcbiAgICAvLyBWZXJpZnkgaXQncyB3aXRoaW4gbWVtb3JpZXMgZGlyZWN0b3J5XG4gICAgY29uc3QgcmVsYXRpdmUgPSBwYXRoLnJlbGF0aXZlKHRoaXMubWVtb3JpZXNEaXIsIGZ1bGxQYXRoKTtcbiAgICBpZiAocmVsYXRpdmUuc3RhcnRzV2l0aCgnLi4nKSB8fCBwYXRoLmlzQWJzb2x1dGUocmVsYXRpdmUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbGUgcGF0aCBtdXN0IGJlIHdpdGhpbiBtZW1vcmllcyBkaXJlY3RvcnknKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGZ1bGxQYXRoO1xuICB9XG4gIFxuICBwcml2YXRlIHBhcnNlTWVtb3J5RmlsZShwYXJzZWQ6IGFueSk6IHsgbWV0YWRhdGE6IE1lbW9yeU1ldGFkYXRhOyBjb250ZW50OiBzdHJpbmcgfSB7XG4gICAgLy8gRklYOiBTZWN1cmVZYW1sUGFyc2VyIHJldHVybnMgZGF0YSBpbiAnZGF0YScgcHJvcGVydHksIG5vdCAnbWV0YWRhdGEnXG4gICAgLy8gRm9yIG1hcmtkb3duIGZpbGVzIHdpdGggWUFNTCBmcm9udG1hdHRlciwgdGhlIHN0cnVjdHVyZSBpczpcbiAgICAvLyBwYXJzZWQuZGF0YSA9IFlBTUwgZnJvbnRtYXR0ZXIgdmFsdWVzXG4gICAgLy8gcGFyc2VkLmNvbnRlbnQgPSBtYXJrZG93biBjb250ZW50IGFmdGVyIGZyb250bWF0dGVyXG5cbiAgICAvLyBGb3IgcHVyZSBZQU1MIG1lbW9yeSBmaWxlcywgd2UgbmVlZCB0byBjaGVjayBpZiBtZXRhZGF0YSBpcyBkaXJlY3RseSBpbiBkYXRhXG4gICAgY29uc3QgeWFtbERhdGEgPSBwYXJzZWQuZGF0YSB8fCB7fTtcblxuICAgIC8vIE1lbW9yeSBmaWxlcyBzYXZlZCBieSB0aGUgc3lzdGVtIGhhdmUgbWV0YWRhdGEgYXMgYSB0b3AtbGV2ZWwga2V5XG4gICAgY29uc3QgbWV0YWRhdGFTb3VyY2UgPSB5YW1sRGF0YS5tZXRhZGF0YSB8fCB5YW1sRGF0YTtcblxuICAgIC8vIEV4dHJhY3QgbWV0YWRhdGEgd2l0aCB2YWxpZGF0aW9uXG4gICAgY29uc3QgbWV0YWRhdGE6IE1lbW9yeU1ldGFkYXRhID0ge1xuICAgICAgbmFtZTogc2FuaXRpemVJbnB1dChtZXRhZGF0YVNvdXJjZS5uYW1lIHx8ICdVbm5hbWVkIE1lbW9yeScsIDEwMCksXG4gICAgICBkZXNjcmlwdGlvbjogbWV0YWRhdGFTb3VyY2UuZGVzY3JpcHRpb24gP1xuICAgICAgICBzYW5pdGl6ZUlucHV0KG1ldGFkYXRhU291cmNlLmRlc2NyaXB0aW9uLCA1MDApIDpcbiAgICAgICAgJycsXG4gICAgICB2ZXJzaW9uOiBtZXRhZGF0YVNvdXJjZS52ZXJzaW9uIHx8ICcxLjAuMCcsXG4gICAgICBhdXRob3I6IG1ldGFkYXRhU291cmNlLmF1dGhvcixcbiAgICAgIGNyZWF0ZWQ6IG1ldGFkYXRhU291cmNlLmNyZWF0ZWQsXG4gICAgICBtb2RpZmllZDogbWV0YWRhdGFTb3VyY2UubW9kaWZpZWQgfHwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgdGFnczogQXJyYXkuaXNBcnJheShtZXRhZGF0YVNvdXJjZS50YWdzKSA/XG4gICAgICAgIG1ldGFkYXRhU291cmNlLnRhZ3MubWFwKCh0YWc6IHN0cmluZykgPT4gc2FuaXRpemVJbnB1dCh0YWcsIE1FTU9SWV9DT05TVEFOVFMuTUFYX1RBR19MRU5HVEgpKSA6XG4gICAgICAgIFtdLFxuICAgICAgc3RvcmFnZUJhY2tlbmQ6IG1ldGFkYXRhU291cmNlLnN0b3JhZ2VfYmFja2VuZCB8fCBtZXRhZGF0YVNvdXJjZS5zdG9yYWdlQmFja2VuZCB8fCBNRU1PUllfQ09OU1RBTlRTLkRFRkFVTFRfU1RPUkFHRV9CQUNLRU5ELFxuICAgICAgcmV0ZW50aW9uRGF5czogbWV0YWRhdGFTb3VyY2UucmV0ZW50aW9uX3BvbGljeT8uZGVmYXVsdCA/XG4gICAgICAgIHRoaXMucGFyc2VSZXRlbnRpb25EYXlzKG1ldGFkYXRhU291cmNlLnJldGVudGlvbl9wb2xpY3kuZGVmYXVsdCkgOlxuICAgICAgICAobWV0YWRhdGFTb3VyY2UucmV0ZW50aW9uRGF5cyB8fCBNRU1PUllfQ09OU1RBTlRTLkRFRkFVTFRfUkVURU5USU9OX0RBWVMpLFxuICAgICAgcHJpdmFjeUxldmVsOiBtZXRhZGF0YVNvdXJjZS5wcml2YWN5X2xldmVsIHx8IG1ldGFkYXRhU291cmNlLnByaXZhY3lMZXZlbCB8fCBNRU1PUllfQ09OU1RBTlRTLkRFRkFVTFRfUFJJVkFDWV9MRVZFTCxcbiAgICAgIHNlYXJjaGFibGU6IG1ldGFkYXRhU291cmNlLnNlYXJjaGFibGUgIT09IGZhbHNlLFxuICAgICAgbWF4RW50cmllczogbWV0YWRhdGFTb3VyY2UubWF4RW50cmllcyB8fCBNRU1PUllfQ09OU1RBTlRTLk1BWF9FTlRSSUVTX0RFRkFVTFRcbiAgICB9O1xuXG4gICAgLy8gRXh0cmFjdCBjb250ZW50IChpZiBhbnkpXG4gICAgY29uc3QgY29udGVudCA9IHBhcnNlZC5jb250ZW50IHx8ICcnO1xuXG4gICAgcmV0dXJuIHsgbWV0YWRhdGEsIGNvbnRlbnQgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgdG8gcGFyc2UgcmV0ZW50aW9uIGRheXMgZnJvbSB2YXJpb3VzIGZvcm1hdHNcbiAgICovXG4gIHByaXZhdGUgcGFyc2VSZXRlbnRpb25EYXlzKHJldGVudGlvbjogc3RyaW5nIHwgbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAodHlwZW9mIHJldGVudGlvbiA9PT0gJ251bWJlcicpIHJldHVybiByZXRlbnRpb247XG4gICAgaWYgKHJldGVudGlvbiA9PT0gJ3Blcm1hbmVudCcgfHwgcmV0ZW50aW9uID09PSAncGVycGV0dWFsJykgcmV0dXJuIDk5OTk5OTtcbiAgICBjb25zdCBtYXRjaCA9IHJldGVudGlvbi5tYXRjaCgvKFxcZCspXFxzKmRheXM/L2kpO1xuICAgIHJldHVybiBtYXRjaCA/IHBhcnNlSW50KG1hdGNoWzFdKSA6IE1FTU9SWV9DT05TVEFOVFMuREVGQVVMVF9SRVRFTlRJT05fREFZUztcbiAgfVxufSJdfQ==
@@ -2,8 +2,8 @@
2
2
  * Auto-generated file - DO NOT EDIT
3
3
  * Generated at build time by scripts/generate-version.js
4
4
  */
5
- export declare const PACKAGE_VERSION = "1.9.6";
6
- export declare const BUILD_TIMESTAMP = "2025-09-20T16:07:40.778Z";
5
+ export declare const PACKAGE_VERSION = "1.9.8";
6
+ export declare const BUILD_TIMESTAMP = "2025-09-20T19:55:55.031Z";
7
7
  export declare const BUILD_TYPE: 'npm' | 'git';
8
8
  export declare const PACKAGE_NAME = "@dollhousemcp/mcp-server";
9
9
  //# sourceMappingURL=version.d.ts.map
@@ -2,8 +2,8 @@
2
2
  * Auto-generated file - DO NOT EDIT
3
3
  * Generated at build time by scripts/generate-version.js
4
4
  */
5
- export const PACKAGE_VERSION = '1.9.6';
6
- export const BUILD_TIMESTAMP = '2025-09-20T16:07:40.778Z';
5
+ export const PACKAGE_VERSION = '1.9.8';
6
+ export const BUILD_TIMESTAMP = '2025-09-20T19:55:55.031Z';
7
7
  export const BUILD_TYPE = 'npm';
8
8
  export const PACKAGE_NAME = '@dollhousemcp/mcp-server';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcxLjkuNic7XG5leHBvcnQgY29uc3QgQlVJTERfVElNRVNUQU1QID0gJzIwMjUtMDktMjBUMTY6MDc6NDAuNzc4Wic7XG5leHBvcnQgY29uc3QgQlVJTERfVFlQRTogJ25wbScgfCAnZ2l0JyA9ICducG0nO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAZG9sbGhvdXNlbWNwL21jcC1zZXJ2ZXInO1xuIl19
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcxLjkuOCc7XG5leHBvcnQgY29uc3QgQlVJTERfVElNRVNUQU1QID0gJzIwMjUtMDktMjBUMTk6NTU6NTUuMDMxWic7XG5leHBvcnQgY29uc3QgQlVJTERfVFlQRTogJ25wbScgfCAnZ2l0JyA9ICducG0nO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAZG9sbGhvdXNlbWNwL21jcC1zZXJ2ZXInO1xuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}