@tricoteuses/assemblee 1.0.1 → 1.0.2

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.
@@ -383,7 +383,7 @@ function reorganizeData(options) {
383
383
  encoding: "utf8"
384
384
  });
385
385
 
386
- var mandatOriginal = validateRawData ? _acteurs_et_organes.Convert.toMandat(mandatOriginalJson) : JSON.parse(mandatOriginalJson);
386
+ var mandatOriginal = validateRawData ? _acteurs_et_organes.Convert.toMandatWrapper(mandatOriginalJson) : JSON.parse(mandatOriginalJson);
387
387
  var mandat = mandatOriginal.mandat;
388
388
  var _mandats = mandatsByActeurUid[mandat.acteurRef];
389
389
 
@@ -1130,4 +1130,4 @@ if (process.argv[1].endsWith("reorganize_data.ts")) {
1130
1130
  process.exit(0);
1131
1131
  }
1132
1132
  }
1133
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvcHRpb25zRGVmaW5pdGlvbnMiLCJhbGlhcyIsImhlbHAiLCJuYW1lIiwidHlwZSIsIlN0cmluZyIsIkJvb2xlYW4iLCJkZWZhdWx0VmFsdWUiLCJtdWx0aXBsZSIsImRlZmF1bHRPcHRpb24iLCJjb21taXRBbmRQdXNoIiwicmVwb3NpdG9yeURpciIsImNvbW1pdCIsInJlbW90ZXMiLCJlcnJvciIsImV4ZWNTeW5jIiwiY3dkIiwiZW52IiwicHJvY2VzcyIsImVuY29kaW5nIiwic3RkaW8iLCJjaGlsZFByb2Nlc3MiLCJzdGRlcnIiLCJ0ZXN0Iiwic3Rkb3V0IiwiY29uc29sZSIsIm91dHB1dCIsInJlbW90ZSIsInJlb3JnYW5pemVEYXRhIiwib3B0aW9ucyIsImRhdGFEaXIiLCJEYXRlIiwicHJvdG90eXBlIiwidG9KU09OIiwicGF0Y2hlZERhdGVUb0pzb24iLCJnaXRHcm91cFVybCIsImNsb25lIiwidHJpbSIsInJlcGxhY2UiLCJ1bmRlZmluZWQiLCJ2YWxpZGF0ZVJhd0RhdGEiLCJjYXRlZ29yaWVzIiwibWFwIiwiZGF0YXNldE5hbWUiLCJhc3NlcnQiLCJub3RTdHJpY3RFcXVhbCIsIkVuYWJsZWREYXRhc2V0cyIsImVuYWJsZWREYXRhc2V0cyIsInJlZHVjZSIsIk5vbmUiLCJBY3RldXJzRXRPcmdhbmVzIiwiZGF0YXNldHMiLCJhY3RldXJzRXRPcmdhbmVzIiwiZGF0YXNldCIsIm9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgiLCJwYXRoIiwiam9pbiIsImZpbGVuYW1lIiwic2lsZW50IiwibG9nIiwiYmFzZW5hbWUiLCJkYXRhc2V0UmVvcmdhbml6ZWREaXIiLCJmcyIsImVuc3VyZURpclN5bmMiLCJyZWFkZGlyU3luYyIsInJlbW92ZVN5bmMiLCJhY3RldXJzUmVvcmdhbml6ZWREaXIiLCJta2RpclN5bmMiLCJvcmdhbmVzUmVvcmdhbml6ZWREaXIiLCJzdHJ1Y3R1cmUiLCJEYXRhc2V0U3RydWN0dXJlIiwiU2luZ2xlRmlsZSIsIm9yaWdpbmFsSnNvbiIsInJlYWRGaWxlU3luYyIsIm9yaWdpbmFsRGF0YSIsIkFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0IiwidG9BY3RldXJzRXRPcmdhbmVzIiwiSlNPTiIsInBhcnNlIiwiYWN0ZXVycyIsImFjdGV1ciIsInJlb3JnYW5pemVkSnNvbkZpbGVQYXRoIiwidWlkIiwid3JpdGVGaWxlU3luYyIsInN0cmluZ2lmeSIsIm9yZ2FuZXMiLCJvcmdhbmUiLCJTZWdtZW50ZWRGaWxlcyIsImRlcG9ydHNCeUFjdGV1clVpZCIsImV4aXN0c1N5bmMiLCJ3YWxrRGlyIiwiZGVwb3J0U3BsaXRQYXRoIiwiZGVwb3J0RmlsZW5hbWUiLCJsZW5ndGgiLCJlbmRzV2l0aCIsImRlcG9ydE9yaWdpbmFsRmlsZVBhdGgiLCJ2ZXJib3NlIiwiZGVwb3J0T3JpZ2luYWxKc29uIiwiZGVwb3J0T3JpZ2luYWwiLCJ0b0RlcG9ydCIsImRlcG9ydCIsImRlcG9ydHMiLCJhY3RldXJSZWYiLCJwdXNoIiwiT2JqZWN0IiwidmFsdWVzIiwic29ydCIsImEiLCJiIiwibG9jYWxlQ29tcGFyZSIsIm1hbmRhdHNCeUFjdGV1clVpZCIsIm1hbmRhdFNwbGl0UGF0aCIsIm1hbmRhdEZpbGVuYW1lIiwibWFuZGF0T3JpZ2luYWxGaWxlUGF0aCIsIm1hbmRhdE9yaWdpbmFsSnNvbiIsIm1hbmRhdE9yaWdpbmFsIiwidG9NYW5kYXQiLCJtYW5kYXQiLCJtYW5kYXRzIiwiYWN0ZXVyU3BsaXRQYXRoIiwiYWN0ZXVyRmlsZW5hbWUiLCJhY3RldXJPcmlnaW5hbEZpbGVQYXRoIiwiYWN0ZXVyT3JpZ2luYWxKc29uIiwiYWN0ZXVyT3JpZ2luYWwiLCJ0b0FjdGV1ciIsImFjdGV1clVpZCIsInN0cmljdEVxdWFsIiwiYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJvcmdhbmVTcGxpdFBhdGgiLCJvcmdhbmVGaWxlbmFtZSIsIm9yZ2FuZU9yaWdpbmFsRmlsZVBhdGgiLCJvcmdhbmVPcmlnaW5hbEpzb24iLCJvcmdhbmVPcmlnaW5hbCIsInRvT3JnYW5lIiwib3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJBZ2VuZGFzIiwiYWdlbmRhcyIsIkFnZW5kYXNSYXdDb252ZXJ0IiwidG9BZ2VuZGFzIiwicmV1bmlvbnMiLCJyZXVuaW9uIiwid3JpdGVSZXVuaW9uUmVvcmdhbml6ZWRKc29uIiwicmV1bmlvblNwbGl0UGF0aCIsInJldW5pb25GaWxlbmFtZSIsInJldW5pb25PcmlnaW5hbEZpbGVQYXRoIiwicmV1bmlvbk9yaWdpbmFsSnNvbiIsInJldW5pb25PcmlnaW5hbCIsInRvUmV1bmlvbiIsIkFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudHMiLCJBbWVuZGVtZW50c1Jhd0NvbnZlcnQiLCJ0b0FtZW5kZW1lbnRzIiwidGV4dGVzRXRBbWVuZGVtZW50cyIsInRleHRlbGVnIiwidGV4dGVMZWdpc2xhdGlmIiwiYW1lbmRlbWVudCIsIndyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbiIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aCIsImFtZW5kZW1lbnRPcmlnaW5hbEpzb24iLCJhbWVuZGVtZW50T3JpZ2luYWwiLCJ0b0FtZW5kZW1lbnRXcmFwcGVyIiwiRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb2N1bWVudHNEaXIiLCJkb3NzaWVyc0RpciIsIkRvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0IiwidG9Eb3NzaWVyc0xlZ2lzbGF0aWZzIiwidGV4dGVzTGVnaXNsYXRpZnMiLCJkb2N1bWVudCIsIndyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24iLCJkb3NzaWVyIiwiZG9zc2llclBhcmxlbWVudGFpcmUiLCJ3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uIiwiZG9jdW1lbnRTcGxpdFBhdGgiLCJkb2N1bWVudEZpbGVuYW1lIiwiZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoIiwiZG9jdW1lbnRPcmlnaW5hbEpzb24iLCJkb2N1bWVudE9yaWdpbmFsIiwidG9Eb2N1bWVudCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbCIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJTY3J1dGlucyIsInNjcnV0aW5zIiwiU2NydXRpbnNSYXdDb252ZXJ0IiwidG9TY3J1dGlucyIsInNjcnV0aW4iLCJ3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24iLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpbk9yaWdpbmFsRmlsZVBhdGgiLCJzY3J1dGluT3JpZ2luYWxKc29uIiwic2NydXRpbk9yaWdpbmFsIiwidG9TY3J1dGluV3JhcHBlciIsImV4aXN0aW5nRGF0ZVRvSnNvbiIsInVpZFRleHRlTGVnaXNsYXRpZiIsInRleHRlTGVnaXNsYXRpZlJlZiIsInRleHRlTGVnaXNsYXRpZkRpciIsInBhdGhGcm9tRG9jdW1lbnRVaWQiLCJwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkIiwicmV1bmlvbnNEaXIiLCJwYXRoRnJvbVJldW5pb25VaWQiLCJzY3J1dGluc0RpciIsInBhdGhGcm9tU2NydXRpblVpZCIsImFyZ3YiLCJjb21tYW5kTGluZUFyZ3MiLCJleGl0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvcmVvcmdhbml6ZV9kYXRhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgeyBDaGlsZFByb2Nlc3MsIGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmltcG9ydCB7IGRhdGFzZXRzLCBEYXRhc2V0U3RydWN0dXJlLCBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi4vZGF0YXNldHNcIlxuaW1wb3J0IHsgZXhpc3RpbmdEYXRlVG9Kc29uLCBwYXRjaGVkRGF0ZVRvSnNvbiB9IGZyb20gXCIuLi9kYXRlc1wiXG5pbXBvcnQgeyB3YWxrRGlyIH0gZnJvbSBcIi4uL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQge1xuICBwYXRoRnJvbURvY3VtZW50VWlkLFxuICBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkLFxuICBwYXRoRnJvbVJldW5pb25VaWQsXG4gIHBhdGhGcm9tU2NydXRpblVpZCxcbn0gZnJvbSBcIi4uL2xvYWRlcnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWdlbmRhc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FnZW5kYXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9zY3J1dGluc1wiXG5cbmNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAge1xuICAgIGFsaWFzOiBcIkNcIixcbiAgICBoZWxwOiBcImNsb25lIHJlcG9zaXRvcmllcyBmcm9tIGdpdmVuIGdyb3VwIChvciBvcmdhbml6YXRpb24pIGdpdCBVUkxcIixcbiAgICBuYW1lOiBcImNsb25lXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiY1wiLFxuICAgIGhlbHA6IFwiY29tbWl0IHNwbGl0IGZpbGVzXCIsXG4gICAgbmFtZTogXCJjb21taXRcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwia1wiLFxuICAgIGRlZmF1bHRWYWx1ZTogW1wiQWxsXCJdLFxuICAgIGhlbHA6IFwiY2F0ZWdvcmllcyBvZiBkYXRhc2V0cyB0byByZW9yZ2FuaXplXCIsXG4gICAgbXVsdGlwbGU6IHRydWUsXG4gICAgbmFtZTogXCJjYXRlZ29yaWVzXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiclwiLFxuICAgIGhlbHA6IFwicHVzaCBjb21taXQgdG8gZ2l2ZW4gcmVtb3RlXCIsXG4gICAgbXVsdGlwbGU6IHRydWUsXG4gICAgbmFtZTogXCJyZW1vdGVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJzXCIsXG4gICAgaGVscDogXCJkb24ndCBsb2cgYW55dGhpbmdcIixcbiAgICBuYW1lOiBcInNpbGVudFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJWXCIsXG4gICAgaGVscDogXCJkb24ndCB2YWxpZGF0ZSByYXcgZGF0YVwiLFxuICAgIG5hbWU6IFwibm8tdmFsaWRhdGUtcmF3XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInZcIixcbiAgICBoZWxwOiBcInZlcmJvc2UgbG9nc1wiLFxuICAgIG5hbWU6IFwidmVyYm9zZVwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgIGhlbHA6IFwiZGlyZWN0b3J5IGNvbnRhaW5pbmcgQXNzZW1ibMOpZSBvcGVuIGRhdGEgZmlsZXNcIixcbiAgICBuYW1lOiBcImRhdGFEaXJcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG5dXG5cbmZ1bmN0aW9uIGNvbW1pdEFuZFB1c2goXG4gIHJlcG9zaXRvcnlEaXI6IHN0cmluZyxcbiAgY29tbWl0OiBib29sZWFuLFxuICByZW1vdGVzPzogc3RyaW5nW10sXG4pOiBib29sZWFuIHtcbiAgbGV0IGVycm9yID0gZmFsc2VcbiAgaWYgKGNvbW1pdCkge1xuICAgIGV4ZWNTeW5jKGBnaXQgYWRkIC5gLCB7XG4gICAgICBjd2Q6IHJlcG9zaXRvcnlEaXIsXG4gICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgIH0pXG4gICAgdHJ5IHtcbiAgICAgIGV4ZWNTeW5jKCdnaXQgY29tbWl0IC1tIFwiTm91dmVsbGUgbW9pc3NvblwiJywge1xuICAgICAgICBjd2Q6IHJlcG9zaXRvcnlEaXIsXG4gICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGNoaWxkUHJvY2Vzcykge1xuICAgICAgaWYgKFxuICAgICAgICAoY2hpbGRQcm9jZXNzIGFzIENoaWxkUHJvY2Vzcykuc3RkZXJyID09PSBudWxsIHx8XG4gICAgICAgICEvbm90aGluZyB0byBjb21taXQvLnRlc3QoKGNoaWxkUHJvY2VzcyBhcyBhbnkpLnN0ZG91dClcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmVycm9yKChjaGlsZFByb2Nlc3MgYXMgYW55KS5vdXRwdXQpXG4gICAgICAgIHRocm93IGNoaWxkUHJvY2Vzc1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IHJlbW90ZSBvZiByZW1vdGVzIHx8IFtdKSB7XG4gICAgICB0cnkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IHB1c2ggJHtyZW1vdGV9IG1hc3RlcmAsIHtcbiAgICAgICAgICBjd2Q6IHJlcG9zaXRvcnlEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoY2hpbGRQcm9jZXNzKSB7XG4gICAgICAgIC8vIERvbid0IHN0b3Agd2hlbiBwdXNoIGZhaWxzLlxuICAgICAgICBjb25zb2xlLmVycm9yKChjaGlsZFByb2Nlc3MgYXMgYW55KS5vdXRwdXQpXG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXJyb3Jcbn1cblxuZnVuY3Rpb24gcmVvcmdhbml6ZURhdGEob3B0aW9uczogYW55KTogYm9vbGVhbiB7XG4gIGNvbnN0IGRhdGFEaXIgPSBvcHRpb25zLmRhdGFEaXJcbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gcGF0Y2hlZERhdGVUb0pzb25cblxuICBsZXQgZXJyb3IgPSBmYWxzZVxuICBjb25zdCBnaXRHcm91cFVybCA9IG9wdGlvbnMuY2xvbmVcbiAgICA/IG9wdGlvbnMuY2xvbmUudHJpbSgpLnJlcGxhY2UoL1xcLyskLywgXCJcIilcbiAgICA6IHVuZGVmaW5lZFxuICBjb25zdCB2YWxpZGF0ZVJhd0RhdGEgPSAhb3B0aW9uc1tcIm5vLXZhbGlkYXRlLXJhd1wiXVxuXG4gIG9wdGlvbnMuY2F0ZWdvcmllcy5tYXAoKGRhdGFzZXROYW1lOiBzdHJpbmcpID0+XG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgICAgKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkgYXMgeyBbbmFtZTogc3RyaW5nXTogRW5hYmxlZERhdGFzZXRzIH0pW1xuICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgXSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGBVbmtub3duIG5hbWUgb2YgZGF0YXNldDogJHtkYXRhc2V0TmFtZX1gLFxuICAgICksXG4gIClcbiAgY29uc3QgZW5hYmxlZERhdGFzZXRzID0gb3B0aW9ucy5jYXRlZ29yaWVzLnJlZHVjZShcbiAgICAoZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsIGRhdGFzZXROYW1lOiBzdHJpbmcpOiBFbmFibGVkRGF0YXNldHMgPT5cbiAgICAgIGVuYWJsZWREYXRhc2V0cyB8XG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgIEVuYWJsZWREYXRhc2V0cy5Ob25lLFxuICApXG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdGV1cnNSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiYWN0ZXVyc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGFjdGV1cnNSZW9yZ2FuaXplZERpcilcbiAgICAgIGNvbnN0IG9yZ2FuZXNSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwib3JnYW5lc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKG9yZ2FuZXNSZW9yZ2FuaXplZERpcilcblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9BY3RldXJzRXRPcmdhbmVzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBhY3RldXIgb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydC5hY3RldXJzLmFjdGV1cikge1xuICAgICAgICAgICAgICBjb25zdCByZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIGFjdGV1cnNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBhY3RldXIudWlkW1wiI3RleHRcIl0gKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShhY3RldXIsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3JnYW5lIG9mIG9yaWdpbmFsRGF0YS5leHBvcnQub3JnYW5lcy5vcmdhbmUpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmdhbmVzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgb3JnYW5lLnVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9yZ2FuZSwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IGRlcG9ydHNCeUFjdGV1clVpZDoge1xuICAgICAgICAgICAgICBbYWN0ZXVyVWlkOiBzdHJpbmddOiB7IHVpZDogc3RyaW5nIH1bXVxuICAgICAgICAgICAgfSA9IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwiZGVwb3J0XCIpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBvcnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIFtcImRlcG9ydFwiXSxcbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICAgIGRlcG9ydFNwbGl0UGF0aFtkZXBvcnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgICBpZiAoIWRlcG9ydEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgLi4uZGVwb3J0U3BsaXRQYXRoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgYCAgTG9hZGluZyBcImRlcG9ydFwiIGZpbGU6ICR7ZGVwb3J0T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICAgIGRlcG9ydE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9EZXBvcnQoZGVwb3J0T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRlcG9ydE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnQgPSBkZXBvcnRPcmlnaW5hbC5kZXBvcnRcbiAgICAgICAgICAgICAgICBsZXQgZGVwb3J0cyA9IGRlcG9ydHNCeUFjdGV1clVpZFtkZXBvcnQuYWN0ZXVyUmVmXVxuICAgICAgICAgICAgICAgIGlmIChkZXBvcnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIGRlcG9ydHMgPSBkZXBvcnRzQnlBY3RldXJVaWRbZGVwb3J0LmFjdGV1clJlZl0gPSBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZXBvcnRzLnB1c2goZGVwb3J0KVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBvcnRzIG9mIE9iamVjdC52YWx1ZXMoZGVwb3J0c0J5QWN0ZXVyVWlkKSkge1xuICAgICAgICAgICAgICAgIGRlcG9ydHMuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgIGEudWlkLmxlbmd0aCA9PT0gYi51aWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gYS51aWQubG9jYWxlQ29tcGFyZShiLnVpZClcbiAgICAgICAgICAgICAgICAgICAgOiBhLnVpZC5sZW5ndGggLSBiLnVpZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1hbmRhdHNCeUFjdGV1clVpZDoge1xuICAgICAgICAgICAgICBbYWN0ZXVyVWlkOiBzdHJpbmddOiB7IHVpZDogc3RyaW5nIH1bXVxuICAgICAgICAgICAgfSA9IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwibWFuZGF0XCIpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtYW5kYXRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIFtcIm1hbmRhdFwiXSxcbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICAgIG1hbmRhdFNwbGl0UGF0aFttYW5kYXRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgICBpZiAoIW1hbmRhdEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgLi4ubWFuZGF0U3BsaXRQYXRoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgYCAgTG9hZGluZyBcIm1hbmRhdFwiIGZpbGU6ICR7bWFuZGF0T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICAgIG1hbmRhdE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9NYW5kYXQobWFuZGF0T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG1hbmRhdE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXQgPSBtYW5kYXRPcmlnaW5hbC5tYW5kYXRcbiAgICAgICAgICAgICAgICBsZXQgbWFuZGF0cyA9IG1hbmRhdHNCeUFjdGV1clVpZFttYW5kYXQuYWN0ZXVyUmVmXVxuICAgICAgICAgICAgICAgIGlmIChtYW5kYXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbbWFuZGF0LmFjdGV1clJlZl0gPSBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtYW5kYXRzLnB1c2gobWFuZGF0KVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtYW5kYXRzIG9mIE9iamVjdC52YWx1ZXMobWFuZGF0c0J5QWN0ZXVyVWlkKSkge1xuICAgICAgICAgICAgICAgIG1hbmRhdHMuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgIGEudWlkLmxlbmd0aCA9PT0gYi51aWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gYS51aWQubG9jYWxlQ29tcGFyZShiLnVpZClcbiAgICAgICAgICAgICAgICAgICAgOiBhLnVpZC5sZW5ndGggLSBiLnVpZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImFjdGV1clwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyRmlsZW5hbWUgPSBhY3RldXJTcGxpdFBhdGhbYWN0ZXVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmFjdGV1clNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJhY3RldXJcIiBmaWxlOiAke2FjdGV1ck9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYWN0ZXVyT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b0FjdGV1cihhY3RldXJPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGFjdGV1ck9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyID0gYWN0ZXVyT3JpZ2luYWwuYWN0ZXVyXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1clVpZCA9IGFjdGV1ci51aWRbXCIjdGV4dFwiXVxuICAgICAgICAgICAgICBjb25zdCBkZXBvcnRzID0gZGVwb3J0c0J5QWN0ZXVyVWlkW2FjdGV1clVpZF1cbiAgICAgICAgICAgICAgaWYgKGRlcG9ydHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhY3RldXIuZGVwb3J0cywgdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGFjdGV1ci5kZXBvcnRzID0geyBkZXBvcnQ6IGRlcG9ydHMgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbYWN0ZXVyVWlkXVxuICAgICAgICAgICAgICBpZiAobWFuZGF0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFjdGV1ci5tYW5kYXRzLCB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgYWN0ZXVyLm1hbmRhdHMgPSB7IG1hbmRhdDogbWFuZGF0cyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBhY3RldXJzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgYWN0ZXVyVWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoYWN0ZXVyLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJvcmdhbmVcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5vcmdhbmVTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwib3JnYW5lXCIgZmlsZTogJHtvcmdhbmVPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIG9yZ2FuZU9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9PcmdhbmUob3JnYW5lT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmdhbmVPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZSA9IG9yZ2FuZU9yaWdpbmFsLm9yZ2FuZVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVSZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yZ2FuZXNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBvcmdhbmUudWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgb3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3JnYW5lLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGNvbW1pdEFuZFB1c2goZGF0YXNldFJlb3JnYW5pemVkRGlyLCBvcHRpb25zLmNvbW1pdCwgb3B0aW9ucy5yZW1vdGUpXG4gICAgICApIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQWdlbmRhc1Jhd0NvbnZlcnQudG9BZ2VuZGFzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCByZXVuaW9uIG9mIG9yaWdpbmFsRGF0YS5yZXVuaW9ucy5yZXVuaW9uKSB7XG4gICAgICAgICAgICAgIHdyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJldW5pb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wicmV1bmlvblwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFyZXVuaW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbk9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5yZXVuaW9uU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInJldW5pb25cIiBmaWxlOiAke3JldW5pb25PcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWdlbmRhc1Jhd0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb24gPSByZXVuaW9uT3JpZ2luYWwucmV1bmlvblxuICAgICAgICAgICAgICB3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCByZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGNvbW1pdEFuZFB1c2goZGF0YXNldFJlb3JnYW5pemVkRGlyLCBvcHRpb25zLmNvbW1pdCwgb3B0aW9ucy5yZW1vdGUpXG4gICAgICApIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQudG9BbWVuZGVtZW50cyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdGV4dGVMZWdpc2xhdGlmIG9mIG9yaWdpbmFsRGF0YS50ZXh0ZXNFdEFtZW5kZW1lbnRzXG4gICAgICAgICAgICAgIC50ZXh0ZWxlZykge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnQgb2YgdGV4dGVMZWdpc2xhdGlmLmFtZW5kZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgICAgYW1lbmRlbWVudCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRTcGxpdFBhdGhbYW1lbmRlbWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWFtZW5kZW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmFtZW5kZW1lbnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiYW1lbmRlbWVudFwiIGZpbGU6ICR7YW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQudG9BbWVuZGVtZW50V3JhcHBlcihcbiAgICAgICAgICAgICAgICAgICAgYW1lbmRlbWVudE9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoYW1lbmRlbWVudE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudCA9IGFtZW5kZW1lbnRPcmlnaW5hbC5hbWVuZGVtZW50XG4gICAgICAgICAgICAgIHdyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGFtZW5kZW1lbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaChkYXRhc2V0UmVvcmdhbml6ZWREaXIsIG9wdGlvbnMuY29tbWl0LCBvcHRpb25zLnJlbW90ZSlcbiAgICAgICkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuICAgICAgY29uc3QgZG9jdW1lbnRzRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJkb2N1bWVudHNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhkb2N1bWVudHNEaXIpXG4gICAgICBjb25zdCBkb3NzaWVyc0RpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiZG9zc2llcnNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhkb3NzaWVyc0RpcilcblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb3NzaWVyc0xlZ2lzbGF0aWZzKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBkb2N1bWVudCBvZiBvcmlnaW5hbERhdGEuZXhwb3J0LnRleHRlc0xlZ2lzbGF0aWZzXG4gICAgICAgICAgICAgIC5kb2N1bWVudCkge1xuICAgICAgICAgICAgICB3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uKGRvY3VtZW50c0RpciwgZG9jdW1lbnQpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBkb3NzaWVyUGFybGVtZW50YWlyZSB9IG9mIG9yaWdpbmFsRGF0YS5leHBvcnRcbiAgICAgICAgICAgICAgLmRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llcikge1xuICAgICAgICAgICAgICB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJzRGlyLFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImRvY3VtZW50XCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uZG9jdW1lbnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiZG9jdW1lbnRcIiBmaWxlOiAke2RvY3VtZW50T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGRvY3VtZW50T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRvY3VtZW50T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudCA9IGRvY3VtZW50T3JpZ2luYWwuZG9jdW1lbnRcbiAgICAgICAgICAgICAgd3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbihkb2N1bWVudHNEaXIsIGRvY3VtZW50KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImRvc3NpZXJQYXJsZW1lbnRhaXJlXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIGlmICghZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5kb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJkb3NzaWVyUGFybGVtZW50YWlyZVwiIGZpbGU6ICR7ZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShcbiAgICAgICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZSA9XG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbC5kb3NzaWVyUGFybGVtZW50YWlyZVxuICAgICAgICAgICAgICB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJzRGlyLFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaChkYXRhc2V0UmVvcmdhbml6ZWREaXIsIG9wdGlvbnMuY29tbWl0LCBvcHRpb25zLnJlbW90ZSlcbiAgICAgICkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IFNjcnV0aW5zUmF3Q29udmVydC50b1NjcnV0aW5zKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBzY3J1dGluIG9mIG9yaWdpbmFsRGF0YS5zY3J1dGlucy5zY3J1dGluKSB7XG4gICAgICAgICAgICAgIHdyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHNjcnV0aW4pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBzY3J1dGluU3BsaXRQYXRoW3NjcnV0aW5TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFzY3J1dGluRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5zY3J1dGluU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInNjcnV0aW5cIiBmaWxlOiAke3NjcnV0aW5PcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBzY3J1dGluT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gU2NydXRpbnNSYXdDb252ZXJ0LnRvU2NydXRpbldyYXBwZXIoc2NydXRpbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uoc2NydXRpbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbiA9IHNjcnV0aW5PcmlnaW5hbC5zY3J1dGluXG4gICAgICAgICAgICAgIHdyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHNjcnV0aW4pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaChkYXRhc2V0UmVvcmdhbml6ZWREaXIsIG9wdGlvbnMuY29tbWl0LCBvcHRpb25zLnJlbW90ZSlcbiAgICAgICkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXN0b3JlIHN0YW5kYXJkIGNvbnZlcnNpb24gb2YgZGF0ZXMgdG8gSlNPTi5cbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZXhpc3RpbmdEYXRlVG9Kc29uXG5cbiAgcmV0dXJuIGVycm9yXG59XG5cbmZ1bmN0aW9uIHdyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbihcbiAgZGF0YXNldFJlb3JnYW5pemVkRGlyOiBzdHJpbmcsXG4gIGFtZW5kZW1lbnQ6IHtcbiAgICB1aWQ6IHN0cmluZ1xuICAgIHRleHRlTGVnaXNsYXRpZlJlZjogc3RyaW5nXG4gIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgdWlkVGV4dGVMZWdpc2xhdGlmID0gYW1lbmRlbWVudC50ZXh0ZUxlZ2lzbGF0aWZSZWZcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKHVpZFRleHRlTGVnaXNsYXRpZiwgdW5kZWZpbmVkKVxuICBjb25zdCB0ZXh0ZUxlZ2lzbGF0aWZEaXIgPSBwYXRoLmpvaW4oXG4gICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgIHVpZFRleHRlTGVnaXNsYXRpZixcbiAgKVxuICBmcy5lbnN1cmVEaXJTeW5jKHRleHRlTGVnaXNsYXRpZkRpcilcbiAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgdGV4dGVMZWdpc2xhdGlmRGlyLFxuICAgIGFtZW5kZW1lbnQudWlkICsgXCIuanNvblwiLFxuICApXG4gIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgSlNPTi5zdHJpbmdpZnkoYW1lbmRlbWVudCwgbnVsbCwgMiksXG4gICAge1xuICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgIH0sXG4gIClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbihcbiAgZG9jdW1lbnRzRGlyOiBzdHJpbmcsXG4gIGRvY3VtZW50OiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbURvY3VtZW50VWlkKGRvY3VtZW50c0RpciwgZG9jdW1lbnQudWlkKVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkoZG9jdW1lbnQsIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICBkb3NzaWVyc0Rpcjogc3RyaW5nLFxuICBkb3NzaWVyUGFybGVtZW50YWlyZTogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZChcbiAgICBkb3NzaWVyc0RpcixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZS51aWQsXG4gIClcbiAgZnMud3JpdGVGaWxlU3luYyhcbiAgICBgJHtiYXNlbmFtZX0uanNvbmAsXG4gICAgSlNPTi5zdHJpbmdpZnkoZG9zc2llclBhcmxlbWVudGFpcmUsIG51bGwsIDIpLFxuICAgIHtcbiAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICB9LFxuICApXG59XG5cbmZ1bmN0aW9uIHdyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbihcbiAgcmV1bmlvbnNEaXI6IHN0cmluZyxcbiAgcmV1bmlvbjogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21SZXVuaW9uVWlkKHJldW5pb25zRGlyLCByZXVuaW9uLnVpZClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KHJldW5pb24sIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG5mdW5jdGlvbiB3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24oXG4gIHNjcnV0aW5zRGlyOiBzdHJpbmcsXG4gIHNjcnV0aW46IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tU2NydXRpblVpZChzY3J1dGluc0Rpciwgc2NydXRpbi51aWQpXG4gIGZzLndyaXRlRmlsZVN5bmMoYCR7YmFzZW5hbWV9Lmpzb25gLCBKU09OLnN0cmluZ2lmeShzY3J1dGluLCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAocHJvY2Vzcy5hcmd2WzFdLmVuZHNXaXRoKFwicmVvcmdhbml6ZV9kYXRhLnRzXCIpKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zKVxuXG4gIGlmIChyZW9yZ2FuaXplRGF0YShvcHRpb25zKSkge1xuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9IGVsc2Uge1xuICAgIHByb2Nlc3MuZXhpdCgwKVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQU1BOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFNQSxrQkFBa0IsR0FBRyxDQUN6QjtFQUNFQyxLQUFLLEVBQUUsR0FEVDtFQUVFQyxJQUFJLEVBQUUsK0RBRlI7RUFHRUMsSUFBSSxFQUFFLE9BSFI7RUFJRUMsSUFBSSxF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
1133
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvcHRpb25zRGVmaW5pdGlvbnMiLCJhbGlhcyIsImhlbHAiLCJuYW1lIiwidHlwZSIsIlN0cmluZyIsIkJvb2xlYW4iLCJkZWZhdWx0VmFsdWUiLCJtdWx0aXBsZSIsImRlZmF1bHRPcHRpb24iLCJjb21taXRBbmRQdXNoIiwicmVwb3NpdG9yeURpciIsImNvbW1pdCIsInJlbW90ZXMiLCJlcnJvciIsImV4ZWNTeW5jIiwiY3dkIiwiZW52IiwicHJvY2VzcyIsImVuY29kaW5nIiwic3RkaW8iLCJjaGlsZFByb2Nlc3MiLCJzdGRlcnIiLCJ0ZXN0Iiwic3Rkb3V0IiwiY29uc29sZSIsIm91dHB1dCIsInJlbW90ZSIsInJlb3JnYW5pemVEYXRhIiwib3B0aW9ucyIsImRhdGFEaXIiLCJEYXRlIiwicHJvdG90eXBlIiwidG9KU09OIiwicGF0Y2hlZERhdGVUb0pzb24iLCJnaXRHcm91cFVybCIsImNsb25lIiwidHJpbSIsInJlcGxhY2UiLCJ1bmRlZmluZWQiLCJ2YWxpZGF0ZVJhd0RhdGEiLCJjYXRlZ29yaWVzIiwibWFwIiwiZGF0YXNldE5hbWUiLCJhc3NlcnQiLCJub3RTdHJpY3RFcXVhbCIsIkVuYWJsZWREYXRhc2V0cyIsImVuYWJsZWREYXRhc2V0cyIsInJlZHVjZSIsIk5vbmUiLCJBY3RldXJzRXRPcmdhbmVzIiwiZGF0YXNldHMiLCJhY3RldXJzRXRPcmdhbmVzIiwiZGF0YXNldCIsIm9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgiLCJwYXRoIiwiam9pbiIsImZpbGVuYW1lIiwic2lsZW50IiwibG9nIiwiYmFzZW5hbWUiLCJkYXRhc2V0UmVvcmdhbml6ZWREaXIiLCJmcyIsImVuc3VyZURpclN5bmMiLCJyZWFkZGlyU3luYyIsInJlbW92ZVN5bmMiLCJhY3RldXJzUmVvcmdhbml6ZWREaXIiLCJta2RpclN5bmMiLCJvcmdhbmVzUmVvcmdhbml6ZWREaXIiLCJzdHJ1Y3R1cmUiLCJEYXRhc2V0U3RydWN0dXJlIiwiU2luZ2xlRmlsZSIsIm9yaWdpbmFsSnNvbiIsInJlYWRGaWxlU3luYyIsIm9yaWdpbmFsRGF0YSIsIkFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0IiwidG9BY3RldXJzRXRPcmdhbmVzIiwiSlNPTiIsInBhcnNlIiwiYWN0ZXVycyIsImFjdGV1ciIsInJlb3JnYW5pemVkSnNvbkZpbGVQYXRoIiwidWlkIiwid3JpdGVGaWxlU3luYyIsInN0cmluZ2lmeSIsIm9yZ2FuZXMiLCJvcmdhbmUiLCJTZWdtZW50ZWRGaWxlcyIsImRlcG9ydHNCeUFjdGV1clVpZCIsImV4aXN0c1N5bmMiLCJ3YWxrRGlyIiwiZGVwb3J0U3BsaXRQYXRoIiwiZGVwb3J0RmlsZW5hbWUiLCJsZW5ndGgiLCJlbmRzV2l0aCIsImRlcG9ydE9yaWdpbmFsRmlsZVBhdGgiLCJ2ZXJib3NlIiwiZGVwb3J0T3JpZ2luYWxKc29uIiwiZGVwb3J0T3JpZ2luYWwiLCJ0b0RlcG9ydCIsImRlcG9ydCIsImRlcG9ydHMiLCJhY3RldXJSZWYiLCJwdXNoIiwiT2JqZWN0IiwidmFsdWVzIiwic29ydCIsImEiLCJiIiwibG9jYWxlQ29tcGFyZSIsIm1hbmRhdHNCeUFjdGV1clVpZCIsIm1hbmRhdFNwbGl0UGF0aCIsIm1hbmRhdEZpbGVuYW1lIiwibWFuZGF0T3JpZ2luYWxGaWxlUGF0aCIsIm1hbmRhdE9yaWdpbmFsSnNvbiIsIm1hbmRhdE9yaWdpbmFsIiwidG9NYW5kYXRXcmFwcGVyIiwibWFuZGF0IiwibWFuZGF0cyIsImFjdGV1clNwbGl0UGF0aCIsImFjdGV1ckZpbGVuYW1lIiwiYWN0ZXVyT3JpZ2luYWxGaWxlUGF0aCIsImFjdGV1ck9yaWdpbmFsSnNvbiIsImFjdGV1ck9yaWdpbmFsIiwidG9BY3RldXIiLCJhY3RldXJVaWQiLCJzdHJpY3RFcXVhbCIsImFjdGV1clJlb3JnYW5pemVkSnNvbkZpbGVQYXRoIiwib3JnYW5lU3BsaXRQYXRoIiwib3JnYW5lRmlsZW5hbWUiLCJvcmdhbmVPcmlnaW5hbEZpbGVQYXRoIiwib3JnYW5lT3JpZ2luYWxKc29uIiwib3JnYW5lT3JpZ2luYWwiLCJ0b09yZ2FuZSIsIm9yZ2FuZVJlb3JnYW5pemVkSnNvbkZpbGVQYXRoIiwiQWdlbmRhcyIsImFnZW5kYXMiLCJBZ2VuZGFzUmF3Q29udmVydCIsInRvQWdlbmRhcyIsInJldW5pb25zIiwicmV1bmlvbiIsIndyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbiIsInJldW5pb25TcGxpdFBhdGgiLCJyZXVuaW9uRmlsZW5hbWUiLCJyZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCIsInJldW5pb25PcmlnaW5hbEpzb24iLCJyZXVuaW9uT3JpZ2luYWwiLCJ0b1JldW5pb24iLCJBbWVuZGVtZW50cyIsImFtZW5kZW1lbnRzIiwiQW1lbmRlbWVudHNSYXdDb252ZXJ0IiwidG9BbWVuZGVtZW50cyIsInRleHRlc0V0QW1lbmRlbWVudHMiLCJ0ZXh0ZWxlZyIsInRleHRlTGVnaXNsYXRpZiIsImFtZW5kZW1lbnQiLCJ3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24iLCJhbWVuZGVtZW50U3BsaXRQYXRoIiwiYW1lbmRlbWVudEZpbGVuYW1lIiwiYW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGgiLCJhbWVuZGVtZW50T3JpZ2luYWxKc29uIiwiYW1lbmRlbWVudE9yaWdpbmFsIiwidG9BbWVuZGVtZW50V3JhcHBlciIsIkRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9jdW1lbnRzRGlyIiwiZG9zc2llcnNEaXIiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydCIsInRvRG9zc2llcnNMZWdpc2xhdGlmcyIsInRleHRlc0xlZ2lzbGF0aWZzIiwiZG9jdW1lbnQiLCJ3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uIiwiZG9zc2llciIsImRvc3NpZXJQYXJsZW1lbnRhaXJlIiwid3JpdGVEb3NzaWVyUGFybGVtZW50YWlyZVJlb3JnYW5pemVkSnNvbiIsImRvY3VtZW50U3BsaXRQYXRoIiwiZG9jdW1lbnRGaWxlbmFtZSIsImRvY3VtZW50T3JpZ2luYWxGaWxlUGF0aCIsImRvY3VtZW50T3JpZ2luYWxKc29uIiwiZG9jdW1lbnRPcmlnaW5hbCIsInRvRG9jdW1lbnQiLCJkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZW5hbWUiLCJkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsRmlsZVBhdGgiLCJkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWwiLCJ0b0Rvc3NpZXJQYXJsZW1lbnRhaXJlIiwiU2NydXRpbnMiLCJzY3J1dGlucyIsIlNjcnV0aW5zUmF3Q29udmVydCIsInRvU2NydXRpbnMiLCJzY3J1dGluIiwid3JpdGVTY3J1dGluUmVvcmdhbml6ZWRKc29uIiwic2NydXRpblNwbGl0UGF0aCIsInNjcnV0aW5GaWxlbmFtZSIsInNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoIiwic2NydXRpbk9yaWdpbmFsSnNvbiIsInNjcnV0aW5PcmlnaW5hbCIsInRvU2NydXRpbldyYXBwZXIiLCJleGlzdGluZ0RhdGVUb0pzb24iLCJ1aWRUZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZUxlZ2lzbGF0aWZSZWYiLCJ0ZXh0ZUxlZ2lzbGF0aWZEaXIiLCJwYXRoRnJvbURvY3VtZW50VWlkIiwicGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZCIsInJldW5pb25zRGlyIiwicGF0aEZyb21SZXVuaW9uVWlkIiwic2NydXRpbnNEaXIiLCJwYXRoRnJvbVNjcnV0aW5VaWQiLCJhcmd2IiwiY29tbWFuZExpbmVBcmdzIiwiZXhpdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL3Jlb3JnYW5pemVfZGF0YS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IHsgQ2hpbGRQcm9jZXNzLCBleGVjU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCJcbmltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5pbXBvcnQgeyBkYXRhc2V0cywgRGF0YXNldFN0cnVjdHVyZSwgRW5hYmxlZERhdGFzZXRzIH0gZnJvbSBcIi4uL2RhdGFzZXRzXCJcbmltcG9ydCB7IGV4aXN0aW5nRGF0ZVRvSnNvbiwgcGF0Y2hlZERhdGVUb0pzb24gfSBmcm9tIFwiLi4vZGF0ZXNcIlxuaW1wb3J0IHsgd2Fsa0RpciB9IGZyb20gXCIuLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHtcbiAgcGF0aEZyb21Eb2N1bWVudFVpZCxcbiAgcGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZCxcbiAgcGF0aEZyb21SZXVuaW9uVWlkLFxuICBwYXRoRnJvbVNjcnV0aW5VaWQsXG59IGZyb20gXCIuLi9sb2FkZXJzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFnZW5kYXNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9hZ2VuZGFzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQW1lbmRlbWVudHNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFNjcnV0aW5zUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvc2NydXRpbnNcIlxuXG5jb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbXG4gIHtcbiAgICBhbGlhczogXCJDXCIsXG4gICAgaGVscDogXCJjbG9uZSByZXBvc2l0b3JpZXMgZnJvbSBnaXZlbiBncm91cCAob3Igb3JnYW5pemF0aW9uKSBnaXQgVVJMXCIsXG4gICAgbmFtZTogXCJjbG9uZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcImNcIixcbiAgICBoZWxwOiBcImNvbW1pdCBzcGxpdCBmaWxlc1wiLFxuICAgIG5hbWU6IFwiY29tbWl0XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcImtcIixcbiAgICBkZWZhdWx0VmFsdWU6IFtcIkFsbFwiXSxcbiAgICBoZWxwOiBcImNhdGVnb3JpZXMgb2YgZGF0YXNldHMgdG8gcmVvcmdhbml6ZVwiLFxuICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIG5hbWU6IFwiY2F0ZWdvcmllc1wiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInJcIixcbiAgICBoZWxwOiBcInB1c2ggY29tbWl0IHRvIGdpdmVuIHJlbW90ZVwiLFxuICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIG5hbWU6IFwicmVtb3RlXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwic1wiLFxuICAgIGhlbHA6IFwiZG9uJ3QgbG9nIGFueXRoaW5nXCIsXG4gICAgbmFtZTogXCJzaWxlbnRcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiVlwiLFxuICAgIGhlbHA6IFwiZG9uJ3QgdmFsaWRhdGUgcmF3IGRhdGFcIixcbiAgICBuYW1lOiBcIm5vLXZhbGlkYXRlLXJhd1wiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJ2XCIsXG4gICAgaGVscDogXCJ2ZXJib3NlIGxvZ3NcIixcbiAgICBuYW1lOiBcInZlcmJvc2VcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgZGVmYXVsdE9wdGlvbjogdHJ1ZSxcbiAgICBoZWxwOiBcImRpcmVjdG9yeSBjb250YWluaW5nIEFzc2VtYmzDqWUgb3BlbiBkYXRhIGZpbGVzXCIsXG4gICAgbmFtZTogXCJkYXRhRGlyXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuXVxuXG5mdW5jdGlvbiBjb21taXRBbmRQdXNoKFxuICByZXBvc2l0b3J5RGlyOiBzdHJpbmcsXG4gIGNvbW1pdDogYm9vbGVhbixcbiAgcmVtb3Rlcz86IHN0cmluZ1tdLFxuKTogYm9vbGVhbiB7XG4gIGxldCBlcnJvciA9IGZhbHNlXG4gIGlmIChjb21taXQpIHtcbiAgICBleGVjU3luYyhgZ2l0IGFkZCAuYCwge1xuICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICB9KVxuICAgIHRyeSB7XG4gICAgICBleGVjU3luYygnZ2l0IGNvbW1pdCAtbSBcIk5vdXZlbGxlIG1vaXNzb25cIicsIHtcbiAgICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgfSlcbiAgICB9IGNhdGNoIChjaGlsZFByb2Nlc3MpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKGNoaWxkUHJvY2VzcyBhcyBDaGlsZFByb2Nlc3MpLnN0ZGVyciA9PT0gbnVsbCB8fFxuICAgICAgICAhL25vdGhpbmcgdG8gY29tbWl0Ly50ZXN0KChjaGlsZFByb2Nlc3MgYXMgYW55KS5zdGRvdXQpXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigoY2hpbGRQcm9jZXNzIGFzIGFueSkub3V0cHV0KVxuICAgICAgICB0aHJvdyBjaGlsZFByb2Nlc3NcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCByZW1vdGUgb2YgcmVtb3RlcyB8fCBbXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBwdXNoICR7cmVtb3RlfSBtYXN0ZXJgLCB7XG4gICAgICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGNoaWxkUHJvY2Vzcykge1xuICAgICAgICAvLyBEb24ndCBzdG9wIHdoZW4gcHVzaCBmYWlscy5cbiAgICAgICAgY29uc29sZS5lcnJvcigoY2hpbGRQcm9jZXNzIGFzIGFueSkub3V0cHV0KVxuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVycm9yXG59XG5cbmZ1bmN0aW9uIHJlb3JnYW5pemVEYXRhKG9wdGlvbnM6IGFueSk6IGJvb2xlYW4ge1xuICBjb25zdCBkYXRhRGlyID0gb3B0aW9ucy5kYXRhRGlyXG4gIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IHBhdGNoZWREYXRlVG9Kc29uXG5cbiAgbGV0IGVycm9yID0gZmFsc2VcbiAgY29uc3QgZ2l0R3JvdXBVcmwgPSBvcHRpb25zLmNsb25lXG4gICAgPyBvcHRpb25zLmNsb25lLnRyaW0oKS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpXG4gICAgOiB1bmRlZmluZWRcbiAgY29uc3QgdmFsaWRhdGVSYXdEYXRhID0gIW9wdGlvbnNbXCJuby12YWxpZGF0ZS1yYXdcIl1cblxuICBvcHRpb25zLmNhdGVnb3JpZXMubWFwKChkYXRhc2V0TmFtZTogc3RyaW5nKSA9PlxuICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICAgIChFbmFibGVkRGF0YXNldHMgYXMgYW55IGFzIHsgW25hbWU6IHN0cmluZ106IEVuYWJsZWREYXRhc2V0cyB9KVtcbiAgICAgICAgZGF0YXNldE5hbWVcbiAgICAgIF0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBgVW5rbm93biBuYW1lIG9mIGRhdGFzZXQ6ICR7ZGF0YXNldE5hbWV9YCxcbiAgICApLFxuICApXG4gIGNvbnN0IGVuYWJsZWREYXRhc2V0cyA9IG9wdGlvbnMuY2F0ZWdvcmllcy5yZWR1Y2UoXG4gICAgKGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLCBkYXRhc2V0TmFtZTogc3RyaW5nKTogRW5hYmxlZERhdGFzZXRzID0+XG4gICAgICBlbmFibGVkRGF0YXNldHMgfFxuICAgICAgKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkgYXMgeyBbbmFtZTogc3RyaW5nXTogRW5hYmxlZERhdGFzZXRzIH0pW1xuICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgXSxcbiAgICBFbmFibGVkRGF0YXNldHMuTm9uZSxcbiAgKVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG4gICAgICBjb25zdCBhY3RldXJzUmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcImFjdGV1cnNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhhY3RldXJzUmVvcmdhbml6ZWREaXIpXG4gICAgICBjb25zdCBvcmdhbmVzUmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcIm9yZ2FuZXNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhvcmdhbmVzUmVvcmdhbml6ZWREaXIpXG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvQWN0ZXVyc0V0T3JnYW5lcyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgYWN0ZXVyIG9mIG9yaWdpbmFsRGF0YS5leHBvcnQuYWN0ZXVycy5hY3RldXIpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBhY3RldXJzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgYWN0ZXVyLnVpZFtcIiN0ZXh0XCJdICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoYWN0ZXVyLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9yZ2FuZSBvZiBvcmlnaW5hbERhdGEuZXhwb3J0Lm9yZ2FuZXMub3JnYW5lKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JnYW5lc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIG9yZ2FuZS51aWQgKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcmdhbmUsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBkZXBvcnRzQnlBY3RldXJVaWQ6IHtcbiAgICAgICAgICAgICAgW2FjdGV1clVpZDogc3RyaW5nXTogeyB1aWQ6IHN0cmluZyB9W11cbiAgICAgICAgICAgIH0gPSB7fVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmcy5leGlzdHNTeW5jKFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLCBcImRlcG9ydFwiKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgZGVwb3J0U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBbXCJkZXBvcnRcIl0sXG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgICBkZXBvcnRTcGxpdFBhdGhbZGVwb3J0U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgICAgaWYgKCFkZXBvcnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIC4uLmRlcG9ydFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICAgIGAgIExvYWRpbmcgXCJkZXBvcnRcIiBmaWxlOiAke2RlcG9ydE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgICBkZXBvcnRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvRGVwb3J0KGRlcG9ydE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShkZXBvcnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0ID0gZGVwb3J0T3JpZ2luYWwuZGVwb3J0XG4gICAgICAgICAgICAgICAgbGV0IGRlcG9ydHMgPSBkZXBvcnRzQnlBY3RldXJVaWRbZGVwb3J0LmFjdGV1clJlZl1cbiAgICAgICAgICAgICAgICBpZiAoZGVwb3J0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBkZXBvcnRzID0gZGVwb3J0c0J5QWN0ZXVyVWlkW2RlcG9ydC5hY3RldXJSZWZdID0gW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVwb3J0cy5wdXNoKGRlcG9ydClcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgZGVwb3J0cyBvZiBPYmplY3QudmFsdWVzKGRlcG9ydHNCeUFjdGV1clVpZCkpIHtcbiAgICAgICAgICAgICAgICBkZXBvcnRzLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgICAgICAgICBhLnVpZC5sZW5ndGggPT09IGIudWlkLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IGEudWlkLmxvY2FsZUNvbXBhcmUoYi51aWQpXG4gICAgICAgICAgICAgICAgICAgIDogYS51aWQubGVuZ3RoIC0gYi51aWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtYW5kYXRzQnlBY3RldXJVaWQ6IHtcbiAgICAgICAgICAgICAgW2FjdGV1clVpZDogc3RyaW5nXTogeyB1aWQ6IHN0cmluZyB9W11cbiAgICAgICAgICAgIH0gPSB7fVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmcy5leGlzdHNTeW5jKFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLCBcIm1hbmRhdFwiKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbWFuZGF0U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBbXCJtYW5kYXRcIl0sXG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgICBtYW5kYXRTcGxpdFBhdGhbbWFuZGF0U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgICAgaWYgKCFtYW5kYXRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIC4uLm1hbmRhdFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICAgIGAgIExvYWRpbmcgXCJtYW5kYXRcIiBmaWxlOiAke21hbmRhdE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgICBtYW5kYXRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvTWFuZGF0V3JhcHBlcihtYW5kYXRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UobWFuZGF0T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdCA9IG1hbmRhdE9yaWdpbmFsLm1hbmRhdFxuICAgICAgICAgICAgICAgIGxldCBtYW5kYXRzID0gbWFuZGF0c0J5QWN0ZXVyVWlkW21hbmRhdC5hY3RldXJSZWZdXG4gICAgICAgICAgICAgICAgaWYgKG1hbmRhdHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgbWFuZGF0cyA9IG1hbmRhdHNCeUFjdGV1clVpZFttYW5kYXQuYWN0ZXVyUmVmXSA9IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1hbmRhdHMucHVzaChtYW5kYXQpXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IG1hbmRhdHMgb2YgT2JqZWN0LnZhbHVlcyhtYW5kYXRzQnlBY3RldXJVaWQpKSB7XG4gICAgICAgICAgICAgICAgbWFuZGF0cy5zb3J0KChhLCBiKSA9PlxuICAgICAgICAgICAgICAgICAgYS51aWQubGVuZ3RoID09PSBiLnVpZC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyBhLnVpZC5sb2NhbGVDb21wYXJlKGIudWlkKVxuICAgICAgICAgICAgICAgICAgICA6IGEudWlkLmxlbmd0aCAtIGIudWlkLmxlbmd0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBhY3RldXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wiYWN0ZXVyXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBhY3RldXJGaWxlbmFtZSA9IGFjdGV1clNwbGl0UGF0aFthY3RldXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFhY3RldXJGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uYWN0ZXVyU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImFjdGV1clwiIGZpbGU6ICR7YWN0ZXVyT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBhY3RldXJPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ck9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ck9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoYWN0ZXVyT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXIgPSBhY3RldXJPcmlnaW5hbC5hY3RldXJcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyVWlkID0gYWN0ZXVyLnVpZFtcIiN0ZXh0XCJdXG4gICAgICAgICAgICAgIGNvbnN0IGRlcG9ydHMgPSBkZXBvcnRzQnlBY3RldXJVaWRbYWN0ZXVyVWlkXVxuICAgICAgICAgICAgICBpZiAoZGVwb3J0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFjdGV1ci5kZXBvcnRzLCB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgYWN0ZXVyLmRlcG9ydHMgPSB7IGRlcG9ydDogZGVwb3J0cyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgbWFuZGF0cyA9IG1hbmRhdHNCeUFjdGV1clVpZFthY3RldXJVaWRdXG4gICAgICAgICAgICAgIGlmIChtYW5kYXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWN0ZXVyLm1hbmRhdHMsIHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBhY3RldXIubWFuZGF0cyA9IHsgbWFuZGF0OiBtYW5kYXRzIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJSZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIGFjdGV1cnNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBhY3RldXJVaWQgKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBhY3RldXJSZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShhY3RldXIsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3JnYW5lU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcIm9yZ2FuZVwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lRmlsZW5hbWUgPSBvcmdhbmVTcGxpdFBhdGhbb3JnYW5lU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghb3JnYW5lRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLm9yZ2FuZVNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJvcmdhbmVcIiBmaWxlOiAke29yZ2FuZU9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgb3JnYW5lT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b09yZ2FuZShvcmdhbmVPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yZ2FuZU9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lID0gb3JnYW5lT3JpZ2luYWwub3JnYW5lXG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZVJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JnYW5lc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIG9yZ2FuZS51aWQgKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBvcmdhbmVSZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcmdhbmUsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaChkYXRhc2V0UmVvcmdhbml6ZWREaXIsIG9wdGlvbnMuY29tbWl0LCBvcHRpb25zLnJlbW90ZSlcbiAgICAgICkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWdlbmRhcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBBZ2VuZGFzUmF3Q29udmVydC50b0FnZW5kYXMob3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJldW5pb24gb2Ygb3JpZ2luYWxEYXRhLnJldW5pb25zLnJldW5pb24pIHtcbiAgICAgICAgICAgICAgd3JpdGVSZXVuaW9uUmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgcmV1bmlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmV1bmlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJyZXVuaW9uXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uRmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIHJldW5pb25TcGxpdFBhdGhbcmV1bmlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIXJldW5pb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLnJldW5pb25TcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwicmV1bmlvblwiIGZpbGU6ICR7cmV1bmlvbk9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbk9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHJldW5pb25PcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25PcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBZ2VuZGFzUmF3Q29udmVydC50b1JldW5pb24ocmV1bmlvbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UocmV1bmlvbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbiA9IHJldW5pb25PcmlnaW5hbC5yZXVuaW9uXG4gICAgICAgICAgICAgIHdyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaChkYXRhc2V0UmVvcmdhbml6ZWREaXIsIG9wdGlvbnMuY29tbWl0LCBvcHRpb25zLnJlbW90ZSlcbiAgICAgICkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IEFtZW5kZW1lbnRzUmF3Q29udmVydC50b0FtZW5kZW1lbnRzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCB0ZXh0ZUxlZ2lzbGF0aWYgb2Ygb3JpZ2luYWxEYXRhLnRleHRlc0V0QW1lbmRlbWVudHNcbiAgICAgICAgICAgICAgLnRleHRlbGVnKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudCBvZiB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMpIHtcbiAgICAgICAgICAgICAgICB3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgICBhbWVuZGVtZW50LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgYW1lbmRlbWVudFNwbGl0UGF0aFthbWVuZGVtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uYW1lbmRlbWVudFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJhbWVuZGVtZW50XCIgZmlsZTogJHthbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFtZW5kZW1lbnRzUmF3Q29udmVydC50b0FtZW5kZW1lbnRXcmFwcGVyKFxuICAgICAgICAgICAgICAgICAgICBhbWVuZGVtZW50T3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShhbWVuZGVtZW50T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50ID0gYW1lbmRlbWVudE9yaWdpbmFsLmFtZW5kZW1lbnRcbiAgICAgICAgICAgICAgd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgYW1lbmRlbWVudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBjb21taXRBbmRQdXNoKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgb3B0aW9ucy5jb21taXQsIG9wdGlvbnMucmVtb3RlKVxuICAgICAgKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuRG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG4gICAgICBjb25zdCBkb2N1bWVudHNEaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcImRvY3VtZW50c1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGRvY3VtZW50c0RpcilcbiAgICAgIGNvbnN0IGRvc3NpZXJzRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJkb3NzaWVyc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGRvc3NpZXJzRGlyKVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydC50b0Rvc3NpZXJzTGVnaXNsYXRpZnMoXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvY3VtZW50IG9mIG9yaWdpbmFsRGF0YS5leHBvcnQudGV4dGVzTGVnaXNsYXRpZnNcbiAgICAgICAgICAgICAgLmRvY3VtZW50KSB7XG4gICAgICAgICAgICAgIHdyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24oZG9jdW1lbnRzRGlyLCBkb2N1bWVudClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCB7IGRvc3NpZXJQYXJsZW1lbnRhaXJlIH0gb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydFxuICAgICAgICAgICAgICAuZG9zc2llcnNMZWdpc2xhdGlmcy5kb3NzaWVyKSB7XG4gICAgICAgICAgICAgIHdyaXRlRG9zc2llclBhcmxlbWVudGFpcmVSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgZG9zc2llcnNEaXIsXG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmUsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9jdW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wiZG9jdW1lbnRcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIGRvY3VtZW50U3BsaXRQYXRoW2RvY3VtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghZG9jdW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5kb2N1bWVudFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJkb2N1bWVudFwiIGZpbGU6ICR7ZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50T3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb2N1bWVudChkb2N1bWVudE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoZG9jdW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50ID0gZG9jdW1lbnRPcmlnaW5hbC5kb2N1bWVudFxuICAgICAgICAgICAgICB3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uKGRvY3VtZW50c0RpciwgZG9jdW1lbnQpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wiZG9zc2llclBhcmxlbWVudGFpcmVcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoW1xuICAgICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgaWYgKCFkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImRvc3NpZXJQYXJsZW1lbnRhaXJlXCIgZmlsZTogJHtkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydC50b0Rvc3NpZXJQYXJsZW1lbnRhaXJlKFxuICAgICAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlID1cbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsLmRvc3NpZXJQYXJsZW1lbnRhaXJlXG4gICAgICAgICAgICAgIHdyaXRlRG9zc2llclBhcmxlbWVudGFpcmVSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgZG9zc2llcnNEaXIsXG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmUsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBjb21taXRBbmRQdXNoKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgb3B0aW9ucy5jb21taXQsIG9wdGlvbnMucmVtb3RlKVxuICAgICAgKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gU2NydXRpbnNSYXdDb252ZXJ0LnRvU2NydXRpbnMob3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjcnV0aW4gb2Ygb3JpZ2luYWxEYXRhLnNjcnV0aW5zLnNjcnV0aW4pIHtcbiAgICAgICAgICAgICAgd3JpdGVTY3J1dGluUmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgc2NydXRpbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2NydXRpblNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluRmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIHNjcnV0aW5TcGxpdFBhdGhbc2NydXRpblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIXNjcnV0aW5GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLnNjcnV0aW5TcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwic2NydXRpblwiIGZpbGU6ICR7c2NydXRpbk9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBTY3J1dGluc1Jhd0NvbnZlcnQudG9TY3J1dGluV3JhcHBlcihzY3J1dGluT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShzY3J1dGluT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluID0gc2NydXRpbk9yaWdpbmFsLnNjcnV0aW5cbiAgICAgICAgICAgICAgd3JpdGVTY3J1dGluUmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgc2NydXRpbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBjb21taXRBbmRQdXNoKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgb3B0aW9ucy5jb21taXQsIG9wdGlvbnMucmVtb3RlKVxuICAgICAgKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc3RvcmUgc3RhbmRhcmQgY29udmVyc2lvbiBvZiBkYXRlcyB0byBKU09OLlxuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBleGlzdGluZ0RhdGVUb0pzb25cblxuICByZXR1cm4gZXJyb3Jcbn1cblxuZnVuY3Rpb24gd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKFxuICBkYXRhc2V0UmVvcmdhbml6ZWREaXI6IHN0cmluZyxcbiAgYW1lbmRlbWVudDoge1xuICAgIHVpZDogc3RyaW5nXG4gICAgdGV4dGVMZWdpc2xhdGlmUmVmOiBzdHJpbmdcbiAgfSxcbik6IHZvaWQge1xuICBjb25zdCB1aWRUZXh0ZUxlZ2lzbGF0aWYgPSBhbWVuZGVtZW50LnRleHRlTGVnaXNsYXRpZlJlZlxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwodWlkVGV4dGVMZWdpc2xhdGlmLCB1bmRlZmluZWQpXG4gIGNvbnN0IHRleHRlTGVnaXNsYXRpZkRpciA9IHBhdGguam9pbihcbiAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgdWlkVGV4dGVMZWdpc2xhdGlmLFxuICApXG4gIGZzLmVuc3VyZURpclN5bmModGV4dGVMZWdpc2xhdGlmRGlyKVxuICBjb25zdCByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICB0ZXh0ZUxlZ2lzbGF0aWZEaXIsXG4gICAgYW1lbmRlbWVudC51aWQgKyBcIi5qc29uXCIsXG4gIClcbiAgZnMud3JpdGVGaWxlU3luYyhcbiAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICBKU09OLnN0cmluZ2lmeShhbWVuZGVtZW50LCBudWxsLCAyKSxcbiAgICB7XG4gICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgfSxcbiAgKVxufVxuXG5mdW5jdGlvbiB3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uKFxuICBkb2N1bWVudHNEaXI6IHN0cmluZyxcbiAgZG9jdW1lbnQ6IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tRG9jdW1lbnRVaWQoZG9jdW1lbnRzRGlyLCBkb2N1bWVudC51aWQpXG4gIGZzLndyaXRlRmlsZVN5bmMoYCR7YmFzZW5hbWV9Lmpzb25gLCBKU09OLnN0cmluZ2lmeShkb2N1bWVudCwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG9zc2llclBhcmxlbWVudGFpcmVSZW9yZ2FuaXplZEpzb24oXG4gIGRvc3NpZXJzRGlyOiBzdHJpbmcsXG4gIGRvc3NpZXJQYXJsZW1lbnRhaXJlOiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkKFxuICAgIGRvc3NpZXJzRGlyLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLnVpZCxcbiAgKVxuICBmcy53cml0ZUZpbGVTeW5jKFxuICAgIGAke2Jhc2VuYW1lfS5qc29uYCxcbiAgICBKU09OLnN0cmluZ2lmeShkb3NzaWVyUGFybGVtZW50YWlyZSwgbnVsbCwgMiksXG4gICAge1xuICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgIH0sXG4gIClcbn1cblxuZnVuY3Rpb24gd3JpdGVSZXVuaW9uUmVvcmdhbml6ZWRKc29uKFxuICByZXVuaW9uc0Rpcjogc3RyaW5nLFxuICByZXVuaW9uOiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbVJldW5pb25VaWQocmV1bmlvbnNEaXIsIHJldW5pb24udWlkKVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkocmV1bmlvbiwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHdyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbihcbiAgc2NydXRpbnNEaXI6IHN0cmluZyxcbiAgc2NydXRpbjogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21TY3J1dGluVWlkKHNjcnV0aW5zRGlyLCBzY3J1dGluLnVpZClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KHNjcnV0aW4sIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChwcm9jZXNzLmFyZ3ZbMV0uZW5kc1dpdGgoXCJyZW9yZ2FuaXplX2RhdGEudHNcIikpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGNvbW1hbmRMaW5lQXJncyhvcHRpb25zRGVmaW5pdGlvbnMpXG5cbiAgaWYgKHJlb3JnYW5pemVEYXRhKG9wdGlvbnMpKSB7XG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH0gZWxzZSB7XG4gICAgcHJvY2Vzcy5leGl0KDApXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBTUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLElBQU1BLGtCQUFrQixHQUFHLENBQ3pCO0VBQ0VDLEtBQUssRUFBRSxHQURUO0VBRUVDLElBQUksRUFBRSwrREFGUjtFQUdFQyxJQUFJLEVBQUUsT0FI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