@kontur.candy/tools 2.172.0 → 2.174.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.
Files changed (26) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/distr/Tools/src/BuildTasks/Form/CompileForm.js +3 -3
  3. package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js +3 -3
  4. package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js +3 -3
  5. package/distr/Tools/src/BuildTasks/ReadFormSource.js +2 -3
  6. package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +4 -3
  7. package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +9 -13
  8. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +115 -59
  9. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +3 -17
  10. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +2 -2
  11. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +25 -69
  12. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js +6 -3
  13. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js +17 -181
  14. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js +1 -7
  15. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +11 -21
  16. package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js +2 -4
  17. package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js +2 -3
  18. package/distr/Tools/src/CLICommands/Localization/RunLocalization.js +2 -5
  19. package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +4 -8
  20. package/distr/Tools/src/Commons/FormGlobsUtils.js +2 -80
  21. package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js +4 -12
  22. package/distr/Tools/src/Commons/TasksCore/Observe.js +1 -5
  23. package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +4 -4
  24. package/package.json +1 -1
  25. package/distr/Common/FormPathUtils.js +0 -14
  26. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/WellKnownDirectories.js +0 -12
@@ -29,8 +29,6 @@ var _CacheAssetsPlugin = require("../../FormWebpackConfiguration/CacheAssetsPlug
29
29
  var _TypingUtils = require("../../../../Common/TypingUtils");
30
30
  var _WriteAttachmentPathFiles = require("../../BuildTasks/Form/WriteAttachmentPathFiles");
31
31
  var _getRngSchemaFilename = require("../../../../Common/getRngSchemaFilename");
32
- var _FormPathUtils = require("../../../../Common/FormPathUtils");
33
- var _WellKnownDirectories = require("../BuildServer/ResourcesControllers/Directories/WellKnownDirectories");
34
32
  function getGeneratorVersion(generatorSource) {
35
33
  if (generatorSource.type === "PublishedGenerator") {
36
34
  return generatorSource.version;
@@ -53,18 +51,16 @@ async function runBuildForms(context, options, farmDirectory, resourcesDirectory
53
51
  resourcesExternalConvertersChain = _Observe.Observe.files(_path.default.join(farmDirectory, "externalConverters"), "*.xslt").do(x => _FSTask.FSTask.copyRecursively((0, _StaticLogger.getLogger)().withPrefix("EXTERNAL-CONVERTERS"), x, _path.default.join(resourcesDirectory, "converters")));
54
52
  }
55
53
  const copiedEngines = new Set();
56
- const repositoryRoot = _path.default.join(farmDirectory, "..");
57
54
  const buildCache = new _CacheAssetsPlugin.BuildCache(farmDirectory, options.buildCacheMode);
58
- const buildFormsChain = _Observe.Observe.formDirectories(repositoryRoot, formGlobs).splitToParallelChains(x => x, x => x, async formRelativePath => {
59
- const gfv = (0, _FormPathUtils.extractGfvFromFormPath)(formRelativePath);
60
- const formDirPath = _path.default.join(repositoryRoot, formRelativePath);
61
- if (!(await (0, _fsExtra.pathExists)(_path.default.join(formDirPath, _WellKnownDirectories.WellKnownDirectories.FormJsonFileName)))) {
55
+ const buildFormsChain = _Observe.Observe.directory(_path.default.join(farmDirectory, "forms"), formGlobs).splitToParallelChains(x => x, x => x, async gfv => {
56
+ const formDirPath = _path.default.join(farmDirectory, "forms", gfv);
57
+ if (!(await (0, _fsExtra.pathExists)(_path.default.join(formDirPath, "form.json")))) {
62
58
  context.logger.warning(`Form ${gfv} does not have form.json file. To include this form to build process restart build`);
63
59
  return _Observe.Observe.value({});
64
60
  }
65
- const formSchemasDirPath = _path.default.join(formDirPath, "schemas");
61
+ const formSchemasDirPath = _path.default.join(farmDirectory, "forms", gfv, "schemas");
66
62
  const rngSchemaMask = `*${(0, _getRngSchemaFilename.getRngSchemaFilename)(formSchemasDirPath, gfv)}`;
67
- return _Observe.Observe.file(_path.default.join(formDirPath, _WellKnownDirectories.WellKnownDirectories.FormJsonFileName)).transform(formJsonFile => (0, _ResolveFormInfo.resolveFormInfo)(formJsonFile, formDirPath, engineDirectory, context.logger.withPrefix(`FORM:${gfv}`), options.upgradeFormJson, options.useLastStableVersion, options.usePrereleaseVersion)).transform(async fi => {
63
+ return _Observe.Observe.file(_path.default.join(formDirPath, "form.json")).transform(formJsonFile => (0, _ResolveFormInfo.resolveFormInfo)(formJsonFile, formDirPath, engineDirectory, context.logger.withPrefix(`FORM:${gfv}`), options.upgradeFormJson, options.useLastStableVersion, options.usePrereleaseVersion)).transform(async fi => {
68
64
  if (fi.mode === _ResolveFormInfo.FormBuildMode.NormalBuild) {
69
65
  if (fi.generatorVersion == undefined) {
70
66
  throw new Error("generatorVersion is not defined");
@@ -157,7 +153,7 @@ async function runBuildForms(context, options, farmDirectory, resourcesDirectory
157
153
  mode: options.buildCacheMode,
158
154
  farmDirectory: farmDirectory
159
155
  } : undefined;
160
- await (0, _CompileForm.compileForm)(fi.formName, fi.themes, farmDirectory, formDirPath, resourcesDirectory, (_fi$dependenciesHash2 = fi.dependenciesHash) !== null && _fi$dependenciesHash2 !== void 0 ? _fi$dependenciesHash2 : (0, _TypingUtils.reject)("This version of generator is not supported due to dependencies extraction is not supported"), false, undefined, buildCacheOptions);
156
+ await (0, _CompileForm.compileForm)(fi.formName, fi.themes, farmDirectory, resourcesDirectory, (_fi$dependenciesHash2 = fi.dependenciesHash) !== null && _fi$dependenciesHash2 !== void 0 ? _fi$dependenciesHash2 : (0, _TypingUtils.reject)("This version of generator is not supported due to dependencies extraction is not supported"), false, undefined, buildCacheOptions);
161
157
  await (0, _WriteFormMeta.writeFormMeta)(resourcesDirectory, gfv, fi.engineSource, (_fi$dependenciesHash3 = fi.dependenciesHash) !== null && _fi$dependenciesHash3 !== void 0 ? _fi$dependenciesHash3 : (0, _TypingUtils.reject)("This version of generator is not supported due to dependencies extraction is not supported"), fi.themes, buildCache, buildCacheOptions);
162
158
  }).do(async fi => {
163
159
  if (fi.generatorSource == undefined) {
@@ -170,8 +166,8 @@ async function runBuildForms(context, options, farmDirectory, resourcesDirectory
170
166
  mode: options.buildCacheMode,
171
167
  farmDirectory: farmDirectory
172
168
  } : undefined;
173
- await (0, _WriteFLangNormalizationFiles.writeFLangNormalizationFiles)(fi.formName, farmDirectory, formDirPath, resourcesDirectory, undefined, buildCache, buildCacheOptions, fi.buildCacheExist);
174
- await (0, _WriteAttachmentPathFiles.writeAttachmentPathFiles)(fi.formName, farmDirectory, formDirPath, resourcesDirectory, undefined, buildCache, buildCacheOptions);
169
+ await (0, _WriteFLangNormalizationFiles.writeFLangNormalizationFiles)(fi.formName, farmDirectory, resourcesDirectory, undefined, buildCache, buildCacheOptions, fi.buildCacheExist);
170
+ await (0, _WriteAttachmentPathFiles.writeAttachmentPathFiles)(fi.formName, farmDirectory, resourcesDirectory, undefined, buildCache, buildCacheOptions);
175
171
  }).attach(async fi => {
176
172
  if (fi.mode === _ResolveFormInfo.FormBuildMode.CopyLegacyPrebuiltResources) {
177
173
  return _Observe.Observe.files(_path.default.join(fi.formSourcesPath, "legacy-prebuilt"), "*").do(x => _FSTask.FSTask.copyRecursively((0, _StaticLogger.getLogger)().withPrefix("LEGACY-PREBUILT"), x, _path.default.join(resourcesDirectory)));
@@ -236,4 +232,4 @@ async function cleanTargetDirectory(resourcesDirectory, logger) {
236
232
  await (0, _fsExtra.emptyDir)(resourcesDirectory);
237
233
  logger.log("Resource directory clean");
238
234
  }
239
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NoYWxrIiwiX2ZzRXh0cmEiLCJfbm9kZU5vdGlmaWVyIiwiX0FjcXVpcmVGb3JtRW5naW5lIiwiX0VuZ2luZVNvdXJjZSIsIl9Db21waWxlRm9ybSIsIl9HZW5lcmF0ZUZvcm0iLCJfTnVsbEZvcm1HZW5lcmF0b3IiLCJfV3JpdGVGTGFuZ05vcm1hbGl6YXRpb25GaWxlcyIsIl9GU1Rhc2siLCJfQWNxdWlyZUZvcm1HZW5lcmF0b3IiLCJfUHVibGlzaGVkVmVyc2lvblV0aWxzIiwiX1Jlc29sdmVGb3JtSW5mbyIsIl9Xcml0ZUZvcm1NZXRhIiwiX0Zvcm1HbG9ic1V0aWxzIiwiX1N0YXRpY0xvZ2dlciIsIl9PYnNlcnZlIiwiX1NpbmdsZVZhbHVlUHJvZHVjZXIiLCJfVGltaW5nVXRpbHMiLCJfQ2FjaGVBc3NldHNQbHVnaW4iLCJfVHlwaW5nVXRpbHMiLCJfV3JpdGVBdHRhY2htZW50UGF0aEZpbGVzIiwiX2dldFJuZ1NjaGVtYUZpbGVuYW1lIiwiX0Zvcm1QYXRoVXRpbHMiLCJfV2VsbEtub3duRGlyZWN0b3JpZXMiLCJnZXRHZW5lcmF0b3JWZXJzaW9uIiwiZ2VuZXJhdG9yU291cmNlIiwidHlwZSIsInZlcnNpb24iLCJFcnJvciIsInJ1bkJ1aWxkRm9ybXMiLCJjb250ZXh0Iiwib3B0aW9ucyIsImZhcm1EaXJlY3RvcnkiLCJyZXNvdXJjZXNEaXJlY3RvcnkiLCJlbmdpbmVEaXJlY3RvcnkiLCJjYW5keU1vZHVsZXNEaXJlY3RvcnkiLCJobEZhcm1EaXJlY3RvcnlQYXRoIiwiYnVpbGRPcHRpb25zIiwicGlja0xpc3RzQ2hhaW4iLCJPYnNlcnZlIiwiZmlsZXMiLCJwYXRoIiwiam9pbiIsImRvIiwieCIsIkZTVGFzayIsImNvcHlSZWN1cnNpdmVseSIsImxvZ2dlciIsIndpdGhQcmVmaXgiLCJmb3JtR2xvYnMiLCJGb3JtR2xvYnMiLCJ2YWxpZGF0ZUdsb2JzIiwicmVzb2x2ZVNwZWNpZmllcnMiLCJzdGF0aWNSZXNvdXJjZXNGb3JQcm9kdWN0aW9uQ2hhaW4iLCJfX2Rpcm5hbWUiLCJnZXRMb2dnZXIiLCJyZXNvdXJjZXNOdVNwZWNDaGFpbiIsImNvcHlCeU1hc2tzIiwicmVzb3VyY2VzRXh0ZXJuYWxDb252ZXJ0ZXJzQ2hhaW4iLCJlbXB0eSIsImNvcGllZEVuZ2luZXMiLCJTZXQiLCJyZXBvc2l0b3J5Um9vdCIsImJ1aWxkQ2FjaGUiLCJCdWlsZENhY2hlIiwiYnVpbGRDYWNoZU1vZGUiLCJidWlsZEZvcm1zQ2hhaW4iLCJmb3JtRGlyZWN0b3JpZXMiLCJzcGxpdFRvUGFyYWxsZWxDaGFpbnMiLCJmb3JtUmVsYXRpdmVQYXRoIiwiZ2Z2IiwiZXh0cmFjdEdmdkZyb21Gb3JtUGF0aCIsImZvcm1EaXJQYXRoIiwicGF0aEV4aXN0cyIsIldlbGxLbm93bkRpcmVjdG9yaWVzIiwiRm9ybUpzb25GaWxlTmFtZSIsIndhcm5pbmciLCJ2YWx1ZSIsImZvcm1TY2hlbWFzRGlyUGF0aCIsInJuZ1NjaGVtYU1hc2siLCJnZXRSbmdTY2hlbWFGaWxlbmFtZSIsImZpbGUiLCJ0cmFuc2Zvcm0iLCJmb3JtSnNvbkZpbGUiLCJyZXNvbHZlRm9ybUluZm8iLCJ1cGdyYWRlRm9ybUpzb24iLCJ1c2VMYXN0U3RhYmxlVmVyc2lvbiIsInVzZVByZXJlbGVhc2VWZXJzaW9uIiwiZmkiLCJtb2RlIiwiRm9ybUJ1aWxkTW9kZSIsIk5vcm1hbEJ1aWxkIiwiZ2VuZXJhdG9yVmVyc2lvbiIsInVuZGVmaW5lZCIsImVuZ2luZVZlcnNpb24iLCJyZXNvbHZlR2VuZXJhdG9yVmVyc2lvbiIsImVuZ2luZVNvdXJjZSIsInJlc29sdmVFbmdpbmVWZXJzaW9uIiwiYXR0YWNoIiwiU2luZ2xlVmFsdWVQcm9kdWNlciIsIk51bGxGb3JtR2VuZXJhdG9yIiwiZ2VuZXJhdG9yRmFjdG9yeSIsInVzZVZlcnNpb25Gcm9tQ2FjaGUiLCJ5IiwiZ2VuZXJhdG9yIiwiZ2V0R2VuZXJhdG9yU291cmNlS2V5IiwiZW5naW5lRmFjdG9yeSIsImhhcyIsImdldEVuZ2luZVNvdXJjZUtleSIsImFkZCIsImZvcm1Tb3VyY2VzUGF0aCIsImRlcGVuZGVuY2llc0hhc2giLCJzdXBwb3J0c0RlcGVuZGVuY2llc0V4dHJhY3Rpb24iLCJnZXRBbGxEZXBlbmRlbmNpZXNIYXNoIiwiYnVpbGRDYWNoZUV4aXN0IiwiZXhpc3RzIiwiX2ZpJGRlcGVuZGVuY2llc0hhc2giLCJsb2ciLCJnZW5lcmF0ZUZvcm0iLCJza2lwQ29kZVJlZm9ybWF0dGluZyIsInNraXBHZW5lcmF0ZWRDb2RlUmVmb3JtYXR0aW5nIiwicmVzb3VyY2VzSGFzaCIsIl9maSRkZXBlbmRlbmNpZXNIYXNoMiIsIl9maSRkZXBlbmRlbmNpZXNIYXNoMyIsImV4dHJhY3QiLCJidWlsZENhY2hlT3B0aW9ucyIsImRlcHNIYXNoIiwiY29tcGlsZUZvcm0iLCJmb3JtTmFtZSIsInRoZW1lcyIsInJlamVjdCIsIndyaXRlRm9ybU1ldGEiLCJ3cml0ZUZMYW5nTm9ybWFsaXphdGlvbkZpbGVzIiwid3JpdGVBdHRhY2htZW50UGF0aEZpbGVzIiwiQ29weUxlZ2FjeVByZWJ1aWx0UmVzb3VyY2VzIiwibW9kaWZpZXIiLCJjb250ZW50IiwicmVwbGFjZSIsIm1vZGlmeUZpbGVzQ29udGVudCIsIndhdGNoIiwibm90aWZpZXIiLCJub3RpZnkiLCJ0aXRsZSIsIm1lc3NhZ2UiLCJjbGVhbiIsImNsZWFuVGFyZ2V0RGlyZWN0b3J5Iiwic3RvcE9ic2VydmUxIiwib2JzZXJ2ZSIsInN0b3BPYnNlcnZlMiIsInN0b3BPYnNlcnZlMyIsInN0b3BPYnNlcnZlNCIsInN0b3BPYnNlcnZlNSIsIndhaXRGb3JFeGl0Iiwic3RhcnREYXRlIiwiRGF0ZSIsIm5vdyIsImN1cnJlbnRWYWx1ZSIsImNvbnNvbGUiLCJjaGFsayIsImdyZWVuQnJpZ2h0IiwidG90YWxUaW1lIiwicHJpbnRUaW1lIiwiZW1wdHlEaXIiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQ0xJQ29tbWFuZHMvQnVpbGRGb3Jtcy9SdW5CdWlsZEZvcm1zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7IGVtcHR5RGlyLCBwYXRoRXhpc3RzIH0gZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgbm90aWZpZXIgZnJvbSBcIm5vZGUtbm90aWZpZXJcIjtcblxuaW1wb3J0IHsgZW5naW5lRmFjdG9yeSB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0VuZ2luZS9BY3F1aXJlRm9ybUVuZ2luZVwiO1xuaW1wb3J0IHsgZ2V0RW5naW5lU291cmNlS2V5IH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvRW5naW5lL0VuZ2luZVNvdXJjZVwiO1xuaW1wb3J0IHsgY29tcGlsZUZvcm0gfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9Gb3JtL0NvbXBpbGVGb3JtXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZUZvcm0gfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9Gb3JtL0dlbmVyYXRlRm9ybVwiO1xuaW1wb3J0IHsgTnVsbEZvcm1HZW5lcmF0b3IgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9Gb3JtL051bGxGb3JtR2VuZXJhdG9yXCI7XG5pbXBvcnQgeyB3cml0ZUZMYW5nTm9ybWFsaXphdGlvbkZpbGVzIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvRm9ybS9Xcml0ZUZMYW5nTm9ybWFsaXphdGlvbkZpbGVzXCI7XG5pbXBvcnQgeyBGU1Rhc2sgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9GU1Rhc2tcIjtcbmltcG9ydCB7XG4gICAgZ2VuZXJhdG9yRmFjdG9yeSxcbiAgICBHZW5lcmF0b3JTb3VyY2UsXG4gICAgZ2V0R2VuZXJhdG9yU291cmNlS2V5LFxufSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9HZW5lcmF0b3IvQWNxdWlyZUZvcm1HZW5lcmF0b3JcIjtcbmltcG9ydCB7IHJlc29sdmVFbmdpbmVWZXJzaW9uLCByZXNvbHZlR2VuZXJhdG9yVmVyc2lvbiB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL1B1Ymxpc2hlZFZlcnNpb25VdGlsc1wiO1xuaW1wb3J0IHsgRm9ybUJ1aWxkTW9kZSwgcmVzb2x2ZUZvcm1JbmZvIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvUmVzb2x2ZUZvcm1JbmZvXCI7XG5pbXBvcnQgeyB3cml0ZUZvcm1NZXRhIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvV3JpdGVGb3JtTWV0YVwiO1xuaW1wb3J0IHsgQ29uc29sZUFwcGxpY2F0aW9uQ29udGV4dCB9IGZyb20gXCIuLi8uLi9Db21tb25zL0NvbnNvbGVBcHBsaWNhdGlvbi9Db25zb2xlQXBwbGljYXRpb25Db250ZXh0XCI7XG5pbXBvcnQgeyBGb3JtR2xvYnMgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9Gb3JtR2xvYnNVdGlsc1wiO1xuaW1wb3J0IHsgSUxvZ2dlciB9IGZyb20gXCIuLi8uLi9Db21tb25zL0xvZ2dpbmcvSUxvZ2dlclwiO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvTG9nZ2luZy9TdGF0aWNMb2dnZXJcIjtcbmltcG9ydCB7IE9ic2VydmUgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9UYXNrc0NvcmUvT2JzZXJ2ZVwiO1xuaW1wb3J0IHsgU2luZ2xlVmFsdWVQcm9kdWNlciB9IGZyb20gXCIuLi8uLi9Db21tb25zL1Rhc2tzQ29yZS9TaW5nbGVWYWx1ZVByb2R1Y2VyXCI7XG5pbXBvcnQgeyBwcmludFRpbWUgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9UaW1pbmdVdGlsc1wiO1xuaW1wb3J0IHsgQnVpbGRDYWNoZSB9IGZyb20gXCIuLi8uLi9Gb3JtV2VicGFja0NvbmZpZ3VyYXRpb24vQ2FjaGVBc3NldHNQbHVnaW5cIjtcbmltcG9ydCB7IHJlamVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB7IHdyaXRlQXR0YWNobWVudFBhdGhGaWxlcyB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0Zvcm0vV3JpdGVBdHRhY2htZW50UGF0aEZpbGVzXCI7XG5pbXBvcnQgeyBDaGFpbmFibGVWYWx1ZVByb2R1Y2VyIH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvVGFza3NDb3JlL0NoYWluYWJsZVZhbHVlUHJvZHVjZXJcIjtcbmltcG9ydCB7IEVtcHR5UHJvZHVjZXIgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9UYXNrc0NvcmUvRW1wdHlQcm9kdWNlclwiO1xuaW1wb3J0IHsgZ2V0Um5nU2NoZW1hRmlsZW5hbWUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL2dldFJuZ1NjaGVtYUZpbGVuYW1lXCI7XG5cbmltcG9ydCB7IEJ1aWxkRm9ybXNPcHRpb25zIH0gZnJvbSBcIi4vQnVpbGRGb3Jtc09wdGlvbnNcIjtcbmltcG9ydCB7IGV4dHJhY3RHZnZGcm9tRm9ybVBhdGggfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0Zvcm1QYXRoVXRpbHNcIjtcbmltcG9ydCB7IFdlbGxLbm93bkRpcmVjdG9yaWVzIH0gZnJvbSBcIi4uL0J1aWxkU2VydmVyL1Jlc291cmNlc0NvbnRyb2xsZXJzL0RpcmVjdG9yaWVzL1dlbGxLbm93bkRpcmVjdG9yaWVzXCI7XG5cbmZ1bmN0aW9uIGdldEdlbmVyYXRvclZlcnNpb24oZ2VuZXJhdG9yU291cmNlOiBHZW5lcmF0b3JTb3VyY2UpOiBzdHJpbmcge1xuICAgIGlmIChnZW5lcmF0b3JTb3VyY2UudHlwZSA9PT0gXCJQdWJsaXNoZWRHZW5lcmF0b3JcIikge1xuICAgICAgICByZXR1cm4gZ2VuZXJhdG9yU291cmNlLnZlcnNpb247XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZFByb2dyYW1TdGF0ZVwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5CdWlsZEZvcm1zKFxuICAgIGNvbnRleHQ6IENvbnNvbGVBcHBsaWNhdGlvbkNvbnRleHQsXG4gICAgb3B0aW9uczogQnVpbGRGb3Jtc09wdGlvbnMsXG4gICAgZmFybURpcmVjdG9yeTogc3RyaW5nLFxuICAgIHJlc291cmNlc0RpcmVjdG9yeTogc3RyaW5nLFxuICAgIGVuZ2luZURpcmVjdG9yeTogc3RyaW5nLFxuICAgIGNhbmR5TW9kdWxlc0RpcmVjdG9yeTogc3RyaW5nLFxuICAgIGhsRmFybURpcmVjdG9yeVBhdGg6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYnVpbGRPcHRpb25zID0gb3B0aW9ucztcblxuICAgIGNvbnN0IHBpY2tMaXN0c0NoYWluID0gT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmFybURpcmVjdG9yeSwgXCJwaWNrbGlzdHNcIiksIFwiKi5qc29uXCIpLmRvKHggPT5cbiAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShjb250ZXh0LmxvZ2dlci53aXRoUHJlZml4KFwiUElDS0xJU1RTXCIpLCB4LCBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcInBpY2tsaXN0c1wiKSlcbiAgICApO1xuXG4gICAgY29uc3QgZm9ybUdsb2JzID0gYXdhaXQgRm9ybUdsb2JzLnZhbGlkYXRlR2xvYnMoXG4gICAgICAgIGF3YWl0IEZvcm1HbG9icy5yZXNvbHZlU3BlY2lmaWVycyhidWlsZE9wdGlvbnMuZm9ybUdsb2JzLCBmYXJtRGlyZWN0b3J5KSxcbiAgICAgICAgZmFybURpcmVjdG9yeVxuICAgICk7XG5cbiAgICBjb25zdCBzdGF0aWNSZXNvdXJjZXNGb3JQcm9kdWN0aW9uQ2hhaW4gPSBPYnNlcnZlLmZpbGVzKFxuICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uXCIsIFwiLi5cIiwgXCJTdGF0aWNGaWxlc0ZvclByb2R1Y3Rpb25SZXNvdXJjZXNEaXJcIiksXG4gICAgICAgIFwiKi5qc1wiLFxuICAgICAgICBcIiouanMubWFwXCJcbiAgICApLmRvKHggPT5cbiAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiU1RBVElDU1wiKSwgeCwgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJwdWJsaWNcIiwgXCJzY3JpcHRzXCIpKVxuICAgICk7XG5cbiAgICBjb25zdCByZXNvdXJjZXNOdVNwZWNDaGFpbiA9IE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZhcm1EaXJlY3RvcnkpLCBcIioubnVzcGVjXCIpLmRvKHggPT5cbiAgICAgICAgRlNUYXNrLmNvcHlCeU1hc2tzKGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJOVVNQRUNcIiksIHgsIFtcIioubnVzcGVjXCJdLCBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5KSlcbiAgICApO1xuXG4gICAgLyoqINCa0L7QvdCy0LXRgNGC0LXRgNGLINC+0L/QuNGB0Lgg0LTQu9GPINGE0L7RgNC8LCDQutC+0YLQvtGA0YvQtSDQv9C+0LrQsCDQvdC1INGA0LXQsNC70LjQt9C+0LLQsNC90Ysg0L3QsCDQutC10L3QtNC4LCDRgdCw0LzQsCDQvNC10YXQsNC90LjQutCwINC+0L/QuNGB0Lgg0L/QtdGA0LXQvdC10YHQtdC90LAg0LIg0YTQvtGA0LzRiyDQsiDQutC10L3QtNC4INCw0L/QuCwg0L/QvtGN0YLQvtC80YMg0L7QvdC4INC00L7Qu9C20L3RiyDQsdGL0YLRjCDQsiBjYW5keS5yZXNvdXJjZXNcbiAgICAgKiAg0KDQtdCw0LvQuNC30YPQtdGC0YHRjyDRgtC+0LvRjNC60L4g0L/RgNC4INC+0LHRidC10Lwg0LHQuNC70LTQtSDRhNC+0YDQvDogY2FuZHkgYnVpbGQgKlxuICAgICAqICovXG4gICAgbGV0IHJlc291cmNlc0V4dGVybmFsQ29udmVydGVyc0NoYWluOiBDaGFpbmFibGVWYWx1ZVByb2R1Y2VyPHN0cmluZz4gfCBFbXB0eVByb2R1Y2VyID0gT2JzZXJ2ZS5lbXB0eSgpO1xuICAgIGlmIChmb3JtR2xvYnNbMF0gPT09IFwiKlwiKSB7XG4gICAgICAgIHJlc291cmNlc0V4dGVybmFsQ29udmVydGVyc0NoYWluID0gT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmFybURpcmVjdG9yeSwgXCJleHRlcm5hbENvbnZlcnRlcnNcIiksIFwiKi54c2x0XCIpLmRvKFxuICAgICAgICAgICAgeCA9PlxuICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJFWFRFUk5BTC1DT05WRVJURVJTXCIpLFxuICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcImNvbnZlcnRlcnNcIilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY29waWVkRW5naW5lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgY29uc3QgcmVwb3NpdG9yeVJvb3QgPSBwYXRoLmpvaW4oZmFybURpcmVjdG9yeSwgXCIuLlwiKTtcbiAgICBjb25zdCBidWlsZENhY2hlID0gbmV3IEJ1aWxkQ2FjaGUoZmFybURpcmVjdG9yeSwgb3B0aW9ucy5idWlsZENhY2hlTW9kZSk7XG4gICAgY29uc3QgYnVpbGRGb3Jtc0NoYWluID0gT2JzZXJ2ZS5mb3JtRGlyZWN0b3JpZXMocmVwb3NpdG9yeVJvb3QsIGZvcm1HbG9icykuc3BsaXRUb1BhcmFsbGVsQ2hhaW5zKFxuICAgICAgICB4ID0+IHgsXG4gICAgICAgIHggPT4geCxcbiAgICAgICAgYXN5bmMgZm9ybVJlbGF0aXZlUGF0aCA9PiB7XG4gICAgICAgICAgICBjb25zdCBnZnYgPSBleHRyYWN0R2Z2RnJvbUZvcm1QYXRoKGZvcm1SZWxhdGl2ZVBhdGgpO1xuICAgICAgICAgICAgY29uc3QgZm9ybURpclBhdGggPSBwYXRoLmpvaW4ocmVwb3NpdG9yeVJvb3QsIGZvcm1SZWxhdGl2ZVBhdGgpO1xuXG4gICAgICAgICAgICBpZiAoIShhd2FpdCBwYXRoRXhpc3RzKHBhdGguam9pbihmb3JtRGlyUGF0aCwgV2VsbEtub3duRGlyZWN0b3JpZXMuRm9ybUpzb25GaWxlTmFtZSkpKSkge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubG9nZ2VyLndhcm5pbmcoXG4gICAgICAgICAgICAgICAgICAgIGBGb3JtICR7Z2Z2fSBkb2VzIG5vdCBoYXZlIGZvcm0uanNvbiBmaWxlLiBUbyBpbmNsdWRlIHRoaXMgZm9ybSB0byBidWlsZCBwcm9jZXNzIHJlc3RhcnQgYnVpbGRgXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2ZS52YWx1ZSh7fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmb3JtU2NoZW1hc0RpclBhdGggPSBwYXRoLmpvaW4oZm9ybURpclBhdGgsIFwic2NoZW1hc1wiKTtcbiAgICAgICAgICAgIGNvbnN0IHJuZ1NjaGVtYU1hc2sgPSBgKiR7Z2V0Um5nU2NoZW1hRmlsZW5hbWUoZm9ybVNjaGVtYXNEaXJQYXRoLCBnZnYpfWA7XG5cbiAgICAgICAgICAgIHJldHVybiBPYnNlcnZlLmZpbGUocGF0aC5qb2luKGZvcm1EaXJQYXRoLCBXZWxsS25vd25EaXJlY3Rvcmllcy5Gb3JtSnNvbkZpbGVOYW1lKSlcbiAgICAgICAgICAgICAgICAudHJhbnNmb3JtKGZvcm1Kc29uRmlsZSA9PlxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlRm9ybUluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtSnNvbkZpbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGlyUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubG9nZ2VyLndpdGhQcmVmaXgoYEZPUk06JHtnZnZ9YCksXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnVwZ3JhZGVGb3JtSnNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudXNlTGFzdFN0YWJsZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnVzZVByZXJlbGVhc2VWZXJzaW9uXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnRyYW5zZm9ybShhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaS5tb2RlID09PSBGb3JtQnVpbGRNb2RlLk5vcm1hbEJ1aWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmkuZ2VuZXJhdG9yVmVyc2lvbiA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJnZW5lcmF0b3JWZXJzaW9uIGlzIG5vdCBkZWZpbmVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpLmVuZ2luZVZlcnNpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZW5naW5lVmVyc2lvbiBpcyBub3QgZGVmaW5lZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZmksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yU291cmNlOiBhd2FpdCByZXNvbHZlR2VuZXJhdG9yVmVyc2lvbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmkuZ2VuZXJhdG9yVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5sb2dnZXIud2l0aFByZWZpeChnZnYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmdpbmVTb3VyY2U6IGF3YWl0IHJlc29sdmVFbmdpbmVWZXJzaW9uKGZpLmVuZ2luZVZlcnNpb24sIGNvbnRleHQubG9nZ2VyLndpdGhQcmVmaXgoZ2Z2KSksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5maSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3JTb3VyY2U6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmdpbmVTb3VyY2U6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hdHRhY2goXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIGZpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaS5nZW5lcmF0b3JTb3VyY2UgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTaW5nbGVWYWx1ZVByb2R1Y2VyKG5ldyBOdWxsRm9ybUdlbmVyYXRvcigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvckZhY3RvcnkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpLmdlbmVyYXRvclNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuZHlNb2R1bGVzRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnVzZVZlcnNpb25Gcm9tQ2FjaGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBhc3luYyAoZmksIHkpID0+ICh7IC4uLmZpLCBnZW5lcmF0b3I6IHkgfSksXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5nZW5lcmF0b3JTb3VyY2UgIT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBnZXRHZW5lcmF0b3JTb3VyY2VLZXkoZmkuZ2VuZXJhdG9yU291cmNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJOdWxsRm9ybUdlbmVyYXRvclwiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIGZpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaS5lbmdpbmVTb3VyY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2luZ2xlVmFsdWVQcm9kdWNlcihcIk51bGxFbmdpbmVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW5naW5lRmFjdG9yeShmaS5lbmdpbmVTb3VyY2UsIGNhbmR5TW9kdWxlc0RpcmVjdG9yeSwgb3B0aW9ucy51c2VWZXJzaW9uRnJvbUNhY2hlKS5kbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYyB4ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb3BpZWRFbmdpbmVzLmhhcyhnZXRFbmdpbmVTb3VyY2VLZXkoZmkuZW5naW5lU291cmNlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIkVOR0lORVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwicHVibGljXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29waWVkRW5naW5lcy5hZGQoZ2V0RW5naW5lU291cmNlS2V5KGZpLmVuZ2luZVNvdXJjZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMgZmkgPT4gZmksXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIGZpID0+IChmaS5lbmdpbmVTb3VyY2UgIT0gdW5kZWZpbmVkID8gZ2V0RW5naW5lU291cmNlS2V5KGZpLmVuZ2luZVNvdXJjZSkgOiBcIk51bGxFbmdpbmVcIilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZm9ybVNvdXJjZXNQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIuLi8uLi9jb250cm9scy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIi4uLy4uL3hzbHRUZW1wbGF0ZXMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIuLi8uLi9qc0hlbHBlcnMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzY2hlbWFzLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3VnYXIvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjb250cm9scy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImF1dG9jYWxjLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaGVscGVycy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInZhbGlkYXRpb25zLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibG9jYWxpemF0aW9uLyoqLypcIlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0oYXN5bmMgZmkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZGVwZW5kZW5jaWVzSGFzaDogdW5kZWZpbmVkIHwgc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmkubW9kZSAhPT0gRm9ybUJ1aWxkTW9kZS5Ob3JtYWxCdWlsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5maSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXNIYXNoOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChhd2FpdCBmaS5nZW5lcmF0b3Iuc3VwcG9ydHNEZXBlbmRlbmNpZXNFeHRyYWN0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llc0hhc2ggPSBhd2FpdCBmaS5nZW5lcmF0b3IuZ2V0QWxsRGVwZW5kZW5jaWVzSGFzaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGlyUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhsRmFybURpcmVjdG9yeVBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmZpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzSGFzaDogZGVwZW5kZW5jaWVzSGFzaCxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0oYXN5bmMgZmkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYnVpbGRDYWNoZUV4aXN0OiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaS5kZXBlbmRlbmNpZXNIYXNoICE9IHVuZGVmaW5lZCAmJiBmaS5nZW5lcmF0b3JTb3VyY2UgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENhY2hlRXhpc3QgPSBhd2FpdCBidWlsZENhY2hlLmV4aXN0cyhmaS5nZW5lcmF0b3JTb3VyY2UsIGdmdiwgZmkuZGVwZW5kZW5jaWVzSGFzaCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmZpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDYWNoZUV4aXN0OiBidWlsZENhY2hlRXhpc3QsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZG8oYXN5bmMgZmkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmkuZ2VuZXJhdG9yU291cmNlID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZmkuYnVpbGRDYWNoZUV4aXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmxvZ2dlci53aXRoUHJlZml4KGBHRU5FUkFURToke2dmdn1gKS5sb2coXCJTa2lwcGVkIGR1ZSBidWlsZCBjYWNoZSBleGl0c1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVGb3JtKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZm9ybVNvdXJjZXNQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhsRmFybURpcmVjdG9yeVBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5nZW5lcmF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcENvZGVSZWZvcm1hdHRpbmc6IG9wdGlvbnMuc2tpcEdlbmVyYXRlZENvZGVSZWZvcm1hdHRpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzSGFzaDogZmkuZGVwZW5kZW5jaWVzSGFzaCA/PyBcIlVuZGVmaW5lZFJlc291cmNlc0hhc2hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT4gT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZm9ybURpclBhdGgsIFwiZm9ybVwiKSwgXCIqKi8qXCIpKVxuICAgICAgICAgICAgICAgIC5kbyhhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaS5nZW5lcmF0b3JTb3VyY2UgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpLmRlcGVuZGVuY2llc0hhc2ggIT0gdW5kZWZpbmVkICYmIGZpLmJ1aWxkQ2FjaGVFeGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5sb2dnZXIud2l0aFByZWZpeChgQ09NUElMRToke2dmdn1gKS5sb2coXCJTa2lwcGVkIGR1ZSBidWlsZCBjYWNoZSBleGlzdHNcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBidWlsZENhY2hlLmV4dHJhY3QoZmkuZ2VuZXJhdG9yU291cmNlLCBnZnYsIGZpLmRlcGVuZGVuY2llc0hhc2gsIHJlc291cmNlc0RpcmVjdG9yeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnVpbGRDYWNoZU9wdGlvbnMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZGVwZW5kZW5jaWVzSGFzaCAhPSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBzSGFzaDogZmkuZGVwZW5kZW5jaWVzSGFzaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3JWZXJzaW9uOiBnZXRHZW5lcmF0b3JWZXJzaW9uKGZpLmdlbmVyYXRvclNvdXJjZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Z2OiBnZnYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTogb3B0aW9ucy5idWlsZENhY2hlTW9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5OiBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbXBpbGVGb3JtKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZm9ybU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS50aGVtZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURpclBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNEaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5kZXBlbmRlbmNpZXNIYXNoID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoaXMgdmVyc2lvbiBvZiBnZW5lcmF0b3IgaXMgbm90IHN1cHBvcnRlZCBkdWUgdG8gZGVwZW5kZW5jaWVzIGV4dHJhY3Rpb24gaXMgbm90IHN1cHBvcnRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDYWNoZU9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB3cml0ZUZvcm1NZXRhKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2Z2LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZW5naW5lU291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZGVwZW5kZW5jaWVzSGFzaCA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGlzIHZlcnNpb24gb2YgZ2VuZXJhdG9yIGlzIG5vdCBzdXBwb3J0ZWQgZHVlIHRvIGRlcGVuZGVuY2llcyBleHRyYWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS50aGVtZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENhY2hlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDYWNoZU9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5kbyhhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaS5nZW5lcmF0b3JTb3VyY2UgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnVpbGRDYWNoZU9wdGlvbnMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZGVwZW5kZW5jaWVzSGFzaCAhPSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBzSGFzaDogZmkuZGVwZW5kZW5jaWVzSGFzaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3JWZXJzaW9uOiBnZXRHZW5lcmF0b3JWZXJzaW9uKGZpLmdlbmVyYXRvclNvdXJjZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Z2OiBnZnYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTogb3B0aW9ucy5idWlsZENhY2hlTW9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5OiBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB3cml0ZUZMYW5nTm9ybWFsaXphdGlvbkZpbGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZm9ybU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURpclBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNEaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENhY2hlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDYWNoZU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5idWlsZENhY2hlRXhpc3RcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgd3JpdGVBdHRhY2htZW50UGF0aEZpbGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZm9ybU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURpclBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNEaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENhY2hlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDYWNoZU9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmkubW9kZSA9PT0gRm9ybUJ1aWxkTW9kZS5Db3B5TGVnYWN5UHJlYnVpbHRSZXNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwibGVnYWN5LXByZWJ1aWx0XCIpLCBcIipcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJMRUdBQ1ktUFJFQlVJTFRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2luZ2xlVmFsdWVQcm9kdWNlcihcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwic2NoZW1hc1wiKSwgcm5nU2NoZW1hTWFzaykuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiU0NIRU1BU1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwic2NoZW1hc1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcImNvbnZlcnRlcnNcIiksIFwiKlwiKS5kbyh4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJDT05WRVJURVJTXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJjb252ZXJ0ZXJzXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwibWVyZ2Vyc1wiKSwgXCIqXCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIk1FUkdFUlNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcIm1lcmdlcnNcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kaWZpZXIgPSAoY29udGVudDogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LnJlcGxhY2UoLzx4OmluY2x1ZGUgaHJlZj1cIlsuL10rL2csICc8eDppbmNsdWRlIGhyZWY9XCInKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJjb252ZXJ0ZXJzXCIpLCBcIipcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLm1vZGlmeUZpbGVzQ29udGVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiRklYLVhTTFQtSU5DTFVERVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwiY29udmVydGVyc1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIioqLyoueHNsdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCIuLlwiLCBcIi4uXCIsIFwieHNsdFRlbXBsYXRlc1wiKSwgXCIqXCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIlhTTFQtVEVNUExBVEVTXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJjb252ZXJ0ZXJzXCIsIFwieHNsdFRlbXBsYXRlc1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcIm5vcm1hbGl6ZVwiKSwgXCIqLnhtbFwiKS5kbyh4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJOT1JNQUxJWkVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcIm5vcm1hbGl6ZVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcInBhdGNoXCIpLCBcIioueHNsdFwiKS5kbyh4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJQQVRDSFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwicGF0Y2hcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJtYXBcIiksIFwiKi54bWxcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiTUFQXCIpLCB4LCBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcIm1hcFwiKSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJ1bm1hcFwiKSwgXCIqLnhtbFwiKS5kbyh4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJVTk1BUFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwidW5tYXBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuZG8oYXN5bmMgZmkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnVpbGRPcHRpb25zLndhdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5ub3RpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBgJHtmaS5mb3JtTmFtZX06INGB0LHQvtGA0LrQsCDQt9Cw0LLQtdGA0YjQtdC90LBgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBFbmdpbmU6ICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpLmVuZ2luZVNvdXJjZSA9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJbTm9FbmdpbmVdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZmkuZW5naW5lU291cmNlLnR5cGUgPT09IFwiTG9jYWxFbmdpbmVTb3VyY2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJsb2NhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZpLmVuZ2luZVNvdXJjZS52ZXJzaW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIGlmIChidWlsZE9wdGlvbnMud2F0Y2gpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuY2xlYW4pIHtcbiAgICAgICAgICAgIGF3YWl0IGNsZWFuVGFyZ2V0RGlyZWN0b3J5KHJlc291cmNlc0RpcmVjdG9yeSwgY29udGV4dC5sb2dnZXIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0b3BPYnNlcnZlMSA9IGF3YWl0IHBpY2tMaXN0c0NoYWluLm9ic2VydmUoKTtcbiAgICAgICAgY29uc3Qgc3RvcE9ic2VydmUyID0gYXdhaXQgYnVpbGRGb3Jtc0NoYWluLm9ic2VydmUoKTtcbiAgICAgICAgY29uc3Qgc3RvcE9ic2VydmUzID0gYXdhaXQgc3RhdGljUmVzb3VyY2VzRm9yUHJvZHVjdGlvbkNoYWluLm9ic2VydmUoKTtcbiAgICAgICAgY29uc3Qgc3RvcE9ic2VydmU0ID0gYXdhaXQgcmVzb3VyY2VzTnVTcGVjQ2hhaW4ub2JzZXJ2ZSgpO1xuICAgICAgICBjb25zdCBzdG9wT2JzZXJ2ZTUgPSBhd2FpdCByZXNvdXJjZXNFeHRlcm5hbENvbnZlcnRlcnNDaGFpbi5vYnNlcnZlKCk7XG4gICAgICAgIGF3YWl0IGNvbnRleHQud2FpdEZvckV4aXQoKTtcbiAgICAgICAgaWYgKHN0b3BPYnNlcnZlMyAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IHN0b3BPYnNlcnZlMygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdG9wT2JzZXJ2ZTQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhd2FpdCBzdG9wT2JzZXJ2ZTQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RvcE9ic2VydmU1ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXdhaXQgc3RvcE9ic2VydmU1KCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgc3RvcE9ic2VydmUyKCk7XG4gICAgICAgIGF3YWl0IHN0b3BPYnNlcnZlMSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IERhdGUubm93KCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5jbGVhbikge1xuICAgICAgICAgICAgICAgIGF3YWl0IGNsZWFuVGFyZ2V0RGlyZWN0b3J5KHJlc291cmNlc0RpcmVjdG9yeSwgY29udGV4dC5sb2dnZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgcGlja0xpc3RzQ2hhaW4uY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgYXdhaXQgc3RhdGljUmVzb3VyY2VzRm9yUHJvZHVjdGlvbkNoYWluLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIGF3YWl0IHJlc291cmNlc051U3BlY0NoYWluLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIGF3YWl0IHJlc291cmNlc0V4dGVybmFsQ29udmVydGVyc0NoYWluLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIGF3YWl0IGJ1aWxkRm9ybXNDaGFpbi5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW5CcmlnaHQoXCJCdWlsZCBzdWNjZXNzXCIpKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsVGltZSA9IERhdGUubm93KCkgLSBzdGFydERhdGU7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgY29uc29sZS5sb2coYFRvdGFsIHRpbWU6ICR7cHJpbnRUaW1lKHRvdGFsVGltZSl9YCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNsZWFuVGFyZ2V0RGlyZWN0b3J5KHJlc291cmNlc0RpcmVjdG9yeTogc3RyaW5nLCBsb2dnZXI6IElMb2dnZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2dnZXIubG9nKFwiQ2xlYW5pbmcgcmVzb3VyY2UgZGlyZWN0b3J5LiBcIiArIHJlc291cmNlc0RpcmVjdG9yeSk7XG4gICAgYXdhaXQgZW1wdHlEaXIocmVzb3VyY2VzRGlyZWN0b3J5KTtcbiAgICBsb2dnZXIubG9nKFwiUmVzb3VyY2UgZGlyZWN0b3J5IGNsZWFuXCIpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsTUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsUUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsYUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUksa0JBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLGFBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFlBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLGFBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLGtCQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyw2QkFBQSxHQUFBVCxPQUFBO0FBQ0EsSUFBQVUsT0FBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcscUJBQUEsR0FBQVgsT0FBQTtBQUtBLElBQUFZLHNCQUFBLEdBQUFaLE9BQUE7QUFDQSxJQUFBYSxnQkFBQSxHQUFBYixPQUFBO0FBQ0EsSUFBQWMsY0FBQSxHQUFBZCxPQUFBO0FBRUEsSUFBQWUsZUFBQSxHQUFBZixPQUFBO0FBRUEsSUFBQWdCLGFBQUEsR0FBQWhCLE9BQUE7QUFDQSxJQUFBaUIsUUFBQSxHQUFBakIsT0FBQTtBQUNBLElBQUFrQixvQkFBQSxHQUFBbEIsT0FBQTtBQUNBLElBQUFtQixZQUFBLEdBQUFuQixPQUFBO0FBQ0EsSUFBQW9CLGtC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
235
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NoYWxrIiwiX2ZzRXh0cmEiLCJfbm9kZU5vdGlmaWVyIiwiX0FjcXVpcmVGb3JtRW5naW5lIiwiX0VuZ2luZVNvdXJjZSIsIl9Db21waWxlRm9ybSIsIl9HZW5lcmF0ZUZvcm0iLCJfTnVsbEZvcm1HZW5lcmF0b3IiLCJfV3JpdGVGTGFuZ05vcm1hbGl6YXRpb25GaWxlcyIsIl9GU1Rhc2siLCJfQWNxdWlyZUZvcm1HZW5lcmF0b3IiLCJfUHVibGlzaGVkVmVyc2lvblV0aWxzIiwiX1Jlc29sdmVGb3JtSW5mbyIsIl9Xcml0ZUZvcm1NZXRhIiwiX0Zvcm1HbG9ic1V0aWxzIiwiX1N0YXRpY0xvZ2dlciIsIl9PYnNlcnZlIiwiX1NpbmdsZVZhbHVlUHJvZHVjZXIiLCJfVGltaW5nVXRpbHMiLCJfQ2FjaGVBc3NldHNQbHVnaW4iLCJfVHlwaW5nVXRpbHMiLCJfV3JpdGVBdHRhY2htZW50UGF0aEZpbGVzIiwiX2dldFJuZ1NjaGVtYUZpbGVuYW1lIiwiZ2V0R2VuZXJhdG9yVmVyc2lvbiIsImdlbmVyYXRvclNvdXJjZSIsInR5cGUiLCJ2ZXJzaW9uIiwiRXJyb3IiLCJydW5CdWlsZEZvcm1zIiwiY29udGV4dCIsIm9wdGlvbnMiLCJmYXJtRGlyZWN0b3J5IiwicmVzb3VyY2VzRGlyZWN0b3J5IiwiZW5naW5lRGlyZWN0b3J5IiwiY2FuZHlNb2R1bGVzRGlyZWN0b3J5IiwiaGxGYXJtRGlyZWN0b3J5UGF0aCIsImJ1aWxkT3B0aW9ucyIsInBpY2tMaXN0c0NoYWluIiwiT2JzZXJ2ZSIsImZpbGVzIiwicGF0aCIsImpvaW4iLCJkbyIsIngiLCJGU1Rhc2siLCJjb3B5UmVjdXJzaXZlbHkiLCJsb2dnZXIiLCJ3aXRoUHJlZml4IiwiZm9ybUdsb2JzIiwiRm9ybUdsb2JzIiwidmFsaWRhdGVHbG9icyIsInJlc29sdmVTcGVjaWZpZXJzIiwic3RhdGljUmVzb3VyY2VzRm9yUHJvZHVjdGlvbkNoYWluIiwiX19kaXJuYW1lIiwiZ2V0TG9nZ2VyIiwicmVzb3VyY2VzTnVTcGVjQ2hhaW4iLCJjb3B5QnlNYXNrcyIsInJlc291cmNlc0V4dGVybmFsQ29udmVydGVyc0NoYWluIiwiZW1wdHkiLCJjb3BpZWRFbmdpbmVzIiwiU2V0IiwiYnVpbGRDYWNoZSIsIkJ1aWxkQ2FjaGUiLCJidWlsZENhY2hlTW9kZSIsImJ1aWxkRm9ybXNDaGFpbiIsImRpcmVjdG9yeSIsInNwbGl0VG9QYXJhbGxlbENoYWlucyIsImdmdiIsImZvcm1EaXJQYXRoIiwicGF0aEV4aXN0cyIsIndhcm5pbmciLCJ2YWx1ZSIsImZvcm1TY2hlbWFzRGlyUGF0aCIsInJuZ1NjaGVtYU1hc2siLCJnZXRSbmdTY2hlbWFGaWxlbmFtZSIsImZpbGUiLCJ0cmFuc2Zvcm0iLCJmb3JtSnNvbkZpbGUiLCJyZXNvbHZlRm9ybUluZm8iLCJ1cGdyYWRlRm9ybUpzb24iLCJ1c2VMYXN0U3RhYmxlVmVyc2lvbiIsInVzZVByZXJlbGVhc2VWZXJzaW9uIiwiZmkiLCJtb2RlIiwiRm9ybUJ1aWxkTW9kZSIsIk5vcm1hbEJ1aWxkIiwiZ2VuZXJhdG9yVmVyc2lvbiIsInVuZGVmaW5lZCIsImVuZ2luZVZlcnNpb24iLCJyZXNvbHZlR2VuZXJhdG9yVmVyc2lvbiIsImVuZ2luZVNvdXJjZSIsInJlc29sdmVFbmdpbmVWZXJzaW9uIiwiYXR0YWNoIiwiU2luZ2xlVmFsdWVQcm9kdWNlciIsIk51bGxGb3JtR2VuZXJhdG9yIiwiZ2VuZXJhdG9yRmFjdG9yeSIsInVzZVZlcnNpb25Gcm9tQ2FjaGUiLCJ5IiwiZ2VuZXJhdG9yIiwiZ2V0R2VuZXJhdG9yU291cmNlS2V5IiwiZW5naW5lRmFjdG9yeSIsImhhcyIsImdldEVuZ2luZVNvdXJjZUtleSIsImFkZCIsImZvcm1Tb3VyY2VzUGF0aCIsImRlcGVuZGVuY2llc0hhc2giLCJzdXBwb3J0c0RlcGVuZGVuY2llc0V4dHJhY3Rpb24iLCJnZXRBbGxEZXBlbmRlbmNpZXNIYXNoIiwiYnVpbGRDYWNoZUV4aXN0IiwiZXhpc3RzIiwiX2ZpJGRlcGVuZGVuY2llc0hhc2giLCJsb2ciLCJnZW5lcmF0ZUZvcm0iLCJza2lwQ29kZVJlZm9ybWF0dGluZyIsInNraXBHZW5lcmF0ZWRDb2RlUmVmb3JtYXR0aW5nIiwicmVzb3VyY2VzSGFzaCIsIl9maSRkZXBlbmRlbmNpZXNIYXNoMiIsIl9maSRkZXBlbmRlbmNpZXNIYXNoMyIsImV4dHJhY3QiLCJidWlsZENhY2hlT3B0aW9ucyIsImRlcHNIYXNoIiwiY29tcGlsZUZvcm0iLCJmb3JtTmFtZSIsInRoZW1lcyIsInJlamVjdCIsIndyaXRlRm9ybU1ldGEiLCJ3cml0ZUZMYW5nTm9ybWFsaXphdGlvbkZpbGVzIiwid3JpdGVBdHRhY2htZW50UGF0aEZpbGVzIiwiQ29weUxlZ2FjeVByZWJ1aWx0UmVzb3VyY2VzIiwibW9kaWZpZXIiLCJjb250ZW50IiwicmVwbGFjZSIsIm1vZGlmeUZpbGVzQ29udGVudCIsIndhdGNoIiwibm90aWZpZXIiLCJub3RpZnkiLCJ0aXRsZSIsIm1lc3NhZ2UiLCJjbGVhbiIsImNsZWFuVGFyZ2V0RGlyZWN0b3J5Iiwic3RvcE9ic2VydmUxIiwib2JzZXJ2ZSIsInN0b3BPYnNlcnZlMiIsInN0b3BPYnNlcnZlMyIsInN0b3BPYnNlcnZlNCIsInN0b3BPYnNlcnZlNSIsIndhaXRGb3JFeGl0Iiwic3RhcnREYXRlIiwiRGF0ZSIsIm5vdyIsImN1cnJlbnRWYWx1ZSIsImNvbnNvbGUiLCJjaGFsayIsImdyZWVuQnJpZ2h0IiwidG90YWxUaW1lIiwicHJpbnRUaW1lIiwiZW1wdHlEaXIiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQ0xJQ29tbWFuZHMvQnVpbGRGb3Jtcy9SdW5CdWlsZEZvcm1zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7IGVtcHR5RGlyLCBwYXRoRXhpc3RzIH0gZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgbm90aWZpZXIgZnJvbSBcIm5vZGUtbm90aWZpZXJcIjtcblxuaW1wb3J0IHsgZW5naW5lRmFjdG9yeSB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0VuZ2luZS9BY3F1aXJlRm9ybUVuZ2luZVwiO1xuaW1wb3J0IHsgZ2V0RW5naW5lU291cmNlS2V5IH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvRW5naW5lL0VuZ2luZVNvdXJjZVwiO1xuaW1wb3J0IHsgY29tcGlsZUZvcm0gfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9Gb3JtL0NvbXBpbGVGb3JtXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZUZvcm0gfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9Gb3JtL0dlbmVyYXRlRm9ybVwiO1xuaW1wb3J0IHsgTnVsbEZvcm1HZW5lcmF0b3IgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9Gb3JtL051bGxGb3JtR2VuZXJhdG9yXCI7XG5pbXBvcnQgeyB3cml0ZUZMYW5nTm9ybWFsaXphdGlvbkZpbGVzIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvRm9ybS9Xcml0ZUZMYW5nTm9ybWFsaXphdGlvbkZpbGVzXCI7XG5pbXBvcnQgeyBGU1Rhc2sgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9GU1Rhc2tcIjtcbmltcG9ydCB7XG4gICAgZ2VuZXJhdG9yRmFjdG9yeSxcbiAgICBHZW5lcmF0b3JTb3VyY2UsXG4gICAgZ2V0R2VuZXJhdG9yU291cmNlS2V5LFxufSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9HZW5lcmF0b3IvQWNxdWlyZUZvcm1HZW5lcmF0b3JcIjtcbmltcG9ydCB7IHJlc29sdmVFbmdpbmVWZXJzaW9uLCByZXNvbHZlR2VuZXJhdG9yVmVyc2lvbiB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL1B1Ymxpc2hlZFZlcnNpb25VdGlsc1wiO1xuaW1wb3J0IHsgRm9ybUJ1aWxkTW9kZSwgcmVzb2x2ZUZvcm1JbmZvIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvUmVzb2x2ZUZvcm1JbmZvXCI7XG5pbXBvcnQgeyB3cml0ZUZvcm1NZXRhIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvV3JpdGVGb3JtTWV0YVwiO1xuaW1wb3J0IHsgQ29uc29sZUFwcGxpY2F0aW9uQ29udGV4dCB9IGZyb20gXCIuLi8uLi9Db21tb25zL0NvbnNvbGVBcHBsaWNhdGlvbi9Db25zb2xlQXBwbGljYXRpb25Db250ZXh0XCI7XG5pbXBvcnQgeyBGb3JtR2xvYnMgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9Gb3JtR2xvYnNVdGlsc1wiO1xuaW1wb3J0IHsgSUxvZ2dlciB9IGZyb20gXCIuLi8uLi9Db21tb25zL0xvZ2dpbmcvSUxvZ2dlclwiO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvTG9nZ2luZy9TdGF0aWNMb2dnZXJcIjtcbmltcG9ydCB7IE9ic2VydmUgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9UYXNrc0NvcmUvT2JzZXJ2ZVwiO1xuaW1wb3J0IHsgU2luZ2xlVmFsdWVQcm9kdWNlciB9IGZyb20gXCIuLi8uLi9Db21tb25zL1Rhc2tzQ29yZS9TaW5nbGVWYWx1ZVByb2R1Y2VyXCI7XG5pbXBvcnQgeyBwcmludFRpbWUgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9UaW1pbmdVdGlsc1wiO1xuaW1wb3J0IHsgQnVpbGRDYWNoZSB9IGZyb20gXCIuLi8uLi9Gb3JtV2VicGFja0NvbmZpZ3VyYXRpb24vQ2FjaGVBc3NldHNQbHVnaW5cIjtcbmltcG9ydCB7IHJlamVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB7IHdyaXRlQXR0YWNobWVudFBhdGhGaWxlcyB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0Zvcm0vV3JpdGVBdHRhY2htZW50UGF0aEZpbGVzXCI7XG5pbXBvcnQgeyBDaGFpbmFibGVWYWx1ZVByb2R1Y2VyIH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvVGFza3NDb3JlL0NoYWluYWJsZVZhbHVlUHJvZHVjZXJcIjtcbmltcG9ydCB7IEVtcHR5UHJvZHVjZXIgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9UYXNrc0NvcmUvRW1wdHlQcm9kdWNlclwiO1xuaW1wb3J0IHsgZ2V0Um5nU2NoZW1hRmlsZW5hbWUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL2dldFJuZ1NjaGVtYUZpbGVuYW1lXCI7XG5cbmltcG9ydCB7IEJ1aWxkRm9ybXNPcHRpb25zIH0gZnJvbSBcIi4vQnVpbGRGb3Jtc09wdGlvbnNcIjtcblxuZnVuY3Rpb24gZ2V0R2VuZXJhdG9yVmVyc2lvbihnZW5lcmF0b3JTb3VyY2U6IEdlbmVyYXRvclNvdXJjZSk6IHN0cmluZyB7XG4gICAgaWYgKGdlbmVyYXRvclNvdXJjZS50eXBlID09PSBcIlB1Ymxpc2hlZEdlbmVyYXRvclwiKSB7XG4gICAgICAgIHJldHVybiBnZW5lcmF0b3JTb3VyY2UudmVyc2lvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkUHJvZ3JhbVN0YXRlXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkJ1aWxkRm9ybXMoXG4gICAgY29udGV4dDogQ29uc29sZUFwcGxpY2F0aW9uQ29udGV4dCxcbiAgICBvcHRpb25zOiBCdWlsZEZvcm1zT3B0aW9ucyxcbiAgICBmYXJtRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgcmVzb3VyY2VzRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgZW5naW5lRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgY2FuZHlNb2R1bGVzRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgaGxGYXJtRGlyZWN0b3J5UGF0aDogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBidWlsZE9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgY29uc3QgcGlja0xpc3RzQ2hhaW4gPSBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmYXJtRGlyZWN0b3J5LCBcInBpY2tsaXN0c1wiKSwgXCIqLmpzb25cIikuZG8oeCA9PlxuICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KGNvbnRleHQubG9nZ2VyLndpdGhQcmVmaXgoXCJQSUNLTElTVFNcIiksIHgsIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwicGlja2xpc3RzXCIpKVxuICAgICk7XG5cbiAgICBjb25zdCBmb3JtR2xvYnMgPSBhd2FpdCBGb3JtR2xvYnMudmFsaWRhdGVHbG9icyhcbiAgICAgICAgYXdhaXQgRm9ybUdsb2JzLnJlc29sdmVTcGVjaWZpZXJzKGJ1aWxkT3B0aW9ucy5mb3JtR2xvYnMsIGZhcm1EaXJlY3RvcnkpLFxuICAgICAgICBmYXJtRGlyZWN0b3J5XG4gICAgKTtcblxuICAgIGNvbnN0IHN0YXRpY1Jlc291cmNlc0ZvclByb2R1Y3Rpb25DaGFpbiA9IE9ic2VydmUuZmlsZXMoXG4gICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi5cIiwgXCIuLlwiLCBcIlN0YXRpY0ZpbGVzRm9yUHJvZHVjdGlvblJlc291cmNlc0RpclwiKSxcbiAgICAgICAgXCIqLmpzXCIsXG4gICAgICAgIFwiKi5qcy5tYXBcIlxuICAgICkuZG8oeCA9PlxuICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJTVEFUSUNTXCIpLCB4LCBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcInB1YmxpY1wiLCBcInNjcmlwdHNcIikpXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc291cmNlc051U3BlY0NoYWluID0gT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmFybURpcmVjdG9yeSksIFwiKi5udXNwZWNcIikuZG8oeCA9PlxuICAgICAgICBGU1Rhc2suY29weUJ5TWFza3MoZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIk5VU1BFQ1wiKSwgeCwgW1wiKi5udXNwZWNcIl0sIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnkpKVxuICAgICk7XG5cbiAgICAvKiog0JrQvtC90LLQtdGA0YLQtdGA0Ysg0L7Qv9C40YHQuCDQtNC70Y8g0YTQvtGA0LwsINC60L7RgtC+0YDRi9C1INC/0L7QutCwINC90LUg0YDQtdCw0LvQuNC30L7QstCw0L3RiyDQvdCwINC60LXQvdC00LgsINGB0LDQvNCwINC80LXRhdCw0L3QuNC60LAg0L7Qv9C40YHQuCDQv9C10YDQtdC90LXRgdC10L3QsCDQsiDRhNC+0YDQvNGLINCyINC60LXQvdC00Lgg0LDQv9C4LCDQv9C+0Y3RgtC+0LzRgyDQvtC90Lgg0LTQvtC70LbQvdGLINCx0YvRgtGMINCyIGNhbmR5LnJlc291cmNlc1xuICAgICAqICDQoNC10LDQu9C40LfRg9C10YLRgdGPINGC0L7Qu9GM0LrQviDQv9GA0Lgg0L7QsdGJ0LXQvCDQsdC40LvQtNC1INGE0L7RgNC8OiBjYW5keSBidWlsZCAqXG4gICAgICogKi9cbiAgICBsZXQgcmVzb3VyY2VzRXh0ZXJuYWxDb252ZXJ0ZXJzQ2hhaW46IENoYWluYWJsZVZhbHVlUHJvZHVjZXI8c3RyaW5nPiB8IEVtcHR5UHJvZHVjZXIgPSBPYnNlcnZlLmVtcHR5KCk7XG4gICAgaWYgKGZvcm1HbG9ic1swXSA9PT0gXCIqXCIpIHtcbiAgICAgICAgcmVzb3VyY2VzRXh0ZXJuYWxDb252ZXJ0ZXJzQ2hhaW4gPSBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmYXJtRGlyZWN0b3J5LCBcImV4dGVybmFsQ29udmVydGVyc1wiKSwgXCIqLnhzbHRcIikuZG8oXG4gICAgICAgICAgICB4ID0+XG4gICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIkVYVEVSTkFMLUNPTlZFUlRFUlNcIiksXG4gICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwiY29udmVydGVyc1wiKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb3BpZWRFbmdpbmVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBjb25zdCBidWlsZENhY2hlID0gbmV3IEJ1aWxkQ2FjaGUoZmFybURpcmVjdG9yeSwgb3B0aW9ucy5idWlsZENhY2hlTW9kZSk7XG4gICAgY29uc3QgYnVpbGRGb3Jtc0NoYWluID0gT2JzZXJ2ZS5kaXJlY3RvcnkocGF0aC5qb2luKGZhcm1EaXJlY3RvcnksIFwiZm9ybXNcIiksIGZvcm1HbG9icykuc3BsaXRUb1BhcmFsbGVsQ2hhaW5zKFxuICAgICAgICB4ID0+IHgsXG4gICAgICAgIHggPT4geCxcbiAgICAgICAgYXN5bmMgZ2Z2ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1EaXJQYXRoID0gcGF0aC5qb2luKGZhcm1EaXJlY3RvcnksIFwiZm9ybXNcIiwgZ2Z2KTtcblxuICAgICAgICAgICAgaWYgKCEoYXdhaXQgcGF0aEV4aXN0cyhwYXRoLmpvaW4oZm9ybURpclBhdGgsIFwiZm9ybS5qc29uXCIpKSkpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxvZ2dlci53YXJuaW5nKFxuICAgICAgICAgICAgICAgICAgICBgRm9ybSAke2dmdn0gZG9lcyBub3QgaGF2ZSBmb3JtLmpzb24gZmlsZS4gVG8gaW5jbHVkZSB0aGlzIGZvcm0gdG8gYnVpbGQgcHJvY2VzcyByZXN0YXJ0IGJ1aWxkYFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmUudmFsdWUoe30pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZm9ybVNjaGVtYXNEaXJQYXRoID0gcGF0aC5qb2luKGZhcm1EaXJlY3RvcnksIFwiZm9ybXNcIiwgZ2Z2LCBcInNjaGVtYXNcIik7XG4gICAgICAgICAgICBjb25zdCBybmdTY2hlbWFNYXNrID0gYCoke2dldFJuZ1NjaGVtYUZpbGVuYW1lKGZvcm1TY2hlbWFzRGlyUGF0aCwgZ2Z2KX1gO1xuXG4gICAgICAgICAgICByZXR1cm4gT2JzZXJ2ZS5maWxlKHBhdGguam9pbihmb3JtRGlyUGF0aCwgXCJmb3JtLmpzb25cIikpXG4gICAgICAgICAgICAgICAgLnRyYW5zZm9ybShmb3JtSnNvbkZpbGUgPT5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUZvcm1JbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUpzb25GaWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURpclBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmdpbmVEaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmxvZ2dlci53aXRoUHJlZml4KGBGT1JNOiR7Z2Z2fWApLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51cGdyYWRlRm9ybUpzb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnVzZUxhc3RTdGFibGVWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51c2VQcmVyZWxlYXNlVmVyc2lvblxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0oYXN5bmMgZmkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmkubW9kZSA9PT0gRm9ybUJ1aWxkTW9kZS5Ob3JtYWxCdWlsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpLmdlbmVyYXRvclZlcnNpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZ2VuZXJhdG9yVmVyc2lvbiBpcyBub3QgZGVmaW5lZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaS5lbmdpbmVWZXJzaW9uID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImVuZ2luZVZlcnNpb24gaXMgbm90IGRlZmluZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmZpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvclNvdXJjZTogYXdhaXQgcmVzb2x2ZUdlbmVyYXRvclZlcnNpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpLmdlbmVyYXRvclZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubG9nZ2VyLndpdGhQcmVmaXgoZ2Z2KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5naW5lU291cmNlOiBhd2FpdCByZXNvbHZlRW5naW5lVmVyc2lvbihmaS5lbmdpbmVWZXJzaW9uLCBjb250ZXh0LmxvZ2dlci53aXRoUHJlZml4KGdmdikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZmksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yU291cmNlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5naW5lU291cmNlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuYXR0YWNoKFxuICAgICAgICAgICAgICAgICAgICBhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmkuZ2VuZXJhdG9yU291cmNlID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2luZ2xlVmFsdWVQcm9kdWNlcihuZXcgTnVsbEZvcm1HZW5lcmF0b3IoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3JGYWN0b3J5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaS5nZW5lcmF0b3JTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmR5TW9kdWxlc0RpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51c2VWZXJzaW9uRnJvbUNhY2hlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMgKGZpLCB5KSA9PiAoeyAuLi5maSwgZ2VuZXJhdG9yOiB5IH0pLFxuICAgICAgICAgICAgICAgICAgICBhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZ2VuZXJhdG9yU291cmNlICE9IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZ2V0R2VuZXJhdG9yU291cmNlS2V5KGZpLmdlbmVyYXRvclNvdXJjZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiTnVsbEZvcm1HZW5lcmF0b3JcIlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKFxuICAgICAgICAgICAgICAgICAgICBhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmkuZW5naW5lU291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNpbmdsZVZhbHVlUHJvZHVjZXIoXCJOdWxsRW5naW5lXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVuZ2luZUZhY3RvcnkoZmkuZW5naW5lU291cmNlLCBjYW5keU1vZHVsZXNEaXJlY3RvcnksIG9wdGlvbnMudXNlVmVyc2lvbkZyb21DYWNoZSkuZG8oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgeCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29waWVkRW5naW5lcy5oYXMoZ2V0RW5naW5lU291cmNlS2V5KGZpLmVuZ2luZVNvdXJjZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJFTkdJTkVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcInB1YmxpY1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcGllZEVuZ2luZXMuYWRkKGdldEVuZ2luZVNvdXJjZUtleShmaS5lbmdpbmVTb3VyY2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIGZpID0+IGZpLFxuICAgICAgICAgICAgICAgICAgICBhc3luYyBmaSA9PiAoZmkuZW5naW5lU291cmNlICE9IHVuZGVmaW5lZCA/IGdldEVuZ2luZVNvdXJjZUtleShmaS5lbmdpbmVTb3VyY2UpIDogXCJOdWxsRW5naW5lXCIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmZvcm1Tb3VyY2VzUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLi4vLi4vY29udHJvbHMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIuLi8uLi94c2x0VGVtcGxhdGVzLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLi4vLi4vanNIZWxwZXJzLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic2NoZW1hcy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInN1Z2FyLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY29udHJvbHMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhdXRvY2FsYy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhlbHBlcnMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ2YWxpZGF0aW9ucy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImxvY2FsaXphdGlvbi8qKi8qXCJcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAudHJhbnNmb3JtKGFzeW5jIGZpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlcGVuZGVuY2llc0hhc2g6IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpLm1vZGUgIT09IEZvcm1CdWlsZE1vZGUuTm9ybWFsQnVpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZmksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzSGFzaDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoYXdhaXQgZmkuZ2VuZXJhdG9yLnN1cHBvcnRzRGVwZW5kZW5jaWVzRXh0cmFjdGlvbigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXNIYXNoID0gYXdhaXQgZmkuZ2VuZXJhdG9yLmdldEFsbERlcGVuZGVuY2llc0hhc2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURpclBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBobEZhcm1EaXJlY3RvcnlQYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5maSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llc0hhc2g6IGRlcGVuZGVuY2llc0hhc2gsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudHJhbnNmb3JtKGFzeW5jIGZpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJ1aWxkQ2FjaGVFeGlzdDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmkuZGVwZW5kZW5jaWVzSGFzaCAhPSB1bmRlZmluZWQgJiYgZmkuZ2VuZXJhdG9yU291cmNlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDYWNoZUV4aXN0ID0gYXdhaXQgYnVpbGRDYWNoZS5leGlzdHMoZmkuZ2VuZXJhdG9yU291cmNlLCBnZnYsIGZpLmRlcGVuZGVuY2llc0hhc2gpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5maSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ2FjaGVFeGlzdDogYnVpbGRDYWNoZUV4aXN0LFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmRvKGFzeW5jIGZpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpLmdlbmVyYXRvclNvdXJjZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpLmJ1aWxkQ2FjaGVFeGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5sb2dnZXIud2l0aFByZWZpeChgR0VORVJBVEU6JHtnZnZ9YCkubG9nKFwiU2tpcHBlZCBkdWUgYnVpbGQgY2FjaGUgZXhpdHNcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlRm9ybShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmZvcm1Tb3VyY2VzUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhcm1EaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBobEZhcm1EaXJlY3RvcnlQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZ2VuZXJhdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBDb2RlUmVmb3JtYXR0aW5nOiBvcHRpb25zLnNraXBHZW5lcmF0ZWRDb2RlUmVmb3JtYXR0aW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc0hhc2g6IGZpLmRlcGVuZGVuY2llc0hhc2ggPz8gXCJVbmRlZmluZWRSZXNvdXJjZXNIYXNoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+IE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZvcm1EaXJQYXRoLCBcImZvcm1cIiksIFwiKiovKlwiKSlcbiAgICAgICAgICAgICAgICAuZG8oYXN5bmMgZmkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmkuZ2VuZXJhdG9yU291cmNlID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaS5kZXBlbmRlbmNpZXNIYXNoICE9IHVuZGVmaW5lZCAmJiBmaS5idWlsZENhY2hlRXhpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubG9nZ2VyLndpdGhQcmVmaXgoYENPTVBJTEU6JHtnZnZ9YCkubG9nKFwiU2tpcHBlZCBkdWUgYnVpbGQgY2FjaGUgZXhpc3RzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgYnVpbGRDYWNoZS5leHRyYWN0KGZpLmdlbmVyYXRvclNvdXJjZSwgZ2Z2LCBmaS5kZXBlbmRlbmNpZXNIYXNoLCByZXNvdXJjZXNEaXJlY3RvcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1aWxkQ2FjaGVPcHRpb25zID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmRlcGVuZGVuY2llc0hhc2ggIT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwc0hhc2g6IGZpLmRlcGVuZGVuY2llc0hhc2gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yVmVyc2lvbjogZ2V0R2VuZXJhdG9yVmVyc2lvbihmaS5nZW5lcmF0b3JTb3VyY2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdmdjogZ2Z2LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU6IG9wdGlvbnMuYnVpbGRDYWNoZU1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFybURpcmVjdG9yeTogZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb21waWxlRm9ybShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmZvcm1OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkudGhlbWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc0RpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmRlcGVuZGVuY2llc0hhc2ggPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhpcyB2ZXJzaW9uIG9mIGdlbmVyYXRvciBpcyBub3Qgc3VwcG9ydGVkIGR1ZSB0byBkZXBlbmRlbmNpZXMgZXh0cmFjdGlvbiBpcyBub3Qgc3VwcG9ydGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENhY2hlT3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHdyaXRlRm9ybU1ldGEoXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNEaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBnZnYsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5lbmdpbmVTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5kZXBlbmRlbmNpZXNIYXNoID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoaXMgdmVyc2lvbiBvZiBnZW5lcmF0b3IgaXMgbm90IHN1cHBvcnRlZCBkdWUgdG8gZGVwZW5kZW5jaWVzIGV4dHJhY3Rpb24gaXMgbm90IHN1cHBvcnRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLnRoZW1lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ2FjaGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENhY2hlT3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmRvKGFzeW5jIGZpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpLmdlbmVyYXRvclNvdXJjZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBidWlsZENhY2hlT3B0aW9ucyA9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5kZXBlbmRlbmNpZXNIYXNoICE9IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHNIYXNoOiBmaS5kZXBlbmRlbmNpZXNIYXNoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvclZlcnNpb246IGdldEdlbmVyYXRvclZlcnNpb24oZmkuZ2VuZXJhdG9yU291cmNlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZnY6IGdmdixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlOiBvcHRpb25zLmJ1aWxkQ2FjaGVNb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhcm1EaXJlY3Rvcnk6IGZhcm1EaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHdyaXRlRkxhbmdOb3JtYWxpemF0aW9uRmlsZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5mb3JtTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhcm1EaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNEaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENhY2hlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDYWNoZU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5idWlsZENhY2hlRXhpc3RcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgd3JpdGVBdHRhY2htZW50UGF0aEZpbGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZm9ybU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ2FjaGVPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpLm1vZGUgPT09IEZvcm1CdWlsZE1vZGUuQ29weUxlZ2FjeVByZWJ1aWx0UmVzb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcImxlZ2FjeS1wcmVidWlsdFwiKSwgXCIqXCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiTEVHQUNZLVBSRUJVSUxUXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNpbmdsZVZhbHVlUHJvZHVjZXIoXCJcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcInNjaGVtYXNcIiksIHJuZ1NjaGVtYU1hc2spLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIlNDSEVNQVNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcInNjaGVtYXNcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJjb252ZXJ0ZXJzXCIpLCBcIipcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiQ09OVkVSVEVSU1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwiY29udmVydGVyc1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcIm1lcmdlcnNcIiksIFwiKlwiKS5kbyh4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJNRVJHRVJTXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJtZXJnZXJzXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZGlmaWVyID0gKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudC5yZXBsYWNlKC88eDppbmNsdWRlIGhyZWY9XCJbLi9dKy9nLCAnPHg6aW5jbHVkZSBocmVmPVwiJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwiY29udmVydGVyc1wiKSwgXCIqXCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5tb2RpZnlGaWxlc0NvbnRlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIkZJWC1YU0xULUlOQ0xVREVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcImNvbnZlcnRlcnNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIqKi8qLnhzbHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwiLi5cIiwgXCIuLlwiLCBcInhzbHRUZW1wbGF0ZXNcIiksIFwiKlwiKS5kbyh4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJYU0xULVRFTVBMQVRFU1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwiY29udmVydGVyc1wiLCBcInhzbHRUZW1wbGF0ZXNcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJub3JtYWxpemVcIiksIFwiKi54bWxcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiTk9STUFMSVpFXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJub3JtYWxpemVcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJwYXRjaFwiKSwgXCIqLnhzbHRcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiUEFUQ0hcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcInBhdGNoXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwibWFwXCIpLCBcIioueG1sXCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIk1BUFwiKSwgeCwgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJtYXBcIikpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwidW5tYXBcIiksIFwiKi54bWxcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiVU5NQVBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcInVubWFwXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmRvKGFzeW5jIGZpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJ1aWxkT3B0aW9ucy53YXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIubm90aWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYCR7ZmkuZm9ybU5hbWV9OiDRgdCx0L7RgNC60LAg0LfQsNCy0LXRgNGI0LXQvdCwYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgRW5naW5lOiAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaS5lbmdpbmVTb3VyY2UgPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiW05vRW5naW5lXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZpLmVuZ2luZVNvdXJjZS50eXBlID09PSBcIkxvY2FsRW5naW5lU291cmNlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwibG9jYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmaS5lbmdpbmVTb3VyY2UudmVyc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBpZiAoYnVpbGRPcHRpb25zLndhdGNoKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmNsZWFuKSB7XG4gICAgICAgICAgICBhd2FpdCBjbGVhblRhcmdldERpcmVjdG9yeShyZXNvdXJjZXNEaXJlY3RvcnksIGNvbnRleHQubG9nZ2VyKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdG9wT2JzZXJ2ZTEgPSBhd2FpdCBwaWNrTGlzdHNDaGFpbi5vYnNlcnZlKCk7XG4gICAgICAgIGNvbnN0IHN0b3BPYnNlcnZlMiA9IGF3YWl0IGJ1aWxkRm9ybXNDaGFpbi5vYnNlcnZlKCk7XG4gICAgICAgIGNvbnN0IHN0b3BPYnNlcnZlMyA9IGF3YWl0IHN0YXRpY1Jlc291cmNlc0ZvclByb2R1Y3Rpb25DaGFpbi5vYnNlcnZlKCk7XG4gICAgICAgIGNvbnN0IHN0b3BPYnNlcnZlNCA9IGF3YWl0IHJlc291cmNlc051U3BlY0NoYWluLm9ic2VydmUoKTtcbiAgICAgICAgY29uc3Qgc3RvcE9ic2VydmU1ID0gYXdhaXQgcmVzb3VyY2VzRXh0ZXJuYWxDb252ZXJ0ZXJzQ2hhaW4ub2JzZXJ2ZSgpO1xuICAgICAgICBhd2FpdCBjb250ZXh0LndhaXRGb3JFeGl0KCk7XG4gICAgICAgIGlmIChzdG9wT2JzZXJ2ZTMgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhd2FpdCBzdG9wT2JzZXJ2ZTMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RvcE9ic2VydmU0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXdhaXQgc3RvcE9ic2VydmU0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0b3BPYnNlcnZlNSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IHN0b3BPYnNlcnZlNSgpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHN0b3BPYnNlcnZlMigpO1xuICAgICAgICBhd2FpdCBzdG9wT2JzZXJ2ZTEoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdGFydERhdGUgPSBEYXRlLm5vdygpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuY2xlYW4pIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBjbGVhblRhcmdldERpcmVjdG9yeShyZXNvdXJjZXNEaXJlY3RvcnksIGNvbnRleHQubG9nZ2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHBpY2tMaXN0c0NoYWluLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIGF3YWl0IHN0YXRpY1Jlc291cmNlc0ZvclByb2R1Y3Rpb25DaGFpbi5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBhd2FpdCByZXNvdXJjZXNOdVNwZWNDaGFpbi5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBhd2FpdCByZXNvdXJjZXNFeHRlcm5hbENvbnZlcnRlcnNDaGFpbi5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBhd2FpdCBidWlsZEZvcm1zQ2hhaW4uY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuQnJpZ2h0KFwiQnVpbGQgc3VjY2Vzc1wiKSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBjb25zdCB0b3RhbFRpbWUgPSBEYXRlLm5vdygpIC0gc3RhcnREYXRlO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUb3RhbCB0aW1lOiAke3ByaW50VGltZSh0b3RhbFRpbWUpfWApO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjbGVhblRhcmdldERpcmVjdG9yeShyZXNvdXJjZXNEaXJlY3Rvcnk6IHN0cmluZywgbG9nZ2VyOiBJTG9nZ2VyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLmxvZyhcIkNsZWFuaW5nIHJlc291cmNlIGRpcmVjdG9yeS4gXCIgKyByZXNvdXJjZXNEaXJlY3RvcnkpO1xuICAgIGF3YWl0IGVtcHR5RGlyKHJlc291cmNlc0RpcmVjdG9yeSk7XG4gICAgbG9nZ2VyLmxvZyhcIlJlc291cmNlIGRpcmVjdG9yeSBjbGVhblwiKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLE1BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFFBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLGFBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFJLGtCQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxhQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxZQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxhQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxrQkFBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsNkJBQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFV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