oxygen-cli 1.30.2 → 1.30.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v1.30.3 (2023-09-01)
4
+
5
+ #### :beetle: Bug Fix
6
+ * Fix broken `--rf` switch.
7
+
8
+ #### :nail_care: Polish
9
+ * Do not wrap strings logged with `log.*` commands in double quotes.
10
+
3
11
  ## v1.30.2 (2023-08-31)
4
12
 
5
13
  #### :beetle: Bug Fix
@@ -225,7 +225,10 @@ function getConfigurations(target, argv) {
225
225
  };
226
226
  }
227
227
 
228
- if (!projConfigOpts.reporting && !cmdOpts.reporting || !projConfigOpts.reporting.reporters && !cmdOpts.reporting) {
228
+ const isCmdOptsReportFormat = cmdOpts.reporting && cmdOpts.reporting.reporters;
229
+ const isConfigReportFormat = projConfigOpts.reporting && projConfigOpts.reporting.reporters;
230
+
231
+ if (!isCmdOptsReportFormat && !isConfigReportFormat) {
229
232
  if (!projConfigOpts.reporting) {
230
233
  projConfigOpts.reporting = {};
231
234
  }
@@ -347,4 +350,4 @@ function processTargetPath(targetPath, cwd) {
347
350
  extension: _path.default.extname(targetPath)
348
351
  };
349
352
  }
350
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2xpLXV0aWwuanMiXSwibmFtZXMiOlsiT1hZR0VOX0NPTkZJR19GSUxFX05BTUUiLCJPWFlHRU5fRU5WX0ZJTEVfTkFNRSIsIk9YWUdFTl9QQUdFX09CSkVDVF9GSUxFX05BTUUiLCJnZW5lcmF0ZVRlc3RPcHRpb25zIiwiY29uZmlnIiwiYXJndiIsIm9wdGlvbnMiLCJlbnYiLCJsb2FkRW52aXJvbm1lbnRWYXJpYWJsZXMiLCJwbyIsImdldFBhZ2VPYmplY3RGaWxlUGF0aCIsInN1aXRlcyIsImxvYWRTdWl0ZXMiLCJmcmFtZXdvcmsiLCJ0b0xvd2VyQ2FzZSIsInRhcmdldCIsImlzQ29uZmlnRmlsZSIsIm5hbWUiLCJpbmRleE9mIiwiZXh0ZW5zaW9uIiwicHVzaCIsIm94dXRpbCIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpTRmlsZSIsInBhdGgiLCJwYXJhbWV0ZXJzIiwiZmlsZSIsIm1vZGUiLCJpdGVyYXRpb25zIiwiZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbkZpbGUiLCJzdWl0ZURlZnMiLCJBcnJheSIsImlzQXJyYXkiLCJzdWl0ZXNGb2xkZXIiLCJqb2luIiwiY3dkIiwiZnMiLCJleGlzdHNTeW5jIiwibG9hZFN1aXRlRGVmaW5pdGlvbnNGcm9tRm9sZGVyIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsInN1aXRlRGVmIiwiZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbiIsInNlbGVjdGVkU3VpdGVOYW1lcyIsInNwbGl0IiwiZmlsdGVyIiwieCIsImluY2x1ZGVzIiwiZm9sZGVyUGF0aCIsImZpbGVzIiwicmVhZGRpclN5bmMiLCJleHRuYW1lIiwiZnVsbFBhdGgiLCJwb0ZpbGVOYW1lIiwicHJvY2VzcyIsInBvRmlsZVBhdGgiLCJyZXNvbHZlIiwiZSIsImVyciIsIkVycm9yIiwibWVzc2FnZSIsInN0YWNrIiwiZW52TmFtZSIsImVudmlyb25tZW50IiwiZGVmYXVsdEVudkZpbGUiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZWRpY2F0ZWRFbnZGaWxlSnMiLCJkZWRpY2F0ZWRFbnZGaWxlSnNvbiIsImdldEVudmlyb25tZW50cyIsInRhcmdldEN3ZCIsImdldENvbmZpZ3VyYXRpb25zIiwiREVGQVVMVF9PUFRTIiwiYnJvd3Nlck5hbWUiLCJzZWxlbml1bVVybCIsImFwcGl1bVVybCIsInJlb3BlblNlc3Npb24iLCJyZVJ1bk9uRmFpbGVkIiwiZGVidWdQb3J0IiwiZGVsYXkiLCJjb2xsZWN0RGV2aWNlTG9ncyIsImNvbGxlY3RBcHBpdW1Mb2dzIiwiY29sbGVjdEJyb3dzZXJMb2dzIiwicmVwb3J0aW5nIiwicmVwb3J0ZXJzIiwiY21kT3B0cyIsImdldENvbW1hbmRMaW5lT3B0aW9ucyIsInByb2pDb25maWdPcHRzIiwiZW52cyIsImJhc2VOYW1lIiwib3B0cyIsImIiLCJicm93c2VyIiwicyIsInNlcnZlciIsInJlb3BlbiIsImkiLCJwYXJzZUludCIsIml0ZXIiLCJkYmdwb3J0IiwiZCIsInJmIiwibGVuZ3RoIiwicmVwb3J0Rm9ybWF0cyIsInJvIiwib3V0cHV0RGlyIiwicCIsInBhcmFtIiwicG0iLCJzcGVjcyIsIm1vZHVsZXMiLCJkZWxldGVOdWxsUHJvcGVydGllcyIsIm9iaiIsImNsb25lIiwia2V5cyIsImtleSIsInVuZGVmaW5lZCIsInByb2Nlc3NUYXJnZXRQYXRoIiwidGFyZ2V0UGF0aCIsInJlc29sdmVQYXRoIiwic3RhdHMiLCJsc3RhdFN5bmMiLCJpc0RpcmVjdG9yIiwiaXNEaXJlY3RvcnkiLCJjb25maWdGaWxlUGF0aCIsImRpcm5hbWUiLCJnZXRGaWxlTmFtZVdpdGhvdXRFeHQiLCJmdWxsTmFtZSIsImJhc2VuYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVPLE1BQU1BLHVCQUF1QixHQUFHLGFBQWhDOztBQUNBLE1BQU1DLG9CQUFvQixHQUFHLFlBQTdCOztBQUNBLE1B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QUdDLFVBQUgsQ0FBYzBGLGNBQWQsQ0FBTCxFQUFvQztBQUNoQyxlQUFPLElBQVA7QUFDSDtBQUNKOztBQUNETixJQUFBQSxVQUFVLEdBQUdNLGNBQWI7QUFDSDs7QUFDRCxNQUFJLENBQUMzRixZQUFHQyxVQUFILENBQWNvRixVQUFkLENBQUwsRUFBZ0M7QUFDNUIsV0FBTyxJQUFQO0FBQ0g7O0FBQ0QsU0FBTztBQUVIakcsSUFBQUEsSUFBSSxFQUFFaUcsVUFGSDtBQUlIdEYsSUFBQUEsR0FBRyxFQUFFQSxHQUFHLElBQUlYLGNBQUt3RyxPQUFMLENBQWFQLFVBQWIsQ0FKVDtBQU1IdkcsSUFBQUEsSUFBSSxFQUFFSSxjQUFPMkcscUJBQVAsQ0FBNkJSLFVBQTdCLENBTkg7QUFRSFMsSUFBQUEsUUFBUSxFQUFFMUcsY0FBSzJHLFFBQUwsQ0FBY1YsVUFBZCxDQVJQO0FBVUg3QixJQUFBQSxRQUFRLEVBQUVwRSxjQUFLMkcsUUFBTCxDQUFjM0csY0FBS3dHLE9BQUwsQ0FBYVAsVUFBYixDQUFkLENBVlA7QUFZSHJHLElBQUFBLFNBQVMsRUFBRUksY0FBSzRCLE9BQUwsQ0FBYXFFLFVBQWI7QUFaUixHQUFQO0FBY0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcclxuaW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IG94dXRpbCBmcm9tICcuL3V0aWwnO1xyXG5pbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnYXN5bmMnO1xyXG5pbXBvcnQgbW9kdWxlUmVxdWlyZSBmcm9tICcuL21vZHVsZVJlcXVpcmUnO1xyXG5cclxuZXhwb3J0IGNvbnN0IE9YWUdFTl9DT05GSUdfRklMRV9OQU1FID0gJ294eWdlbi5jb25mJztcclxuZXhwb3J0IGNvbnN0IE9YWUdFTl9FTlZfRklMRV9OQU1FID0gJ294eWdlbi5lbnYnO1xyXG5leHBvcnQgY29uc3QgT1hZR0VOX1BBR0VfT0JKRUNUX0ZJTEVfTkFNRSA9ICdveHlnZW4ucG8nO1xyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlVGVzdE9wdGlvbnMoY29uZmlnLCBhcmd2KSB7XHJcbiAgICBjb25zdCBvcHRpb25zID0geyAuLi5jb25maWcgfTtcclxuICAgIG9wdGlvbnMuZW52ID0gbG9hZEVudmlyb25tZW50VmFyaWFibGVzKGNvbmZpZywgYXJndik7XHJcbiAgICBvcHRpb25zLnBvID0gZ2V0UGFnZU9iamVjdEZpbGVQYXRoKGNvbmZpZywgYXJndik7XHJcbiAgICBvcHRpb25zLnN1aXRlcyA9IGF3YWl0IGxvYWRTdWl0ZXMoY29uZmlnLCBhcmd2KTtcclxuICAgIHJldHVybiBvcHRpb25zO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFN1aXRlcyhjb25maWcsIGFyZ3YpIHtcclxuICAgIGlmIChjb25maWcuZnJhbWV3b3JrICYmIHR5cGVvZiBjb25maWcuZnJhbWV3b3JrID09PSAnc3RyaW5nJyAmJiBjb25maWcuZnJhbWV3b3JrLnRvTG93ZXJDYXNlKCkgIT09ICdveHlnZW4nKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgeyB0YXJnZXQgfSA9IGNvbmZpZztcclxuICAgIGNvbnN0IGlzQ29uZmlnRmlsZSA9IHRhcmdldCAmJiB0YXJnZXQubmFtZSAmJiB0YXJnZXQubmFtZS5pbmRleE9mKE9YWUdFTl9DT05GSUdfRklMRV9OQU1FKSA9PT0gMDtcclxuICAgIGxldCBzdWl0ZXMgPSBbXTtcclxuICAgIC8vIGlmIGFuIGluZGl2aWR1YWwgc2NyaXB0IG9yIHN1aXRlIGZpbGUgd2FzIHBhc3NlZFxyXG4gICAgaWYgKCFpc0NvbmZpZ0ZpbGUpIHtcclxuICAgICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5leHRlbnNpb24gPT09ICcuanMnKSB7XHJcbiAgICAgICAgICAgIHN1aXRlcy5wdXNoKGF3YWl0IG94dXRpbC5nZW5lcmF0ZVRlc3RTdWl0ZUZyb21KU0ZpbGUodGFyZ2V0LnBhdGgsIGNvbmZpZy5wYXJhbWV0ZXJzLmZpbGUsIGNvbmZpZy5wYXJhbWV0ZXJzLm1vZGUsIGZhbHNlLCBjb25maWcuaXRlcmF0aW9ucyB8fCAxKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRhcmdldCAmJiB0YXJnZXQuZXh0ZW5zaW9uID09PSAnLmpzb24nKSB7XHJcbiAgICAgICAgICAgIHN1aXRlcy5wdXNoKGF3YWl0IG94dXRpbC5nZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uRmlsZSh0YXJnZXQucGF0aCwgY29uZmlnLnBhcmFtZXRlcnMuZmlsZSwgY29uZmlnLnBhcmFtZXRlcnMubW9kZSwgY29uZmlnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gaWYgYSBmb2xkZXIgb3IgYSBjb25maWd1cmF0aW9uIGZpbGUgd2FzIHBhc3NlZFxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgbGV0IHN1aXRlRGVmcyA9IFtdO1xyXG4gICAgICAgIGlmIChjb25maWcuc3VpdGVzICYmIEFycmF5LmlzQXJyYXkoY29uZmlnLnN1aXRlcykpIHtcclxuICAgICAgICAgICAgc3VpdGVEZWZzID0gY29uZmlnLnN1aXRlcztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY2hlY2sgaWYgbW9yZSBzdWl0ZXMgYXJlIGRlZmluZWQgaW4gdGhlICdzdWl0ZXMnIGZvbGRlclxyXG4gICAgICAgIGNvbnN0IHN1aXRlc0ZvbGRlciA9IHBhdGguam9pbih0YXJnZXQuY3dkLCAnc3VpdGVzJyk7XHJcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoc3VpdGVzRm9sZGVyKSkge1xyXG4gICAgICAgICAgICBzdWl0ZURlZnMgPSBbXHJcbiAgICAgICAgICAgICAgICAuLi5zdWl0ZURlZnMsXHJcbiAgICAgICAgICAgICAgICAuLi5sb2FkU3VpdGVEZWZpbml0aW9uc0Zyb21Gb2xkZXIoc3VpdGVzRm9sZGVyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBtZXJnZSBzdWl0ZXMgY29uZmlndXJlZCBpbiB0aGUgcHJvamVjdCBjb25maWcgZmlsZSBhbmQgdGhvc2UgZm91bmQgaW4gJ3N1aXRlcycgZm9sZGVyXHJcbiAgICAgICAgc3VpdGVzID0gYXdhaXQgUHJvbWlzZS5hbGwoc3VpdGVEZWZzLm1hcChhc3luYyAoc3VpdGVEZWYpID0+IGF3YWl0IG94dXRpbC5nZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uKHN1aXRlRGVmLCBjb25maWcpKSk7XHJcbiAgICB9XHJcbiAgICAvLyBmaWx0ZXIgb3V0IHN1aXRlcyBpZiAnLS1zdWl0ZXMnIGNvbW1hbmQgbGluZSBhcmd1bWVudCB3YXMgc3BlY2lmaWVkXHJcbiAgICBpZiAoYXJndi5zdWl0ZXMgJiYgdHlwZW9mIGFyZ3Yuc3VpdGVzID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkU3VpdGVOYW1lcyA9IGFyZ3Yuc3VpdGVzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgc3VpdGVzID0gc3VpdGVzLmZpbHRlcih4ID0+IHNlbGVjdGVkU3VpdGVOYW1lcy5pbmNsdWRlcyh4Lm5hbWUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdWl0ZXM7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkU3VpdGVEZWZpbml0aW9uc0Zyb21Gb2xkZXIoZm9sZGVyUGF0aCkge1xyXG4gICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhmb2xkZXJQYXRoKTtcclxuICAgIGxldCBzdWl0ZURlZnMgPSBbXTtcclxuICAgIGZvckVhY2goZmlsZXMsIGZpbGUgPT4ge1xyXG4gICAgICAgIGlmIChwYXRoLmV4dG5hbWUoZmlsZSkgPT09ICcuanNvbicpIHtcclxuICAgICAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4oZm9sZGVyUGF0aCwgZmlsZSk7XHJcbiAgICAgICAgICAgIHN1aXRlRGVmcy5wdXNoKG1vZHVsZVJlcXVpcmUoZnVsbFBhdGgpKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBzdWl0ZURlZnM7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWdlT2JqZWN0RmlsZVBhdGgoY29uZmlnLCBhcmd2ID0ge30pIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGNvbmZpZy50YXJnZXQgfHwge307XHJcbiAgICBjb25zdCBwb0ZpbGVOYW1lID0gYXJndi5wbyB8fCBgJHtPWFlHRU5fUEFHRV9PQkpFQ1RfRklMRV9OQU1FfS5qc2A7XHJcbiAgICBjb25zdCBjd2QgPSB0YXJnZXQuY3dkIHx8IHByb2Nlc3MuY3dkKCk7XHJcbiAgICBsZXQgcG9GaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShjd2QsIHBvRmlsZU5hbWUpO1xyXG4gICAgcG9GaWxlUGF0aCA9IGZzLmV4aXN0c1N5bmMocG9GaWxlUGF0aCkgPyBwb0ZpbGVQYXRoIDogbnVsbDtcclxuXHJcbiAgICBpZiAocG9GaWxlUGF0aCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIG1vZHVsZVJlcXVpcmUocG9GaWxlUGF0aCk7XHJcbiAgICAgICAgICAgIHJldHVybiBwb0ZpbGVQYXRoO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBmaWxlOiAke3BvRmlsZVBhdGh9LiBSZWFzb246ICR7ZS5tZXNzYWdlfSAke2Uuc3RhY2t9YCk7XHJcbiAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZEVudmlyb25tZW50VmFyaWFibGVzKGNvbmZpZywgYXJndikge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gY29uZmlnLnRhcmdldCB8fCB7fTtcclxuICAgIGNvbnN0IGVudk5hbWUgPSBhcmd2LmVudiB8fCBjb25maWcuZW52aXJvbm1lbnQgfHwgJ2RlZmF1bHQnO1xyXG4gICAgY29uc3QgY3dkID0gdGFyZ2V0LmN3ZCB8fCBwcm9jZXNzLmN3ZCgpO1xyXG4gICAgY29uc3QgZGVmYXVsdEVudkZpbGUgPSBwYXRoLmpvaW4oY3dkLCBgJHtPWFlHRU5fRU5WX0ZJTEVfTkFNRX0uanNgKTtcclxuICAgIGlmIChmcy5leGlzdHNTeW5jKGRlZmF1bHRFbnZGaWxlKSkge1xyXG4gICAgICAgIGNvbnN0IGVudiA9IG1vZHVsZVJlcXVpcmUoZGVmYXVsdEVudkZpbGUpO1xyXG4gICAgICAgIGlmIChlbnYgJiYgdHlwZW9mIGVudiA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVudiwgZW52TmFtZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVudltlbnZOYW1lXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyB0cnkgdG8gcmVzb2x2ZSBhIGRlZGljYXRlZCBlbnZpcm9ubWVudCBmaWxlIGluICdlbnYnIHN1YiBmb2xkZXJcclxuICAgIGNvbnN0IGRlZGljYXRlZEVudkZpbGVKcyA9IHBhdGguam9pbihjd2QsICdlbnYnLCBgJHtlbnZOYW1lfS5qc2ApO1xyXG4gICAgY29uc3QgZGVkaWNhdGVkRW52RmlsZUpzb24gPSBwYXRoLmpvaW4oY3dkLCAnZW52JywgYCR7ZW52TmFtZX0uanNvbmApO1xyXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoZGVkaWNhdGVkRW52RmlsZUpzKSkge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGVSZXF1aXJlKGRlZGljYXRlZEVudkZpbGVKcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmcy5leGlzdHNTeW5jKGRlZGljYXRlZEVudkZpbGVKc29uKSkge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGVSZXF1aXJlKGRlZGljYXRlZEVudkZpbGVKc29uKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7fTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudmlyb25tZW50cyh0YXJnZXQpIHtcclxuICAgIGxldCB0YXJnZXRDd2QgPSBudWxsO1xyXG5cclxuICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmN3ZCkge1xyXG4gICAgICAgIHRhcmdldEN3ZCA9IHRhcmdldC5jd2Q7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3dkID0gdGFyZ2V0Q3dkIHx8IHByb2Nlc3MuY3dkKCk7XHJcbiAgICBjb25zdCBkZWZhdWx0RW52RmlsZSA9IHBhdGguam9pbihjd2QsIGAke09YWUdFTl9FTlZfRklMRV9OQU1FfS5qc2ApO1xyXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoZGVmYXVsdEVudkZpbGUpKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIG1vZHVsZVJlcXVpcmUoZGVmYXVsdEVudkZpbGUpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBmaWxlOiAke2RlZmF1bHRFbnZGaWxlfS4gUmVhc29uOiAke2UubWVzc2FnZX0gJHtlLnN0YWNrfWApO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHt9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlndXJhdGlvbnModGFyZ2V0LCBhcmd2KSB7XHJcbiAgICAvLyBwcm9jZXNzIGNvbW1hbmQgbGluZSBhcmd1bWVudHNcclxuICAgIGxldCB0YXJnZXRDd2QgPSBudWxsO1xyXG5cclxuICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmN3ZCkge1xyXG4gICAgICAgIHRhcmdldEN3ZCA9IHRhcmdldC5jd2Q7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgREVGQVVMVF9PUFRTID0ge1xyXG4gICAgICAgIGN3ZDogdGFyZ2V0ID8gKHRhcmdldEN3ZCB8fCBwcm9jZXNzLmN3ZCgpKSA6IHByb2Nlc3MuY3dkKCksXHJcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXHJcbiAgICAgICAgYnJvd3Nlck5hbWU6ICdjaHJvbWUnLFxyXG4gICAgICAgIHNlbGVuaXVtVXJsIDogJ2h0dHA6Ly9sb2NhbGhvc3Q6NDQ0NC93ZC9odWInLFxyXG4gICAgICAgIGFwcGl1bVVybCA6ICdodHRwOi8vbG9jYWxob3N0OjQ3MjMvd2QvaHViJyxcclxuICAgICAgICByZW9wZW5TZXNzaW9uOiBmYWxzZSxcclxuICAgICAgICByZVJ1bk9uRmFpbGVkOiBmYWxzZSxcclxuICAgICAgICBpdGVyYXRpb25zIDogMSxcclxuICAgICAgICBkZWJ1Z1BvcnQ6IG51bGwsXHJcbiAgICAgICAgZGVsYXk6IG51bGwsXHJcbiAgICAgICAgY29sbGVjdERldmljZUxvZ3M6IGZhbHNlLFxyXG4gICAgICAgIGNvbGxlY3RBcHBpdW1Mb2dzOiBmYWxzZSxcclxuICAgICAgICBjb2xsZWN0QnJvd3NlckxvZ3M6IGZhbHNlLFxyXG4gICAgICAgIHJlcG9ydGluZzoge1xyXG4gICAgICAgICAgICByZXBvcnRlcnM6IFsnaHRtbCddXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwYXJhbWV0ZXJzIDoge1xyXG4gICAgICAgICAgICBmaWxlOiBudWxsLFxyXG4gICAgICAgICAgICBtb2RlOiAnc2VxJ1xyXG4gICAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgLy8gcmV0cmlldmUgb3B0aW9ucyBwcm92aWRlZCB2aWEgY29tbWFuZCBsaW5lIGFyZ3VtZW50c1xyXG4gICAgY29uc3QgY21kT3B0cyA9IGdldENvbW1hbmRMaW5lT3B0aW9ucyhhcmd2KTtcclxuICAgIC8vIGlmIHRoZSB0YXJnZXQgaXMgb3h5Z2VuIGNvbmZpZyBmaWxlLCBtZXJnZSBpdHMgY29udGVudCB3aXRoIHRoZSBkZWZhdWx0IG9wdGlvbnNcclxuICAgIGxldCBwcm9qQ29uZmlnT3B0cyA9IHt9O1xyXG4gICAgaWYgKHRhcmdldCAmJiB0YXJnZXQubmFtZSA9PT0gT1hZR0VOX0NPTkZJR19GSUxFX05BTUUgJiYgKHRhcmdldC5leHRlbnNpb24gPT09ICcuanMnIHx8IHRhcmdldC5leHRlbnNpb24gPT09ICcuanNvbicpKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcHJvakNvbmZpZ09wdHMgPSBtb2R1bGVSZXF1aXJlKHRhcmdldC5wYXRoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgVW5hYmxlIHRvIGxvYWQgZmlsZTogJHt0YXJnZXQucGF0aH0uIFJlYXNvbjogJHtlLm1lc3NhZ2V9ICR7ZS5zdGFja31gKTtcclxuICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGVudnMgPSBnZXRFbnZpcm9ubWVudHModGFyZ2V0KTtcclxuXHJcbiAgICBpZiAocHJvakNvbmZpZ09wdHMuZW52cykge1xyXG4gICAgICAgIC8vIG1lcmdlIGV4dGVybmFsIGVudmlyb25tZW50cyBkZWZpbml0aW9uIHdpdGggdGhlIG9uZSBpbiB0aGUgY29uZmlnIGZpbGVcclxuICAgICAgICBwcm9qQ29uZmlnT3B0cy5lbnZzID0geyAuLi5wcm9qQ29uZmlnT3B0cy5lbnZzLCAuLi5lbnZzIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBwcm9qQ29uZmlnT3B0cyA9IHsgLi4ucHJvakNvbmZpZ09wdHMsIGVudnM6IGVudnMgfTtcclxuICAgIH1cclxuICAgIC8vIG1ha2Ugc3VyZSB0byBzZXQgZGVmYXVsdCBIVE1MIHJlcG9ydGVyIGlmIHJlcG9ydGluZyBvcHRpb25zIGFyZSBub3QgcHJvdmlkZWQgaW4gb3h5Z2VuLmNvbmYgZmlsZSBhbmQgdmlhIGNvbW1hbmQgbGluZVxyXG4gICAgaWYgKCghcHJvakNvbmZpZ09wdHMucmVwb3J0aW5nICYmICFjbWRPcHRzLnJlcG9ydGluZykgfHwgKCFwcm9qQ29uZmlnT3B0cy5yZXBvcnRpbmcucmVwb3J0ZXJzICYmICFjbWRPcHRzLnJlcG9ydGluZykpIHtcclxuICAgICAgICBpZiAoIXByb2pDb25maWdPcHRzLnJlcG9ydGluZykge1xyXG4gICAgICAgICAgICBwcm9qQ29uZmlnT3B0cy5yZXBvcnRpbmcgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcHJvakNvbmZpZ09wdHMucmVwb3J0aW5nLnJlcG9ydGVycyA9IFsnaHRtbCddO1xyXG4gICAgfVxyXG4gICAgLy8gZGV0ZXJtaW5lIHRlc3QgbmFtZVxyXG4gICAgbGV0IG5hbWUgPSBjbWRPcHRzLm5hbWUgfHwgcHJvakNvbmZpZ09wdHMubmFtZSB8fCBudWxsO1xyXG4gICAgaWYgKCFuYW1lICYmIHRhcmdldCkge1xyXG4gICAgICAgIG5hbWUgPSB0YXJnZXQubmFtZSAhPT0gT1hZR0VOX0NPTkZJR19GSUxFX05BTUUgPyB0YXJnZXQubmFtZSA6IHRhcmdldC5iYXNlTmFtZTtcclxuICAgIH1cclxuICAgIC8vIG1lcmdlIG9wdGlvbnMgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgb3JkZXIgKHRoZSBsYXN0IG9uZSBvdmVycmlkZXMgdGhlIHByZXZpb3VzIG9uZSk6XHJcbiAgICAvLyBkZWZhdWx0IG9wdGlvbnMsIHByb2plY3QgY29uZmlnIGZpbGUsIGNvbW1hbmQgbGluZSBhcmd1bWVudHNcclxuICAgIHJldHVybiB7IC4uLkRFRkFVTFRfT1BUUywgLi4ucHJvakNvbmZpZ09wdHMsIC4uLmNtZE9wdHMsIG5hbWU6IG5hbWUgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbW1hbmRMaW5lT3B0aW9ucyhhcmd2KSB7XHJcbiAgICBjb25zdCBvcHRzID0ge1xyXG4gICAgICAgIC8vIHN3aXRjaDogLS1uYW1lIFxyXG4gICAgICAgIG5hbWU6IGFyZ3YubmFtZSB8fCBudWxsLFxyXG4gICAgICAgIC8vIHN3aXRjaDogLWIgb3IgLS1icm93c2VyXHJcbiAgICAgICAgYnJvd3Nlck5hbWUgOiBhcmd2LmIgfHwgYXJndi5icm93c2VyIHx8IG51bGwsXHJcbiAgICAgICAgc2VsZW5pdW1VcmwgOiBhcmd2LnMgfHwgYXJndi5zZXJ2ZXIgfHwgbnVsbCxcclxuICAgICAgICBhcHBpdW1VcmwgOiBhcmd2LnMgfHwgYXJndi5zZXJ2ZXIgfHwgbnVsbCxcclxuICAgICAgICByZW9wZW5TZXNzaW9uOiBhcmd2LnJlb3BlbiA/IGFyZ3YucmVvcGVuID09PSAndHJ1ZScgOiBudWxsLFxyXG4gICAgICAgIGl0ZXJhdGlvbnMgOiBhcmd2LmkgPyBwYXJzZUludChhcmd2LmkpIDogKGFyZ3YuaXRlciA/IHBhcnNlSW50KGFyZ3YuaXRlcikgOiBudWxsKSxcclxuICAgICAgICBkZWJ1Z1BvcnQ6IGFyZ3YuZGJncG9ydCB8fCBudWxsLFxyXG4gICAgICAgIGRlbGF5OiBhcmd2LmQgfHwgYXJndi5kZWxheSB8fCBudWxsLFxyXG4gICAgfTtcclxuICAgIC8vIHN3aXRjaDogLS1yZiBmbGFnXHJcbiAgICBpZiAoYXJndi5yZiAmJiB0eXBlb2YgYXJndi5yZiA9PT0gJ3N0cmluZycgJiYgYXJndi5yZi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgcmVwb3J0Rm9ybWF0cyA9IGFyZ3YucmYuc3BsaXQoJywnKTtcclxuICAgICAgICBvcHRzLnJlcG9ydGluZyA9IHtcclxuICAgICAgICAgICAgcmVwb3J0ZXJzOiByZXBvcnRGb3JtYXRzXHJcbiAgICAgICAgfTtcclxuICAgICAgICAvLyBzd2l0Y2g6IC0tcm8gLSBzZXQgcmVwb3J0ZXIgb3V0cHV0IGRpcmVjdG9yeSBpZiBzZXQgYnkgdXNlciB0aHJvdWdoIGNvbW5hbmQgbGluZVxyXG4gICAgICAgIC8vIE5PVEU6IC0tcm8gc3dpdGNoIG11c3QgYmUgc3BlY2lmaWVkIHRvZ2V0aGVyIHdpdGggLS1yZlxyXG4gICAgICAgIGlmIChhcmd2LnJvICYmIHR5cGVvZiBhcmd2LnJvID09PSAnc3RyaW5nJyAmJiBhcmd2LnJvLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgb3B0cy5yZXBvcnRpbmcub3V0cHV0RGlyID0gYXJndi5ybztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBvcHRpb246IC1wIG9yIC0tcGFyYW0gYW5kIC0tcG1cclxuICAgIGlmIChhcmd2LnAgfHwgYXJndi5wYXJhbSkge1xyXG4gICAgICAgIG9wdHMucGFyYW1ldGVycyA9IHtcclxuICAgICAgICAgICAgZmlsZTogYXJndi5wIHx8IGFyZ3YucGFyYW0gfHwgbnVsbCxcclxuICAgICAgICAgICAgbW9kZTogYXJndi5wbSB8fCAnc2VxJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc3dpdGNoOiAtLXNwZWNzIC0gc2V0IHNwZWNzIGlmIHNldCBieSB1c2VyIHRocm91Z2ggY29tbmFuZCBsaW5lXHJcbiAgICBpZiAoYXJndi5zcGVjcyAmJiB0eXBlb2YgYXJndi5zcGVjcyA9PT0gJ3N0cmluZycgJiYgYXJndi5zcGVjcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3Qgc3BlY3MgPSBhcmd2LnNwZWNzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgb3B0cy5zcGVjcyA9IHNwZWNzO1xyXG4gICAgfVxyXG4gICAgLy8gc3dpdGNoOiAtLW1vZHVsZXMgLSBzZXQgYSBsaXN0IG9mIG1vZHVsZXMgdG8gYmUgbG9hZGVkLCBpZiBzZXQgYnkgdXNlciB0aHJvdWdoIGNvbW5hbmQgbGluZVxyXG4gICAgaWYgKGFyZ3YubW9kdWxlcyAmJiB0eXBlb2YgYXJndi5tb2R1bGVzID09PSAnc3RyaW5nJyAmJiBhcmd2Lm1vZHVsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IG1vZHVsZXMgPSBhcmd2Lm1vZHVsZXMuc3BsaXQoJywnKTtcclxuICAgICAgICBvcHRzLm1vZHVsZXMgPSBtb2R1bGVzO1xyXG4gICAgfVxyXG4gICAgLy8gcmVtb3ZlIGFueSBwcm9wZXJ0eSB3aXRoIG51bGwgdmFsdWUgKHNvIGl0IHdvbid0IG92ZXJyaWRlIGRlZmF1bHQgdmFsdWVzIGlmIGl0J3MgbnVsbClcclxuICAgIHJldHVybiBkZWxldGVOdWxsUHJvcGVydGllcyhvcHRzKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZGVsZXRlTnVsbFByb3BlcnRpZXMob2JqKSB7XHJcbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2xvbmUgPSB7IC4uLm9iaiB9O1xyXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XHJcbiAgICBmb3JFYWNoIChrZXlzLCBrZXkgPT4ge1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpICYmIChvYmpba2V5XSA9PSBudWxsIHx8IG9ialtrZXldID09IHVuZGVmaW5lZCkpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGNsb25lW2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzVGFyZ2V0UGF0aCh0YXJnZXRQYXRoLCBjd2QpIHtcclxuICAgIC8vIGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlmIHVzZXIgaGFzIG5vdCBwcm92aWRlZCBwYXRoXHJcbiAgICBpZiAodHlwZW9mKHRhcmdldFBhdGgpID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHRhcmdldFBhdGggPSBjd2QgfHwgcHJvY2Vzcy5jd2QoKTtcclxuICAgIH1cclxuICAgIC8vIHVzZXIncyBwYXRoIG1pZ2h0IGJlIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IC0gbWFrZSBzdXJlIHRoZSByZWxhdGl2ZSBwYXRoIHdpbGwgd29ya1xyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGFyZ2V0UGF0aCA9IG94dXRpbC5yZXNvbHZlUGF0aCh0YXJnZXRQYXRoLCBjd2QgfHwgcHJvY2Vzcy5jd2QoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHRhcmdldFBhdGgpKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RhdHMgPSBmcy5sc3RhdFN5bmModGFyZ2V0UGF0aCk7XHJcbiAgICBjb25zdCBpc0RpcmVjdG9yID0gc3RhdHMuaXNEaXJlY3RvcnkoKTtcclxuICAgIGlmIChpc0RpcmVjdG9yKSB7XHJcbiAgICAgICAgLy8gYXBwZW5kIG94eWdlbiBjb25maWcgZmlsZSBuYW1lIHRvIHRoZSBkaXJlY3RvcnksIGlmIG5vIHRlc3QgY2FzZSBmaWxlIHdhcyBwcm92aWRlZFxyXG4gICAgICAgIGxldCBjb25maWdGaWxlUGF0aCA9IHBhdGguam9pbih0YXJnZXRQYXRoLCBPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSArICcuanMnKTtcclxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoY29uZmlnRmlsZVBhdGgpKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZ0ZpbGVQYXRoID0gcGF0aC5qb2luKHRhcmdldFBhdGgsIE9YWUdFTl9DT05GSUdfRklMRV9OQU1FICsgJy5qc29uJyk7XHJcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhjb25maWdGaWxlUGF0aCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRhcmdldFBhdGggPSBjb25maWdGaWxlUGF0aDtcclxuICAgIH1cclxuICAgIGlmICghZnMuZXhpc3RzU3luYyh0YXJnZXRQYXRoKSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICAvLyBwYXRoIHRvIHRoZSBjb25maWcgb3IgLmpzIGZpbGVcclxuICAgICAgICBwYXRoOiB0YXJnZXRQYXRoLFxyXG4gICAgICAgIC8vIHdvcmtpbmcgZGlyZWN0b3J5XHJcbiAgICAgICAgY3dkOiBjd2QgfHwgcGF0aC5kaXJuYW1lKHRhcmdldFBhdGgpLFxyXG4gICAgICAgIC8vIG5hbWUgb2YgdGhlIHRhcmdldCBmaWxlIHdpdGhvdXQgZXh0ZW5zaW9uXHJcbiAgICAgICAgbmFtZTogb3h1dGlsLmdldEZpbGVOYW1lV2l0aG91dEV4dCh0YXJnZXRQYXRoKSxcclxuICAgICAgICAvLyBuYW1lIGluY2x1ZGluZyBleHRlbnNpb25cclxuICAgICAgICBmdWxsTmFtZTogcGF0aC5iYXNlbmFtZSh0YXJnZXRQYXRoKSxcclxuICAgICAgICAvLyBwYXJlbnQgZm9sZGVyJ3MgbmFtZVxyXG4gICAgICAgIGJhc2VOYW1lOiBwYXRoLmJhc2VuYW1lKHBhdGguZGlybmFtZSh0YXJnZXRQYXRoKSksXHJcbiAgICAgICAgLy8gdGFyZ2V0IGZpbGUgZXh0ZW5zaW9uXHJcbiAgICAgICAgZXh0ZW5zaW9uOiBwYXRoLmV4dG5hbWUodGFyZ2V0UGF0aClcclxuICAgIH07XHJcbn0iXX0=
353
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2xpLXV0aWwuanMiXSwibmFtZXMiOlsiT1hZR0VOX0NPTkZJR19GSUxFX05BTUUiLCJPWFlHRU5fRU5WX0ZJTEVfTkFNRSIsIk9YWUdFTl9QQUdFX09CSkVDVF9GSUxFX05BTUUiLCJnZW5lcmF0ZVRlc3RPcHRpb25zIiwiY29uZmlnIiwiYXJndiIsIm9wdGlvbnMiLCJlbnYiLCJsb2FkRW52aXJvbm1lbnRWYXJpYWJsZXMiLCJwbyIsImdldFBhZ2VPYmplY3RGaWxlUGF0aCIsInN1aXRlcyIsImxvYWRTdWl0ZXMiLCJmcmFtZXdvcmsiLCJ0b0xvd2VyQ2FzZSIsInRhcmdldCIsImlzQ29uZmlnRmlsZSIsIm5hbWUiLCJpbmRleE9mIiwiZXh0ZW5zaW9uIiwicHVzaCIsIm94dXRpbCIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpTRmlsZSIsInBhdGgiLCJwYXJhbWV0ZXJzIiwiZmlsZSIsIm1vZGUiLCJpdGVyYXRpb25zIiwiZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbkZpbGUiLCJzdWl0ZURlZnMiLCJBcnJheSIsImlzQXJyYXkiLCJzdWl0ZXNGb2xkZXIiLCJqb2luIiwiY3dkIiwiZnMiLCJleGlzdHNTeW5jIiwibG9hZFN1aXRlRGVmaW5pdGlvbnNGcm9tRm9sZGVyIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsInN1aXRlRGVmIiwiZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbiIsInNlbGVjdGVkU3VpdGVOYW1lcyIsInNwbGl0IiwiZmlsdGVyIiwieCIsImluY2x1ZGVzIiwiZm9sZGVyUGF0aCIsImZpbGVzIiwicmVhZGRpclN5bmMiLCJleHRuYW1lIiwiZnVsbFBhdGgiLCJwb0ZpbGVOYW1lIiwicHJvY2VzcyIsInBvRmlsZVBhdGgiLCJyZXNvbHZlIiwiZSIsImVyciIsIkVycm9yIiwibWVzc2FnZSIsInN0YWNrIiwiZW52TmFtZSIsImVudmlyb25tZW50IiwiZGVmYXVsdEVudkZpbGUiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZWRpY2F0ZWRFbnZGaWxlSnMiLCJkZWRpY2F0ZWRFbnZGaWxlSnNvbiIsImdldEVudmlyb25tZW50cyIsInRhcmdldEN3ZCIsImdldENvbmZpZ3VyYXRpb25zIiwiREVGQVVMVF9PUFRTIiwiYnJvd3Nlck5hbWUiLCJzZWxlbml1bVVybCIsImFwcGl1bVVybCIsInJlb3BlblNlc3Npb24iLCJyZVJ1bk9uRmFpbGVkIiwiZGVidWdQb3J0IiwiZGVsYXkiLCJjb2xsZWN0RGV2aWNlTG9ncyIsImNvbGxlY3RBcHBpdW1Mb2dzIiwiY29sbGVjdEJyb3dzZXJMb2dzIiwicmVwb3J0aW5nIiwicmVwb3J0ZXJzIiwiY21kT3B0cyIsImdldENvbW1hbmRMaW5lT3B0aW9ucyIsInByb2pDb25maWdPcHRzIiwiZW52cyIsImlzQ21kT3B0c1JlcG9ydEZvcm1hdCIsImlzQ29uZmlnUmVwb3J0Rm9ybWF0IiwiYmFzZU5hbWUiLCJvcHRzIiwiYiIsImJyb3dzZXIiLCJzIiwic2VydmVyIiwicmVvcGVuIiwiaSIsInBhcnNlSW50IiwiaXRlciIsImRiZ3BvcnQiLCJkIiwicmYiLCJsZW5ndGgiLCJyZXBvcnRGb3JtYXRzIiwicm8iLCJvdXRwdXREaXIiLCJwIiwicGFyYW0iLCJwbSIsInNwZWNzIiwibW9kdWxlcyIsImRlbGV0ZU51bGxQcm9wZXJ0aWVzIiwib2JqIiwiY2xvbmUiLCJrZXlzIiwia2V5IiwidW5kZWZpbmVkIiwicHJvY2Vzc1RhcmdldFBhdGgiLCJ0YXJnZXRQYXRoIiwicmVzb2x2ZVBhdGgiLCJzdGF0cyIsImxzdGF0U3luYyIsImlzRGlyZWN0b3IiLCJpc0RpcmVjdG9yeSIsImNvbmZpZ0ZpbGVQYXRoIiwiZGlybmFtZSIsImdldEZpbGVOYW1lV2l0aG91dEV4dCIsImZ1bGxOYW1lIiwiYmFzZW5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRU8sTUFBTUEsdUJBQXVCLEdB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QUwsRUFBb0M7QUFDaENBLE1BQUFBLGNBQWMsR0FBR3pHLGNBQUtVLElBQUwsQ0FBVXlGLFVBQVYsRUFBc0IxSCx1QkFBdUIsR0FBRyxPQUFoRCxDQUFqQjs7QUFDQSxVQUFJLENBQUNtQyxZQUFHQyxVQUFILENBQWM0RixjQUFkLENBQUwsRUFBb0M7QUFDaEMsZUFBTyxJQUFQO0FBQ0g7QUFDSjs7QUFDRE4sSUFBQUEsVUFBVSxHQUFHTSxjQUFiO0FBQ0g7O0FBQ0QsTUFBSSxDQUFDN0YsWUFBR0MsVUFBSCxDQUFjc0YsVUFBZCxDQUFMLEVBQWdDO0FBQzVCLFdBQU8sSUFBUDtBQUNIOztBQUNELFNBQU87QUFFSG5HLElBQUFBLElBQUksRUFBRW1HLFVBRkg7QUFJSHhGLElBQUFBLEdBQUcsRUFBRUEsR0FBRyxJQUFJWCxjQUFLMEcsT0FBTCxDQUFhUCxVQUFiLENBSlQ7QUFNSHpHLElBQUFBLElBQUksRUFBRUksY0FBTzZHLHFCQUFQLENBQTZCUixVQUE3QixDQU5IO0FBUUhTLElBQUFBLFFBQVEsRUFBRTVHLGNBQUs2RyxRQUFMLENBQWNWLFVBQWQsQ0FSUDtBQVVIN0IsSUFBQUEsUUFBUSxFQUFFdEUsY0FBSzZHLFFBQUwsQ0FBYzdHLGNBQUswRyxPQUFMLENBQWFQLFVBQWIsQ0FBZCxDQVZQO0FBWUh2RyxJQUFBQSxTQUFTLEVBQUVJLGNBQUs0QixPQUFMLENBQWF1RSxVQUFiO0FBWlIsR0FBUDtBQWNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBmcyBmcm9tICdmcyc7XHJcbmltcG9ydCBveHV0aWwgZnJvbSAnLi91dGlsJztcclxuaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gJ2FzeW5jJztcclxuaW1wb3J0IG1vZHVsZVJlcXVpcmUgZnJvbSAnLi9tb2R1bGVSZXF1aXJlJztcclxuXHJcbmV4cG9ydCBjb25zdCBPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSA9ICdveHlnZW4uY29uZic7XHJcbmV4cG9ydCBjb25zdCBPWFlHRU5fRU5WX0ZJTEVfTkFNRSA9ICdveHlnZW4uZW52JztcclxuZXhwb3J0IGNvbnN0IE9YWUdFTl9QQUdFX09CSkVDVF9GSUxFX05BTUUgPSAnb3h5Z2VuLnBvJztcclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVRlc3RPcHRpb25zKGNvbmZpZywgYXJndikge1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHsgLi4uY29uZmlnIH07XHJcbiAgICBvcHRpb25zLmVudiA9IGxvYWRFbnZpcm9ubWVudFZhcmlhYmxlcyhjb25maWcsIGFyZ3YpO1xyXG4gICAgb3B0aW9ucy5wbyA9IGdldFBhZ2VPYmplY3RGaWxlUGF0aChjb25maWcsIGFyZ3YpO1xyXG4gICAgb3B0aW9ucy5zdWl0ZXMgPSBhd2FpdCBsb2FkU3VpdGVzKGNvbmZpZywgYXJndik7XHJcbiAgICByZXR1cm4gb3B0aW9ucztcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRTdWl0ZXMoY29uZmlnLCBhcmd2KSB7XHJcbiAgICBpZiAoY29uZmlnLmZyYW1ld29yayAmJiB0eXBlb2YgY29uZmlnLmZyYW1ld29yayA9PT0gJ3N0cmluZycgJiYgY29uZmlnLmZyYW1ld29yay50b0xvd2VyQ2FzZSgpICE9PSAnb3h5Z2VuJykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBjb25maWc7XHJcbiAgICBjb25zdCBpc0NvbmZpZ0ZpbGUgPSB0YXJnZXQgJiYgdGFyZ2V0Lm5hbWUgJiYgdGFyZ2V0Lm5hbWUuaW5kZXhPZihPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSkgPT09IDA7XHJcbiAgICBsZXQgc3VpdGVzID0gW107XHJcbiAgICAvLyBpZiBhbiBpbmRpdmlkdWFsIHNjcmlwdCBvciBzdWl0ZSBmaWxlIHdhcyBwYXNzZWRcclxuICAgIGlmICghaXNDb25maWdGaWxlKSB7XHJcbiAgICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQuZXh0ZW5zaW9uID09PSAnLmpzJykge1xyXG4gICAgICAgICAgICBzdWl0ZXMucHVzaChhd2FpdCBveHV0aWwuZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSlNGaWxlKHRhcmdldC5wYXRoLCBjb25maWcucGFyYW1ldGVycy5maWxlLCBjb25maWcucGFyYW1ldGVycy5tb2RlLCBmYWxzZSwgY29uZmlnLml0ZXJhdGlvbnMgfHwgMSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmV4dGVuc2lvbiA9PT0gJy5qc29uJykge1xyXG4gICAgICAgICAgICBzdWl0ZXMucHVzaChhd2FpdCBveHV0aWwuZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbkZpbGUodGFyZ2V0LnBhdGgsIGNvbmZpZy5wYXJhbWV0ZXJzLmZpbGUsIGNvbmZpZy5wYXJhbWV0ZXJzLm1vZGUsIGNvbmZpZykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGlmIGEgZm9sZGVyIG9yIGEgY29uZmlndXJhdGlvbiBmaWxlIHdhcyBwYXNzZWRcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGxldCBzdWl0ZURlZnMgPSBbXTtcclxuICAgICAgICBpZiAoY29uZmlnLnN1aXRlcyAmJiBBcnJheS5pc0FycmF5KGNvbmZpZy5zdWl0ZXMpKSB7XHJcbiAgICAgICAgICAgIHN1aXRlRGVmcyA9IGNvbmZpZy5zdWl0ZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNoZWNrIGlmIG1vcmUgc3VpdGVzIGFyZSBkZWZpbmVkIGluIHRoZSAnc3VpdGVzJyBmb2xkZXJcclxuICAgICAgICBjb25zdCBzdWl0ZXNGb2xkZXIgPSBwYXRoLmpvaW4odGFyZ2V0LmN3ZCwgJ3N1aXRlcycpO1xyXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHN1aXRlc0ZvbGRlcikpIHtcclxuICAgICAgICAgICAgc3VpdGVEZWZzID0gW1xyXG4gICAgICAgICAgICAgICAgLi4uc3VpdGVEZWZzLFxyXG4gICAgICAgICAgICAgICAgLi4ubG9hZFN1aXRlRGVmaW5pdGlvbnNGcm9tRm9sZGVyKHN1aXRlc0ZvbGRlcilcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gbWVyZ2Ugc3VpdGVzIGNvbmZpZ3VyZWQgaW4gdGhlIHByb2plY3QgY29uZmlnIGZpbGUgYW5kIHRob3NlIGZvdW5kIGluICdzdWl0ZXMnIGZvbGRlclxyXG4gICAgICAgIHN1aXRlcyA9IGF3YWl0IFByb21pc2UuYWxsKHN1aXRlRGVmcy5tYXAoYXN5bmMgKHN1aXRlRGVmKSA9PiBhd2FpdCBveHV0aWwuZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbihzdWl0ZURlZiwgY29uZmlnKSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZmlsdGVyIG91dCBzdWl0ZXMgaWYgJy0tc3VpdGVzJyBjb21tYW5kIGxpbmUgYXJndW1lbnQgd2FzIHNwZWNpZmllZFxyXG4gICAgaWYgKGFyZ3Yuc3VpdGVzICYmIHR5cGVvZiBhcmd2LnN1aXRlcyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFN1aXRlTmFtZXMgPSBhcmd2LnN1aXRlcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgIHN1aXRlcyA9IHN1aXRlcy5maWx0ZXIoeCA9PiBzZWxlY3RlZFN1aXRlTmFtZXMuaW5jbHVkZXMoeC5uYW1lKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3VpdGVzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZFN1aXRlRGVmaW5pdGlvbnNGcm9tRm9sZGVyKGZvbGRlclBhdGgpIHtcclxuICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoZm9sZGVyUGF0aCk7XHJcbiAgICBsZXQgc3VpdGVEZWZzID0gW107XHJcbiAgICBmb3JFYWNoKGZpbGVzLCBmaWxlID0+IHtcclxuICAgICAgICBpZiAocGF0aC5leHRuYW1lKGZpbGUpID09PSAnLmpzb24nKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKGZvbGRlclBhdGgsIGZpbGUpO1xyXG4gICAgICAgICAgICBzdWl0ZURlZnMucHVzaChtb2R1bGVSZXF1aXJlKGZ1bGxQYXRoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc3VpdGVEZWZzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFnZU9iamVjdEZpbGVQYXRoKGNvbmZpZywgYXJndiA9IHt9KSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBjb25maWcudGFyZ2V0IHx8IHt9O1xyXG4gICAgY29uc3QgcG9GaWxlTmFtZSA9IGFyZ3YucG8gfHwgYCR7T1hZR0VOX1BBR0VfT0JKRUNUX0ZJTEVfTkFNRX0uanNgO1xyXG4gICAgY29uc3QgY3dkID0gdGFyZ2V0LmN3ZCB8fCBwcm9jZXNzLmN3ZCgpO1xyXG4gICAgbGV0IHBvRmlsZVBhdGggPSBwYXRoLnJlc29sdmUoY3dkLCBwb0ZpbGVOYW1lKTtcclxuICAgIHBvRmlsZVBhdGggPSBmcy5leGlzdHNTeW5jKHBvRmlsZVBhdGgpID8gcG9GaWxlUGF0aCA6IG51bGw7XHJcblxyXG4gICAgaWYgKHBvRmlsZVBhdGgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBtb2R1bGVSZXF1aXJlKHBvRmlsZVBhdGgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcG9GaWxlUGF0aDtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgVW5hYmxlIHRvIGxvYWQgZmlsZTogJHtwb0ZpbGVQYXRofS4gUmVhc29uOiAke2UubWVzc2FnZX0gJHtlLnN0YWNrfWApO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRFbnZpcm9ubWVudFZhcmlhYmxlcyhjb25maWcsIGFyZ3YpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGNvbmZpZy50YXJnZXQgfHwge307XHJcbiAgICBjb25zdCBlbnZOYW1lID0gYXJndi5lbnYgfHwgY29uZmlnLmVudmlyb25tZW50IHx8ICdkZWZhdWx0JztcclxuICAgIGNvbnN0IGN3ZCA9IHRhcmdldC5jd2QgfHwgcHJvY2Vzcy5jd2QoKTtcclxuICAgIGNvbnN0IGRlZmF1bHRFbnZGaWxlID0gcGF0aC5qb2luKGN3ZCwgYCR7T1hZR0VOX0VOVl9GSUxFX05BTUV9LmpzYCk7XHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhkZWZhdWx0RW52RmlsZSkpIHtcclxuICAgICAgICBjb25zdCBlbnYgPSBtb2R1bGVSZXF1aXJlKGRlZmF1bHRFbnZGaWxlKTtcclxuICAgICAgICBpZiAoZW52ICYmIHR5cGVvZiBlbnYgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlbnYsIGVudk5hbWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbnZbZW52TmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gdHJ5IHRvIHJlc29sdmUgYSBkZWRpY2F0ZWQgZW52aXJvbm1lbnQgZmlsZSBpbiAnZW52JyBzdWIgZm9sZGVyXHJcbiAgICBjb25zdCBkZWRpY2F0ZWRFbnZGaWxlSnMgPSBwYXRoLmpvaW4oY3dkLCAnZW52JywgYCR7ZW52TmFtZX0uanNgKTtcclxuICAgIGNvbnN0IGRlZGljYXRlZEVudkZpbGVKc29uID0gcGF0aC5qb2luKGN3ZCwgJ2VudicsIGAke2Vudk5hbWV9Lmpzb25gKTtcclxuICAgIGlmIChmcy5leGlzdHNTeW5jKGRlZGljYXRlZEVudkZpbGVKcykpIHtcclxuICAgICAgICByZXR1cm4gbW9kdWxlUmVxdWlyZShkZWRpY2F0ZWRFbnZGaWxlSnMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZnMuZXhpc3RzU3luYyhkZWRpY2F0ZWRFbnZGaWxlSnNvbikpIHtcclxuICAgICAgICByZXR1cm4gbW9kdWxlUmVxdWlyZShkZWRpY2F0ZWRFbnZGaWxlSnNvbik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge307XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnZpcm9ubWVudHModGFyZ2V0KSB7XHJcbiAgICBsZXQgdGFyZ2V0Q3dkID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5jd2QpIHtcclxuICAgICAgICB0YXJnZXRDd2QgPSB0YXJnZXQuY3dkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGN3ZCA9IHRhcmdldEN3ZCB8fCBwcm9jZXNzLmN3ZCgpO1xyXG4gICAgY29uc3QgZGVmYXVsdEVudkZpbGUgPSBwYXRoLmpvaW4oY3dkLCBgJHtPWFlHRU5fRU5WX0ZJTEVfTkFNRX0uanNgKTtcclxuICAgIGlmIChmcy5leGlzdHNTeW5jKGRlZmF1bHRFbnZGaWxlKSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtb2R1bGVSZXF1aXJlKGRlZmF1bHRFbnZGaWxlKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgVW5hYmxlIHRvIGxvYWQgZmlsZTogJHtkZWZhdWx0RW52RmlsZX0uIFJlYXNvbjogJHtlLm1lc3NhZ2V9ICR7ZS5zdGFja31gKTtcclxuICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7fTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZ3VyYXRpb25zKHRhcmdldCwgYXJndikge1xyXG4gICAgLy8gcHJvY2VzcyBjb21tYW5kIGxpbmUgYXJndW1lbnRzXHJcbiAgICBsZXQgdGFyZ2V0Q3dkID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5jd2QpIHtcclxuICAgICAgICB0YXJnZXRDd2QgPSB0YXJnZXQuY3dkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IERFRkFVTFRfT1BUUyA9IHtcclxuICAgICAgICBjd2Q6IHRhcmdldCA/ICh0YXJnZXRDd2QgfHwgcHJvY2Vzcy5jd2QoKSkgOiBwcm9jZXNzLmN3ZCgpLFxyXG4gICAgICAgIHRhcmdldDogdGFyZ2V0LFxyXG4gICAgICAgIGJyb3dzZXJOYW1lOiAnY2hyb21lJyxcclxuICAgICAgICBzZWxlbml1bVVybCA6ICdodHRwOi8vbG9jYWxob3N0OjQ0NDQvd2QvaHViJyxcclxuICAgICAgICBhcHBpdW1VcmwgOiAnaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1YicsXHJcbiAgICAgICAgcmVvcGVuU2Vzc2lvbjogZmFsc2UsXHJcbiAgICAgICAgcmVSdW5PbkZhaWxlZDogZmFsc2UsXHJcbiAgICAgICAgaXRlcmF0aW9ucyA6IDEsXHJcbiAgICAgICAgZGVidWdQb3J0OiBudWxsLFxyXG4gICAgICAgIGRlbGF5OiBudWxsLFxyXG4gICAgICAgIGNvbGxlY3REZXZpY2VMb2dzOiBmYWxzZSxcclxuICAgICAgICBjb2xsZWN0QXBwaXVtTG9nczogZmFsc2UsXHJcbiAgICAgICAgY29sbGVjdEJyb3dzZXJMb2dzOiBmYWxzZSxcclxuICAgICAgICByZXBvcnRpbmc6IHtcclxuICAgICAgICAgICAgcmVwb3J0ZXJzOiBbJ2h0bWwnXVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGFyYW1ldGVycyA6IHtcclxuICAgICAgICAgICAgZmlsZTogbnVsbCxcclxuICAgICAgICAgICAgbW9kZTogJ3NlcSdcclxuICAgICAgICB9LFxyXG4gICAgfTtcclxuICAgIC8vIHJldHJpZXZlIG9wdGlvbnMgcHJvdmlkZWQgdmlhIGNvbW1hbmQgbGluZSBhcmd1bWVudHNcclxuICAgIGNvbnN0IGNtZE9wdHMgPSBnZXRDb21tYW5kTGluZU9wdGlvbnMoYXJndik7XHJcbiAgICAvLyBpZiB0aGUgdGFyZ2V0IGlzIG94eWdlbiBjb25maWcgZmlsZSwgbWVyZ2UgaXRzIGNvbnRlbnQgd2l0aCB0aGUgZGVmYXVsdCBvcHRpb25zXHJcbiAgICBsZXQgcHJvakNvbmZpZ09wdHMgPSB7fTtcclxuICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0Lm5hbWUgPT09IE9YWUdFTl9DT05GSUdfRklMRV9OQU1FICYmICh0YXJnZXQuZXh0ZW5zaW9uID09PSAnLmpzJyB8fCB0YXJnZXQuZXh0ZW5zaW9uID09PSAnLmpzb24nKSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHByb2pDb25maWdPcHRzID0gbW9kdWxlUmVxdWlyZSh0YXJnZXQucGF0aCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2FkIGZpbGU6ICR7dGFyZ2V0LnBhdGh9LiBSZWFzb246ICR7ZS5tZXNzYWdlfSAke2Uuc3RhY2t9YCk7XHJcbiAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBlbnZzID0gZ2V0RW52aXJvbm1lbnRzKHRhcmdldCk7XHJcblxyXG4gICAgaWYgKHByb2pDb25maWdPcHRzLmVudnMpIHtcclxuICAgICAgICAvLyBtZXJnZSBleHRlcm5hbCBlbnZpcm9ubWVudHMgZGVmaW5pdGlvbiB3aXRoIHRoZSBvbmUgaW4gdGhlIGNvbmZpZyBmaWxlXHJcbiAgICAgICAgcHJvakNvbmZpZ09wdHMuZW52cyA9IHsgLi4ucHJvakNvbmZpZ09wdHMuZW52cywgLi4uZW52cyB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcHJvakNvbmZpZ09wdHMgPSB7IC4uLnByb2pDb25maWdPcHRzLCBlbnZzOiBlbnZzIH07XHJcbiAgICB9XHJcbiAgICAvLyBtYWtlIHN1cmUgdG8gc2V0IGRlZmF1bHQgSFRNTCByZXBvcnRlciBpZiByZXBvcnRpbmcgb3B0aW9ucyBhcmUgbm90IHByb3ZpZGVkIGluIG94eWdlbi5jb25mIGZpbGUgYW5kIHZpYSBjb21tYW5kIGxpbmVcclxuICAgIGNvbnN0IGlzQ21kT3B0c1JlcG9ydEZvcm1hdCA9IGNtZE9wdHMucmVwb3J0aW5nICYmIGNtZE9wdHMucmVwb3J0aW5nLnJlcG9ydGVycztcclxuICAgIGNvbnN0IGlzQ29uZmlnUmVwb3J0Rm9ybWF0ID0gcHJvakNvbmZpZ09wdHMucmVwb3J0aW5nICYmIHByb2pDb25maWdPcHRzLnJlcG9ydGluZy5yZXBvcnRlcnM7XHJcbiAgICBpZiAoIWlzQ21kT3B0c1JlcG9ydEZvcm1hdCAmJiAhaXNDb25maWdSZXBvcnRGb3JtYXQpIHtcclxuICAgICAgICBpZiAoIXByb2pDb25maWdPcHRzLnJlcG9ydGluZykge1xyXG4gICAgICAgICAgICBwcm9qQ29uZmlnT3B0cy5yZXBvcnRpbmcgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcHJvakNvbmZpZ09wdHMucmVwb3J0aW5nLnJlcG9ydGVycyA9IFsnaHRtbCddO1xyXG4gICAgfVxyXG4gICAgLy8gZGV0ZXJtaW5lIHRlc3QgbmFtZVxyXG4gICAgbGV0IG5hbWUgPSBjbWRPcHRzLm5hbWUgfHwgcHJvakNvbmZpZ09wdHMubmFtZSB8fCBudWxsO1xyXG4gICAgaWYgKCFuYW1lICYmIHRhcmdldCkge1xyXG4gICAgICAgIG5hbWUgPSB0YXJnZXQubmFtZSAhPT0gT1hZR0VOX0NPTkZJR19GSUxFX05BTUUgPyB0YXJnZXQubmFtZSA6IHRhcmdldC5iYXNlTmFtZTtcclxuICAgIH1cclxuICAgIC8vIG1lcmdlIG9wdGlvbnMgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgb3JkZXIgKHRoZSBsYXN0IG9uZSBvdmVycmlkZXMgdGhlIHByZXZpb3VzIG9uZSk6XHJcbiAgICAvLyBkZWZhdWx0IG9wdGlvbnMsIHByb2plY3QgY29uZmlnIGZpbGUsIGNvbW1hbmQgbGluZSBhcmd1bWVudHNcclxuICAgIHJldHVybiB7IC4uLkRFRkFVTFRfT1BUUywgLi4ucHJvakNvbmZpZ09wdHMsIC4uLmNtZE9wdHMsIG5hbWU6IG5hbWUgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbW1hbmRMaW5lT3B0aW9ucyhhcmd2KSB7XHJcbiAgICBjb25zdCBvcHRzID0ge1xyXG4gICAgICAgIC8vIHN3aXRjaDogLS1uYW1lIFxyXG4gICAgICAgIG5hbWU6IGFyZ3YubmFtZSB8fCBudWxsLFxyXG4gICAgICAgIC8vIHN3aXRjaDogLWIgb3IgLS1icm93c2VyXHJcbiAgICAgICAgYnJvd3Nlck5hbWUgOiBhcmd2LmIgfHwgYXJndi5icm93c2VyIHx8IG51bGwsXHJcbiAgICAgICAgc2VsZW5pdW1VcmwgOiBhcmd2LnMgfHwgYXJndi5zZXJ2ZXIgfHwgbnVsbCxcclxuICAgICAgICBhcHBpdW1VcmwgOiBhcmd2LnMgfHwgYXJndi5zZXJ2ZXIgfHwgbnVsbCxcclxuICAgICAgICByZW9wZW5TZXNzaW9uOiBhcmd2LnJlb3BlbiA/IGFyZ3YucmVvcGVuID09PSAndHJ1ZScgOiBudWxsLFxyXG4gICAgICAgIGl0ZXJhdGlvbnMgOiBhcmd2LmkgPyBwYXJzZUludChhcmd2LmkpIDogKGFyZ3YuaXRlciA/IHBhcnNlSW50KGFyZ3YuaXRlcikgOiBudWxsKSxcclxuICAgICAgICBkZWJ1Z1BvcnQ6IGFyZ3YuZGJncG9ydCB8fCBudWxsLFxyXG4gICAgICAgIGRlbGF5OiBhcmd2LmQgfHwgYXJndi5kZWxheSB8fCBudWxsLFxyXG4gICAgfTtcclxuICAgIC8vIHN3aXRjaDogLS1yZiBmbGFnXHJcbiAgICBpZiAoYXJndi5yZiAmJiB0eXBlb2YgYXJndi5yZiA9PT0gJ3N0cmluZycgJiYgYXJndi5yZi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgcmVwb3J0Rm9ybWF0cyA9IGFyZ3YucmYuc3BsaXQoJywnKTtcclxuICAgICAgICBvcHRzLnJlcG9ydGluZyA9IHtcclxuICAgICAgICAgICAgcmVwb3J0ZXJzOiByZXBvcnRGb3JtYXRzXHJcbiAgICAgICAgfTtcclxuICAgICAgICAvLyBzd2l0Y2g6IC0tcm8gLSBzZXQgcmVwb3J0ZXIgb3V0cHV0IGRpcmVjdG9yeSBpZiBzZXQgYnkgdXNlciB0aHJvdWdoIGNvbW5hbmQgbGluZVxyXG4gICAgICAgIC8vIE5PVEU6IC0tcm8gc3dpdGNoIG11c3QgYmUgc3BlY2lmaWVkIHRvZ2V0aGVyIHdpdGggLS1yZlxyXG4gICAgICAgIGlmIChhcmd2LnJvICYmIHR5cGVvZiBhcmd2LnJvID09PSAnc3RyaW5nJyAmJiBhcmd2LnJvLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgb3B0cy5yZXBvcnRpbmcub3V0cHV0RGlyID0gYXJndi5ybztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBvcHRpb246IC1wIG9yIC0tcGFyYW0gYW5kIC0tcG1cclxuICAgIGlmIChhcmd2LnAgfHwgYXJndi5wYXJhbSkge1xyXG4gICAgICAgIG9wdHMucGFyYW1ldGVycyA9IHtcclxuICAgICAgICAgICAgZmlsZTogYXJndi5wIHx8IGFyZ3YucGFyYW0gfHwgbnVsbCxcclxuICAgICAgICAgICAgbW9kZTogYXJndi5wbSB8fCAnc2VxJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc3dpdGNoOiAtLXNwZWNzIC0gc2V0IHNwZWNzIGlmIHNldCBieSB1c2VyIHRocm91Z2ggY29tbmFuZCBsaW5lXHJcbiAgICBpZiAoYXJndi5zcGVjcyAmJiB0eXBlb2YgYXJndi5zcGVjcyA9PT0gJ3N0cmluZycgJiYgYXJndi5zcGVjcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3Qgc3BlY3MgPSBhcmd2LnNwZWNzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgb3B0cy5zcGVjcyA9IHNwZWNzO1xyXG4gICAgfVxyXG4gICAgLy8gc3dpdGNoOiAtLW1vZHVsZXMgLSBzZXQgYSBsaXN0IG9mIG1vZHVsZXMgdG8gYmUgbG9hZGVkLCBpZiBzZXQgYnkgdXNlciB0aHJvdWdoIGNvbW5hbmQgbGluZVxyXG4gICAgaWYgKGFyZ3YubW9kdWxlcyAmJiB0eXBlb2YgYXJndi5tb2R1bGVzID09PSAnc3RyaW5nJyAmJiBhcmd2Lm1vZHVsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IG1vZHVsZXMgPSBhcmd2Lm1vZHVsZXMuc3BsaXQoJywnKTtcclxuICAgICAgICBvcHRzLm1vZHVsZXMgPSBtb2R1bGVzO1xyXG4gICAgfVxyXG4gICAgLy8gcmVtb3ZlIGFueSBwcm9wZXJ0eSB3aXRoIG51bGwgdmFsdWUgKHNvIGl0IHdvbid0IG92ZXJyaWRlIGRlZmF1bHQgdmFsdWVzIGlmIGl0J3MgbnVsbClcclxuICAgIHJldHVybiBkZWxldGVOdWxsUHJvcGVydGllcyhvcHRzKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZGVsZXRlTnVsbFByb3BlcnRpZXMob2JqKSB7XHJcbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2xvbmUgPSB7IC4uLm9iaiB9O1xyXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XHJcbiAgICBmb3JFYWNoIChrZXlzLCBrZXkgPT4ge1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpICYmIChvYmpba2V5XSA9PSBudWxsIHx8IG9ialtrZXldID09IHVuZGVmaW5lZCkpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGNsb25lW2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzVGFyZ2V0UGF0aCh0YXJnZXRQYXRoLCBjd2QpIHtcclxuICAgIC8vIGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlmIHVzZXIgaGFzIG5vdCBwcm92aWRlZCBwYXRoXHJcbiAgICBpZiAodHlwZW9mKHRhcmdldFBhdGgpID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHRhcmdldFBhdGggPSBjd2QgfHwgcHJvY2Vzcy5jd2QoKTtcclxuICAgIH1cclxuICAgIC8vIHVzZXIncyBwYXRoIG1pZ2h0IGJlIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IC0gbWFrZSBzdXJlIHRoZSByZWxhdGl2ZSBwYXRoIHdpbGwgd29ya1xyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGFyZ2V0UGF0aCA9IG94dXRpbC5yZXNvbHZlUGF0aCh0YXJnZXRQYXRoLCBjd2QgfHwgcHJvY2Vzcy5jd2QoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHRhcmdldFBhdGgpKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RhdHMgPSBmcy5sc3RhdFN5bmModGFyZ2V0UGF0aCk7XHJcbiAgICBjb25zdCBpc0RpcmVjdG9yID0gc3RhdHMuaXNEaXJlY3RvcnkoKTtcclxuICAgIGlmIChpc0RpcmVjdG9yKSB7XHJcbiAgICAgICAgLy8gYXBwZW5kIG94eWdlbiBjb25maWcgZmlsZSBuYW1lIHRvIHRoZSBkaXJlY3RvcnksIGlmIG5vIHRlc3QgY2FzZSBmaWxlIHdhcyBwcm92aWRlZFxyXG4gICAgICAgIGxldCBjb25maWdGaWxlUGF0aCA9IHBhdGguam9pbih0YXJnZXRQYXRoLCBPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSArICcuanMnKTtcclxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoY29uZmlnRmlsZVBhdGgpKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZ0ZpbGVQYXRoID0gcGF0aC5qb2luKHRhcmdldFBhdGgsIE9YWUdFTl9DT05GSUdfRklMRV9OQU1FICsgJy5qc29uJyk7XHJcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhjb25maWdGaWxlUGF0aCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRhcmdldFBhdGggPSBjb25maWdGaWxlUGF0aDtcclxuICAgIH1cclxuICAgIGlmICghZnMuZXhpc3RzU3luYyh0YXJnZXRQYXRoKSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICAvLyBwYXRoIHRvIHRoZSBjb25maWcgb3IgLmpzIGZpbGVcclxuICAgICAgICBwYXRoOiB0YXJnZXRQYXRoLFxyXG4gICAgICAgIC8vIHdvcmtpbmcgZGlyZWN0b3J5XHJcbiAgICAgICAgY3dkOiBjd2QgfHwgcGF0aC5kaXJuYW1lKHRhcmdldFBhdGgpLFxyXG4gICAgICAgIC8vIG5hbWUgb2YgdGhlIHRhcmdldCBmaWxlIHdpdGhvdXQgZXh0ZW5zaW9uXHJcbiAgICAgICAgbmFtZTogb3h1dGlsLmdldEZpbGVOYW1lV2l0aG91dEV4dCh0YXJnZXRQYXRoKSxcclxuICAgICAgICAvLyBuYW1lIGluY2x1ZGluZyBleHRlbnNpb25cclxuICAgICAgICBmdWxsTmFtZTogcGF0aC5iYXNlbmFtZSh0YXJnZXRQYXRoKSxcclxuICAgICAgICAvLyBwYXJlbnQgZm9sZGVyJ3MgbmFtZVxyXG4gICAgICAgIGJhc2VOYW1lOiBwYXRoLmJhc2VuYW1lKHBhdGguZGlybmFtZSh0YXJnZXRQYXRoKSksXHJcbiAgICAgICAgLy8gdGFyZ2V0IGZpbGUgZXh0ZW5zaW9uXHJcbiAgICAgICAgZXh0ZW5zaW9uOiBwYXRoLmV4dG5hbWUodGFyZ2V0UGF0aClcclxuICAgIH07XHJcbn0iXX0=
package/build/lib/util.js CHANGED
@@ -191,6 +191,12 @@ var self = module.exports = {
191
191
  return moduleName + '.' + methodName + '(' + self.stringify(methodArgs, 0) + ')';
192
192
  },
193
193
  stringify: function (args, indentation = 0) {
194
+ if (typeof args === 'string' || args instanceof String) {
195
+ return args;
196
+ } else if (args.length === 1 && (typeof args[0] === 'string' || args[0] instanceof String)) {
197
+ return args[0];
198
+ }
199
+
194
200
  let str;
195
201
 
196
202
  try {
@@ -367,4 +373,4 @@ var self = module.exports = {
367
373
  return new Promise(resolve => setTimeout(resolve, timeout));
368
374
  }
369
375
  };
370
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbC5qcyJdLCJuYW1lcyI6WyJwYXRoIiwicmVxdWlyZSIsImZzIiwibW9tZW50IiwiY3J5cHRvIiwidXRpbCIsInBhc3N3b3JkIiwiZW5jcnlwdGlvbktleSIsImtleSIsInNjcnlwdFN5bmMiLCJpdiIsIkJ1ZmZlciIsImFsbG9jIiwiYWxnb3JpdGhtIiwiRGVjcnlwdFJlc3VsdCIsInJlc3VsdCIsImRlY3J5cHRSZXN1bHQiLCJnZXREZWNyeXB0UmVzdWx0IiwiRFVNTVlfSE9PS1MiLCJiZWZvcmVUZXN0IiwiYmVmb3JlU3VpdGUiLCJiZWZvcmVDYXNlIiwiYmVmb3JlQ29tbWFuZCIsImFmdGVyQ29tbWFuZCIsImFmdGVyVGVzdCIsImFmdGVyU3VpdGUiLCJhZnRlckNhc2UiLCJzZWxmIiwibW9kdWxlIiwiZXhwb3J0cyIsImdlbmVyYXRlVW5pcXVlSWQiLCJyYW5kb21CeXRlcyIsInRvU3RyaW5nIiwiZ2V0VGltZVN0YW1wIiwidXRjIiwidmFsdWVPZiIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb24iLCJzdWl0ZURlZiIsInRlc3RDb25maWciLCJpdGVyYXRpb25Db3VudCIsInN1aXRlIiwiaWQiLCJuYW1lIiwiaXRlcmF0aW9ucyIsInN1aXRlRmlsZVBhdGgiLCJqb2luIiwidGFyZ2V0IiwiY3dkIiwicGFyYW1NYW5hZ2VyIiwiZ2V0UGFyYW1ldGVyTWFuYWdlciIsInBhcmFtZXRlcnMiLCJnZXRNb2RlIiwicm93cyIsImNhcGFiaWxpdGllcyIsImVudmlyb25tZW50Iiwib3B0aW9ucyIsInBhcmFsbGVsIiwiY29uY3VycmVuY3kiLCJjYXNlcyIsImZvckVhY2giLCJjYXNlRGVmIiwidGMiLCJnZXRGaWxlTmFtZVdpdGhvdXRFeHQiLCJyZXNvbHZlUGF0aCIsImZvcm1hdCIsInB1c2giLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21KU0ZpbGUiLCJmaWxlUGF0aCIsInBhcmFtRmlsZSIsInBhcmFtTW9kZSIsIm5vUGFyYW1BdXRvU2VhcmNoIiwiZmlsZU5hbWVOb0V4dCIsInRlc3RjYXNlIiwicmVvcGVuU2Vzc2lvbiIsImRpcm5hbWUiLCJmaWxlIiwibW9kZSIsIm1haW5GaWxlUGF0aCIsInBhcmFtT3B0cyIsImF1dG9TZWFyY2giLCJwYXJhbUZpbGVQYXRoIiwiaXNBYnNvbHV0ZSIsImxvYWRQYXJhbWV0ZXJNYW5hZ2VyIiwiZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbkZpbGUiLCJmaWxlTmFtZSIsImJhc2VuYW1lIiwiZmlsZUV4dCIsImV4dG5hbWUiLCJmaWxlUGF0aE5vRXh0Iiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJtYWluRmlsZSIsImNzdlBhcmFtRmlsZSIsInR4dFBhcmFtRmlsZSIsInhsc1BhcmFtRmlsZSIsInhsc3hQYXJhbUZpbGUiLCJleGlzdHNTeW5jIiwiaW5pdCIsInBhdGhUb1Jlc29sdmUiLCJiYXNlRm9sZGVyIiwicmVzb2x2ZSIsIm1ha2VTZXJpYWxpemFibGUiLCJlcnIiLCJkZXN0cm95Q2lyY3VsYXIiLCJmcm9tIiwic2VlbiIsInRvIiwiQXJyYXkiLCJpc0FycmF5IiwiT2JqZWN0Iiwia2V5cyIsImluZGV4T2YiLCJzbGljZSIsImdldE1ldGhvZFNpZ25hdHVyZSIsIm1vZHVsZU5hbWUiLCJtZXRob2ROYW1lIiwibWV0aG9kQXJncyIsInN0cmluZ2lmeSIsImFyZ3MiLCJpbmRlbnRhdGlvbiIsInN0ciIsIkpTT04iLCJ2YWx1ZSIsIkVycm9yIiwiUmVnRXhwIiwic291cmNlIiwiZmxhZ3MiLCJyZXBsYWNlIiwiZW5kc1dpdGgiLCJsZW5ndGgiLCJlIiwiY29uc29sZSIsIndhcm4iLCJpbnNwZWN0IiwiZGVwdGgiLCJpc0luRGVidWdNb2RlIiwibG9hZFRlc3RIb29rcyIsImhvb2tzIiwiZXhlY3V0ZVRlc3RIb29rIiwibWV0aG9kIiwiZ2xvYmFsIiwiY2hhaUFuZE1vY2tlcnlMb2FkZWQiLCJjaGFpIiwibW9ja2VyeSIsImVuYWJsZSIsInVzZUNsZWFuQ2FjaGUiLCJ3YXJuT25SZXBsYWNlIiwid2Fybk9uVW5yZWdpc3RlcmVkIiwicmVnaXN0ZXJNb2NrIiwiYXBwbHkiLCJ1bmRlZmluZWQiLCJlcnJvciIsImdldE94TW9kdWxlc0RpciIsIl9fZGlybmFtZSIsImhvb2tMb2dzIiwibG9nZ2VyIiwib3JpZ2xvZyIsImxvZyIsIm9yaWdEZWJ1ZyIsImRlYnVnIiwib3JpZ0luZm8iLCJpbmZvIiwib3JpZ1dhcm4iLCJvcmlnRXJyb3IiLCJwcm9jZXNzQXJncyIsImFyZ3VtZW50QXJyYXkiLCJtYXAiLCJpdGVtIiwibWFrZVRyYW5zYWN0aW9uRmFpbGVkSWZTdGVwRmFpbGVkIiwic3RlcHMiLCJsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCIsIm5ld1N0ZXBzIiwiaWR4IiwiaW5jbHVkZXMiLCJzdGF0dXMiLCJkZWNyeXB0IiwidGV4dCIsImVuY3J5cHRlZFRleHQiLCJkZWNpcGhlciIsImNyZWF0ZURlY2lwaGVyaXYiLCJkZWNyeXB0ZWQiLCJ1cGRhdGUiLCJjb25jYXQiLCJmaW5hbCIsInJldFZhbCIsIk94eWdlbkVycm9yIiwiZXJyb3JIZWxwZXIiLCJlcnJvckNvZGUiLCJDUllQVE9fRVJST1IiLCJlbmNyeXB0IiwiY2lwaGVyIiwiY3JlYXRlQ2lwaGVyaXYiLCJlbmNyeXB0ZWQiLCJzbGVlcCIsInRpbWVvdXQiLCJQcm9taXNlIiwic2V0VGltZW91dCJdLCJtYXBwaW5ncyI6Ijs7OztBQXNCQTs7QUFDQTs7OztBQVhBLE1BQU1BLElBQUksR0FBR0MsT0FBTyxDQUFDLE1BQUQsQ0FBcEI7O0FBQ0EsTUFBTUMsRUFBRSxHQUFHRCxPQUFPLENBQUMsSUFBRCxDQUFsQjs7QUFDQSxNQUFNRSxNQUFNLEdBQUdGLE9BQU8sQ0FBQyxRQUFELENBQXRCOztBQUNBLE1BQU1HLE1BQU0sR0FBR0gsT0FBTyxDQUFDLFFBQUQsQ0FBdEI7O0FBQ0EsTUFBTUksSUFBSSxHQUFHSixPQUFPLENBQUMsTUFBRCxDQUFwQjs7QUFDQSxNQUFNSyxRQUFRLEdBQUdMLE9BQU8sQ0FBQyxvQkFBRCxDQUFQLENB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QiIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciBtb2R1bGUgZm9yIGludGVybmFsIE94eWdlbiB1c2VcclxuICovXHJcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XHJcbmNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcclxuY29uc3QgbW9tZW50ID0gcmVxdWlyZSgnbW9tZW50Jyk7XHJcbmNvbnN0IGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xyXG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xyXG5jb25zdCBwYXNzd29yZCA9IHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLmVuY3J5cHRpb25LZXk7XHJcbmNvbnN0IGtleSA9IGNyeXB0by5zY3J5cHRTeW5jKHBhc3N3b3JkLCAnR2ZHJywgMjQpO1xyXG5jb25zdCBpdiA9IEJ1ZmZlci5hbGxvYygxNiwgMCk7XHJcbmNvbnN0IGFsZ29yaXRobSA9ICdhZXMtMTkyLWNiYyc7XHJcblxyXG5pbXBvcnQgT3h5Z2VuRXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5cclxuZnVuY3Rpb24gRGVjcnlwdFJlc3VsdChyZXN1bHQpIHtcclxuICAgIGNvbnN0IGRlY3J5cHRSZXN1bHQgPSByZXN1bHQ7XHJcblxyXG4gICAgdGhpcy5nZXREZWNyeXB0UmVzdWx0ID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBkZWNyeXB0UmVzdWx0O1xyXG4gICAgfTtcclxufVxyXG5cclxuY29uc3QgRFVNTVlfSE9PS1MgPSB7XHJcbiAgICBiZWZvcmVUZXN0OiAoKSA9PiB7fSxcclxuICAgIGJlZm9yZVN1aXRlOiAoKSA9PiB7fSxcclxuICAgIGJlZm9yZUNhc2U6ICgpID0+IHt9LFxyXG4gICAgYmVmb3JlQ29tbWFuZDogKCkgPT4ge30sXHJcbiAgICBhZnRlckNvbW1hbmQ6ICgpID0+IHt9LFxyXG4gICAgYWZ0ZXJUZXN0OiAoKSA9PiB7fSxcclxuICAgIGFmdGVyU3VpdGU6ICgpID0+IHt9LFxyXG4gICAgYWZ0ZXJDYXNlOiAoKSA9PiB7fSxcclxufTtcclxuXHJcbnZhciBzZWxmID0gbW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgZ2VuZXJhdGVVbmlxdWVJZDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIGNyeXB0by5yYW5kb21CeXRlcyg0KS50b1N0cmluZygnaGV4Jyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFRpbWVTdGFtcDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudC51dGMoKS52YWx1ZU9mKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb246IGFzeW5jIGZ1bmN0aW9uKHN1aXRlRGVmLCB0ZXN0Q29uZmlnLCBpdGVyYXRpb25Db3VudCA9IDEpIHtcclxuICAgICAgICB2YXIgc3VpdGUgPSBuZXcgcmVxdWlyZSgnLi4vbW9kZWwvdGVzdHN1aXRlLmpzJykoKTtcclxuICAgICAgICBzdWl0ZS5pZCA9IG51bGw7XHJcbiAgICAgICAgc3VpdGUubmFtZSA9IHN1aXRlRGVmLm5hbWU7XHJcbiAgICAgICAgc3VpdGUuaWQgPSBzdWl0ZURlZi5pZDtcclxuICAgICAgICBzdWl0ZS5pdGVyYXRpb25Db3VudCA9IHN1aXRlRGVmLml0ZXJhdGlvbnMgfHwgc3VpdGVEZWYuaXRlcmF0aW9uQ291bnQgfHwgdGVzdENvbmZpZy5pdGVyYXRpb25zIHx8IGl0ZXJhdGlvbkNvdW50O1xyXG4gICAgICAgIGNvbnN0IHN1aXRlRmlsZVBhdGggPSBzdWl0ZURlZi5wYXRoIHx8IHBhdGguam9pbih0ZXN0Q29uZmlnLnRhcmdldC5jd2QsICdzdWl0ZXMnLCBgJHtzdWl0ZURlZi5uYW1lfS5qc29uYCk7XHJcbiAgICAgICAgc3VpdGUucGFyYW1NYW5hZ2VyID0gYXdhaXQgc2VsZi5nZXRQYXJhbWV0ZXJNYW5hZ2VyKHN1aXRlRmlsZVBhdGgsIHRlc3RDb25maWcucGFyYW1ldGVycywgdGVzdENvbmZpZy50YXJnZXQuY3dkKTtcclxuICAgICAgICBpZiAoc3VpdGUucGFyYW1NYW5hZ2VyICYmIHN1aXRlLnBhcmFtTWFuYWdlci5nZXRNb2RlKCkgPT0gJ2FsbCcpIHtcclxuICAgICAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBzdWl0ZS5wYXJhbU1hbmFnZXIucm93cztcclxuICAgICAgICB9XHJcbiAgICAgICAgc3VpdGUuY2FwYWJpbGl0aWVzID0gc3VpdGVEZWYuY2FwYWJpbGl0aWVzIHx8IHRlc3RDb25maWcuY2FwYWJpbGl0aWVzIHx8IHt9O1xyXG4gICAgICAgIHN1aXRlLmVudmlyb25tZW50ID0gdGVzdENvbmZpZy5lbnZpcm9ubWVudCB8fCBudWxsO1xyXG4gICAgICAgIHN1aXRlLm9wdGlvbnMgPSB0ZXN0Q29uZmlnLm9wdGlvbnMgfHwgbnVsbDtcclxuICAgICAgICBzdWl0ZS5wYXJhbGxlbCA9IHN1aXRlRGVmLnBhcmFsbGVsIHx8IHRlc3RDb25maWcucGFyYWxsZWwgfHwgdGVzdENvbmZpZy5jb25jdXJyZW5jeSB8fCAxO1xyXG4gICAgICAgIC8vIGluaXRpYWxpemUgZWFjaCB0ZXN0IGNhc2VcclxuICAgICAgICBzdWl0ZURlZi5jYXNlcy5mb3JFYWNoKGNhc2VEZWYgPT4ge1xyXG4gICAgICAgICAgICAvLyBpbml0aWFsaXplIHRlc3RjYXNlIG9iamVjdFxyXG4gICAgICAgICAgICBjb25zdCB0YyA9IG5ldyByZXF1aXJlKCcuLi9tb2RlbC90ZXN0Y2FzZS5qcycpKCk7XHJcbiAgICAgICAgICAgIGlmIChjYXNlRGVmLm5hbWUpXHJcbiAgICAgICAgICAgICAgICB0Yy5uYW1lID0gY2FzZURlZi5uYW1lO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0Yy5uYW1lID0gc2VsZi5nZXRGaWxlTmFtZVdpdGhvdXRFeHQoY2FzZURlZi5wYXRoKTtcclxuICAgICAgICAgICAgdGMucGF0aCA9IHNlbGYucmVzb2x2ZVBhdGgoY2FzZURlZi5wYXRoLCB0ZXN0Q29uZmlnLnRhcmdldC5jd2QpO1xyXG4gICAgICAgICAgICB0Yy5mb3JtYXQgPSAnanMnO1xyXG4gICAgICAgICAgICB0Yy5pdGVyYXRpb25Db3VudCA9IGNhc2VEZWYuaXRlcmF0aW9ucyB8fCBjYXNlRGVmLml0ZXJhdGlvbkNvdW50IHx8IDE7XHJcbiAgICAgICAgICAgIHN1aXRlLmNhc2VzLnB1c2godGMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBzdWl0ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSlNGaWxlOiBhc3luYyBmdW5jdGlvbiAoZmlsZVBhdGgsIHBhcmFtRmlsZSA9IG51bGwsIHBhcmFtTW9kZSA9IG51bGwsIG5vUGFyYW1BdXRvU2VhcmNoID0gdHJ1ZSwgaXRlcmF0aW9uQ291bnQgPSAxKSB7XHJcbiAgICAgICAgdmFyIGZpbGVOYW1lTm9FeHQgPSBzZWxmLmdldEZpbGVOYW1lV2l0aG91dEV4dChmaWxlUGF0aCk7XHJcblxyXG4gICAgICAgIHZhciB0ZXN0Y2FzZSA9IG5ldyByZXF1aXJlKCcuLi9tb2RlbC90ZXN0Y2FzZS5qcycpKCk7XHJcbiAgICAgICAgdGVzdGNhc2UubmFtZSA9IGZpbGVOYW1lTm9FeHQ7XHJcbiAgICAgICAgdGVzdGNhc2UucGF0aCA9IGZpbGVQYXRoO1xyXG4gICAgICAgIHRlc3RjYXNlLmZvcm1hdCA9ICdqcyc7XHJcbiAgICAgICAgdGVzdGNhc2UuaXRlcmF0aW9uQ291bnQgPSAxO1xyXG5cclxuICAgICAgICB2YXIgc3VpdGUgPSBuZXcgcmVxdWlyZSgnLi4vbW9kZWwvdGVzdHN1aXRlLmpzJykoKTtcclxuICAgICAgICBzdWl0ZS5uYW1lID0gdGVzdGNhc2UubmFtZTtcclxuICAgICAgICBzdWl0ZS5pZCA9IHRlc3RjYXNlLmlkO1xyXG4gICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gaXRlcmF0aW9uQ291bnQ7XHJcbiAgICAgICAgc3VpdGUuY2FzZXMucHVzaCh0ZXN0Y2FzZSk7XHJcbiAgICAgICAgaWYgKHRlc3RjYXNlLnJlb3BlblNlc3Npb24pIHtcclxuICAgICAgICAgICAgc3VpdGUucmVvcGVuU2Vzc2lvbiA9IHRlc3RjYXNlLnJlb3BlblNlc3Npb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGN3ZCA9IHBhdGguZGlybmFtZShmaWxlUGF0aCk7XHJcbiAgICAgICAgc3VpdGUucGFyYW1NYW5hZ2VyID0gYXdhaXQgc2VsZi5nZXRQYXJhbWV0ZXJNYW5hZ2VyKGZpbGVQYXRoLCB7IGZpbGU6IHBhcmFtRmlsZSwgbW9kZTogcGFyYW1Nb2RlIH0sIGN3ZCk7XHJcbiAgICAgICAgLy8gaWYgcGFyYW1ldGVyIHJlYWRpbmcgbW9kZSBpcyAnYWxsJyB0aGVuIGNoYW5nZSBpdGVyYXRpb25Db3VudCB0byB0aGUgYW1vdW50IG9mIHJvd3MgaW4gdGhlIHBhcmFtIGZpbGVcclxuICAgICAgICBpZiAoc3VpdGUucGFyYW1NYW5hZ2VyICYmIHBhcmFtTW9kZSA9PSAnYWxsJykge1xyXG4gICAgICAgICAgICBzdWl0ZS5pdGVyYXRpb25Db3VudCA9IHN1aXRlLnBhcmFtTWFuYWdlci5yb3dzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3VpdGU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFBhcmFtZXRlck1hbmFnZXI6IGFzeW5jIGZ1bmN0aW9uKG1haW5GaWxlUGF0aCwgcGFyYW1PcHRzID0gbnVsbCwgY3dkID0gbnVsbCwgYXV0b1NlYXJjaCA9IGZhbHNlKSB7XHJcbiAgICAgICAgbGV0IHBhcmFtRmlsZVBhdGggPSBwYXJhbU9wdHMgJiYgcGFyYW1PcHRzLmZpbGUgPyBwYXJhbU9wdHMuZmlsZSA6IG51bGw7XHJcbiAgICAgICAgbGV0IHBhcmFtTW9kZSA9IHBhcmFtT3B0cyAmJiBwYXJhbU9wdHMubW9kZSA/IHBhcmFtT3B0cy5tb2RlIDogJ3NlcSc7XHJcblxyXG4gICAgICAgIGlmIChwYXJhbUZpbGVQYXRoICYmIGN3ZCAmJiAhcGF0aC5pc0Fic29sdXRlKHBhcmFtRmlsZVBhdGgpKSB7XHJcbiAgICAgICAgICAgIHBhcmFtRmlsZVBhdGggPSBwYXRoLmpvaW4oY3dkLCBwYXJhbUZpbGVQYXRoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBhd2FpdCBzZWxmLmxvYWRQYXJhbWV0ZXJNYW5hZ2VyKG1haW5GaWxlUGF0aCwgcGFyYW1GaWxlUGF0aCwgcGFyYW1Nb2RlLCBhdXRvU2VhcmNoKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbkZpbGU6IGFzeW5jIGZ1bmN0aW9uIChmaWxlUGF0aCwgcGFyYW1GaWxlLCBwYXJhbU1vZGUgPSBudWxsLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICBjb25zdCB0ZXN0Q29uZmlnID0ge1xyXG4gICAgICAgICAgICAuLi5vcHRpb25zIHx8IHt9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHBhcmFtRmlsZSkge1xyXG4gICAgICAgICAgICB0ZXN0Q29uZmlnLnBhcmFtZXRlcnMgPSB7XHJcbiAgICAgICAgICAgICAgICBmaWxlOiBwYXJhbUZpbGUsXHJcbiAgICAgICAgICAgICAgICBtb2RlOiBwYXJhbU1vZGUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhd2FpdCBzZWxmLmdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb24ocmVxdWlyZShmaWxlUGF0aCksIHRlc3RDb25maWcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRGaWxlTmFtZVdpdGhvdXRFeHQ6IGZ1bmN0aW9uIChmaWxlUGF0aCkge1xyXG4gICAgICAgIHZhciBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZVBhdGgpO1xyXG4gICAgICAgIHZhciBmaWxlRXh0ID0gcGF0aC5leHRuYW1lKGZpbGVQYXRoKTtcclxuICAgICAgICB2YXIgZmlsZVBhdGhOb0V4dCA9IGZpbGVOYW1lLnN1YnN0cmluZygwLCBmaWxlTmFtZS5sYXN0SW5kZXhPZihmaWxlRXh0KSk7XHJcbiAgICAgICAgcmV0dXJuIGZpbGVQYXRoTm9FeHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIGxvYWRQYXJhbWV0ZXJNYW5hZ2VyOiBhc3luYyBmdW5jdGlvbihtYWluRmlsZSwgcGFyYW1GaWxlLCBwYXJhbU1vZGUsIGF1dG9TZWFyY2ggPSBmYWxzZSkge1xyXG4gICAgICAgIHZhciBwYXJhbU1hbmFnZXIgPSBudWxsO1xyXG4gICAgICAgIC8vIGlmIHBhcmFtIGZpbGUgaXMgbm90IHNwZWNpZmllZCwgdGhlbiBjaGVjayBpZiBKUyBmaWxlIGlzIGNvbWluZyBpbiBwYWlyIHdpdGggYSBwYXJhbWV0ZXIgZmlsZSBcclxuICAgICAgICAvLyAoY3VycmVudGx5IHN1cHBvcnRpbmcgQ1NWIG9yIFRYVClcclxuICAgICAgICBpZiAoIXBhcmFtRmlsZSAmJiBhdXRvU2VhcmNoKSB7XHJcbiAgICAgICAgICAgIHZhciBmaWxlTmFtZU5vRXh0ID0gc2VsZi5nZXRGaWxlTmFtZVdpdGhvdXRFeHQobWFpbkZpbGUpO1xyXG4gICAgICAgICAgICB2YXIgY3N2UGFyYW1GaWxlID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShtYWluRmlsZSksIGZpbGVOYW1lTm9FeHQgKyAnLmNzdicpO1xyXG4gICAgICAgICAgICB2YXIgdHh0UGFyYW1GaWxlID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShtYWluRmlsZSksIGZpbGVOYW1lTm9FeHQgKyAnLnR4dCcpO1xyXG4gICAgICAgICAgICB2YXIgeGxzUGFyYW1GaWxlID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShtYWluRmlsZSksIGZpbGVOYW1lTm9FeHQgKyAnLnhscycpO1xyXG4gICAgICAgICAgICB2YXIgeGxzeFBhcmFtRmlsZSA9IHBhdGguam9pbihwYXRoLmRpcm5hbWUobWFpbkZpbGUpLCBmaWxlTmFtZU5vRXh0ICsgJy54bHN4Jyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhjc3ZQYXJhbUZpbGUpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbUZpbGUgPSBjc3ZQYXJhbUZpbGU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZnMuZXhpc3RzU3luYyh0eHRQYXJhbUZpbGUpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbUZpbGUgPSB0eHRQYXJhbUZpbGU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZnMuZXhpc3RzU3luYyh4bHNQYXJhbUZpbGUpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbUZpbGUgPSB4bHNQYXJhbUZpbGU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZnMuZXhpc3RzU3luYyh4bHN4UGFyYW1GaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1GaWxlID0geGxzeFBhcmFtRmlsZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyYW1GaWxlKSB7XHJcbiAgICAgICAgICAgIHBhcmFtTWFuYWdlciA9IG5ldyByZXF1aXJlKCcuL3BhcmFtLW1hbmFnZXInKShwYXJhbUZpbGUsIHBhcmFtTW9kZSB8fCAnc2VxJyk7XHJcbiAgICAgICAgICAgIGF3YWl0IHBhcmFtTWFuYWdlci5pbml0KCk7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJhbU1hbmFnZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICByZXNvbHZlUGF0aDogZnVuY3Rpb24ocGF0aFRvUmVzb2x2ZSwgYmFzZUZvbGRlcikge1xyXG4gICAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUocGF0aFRvUmVzb2x2ZSkpXHJcbiAgICAgICAgICAgIHJldHVybiBwYXRoVG9SZXNvbHZlO1xyXG4gICAgICAgIHJldHVybiBwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgcGF0aFRvUmVzb2x2ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VTZXJpYWxpemFibGU6IGZ1bmN0aW9uKGVycikge1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXJyID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdHJveUNpcmN1bGFyKGVyciwgW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXJyO1xyXG5cclxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vam9ucGFja2VyL2Rlc3Ryb3ktY2lyY3VsYXJcclxuICAgICAgICBmdW5jdGlvbiBkZXN0cm95Q2lyY3VsYXIoZnJvbSwgc2Vlbikge1xyXG4gICAgICAgICAgICB2YXIgdG8gPSBBcnJheS5pc0FycmF5KGZyb20pID8gW10gOiB7fTtcclxuICAgICAgICAgICAgc2Vlbi5wdXNoKGZyb20pO1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhmcm9tKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmcm9tW2tleV0gfHwgKHR5cGVvZiBmcm9tW2tleV0gIT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoZnJvbVtrZXldKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0b1trZXldID0gZnJvbVtrZXldO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWVuLmluZGV4T2YoZnJvbVtrZXldKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvW2tleV0gPSBkZXN0cm95Q2lyY3VsYXIoZnJvbVtrZXldLCBzZWVuLnNsaWNlKDApKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB0b1trZXldID0gJ1tDaXJjdWxhcl0nO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHRvO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TWV0aG9kU2lnbmF0dXJlOiBmdW5jdGlvbihtb2R1bGVOYW1lLCBtZXRob2ROYW1lLCBtZXRob2RBcmdzKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZU5hbWUgKyAnLicgKyBtZXRob2ROYW1lICsgJygnICsgc2VsZi5zdHJpbmdpZnkobWV0aG9kQXJncywgMCkgKyAnKSc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBVc2VkIHRvIHNlcmlhbGl6ZSBveHlnZW4gY29tbWFuZCBwYXJhbWV0ZXJzLiBQcm9kdWNlcyBhIG5vbi1jb21wbGlhbnQgSlNPTiBzZXJpYWxpemF0aW9uLlxyXG4gICAgICovXHJcbiAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIChhcmdzLCBpbmRlbnRhdGlvbiA9IDApIHtcclxuICAgICAgICBsZXQgc3RyO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHN0ciA9IEpTT04uc3RyaW5naWZ5KGFyZ3MsIChrZXksIHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50JykgeyAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vR29vZ2xlQ2hyb21lTGFicy9qc2JpL2lzc3Vlcy8zMFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHVuZGVmaW5lZCBpcyBpbnNpZGUgYW4gYXJyYXkgdGhlbiBpdCB3aWxsIGJlIHNlcmlhbGl6ZWQgYXMgbnVsbC5cclxuICAgICAgICAgICAgICAgICAgICAvLyBob3dldmVyIGlmIHdlIGp1c3QgcmV0dXJuICd1bmRlZmluZWQnIGhlcmUgYXMgc3RyaW5nLCBpdCB3aWxsIGJlIGVuY2xvc2VkIGluIHF1b3Rlcy5cclxuICAgICAgICAgICAgICAgICAgICAvLyBzbyByZXR1cm4gbWFnaWMgc3RyaW5nIGluc3RlYWQgYW5kIHRyaW0gdGhlIHF1b3RlcyBsYXRlciBvblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnX19VTkRFRklORUQnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcvJyArIHZhbHVlLnNvdXJjZSArICcvJyArIHZhbHVlLmZsYWdzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICB9LCBpbmRlbnRhdGlvbik7XHJcbiAgICAgICAgICAgIC8vIHRyaW0gdGhlIGVuY2xvc2luZyBhcnJheSBhbmQgYW55IHdoaXRlc3BhY2VcclxuICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL15cXFt7MX1cXHMqfFxccypcXF17MX0kL2csICcnKTtcclxuICAgICAgICAgICAgLy8gcmVtb3ZlIHNwYWNlIGJlZm9yZSBsYXN0IH0gYW5kIF0sIHRvIG1ha2UgaW5kZW50YXRpb24gbXRjaCB0aGUgb3BlbmluZyBicmFja2V0XHJcbiAgICAgICAgICAgIGlmIChzdHIuZW5kc1dpdGgoJyAgfScpKSB7XHJcbiAgICAgICAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIHN0ci5sZW5ndGggLSAzKSArICd9JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3RyLmVuZHNXaXRoKCcgIF0nKSkge1xyXG4gICAgICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygwLCBzdHIubGVuZ3RoIC0gMykgKyAnXSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gY29udmVydCBtYWdpYyAndW5kZWZpbmVkJyBzdHJpbmcgdG8gcHJvcGVyIHJlcHJlc2VudGF0aW9uXHJcbiAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cIl9fVU5ERUZJTkVEXCIvZywgJ3VuZGVmaW5lZCcpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gc2VyaWFsaXplIGNvbW1hbmQgYXJndW1lbnRzOiAnLCBlKTtcclxuICAgICAgICAgICAgLy8gaWYgSlNPTi5zdHJpbmdpZnkgZmFpbHMsIHRoZW4gZmFsbGJhY2sgdG8gdXRpbC5pbnNwZWN0LlxyXG4gICAgICAgICAgICAvLyAod2UgZG9uJ3QgdXNlIHV0aWwuaW5zcGVjdCBpbml0aWFseSBiZWNhdXNlIGl0IGRvZXNuJ3Qgc3VwcG9ydCBvdXRwdXQgaW5kZW50YXRpb24pXHJcbiAgICAgICAgICAgIHJldHVybiB1dGlsLmluc3BlY3QoYXJnc1swXSwgeyBkZXB0aDogMyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgIH0sXHJcblxyXG4gICAgaXNJbkRlYnVnTW9kZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gdGhpcyBhbHdheXMgdHJ1ZTtcclxuICAgICAgICAvLyBjb25zdCBhcmd2ID0gcHJvY2Vzcy5leGVjQXJndi5qb2luKCk7XHJcblxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdwcm9jZXNzLmRlYnVnUG9ydCcsIHByb2Nlc3MuZGVidWdQb3J0KTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QnKVwiLCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0JykpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYXJndi5pbmNsdWRlcygnaW5zcGVjdC1icmsnKVwiLCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0LWJyaycpKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFyZ3YuaW5jbHVkZXMoJ2RlYnVnJylcIiwgYXJndi5pbmNsdWRlcygnZGVidWcnKSk7XHJcblxyXG4gICAgICAgIC8vIHJldHVybiBwcm9jZXNzLmRlYnVnUG9ydCB8fCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0JykgfHwgYXJndi5pbmNsdWRlcygnaW5zcGVjdC1icmsnKSB8fCBhcmd2LmluY2x1ZGVzKCdkZWJ1ZycpO1xyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIGxvYWRUZXN0SG9va3M6IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICAgICAgICBsZXQgaG9va3MgPSBEVU1NWV9IT09LUztcclxuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnRhcmdldCAmJiBvcHRpb25zLnRhcmdldC5uYW1lID09PSAnb3h5Z2VuLmNvbmYnKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBob29rcyA9IHJlcXVpcmUob3B0aW9ucy50YXJnZXQucGF0aCkuaG9va3MgfHwgRFVNTVlfSE9PS1M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignRXJyb3IgbG9hZGluZyB1c2VyIGhvb2tzOicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBob29rcztcclxuICAgIH0sXHJcblxyXG4gICAgZXhlY3V0ZVRlc3RIb29rOiBhc3luYyBmdW5jdGlvbihob29rcywgbWV0aG9kLCBhcmdzKSB7XHJcbiAgICAgICAgLy8gaWYgaG9vayBpcyBub3QgZGVmaW5lZCwganVzdCBxdWlldGx5IGlnbm9yZSBpdFxyXG4gICAgICAgIGlmICghaG9va3MgfHwgIW1ldGhvZCB8fCAhaG9va3NbbWV0aG9kXSB8fCB0eXBlb2YgaG9va3NbbWV0aG9kXSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGdsb2JhbC5jaGFpQW5kTW9ja2VyeUxvYWRlZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGFpID0gcmVxdWlyZSgnY2hhaScpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9ja2VyeSA9IHJlcXVpcmUoJ21vY2tlcnknKTtcclxuICAgICAgICAgICAgICAgIG1vY2tlcnkuZW5hYmxlKHtcclxuICAgICAgICAgICAgICAgICAgICB1c2VDbGVhbkNhY2hlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHdhcm5PblJlcGxhY2U6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHdhcm5PblVucmVnaXN0ZXJlZDogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgbW9ja2VyeS5yZWdpc3Rlck1vY2soJ2NoYWknLCBjaGFpKTtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5jaGFpQW5kTW9ja2VyeUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGF3YWl0IGhvb2tzW21ldGhvZF0uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgSG9vayBcIiR7bWV0aG9kfVwiIGhhcyB0aHJvd24gYW4gZXJyb3I6ICR7ZS50b1N0cmluZygpfWApO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0T3hNb2R1bGVzRGlyOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ294X21vZHVsZXMnKTtcclxuICAgIH0sXHJcblxyXG4gICAgaG9va0xvZ3MobG9nZ2VyKSB7XHJcbiAgICAgICAgY29uc3Qgb3JpZ2xvZyA9IGNvbnNvbGUubG9nO1xyXG4gICAgICAgIGNvbnN0IG9yaWdEZWJ1ZyA9IGNvbnNvbGUuZGVidWc7XHJcbiAgICAgICAgY29uc3Qgb3JpZ0luZm8gPSBjb25zb2xlLmluZm87XHJcbiAgICAgICAgY29uc3Qgb3JpZ1dhcm4gPSBjb25zb2xlLndhcm47XHJcbiAgICAgICAgY29uc3Qgb3JpZ0Vycm9yID0gY29uc29sZS5lcnJvcjtcclxuXHJcbiAgICAgICAgY29uc3QgcHJvY2Vzc0FyZ3MgPSAoYXJndW1lbnRBcnJheSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gW107XHJcblxyXG4gICAgICAgICAgICBpZiAoYXJndW1lbnRBcnJheSAmJiBhcmd1bWVudEFycmF5Lm1hcCkge1xyXG4gICAgICAgICAgICAgICAgYXJndW1lbnRBcnJheS5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGAke2l0ZW19YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYCR7dXRpbC5pbnNwZWN0KGl0ZW0pfWApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJyAnKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdsb2cuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnNvbGUuZGVidWcgPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnRGVidWcuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1Zyhwcm9jZXNzQXJncyhhcmd1bWVudEFycmF5KSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zb2xlLmluZm8gPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnSW5mby5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmluZm8ocHJvY2Vzc0FyZ3MoYXJndW1lbnRBcnJheSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc29sZS53YXJuID0gZnVuY3Rpb24gKC4uLmFyZ3VtZW50QXJyYXkpIHtcclxuICAgICAgICAgICAgb3JpZ1dhcm4uYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IgPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnRXJyb3IuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihwcm9jZXNzQXJncyhhcmd1bWVudEFycmF5KSk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgbWFrZVRyYW5zYWN0aW9uRmFpbGVkSWZTdGVwRmFpbGVkKHN0ZXBzKSB7XHJcbiAgICAgICAgaWYgKHN0ZXBzICYmIHN0ZXBzLmxlbmd0aCAmJiBzdGVwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdTdGVwcyA9IFsuLi5zdGVwc107XHJcbiAgICAgICAgICAgIHN0ZXBzLm1hcCgoaXRlbSwgaWR4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5uYW1lICYmIGl0ZW0ubmFtZS5pbmNsdWRlcyAmJiBpdGVtLm5hbWUuaW5jbHVkZXMoJy50cmFuc2FjdGlvbignKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4ID0gaWR4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbGFzdEZpbmRlZFRyYW5zYWN0aW9uSW5kZXggPT09ICdudW1iZXInICYmIGl0ZW0uc3RhdHVzICYmIGl0ZW0uc3RhdHVzID09PSAnZmFpbGVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ZXBzW2xhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4XVsnc3RhdHVzJ10gPSAnZmFpbGVkJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbmV3U3RlcHM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3RlcHM7XHJcbiAgICB9LFxyXG5cclxuICAgIGRlY3J5cHQodGV4dCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBlbmNyeXB0ZWRUZXh0ID0gQnVmZmVyLmZyb20odGV4dCwgJ2hleCcpO1xyXG4gICAgICAgICAgICBsZXQgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihhbGdvcml0aG0sIGtleSwgaXYpO1xyXG4gICAgICAgICAgICBsZXQgZGVjcnlwdGVkID0gZGVjaXBoZXIudXBkYXRlKGVuY3J5cHRlZFRleHQpO1xyXG4gICAgICAgICAgICBkZWNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtkZWNyeXB0ZWQsIGRlY2lwaGVyLmZpbmFsKCldKTtcclxuICAgICAgICAgICAgY29uc3QgcmV0VmFsID0gZGVjcnlwdGVkLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGVjcnlwdFJlc3VsdChyZXRWYWwpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94eWdlbkVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5DUllQVE9fRVJST1IsIFwiVGhlIHByb3ZpZGVkIGFyZ3VtZW50IGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHZhbGlkIGNpcGhlciBwcm9kdWNlZCBieSAndXRpbHMuZW5jcnlwdCdcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBlbmNyeXB0KHRleHQpIHtcclxuICAgICAgICBsZXQgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGFsZ29yaXRobSwga2V5LCBpdik7XHJcbiAgICAgICAgbGV0IGVuY3J5cHRlZCA9IGNpcGhlci51cGRhdGUodGV4dCk7XHJcbiAgICAgICAgZW5jcnlwdGVkID0gQnVmZmVyLmNvbmNhdChbZW5jcnlwdGVkLCBjaXBoZXIuZmluYWwoKV0pO1xyXG4gICAgICAgIHJldHVybiBlbmNyeXB0ZWQudG9TdHJpbmcoJ2hleCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzbGVlcDogZnVuY3Rpb24odGltZW91dCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0KSk7XHJcbiAgICB9XHJcbn07XHJcbiJdfQ==
376
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbC5qcyJdLCJuYW1lcyI6WyJwYXRoIiwicmVxdWlyZSIsImZzIiwibW9tZW50IiwiY3J5cHRvIiwidXRpbCIsInBhc3N3b3JkIiwiZW5jcnlwdGlvbktleSIsImtleSIsInNjcnlwdFN5bmMiLCJpdiIsIkJ1ZmZlciIsImFsbG9jIiwiYWxnb3JpdGhtIiwiRGVjcnlwdFJlc3VsdCIsInJlc3VsdCIsImRlY3J5cHRSZXN1bHQiLCJnZXREZWNyeXB0UmVzdWx0IiwiRFVNTVlfSE9PS1MiLCJiZWZvcmVUZXN0IiwiYmVmb3JlU3VpdGUiLCJiZWZvcmVDYXNlIiwiYmVmb3JlQ29tbWFuZCIsImFmdGVyQ29tbWFuZCIsImFmdGVyVGVzdCIsImFmdGVyU3VpdGUiLCJhZnRlckNhc2UiLCJzZWxmIiwibW9kdWxlIiwiZXhwb3J0cyIsImdlbmVyYXRlVW5pcXVlSWQiLCJyYW5kb21CeXRlcyIsInRvU3RyaW5nIiwiZ2V0VGltZVN0YW1wIiwidXRjIiwidmFsdWVPZiIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb24iLCJzdWl0ZURlZiIsInRlc3RDb25maWciLCJpdGVyYXRpb25Db3VudCIsInN1aXRlIiwiaWQiLCJuYW1lIiwiaXRlcmF0aW9ucyIsInN1aXRlRmlsZVBhdGgiLCJqb2luIiwidGFyZ2V0IiwiY3dkIiwicGFyYW1NYW5hZ2VyIiwiZ2V0UGFyYW1ldGVyTWFuYWdlciIsInBhcmFtZXRlcnMiLCJnZXRNb2RlIiwicm93cyIsImNhcGFiaWxpdGllcyIsImVudmlyb25tZW50Iiwib3B0aW9ucyIsInBhcmFsbGVsIiwiY29uY3VycmVuY3kiLCJjYXNlcyIsImZvckVhY2giLCJjYXNlRGVmIiwidGMiLCJnZXRGaWxlTmFtZVdpdGhvdXRFeHQiLCJyZXNvbHZlUGF0aCIsImZvcm1hdCIsInB1c2giLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21KU0ZpbGUiLCJmaWxlUGF0aCIsInBhcmFtRmlsZSIsInBhcmFtTW9kZSIsIm5vUGFyYW1BdXRvU2VhcmNoIiwiZmlsZU5hbWVOb0V4dCIsInRlc3RjYXNlIiwicmVvcGVuU2Vzc2lvbiIsImRpcm5hbWUiLCJmaWxlIiwibW9kZSIsIm1haW5GaWxlUGF0aCIsInBhcmFtT3B0cyIsImF1dG9TZWFyY2giLCJwYXJhbUZpbGVQYXRoIiwiaXNBYnNvbHV0ZSIsImxvYWRQYXJhbWV0ZXJNYW5hZ2VyIiwiZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbkZpbGUiLCJmaWxlTmFtZSIsImJhc2VuYW1lIiwiZmlsZUV4dCIsImV4dG5hbWUiLCJmaWxlUGF0aE5vRXh0Iiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJtYWluRmlsZSIsImNzdlBhcmFtRmlsZSIsInR4dFBhcmFtRmlsZSIsInhsc1BhcmFtRmlsZSIsInhsc3hQYXJhbUZpbGUiLCJleGlzdHNTeW5jIiwiaW5pdCIsInBhdGhUb1Jlc29sdmUiLCJiYXNlRm9sZGVyIiwicmVzb2x2ZSIsIm1ha2VTZXJpYWxpemFibGUiLCJlcnIiLCJkZXN0cm95Q2lyY3VsYXIiLCJmcm9tIiwic2VlbiIsInRvIiwiQXJyYXkiLCJpc0FycmF5IiwiT2JqZWN0Iiwia2V5cyIsImluZGV4T2YiLCJzbGljZSIsImdldE1ldGhvZFNpZ25hdHVyZSIsIm1vZHVsZU5hbWUiLCJtZXRob2ROYW1lIiwibWV0aG9kQXJncyIsInN0cmluZ2lmeSIsImFyZ3MiLCJpbmRlbnRhdGlvbiIsIlN0cmluZyIsImxlbmd0aCIsInN0ciIsIkpTT04iLCJ2YWx1ZSIsIkVycm9yIiwiUmVnRXhwIiwic291cmNlIiwiZmxhZ3MiLCJyZXBsYWNlIiwiZW5kc1dpdGgiLCJlIiwiY29uc29sZSIsIndhcm4iLCJpbnNwZWN0IiwiZGVwdGgiLCJpc0luRGVidWdNb2RlIiwibG9hZFRlc3RIb29rcyIsImhvb2tzIiwiZXhlY3V0ZVRlc3RIb29rIiwibWV0aG9kIiwiZ2xvYmFsIiwiY2hhaUFuZE1vY2tlcnlMb2FkZWQiLCJjaGFpIiwibW9ja2VyeSIsImVuYWJsZSIsInVzZUNsZWFuQ2FjaGUiLCJ3YXJuT25SZXBsYWNlIiwid2Fybk9uVW5yZWdpc3RlcmVkIiwicmVnaXN0ZXJNb2NrIiwiYXBwbHkiLCJ1bmRlZmluZWQiLCJlcnJvciIsImdldE94TW9kdWxlc0RpciIsIl9fZGlybmFtZSIsImhvb2tMb2dzIiwibG9nZ2VyIiwib3JpZ2xvZyIsImxvZyIsIm9yaWdEZWJ1ZyIsImRlYnVnIiwib3JpZ0luZm8iLCJpbmZvIiwib3JpZ1dhcm4iLCJvcmlnRXJyb3IiLCJwcm9jZXNzQXJncyIsImFyZ3VtZW50QXJyYXkiLCJtYXAiLCJpdGVtIiwibWFrZVRyYW5zYWN0aW9uRmFpbGVkSWZTdGVwRmFpbGVkIiwic3RlcHMiLCJsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCIsIm5ld1N0ZXBzIiwiaWR4IiwiaW5jbHVkZXMiLCJzdGF0dXMiLCJkZWNyeXB0IiwidGV4dCIsImVuY3J5cHRlZFRleHQiLCJkZWNpcGhlciIsImNyZWF0ZURlY2lwaGVyaXYiLCJkZWNyeXB0ZWQiLCJ1cGRhdGUiLCJjb25jYXQiLCJmaW5hbCIsInJldFZhbCIsIk94eWdlbkVycm9yIiwiZXJyb3JIZWxwZXIiLCJlcnJvckNvZGUiLCJDUllQVE9fRVJST1IiLCJlbmNyeXB0IiwiY2lwaGVyIiwiY3JlYXRlQ2lwaGVyaXYiLCJlbmNyeXB0ZWQiLCJzbGVlcCIsInRpbWVvdXQiLCJQcm9taXNlIiwic2V0VGltZW91dCJdLCJtYXBwaW5ncyI6Ijs7OztBQXNCQTs7QUFDQTs7OztBQVhBLE1BQU1BLElBQUksR0FBR0MsT0FBTyxDQUFDLE1BQUQsQ0FBcEI7O0FBQ0EsTUFBTUMsRUFBRSxHQUFHRCxPQUFPLENBQUMsSUFBRCxDQUFsQjs7QUFDQSxNQUFNRSxNQUFNLEdBQUdGLE9BQU8sQ0FBQyxRQUFELENBQXRCOztBQUNBLE1BQU1HLE1BQU0sR0FBR0gsT0FBTyxDQUFDLFFBQUQsQ0FBdEI7O0FBQ0EsTUFBTUksSUFBSSxHQUFHSixPQUFPLENBQUMsTUFBRCxDQUFwQjs7QUFDQSxNQUFNSyxRQUFRLEdBQUdMLE9BQU8sQ0FBQyxvQkFB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QUd0TCxNQUFNLENBQUM0SyxNQUFQLENBQWMsQ0FBQ1UsU0FBRCxFQUFZRixNQUFNLENBQUNQLEtBQVAsRUFBWixDQUFkLENBQVo7QUFDQSxXQUFPUyxTQUFTLENBQUNqSyxRQUFWLENBQW1CLEtBQW5CLENBQVA7QUFDSCxHQTlWdUI7O0FBZ1d4QmtLLEVBQUFBLEtBQUssRUFBRSxVQUFTQyxPQUFULEVBQWtCO0FBQ3JCLFdBQU8sSUFBSUMsT0FBSixDQUFhaEcsT0FBRCxJQUFhaUcsVUFBVSxDQUFDakcsT0FBRCxFQUFVK0YsT0FBVixDQUFuQyxDQUFQO0FBQ0g7QUFsV3VCLENBQTVCIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogSGVscGVyIG1vZHVsZSBmb3IgaW50ZXJuYWwgT3h5Z2VuIHVzZVxyXG4gKi9cclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcclxuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xyXG5jb25zdCBtb21lbnQgPSByZXF1aXJlKCdtb21lbnQnKTtcclxuY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XHJcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XHJcbmNvbnN0IHBhc3N3b3JkID0gcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykuZW5jcnlwdGlvbktleTtcclxuY29uc3Qga2V5ID0gY3J5cHRvLnNjcnlwdFN5bmMocGFzc3dvcmQsICdHZkcnLCAyNCk7XHJcbmNvbnN0IGl2ID0gQnVmZmVyLmFsbG9jKDE2LCAwKTtcclxuY29uc3QgYWxnb3JpdGhtID0gJ2Flcy0xOTItY2JjJztcclxuXHJcbmltcG9ydCBPeHlnZW5FcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcblxyXG5mdW5jdGlvbiBEZWNyeXB0UmVzdWx0KHJlc3VsdCkge1xyXG4gICAgY29uc3QgZGVjcnlwdFJlc3VsdCA9IHJlc3VsdDtcclxuXHJcbiAgICB0aGlzLmdldERlY3J5cHRSZXN1bHQgPSAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGRlY3J5cHRSZXN1bHQ7XHJcbiAgICB9O1xyXG59XHJcblxyXG5jb25zdCBEVU1NWV9IT09LUyA9IHtcclxuICAgIGJlZm9yZVRlc3Q6ICgpID0+IHt9LFxyXG4gICAgYmVmb3JlU3VpdGU6ICgpID0+IHt9LFxyXG4gICAgYmVmb3JlQ2FzZTogKCkgPT4ge30sXHJcbiAgICBiZWZvcmVDb21tYW5kOiAoKSA9PiB7fSxcclxuICAgIGFmdGVyQ29tbWFuZDogKCkgPT4ge30sXHJcbiAgICBhZnRlclRlc3Q6ICgpID0+IHt9LFxyXG4gICAgYWZ0ZXJTdWl0ZTogKCkgPT4ge30sXHJcbiAgICBhZnRlckNhc2U6ICgpID0+IHt9LFxyXG59O1xyXG5cclxudmFyIHNlbGYgPSBtb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBnZW5lcmF0ZVVuaXF1ZUlkOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gY3J5cHRvLnJhbmRvbUJ5dGVzKDQpLnRvU3RyaW5nKCdoZXgnKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0VGltZVN0YW1wOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbW9tZW50LnV0YygpLnZhbHVlT2YoKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbjogYXN5bmMgZnVuY3Rpb24oc3VpdGVEZWYsIHRlc3RDb25maWcsIGl0ZXJhdGlvbkNvdW50ID0gMSkge1xyXG4gICAgICAgIHZhciBzdWl0ZSA9IG5ldyByZXF1aXJlKCcuLi9tb2RlbC90ZXN0c3VpdGUuanMnKSgpO1xyXG4gICAgICAgIHN1aXRlLmlkID0gbnVsbDtcclxuICAgICAgICBzdWl0ZS5uYW1lID0gc3VpdGVEZWYubmFtZTtcclxuICAgICAgICBzdWl0ZS5pZCA9IHN1aXRlRGVmLmlkO1xyXG4gICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gc3VpdGVEZWYuaXRlcmF0aW9ucyB8fCBzdWl0ZURlZi5pdGVyYXRpb25Db3VudCB8fCB0ZXN0Q29uZmlnLml0ZXJhdGlvbnMgfHwgaXRlcmF0aW9uQ291bnQ7XHJcbiAgICAgICAgY29uc3Qgc3VpdGVGaWxlUGF0aCA9IHN1aXRlRGVmLnBhdGggfHwgcGF0aC5qb2luKHRlc3RDb25maWcudGFyZ2V0LmN3ZCwgJ3N1aXRlcycsIGAke3N1aXRlRGVmLm5hbWV9Lmpzb25gKTtcclxuICAgICAgICBzdWl0ZS5wYXJhbU1hbmFnZXIgPSBhd2FpdCBzZWxmLmdldFBhcmFtZXRlck1hbmFnZXIoc3VpdGVGaWxlUGF0aCwgdGVzdENvbmZpZy5wYXJhbWV0ZXJzLCB0ZXN0Q29uZmlnLnRhcmdldC5jd2QpO1xyXG4gICAgICAgIGlmIChzdWl0ZS5wYXJhbU1hbmFnZXIgJiYgc3VpdGUucGFyYW1NYW5hZ2VyLmdldE1vZGUoKSA9PSAnYWxsJykge1xyXG4gICAgICAgICAgICBzdWl0ZS5pdGVyYXRpb25Db3VudCA9IHN1aXRlLnBhcmFtTWFuYWdlci5yb3dzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdWl0ZS5jYXBhYmlsaXRpZXMgPSBzdWl0ZURlZi5jYXBhYmlsaXRpZXMgfHwgdGVzdENvbmZpZy5jYXBhYmlsaXRpZXMgfHwge307XHJcbiAgICAgICAgc3VpdGUuZW52aXJvbm1lbnQgPSB0ZXN0Q29uZmlnLmVudmlyb25tZW50IHx8IG51bGw7XHJcbiAgICAgICAgc3VpdGUub3B0aW9ucyA9IHRlc3RDb25maWcub3B0aW9ucyB8fCBudWxsO1xyXG4gICAgICAgIHN1aXRlLnBhcmFsbGVsID0gc3VpdGVEZWYucGFyYWxsZWwgfHwgdGVzdENvbmZpZy5wYXJhbGxlbCB8fCB0ZXN0Q29uZmlnLmNvbmN1cnJlbmN5IHx8IDE7XHJcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBlYWNoIHRlc3QgY2FzZVxyXG4gICAgICAgIHN1aXRlRGVmLmNhc2VzLmZvckVhY2goY2FzZURlZiA9PiB7XHJcbiAgICAgICAgICAgIC8vIGluaXRpYWxpemUgdGVzdGNhc2Ugb2JqZWN0XHJcbiAgICAgICAgICAgIGNvbnN0IHRjID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RjYXNlLmpzJykoKTtcclxuICAgICAgICAgICAgaWYgKGNhc2VEZWYubmFtZSlcclxuICAgICAgICAgICAgICAgIHRjLm5hbWUgPSBjYXNlRGVmLm5hbWU7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRjLm5hbWUgPSBzZWxmLmdldEZpbGVOYW1lV2l0aG91dEV4dChjYXNlRGVmLnBhdGgpO1xyXG4gICAgICAgICAgICB0Yy5wYXRoID0gc2VsZi5yZXNvbHZlUGF0aChjYXNlRGVmLnBhdGgsIHRlc3RDb25maWcudGFyZ2V0LmN3ZCk7XHJcbiAgICAgICAgICAgIHRjLmZvcm1hdCA9ICdqcyc7XHJcbiAgICAgICAgICAgIHRjLml0ZXJhdGlvbkNvdW50ID0gY2FzZURlZi5pdGVyYXRpb25zIHx8IGNhc2VEZWYuaXRlcmF0aW9uQ291bnQgfHwgMTtcclxuICAgICAgICAgICAgc3VpdGUuY2FzZXMucHVzaCh0Yyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHN1aXRlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZVRlc3RTdWl0ZUZyb21KU0ZpbGU6IGFzeW5jIGZ1bmN0aW9uIChmaWxlUGF0aCwgcGFyYW1GaWxlID0gbnVsbCwgcGFyYW1Nb2RlID0gbnVsbCwgbm9QYXJhbUF1dG9TZWFyY2ggPSB0cnVlLCBpdGVyYXRpb25Db3VudCA9IDEpIHtcclxuICAgICAgICB2YXIgZmlsZU5hbWVOb0V4dCA9IHNlbGYuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KGZpbGVQYXRoKTtcclxuXHJcbiAgICAgICAgdmFyIHRlc3RjYXNlID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RjYXNlLmpzJykoKTtcclxuICAgICAgICB0ZXN0Y2FzZS5uYW1lID0gZmlsZU5hbWVOb0V4dDtcclxuICAgICAgICB0ZXN0Y2FzZS5wYXRoID0gZmlsZVBhdGg7XHJcbiAgICAgICAgdGVzdGNhc2UuZm9ybWF0ID0gJ2pzJztcclxuICAgICAgICB0ZXN0Y2FzZS5pdGVyYXRpb25Db3VudCA9IDE7XHJcblxyXG4gICAgICAgIHZhciBzdWl0ZSA9IG5ldyByZXF1aXJlKCcuLi9tb2RlbC90ZXN0c3VpdGUuanMnKSgpO1xyXG4gICAgICAgIHN1aXRlLm5hbWUgPSB0ZXN0Y2FzZS5uYW1lO1xyXG4gICAgICAgIHN1aXRlLmlkID0gdGVzdGNhc2UuaWQ7XHJcbiAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBpdGVyYXRpb25Db3VudDtcclxuICAgICAgICBzdWl0ZS5jYXNlcy5wdXNoKHRlc3RjYXNlKTtcclxuICAgICAgICBpZiAodGVzdGNhc2UucmVvcGVuU2Vzc2lvbikge1xyXG4gICAgICAgICAgICBzdWl0ZS5yZW9wZW5TZXNzaW9uID0gdGVzdGNhc2UucmVvcGVuU2Vzc2lvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3dkID0gcGF0aC5kaXJuYW1lKGZpbGVQYXRoKTtcclxuICAgICAgICBzdWl0ZS5wYXJhbU1hbmFnZXIgPSBhd2FpdCBzZWxmLmdldFBhcmFtZXRlck1hbmFnZXIoZmlsZVBhdGgsIHsgZmlsZTogcGFyYW1GaWxlLCBtb2RlOiBwYXJhbU1vZGUgfSwgY3dkKTtcclxuICAgICAgICAvLyBpZiBwYXJhbWV0ZXIgcmVhZGluZyBtb2RlIGlzICdhbGwnIHRoZW4gY2hhbmdlIGl0ZXJhdGlvbkNvdW50IHRvIHRoZSBhbW91bnQgb2Ygcm93cyBpbiB0aGUgcGFyYW0gZmlsZVxyXG4gICAgICAgIGlmIChzdWl0ZS5wYXJhbU1hbmFnZXIgJiYgcGFyYW1Nb2RlID09ICdhbGwnKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gc3VpdGUucGFyYW1NYW5hZ2VyLnJvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdWl0ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0UGFyYW1ldGVyTWFuYWdlcjogYXN5bmMgZnVuY3Rpb24obWFpbkZpbGVQYXRoLCBwYXJhbU9wdHMgPSBudWxsLCBjd2QgPSBudWxsLCBhdXRvU2VhcmNoID0gZmFsc2UpIHtcclxuICAgICAgICBsZXQgcGFyYW1GaWxlUGF0aCA9IHBhcmFtT3B0cyAmJiBwYXJhbU9wdHMuZmlsZSA/IHBhcmFtT3B0cy5maWxlIDogbnVsbDtcclxuICAgICAgICBsZXQgcGFyYW1Nb2RlID0gcGFyYW1PcHRzICYmIHBhcmFtT3B0cy5tb2RlID8gcGFyYW1PcHRzLm1vZGUgOiAnc2VxJztcclxuXHJcbiAgICAgICAgaWYgKHBhcmFtRmlsZVBhdGggJiYgY3dkICYmICFwYXRoLmlzQWJzb2x1dGUocGFyYW1GaWxlUGF0aCkpIHtcclxuICAgICAgICAgICAgcGFyYW1GaWxlUGF0aCA9IHBhdGguam9pbihjd2QsIHBhcmFtRmlsZVBhdGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHNlbGYubG9hZFBhcmFtZXRlck1hbmFnZXIobWFpbkZpbGVQYXRoLCBwYXJhbUZpbGVQYXRoLCBwYXJhbU1vZGUsIGF1dG9TZWFyY2gpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uRmlsZTogYXN5bmMgZnVuY3Rpb24gKGZpbGVQYXRoLCBwYXJhbUZpbGUsIHBhcmFtTW9kZSA9IG51bGwsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIGNvbnN0IHRlc3RDb25maWcgPSB7XHJcbiAgICAgICAgICAgIC4uLm9wdGlvbnMgfHwge30sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAocGFyYW1GaWxlKSB7XHJcbiAgICAgICAgICAgIHRlc3RDb25maWcucGFyYW1ldGVycyA9IHtcclxuICAgICAgICAgICAgICAgIGZpbGU6IHBhcmFtRmlsZSxcclxuICAgICAgICAgICAgICAgIG1vZGU6IHBhcmFtTW9kZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHNlbGYuZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbihyZXF1aXJlKGZpbGVQYXRoKSwgdGVzdENvbmZpZyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEZpbGVOYW1lV2l0aG91dEV4dDogZnVuY3Rpb24gKGZpbGVQYXRoKSB7XHJcbiAgICAgICAgdmFyIGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlUGF0aCk7XHJcbiAgICAgICAgdmFyIGZpbGVFeHQgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpO1xyXG4gICAgICAgIHZhciBmaWxlUGF0aE5vRXh0ID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIGZpbGVOYW1lLmxhc3RJbmRleE9mKGZpbGVFeHQpKTtcclxuICAgICAgICByZXR1cm4gZmlsZVBhdGhOb0V4dDtcclxuICAgIH0sXHJcblxyXG4gICAgbG9hZFBhcmFtZXRlck1hbmFnZXI6IGFzeW5jIGZ1bmN0aW9uKG1haW5GaWxlLCBwYXJhbUZpbGUsIHBhcmFtTW9kZSwgYXV0b1NlYXJjaCA9IGZhbHNlKSB7XHJcbiAgICAgICAgdmFyIHBhcmFtTWFuYWdlciA9IG51bGw7XHJcbiAgICAgICAgLy8gaWYgcGFyYW0gZmlsZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIGNoZWNrIGlmIEpTIGZpbGUgaXMgY29taW5nIGluIHBhaXIgd2l0aCBhIHBhcmFtZXRlciBmaWxlIFxyXG4gICAgICAgIC8vIChjdXJyZW50bHkgc3VwcG9ydGluZyBDU1Ygb3IgVFhUKVxyXG4gICAgICAgIGlmICghcGFyYW1GaWxlICYmIGF1dG9TZWFyY2gpIHtcclxuICAgICAgICAgICAgdmFyIGZpbGVOYW1lTm9FeHQgPSBzZWxmLmdldEZpbGVOYW1lV2l0aG91dEV4dChtYWluRmlsZSk7XHJcbiAgICAgICAgICAgIHZhciBjc3ZQYXJhbUZpbGUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG1haW5GaWxlKSwgZmlsZU5hbWVOb0V4dCArICcuY3N2Jyk7XHJcbiAgICAgICAgICAgIHZhciB0eHRQYXJhbUZpbGUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG1haW5GaWxlKSwgZmlsZU5hbWVOb0V4dCArICcudHh0Jyk7XHJcbiAgICAgICAgICAgIHZhciB4bHNQYXJhbUZpbGUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG1haW5GaWxlKSwgZmlsZU5hbWVOb0V4dCArICcueGxzJyk7XHJcbiAgICAgICAgICAgIHZhciB4bHN4UGFyYW1GaWxlID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShtYWluRmlsZSksIGZpbGVOYW1lTm9FeHQgKyAnLnhsc3gnKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGNzdlBhcmFtRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtRmlsZSA9IGNzdlBhcmFtRmlsZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmcy5leGlzdHNTeW5jKHR4dFBhcmFtRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtRmlsZSA9IHR4dFBhcmFtRmlsZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmcy5leGlzdHNTeW5jKHhsc1BhcmFtRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtRmlsZSA9IHhsc1BhcmFtRmlsZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmcy5leGlzdHNTeW5jKHhsc3hQYXJhbUZpbGUpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbUZpbGUgPSB4bHN4UGFyYW1GaWxlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJhbUZpbGUpIHtcclxuICAgICAgICAgICAgcGFyYW1NYW5hZ2VyID0gbmV3IHJlcXVpcmUoJy4vcGFyYW0tbWFuYWdlcicpKHBhcmFtRmlsZSwgcGFyYW1Nb2RlIHx8ICdzZXEnKTtcclxuICAgICAgICAgICAgYXdhaXQgcGFyYW1NYW5hZ2VyLmluaXQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcmFtTWFuYWdlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlc29sdmVQYXRoOiBmdW5jdGlvbihwYXRoVG9SZXNvbHZlLCBiYXNlRm9sZGVyKSB7XHJcbiAgICAgICAgaWYgKHBhdGguaXNBYnNvbHV0ZShwYXRoVG9SZXNvbHZlKSlcclxuICAgICAgICAgICAgcmV0dXJuIHBhdGhUb1Jlc29sdmU7XHJcbiAgICAgICAgcmV0dXJuIHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBwYXRoVG9SZXNvbHZlKTtcclxuICAgIH0sXHJcblxyXG4gICAgbWFrZVNlcmlhbGl6YWJsZTogZnVuY3Rpb24oZXJyKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBlcnIgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0cm95Q2lyY3VsYXIoZXJyLCBbXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlcnI7XHJcblxyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qb25wYWNrZXIvZGVzdHJveS1jaXJjdWxhclxyXG4gICAgICAgIGZ1bmN0aW9uIGRlc3Ryb3lDaXJjdWxhcihmcm9tLCBzZWVuKSB7XHJcbiAgICAgICAgICAgIHZhciB0byA9IEFycmF5LmlzQXJyYXkoZnJvbSkgPyBbXSA6IHt9O1xyXG4gICAgICAgICAgICBzZWVuLnB1c2goZnJvbSk7XHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGZyb20pLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZyb21ba2V5XSB8fCAodHlwZW9mIGZyb21ba2V5XSAhPSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShmcm9tW2tleV0pKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvW2tleV0gPSBmcm9tW2tleV07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlZW4uaW5kZXhPZihmcm9tW2tleV0pID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9ba2V5XSA9IGRlc3Ryb3lDaXJjdWxhcihmcm9tW2tleV0sIHNlZW4uc2xpY2UoMCkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHRvW2tleV0gPSAnW0NpcmN1bGFyXSc7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gdG87XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBnZXRNZXRob2RTaWduYXR1cmU6IGZ1bmN0aW9uKG1vZHVsZU5hbWUsIG1ldGhvZE5hbWUsIG1ldGhvZEFyZ3MpIHtcclxuICAgICAgICByZXR1cm4gbW9kdWxlTmFtZSArICcuJyArIG1ldGhvZE5hbWUgKyAnKCcgKyBzZWxmLnN0cmluZ2lmeShtZXRob2RBcmdzLCAwKSArICcpJztcclxuICAgIH0sXHJcblxyXG4gICAgLypcclxuICAgICAqIFVzZWQgdG8gc2VyaWFsaXplIG94eWdlbiBjb21tYW5kIHBhcmFtZXRlcnMuIFByb2R1Y2VzIGEgbm9uLWNvbXBsaWFudCBKU09OIHNlcmlhbGl6YXRpb24uXHJcbiAgICAgKi9cclxuICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKGFyZ3MsIGluZGVudGF0aW9uID0gMCkge1xyXG4gICAgICAgIC8vIHJldHVybiBzdHJpbmdzIGFzIGlzIChvdGhlcndpc2UgaWYgd2Ugc2VyaWFsaXplIHN0cmluZyBpdCB3aWxsIGdldCB3cmFwcGVkIGluIGRvdWJsZSBxdW90ZXMpXHJcbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzID09PSAnc3RyaW5nJyB8fCBhcmdzIGluc3RhbmNlb2YgU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhcmdzO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJyB8fCBhcmdzWzBdIGluc3RhbmNlb2YgU3RyaW5nKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJnc1swXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdHI7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgc3RyID0gSlNPTi5zdHJpbmdpZnkoYXJncywgKGtleSwgdmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnKSB7ICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Hb29nbGVDaHJvbWVMYWJzL2pzYmkvaXNzdWVzLzMwXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdW5kZWZpbmVkIGlzIGluc2lkZSBhbiBhcnJheSB0aGVuIGl0IHdpbGwgYmUgc2VyaWFsaXplZCBhcyBudWxsLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGhvd2V2ZXIgaWYgd2UganVzdCByZXR1cm4gJ3VuZGVmaW5lZCcgaGVyZSBhcyBzdHJpbmcsIGl0IHdpbGwgYmUgZW5jbG9zZWQgaW4gcXVvdGVzLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIHJldHVybiBtYWdpYyBzdHJpbmcgaW5zdGVhZCBhbmQgdHJpbSB0aGUgcXVvdGVzIGxhdGVyIG9uXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdfX1VOREVGSU5FRCc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJy8nICsgdmFsdWUuc291cmNlICsgJy8nICsgdmFsdWUuZmxhZ3M7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgICAgIH0sIGluZGVudGF0aW9uKTtcclxuICAgICAgICAgICAgLy8gdHJpbSB0aGUgZW5jbG9zaW5nIGFycmF5IGFuZCBhbnkgd2hpdGVzcGFjZVxyXG4gICAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXlxcW3sxfVxccyp8XFxzKlxcXXsxfSQvZywgJycpO1xyXG4gICAgICAgICAgICAvLyByZW1vdmUgc3BhY2UgYmVmb3JlIGxhc3QgfSBhbmQgXSwgdG8gbWFrZSBpbmRlbnRhdGlvbiBtdGNoIHRoZSBvcGVuaW5nIGJyYWNrZXRcclxuICAgICAgICAgICAgaWYgKHN0ci5lbmRzV2l0aCgnICB9JykpIHtcclxuICAgICAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgc3RyLmxlbmd0aCAtIDMpICsgJ30nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdHIuZW5kc1dpdGgoJyAgXScpKSB7XHJcbiAgICAgICAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIHN0ci5sZW5ndGggLSAzKSArICddJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBjb252ZXJ0IG1hZ2ljICd1bmRlZmluZWQnIHN0cmluZyB0byBwcm9wZXIgcmVwcmVzZW50YXRpb25cclxuICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1wiX19VTkRFRklORURcIi9nLCAndW5kZWZpbmVkJyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBzZXJpYWxpemUgY29tbWFuZCBhcmd1bWVudHM6ICcsIGUpO1xyXG4gICAgICAgICAgICAvLyBpZiBKU09OLnN0cmluZ2lmeSBmYWlscywgdGhlbiBmYWxsYmFjayB0byB1dGlsLmluc3BlY3QuXHJcbiAgICAgICAgICAgIC8vICh3ZSBkb24ndCB1c2UgdXRpbC5pbnNwZWN0IGluaXRpYWx5IGJlY2F1c2UgaXQgZG9lc24ndCBzdXBwb3J0IG91dHB1dCBpbmRlbnRhdGlvbilcclxuICAgICAgICAgICAgcmV0dXJuIHV0aWwuaW5zcGVjdChhcmdzWzBdLCB7IGRlcHRoOiAzIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgfSxcclxuXHJcbiAgICBpc0luRGVidWdNb2RlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAvLyB0aGlzIGFsd2F5cyB0cnVlO1xyXG4gICAgICAgIC8vIGNvbnN0IGFyZ3YgPSBwcm9jZXNzLmV4ZWNBcmd2LmpvaW4oKTtcclxuXHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3Byb2Nlc3MuZGVidWdQb3J0JywgcHJvY2Vzcy5kZWJ1Z1BvcnQpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYXJndi5pbmNsdWRlcygnaW5zcGVjdCcpXCIsIGFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QnKSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJhcmd2LmluY2x1ZGVzKCdpbnNwZWN0LWJyaycpXCIsIGFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QtYnJrJykpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYXJndi5pbmNsdWRlcygnZGVidWcnKVwiLCBhcmd2LmluY2x1ZGVzKCdkZWJ1ZycpKTtcclxuXHJcbiAgICAgICAgLy8gcmV0dXJuIHByb2Nlc3MuZGVidWdQb3J0IHx8IGFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QnKSB8fCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0LWJyaycpIHx8IGFyZ3YuaW5jbHVkZXMoJ2RlYnVnJyk7XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgbG9hZFRlc3RIb29rczogZnVuY3Rpb24ob3B0aW9ucykge1xyXG4gICAgICAgIGxldCBob29rcyA9IERVTU1ZX0hPT0tTO1xyXG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudGFyZ2V0ICYmIG9wdGlvbnMudGFyZ2V0Lm5hbWUgPT09ICdveHlnZW4uY29uZicpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGhvb2tzID0gcmVxdWlyZShvcHRpb25zLnRhcmdldC5wYXRoKS5ob29rcyB8fCBEVU1NWV9IT09LUztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdFcnJvciBsb2FkaW5nIHVzZXIgaG9va3M6JywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGhvb2tzO1xyXG4gICAgfSxcclxuXHJcbiAgICBleGVjdXRlVGVzdEhvb2s6IGFzeW5jIGZ1bmN0aW9uKGhvb2tzLCBtZXRob2QsIGFyZ3MpIHtcclxuICAgICAgICAvLyBpZiBob29rIGlzIG5vdCBkZWZpbmVkLCBqdXN0IHF1aWV0bHkgaWdub3JlIGl0XHJcbiAgICAgICAgaWYgKCFob29rcyB8fCAhbWV0aG9kIHx8ICFob29rc1ttZXRob2RdIHx8IHR5cGVvZiBob29rc1ttZXRob2RdICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZ2xvYmFsLmNoYWlBbmRNb2NrZXJ5TG9hZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoYWkgPSByZXF1aXJlKCdjaGFpJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2NrZXJ5ID0gcmVxdWlyZSgnbW9ja2VyeScpO1xyXG4gICAgICAgICAgICAgICAgbW9ja2VyeS5lbmFibGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIHVzZUNsZWFuQ2FjaGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgd2Fybk9uUmVwbGFjZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgd2Fybk9uVW5yZWdpc3RlcmVkOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBtb2NrZXJ5LnJlZ2lzdGVyTW9jaygnY2hhaScsIGNoYWkpO1xyXG4gICAgICAgICAgICAgICAgZ2xvYmFsLmNoYWlBbmRNb2NrZXJ5TG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYXdhaXQgaG9va3NbbWV0aG9kXS5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBIb29rIFwiJHttZXRob2R9XCIgaGFzIHRocm93biBhbiBlcnJvcjogJHtlLnRvU3RyaW5nKCl9YCk7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBnZXRPeE1vZHVsZXNEaXI6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnb3hfbW9kdWxlcycpO1xyXG4gICAgfSxcclxuXHJcbiAgICBob29rTG9ncyhsb2dnZXIpIHtcclxuICAgICAgICBjb25zdCBvcmlnbG9nID0gY29uc29sZS5sb2c7XHJcbiAgICAgICAgY29uc3Qgb3JpZ0RlYnVnID0gY29uc29sZS5kZWJ1ZztcclxuICAgICAgICBjb25zdCBvcmlnSW5mbyA9IGNvbnNvbGUuaW5mbztcclxuICAgICAgICBjb25zdCBvcmlnV2FybiA9IGNvbnNvbGUud2FybjtcclxuICAgICAgICBjb25zdCBvcmlnRXJyb3IgPSBjb25zb2xlLmVycm9yO1xyXG5cclxuICAgICAgICBjb25zdCBwcm9jZXNzQXJncyA9IChhcmd1bWVudEFycmF5KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChhcmd1bWVudEFycmF5ICYmIGFyZ3VtZW50QXJyYXkubWFwKSB7XHJcbiAgICAgICAgICAgICAgICBhcmd1bWVudEFycmF5Lm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYCR7aXRlbX1gKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChgJHt1dGlsLmluc3BlY3QoaXRlbSl9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQuam9pbignICcpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nID0gZnVuY3Rpb24gKC4uLmFyZ3VtZW50QXJyYXkpIHtcclxuICAgICAgICAgICAgb3JpZ2xvZy5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmluZm8ocHJvY2Vzc0FyZ3MoYXJndW1lbnRBcnJheSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc29sZS5kZWJ1ZyA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdEZWJ1Zy5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnNvbGUuaW5mbyA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdJbmZvLmFwcGx5KHRoaXMsIGFyZ3VtZW50QXJyYXkpO1xyXG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhwcm9jZXNzQXJncyhhcmd1bWVudEFycmF5KSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zb2xlLndhcm4gPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnV2Fybi5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLndhcm4ocHJvY2Vzc0FyZ3MoYXJndW1lbnRBcnJheSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc29sZS5lcnJvciA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdFcnJvci5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlVHJhbnNhY3Rpb25GYWlsZWRJZlN0ZXBGYWlsZWQoc3RlcHMpIHtcclxuICAgICAgICBpZiAoc3RlcHMgJiYgc3RlcHMubGVuZ3RoICYmIHN0ZXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbGV0IGxhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1N0ZXBzID0gWy4uLnN0ZXBzXTtcclxuICAgICAgICAgICAgc3RlcHMubWFwKChpdGVtLCBpZHgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLm5hbWUgJiYgaXRlbS5uYW1lLmluY2x1ZGVzICYmIGl0ZW0ubmFtZS5pbmNsdWRlcygnLnRyYW5zYWN0aW9uKCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdEZpbmRlZFRyYW5zYWN0aW9uSW5kZXggPSBpZHg7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCA9PT0gJ251bWJlcicgJiYgaXRlbS5zdGF0dXMgJiYgaXRlbS5zdGF0dXMgPT09ICdmYWlsZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RlcHNbbGFzdEZpbmRlZFRyYW5zYWN0aW9uSW5kZXhdWydzdGF0dXMnXSA9ICdmYWlsZWQnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBuZXdTdGVwcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdGVwcztcclxuICAgIH0sXHJcblxyXG4gICAgZGVjcnlwdCh0ZXh0KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IGVuY3J5cHRlZFRleHQgPSBCdWZmZXIuZnJvbSh0ZXh0LCAnaGV4Jyk7XHJcbiAgICAgICAgICAgIGxldCBkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KGFsZ29yaXRobSwga2V5LCBpdik7XHJcbiAgICAgICAgICAgIGxldCBkZWNyeXB0ZWQgPSBkZWNpcGhlci51cGRhdGUoZW5jcnlwdGVkVGV4dCk7XHJcbiAgICAgICAgICAgIGRlY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQoW2RlY3J5cHRlZCwgZGVjaXBoZXIuZmluYWwoKV0pO1xyXG4gICAgICAgICAgICBjb25zdCByZXRWYWwgPSBkZWNyeXB0ZWQudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEZWNyeXB0UmVzdWx0KHJldFZhbCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3h5Z2VuRXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkNSWVBUT19FUlJPUiwgXCJUaGUgcHJvdmlkZWQgYXJndW1lbnQgZG9lc24ndCBzZWVtIHRvIGJlIGEgdmFsaWQgY2lwaGVyIHByb2R1Y2VkIGJ5ICd1dGlscy5lbmNyeXB0J1wiKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGVuY3J5cHQodGV4dCkge1xyXG4gICAgICAgIGxldCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoYWxnb3JpdGhtLCBrZXksIGl2KTtcclxuICAgICAgICBsZXQgZW5jcnlwdGVkID0gY2lwaGVyLnVwZGF0ZSh0ZXh0KTtcclxuICAgICAgICBlbmNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtlbmNyeXB0ZWQsIGNpcGhlci5maW5hbCgpXSk7XHJcbiAgICAgICAgcmV0dXJuIGVuY3J5cHRlZC50b1N0cmluZygnaGV4Jyk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNsZWVwOiBmdW5jdGlvbih0aW1lb3V0KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQpKTtcclxuICAgIH1cclxufTtcclxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oxygen-cli",
3
- "version": "1.30.2",
3
+ "version": "1.30.3",
4
4
  "description": "Automation framework for testing modern applications",
5
5
  "main": "./build/index.js",
6
6
  "bin": {