oxygen-cli 1.37.8 → 1.38.0
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/build/core/OxygenCore.js +8 -2
- package/build/core/OxygenEvents.js +4 -2
- package/build/lib/cli-util.js +26 -6
- package/build/lib/cli.js +12 -2
- package/build/lib/util.js +2 -2
- package/build/model/suite-result.js +2 -1
- package/build/ox_modules/module-web.js +12 -7
- package/build/ox_reporters/reporter-rp.js +376 -0
- package/build/reporter/ReportAggregator.js +110 -43
- package/build/reporter/ReporterBase.js +2 -2
- package/build/reporter/WebSocketReporter.js +136 -0
- package/build/runners/oxygen/index.js +37 -22
- package/package.json +3 -1
package/build/lib/cli-util.js
CHANGED
|
@@ -213,6 +213,13 @@ function getConfigurations(target, argv) {
|
|
|
213
213
|
const err = new Error(`Unable to load file: ${target.path}. Reason: ${e.message} ${e.stack}`);
|
|
214
214
|
throw err;
|
|
215
215
|
}
|
|
216
|
+
} else if (target && target.configPath) {
|
|
217
|
+
try {
|
|
218
|
+
projConfigOpts = (0, _moduleRequire.default)(target.configPath);
|
|
219
|
+
} catch (e) {
|
|
220
|
+
const err = new Error(`Unable to load file: ${target.configPath}. Reason: ${e.message} ${e.stack}`);
|
|
221
|
+
throw err;
|
|
222
|
+
}
|
|
216
223
|
}
|
|
217
224
|
|
|
218
225
|
const envs = getEnvironments(target);
|
|
@@ -260,6 +267,7 @@ function getCommandLineOptions(argv) {
|
|
|
260
267
|
reopenSession: argv.reopen ? argv.reopen === 'true' : null,
|
|
261
268
|
iterations: argv.i ? parseInt(argv.i) : argv.iter ? parseInt(argv.iter) : null,
|
|
262
269
|
debugPort: argv.dbgport || null,
|
|
270
|
+
wsPort: argv.wsport || null,
|
|
263
271
|
delay: argv.d || argv.delay || null
|
|
264
272
|
};
|
|
265
273
|
|
|
@@ -311,10 +319,12 @@ function deleteNullProperties(obj) {
|
|
|
311
319
|
}
|
|
312
320
|
|
|
313
321
|
function processTargetPath(targetPath, cwd) {
|
|
322
|
+
cwd = cwd || process.cwd();
|
|
323
|
+
|
|
314
324
|
if (typeof targetPath === 'undefined') {
|
|
315
|
-
targetPath = cwd
|
|
325
|
+
targetPath = cwd;
|
|
316
326
|
} else {
|
|
317
|
-
targetPath = _util.default.resolvePath(targetPath, cwd
|
|
327
|
+
targetPath = _util.default.resolvePath(targetPath, cwd);
|
|
318
328
|
}
|
|
319
329
|
|
|
320
330
|
if (!_fs.default.existsSync(targetPath)) {
|
|
@@ -324,9 +334,10 @@ function processTargetPath(targetPath, cwd) {
|
|
|
324
334
|
const stats = _fs.default.lstatSync(targetPath);
|
|
325
335
|
|
|
326
336
|
const isDirector = stats.isDirectory();
|
|
337
|
+
let configFilePath;
|
|
327
338
|
|
|
328
339
|
if (isDirector) {
|
|
329
|
-
|
|
340
|
+
configFilePath = _path.default.join(targetPath, OXYGEN_CONFIG_FILE_NAME + '.js');
|
|
330
341
|
|
|
331
342
|
if (!_fs.default.existsSync(configFilePath)) {
|
|
332
343
|
configFilePath = _path.default.join(targetPath, OXYGEN_CONFIG_FILE_NAME + '.json');
|
|
@@ -335,16 +346,25 @@ function processTargetPath(targetPath, cwd) {
|
|
|
335
346
|
return null;
|
|
336
347
|
}
|
|
337
348
|
}
|
|
349
|
+
} else {
|
|
350
|
+
configFilePath = _path.default.join(cwd, OXYGEN_CONFIG_FILE_NAME + '.js');
|
|
338
351
|
|
|
339
|
-
|
|
352
|
+
if (!_fs.default.existsSync(configFilePath)) {
|
|
353
|
+
configFilePath = _path.default.join(cwd, OXYGEN_CONFIG_FILE_NAME + '.json');
|
|
354
|
+
|
|
355
|
+
if (!_fs.default.existsSync(configFilePath)) {
|
|
356
|
+
configFilePath = undefined;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
340
359
|
}
|
|
341
360
|
|
|
342
|
-
if (!
|
|
361
|
+
if (!targetPath) {
|
|
343
362
|
return null;
|
|
344
363
|
}
|
|
345
364
|
|
|
346
365
|
return {
|
|
347
366
|
path: targetPath,
|
|
367
|
+
configPath: configFilePath,
|
|
348
368
|
cwd: cwd || _path.default.dirname(targetPath),
|
|
349
369
|
name: _util.default.getFileNameWithoutExt(targetPath),
|
|
350
370
|
fullName: _path.default.basename(targetPath),
|
|
@@ -352,4 +372,4 @@ function processTargetPath(targetPath, cwd) {
|
|
|
352
372
|
extension: _path.default.extname(targetPath)
|
|
353
373
|
};
|
|
354
374
|
}
|
|
355
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2xpLXV0aWwuanMiXSwibmFtZXMiOlsiT1hZR0VOX0NPTkZJR19GSUxFX05BTUUiLCJPWFlHRU5fRU5WX0ZJTEVfTkFNRSIsIk9YWUdFTl9QQUdFX09CSkVDVF9GSUxFX05BTUUiLCJERUZBVUxUX1JFUE9SVEVSIiwiZ2VuZXJhdGVUZXN0T3B0aW9ucyIsImNvbmZpZyIsImFyZ3YiLCJvcHRpb25zIiwiZW52IiwibG9hZEVudmlyb25tZW50VmFyaWFibGVzIiwicG8iLCJnZXRQYWdlT2JqZWN0RmlsZVBhdGgiLCJzdWl0ZXMiLCJsb2FkU3VpdGVzIiwiZnJhbWV3b3JrIiwidG9Mb3dlckNhc2UiLCJ0YXJnZXQiLCJpc0NvbmZpZ0ZpbGUiLCJuYW1lIiwiaW5kZXhPZiIsImV4dGVuc2lvbiIsInB1c2giLCJveHV0aWwiLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21KU0ZpbGUiLCJwYXRoIiwicGFyYW1ldGVycyIsImZpbGUiLCJtb2RlIiwiaXRlcmF0aW9ucyIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb25GaWxlIiwic3VpdGVEZWZzIiwiQXJyYXkiLCJpc0FycmF5Iiwic3VpdGVzRm9sZGVyIiwiam9pbiIsImN3ZCIsImZzIiwiZXhpc3RzU3luYyIsImxvYWRTdWl0ZURlZmluaXRpb25zRnJvbUZvbGRlciIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJzdWl0ZURlZiIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb24iLCJzZWxlY3RlZFN1aXRlTmFtZXMiLCJzcGxpdCIsImZpbHRlciIsIngiLCJpbmNsdWRlcyIsImZvbGRlclBhdGgiLCJmaWxlcyIsInJlYWRkaXJTeW5jIiwiZXh0bmFtZSIsImZ1bGxQYXRoIiwicG9GaWxlTmFtZSIsInByb2Nlc3MiLCJwb0ZpbGVQYXRoIiwicmVzb2x2ZSIsImUiLCJlcnIiLCJFcnJvciIsIm1lc3NhZ2UiLCJzdGFjayIsImVudk5hbWUiLCJlbnZpcm9ubWVudCIsImRlZmF1bHRFbnZGaWxlIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVkaWNhdGVkRW52RmlsZUpzIiwiZGVkaWNhdGVkRW52RmlsZUpzb24iLCJnZXRFbnZpcm9ubWVudHMiLCJ0YXJnZXRDd2QiLCJnZXRDb25maWd1cmF0aW9ucyIsIkRFRkFVTFRfT1BUUyIsImJyb3dzZXJOYW1lIiwic2VsZW5pdW1VcmwiLCJhcHBpdW1VcmwiLCJyZW9wZW5TZXNzaW9uIiwicmVSdW5PbkZhaWxlZCIsImRlYnVnUG9ydCIsImRlbGF5IiwiY29sbGVjdERldmljZUxvZ3MiLCJjb2xsZWN0QXBwaXVtTG9ncyIsImNvbGxlY3RCcm93c2VyTG9ncyIsInJlcG9ydGluZyIsInJlcG9ydGVycyIsImNtZE9wdHMiLCJnZXRDb21tYW5kTGluZU9wdGlvbnMiLCJwcm9qQ29uZmlnT3B0cyIsImVudnMiLCJpc0NtZE9wdHNSZXBvcnRGb3JtYXQiLCJpc0NvbmZpZ1JlcG9ydEZvcm1hdCIsImJhc2VOYW1lIiwib3B0cyIsImIiLCJicm93c2VyIiwicyIsInNlcnZlciIsInJlb3BlbiIsImkiLCJwYXJzZUludCIsIml0ZXIiLCJkYmdwb3J0IiwiZCIsInJmIiwibGVuZ3RoIiwicmVwb3J0Rm9ybWF0cyIsInJvIiwib3V0cHV0RGlyIiwicCIsInBhcmFtIiwicG0iLCJzcGVjcyIsIm1vZHVsZXMiLCJkZWxldGVOdWxsUHJvcGVydGllcyIsIm9iaiIsImNsb25lIiwia2V5cyIsImtleSIsInVuZGVmaW5lZCIsInByb2Nlc3NUYXJnZXRQYXRoIiwidGFyZ2V0UGF0aCIsInJlc29sdmVQYXRoIiwic3RhdHMiLCJsc3RhdFN5bmMiLCJpc0RpcmVjdG9yIiwiaXNEaXJlY3RvcnkiLCJjb25maWdGaWxlUGF0aCIsImRpcm5hbWUiLCJnZXRGaWxlTmFtZVdpdGhvdXRFeHQiLCJmdWxsTmFtZSIsImJhc2VuYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztB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LEtBQWhELENBQXJCOztBQUNBLFFBQUksQ0FBQ29DLFlBQUdDLFVBQUgsQ0FBYzRGLGNBQWQsQ0FBTCxFQUFvQztBQUNoQ0EsTUFBQUEsY0FBYyxHQUFHekcsY0FBS1UsSUFBTCxDQUFVeUYsVUFBVixFQUFzQjNILHVCQUF1QixHQUFHLE9BQWhELENBQWpCOztBQUNBLFVBQUksQ0FBQ29DLFlBQUdDLFVBQUgsQ0FBYzRGLGNBQWQsQ0FBTCxFQUFvQztBQUNoQyxlQUFPLElBQVA7QUFDSDtBQUNKOztBQUNETixJQUFBQSxVQUFVLEdBQUdNLGNBQWI7QUFDSDs7QUFDRCxNQUFJLENBQUM3RixZQUFHQyxVQUFILENBQWNzRixVQUFkLENBQUwsRUFBZ0M7QUFDNUIsV0FBTyxJQUFQO0FBQ0g7O0FBQ0QsU0FBTztBQUVIbkcsSUFBQUEsSUFBSSxFQUFFbUcsVUFGSDtBQUlIeEYsSUFBQUEsR0FBRyxFQUFFQSxHQUFHLElBQUlYLGNBQUswRyxPQUFMLENBQWFQLFVBQWIsQ0FKVDtBQU1IekcsSUFBQUEsSUFBSSxFQUFFSSxjQUFPNkcscUJBQVAsQ0FBNkJSLFVBQTdCLENBTkg7QUFRSFMsSUFBQUEsUUFBUSxFQUFFNUcsY0FBSzZHLFFBQUwsQ0FBY1YsVUFBZCxDQVJQO0FBVUg3QixJQUFBQSxRQUFRLEVBQUV0RSxjQUFLNkcsUUFBTCxDQUFjN0csY0FBSzBHLE9BQUwsQ0FBYVAsVUFBYixDQUFkLENBVlA7QUFZSHZHLElBQUFBLFNBQVMsRUFBRUksY0FBSzRCLE9BQUwsQ0FBYXVFLFVBQWI7QUFaUixHQUFQO0FBY0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcclxuaW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IG94dXRpbCBmcm9tICcuL3V0aWwnO1xyXG5pbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnYXN5bmMnO1xyXG5pbXBvcnQgbW9kdWxlUmVxdWlyZSBmcm9tICcuL21vZHVsZVJlcXVpcmUnO1xyXG5cclxuZXhwb3J0IGNvbnN0IE9YWUdFTl9DT05GSUdfRklMRV9OQU1FID0gJ294eWdlbi5jb25mJztcclxuZXhwb3J0IGNvbnN0IE9YWUdFTl9FTlZfRklMRV9OQU1FID0gJ294eWdlbi5lbnYnO1xyXG5leHBvcnQgY29uc3QgT1hZR0VOX1BBR0VfT0JKRUNUX0ZJTEVfTkFNRSA9ICdveHlnZW4ucG8nO1xyXG5leHBvcnQgY29uc3QgREVGQVVMVF9SRVBPUlRFUiA9ICdodG1sJztcclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVRlc3RPcHRpb25zKGNvbmZpZywgYXJndikge1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHsgLi4uY29uZmlnIH07XHJcbiAgICBvcHRpb25zLmVudiA9IGxvYWRFbnZpcm9ubWVudFZhcmlhYmxlcyhjb25maWcsIGFyZ3YpO1xyXG4gICAgb3B0aW9ucy5wbyA9IGdldFBhZ2VPYmplY3RGaWxlUGF0aChjb25maWcsIGFyZ3YpO1xyXG4gICAgb3B0aW9ucy5zdWl0ZXMgPSBhd2FpdCBsb2FkU3VpdGVzKGNvbmZpZywgYXJndik7XHJcbiAgICByZXR1cm4gb3B0aW9ucztcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRTdWl0ZXMoY29uZmlnLCBhcmd2KSB7XHJcbiAgICBpZiAoY29uZmlnLmZyYW1ld29yayAmJiB0eXBlb2YgY29uZmlnLmZyYW1ld29yayA9PT0gJ3N0cmluZycgJiYgY29uZmlnLmZyYW1ld29yay50b0xvd2VyQ2FzZSgpICE9PSAnb3h5Z2VuJykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBjb25maWc7XHJcbiAgICBjb25zdCBpc0NvbmZpZ0ZpbGUgPSB0YXJnZXQgJiYgdGFyZ2V0Lm5hbWUgJiYgdGFyZ2V0Lm5hbWUuaW5kZXhPZihPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSkgPT09IDA7XHJcbiAgICBsZXQgc3VpdGVzID0gW107XHJcbiAgICAvLyBpZiBhbiBpbmRpdmlkdWFsIHNjcmlwdCBvciBzdWl0ZSBmaWxlIHdhcyBwYXNzZWRcclxuICAgIGlmICghaXNDb25maWdGaWxlKSB7XHJcbiAgICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQuZXh0ZW5zaW9uID09PSAnLmpzJykge1xyXG4gICAgICAgICAgICBzdWl0ZXMucHVzaChhd2FpdCBveHV0aWwuZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSlNGaWxlKHRhcmdldC5wYXRoLCBjb25maWcucGFyYW1ldGVycy5maWxlLCBjb25maWcucGFyYW1ldGVycy5tb2RlLCBmYWxzZSwgY29uZmlnLml0ZXJhdGlvbnMgfHwgMSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmV4dGVuc2lvbiA9PT0gJy5qc29uJykge1xyXG4gICAgICAgICAgICBzdWl0ZXMucHVzaChhd2FpdCBveHV0aWwuZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbkZpbGUodGFyZ2V0LnBhdGgsIGNvbmZpZy5wYXJhbWV0ZXJzLmZpbGUsIGNvbmZpZy5wYXJhbWV0ZXJzLm1vZGUsIGNvbmZpZykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGlmIGEgZm9sZGVyIG9yIGEgY29uZmlndXJhdGlvbiBmaWxlIHdhcyBwYXNzZWRcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGxldCBzdWl0ZURlZnMgPSBbXTtcclxuICAgICAgICBpZiAoY29uZmlnLnN1aXRlcyAmJiBBcnJheS5pc0FycmF5KGNvbmZpZy5zdWl0ZXMpKSB7XHJcbiAgICAgICAgICAgIHN1aXRlRGVmcyA9IGNvbmZpZy5zdWl0ZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNoZWNrIGlmIG1vcmUgc3VpdGVzIGFyZSBkZWZpbmVkIGluIHRoZSAnc3VpdGVzJyBmb2xkZXJcclxuICAgICAgICBjb25zdCBzdWl0ZXNGb2xkZXIgPSBwYXRoLmpvaW4odGFyZ2V0LmN3ZCwgJ3N1aXRlcycpO1xyXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHN1aXRlc0ZvbGRlcikpIHtcclxuICAgICAgICAgICAgc3VpdGVEZWZzID0gW1xyXG4gICAgICAgICAgICAgICAgLi4uc3VpdGVEZWZzLFxyXG4gICAgICAgICAgICAgICAgLi4ubG9hZFN1aXRlRGVmaW5pdGlvbnNGcm9tRm9sZGVyKHN1aXRlc0ZvbGRlcilcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gbWVyZ2Ugc3VpdGVzIGNvbmZpZ3VyZWQgaW4gdGhlIHByb2plY3QgY29uZmlnIGZpbGUgYW5kIHRob3NlIGZvdW5kIGluICdzdWl0ZXMnIGZvbGRlclxyXG4gICAgICAgIHN1aXRlcyA9IGF3YWl0IFByb21pc2UuYWxsKHN1aXRlRGVmcy5tYXAoYXN5bmMgKHN1aXRlRGVmKSA9PiBhd2FpdCBveHV0aWwuZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbihzdWl0ZURlZiwgY29uZmlnKSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZmlsdGVyIG91dCBzdWl0ZXMgaWYgJy0tc3VpdGVzJyBjb21tYW5kIGxpbmUgYXJndW1lbnQgd2FzIHNwZWNpZmllZFxyXG4gICAgaWYgKGFyZ3Yuc3VpdGVzICYmIHR5cGVvZiBhcmd2LnN1aXRlcyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFN1aXRlTmFtZXMgPSBhcmd2LnN1aXRlcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgIHN1aXRlcyA9IHN1aXRlcy5maWx0ZXIoeCA9PiBzZWxlY3RlZFN1aXRlTmFtZXMuaW5jbHVkZXMoeC5uYW1lKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3VpdGVzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZFN1aXRlRGVmaW5pdGlvbnNGcm9tRm9sZGVyKGZvbGRlclBhdGgpIHtcclxuICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoZm9sZGVyUGF0aCk7XHJcbiAgICBsZXQgc3VpdGVEZWZzID0gW107XHJcbiAgICBmb3JFYWNoKGZpbGVzLCBmaWxlID0+IHtcclxuICAgICAgICBpZiAocGF0aC5leHRuYW1lKGZpbGUpID09PSAnLmpzb24nKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKGZvbGRlclBhdGgsIGZpbGUpO1xyXG4gICAgICAgICAgICBzdWl0ZURlZnMucHVzaChtb2R1bGVSZXF1aXJlKGZ1bGxQYXRoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc3VpdGVEZWZzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFnZU9iamVjdEZpbGVQYXRoKGNvbmZpZywgYXJndiA9IHt9KSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBjb25maWcudGFyZ2V0IHx8IHt9O1xyXG4gICAgY29uc3QgcG9GaWxlTmFtZSA9IGFyZ3YucG8gfHwgYCR7T1hZR0VOX1BBR0VfT0JKRUNUX0ZJTEVfTkFNRX0uanNgO1xyXG4gICAgY29uc3QgY3dkID0gdGFyZ2V0LmN3ZCB8fCBwcm9jZXNzLmN3ZCgpO1xyXG4gICAgbGV0IHBvRmlsZVBhdGggPSBwYXRoLnJlc29sdmUoY3dkLCBwb0ZpbGVOYW1lKTtcclxuICAgIHBvRmlsZVBhdGggPSBmcy5leGlzdHNTeW5jKHBvRmlsZVBhdGgpID8gcG9GaWxlUGF0aCA6IG51bGw7XHJcblxyXG4gICAgaWYgKHBvRmlsZVBhdGgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBtb2R1bGVSZXF1aXJlKHBvRmlsZVBhdGgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcG9GaWxlUGF0aDtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgVW5hYmxlIHRvIGxvYWQgZmlsZTogJHtwb0ZpbGVQYXRofS4gUmVhc29uOiAke2UubWVzc2FnZX0gJHtlLnN0YWNrfWApO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRFbnZpcm9ubWVudFZhcmlhYmxlcyhjb25maWcsIGFyZ3YpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGNvbmZpZy50YXJnZXQgfHwge307XHJcbiAgICBjb25zdCBlbnZOYW1lID0gYXJndi5lbnYgfHwgY29uZmlnLmVudmlyb25tZW50IHx8ICdkZWZhdWx0JztcclxuICAgIGNvbnN0IGN3ZCA9IHRhcmdldC5jd2QgfHwgcHJvY2Vzcy5jd2QoKTtcclxuICAgIGNvbnN0IGRlZmF1bHRFbnZGaWxlID0gcGF0aC5qb2luKGN3ZCwgYCR7T1hZR0VOX0VOVl9GSUxFX05BTUV9LmpzYCk7XHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhkZWZhdWx0RW52RmlsZSkpIHtcclxuICAgICAgICBjb25zdCBlbnYgPSBtb2R1bGVSZXF1aXJlKGRlZmF1bHRFbnZGaWxlKTtcclxuICAgICAgICBpZiAoZW52ICYmIHR5cGVvZiBlbnYgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlbnYsIGVudk5hbWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbnZbZW52TmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gdHJ5IHRvIHJlc29sdmUgYSBkZWRpY2F0ZWQgZW52aXJvbm1lbnQgZmlsZSBpbiAnZW52JyBzdWIgZm9sZGVyXHJcbiAgICBjb25zdCBkZWRpY2F0ZWRFbnZGaWxlSnMgPSBwYXRoLmpvaW4oY3dkLCAnZW52JywgYCR7ZW52TmFtZX0uanNgKTtcclxuICAgIGNvbnN0IGRlZGljYXRlZEVudkZpbGVKc29uID0gcGF0aC5qb2luKGN3ZCwgJ2VudicsIGAke2Vudk5hbWV9Lmpzb25gKTtcclxuICAgIGlmIChmcy5leGlzdHNTeW5jKGRlZGljYXRlZEVudkZpbGVKcykpIHtcclxuICAgICAgICByZXR1cm4gbW9kdWxlUmVxdWlyZShkZWRpY2F0ZWRFbnZGaWxlSnMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZnMuZXhpc3RzU3luYyhkZWRpY2F0ZWRFbnZGaWxlSnNvbikpIHtcclxuICAgICAgICByZXR1cm4gbW9kdWxlUmVxdWlyZShkZWRpY2F0ZWRFbnZGaWxlSnNvbik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge307XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnZpcm9ubWVudHModGFyZ2V0KSB7XHJcbiAgICBsZXQgdGFyZ2V0Q3dkID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5jd2QpIHtcclxuICAgICAgICB0YXJnZXRDd2QgPSB0YXJnZXQuY3dkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGN3ZCA9IHRhcmdldEN3ZCB8fCBwcm9jZXNzLmN3ZCgpO1xyXG4gICAgY29uc3QgZGVmYXVsdEVudkZpbGUgPSBwYXRoLmpvaW4oY3dkLCBgJHtPWFlHRU5fRU5WX0ZJTEVfTkFNRX0uanNgKTtcclxuICAgIGlmIChmcy5leGlzdHNTeW5jKGRlZmF1bHRFbnZGaWxlKSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtb2R1bGVSZXF1aXJlKGRlZmF1bHRFbnZGaWxlKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgVW5hYmxlIHRvIGxvYWQgZmlsZTogJHtkZWZhdWx0RW52RmlsZX0uIFJlYXNvbjogJHtlLm1lc3NhZ2V9ICR7ZS5zdGFja31gKTtcclxuICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7fTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZ3VyYXRpb25zKHRhcmdldCwgYXJndikge1xyXG4gICAgLy8gcHJvY2VzcyBjb21tYW5kIGxpbmUgYXJndW1lbnRzXHJcbiAgICBsZXQgdGFyZ2V0Q3dkID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5jd2QpIHtcclxuICAgICAgICB0YXJnZXRDd2QgPSB0YXJnZXQuY3dkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IERFRkFVTFRfT1BUUyA9IHtcclxuICAgICAgICBjd2Q6IHRhcmdldCA/ICh0YXJnZXRDd2QgfHwgcHJvY2Vzcy5jd2QoKSkgOiBwcm9jZXNzLmN3ZCgpLFxyXG4gICAgICAgIHRhcmdldDogdGFyZ2V0LFxyXG4gICAgICAgIGJyb3dzZXJOYW1lOiAnY2hyb21lJyxcclxuICAgICAgICBzZWxlbml1bVVybCA6ICdodHRwOi8vbG9jYWxob3N0OjQ0NDQvd2QvaHViJyxcclxuICAgICAgICBhcHBpdW1VcmwgOiAnaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1YicsXHJcbiAgICAgICAgcmVvcGVuU2Vzc2lvbjogZmFsc2UsXHJcbiAgICAgICAgcmVSdW5PbkZhaWxlZDogZmFsc2UsXHJcbiAgICAgICAgaXRlcmF0aW9ucyA6IDEsXHJcbiAgICAgICAgZGVidWdQb3J0OiBudWxsLFxyXG4gICAgICAgIGRlbGF5OiBudWxsLFxyXG4gICAgICAgIGNvbGxlY3REZXZpY2VMb2dzOiBmYWxzZSxcclxuICAgICAgICBjb2xsZWN0QXBwaXVtTG9nczogZmFsc2UsXHJcbiAgICAgICAgY29sbGVjdEJyb3dzZXJMb2dzOiBmYWxzZSxcclxuICAgICAgICByZXBvcnRpbmc6IHtcclxuICAgICAgICAgICAgcmVwb3J0ZXJzOiBbREVGQVVMVF9SRVBPUlRFUl1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHBhcmFtZXRlcnMgOiB7XHJcbiAgICAgICAgICAgIGZpbGU6IG51bGwsXHJcbiAgICAgICAgICAgIG1vZGU6ICdzZXEnXHJcbiAgICAgICAgfSxcclxuICAgIH07XHJcbiAgICAvLyByZXRyaWV2ZSBvcHRpb25zIHByb3ZpZGVkIHZpYSBjb21tYW5kIGxpbmUgYXJndW1lbnRzXHJcbiAgICBjb25zdCBjbWRPcHRzID0gZ2V0Q29tbWFuZExpbmVPcHRpb25zKGFyZ3YpO1xyXG4gICAgLy8gaWYgdGhlIHRhcmdldCBpcyBveHlnZW4gY29uZmlnIGZpbGUsIG1lcmdlIGl0cyBjb250ZW50IHdpdGggdGhlIGRlZmF1bHQgb3B0aW9uc1xyXG4gICAgbGV0IHByb2pDb25maWdPcHRzID0ge307XHJcbiAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5uYW1lID09PSBPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSAmJiAodGFyZ2V0LmV4dGVuc2lvbiA9PT0gJy5qcycgfHwgdGFyZ2V0LmV4dGVuc2lvbiA9PT0gJy5qc29uJykpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBwcm9qQ29uZmlnT3B0cyA9IG1vZHVsZVJlcXVpcmUodGFyZ2V0LnBhdGgpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBmaWxlOiAke3RhcmdldC5wYXRofS4gUmVhc29uOiAke2UubWVzc2FnZX0gJHtlLnN0YWNrfWApO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgZW52cyA9IGdldEVudmlyb25tZW50cyh0YXJnZXQpO1xyXG5cclxuICAgIGlmIChwcm9qQ29uZmlnT3B0cy5lbnZzKSB7XHJcbiAgICAgICAgLy8gbWVyZ2UgZXh0ZXJuYWwgZW52aXJvbm1lbnRzIGRlZmluaXRpb24gd2l0aCB0aGUgb25lIGluIHRoZSBjb25maWcgZmlsZVxyXG4gICAgICAgIHByb2pDb25maWdPcHRzLmVudnMgPSB7IC4uLnByb2pDb25maWdPcHRzLmVudnMsIC4uLmVudnMgfTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHByb2pDb25maWdPcHRzID0geyAuLi5wcm9qQ29uZmlnT3B0cywgZW52czogZW52cyB9O1xyXG4gICAgfVxyXG4gICAgLy8gbWFrZSBzdXJlIHRvIHNldCBkZWZhdWx0IEhUTUwgcmVwb3J0ZXIgaWYgcmVwb3J0aW5nIG9wdGlvbnMgYXJlIG5vdCBwcm92aWRlZCBpbiBveHlnZW4uY29uZiBmaWxlIGFuZCB2aWEgY29tbWFuZCBsaW5lXHJcbiAgICBjb25zdCBpc0NtZE9wdHNSZXBvcnRGb3JtYXQgPSBjbWRPcHRzLnJlcG9ydGluZyAmJiBjbWRPcHRzLnJlcG9ydGluZy5yZXBvcnRlcnM7XHJcbiAgICBjb25zdCBpc0NvbmZpZ1JlcG9ydEZvcm1hdCA9IHByb2pDb25maWdPcHRzLnJlcG9ydGluZyAmJiBwcm9qQ29uZmlnT3B0cy5yZXBvcnRpbmcucmVwb3J0ZXJzO1xyXG4gICAgaWYgKCFpc0NtZE9wdHNSZXBvcnRGb3JtYXQgJiYgIWlzQ29uZmlnUmVwb3J0Rm9ybWF0KSB7XHJcbiAgICAgICAgaWYgKCFwcm9qQ29uZmlnT3B0cy5yZXBvcnRpbmcpIHtcclxuICAgICAgICAgICAgcHJvakNvbmZpZ09wdHMucmVwb3J0aW5nID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHByb2pDb25maWdPcHRzLnJlcG9ydGluZy5yZXBvcnRlcnMgPSBbREVGQVVMVF9SRVBPUlRFUl07XHJcbiAgICB9XHJcbiAgICAvLyBkZXRlcm1pbmUgdGVzdCBuYW1lXHJcbiAgICBsZXQgbmFtZSA9IGNtZE9wdHMubmFtZSB8fCBwcm9qQ29uZmlnT3B0cy5uYW1lIHx8IG51bGw7XHJcbiAgICBpZiAoIW5hbWUgJiYgdGFyZ2V0KSB7XHJcbiAgICAgICAgbmFtZSA9IHRhcmdldC5uYW1lICE9PSBPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSA/IHRhcmdldC5uYW1lIDogdGFyZ2V0LmJhc2VOYW1lO1xyXG4gICAgfVxyXG4gICAgLy8gbWVyZ2Ugb3B0aW9ucyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyBvcmRlciAodGhlIGxhc3Qgb25lIG92ZXJyaWRlcyB0aGUgcHJldmlvdXMgb25lKTpcclxuICAgIC8vIGRlZmF1bHQgb3B0aW9ucywgcHJvamVjdCBjb25maWcgZmlsZSwgY29tbWFuZCBsaW5lIGFyZ3VtZW50c1xyXG4gICAgcmV0dXJuIHsgLi4uREVGQVVMVF9PUFRTLCAuLi5wcm9qQ29uZmlnT3B0cywgLi4uY21kT3B0cywgbmFtZTogbmFtZSB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tbWFuZExpbmVPcHRpb25zKGFyZ3YpIHtcclxuICAgIGNvbnN0IG9wdHMgPSB7XHJcbiAgICAgICAgLy8gc3dpdGNoOiAtLW5hbWUgXHJcbiAgICAgICAgbmFtZTogYXJndi5uYW1lIHx8IG51bGwsXHJcbiAgICAgICAgLy8gc3dpdGNoOiAtYiBvciAtLWJyb3dzZXJcclxuICAgICAgICBicm93c2VyTmFtZSA6IGFyZ3YuYiB8fCBhcmd2LmJyb3dzZXIgfHwgbnVsbCxcclxuICAgICAgICBzZWxlbml1bVVybCA6IGFyZ3YucyB8fCBhcmd2LnNlcnZlciB8fCBudWxsLFxyXG4gICAgICAgIGFwcGl1bVVybCA6IGFyZ3YucyB8fCBhcmd2LnNlcnZlciB8fCBudWxsLFxyXG4gICAgICAgIHJlb3BlblNlc3Npb246IGFyZ3YucmVvcGVuID8gYXJndi5yZW9wZW4gPT09ICd0cnVlJyA6IG51bGwsXHJcbiAgICAgICAgaXRlcmF0aW9ucyA6IGFyZ3YuaSA/IHBhcnNlSW50KGFyZ3YuaSkgOiAoYXJndi5pdGVyID8gcGFyc2VJbnQoYXJndi5pdGVyKSA6IG51bGwpLFxyXG4gICAgICAgIGRlYnVnUG9ydDogYXJndi5kYmdwb3J0IHx8IG51bGwsXHJcbiAgICAgICAgZGVsYXk6IGFyZ3YuZCB8fCBhcmd2LmRlbGF5IHx8IG51bGwsXHJcbiAgICB9O1xyXG4gICAgLy8gc3dpdGNoOiAtLXJmIGZsYWdcclxuICAgIGlmIChhcmd2LnJmICYmIHR5cGVvZiBhcmd2LnJmID09PSAnc3RyaW5nJyAmJiBhcmd2LnJmLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCByZXBvcnRGb3JtYXRzID0gYXJndi5yZi5zcGxpdCgnLCcpO1xyXG4gICAgICAgIG9wdHMucmVwb3J0aW5nID0ge1xyXG4gICAgICAgICAgICByZXBvcnRlcnM6IHJlcG9ydEZvcm1hdHNcclxuICAgICAgICB9O1xyXG4gICAgICAgIC8vIHN3aXRjaDogLS1ybyAtIHNldCByZXBvcnRlciBvdXRwdXQgZGlyZWN0b3J5IGlmIHNldCBieSB1c2VyIHRocm91Z2ggY29tbmFuZCBsaW5lXHJcbiAgICAgICAgLy8gTk9URTogLS1ybyBzd2l0Y2ggbXVzdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgd2l0aCAtLXJmXHJcbiAgICAgICAgaWYgKGFyZ3Yucm8gJiYgdHlwZW9mIGFyZ3Yucm8gPT09ICdzdHJpbmcnICYmIGFyZ3Yucm8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBvcHRzLnJlcG9ydGluZy5vdXRwdXREaXIgPSBhcmd2LnJvO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIG9wdGlvbjogLXAgb3IgLS1wYXJhbSBhbmQgLS1wbVxyXG4gICAgaWYgKGFyZ3YucCB8fCBhcmd2LnBhcmFtKSB7XHJcbiAgICAgICAgb3B0cy5wYXJhbWV0ZXJzID0ge1xyXG4gICAgICAgICAgICBmaWxlOiBhcmd2LnAgfHwgYXJndi5wYXJhbSB8fCBudWxsLFxyXG4gICAgICAgICAgICBtb2RlOiBhcmd2LnBtIHx8ICdzZXEnXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBzd2l0Y2g6IC0tc3BlY3MgLSBzZXQgc3BlY3MgaWYgc2V0IGJ5IHVzZXIgdGhyb3VnaCBjb21uYW5kIGxpbmVcclxuICAgIGlmIChhcmd2LnNwZWNzICYmIHR5cGVvZiBhcmd2LnNwZWNzID09PSAnc3RyaW5nJyAmJiBhcmd2LnNwZWNzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBzcGVjcyA9IGFyZ3Yuc3BlY3Muc3BsaXQoJywnKTtcclxuICAgICAgICBvcHRzLnNwZWNzID0gc3BlY3M7XHJcbiAgICB9XHJcbiAgICAvLyBzd2l0Y2g6IC0tbW9kdWxlcyAtIHNldCBhIGxpc3Qgb2YgbW9kdWxlcyB0byBiZSBsb2FkZWQsIGlmIHNldCBieSB1c2VyIHRocm91Z2ggY29tbmFuZCBsaW5lXHJcbiAgICBpZiAoYXJndi5tb2R1bGVzICYmIHR5cGVvZiBhcmd2Lm1vZHVsZXMgPT09ICdzdHJpbmcnICYmIGFyZ3YubW9kdWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlcyA9IGFyZ3YubW9kdWxlcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgIG9wdHMubW9kdWxlcyA9IG1vZHVsZXM7XHJcbiAgICB9XHJcbiAgICAvLyByZW1vdmUgYW55IHByb3BlcnR5IHdpdGggbnVsbCB2YWx1ZSAoc28gaXQgd29uJ3Qgb3ZlcnJpZGUgZGVmYXVsdCB2YWx1ZXMgaWYgaXQncyBudWxsKVxyXG4gICAgcmV0dXJuIGRlbGV0ZU51bGxQcm9wZXJ0aWVzKG9wdHMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBkZWxldGVOdWxsUHJvcGVydGllcyhvYmopIHtcclxuICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjbG9uZSA9IHsgLi4ub2JqIH07XHJcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcclxuICAgIGZvckVhY2ggKGtleXMsIGtleSA9PiB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkgJiYgKG9ialtrZXldID09IG51bGwgfHwgb2JqW2tleV0gPT0gdW5kZWZpbmVkKSkge1xyXG4gICAgICAgICAgICBkZWxldGUgY2xvbmVba2V5XTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBjbG9uZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NUYXJnZXRQYXRoKHRhcmdldFBhdGgsIGN3ZCkge1xyXG4gICAgLy8gZ2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaWYgdXNlciBoYXMgbm90IHByb3ZpZGVkIHBhdGhcclxuICAgIGlmICh0eXBlb2YodGFyZ2V0UGF0aCkgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgdGFyZ2V0UGF0aCA9IGN3ZCB8fCBwcm9jZXNzLmN3ZCgpO1xyXG4gICAgfVxyXG4gICAgLy8gdXNlcidzIHBhdGggbWlnaHQgYmUgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgLSBtYWtlIHN1cmUgdGhlIHJlbGF0aXZlIHBhdGggd2lsbCB3b3JrXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0YXJnZXRQYXRoID0gb3h1dGlsLnJlc29sdmVQYXRoKHRhcmdldFBhdGgsIGN3ZCB8fCBwcm9jZXNzLmN3ZCgpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmModGFyZ2V0UGF0aCkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdGF0cyA9IGZzLmxzdGF0U3luYyh0YXJnZXRQYXRoKTtcclxuICAgIGNvbnN0IGlzRGlyZWN0b3IgPSBzdGF0cy5pc0RpcmVjdG9yeSgpO1xyXG4gICAgaWYgKGlzRGlyZWN0b3IpIHtcclxuICAgICAgICAvLyBhcHBlbmQgb3h5Z2VuIGNvbmZpZyBmaWxlIG5hbWUgdG8gdGhlIGRpcmVjdG9yeSwgaWYgbm8gdGVzdCBjYXNlIGZpbGUgd2FzIHByb3ZpZGVkXHJcbiAgICAgICAgbGV0IGNvbmZpZ0ZpbGVQYXRoID0gcGF0aC5qb2luKHRhcmdldFBhdGgsIE9YWUdFTl9DT05GSUdfRklMRV9OQU1FICsgJy5qcycpO1xyXG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhjb25maWdGaWxlUGF0aCkpIHtcclxuICAgICAgICAgICAgY29uZmlnRmlsZVBhdGggPSBwYXRoLmpvaW4odGFyZ2V0UGF0aCwgT1hZR0VOX0NPTkZJR19GSUxFX05BTUUgKyAnLmpzb24nKTtcclxuICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGNvbmZpZ0ZpbGVQYXRoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGFyZ2V0UGF0aCA9IGNvbmZpZ0ZpbGVQYXRoO1xyXG4gICAgfVxyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHRhcmdldFBhdGgpKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIC8vIHBhdGggdG8gdGhlIGNvbmZpZyBvciAuanMgZmlsZVxyXG4gICAgICAgIHBhdGg6IHRhcmdldFBhdGgsXHJcbiAgICAgICAgLy8gd29ya2luZyBkaXJlY3RvcnlcclxuICAgICAgICBjd2Q6IGN3ZCB8fCBwYXRoLmRpcm5hbWUodGFyZ2V0UGF0aCksXHJcbiAgICAgICAgLy8gbmFtZSBvZiB0aGUgdGFyZ2V0IGZpbGUgd2l0aG91dCBleHRlbnNpb25cclxuICAgICAgICBuYW1lOiBveHV0aWwuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KHRhcmdldFBhdGgpLFxyXG4gICAgICAgIC8vIG5hbWUgaW5jbHVkaW5nIGV4dGVuc2lvblxyXG4gICAgICAgIGZ1bGxOYW1lOiBwYXRoLmJhc2VuYW1lKHRhcmdldFBhdGgpLFxyXG4gICAgICAgIC8vIHBhcmVudCBmb2xkZXIncyBuYW1lXHJcbiAgICAgICAgYmFzZU5hbWU6IHBhdGguYmFzZW5hbWUocGF0aC5kaXJuYW1lKHRhcmdldFBhdGgpKSxcclxuICAgICAgICAvLyB0YXJnZXQgZmlsZSBleHRlbnNpb25cclxuICAgICAgICBleHRlbnNpb246IHBhdGguZXh0bmFtZSh0YXJnZXRQYXRoKVxyXG4gICAgfTtcclxufSJdfQ==
|
|
375
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2xpLXV0aWwuanMiXSwibmFtZXMiOlsiT1hZR0VOX0NPTkZJR19GSUxFX05BTUUiLCJPWFlHRU5fRU5WX0ZJTEVfTkFNRSIsIk9YWUdFTl9QQUdFX09CSkVDVF9GSUxFX05BTUUiLCJERUZBVUxUX1JFUE9SVEVSIiwiZ2VuZXJhdGVUZXN0T3B0aW9ucyIsImNvbmZpZyIsImFyZ3YiLCJvcHRpb25zIiwiZW52IiwibG9hZEVudmlyb25tZW50VmFyaWFibGVzIiwicG8iLCJnZXRQYWdlT2JqZWN0RmlsZVBhdGgiLCJzdWl0ZXMiLCJsb2FkU3VpdGVzIiwiZnJhbWV3b3JrIiwidG9Mb3dlckNhc2UiLCJ0YXJnZXQiLCJpc0NvbmZpZ0ZpbGUiLCJuYW1lIiwiaW5kZXhPZiIsImV4dGVuc2lvbiIsInB1c2giLCJveHV0aWwiLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21KU0ZpbGUiLCJwYXRoIiwicGFyYW1ldGVycyIsImZpbGUiLCJtb2RlIiwiaXRlcmF0aW9ucyIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb25GaWxlIiwic3VpdGVEZWZzIiwiQXJyYXkiLCJpc0FycmF5Iiwic3VpdGVzRm9sZGVyIiwiam9pbiIsImN3ZCIsImZzIiwiZXhpc3RzU3luYyIsImxvYWRTdWl0ZURlZmluaXRpb25zRnJvbUZvbGRlciIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJzdWl0ZURlZiIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb24iLCJzZWxlY3RlZFN1aXRlTmFtZXMiLCJzcGxpdCIsImZpbHRlciIsIngiLCJpbmNsdWRlcyIsImZvbGRlclBhdGgiLCJmaWxlcyIsInJlYWRkaXJTeW5jIiwiZXh0bmFtZSIsImZ1bGxQYXRoIiwicG9GaWxlTmFtZSIsInByb2Nlc3MiLCJwb0ZpbGVQYXRoIiwicmVzb2x2ZSIsImUiLCJlcnIiLCJFcnJvciIsIm1lc3NhZ2UiLCJzdGFjayIsImVudk5hbWUiLCJlbnZpcm9ubWVudCIsImRlZmF1bHRFbnZGaWxlIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVkaWNhdGVkRW52RmlsZUpzIiwiZGVkaWNhdGVkRW52RmlsZUpzb24iLCJnZXRFbnZpcm9ubWVudHMiLCJ0YXJnZXRDd2QiLCJnZXRDb25maWd1cmF0aW9ucyIsIkRFRkFVTFRfT1BUUyIsImJyb3dzZXJOYW1lIiwic2VsZW5pdW1VcmwiLCJhcHBpdW1VcmwiLCJyZW9wZW5TZXNzaW9uIiwicmVSdW5PbkZhaWxlZCIsImRlYnVnUG9ydCIsImRlbGF5IiwiY29sbGVjdERldmljZUxvZ3MiLCJjb2xsZWN0QXBwaXVtTG9ncyIsImNvbGxlY3RCcm93c2VyTG9ncyIsInJlcG9ydGluZyIsInJlcG9ydGVycyIsImNtZE9wdHMiLCJnZXRDb21tYW5kTGluZU9wdGlvbnMiLCJwcm9qQ29uZmlnT3B0cyIsImNvbmZpZ1BhdGgiLCJlbnZzIiwiaXNDbWRPcHRzUmVwb3J0Rm9ybWF0IiwiaXNDb25maWdSZXBvcnRGb3JtYXQiLCJiYXNlTmFtZSIsIm9wdHMiLCJiIiwiYnJvd3NlciIsInMiLCJzZXJ2ZXIiLCJyZW9wZW4iLCJpIiwicGFyc2VJbnQiLCJpdGVyIiwiZGJncG9ydCIsIndzUG9ydCIsIndzcG9ydCIsImQiLCJyZiIsImxlbmd0aCIsInJlcG9ydEZvcm1hdHMiLCJybyIsIm91dHB1dERpciIsInAiLCJwYXJhbSIsInBtIiwic3BlY3MiLCJtb2R1bGVzIiwiZGVsZXRlTnVsbFByb3BlcnRpZXMiLCJvYmoiLCJjbG9uZSIsImtleXMiLCJrZXkiLCJ1bmRlZmluZWQiLCJwcm9jZXNzVGFyZ2V0UGF0aCIsInRhcmdldFBhdGgiLCJyZXNvbHZlUGF0aCIsInN0YXRzIiwibHN0YXRTeW5jIiwiaXNEaXJlY3RvciIsImlzRGlyZWN0b3J5IiwiY29uZmlnRmlsZVBhdGgiLCJkaXJuYW1lIiwiZ2V0RmlsZU5hbWVXaXRob3V0RXh0IiwiZnVsbE5hbWUiLCJiYXNlbmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FB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QSxjQUFjLEdBQUdSLFNBQWpCO0FBQ0g7QUFDSjtBQUNKOztBQUNELE1BQUksQ0FBQ0UsVUFBTCxFQUFpQjtBQUNiLFdBQU8sSUFBUDtBQUNIOztBQUNELFNBQU87QUFFSHRHLElBQUFBLElBQUksRUFBRXNHLFVBRkg7QUFHSG5DLElBQUFBLFVBQVUsRUFBRXlDLGNBSFQ7QUFLSGpHLElBQUFBLEdBQUcsRUFBRUEsR0FBRyxJQUFJWCxjQUFLNkcsT0FBTCxDQUFhUCxVQUFiLENBTFQ7QUFPSDVHLElBQUFBLElBQUksRUFBRUksY0FBT2dILHFCQUFQLENBQTZCUixVQUE3QixDQVBIO0FBU0hTLElBQUFBLFFBQVEsRUFBRS9HLGNBQUtnSCxRQUFMLENBQWNWLFVBQWQsQ0FUUDtBQVdIL0IsSUFBQUEsUUFBUSxFQUFFdkUsY0FBS2dILFFBQUwsQ0FBY2hILGNBQUs2RyxPQUFMLENBQWFQLFVBQWIsQ0FBZCxDQVhQO0FBYUgxRyxJQUFBQSxTQUFTLEVBQUVJLGNBQUs0QixPQUFMLENBQWEwRSxVQUFiO0FBYlIsR0FBUDtBQWVIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBmcyBmcm9tICdmcyc7XHJcbmltcG9ydCBveHV0aWwgZnJvbSAnLi91dGlsJztcclxuaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gJ2FzeW5jJztcclxuaW1wb3J0IG1vZHVsZVJlcXVpcmUgZnJvbSAnLi9tb2R1bGVSZXF1aXJlJztcclxuXHJcbmV4cG9ydCBjb25zdCBPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSA9ICdveHlnZW4uY29uZic7XHJcbmV4cG9ydCBjb25zdCBPWFlHRU5fRU5WX0ZJTEVfTkFNRSA9ICdveHlnZW4uZW52JztcclxuZXhwb3J0IGNvbnN0IE9YWUdFTl9QQUdFX09CSkVDVF9GSUxFX05BTUUgPSAnb3h5Z2VuLnBvJztcclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVQT1JURVIgPSAnaHRtbCc7XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVUZXN0T3B0aW9ucyhjb25maWcsIGFyZ3YpIHtcclxuICAgIGNvbnN0IG9wdGlvbnMgPSB7IC4uLmNvbmZpZyB9O1xyXG4gICAgb3B0aW9ucy5lbnYgPSBsb2FkRW52aXJvbm1lbnRWYXJpYWJsZXMoY29uZmlnLCBhcmd2KTtcclxuICAgIG9wdGlvbnMucG8gPSBnZXRQYWdlT2JqZWN0RmlsZVBhdGgoY29uZmlnLCBhcmd2KTtcclxuICAgIG9wdGlvbnMuc3VpdGVzID0gYXdhaXQgbG9hZFN1aXRlcyhjb25maWcsIGFyZ3YpO1xyXG4gICAgcmV0dXJuIG9wdGlvbnM7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkU3VpdGVzKGNvbmZpZywgYXJndikge1xyXG4gICAgaWYgKGNvbmZpZy5mcmFtZXdvcmsgJiYgdHlwZW9mIGNvbmZpZy5mcmFtZXdvcmsgPT09ICdzdHJpbmcnICYmIGNvbmZpZy5mcmFtZXdvcmsudG9Mb3dlckNhc2UoKSAhPT0gJ294eWdlbicpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IHRhcmdldCB9ID0gY29uZmlnO1xyXG4gICAgY29uc3QgaXNDb25maWdGaWxlID0gdGFyZ2V0ICYmIHRhcmdldC5uYW1lICYmIHRhcmdldC5uYW1lLmluZGV4T2YoT1hZR0VOX0NPTkZJR19GSUxFX05BTUUpID09PSAwO1xyXG4gICAgbGV0IHN1aXRlcyA9IFtdO1xyXG4gICAgLy8gaWYgYW4gaW5kaXZpZHVhbCBzY3JpcHQgb3Igc3VpdGUgZmlsZSB3YXMgcGFzc2VkXHJcbiAgICBpZiAoIWlzQ29uZmlnRmlsZSkge1xyXG4gICAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmV4dGVuc2lvbiA9PT0gJy5qcycpIHtcclxuICAgICAgICAgICAgc3VpdGVzLnB1c2goYXdhaXQgb3h1dGlsLmdlbmVyYXRlVGVzdFN1aXRlRnJvbUpTRmlsZSh0YXJnZXQucGF0aCwgY29uZmlnLnBhcmFtZXRlcnMuZmlsZSwgY29uZmlnLnBhcmFtZXRlcnMubW9kZSwgZmFsc2UsIGNvbmZpZy5pdGVyYXRpb25zIHx8IDEpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGFyZ2V0ICYmIHRhcmdldC5leHRlbnNpb24gPT09ICcuanNvbicpIHtcclxuICAgICAgICAgICAgc3VpdGVzLnB1c2goYXdhaXQgb3h1dGlsLmdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb25GaWxlKHRhcmdldC5wYXRoLCBjb25maWcucGFyYW1ldGVycy5maWxlLCBjb25maWcucGFyYW1ldGVycy5tb2RlLCBjb25maWcpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBpZiBhIGZvbGRlciBvciBhIGNvbmZpZ3VyYXRpb24gZmlsZSB3YXMgcGFzc2VkXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBsZXQgc3VpdGVEZWZzID0gW107XHJcbiAgICAgICAgaWYgKGNvbmZpZy5zdWl0ZXMgJiYgQXJyYXkuaXNBcnJheShjb25maWcuc3VpdGVzKSkge1xyXG4gICAgICAgICAgICBzdWl0ZURlZnMgPSBjb25maWcuc3VpdGVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjaGVjayBpZiBtb3JlIHN1aXRlcyBhcmUgZGVmaW5lZCBpbiB0aGUgJ3N1aXRlcycgZm9sZGVyXHJcbiAgICAgICAgY29uc3Qgc3VpdGVzRm9sZGVyID0gcGF0aC5qb2luKHRhcmdldC5jd2QsICdzdWl0ZXMnKTtcclxuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhzdWl0ZXNGb2xkZXIpKSB7XHJcbiAgICAgICAgICAgIHN1aXRlRGVmcyA9IFtcclxuICAgICAgICAgICAgICAgIC4uLnN1aXRlRGVmcyxcclxuICAgICAgICAgICAgICAgIC4uLmxvYWRTdWl0ZURlZmluaXRpb25zRnJvbUZvbGRlcihzdWl0ZXNGb2xkZXIpXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIG1lcmdlIHN1aXRlcyBjb25maWd1cmVkIGluIHRoZSBwcm9qZWN0IGNvbmZpZyBmaWxlIGFuZCB0aG9zZSBmb3VuZCBpbiAnc3VpdGVzJyBmb2xkZXJcclxuICAgICAgICBzdWl0ZXMgPSBhd2FpdCBQcm9taXNlLmFsbChzdWl0ZURlZnMubWFwKGFzeW5jIChzdWl0ZURlZikgPT4gYXdhaXQgb3h1dGlsLmdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb24oc3VpdGVEZWYsIGNvbmZpZykpKTtcclxuICAgIH1cclxuICAgIC8vIGZpbHRlciBvdXQgc3VpdGVzIGlmICctLXN1aXRlcycgY29tbWFuZCBsaW5lIGFyZ3VtZW50IHdhcyBzcGVjaWZpZWRcclxuICAgIGlmIChhcmd2LnN1aXRlcyAmJiB0eXBlb2YgYXJndi5zdWl0ZXMgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRTdWl0ZU5hbWVzID0gYXJndi5zdWl0ZXMuc3BsaXQoJywnKTtcclxuICAgICAgICBzdWl0ZXMgPSBzdWl0ZXMuZmlsdGVyKHggPT4gc2VsZWN0ZWRTdWl0ZU5hbWVzLmluY2x1ZGVzKHgubmFtZSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN1aXRlcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRTdWl0ZURlZmluaXRpb25zRnJvbUZvbGRlcihmb2xkZXJQYXRoKSB7XHJcbiAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGZvbGRlclBhdGgpO1xyXG4gICAgbGV0IHN1aXRlRGVmcyA9IFtdO1xyXG4gICAgZm9yRWFjaChmaWxlcywgZmlsZSA9PiB7XHJcbiAgICAgICAgaWYgKHBhdGguZXh0bmFtZShmaWxlKSA9PT0gJy5qc29uJykge1xyXG4gICAgICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihmb2xkZXJQYXRoLCBmaWxlKTtcclxuICAgICAgICAgICAgc3VpdGVEZWZzLnB1c2gobW9kdWxlUmVxdWlyZShmdWxsUGF0aCkpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHN1aXRlRGVmcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhZ2VPYmplY3RGaWxlUGF0aChjb25maWcsIGFyZ3YgPSB7fSkge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gY29uZmlnLnRhcmdldCB8fCB7fTtcclxuICAgIGNvbnN0IHBvRmlsZU5hbWUgPSBhcmd2LnBvIHx8IGAke09YWUdFTl9QQUdFX09CSkVDVF9GSUxFX05BTUV9LmpzYDtcclxuICAgIGNvbnN0IGN3ZCA9IHRhcmdldC5jd2QgfHwgcHJvY2Vzcy5jd2QoKTtcclxuICAgIGxldCBwb0ZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGN3ZCwgcG9GaWxlTmFtZSk7XHJcbiAgICBwb0ZpbGVQYXRoID0gZnMuZXhpc3RzU3luYyhwb0ZpbGVQYXRoKSA/IHBvRmlsZVBhdGggOiBudWxsO1xyXG5cclxuICAgIGlmIChwb0ZpbGVQYXRoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbW9kdWxlUmVxdWlyZShwb0ZpbGVQYXRoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHBvRmlsZVBhdGg7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2FkIGZpbGU6ICR7cG9GaWxlUGF0aH0uIFJlYXNvbjogJHtlLm1lc3NhZ2V9ICR7ZS5zdGFja31gKTtcclxuICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkRW52aXJvbm1lbnRWYXJpYWJsZXMoY29uZmlnLCBhcmd2KSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBjb25maWcudGFyZ2V0IHx8IHt9O1xyXG4gICAgY29uc3QgZW52TmFtZSA9IGFyZ3YuZW52IHx8IGNvbmZpZy5lbnZpcm9ubWVudCB8fCAnZGVmYXVsdCc7XHJcbiAgICBjb25zdCBjd2QgPSB0YXJnZXQuY3dkIHx8IHByb2Nlc3MuY3dkKCk7XHJcbiAgICBjb25zdCBkZWZhdWx0RW52RmlsZSA9IHBhdGguam9pbihjd2QsIGAke09YWUdFTl9FTlZfRklMRV9OQU1FfS5qc2ApO1xyXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoZGVmYXVsdEVudkZpbGUpKSB7XHJcbiAgICAgICAgY29uc3QgZW52ID0gbW9kdWxlUmVxdWlyZShkZWZhdWx0RW52RmlsZSk7XHJcbiAgICAgICAgaWYgKGVudiAmJiB0eXBlb2YgZW52ID09PSAnb2JqZWN0JyAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZW52LCBlbnZOYW1lKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZW52W2Vudk5hbWVdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHRyeSB0byByZXNvbHZlIGEgZGVkaWNhdGVkIGVudmlyb25tZW50IGZpbGUgaW4gJ2Vudicgc3ViIGZvbGRlclxyXG4gICAgY29uc3QgZGVkaWNhdGVkRW52RmlsZUpzID0gcGF0aC5qb2luKGN3ZCwgJ2VudicsIGAke2Vudk5hbWV9LmpzYCk7XHJcbiAgICBjb25zdCBkZWRpY2F0ZWRFbnZGaWxlSnNvbiA9IHBhdGguam9pbihjd2QsICdlbnYnLCBgJHtlbnZOYW1lfS5qc29uYCk7XHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhkZWRpY2F0ZWRFbnZGaWxlSnMpKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZVJlcXVpcmUoZGVkaWNhdGVkRW52RmlsZUpzKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZzLmV4aXN0c1N5bmMoZGVkaWNhdGVkRW52RmlsZUpzb24pKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZVJlcXVpcmUoZGVkaWNhdGVkRW52RmlsZUpzb24pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHt9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW52aXJvbm1lbnRzKHRhcmdldCkge1xyXG4gICAgbGV0IHRhcmdldEN3ZCA9IG51bGw7XHJcblxyXG4gICAgaWYgKHRhcmdldCAmJiB0YXJnZXQuY3dkKSB7XHJcbiAgICAgICAgdGFyZ2V0Q3dkID0gdGFyZ2V0LmN3ZDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjd2QgPSB0YXJnZXRDd2QgfHwgcHJvY2Vzcy5jd2QoKTtcclxuICAgIGNvbnN0IGRlZmF1bHRFbnZGaWxlID0gcGF0aC5qb2luKGN3ZCwgYCR7T1hZR0VOX0VOVl9GSUxFX05BTUV9LmpzYCk7XHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhkZWZhdWx0RW52RmlsZSkpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gbW9kdWxlUmVxdWlyZShkZWZhdWx0RW52RmlsZSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2FkIGZpbGU6ICR7ZGVmYXVsdEVudkZpbGV9LiBSZWFzb246ICR7ZS5tZXNzYWdlfSAke2Uuc3RhY2t9YCk7XHJcbiAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge307XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWd1cmF0aW9ucyh0YXJnZXQsIGFyZ3YpIHtcclxuICAgIC8vIHByb2Nlc3MgY29tbWFuZCBsaW5lIGFyZ3VtZW50c1xyXG4gICAgbGV0IHRhcmdldEN3ZCA9IG51bGw7XHJcblxyXG4gICAgaWYgKHRhcmdldCAmJiB0YXJnZXQuY3dkKSB7XHJcbiAgICAgICAgdGFyZ2V0Q3dkID0gdGFyZ2V0LmN3ZDtcclxuICAgIH1cclxuICAgIGNvbnN0IERFRkFVTFRfT1BUUyA9IHtcclxuICAgICAgICBjd2Q6IHRhcmdldCA/ICh0YXJnZXRDd2QgfHwgcHJvY2Vzcy5jd2QoKSkgOiBwcm9jZXNzLmN3ZCgpLFxyXG4gICAgICAgIHRhcmdldDogdGFyZ2V0LFxyXG4gICAgICAgIGJyb3dzZXJOYW1lOiAnY2hyb21lJyxcclxuICAgICAgICBzZWxlbml1bVVybCA6ICdodHRwOi8vbG9jYWxob3N0OjQ0NDQvd2QvaHViJyxcclxuICAgICAgICBhcHBpdW1VcmwgOiAnaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1YicsXHJcbiAgICAgICAgcmVvcGVuU2Vzc2lvbjogZmFsc2UsXHJcbiAgICAgICAgcmVSdW5PbkZhaWxlZDogZmFsc2UsXHJcbiAgICAgICAgaXRlcmF0aW9ucyA6IDEsXHJcbiAgICAgICAgZGVidWdQb3J0OiBudWxsLFxyXG4gICAgICAgIGRlbGF5OiBudWxsLFxyXG4gICAgICAgIGNvbGxlY3REZXZpY2VMb2dzOiBmYWxzZSxcclxuICAgICAgICBjb2xsZWN0QXBwaXVtTG9nczogZmFsc2UsXHJcbiAgICAgICAgY29sbGVjdEJyb3dzZXJMb2dzOiBmYWxzZSxcclxuICAgICAgICByZXBvcnRpbmc6IHtcclxuICAgICAgICAgICAgcmVwb3J0ZXJzOiBbREVGQVVMVF9SRVBPUlRFUl1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHBhcmFtZXRlcnMgOiB7XHJcbiAgICAgICAgICAgIGZpbGU6IG51bGwsXHJcbiAgICAgICAgICAgIG1vZGU6ICdzZXEnXHJcbiAgICAgICAgfSxcclxuICAgIH07XHJcbiAgICAvLyByZXRyaWV2ZSBvcHRpb25zIHByb3ZpZGVkIHZpYSBjb21tYW5kIGxpbmUgYXJndW1lbnRzXHJcbiAgICBjb25zdCBjbWRPcHRzID0gZ2V0Q29tbWFuZExpbmVPcHRpb25zKGFyZ3YpO1xyXG4gICAgLy8gaWYgdGhlIHRhcmdldCBpcyBveHlnZW4gY29uZmlnIGZpbGUsIG1lcmdlIGl0cyBjb250ZW50IHdpdGggdGhlIGRlZmF1bHQgb3B0aW9uc1xyXG4gICAgbGV0IHByb2pDb25maWdPcHRzID0ge307XHJcbiAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5uYW1lID09PSBPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSAmJiAodGFyZ2V0LmV4dGVuc2lvbiA9PT0gJy5qcycgfHwgdGFyZ2V0LmV4dGVuc2lvbiA9PT0gJy5qc29uJykpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBwcm9qQ29uZmlnT3B0cyA9IG1vZHVsZVJlcXVpcmUodGFyZ2V0LnBhdGgpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBmaWxlOiAke3RhcmdldC5wYXRofS4gUmVhc29uOiAke2UubWVzc2FnZX0gJHtlLnN0YWNrfWApO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGFyZ2V0ICYmIHRhcmdldC5jb25maWdQYXRoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcHJvakNvbmZpZ09wdHMgPSBtb2R1bGVSZXF1aXJlKHRhcmdldC5jb25maWdQYXRoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgVW5hYmxlIHRvIGxvYWQgZmlsZTogJHt0YXJnZXQuY29uZmlnUGF0aH0uIFJlYXNvbjogJHtlLm1lc3NhZ2V9ICR7ZS5zdGFja31gKTtcclxuICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGVudnMgPSBnZXRFbnZpcm9ubWVudHModGFyZ2V0KTtcclxuXHJcbiAgICBpZiAocHJvakNvbmZpZ09wdHMuZW52cykge1xyXG4gICAgICAgIC8vIG1lcmdlIGV4dGVybmFsIGVudmlyb25tZW50cyBkZWZpbml0aW9uIHdpdGggdGhlIG9uZSBpbiB0aGUgY29uZmlnIGZpbGVcclxuICAgICAgICBwcm9qQ29uZmlnT3B0cy5lbnZzID0geyAuLi5wcm9qQ29uZmlnT3B0cy5lbnZzLCAuLi5lbnZzIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBwcm9qQ29uZmlnT3B0cyA9IHsgLi4ucHJvakNvbmZpZ09wdHMsIGVudnM6IGVudnMgfTtcclxuICAgIH1cclxuICAgIC8vIG1ha2Ugc3VyZSB0byBzZXQgZGVmYXVsdCBIVE1MIHJlcG9ydGVyIGlmIHJlcG9ydGluZyBvcHRpb25zIGFyZSBub3QgcHJvdmlkZWQgaW4gb3h5Z2VuLmNvbmYgZmlsZSBhbmQgdmlhIGNvbW1hbmQgbGluZVxyXG4gICAgY29uc3QgaXNDbWRPcHRzUmVwb3J0Rm9ybWF0ID0gY21kT3B0cy5yZXBvcnRpbmcgJiYgY21kT3B0cy5yZXBvcnRpbmcucmVwb3J0ZXJzO1xyXG4gICAgY29uc3QgaXNDb25maWdSZXBvcnRGb3JtYXQgPSBwcm9qQ29uZmlnT3B0cy5yZXBvcnRpbmcgJiYgcHJvakNvbmZpZ09wdHMucmVwb3J0aW5nLnJlcG9ydGVycztcclxuICAgIGlmICghaXNDbWRPcHRzUmVwb3J0Rm9ybWF0ICYmICFpc0NvbmZpZ1JlcG9ydEZvcm1hdCkge1xyXG4gICAgICAgIGlmICghcHJvakNvbmZpZ09wdHMucmVwb3J0aW5nKSB7XHJcbiAgICAgICAgICAgIHByb2pDb25maWdPcHRzLnJlcG9ydGluZyA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBwcm9qQ29uZmlnT3B0cy5yZXBvcnRpbmcucmVwb3J0ZXJzID0gW0RFRkFVTFRfUkVQT1JURVJdO1xyXG4gICAgfVxyXG4gICAgLy8gZGV0ZXJtaW5lIHRlc3QgbmFtZVxyXG4gICAgbGV0IG5hbWUgPSBjbWRPcHRzLm5hbWUgfHwgcHJvakNvbmZpZ09wdHMubmFtZSB8fCBudWxsO1xyXG4gICAgaWYgKCFuYW1lICYmIHRhcmdldCkge1xyXG4gICAgICAgIG5hbWUgPSB0YXJnZXQubmFtZSAhPT0gT1hZR0VOX0NPTkZJR19GSUxFX05BTUUgPyB0YXJnZXQubmFtZSA6IHRhcmdldC5iYXNlTmFtZTtcclxuICAgIH1cclxuICAgIC8vIG1lcmdlIG9wdGlvbnMgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgb3JkZXIgKHRoZSBsYXN0IG9uZSBvdmVycmlkZXMgdGhlIHByZXZpb3VzIG9uZSk6XHJcbiAgICAvLyBkZWZhdWx0IG9wdGlvbnMsIHByb2plY3QgY29uZmlnIGZpbGUsIGNvbW1hbmQgbGluZSBhcmd1bWVudHNcclxuICAgIHJldHVybiB7IC4uLkRFRkFVTFRfT1BUUywgLi4ucHJvakNvbmZpZ09wdHMsIC4uLmNtZE9wdHMsIG5hbWU6IG5hbWUgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbW1hbmRMaW5lT3B0aW9ucyhhcmd2KSB7XHJcbiAgICBjb25zdCBvcHRzID0ge1xyXG4gICAgICAgIC8vIHN3aXRjaDogLS1uYW1lIFxyXG4gICAgICAgIG5hbWU6IGFyZ3YubmFtZSB8fCBudWxsLFxyXG4gICAgICAgIC8vIHN3aXRjaDogLWIgb3IgLS1icm93c2VyXHJcbiAgICAgICAgYnJvd3Nlck5hbWUgOiBhcmd2LmIgfHwgYXJndi5icm93c2VyIHx8IG51bGwsXHJcbiAgICAgICAgc2VsZW5pdW1VcmwgOiBhcmd2LnMgfHwgYXJndi5zZXJ2ZXIgfHwgbnVsbCxcclxuICAgICAgICBhcHBpdW1VcmwgOiBhcmd2LnMgfHwgYXJndi5zZXJ2ZXIgfHwgbnVsbCxcclxuICAgICAgICByZW9wZW5TZXNzaW9uOiBhcmd2LnJlb3BlbiA/IGFyZ3YucmVvcGVuID09PSAndHJ1ZScgOiBudWxsLFxyXG4gICAgICAgIGl0ZXJhdGlvbnMgOiBhcmd2LmkgPyBwYXJzZUludChhcmd2LmkpIDogKGFyZ3YuaXRlciA/IHBhcnNlSW50KGFyZ3YuaXRlcikgOiBudWxsKSxcclxuICAgICAgICBkZWJ1Z1BvcnQ6IGFyZ3YuZGJncG9ydCB8fCBudWxsLFxyXG4gICAgICAgIHdzUG9ydDogYXJndi53c3BvcnQgfHwgbnVsbCxcclxuICAgICAgICBkZWxheTogYXJndi5kIHx8IGFyZ3YuZGVsYXkgfHwgbnVsbCxcclxuICAgIH07XHJcbiAgICAvLyBzd2l0Y2g6IC0tcmYgZmxhZ1xyXG4gICAgaWYgKGFyZ3YucmYgJiYgdHlwZW9mIGFyZ3YucmYgPT09ICdzdHJpbmcnICYmIGFyZ3YucmYubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHJlcG9ydEZvcm1hdHMgPSBhcmd2LnJmLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgb3B0cy5yZXBvcnRpbmcgPSB7XHJcbiAgICAgICAgICAgIHJlcG9ydGVyczogcmVwb3J0Rm9ybWF0c1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgLy8gc3dpdGNoOiAtLXJvIC0gc2V0IHJlcG9ydGVyIG91dHB1dCBkaXJlY3RvcnkgaWYgc2V0IGJ5IHVzZXIgdGhyb3VnaCBjb21uYW5kIGxpbmVcclxuICAgICAgICAvLyBOT1RFOiAtLXJvIHN3aXRjaCBtdXN0IGJlIHNwZWNpZmllZCB0b2dldGhlciB3aXRoIC0tcmZcclxuICAgICAgICBpZiAoYXJndi5ybyAmJiB0eXBlb2YgYXJndi5ybyA9PT0gJ3N0cmluZycgJiYgYXJndi5yby5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIG9wdHMucmVwb3J0aW5nLm91dHB1dERpciA9IGFyZ3Yucm87XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gb3B0aW9uOiAtcCBvciAtLXBhcmFtIGFuZCAtLXBtXHJcbiAgICBpZiAoYXJndi5wIHx8IGFyZ3YucGFyYW0pIHtcclxuICAgICAgICBvcHRzLnBhcmFtZXRlcnMgPSB7XHJcbiAgICAgICAgICAgIGZpbGU6IGFyZ3YucCB8fCBhcmd2LnBhcmFtIHx8IG51bGwsXHJcbiAgICAgICAgICAgIG1vZGU6IGFyZ3YucG0gfHwgJ3NlcSdcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHN3aXRjaDogLS1zcGVjcyAtIHNldCBzcGVjcyBpZiBzZXQgYnkgdXNlciB0aHJvdWdoIGNvbW5hbmQgbGluZVxyXG4gICAgaWYgKGFyZ3Yuc3BlY3MgJiYgdHlwZW9mIGFyZ3Yuc3BlY3MgPT09ICdzdHJpbmcnICYmIGFyZ3Yuc3BlY3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHNwZWNzID0gYXJndi5zcGVjcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgIG9wdHMuc3BlY3MgPSBzcGVjcztcclxuICAgIH1cclxuICAgIC8vIHN3aXRjaDogLS1tb2R1bGVzIC0gc2V0IGEgbGlzdCBvZiBtb2R1bGVzIHRvIGJlIGxvYWRlZCwgaWYgc2V0IGJ5IHVzZXIgdGhyb3VnaCBjb21uYW5kIGxpbmVcclxuICAgIGlmIChhcmd2Lm1vZHVsZXMgJiYgdHlwZW9mIGFyZ3YubW9kdWxlcyA9PT0gJ3N0cmluZycgJiYgYXJndi5tb2R1bGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBtb2R1bGVzID0gYXJndi5tb2R1bGVzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgb3B0cy5tb2R1bGVzID0gbW9kdWxlcztcclxuICAgIH1cclxuICAgIC8vIHJlbW92ZSBhbnkgcHJvcGVydHkgd2l0aCBudWxsIHZhbHVlIChzbyBpdCB3b24ndCBvdmVycmlkZSBkZWZhdWx0IHZhbHVlcyBpZiBpdCdzIG51bGwpXHJcbiAgICByZXR1cm4gZGVsZXRlTnVsbFByb3BlcnRpZXMob3B0cyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlbGV0ZU51bGxQcm9wZXJ0aWVzKG9iaikge1xyXG4gICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuICAgIGNvbnN0IGNsb25lID0geyAuLi5vYmogfTtcclxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xyXG4gICAgZm9yRWFjaCAoa2V5cywga2V5ID0+IHtcclxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSAmJiAob2JqW2tleV0gPT0gbnVsbCB8fCBvYmpba2V5XSA9PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBjbG9uZVtrZXldO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGNsb25lO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1RhcmdldFBhdGgodGFyZ2V0UGF0aCwgY3dkKSB7XHJcbiAgICBjd2QgPSBjd2QgfHwgcHJvY2Vzcy5jd2QoKTtcclxuICAgIC8vIGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlmIHVzZXIgaGFzIG5vdCBwcm92aWRlZCBwYXRoXHJcbiAgICBpZiAodHlwZW9mKHRhcmdldFBhdGgpID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHRhcmdldFBhdGggPSBjd2Q7XHJcbiAgICB9XHJcbiAgICAvLyB1c2VyJ3MgcGF0aCBtaWdodCBiZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSAtIG1ha2Ugc3VyZSB0aGUgcmVsYXRpdmUgcGF0aCB3aWxsIHdvcmtcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRhcmdldFBhdGggPSBveHV0aWwucmVzb2x2ZVBhdGgodGFyZ2V0UGF0aCwgY3dkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmModGFyZ2V0UGF0aCkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdGF0cyA9IGZzLmxzdGF0U3luYyh0YXJnZXRQYXRoKTtcclxuICAgIGNvbnN0IGlzRGlyZWN0b3IgPSBzdGF0cy5pc0RpcmVjdG9yeSgpO1xyXG4gICAgbGV0IGNvbmZpZ0ZpbGVQYXRoO1xyXG4gICAgaWYgKGlzRGlyZWN0b3IpIHtcclxuICAgICAgICAvLyBhcHBlbmQgb3h5Z2VuIGNvbmZpZyBmaWxlIG5hbWUgdG8gdGhlIGRpcmVjdG9yeSwgaWYgbm8gdGVzdCBjYXNlIGZpbGUgd2FzIHByb3ZpZGVkXHJcbiAgICAgICAgY29uZmlnRmlsZVBhdGggPSBwYXRoLmpvaW4odGFyZ2V0UGF0aCwgT1hZR0VOX0NPTkZJR19GSUxFX05BTUUgKyAnLmpzJyk7XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGNvbmZpZ0ZpbGVQYXRoKSkge1xyXG4gICAgICAgICAgICBjb25maWdGaWxlUGF0aCA9IHBhdGguam9pbih0YXJnZXRQYXRoLCBPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSArICcuanNvbicpO1xyXG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoY29uZmlnRmlsZVBhdGgpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbmZpZ0ZpbGVQYXRoID0gcGF0aC5qb2luKGN3ZCwgT1hZR0VOX0NPTkZJR19GSUxFX05BTUUgKyAnLmpzJyk7XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGNvbmZpZ0ZpbGVQYXRoKSkge1xyXG4gICAgICAgICAgICBjb25maWdGaWxlUGF0aCA9IHBhdGguam9pbihjd2QsIE9YWUdFTl9DT05GSUdfRklMRV9OQU1FICsgJy5qc29uJyk7XHJcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhjb25maWdGaWxlUGF0aCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZ0ZpbGVQYXRoID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCF0YXJnZXRQYXRoKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIC8vIHBhdGggdG8gdGhlIGNvbmZpZyBvciAuanMgZmlsZVxyXG4gICAgICAgIHBhdGg6IHRhcmdldFBhdGgsXHJcbiAgICAgICAgY29uZmlnUGF0aDogY29uZmlnRmlsZVBhdGgsXHJcbiAgICAgICAgLy8gd29ya2luZyBkaXJlY3RvcnlcclxuICAgICAgICBjd2Q6IGN3ZCB8fCBwYXRoLmRpcm5hbWUodGFyZ2V0UGF0aCksXHJcbiAgICAgICAgLy8gbmFtZSBvZiB0aGUgdGFyZ2V0IGZpbGUgd2l0aG91dCBleHRlbnNpb25cclxuICAgICAgICBuYW1lOiBveHV0aWwuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KHRhcmdldFBhdGgpLFxyXG4gICAgICAgIC8vIG5hbWUgaW5jbHVkaW5nIGV4dGVuc2lvblxyXG4gICAgICAgIGZ1bGxOYW1lOiBwYXRoLmJhc2VuYW1lKHRhcmdldFBhdGgpLFxyXG4gICAgICAgIC8vIHBhcmVudCBmb2xkZXIncyBuYW1lXHJcbiAgICAgICAgYmFzZU5hbWU6IHBhdGguYmFzZW5hbWUocGF0aC5kaXJuYW1lKHRhcmdldFBhdGgpKSxcclxuICAgICAgICAvLyB0YXJnZXQgZmlsZSBleHRlbnNpb25cclxuICAgICAgICBleHRlbnNpb246IHBhdGguZXh0bmFtZSh0YXJnZXRQYXRoKVxyXG4gICAgfTtcclxufSJdfQ==
|
package/build/lib/cli.js
CHANGED
|
@@ -11,6 +11,8 @@ var _parallelLauncher = _interopRequireDefault(require("./parallel-launcher"));
|
|
|
11
11
|
|
|
12
12
|
var _ReportAggregator = _interopRequireDefault(require("../reporter/ReportAggregator"));
|
|
13
13
|
|
|
14
|
+
var _WebSocketReporter = _interopRequireDefault(require("../reporter/WebSocketReporter"));
|
|
15
|
+
|
|
14
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
17
|
|
|
16
18
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
@@ -81,10 +83,17 @@ async function prepareAndStartTheTest(options) {
|
|
|
81
83
|
|
|
82
84
|
try {
|
|
83
85
|
const reporter = new _ReportAggregator.default(options);
|
|
86
|
+
const wsReporter = options.wsPort !== undefined ? new _WebSocketReporter.default(reporter) : undefined;
|
|
84
87
|
const launcher = options.parallel && options.parallel.workers && !isNaN(options.parallel.workers) && options.parallel.workers > 1 ? new _parallelLauncher.default(options, reporter) : new _launcher.default(options, reporter);
|
|
88
|
+
await (wsReporter === null || wsReporter === void 0 ? void 0 : wsReporter.startAndWaitForClient(options.wsPort));
|
|
85
89
|
console.log('Test started...');
|
|
86
90
|
await launcher.run(capsArr);
|
|
87
|
-
|
|
91
|
+
|
|
92
|
+
if (!wsReporter) {
|
|
93
|
+
await reporter.generateReports();
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
wsReporter === null || wsReporter === void 0 ? void 0 : wsReporter.stop();
|
|
88
97
|
exitCode = reporter.getExitCode();
|
|
89
98
|
} catch (e) {
|
|
90
99
|
console.error('Fatal error', e);
|
|
@@ -122,6 +131,7 @@ General options:
|
|
|
122
131
|
sequentially. This option is mutually exclusive with
|
|
123
132
|
-i option.
|
|
124
133
|
--dbgport=PORT Debugger port.
|
|
134
|
+
--wsport=PORT WebSocket events reporter port.
|
|
125
135
|
--suites Filter out suites by name
|
|
126
136
|
-h, --help Display this information and exit.
|
|
127
137
|
-v, --version Display version information and exit.
|
|
@@ -134,4 +144,4 @@ Web test options:
|
|
|
134
144
|
Mobile test options:
|
|
135
145
|
-s, --server=SERVER_URL Appium server URL. Default is http://localhost:4723/wd/hub.`);
|
|
136
146
|
}
|
|
137
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2xpLmpzIl0sIm5hbWVzIjpbInByb2Nlc3MiLCJvbiIsImhhbmRsZVNpZ0ludCIsImVycm9yIiwiY29uc29sZSIsImFyZ3YiLCJyZXF1aXJlIiwic2xpY2UiLCJ2IiwidmVyc2lvbiIsImxvZyIsImV4aXQiLCJfIiwiaGVscCIsInByaW50VXNhZ2UiLCJkIiwiZGVsYXkiLCJwYXJzZUludCIsInRhcmdldEZpbGUiLCJjbGl1dGlsIiwicHJvY2Vzc1RhcmdldFBhdGgiLCJjd2QiLCJjb25maWciLCJnZXRDb25maWd1cmF0aW9ucyIsImdlbmVyYXRlVGVzdE9wdGlvbnMiLCJ0aGVuIiwib3B0aW9ucyIsInByZXBhcmVBbmRTdGFydFRoZVRlc3QiLCJjb2RlIiwiZSIsImZyYW1ld29yayIsInN1aXRlcyIsIkFycmF5IiwiaXNBcnJheSIsIkVycm9yIiwiY2Fwc0FyciIsImNhcGFiaWxpdGllcyIsImV4aXRDb2RlIiwicmVwb3J0ZXIiLCJSZXBvcnRBZ2dyZWdhdG9yIiwibGF1bmNoZXIiLCJwYXJhbGxlbCIsIndvcmtlcnMiLCJpc05hTiIsIlBhcmFsbGVsTGF1bmNoZXIiLCJMYXVuY2hlciIsInJ1biIsImdlbmVyYXRlUmVwb3J0cyIsImdldEV4aXRDb2RlIiwidHJhY2UiLCJzZXRUaW1lb3V0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7QUFTQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFFQUEsT0FBTyxDQUFDQyxFQUFSLENBQVcsUUFBWCxFQUFxQkMsWUFBckI7QUFDQUYsT0FBTyxDQUFDQyxFQUFSLENBQVcsbUJBQVgsRUFBZ0NFLEtBQUssSUFBSTtBQUNyQ0MsRUFBQUEsT0FBTyxDQUFDRCxLQUFSLENBQWMsbUJBQWQsRUFBbUNBLEtBQW5DO0FBQ0gsQ0FGRDtBQUlBSCxPQUFPLENBQUNDLEVBQVIsQ0FBVyxvQkFBWCxFQUFpQ0UsS0FBSyxJQUFJO0FBQ3RDQyxFQUFBQSxPQUFPLENBQUNELEtBQVIsQ0FBYyxvQkFBZCxF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bEJWLEVBQUFBLE9BQU8sQ0FBQ00sR0FBUixDQUFhO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUZBaENJO0FBaUNIIiwic291cmNlc0NvbnRlbnQiOlsiIyEgL3Vzci9iaW4vZW52IG5vZGVcbi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKi9cbmltcG9ydCAqIGFzIGNsaXV0aWwgZnJvbSAnLi9jbGktdXRpbCc7XG5pbXBvcnQgTGF1bmNoZXIgZnJvbSAnLi9sYXVuY2hlcic7XG5pbXBvcnQgUGFyYWxsZWxMYXVuY2hlciBmcm9tICcuL3BhcmFsbGVsLWxhdW5jaGVyJztcbmltcG9ydCBSZXBvcnRBZ2dyZWdhdG9yIGZyb20gJy4uL3JlcG9ydGVyL1JlcG9ydEFnZ3JlZ2F0b3InO1xuXG5wcm9jZXNzLm9uKCdTSUdJTlQnLCBoYW5kbGVTaWdJbnQpO1xucHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBlcnJvciA9PiB7XG4gICAgY29uc29sZS5lcnJvcigndW5jYXVnaHRFeGNlcHRpb24nLCBlcnJvcik7XG59KTtcblxucHJvY2Vzcy5vbigndW5oYW5kbGVkUmVqZWN0aW9uJywgZXJyb3IgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoJ3VuaGFuZGxlZFJlamVjdGlvbicsIGVycm9yKTtcbn0pO1xuXG4vLyBwYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzXG5jb25zdCBhcmd2ID0gcmVxdWlyZSgnbWluaW1pc3QnKShwcm9jZXNzLmFyZ3Yuc2xpY2UoMikpO1xuXG5pZiAoYXJndi52IHx8IGFyZ3YudmVyc2lvbikge1xuICAgIGNvbnNvbGUubG9nKHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb24pO1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbn0gZWxzZSBpZiAodHlwZW9mKGFyZ3YuX1swXSkgPT09ICd1bmRlZmluZWQnIHx8IGFyZ3YuaGVscCkge1xuICAgIHByaW50VXNhZ2UoKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG59XG5cbmlmIChhcmd2LmQgfHwgYXJndi5kZWxheSkge1xuICAgIGNvbnN0IGRlbGF5ID0gYXJndi5kIHx8IGFyZ3YuZGVsYXk7XG4gICAgaWYgKCEocGFyc2VJbnQoZGVsYXkpID4gMCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkludmFsaWQgYXJndW1lbnQgLSAnZGVsYXknIHNob3VsZCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuXCIpO1xuICAgICAgICBwcmludFVzYWdlKCk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG59XG5cbmNvbnN0IHRhcmdldEZpbGUgPSBjbGl1dGlsLnByb2Nlc3NUYXJnZXRQYXRoKGFyZ3YuX1swXSwgYXJndi5jd2QpO1xuaWYgKHRhcmdldEZpbGUgPT0gbnVsbCkge1xuICAgIHByaW50VXNhZ2UoKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG59XG5cbmNvbnN0IGNvbmZpZyA9IGNsaXV0aWwuZ2V0Q29uZmlndXJhdGlvbnModGFyZ2V0RmlsZSwgYXJndik7XG5cbmNsaXV0aWwuZ2VuZXJhdGVUZXN0T3B0aW9ucyhjb25maWcsIGFyZ3YpLnRoZW4oXG4gICAgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgcHJlcGFyZUFuZFN0YXJ0VGhlVGVzdChvcHRpb25zKS50aGVuKFxuICAgICAgICAgICAgKGNvZGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRG9uZSEnKTtcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmV4aXQoY29kZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUZXN0IGZhaWxlZDogJywgZSk7XG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0sXG4gICAgKGUpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignVGVzdCBmYWlsZWQgb24gZ2VuZXJhdGUgc3RhdGU6ICcsIGUpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuKTtcblxuYXN5bmMgZnVuY3Rpb24gcHJlcGFyZUFuZFN0YXJ0VGhlVGVzdChvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuZnJhbWV3b3JrID09PSAnb3h5Z2VuJyAmJiAoIW9wdGlvbnMuc3VpdGVzIHx8ICFBcnJheS5pc0FycmF5KG9wdGlvbnMuc3VpdGVzKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc3RhcnQgdGhlIHRlc3QgLSBubyBzdWl0ZXMgYXJlIHNwZWNpZmllZC4nKTtcbiAgICB9XG4gICAgbGV0IGNhcHNBcnIgPSBvcHRpb25zLmNhcGFiaWxpdGllcyB8fCBbe31dO1xuICAgIC8vIGNoZWNrIGlmIGNhcGFiaWxpdGllcyBvYmplY3QgaXMgYW4gYXJyYXkgb3IgYSBoYXNodGFibGVcbiAgICBpZiAoIShjYXBzQXJyIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICAgIGNhcHNBcnIgPSBbY2Fwc0Fycl07XG4gICAgfVxuICAgIGxldCBleGl0Q29kZSA9IDA7XG4gICAgLy8gc3RhcnQgbGF1bmNoZXJcbiAgICB0cnkge1xuICAgICAgICBjb25zdCByZXBvcnRlciA9IG5ldyBSZXBvcnRBZ2dyZWdhdG9yKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBsYXVuY2hlciA9IG9wdGlvbnMucGFyYWxsZWwgJiYgb3B0aW9ucy5wYXJhbGxlbC53b3JrZXJzICYmICFpc05hTihvcHRpb25zLnBhcmFsbGVsLndvcmtlcnMpICYmIG9wdGlvbnMucGFyYWxsZWwud29ya2VycyA+IDFcbiAgICAgICAgICAgID8gbmV3IFBhcmFsbGVsTGF1bmNoZXIob3B0aW9ucywgcmVwb3J0ZXIpIDogbmV3IExhdW5jaGVyKG9wdGlvbnMsIHJlcG9ydGVyKTtcbiAgICAgICAgY29uc29sZS5sb2coJ1Rlc3Qgc3RhcnRlZC4uLicpO1xuICAgICAgICBhd2FpdCBsYXVuY2hlci5ydW4oY2Fwc0Fycik7XG4gICAgICAgIHJlcG9ydGVyLmdlbmVyYXRlUmVwb3J0cygpO1xuICAgICAgICBleGl0Q29kZSA9IHJlcG9ydGVyLmdldEV4aXRDb2RlKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhdGFsIGVycm9yJywgZSk7XG4gICAgICAgIGNvbnNvbGUudHJhY2UoKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgICByZXR1cm4gZXhpdENvZGU7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVNpZ0ludCgpIHtcbiAgICAvLyBkZWxheSBwcm9jZXNzIGV4aXQgdG8gbGV0IE94eWdlbiB0byBwcm9wZXJseSBkaXNwb3NlXG4gICAgc2V0VGltZW91dCgoKSA9PiBwcm9jZXNzLmV4aXQoMCksIDIwMDApO1xufVxuXG5mdW5jdGlvbiBwcmludFVzYWdlKCkge1xuICAgIGNvbnNvbGUubG9nKGBVc2FnZTogb3h5Z2VuIFtPUFRJT05TXS4uLiBGSUxFXG5cbkZJTEUgLSBQYXRoIHRvIGEgdGVzdCBzY3JpcHQgKC5qcykgb3IgYSBwcm9qZWN0IGNvbmZpZ3VyYXRpb24gKC5qc29uKSBmaWxlLlxuXG5HZW5lcmFsIG9wdGlvbnM6XG4gIC1kLCAtLWRlbGF5PVNFQ09ORFMgICAgICAgIERlbGF5IGJldHdlZW4gZWFjaCBjb21tYW5kIGluIHNlY29uZHMuXG4gICAgICAtLXJmPXtodG1sfHBkZnx4bWx8ZXhjZWx8anVuaXR8anNvbn0gIFJlcG9ydHMgZmlsZSBmb3JtYXQuIERlZmF1bHQgaXMgaHRtbC5cbiAgICAgIC0tcm89UEFUSCAgICAgICAgICAgICAgT3V0cHV0IHBhdGggZm9yIHJlcG9ydCBmaWxlLiBJZiBzcGVjaWZpZWQsIHRoZSByZXBvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBvdmVyd3JpdGUgYW55IHByZXZpb3VzIHJlcG9ydHMuXG4gIC1pLCAtLWl0ZXI9Q09VTlQgICAgICAgICAgIE51bWJlciBvZiB0aW1lcyB0byBydW4gdGhlIHRlc3QuIERlZmF1bHQgaXMgMS5cbiAgLXAsIC0tcGFyYW09RklMRSAgICAgICAgICAgUGFyYW1ldGVycyBmaWxlLiBJZiBub3Qgc3BlY2lmaWVkIGFuIGF0dGVtcHQgd2lsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBtYWRlIHRvIGxvYWQgcGFyYW1ldGVycyBmcm9tIGEgZmlsZSBuYW1lZCBzYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHRoZSB0ZXN0IHNjcmlwdCwgbG9jYXRlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBoYXZpbmcgZXh0ZW5zaW9uIC0geGxzeCwgeGxzLCBjc3YsIG9yIHR4dC5cbiAgICAgIC0tcG09e3NlcXxyYW5kb218YWxsfSAgT3JkZXIgaW4gd2hpY2ggdG8gcmVhZCB0aGUgcGFyYW1ldGVycyAtIHNlcXVlbnRpYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSwgYWxsLiBEZWZhdWx0IGlzIHNlcS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gJ3NlcScgYW5kICdyYW5kb20nIG1vZGVzIHRlc3Qgd2lsbCBydW4gZXhhY3QgbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRpbWVzIHNwZWNpZmllZCB3aXRoIHRoZSAtaSBvcHRpb24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluICdhbGwnIG1vZGUsIGFsbCBhdmFpbGFibGUgcGFyYW1ldGVycyB3aWxsIGJlIHJlYWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VxdWVudGlhbGx5LiBUaGlzIG9wdGlvbiBpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtaSBvcHRpb24uXG4gICAgICAtLWRiZ3BvcnQ9UE9SVCAgICAgICAgIERlYnVnZ2VyIHBvcnQuXG4gICAgICAtLXN1aXRlcyAgICAgICAgICAgICAgIEZpbHRlciBvdXQgc3VpdGVzIGJ5IG5hbWVcbiAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgRGlzcGxheSB0aGlzIGluZm9ybWF0aW9uIGFuZCBleGl0LlxuICAtdiwgLS12ZXJzaW9uICAgICAgICAgICAgICBEaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQuXG5cbldlYiB0ZXN0IG9wdGlvbnM6XG4gIC1iLCAtLWJyb3dzZXI9e2Nocm9tZXxpZXxzYWZhcml8ZmlyZWZveH0gIEJyb3dzZXIgbmFtZS4gRGVmYXVsdCBpcyBjaHJvbWUuXG4gIC1zLCAtLXNlcnZlcj1TRVJWRVJfVVJMICAgIFNlbGVuaXVtIGh1YiBVUkwuIERlZmF1bHQgaXMgaHR0cDovL2xvY2FsaG9zdDo0NDQ0L3dkL2h1Yi5cbiAgICAgIC0tcmVvcGVuPXt0cnVlfGZhbHNlfSAgUmVvcGVuIGJyb3dzZXIgb24gZWFjaCBpdGVyYXRpb24uIERlZmF1bHQgaXMgZmFsc2UuXG4gICAgICBcbk1vYmlsZSB0ZXN0IG9wdGlvbnM6XG4gICAgLXMsIC0tc2VydmVyPVNFUlZFUl9VUkwgIEFwcGl1bSBzZXJ2ZXIgVVJMLiBEZWZhdWx0IGlzIGh0dHA6Ly9sb2NhbGhvc3Q6NDcyMy93ZC9odWIuYCk7XG59Il19
|
|
147
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2xpLmpzIl0sIm5hbWVzIjpbInByb2Nlc3MiLCJvbiIsImhhbmRsZVNpZ0ludCIsImVycm9yIiwiY29uc29sZSIsImFyZ3YiLCJyZXF1aXJlIiwic2xpY2UiLCJ2IiwidmVyc2lvbiIsImxvZyIsImV4aXQiLCJfIiwiaGVscCIsInByaW50VXNhZ2UiLCJkIiwiZGVsYXkiLCJwYXJzZUludCIsInRhcmdldEZpbGUiLCJjbGl1dGlsIiwicHJvY2Vzc1RhcmdldFBhdGgiLCJjd2QiLCJjb25maWciLCJnZXRDb25maWd1cmF0aW9ucyIsImdlbmVyYXRlVGVzdE9wdGlvbnMiLCJ0aGVuIiwib3B0aW9ucyIsInByZXBhcmVBbmRTdGFydFRoZVRlc3QiLCJjb2RlIiwiZSIsImZyYW1ld29yayIsInN1aXRlcyIsIkFycmF5IiwiaXNBcnJheSIsIkVycm9yIiwiY2Fwc0FyciIsImNhcGFiaWxpdGllcyIsImV4aXRDb2RlIiwicmVwb3J0ZXIiLCJSZXBvcnRBZ2dyZWdhdG9yIiwid3NSZXBvcnRlciIsIndzUG9ydCIsInVuZGVmaW5lZCIsIldlYlNvY2tldFJlcG9ydGVyIiwibGF1bmNoZXIiLCJwYXJhbGxlbCIsIndvcmtlcnMiLCJpc05hTiIsIlBhcmFsbGVsTGF1bmNoZXIiLCJMYXVuY2hlciIsInN0YXJ0QW5kV2FpdEZvckNsaWVudCIsInJ1biIsImdlbmVyYXRlUmVwb3J0cyIsInN0b3AiLCJnZXRFeGl0Q29kZSIsInRyYWNlIiwic2V0VGltZW91dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0FBU0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBRUFBLE9BQU8sQ0FBQ0MsRUFBUixDQUFXLFFBQVgsRUFBcUJDLFlBQXJCO0FBQ0FGLE9BQU8sQ0FBQ0MsRUFBUixDQUFXLG1CQUFYLEVBQWdDRSxLQUFLLElBQUk7QUFDckNDLEVBQUFBLE9BQU8sQ0FBQ0QsS0FBUixDQUFjLG1CQUFkLEVBQW1DQSxLQUFuQztBQUNILENBRkQ7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VUFBVSxDQUFFYSxJQUFaO0FBQ0FoQixJQUFBQSxRQUFRLEdBQUdDLFFBQVEsQ0FBQ2dCLFdBQVQsRUFBWDtBQUNILEdBZkQsQ0FnQkEsT0FBT3pCLENBQVAsRUFBVTtBQUNOekIsSUFBQUEsT0FBTyxDQUFDRCxLQUFSLENBQWMsYUFBZCxFQUE2QjBCLENBQTdCO0FBQ0F6QixJQUFBQSxPQUFPLENBQUNtRCxLQUFSO0FBQ0F2RCxJQUFBQSxPQUFPLENBQUNXLElBQVIsQ0FBYSxDQUFiO0FBQ0g7O0FBQ0QsU0FBTzBCLFFBQVA7QUFDSDs7QUFFRCxTQUFTbkMsWUFBVCxHQUF3QjtBQUVwQnNELEVBQUFBLFVBQVUsQ0FBQyxNQUFNeEQsT0FBTyxDQUFDVyxJQUFSLENBQWEsQ0FBYixDQUFQLEVBQXdCLElBQXhCLENBQVY7QUFDSDs7QUFFRCxTQUFTRyxVQUFULEdBQXNCO0FBQ2xCVixFQUFBQSxPQUFPLENBQUNNLEdBQVIsQ0FBYTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUZBakNJO0FBa0NIIiwic291cmNlc0NvbnRlbnQiOlsiIyEgL3Vzci9iaW4vZW52IG5vZGVcclxuLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcbmltcG9ydCAqIGFzIGNsaXV0aWwgZnJvbSAnLi9jbGktdXRpbCc7XHJcbmltcG9ydCBMYXVuY2hlciBmcm9tICcuL2xhdW5jaGVyJztcclxuaW1wb3J0IFBhcmFsbGVsTGF1bmNoZXIgZnJvbSAnLi9wYXJhbGxlbC1sYXVuY2hlcic7XHJcbmltcG9ydCBSZXBvcnRBZ2dyZWdhdG9yIGZyb20gJy4uL3JlcG9ydGVyL1JlcG9ydEFnZ3JlZ2F0b3InO1xyXG5pbXBvcnQgV2ViU29ja2V0UmVwb3J0ZXIgZnJvbSAnLi4vcmVwb3J0ZXIvV2ViU29ja2V0UmVwb3J0ZXInO1xyXG5cclxucHJvY2Vzcy5vbignU0lHSU5UJywgaGFuZGxlU2lnSW50KTtcclxucHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBlcnJvciA9PiB7XHJcbiAgICBjb25zb2xlLmVycm9yKCd1bmNhdWdodEV4Y2VwdGlvbicsIGVycm9yKTtcclxufSk7XHJcblxyXG5wcm9jZXNzLm9uKCd1bmhhbmRsZWRSZWplY3Rpb24nLCBlcnJvciA9PiB7XHJcbiAgICBjb25zb2xlLmVycm9yKCd1bmhhbmRsZWRSZWplY3Rpb24nLCBlcnJvcik7XHJcbn0pO1xyXG5cclxuLy8gcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50c1xyXG5jb25zdCBhcmd2ID0gcmVxdWlyZSgnbWluaW1pc3QnKShwcm9jZXNzLmFyZ3Yuc2xpY2UoMikpO1xyXG5cclxuaWYgKGFyZ3YudiB8fCBhcmd2LnZlcnNpb24pIHtcclxuICAgIGNvbnNvbGUubG9nKHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb24pO1xyXG4gICAgcHJvY2Vzcy5leGl0KDApO1xyXG59IGVsc2UgaWYgKHR5cGVvZihhcmd2Ll9bMF0pID09PSAndW5kZWZpbmVkJyB8fCBhcmd2LmhlbHApIHtcclxuICAgIHByaW50VXNhZ2UoKTtcclxuICAgIHByb2Nlc3MuZXhpdCgxKTtcclxufVxyXG5cclxuaWYgKGFyZ3YuZCB8fCBhcmd2LmRlbGF5KSB7XHJcbiAgICBjb25zdCBkZWxheSA9IGFyZ3YuZCB8fCBhcmd2LmRlbGF5O1xyXG4gICAgaWYgKCEocGFyc2VJbnQoZGVsYXkpID4gMCkpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBhcmd1bWVudCAtICdkZWxheScgc2hvdWxkIGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci5cIik7XHJcbiAgICAgICAgcHJpbnRVc2FnZSgpO1xyXG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcclxuICAgIH1cclxufVxyXG5cclxuY29uc3QgdGFyZ2V0RmlsZSA9IGNsaXV0aWwucHJvY2Vzc1RhcmdldFBhdGgoYXJndi5fWzBdLCBhcmd2LmN3ZCk7XHJcbmlmICh0YXJnZXRGaWxlID09IG51bGwpIHtcclxuICAgIHByaW50VXNhZ2UoKTtcclxuICAgIHByb2Nlc3MuZXhpdCgxKTtcclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gY2xpdXRpbC5nZXRDb25maWd1cmF0aW9ucyh0YXJnZXRGaWxlLCBhcmd2KTtcclxuXHJcbmNsaXV0aWwuZ2VuZXJhdGVUZXN0T3B0aW9ucyhjb25maWcsIGFyZ3YpLnRoZW4oXHJcbiAgICAob3B0aW9ucykgPT4ge1xyXG4gICAgICAgIHByZXBhcmVBbmRTdGFydFRoZVRlc3Qob3B0aW9ucykudGhlbihcclxuICAgICAgICAgICAgKGNvZGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdEb25lIScpO1xyXG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KGNvZGUpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVGVzdCBmYWlsZWQ6ICcsIGUpO1xyXG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH0sXHJcbiAgICAoZSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Rlc3QgZmFpbGVkIG9uIGdlbmVyYXRlIHN0YXRlOiAnLCBlKTtcclxuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XHJcbiAgICB9XHJcbik7XHJcblxyXG5hc3luYyBmdW5jdGlvbiBwcmVwYXJlQW5kU3RhcnRUaGVUZXN0KG9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zLmZyYW1ld29yayA9PT0gJ294eWdlbicgJiYgKCFvcHRpb25zLnN1aXRlcyB8fCAhQXJyYXkuaXNBcnJheShvcHRpb25zLnN1aXRlcykpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc3RhcnQgdGhlIHRlc3QgLSBubyBzdWl0ZXMgYXJlIHNwZWNpZmllZC4nKTtcclxuICAgIH1cclxuICAgIGxldCBjYXBzQXJyID0gb3B0aW9ucy5jYXBhYmlsaXRpZXMgfHwgW3t9XTtcclxuICAgIC8vIGNoZWNrIGlmIGNhcGFiaWxpdGllcyBvYmplY3QgaXMgYW4gYXJyYXkgb3IgYSBoYXNodGFibGVcclxuICAgIGlmICghKGNhcHNBcnIgaW5zdGFuY2VvZiBBcnJheSkpIHtcclxuICAgICAgICBjYXBzQXJyID0gW2NhcHNBcnJdO1xyXG4gICAgfVxyXG4gICAgbGV0IGV4aXRDb2RlID0gMDtcclxuICAgIC8vIHN0YXJ0IGxhdW5jaGVyXHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlcG9ydGVyID0gbmV3IFJlcG9ydEFnZ3JlZ2F0b3Iob3B0aW9ucyk7XHJcbiAgICAgICAgY29uc3Qgd3NSZXBvcnRlciA9IG9wdGlvbnMud3NQb3J0ICE9PSB1bmRlZmluZWQgP1xyXG4gICAgICAgICAgICBuZXcgV2ViU29ja2V0UmVwb3J0ZXIocmVwb3J0ZXIpIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIGNvbnN0IGxhdW5jaGVyID0gb3B0aW9ucy5wYXJhbGxlbCAmJiBvcHRpb25zLnBhcmFsbGVsLndvcmtlcnMgJiYgIWlzTmFOKG9wdGlvbnMucGFyYWxsZWwud29ya2VycykgJiYgb3B0aW9ucy5wYXJhbGxlbC53b3JrZXJzID4gMVxyXG4gICAgICAgICAgICA/IG5ldyBQYXJhbGxlbExhdW5jaGVyKG9wdGlvbnMsIHJlcG9ydGVyKSA6IG5ldyBMYXVuY2hlcihvcHRpb25zLCByZXBvcnRlcik7XHJcbiAgICAgICAgYXdhaXQgd3NSZXBvcnRlcj8uc3RhcnRBbmRXYWl0Rm9yQ2xpZW50KG9wdGlvbnMud3NQb3J0KTtcclxuICAgICAgICBjb25zb2xlLmxvZygnVGVzdCBzdGFydGVkLi4uJyk7XHJcbiAgICAgICAgYXdhaXQgbGF1bmNoZXIucnVuKGNhcHNBcnIpO1xyXG4gICAgICAgIC8vIEdlbmVyYXRlIGZpbGUgcmVwb3J0IG9ubHkgd2hlbiBubyB3c3BvcnQgYXJndW1lbnQgaXMgcHJvdmlkZWRcclxuICAgICAgICBpZiAoIXdzUmVwb3J0ZXIpIHtcclxuICAgICAgICAgICAgYXdhaXQgcmVwb3J0ZXIuZ2VuZXJhdGVSZXBvcnRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdzUmVwb3J0ZXI/LnN0b3AoKTtcclxuICAgICAgICBleGl0Q29kZSA9IHJlcG9ydGVyLmdldEV4aXRDb2RlKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhdGFsIGVycm9yJywgZSk7XHJcbiAgICAgICAgY29uc29sZS50cmFjZSgpO1xyXG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcclxuICAgIH1cclxuICAgIHJldHVybiBleGl0Q29kZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaGFuZGxlU2lnSW50KCkge1xyXG4gICAgLy8gZGVsYXkgcHJvY2VzcyBleGl0IHRvIGxldCBPeHlnZW4gdG8gcHJvcGVybHkgZGlzcG9zZVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiBwcm9jZXNzLmV4aXQoMCksIDIwMDApO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwcmludFVzYWdlKCkge1xyXG4gICAgY29uc29sZS5sb2coYFVzYWdlOiBveHlnZW4gW09QVElPTlNdLi4uIEZJTEVcclxuXHJcbkZJTEUgLSBQYXRoIHRvIGEgdGVzdCBzY3JpcHQgKC5qcykgb3IgYSBwcm9qZWN0IGNvbmZpZ3VyYXRpb24gKC5qc29uKSBmaWxlLlxyXG5cclxuR2VuZXJhbCBvcHRpb25zOlxyXG4gIC1kLCAtLWRlbGF5PVNFQ09ORFMgICAgICAgIERlbGF5IGJldHdlZW4gZWFjaCBjb21tYW5kIGluIHNlY29uZHMuXHJcbiAgICAgIC0tcmY9e2h0bWx8cGRmfHhtbHxleGNlbHxqdW5pdHxqc29ufSAgUmVwb3J0cyBmaWxlIGZvcm1hdC4gRGVmYXVsdCBpcyBodG1sLlxyXG4gICAgICAtLXJvPVBBVEggICAgICAgICAgICAgIE91dHB1dCBwYXRoIGZvciByZXBvcnQgZmlsZS4gSWYgc3BlY2lmaWVkLCB0aGUgcmVwb3J0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBvdmVyd3JpdGUgYW55IHByZXZpb3VzIHJlcG9ydHMuXHJcbiAgLWksIC0taXRlcj1DT1VOVCAgICAgICAgICAgTnVtYmVyIG9mIHRpbWVzIHRvIHJ1biB0aGUgdGVzdC4gRGVmYXVsdCBpcyAxLlxyXG4gIC1wLCAtLXBhcmFtPUZJTEUgICAgICAgICAgIFBhcmFtZXRlcnMgZmlsZS4gSWYgbm90IHNwZWNpZmllZCBhbiBhdHRlbXB0IHdpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBtYWRlIHRvIGxvYWQgcGFyYW1ldGVycyBmcm9tIGEgZmlsZSBuYW1lZCBzYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdGhlIHRlc3Qgc2NyaXB0LCBsb2NhdGVkIGluIHRoZSBzYW1lIGRpcmVjdG9yeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgaGF2aW5nIGV4dGVuc2lvbiAtIHhsc3gsIHhscywgY3N2LCBvciB0eHQuXHJcbiAgICAgIC0tcG09e3NlcXxyYW5kb218YWxsfSAgT3JkZXIgaW4gd2hpY2ggdG8gcmVhZCB0aGUgcGFyYW1ldGVycyAtIHNlcXVlbnRpYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tLCBhbGwuIERlZmF1bHQgaXMgc2VxLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluICdzZXEnIGFuZCAncmFuZG9tJyBtb2RlcyB0ZXN0IHdpbGwgcnVuIGV4YWN0IG51bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRpbWVzIHNwZWNpZmllZCB3aXRoIHRoZSAtaSBvcHRpb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gJ2FsbCcgbW9kZSwgYWxsIGF2YWlsYWJsZSBwYXJhbWV0ZXJzIHdpbGwgYmUgcmVhZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcXVlbnRpYWxseS4gVGhpcyBvcHRpb24gaXMgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtaSBvcHRpb24uXHJcbiAgICAgIC0tZGJncG9ydD1QT1JUICAgICAgICAgRGVidWdnZXIgcG9ydC5cclxuICAgICAgLS13c3BvcnQ9UE9SVCAgICAgICAgICBXZWJTb2NrZXQgZXZlbnRzIHJlcG9ydGVyIHBvcnQuXHJcbiAgICAgIC0tc3VpdGVzICAgICAgICAgICAgICAgRmlsdGVyIG91dCBzdWl0ZXMgYnkgbmFtZVxyXG4gIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIERpc3BsYXkgdGhpcyBpbmZvcm1hdGlvbiBhbmQgZXhpdC5cclxuICAtdiwgLS12ZXJzaW9uICAgICAgICAgICAgICBEaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQuXHJcblxyXG5XZWIgdGVzdCBvcHRpb25zOlxyXG4gIC1iLCAtLWJyb3dzZXI9e2Nocm9tZXxpZXxzYWZhcml8ZmlyZWZveH0gIEJyb3dzZXIgbmFtZS4gRGVmYXVsdCBpcyBjaHJvbWUuXHJcbiAgLXMsIC0tc2VydmVyPVNFUlZFUl9VUkwgICAgU2VsZW5pdW0gaHViIFVSTC4gRGVmYXVsdCBpcyBodHRwOi8vbG9jYWxob3N0OjQ0NDQvd2QvaHViLlxyXG4gICAgICAtLXJlb3Blbj17dHJ1ZXxmYWxzZX0gIFJlb3BlbiBicm93c2VyIG9uIGVhY2ggaXRlcmF0aW9uLiBEZWZhdWx0IGlzIGZhbHNlLlxyXG4gICAgICBcclxuTW9iaWxlIHRlc3Qgb3B0aW9uczpcclxuICAgIC1zLCAtLXNlcnZlcj1TRVJWRVJfVVJMICBBcHBpdW0gc2VydmVyIFVSTC4gRGVmYXVsdCBpcyBodHRwOi8vbG9jYWxob3N0OjQ3MjMvd2QvaHViLmApO1xyXG59Il19
|
package/build/lib/util.js
CHANGED
|
@@ -136,7 +136,7 @@ var self = module.exports = {
|
|
|
136
136
|
|
|
137
137
|
return suite;
|
|
138
138
|
},
|
|
139
|
-
getParameterManager: async function (mainFilePath, paramOpts = null, cwd = null, autoSearch =
|
|
139
|
+
getParameterManager: async function (mainFilePath, paramOpts = null, cwd = null, autoSearch = true) {
|
|
140
140
|
let paramFilePath = paramOpts && paramOpts.file ? paramOpts.file : null;
|
|
141
141
|
let paramMode = paramOpts && paramOpts.mode ? paramOpts.mode : 'seq';
|
|
142
142
|
|
|
@@ -446,4 +446,4 @@ var self = module.exports = {
|
|
|
446
446
|
}
|
|
447
447
|
}
|
|
448
448
|
};
|
|
449
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbC5qcyJdLCJuYW1lcyI6WyJwYXRoIiwicmVxdWlyZSIsImZzIiwibW9tZW50IiwiY3J5cHRvIiwidXRpbCIsInBhc3N3b3JkIiwiZW5jcnlwdGlvbktleSIsImtleSIsInNjcnlwdFN5bmMiLCJpdiIsIkJ1ZmZlciIsImFsbG9jIiwiYWxnb3JpdGhtIiwiZG93bmxvYWQiLCJyZXF1ZXN0IiwiRGVjcnlwdFJlc3VsdCIsInJlc3VsdCIsImRlY3J5cHRSZXN1bHQiLCJnZXREZWNyeXB0UmVzdWx0IiwiRFVNTVlfSE9PS1MiLCJiZWZvcmVUZXN0IiwiYmVmb3JlU3VpdGUiLCJiZWZvcmVDYXNlIiwiYmVmb3JlQ29tbWFuZCIsImFmdGVyQ29tbWFuZCIsImFmdGVyVGVzdCIsImFmdGVyU3VpdGUiLCJhZnRlckNhc2UiLCJDQl9BVFRBQ0hNRU5UU19ESVJfTkFNRSIsIkRPV05MT0FEX1JFVFJJRVMiLCJET1dOTE9BRF9SRVRSWV9XQUlUX1RJTUUiLCJnZXRWaWRlb0F0dGFjaG1lbnRQYXRoIiwiZmlsZU5hbWUiLCJvcHRpb25zIiwiY3dkIiwiZ2V0Q3dkIiwiYXR0YWNobWVudHNEaXJQYXRoIiwiam9pbiIsImV4aXN0c1N5bmMiLCJta2RpclN5bmMiLCJwcm9jZXNzIiwicm9vdFBhdGgiLCJ0cmltIiwic2VsZiIsIm1vZHVsZSIsImV4cG9ydHMiLCJnZW5lcmF0ZVVuaXF1ZUlkIiwicmFuZG9tQnl0ZXMiLCJ0b1N0cmluZyIsImdldFRpbWVTdGFtcCIsInV0YyIsInZhbHVlT2YiLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uIiwic3VpdGVEZWYiLCJ0ZXN0Q29uZmlnIiwiaXRlcmF0aW9uQ291bnQiLCJzdWl0ZSIsImlkIiwibmFtZSIsIml0ZXJhdGlvbnMiLCJzdWl0ZUZpbGVQYXRoIiwidGFyZ2V0IiwicGFyYW1NYW5hZ2VyIiwiZ2V0UGFyYW1ldGVyTWFuYWdlciIsInBhcmFtZXRlcnMiLCJnZXRNb2RlIiwicm93cyIsImNhcGFiaWxpdGllcyIsImVudmlyb25tZW50IiwicGFyYWxsZWwiLCJjb25jdXJyZW5jeSIsImNhc2VzIiwiZm9yRWFjaCIsImNhc2VEZWYiLCJ0YyIsImdldEZpbGVOYW1lV2l0aG91dEV4dCIsInJlc29sdmVQYXRoIiwiZm9ybWF0IiwicHVzaCIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpTRmlsZSIsImZpbGVQYXRoIiwicGFyYW1GaWxlIiwicGFyYW1Nb2RlIiwibm9QYXJhbUF1dG9TZWFyY2giLCJmaWxlTmFtZU5vRXh0IiwidGVzdGNhc2UiLCJyZW9wZW5TZXNzaW9uIiwiZGlybmFtZSIsImZpbGUiLCJtb2RlIiwibWFpbkZpbGVQYXRoIiwicGFyYW1PcHRzIiwiYXV0b1NlYXJjaCIsInBhcmFtRmlsZVBhdGgiLCJpc0Fic29sdXRlIiwibG9hZFBhcmFtZXRlck1hbmFnZXIiLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uRmlsZSIsImJhc2VuYW1lIiwiZmlsZUV4dCIsImV4dG5hbWUiLCJmaWxlUGF0aE5vRXh0Iiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJtYWluRmlsZSIsImNzdlBhcmFtRmlsZSIsInR4dFBhcmFtRmlsZSIsInhsc1BhcmFtRmlsZSIsInhsc3hQYXJhbUZpbGUiLCJpbml0IiwicGF0aFRvUmVzb2x2ZSIsImJhc2VGb2xkZXIiLCJyZXNvbHZlIiwibWFrZVNlcmlhbGl6YWJsZSIsImVyciIsImRlc3Ryb3lDaXJjdWxhciIsImZyb20iLCJzZWVuIiwidG8iLCJBcnJheSIsImlzQXJyYXkiLCJPYmplY3QiLCJrZXlzIiwiaW5kZXhPZiIsInNsaWNlIiwiZ2V0TWV0aG9kU2lnbmF0dXJlIiwibW9kdWxlTmFtZSIsIm1ldGhvZE5hbWUiLCJtZXRob2RBcmdzIiwic3RyaW5naWZ5IiwiYXJncyIsImluZGVudGF0aW9uIiwiU3RyaW5nIiwibGVuZ3RoIiwic3RyIiwiSlNPTiIsInZhbHVlIiwiRXJyb3IiLCJSZWdFeHAiLCJzb3VyY2UiLCJmbGFncyIsInJlcGxhY2UiLCJlbmRzV2l0aCIsImUiLCJjb25zb2xlIiwid2FybiIsImluc3BlY3QiLCJkZXB0aCIsImlzSW5EZWJ1Z01vZGUiLCJsb2FkVGVzdEhvb2tzIiwiaG9va3MiLCJleGVjdXRlVGVzdEhvb2siLCJtZXRob2QiLCJpbmNsdWRlcyIsImdsb2JhbCIsIl9sYXN0VHJhbnNhY3Rpb25OYW1lIiwiY2hhaUFuZE1vY2tlcnlMb2FkZWQiLCJjaGFpIiwibW9ja2VyeSIsImVuYWJsZSIsInVzZUNsZWFuQ2FjaGUiLCJ3YXJuT25SZXBsYWNlIiwid2Fybk9uVW5yZWdpc3RlcmVkIiwicmVnaXN0ZXJNb2NrIiwiYXBwbHkiLCJ1bmRlZmluZWQiLCJlcnJvciIsImdldE94TW9kdWxlc0RpciIsIl9fZGlybmFtZSIsImhvb2tMb2dzIiwibG9nZ2VyIiwib3JpZ2xvZyIsImxvZyIsIm9yaWdEZWJ1ZyIsImRlYnVnIiwib3JpZ0luZm8iLCJpbmZvIiwib3JpZ1dhcm4iLCJvcmlnRXJyb3IiLCJwcm9jZXNzQXJncyIsImFyZ3VtZW50QXJyYXkiLCJtYXAiLCJpdGVtIiwibWFrZVRyYW5zYWN0aW9uRmFpbGVkSWZTdGVwRmFpbGVkIiwic3RlcHMiLCJsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCIsIm5ld1N0ZXBzIiwiaWR4Iiwic3RhdHVzIiwiZGVjcnlwdCIsInRleHQiLCJlbmNyeXB0ZWRUZXh0IiwiZGVjaXBoZXIiLCJjcmVhdGVEZWNpcGhlcml2IiwiZGVjcnlwdGVkIiwidXBkYXRlIiwiY29uY2F0IiwiZmluYWwiLCJyZXRWYWwiLCJPeHlnZW5FcnJvciIsImVycm9ySGVscGVyIiwiZXJyb3JDb2RlIiwiQ1JZUFRPX0VSUk9SIiwiZW5jcnlwdCIsImNpcGhlciIsImNyZWF0ZUNpcGhlcml2IiwiZW5jcnlwdGVkIiwic2xlZXAiLCJ0aW1lb3V0IiwiUHJvbWlzZSIsInNldFRpbWVvdXQiLCJkb3dubG9hZFZpZGVvIiwidmlkZW9VcmwiLCJsb2NhbFZpZGVvRmlsZVBhdGgiLCJpIiwid3JpdGVGaWxlU3luYyIsInVybCIsImpz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Y2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgbW9kdWxlIGZvciBpbnRlcm5hbCBPeHlnZW4gdXNlXHJcbiAqL1xyXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xyXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XHJcbmNvbnN0IG1vbWVudCA9IHJlcXVpcmUoJ21vbWVudCcpO1xyXG5jb25zdCBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcclxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcclxuY29uc3QgcGFzc3dvcmQgPSByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS5lbmNyeXB0aW9uS2V5O1xyXG5jb25zdCBrZXkgPSBjcnlwdG8uc2NyeXB0U3luYyhwYXNzd29yZCwgJ0dmRycsIDI0KTtcclxuY29uc3QgaXYgPSBCdWZmZXIuYWxsb2MoMTYsIDApO1xyXG5jb25zdCBhbGdvcml0aG0gPSAnYWVzLTE5Mi1jYmMnO1xyXG5jb25zdCBkb3dubG9hZCA9IHJlcXVpcmUoJ2Rvd25sb2FkJyk7XHJcbmNvbnN0IHJlcXVlc3QgPSByZXF1aXJlKCdyZXF1ZXN0Jyk7XHJcblxyXG5pbXBvcnQgT3h5Z2VuRXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5cclxuZnVuY3Rpb24gRGVjcnlwdFJlc3VsdChyZXN1bHQpIHtcclxuICAgIGNvbnN0IGRlY3J5cHRSZXN1bHQgPSByZXN1bHQ7XHJcblxyXG4gICAgdGhpcy5nZXREZWNyeXB0UmVzdWx0ID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBkZWNyeXB0UmVzdWx0O1xyXG4gICAgfTtcclxufVxyXG5cclxuY29uc3QgRFVNTVlfSE9PS1MgPSB7XHJcbiAgICBiZWZvcmVUZXN0OiAoKSA9PiB7fSxcclxuICAgIGJlZm9yZVN1aXRlOiAoKSA9PiB7fSxcclxuICAgIGJlZm9yZUNhc2U6ICgpID0+IHt9LFxyXG4gICAgYmVmb3JlQ29tbWFuZDogKCkgPT4ge30sXHJcbiAgICBhZnRlckNvbW1hbmQ6ICgpID0+IHt9LFxyXG4gICAgYWZ0ZXJUZXN0OiAoKSA9PiB7fSxcclxuICAgIGFmdGVyU3VpdGU6ICgpID0+IHt9LFxyXG4gICAgYWZ0ZXJDYXNlOiAoKSA9PiB7fSxcclxufTtcclxuXHJcbmNvbnN0IENCX0FUVEFDSE1FTlRTX0RJUl9OQU1FID0gJy5jYi1hdHRhY2htZW50cyc7XHJcbmNvbnN0IERPV05MT0FEX1JFVFJJRVMgPSA0MDtcclxuY29uc3QgRE9XTkxPQURfUkVUUllfV0FJVF9USU1FID0gMjUwMDtcclxuXHJcbmZ1bmN0aW9uIGdldFZpZGVvQXR0YWNobWVudFBhdGgoZmlsZU5hbWUsIG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IGN3ZCA9IGdldEN3ZChvcHRpb25zKTtcclxuICAgIGNvbnN0IGF0dGFjaG1lbnRzRGlyUGF0aCA9IHBhdGguam9pbihjd2QsIENCX0FUVEFDSE1FTlRTX0RJUl9OQU1FKTtcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhhdHRhY2htZW50c0RpclBhdGgpKSB7XHJcbiAgICAgICAgZnMubWtkaXJTeW5jKGF0dGFjaG1lbnRzRGlyUGF0aCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGF0aC5qb2luKGF0dGFjaG1lbnRzRGlyUGF0aCwgZmlsZU5hbWUpO1xyXG59XHJcblxyXG5jb25zdCBnZXRDd2QgPSAob3B0aW9ucykgPT4ge1xyXG4gICAgbGV0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XHJcblxyXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5jd2QpIHtcclxuICAgICAgICBjd2QgPSBvcHRpb25zLmN3ZDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yb290UGF0aCkge1xyXG4gICAgICAgIGN3ZCA9IG9wdGlvbnMucm9vdFBhdGg7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGN3ZC50cmltKCk7XHJcbn07XHJcblxyXG52YXIgc2VsZiA9IG1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIGdlbmVyYXRlVW5pcXVlSWQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tQnl0ZXMoNCkudG9TdHJpbmcoJ2hleCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRUaW1lU3RhbXA6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBtb21lbnQudXRjKCkudmFsdWVPZigpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uOiBhc3luYyBmdW5jdGlvbihzdWl0ZURlZiwgdGVzdENvbmZpZywgaXRlcmF0aW9uQ291bnQgPSAxKSB7XHJcbiAgICAgICAgdmFyIHN1aXRlID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RzdWl0ZS5qcycpKCk7XHJcbiAgICAgICAgc3VpdGUuaWQgPSBudWxsO1xyXG4gICAgICAgIHN1aXRlLm5hbWUgPSBzdWl0ZURlZi5uYW1lO1xyXG4gICAgICAgIHN1aXRlLmlkID0gc3VpdGVEZWYuaWQ7XHJcbiAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBzdWl0ZURlZi5pdGVyYXRpb25zIHx8IHN1aXRlRGVmLml0ZXJhdGlvbkNvdW50IHx8IHRlc3RDb25maWcuaXRlcmF0aW9ucyB8fCBpdGVyYXRpb25Db3VudDtcclxuICAgICAgICBjb25zdCBzdWl0ZUZpbGVQYXRoID0gc3VpdGVEZWYucGF0aCB8fCBwYXRoLmpvaW4odGVzdENvbmZpZy50YXJnZXQuY3dkLCAnc3VpdGVzJywgYCR7c3VpdGVEZWYubmFtZX0uanNvbmApO1xyXG4gICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlciA9IGF3YWl0IHNlbGYuZ2V0UGFyYW1ldGVyTWFuYWdlcihzdWl0ZUZpbGVQYXRoLCB0ZXN0Q29uZmlnLnBhcmFtZXRlcnMsIHRlc3RDb25maWcudGFyZ2V0LmN3ZCk7XHJcbiAgICAgICAgaWYgKHN1aXRlLnBhcmFtTWFuYWdlciAmJiBzdWl0ZS5wYXJhbU1hbmFnZXIuZ2V0TW9kZSgpID09ICdhbGwnKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gc3VpdGUucGFyYW1NYW5hZ2VyLnJvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1aXRlLmNhcGFiaWxpdGllcyA9IHN1aXRlRGVmLmNhcGFiaWxpdGllcyB8fCB0ZXN0Q29uZmlnLmNhcGFiaWxpdGllcyB8fCB7fTtcclxuICAgICAgICBzdWl0ZS5lbnZpcm9ubWVudCA9IHRlc3RDb25maWcuZW52aXJvbm1lbnQgfHwgbnVsbDtcclxuICAgICAgICBzdWl0ZS5vcHRpb25zID0gdGVzdENvbmZpZy5vcHRpb25zIHx8IG51bGw7XHJcbiAgICAgICAgc3VpdGUucGFyYWxsZWwgPSBzdWl0ZURlZi5wYXJhbGxlbCB8fCB0ZXN0Q29uZmlnLnBhcmFsbGVsIHx8IHRlc3RDb25maWcuY29uY3VycmVuY3kgfHwgMTtcclxuICAgICAgICAvLyBpbml0aWFsaXplIGVhY2ggdGVzdCBjYXNlXHJcbiAgICAgICAgc3VpdGVEZWYuY2FzZXMuZm9yRWFjaChjYXNlRGVmID0+IHtcclxuICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSB0ZXN0Y2FzZSBvYmplY3RcclxuICAgICAgICAgICAgY29uc3QgdGMgPSBuZXcgcmVxdWlyZSgnLi4vbW9kZWwvdGVzdGNhc2UuanMnKSgpO1xyXG4gICAgICAgICAgICBpZiAoY2FzZURlZi5uYW1lKVxyXG4gICAgICAgICAgICAgICAgdGMubmFtZSA9IGNhc2VEZWYubmFtZTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGMubmFtZSA9IHNlbGYuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KGNhc2VEZWYucGF0aCk7XHJcbiAgICAgICAgICAgIHRjLnBhdGggPSBzZWxmLnJlc29sdmVQYXRoKGNhc2VEZWYucGF0aCwgdGVzdENvbmZpZy50YXJnZXQuY3dkKTtcclxuICAgICAgICAgICAgdGMuZm9ybWF0ID0gJ2pzJztcclxuICAgICAgICAgICAgdGMuaXRlcmF0aW9uQ291bnQgPSBjYXNlRGVmLml0ZXJhdGlvbnMgfHwgY2FzZURlZi5pdGVyYXRpb25Db3VudCB8fCAxO1xyXG4gICAgICAgICAgICBzdWl0ZS5jYXNlcy5wdXNoKHRjKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gc3VpdGU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdlbmVyYXRlVGVzdFN1aXRlRnJvbUpTRmlsZTogYXN5bmMgZnVuY3Rpb24gKGZpbGVQYXRoLCBwYXJhbUZpbGUgPSBudWxsLCBwYXJhbU1vZGUgPSBudWxsLCBub1BhcmFtQXV0b1NlYXJjaCA9IHRydWUsIGl0ZXJhdGlvbkNvdW50ID0gMSkge1xyXG4gICAgICAgIHZhciBmaWxlTmFtZU5vRXh0ID0gc2VsZi5nZXRGaWxlTmFtZVdpdGhvdXRFeHQoZmlsZVBhdGgpO1xyXG5cclxuICAgICAgICB2YXIgdGVzdGNhc2UgPSBuZXcgcmVxdWlyZSgnLi4vbW9kZWwvdGVzdGNhc2UuanMnKSgpO1xyXG4gICAgICAgIHRlc3RjYXNlLm5hbWUgPSBmaWxlTmFtZU5vRXh0O1xyXG4gICAgICAgIHRlc3RjYXNlLnBhdGggPSBmaWxlUGF0aDtcclxuICAgICAgICB0ZXN0Y2FzZS5mb3JtYXQgPSAnanMnO1xyXG4gICAgICAgIHRlc3RjYXNlLml0ZXJhdGlvbkNvdW50ID0gMTtcclxuXHJcbiAgICAgICAgdmFyIHN1aXRlID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RzdWl0ZS5qcycpKCk7XHJcbiAgICAgICAgc3VpdGUubmFtZSA9IHRlc3RjYXNlLm5hbWU7XHJcbiAgICAgICAgc3VpdGUuaWQgPSB0ZXN0Y2FzZS5pZDtcclxuICAgICAgICBzdWl0ZS5pdGVyYXRpb25Db3VudCA9IGl0ZXJhdGlvbkNvdW50O1xyXG4gICAgICAgIHN1aXRlLmNhc2VzLnB1c2godGVzdGNhc2UpO1xyXG4gICAgICAgIGlmICh0ZXN0Y2FzZS5yZW9wZW5TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLnJlb3BlblNlc3Npb24gPSB0ZXN0Y2FzZS5yZW9wZW5TZXNzaW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjd2QgPSBwYXRoLmRpcm5hbWUoZmlsZVBhdGgpO1xyXG4gICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlciA9IGF3YWl0IHNlbGYuZ2V0UGFyYW1ldGVyTWFuYWdlcihmaWxlUGF0aCwgeyBmaWxlOiBwYXJhbUZpbGUsIG1vZGU6IHBhcmFtTW9kZSB9LCBjd2QpO1xyXG4gICAgICAgIC8vIGlmIHBhcmFtZXRlciByZWFkaW5nIG1vZGUgaXMgJ2FsbCcgdGhlbiBjaGFuZ2UgaXRlcmF0aW9uQ291bnQgdG8gdGhlIGFtb3VudCBvZiByb3dzIGluIHRoZSBwYXJhbSBmaWxlXHJcbiAgICAgICAgaWYgKHN1aXRlLnBhcmFtTWFuYWdlciAmJiBwYXJhbU1vZGUgPT0gJ2FsbCcpIHtcclxuICAgICAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBzdWl0ZS5wYXJhbU1hbmFnZXIucm93cztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN1aXRlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRQYXJhbWV0ZXJNYW5hZ2VyOiBhc3luYyBmdW5jdGlvbihtYWluRmlsZVBhdGgsIHBhcmFtT3B0cyA9IG51bGwsIGN3ZCA9IG51bGwsIGF1dG9TZWFyY2ggPSBmYWxzZSkge1xyXG4gICAgICAgIGxldCBwYXJhbUZpbGVQYXRoID0gcGFyYW1PcHRzICYmIHBhcmFtT3B0cy5maWxlID8gcGFyYW1PcHRzLmZpbGUgOiBudWxsO1xyXG4gICAgICAgIGxldCBwYXJhbU1vZGUgPSBwYXJhbU9wdHMgJiYgcGFyYW1PcHRzLm1vZGUgPyBwYXJhbU9wdHMubW9kZSA6ICdzZXEnO1xyXG5cclxuICAgICAgICBpZiAocGFyYW1GaWxlUGF0aCAmJiBjd2QgJiYgIXBhdGguaXNBYnNvbHV0ZShwYXJhbUZpbGVQYXRoKSkge1xyXG4gICAgICAgICAgICBwYXJhbUZpbGVQYXRoID0gcGF0aC5qb2luKGN3ZCwgcGFyYW1GaWxlUGF0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYXdhaXQgc2VsZi5sb2FkUGFyYW1ldGVyTWFuYWdlcihtYWluRmlsZVBhdGgsIHBhcmFtRmlsZVBhdGgsIHBhcmFtTW9kZSwgYXV0b1NlYXJjaCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb25GaWxlOiBhc3luYyBmdW5jdGlvbiAoZmlsZVBhdGgsIHBhcmFtRmlsZSwgcGFyYW1Nb2RlID0gbnVsbCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgdGVzdENvbmZpZyA9IHtcclxuICAgICAgICAgICAgLi4ub3B0aW9ucyB8fCB7fSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChwYXJhbUZpbGUpIHtcclxuICAgICAgICAgICAgdGVzdENvbmZpZy5wYXJhbWV0ZXJzID0ge1xyXG4gICAgICAgICAgICAgICAgZmlsZTogcGFyYW1GaWxlLFxyXG4gICAgICAgICAgICAgICAgbW9kZTogcGFyYW1Nb2RlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXdhaXQgc2VsZi5nZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uKHJlcXVpcmUoZmlsZVBhdGgpLCB0ZXN0Q29uZmlnKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0RmlsZU5hbWVXaXRob3V0RXh0OiBmdW5jdGlvbiAoZmlsZVBhdGgpIHtcclxuICAgICAgICB2YXIgZmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKTtcclxuICAgICAgICB2YXIgZmlsZUV4dCA9IHBhdGguZXh0bmFtZShmaWxlUGF0aCk7XHJcbiAgICAgICAgdmFyIGZpbGVQYXRoTm9FeHQgPSBmaWxlTmFtZS5zdWJzdHJpbmcoMCwgZmlsZU5hbWUubGFzdEluZGV4T2YoZmlsZUV4dCkpO1xyXG4gICAgICAgIHJldHVybiBmaWxlUGF0aE5vRXh0O1xyXG4gICAgfSxcclxuXHJcbiAgICBsb2FkUGFyYW1ldGVyTWFuYWdlcjogYXN5bmMgZnVuY3Rpb24obWFpbkZpbGUsIHBhcmFtRmlsZSwgcGFyYW1Nb2RlLCBhdXRvU2VhcmNoID0gZmFsc2UpIHtcclxuICAgICAgICB2YXIgcGFyYW1NYW5hZ2VyID0gbnVsbDtcclxuICAgICAgICAvLyBpZiBwYXJhbSBmaWxlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gY2hlY2sgaWYgSlMgZmlsZSBpcyBjb21pbmcgaW4gcGFpciB3aXRoIGEgcGFyYW1ldGVyIGZpbGUgXHJcbiAgICAgICAgLy8gKGN1cnJlbnRseSBzdXBwb3J0aW5nIENTViBvciBUWFQpXHJcbiAgICAgICAgaWYgKCFwYXJhbUZpbGUgJiYgYXV0b1NlYXJjaCkge1xyXG4gICAgICAgICAgICB2YXIgZmlsZU5hbWVOb0V4dCA9IHNlbGYuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KG1haW5GaWxlKTtcclxuICAgICAgICAgICAgdmFyIGNzdlBhcmFtRmlsZSA9IHBhdGguam9pbihwYXRoLmRpcm5hbWUobWFpbkZpbGUpLCBmaWxlTmFtZU5vRXh0ICsgJy5jc3YnKTtcclxuICAgICAgICAgICAgdmFyIHR4dFBhcmFtRmlsZSA9IHBhdGguam9pbihwYXRoLmRpcm5hbWUobWFpbkZpbGUpLCBmaWxlTmFtZU5vRXh0ICsgJy50eHQnKTtcclxuICAgICAgICAgICAgdmFyIHhsc1BhcmFtRmlsZSA9IHBhdGguam9pbihwYXRoLmRpcm5hbWUobWFpbkZpbGUpLCBmaWxlTmFtZU5vRXh0ICsgJy54bHMnKTtcclxuICAgICAgICAgICAgdmFyIHhsc3hQYXJhbUZpbGUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG1haW5GaWxlKSwgZmlsZU5hbWVOb0V4dCArICcueGxzeCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoY3N2UGFyYW1GaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1GaWxlID0gY3N2UGFyYW1GaWxlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZzLmV4aXN0c1N5bmModHh0UGFyYW1GaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1GaWxlID0gdHh0UGFyYW1GaWxlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZzLmV4aXN0c1N5bmMoeGxzUGFyYW1GaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1GaWxlID0geGxzUGFyYW1GaWxlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZzLmV4aXN0c1N5bmMoeGxzeFBhcmFtRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtRmlsZSA9IHhsc3hQYXJhbUZpbGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcmFtRmlsZSkge1xyXG4gICAgICAgICAgICBwYXJhbU1hbmFnZXIgPSBuZXcgcmVxdWlyZSgnLi9wYXJhbS1tYW5hZ2VyJykocGFyYW1GaWxlLCBwYXJhbU1vZGUgfHwgJ3NlcScpO1xyXG4gICAgICAgICAgICBhd2FpdCBwYXJhbU1hbmFnZXIuaW5pdCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyYW1NYW5hZ2VyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgcmVzb2x2ZVBhdGg6IGZ1bmN0aW9uKHBhdGhUb1Jlc29sdmUsIGJhc2VGb2xkZXIpIHtcclxuICAgICAgICBpZiAocGF0aC5pc0Fic29sdXRlKHBhdGhUb1Jlc29sdmUpKVxyXG4gICAgICAgICAgICByZXR1cm4gcGF0aFRvUmVzb2x2ZTtcclxuICAgICAgICByZXR1cm4gcGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIHBhdGhUb1Jlc29sdmUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlU2VyaWFsaXphYmxlOiBmdW5jdGlvbihlcnIpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGVyciA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRlc3Ryb3lDaXJjdWxhcihlcnIsIFtdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGVycjtcclxuXHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2pvbnBhY2tlci9kZXN0cm95LWNpcmN1bGFyXHJcbiAgICAgICAgZnVuY3Rpb24gZGVzdHJveUNpcmN1bGFyKGZyb20sIHNlZW4pIHtcclxuICAgICAgICAgICAgdmFyIHRvID0gQXJyYXkuaXNBcnJheShmcm9tKSA/IFtdIDoge307XHJcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMoZnJvbSkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcclxuICAgICAgICAgICAgICAgIGlmICghZnJvbVtrZXldIHx8ICh0eXBlb2YgZnJvbVtrZXldICE9ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGZyb21ba2V5XSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9ba2V5XSA9IGZyb21ba2V5XTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Vlbi5pbmRleE9mKGZyb21ba2V5XSkgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0b1trZXldID0gZGVzdHJveUNpcmN1bGFyKGZyb21ba2V5XSwgc2Vlbi5zbGljZSgwKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgdG9ba2V5XSA9ICdbQ2lyY3VsYXJdJztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0bztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGdldE1ldGhvZFNpZ25hdHVyZTogZnVuY3Rpb24obW9kdWxlTmFtZSwgbWV0aG9kTmFtZSwgbWV0aG9kQXJncykge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGVOYW1lICsgJy4nICsgbWV0aG9kTmFtZSArICcoJyArIHNlbGYuc3RyaW5naWZ5KG1ldGhvZEFyZ3MsIDApICsgJyknO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKlxyXG4gICAgICogVXNlZCB0byBzZXJpYWxpemUgb3h5Z2VuIGNvbW1hbmQgcGFyYW1ldGVycy4gUHJvZHVjZXMgYSBub24tY29tcGxpYW50IEpTT04gc2VyaWFsaXphdGlvbi5cclxuICAgICAqL1xyXG4gICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAoYXJncywgaW5kZW50YXRpb24gPSAwKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIHN0cmluZ3MgYXMgaXMgKG90aGVyd2lzZSBpZiB3ZSBzZXJpYWxpemUgc3RyaW5nIGl0IHdpbGwgZ2V0IHdyYXBwZWQgaW4gZG91YmxlIHF1b3RlcylcclxuICAgICAgICBpZiAodHlwZW9mIGFyZ3MgPT09ICdzdHJpbmcnIHx8IGFyZ3MgaW5zdGFuY2VvZiBTdHJpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XHJcbiAgICAgICAgfSBlbHNlIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnIHx8IGFyZ3NbMF0gaW5zdGFuY2VvZiBTdHJpbmcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhcmdzWzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHN0cjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBzdHIgPSBKU09OLnN0cmluZ2lmeShhcmdzLCAoa2V5LCB2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHsgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0dvb2dsZUNocm9tZUxhYnMvanNiaS9pc3N1ZXMvMzBcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZiB1bmRlZmluZWQgaXMgaW5zaWRlIGFuIGFycmF5IHRoZW4gaXQgd2lsbCBiZSBzZXJpYWxpemVkIGFzIG51bGwuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaG93ZXZlciBpZiB3ZSBqdXN0IHJldHVybiAndW5kZWZpbmVkJyBoZXJlIGFzIHN0cmluZywgaXQgd2lsbCBiZSBlbmNsb3NlZCBpbiBxdW90ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc28gcmV0dXJuIG1hZ2ljIHN0cmluZyBpbnN0ZWFkIGFuZCB0cmltIHRoZSBxdW90ZXMgbGF0ZXIgb25cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ19fVU5ERUZJTkVEJztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnLycgKyB2YWx1ZS5zb3VyY2UgKyAnLycgKyB2YWx1ZS5mbGFncztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICAgICAgfSwgaW5kZW50YXRpb24pO1xyXG4gICAgICAgICAgICAvLyB0cmltIHRoZSBlbmNsb3NpbmcgYXJyYXkgYW5kIGFueSB3aGl0ZXNwYWNlXHJcbiAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9eXFxbezF9XFxzKnxcXHMqXFxdezF9JC9nLCAnJyk7XHJcbiAgICAgICAgICAgIC8vIHJlbW92ZSBzcGFjZSBiZWZvcmUgbGFzdCB9IGFuZCBdLCB0byBtYWtlIGluZGVudGF0aW9uIG10Y2ggdGhlIG9wZW5pbmcgYnJhY2tldFxyXG4gICAgICAgICAgICBpZiAoc3RyLmVuZHNXaXRoKCcgIH0nKSkge1xyXG4gICAgICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygwLCBzdHIubGVuZ3RoIC0gMykgKyAnfSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHN0ci5lbmRzV2l0aCgnICBdJykpIHtcclxuICAgICAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgc3RyLmxlbmd0aCAtIDMpICsgJ10nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGNvbnZlcnQgbWFnaWMgJ3VuZGVmaW5lZCcgc3RyaW5nIHRvIHByb3BlciByZXByZXNlbnRhdGlvblxyXG4gICAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXCJfX1VOREVGSU5FRFwiL2csICd1bmRlZmluZWQnKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIHNlcmlhbGl6ZSBjb21tYW5kIGFyZ3VtZW50czogJywgZSk7XHJcbiAgICAgICAgICAgIC8vIGlmIEpTT04uc3RyaW5naWZ5IGZhaWxzLCB0aGVuIGZhbGxiYWNrIHRvIHV0aWwuaW5zcGVjdC5cclxuICAgICAgICAgICAgLy8gKHdlIGRvbid0IHVzZSB1dGlsLmluc3BlY3QgaW5pdGlhbHkgYmVjYXVzZSBpdCBkb2Vzbid0IHN1cHBvcnQgb3V0cHV0IGluZGVudGF0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm4gdXRpbC5pbnNwZWN0KGFyZ3NbMF0sIHsgZGVwdGg6IDMgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdHI7XHJcbiAgICB9LFxyXG5cclxuICAgIGlzSW5EZWJ1Z01vZGU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIC8vIHRoaXMgYWx3YXlzIHRydWU7XHJcbiAgICAgICAgLy8gY29uc3QgYXJndiA9IHByb2Nlc3MuZXhlY0FyZ3Yuam9pbigpO1xyXG5cclxuICAgICAgICAvLyBjb25zb2xlLmxvZygncHJvY2Vzcy5kZWJ1Z1BvcnQnLCBwcm9jZXNzLmRlYnVnUG9ydCk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJhcmd2LmluY2x1ZGVzKCdpbnNwZWN0JylcIiwgYXJndi5pbmNsdWRlcygnaW5zcGVjdCcpKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QtYnJrJylcIiwgYXJndi5pbmNsdWRlcygnaW5zcGVjdC1icmsnKSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJhcmd2LmluY2x1ZGVzKCdkZWJ1ZycpXCIsIGFyZ3YuaW5jbHVkZXMoJ2RlYnVnJykpO1xyXG5cclxuICAgICAgICAvLyByZXR1cm4gcHJvY2Vzcy5kZWJ1Z1BvcnQgfHwgYXJndi5pbmNsdWRlcygnaW5zcGVjdCcpIHx8IGFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QtYnJrJykgfHwgYXJndi5pbmNsdWRlcygnZGVidWcnKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICBsb2FkVGVzdEhvb2tzOiBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgICAgICAgbGV0IGhvb2tzID0gRFVNTVlfSE9PS1M7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy50YXJnZXQgJiYgb3B0aW9ucy50YXJnZXQubmFtZSA9PT0gJ294eWdlbi5jb25mJykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaG9va3MgPSByZXF1aXJlKG9wdGlvbnMudGFyZ2V0LnBhdGgpLmhvb2tzIHx8IERVTU1ZX0hPT0tTO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Vycm9yIGxvYWRpbmcgdXNlciBob29rczonLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaG9va3M7XHJcbiAgICB9LFxyXG5cclxuICAgIGV4ZWN1dGVUZXN0SG9vazogYXN5bmMgZnVuY3Rpb24oaG9va3MsIG1ldGhvZCwgYXJncykge1xyXG4gICAgICAgIC8vIGlmIGhvb2sgaXMgbm90IGRlZmluZWQsIGp1c3QgcXVpZXRseSBpZ25vcmUgaXRcclxuICAgICAgICBpZiAoIWhvb2tzIHx8ICFtZXRob2QgfHwgIWhvb2tzW21ldGhvZF0gfHwgdHlwZW9mIGhvb2tzW21ldGhvZF0gIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjbGVhciB0cmFuc2FjdGlvbiBuYW1lIHdoZW4gZXhlY3V0aW5nIGhvb2tzIChleGNlcHQgY29tbWFuZCBzdGFydC9lbmQgaG9va3MpXHJcbiAgICAgICAgLy8gb3RoZXJ3aXNlIHRlc3Qgc3RlcHMgd2lsbCBiZSBtZXNzZWQgdXAuIGUuZy4gdHJhbnNhY3Rpb24gZnJvbSBjYXNlIDEgd2lsbCBiZSBzaG93biBpbiBjYXNlIDIsIGV0Yy5cclxuICAgICAgICBpZiAoWydiZWZvcmVUZXN0JywgJ2JlZm9yZVN1aXRlJywgJ2JlZm9yZUNhc2UnLCAnYWZ0ZXJDYXNlJywgJ2FmdGVyU3VpdGUnLCAnYWZ0ZXJUZXN0J10uaW5jbHVkZXMobWV0aG9kKSkge1xyXG4gICAgICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGdsb2JhbC5jaGFpQW5kTW9ja2VyeUxvYWRlZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGFpID0gcmVxdWlyZSgnY2hhaScpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9ja2VyeSA9IHJlcXVpcmUoJ21vY2tlcnknKTtcclxuICAgICAgICAgICAgICAgIG1vY2tlcnkuZW5hYmxlKHtcclxuICAgICAgICAgICAgICAgICAgICB1c2VDbGVhbkNhY2hlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHdhcm5PblJlcGxhY2U6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHdhcm5PblVucmVnaXN0ZXJlZDogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgbW9ja2VyeS5yZWdpc3Rlck1vY2soJ2NoYWknLCBjaGFpKTtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5jaGFpQW5kTW9ja2VyeUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGF3YWl0IGhvb2tzW21ldGhvZF0uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgSG9vayBcIiR7bWV0aG9kfVwiIGhhcyB0aHJvd24gYW4gZXJyb3I6ICR7ZS50b1N0cmluZygpfWApO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0T3hNb2R1bGVzRGlyOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ294X21vZHVsZXMnKTtcclxuICAgIH0sXHJcblxyXG4gICAgaG9va0xvZ3MobG9nZ2VyKSB7XHJcbiAgICAgICAgY29uc3Qgb3JpZ2xvZyA9IGNvbnNvbGUubG9nO1xyXG4gICAgICAgIGNvbnN0IG9yaWdEZWJ1ZyA9IGNvbnNvbGUuZGVidWc7XHJcbiAgICAgICAgY29uc3Qgb3JpZ0luZm8gPSBjb25zb2xlLmluZm87XHJcbiAgICAgICAgY29uc3Qgb3JpZ1dhcm4gPSBjb25zb2xlLndhcm47XHJcbiAgICAgICAgY29uc3Qgb3JpZ0Vycm9yID0gY29uc29sZS5lcnJvcjtcclxuXHJcbiAgICAgICAgY29uc3QgcHJvY2Vzc0FyZ3MgPSAoYXJndW1lbnRBcnJheSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gW107XHJcblxyXG4gICAgICAgICAgICBpZiAoYXJndW1lbnRBcnJheSAmJiBhcmd1bWVudEFycmF5Lm1hcCkge1xyXG4gICAgICAgICAgICAgICAgYXJndW1lbnRBcnJheS5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGAke2l0ZW19YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYCR7dXRpbC5pbnNwZWN0KGl0ZW0pfWApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJyAnKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdsb2cuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnNvbGUuZGVidWcgPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnRGVidWcuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1Zyhwcm9jZXNzQXJncyhhcmd1bWVudEFycmF5KSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zb2xlLmluZm8gPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnSW5mby5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmluZm8ocHJvY2Vzc0FyZ3MoYXJndW1lbnRBcnJheSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc29sZS53YXJuID0gZnVuY3Rpb24gKC4uLmFyZ3VtZW50QXJyYXkpIHtcclxuICAgICAgICAgICAgb3JpZ1dhcm4uYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IgPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnRXJyb3IuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihwcm9jZXNzQXJncyhhcmd1bWVudEFycmF5KSk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgbWFrZVRyYW5zYWN0aW9uRmFpbGVkSWZTdGVwRmFpbGVkKHN0ZXBzKSB7XHJcbiAgICAgICAgaWYgKHN0ZXBzICYmIHN0ZXBzLmxlbmd0aCAmJiBzdGVwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdTdGVwcyA9IFsuLi5zdGVwc107XHJcbiAgICAgICAgICAgIHN0ZXBzLm1hcCgoaXRlbSwgaWR4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5uYW1lICYmIGl0ZW0ubmFtZS5pbmNsdWRlcyAmJiBpdGVtLm5hbWUuaW5jbHVkZXMoJy50cmFuc2FjdGlvbignKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4ID0gaWR4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbGFzdEZpbmRlZFRyYW5zYWN0aW9uSW5kZXggPT09ICdudW1iZXInICYmIGl0ZW0uc3RhdHVzICYmIGl0ZW0uc3RhdHVzID09PSAnZmFpbGVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ZXBzW2xhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4XVsnc3RhdHVzJ10gPSAnZmFpbGVkJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbmV3U3RlcHM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3RlcHM7XHJcbiAgICB9LFxyXG5cclxuICAgIGRlY3J5cHQodGV4dCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBlbmNyeXB0ZWRUZXh0ID0gQnVmZmVyLmZyb20odGV4dCwgJ2hleCcpO1xyXG4gICAgICAgICAgICBsZXQgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihhbGdvcml0aG0sIGtleSwgaXYpO1xyXG4gICAgICAgICAgICBsZXQgZGVjcnlwdGVkID0gZGVjaXBoZXIudXBkYXRlKGVuY3J5cHRlZFRleHQpO1xyXG4gICAgICAgICAgICBkZWNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtkZWNyeXB0ZWQsIGRlY2lwaGVyLmZpbmFsKCldKTtcclxuICAgICAgICAgICAgY29uc3QgcmV0VmFsID0gZGVjcnlwdGVkLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGVjcnlwdFJlc3VsdChyZXRWYWwpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94eWdlbkVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5DUllQVE9fRVJST1IsIFwiVGhlIHByb3ZpZGVkIGFyZ3VtZW50IGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHZhbGlkIGNpcGhlciBwcm9kdWNlZCBieSAndXRpbHMuZW5jcnlwdCdcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBlbmNyeXB0KHRleHQpIHtcclxuICAgICAgICBsZXQgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGFsZ29yaXRobSwga2V5LCBpdik7XHJcbiAgICAgICAgbGV0IGVuY3J5cHRlZCA9IGNpcGhlci51cGRhdGUodGV4dCk7XHJcbiAgICAgICAgZW5jcnlwdGVkID0gQnVmZmVyLmNvbmNhdChbZW5jcnlwdGVkLCBjaXBoZXIuZmluYWwoKV0pO1xyXG4gICAgICAgIHJldHVybiBlbmNyeXB0ZWQudG9TdHJpbmcoJ2hleCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzbGVlcDogZnVuY3Rpb24odGltZW91dCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0KSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGRvd25sb2FkVmlkZW86IGFzeW5jIGZ1bmN0aW9uKGZpbGVOYW1lLCB2aWRlb1VybCwgb3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IGxvY2FsVmlkZW9GaWxlUGF0aCA9IGdldFZpZGVvQXR0YWNobWVudFBhdGgoZmlsZU5hbWUsIG9wdGlvbnMpO1xyXG4gICAgICAgIGxldCBlcnJvcjtcclxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8RE9XTkxPQURfUkVUUklFUzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGVycm9yID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhsb2NhbFZpZGVvRmlsZVBhdGgsIGF3YWl0IGRvd25sb2FkKHZpZGVvVXJsKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGF3YWl0IHNlbGYuc2xlZXAoRE9XTkxPQURfUkVUUllfV0FJVF9USU1FKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFlcnJvcikge1xyXG4gICAgICAgICAgICAvLyBkZWxldGUgdGhlIHZpZGVvIGZpbGUgZnJvbSB0aGUgc2VydmVyXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICB1cmw6IHZpZGVvVXJsLFxyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnREVMRVRFJyxcclxuICAgICAgICAgICAgICAgIGpzb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qob3B0aW9ucywgKGVyciwgcmVzLCBib2R5KSA9PiB7IHJlc29sdmUoZXJyID8gbnVsbCA6IGxvY2FsVmlkZW9GaWxlUGF0aCk7IH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5hYmxlIHRvIGRlbGV0ZSB2aWRlbyBmaWxlIGZyb20gdGhlIHJlbW90ZSBzZXJ2ZXI6ICcsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5hYmxlIHRvIGRvd25sb2FkIGFuZCBzYXZlIHZpZGVvIGF0dGFjaG1lbnQ6ICcsIGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbn07XHJcbiJdfQ==
|
|
449
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbC5qcyJdLCJuYW1lcyI6WyJwYXRoIiwicmVxdWlyZSIsImZzIiwibW9tZW50IiwiY3J5cHRvIiwidXRpbCIsInBhc3N3b3JkIiwiZW5jcnlwdGlvbktleSIsImtleSIsInNjcnlwdFN5bmMiLCJpdiIsIkJ1ZmZlciIsImFsbG9jIiwiYWxnb3JpdGhtIiwiZG93bmxvYWQiLCJyZXF1ZXN0IiwiRGVjcnlwdFJlc3VsdCIsInJlc3VsdCIsImRlY3J5cHRSZXN1bHQiLCJnZXREZWNyeXB0UmVzdWx0IiwiRFVNTVlfSE9PS1MiLCJiZWZvcmVUZXN0IiwiYmVmb3JlU3VpdGUiLCJiZWZvcmVDYXNlIiwiYmVmb3JlQ29tbWFuZCIsImFmdGVyQ29tbWFuZCIsImFmdGVyVGVzdCIsImFmdGVyU3VpdGUiLCJhZnRlckNhc2UiLCJDQl9BVFRBQ0hNRU5UU19ESVJfTkFNRSIsIkRPV05MT0FEX1JFVFJJRVMiLCJET1dOTE9BRF9SRVRSWV9XQUlUX1RJTUUiLCJnZXRWaWRlb0F0dGFjaG1lbnRQYXRoIiwiZmlsZU5hbWUiLCJvcHRpb25zIiwiY3dkIiwiZ2V0Q3dkIiwiYXR0YWNobWVudHNEaXJQYXRoIiwiam9pbiIsImV4aXN0c1N5bmMiLCJta2RpclN5bmMiLCJwcm9jZXNzIiwicm9vdFBhdGgiLCJ0cmltIiwic2VsZiIsIm1vZHVsZSIsImV4cG9ydHMiLCJnZW5lcmF0ZVVuaXF1ZUlkIiwicmFuZG9tQnl0ZXMiLCJ0b1N0cmluZyIsImdldFRpbWVTdGFtcCIsInV0YyIsInZhbHVlT2YiLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uIiwic3VpdGVEZWYiLCJ0ZXN0Q29uZmlnIiwiaXRlcmF0aW9uQ291bnQiLCJzdWl0ZSIsImlkIiwibmFtZSIsIml0ZXJhdGlvbnMiLCJzdWl0ZUZpbGVQYXRoIiwidGFyZ2V0IiwicGFyYW1NYW5hZ2VyIiwiZ2V0UGFyYW1ldGVyTWFuYWdlciIsInBhcmFtZXRlcnMiLCJnZXRNb2RlIiwicm93cyIsImNhcGFiaWxpdGllcyIsImVudmlyb25tZW50IiwicGFyYWxsZWwiLCJjb25jdXJyZW5jeSIsImNhc2VzIiwiZm9yRWFjaCIsImNhc2VEZWYiLCJ0YyIsImdldEZpbGVOYW1lV2l0aG91dEV4dCIsInJlc29sdmVQYXRoIiwiZm9ybWF0IiwicHVzaCIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpTRmlsZSIsImZpbGVQYXRoIiwicGFyYW1GaWxlIiwicGFyYW1Nb2RlIiwibm9QYXJhbUF1dG9TZWFyY2giLCJmaWxlTmFtZU5vRXh0IiwidGVzdGNhc2UiLCJyZW9wZW5TZXNzaW9uIiwiZGlybmFtZSIsImZpbGUiLCJtb2RlIiwibWFpbkZpbGVQYXRoIiwicGFyYW1PcHRzIiwiYXV0b1NlYXJjaCIsInBhcmFtRmlsZVBhdGgiLCJpc0Fic29sdXRlIiwibG9hZFBhcmFtZXRlck1hbmFnZXIiLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uRmlsZSIsImJhc2VuYW1lIiwiZmlsZUV4dCIsImV4dG5hbWUiLCJmaWxlUGF0aE5vRXh0Iiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJtYWluRmlsZSIsImNzdlBhcmFtRmlsZSIsInR4dFBhcmFtRmlsZSIsInhsc1BhcmFtRmlsZSIsInhsc3hQYXJhbUZpbGUiLCJpbml0IiwicGF0aFRvUmVzb2x2ZSIsImJhc2VGb2xkZXIiLCJyZXNvbHZlIiwibWFrZVNlcmlhbGl6YWJsZSIsImVyciIsImRlc3Ryb3lDaXJjdWxhciIsImZyb20iLCJzZWVuIiwidG8iLCJBcnJheSIsImlzQXJyYXkiLCJPYmplY3QiLCJrZXlzIiwiaW5kZXhPZiIsInNsaWNlIiwiZ2V0TWV0aG9kU2lnbmF0dXJlIiwibW9kdWxlTmFtZSIsIm1ldGhvZE5hbWUiLCJtZXRob2RBcmdzIiwic3RyaW5naWZ5IiwiYXJncyIsImluZGVudGF0aW9uIiwiU3RyaW5nIiwibGVuZ3RoIiwic3RyIiwiSlNPTiIsInZhbHVlIiwiRXJyb3IiLCJSZWdFeHAiLCJzb3VyY2UiLCJmbGFncyIsInJlcGxhY2UiLCJlbmRzV2l0aCIsImUiLCJjb25zb2xlIiwid2FybiIsImluc3BlY3QiLCJkZXB0aCIsImlzSW5EZWJ1Z01vZGUiLCJsb2FkVGVzdEhvb2tzIiwiaG9va3MiLCJleGVjdXRlVGVzdEhvb2siLCJtZXRob2QiLCJpbmNsdWRlcyIsImdsb2JhbCIsIl9sYXN0VHJhbnNhY3Rpb25OYW1lIiwiY2hhaUFuZE1vY2tlcnlMb2FkZWQiLCJjaGFpIiwibW9ja2VyeSIsImVuYWJsZSIsInVzZUNsZWFuQ2FjaGUiLCJ3YXJuT25SZXBsYWNlIiwid2Fybk9uVW5yZWdpc3RlcmVkIiwicmVnaXN0ZXJNb2NrIiwiYXBwbHkiLCJ1bmRlZmluZWQiLCJlcnJvciIsImdldE94TW9kdWxlc0RpciIsIl9fZGlybmFtZSIsImhvb2tMb2dzIiwibG9nZ2VyIiwib3JpZ2xvZyIsImxvZyIsIm9yaWdEZWJ1ZyIsImRlYnVnIiwib3JpZ0luZm8iLCJpbmZvIiwib3JpZ1dhcm4iLCJvcmlnRXJyb3IiLCJwcm9jZXNzQXJncyIsImFyZ3VtZW50QXJyYXkiLCJtYXAiLCJpdGVtIiwibWFrZVRyYW5zYWN0aW9uRmFpbGVkSWZTdGVwRmFpbGVkIiwic3RlcHMiLCJsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCIsIm5ld1N0ZXBzIiwiaWR4Iiwic3RhdHVzIiwiZGVjcnlwdCIsInRleHQiLCJlbmNyeXB0ZWRUZXh0IiwiZGVjaXBoZXIiLCJjcmVhdGVEZWNpcGhlcml2IiwiZGVjcnlwdGVkIiwidXBkYXRlIiwiY29uY2F0IiwiZmluYWwiLCJyZXRWYWwiLCJPeHlnZW5FcnJvciIsImVycm9ySGVscGVyIiwiZXJyb3JDb2RlIiwiQ1JZUFRPX0VSUk9SIiwiZW5jcnlwdCIsImNpcGhlciIsImNyZWF0ZUNpcGhlcml2IiwiZW5jcnlwdGVkIiwic2xlZXAiLCJ0aW1lb3V0IiwiUHJvbWlzZSIsInNldFRpbWVvdXQiLCJkb3dubG9hZFZpZGVvIiwidmlkZW9VcmwiLCJsb2NhbFZpZGVvRmlsZVBhdGgiLCJpIiwid3JpdGVGaWxlU3luYyIsInVybCIsImpz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Y2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgbW9kdWxlIGZvciBpbnRlcm5hbCBPeHlnZW4gdXNlXHJcbiAqL1xyXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xyXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XHJcbmNvbnN0IG1vbWVudCA9IHJlcXVpcmUoJ21vbWVudCcpO1xyXG5jb25zdCBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcclxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcclxuY29uc3QgcGFzc3dvcmQgPSByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS5lbmNyeXB0aW9uS2V5O1xyXG5jb25zdCBrZXkgPSBjcnlwdG8uc2NyeXB0U3luYyhwYXNzd29yZCwgJ0dmRycsIDI0KTtcclxuY29uc3QgaXYgPSBCdWZmZXIuYWxsb2MoMTYsIDApO1xyXG5jb25zdCBhbGdvcml0aG0gPSAnYWVzLTE5Mi1jYmMnO1xyXG5jb25zdCBkb3dubG9hZCA9IHJlcXVpcmUoJ2Rvd25sb2FkJyk7XHJcbmNvbnN0IHJlcXVlc3QgPSByZXF1aXJlKCdyZXF1ZXN0Jyk7XHJcblxyXG5pbXBvcnQgT3h5Z2VuRXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5cclxuZnVuY3Rpb24gRGVjcnlwdFJlc3VsdChyZXN1bHQpIHtcclxuICAgIGNvbnN0IGRlY3J5cHRSZXN1bHQgPSByZXN1bHQ7XHJcblxyXG4gICAgdGhpcy5nZXREZWNyeXB0UmVzdWx0ID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBkZWNyeXB0UmVzdWx0O1xyXG4gICAgfTtcclxufVxyXG5cclxuY29uc3QgRFVNTVlfSE9PS1MgPSB7XHJcbiAgICBiZWZvcmVUZXN0OiAoKSA9PiB7fSxcclxuICAgIGJlZm9yZVN1aXRlOiAoKSA9PiB7fSxcclxuICAgIGJlZm9yZUNhc2U6ICgpID0+IHt9LFxyXG4gICAgYmVmb3JlQ29tbWFuZDogKCkgPT4ge30sXHJcbiAgICBhZnRlckNvbW1hbmQ6ICgpID0+IHt9LFxyXG4gICAgYWZ0ZXJUZXN0OiAoKSA9PiB7fSxcclxuICAgIGFmdGVyU3VpdGU6ICgpID0+IHt9LFxyXG4gICAgYWZ0ZXJDYXNlOiAoKSA9PiB7fSxcclxufTtcclxuXHJcbmNvbnN0IENCX0FUVEFDSE1FTlRTX0RJUl9OQU1FID0gJy5jYi1hdHRhY2htZW50cyc7XHJcbmNvbnN0IERPV05MT0FEX1JFVFJJRVMgPSA0MDtcclxuY29uc3QgRE9XTkxPQURfUkVUUllfV0FJVF9USU1FID0gMjUwMDtcclxuXHJcbmZ1bmN0aW9uIGdldFZpZGVvQXR0YWNobWVudFBhdGgoZmlsZU5hbWUsIG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IGN3ZCA9IGdldEN3ZChvcHRpb25zKTtcclxuICAgIGNvbnN0IGF0dGFjaG1lbnRzRGlyUGF0aCA9IHBhdGguam9pbihjd2QsIENCX0FUVEFDSE1FTlRTX0RJUl9OQU1FKTtcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhhdHRhY2htZW50c0RpclBhdGgpKSB7XHJcbiAgICAgICAgZnMubWtkaXJTeW5jKGF0dGFjaG1lbnRzRGlyUGF0aCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGF0aC5qb2luKGF0dGFjaG1lbnRzRGlyUGF0aCwgZmlsZU5hbWUpO1xyXG59XHJcblxyXG5jb25zdCBnZXRDd2QgPSAob3B0aW9ucykgPT4ge1xyXG4gICAgbGV0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XHJcblxyXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5jd2QpIHtcclxuICAgICAgICBjd2QgPSBvcHRpb25zLmN3ZDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yb290UGF0aCkge1xyXG4gICAgICAgIGN3ZCA9IG9wdGlvbnMucm9vdFBhdGg7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGN3ZC50cmltKCk7XHJcbn07XHJcblxyXG52YXIgc2VsZiA9IG1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIGdlbmVyYXRlVW5pcXVlSWQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tQnl0ZXMoNCkudG9TdHJpbmcoJ2hleCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRUaW1lU3RhbXA6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBtb21lbnQudXRjKCkudmFsdWVPZigpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uOiBhc3luYyBmdW5jdGlvbihzdWl0ZURlZiwgdGVzdENvbmZpZywgaXRlcmF0aW9uQ291bnQgPSAxKSB7XHJcbiAgICAgICAgdmFyIHN1aXRlID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RzdWl0ZS5qcycpKCk7XHJcbiAgICAgICAgc3VpdGUuaWQgPSBudWxsO1xyXG4gICAgICAgIHN1aXRlLm5hbWUgPSBzdWl0ZURlZi5uYW1lO1xyXG4gICAgICAgIHN1aXRlLmlkID0gc3VpdGVEZWYuaWQ7XHJcbiAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBzdWl0ZURlZi5pdGVyYXRpb25zIHx8IHN1aXRlRGVmLml0ZXJhdGlvbkNvdW50IHx8IHRlc3RDb25maWcuaXRlcmF0aW9ucyB8fCBpdGVyYXRpb25Db3VudDtcclxuICAgICAgICBjb25zdCBzdWl0ZUZpbGVQYXRoID0gc3VpdGVEZWYucGF0aCB8fCBwYXRoLmpvaW4odGVzdENvbmZpZy50YXJnZXQuY3dkLCAnc3VpdGVzJywgYCR7c3VpdGVEZWYubmFtZX0uanNvbmApO1xyXG4gICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlciA9IGF3YWl0IHNlbGYuZ2V0UGFyYW1ldGVyTWFuYWdlcihzdWl0ZUZpbGVQYXRoLCB0ZXN0Q29uZmlnLnBhcmFtZXRlcnMsIHRlc3RDb25maWcudGFyZ2V0LmN3ZCk7XHJcbiAgICAgICAgaWYgKHN1aXRlLnBhcmFtTWFuYWdlciAmJiBzdWl0ZS5wYXJhbU1hbmFnZXIuZ2V0TW9kZSgpID09ICdhbGwnKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gc3VpdGUucGFyYW1NYW5hZ2VyLnJvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1aXRlLmNhcGFiaWxpdGllcyA9IHN1aXRlRGVmLmNhcGFiaWxpdGllcyB8fCB0ZXN0Q29uZmlnLmNhcGFiaWxpdGllcyB8fCB7fTtcclxuICAgICAgICBzdWl0ZS5lbnZpcm9ubWVudCA9IHRlc3RDb25maWcuZW52aXJvbm1lbnQgfHwgbnVsbDtcclxuICAgICAgICBzdWl0ZS5vcHRpb25zID0gdGVzdENvbmZpZy5vcHRpb25zIHx8IG51bGw7XHJcbiAgICAgICAgc3VpdGUucGFyYWxsZWwgPSBzdWl0ZURlZi5wYXJhbGxlbCB8fCB0ZXN0Q29uZmlnLnBhcmFsbGVsIHx8IHRlc3RDb25maWcuY29uY3VycmVuY3kgfHwgMTtcclxuICAgICAgICAvLyBpbml0aWFsaXplIGVhY2ggdGVzdCBjYXNlXHJcbiAgICAgICAgc3VpdGVEZWYuY2FzZXMuZm9yRWFjaChjYXNlRGVmID0+IHtcclxuICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSB0ZXN0Y2FzZSBvYmplY3RcclxuICAgICAgICAgICAgY29uc3QgdGMgPSBuZXcgcmVxdWlyZSgnLi4vbW9kZWwvdGVzdGNhc2UuanMnKSgpO1xyXG4gICAgICAgICAgICBpZiAoY2FzZURlZi5uYW1lKVxyXG4gICAgICAgICAgICAgICAgdGMubmFtZSA9IGNhc2VEZWYubmFtZTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGMubmFtZSA9IHNlbGYuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KGNhc2VEZWYucGF0aCk7XHJcbiAgICAgICAgICAgIHRjLnBhdGggPSBzZWxmLnJlc29sdmVQYXRoKGNhc2VEZWYucGF0aCwgdGVzdENvbmZpZy50YXJnZXQuY3dkKTtcclxuICAgICAgICAgICAgdGMuZm9ybWF0ID0gJ2pzJztcclxuICAgICAgICAgICAgdGMuaXRlcmF0aW9uQ291bnQgPSBjYXNlRGVmLml0ZXJhdGlvbnMgfHwgY2FzZURlZi5pdGVyYXRpb25Db3VudCB8fCAxO1xyXG4gICAgICAgICAgICBzdWl0ZS5jYXNlcy5wdXNoKHRjKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gc3VpdGU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdlbmVyYXRlVGVzdFN1aXRlRnJvbUpTRmlsZTogYXN5bmMgZnVuY3Rpb24gKGZpbGVQYXRoLCBwYXJhbUZpbGUgPSBudWxsLCBwYXJhbU1vZGUgPSBudWxsLCBub1BhcmFtQXV0b1NlYXJjaCA9IHRydWUsIGl0ZXJhdGlvbkNvdW50ID0gMSkge1xyXG4gICAgICAgIHZhciBmaWxlTmFtZU5vRXh0ID0gc2VsZi5nZXRGaWxlTmFtZVdpdGhvdXRFeHQoZmlsZVBhdGgpO1xyXG5cclxuICAgICAgICB2YXIgdGVzdGNhc2UgPSBuZXcgcmVxdWlyZSgnLi4vbW9kZWwvdGVzdGNhc2UuanMnKSgpO1xyXG4gICAgICAgIHRlc3RjYXNlLm5hbWUgPSBmaWxlTmFtZU5vRXh0O1xyXG4gICAgICAgIHRlc3RjYXNlLnBhdGggPSBmaWxlUGF0aDtcclxuICAgICAgICB0ZXN0Y2FzZS5mb3JtYXQgPSAnanMnO1xyXG4gICAgICAgIHRlc3RjYXNlLml0ZXJhdGlvbkNvdW50ID0gMTtcclxuXHJcbiAgICAgICAgdmFyIHN1aXRlID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RzdWl0ZS5qcycpKCk7XHJcbiAgICAgICAgc3VpdGUubmFtZSA9IHRlc3RjYXNlLm5hbWU7XHJcbiAgICAgICAgc3VpdGUuaWQgPSB0ZXN0Y2FzZS5pZDtcclxuICAgICAgICBzdWl0ZS5pdGVyYXRpb25Db3VudCA9IGl0ZXJhdGlvbkNvdW50O1xyXG4gICAgICAgIHN1aXRlLmNhc2VzLnB1c2godGVzdGNhc2UpO1xyXG4gICAgICAgIGlmICh0ZXN0Y2FzZS5yZW9wZW5TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLnJlb3BlblNlc3Npb24gPSB0ZXN0Y2FzZS5yZW9wZW5TZXNzaW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjd2QgPSBwYXRoLmRpcm5hbWUoZmlsZVBhdGgpO1xyXG4gICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlciA9IGF3YWl0IHNlbGYuZ2V0UGFyYW1ldGVyTWFuYWdlcihmaWxlUGF0aCwgeyBmaWxlOiBwYXJhbUZpbGUsIG1vZGU6IHBhcmFtTW9kZSB9LCBjd2QpO1xyXG4gICAgICAgIC8vIGlmIHBhcmFtZXRlciByZWFkaW5nIG1vZGUgaXMgJ2FsbCcgdGhlbiBjaGFuZ2UgaXRlcmF0aW9uQ291bnQgdG8gdGhlIGFtb3VudCBvZiByb3dzIGluIHRoZSBwYXJhbSBmaWxlXHJcbiAgICAgICAgaWYgKHN1aXRlLnBhcmFtTWFuYWdlciAmJiBwYXJhbU1vZGUgPT0gJ2FsbCcpIHtcclxuICAgICAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBzdWl0ZS5wYXJhbU1hbmFnZXIucm93cztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN1aXRlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRQYXJhbWV0ZXJNYW5hZ2VyOiBhc3luYyBmdW5jdGlvbihtYWluRmlsZVBhdGgsIHBhcmFtT3B0cyA9IG51bGwsIGN3ZCA9IG51bGwsIGF1dG9TZWFyY2ggPSB0cnVlKSB7XHJcbiAgICAgICAgbGV0IHBhcmFtRmlsZVBhdGggPSBwYXJhbU9wdHMgJiYgcGFyYW1PcHRzLmZpbGUgPyBwYXJhbU9wdHMuZmlsZSA6IG51bGw7XHJcbiAgICAgICAgbGV0IHBhcmFtTW9kZSA9IHBhcmFtT3B0cyAmJiBwYXJhbU9wdHMubW9kZSA/IHBhcmFtT3B0cy5tb2RlIDogJ3NlcSc7XHJcblxyXG4gICAgICAgIGlmIChwYXJhbUZpbGVQYXRoICYmIGN3ZCAmJiAhcGF0aC5pc0Fic29sdXRlKHBhcmFtRmlsZVBhdGgpKSB7XHJcbiAgICAgICAgICAgIHBhcmFtRmlsZVBhdGggPSBwYXRoLmpvaW4oY3dkLCBwYXJhbUZpbGVQYXRoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBhd2FpdCBzZWxmLmxvYWRQYXJhbWV0ZXJNYW5hZ2VyKG1haW5GaWxlUGF0aCwgcGFyYW1GaWxlUGF0aCwgcGFyYW1Nb2RlLCBhdXRvU2VhcmNoKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbkZpbGU6IGFzeW5jIGZ1bmN0aW9uIChmaWxlUGF0aCwgcGFyYW1GaWxlLCBwYXJhbU1vZGUgPSBudWxsLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICBjb25zdCB0ZXN0Q29uZmlnID0ge1xyXG4gICAgICAgICAgICAuLi5vcHRpb25zIHx8IHt9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHBhcmFtRmlsZSkge1xyXG4gICAgICAgICAgICB0ZXN0Q29uZmlnLnBhcmFtZXRlcnMgPSB7XHJcbiAgICAgICAgICAgICAgICBmaWxlOiBwYXJhbUZpbGUsXHJcbiAgICAgICAgICAgICAgICBtb2RlOiBwYXJhbU1vZGUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhd2FpdCBzZWxmLmdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb24ocmVxdWlyZShmaWxlUGF0aCksIHRlc3RDb25maWcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRGaWxlTmFtZVdpdGhvdXRFeHQ6IGZ1bmN0aW9uIChmaWxlUGF0aCkge1xyXG4gICAgICAgIHZhciBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZVBhdGgpO1xyXG4gICAgICAgIHZhciBmaWxlRXh0ID0gcGF0aC5leHRuYW1lKGZpbGVQYXRoKTtcclxuICAgICAgICB2YXIgZmlsZVBhdGhOb0V4dCA9IGZpbGVOYW1lLnN1YnN0cmluZygwLCBmaWxlTmFtZS5sYXN0SW5kZXhPZihmaWxlRXh0KSk7XHJcbiAgICAgICAgcmV0dXJuIGZpbGVQYXRoTm9FeHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIGxvYWRQYXJhbWV0ZXJNYW5hZ2VyOiBhc3luYyBmdW5jdGlvbihtYWluRmlsZSwgcGFyYW1GaWxlLCBwYXJhbU1vZGUsIGF1dG9TZWFyY2ggPSBmYWxzZSkge1xyXG4gICAgICAgIHZhciBwYXJhbU1hbmFnZXIgPSBudWxsO1xyXG4gICAgICAgIC8vIGlmIHBhcmFtIGZpbGUgaXMgbm90IHNwZWNpZmllZCwgdGhlbiBjaGVjayBpZiBKUyBmaWxlIGlzIGNvbWluZyBpbiBwYWlyIHdpdGggYSBwYXJhbWV0ZXIgZmlsZSBcclxuICAgICAgICAvLyAoY3VycmVudGx5IHN1cHBvcnRpbmcgQ1NWIG9yIFRYVClcclxuICAgICAgICBpZiAoIXBhcmFtRmlsZSAmJiBhdXRvU2VhcmNoKSB7XHJcbiAgICAgICAgICAgIHZhciBmaWxlTmFtZU5vRXh0ID0gc2VsZi5nZXRGaWxlTmFtZVdpdGhvdXRFeHQobWFpbkZpbGUpO1xyXG4gICAgICAgICAgICB2YXIgY3N2UGFyYW1GaWxlID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShtYWluRmlsZSksIGZpbGVOYW1lTm9FeHQgKyAnLmNzdicpO1xyXG4gICAgICAgICAgICB2YXIgdHh0UGFyYW1GaWxlID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShtYWluRmlsZSksIGZpbGVOYW1lTm9FeHQgKyAnLnR4dCcpO1xyXG4gICAgICAgICAgICB2YXIgeGxzUGFyYW1GaWxlID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShtYWluRmlsZSksIGZpbGVOYW1lTm9FeHQgKyAnLnhscycpO1xyXG4gICAgICAgICAgICB2YXIgeGxzeFBhcmFtRmlsZSA9IHBhdGguam9pbihwYXRoLmRpcm5hbWUobWFpbkZpbGUpLCBmaWxlTmFtZU5vRXh0ICsgJy54bHN4Jyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhjc3ZQYXJhbUZpbGUpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbUZpbGUgPSBjc3ZQYXJhbUZpbGU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZnMuZXhpc3RzU3luYyh0eHRQYXJhbUZpbGUpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbUZpbGUgPSB0eHRQYXJhbUZpbGU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZnMuZXhpc3RzU3luYyh4bHNQYXJhbUZpbGUpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbUZpbGUgPSB4bHNQYXJhbUZpbGU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZnMuZXhpc3RzU3luYyh4bHN4UGFyYW1GaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1GaWxlID0geGxzeFBhcmFtRmlsZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyYW1GaWxlKSB7XHJcbiAgICAgICAgICAgIHBhcmFtTWFuYWdlciA9IG5ldyByZXF1aXJlKCcuL3BhcmFtLW1hbmFnZXInKShwYXJhbUZpbGUsIHBhcmFtTW9kZSB8fCAnc2VxJyk7XHJcbiAgICAgICAgICAgIGF3YWl0IHBhcmFtTWFuYWdlci5pbml0KCk7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJhbU1hbmFnZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICByZXNvbHZlUGF0aDogZnVuY3Rpb24ocGF0aFRvUmVzb2x2ZSwgYmFzZUZvbGRlcikge1xyXG4gICAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUocGF0aFRvUmVzb2x2ZSkpXHJcbiAgICAgICAgICAgIHJldHVybiBwYXRoVG9SZXNvbHZlO1xyXG4gICAgICAgIHJldHVybiBwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgcGF0aFRvUmVzb2x2ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VTZXJpYWxpemFibGU6IGZ1bmN0aW9uKGVycikge1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXJyID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdHJveUNpcmN1bGFyKGVyciwgW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXJyO1xyXG5cclxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vam9ucGFja2VyL2Rlc3Ryb3ktY2lyY3VsYXJcclxuICAgICAgICBmdW5jdGlvbiBkZXN0cm95Q2lyY3VsYXIoZnJvbSwgc2Vlbikge1xyXG4gICAgICAgICAgICB2YXIgdG8gPSBBcnJheS5pc0FycmF5KGZyb20pID8gW10gOiB7fTtcclxuICAgICAgICAgICAgc2Vlbi5wdXNoKGZyb20pO1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhmcm9tKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmcm9tW2tleV0gfHwgKHR5cGVvZiBmcm9tW2tleV0gIT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoZnJvbVtrZXldKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0b1trZXldID0gZnJvbVtrZXldO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWVuLmluZGV4T2YoZnJvbVtrZXldKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvW2tleV0gPSBkZXN0cm95Q2lyY3VsYXIoZnJvbVtrZXldLCBzZWVuLnNsaWNlKDApKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB0b1trZXldID0gJ1tDaXJjdWxhcl0nO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHRvO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TWV0aG9kU2lnbmF0dXJlOiBmdW5jdGlvbihtb2R1bGVOYW1lLCBtZXRob2ROYW1lLCBtZXRob2RBcmdzKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZU5hbWUgKyAnLicgKyBtZXRob2ROYW1lICsgJygnICsgc2VsZi5zdHJpbmdpZnkobWV0aG9kQXJncywgMCkgKyAnKSc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBVc2VkIHRvIHNlcmlhbGl6ZSBveHlnZW4gY29tbWFuZCBwYXJhbWV0ZXJzLiBQcm9kdWNlcyBhIG5vbi1jb21wbGlhbnQgSlNPTiBzZXJpYWxpemF0aW9uLlxyXG4gICAgICovXHJcbiAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIChhcmdzLCBpbmRlbnRhdGlvbiA9IDApIHtcclxuICAgICAgICAvLyByZXR1cm4gc3RyaW5ncyBhcyBpcyAob3RoZXJ3aXNlIGlmIHdlIHNlcmlhbGl6ZSBzdHJpbmcgaXQgd2lsbCBnZXQgd3JhcHBlZCBpbiBkb3VibGUgcXVvdGVzKVxyXG4gICAgICAgIGlmICh0eXBlb2YgYXJncyA9PT0gJ3N0cmluZycgfHwgYXJncyBpbnN0YW5jZW9mIFN0cmluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJncztcclxuICAgICAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycgfHwgYXJnc1swXSBpbnN0YW5jZW9mIFN0cmluZykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFyZ3NbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RyO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHN0ciA9IEpTT04uc3RyaW5naWZ5KGFyZ3MsIChrZXksIHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50JykgeyAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vR29vZ2xlQ2hyb21lTGFicy9qc2JpL2lzc3Vlcy8zMFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHVuZGVmaW5lZCBpcyBpbnNpZGUgYW4gYXJyYXkgdGhlbiBpdCB3aWxsIGJlIHNlcmlhbGl6ZWQgYXMgbnVsbC5cclxuICAgICAgICAgICAgICAgICAgICAvLyBob3dldmVyIGlmIHdlIGp1c3QgcmV0dXJuICd1bmRlZmluZWQnIGhlcmUgYXMgc3RyaW5nLCBpdCB3aWxsIGJlIGVuY2xvc2VkIGluIHF1b3Rlcy5cclxuICAgICAgICAgICAgICAgICAgICAvLyBzbyByZXR1cm4gbWFnaWMgc3RyaW5nIGluc3RlYWQgYW5kIHRyaW0gdGhlIHF1b3RlcyBsYXRlciBvblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnX19VTkRFRklORUQnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcvJyArIHZhbHVlLnNvdXJjZSArICcvJyArIHZhbHVlLmZsYWdzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICB9LCBpbmRlbnRhdGlvbik7XHJcbiAgICAgICAgICAgIC8vIHRyaW0gdGhlIGVuY2xvc2luZyBhcnJheSBhbmQgYW55IHdoaXRlc3BhY2VcclxuICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL15cXFt7MX1cXHMqfFxccypcXF17MX0kL2csICcnKTtcclxuICAgICAgICAgICAgLy8gcmVtb3ZlIHNwYWNlIGJlZm9yZSBsYXN0IH0gYW5kIF0sIHRvIG1ha2UgaW5kZW50YXRpb24gbXRjaCB0aGUgb3BlbmluZyBicmFja2V0XHJcbiAgICAgICAgICAgIGlmIChzdHIuZW5kc1dpdGgoJyAgfScpKSB7XHJcbiAgICAgICAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIHN0ci5sZW5ndGggLSAzKSArICd9JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3RyLmVuZHNXaXRoKCcgIF0nKSkge1xyXG4gICAgICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygwLCBzdHIubGVuZ3RoIC0gMykgKyAnXSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gY29udmVydCBtYWdpYyAndW5kZWZpbmVkJyBzdHJpbmcgdG8gcHJvcGVyIHJlcHJlc2VudGF0aW9uXHJcbiAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cIl9fVU5ERUZJTkVEXCIvZywgJ3VuZGVmaW5lZCcpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gc2VyaWFsaXplIGNvbW1hbmQgYXJndW1lbnRzOiAnLCBlKTtcclxuICAgICAgICAgICAgLy8gaWYgSlNPTi5zdHJpbmdpZnkgZmFpbHMsIHRoZW4gZmFsbGJhY2sgdG8gdXRpbC5pbnNwZWN0LlxyXG4gICAgICAgICAgICAvLyAod2UgZG9uJ3QgdXNlIHV0aWwuaW5zcGVjdCBpbml0aWFseSBiZWNhdXNlIGl0IGRvZXNuJ3Qgc3VwcG9ydCBvdXRwdXQgaW5kZW50YXRpb24pXHJcbiAgICAgICAgICAgIHJldHVybiB1dGlsLmluc3BlY3QoYXJnc1swXSwgeyBkZXB0aDogMyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgIH0sXHJcblxyXG4gICAgaXNJbkRlYnVnTW9kZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gdGhpcyBhbHdheXMgdHJ1ZTtcclxuICAgICAgICAvLyBjb25zdCBhcmd2ID0gcHJvY2Vzcy5leGVjQXJndi5qb2luKCk7XHJcblxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdwcm9jZXNzLmRlYnVnUG9ydCcsIHByb2Nlc3MuZGVidWdQb3J0KTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QnKVwiLCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0JykpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYXJndi5pbmNsdWRlcygnaW5zcGVjdC1icmsnKVwiLCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0LWJyaycpKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFyZ3YuaW5jbHVkZXMoJ2RlYnVnJylcIiwgYXJndi5pbmNsdWRlcygnZGVidWcnKSk7XHJcblxyXG4gICAgICAgIC8vIHJldHVybiBwcm9jZXNzLmRlYnVnUG9ydCB8fCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0JykgfHwgYXJndi5pbmNsdWRlcygnaW5zcGVjdC1icmsnKSB8fCBhcmd2LmluY2x1ZGVzKCdkZWJ1ZycpO1xyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIGxvYWRUZXN0SG9va3M6IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICAgICAgICBsZXQgaG9va3MgPSBEVU1NWV9IT09LUztcclxuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnRhcmdldCAmJiBvcHRpb25zLnRhcmdldC5uYW1lID09PSAnb3h5Z2VuLmNvbmYnKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBob29rcyA9IHJlcXVpcmUob3B0aW9ucy50YXJnZXQucGF0aCkuaG9va3MgfHwgRFVNTVlfSE9PS1M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignRXJyb3IgbG9hZGluZyB1c2VyIGhvb2tzOicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBob29rcztcclxuICAgIH0sXHJcblxyXG4gICAgZXhlY3V0ZVRlc3RIb29rOiBhc3luYyBmdW5jdGlvbihob29rcywgbWV0aG9kLCBhcmdzKSB7XHJcbiAgICAgICAgLy8gaWYgaG9vayBpcyBub3QgZGVmaW5lZCwganVzdCBxdWlldGx5IGlnbm9yZSBpdFxyXG4gICAgICAgIGlmICghaG9va3MgfHwgIW1ldGhvZCB8fCAhaG9va3NbbWV0aG9kXSB8fCB0eXBlb2YgaG9va3NbbWV0aG9kXSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNsZWFyIHRyYW5zYWN0aW9uIG5hbWUgd2hlbiBleGVjdXRpbmcgaG9va3MgKGV4Y2VwdCBjb21tYW5kIHN0YXJ0L2VuZCBob29rcylcclxuICAgICAgICAvLyBvdGhlcndpc2UgdGVzdCBzdGVwcyB3aWxsIGJlIG1lc3NlZCB1cC4gZS5nLiB0cmFuc2FjdGlvbiBmcm9tIGNhc2UgMSB3aWxsIGJlIHNob3duIGluIGNhc2UgMiwgZXRjLlxyXG4gICAgICAgIGlmIChbJ2JlZm9yZVRlc3QnLCAnYmVmb3JlU3VpdGUnLCAnYmVmb3JlQ2FzZScsICdhZnRlckNhc2UnLCAnYWZ0ZXJTdWl0ZScsICdhZnRlclRlc3QnXS5pbmNsdWRlcyhtZXRob2QpKSB7XHJcbiAgICAgICAgICAgIGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZ2xvYmFsLmNoYWlBbmRNb2NrZXJ5TG9hZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoYWkgPSByZXF1aXJlKCdjaGFpJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2NrZXJ5ID0gcmVxdWlyZSgnbW9ja2VyeScpO1xyXG4gICAgICAgICAgICAgICAgbW9ja2VyeS5lbmFibGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIHVzZUNsZWFuQ2FjaGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgd2Fybk9uUmVwbGFjZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgd2Fybk9uVW5yZWdpc3RlcmVkOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBtb2NrZXJ5LnJlZ2lzdGVyTW9jaygnY2hhaScsIGNoYWkpO1xyXG4gICAgICAgICAgICAgICAgZ2xvYmFsLmNoYWlBbmRNb2NrZXJ5TG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYXdhaXQgaG9va3NbbWV0aG9kXS5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBIb29rIFwiJHttZXRob2R9XCIgaGFzIHRocm93biBhbiBlcnJvcjogJHtlLnRvU3RyaW5nKCl9YCk7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBnZXRPeE1vZHVsZXNEaXI6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnb3hfbW9kdWxlcycpO1xyXG4gICAgfSxcclxuXHJcbiAgICBob29rTG9ncyhsb2dnZXIpIHtcclxuICAgICAgICBjb25zdCBvcmlnbG9nID0gY29uc29sZS5sb2c7XHJcbiAgICAgICAgY29uc3Qgb3JpZ0RlYnVnID0gY29uc29sZS5kZWJ1ZztcclxuICAgICAgICBjb25zdCBvcmlnSW5mbyA9IGNvbnNvbGUuaW5mbztcclxuICAgICAgICBjb25zdCBvcmlnV2FybiA9IGNvbnNvbGUud2FybjtcclxuICAgICAgICBjb25zdCBvcmlnRXJyb3IgPSBjb25zb2xlLmVycm9yO1xyXG5cclxuICAgICAgICBjb25zdCBwcm9jZXNzQXJncyA9IChhcmd1bWVudEFycmF5KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChhcmd1bWVudEFycmF5ICYmIGFyZ3VtZW50QXJyYXkubWFwKSB7XHJcbiAgICAgICAgICAgICAgICBhcmd1bWVudEFycmF5Lm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYCR7aXRlbX1gKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChgJHt1dGlsLmluc3BlY3QoaXRlbSl9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQuam9pbignICcpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nID0gZnVuY3Rpb24gKC4uLmFyZ3VtZW50QXJyYXkpIHtcclxuICAgICAgICAgICAgb3JpZ2xvZy5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmluZm8ocHJvY2Vzc0FyZ3MoYXJndW1lbnRBcnJheSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc29sZS5kZWJ1ZyA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdEZWJ1Zy5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnNvbGUuaW5mbyA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdJbmZvLmFwcGx5KHRoaXMsIGFyZ3VtZW50QXJyYXkpO1xyXG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhwcm9jZXNzQXJncyhhcmd1bWVudEFycmF5KSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zb2xlLndhcm4gPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnV2Fybi5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLndhcm4ocHJvY2Vzc0FyZ3MoYXJndW1lbnRBcnJheSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc29sZS5lcnJvciA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdFcnJvci5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlVHJhbnNhY3Rpb25GYWlsZWRJZlN0ZXBGYWlsZWQoc3RlcHMpIHtcclxuICAgICAgICBpZiAoc3RlcHMgJiYgc3RlcHMubGVuZ3RoICYmIHN0ZXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbGV0IGxhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1N0ZXBzID0gWy4uLnN0ZXBzXTtcclxuICAgICAgICAgICAgc3RlcHMubWFwKChpdGVtLCBpZHgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLm5hbWUgJiYgaXRlbS5uYW1lLmluY2x1ZGVzICYmIGl0ZW0ubmFtZS5pbmNsdWRlcygnLnRyYW5zYWN0aW9uKCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdEZpbmRlZFRyYW5zYWN0aW9uSW5kZXggPSBpZHg7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCA9PT0gJ251bWJlcicgJiYgaXRlbS5zdGF0dXMgJiYgaXRlbS5zdGF0dXMgPT09ICdmYWlsZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RlcHNbbGFzdEZpbmRlZFRyYW5zYWN0aW9uSW5kZXhdWydzdGF0dXMnXSA9ICdmYWlsZWQnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBuZXdTdGVwcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdGVwcztcclxuICAgIH0sXHJcblxyXG4gICAgZGVjcnlwdCh0ZXh0KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IGVuY3J5cHRlZFRleHQgPSBCdWZmZXIuZnJvbSh0ZXh0LCAnaGV4Jyk7XHJcbiAgICAgICAgICAgIGxldCBkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KGFsZ29yaXRobSwga2V5LCBpdik7XHJcbiAgICAgICAgICAgIGxldCBkZWNyeXB0ZWQgPSBkZWNpcGhlci51cGRhdGUoZW5jcnlwdGVkVGV4dCk7XHJcbiAgICAgICAgICAgIGRlY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQoW2RlY3J5cHRlZCwgZGVjaXBoZXIuZmluYWwoKV0pO1xyXG4gICAgICAgICAgICBjb25zdCByZXRWYWwgPSBkZWNyeXB0ZWQudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEZWNyeXB0UmVzdWx0KHJldFZhbCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3h5Z2VuRXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkNSWVBUT19FUlJPUiwgXCJUaGUgcHJvdmlkZWQgYXJndW1lbnQgZG9lc24ndCBzZWVtIHRvIGJlIGEgdmFsaWQgY2lwaGVyIHByb2R1Y2VkIGJ5ICd1dGlscy5lbmNyeXB0J1wiKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGVuY3J5cHQodGV4dCkge1xyXG4gICAgICAgIGxldCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoYWxnb3JpdGhtLCBrZXksIGl2KTtcclxuICAgICAgICBsZXQgZW5jcnlwdGVkID0gY2lwaGVyLnVwZGF0ZSh0ZXh0KTtcclxuICAgICAgICBlbmNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtlbmNyeXB0ZWQsIGNpcGhlci5maW5hbCgpXSk7XHJcbiAgICAgICAgcmV0dXJuIGVuY3J5cHRlZC50b1N0cmluZygnaGV4Jyk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNsZWVwOiBmdW5jdGlvbih0aW1lb3V0KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQpKTtcclxuICAgIH0sXHJcblxyXG4gICAgZG93bmxvYWRWaWRlbzogYXN5bmMgZnVuY3Rpb24oZmlsZU5hbWUsIHZpZGVvVXJsLCBvcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgbG9jYWxWaWRlb0ZpbGVQYXRoID0gZ2V0VmlkZW9BdHRhY2htZW50UGF0aChmaWxlTmFtZSwgb3B0aW9ucyk7XHJcbiAgICAgICAgbGV0IGVycm9yO1xyXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxET1dOTE9BRF9SRVRSSUVTOyBpKyspIHtcclxuICAgICAgICAgICAgZXJyb3IgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGxvY2FsVmlkZW9GaWxlUGF0aCwgYXdhaXQgZG93bmxvYWQodmlkZW9VcmwpKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgc2VsZi5zbGVlcChET1dOTE9BRF9SRVRSWV9XQUlUX1RJTUUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWVycm9yKSB7XHJcbiAgICAgICAgICAgIC8vIGRlbGV0ZSB0aGUgdmlkZW8gZmlsZSBmcm9tIHRoZSBzZXJ2ZXJcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHVybDogdmlkZW9VcmwsXHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdERUxFVEUnLFxyXG4gICAgICAgICAgICAgICAganNvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdChvcHRpb25zLCAoZXJyLCByZXMsIGJvZHkpID0+IHsgcmVzb2x2ZShlcnIgPyBudWxsIDogbG9jYWxWaWRlb0ZpbGVQYXRoKTsgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gZGVsZXRlIHZpZGVvIGZpbGUgZnJvbSB0aGUgcmVtb3RlIHNlcnZlcjogJywgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gZG93bmxvYWQgYW5kIHNhdmUgdmlkZW8gYXR0YWNobWVudDogJywgZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxufTtcclxuIl19
|
|
@@ -4,6 +4,7 @@ require("source-map-support/register");
|
|
|
4
4
|
|
|
5
5
|
module.exports = function () {
|
|
6
6
|
return {
|
|
7
|
+
id: null,
|
|
7
8
|
name: null,
|
|
8
9
|
iterationNum: 1,
|
|
9
10
|
startTime: null,
|
|
@@ -13,4 +14,4 @@ module.exports = function () {
|
|
|
13
14
|
cases: []
|
|
14
15
|
};
|
|
15
16
|
};
|
|
16
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9zdWl0ZS1yZXN1bHQuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsImlkIiwibmFtZSIsIml0ZXJhdGlvbk51bSIsInN0YXJ0VGltZSIsImVuZFRpbWUiLCJkdXJhdGlvbiIsInN0YXR1cyIsImNhc2VzIl0sIm1hcHBpbmdzIjoiOzs7O0FBWUFBLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQixZQUFZO0FBQ3pCLFNBQU87QUFDSEMsSUFBQUEsRUFBRSxFQUFFLElBREQ7QUFFSEMsSUFBQUEsSUFBSSxFQUFFLElBRkg7QUFHSEMsSUFBQUEsWUFBWSxFQUFFLENBSFg7QUFJSEMsSUFBQUEsU0FBUyxFQUFFLElBSlI7QUFLSEMsSUFBQUEsT0FBTyxFQUFFLElBTE47QUFNSEMsSUFBQUEsUUFBUSxFQUFFLElBTlA7QUFPSEMsSUFBQUEsTUFBTSxFQUFFLElBUEw7QUFRSEMsSUFBQUEsS0FBSyxFQUFFO0FBUkosR0FBUDtBQVVILENBWEQiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qXHJcbiAqIFRlc3QgU3VpdGUgUmVzdWx0XHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgaWQ6IG51bGwsXHJcbiAgICAgICAgbmFtZTogbnVsbCxcclxuICAgICAgICBpdGVyYXRpb25OdW06IDEsXHJcbiAgICAgICAgc3RhcnRUaW1lOiBudWxsLFxyXG4gICAgICAgIGVuZFRpbWU6IG51bGwsXHJcbiAgICAgICAgZHVyYXRpb246IG51bGwsXHJcbiAgICAgICAgc3RhdHVzOiBudWxsLFxyXG4gICAgICAgIGNhc2VzOiBbXSAgICAvLyBhcnJheSBvZiBjYXNlLXJlc3VsdC5qc1xyXG4gICAgfTtcclxufTtcclxuIl19
|