@pathscale/rsbuild-plugin-ui-css-purge 0.9.5 → 0.9.6

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.
@@ -920,16 +920,24 @@ function joinPath(base, rel) {
920
920
  return `${base.replace(/\/+$/, "")}/${rel.replace(/^\/+/, "")}`;
921
921
  }
922
922
  function canonicalImportedName(spec, source) {
923
+ const importedName = getPathString(spec, "imported", "value") ?? getPathString(spec, "local", "value") ?? null;
924
+ const deep = (c, t) => {
925
+ if (t !== "ImportSpecifier")
926
+ return c;
927
+ if (!importedName)
928
+ return null;
929
+ if (importedName === c)
930
+ return c;
931
+ return `${c}.${importedName}`;
932
+ };
923
933
  const type = getString(spec, "type");
924
934
  if (getBoolean(spec, "isTypeOnly"))
925
935
  return null;
926
936
  const deepComponent = componentFromDeepImport(source);
927
- if (deepComponent) {
928
- return deepComponent;
929
- }
930
- if (source === "@pathscale/ui" && type === "ImportSpecifier") {
931
- return getPathString(spec, "imported", "value") ?? getPathString(spec, "local", "value") ?? null;
932
- }
937
+ if (deepComponent)
938
+ return deep(deepComponent, type);
939
+ if (source === "@pathscale/ui" && type === "ImportSpecifier")
940
+ return importedName;
933
941
  return null;
934
942
  }
935
943
  function conservativeUsage(component, source) {
@@ -1108,18 +1116,6 @@ function buildSafelists(allUsages, manifest) {
1108
1116
  classSafelist.add(cls);
1109
1117
  }
1110
1118
  for (const [propOrSlot, value] of Object.entries(entry.classes.byProp)) {
1111
- if (propOrSlot === "slot") {
1112
- if (Array.isArray(value)) {
1113
- for (const cls of value)
1114
- classSafelist.add(cls);
1115
- } else {
1116
- for (const classes of Object.values(value)) {
1117
- for (const cls of classes)
1118
- classSafelist.add(cls);
1119
- }
1120
- }
1121
- continue;
1122
- }
1123
1119
  if (Array.isArray(value)) {
1124
1120
  if (isPropUsed(propOrSlot, matchingUsages)) {
1125
1121
  for (const cls of value)
@@ -1193,18 +1189,8 @@ function findMatchingUsages(entryName, usageMap) {
1193
1189
  for (const [usageName, usages] of usageMap) {
1194
1190
  if (usageName === entryName)
1195
1191
  continue;
1196
- if (!entryName.includes(".") && rootComponent(usageName) === entryName) {
1197
- results.push(...usages.map((usage) => ({
1198
- ...usage,
1199
- component: entryName,
1200
- props: new Map([...usage.props, ["slot", "DYNAMIC"]])
1201
- })));
1202
- }
1203
- if (entryName.includes(".") && (usageName === entryRoot || rootComponent(usageName) === entryRoot)) {
1204
- results.push(...usages.map((usage) => ({
1205
- ...usage,
1206
- hasSpread: true
1207
- })));
1192
+ if (entryName.includes(".") && usageName === entryRoot) {
1193
+ results.push(...usages);
1208
1194
  }
1209
1195
  }
1210
1196
  return results;
@@ -1608,5 +1594,5 @@ export {
1608
1594
  cleanUnusedVars
1609
1595
  };
1610
1596
 
1611
- //# debugId=0E9945562E6F823A64756E2164756E21
1612
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL2RldGVjdC1saWJjL2xpYi9wcm9jZXNzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9kZXRlY3QtbGliYy9saWIvZmlsZXN5c3RlbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZGV0ZWN0LWxpYmMvbGliL2VsZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvZGV0ZWN0LWxpYmMvbGliL2RldGVjdC1saWJjLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9saWdodG5pbmdjc3Mvbm9kZS9icm93c2Vyc2xpc3RUb1RhcmdldHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xpZ2h0bmluZ2Nzcy9ub2RlL2NvbXBvc2VWaXNpdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGlnaHRuaW5nY3NzL25vZGUvZmxhZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xpZ2h0bmluZ2Nzcy9ub2RlL2luZGV4LmpzIiwgIi4uL3NyYy9wb3N0YnVpbGQtcHVyZ2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL2xpZ2h0bmluZ2Nzcy9ub2RlL2luZGV4Lm1qcyIsICIuLi9zcmMvc2Nhbi1jb25zdW1lci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIvLyBDb3B5cmlnaHQgMjAxNyBMb3ZlbGwgRnVsbGVyIGFuZCBvdGhlcnMuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IGlzTGludXggPSAoKSA9PiBwcm9jZXNzLnBsYXRmb3JtID09PSAnbGludXgnO1xuXG5sZXQgcmVwb3J0ID0gbnVsbDtcbmNvbnN0IGdldFJlcG9ydCA9ICgpID0+IHtcbiAgaWYgKCFyZXBvcnQpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmIChpc0xpbnV4KCkgJiYgcHJvY2Vzcy5yZXBvcnQpIHtcbiAgICAgIGNvbnN0IG9yaWcgPSBwcm9jZXNzLnJlcG9ydC5leGNsdWRlTmV0d29yaztcbiAgICAgIHByb2Nlc3MucmVwb3J0LmV4Y2x1ZGVOZXR3b3JrID0gdHJ1ZTtcbiAgICAgIHJlcG9ydCA9IHByb2Nlc3MucmVwb3J0LmdldFJlcG9ydCgpO1xuICAgICAgcHJvY2Vzcy5yZXBvcnQuZXhjbHVkZU5ldHdvcmsgPSBvcmlnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXBvcnQgPSB7fTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcG9ydDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0geyBpc0xpbnV4LCBnZXRSZXBvcnQgfTtcbiIsCiAgICAiLy8gQ29weXJpZ2h0IDIwMTcgTG92ZWxsIEZ1bGxlciBhbmQgb3RoZXJzLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5cbmNvbnN0IExERF9QQVRIID0gJy91c3IvYmluL2xkZCc7XG5jb25zdCBTRUxGX1BBVEggPSAnL3Byb2Mvc2VsZi9leGUnO1xuY29uc3QgTUFYX0xFTkdUSCA9IDIwNDg7XG5cbi8qKlxuICogUmVhZCB0aGUgY29udGVudCBvZiBhIGZpbGUgc3luY2hyb25vdXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybnMge0J1ZmZlcn1cbiAqL1xuY29uc3QgcmVhZEZpbGVTeW5jID0gKHBhdGgpID0+IHtcbiAgY29uc3QgZmQgPSBmcy5vcGVuU3luYyhwYXRoLCAncicpO1xuICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2MoTUFYX0xFTkdUSCk7XG4gIGNvbnN0IGJ5dGVzUmVhZCA9IGZzLnJlYWRTeW5jKGZkLCBidWZmZXIsIDAsIE1BWF9MRU5HVEgsIDApO1xuICBmcy5jbG9zZShmZCwgKCkgPT4ge30pO1xuICByZXR1cm4gYnVmZmVyLnN1YmFycmF5KDAsIGJ5dGVzUmVhZCk7XG59O1xuXG4vKipcbiAqIFJlYWQgdGhlIGNvbnRlbnQgb2YgYSBmaWxlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEByZXR1cm5zIHtQcm9taXNlPEJ1ZmZlcj59XG4gKi9cbmNvbnN0IHJlYWRGaWxlID0gKHBhdGgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgZnMub3BlbihwYXRoLCAncicsIChlcnIsIGZkKSA9PiB7XG4gICAgaWYgKGVycikge1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyhNQVhfTEVOR1RIKTtcbiAgICAgIGZzLnJlYWQoZmQsIGJ1ZmZlciwgMCwgTUFYX0xFTkdUSCwgMCwgKF8sIGJ5dGVzUmVhZCkgPT4ge1xuICAgICAgICByZXNvbHZlKGJ1ZmZlci5zdWJhcnJheSgwLCBieXRlc1JlYWQpKTtcbiAgICAgICAgZnMuY2xvc2UoZmQsICgpID0+IHt9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIExERF9QQVRILFxuICBTRUxGX1BBVEgsXG4gIHJlYWRGaWxlU3luYyxcbiAgcmVhZEZpbGVcbn07XG4iLAogICAgIi8vIENvcHlyaWdodCAyMDE3IExvdmVsbCBGdWxsZXIgYW5kIG90aGVycy5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgaW50ZXJwcmV0ZXJQYXRoID0gKGVsZikgPT4ge1xuICBpZiAoZWxmLmxlbmd0aCA8IDY0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKGVsZi5yZWFkVUludDMyQkUoMCkgIT09IDB4N0Y0NTRDNDYpIHtcbiAgICAvLyBVbmV4cGVjdGVkIG1hZ2ljIGJ5dGVzXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKGVsZi5yZWFkVUludDgoNCkgIT09IDIpIHtcbiAgICAvLyBOb3QgYSA2NC1iaXQgRUxGXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKGVsZi5yZWFkVUludDgoNSkgIT09IDEpIHtcbiAgICAvLyBOb3QgbGl0dGxlLWVuZGlhblxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IG9mZnNldCA9IGVsZi5yZWFkVUludDMyTEUoMzIpO1xuICBjb25zdCBzaXplID0gZWxmLnJlYWRVSW50MTZMRSg1NCk7XG4gIGNvbnN0IGNvdW50ID0gZWxmLnJlYWRVSW50MTZMRSg1Nik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgIGNvbnN0IGhlYWRlck9mZnNldCA9IG9mZnNldCArIChpICogc2l6ZSk7XG4gICAgY29uc3QgdHlwZSA9IGVsZi5yZWFkVUludDMyTEUoaGVhZGVyT2Zmc2V0KTtcbiAgICBpZiAodHlwZSA9PT0gMykge1xuICAgICAgY29uc3QgZmlsZU9mZnNldCA9IGVsZi5yZWFkVUludDMyTEUoaGVhZGVyT2Zmc2V0ICsgOCk7XG4gICAgICBjb25zdCBmaWxlU2l6ZSA9IGVsZi5yZWFkVUludDMyTEUoaGVhZGVyT2Zmc2V0ICsgMzIpO1xuICAgICAgcmV0dXJuIGVsZi5zdWJhcnJheShmaWxlT2Zmc2V0LCBmaWxlT2Zmc2V0ICsgZmlsZVNpemUpLnRvU3RyaW5nKCkucmVwbGFjZSgvXFwwLiokL2csICcnKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW50ZXJwcmV0ZXJQYXRoXG59O1xuIiwKICAgICIvLyBDb3B5cmlnaHQgMjAxNyBMb3ZlbGwgRnVsbGVyIGFuZCBvdGhlcnMuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IGNoaWxkUHJvY2VzcyA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKTtcbmNvbnN0IHsgaXNMaW51eCwgZ2V0UmVwb3J0IH0gPSByZXF1aXJlKCcuL3Byb2Nlc3MnKTtcbmNvbnN0IHsgTEREX1BBVEgsIFNFTEZfUEFUSCwgcmVhZEZpbGUsIHJlYWRGaWxlU3luYyB9ID0gcmVxdWlyZSgnLi9maWxlc3lzdGVtJyk7XG5jb25zdCB7IGludGVycHJldGVyUGF0aCB9ID0gcmVxdWlyZSgnLi9lbGYnKTtcblxubGV0IGNhY2hlZEZhbWlseUludGVycHJldGVyO1xubGV0IGNhY2hlZEZhbWlseUZpbGVzeXN0ZW07XG5sZXQgY2FjaGVkVmVyc2lvbkZpbGVzeXN0ZW07XG5cbmNvbnN0IGNvbW1hbmQgPSAnZ2V0Y29uZiBHTlVfTElCQ19WRVJTSU9OIDI+JjEgfHwgdHJ1ZTsgbGRkIC0tdmVyc2lvbiAyPiYxIHx8IHRydWUnO1xubGV0IGNvbW1hbmRPdXQgPSAnJztcblxuY29uc3Qgc2FmZUNvbW1hbmQgPSAoKSA9PiB7XG4gIGlmICghY29tbWFuZE91dCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY2hpbGRQcm9jZXNzLmV4ZWMoY29tbWFuZCwgKGVyciwgb3V0KSA9PiB7XG4gICAgICAgIGNvbW1hbmRPdXQgPSBlcnIgPyAnICcgOiBvdXQ7XG4gICAgICAgIHJlc29sdmUoY29tbWFuZE91dCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gY29tbWFuZE91dDtcbn07XG5cbmNvbnN0IHNhZmVDb21tYW5kU3luYyA9ICgpID0+IHtcbiAgaWYgKCFjb21tYW5kT3V0KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbW1hbmRPdXQgPSBjaGlsZFByb2Nlc3MuZXhlY1N5bmMoY29tbWFuZCwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pO1xuICAgIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAgIGNvbW1hbmRPdXQgPSAnICc7XG4gICAgfVxuICB9XG4gIHJldHVybiBjb21tYW5kT3V0O1xufTtcblxuLyoqXG4gKiBBIFN0cmluZyBjb25zdGFudCBjb250YWluaW5nIHRoZSB2YWx1ZSBgZ2xpYmNgLlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuY29uc3QgR0xJQkMgPSAnZ2xpYmMnO1xuXG4vKipcbiAqIEEgUmVnZXhwIGNvbnN0YW50IHRvIGdldCB0aGUgR0xJQkMgVmVyc2lvbi5cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFJFX0dMSUJDX1ZFUlNJT04gPSAvTElCQ1thLXowLTkgXFwtKS5dKj8oXFxkK1xcLlxcZCspL2k7XG5cbi8qKlxuICogQSBTdHJpbmcgY29uc3RhbnQgY29udGFpbmluZyB0aGUgdmFsdWUgYG11c2xgLlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuY29uc3QgTVVTTCA9ICdtdXNsJztcblxuY29uc3QgaXNGaWxlTXVzbCA9IChmKSA9PiBmLmluY2x1ZGVzKCdsaWJjLm11c2wtJykgfHwgZi5pbmNsdWRlcygnbGQtbXVzbC0nKTtcblxuY29uc3QgZmFtaWx5RnJvbVJlcG9ydCA9ICgpID0+IHtcbiAgY29uc3QgcmVwb3J0ID0gZ2V0UmVwb3J0KCk7XG4gIGlmIChyZXBvcnQuaGVhZGVyICYmIHJlcG9ydC5oZWFkZXIuZ2xpYmNWZXJzaW9uUnVudGltZSkge1xuICAgIHJldHVybiBHTElCQztcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShyZXBvcnQuc2hhcmVkT2JqZWN0cykpIHtcbiAgICBpZiAocmVwb3J0LnNoYXJlZE9iamVjdHMuc29tZShpc0ZpbGVNdXNsKSkge1xuICAgICAgcmV0dXJuIE1VU0w7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgZmFtaWx5RnJvbUNvbW1hbmQgPSAob3V0KSA9PiB7XG4gIGNvbnN0IFtnZXRjb25mLCBsZGQxXSA9IG91dC5zcGxpdCgvW1xcclxcbl0rLyk7XG4gIGlmIChnZXRjb25mICYmIGdldGNvbmYuaW5jbHVkZXMoR0xJQkMpKSB7XG4gICAgcmV0dXJuIEdMSUJDO1xuICB9XG4gIGlmIChsZGQxICYmIGxkZDEuaW5jbHVkZXMoTVVTTCkpIHtcbiAgICByZXR1cm4gTVVTTDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmNvbnN0IGZhbWlseUZyb21JbnRlcnByZXRlclBhdGggPSAocGF0aCkgPT4ge1xuICBpZiAocGF0aCkge1xuICAgIGlmIChwYXRoLmluY2x1ZGVzKCcvbGQtbXVzbC0nKSkge1xuICAgICAgcmV0dXJuIE1VU0w7XG4gICAgfSBlbHNlIGlmIChwYXRoLmluY2x1ZGVzKCcvbGQtbGludXgtJykpIHtcbiAgICAgIHJldHVybiBHTElCQztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBnZXRGYW1pbHlGcm9tTGRkQ29udGVudCA9IChjb250ZW50KSA9PiB7XG4gIGNvbnRlbnQgPSBjb250ZW50LnRvU3RyaW5nKCk7XG4gIGlmIChjb250ZW50LmluY2x1ZGVzKCdtdXNsJykpIHtcbiAgICByZXR1cm4gTVVTTDtcbiAgfVxuICBpZiAoY29udGVudC5pbmNsdWRlcygnR05VIEMgTGlicmFyeScpKSB7XG4gICAgcmV0dXJuIEdMSUJDO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgZmFtaWx5RnJvbUZpbGVzeXN0ZW0gPSBhc3luYyAoKSA9PiB7XG4gIGlmIChjYWNoZWRGYW1pbHlGaWxlc3lzdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY2FjaGVkRmFtaWx5RmlsZXN5c3RlbTtcbiAgfVxuICBjYWNoZWRGYW1pbHlGaWxlc3lzdGVtID0gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBsZGRDb250ZW50ID0gYXdhaXQgcmVhZEZpbGUoTEREX1BBVEgpO1xuICAgIGNhY2hlZEZhbWlseUZpbGVzeXN0ZW0gPSBnZXRGYW1pbHlGcm9tTGRkQ29udGVudChsZGRDb250ZW50KTtcbiAgfSBjYXRjaCAoZSkge31cbiAgcmV0dXJuIGNhY2hlZEZhbWlseUZpbGVzeXN0ZW07XG59O1xuXG5jb25zdCBmYW1pbHlGcm9tRmlsZXN5c3RlbVN5bmMgPSAoKSA9PiB7XG4gIGlmIChjYWNoZWRGYW1pbHlGaWxlc3lzdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY2FjaGVkRmFtaWx5RmlsZXN5c3RlbTtcbiAgfVxuICBjYWNoZWRGYW1pbHlGaWxlc3lzdGVtID0gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBsZGRDb250ZW50ID0gcmVhZEZpbGVTeW5jKExERF9QQVRIKTtcbiAgICBjYWNoZWRGYW1pbHlGaWxlc3lzdGVtID0gZ2V0RmFtaWx5RnJvbUxkZENvbnRlbnQobGRkQ29udGVudCk7XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIHJldHVybiBjYWNoZWRGYW1pbHlGaWxlc3lzdGVtO1xufTtcblxuY29uc3QgZmFtaWx5RnJvbUludGVycHJldGVyID0gYXN5bmMgKCkgPT4ge1xuICBpZiAoY2FjaGVkRmFtaWx5SW50ZXJwcmV0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjYWNoZWRGYW1pbHlJbnRlcnByZXRlcjtcbiAgfVxuICBjYWNoZWRGYW1pbHlJbnRlcnByZXRlciA9IG51bGw7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2VsZkNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShTRUxGX1BBVEgpO1xuICAgIGNvbnN0IHBhdGggPSBpbnRlcnByZXRlclBhdGgoc2VsZkNvbnRlbnQpO1xuICAgIGNhY2hlZEZhbWlseUludGVycHJldGVyID0gZmFtaWx5RnJvbUludGVycHJldGVyUGF0aChwYXRoKTtcbiAgfSBjYXRjaCAoZSkge31cbiAgcmV0dXJuIGNhY2hlZEZhbWlseUludGVycHJldGVyO1xufTtcblxuY29uc3QgZmFtaWx5RnJvbUludGVycHJldGVyU3luYyA9ICgpID0+IHtcbiAgaWYgKGNhY2hlZEZhbWlseUludGVycHJldGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY2FjaGVkRmFtaWx5SW50ZXJwcmV0ZXI7XG4gIH1cbiAgY2FjaGVkRmFtaWx5SW50ZXJwcmV0ZXIgPSBudWxsO1xuICB0cnkge1xuICAgIGNvbnN0IHNlbGZDb250ZW50ID0gcmVhZEZpbGVTeW5jKFNFTEZfUEFUSCk7XG4gICAgY29uc3QgcGF0aCA9IGludGVycHJldGVyUGF0aChzZWxmQ29udGVudCk7XG4gICAgY2FjaGVkRmFtaWx5SW50ZXJwcmV0ZXIgPSBmYW1pbHlGcm9tSW50ZXJwcmV0ZXJQYXRoKHBhdGgpO1xuICB9IGNhdGNoIChlKSB7fVxuICByZXR1cm4gY2FjaGVkRmFtaWx5SW50ZXJwcmV0ZXI7XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIHdpdGggdGhlIGxpYmMgZmFtaWx5IHdoZW4gaXQgY2FuIGJlIGRldGVybWluZWQsIGBudWxsYCBvdGhlcndpc2UuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTw/c3RyaW5nPn1cbiAqL1xuY29uc3QgZmFtaWx5ID0gYXN5bmMgKCkgPT4ge1xuICBsZXQgZmFtaWx5ID0gbnVsbDtcbiAgaWYgKGlzTGludXgoKSkge1xuICAgIGZhbWlseSA9IGF3YWl0IGZhbWlseUZyb21JbnRlcnByZXRlcigpO1xuICAgIGlmICghZmFtaWx5KSB7XG4gICAgICBmYW1pbHkgPSBhd2FpdCBmYW1pbHlGcm9tRmlsZXN5c3RlbSgpO1xuICAgICAgaWYgKCFmYW1pbHkpIHtcbiAgICAgICAgZmFtaWx5ID0gZmFtaWx5RnJvbVJlcG9ydCgpO1xuICAgICAgfVxuICAgICAgaWYgKCFmYW1pbHkpIHtcbiAgICAgICAgY29uc3Qgb3V0ID0gYXdhaXQgc2FmZUNvbW1hbmQoKTtcbiAgICAgICAgZmFtaWx5ID0gZmFtaWx5RnJvbUNvbW1hbmQob3V0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbWlseTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbGliYyBmYW1pbHkgd2hlbiBpdCBjYW4gYmUgZGV0ZXJtaW5lZCwgYG51bGxgIG90aGVyd2lzZS5cbiAqIEByZXR1cm5zIHs/c3RyaW5nfVxuICovXG5jb25zdCBmYW1pbHlTeW5jID0gKCkgPT4ge1xuICBsZXQgZmFtaWx5ID0gbnVsbDtcbiAgaWYgKGlzTGludXgoKSkge1xuICAgIGZhbWlseSA9IGZhbWlseUZyb21JbnRlcnByZXRlclN5bmMoKTtcbiAgICBpZiAoIWZhbWlseSkge1xuICAgICAgZmFtaWx5ID0gZmFtaWx5RnJvbUZpbGVzeXN0ZW1TeW5jKCk7XG4gICAgICBpZiAoIWZhbWlseSkge1xuICAgICAgICBmYW1pbHkgPSBmYW1pbHlGcm9tUmVwb3J0KCk7XG4gICAgICB9XG4gICAgICBpZiAoIWZhbWlseSkge1xuICAgICAgICBjb25zdCBvdXQgPSBzYWZlQ29tbWFuZFN5bmMoKTtcbiAgICAgICAgZmFtaWx5ID0gZmFtaWx5RnJvbUNvbW1hbmQob3V0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbWlseTtcbn07XG5cbi8qKlxuICogUmVzb2x2ZXMgYHRydWVgIG9ubHkgd2hlbiB0aGUgcGxhdGZvcm0gaXMgTGludXggYW5kIHRoZSBsaWJjIGZhbWlseSBpcyBub3QgYGdsaWJjYC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICovXG5jb25zdCBpc05vbkdsaWJjTGludXggPSBhc3luYyAoKSA9PiBpc0xpbnV4KCkgJiYgYXdhaXQgZmFtaWx5KCkgIT09IEdMSUJDO1xuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIG9ubHkgd2hlbiB0aGUgcGxhdGZvcm0gaXMgTGludXggYW5kIHRoZSBsaWJjIGZhbWlseSBpcyBub3QgYGdsaWJjYC5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBpc05vbkdsaWJjTGludXhTeW5jID0gKCkgPT4gaXNMaW51eCgpICYmIGZhbWlseVN5bmMoKSAhPT0gR0xJQkM7XG5cbmNvbnN0IHZlcnNpb25Gcm9tRmlsZXN5c3RlbSA9IGFzeW5jICgpID0+IHtcbiAgaWYgKGNhY2hlZFZlcnNpb25GaWxlc3lzdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY2FjaGVkVmVyc2lvbkZpbGVzeXN0ZW07XG4gIH1cbiAgY2FjaGVkVmVyc2lvbkZpbGVzeXN0ZW0gPSBudWxsO1xuICB0cnkge1xuICAgIGNvbnN0IGxkZENvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShMRERfUEFUSCk7XG4gICAgY29uc3QgdmVyc2lvbk1hdGNoID0gbGRkQ29udGVudC5tYXRjaChSRV9HTElCQ19WRVJTSU9OKTtcbiAgICBpZiAodmVyc2lvbk1hdGNoKSB7XG4gICAgICBjYWNoZWRWZXJzaW9uRmlsZXN5c3RlbSA9IHZlcnNpb25NYXRjaFsxXTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIHJldHVybiBjYWNoZWRWZXJzaW9uRmlsZXN5c3RlbTtcbn07XG5cbmNvbnN0IHZlcnNpb25Gcm9tRmlsZXN5c3RlbVN5bmMgPSAoKSA9PiB7XG4gIGlmIChjYWNoZWRWZXJzaW9uRmlsZXN5c3RlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZFZlcnNpb25GaWxlc3lzdGVtO1xuICB9XG4gIGNhY2hlZFZlcnNpb25GaWxlc3lzdGVtID0gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBsZGRDb250ZW50ID0gcmVhZEZpbGVTeW5jKExERF9QQVRIKTtcbiAgICBjb25zdCB2ZXJzaW9uTWF0Y2ggPSBsZGRDb250ZW50Lm1hdGNoKFJFX0dMSUJDX1ZFUlNJT04pO1xuICAgIGlmICh2ZXJzaW9uTWF0Y2gpIHtcbiAgICAgIGNhY2hlZFZlcnNpb25GaWxlc3lzdGVtID0gdmVyc2lvbk1hdGNoWzFdO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge31cbiAgcmV0dXJuIGNhY2hlZFZlcnNpb25GaWxlc3lzdGVtO1xufTtcblxuY29uc3QgdmVyc2lvbkZyb21SZXBvcnQgPSAoKSA9PiB7XG4gIGNvbnN0IHJlcG9ydCA9IGdldFJlcG9ydCgpO1xuICBpZiAocmVwb3J0LmhlYWRlciAmJiByZXBvcnQuaGVhZGVyLmdsaWJjVmVyc2lvblJ1bnRpbWUpIHtcbiAgICByZXR1cm4gcmVwb3J0LmhlYWRlci5nbGliY1ZlcnNpb25SdW50aW1lO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgdmVyc2lvblN1ZmZpeCA9IChzKSA9PiBzLnRyaW0oKS5zcGxpdCgvXFxzKy8pWzFdO1xuXG5jb25zdCB2ZXJzaW9uRnJvbUNvbW1hbmQgPSAob3V0KSA9PiB7XG4gIGNvbnN0IFtnZXRjb25mLCBsZGQxLCBsZGQyXSA9IG91dC5zcGxpdCgvW1xcclxcbl0rLyk7XG4gIGlmIChnZXRjb25mICYmIGdldGNvbmYuaW5jbHVkZXMoR0xJQkMpKSB7XG4gICAgcmV0dXJuIHZlcnNpb25TdWZmaXgoZ2V0Y29uZik7XG4gIH1cbiAgaWYgKGxkZDEgJiYgbGRkMiAmJiBsZGQxLmluY2x1ZGVzKE1VU0wpKSB7XG4gICAgcmV0dXJuIHZlcnNpb25TdWZmaXgobGRkMik7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIHdpdGggdGhlIGxpYmMgdmVyc2lvbiB3aGVuIGl0IGNhbiBiZSBkZXRlcm1pbmVkLCBgbnVsbGAgb3RoZXJ3aXNlLlxuICogQHJldHVybnMge1Byb21pc2U8P3N0cmluZz59XG4gKi9cbmNvbnN0IHZlcnNpb24gPSBhc3luYyAoKSA9PiB7XG4gIGxldCB2ZXJzaW9uID0gbnVsbDtcbiAgaWYgKGlzTGludXgoKSkge1xuICAgIHZlcnNpb24gPSBhd2FpdCB2ZXJzaW9uRnJvbUZpbGVzeXN0ZW0oKTtcbiAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgIHZlcnNpb24gPSB2ZXJzaW9uRnJvbVJlcG9ydCgpO1xuICAgIH1cbiAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgIGNvbnN0IG91dCA9IGF3YWl0IHNhZmVDb21tYW5kKCk7XG4gICAgICB2ZXJzaW9uID0gdmVyc2lvbkZyb21Db21tYW5kKG91dCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2ZXJzaW9uO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsaWJjIHZlcnNpb24gd2hlbiBpdCBjYW4gYmUgZGV0ZXJtaW5lZCwgYG51bGxgIG90aGVyd2lzZS5cbiAqIEByZXR1cm5zIHs/c3RyaW5nfVxuICovXG5jb25zdCB2ZXJzaW9uU3luYyA9ICgpID0+IHtcbiAgbGV0IHZlcnNpb24gPSBudWxsO1xuICBpZiAoaXNMaW51eCgpKSB7XG4gICAgdmVyc2lvbiA9IHZlcnNpb25Gcm9tRmlsZXN5c3RlbVN5bmMoKTtcbiAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgIHZlcnNpb24gPSB2ZXJzaW9uRnJvbVJlcG9ydCgpO1xuICAgIH1cbiAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgIGNvbnN0IG91dCA9IHNhZmVDb21tYW5kU3luYygpO1xuICAgICAgdmVyc2lvbiA9IHZlcnNpb25Gcm9tQ29tbWFuZChvdXQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmVyc2lvbjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBHTElCQyxcbiAgTVVTTCxcbiAgZmFtaWx5LFxuICBmYW1pbHlTeW5jLFxuICBpc05vbkdsaWJjTGludXgsXG4gIGlzTm9uR2xpYmNMaW51eFN5bmMsXG4gIHZlcnNpb24sXG4gIHZlcnNpb25TeW5jXG59O1xuIiwKICAgICJjb25zdCBCUk9XU0VSX01BUFBJTkcgPSB7XG4gIGFuZF9jaHI6ICdjaHJvbWUnLFxuICBhbmRfZmY6ICdmaXJlZm94JyxcbiAgaWVfbW9iOiAnaWUnLFxuICBvcF9tb2I6ICdvcGVyYScsXG4gIGFuZF9xcTogbnVsbCxcbiAgYW5kX3VjOiBudWxsLFxuICBiYWlkdTogbnVsbCxcbiAgYmI6IG51bGwsXG4gIGthaW9zOiBudWxsLFxuICBvcF9taW5pOiBudWxsLFxufTtcblxuZnVuY3Rpb24gYnJvd3NlcnNsaXN0VG9UYXJnZXRzKGJyb3dzZXJzbGlzdCkge1xuICBsZXQgdGFyZ2V0cyA9IHt9O1xuICBmb3IgKGxldCBicm93c2VyIG9mIGJyb3dzZXJzbGlzdCkge1xuICAgIGxldCBbbmFtZSwgdl0gPSBicm93c2VyLnNwbGl0KCcgJyk7XG4gICAgaWYgKEJST1dTRVJfTUFQUElOR1tuYW1lXSA9PT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbGV0IHZlcnNpb24gPSBwYXJzZVZlcnNpb24odik7XG4gICAgaWYgKHZlcnNpb24gPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHRhcmdldHNbbmFtZV0gPT0gbnVsbCB8fCB2ZXJzaW9uIDwgdGFyZ2V0c1tuYW1lXSkge1xuICAgICAgdGFyZ2V0c1tuYW1lXSA9IHZlcnNpb247XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldHM7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVmVyc2lvbih2ZXJzaW9uKSB7XG4gIGxldCBbbWFqb3IsIG1pbm9yID0gMCwgcGF0Y2ggPSAwXSA9IHZlcnNpb25cbiAgICAuc3BsaXQoJy0nKVswXVxuICAgIC5zcGxpdCgnLicpXG4gICAgLm1hcCh2ID0+IHBhcnNlSW50KHYsIDEwKSk7XG5cbiAgaWYgKGlzTmFOKG1ham9yKSB8fCBpc05hTihtaW5vcikgfHwgaXNOYU4ocGF0Y2gpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gKG1ham9yIDw8IDE2KSB8IChtaW5vciA8PCA4KSB8IHBhdGNoO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJyb3dzZXJzbGlzdFRvVGFyZ2V0cztcbiIsCiAgICAiLy8gQHRzLWNoZWNrXG4vKiogQHR5cGVkZWYge2ltcG9ydCgnLi9pbmRleCcpLlZpc2l0b3J9IFZpc2l0b3IgKi9cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2luZGV4JykuVmlzaXRvckZ1bmN0aW9ufSBWaXNpdG9yRnVuY3Rpb24gKi9cblxuLyoqXG4gKiBDb21wb3NlcyBtdWx0aXBsZSB2aXNpdG9yIG9iamVjdHMgaW50byBhIHNpbmdsZSBvbmUuXG4gKiBAcGFyYW0geyhWaXNpdG9yIHwgVmlzaXRvckZ1bmN0aW9uKVtdfSB2aXNpdG9ycyBcbiAqIEByZXR1cm4ge1Zpc2l0b3IgfCBWaXNpdG9yRnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2VWaXNpdG9ycyh2aXNpdG9ycykge1xuICBpZiAodmlzaXRvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHZpc2l0b3JzWzBdO1xuICB9XG4gIFxuICBpZiAodmlzaXRvcnMuc29tZSh2ID0+IHR5cGVvZiB2ID09PSAnZnVuY3Rpb24nKSkge1xuICAgIHJldHVybiAob3B0cykgPT4ge1xuICAgICAgbGV0IHYgPSB2aXNpdG9ycy5tYXAodiA9PiB0eXBlb2YgdiA9PT0gJ2Z1bmN0aW9uJyA/IHYob3B0cykgOiB2KTtcbiAgICAgIHJldHVybiBjb21wb3NlVmlzaXRvcnModik7XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAdHlwZSBWaXNpdG9yICovXG4gIGxldCByZXMgPSB7fTtcbiAgY29tcG9zZVNpbXBsZVZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdTdHlsZVNoZWV0Jyk7XG4gIGNvbXBvc2VTaW1wbGVWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnU3R5bGVTaGVldEV4aXQnKTtcbiAgY29tcG9zZU9iamVjdFZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdSdWxlJywgcnVsZVZpc2l0b3IsIHdyYXBDdXN0b21BbmRVbmtub3duQXRSdWxlKTtcbiAgY29tcG9zZU9iamVjdFZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdSdWxlRXhpdCcsIHJ1bGVWaXNpdG9yLCB3cmFwQ3VzdG9tQW5kVW5rbm93bkF0UnVsZSk7XG4gIGNvbXBvc2VPYmplY3RWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnRGVjbGFyYXRpb24nLCBkZWNsYXJhdGlvblZpc2l0b3IsIHdyYXBDdXN0b21Qcm9wZXJ0eSk7XG4gIGNvbXBvc2VPYmplY3RWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnRGVjbGFyYXRpb25FeGl0JywgZGVjbGFyYXRpb25WaXNpdG9yLCB3cmFwQ3VzdG9tUHJvcGVydHkpO1xuICBjb21wb3NlU2ltcGxlVmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ1VybCcpO1xuICBjb21wb3NlU2ltcGxlVmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ0NvbG9yJyk7XG4gIGNvbXBvc2VTaW1wbGVWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnSW1hZ2UnKTtcbiAgY29tcG9zZVNpbXBsZVZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdJbWFnZUV4aXQnKTtcbiAgY29tcG9zZVNpbXBsZVZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdMZW5ndGgnKTtcbiAgY29tcG9zZVNpbXBsZVZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdBbmdsZScpO1xuICBjb21wb3NlU2ltcGxlVmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ1JhdGlvJyk7XG4gIGNvbXBvc2VTaW1wbGVWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnUmVzb2x1dGlvbicpO1xuICBjb21wb3NlU2ltcGxlVmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ1RpbWUnKTtcbiAgY29tcG9zZVNpbXBsZVZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdDdXN0b21JZGVudCcpO1xuICBjb21wb3NlU2ltcGxlVmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ0Rhc2hlZElkZW50Jyk7XG4gIGNvbXBvc2VBcnJheUZ1bmN0aW9ucyhyZXMsIHZpc2l0b3JzLCAnTWVkaWFRdWVyeScpO1xuICBjb21wb3NlQXJyYXlGdW5jdGlvbnMocmVzLCB2aXNpdG9ycywgJ01lZGlhUXVlcnlFeGl0Jyk7XG4gIGNvbXBvc2VTaW1wbGVWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnU3VwcG9ydHNDb25kaXRpb24nKTtcbiAgY29tcG9zZVNpbXBsZVZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdTdXBwb3J0c0NvbmRpdGlvbkV4aXQnKTtcbiAgY29tcG9zZUFycmF5RnVuY3Rpb25zKHJlcywgdmlzaXRvcnMsICdTZWxlY3RvcicpO1xuICBjb21wb3NlVG9rZW5WaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnVG9rZW4nLCAndG9rZW4nLCBmYWxzZSk7XG4gIGNvbXBvc2VUb2tlblZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdGdW5jdGlvbicsICdmdW5jdGlvbicsIGZhbHNlKTtcbiAgY29tcG9zZVRva2VuVmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ0Z1bmN0aW9uRXhpdCcsICdmdW5jdGlvbicsIHRydWUpO1xuICBjb21wb3NlVG9rZW5WaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnVmFyaWFibGUnLCAndmFyJywgZmFsc2UpO1xuICBjb21wb3NlVG9rZW5WaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnVmFyaWFibGVFeGl0JywgJ3ZhcicsIHRydWUpO1xuICBjb21wb3NlVG9rZW5WaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnRW52aXJvbm1lbnRWYXJpYWJsZScsICdlbnYnLCBmYWxzZSk7XG4gIGNvbXBvc2VUb2tlblZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdFbnZpcm9ubWVudFZhcmlhYmxlRXhpdCcsICdlbnYnLCB0cnVlKTtcbiAgcmV0dXJuIHJlcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb21wb3NlVmlzaXRvcnM7XG5cbmZ1bmN0aW9uIHdyYXBDdXN0b21BbmRVbmtub3duQXRSdWxlKGssIGYpIHtcbiAgaWYgKGsgPT09ICd1bmtub3duJykge1xuICAgIHJldHVybiAodmFsdWUgPT4gZih7IHR5cGU6ICd1bmtub3duJywgdmFsdWUgfSkpO1xuICB9XG4gIGlmIChrID09PSAnY3VzdG9tJykge1xuICAgIHJldHVybiAodmFsdWUgPT4gZih7IHR5cGU6ICdjdXN0b20nLCB2YWx1ZSB9KSk7XG4gIH1cbiAgcmV0dXJuIGY7XG59XG5cbmZ1bmN0aW9uIHdyYXBDdXN0b21Qcm9wZXJ0eShrLCBmKSB7XG4gIHJldHVybiBrID09PSAnY3VzdG9tJyA/ICh2YWx1ZSA9PiBmKHsgcHJvcGVydHk6ICdjdXN0b20nLCB2YWx1ZSB9KSkgOiBmO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2luZGV4JykuVmlzaXRvclsnUnVsZSddfSBmIFxuICogQHBhcmFtIHtpbXBvcnQoJy4vYXN0JykuUnVsZX0gaXRlbSBcbiAqL1xuZnVuY3Rpb24gcnVsZVZpc2l0b3IoZiwgaXRlbSkge1xuICBpZiAodHlwZW9mIGYgPT09ICdvYmplY3QnKSB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ3Vua25vd24nKSB7XG4gICAgICBsZXQgdiA9IGYudW5rbm93bjtcbiAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdiA9IHZbaXRlbS52YWx1ZS5uYW1lXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2Py4oaXRlbS52YWx1ZSk7XG4gICAgfVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdjdXN0b20nKSB7XG4gICAgICBsZXQgdiA9IGYuY3VzdG9tO1xuICAgICAgaWYgKHR5cGVvZiB2ID09PSAnb2JqZWN0Jykge1xuICAgICAgICB2ID0gdltpdGVtLnZhbHVlLm5hbWVdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHY/LihpdGVtLnZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZbaXRlbS50eXBlXT8uKGl0ZW0pO1xuICB9XG4gIHJldHVybiBmPy4oaXRlbSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW5kZXgnKS5WaXNpdG9yWydEZWNsYXJhdGlvbiddfSBmIFxuICogQHBhcmFtIHtpbXBvcnQoJy4vYXN0JykuRGVjbGFyYXRpb259IGl0ZW0gXG4gKi9cbmZ1bmN0aW9uIGRlY2xhcmF0aW9uVmlzaXRvcihmLCBpdGVtKSB7XG4gIGlmICh0eXBlb2YgZiA9PT0gJ29iamVjdCcpIHtcbiAgICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgICBsZXQgbmFtZSA9IGl0ZW0ucHJvcGVydHk7XG4gICAgaWYgKGl0ZW0ucHJvcGVydHkgPT09ICd1bnBhcnNlZCcpIHtcbiAgICAgIG5hbWUgPSBpdGVtLnZhbHVlLnByb3BlcnR5SWQucHJvcGVydHk7XG4gICAgfSBlbHNlIGlmIChpdGVtLnByb3BlcnR5ID09PSAnY3VzdG9tJykge1xuICAgICAgbGV0IHYgPSBmLmN1c3RvbTtcbiAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdiA9IHZbaXRlbS52YWx1ZS5uYW1lXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2Py4oaXRlbS52YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBmW25hbWVdPy4oaXRlbSk7XG4gIH1cbiAgcmV0dXJuIGY/LihpdGVtKTtcbn1cblxuLyoqXG4gKiBcbiAqIEBwYXJhbSB7VmlzaXRvcltdfSB2aXNpdG9ycyBcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgXG4gKiBAcmV0dXJucyB7W2FueVtdLCBib29sZWFuLCBTZXQ8c3RyaW5nPl19XG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RPYmplY3RzT3JGdW5jdGlvbnModmlzaXRvcnMsIGtleSkge1xuICBsZXQgdmFsdWVzID0gW107XG4gIGxldCBoYXNGdW5jdGlvbiA9IGZhbHNlO1xuICBsZXQgYWxsS2V5cyA9IG5ldyBTZXQoKTtcbiAgZm9yIChsZXQgdmlzaXRvciBvZiB2aXNpdG9ycykge1xuICAgIGxldCB2ID0gdmlzaXRvcltrZXldO1xuICAgIGlmICh2KSB7XG4gICAgICBpZiAodHlwZW9mIHYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaGFzRnVuY3Rpb24gPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQga2V5IGluIHYpIHtcbiAgICAgICAgICBhbGxLZXlzLmFkZChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YWx1ZXMucHVzaCh2KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFt2YWx1ZXMsIGhhc0Z1bmN0aW9uLCBhbGxLZXlzXTtcbn1cblxuLyoqXG4gKiBAdGVtcGxhdGUge2tleW9mIFZpc2l0b3J9IEtcbiAqIEBwYXJhbSB7VmlzaXRvcn0gcmVzXG4gKiBAcGFyYW0ge1Zpc2l0b3JbXX0gdmlzaXRvcnNcbiAqIEBwYXJhbSB7S30ga2V5XG4gKiBAcGFyYW0geyh2aXNpdG9yOiBWaXNpdG9yW0tdLCBpdGVtOiBhbnkpID0+IGFueSB8IGFueVtdIHwgdm9pZH0gYXBwbHkgXG4gKiBAcGFyYW0geyhrOiBzdHJpbmcsIGY6IGFueSkgPT4gYW55fSB3cmFwS2V5IFxuICovXG5mdW5jdGlvbiBjb21wb3NlT2JqZWN0VmlzaXRvcnMocmVzLCB2aXNpdG9ycywga2V5LCBhcHBseSwgd3JhcEtleSkge1xuICBsZXQgW3ZhbHVlcywgaGFzRnVuY3Rpb24sIGFsbEtleXNdID0gZXh0cmFjdE9iamVjdHNPckZ1bmN0aW9ucyh2aXNpdG9ycywga2V5KTtcbiAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJlc1trZXldID0gdmFsdWVzWzBdO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBmID0gY3JlYXRlQXJyYXlWaXNpdG9yKHZpc2l0b3JzLCAodmlzaXRvciwgaXRlbSkgPT4gYXBwbHkodmlzaXRvcltrZXldLCBpdGVtKSk7XG4gIGlmIChoYXNGdW5jdGlvbikge1xuICAgIHJlc1trZXldID0gZjtcbiAgfSBlbHNlIHtcbiAgICAvKiogQHR5cGUge2FueX0gKi9cbiAgICBsZXQgdiA9IHt9O1xuICAgIGZvciAobGV0IGsgb2YgYWxsS2V5cykge1xuICAgICAgdltrXSA9IHdyYXBLZXkoaywgZik7XG4gICAgfVxuICAgIHJlc1trZXldID0gdjtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7VmlzaXRvcn0gcmVzIFxuICogQHBhcmFtIHtWaXNpdG9yW119IHZpc2l0b3JzIFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2FzdCcpLlRva2VuT3JWYWx1ZVsndHlwZSddfSB0eXBlIFxuICogQHBhcmFtIHtib29sZWFufSBpc0V4aXQgXG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2VUb2tlblZpc2l0b3JzKHJlcywgdmlzaXRvcnMsIGtleSwgdHlwZSwgaXNFeGl0KSB7XG4gIGxldCBbdmFsdWVzLCBoYXNGdW5jdGlvbiwgYWxsS2V5c10gPSBleHRyYWN0T2JqZWN0c09yRnVuY3Rpb25zKHZpc2l0b3JzLCBrZXkpO1xuICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh2YWx1ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgcmVzW2tleV0gPSB2YWx1ZXNbMF07XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGYgPSBjcmVhdGVUb2tlblZpc2l0b3IodmlzaXRvcnMsIHR5cGUsIGlzRXhpdCk7XG4gIGlmIChoYXNGdW5jdGlvbikge1xuICAgIHJlc1trZXldID0gZjtcbiAgfSBlbHNlIHtcbiAgICBsZXQgdiA9IHt9O1xuICAgIGZvciAobGV0IGtleSBvZiBhbGxLZXlzKSB7XG4gICAgICB2W2tleV0gPSBmO1xuICAgIH1cbiAgICByZXNba2V5XSA9IHY7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge1Zpc2l0b3JbXX0gdmlzaXRvcnMgXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9hc3QnKS5Ub2tlbk9yVmFsdWVbJ3R5cGUnXX0gdHlwZSBcbiAqL1xuZnVuY3Rpb24gY3JlYXRlVG9rZW5WaXNpdG9yKHZpc2l0b3JzLCB0eXBlLCBpc0V4aXQpIHtcbiAgbGV0IHYgPSBjcmVhdGVBcnJheVZpc2l0b3IodmlzaXRvcnMsICh2aXNpdG9yLCAvKiogQHR5cGUge2ltcG9ydCgnLi9hc3QnKS5Ub2tlbk9yVmFsdWV9ICovIGl0ZW0pID0+IHtcbiAgICBsZXQgZjtcbiAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xuICAgICAgY2FzZSAndG9rZW4nOlxuICAgICAgICBmID0gdmlzaXRvci5Ub2tlbjtcbiAgICAgICAgaWYgKHR5cGVvZiBmID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGYgPSBmW2l0ZW0udmFsdWUudHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgIGYgPSBpc0V4aXQgPyB2aXNpdG9yLkZ1bmN0aW9uRXhpdCA6IHZpc2l0b3IuRnVuY3Rpb247XG4gICAgICAgIGlmICh0eXBlb2YgZiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBmID0gZltpdGVtLnZhbHVlLm5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndmFyJzpcbiAgICAgICAgZiA9IGlzRXhpdCA/IHZpc2l0b3IuVmFyaWFibGVFeGl0IDogdmlzaXRvci5WYXJpYWJsZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlbnYnOlxuICAgICAgICBmID0gaXNFeGl0ID8gdmlzaXRvci5FbnZpcm9ubWVudFZhcmlhYmxlRXhpdCA6IHZpc2l0b3IuRW52aXJvbm1lbnRWYXJpYWJsZTtcbiAgICAgICAgaWYgKHR5cGVvZiBmID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGxldCBuYW1lO1xuICAgICAgICAgIHN3aXRjaCAoaXRlbS52YWx1ZS5uYW1lLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3VhJzpcbiAgICAgICAgICAgIGNhc2UgJ3Vua25vd24nOlxuICAgICAgICAgICAgICBuYW1lID0gaXRlbS52YWx1ZS5uYW1lLnZhbHVlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2N1c3RvbSc6XG4gICAgICAgICAgICAgIG5hbWUgPSBpdGVtLnZhbHVlLm5hbWUuaWRlbnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmID0gZltuYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NvbG9yJzpcbiAgICAgICAgZiA9IHZpc2l0b3IuQ29sb3I7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndXJsJzpcbiAgICAgICAgZiA9IHZpc2l0b3IuVXJsO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xlbmd0aCc6XG4gICAgICAgIGYgPSB2aXNpdG9yLkxlbmd0aDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhbmdsZSc6XG4gICAgICAgIGYgPSB2aXNpdG9yLkFuZ2xlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RpbWUnOlxuICAgICAgICBmID0gdmlzaXRvci5UaW1lO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Jlc29sdXRpb24nOlxuICAgICAgICBmID0gdmlzaXRvci5SZXNvbHV0aW9uO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Rhc2hlZC1pZGVudCc6XG4gICAgICAgIGYgPSB2aXNpdG9yLkRhc2hlZElkZW50O1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoIWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgcmVzID0gZihpdGVtLnZhbHVlKTtcbiAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xuICAgICAgY2FzZSAnY29sb3InOlxuICAgICAgY2FzZSAndXJsJzpcbiAgICAgIGNhc2UgJ2xlbmd0aCc6XG4gICAgICBjYXNlICdhbmdsZSc6XG4gICAgICBjYXNlICd0aW1lJzpcbiAgICAgIGNhc2UgJ3Jlc29sdXRpb24nOlxuICAgICAgY2FzZSAnZGFzaGVkLWlkZW50JzpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzKSkge1xuICAgICAgICAgIHJlcyA9IHJlcy5tYXAodmFsdWUgPT4gKHsgdHlwZTogaXRlbS50eXBlLCB2YWx1ZSB9KSlcbiAgICAgICAgfSBlbHNlIGlmIChyZXMpIHtcbiAgICAgICAgICByZXMgPSB7IHR5cGU6IGl0ZW0udHlwZSwgdmFsdWU6IHJlcyB9O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH0pO1xuXG4gIHJldHVybiB2YWx1ZSA9PiB2KHsgdHlwZSwgdmFsdWUgfSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtWaXNpdG9yW119IHZpc2l0b3JzIFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdEZ1bmN0aW9ucyh2aXNpdG9ycywga2V5KSB7XG4gIGxldCBmdW5jdGlvbnMgPSBbXTtcbiAgZm9yIChsZXQgdmlzaXRvciBvZiB2aXNpdG9ycykge1xuICAgIGxldCBmID0gdmlzaXRvcltrZXldO1xuICAgIGlmIChmKSB7XG4gICAgICBmdW5jdGlvbnMucHVzaChmKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9ucztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1Zpc2l0b3J9IHJlcyBcbiAqIEBwYXJhbSB7VmlzaXRvcltdfSB2aXNpdG9ycyBcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgXG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2VTaW1wbGVWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCBrZXkpIHtcbiAgbGV0IGZ1bmN0aW9ucyA9IGV4dHJhY3RGdW5jdGlvbnModmlzaXRvcnMsIGtleSk7XG4gIGlmIChmdW5jdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZ1bmN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICByZXNba2V5XSA9IGZ1bmN0aW9uc1swXTtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXNba2V5XSA9IGFyZyA9PiB7XG4gICAgbGV0IG11dGF0ZWQgPSBmYWxzZTtcbiAgICBmb3IgKGxldCBmIG9mIGZ1bmN0aW9ucykge1xuICAgICAgbGV0IHJlcyA9IGYoYXJnKTtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgYXJnID0gcmVzO1xuICAgICAgICBtdXRhdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbXV0YXRlZCA/IGFyZyA6IHVuZGVmaW5lZDtcbiAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1Zpc2l0b3J9IHJlcyBcbiAqIEBwYXJhbSB7VmlzaXRvcltdfSB2aXNpdG9ycyBcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgXG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2VBcnJheUZ1bmN0aW9ucyhyZXMsIHZpc2l0b3JzLCBrZXkpIHtcbiAgbGV0IGZ1bmN0aW9ucyA9IGV4dHJhY3RGdW5jdGlvbnModmlzaXRvcnMsIGtleSk7XG4gIGlmIChmdW5jdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZ1bmN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICByZXNba2V5XSA9IGZ1bmN0aW9uc1swXTtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXNba2V5XSA9IGNyZWF0ZUFycmF5VmlzaXRvcihmdW5jdGlvbnMsIChmLCBpdGVtKSA9PiBmKGl0ZW0pKTtcbn1cblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHRlbXBsYXRlIFZcbiAqIEBwYXJhbSB7VFtdfSB2aXNpdG9ycyBcbiAqIEBwYXJhbSB7KHZpc2l0b3I6IFQsIGl0ZW06IFYpID0+IFYgfCBWW10gfCB2b2lkfSBhcHBseSBcbiAqIEByZXR1cm5zIHsoaXRlbTogVikgPT4gViB8IFZbXSB8IHZvaWR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFycmF5VmlzaXRvcih2aXNpdG9ycywgYXBwbHkpIHtcbiAgbGV0IHNlZW4gPSBuZXcgQml0c2V0KHZpc2l0b3JzLmxlbmd0aCk7XG4gIHJldHVybiBhcmcgPT4ge1xuICAgIGxldCBhcnIgPSBbYXJnXTtcbiAgICBsZXQgbXV0YXRlZCA9IGZhbHNlO1xuICAgIHNlZW4uY2xlYXIoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gRm9yIGVhY2ggdmFsdWUsIGNhbGwgYWxsIHZpc2l0b3JzLiBJZiBhIHZpc2l0b3IgcmV0dXJucyBhIG5ldyB2YWx1ZSxcbiAgICAgIC8vIHdlIHN0YXJ0IG92ZXIsIGJ1dCBza2lwIHRoZSB2aXNpdG9yIHRoYXQgZ2VuZXJhdGVkIHRoZSB2YWx1ZSBvciBzYXdcbiAgICAgIC8vIGl0IGJlZm9yZSAodG8gYXZvaWQgY3ljbGVzKS4gVGhpcyB3YXksIHZpc2l0b3JzIGNhbiBiZSBjb21wb3NlZCBpbiBhbnkgb3JkZXIuIFxuICAgICAgZm9yIChsZXQgdiA9IDA7IHYgPCB2aXNpdG9ycy5sZW5ndGggJiYgaSA8IGFyci5sZW5ndGg7KSB7XG4gICAgICAgIGlmIChzZWVuLmdldCh2KSkge1xuICAgICAgICAgIHYrKztcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBpdGVtID0gYXJyW2ldO1xuICAgICAgICBsZXQgdmlzaXRvciA9IHZpc2l0b3JzW3ZdO1xuICAgICAgICBsZXQgcmVzID0gYXBwbHkodmlzaXRvciwgaXRlbSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcykpIHtcbiAgICAgICAgICBpZiAocmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgYXJyLnNwbGljZShpLCAxKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGFycltpXSA9IHJlc1swXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJyLnNwbGljZShpLCAxLCAuLi5yZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBtdXRhdGVkID0gdHJ1ZTtcbiAgICAgICAgICBzZWVuLnNldCh2KTtcbiAgICAgICAgICB2ID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChyZXMpIHtcbiAgICAgICAgICBhcnJbaV0gPSByZXM7XG4gICAgICAgICAgbXV0YXRlZCA9IHRydWU7XG4gICAgICAgICAgc2Vlbi5zZXQodik7XG4gICAgICAgICAgdiA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdisrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFtdXRhdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyci5sZW5ndGggPT09IDEgPyBhcnJbMF0gOiBhcnI7XG4gIH07XG59XG5cbmNsYXNzIEJpdHNldCB7XG4gIGNvbnN0cnVjdG9yKG1heEJpdHMgPSAzMikge1xuICAgIHRoaXMuYml0cyA9IDA7XG4gICAgdGhpcy5tb3JlID0gbWF4Qml0cyA+IDMyID8gbmV3IFVpbnQzMkFycmF5KE1hdGguY2VpbCgobWF4Qml0cyAtIDMyKSAvIDMyKSkgOiBudWxsO1xuICB9XG5cbiAgLyoqIEBwYXJhbSB7bnVtYmVyfSBiaXQgKi9cbiAgZ2V0KGJpdCkge1xuICAgIGlmIChiaXQgPj0gMzIgJiYgdGhpcy5tb3JlKSB7XG4gICAgICBsZXQgaSA9IE1hdGguZmxvb3IoKGJpdCAtIDMyKSAvIDMyKTtcbiAgICAgIGxldCBiID0gYml0ICUgMzI7XG4gICAgICByZXR1cm4gQm9vbGVhbih0aGlzLm1vcmVbaV0gJiAoMSA8PCBiKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBCb29sZWFuKHRoaXMuYml0cyAmICgxIDw8IGJpdCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAcGFyYW0ge251bWJlcn0gYml0ICovXG4gIHNldChiaXQpIHtcbiAgICBpZiAoYml0ID49IDMyICYmIHRoaXMubW9yZSkge1xuICAgICAgbGV0IGkgPSBNYXRoLmZsb29yKChiaXQgLSAzMikgLyAzMik7XG4gICAgICBsZXQgYiA9IGJpdCAlIDMyO1xuICAgICAgdGhpcy5tb3JlW2ldIHw9IDEgPDwgYjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iaXRzIHw9IDEgPDwgYml0O1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuYml0cyA9IDA7XG4gICAgaWYgKHRoaXMubW9yZSkge1xuICAgICAgdGhpcy5tb3JlLmZpbGwoMCk7XG4gICAgfVxuICB9XG59XG4iLAogICAgIi8vIFRoaXMgZmlsZSBpcyBhdXRvZ2VuZXJhdGVkIGJ5IGJ1aWxkLXByZWZpeGVzLmpzLiBETyBOT1QgRURJVCFcblxuZXhwb3J0cy5GZWF0dXJlcyA9IHtcbiAgTmVzdGluZzogMSxcbiAgTm90U2VsZWN0b3JMaXN0OiAyLFxuICBEaXJTZWxlY3RvcjogNCxcbiAgTGFuZ1NlbGVjdG9yTGlzdDogOCxcbiAgSXNTZWxlY3RvcjogMTYsXG4gIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzUGVyY2VudDogMzIsXG4gIE1lZGlhSW50ZXJ2YWxTeW50YXg6IDY0LFxuICBNZWRpYVJhbmdlU3ludGF4OiAxMjgsXG4gIEN1c3RvbU1lZGlhUXVlcmllczogMjU2LFxuICBDbGFtcEZ1bmN0aW9uOiA1MTIsXG4gIENvbG9yRnVuY3Rpb246IDEwMjQsXG4gIE9rbGFiQ29sb3JzOiAyMDQ4LFxuICBMYWJDb2xvcnM6IDQwOTYsXG4gIFAzQ29sb3JzOiA4MTkyLFxuICBIZXhBbHBoYUNvbG9yczogMTYzODQsXG4gIFNwYWNlU2VwYXJhdGVkQ29sb3JOb3RhdGlvbjogMzI3NjgsXG4gIEZvbnRGYW1pbHlTeXN0ZW1VaTogNjU1MzYsXG4gIERvdWJsZVBvc2l0aW9uR3JhZGllbnRzOiAxMzEwNzIsXG4gIFZlbmRvclByZWZpeGVzOiAyNjIxNDQsXG4gIExvZ2ljYWxQcm9wZXJ0aWVzOiA1MjQyODgsXG4gIExpZ2h0RGFyazogMTA0ODU3NixcbiAgU2VsZWN0b3JzOiAzMSxcbiAgTWVkaWFRdWVyaWVzOiA0NDgsXG4gIENvbG9yczogMTExMzA4OCxcbn07XG4iLAogICAgImxldCBwYXJ0cyA9IFtwcm9jZXNzLnBsYXRmb3JtLCBwcm9jZXNzLmFyY2hdO1xuaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdsaW51eCcpIHtcbiAgY29uc3QgeyBNVVNMLCBmYW1pbHlTeW5jIH0gPSByZXF1aXJlKCdkZXRlY3QtbGliYycpO1xuICBjb25zdCBmYW1pbHkgPSBmYW1pbHlTeW5jKCk7XG4gIGlmIChmYW1pbHkgPT09IE1VU0wpIHtcbiAgICBwYXJ0cy5wdXNoKCdtdXNsJyk7XG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5hcmNoID09PSAnYXJtJykge1xuICAgIHBhcnRzLnB1c2goJ2dudWVhYmloZicpO1xuICB9IGVsc2Uge1xuICAgIHBhcnRzLnB1c2goJ2dudScpO1xuICB9XG59IGVsc2UgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgcGFydHMucHVzaCgnbXN2YycpO1xufVxuXG5sZXQgbmF0aXZlO1xudHJ5IHtcbiAgbmF0aXZlID0gcmVxdWlyZShgbGlnaHRuaW5nY3NzLSR7cGFydHMuam9pbignLScpfWApO1xufSBjYXRjaCAoZXJyKSB7XG4gIG5hdGl2ZSA9IHJlcXVpcmUoYC4uL2xpZ2h0bmluZ2Nzcy4ke3BhcnRzLmpvaW4oJy0nKX0ubm9kZWApO1xufVxuXG5tb2R1bGUuZXhwb3J0cy50cmFuc2Zvcm0gPSB3cmFwKG5hdGl2ZS50cmFuc2Zvcm0pO1xubW9kdWxlLmV4cG9ydHMudHJhbnNmb3JtU3R5bGVBdHRyaWJ1dGUgPSB3cmFwKG5hdGl2ZS50cmFuc2Zvcm1TdHlsZUF0dHJpYnV0ZSk7XG5tb2R1bGUuZXhwb3J0cy5idW5kbGUgPSB3cmFwKG5hdGl2ZS5idW5kbGUpO1xubW9kdWxlLmV4cG9ydHMuYnVuZGxlQXN5bmMgPSB3cmFwKG5hdGl2ZS5idW5kbGVBc3luYyk7XG5tb2R1bGUuZXhwb3J0cy5icm93c2Vyc2xpc3RUb1RhcmdldHMgPSByZXF1aXJlKCcuL2Jyb3dzZXJzbGlzdFRvVGFyZ2V0cycpO1xubW9kdWxlLmV4cG9ydHMuY29tcG9zZVZpc2l0b3JzID0gcmVxdWlyZSgnLi9jb21wb3NlVmlzaXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzLkZlYXR1cmVzID0gcmVxdWlyZSgnLi9mbGFncycpLkZlYXR1cmVzO1xuXG5mdW5jdGlvbiB3cmFwKGNhbGwpIHtcbiAgcmV0dXJuIChvcHRpb25zKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnZpc2l0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGxldCBkZXBzID0gW107XG4gICAgICBvcHRpb25zLnZpc2l0b3IgPSBvcHRpb25zLnZpc2l0b3Ioe1xuICAgICAgICBhZGREZXBlbmRlbmN5KGRlcCkge1xuICAgICAgICAgIGRlcHMucHVzaChkZXApO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgbGV0IHJlc3VsdCA9IGNhbGwob3B0aW9ucyk7XG4gICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQudGhlbihyZXMgPT4ge1xuICAgICAgICAgIGlmIChkZXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmVzLmRlcGVuZGVuY2llcyA/Pz0gW107XG4gICAgICAgICAgICByZXMuZGVwZW5kZW5jaWVzLnB1c2goLi4uZGVwcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChkZXBzLmxlbmd0aCkge1xuICAgICAgICByZXN1bHQuZGVwZW5kZW5jaWVzID8/PSBbXTtcbiAgICAgICAgcmVzdWx0LmRlcGVuZGVuY2llcy5wdXNoKC4uLmRlcHMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNhbGwob3B0aW9ucyk7XG4gICAgfVxuICB9O1xufVxuIiwKICAgICIjIS91c3IvYmluL2VudiBidW5cbi8qKlxuICogUG9zdGJ1aWxkIENTUyBwdXJnZSDigJQgc3RhbmRhbG9uZSBCdW4gc2NyaXB0LlxuICpcbiAqIFJ1bnMgYWZ0ZXIgcnNidWlsZCBidWlsZCwgcHVyZ2VzIENTUyBmaWxlcyBpbiBkaXN0LyB1c2luZyBhIGRhdGFiYXNlLWZpcnN0XG4gKiBjb21wb25lbnQgbWFuaWZlc3QgYW5kIGNvbnN1bWVyIEpTWCB1c2FnZSBhbmFseXNpcy5cbiAqXG4gKiBDb25zZXJ2YXRpdmUgcnVsZXM6XG4gKiAgIC0gc2VsZWN0b3JzIG93bmVkIG9ubHkgYnkgdW51c2VkIGtub3duIGNvbXBvbmVudHMgY2FuIGJlIHJlbW92ZWRcbiAqICAgLSBzZWxlY3RvcnMgb3duZWQgYnkgdXNlZCBjb21wb25lbnRzIGJ1dCB1bnVzZWQga25vd24gcHJvcCB2YXJpYW50cyBjYW4gYmUgcmVtb3ZlZFxuICogICAtIHNlbGVjdG9ycyB3aXRoIHVua25vd24gb3duZXJzaGlwIGFyZSBrZXB0XG4gKiAgIC0gZGF0YS9hcmlhIHJ1bnRpbWUgc3RhdGUgaXMga2VwdCB3aGVuIHRoZSBvd25pbmcgY29tcG9uZW50IHNlbGVjdG9yIGlzIGtlcHRcbiAqICAgLSB2YXJzL2tleWZyYW1lcyBhcmUgcmVtb3ZlZCBvbmx5IGFmdGVyIHNlbGVjdG9yIHB1cmdlIHByb3ZlcyB0aGVtIHVucmVmZXJlbmNlZFxuICovXG5cbmltcG9ydCB7IEdsb2IgfSBmcm9tIFwiYnVuXCI7XG5pbXBvcnQgeyB0cmFuc2Zvcm0gfSBmcm9tIFwibGlnaHRuaW5nY3NzXCI7XG5pbXBvcnQgcG9zdGNzcyBmcm9tIFwicG9zdGNzc1wiO1xuaW1wb3J0IHR5cGUgeyBBdFJ1bGUsIFJ1bGUgfSBmcm9tIFwicG9zdGNzc1wiO1xuaW1wb3J0IHsgYnVpbGRTYWZlbGlzdHMsIHNjYW5Db25zdW1lclNvdXJjZSB9IGZyb20gXCIuL3NjYW4tY29uc3VtZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0Q29tcG9uZW50UHVyZ2VSZWNvcmQsXG5cdExlZ2FjeUNvbXBvbmVudE1hbmlmZXN0LFxuXHRQdXJnZU1hbmlmZXN0LFxuXHRTYWZlbGlzdHMsXG59IGZyb20gXCIuL3NjYW4tY29uc3VtZXJcIjtcblxuLy8g4pSA4pSAIENMSSBhcmdzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiBwYXJzZUFyZ3MoYXJndjogc3RyaW5nW10pOiB7XG5cdGRpc3REaXI6IHN0cmluZztcblx0c3JjRGlyOiBzdHJpbmc7XG5cdG1hbmlmZXN0UGF0aDogc3RyaW5nO1xufSB7XG5cdGNvbnN0IGFyZ3MgPSBhcmd2LnNsaWNlKDIpO1xuXHRsZXQgZGlzdERpciA9IFwiLi9kaXN0XCI7XG5cdGxldCBzcmNEaXIgPSBcIi4vc3JjXCI7XG5cdGxldCBtYW5pZmVzdFBhdGggPSBcIlwiO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuXHRcdGlmIChhcmdzW2ldID09PSBcIi0tZGlzdFwiICYmIGFyZ3NbaSArIDFdKSBkaXN0RGlyID0gYXJnc1srK2ldO1xuXHRcdGVsc2UgaWYgKGFyZ3NbaV0gPT09IFwiLS1zcmNcIiAmJiBhcmdzW2kgKyAxXSkgc3JjRGlyID0gYXJnc1srK2ldO1xuXHRcdGVsc2UgaWYgKGFyZ3NbaV0gPT09IFwiLS1tYW5pZmVzdFwiICYmIGFyZ3NbaSArIDFdKSBtYW5pZmVzdFBhdGggPSBhcmdzWysraV07XG5cdH1cblxuXHRpZiAoIW1hbmlmZXN0UGF0aCkge1xuXHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcIlVzYWdlOiBidW54IEBwYXRoc2NhbGUvcnNidWlsZC1wbHVnaW4tdWktY3NzLXB1cmdlIC0tbWFuaWZlc3QgPHBhdGg+IFstLWRpc3QgPHBhdGg+XSBbLS1zcmMgPHBhdGg+XVwiLFxuXHRcdCk7XG5cdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHR9XG5cblx0cmV0dXJuIHsgZGlzdERpciwgc3JjRGlyLCBtYW5pZmVzdFBhdGggfTtcbn1cblxuLy8g4pSA4pSAIERhdGFiYXNlIG5vcm1hbGl6YXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmludGVyZmFjZSBOb3JtYWxpemVkQ29tcG9uZW50UmVjb3JkIGV4dGVuZHMgTGVnYWN5Q29tcG9uZW50TWFuaWZlc3Qge1xuXHRrZXk6IHN0cmluZztcblx0Y29tcG9uZW50OiBzdHJpbmc7XG5cdHBhcnQ/OiBzdHJpbmc7XG5cdHNlbGVjdG9yczogc3RyaW5nW107XG5cdGF0dHJpYnV0ZVNlbGVjdG9yczogc3RyaW5nW107XG5cdGNzc1ZhcnM6IHtcblx0XHRkZWNsYXJlZDogc3RyaW5nW107XG5cdFx0cmVmZXJlbmNlZDogc3RyaW5nW107XG5cdH07XG5cdGtleWZyYW1lczoge1xuXHRcdGRlY2xhcmVkOiBzdHJpbmdbXTtcblx0XHRyZWZlcmVuY2VkOiBzdHJpbmdbXTtcblx0fTtcbn1cblxuaW50ZXJmYWNlIE5vcm1hbGl6ZWRQdXJnZURhdGFiYXNlIHtcblx0dmVyc2lvbjogMjtcblx0Y29tcG9uZW50czogUmVjb3JkPHN0cmluZywgTm9ybWFsaXplZENvbXBvbmVudFJlY29yZD47XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVB1cmdlRGF0YWJhc2UoXG5cdG1hbmlmZXN0OiBQdXJnZU1hbmlmZXN0LFxuKTogTm9ybWFsaXplZFB1cmdlRGF0YWJhc2Uge1xuXHRjb25zdCByYXdDb21wb25lbnRzID1cblx0XHRcInZlcnNpb25cIiBpbiBtYW5pZmVzdCAmJiBtYW5pZmVzdC52ZXJzaW9uID09PSAyXG5cdFx0XHQ/IG1hbmlmZXN0LmNvbXBvbmVudHNcblx0XHRcdDogbWFuaWZlc3Q7XG5cdGNvbnN0IGNvbXBvbmVudHM6IFJlY29yZDxzdHJpbmcsIE5vcm1hbGl6ZWRDb21wb25lbnRSZWNvcmQ+ID0ge307XG5cblx0Zm9yIChjb25zdCBba2V5LCByZWNvcmRdIG9mIE9iamVjdC5lbnRyaWVzKHJhd0NvbXBvbmVudHMpKSB7XG5cdFx0Y29uc3QgbWF5YmVWMiA9IHJlY29yZCBhcyBDb21wb25lbnRQdXJnZVJlY29yZDtcblx0XHRjb25zdCBbZmFsbGJhY2tDb21wb25lbnQsIGZhbGxiYWNrUGFydF0gPSBzcGxpdENvbXBvbmVudEtleShrZXkpO1xuXHRcdGNvbXBvbmVudHNba2V5XSA9IHtcblx0XHRcdC4uLnJlY29yZCxcblx0XHRcdGtleTogbWF5YmVWMi5rZXkgPz8ga2V5LFxuXHRcdFx0Y29tcG9uZW50OiBtYXliZVYyLmNvbXBvbmVudCA/PyBmYWxsYmFja0NvbXBvbmVudCxcblx0XHRcdHBhcnQ6IG1heWJlVjIucGFydCA/PyBmYWxsYmFja1BhcnQsXG5cdFx0XHRzZWxlY3RvcnM6IG1heWJlVjIuc2VsZWN0b3JzID8/IFtdLFxuXHRcdFx0YXR0cmlidXRlU2VsZWN0b3JzOiBtYXliZVYyLmF0dHJpYnV0ZVNlbGVjdG9ycyA/PyBbXSxcblx0XHRcdGNzc1ZhcnM6IHtcblx0XHRcdFx0ZGVjbGFyZWQ6IG1heWJlVjIuY3NzVmFycz8uZGVjbGFyZWQgPz8gW10sXG5cdFx0XHRcdHJlZmVyZW5jZWQ6IG1heWJlVjIuY3NzVmFycz8ucmVmZXJlbmNlZCA/PyBbXSxcblx0XHRcdH0sXG5cdFx0XHRrZXlmcmFtZXM6IHtcblx0XHRcdFx0ZGVjbGFyZWQ6IG1heWJlVjIua2V5ZnJhbWVzPy5kZWNsYXJlZCA/PyBbXSxcblx0XHRcdFx0cmVmZXJlbmNlZDogbWF5YmVWMi5rZXlmcmFtZXM/LnJlZmVyZW5jZWQgPz8gW10sXG5cdFx0XHR9LFxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4geyB2ZXJzaW9uOiAyLCBjb21wb25lbnRzIH07XG59XG5cbmZ1bmN0aW9uIHNwbGl0Q29tcG9uZW50S2V5KGtleTogc3RyaW5nKTogW3N0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkXSB7XG5cdGNvbnN0IFtjb21wb25lbnQsIC4uLnBhcnRdID0ga2V5LnNwbGl0KFwiLlwiKTtcblx0cmV0dXJuIFtjb21wb25lbnQsIHBhcnQubGVuZ3RoID4gMCA/IHBhcnQuam9pbihcIi5cIikgOiB1bmRlZmluZWRdO1xufVxuXG5mdW5jdGlvbiByb290Q29tcG9uZW50KGtleTogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIGtleS5zcGxpdChcIi5cIilbMF07XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RDbGFzc2VzRnJvbUVudHJ5KGVudHJ5OiBMZWdhY3lDb21wb25lbnRNYW5pZmVzdCk6IHN0cmluZ1tdIHtcblx0Y29uc3QgcmVzdWx0ID0gWy4uLmVudHJ5LmNsYXNzZXMuYWx3YXlzXTtcblx0Zm9yIChjb25zdCB2YWx1ZSBvZiBPYmplY3QudmFsdWVzKGVudHJ5LmNsYXNzZXMuYnlQcm9wKSkge1xuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0cmVzdWx0LnB1c2goLi4udmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKGNvbnN0IGNsYXNzZXMgb2YgT2JqZWN0LnZhbHVlcyh2YWx1ZSkpIHtcblx0XHRcdFx0cmVzdWx0LnB1c2goLi4uY2xhc3Nlcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBbLi4ubmV3IFNldChyZXN1bHQpXTtcbn1cblxuZnVuY3Rpb24gYnVpbGRDbGFzc093bmVycyhcblx0ZGF0YWJhc2U6IE5vcm1hbGl6ZWRQdXJnZURhdGFiYXNlLFxuKTogTWFwPHN0cmluZywgU2V0PHN0cmluZz4+IHtcblx0Y29uc3Qgb3duZXJzID0gbmV3IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PigpO1xuXHRmb3IgKGNvbnN0IFtrZXksIGVudHJ5XSBvZiBPYmplY3QuZW50cmllcyhkYXRhYmFzZS5jb21wb25lbnRzKSkge1xuXHRcdGZvciAoY29uc3QgY2xzIG9mIGNvbGxlY3RDbGFzc2VzRnJvbUVudHJ5KGVudHJ5KSkge1xuXHRcdFx0Y29uc3QgZXhpc3RpbmcgPSBvd25lcnMuZ2V0KGNscykgPz8gbmV3IFNldDxzdHJpbmc+KCk7XG5cdFx0XHRleGlzdGluZy5hZGQoa2V5KTtcblx0XHRcdG93bmVycy5zZXQoY2xzLCBleGlzdGluZyk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvd25lcnM7XG59XG5cbmZ1bmN0aW9uIGlzUmVjb3JkVXNlZChyZWNvcmRLZXk6IHN0cmluZywgc2FmZWxpc3RzOiBTYWZlbGlzdHMpOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHRzYWZlbGlzdHMudXNlZENvbXBvbmVudHMuaGFzKHJlY29yZEtleSkgfHxcblx0XHRzYWZlbGlzdHMudXNlZENvbXBvbmVudHMuaGFzKHJvb3RDb21wb25lbnQocmVjb3JkS2V5KSlcblx0KTtcbn1cblxuZnVuY3Rpb24gaXNDbGFzc0FsbG93ZWQoXG5cdGNsczogc3RyaW5nLFxuXHRvd25lcnM6IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+Pixcblx0c2FmZWxpc3RzOiBTYWZlbGlzdHMsXG4pOiBib29sZWFuIHtcblx0Y29uc3QgY2xhc3NPd25lcnMgPSBvd25lcnMuZ2V0KGNscyk7XG5cdGlmICghY2xhc3NPd25lcnMpIHJldHVybiB0cnVlO1xuXHRmb3IgKGNvbnN0IG93bmVyIG9mIGNsYXNzT3duZXJzKSB7XG5cdFx0aWYgKGlzUmVjb3JkVXNlZChvd25lciwgc2FmZWxpc3RzKSAmJiBzYWZlbGlzdHMuY2xhc3NTYWZlbGlzdC5oYXMoY2xzKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLy8g4pSA4pSAIFNlbGVjdG9yIHB1cmdlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5pbnRlcmZhY2UgU2VsZWN0b3JQdXJnZVJlcG9ydCB7XG5cdHNlbGVjdG9yc0tlcHRLbm93bjogbnVtYmVyO1xuXHRzZWxlY3RvcnNLZXB0VW5rbm93bjogbnVtYmVyO1xuXHRzZWxlY3RvcnNSZW1vdmVkOiBudW1iZXI7XG5cdHNlbGVjdG9yc1JlbW92ZWRVbnVzZWRDb21wb25lbnQ6IG51bWJlcjtcblx0c2VsZWN0b3JzUmVtb3ZlZFVudXNlZFZhcmlhbnQ6IG51bWJlcjtcblx0YXR0clNlbGVjdG9yc1NlZW46IG51bWJlcjtcblx0a2V5ZnJhbWVzUmVtb3ZlZDogbnVtYmVyO1xuXHRmb250RmFjZXNSZW1vdmVkOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBQdXJnZVJlc3VsdCB7XG5cdGNzczogc3RyaW5nO1xuXHRyZXBvcnQ6IFNlbGVjdG9yUHVyZ2VSZXBvcnQ7XG59XG5cbmZ1bmN0aW9uIGVtcHR5U2VsZWN0b3JSZXBvcnQoKTogU2VsZWN0b3JQdXJnZVJlcG9ydCB7XG5cdHJldHVybiB7XG5cdFx0c2VsZWN0b3JzS2VwdEtub3duOiAwLFxuXHRcdHNlbGVjdG9yc0tlcHRVbmtub3duOiAwLFxuXHRcdHNlbGVjdG9yc1JlbW92ZWQ6IDAsXG5cdFx0c2VsZWN0b3JzUmVtb3ZlZFVudXNlZENvbXBvbmVudDogMCxcblx0XHRzZWxlY3RvcnNSZW1vdmVkVW51c2VkVmFyaWFudDogMCxcblx0XHRhdHRyU2VsZWN0b3JzU2VlbjogMCxcblx0XHRrZXlmcmFtZXNSZW1vdmVkOiAwLFxuXHRcdGZvbnRGYWNlc1JlbW92ZWQ6IDAsXG5cdH07XG59XG5cbi8qKiBVbmVzY2FwZSBDU1MgaWRlbnRpZmllcnM6IGBpY29uLVxcW21kaS0tY29nXFxdYCAtPiBgaWNvbi1bbWRpLS1jb2ddYCAqL1xuZnVuY3Rpb24gdW5lc2NhcGVDc3Moczogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIHMucmVwbGFjZSgvXFxcXCguKS9nLCBcIiQxXCIpO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0Q2xhc3Nlc0Zyb21TZWxlY3RvcihzZWxlY3Rvcjogc3RyaW5nKTogc3RyaW5nW10ge1xuXHRjb25zdCBtYXRjaGVzID0gc2VsZWN0b3IubWF0Y2hBbGwoXG5cdFx0L1xcLihbYS16QS1aXy1dKD86W2EtekEtWjAtOV8tXXxcXFxcW15cXHMuIzpbPit+LCldKikqKS9nLFxuXHQpO1xuXHRyZXR1cm4gWy4uLm1hdGNoZXNdLm1hcCgobSkgPT4gdW5lc2NhcGVDc3MobVsxXSkpO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0QXR0cnNGcm9tU2VsZWN0b3Ioc2VsZWN0b3I6IHN0cmluZyk6IHN0cmluZ1tdIHtcblx0Y29uc3QgbWF0Y2hlcyA9IHNlbGVjdG9yLm1hdGNoQWxsKFxuXHRcdC9cXFsoZGF0YS1bYS16QS1aMC05Xy1dK3xhcmlhLVthLXpBLVowLTlfLV0rKSg/Oj0oPzpcIihbXlwiXSopXCJ8JyhbXiddKiknfChbXlxcXV0rKSkpP1xcXS9nLFxuXHQpO1xuXHRyZXR1cm4gWy4uLm1hdGNoZXNdLm1hcCgobSkgPT4ge1xuXHRcdGNvbnN0IHZhbHVlID0gbVsyXSA/PyBtWzNdID8/IG1bNF07XG5cdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyBgWyR7bVsxXX1dYCA6IGBbJHttWzFdfT1cIiR7dmFsdWUudHJpbSgpfVwiXWA7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBzZWxlY3RvckRlY2lzaW9uKFxuXHRzZWxlY3Rvcjogc3RyaW5nLFxuXHRvd25lcnM6IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+Pixcblx0c2FmZWxpc3RzOiBTYWZlbGlzdHMsXG4pOlxuXHR8IFwia2VlcC1rbm93blwiXG5cdHwgXCJrZWVwLXVua25vd25cIlxuXHR8IFwicmVtb3ZlLXVudXNlZC1jb21wb25lbnRcIlxuXHR8IFwicmVtb3ZlLXVudXNlZC12YXJpYW50XCIge1xuXHRjb25zdCBjbGFzc2VzID0gZXh0cmFjdENsYXNzZXNGcm9tU2VsZWN0b3Ioc2VsZWN0b3IpO1xuXHRpZiAoY2xhc3Nlcy5sZW5ndGggPT09IDApIHJldHVybiBcImtlZXAtdW5rbm93blwiO1xuXG5cdGNvbnN0IGhhc1Vua25vd25DbGFzcyA9IGNsYXNzZXMuc29tZSgoY2xzKSA9PiAhb3duZXJzLmhhcyhjbHMpKTtcblx0aWYgKGhhc1Vua25vd25DbGFzcykgcmV0dXJuIFwia2VlcC11bmtub3duXCI7XG5cblx0Y29uc3QgaGFzVXNlZE93bmVyID0gY2xhc3Nlcy5zb21lKChjbHMpID0+IHtcblx0XHRjb25zdCBjbGFzc093bmVycyA9IG93bmVycy5nZXQoY2xzKTtcblx0XHRyZXR1cm4gWy4uLihjbGFzc093bmVycyA/PyBbXSldLnNvbWUoKG93bmVyKSA9PlxuXHRcdFx0aXNSZWNvcmRVc2VkKG93bmVyLCBzYWZlbGlzdHMpLFxuXHRcdCk7XG5cdH0pO1xuXG5cdGlmICghaGFzVXNlZE93bmVyKSByZXR1cm4gXCJyZW1vdmUtdW51c2VkLWNvbXBvbmVudFwiO1xuXG5cdGlmIChjbGFzc2VzLmV2ZXJ5KChjbHMpID0+IGlzQ2xhc3NBbGxvd2VkKGNscywgb3duZXJzLCBzYWZlbGlzdHMpKSkge1xuXHRcdHJldHVybiBcImtlZXAta25vd25cIjtcblx0fVxuXG5cdHJldHVybiBcInJlbW92ZS11bnVzZWQtdmFyaWFudFwiO1xufVxuXG5mdW5jdGlvbiBwdXJnZUNzc1dpdGhEYXRhYmFzZShcblx0Y3NzOiBzdHJpbmcsXG5cdG1hbmlmZXN0OiBQdXJnZU1hbmlmZXN0IHwgTm9ybWFsaXplZFB1cmdlRGF0YWJhc2UsXG5cdHNhZmVsaXN0czogU2FmZWxpc3RzLFxuKTogUHVyZ2VSZXN1bHQge1xuXHRjb25zdCBkYXRhYmFzZSA9IG5vcm1hbGl6ZVB1cmdlRGF0YWJhc2UobWFuaWZlc3QgYXMgUHVyZ2VNYW5pZmVzdCk7XG5cdGNvbnN0IGNsYXNzT3duZXJzID0gYnVpbGRDbGFzc093bmVycyhkYXRhYmFzZSk7XG5cdGNvbnN0IHJlcG9ydCA9IGVtcHR5U2VsZWN0b3JSZXBvcnQoKTtcblx0Y29uc3Qgcm9vdCA9IHBvc3Rjc3MucGFyc2UoY3NzKTtcblxuXHRyb290LndhbGtSdWxlcygocnVsZSkgPT4ge1xuXHRcdGNvbnN0IHNlbGVjdG9ycyA9IHJ1bGUuc2VsZWN0b3JzO1xuXHRcdGNvbnN0IGtlcHQ6IHN0cmluZ1tdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IHNlbGVjdG9yIG9mIHNlbGVjdG9ycykge1xuXHRcdFx0cmVwb3J0LmF0dHJTZWxlY3RvcnNTZWVuICs9IGV4dHJhY3RBdHRyc0Zyb21TZWxlY3RvcihzZWxlY3RvcikubGVuZ3RoO1xuXHRcdFx0Y29uc3QgZGVjaXNpb24gPSBzZWxlY3RvckRlY2lzaW9uKHNlbGVjdG9yLCBjbGFzc093bmVycywgc2FmZWxpc3RzKTtcblx0XHRcdGlmIChkZWNpc2lvbiA9PT0gXCJrZWVwLWtub3duXCIpIHtcblx0XHRcdFx0cmVwb3J0LnNlbGVjdG9yc0tlcHRLbm93bisrO1xuXHRcdFx0XHRrZXB0LnB1c2goc2VsZWN0b3IpO1xuXHRcdFx0fSBlbHNlIGlmIChkZWNpc2lvbiA9PT0gXCJrZWVwLXVua25vd25cIikge1xuXHRcdFx0XHRyZXBvcnQuc2VsZWN0b3JzS2VwdFVua25vd24rKztcblx0XHRcdFx0a2VwdC5wdXNoKHNlbGVjdG9yKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlcG9ydC5zZWxlY3RvcnNSZW1vdmVkKys7XG5cdFx0XHRcdGlmIChkZWNpc2lvbiA9PT0gXCJyZW1vdmUtdW51c2VkLWNvbXBvbmVudFwiKSB7XG5cdFx0XHRcdFx0cmVwb3J0LnNlbGVjdG9yc1JlbW92ZWRVbnVzZWRDb21wb25lbnQrKztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXBvcnQuc2VsZWN0b3JzUmVtb3ZlZFVudXNlZFZhcmlhbnQrKztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChrZXB0Lmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cnVsZS5yZW1vdmUoKTtcblx0XHR9IGVsc2UgaWYgKGtlcHQubGVuZ3RoIDwgc2VsZWN0b3JzLmxlbmd0aCkge1xuXHRcdFx0cnVsZS5zZWxlY3RvcnMgPSBrZXB0O1xuXHRcdH1cblx0fSk7XG5cblx0cmVtb3ZlVW51c2VkS2V5ZnJhbWVzKHJvb3QsIHJlcG9ydCk7XG5cdHJlbW92ZVVudXNlZEZvbnRGYWNlcyhyb290LCByZXBvcnQpO1xuXHRyZW1vdmVFbXB0eUF0UnVsZXMocm9vdCk7XG5cblx0cmV0dXJuIHsgY3NzOiByb290LnRvU3RyaW5nKCksIHJlcG9ydCB9O1xufVxuXG5mdW5jdGlvbiByZW1vdmVVbnVzZWRLZXlmcmFtZXMoXG5cdHJvb3Q6IHBvc3Rjc3MuUm9vdCxcblx0cmVwb3J0OiBTZWxlY3RvclB1cmdlUmVwb3J0LFxuKSB7XG5cdGNvbnN0IHVzZWRLZXlmcmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0cm9vdC53YWxrRGVjbHMoL15hbmltYXRpb24oLW5hbWUpPyQvLCAoZGVjbCkgPT4ge1xuXHRcdGZvciAoY29uc3QgcGFydCBvZiBkZWNsLnZhbHVlLnNwbGl0KFwiLFwiKSkge1xuXHRcdFx0Y29uc3QgbmFtZSA9IHBhcnQudHJpbSgpLnNwbGl0KC9cXHMrLylbMF07XG5cdFx0XHRpZiAobmFtZSAmJiAhW1wibm9uZVwiLCBcImluaXRpYWxcIiwgXCJpbmhlcml0XCIsIFwidW5zZXRcIl0uaW5jbHVkZXMobmFtZSkpIHtcblx0XHRcdFx0dXNlZEtleWZyYW1lcy5hZGQobmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRyb290LndhbGtBdFJ1bGVzKFwia2V5ZnJhbWVzXCIsIChhdFJ1bGUpID0+IHtcblx0XHRpZiAoIXVzZWRLZXlmcmFtZXMuaGFzKGF0UnVsZS5wYXJhbXMudHJpbSgpKSkge1xuXHRcdFx0YXRSdWxlLnJlbW92ZSgpO1xuXHRcdFx0cmVwb3J0LmtleWZyYW1lc1JlbW92ZWQrKztcblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVVbnVzZWRGb250RmFjZXMoXG5cdHJvb3Q6IHBvc3Rjc3MuUm9vdCxcblx0cmVwb3J0OiBTZWxlY3RvclB1cmdlUmVwb3J0LFxuKSB7XG5cdGNvbnN0IHVzZWRGb250cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRyb290LndhbGtEZWNscygvXmZvbnQoLWZhbWlseSk/JC8sIChkZWNsKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBwYXJ0IG9mIGRlY2wudmFsdWUuc3BsaXQoXCIsXCIpKSB7XG5cdFx0XHRjb25zdCBuYW1lID0gcGFydC50cmltKCkucmVwbGFjZSgvXltcIiddfFtcIiddJC9nLCBcIlwiKTtcblx0XHRcdGlmIChuYW1lKSB1c2VkRm9udHMuYWRkKG5hbWUpO1xuXHRcdH1cblx0fSk7XG5cblx0cm9vdC53YWxrQXRSdWxlcyhcImZvbnQtZmFjZVwiLCAoYXRSdWxlKSA9PiB7XG5cdFx0bGV0IGZhbWlseSA9IFwiXCI7XG5cdFx0YXRSdWxlLndhbGtEZWNscyhcImZvbnQtZmFtaWx5XCIsIChkZWNsKSA9PiB7XG5cdFx0XHRmYW1pbHkgPSBkZWNsLnZhbHVlLnRyaW0oKS5yZXBsYWNlKC9eW1wiJ118W1wiJ10kL2csIFwiXCIpO1xuXHRcdH0pO1xuXHRcdGlmIChmYW1pbHkgJiYgIXVzZWRGb250cy5oYXMoZmFtaWx5KSkge1xuXHRcdFx0YXRSdWxlLnJlbW92ZSgpO1xuXHRcdFx0cmVwb3J0LmZvbnRGYWNlc1JlbW92ZWQrKztcblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVFbXB0eUF0UnVsZXMocm9vdDogcG9zdGNzcy5Sb290KSB7XG5cdGxldCBjbGVhbmVkID0gdHJ1ZTtcblx0d2hpbGUgKGNsZWFuZWQpIHtcblx0XHRjbGVhbmVkID0gZmFsc2U7XG5cdFx0cm9vdC53YWxrQXRSdWxlcygoYXRSdWxlKSA9PiB7XG5cdFx0XHRpZiAoYXRSdWxlLm5vZGVzICYmIGF0UnVsZS5ub2Rlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0YXRSdWxlLnJlbW92ZSgpO1xuXHRcdFx0XHRjbGVhbmVkID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuXG4vLyDilIDilIAgUnVudGltZSBDU1MgdmFyaWFibGUgcmVmZXJlbmNlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuYXN5bmMgZnVuY3Rpb24gY29sbGVjdFJ1bnRpbWVDc3NWYXJSZWZzKGRpc3REaXI6IHN0cmluZyk6IFByb21pc2U8U2V0PHN0cmluZz4+IHtcblx0Y29uc3QgcmVmcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRjb25zdCBnbG9iID0gbmV3IEdsb2IoXCIqKi8qLntqcyxtanMsY2pzfVwiKTtcblxuXHRmb3IgYXdhaXQgKGNvbnN0IHJlbFBhdGggb2YgZ2xvYi5zY2FuKHsgY3dkOiBkaXN0RGlyIH0pKSB7XG5cdFx0Y29uc3QgZnVsbFBhdGggPSBgJHtkaXN0RGlyfS8ke3JlbFBhdGh9YDtcblx0XHRjb25zdCBjb2RlID0gYXdhaXQgQnVuLmZpbGUoZnVsbFBhdGgpLnRleHQoKTtcblx0XHRmb3IgKGNvbnN0IG1hdGNoIG9mIGNvZGUubWF0Y2hBbGwoL3ZhclxcKFxccyooLS1bYS16QS1aMC05Xy1dKykvZykpIHtcblx0XHRcdHJlZnMuYWRkKG1hdGNoWzFdKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVmcztcbn1cblxuLy8g4pSA4pSAIFVudXNlZCBDU1MgdmFyaWFibGUgY2xlYW51cCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuaW50ZXJmYWNlIFZhckNsZWFudXBSZXN1bHQge1xuXHRjc3M6IHN0cmluZztcblx0cmVtb3ZlZDogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiBjbGVhblVudXNlZFZhcnNXaXRoUmVwb3J0KFxuXHRjc3M6IHN0cmluZyxcblx0ZXh0ZXJuYWxseVJlZmVyZW5jZWRWYXJzOiBTZXQ8c3RyaW5nPixcbik6IFZhckNsZWFudXBSZXN1bHQge1xuXHRsZXQgY2hhbmdlZCA9IHRydWU7XG5cdGxldCByZXN1bHQgPSBjc3M7XG5cdGxldCByZW1vdmVkID0gMDtcblxuXHR3aGlsZSAoY2hhbmdlZCkge1xuXHRcdGNoYW5nZWQgPSBmYWxzZTtcblx0XHRjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZShyZXN1bHQpO1xuXG5cdFx0Y29uc3QgZGVjbGFyZWQgPSBuZXcgTWFwPHN0cmluZywgeyBydWxlOiBSdWxlIHwgQXRSdWxlOyBwcm9wOiBzdHJpbmcgfVtdPigpO1xuXHRcdHJvb3Qud2Fsa0RlY2xzKC9eLS0vLCAoZGVjbCkgPT4ge1xuXHRcdFx0Y29uc3QgZW50cmllcyA9IGRlY2xhcmVkLmdldChkZWNsLnByb3ApID8/IFtdO1xuXHRcdFx0ZW50cmllcy5wdXNoKHsgcnVsZTogZGVjbC5wYXJlbnQgYXMgUnVsZSwgcHJvcDogZGVjbC5wcm9wIH0pO1xuXHRcdFx0ZGVjbGFyZWQuc2V0KGRlY2wucHJvcCwgZW50cmllcyk7XG5cdFx0fSk7XG5cblx0XHRjb25zdCByZWZlcmVuY2VkID0gbmV3IFNldDxzdHJpbmc+KGV4dGVybmFsbHlSZWZlcmVuY2VkVmFycyk7XG5cdFx0cm9vdC53YWxrRGVjbHMoKGRlY2wpID0+IHtcblx0XHRcdGZvciAoY29uc3QgcmVmIG9mIGRlY2wudmFsdWUubWF0Y2hBbGwoL3ZhclxcKFxccyooLS1bYS16QS1aMC05Xy1dKykvZykpIHtcblx0XHRcdFx0cmVmZXJlbmNlZC5hZGQocmVmWzFdKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGZvciAoY29uc3QgW3Zhck5hbWUsIGVudHJpZXNdIG9mIGRlY2xhcmVkKSB7XG5cdFx0XHRpZiAoIXJlZmVyZW5jZWQuaGFzKHZhck5hbWUpKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuXHRcdFx0XHRcdGVudHJ5LnJ1bGUud2Fsa0RlY2xzKGVudHJ5LnByb3AsIChkZWNsKSA9PiB7XG5cdFx0XHRcdFx0XHRkZWNsLnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0Y2hhbmdlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRyZW1vdmVkKys7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyb290LndhbGtSdWxlcygocnVsZSkgPT4ge1xuXHRcdFx0aWYgKHJ1bGUubm9kZXMgJiYgcnVsZS5ub2Rlcy5sZW5ndGggPT09IDApIHJ1bGUucmVtb3ZlKCk7XG5cdFx0fSk7XG5cdFx0cmVtb3ZlRW1wdHlBdFJ1bGVzKHJvb3QpO1xuXG5cdFx0cmVzdWx0ID0gcm9vdC50b1N0cmluZygpO1xuXHR9XG5cblx0cmV0dXJuIHsgY3NzOiByZXN1bHQsIHJlbW92ZWQgfTtcbn1cblxuZnVuY3Rpb24gY2xlYW5VbnVzZWRWYXJzKFxuXHRjc3M6IHN0cmluZyxcblx0ZXh0ZXJuYWxseVJlZmVyZW5jZWRWYXJzOiBTZXQ8c3RyaW5nPixcbik6IHN0cmluZyB7XG5cdHJldHVybiBjbGVhblVudXNlZFZhcnNXaXRoUmVwb3J0KGNzcywgZXh0ZXJuYWxseVJlZmVyZW5jZWRWYXJzKS5jc3M7XG59XG5cbi8vIOKUgOKUgCBNaW5pZmljYXRpb246IExpZ2h0bmluZyBDU1Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIG1pbmlmeShjc3M6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IHsgY29kZSB9ID0gdHJhbnNmb3JtKHtcblx0XHRmaWxlbmFtZTogXCJwdXJnZWQuY3NzXCIsXG5cdFx0Y29kZTogQnVmZmVyLmZyb20oY3NzKSxcblx0XHRtaW5pZnk6IHRydWUsXG5cdFx0ZXJyb3JSZWNvdmVyeTogdHJ1ZSxcblx0fSk7XG5cdHJldHVybiBjb2RlLnRvU3RyaW5nKCk7XG59XG5cbi8vIOKUgOKUgCBNYWluIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuXHRjb25zdCB7IGRpc3REaXIsIHNyY0RpciwgbWFuaWZlc3RQYXRoIH0gPSBwYXJzZUFyZ3MocHJvY2Vzcy5hcmd2KTtcblxuXHRjb25zdCBtYW5pZmVzdDogUHVyZ2VNYW5pZmVzdCA9IEpTT04ucGFyc2UoXG5cdFx0YXdhaXQgQnVuLmZpbGUobWFuaWZlc3RQYXRoKS50ZXh0KCksXG5cdCk7XG5cdGNvbnN0IGRhdGFiYXNlID0gbm9ybWFsaXplUHVyZ2VEYXRhYmFzZShtYW5pZmVzdCk7XG5cdGNvbnN0IHJvb3RzID0gbmV3IFNldChPYmplY3Qua2V5cyhkYXRhYmFzZS5jb21wb25lbnRzKS5tYXAocm9vdENvbXBvbmVudCkpO1xuXHRjb25zb2xlLmxvZyhcblx0XHRgW2Nzcy1wdXJnZV0gRGF0YWJhc2UgbG9hZGVkOiAke09iamVjdC5rZXlzKGRhdGFiYXNlLmNvbXBvbmVudHMpLmxlbmd0aH0gcmVjb3JkcyAoJHtyb290cy5zaXplfSBjb21wb25lbnRzKWAsXG5cdCk7XG5cblx0Y29uc3QgdXNhZ2VzID0gYXdhaXQgc2NhbkNvbnN1bWVyU291cmNlKHNyY0Rpcik7XG5cdGNvbnN0IHNhZmVsaXN0cyA9IGJ1aWxkU2FmZWxpc3RzKHVzYWdlcywgbWFuaWZlc3QpO1xuXHRjb25zdCB1c2VkUm9vdHMgPSBuZXcgU2V0KFsuLi5zYWZlbGlzdHMudXNlZENvbXBvbmVudHNdLm1hcChyb290Q29tcG9uZW50KSk7XG5cdGNvbnN0IHJlbW92ZWRSb290cyA9IFsuLi5yb290c10uZmlsdGVyKChyb290KSA9PiAhdXNlZFJvb3RzLmhhcyhyb290KSk7XG5cblx0Y29uc29sZS5sb2coXG5cdFx0YFtjc3MtcHVyZ2VdIENvbXBvbmVudHMgZGV0ZWN0ZWQ6ICR7dXNlZFJvb3RzLnNpemV9IHVzZWQsICR7cmVtb3ZlZFJvb3RzLmxlbmd0aH0gcmVtb3ZhYmxlYCxcblx0KTtcblx0aWYgKHVzZWRSb290cy5zaXplID4gMCkge1xuXHRcdGNvbnNvbGUubG9nKGBbY3NzLXB1cmdlXSAgIHVzZWQ6ICR7Wy4uLnVzZWRSb290c10uc29ydCgpLmpvaW4oXCIsIFwiKX1gKTtcblx0fVxuXHRpZiAocmVtb3ZlZFJvb3RzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zb2xlLmxvZyhgW2Nzcy1wdXJnZV0gICByZW1vdmFibGU6ICR7cmVtb3ZlZFJvb3RzLnNvcnQoKS5qb2luKFwiLCBcIil9YCk7XG5cdH1cblx0Y29uc29sZS5sb2coXG5cdFx0YFtjc3MtcHVyZ2VdIFNhZmVsaXN0IGZhY3RzOiAke3NhZmVsaXN0cy5jbGFzc1NhZmVsaXN0LnNpemV9IGNsYXNzZXMsICR7c2FmZWxpc3RzLmF0dHJTYWZlbGlzdC5zaXplfSBhdHRyIHNlbGVjdG9yc2AsXG5cdCk7XG5cblx0Y29uc3QgcnVudGltZUNzc1ZhclJlZnMgPSBhd2FpdCBjb2xsZWN0UnVudGltZUNzc1ZhclJlZnMoZGlzdERpcik7XG5cdGlmIChydW50aW1lQ3NzVmFyUmVmcy5zaXplID4gMCkge1xuXHRcdGNvbnNvbGUubG9nKFxuXHRcdFx0YFtjc3MtcHVyZ2VdIFJ1bnRpbWUgQ1NTIHZhcnMgcmVmZXJlbmNlZCBmcm9tIEpTOiAke3J1bnRpbWVDc3NWYXJSZWZzLnNpemV9YCxcblx0XHQpO1xuXHR9XG5cblx0Y29uc3QgZ2xvYiA9IG5ldyBHbG9iKFwiKiovKi5jc3NcIik7XG5cdGxldCB0b3RhbEJlZm9yZSA9IDA7XG5cdGxldCB0b3RhbEFmdGVyID0gMDtcblxuXHRmb3IgYXdhaXQgKGNvbnN0IHJlbFBhdGggb2YgZ2xvYi5zY2FuKHsgY3dkOiBkaXN0RGlyIH0pKSB7XG5cdFx0Y29uc3QgZnVsbFBhdGggPSBgJHtkaXN0RGlyfS8ke3JlbFBhdGh9YDtcblx0XHRjb25zdCBvcmlnaW5hbENzcyA9IGF3YWl0IEJ1bi5maWxlKGZ1bGxQYXRoKS50ZXh0KCk7XG5cdFx0Y29uc3Qgb3JpZ2luYWxTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgob3JpZ2luYWxDc3MsIFwidXRmLThcIik7XG5cdFx0dG90YWxCZWZvcmUgKz0gb3JpZ2luYWxTaXplO1xuXG5cdFx0Y29uc29sZS5sb2coXG5cdFx0XHRgW2Nzcy1wdXJnZV0gUHJvY2Vzc2luZyAke3JlbFBhdGh9ICgkeyhvcmlnaW5hbFNpemUgLyAxMDI0KS50b0ZpeGVkKDEpfSBLQilgLFxuXHRcdCk7XG5cblx0XHRjb25zdCBwdXJnZWQgPSBwdXJnZUNzc1dpdGhEYXRhYmFzZShvcmlnaW5hbENzcywgZGF0YWJhc2UsIHNhZmVsaXN0cyk7XG5cdFx0bGV0IHB1cmdlZENzcyA9IHB1cmdlZC5jc3M7XG5cdFx0Y29uc3QgYWZ0ZXJTZWxlY3RvcnMgPSBCdWZmZXIuYnl0ZUxlbmd0aChwdXJnZWRDc3MsIFwidXRmLThcIik7XG5cdFx0Y29uc29sZS5sb2coXG5cdFx0XHRgW2Nzcy1wdXJnZV0gICBzZWxlY3RvcnM6ICR7KG9yaWdpbmFsU2l6ZSAvIDEwMjQpLnRvRml4ZWQoMSl9IC0+ICR7KGFmdGVyU2VsZWN0b3JzIC8gMTAyNCkudG9GaXhlZCgxKX0gS0IgKCR7cHVyZ2VkLnJlcG9ydC5zZWxlY3RvcnNSZW1vdmVkfSByZW1vdmVkLCAke3B1cmdlZC5yZXBvcnQuc2VsZWN0b3JzS2VwdFVua25vd259IGtlcHQgdW5rbm93bilgLFxuXHRcdCk7XG5cdFx0Y29uc29sZS5sb2coXG5cdFx0XHRgW2Nzcy1wdXJnZV0gICBhdHRycyBzZWVuOiAke3B1cmdlZC5yZXBvcnQuYXR0clNlbGVjdG9yc1NlZW59OyBrZXlmcmFtZXMgcmVtb3ZlZDogJHtwdXJnZWQucmVwb3J0LmtleWZyYW1lc1JlbW92ZWR9YCxcblx0XHQpO1xuXG5cdFx0Y29uc3QgdmFycyA9IGNsZWFuVW51c2VkVmFyc1dpdGhSZXBvcnQocHVyZ2VkQ3NzLCBydW50aW1lQ3NzVmFyUmVmcyk7XG5cdFx0cHVyZ2VkQ3NzID0gdmFycy5jc3M7XG5cdFx0Y29uc3QgYWZ0ZXJWYXJzID0gQnVmZmVyLmJ5dGVMZW5ndGgocHVyZ2VkQ3NzLCBcInV0Zi04XCIpO1xuXHRcdGNvbnNvbGUubG9nKFxuXHRcdFx0YFtjc3MtcHVyZ2VdICAgdmFyczogJHsoYWZ0ZXJTZWxlY3RvcnMgLyAxMDI0KS50b0ZpeGVkKDEpfSAtPiAkeyhhZnRlclZhcnMgLyAxMDI0KS50b0ZpeGVkKDEpfSBLQiAoJHt2YXJzLnJlbW92ZWR9IHJlbW92ZWQpYCxcblx0XHQpO1xuXG5cdFx0cHVyZ2VkQ3NzID0gbWluaWZ5KHB1cmdlZENzcyk7XG5cdFx0Y29uc3QgZmluYWxTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgocHVyZ2VkQ3NzLCBcInV0Zi04XCIpO1xuXHRcdHRvdGFsQWZ0ZXIgKz0gZmluYWxTaXplO1xuXHRcdGNvbnNvbGUubG9nKGBbY3NzLXB1cmdlXSAgIG1pbmlmeTogLT4gJHsoZmluYWxTaXplIC8gMTAyNCkudG9GaXhlZCgxKX0gS0JgKTtcblx0XHRjb25zb2xlLmxvZyhcblx0XHRcdGBbY3NzLXB1cmdlXSAgIGZpbmFsOiAkeyhvcmlnaW5hbFNpemUgLyAxMDI0KS50b0ZpeGVkKDEpfSAtPiAkeyhmaW5hbFNpemUgLyAxMDI0KS50b0ZpeGVkKDEpfSBLQiAoJHsoKDEgLSBmaW5hbFNpemUgLyBvcmlnaW5hbFNpemUpICogMTAwKS50b0ZpeGVkKDEpfSUgcmVkdWN0aW9uKWAsXG5cdFx0KTtcblxuXHRcdGF3YWl0IEJ1bi53cml0ZShmdWxsUGF0aCwgcHVyZ2VkQ3NzKTtcblx0fVxuXG5cdGNvbnNvbGUubG9nKFxuXHRcdGBcXG5bY3NzLXB1cmdlXSBUb3RhbDogJHsodG90YWxCZWZvcmUgLyAxMDI0KS50b0ZpeGVkKDEpfSAtPiAkeyh0b3RhbEFmdGVyIC8gMTAyNCkudG9GaXhlZCgxKX0gS0IgKCR7KCgxIC0gdG90YWxBZnRlciAvIHRvdGFsQmVmb3JlKSAqIDEwMCkudG9GaXhlZCgxKX0lIHJlZHVjdGlvbilgLFxuXHQpO1xufVxuXG5pZiAoaW1wb3J0Lm1ldGEubWFpbikge1xuXHRtYWluKCk7XG59XG5cbmV4cG9ydCB7XG5cdGNsZWFuVW51c2VkVmFycyxcblx0Y2xlYW5VbnVzZWRWYXJzV2l0aFJlcG9ydCxcblx0bm9ybWFsaXplUHVyZ2VEYXRhYmFzZSxcblx0cHVyZ2VDc3NXaXRoRGF0YWJhc2UsXG59O1xuZXhwb3J0IHR5cGUge1xuXHROb3JtYWxpemVkUHVyZ2VEYXRhYmFzZSxcblx0UHVyZ2VSZXN1bHQsXG5cdFNlbGVjdG9yUHVyZ2VSZXBvcnQsXG5cdFZhckNsZWFudXBSZXN1bHQsXG59O1xuIiwKICAgICJpbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5cbmNvbnN0IHsgdHJhbnNmb3JtLCB0cmFuc2Zvcm1TdHlsZUF0dHJpYnV0ZSwgYnVuZGxlLCBidW5kbGVBc3luYywgYnJvd3NlcnNsaXN0VG9UYXJnZXRzLCBjb21wb3NlVmlzaXRvcnMsIEZlYXR1cmVzIH0gPSBpbmRleDtcbmV4cG9ydCB7IHRyYW5zZm9ybSwgdHJhbnNmb3JtU3R5bGVBdHRyaWJ1dGUsIGJ1bmRsZSwgYnVuZGxlQXN5bmMsIGJyb3dzZXJzbGlzdFRvVGFyZ2V0cywgY29tcG9zZVZpc2l0b3JzLCBGZWF0dXJlcyB9O1xuIiwKICAgICIvKipcbiAqIENvbnN1bWVyLXNpZGUgSlNYIHNjYW5uZXIuXG4gKlxuICogV2Fsa3MgYSBjb25zdW1lciBzb3VyY2UgdHJlZSwgcmVzb2x2ZXMgQHBhdGhzY2FsZS91aSBpbXBvcnRzIHdpdGggU1dDLCBhbmRcbiAqIHJlY29yZHMgY2Fub25pY2FsIGNvbXBvbmVudC9wYXJ0IHVzYWdlIHBsdXMgcHJvcCBmYWN0cyBmb3IgZGF0YWJhc2UtZmlyc3QgQ1NTXG4gKiBwdXJnZSBkZWNpc2lvbnMuXG4gKlxuICogVXNhZ2U6ICBidW4gcnVuIHNyYy9zY2FuLWNvbnN1bWVyLnRzIDxjb25zdW1lci1zcmMtZGlyPiA8cHVyZ2UtbWFuaWZlc3QuanNvbj5cbiAqL1xuXG5pbXBvcnQgc3djIGZyb20gXCJAc3djL2NvcmVcIjtcbmltcG9ydCB7IEdsb2IgfSBmcm9tIFwiYnVuXCI7XG5cbi8vIOKUgOKUgCBUeXBlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuaW50ZXJmYWNlIExlZ2FjeUNvbXBvbmVudE1hbmlmZXN0IHtcblx0Y2xhc3Nlczoge1xuXHRcdGFsd2F5czogc3RyaW5nW107XG5cdFx0YnlQcm9wOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPj47XG5cdH07XG5cdGF0dHJzPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG5cdGRlcHM/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIENvbXBvbmVudFB1cmdlUmVjb3JkIGV4dGVuZHMgTGVnYWN5Q29tcG9uZW50TWFuaWZlc3Qge1xuXHRrZXk/OiBzdHJpbmc7XG5cdGNvbXBvbmVudD86IHN0cmluZztcblx0cGFydD86IHN0cmluZztcblx0c2VsZWN0b3JzPzogc3RyaW5nW107XG5cdGF0dHJpYnV0ZVNlbGVjdG9ycz86IHN0cmluZ1tdO1xuXHRjc3NWYXJzPzoge1xuXHRcdGRlY2xhcmVkPzogc3RyaW5nW107XG5cdFx0cmVmZXJlbmNlZD86IHN0cmluZ1tdO1xuXHR9O1xuXHRrZXlmcmFtZXM/OiB7XG5cdFx0ZGVjbGFyZWQ/OiBzdHJpbmdbXTtcblx0XHRyZWZlcmVuY2VkPzogc3RyaW5nW107XG5cdH07XG59XG5cbmludGVyZmFjZSBQdXJnZURhdGFiYXNlVjIge1xuXHR2ZXJzaW9uOiAyO1xuXHRjb21wb25lbnRzOiBSZWNvcmQ8c3RyaW5nLCBDb21wb25lbnRQdXJnZVJlY29yZD47XG5cdHNoYXJlZD86IHtcblx0XHRzZWxlY3RvcnM/OiB1bmtub3duW107XG5cdFx0Y3NzVmFycz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdGtleWZyYW1lcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHR9O1xufVxuXG50eXBlIFB1cmdlTWFuaWZlc3QgPSBSZWNvcmQ8c3RyaW5nLCBMZWdhY3lDb21wb25lbnRNYW5pZmVzdD4gfCBQdXJnZURhdGFiYXNlVjI7XG5cbi8qKiBXaGF0IHdlIGNvbGxlY3QgcGVyIGNvbXBvbmVudCB1c2FnZSBmcm9tIEpTWCAqL1xuaW50ZXJmYWNlIFByb3BVc2FnZSB7XG5cdGNvbXBvbmVudDogc3RyaW5nO1xuXHRwcm9wczogTWFwPHN0cmluZywgc3RyaW5nIHwgXCJEWU5BTUlDXCI+O1xuXHRib29sZWFuUHJvcHM6IFNldDxzdHJpbmc+O1xuXHRoYXNTcHJlYWQ6IGJvb2xlYW47XG5cdHNvdXJjZT86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEltcG9ydEJpbmRpbmdzIHtcblx0Y29tcG9uZW50czogTWFwPHN0cmluZywgc3RyaW5nPjtcblx0bmFtZXNwYWNlczogTWFwPHN0cmluZywgc3RyaW5nIHwgbnVsbD47XG5cdGNvbnNlcnZhdGl2ZVVzYWdlczogUHJvcFVzYWdlW107XG59XG5cbmludGVyZmFjZSBTYWZlbGlzdHMge1xuXHRjbGFzc1NhZmVsaXN0OiBTZXQ8c3RyaW5nPjtcblx0YXR0clNhZmVsaXN0OiBTZXQ8c3RyaW5nPjtcblx0dXNlZENvbXBvbmVudHM6IFNldDxzdHJpbmc+O1xuXHRkeW5hbWljQ29tcG9uZW50czogU2V0PHN0cmluZz47XG59XG5cbnR5cGUgQXN0Tm9kZSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vLyDilIDilIAgQVNUIHdhbGtlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZnVuY3Rpb24gd2Fsa0FTVChub2RlOiB1bmtub3duLCB2aXNpdG9yOiAobm9kZTogQXN0Tm9kZSkgPT4gdm9pZCkge1xuXHRpZiAoIWlzUmVjb3JkKG5vZGUpKSByZXR1cm47XG5cdHZpc2l0b3Iobm9kZSk7XG5cdGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG5vZGUpKSB7XG5cdFx0aWYgKGtleSA9PT0gXCJzcGFuXCIpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IHZhbCA9IG5vZGVba2V5XTtcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsKSB3YWxrQVNUKGl0ZW0sIHZpc2l0b3IpO1xuXHRcdH0gZWxzZSBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdHdhbGtBU1QodmFsLCB2aXNpdG9yKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24ga2ViYWJUb1Bhc2NhbChzOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gc1xuXHRcdC5zcGxpdChcIi1cIilcblx0XHQuZmlsdGVyKEJvb2xlYW4pXG5cdFx0Lm1hcCgocCkgPT4gcC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHAuc2xpY2UoMSkpXG5cdFx0LmpvaW4oXCJcIik7XG59XG5cbmZ1bmN0aW9uIGNvbXBvbmVudEZyb21EZWVwSW1wb3J0KHNvdXJjZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG5cdGNvbnN0IG1hdGNoID0gc291cmNlLm1hdGNoKC9eQHBhdGhzY2FsZVxcL3VpXFwvY29tcG9uZW50c1xcLyhbXi9dKykvKTtcblx0aWYgKCFtYXRjaCkgcmV0dXJuIG51bGw7XG5cdHJldHVybiBrZWJhYlRvUGFzY2FsKG1hdGNoWzFdKTtcbn1cblxuZnVuY3Rpb24gaXNVaUltcG9ydChzb3VyY2U6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHNvdXJjZSBpcyBzdHJpbmcge1xuXHRyZXR1cm4gQm9vbGVhbihzb3VyY2U/LnN0YXJ0c1dpdGgoXCJAcGF0aHNjYWxlL3VpXCIpKTtcbn1cblxuZnVuY3Rpb24gaXNSZWNvcmQodjogdW5rbm93bik6IHYgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuXHRyZXR1cm4gdiAhPT0gbnVsbCAmJiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2KTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RyaW5nKHZhbHVlOiB1bmtub3duLCBrZXk6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkO1xuXHRjb25zdCBwcm9wID0gdmFsdWVba2V5XTtcblx0cmV0dXJuIHR5cGVvZiBwcm9wID09PSBcInN0cmluZ1wiID8gcHJvcCA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0Qm9vbGVhbih2YWx1ZTogdW5rbm93biwga2V5OiBzdHJpbmcpOiBib29sZWFuIHtcblx0aWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHZhbHVlW2tleV0gPT09IHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldFBhdGhTdHJpbmcodmFsdWU6IHVua25vd24sIC4uLmtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IGN1cnJlbnQgPSB2YWx1ZTtcblx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdGlmICghaXNSZWNvcmQoY3VycmVudCkpIHJldHVybiB1bmRlZmluZWQ7XG5cdFx0Y3VycmVudCA9IGN1cnJlbnRba2V5XTtcblx0fVxuXHRyZXR1cm4gdHlwZW9mIGN1cnJlbnQgPT09IFwic3RyaW5nXCIgPyBjdXJyZW50IDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRBcnJheSh2YWx1ZTogdW5rbm93biwga2V5OiBzdHJpbmcpOiB1bmtub3duW10ge1xuXHRpZiAoIWlzUmVjb3JkKHZhbHVlKSkgcmV0dXJuIFtdO1xuXHRjb25zdCBwcm9wID0gdmFsdWVba2V5XTtcblx0cmV0dXJuIEFycmF5LmlzQXJyYXkocHJvcCkgPyBwcm9wIDogW107XG59XG5cbmZ1bmN0aW9uIGpvaW5QYXRoKGJhc2U6IHN0cmluZywgcmVsOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gYCR7YmFzZS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpfS8ke3JlbC5yZXBsYWNlKC9eXFwvKy8sIFwiXCIpfWA7XG59XG5cbmZ1bmN0aW9uIGNhbm9uaWNhbEltcG9ydGVkTmFtZShzcGVjOiB1bmtub3duLCBzb3VyY2U6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuXHRjb25zdCB0eXBlID0gZ2V0U3RyaW5nKHNwZWMsIFwidHlwZVwiKTtcblx0aWYgKGdldEJvb2xlYW4oc3BlYywgXCJpc1R5cGVPbmx5XCIpKSByZXR1cm4gbnVsbDtcblx0Y29uc3QgZGVlcENvbXBvbmVudCA9IGNvbXBvbmVudEZyb21EZWVwSW1wb3J0KHNvdXJjZSk7XG5cdGlmIChkZWVwQ29tcG9uZW50KSB7XG5cdFx0cmV0dXJuIGRlZXBDb21wb25lbnQ7XG5cdH1cblxuXHRpZiAoc291cmNlID09PSBcIkBwYXRoc2NhbGUvdWlcIiAmJiB0eXBlID09PSBcIkltcG9ydFNwZWNpZmllclwiKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdGdldFBhdGhTdHJpbmcoc3BlYywgXCJpbXBvcnRlZFwiLCBcInZhbHVlXCIpID8/XG5cdFx0XHRnZXRQYXRoU3RyaW5nKHNwZWMsIFwibG9jYWxcIiwgXCJ2YWx1ZVwiKSA/P1xuXHRcdFx0bnVsbFxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gY29uc2VydmF0aXZlVXNhZ2UoY29tcG9uZW50OiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nKTogUHJvcFVzYWdlIHtcblx0cmV0dXJuIHtcblx0XHRjb21wb25lbnQsXG5cdFx0cHJvcHM6IG5ldyBNYXAoKSxcblx0XHRib29sZWFuUHJvcHM6IG5ldyBTZXQoKSxcblx0XHRoYXNTcHJlYWQ6IHRydWUsXG5cdFx0c291cmNlLFxuXHR9O1xufVxuXG4vKiogRXh0cmFjdCBAcGF0aHNjYWxlL3VpIGJpbmRpbmdzIGZyb20gYSBwYXJzZWQgbW9kdWxlLiAqL1xuZnVuY3Rpb24gZXh0cmFjdFVJQmluZGluZ3MoYXN0OiB1bmtub3duKTogSW1wb3J0QmluZGluZ3Mge1xuXHRjb25zdCBiaW5kaW5nczogSW1wb3J0QmluZGluZ3MgPSB7XG5cdFx0Y29tcG9uZW50czogbmV3IE1hcCgpLFxuXHRcdG5hbWVzcGFjZXM6IG5ldyBNYXAoKSxcblx0XHRjb25zZXJ2YXRpdmVVc2FnZXM6IFtdLFxuXHR9O1xuXG5cdGZvciAoY29uc3Qgbm9kZSBvZiBnZXRBcnJheShhc3QsIFwiYm9keVwiKSkge1xuXHRcdGNvbnN0IG5vZGVUeXBlID0gZ2V0U3RyaW5nKG5vZGUsIFwidHlwZVwiKTtcblx0XHRpZiAobm9kZVR5cGUgPT09IFwiSW1wb3J0RGVjbGFyYXRpb25cIikge1xuXHRcdFx0Y29uc3Qgc291cmNlID0gZ2V0UGF0aFN0cmluZyhub2RlLCBcInNvdXJjZVwiLCBcInZhbHVlXCIpO1xuXHRcdFx0aWYgKCFpc1VpSW1wb3J0KHNvdXJjZSkpIGNvbnRpbnVlO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHNwZWMgb2YgZ2V0QXJyYXkobm9kZSwgXCJzcGVjaWZpZXJzXCIpKSB7XG5cdFx0XHRcdGNvbnN0IHNwZWNUeXBlID0gZ2V0U3RyaW5nKHNwZWMsIFwidHlwZVwiKTtcblx0XHRcdFx0aWYgKHNwZWNUeXBlID09PSBcIkltcG9ydFNwZWNpZmllclwiKSB7XG5cdFx0XHRcdFx0Y29uc3QgbG9jYWwgPSBnZXRQYXRoU3RyaW5nKHNwZWMsIFwibG9jYWxcIiwgXCJ2YWx1ZVwiKTtcblx0XHRcdFx0XHRjb25zdCBjYW5vbmljYWwgPSBjYW5vbmljYWxJbXBvcnRlZE5hbWUoc3BlYywgc291cmNlKTtcblx0XHRcdFx0XHRpZiAobG9jYWwgJiYgY2Fub25pY2FsKSBiaW5kaW5ncy5jb21wb25lbnRzLnNldChsb2NhbCwgY2Fub25pY2FsKTtcblx0XHRcdFx0fSBlbHNlIGlmIChzcGVjVHlwZSA9PT0gXCJJbXBvcnREZWZhdWx0U3BlY2lmaWVyXCIpIHtcblx0XHRcdFx0XHRjb25zdCBsb2NhbCA9IGdldFBhdGhTdHJpbmcoc3BlYywgXCJsb2NhbFwiLCBcInZhbHVlXCIpO1xuXHRcdFx0XHRcdGNvbnN0IGNhbm9uaWNhbCA9IGNvbXBvbmVudEZyb21EZWVwSW1wb3J0KHNvdXJjZSkgPz8gbG9jYWw7XG5cdFx0XHRcdFx0aWYgKGxvY2FsICYmIGNhbm9uaWNhbCkgYmluZGluZ3MuY29tcG9uZW50cy5zZXQobG9jYWwsIGNhbm9uaWNhbCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoc3BlY1R5cGUgPT09IFwiSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyXCIpIHtcblx0XHRcdFx0XHRjb25zdCBsb2NhbCA9IGdldFBhdGhTdHJpbmcoc3BlYywgXCJsb2NhbFwiLCBcInZhbHVlXCIpO1xuXHRcdFx0XHRcdGlmIChsb2NhbClcblx0XHRcdFx0XHRcdGJpbmRpbmdzLm5hbWVzcGFjZXMuc2V0KGxvY2FsLCBjb21wb25lbnRGcm9tRGVlcEltcG9ydChzb3VyY2UpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdG5vZGVUeXBlID09PSBcIkV4cG9ydE5hbWVkRGVjbGFyYXRpb25cIiAmJlxuXHRcdFx0aXNVaUltcG9ydChnZXRQYXRoU3RyaW5nKG5vZGUsIFwic291cmNlXCIsIFwidmFsdWVcIikpXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBzb3VyY2UgPSBnZXRQYXRoU3RyaW5nKG5vZGUsIFwic291cmNlXCIsIFwidmFsdWVcIik7XG5cdFx0XHRpZiAoIXNvdXJjZSkgY29udGludWU7XG5cdFx0XHRjb25zdCBkZWVwQ29tcG9uZW50ID0gY29tcG9uZW50RnJvbURlZXBJbXBvcnQoc291cmNlKTtcblx0XHRcdGZvciAoY29uc3Qgc3BlYyBvZiBnZXRBcnJheShub2RlLCBcInNwZWNpZmllcnNcIikpIHtcblx0XHRcdFx0Y29uc3QgZXhwb3J0ZWQgPVxuXHRcdFx0XHRcdGdldFBhdGhTdHJpbmcoc3BlYywgXCJvcmlnXCIsIFwidmFsdWVcIikgPz9cblx0XHRcdFx0XHRnZXRQYXRoU3RyaW5nKHNwZWMsIFwibG9jYWxcIiwgXCJ2YWx1ZVwiKSA/P1xuXHRcdFx0XHRcdGdldFBhdGhTdHJpbmcoc3BlYywgXCJleHBvcnRlZFwiLCBcInZhbHVlXCIpID8/XG5cdFx0XHRcdFx0ZGVlcENvbXBvbmVudDtcblx0XHRcdFx0Y29uc3QgY2Fub25pY2FsID0gZGVlcENvbXBvbmVudCA/PyBleHBvcnRlZDtcblx0XHRcdFx0aWYgKGNhbm9uaWNhbClcblx0XHRcdFx0XHRiaW5kaW5ncy5jb25zZXJ2YXRpdmVVc2FnZXMucHVzaChcblx0XHRcdFx0XHRcdGNvbnNlcnZhdGl2ZVVzYWdlKGNhbm9uaWNhbCwgc291cmNlKSxcblx0XHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdG5vZGVUeXBlID09PSBcIkV4cG9ydEFsbERlY2xhcmF0aW9uXCIgJiZcblx0XHRcdGlzVWlJbXBvcnQoZ2V0UGF0aFN0cmluZyhub2RlLCBcInNvdXJjZVwiLCBcInZhbHVlXCIpKVxuXHRcdCkge1xuXHRcdFx0Y29uc3Qgc291cmNlID0gZ2V0UGF0aFN0cmluZyhub2RlLCBcInNvdXJjZVwiLCBcInZhbHVlXCIpO1xuXHRcdFx0aWYgKCFzb3VyY2UpIGNvbnRpbnVlO1xuXHRcdFx0Y29uc3QgZGVlcENvbXBvbmVudCA9IGNvbXBvbmVudEZyb21EZWVwSW1wb3J0KHNvdXJjZSk7XG5cdFx0XHRpZiAoZGVlcENvbXBvbmVudCkge1xuXHRcdFx0XHRiaW5kaW5ncy5jb25zZXJ2YXRpdmVVc2FnZXMucHVzaChcblx0XHRcdFx0XHRjb25zZXJ2YXRpdmVVc2FnZShkZWVwQ29tcG9uZW50LCBzb3VyY2UpLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBiaW5kaW5ncztcbn1cblxuLyoqIEJhY2stY29tcGF0aWJsZSBpbXBvcnQgZXh0cmFjdGlvbiBBUEk6IGxvY2FsIGJpbmRpbmcgLT4gY2Fub25pY2FsIGNvbXBvbmVudC4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RVSUltcG9ydHMoYXN0OiB1bmtub3duKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XG5cdHJldHVybiBleHRyYWN0VUlCaW5kaW5ncyhhc3QpLmNvbXBvbmVudHM7XG59XG5cbmZ1bmN0aW9uIGpzeE5hbWVQYXJ0cyhuYW1lOiB1bmtub3duKTogc3RyaW5nW10ge1xuXHRpZiAoIW5hbWUpIHJldHVybiBbXTtcblx0Y29uc3QgdHlwZSA9IGdldFN0cmluZyhuYW1lLCBcInR5cGVcIik7XG5cdGNvbnN0IHZhbHVlID0gZ2V0U3RyaW5nKG5hbWUsIFwidmFsdWVcIik7XG5cdGlmICgodHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgfHwgdHlwZSA9PT0gXCJKU1hJZGVudGlmaWVyXCIpICYmIHZhbHVlKVxuXHRcdHJldHVybiBbdmFsdWVdO1xuXHRpZiAodHlwZSA9PT0gXCJKU1hNZW1iZXJFeHByZXNzaW9uXCIpIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0Li4uanN4TmFtZVBhcnRzKGlzUmVjb3JkKG5hbWUpID8gbmFtZS5vYmplY3QgOiB1bmRlZmluZWQpLFxuXHRcdFx0Li4uanN4TmFtZVBhcnRzKGlzUmVjb3JkKG5hbWUpID8gbmFtZS5wcm9wZXJ0eSA6IHVuZGVmaW5lZCksXG5cdFx0XTtcblx0fVxuXHRyZXR1cm4gW107XG59XG5cbmZ1bmN0aW9uIGNhbm9uaWNhbENvbXBvbmVudEZyb21Kc3goXG5cdHBhcnRzOiBzdHJpbmdbXSxcblx0YmluZGluZ3M6IEltcG9ydEJpbmRpbmdzLFxuKTogc3RyaW5nIHwgbnVsbCB7XG5cdGlmIChwYXJ0cy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuXHRjb25zdCBbcm9vdCwgLi4ubWVtYmVyc10gPSBwYXJ0cztcblxuXHRjb25zdCBuYW1lc3BhY2VDb21wb25lbnQgPSBiaW5kaW5ncy5uYW1lc3BhY2VzLmdldChyb290KTtcblx0aWYgKGJpbmRpbmdzLm5hbWVzcGFjZXMuaGFzKHJvb3QpKSB7XG5cdFx0aWYgKG5hbWVzcGFjZUNvbXBvbmVudCkge1xuXHRcdFx0cmV0dXJuIFtuYW1lc3BhY2VDb21wb25lbnQsIC4uLm1lbWJlcnNdLmpvaW4oXCIuXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gbWVtYmVycy5qb2luKFwiLlwiKSB8fCBudWxsO1xuXHR9XG5cblx0Y29uc3Qgcm9vdENvbXBvbmVudCA9IGJpbmRpbmdzLmNvbXBvbmVudHMuZ2V0KHJvb3QpO1xuXHRpZiAoIXJvb3RDb21wb25lbnQpIHJldHVybiBudWxsO1xuXHRyZXR1cm4gW3Jvb3RDb21wb25lbnQsIC4uLm1lbWJlcnNdLmpvaW4oXCIuXCIpO1xufVxuXG4vKiogRXh0cmFjdCBKU1ggdXNhZ2VzIG9mIFVJIGNvbXBvbmVudHMuICovXG5mdW5jdGlvbiBleHRyYWN0SlNYVXNhZ2VzKFxuXHRhc3Q6IHVua25vd24sXG5cdHVpQ29tcG9uZW50czogTWFwPHN0cmluZywgc3RyaW5nPixcbik6IFByb3BVc2FnZVtdIHtcblx0Y29uc3QgYmluZGluZ3M6IEltcG9ydEJpbmRpbmdzID0ge1xuXHRcdGNvbXBvbmVudHM6IHVpQ29tcG9uZW50cyxcblx0XHRuYW1lc3BhY2VzOiBleHRyYWN0VUlCaW5kaW5ncyhhc3QpLm5hbWVzcGFjZXMsXG5cdFx0Y29uc2VydmF0aXZlVXNhZ2VzOiBbXSxcblx0fTtcblx0Y29uc3QgdXNhZ2VzOiBQcm9wVXNhZ2VbXSA9IFtdO1xuXG5cdHdhbGtBU1QoYXN0LCAobm9kZSkgPT4ge1xuXHRcdGlmIChnZXRTdHJpbmcobm9kZSwgXCJ0eXBlXCIpICE9PSBcIkpTWE9wZW5pbmdFbGVtZW50XCIpIHJldHVybjtcblxuXHRcdGNvbnN0IGNvbXBvbmVudCA9IGNhbm9uaWNhbENvbXBvbmVudEZyb21Kc3goXG5cdFx0XHRqc3hOYW1lUGFydHMobm9kZS5uYW1lKSxcblx0XHRcdGJpbmRpbmdzLFxuXHRcdCk7XG5cdFx0aWYgKCFjb21wb25lbnQpIHJldHVybjtcblxuXHRcdGNvbnN0IHVzYWdlOiBQcm9wVXNhZ2UgPSB7XG5cdFx0XHRjb21wb25lbnQsXG5cdFx0XHRwcm9wczogbmV3IE1hcCgpLFxuXHRcdFx0Ym9vbGVhblByb3BzOiBuZXcgU2V0KCksXG5cdFx0XHRoYXNTcHJlYWQ6IGZhbHNlLFxuXHRcdH07XG5cblx0XHRmb3IgKGNvbnN0IGF0dHIgb2YgZ2V0QXJyYXkobm9kZSwgXCJhdHRyaWJ1dGVzXCIpKSB7XG5cdFx0XHRjb25zdCBhdHRyVHlwZSA9IGdldFN0cmluZyhhdHRyLCBcInR5cGVcIik7XG5cdFx0XHRpZiAoYXR0clR5cGUgPT09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGF0dHJUeXBlID09PSBcIkpTWFNwcmVhZEF0dHJpYnV0ZVwiKSB7XG5cdFx0XHRcdHVzYWdlLmhhc1NwcmVhZCA9IHRydWU7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGF0dHJUeXBlICE9PSBcIkpTWEF0dHJpYnV0ZVwiKSBjb250aW51ZTtcblxuXHRcdFx0Y29uc3QgcHJvcE5hbWUgPSBnZXRQYXRoU3RyaW5nKGF0dHIsIFwibmFtZVwiLCBcInZhbHVlXCIpO1xuXHRcdFx0aWYgKCFwcm9wTmFtZSkgY29udGludWU7XG5cblx0XHRcdGNvbnN0IGF0dHJWYWx1ZSA9IGlzUmVjb3JkKGF0dHIpID8gYXR0ci52YWx1ZSA6IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IGF0dHJWYWx1ZVR5cGUgPSBnZXRTdHJpbmcoYXR0clZhbHVlLCBcInR5cGVcIik7XG5cdFx0XHRpZiAoIWF0dHJWYWx1ZSkge1xuXHRcdFx0XHR1c2FnZS5ib29sZWFuUHJvcHMuYWRkKHByb3BOYW1lKTtcblx0XHRcdH0gZWxzZSBpZiAoYXR0clZhbHVlVHlwZSA9PT0gXCJTdHJpbmdMaXRlcmFsXCIpIHtcblx0XHRcdFx0dXNhZ2UucHJvcHMuc2V0KHByb3BOYW1lLCBnZXRTdHJpbmcoYXR0clZhbHVlLCBcInZhbHVlXCIpID8/IFwiXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dXNhZ2UucHJvcHMuc2V0KHByb3BOYW1lLCBcIkRZTkFNSUNcIik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dXNhZ2VzLnB1c2godXNhZ2UpO1xuXHR9KTtcblxuXHRyZXR1cm4gdXNhZ2VzO1xufVxuXG4vLyDilIDilIAgTWFuaWZlc3QgY29tcGF0aWJpbGl0eSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZnVuY3Rpb24gbWFuaWZlc3RDb21wb25lbnRzKFxuXHRtYW5pZmVzdDogUHVyZ2VNYW5pZmVzdCxcbik6IFJlY29yZDxzdHJpbmcsIExlZ2FjeUNvbXBvbmVudE1hbmlmZXN0PiB7XG5cdGlmIChpc1B1cmdlRGF0YWJhc2VWMihtYW5pZmVzdCkpIHtcblx0XHRyZXR1cm4gbWFuaWZlc3QuY29tcG9uZW50cztcblx0fVxuXHRyZXR1cm4gbWFuaWZlc3QgYXMgUmVjb3JkPHN0cmluZywgTGVnYWN5Q29tcG9uZW50TWFuaWZlc3Q+O1xufVxuXG5mdW5jdGlvbiBpc1B1cmdlRGF0YWJhc2VWMihcblx0bWFuaWZlc3Q6IFB1cmdlTWFuaWZlc3QsXG4pOiBtYW5pZmVzdCBpcyBQdXJnZURhdGFiYXNlVjIge1xuXHRyZXR1cm4gKFxuXHRcdChtYW5pZmVzdCBhcyBQdXJnZURhdGFiYXNlVjIpLnZlcnNpb24gPT09IDIgJiZcblx0XHRpc1JlY29yZCgobWFuaWZlc3QgYXMgUHVyZ2VEYXRhYmFzZVYyKS5jb21wb25lbnRzKVxuXHQpO1xufVxuXG4vLyDilIDilIAgU2FmZWxpc3QgYnVpbGRlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZnVuY3Rpb24gYnVpbGRTYWZlbGlzdHMoXG5cdGFsbFVzYWdlczogUHJvcFVzYWdlW10sXG5cdG1hbmlmZXN0OiBQdXJnZU1hbmlmZXN0LFxuKTogU2FmZWxpc3RzIHtcblx0Y29uc3QgY2xhc3NTYWZlbGlzdCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRjb25zdCBhdHRyU2FmZWxpc3QgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0Y29uc3QgdXNlZENvbXBvbmVudHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0Y29uc3QgZHluYW1pY0NvbXBvbmVudHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0Y29uc3QgY29tcG9uZW50VXNhZ2VzID0gbmV3IE1hcDxzdHJpbmcsIFByb3BVc2FnZVtdPigpO1xuXHRjb25zdCBjb21wb25lbnRzID0gbWFuaWZlc3RDb21wb25lbnRzKG1hbmlmZXN0KTtcblxuXHRmb3IgKGNvbnN0IHVzYWdlIG9mIGV4cGFuZERlcGVuZGVuY3lVc2FnZXMoYWxsVXNhZ2VzLCBjb21wb25lbnRzKSkge1xuXHRcdGNvbnN0IGV4aXN0aW5nID0gY29tcG9uZW50VXNhZ2VzLmdldCh1c2FnZS5jb21wb25lbnQpID8/IFtdO1xuXHRcdGV4aXN0aW5nLnB1c2godXNhZ2UpO1xuXHRcdGNvbXBvbmVudFVzYWdlcy5zZXQodXNhZ2UuY29tcG9uZW50LCBleGlzdGluZyk7XG5cdFx0dXNlZENvbXBvbmVudHMuYWRkKHVzYWdlLmNvbXBvbmVudCk7XG5cdFx0aWYgKHVzYWdlLmhhc1NwcmVhZCB8fCBbLi4udXNhZ2UucHJvcHMudmFsdWVzKCldLmluY2x1ZGVzKFwiRFlOQU1JQ1wiKSkge1xuXHRcdFx0ZHluYW1pY0NvbXBvbmVudHMuYWRkKHVzYWdlLmNvbXBvbmVudCk7XG5cdFx0fVxuXHR9XG5cblx0Zm9yIChjb25zdCBbZW50cnlOYW1lLCBlbnRyeV0gb2YgT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykpIHtcblx0XHRjb25zdCBtYXRjaGluZ1VzYWdlcyA9IGZpbmRNYXRjaGluZ1VzYWdlcyhlbnRyeU5hbWUsIGNvbXBvbmVudFVzYWdlcyk7XG5cdFx0aWYgKG1hdGNoaW5nVXNhZ2VzLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG5cblx0XHR1c2VkQ29tcG9uZW50cy5hZGQoZW50cnlOYW1lKTtcblxuXHRcdGZvciAoY29uc3QgY2xzIG9mIGVudHJ5LmNsYXNzZXMuYWx3YXlzKSB7XG5cdFx0XHRjbGFzc1NhZmVsaXN0LmFkZChjbHMpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgW3Byb3BPclNsb3QsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbnRyeS5jbGFzc2VzLmJ5UHJvcCkpIHtcblx0XHRcdGlmIChwcm9wT3JTbG90ID09PSBcInNsb3RcIikge1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGNscyBvZiB2YWx1ZSkgY2xhc3NTYWZlbGlzdC5hZGQoY2xzKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGNsYXNzZXMgb2YgT2JqZWN0LnZhbHVlcyh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdGZvciAoY29uc3QgY2xzIG9mIGNsYXNzZXMpIGNsYXNzU2FmZWxpc3QuYWRkKGNscyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdFx0aWYgKGlzUHJvcFVzZWQocHJvcE9yU2xvdCwgbWF0Y2hpbmdVc2FnZXMpKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjbHMgb2YgdmFsdWUpIGNsYXNzU2FmZWxpc3QuYWRkKGNscyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHVzZWRWYWx1ZXMgPSBnZXRVc2VkRW51bVZhbHVlcyhwcm9wT3JTbG90LCBtYXRjaGluZ1VzYWdlcyk7XG5cdFx0XHRcdGlmICh1c2VkVmFsdWVzID09PSBcIkFMTFwiKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjbGFzc2VzIG9mIE9iamVjdC52YWx1ZXModmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGNscyBvZiBjbGFzc2VzKSBjbGFzc1NhZmVsaXN0LmFkZChjbHMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHZhbCBvZiB1c2VkVmFsdWVzKSB7XG5cdFx0XHRcdFx0XHRpZiAodmFsdWVbdmFsXSkge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGNscyBvZiB2YWx1ZVt2YWxdKSBjbGFzc1NhZmVsaXN0LmFkZChjbHMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChlbnRyeS5hdHRycykge1xuXHRcdFx0Zm9yIChjb25zdCBbcHJvcE5hbWUsIGF0dHJNYXBdIG9mIE9iamVjdC5lbnRyaWVzKGVudHJ5LmF0dHJzKSkge1xuXHRcdFx0XHRpZiAoaXNQcm9wVXNlZChwcm9wTmFtZSwgbWF0Y2hpbmdVc2FnZXMpKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBbYXR0ciwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRyTWFwKSkge1xuXHRcdFx0XHRcdFx0YXR0clNhZmVsaXN0LmFkZChgWyR7YXR0cn09XCIke3ZhbH1cIl1gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyBjbGFzc1NhZmVsaXN0LCBhdHRyU2FmZWxpc3QsIHVzZWRDb21wb25lbnRzLCBkeW5hbWljQ29tcG9uZW50cyB9O1xufVxuXG5mdW5jdGlvbiBleHBhbmREZXBlbmRlbmN5VXNhZ2VzKFxuXHRhbGxVc2FnZXM6IFByb3BVc2FnZVtdLFxuXHRtYW5pZmVzdDogUmVjb3JkPHN0cmluZywgTGVnYWN5Q29tcG9uZW50TWFuaWZlc3Q+LFxuKTogUHJvcFVzYWdlW10ge1xuXHRjb25zdCByZXN1bHQgPSBbLi4uYWxsVXNhZ2VzXTtcblx0Y29uc3QgcXVldWUgPSBbLi4uYWxsVXNhZ2VzLm1hcCgodXNhZ2UpID0+IHJvb3RDb21wb25lbnQodXNhZ2UuY29tcG9uZW50KSldO1xuXHRjb25zdCBzZWVuID0gbmV3IFNldChxdWV1ZSk7XG5cblx0d2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCByb290ID0gcXVldWUucG9wKCk7XG5cdFx0aWYgKCFyb290KSBjb250aW51ZTtcblx0XHRjb25zdCBkZXBzID0gZGVwc0ZvclJvb3Qocm9vdCwgbWFuaWZlc3QpO1xuXHRcdGZvciAoY29uc3QgZGVwIG9mIGRlcHMpIHtcblx0XHRcdGlmIChzZWVuLmhhcyhkZXApKSBjb250aW51ZTtcblx0XHRcdHNlZW4uYWRkKGRlcCk7XG5cdFx0XHRxdWV1ZS5wdXNoKGRlcCk7XG5cdFx0XHRyZXN1bHQucHVzaChjb25zZXJ2YXRpdmVVc2FnZShkZXAsIFwibWFuaWZlc3QtZGVwZW5kZW5jeVwiKSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZGVwc0ZvclJvb3QoXG5cdHJvb3Q6IHN0cmluZyxcblx0bWFuaWZlc3Q6IFJlY29yZDxzdHJpbmcsIExlZ2FjeUNvbXBvbmVudE1hbmlmZXN0Pixcbik6IHN0cmluZ1tdIHtcblx0Y29uc3QgZGVwcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRmb3IgKGNvbnN0IFtrZXksIGVudHJ5XSBvZiBPYmplY3QuZW50cmllcyhtYW5pZmVzdCkpIHtcblx0XHRpZiAocm9vdENvbXBvbmVudChrZXkpICE9PSByb290KSBjb250aW51ZTtcblx0XHRmb3IgKGNvbnN0IGRlcCBvZiBlbnRyeS5kZXBzID8/IFtdKSBkZXBzLmFkZChkZXApO1xuXHR9XG5cdHJldHVybiBbLi4uZGVwc107XG59XG5cbmZ1bmN0aW9uIHJvb3RDb21wb25lbnQoY29tcG9uZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gY29tcG9uZW50LnNwbGl0KFwiLlwiKVswXTtcbn1cblxuZnVuY3Rpb24gZmluZE1hdGNoaW5nVXNhZ2VzKFxuXHRlbnRyeU5hbWU6IHN0cmluZyxcblx0dXNhZ2VNYXA6IE1hcDxzdHJpbmcsIFByb3BVc2FnZVtdPixcbik6IFByb3BVc2FnZVtdIHtcblx0Y29uc3QgZGlyZWN0ID0gdXNhZ2VNYXAuZ2V0KGVudHJ5TmFtZSkgPz8gW107XG5cdGNvbnN0IHJlc3VsdHMgPSBbLi4uZGlyZWN0XTtcblx0Y29uc3QgZW50cnlSb290ID0gcm9vdENvbXBvbmVudChlbnRyeU5hbWUpO1xuXG5cdGZvciAoY29uc3QgW3VzYWdlTmFtZSwgdXNhZ2VzXSBvZiB1c2FnZU1hcCkge1xuXHRcdGlmICh1c2FnZU5hbWUgPT09IGVudHJ5TmFtZSkgY29udGludWU7XG5cdFx0aWYgKCFlbnRyeU5hbWUuaW5jbHVkZXMoXCIuXCIpICYmIHJvb3RDb21wb25lbnQodXNhZ2VOYW1lKSA9PT0gZW50cnlOYW1lKSB7XG5cdFx0XHRyZXN1bHRzLnB1c2goXG5cdFx0XHRcdC4uLnVzYWdlcy5tYXAoKHVzYWdlKSA9PiAoe1xuXHRcdFx0XHRcdC4uLnVzYWdlLFxuXHRcdFx0XHRcdGNvbXBvbmVudDogZW50cnlOYW1lLFxuXHRcdFx0XHRcdHByb3BzOiBuZXcgTWFwKFsuLi51c2FnZS5wcm9wcywgW1wic2xvdFwiLCBcIkRZTkFNSUNcIl1dKSxcblx0XHRcdFx0fSkpLFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0aWYgKFxuXHRcdFx0ZW50cnlOYW1lLmluY2x1ZGVzKFwiLlwiKSAmJlxuXHRcdFx0KHVzYWdlTmFtZSA9PT0gZW50cnlSb290IHx8IHJvb3RDb21wb25lbnQodXNhZ2VOYW1lKSA9PT0gZW50cnlSb290KVxuXHRcdCkge1xuXHRcdFx0cmVzdWx0cy5wdXNoKFxuXHRcdFx0XHQuLi51c2FnZXMubWFwKCh1c2FnZSkgPT4gKHtcblx0XHRcdFx0XHQuLi51c2FnZSxcblx0XHRcdFx0XHRoYXNTcHJlYWQ6IHRydWUsXG5cdFx0XHRcdH0pKSxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIGlzUHJvcFVzZWQocHJvcE5hbWU6IHN0cmluZywgdXNhZ2VzOiBQcm9wVXNhZ2VbXSk6IGJvb2xlYW4ge1xuXHRmb3IgKGNvbnN0IHVzYWdlIG9mIHVzYWdlcykge1xuXHRcdGlmICh1c2FnZS5oYXNTcHJlYWQpIHJldHVybiB0cnVlO1xuXHRcdGlmICh1c2FnZS5ib29sZWFuUHJvcHMuaGFzKHByb3BOYW1lKSkgcmV0dXJuIHRydWU7XG5cdFx0aWYgKHVzYWdlLnByb3BzLmhhcyhwcm9wTmFtZSkpIHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0VXNlZEVudW1WYWx1ZXMoXG5cdHNsb3ROYW1lOiBzdHJpbmcsXG5cdHVzYWdlczogUHJvcFVzYWdlW10sXG4pOiBTZXQ8c3RyaW5nPiB8IFwiQUxMXCIge1xuXHRjb25zdCB2YWx1ZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0Zm9yIChjb25zdCB1c2FnZSBvZiB1c2FnZXMpIHtcblx0XHRpZiAodXNhZ2UuaGFzU3ByZWFkKSByZXR1cm4gXCJBTExcIjtcblx0XHRjb25zdCB2YWwgPSB1c2FnZS5wcm9wcy5nZXQoc2xvdE5hbWUpO1xuXHRcdGlmICh2YWwgPT09IFwiRFlOQU1JQ1wiKSByZXR1cm4gXCJBTExcIjtcblx0XHRpZiAodmFsICE9PSB1bmRlZmluZWQpIHZhbHVlcy5hZGQodmFsKTtcblx0XHRpZiAodXNhZ2UuYm9vbGVhblByb3BzLmhhcyhzbG90TmFtZSkpIHJldHVybiBcIkFMTFwiO1xuXHR9XG5cdHJldHVybiB2YWx1ZXM7XG59XG5cbi8vIOKUgOKUgCBDb25zdW1lciBzb3VyY2Ugc2Nhbm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmFzeW5jIGZ1bmN0aW9uIHNjYW5Db25zdW1lclNvdXJjZShzcmNEaXI6IHN0cmluZyk6IFByb21pc2U8UHJvcFVzYWdlW10+IHtcblx0Y29uc3QgYWxsVXNhZ2VzOiBQcm9wVXNhZ2VbXSA9IFtdO1xuXHRjb25zdCBnbG9iID0gbmV3IEdsb2IoXCIqKi8qLnt0c3gsdHMsanN4LGpzfVwiKTtcblxuXHRmb3IgYXdhaXQgKGNvbnN0IHJlbFBhdGggb2YgZ2xvYi5zY2FuKHsgY3dkOiBzcmNEaXIgfSkpIHtcblx0XHRpZiAocmVsUGF0aC5pbmNsdWRlcyhcIm5vZGVfbW9kdWxlc1wiKSkgY29udGludWU7XG5cdFx0Y29uc3QgZnVsbFBhdGggPSBqb2luUGF0aChzcmNEaXIsIHJlbFBhdGgpO1xuXHRcdGNvbnN0IGNvZGUgPSBhd2FpdCBCdW4uZmlsZShmdWxsUGF0aCkudGV4dCgpO1xuXHRcdGlmICghY29kZS5pbmNsdWRlcyhcIkBwYXRoc2NhbGUvdWlcIikpIGNvbnRpbnVlO1xuXG5cdFx0Y29uc3QgaXNUc3ggPSAvXFwuW3RqXXN4JC8udGVzdChyZWxQYXRoKTtcblx0XHRjb25zdCBhc3QgPSBhd2FpdCBzd2MucGFyc2UoY29kZSwgeyBzeW50YXg6IFwidHlwZXNjcmlwdFwiLCB0c3g6IGlzVHN4IH0pO1xuXHRcdGNvbnN0IGJpbmRpbmdzID0gZXh0cmFjdFVJQmluZGluZ3MoYXN0KTtcblx0XHRpZiAoXG5cdFx0XHRiaW5kaW5ncy5jb21wb25lbnRzLnNpemUgPT09IDAgJiZcblx0XHRcdGJpbmRpbmdzLm5hbWVzcGFjZXMuc2l6ZSA9PT0gMCAmJlxuXHRcdFx0YmluZGluZ3MuY29uc2VydmF0aXZlVXNhZ2VzLmxlbmd0aCA9PT0gMFxuXHRcdCkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0YWxsVXNhZ2VzLnB1c2goLi4uYmluZGluZ3MuY29uc2VydmF0aXZlVXNhZ2VzKTtcblx0XHRjb25zdCBqc3hVc2FnZXMgPSBleHRyYWN0SlNYVXNhZ2VzKGFzdCwgYmluZGluZ3MuY29tcG9uZW50cyk7XG5cdFx0YWxsVXNhZ2VzLnB1c2goLi4uanN4VXNhZ2VzKTtcblx0XHRmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBiaW5kaW5ncy5jb21wb25lbnRzLnZhbHVlcygpKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGpzeFVzYWdlcy5zb21lKFxuXHRcdFx0XHRcdCh1c2FnZSkgPT5cblx0XHRcdFx0XHRcdHVzYWdlLmNvbXBvbmVudCA9PT0gY29tcG9uZW50IHx8XG5cdFx0XHRcdFx0XHR1c2FnZS5jb21wb25lbnQuc3RhcnRzV2l0aChgJHtjb21wb25lbnR9LmApLFxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRhbGxVc2FnZXMucHVzaChjb25zZXJ2YXRpdmVVc2FnZShjb21wb25lbnQsIFwiaW1wb3J0LXdpdGhvdXQtZGlyZWN0LWpzeFwiKSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGFsbFVzYWdlcztcbn1cblxuLy8g4pSA4pSAIE1haW4gKHN0YW5kYWxvbmUgQ0xJKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcblx0Y29uc3QgW3NyY0RpciwgbWFuaWZlc3RQYXRoXSA9IHByb2Nlc3MuYXJndi5zbGljZSgyKTtcblx0aWYgKCFzcmNEaXIgfHwgIW1hbmlmZXN0UGF0aCkge1xuXHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcIlVzYWdlOiBidW4gcnVuIHNyYy9zY2FuLWNvbnN1bWVyLnRzIDxjb25zdW1lci1zcmMtZGlyPiA8cHVyZ2UtbWFuaWZlc3QuanNvbj5cIixcblx0XHQpO1xuXHRcdHByb2Nlc3MuZXhpdCgxKTtcblx0fVxuXG5cdGNvbnN0IG1hbmlmZXN0OiBQdXJnZU1hbmlmZXN0ID0gSlNPTi5wYXJzZShcblx0XHRhd2FpdCBCdW4uZmlsZShtYW5pZmVzdFBhdGgpLnRleHQoKSxcblx0KTtcblx0Y29uc3QgcmVzb2x2ZWRTcmMgPSBzcmNEaXI7XG5cdGNvbnN0IG1hbmlmZXN0U2l6ZSA9IE9iamVjdC5rZXlzKG1hbmlmZXN0Q29tcG9uZW50cyhtYW5pZmVzdCkpLmxlbmd0aDtcblx0Y29uc29sZS5sb2coYFNjYW5uaW5nICR7cmVzb2x2ZWRTcmN9IGZvciBAcGF0aHNjYWxlL3VpIGNvbXBvbmVudCB1c2FnZS4uLmApO1xuXHRjb25zb2xlLmxvZyhgTWFuaWZlc3Q6ICR7bWFuaWZlc3RTaXplfSBlbnRyaWVzXFxuYCk7XG5cblx0Y29uc3QgdXNhZ2VzID0gYXdhaXQgc2NhbkNvbnN1bWVyU291cmNlKHJlc29sdmVkU3JjKTtcblx0Y29uc3QgeyBjbGFzc1NhZmVsaXN0LCBhdHRyU2FmZWxpc3QsIHVzZWRDb21wb25lbnRzIH0gPSBidWlsZFNhZmVsaXN0cyhcblx0XHR1c2FnZXMsXG5cdFx0bWFuaWZlc3QsXG5cdCk7XG5cblx0Y29uc29sZS5sb2coXCI9PT0gQ29tcG9uZW50cyBEZXRlY3RlZCA9PT1cIik7XG5cdGZvciAoY29uc3QgY29tcG9uZW50IG9mIFsuLi51c2VkQ29tcG9uZW50c10uc29ydCgpKSB7XG5cdFx0Y29uc29sZS5sb2coYCAgJHtjb21wb25lbnR9YCk7XG5cdH1cblxuXHRjb25zb2xlLmxvZyhcIlxcbj09PSBDbGFzcyBTYWZlbGlzdCA9PT1cIik7XG5cdGZvciAoY29uc3QgY2xzIG9mIFsuLi5jbGFzc1NhZmVsaXN0XS5zb3J0KCkpIHtcblx0XHRjb25zb2xlLmxvZyhgICAke2Nsc31gKTtcblx0fVxuXG5cdGNvbnNvbGUubG9nKFwiXFxuPT09IEF0dHJpYnV0ZSBTYWZlbGlzdCA9PT1cIik7XG5cdGZvciAoY29uc3QgYXR0ciBvZiBbLi4uYXR0clNhZmVsaXN0XS5zb3J0KCkpIHtcblx0XHRjb25zb2xlLmxvZyhgICAke2F0dHJ9YCk7XG5cdH1cblxuXHRjb25zb2xlLmxvZyhcblx0XHRgXFxuVG90YWw6ICR7dXNlZENvbXBvbmVudHMuc2l6ZX0gY29tcG9uZW50cywgJHtjbGFzc1NhZmVsaXN0LnNpemV9IGNsYXNzZXMsICR7YXR0clNhZmVsaXN0LnNpemV9IGF0dHJpYnV0ZSBzZWxlY3RvcnNgLFxuXHQpO1xufVxuXG5pZiAoaW1wb3J0Lm1ldGEubWFpbikge1xuXHRtYWluKCk7XG59XG5cbmV4cG9ydCB7XG5cdGV4dHJhY3RVSUltcG9ydHMsXG5cdGV4dHJhY3RKU1hVc2FnZXMsXG5cdGJ1aWxkU2FmZWxpc3RzLFxuXHRzY2FuQ29uc3VtZXJTb3VyY2UsXG59O1xuZXhwb3J0IHR5cGUge1xuXHRMZWdhY3lDb21wb25lbnRNYW5pZmVzdCxcblx0UHJvcFVzYWdlLFxuXHRQdXJnZU1hbmlmZXN0LFxuXHRQdXJnZURhdGFiYXNlVjIsXG5cdENvbXBvbmVudFB1cmdlUmVjb3JkLFxuXHRMZWdhY3lDb21wb25lbnRNYW5pZmVzdCBhcyBDb21wb25lbnRNYW5pZmVzdCxcblx0U2FmZWxpc3RzLFxufTtcbiIKICBdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFLQSxJQUFNLFVBQVUsTUFBTSxRQUFRLGFBQWE7QUFBQSxFQUUzQyxJQUFJLFNBQVM7QUFBQSxFQUNiLElBQU0sWUFBWSxNQUFNO0FBQUEsSUFDdEIsSUFBSSxDQUFDLFFBQVE7QUFBQSxNQUVYLElBQUksUUFBUSxLQUFLLFFBQVEsUUFBUTtBQUFBLFFBQy9CLE1BQU0sT0FBTyxRQUFRLE9BQU87QUFBQSxRQUM1QixRQUFRLE9BQU8saUJBQWlCO0FBQUEsUUFDaEMsU0FB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QUFDLFNBQVMsS0FBSyxrQkFDM0c7QUFBQSxJQUVBLFlBQVksT0FBTyxTQUFTO0FBQUEsSUFDNUIsTUFBTSxZQUFZLE9BQU8sV0FBVyxXQUFXLE9BQU87QUFBQSxJQUN0RCxjQUFjO0FBQUEsSUFDZCxRQUFRLElBQUksNkJBQTZCLFlBQVksTUFBTSxRQUFRLENBQUMsTUFBTTtBQUFBLElBQzFFLFFBQVEsSUFDUCx5QkFBeUIsZUFBZSxNQUFNLFFBQVEsQ0FBQyxTQUFTLFlBQVksTUFBTSxRQUFRLENBQUMsV0FBVyxJQUFJLFlBQVksZ0JBQWdCLEtBQUssUUFBUSxDQUFDLGVBQ3JKO0FBQUEsSUFFQSxNQUFNLElBQUksTUFBTSxVQUFVLFNBQVM7QUFBQSxFQUNwQztBQUFBLEVBRUEsUUFBUSxJQUNQO0FBQUEsc0JBQXlCLGNBQWMsTUFBTSxRQUFRLENBQUMsU0FBUyxhQUFhLE1BQU0sUUFBUSxDQUFDLFdBQVcsSUFBSSxhQUFhLGVBQWUsS0FBSyxRQUFRLENBQUMsZUFDcko7QUFBQTtBQUdELElBQUksa0JBQWtCO0FBQUEsRUFDckIsS0FBSztBQUNOOyIsCiAgImRlYnVnSWQiOiAiMEU5OTQ1NTYyRTZGODIzQTY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
1597
+ //# debugId=30D1AD587E03CD5264756E2164756E21
1598
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi5cXG5vZGVfbW9kdWxlc1xcZGV0ZWN0LWxpYmNcXGxpYlxccHJvY2Vzcy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkZXRlY3QtbGliY1xcbGliXFxmaWxlc3lzdGVtLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGRldGVjdC1saWJjXFxsaWJcXGVsZi5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkZXRlY3QtbGliY1xcbGliXFxkZXRlY3QtbGliYy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxsaWdodG5pbmdjc3NcXG5vZGVcXGJyb3dzZXJzbGlzdFRvVGFyZ2V0cy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxsaWdodG5pbmdjc3NcXG5vZGVcXGNvbXBvc2VWaXNpdG9ycy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxsaWdodG5pbmdjc3NcXG5vZGVcXGZsYWdzLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGxpZ2h0bmluZ2Nzc1xcbm9kZVxcaW5kZXguanMiLCAiLi5cXHNyY1xccG9zdGJ1aWxkLXB1cmdlLnRzIiwgIi4uXFxub2RlX21vZHVsZXNcXGxpZ2h0bmluZ2Nzc1xcbm9kZVxcaW5kZXgubWpzIiwgIi4uXFxzcmNcXHNjYW4tY29uc3VtZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiLy8gQ29weXJpZ2h0IDIwMTcgTG92ZWxsIEZ1bGxlciBhbmQgb3RoZXJzLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBpc0xpbnV4ID0gKCkgPT4gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2xpbnV4JztcblxubGV0IHJlcG9ydCA9IG51bGw7XG5jb25zdCBnZXRSZXBvcnQgPSAoKSA9PiB7XG4gIGlmICghcmVwb3J0KSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoaXNMaW51eCgpICYmIHByb2Nlc3MucmVwb3J0KSB7XG4gICAgICBjb25zdCBvcmlnID0gcHJvY2Vzcy5yZXBvcnQuZXhjbHVkZU5ldHdvcms7XG4gICAgICBwcm9jZXNzLnJlcG9ydC5leGNsdWRlTmV0d29yayA9IHRydWU7XG4gICAgICByZXBvcnQgPSBwcm9jZXNzLnJlcG9ydC5nZXRSZXBvcnQoKTtcbiAgICAgIHByb2Nlc3MucmVwb3J0LmV4Y2x1ZGVOZXR3b3JrID0gb3JpZztcbiAgICB9IGVsc2Uge1xuICAgICAgcmVwb3J0ID0ge307XG4gICAgfVxuICB9XG4gIHJldHVybiByZXBvcnQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHsgaXNMaW51eCwgZ2V0UmVwb3J0IH07XG4iLAogICAgIi8vIENvcHlyaWdodCAyMDE3IExvdmVsbCBGdWxsZXIgYW5kIG90aGVycy5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuXG5jb25zdCBMRERfUEFUSCA9ICcvdXNyL2Jpbi9sZGQnO1xuY29uc3QgU0VMRl9QQVRIID0gJy9wcm9jL3NlbGYvZXhlJztcbmNvbnN0IE1BWF9MRU5HVEggPSAyMDQ4O1xuXG4vKipcbiAqIFJlYWQgdGhlIGNvbnRlbnQgb2YgYSBmaWxlIHN5bmNocm9ub3VzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cbmNvbnN0IHJlYWRGaWxlU3luYyA9IChwYXRoKSA9PiB7XG4gIGNvbnN0IGZkID0gZnMub3BlblN5bmMocGF0aCwgJ3InKTtcbiAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jKE1BWF9MRU5HVEgpO1xuICBjb25zdCBieXRlc1JlYWQgPSBmcy5yZWFkU3luYyhmZCwgYnVmZmVyLCAwLCBNQVhfTEVOR1RILCAwKTtcbiAgZnMuY2xvc2UoZmQsICgpID0+IHt9KTtcbiAgcmV0dXJuIGJ1ZmZlci5zdWJhcnJheSgwLCBieXRlc1JlYWQpO1xufTtcblxuLyoqXG4gKiBSZWFkIHRoZSBjb250ZW50IG9mIGEgZmlsZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxCdWZmZXI+fVxuICovXG5jb25zdCByZWFkRmlsZSA9IChwYXRoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gIGZzLm9wZW4ocGF0aCwgJ3InLCAoZXJyLCBmZCkgPT4ge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHJlamVjdChlcnIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2MoTUFYX0xFTkdUSCk7XG4gICAgICBmcy5yZWFkKGZkLCBidWZmZXIsIDAsIE1BWF9MRU5HVEgsIDAsIChfLCBieXRlc1JlYWQpID0+IHtcbiAgICAgICAgcmVzb2x2ZShidWZmZXIuc3ViYXJyYXkoMCwgYnl0ZXNSZWFkKSk7XG4gICAgICAgIGZzLmNsb3NlKGZkLCAoKSA9PiB7fSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBMRERfUEFUSCxcbiAgU0VMRl9QQVRILFxuICByZWFkRmlsZVN5bmMsXG4gIHJlYWRGaWxlXG59O1xuIiwKICAgICIvLyBDb3B5cmlnaHQgMjAxNyBMb3ZlbGwgRnVsbGVyIGFuZCBvdGhlcnMuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IGludGVycHJldGVyUGF0aCA9IChlbGYpID0+IHtcbiAgaWYgKGVsZi5sZW5ndGggPCA2NCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChlbGYucmVhZFVJbnQzMkJFKDApICE9PSAweDdGNDU0QzQ2KSB7XG4gICAgLy8gVW5leHBlY3RlZCBtYWdpYyBieXRlc1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChlbGYucmVhZFVJbnQ4KDQpICE9PSAyKSB7XG4gICAgLy8gTm90IGEgNjQtYml0IEVMRlxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChlbGYucmVhZFVJbnQ4KDUpICE9PSAxKSB7XG4gICAgLy8gTm90IGxpdHRsZS1lbmRpYW5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBvZmZzZXQgPSBlbGYucmVhZFVJbnQzMkxFKDMyKTtcbiAgY29uc3Qgc2l6ZSA9IGVsZi5yZWFkVUludDE2TEUoNTQpO1xuICBjb25zdCBjb3VudCA9IGVsZi5yZWFkVUludDE2TEUoNTYpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBjb25zdCBoZWFkZXJPZmZzZXQgPSBvZmZzZXQgKyAoaSAqIHNpemUpO1xuICAgIGNvbnN0IHR5cGUgPSBlbGYucmVhZFVJbnQzMkxFKGhlYWRlck9mZnNldCk7XG4gICAgaWYgKHR5cGUgPT09IDMpIHtcbiAgICAgIGNvbnN0IGZpbGVPZmZzZXQgPSBlbGYucmVhZFVJbnQzMkxFKGhlYWRlck9mZnNldCArIDgpO1xuICAgICAgY29uc3QgZmlsZVNpemUgPSBlbGYucmVhZFVJbnQzMkxFKGhlYWRlck9mZnNldCArIDMyKTtcbiAgICAgIHJldHVybiBlbGYuc3ViYXJyYXkoZmlsZU9mZnNldCwgZmlsZU9mZnNldCArIGZpbGVTaXplKS50b1N0cmluZygpLnJlcGxhY2UoL1xcMC4qJC9nLCAnJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGludGVycHJldGVyUGF0aFxufTtcbiIsCiAgICAiLy8gQ29weXJpZ2h0IDIwMTcgTG92ZWxsIEZ1bGxlciBhbmQgb3RoZXJzLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjaGlsZFByb2Nlc3MgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJyk7XG5jb25zdCB7IGlzTGludXgsIGdldFJlcG9ydCB9ID0gcmVxdWlyZSgnLi9wcm9jZXNzJyk7XG5jb25zdCB7IExERF9QQVRILCBTRUxGX1BBVEgsIHJlYWRGaWxlLCByZWFkRmlsZVN5bmMgfSA9IHJlcXVpcmUoJy4vZmlsZXN5c3RlbScpO1xuY29uc3QgeyBpbnRlcnByZXRlclBhdGggfSA9IHJlcXVpcmUoJy4vZWxmJyk7XG5cbmxldCBjYWNoZWRGYW1pbHlJbnRlcnByZXRlcjtcbmxldCBjYWNoZWRGYW1pbHlGaWxlc3lzdGVtO1xubGV0IGNhY2hlZFZlcnNpb25GaWxlc3lzdGVtO1xuXG5jb25zdCBjb21tYW5kID0gJ2dldGNvbmYgR05VX0xJQkNfVkVSU0lPTiAyPiYxIHx8IHRydWU7IGxkZCAtLXZlcnNpb24gMj4mMSB8fCB0cnVlJztcbmxldCBjb21tYW5kT3V0ID0gJyc7XG5cbmNvbnN0IHNhZmVDb21tYW5kID0gKCkgPT4ge1xuICBpZiAoIWNvbW1hbmRPdXQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNoaWxkUHJvY2Vzcy5leGVjKGNvbW1hbmQsIChlcnIsIG91dCkgPT4ge1xuICAgICAgICBjb21tYW5kT3V0ID0gZXJyID8gJyAnIDogb3V0O1xuICAgICAgICByZXNvbHZlKGNvbW1hbmRPdXQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGNvbW1hbmRPdXQ7XG59O1xuXG5jb25zdCBzYWZlQ29tbWFuZFN5bmMgPSAoKSA9PiB7XG4gIGlmICghY29tbWFuZE91dCkge1xuICAgIHRyeSB7XG4gICAgICBjb21tYW5kT3V0ID0gY2hpbGRQcm9jZXNzLmV4ZWNTeW5jKGNvbW1hbmQsIHsgZW5jb2Rpbmc6ICd1dGY4JyB9KTtcbiAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICBjb21tYW5kT3V0ID0gJyAnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY29tbWFuZE91dDtcbn07XG5cbi8qKlxuICogQSBTdHJpbmcgY29uc3RhbnQgY29udGFpbmluZyB0aGUgdmFsdWUgYGdsaWJjYC5cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHVibGljXG4gKi9cbmNvbnN0IEdMSUJDID0gJ2dsaWJjJztcblxuLyoqXG4gKiBBIFJlZ2V4cCBjb25zdGFudCB0byBnZXQgdGhlIEdMSUJDIFZlcnNpb24uXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBSRV9HTElCQ19WRVJTSU9OID0gL0xJQkNbYS16MC05IFxcLSkuXSo/KFxcZCtcXC5cXGQrKS9pO1xuXG4vKipcbiAqIEEgU3RyaW5nIGNvbnN0YW50IGNvbnRhaW5pbmcgdGhlIHZhbHVlIGBtdXNsYC5cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHVibGljXG4gKi9cbmNvbnN0IE1VU0wgPSAnbXVzbCc7XG5cbmNvbnN0IGlzRmlsZU11c2wgPSAoZikgPT4gZi5pbmNsdWRlcygnbGliYy5tdXNsLScpIHx8IGYuaW5jbHVkZXMoJ2xkLW11c2wtJyk7XG5cbmNvbnN0IGZhbWlseUZyb21SZXBvcnQgPSAoKSA9PiB7XG4gIGNvbnN0IHJlcG9ydCA9IGdldFJlcG9ydCgpO1xuICBpZiAocmVwb3J0LmhlYWRlciAmJiByZXBvcnQuaGVhZGVyLmdsaWJjVmVyc2lvblJ1bnRpbWUpIHtcbiAgICByZXR1cm4gR0xJQkM7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkocmVwb3J0LnNoYXJlZE9iamVjdHMpKSB7XG4gICAgaWYgKHJlcG9ydC5zaGFyZWRPYmplY3RzLnNvbWUoaXNGaWxlTXVzbCkpIHtcbiAgICAgIHJldHVybiBNVVNMO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmNvbnN0IGZhbWlseUZyb21Db21tYW5kID0gKG91dCkgPT4ge1xuICBjb25zdCBbZ2V0Y29uZiwgbGRkMV0gPSBvdXQuc3BsaXQoL1tcXHJcXG5dKy8pO1xuICBpZiAoZ2V0Y29uZiAmJiBnZXRjb25mLmluY2x1ZGVzKEdMSUJDKSkge1xuICAgIHJldHVybiBHTElCQztcbiAgfVxuICBpZiAobGRkMSAmJiBsZGQxLmluY2x1ZGVzKE1VU0wpKSB7XG4gICAgcmV0dXJuIE1VU0w7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBmYW1pbHlGcm9tSW50ZXJwcmV0ZXJQYXRoID0gKHBhdGgpID0+IHtcbiAgaWYgKHBhdGgpIHtcbiAgICBpZiAocGF0aC5pbmNsdWRlcygnL2xkLW11c2wtJykpIHtcbiAgICAgIHJldHVybiBNVVNMO1xuICAgIH0gZWxzZSBpZiAocGF0aC5pbmNsdWRlcygnL2xkLWxpbnV4LScpKSB7XG4gICAgICByZXR1cm4gR0xJQkM7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgZ2V0RmFtaWx5RnJvbUxkZENvbnRlbnQgPSAoY29udGVudCkgPT4ge1xuICBjb250ZW50ID0gY29udGVudC50b1N0cmluZygpO1xuICBpZiAoY29udGVudC5pbmNsdWRlcygnbXVzbCcpKSB7XG4gICAgcmV0dXJuIE1VU0w7XG4gIH1cbiAgaWYgKGNvbnRlbnQuaW5jbHVkZXMoJ0dOVSBDIExpYnJhcnknKSkge1xuICAgIHJldHVybiBHTElCQztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmNvbnN0IGZhbWlseUZyb21GaWxlc3lzdGVtID0gYXN5bmMgKCkgPT4ge1xuICBpZiAoY2FjaGVkRmFtaWx5RmlsZXN5c3RlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZEZhbWlseUZpbGVzeXN0ZW07XG4gIH1cbiAgY2FjaGVkRmFtaWx5RmlsZXN5c3RlbSA9IG51bGw7XG4gIHRyeSB7XG4gICAgY29uc3QgbGRkQ29udGVudCA9IGF3YWl0IHJlYWRGaWxlKExERF9QQVRIKTtcbiAgICBjYWNoZWRGYW1pbHlGaWxlc3lzdGVtID0gZ2V0RmFtaWx5RnJvbUxkZENvbnRlbnQobGRkQ29udGVudCk7XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIHJldHVybiBjYWNoZWRGYW1pbHlGaWxlc3lzdGVtO1xufTtcblxuY29uc3QgZmFtaWx5RnJvbUZpbGVzeXN0ZW1TeW5jID0gKCkgPT4ge1xuICBpZiAoY2FjaGVkRmFtaWx5RmlsZXN5c3RlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZEZhbWlseUZpbGVzeXN0ZW07XG4gIH1cbiAgY2FjaGVkRmFtaWx5RmlsZXN5c3RlbSA9IG51bGw7XG4gIHRyeSB7XG4gICAgY29uc3QgbGRkQ29udGVudCA9IHJlYWRGaWxlU3luYyhMRERfUEFUSCk7XG4gICAgY2FjaGVkRmFtaWx5RmlsZXN5c3RlbSA9IGdldEZhbWlseUZyb21MZGRDb250ZW50KGxkZENvbnRlbnQpO1xuICB9IGNhdGNoIChlKSB7fVxuICByZXR1cm4gY2FjaGVkRmFtaWx5RmlsZXN5c3RlbTtcbn07XG5cbmNvbnN0IGZhbWlseUZyb21JbnRlcnByZXRlciA9IGFzeW5jICgpID0+IHtcbiAgaWYgKGNhY2hlZEZhbWlseUludGVycHJldGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY2FjaGVkRmFtaWx5SW50ZXJwcmV0ZXI7XG4gIH1cbiAgY2FjaGVkRmFtaWx5SW50ZXJwcmV0ZXIgPSBudWxsO1xuICB0cnkge1xuICAgIGNvbnN0IHNlbGZDb250ZW50ID0gYXdhaXQgcmVhZEZpbGUoU0VMRl9QQVRIKTtcbiAgICBjb25zdCBwYXRoID0gaW50ZXJwcmV0ZXJQYXRoKHNlbGZDb250ZW50KTtcbiAgICBjYWNoZWRGYW1pbHlJbnRlcnByZXRlciA9IGZhbWlseUZyb21JbnRlcnByZXRlclBhdGgocGF0aCk7XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIHJldHVybiBjYWNoZWRGYW1pbHlJbnRlcnByZXRlcjtcbn07XG5cbmNvbnN0IGZhbWlseUZyb21JbnRlcnByZXRlclN5bmMgPSAoKSA9PiB7XG4gIGlmIChjYWNoZWRGYW1pbHlJbnRlcnByZXRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZEZhbWlseUludGVycHJldGVyO1xuICB9XG4gIGNhY2hlZEZhbWlseUludGVycHJldGVyID0gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBzZWxmQ29udGVudCA9IHJlYWRGaWxlU3luYyhTRUxGX1BBVEgpO1xuICAgIGNvbnN0IHBhdGggPSBpbnRlcnByZXRlclBhdGgoc2VsZkNvbnRlbnQpO1xuICAgIGNhY2hlZEZhbWlseUludGVycHJldGVyID0gZmFtaWx5RnJvbUludGVycHJldGVyUGF0aChwYXRoKTtcbiAgfSBjYXRjaCAoZSkge31cbiAgcmV0dXJuIGNhY2hlZEZhbWlseUludGVycHJldGVyO1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyB3aXRoIHRoZSBsaWJjIGZhbWlseSB3aGVuIGl0IGNhbiBiZSBkZXRlcm1pbmVkLCBgbnVsbGAgb3RoZXJ3aXNlLlxuICogQHJldHVybnMge1Byb21pc2U8P3N0cmluZz59XG4gKi9cbmNvbnN0IGZhbWlseSA9IGFzeW5jICgpID0+IHtcbiAgbGV0IGZhbWlseSA9IG51bGw7XG4gIGlmIChpc0xpbnV4KCkpIHtcbiAgICBmYW1pbHkgPSBhd2FpdCBmYW1pbHlGcm9tSW50ZXJwcmV0ZXIoKTtcbiAgICBpZiAoIWZhbWlseSkge1xuICAgICAgZmFtaWx5ID0gYXdhaXQgZmFtaWx5RnJvbUZpbGVzeXN0ZW0oKTtcbiAgICAgIGlmICghZmFtaWx5KSB7XG4gICAgICAgIGZhbWlseSA9IGZhbWlseUZyb21SZXBvcnQoKTtcbiAgICAgIH1cbiAgICAgIGlmICghZmFtaWx5KSB7XG4gICAgICAgIGNvbnN0IG91dCA9IGF3YWl0IHNhZmVDb21tYW5kKCk7XG4gICAgICAgIGZhbWlseSA9IGZhbWlseUZyb21Db21tYW5kKG91dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYW1pbHk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGxpYmMgZmFtaWx5IHdoZW4gaXQgY2FuIGJlIGRldGVybWluZWQsIGBudWxsYCBvdGhlcndpc2UuXG4gKiBAcmV0dXJucyB7P3N0cmluZ31cbiAqL1xuY29uc3QgZmFtaWx5U3luYyA9ICgpID0+IHtcbiAgbGV0IGZhbWlseSA9IG51bGw7XG4gIGlmIChpc0xpbnV4KCkpIHtcbiAgICBmYW1pbHkgPSBmYW1pbHlGcm9tSW50ZXJwcmV0ZXJTeW5jKCk7XG4gICAgaWYgKCFmYW1pbHkpIHtcbiAgICAgIGZhbWlseSA9IGZhbWlseUZyb21GaWxlc3lzdGVtU3luYygpO1xuICAgICAgaWYgKCFmYW1pbHkpIHtcbiAgICAgICAgZmFtaWx5ID0gZmFtaWx5RnJvbVJlcG9ydCgpO1xuICAgICAgfVxuICAgICAgaWYgKCFmYW1pbHkpIHtcbiAgICAgICAgY29uc3Qgb3V0ID0gc2FmZUNvbW1hbmRTeW5jKCk7XG4gICAgICAgIGZhbWlseSA9IGZhbWlseUZyb21Db21tYW5kKG91dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYW1pbHk7XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIGB0cnVlYCBvbmx5IHdoZW4gdGhlIHBsYXRmb3JtIGlzIExpbnV4IGFuZCB0aGUgbGliYyBmYW1pbHkgaXMgbm90IGBnbGliY2AuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn1cbiAqL1xuY29uc3QgaXNOb25HbGliY0xpbnV4ID0gYXN5bmMgKCkgPT4gaXNMaW51eCgpICYmIGF3YWl0IGZhbWlseSgpICE9PSBHTElCQztcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCBvbmx5IHdoZW4gdGhlIHBsYXRmb3JtIGlzIExpbnV4IGFuZCB0aGUgbGliYyBmYW1pbHkgaXMgbm90IGBnbGliY2AuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaXNOb25HbGliY0xpbnV4U3luYyA9ICgpID0+IGlzTGludXgoKSAmJiBmYW1pbHlTeW5jKCkgIT09IEdMSUJDO1xuXG5jb25zdCB2ZXJzaW9uRnJvbUZpbGVzeXN0ZW0gPSBhc3luYyAoKSA9PiB7XG4gIGlmIChjYWNoZWRWZXJzaW9uRmlsZXN5c3RlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZFZlcnNpb25GaWxlc3lzdGVtO1xuICB9XG4gIGNhY2hlZFZlcnNpb25GaWxlc3lzdGVtID0gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBsZGRDb250ZW50ID0gYXdhaXQgcmVhZEZpbGUoTEREX1BBVEgpO1xuICAgIGNvbnN0IHZlcnNpb25NYXRjaCA9IGxkZENvbnRlbnQubWF0Y2goUkVfR0xJQkNfVkVSU0lPTik7XG4gICAgaWYgKHZlcnNpb25NYXRjaCkge1xuICAgICAgY2FjaGVkVmVyc2lvbkZpbGVzeXN0ZW0gPSB2ZXJzaW9uTWF0Y2hbMV07XG4gICAgfVxuICB9IGNhdGNoIChlKSB7fVxuICByZXR1cm4gY2FjaGVkVmVyc2lvbkZpbGVzeXN0ZW07XG59O1xuXG5jb25zdCB2ZXJzaW9uRnJvbUZpbGVzeXN0ZW1TeW5jID0gKCkgPT4ge1xuICBpZiAoY2FjaGVkVmVyc2lvbkZpbGVzeXN0ZW0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjYWNoZWRWZXJzaW9uRmlsZXN5c3RlbTtcbiAgfVxuICBjYWNoZWRWZXJzaW9uRmlsZXN5c3RlbSA9IG51bGw7XG4gIHRyeSB7XG4gICAgY29uc3QgbGRkQ29udGVudCA9IHJlYWRGaWxlU3luYyhMRERfUEFUSCk7XG4gICAgY29uc3QgdmVyc2lvbk1hdGNoID0gbGRkQ29udGVudC5tYXRjaChSRV9HTElCQ19WRVJTSU9OKTtcbiAgICBpZiAodmVyc2lvbk1hdGNoKSB7XG4gICAgICBjYWNoZWRWZXJzaW9uRmlsZXN5c3RlbSA9IHZlcnNpb25NYXRjaFsxXTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIHJldHVybiBjYWNoZWRWZXJzaW9uRmlsZXN5c3RlbTtcbn07XG5cbmNvbnN0IHZlcnNpb25Gcm9tUmVwb3J0ID0gKCkgPT4ge1xuICBjb25zdCByZXBvcnQgPSBnZXRSZXBvcnQoKTtcbiAgaWYgKHJlcG9ydC5oZWFkZXIgJiYgcmVwb3J0LmhlYWRlci5nbGliY1ZlcnNpb25SdW50aW1lKSB7XG4gICAgcmV0dXJuIHJlcG9ydC5oZWFkZXIuZ2xpYmNWZXJzaW9uUnVudGltZTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmNvbnN0IHZlcnNpb25TdWZmaXggPSAocykgPT4gcy50cmltKCkuc3BsaXQoL1xccysvKVsxXTtcblxuY29uc3QgdmVyc2lvbkZyb21Db21tYW5kID0gKG91dCkgPT4ge1xuICBjb25zdCBbZ2V0Y29uZiwgbGRkMSwgbGRkMl0gPSBvdXQuc3BsaXQoL1tcXHJcXG5dKy8pO1xuICBpZiAoZ2V0Y29uZiAmJiBnZXRjb25mLmluY2x1ZGVzKEdMSUJDKSkge1xuICAgIHJldHVybiB2ZXJzaW9uU3VmZml4KGdldGNvbmYpO1xuICB9XG4gIGlmIChsZGQxICYmIGxkZDIgJiYgbGRkMS5pbmNsdWRlcyhNVVNMKSkge1xuICAgIHJldHVybiB2ZXJzaW9uU3VmZml4KGxkZDIpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyB3aXRoIHRoZSBsaWJjIHZlcnNpb24gd2hlbiBpdCBjYW4gYmUgZGV0ZXJtaW5lZCwgYG51bGxgIG90aGVyd2lzZS5cbiAqIEByZXR1cm5zIHtQcm9taXNlPD9zdHJpbmc+fVxuICovXG5jb25zdCB2ZXJzaW9uID0gYXN5bmMgKCkgPT4ge1xuICBsZXQgdmVyc2lvbiA9IG51bGw7XG4gIGlmIChpc0xpbnV4KCkpIHtcbiAgICB2ZXJzaW9uID0gYXdhaXQgdmVyc2lvbkZyb21GaWxlc3lzdGVtKCk7XG4gICAgaWYgKCF2ZXJzaW9uKSB7XG4gICAgICB2ZXJzaW9uID0gdmVyc2lvbkZyb21SZXBvcnQoKTtcbiAgICB9XG4gICAgaWYgKCF2ZXJzaW9uKSB7XG4gICAgICBjb25zdCBvdXQgPSBhd2FpdCBzYWZlQ29tbWFuZCgpO1xuICAgICAgdmVyc2lvbiA9IHZlcnNpb25Gcm9tQ29tbWFuZChvdXQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmVyc2lvbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbGliYyB2ZXJzaW9uIHdoZW4gaXQgY2FuIGJlIGRldGVybWluZWQsIGBudWxsYCBvdGhlcndpc2UuXG4gKiBAcmV0dXJucyB7P3N0cmluZ31cbiAqL1xuY29uc3QgdmVyc2lvblN5bmMgPSAoKSA9PiB7XG4gIGxldCB2ZXJzaW9uID0gbnVsbDtcbiAgaWYgKGlzTGludXgoKSkge1xuICAgIHZlcnNpb24gPSB2ZXJzaW9uRnJvbUZpbGVzeXN0ZW1TeW5jKCk7XG4gICAgaWYgKCF2ZXJzaW9uKSB7XG4gICAgICB2ZXJzaW9uID0gdmVyc2lvbkZyb21SZXBvcnQoKTtcbiAgICB9XG4gICAgaWYgKCF2ZXJzaW9uKSB7XG4gICAgICBjb25zdCBvdXQgPSBzYWZlQ29tbWFuZFN5bmMoKTtcbiAgICAgIHZlcnNpb24gPSB2ZXJzaW9uRnJvbUNvbW1hbmQob3V0KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZlcnNpb247XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgR0xJQkMsXG4gIE1VU0wsXG4gIGZhbWlseSxcbiAgZmFtaWx5U3luYyxcbiAgaXNOb25HbGliY0xpbnV4LFxuICBpc05vbkdsaWJjTGludXhTeW5jLFxuICB2ZXJzaW9uLFxuICB2ZXJzaW9uU3luY1xufTtcbiIsCiAgICAiY29uc3QgQlJPV1NFUl9NQVBQSU5HID0ge1xuICBhbmRfY2hyOiAnY2hyb21lJyxcbiAgYW5kX2ZmOiAnZmlyZWZveCcsXG4gIGllX21vYjogJ2llJyxcbiAgb3BfbW9iOiAnb3BlcmEnLFxuICBhbmRfcXE6IG51bGwsXG4gIGFuZF91YzogbnVsbCxcbiAgYmFpZHU6IG51bGwsXG4gIGJiOiBudWxsLFxuICBrYWlvczogbnVsbCxcbiAgb3BfbWluaTogbnVsbCxcbn07XG5cbmZ1bmN0aW9uIGJyb3dzZXJzbGlzdFRvVGFyZ2V0cyhicm93c2Vyc2xpc3QpIHtcbiAgbGV0IHRhcmdldHMgPSB7fTtcbiAgZm9yIChsZXQgYnJvd3NlciBvZiBicm93c2Vyc2xpc3QpIHtcbiAgICBsZXQgW25hbWUsIHZdID0gYnJvd3Nlci5zcGxpdCgnICcpO1xuICAgIGlmIChCUk9XU0VSX01BUFBJTkdbbmFtZV0gPT09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGxldCB2ZXJzaW9uID0gcGFyc2VWZXJzaW9uKHYpO1xuICAgIGlmICh2ZXJzaW9uID09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICh0YXJnZXRzW25hbWVdID09IG51bGwgfHwgdmVyc2lvbiA8IHRhcmdldHNbbmFtZV0pIHtcbiAgICAgIHRhcmdldHNbbmFtZV0gPSB2ZXJzaW9uO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXRzO1xufVxuXG5mdW5jdGlvbiBwYXJzZVZlcnNpb24odmVyc2lvbikge1xuICBsZXQgW21ham9yLCBtaW5vciA9IDAsIHBhdGNoID0gMF0gPSB2ZXJzaW9uXG4gICAgLnNwbGl0KCctJylbMF1cbiAgICAuc3BsaXQoJy4nKVxuICAgIC5tYXAodiA9PiBwYXJzZUludCh2LCAxMCkpO1xuXG4gIGlmIChpc05hTihtYWpvcikgfHwgaXNOYU4obWlub3IpIHx8IGlzTmFOKHBhdGNoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIChtYWpvciA8PCAxNikgfCAobWlub3IgPDwgOCkgfCBwYXRjaDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBicm93c2Vyc2xpc3RUb1RhcmdldHM7XG4iLAogICAgIi8vIEB0cy1jaGVja1xuLyoqIEB0eXBlZGVmIHtpbXBvcnQoJy4vaW5kZXgnKS5WaXNpdG9yfSBWaXNpdG9yICovXG4vKiogQHR5cGVkZWYge2ltcG9ydCgnLi9pbmRleCcpLlZpc2l0b3JGdW5jdGlvbn0gVmlzaXRvckZ1bmN0aW9uICovXG5cbi8qKlxuICogQ29tcG9zZXMgbXVsdGlwbGUgdmlzaXRvciBvYmplY3RzIGludG8gYSBzaW5nbGUgb25lLlxuICogQHBhcmFtIHsoVmlzaXRvciB8IFZpc2l0b3JGdW5jdGlvbilbXX0gdmlzaXRvcnMgXG4gKiBAcmV0dXJuIHtWaXNpdG9yIHwgVmlzaXRvckZ1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBjb21wb3NlVmlzaXRvcnModmlzaXRvcnMpIHtcbiAgaWYgKHZpc2l0b3JzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB2aXNpdG9yc1swXTtcbiAgfVxuICBcbiAgaWYgKHZpc2l0b3JzLnNvbWUodiA9PiB0eXBlb2YgdiA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICByZXR1cm4gKG9wdHMpID0+IHtcbiAgICAgIGxldCB2ID0gdmlzaXRvcnMubWFwKHYgPT4gdHlwZW9mIHYgPT09ICdmdW5jdGlvbicgPyB2KG9wdHMpIDogdik7XG4gICAgICByZXR1cm4gY29tcG9zZVZpc2l0b3JzKHYpO1xuICAgIH07XG4gIH1cblxuICAvKiogQHR5cGUgVmlzaXRvciAqL1xuICBsZXQgcmVzID0ge307XG4gIGNvbXBvc2VTaW1wbGVWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnU3R5bGVTaGVldCcpO1xuICBjb21wb3NlU2ltcGxlVmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ1N0eWxlU2hlZXRFeGl0Jyk7XG4gIGNvbXBvc2VPYmplY3RWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnUnVsZScsIHJ1bGVWaXNpdG9yLCB3cmFwQ3VzdG9tQW5kVW5rbm93bkF0UnVsZSk7XG4gIGNvbXBvc2VPYmplY3RWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnUnVsZUV4aXQnLCBydWxlVmlzaXRvciwgd3JhcEN1c3RvbUFuZFVua25vd25BdFJ1bGUpO1xuICBjb21wb3NlT2JqZWN0VmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ0RlY2xhcmF0aW9uJywgZGVjbGFyYXRpb25WaXNpdG9yLCB3cmFwQ3VzdG9tUHJvcGVydHkpO1xuICBjb21wb3NlT2JqZWN0VmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ0RlY2xhcmF0aW9uRXhpdCcsIGRlY2xhcmF0aW9uVmlzaXRvciwgd3JhcEN1c3RvbVByb3BlcnR5KTtcbiAgY29tcG9zZVNpbXBsZVZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdVcmwnKTtcbiAgY29tcG9zZVNpbXBsZVZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdDb2xvcicpO1xuICBjb21wb3NlU2ltcGxlVmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ0ltYWdlJyk7XG4gIGNvbXBvc2VTaW1wbGVWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnSW1hZ2VFeGl0Jyk7XG4gIGNvbXBvc2VTaW1wbGVWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnTGVuZ3RoJyk7XG4gIGNvbXBvc2VTaW1wbGVWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnQW5nbGUnKTtcbiAgY29tcG9zZVNpbXBsZVZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdSYXRpbycpO1xuICBjb21wb3NlU2ltcGxlVmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ1Jlc29sdXRpb24nKTtcbiAgY29tcG9zZVNpbXBsZVZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdUaW1lJyk7XG4gIGNvbXBvc2VTaW1wbGVWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnQ3VzdG9tSWRlbnQnKTtcbiAgY29tcG9zZVNpbXBsZVZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdEYXNoZWRJZGVudCcpO1xuICBjb21wb3NlQXJyYXlGdW5jdGlvbnMocmVzLCB2aXNpdG9ycywgJ01lZGlhUXVlcnknKTtcbiAgY29tcG9zZUFycmF5RnVuY3Rpb25zKHJlcywgdmlzaXRvcnMsICdNZWRpYVF1ZXJ5RXhpdCcpO1xuICBjb21wb3NlU2ltcGxlVmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ1N1cHBvcnRzQ29uZGl0aW9uJyk7XG4gIGNvbXBvc2VTaW1wbGVWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnU3VwcG9ydHNDb25kaXRpb25FeGl0Jyk7XG4gIGNvbXBvc2VBcnJheUZ1bmN0aW9ucyhyZXMsIHZpc2l0b3JzLCAnU2VsZWN0b3InKTtcbiAgY29tcG9zZVRva2VuVmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ1Rva2VuJywgJ3Rva2VuJywgZmFsc2UpO1xuICBjb21wb3NlVG9rZW5WaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnRnVuY3Rpb24nLCAnZnVuY3Rpb24nLCBmYWxzZSk7XG4gIGNvbXBvc2VUb2tlblZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdGdW5jdGlvbkV4aXQnLCAnZnVuY3Rpb24nLCB0cnVlKTtcbiAgY29tcG9zZVRva2VuVmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ1ZhcmlhYmxlJywgJ3ZhcicsIGZhbHNlKTtcbiAgY29tcG9zZVRva2VuVmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ1ZhcmlhYmxlRXhpdCcsICd2YXInLCB0cnVlKTtcbiAgY29tcG9zZVRva2VuVmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ0Vudmlyb25tZW50VmFyaWFibGUnLCAnZW52JywgZmFsc2UpO1xuICBjb21wb3NlVG9rZW5WaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnRW52aXJvbm1lbnRWYXJpYWJsZUV4aXQnLCAnZW52JywgdHJ1ZSk7XG4gIHJldHVybiByZXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcG9zZVZpc2l0b3JzO1xuXG5mdW5jdGlvbiB3cmFwQ3VzdG9tQW5kVW5rbm93bkF0UnVsZShrLCBmKSB7XG4gIGlmIChrID09PSAndW5rbm93bicpIHtcbiAgICByZXR1cm4gKHZhbHVlID0+IGYoeyB0eXBlOiAndW5rbm93bicsIHZhbHVlIH0pKTtcbiAgfVxuICBpZiAoayA9PT0gJ2N1c3RvbScpIHtcbiAgICByZXR1cm4gKHZhbHVlID0+IGYoeyB0eXBlOiAnY3VzdG9tJywgdmFsdWUgfSkpO1xuICB9XG4gIHJldHVybiBmO1xufVxuXG5mdW5jdGlvbiB3cmFwQ3VzdG9tUHJvcGVydHkoaywgZikge1xuICByZXR1cm4gayA9PT0gJ2N1c3RvbScgPyAodmFsdWUgPT4gZih7IHByb3BlcnR5OiAnY3VzdG9tJywgdmFsdWUgfSkpIDogZjtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbmRleCcpLlZpc2l0b3JbJ1J1bGUnXX0gZiBcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2FzdCcpLlJ1bGV9IGl0ZW0gXG4gKi9cbmZ1bmN0aW9uIHJ1bGVWaXNpdG9yKGYsIGl0ZW0pIHtcbiAgaWYgKHR5cGVvZiBmID09PSAnb2JqZWN0Jykge1xuICAgIGlmIChpdGVtLnR5cGUgPT09ICd1bmtub3duJykge1xuICAgICAgbGV0IHYgPSBmLnVua25vd247XG4gICAgICBpZiAodHlwZW9mIHYgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHYgPSB2W2l0ZW0udmFsdWUubmFtZV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdj8uKGl0ZW0udmFsdWUpO1xuICAgIH1cbiAgICBpZiAoaXRlbS50eXBlID09PSAnY3VzdG9tJykge1xuICAgICAgbGV0IHYgPSBmLmN1c3RvbTtcbiAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdiA9IHZbaXRlbS52YWx1ZS5uYW1lXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2Py4oaXRlbS52YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBmW2l0ZW0udHlwZV0/LihpdGVtKTtcbiAgfVxuICByZXR1cm4gZj8uKGl0ZW0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2luZGV4JykuVmlzaXRvclsnRGVjbGFyYXRpb24nXX0gZiBcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2FzdCcpLkRlY2xhcmF0aW9ufSBpdGVtIFxuICovXG5mdW5jdGlvbiBkZWNsYXJhdGlvblZpc2l0b3IoZiwgaXRlbSkge1xuICBpZiAodHlwZW9mIGYgPT09ICdvYmplY3QnKSB7XG4gICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gICAgbGV0IG5hbWUgPSBpdGVtLnByb3BlcnR5O1xuICAgIGlmIChpdGVtLnByb3BlcnR5ID09PSAndW5wYXJzZWQnKSB7XG4gICAgICBuYW1lID0gaXRlbS52YWx1ZS5wcm9wZXJ0eUlkLnByb3BlcnR5O1xuICAgIH0gZWxzZSBpZiAoaXRlbS5wcm9wZXJ0eSA9PT0gJ2N1c3RvbScpIHtcbiAgICAgIGxldCB2ID0gZi5jdXN0b207XG4gICAgICBpZiAodHlwZW9mIHYgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHYgPSB2W2l0ZW0udmFsdWUubmFtZV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdj8uKGl0ZW0udmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gZltuYW1lXT8uKGl0ZW0pO1xuICB9XG4gIHJldHVybiBmPy4oaXRlbSk7XG59XG5cbi8qKlxuICogXG4gKiBAcGFyYW0ge1Zpc2l0b3JbXX0gdmlzaXRvcnMgXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFxuICogQHJldHVybnMge1thbnlbXSwgYm9vbGVhbiwgU2V0PHN0cmluZz5dfVxuICovXG5mdW5jdGlvbiBleHRyYWN0T2JqZWN0c09yRnVuY3Rpb25zKHZpc2l0b3JzLCBrZXkpIHtcbiAgbGV0IHZhbHVlcyA9IFtdO1xuICBsZXQgaGFzRnVuY3Rpb24gPSBmYWxzZTtcbiAgbGV0IGFsbEtleXMgPSBuZXcgU2V0KCk7XG4gIGZvciAobGV0IHZpc2l0b3Igb2YgdmlzaXRvcnMpIHtcbiAgICBsZXQgdiA9IHZpc2l0b3Jba2V5XTtcbiAgICBpZiAodikge1xuICAgICAgaWYgKHR5cGVvZiB2ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGhhc0Z1bmN0aW9uID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGtleSBpbiB2KSB7XG4gICAgICAgICAgYWxsS2V5cy5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFsdWVzLnB1c2godik7XG4gICAgfVxuICB9XG4gIHJldHVybiBbdmFsdWVzLCBoYXNGdW5jdGlvbiwgYWxsS2V5c107XG59XG5cbi8qKlxuICogQHRlbXBsYXRlIHtrZXlvZiBWaXNpdG9yfSBLXG4gKiBAcGFyYW0ge1Zpc2l0b3J9IHJlc1xuICogQHBhcmFtIHtWaXNpdG9yW119IHZpc2l0b3JzXG4gKiBAcGFyYW0ge0t9IGtleVxuICogQHBhcmFtIHsodmlzaXRvcjogVmlzaXRvcltLXSwgaXRlbTogYW55KSA9PiBhbnkgfCBhbnlbXSB8IHZvaWR9IGFwcGx5IFxuICogQHBhcmFtIHsoazogc3RyaW5nLCBmOiBhbnkpID0+IGFueX0gd3JhcEtleSBcbiAqL1xuZnVuY3Rpb24gY29tcG9zZU9iamVjdFZpc2l0b3JzKHJlcywgdmlzaXRvcnMsIGtleSwgYXBwbHksIHdyYXBLZXkpIHtcbiAgbGV0IFt2YWx1ZXMsIGhhc0Z1bmN0aW9uLCBhbGxLZXlzXSA9IGV4dHJhY3RPYmplY3RzT3JGdW5jdGlvbnModmlzaXRvcnMsIGtleSk7XG4gIGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDEpIHtcbiAgICByZXNba2V5XSA9IHZhbHVlc1swXTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgZiA9IGNyZWF0ZUFycmF5VmlzaXRvcih2aXNpdG9ycywgKHZpc2l0b3IsIGl0ZW0pID0+IGFwcGx5KHZpc2l0b3Jba2V5XSwgaXRlbSkpO1xuICBpZiAoaGFzRnVuY3Rpb24pIHtcbiAgICByZXNba2V5XSA9IGY7XG4gIH0gZWxzZSB7XG4gICAgLyoqIEB0eXBlIHthbnl9ICovXG4gICAgbGV0IHYgPSB7fTtcbiAgICBmb3IgKGxldCBrIG9mIGFsbEtleXMpIHtcbiAgICAgIHZba10gPSB3cmFwS2V5KGssIGYpO1xuICAgIH1cbiAgICByZXNba2V5XSA9IHY7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge1Zpc2l0b3J9IHJlcyBcbiAqIEBwYXJhbSB7VmlzaXRvcltdfSB2aXNpdG9ycyBcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9hc3QnKS5Ub2tlbk9yVmFsdWVbJ3R5cGUnXX0gdHlwZSBcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNFeGl0IFxuICovXG5mdW5jdGlvbiBjb21wb3NlVG9rZW5WaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCBrZXksIHR5cGUsIGlzRXhpdCkge1xuICBsZXQgW3ZhbHVlcywgaGFzRnVuY3Rpb24sIGFsbEtleXNdID0gZXh0cmFjdE9iamVjdHNPckZ1bmN0aW9ucyh2aXNpdG9ycywga2V5KTtcbiAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJlc1trZXldID0gdmFsdWVzWzBdO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBmID0gY3JlYXRlVG9rZW5WaXNpdG9yKHZpc2l0b3JzLCB0eXBlLCBpc0V4aXQpO1xuICBpZiAoaGFzRnVuY3Rpb24pIHtcbiAgICByZXNba2V5XSA9IGY7XG4gIH0gZWxzZSB7XG4gICAgbGV0IHYgPSB7fTtcbiAgICBmb3IgKGxldCBrZXkgb2YgYWxsS2V5cykge1xuICAgICAgdltrZXldID0gZjtcbiAgICB9XG4gICAgcmVzW2tleV0gPSB2O1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtWaXNpdG9yW119IHZpc2l0b3JzIFxuICogQHBhcmFtIHtpbXBvcnQoJy4vYXN0JykuVG9rZW5PclZhbHVlWyd0eXBlJ119IHR5cGUgXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVRva2VuVmlzaXRvcih2aXNpdG9ycywgdHlwZSwgaXNFeGl0KSB7XG4gIGxldCB2ID0gY3JlYXRlQXJyYXlWaXNpdG9yKHZpc2l0b3JzLCAodmlzaXRvciwgLyoqIEB0eXBlIHtpbXBvcnQoJy4vYXN0JykuVG9rZW5PclZhbHVlfSAqLyBpdGVtKSA9PiB7XG4gICAgbGV0IGY7XG4gICAgc3dpdGNoIChpdGVtLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3Rva2VuJzpcbiAgICAgICAgZiA9IHZpc2l0b3IuVG9rZW47XG4gICAgICAgIGlmICh0eXBlb2YgZiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBmID0gZltpdGVtLnZhbHVlLnR5cGVdO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICBmID0gaXNFeGl0ID8gdmlzaXRvci5GdW5jdGlvbkV4aXQgOiB2aXNpdG9yLkZ1bmN0aW9uO1xuICAgICAgICBpZiAodHlwZW9mIGYgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgZiA9IGZbaXRlbS52YWx1ZS5uYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Zhcic6XG4gICAgICAgIGYgPSBpc0V4aXQgPyB2aXNpdG9yLlZhcmlhYmxlRXhpdCA6IHZpc2l0b3IuVmFyaWFibGU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZW52JzpcbiAgICAgICAgZiA9IGlzRXhpdCA/IHZpc2l0b3IuRW52aXJvbm1lbnRWYXJpYWJsZUV4aXQgOiB2aXNpdG9yLkVudmlyb25tZW50VmFyaWFibGU7XG4gICAgICAgIGlmICh0eXBlb2YgZiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBsZXQgbmFtZTtcbiAgICAgICAgICBzd2l0Y2ggKGl0ZW0udmFsdWUubmFtZS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICd1YSc6XG4gICAgICAgICAgICBjYXNlICd1bmtub3duJzpcbiAgICAgICAgICAgICAgbmFtZSA9IGl0ZW0udmFsdWUubmFtZS52YWx1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjdXN0b20nOlxuICAgICAgICAgICAgICBuYW1lID0gaXRlbS52YWx1ZS5uYW1lLmlkZW50O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgZiA9IGZbbmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjb2xvcic6XG4gICAgICAgIGYgPSB2aXNpdG9yLkNvbG9yO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VybCc6XG4gICAgICAgIGYgPSB2aXNpdG9yLlVybDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsZW5ndGgnOlxuICAgICAgICBmID0gdmlzaXRvci5MZW5ndGg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYW5nbGUnOlxuICAgICAgICBmID0gdmlzaXRvci5BbmdsZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0aW1lJzpcbiAgICAgICAgZiA9IHZpc2l0b3IuVGltZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZXNvbHV0aW9uJzpcbiAgICAgICAgZiA9IHZpc2l0b3IuUmVzb2x1dGlvbjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkYXNoZWQtaWRlbnQnOlxuICAgICAgICBmID0gdmlzaXRvci5EYXNoZWRJZGVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKCFmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJlcyA9IGYoaXRlbS52YWx1ZSk7XG4gICAgc3dpdGNoIChpdGVtLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2NvbG9yJzpcbiAgICAgIGNhc2UgJ3VybCc6XG4gICAgICBjYXNlICdsZW5ndGgnOlxuICAgICAgY2FzZSAnYW5nbGUnOlxuICAgICAgY2FzZSAndGltZSc6XG4gICAgICBjYXNlICdyZXNvbHV0aW9uJzpcbiAgICAgIGNhc2UgJ2Rhc2hlZC1pZGVudCc6XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcykpIHtcbiAgICAgICAgICByZXMgPSByZXMubWFwKHZhbHVlID0+ICh7IHR5cGU6IGl0ZW0udHlwZSwgdmFsdWUgfSkpXG4gICAgICAgIH0gZWxzZSBpZiAocmVzKSB7XG4gICAgICAgICAgcmVzID0geyB0eXBlOiBpdGVtLnR5cGUsIHZhbHVlOiByZXMgfTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9KTtcblxuICByZXR1cm4gdmFsdWUgPT4gdih7IHR5cGUsIHZhbHVlIH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7VmlzaXRvcltdfSB2aXNpdG9ycyBcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RGdW5jdGlvbnModmlzaXRvcnMsIGtleSkge1xuICBsZXQgZnVuY3Rpb25zID0gW107XG4gIGZvciAobGV0IHZpc2l0b3Igb2YgdmlzaXRvcnMpIHtcbiAgICBsZXQgZiA9IHZpc2l0b3Jba2V5XTtcbiAgICBpZiAoZikge1xuICAgICAgZnVuY3Rpb25zLnB1c2goZik7XG4gICAgfVxuICB9XG4gIHJldHVybiBmdW5jdGlvbnM7XG59XG5cbi8qKlxuICogQHBhcmFtIHtWaXNpdG9yfSByZXMgXG4gKiBAcGFyYW0ge1Zpc2l0b3JbXX0gdmlzaXRvcnMgXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFxuICovXG5mdW5jdGlvbiBjb21wb3NlU2ltcGxlVmlzaXRvcnMocmVzLCB2aXNpdG9ycywga2V5KSB7XG4gIGxldCBmdW5jdGlvbnMgPSBleHRyYWN0RnVuY3Rpb25zKHZpc2l0b3JzLCBrZXkpO1xuICBpZiAoZnVuY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChmdW5jdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgcmVzW2tleV0gPSBmdW5jdGlvbnNbMF07XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmVzW2tleV0gPSBhcmcgPT4ge1xuICAgIGxldCBtdXRhdGVkID0gZmFsc2U7XG4gICAgZm9yIChsZXQgZiBvZiBmdW5jdGlvbnMpIHtcbiAgICAgIGxldCByZXMgPSBmKGFyZyk7XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIGFyZyA9IHJlcztcbiAgICAgICAgbXV0YXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG11dGF0ZWQgPyBhcmcgOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHtWaXNpdG9yfSByZXMgXG4gKiBAcGFyYW0ge1Zpc2l0b3JbXX0gdmlzaXRvcnMgXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFxuICovXG5mdW5jdGlvbiBjb21wb3NlQXJyYXlGdW5jdGlvbnMocmVzLCB2aXNpdG9ycywga2V5KSB7XG4gIGxldCBmdW5jdGlvbnMgPSBleHRyYWN0RnVuY3Rpb25zKHZpc2l0b3JzLCBrZXkpO1xuICBpZiAoZnVuY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChmdW5jdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgcmVzW2tleV0gPSBmdW5jdGlvbnNbMF07XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmVzW2tleV0gPSBjcmVhdGVBcnJheVZpc2l0b3IoZnVuY3Rpb25zLCAoZiwgaXRlbSkgPT4gZihpdGVtKSk7XG59XG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0ZW1wbGF0ZSBWXG4gKiBAcGFyYW0ge1RbXX0gdmlzaXRvcnMgXG4gKiBAcGFyYW0geyh2aXNpdG9yOiBULCBpdGVtOiBWKSA9PiBWIHwgVltdIHwgdm9pZH0gYXBwbHkgXG4gKiBAcmV0dXJucyB7KGl0ZW06IFYpID0+IFYgfCBWW10gfCB2b2lkfVxuICovXG5mdW5jdGlvbiBjcmVhdGVBcnJheVZpc2l0b3IodmlzaXRvcnMsIGFwcGx5KSB7XG4gIGxldCBzZWVuID0gbmV3IEJpdHNldCh2aXNpdG9ycy5sZW5ndGgpO1xuICByZXR1cm4gYXJnID0+IHtcbiAgICBsZXQgYXJyID0gW2FyZ107XG4gICAgbGV0IG11dGF0ZWQgPSBmYWxzZTtcbiAgICBzZWVuLmNsZWFyKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIEZvciBlYWNoIHZhbHVlLCBjYWxsIGFsbCB2aXNpdG9ycy4gSWYgYSB2aXNpdG9yIHJldHVybnMgYSBuZXcgdmFsdWUsXG4gICAgICAvLyB3ZSBzdGFydCBvdmVyLCBidXQgc2tpcCB0aGUgdmlzaXRvciB0aGF0IGdlbmVyYXRlZCB0aGUgdmFsdWUgb3Igc2F3XG4gICAgICAvLyBpdCBiZWZvcmUgKHRvIGF2b2lkIGN5Y2xlcykuIFRoaXMgd2F5LCB2aXNpdG9ycyBjYW4gYmUgY29tcG9zZWQgaW4gYW55IG9yZGVyLiBcbiAgICAgIGZvciAobGV0IHYgPSAwOyB2IDwgdmlzaXRvcnMubGVuZ3RoICYmIGkgPCBhcnIubGVuZ3RoOykge1xuICAgICAgICBpZiAoc2Vlbi5nZXQodikpIHtcbiAgICAgICAgICB2Kys7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaXRlbSA9IGFycltpXTtcbiAgICAgICAgbGV0IHZpc2l0b3IgPSB2aXNpdG9yc1t2XTtcbiAgICAgICAgbGV0IHJlcyA9IGFwcGx5KHZpc2l0b3IsIGl0ZW0pO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXMpKSB7XG4gICAgICAgICAgaWYgKHJlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGFyci5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChyZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBhcnJbaV0gPSByZXNbMF07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFyci5zcGxpY2UoaSwgMSwgLi4ucmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbXV0YXRlZCA9IHRydWU7XG4gICAgICAgICAgc2Vlbi5zZXQodik7XG4gICAgICAgICAgdiA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzKSB7XG4gICAgICAgICAgYXJyW2ldID0gcmVzO1xuICAgICAgICAgIG11dGF0ZWQgPSB0cnVlO1xuICAgICAgICAgIHNlZW4uc2V0KHYpO1xuICAgICAgICAgIHYgPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHYrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghbXV0YXRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBhcnIubGVuZ3RoID09PSAxID8gYXJyWzBdIDogYXJyO1xuICB9O1xufVxuXG5jbGFzcyBCaXRzZXQge1xuICBjb25zdHJ1Y3RvcihtYXhCaXRzID0gMzIpIHtcbiAgICB0aGlzLmJpdHMgPSAwO1xuICAgIHRoaXMubW9yZSA9IG1heEJpdHMgPiAzMiA/IG5ldyBVaW50MzJBcnJheShNYXRoLmNlaWwoKG1heEJpdHMgLSAzMikgLyAzMikpIDogbnVsbDtcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge251bWJlcn0gYml0ICovXG4gIGdldChiaXQpIHtcbiAgICBpZiAoYml0ID49IDMyICYmIHRoaXMubW9yZSkge1xuICAgICAgbGV0IGkgPSBNYXRoLmZsb29yKChiaXQgLSAzMikgLyAzMik7XG4gICAgICBsZXQgYiA9IGJpdCAlIDMyO1xuICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5tb3JlW2ldICYgKDEgPDwgYikpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gQm9vbGVhbih0aGlzLmJpdHMgJiAoMSA8PCBiaXQpKTtcbiAgICB9XG4gIH1cblxuICAvKiogQHBhcmFtIHtudW1iZXJ9IGJpdCAqL1xuICBzZXQoYml0KSB7XG4gICAgaWYgKGJpdCA+PSAzMiAmJiB0aGlzLm1vcmUpIHtcbiAgICAgIGxldCBpID0gTWF0aC5mbG9vcigoYml0IC0gMzIpIC8gMzIpO1xuICAgICAgbGV0IGIgPSBiaXQgJSAzMjtcbiAgICAgIHRoaXMubW9yZVtpXSB8PSAxIDw8IGI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYml0cyB8PSAxIDw8IGJpdDtcbiAgICB9XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLmJpdHMgPSAwO1xuICAgIGlmICh0aGlzLm1vcmUpIHtcbiAgICAgIHRoaXMubW9yZS5maWxsKDApO1xuICAgIH1cbiAgfVxufVxuIiwKICAgICIvLyBUaGlzIGZpbGUgaXMgYXV0b2dlbmVyYXRlZCBieSBidWlsZC1wcmVmaXhlcy5qcy4gRE8gTk9UIEVESVQhXG5cbmV4cG9ydHMuRmVhdHVyZXMgPSB7XG4gIE5lc3Rpbmc6IDEsXG4gIE5vdFNlbGVjdG9yTGlzdDogMixcbiAgRGlyU2VsZWN0b3I6IDQsXG4gIExhbmdTZWxlY3Rvckxpc3Q6IDgsXG4gIElzU2VsZWN0b3I6IDE2LFxuICBUZXh0RGVjb3JhdGlvblRoaWNrbmVzc1BlcmNlbnQ6IDMyLFxuICBNZWRpYUludGVydmFsU3ludGF4OiA2NCxcbiAgTWVkaWFSYW5nZVN5bnRheDogMTI4LFxuICBDdXN0b21NZWRpYVF1ZXJpZXM6IDI1NixcbiAgQ2xhbXBGdW5jdGlvbjogNTEyLFxuICBDb2xvckZ1bmN0aW9uOiAxMDI0LFxuICBPa2xhYkNvbG9yczogMjA0OCxcbiAgTGFiQ29sb3JzOiA0MDk2LFxuICBQM0NvbG9yczogODE5MixcbiAgSGV4QWxwaGFDb2xvcnM6IDE2Mzg0LFxuICBTcGFjZVNlcGFyYXRlZENvbG9yTm90YXRpb246IDMyNzY4LFxuICBGb250RmFtaWx5U3lzdGVtVWk6IDY1NTM2LFxuICBEb3VibGVQb3NpdGlvbkdyYWRpZW50czogMTMxMDcyLFxuICBWZW5kb3JQcmVmaXhlczogMjYyMTQ0LFxuICBMb2dpY2FsUHJvcGVydGllczogNTI0Mjg4LFxuICBMaWdodERhcms6IDEwNDg1NzYsXG4gIFNlbGVjdG9yczogMzEsXG4gIE1lZGlhUXVlcmllczogNDQ4LFxuICBDb2xvcnM6IDExMTMwODgsXG59O1xuIiwKICAgICJsZXQgcGFydHMgPSBbcHJvY2Vzcy5wbGF0Zm9ybSwgcHJvY2Vzcy5hcmNoXTtcbmlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnbGludXgnKSB7XG4gIGNvbnN0IHsgTVVTTCwgZmFtaWx5U3luYyB9ID0gcmVxdWlyZSgnZGV0ZWN0LWxpYmMnKTtcbiAgY29uc3QgZmFtaWx5ID0gZmFtaWx5U3luYygpO1xuICBpZiAoZmFtaWx5ID09PSBNVVNMKSB7XG4gICAgcGFydHMucHVzaCgnbXVzbCcpO1xuICB9IGVsc2UgaWYgKHByb2Nlc3MuYXJjaCA9PT0gJ2FybScpIHtcbiAgICBwYXJ0cy5wdXNoKCdnbnVlYWJpaGYnKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJ0cy5wdXNoKCdnbnUnKTtcbiAgfVxufSBlbHNlIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gIHBhcnRzLnB1c2goJ21zdmMnKTtcbn1cblxubGV0IG5hdGl2ZTtcbnRyeSB7XG4gIG5hdGl2ZSA9IHJlcXVpcmUoYGxpZ2h0bmluZ2Nzcy0ke3BhcnRzLmpvaW4oJy0nKX1gKTtcbn0gY2F0Y2ggKGVycikge1xuICBuYXRpdmUgPSByZXF1aXJlKGAuLi9saWdodG5pbmdjc3MuJHtwYXJ0cy5qb2luKCctJyl9Lm5vZGVgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMudHJhbnNmb3JtID0gd3JhcChuYXRpdmUudHJhbnNmb3JtKTtcbm1vZHVsZS5leHBvcnRzLnRyYW5zZm9ybVN0eWxlQXR0cmlidXRlID0gd3JhcChuYXRpdmUudHJhbnNmb3JtU3R5bGVBdHRyaWJ1dGUpO1xubW9kdWxlLmV4cG9ydHMuYnVuZGxlID0gd3JhcChuYXRpdmUuYnVuZGxlKTtcbm1vZHVsZS5leHBvcnRzLmJ1bmRsZUFzeW5jID0gd3JhcChuYXRpdmUuYnVuZGxlQXN5bmMpO1xubW9kdWxlLmV4cG9ydHMuYnJvd3NlcnNsaXN0VG9UYXJnZXRzID0gcmVxdWlyZSgnLi9icm93c2Vyc2xpc3RUb1RhcmdldHMnKTtcbm1vZHVsZS5leHBvcnRzLmNvbXBvc2VWaXNpdG9ycyA9IHJlcXVpcmUoJy4vY29tcG9zZVZpc2l0b3JzJyk7XG5tb2R1bGUuZXhwb3J0cy5GZWF0dXJlcyA9IHJlcXVpcmUoJy4vZmxhZ3MnKS5GZWF0dXJlcztcblxuZnVuY3Rpb24gd3JhcChjYWxsKSB7XG4gIHJldHVybiAob3B0aW9ucykgPT4ge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy52aXNpdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBsZXQgZGVwcyA9IFtdO1xuICAgICAgb3B0aW9ucy52aXNpdG9yID0gb3B0aW9ucy52aXNpdG9yKHtcbiAgICAgICAgYWRkRGVwZW5kZW5jeShkZXApIHtcbiAgICAgICAgICBkZXBzLnB1c2goZGVwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGxldCByZXN1bHQgPSBjYWxsKG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnRoZW4ocmVzID0+IHtcbiAgICAgICAgICBpZiAoZGVwcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJlcy5kZXBlbmRlbmNpZXMgPz89IFtdO1xuICAgICAgICAgICAgcmVzLmRlcGVuZGVuY2llcy5wdXNoKC4uLmRlcHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoZGVwcy5sZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0LmRlcGVuZGVuY2llcyA/Pz0gW107XG4gICAgICAgIHJlc3VsdC5kZXBlbmRlbmNpZXMucHVzaCguLi5kZXBzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjYWxsKG9wdGlvbnMpO1xuICAgIH1cbiAgfTtcbn1cbiIsCiAgICAiIyEvdXNyL2Jpbi9lbnYgYnVuXG4vKipcbiAqIFBvc3RidWlsZCBDU1MgcHVyZ2Ug4oCUIHN0YW5kYWxvbmUgQnVuIHNjcmlwdC5cbiAqXG4gKiBSdW5zIGFmdGVyIHJzYnVpbGQgYnVpbGQsIHB1cmdlcyBDU1MgZmlsZXMgaW4gZGlzdC8gdXNpbmcgYSBkYXRhYmFzZS1maXJzdFxuICogY29tcG9uZW50IG1hbmlmZXN0IGFuZCBjb25zdW1lciBKU1ggdXNhZ2UgYW5hbHlzaXMuXG4gKlxuICogQ29uc2VydmF0aXZlIHJ1bGVzOlxuICogICAtIHNlbGVjdG9ycyBvd25lZCBvbmx5IGJ5IHVudXNlZCBrbm93biBjb21wb25lbnRzIGNhbiBiZSByZW1vdmVkXG4gKiAgIC0gc2VsZWN0b3JzIG93bmVkIGJ5IHVzZWQgY29tcG9uZW50cyBidXQgdW51c2VkIGtub3duIHByb3AgdmFyaWFudHMgY2FuIGJlIHJlbW92ZWRcbiAqICAgLSBzZWxlY3RvcnMgd2l0aCB1bmtub3duIG93bmVyc2hpcCBhcmUga2VwdFxuICogICAtIGRhdGEvYXJpYSBydW50aW1lIHN0YXRlIGlzIGtlcHQgd2hlbiB0aGUgb3duaW5nIGNvbXBvbmVudCBzZWxlY3RvciBpcyBrZXB0XG4gKiAgIC0gdmFycy9rZXlmcmFtZXMgYXJlIHJlbW92ZWQgb25seSBhZnRlciBzZWxlY3RvciBwdXJnZSBwcm92ZXMgdGhlbSB1bnJlZmVyZW5jZWRcbiAqL1xuXG5pbXBvcnQgeyBHbG9iIH0gZnJvbSBcImJ1blwiO1xuaW1wb3J0IHsgdHJhbnNmb3JtIH0gZnJvbSBcImxpZ2h0bmluZ2Nzc1wiO1xuaW1wb3J0IHR5cGUgeyBBdFJ1bGUsIFJ1bGUgfSBmcm9tIFwicG9zdGNzc1wiO1xuaW1wb3J0IHBvc3Rjc3MgZnJvbSBcInBvc3Rjc3NcIjtcbmltcG9ydCB0eXBlIHtcblx0Q29tcG9uZW50UHVyZ2VSZWNvcmQsXG5cdExlZ2FjeUNvbXBvbmVudE1hbmlmZXN0LFxuXHRQdXJnZU1hbmlmZXN0LFxuXHRTYWZlbGlzdHMsXG59IGZyb20gXCIuL3NjYW4tY29uc3VtZXJcIjtcbmltcG9ydCB7IGJ1aWxkU2FmZWxpc3RzLCBzY2FuQ29uc3VtZXJTb3VyY2UgfSBmcm9tIFwiLi9zY2FuLWNvbnN1bWVyXCI7XG5cbi8vIOKUgOKUgCBDTEkgYXJncyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ3Y6IHN0cmluZ1tdKToge1xuXHRkaXN0RGlyOiBzdHJpbmc7XG5cdHNyY0Rpcjogc3RyaW5nO1xuXHRtYW5pZmVzdFBhdGg6IHN0cmluZztcbn0ge1xuXHRjb25zdCBhcmdzID0gYXJndi5zbGljZSgyKTtcblx0bGV0IGRpc3REaXIgPSBcIi4vZGlzdFwiO1xuXHRsZXQgc3JjRGlyID0gXCIuL3NyY1wiO1xuXHRsZXQgbWFuaWZlc3RQYXRoID0gXCJcIjtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoYXJnc1tpXSA9PT0gXCItLWRpc3RcIiAmJiBhcmdzW2kgKyAxXSkgZGlzdERpciA9IGFyZ3NbKytpXTtcblx0XHRlbHNlIGlmIChhcmdzW2ldID09PSBcIi0tc3JjXCIgJiYgYXJnc1tpICsgMV0pIHNyY0RpciA9IGFyZ3NbKytpXTtcblx0XHRlbHNlIGlmIChhcmdzW2ldID09PSBcIi0tbWFuaWZlc3RcIiAmJiBhcmdzW2kgKyAxXSkgbWFuaWZlc3RQYXRoID0gYXJnc1srK2ldO1xuXHR9XG5cblx0aWYgKCFtYW5pZmVzdFBhdGgpIHtcblx0XHRjb25zb2xlLmVycm9yKFxuXHRcdFx0XCJVc2FnZTogYnVueCBAcGF0aHNjYWxlL3JzYnVpbGQtcGx1Z2luLXVpLWNzcy1wdXJnZSAtLW1hbmlmZXN0IDxwYXRoPiBbLS1kaXN0IDxwYXRoPl0gWy0tc3JjIDxwYXRoPl1cIixcblx0XHQpO1xuXHRcdHByb2Nlc3MuZXhpdCgxKTtcblx0fVxuXG5cdHJldHVybiB7IGRpc3REaXIsIHNyY0RpciwgbWFuaWZlc3RQYXRoIH07XG59XG5cbi8vIOKUgOKUgCBEYXRhYmFzZSBub3JtYWxpemF0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5pbnRlcmZhY2UgTm9ybWFsaXplZENvbXBvbmVudFJlY29yZCBleHRlbmRzIExlZ2FjeUNvbXBvbmVudE1hbmlmZXN0IHtcblx0a2V5OiBzdHJpbmc7XG5cdGNvbXBvbmVudDogc3RyaW5nO1xuXHRwYXJ0Pzogc3RyaW5nO1xuXHRzZWxlY3RvcnM6IHN0cmluZ1tdO1xuXHRhdHRyaWJ1dGVTZWxlY3RvcnM6IHN0cmluZ1tdO1xuXHRjc3NWYXJzOiB7XG5cdFx0ZGVjbGFyZWQ6IHN0cmluZ1tdO1xuXHRcdHJlZmVyZW5jZWQ6IHN0cmluZ1tdO1xuXHR9O1xuXHRrZXlmcmFtZXM6IHtcblx0XHRkZWNsYXJlZDogc3RyaW5nW107XG5cdFx0cmVmZXJlbmNlZDogc3RyaW5nW107XG5cdH07XG59XG5cbmludGVyZmFjZSBOb3JtYWxpemVkUHVyZ2VEYXRhYmFzZSB7XG5cdHZlcnNpb246IDI7XG5cdGNvbXBvbmVudHM6IFJlY29yZDxzdHJpbmcsIE5vcm1hbGl6ZWRDb21wb25lbnRSZWNvcmQ+O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQdXJnZURhdGFiYXNlKFxuXHRtYW5pZmVzdDogUHVyZ2VNYW5pZmVzdCxcbik6IE5vcm1hbGl6ZWRQdXJnZURhdGFiYXNlIHtcblx0Y29uc3QgcmF3Q29tcG9uZW50cyA9XG5cdFx0XCJ2ZXJzaW9uXCIgaW4gbWFuaWZlc3QgJiYgbWFuaWZlc3QudmVyc2lvbiA9PT0gMlxuXHRcdFx0PyBtYW5pZmVzdC5jb21wb25lbnRzXG5cdFx0XHQ6IG1hbmlmZXN0O1xuXHRjb25zdCBjb21wb25lbnRzOiBSZWNvcmQ8c3RyaW5nLCBOb3JtYWxpemVkQ29tcG9uZW50UmVjb3JkPiA9IHt9O1xuXG5cdGZvciAoY29uc3QgW2tleSwgcmVjb3JkXSBvZiBPYmplY3QuZW50cmllcyhyYXdDb21wb25lbnRzKSkge1xuXHRcdGNvbnN0IG1heWJlVjIgPSByZWNvcmQgYXMgQ29tcG9uZW50UHVyZ2VSZWNvcmQ7XG5cdFx0Y29uc3QgW2ZhbGxiYWNrQ29tcG9uZW50LCBmYWxsYmFja1BhcnRdID0gc3BsaXRDb21wb25lbnRLZXkoa2V5KTtcblx0XHRjb21wb25lbnRzW2tleV0gPSB7XG5cdFx0XHQuLi5yZWNvcmQsXG5cdFx0XHRrZXk6IG1heWJlVjIua2V5ID8/IGtleSxcblx0XHRcdGNvbXBvbmVudDogbWF5YmVWMi5jb21wb25lbnQgPz8gZmFsbGJhY2tDb21wb25lbnQsXG5cdFx0XHRwYXJ0OiBtYXliZVYyLnBhcnQgPz8gZmFsbGJhY2tQYXJ0LFxuXHRcdFx0c2VsZWN0b3JzOiBtYXliZVYyLnNlbGVjdG9ycyA/PyBbXSxcblx0XHRcdGF0dHJpYnV0ZVNlbGVjdG9yczogbWF5YmVWMi5hdHRyaWJ1dGVTZWxlY3RvcnMgPz8gW10sXG5cdFx0XHRjc3NWYXJzOiB7XG5cdFx0XHRcdGRlY2xhcmVkOiBtYXliZVYyLmNzc1ZhcnM/LmRlY2xhcmVkID8/IFtdLFxuXHRcdFx0XHRyZWZlcmVuY2VkOiBtYXliZVYyLmNzc1ZhcnM/LnJlZmVyZW5jZWQgPz8gW10sXG5cdFx0XHR9LFxuXHRcdFx0a2V5ZnJhbWVzOiB7XG5cdFx0XHRcdGRlY2xhcmVkOiBtYXliZVYyLmtleWZyYW1lcz8uZGVjbGFyZWQgPz8gW10sXG5cdFx0XHRcdHJlZmVyZW5jZWQ6IG1heWJlVjIua2V5ZnJhbWVzPy5yZWZlcmVuY2VkID8/IFtdLFxuXHRcdFx0fSxcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIHsgdmVyc2lvbjogMiwgY29tcG9uZW50cyB9O1xufVxuXG5mdW5jdGlvbiBzcGxpdENvbXBvbmVudEtleShrZXk6IHN0cmluZyk6IFtzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZF0ge1xuXHRjb25zdCBbY29tcG9uZW50LCAuLi5wYXJ0XSA9IGtleS5zcGxpdChcIi5cIik7XG5cdHJldHVybiBbY29tcG9uZW50LCBwYXJ0Lmxlbmd0aCA+IDAgPyBwYXJ0LmpvaW4oXCIuXCIpIDogdW5kZWZpbmVkXTtcbn1cblxuZnVuY3Rpb24gcm9vdENvbXBvbmVudChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBrZXkuc3BsaXQoXCIuXCIpWzBdO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0Q2xhc3Nlc0Zyb21FbnRyeShlbnRyeTogTGVnYWN5Q29tcG9uZW50TWFuaWZlc3QpOiBzdHJpbmdbXSB7XG5cdGNvbnN0IHJlc3VsdCA9IFsuLi5lbnRyeS5jbGFzc2VzLmFsd2F5c107XG5cdGZvciAoY29uc3QgdmFsdWUgb2YgT2JqZWN0LnZhbHVlcyhlbnRyeS5jbGFzc2VzLmJ5UHJvcCkpIHtcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdHJlc3VsdC5wdXNoKC4uLnZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yIChjb25zdCBjbGFzc2VzIG9mIE9iamVjdC52YWx1ZXModmFsdWUpKSB7XG5cdFx0XHRcdHJlc3VsdC5wdXNoKC4uLmNsYXNzZXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gWy4uLm5ldyBTZXQocmVzdWx0KV07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQ2xhc3NPd25lcnMoXG5cdGRhdGFiYXNlOiBOb3JtYWxpemVkUHVyZ2VEYXRhYmFzZSxcbik6IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PiB7XG5cdGNvbnN0IG93bmVycyA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4oKTtcblx0Zm9yIChjb25zdCBba2V5LCBlbnRyeV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YWJhc2UuY29tcG9uZW50cykpIHtcblx0XHRmb3IgKGNvbnN0IGNscyBvZiBjb2xsZWN0Q2xhc3Nlc0Zyb21FbnRyeShlbnRyeSkpIHtcblx0XHRcdGNvbnN0IGV4aXN0aW5nID0gb3duZXJzLmdldChjbHMpID8/IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdFx0ZXhpc3RpbmcuYWRkKGtleSk7XG5cdFx0XHRvd25lcnMuc2V0KGNscywgZXhpc3RpbmcpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb3duZXJzO1xufVxuXG5mdW5jdGlvbiBpc1JlY29yZFVzZWQocmVjb3JkS2V5OiBzdHJpbmcsIHNhZmVsaXN0czogU2FmZWxpc3RzKTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0c2FmZWxpc3RzLnVzZWRDb21wb25lbnRzLmhhcyhyZWNvcmRLZXkpIHx8XG5cdFx0c2FmZWxpc3RzLnVzZWRDb21wb25lbnRzLmhhcyhyb290Q29tcG9uZW50KHJlY29yZEtleSkpXG5cdCk7XG59XG5cbmZ1bmN0aW9uIGlzQ2xhc3NBbGxvd2VkKFxuXHRjbHM6IHN0cmluZyxcblx0b3duZXJzOiBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4sXG5cdHNhZmVsaXN0czogU2FmZWxpc3RzLFxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IGNsYXNzT3duZXJzID0gb3duZXJzLmdldChjbHMpO1xuXHRpZiAoIWNsYXNzT3duZXJzKSByZXR1cm4gdHJ1ZTtcblx0Zm9yIChjb25zdCBvd25lciBvZiBjbGFzc093bmVycykge1xuXHRcdGlmIChpc1JlY29yZFVzZWQob3duZXIsIHNhZmVsaXN0cykgJiYgc2FmZWxpc3RzLmNsYXNzU2FmZWxpc3QuaGFzKGNscykpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8vIOKUgOKUgCBTZWxlY3RvciBwdXJnZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuaW50ZXJmYWNlIFNlbGVjdG9yUHVyZ2VSZXBvcnQge1xuXHRzZWxlY3RvcnNLZXB0S25vd246IG51bWJlcjtcblx0c2VsZWN0b3JzS2VwdFVua25vd246IG51bWJlcjtcblx0c2VsZWN0b3JzUmVtb3ZlZDogbnVtYmVyO1xuXHRzZWxlY3RvcnNSZW1vdmVkVW51c2VkQ29tcG9uZW50OiBudW1iZXI7XG5cdHNlbGVjdG9yc1JlbW92ZWRVbnVzZWRWYXJpYW50OiBudW1iZXI7XG5cdGF0dHJTZWxlY3RvcnNTZWVuOiBudW1iZXI7XG5cdGtleWZyYW1lc1JlbW92ZWQ6IG51bWJlcjtcblx0Zm9udEZhY2VzUmVtb3ZlZDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgUHVyZ2VSZXN1bHQge1xuXHRjc3M6IHN0cmluZztcblx0cmVwb3J0OiBTZWxlY3RvclB1cmdlUmVwb3J0O1xufVxuXG5mdW5jdGlvbiBlbXB0eVNlbGVjdG9yUmVwb3J0KCk6IFNlbGVjdG9yUHVyZ2VSZXBvcnQge1xuXHRyZXR1cm4ge1xuXHRcdHNlbGVjdG9yc0tlcHRLbm93bjogMCxcblx0XHRzZWxlY3RvcnNLZXB0VW5rbm93bjogMCxcblx0XHRzZWxlY3RvcnNSZW1vdmVkOiAwLFxuXHRcdHNlbGVjdG9yc1JlbW92ZWRVbnVzZWRDb21wb25lbnQ6IDAsXG5cdFx0c2VsZWN0b3JzUmVtb3ZlZFVudXNlZFZhcmlhbnQ6IDAsXG5cdFx0YXR0clNlbGVjdG9yc1NlZW46IDAsXG5cdFx0a2V5ZnJhbWVzUmVtb3ZlZDogMCxcblx0XHRmb250RmFjZXNSZW1vdmVkOiAwLFxuXHR9O1xufVxuXG4vKiogVW5lc2NhcGUgQ1NTIGlkZW50aWZpZXJzOiBgaWNvbi1cXFttZGktLWNvZ1xcXWAgLT4gYGljb24tW21kaS0tY29nXWAgKi9cbmZ1bmN0aW9uIHVuZXNjYXBlQ3NzKHM6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBzLnJlcGxhY2UoL1xcXFwoLikvZywgXCIkMVwiKTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdENsYXNzZXNGcm9tU2VsZWN0b3Ioc2VsZWN0b3I6IHN0cmluZyk6IHN0cmluZ1tdIHtcblx0Y29uc3QgbWF0Y2hlcyA9IHNlbGVjdG9yLm1hdGNoQWxsKFxuXHRcdC9cXC4oW2EtekEtWl8tXSg/OlthLXpBLVowLTlfLV18XFxcXFteXFxzLiM6Wz4rfiwpXSopKikvZyxcblx0KTtcblx0cmV0dXJuIFsuLi5tYXRjaGVzXS5tYXAoKG0pID0+IHVuZXNjYXBlQ3NzKG1bMV0pKTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEF0dHJzRnJvbVNlbGVjdG9yKHNlbGVjdG9yOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG5cdGNvbnN0IG1hdGNoZXMgPSBzZWxlY3Rvci5tYXRjaEFsbChcblx0XHQvXFxbKGRhdGEtW2EtekEtWjAtOV8tXSt8YXJpYS1bYS16QS1aMC05Xy1dKykoPzo9KD86XCIoW15cIl0qKVwifCcoW14nXSopJ3woW15cXF1dKykpKT9cXF0vZyxcblx0KTtcblx0cmV0dXJuIFsuLi5tYXRjaGVzXS5tYXAoKG0pID0+IHtcblx0XHRjb25zdCB2YWx1ZSA9IG1bMl0gPz8gbVszXSA/PyBtWzRdO1xuXHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gYFske21bMV19XWAgOiBgWyR7bVsxXX09XCIke3ZhbHVlLnRyaW0oKX1cIl1gO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0b3JEZWNpc2lvbihcblx0c2VsZWN0b3I6IHN0cmluZyxcblx0b3duZXJzOiBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4sXG5cdHNhZmVsaXN0czogU2FmZWxpc3RzLFxuKTpcblx0fCBcImtlZXAta25vd25cIlxuXHR8IFwia2VlcC11bmtub3duXCJcblx0fCBcInJlbW92ZS11bnVzZWQtY29tcG9uZW50XCJcblx0fCBcInJlbW92ZS11bnVzZWQtdmFyaWFudFwiIHtcblx0Y29uc3QgY2xhc3NlcyA9IGV4dHJhY3RDbGFzc2VzRnJvbVNlbGVjdG9yKHNlbGVjdG9yKTtcblx0aWYgKGNsYXNzZXMubGVuZ3RoID09PSAwKSByZXR1cm4gXCJrZWVwLXVua25vd25cIjtcblxuXHRjb25zdCBoYXNVbmtub3duQ2xhc3MgPSBjbGFzc2VzLnNvbWUoKGNscykgPT4gIW93bmVycy5oYXMoY2xzKSk7XG5cdGlmIChoYXNVbmtub3duQ2xhc3MpIHJldHVybiBcImtlZXAtdW5rbm93blwiO1xuXG5cdGNvbnN0IGhhc1VzZWRPd25lciA9IGNsYXNzZXMuc29tZSgoY2xzKSA9PiB7XG5cdFx0Y29uc3QgY2xhc3NPd25lcnMgPSBvd25lcnMuZ2V0KGNscyk7XG5cdFx0cmV0dXJuIFsuLi4oY2xhc3NPd25lcnMgPz8gW10pXS5zb21lKChvd25lcikgPT5cblx0XHRcdGlzUmVjb3JkVXNlZChvd25lciwgc2FmZWxpc3RzKSxcblx0XHQpO1xuXHR9KTtcblxuXHRpZiAoIWhhc1VzZWRPd25lcikgcmV0dXJuIFwicmVtb3ZlLXVudXNlZC1jb21wb25lbnRcIjtcblxuXHRpZiAoY2xhc3Nlcy5ldmVyeSgoY2xzKSA9PiBpc0NsYXNzQWxsb3dlZChjbHMsIG93bmVycywgc2FmZWxpc3RzKSkpIHtcblx0XHRyZXR1cm4gXCJrZWVwLWtub3duXCI7XG5cdH1cblxuXHRyZXR1cm4gXCJyZW1vdmUtdW51c2VkLXZhcmlhbnRcIjtcbn1cblxuZnVuY3Rpb24gcHVyZ2VDc3NXaXRoRGF0YWJhc2UoXG5cdGNzczogc3RyaW5nLFxuXHRtYW5pZmVzdDogUHVyZ2VNYW5pZmVzdCB8IE5vcm1hbGl6ZWRQdXJnZURhdGFiYXNlLFxuXHRzYWZlbGlzdHM6IFNhZmVsaXN0cyxcbik6IFB1cmdlUmVzdWx0IHtcblx0Y29uc3QgZGF0YWJhc2UgPSBub3JtYWxpemVQdXJnZURhdGFiYXNlKG1hbmlmZXN0IGFzIFB1cmdlTWFuaWZlc3QpO1xuXHRjb25zdCBjbGFzc093bmVycyA9IGJ1aWxkQ2xhc3NPd25lcnMoZGF0YWJhc2UpO1xuXHRjb25zdCByZXBvcnQgPSBlbXB0eVNlbGVjdG9yUmVwb3J0KCk7XG5cdGNvbnN0IHJvb3QgPSBwb3N0Y3NzLnBhcnNlKGNzcyk7XG5cblx0cm9vdC53YWxrUnVsZXMoKHJ1bGUpID0+IHtcblx0XHRjb25zdCBzZWxlY3RvcnMgPSBydWxlLnNlbGVjdG9ycztcblx0XHRjb25zdCBrZXB0OiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBzZWxlY3RvciBvZiBzZWxlY3RvcnMpIHtcblx0XHRcdHJlcG9ydC5hdHRyU2VsZWN0b3JzU2VlbiArPSBleHRyYWN0QXR0cnNGcm9tU2VsZWN0b3Ioc2VsZWN0b3IpLmxlbmd0aDtcblx0XHRcdGNvbnN0IGRlY2lzaW9uID0gc2VsZWN0b3JEZWNpc2lvbihzZWxlY3RvciwgY2xhc3NPd25lcnMsIHNhZmVsaXN0cyk7XG5cdFx0XHRpZiAoZGVjaXNpb24gPT09IFwia2VlcC1rbm93blwiKSB7XG5cdFx0XHRcdHJlcG9ydC5zZWxlY3RvcnNLZXB0S25vd24rKztcblx0XHRcdFx0a2VwdC5wdXNoKHNlbGVjdG9yKTtcblx0XHRcdH0gZWxzZSBpZiAoZGVjaXNpb24gPT09IFwia2VlcC11bmtub3duXCIpIHtcblx0XHRcdFx0cmVwb3J0LnNlbGVjdG9yc0tlcHRVbmtub3duKys7XG5cdFx0XHRcdGtlcHQucHVzaChzZWxlY3Rvcik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXBvcnQuc2VsZWN0b3JzUmVtb3ZlZCsrO1xuXHRcdFx0XHRpZiAoZGVjaXNpb24gPT09IFwicmVtb3ZlLXVudXNlZC1jb21wb25lbnRcIikge1xuXHRcdFx0XHRcdHJlcG9ydC5zZWxlY3RvcnNSZW1vdmVkVW51c2VkQ29tcG9uZW50Kys7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmVwb3J0LnNlbGVjdG9yc1JlbW92ZWRVbnVzZWRWYXJpYW50Kys7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoa2VwdC5sZW5ndGggPT09IDApIHtcblx0XHRcdHJ1bGUucmVtb3ZlKCk7XG5cdFx0fSBlbHNlIGlmIChrZXB0Lmxlbmd0aCA8IHNlbGVjdG9ycy5sZW5ndGgpIHtcblx0XHRcdHJ1bGUuc2VsZWN0b3JzID0ga2VwdDtcblx0XHR9XG5cdH0pO1xuXG5cdHJlbW92ZVVudXNlZEtleWZyYW1lcyhyb290LCByZXBvcnQpO1xuXHRyZW1vdmVVbnVzZWRGb250RmFjZXMocm9vdCwgcmVwb3J0KTtcblx0cmVtb3ZlRW1wdHlBdFJ1bGVzKHJvb3QpO1xuXG5cdHJldHVybiB7IGNzczogcm9vdC50b1N0cmluZygpLCByZXBvcnQgfTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlVW51c2VkS2V5ZnJhbWVzKFxuXHRyb290OiBwb3N0Y3NzLlJvb3QsXG5cdHJlcG9ydDogU2VsZWN0b3JQdXJnZVJlcG9ydCxcbikge1xuXHRjb25zdCB1c2VkS2V5ZnJhbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdHJvb3Qud2Fsa0RlY2xzKC9eYW5pbWF0aW9uKC1uYW1lKT8kLywgKGRlY2wpID0+IHtcblx0XHRmb3IgKGNvbnN0IHBhcnQgb2YgZGVjbC52YWx1ZS5zcGxpdChcIixcIikpIHtcblx0XHRcdGNvbnN0IG5hbWUgPSBwYXJ0LnRyaW0oKS5zcGxpdCgvXFxzKy8pWzBdO1xuXHRcdFx0aWYgKG5hbWUgJiYgIVtcIm5vbmVcIiwgXCJpbml0aWFsXCIsIFwiaW5oZXJpdFwiLCBcInVuc2V0XCJdLmluY2x1ZGVzKG5hbWUpKSB7XG5cdFx0XHRcdHVzZWRLZXlmcmFtZXMuYWRkKG5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0cm9vdC53YWxrQXRSdWxlcyhcImtleWZyYW1lc1wiLCAoYXRSdWxlKSA9PiB7XG5cdFx0aWYgKCF1c2VkS2V5ZnJhbWVzLmhhcyhhdFJ1bGUucGFyYW1zLnRyaW0oKSkpIHtcblx0XHRcdGF0UnVsZS5yZW1vdmUoKTtcblx0XHRcdHJlcG9ydC5rZXlmcmFtZXNSZW1vdmVkKys7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlVW51c2VkRm9udEZhY2VzKFxuXHRyb290OiBwb3N0Y3NzLlJvb3QsXG5cdHJlcG9ydDogU2VsZWN0b3JQdXJnZVJlcG9ydCxcbikge1xuXHRjb25zdCB1c2VkRm9udHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0cm9vdC53YWxrRGVjbHMoL15mb250KC1mYW1pbHkpPyQvLCAoZGVjbCkgPT4ge1xuXHRcdGZvciAoY29uc3QgcGFydCBvZiBkZWNsLnZhbHVlLnNwbGl0KFwiLFwiKSkge1xuXHRcdFx0Y29uc3QgbmFtZSA9IHBhcnQudHJpbSgpLnJlcGxhY2UoL15bXCInXXxbXCInXSQvZywgXCJcIik7XG5cdFx0XHRpZiAobmFtZSkgdXNlZEZvbnRzLmFkZChuYW1lKTtcblx0XHR9XG5cdH0pO1xuXG5cdHJvb3Qud2Fsa0F0UnVsZXMoXCJmb250LWZhY2VcIiwgKGF0UnVsZSkgPT4ge1xuXHRcdGxldCBmYW1pbHkgPSBcIlwiO1xuXHRcdGF0UnVsZS53YWxrRGVjbHMoXCJmb250LWZhbWlseVwiLCAoZGVjbCkgPT4ge1xuXHRcdFx0ZmFtaWx5ID0gZGVjbC52YWx1ZS50cmltKCkucmVwbGFjZSgvXltcIiddfFtcIiddJC9nLCBcIlwiKTtcblx0XHR9KTtcblx0XHRpZiAoZmFtaWx5ICYmICF1c2VkRm9udHMuaGFzKGZhbWlseSkpIHtcblx0XHRcdGF0UnVsZS5yZW1vdmUoKTtcblx0XHRcdHJlcG9ydC5mb250RmFjZXNSZW1vdmVkKys7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRW1wdHlBdFJ1bGVzKHJvb3Q6IHBvc3Rjc3MuUm9vdCkge1xuXHRsZXQgY2xlYW5lZCA9IHRydWU7XG5cdHdoaWxlIChjbGVhbmVkKSB7XG5cdFx0Y2xlYW5lZCA9IGZhbHNlO1xuXHRcdHJvb3Qud2Fsa0F0UnVsZXMoKGF0UnVsZSkgPT4ge1xuXHRcdFx0aWYgKGF0UnVsZS5ub2RlcyAmJiBhdFJ1bGUubm9kZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdGF0UnVsZS5yZW1vdmUoKTtcblx0XHRcdFx0Y2xlYW5lZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cblxuLy8g4pSA4pSAIFJ1bnRpbWUgQ1NTIHZhcmlhYmxlIHJlZmVyZW5jZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmFzeW5jIGZ1bmN0aW9uIGNvbGxlY3RSdW50aW1lQ3NzVmFyUmVmcyhkaXN0RGlyOiBzdHJpbmcpOiBQcm9taXNlPFNldDxzdHJpbmc+PiB7XG5cdGNvbnN0IHJlZnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0Y29uc3QgZ2xvYiA9IG5ldyBHbG9iKFwiKiovKi57anMsbWpzLGNqc31cIik7XG5cblx0Zm9yIGF3YWl0IChjb25zdCByZWxQYXRoIG9mIGdsb2Iuc2Nhbih7IGN3ZDogZGlzdERpciB9KSkge1xuXHRcdGNvbnN0IGZ1bGxQYXRoID0gYCR7ZGlzdERpcn0vJHtyZWxQYXRofWA7XG5cdFx0Y29uc3QgY29kZSA9IGF3YWl0IEJ1bi5maWxlKGZ1bGxQYXRoKS50ZXh0KCk7XG5cdFx0Zm9yIChjb25zdCBtYXRjaCBvZiBjb2RlLm1hdGNoQWxsKC92YXJcXChcXHMqKC0tW2EtekEtWjAtOV8tXSspL2cpKSB7XG5cdFx0XHRyZWZzLmFkZChtYXRjaFsxXSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlZnM7XG59XG5cbi8vIOKUgOKUgCBVbnVzZWQgQ1NTIHZhcmlhYmxlIGNsZWFudXAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmludGVyZmFjZSBWYXJDbGVhbnVwUmVzdWx0IHtcblx0Y3NzOiBzdHJpbmc7XG5cdHJlbW92ZWQ6IG51bWJlcjtcbn1cblxuLy8gVE9ETzogcG90ZW50aWFsbHkgcmVkdWNlIHBhcnNpbmcgYW1vdW50XG5mdW5jdGlvbiBjbGVhblVudXNlZFZhcnNXaXRoUmVwb3J0KFxuXHRjc3M6IHN0cmluZyxcblx0ZXh0ZXJuYWxseVJlZmVyZW5jZWRWYXJzOiBTZXQ8c3RyaW5nPixcbik6IFZhckNsZWFudXBSZXN1bHQge1xuXHRsZXQgY2hhbmdlZCA9IHRydWU7XG5cdGxldCByZXN1bHQgPSBjc3M7XG5cdGxldCByZW1vdmVkID0gMDtcblxuXHR3aGlsZSAoY2hhbmdlZCkge1xuXHRcdGNoYW5nZWQgPSBmYWxzZTtcblx0XHRjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZShyZXN1bHQpO1xuXG5cdFx0Y29uc3QgZGVjbGFyZWQgPSBuZXcgTWFwPHN0cmluZywgeyBydWxlOiBSdWxlIHwgQXRSdWxlOyBwcm9wOiBzdHJpbmcgfVtdPigpO1xuXHRcdHJvb3Qud2Fsa0RlY2xzKC9eLS0vLCAoZGVjbCkgPT4ge1xuXHRcdFx0Y29uc3QgZW50cmllcyA9IGRlY2xhcmVkLmdldChkZWNsLnByb3ApID8/IFtdO1xuXHRcdFx0ZW50cmllcy5wdXNoKHsgcnVsZTogZGVjbC5wYXJlbnQgYXMgUnVsZSwgcHJvcDogZGVjbC5wcm9wIH0pO1xuXHRcdFx0ZGVjbGFyZWQuc2V0KGRlY2wucHJvcCwgZW50cmllcyk7XG5cdFx0fSk7XG5cblx0XHRjb25zdCByZWZlcmVuY2VkID0gbmV3IFNldDxzdHJpbmc+KGV4dGVybmFsbHlSZWZlcmVuY2VkVmFycyk7XG5cdFx0cm9vdC53YWxrRGVjbHMoKGRlY2wpID0+IHtcblx0XHRcdGZvciAoY29uc3QgcmVmIG9mIGRlY2wudmFsdWUubWF0Y2hBbGwoL3ZhclxcKFxccyooLS1bYS16QS1aMC05Xy1dKykvZykpIHtcblx0XHRcdFx0cmVmZXJlbmNlZC5hZGQocmVmWzFdKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGZvciAoY29uc3QgW3Zhck5hbWUsIGVudHJpZXNdIG9mIGRlY2xhcmVkKSB7XG5cdFx0XHRpZiAoIXJlZmVyZW5jZWQuaGFzKHZhck5hbWUpKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuXHRcdFx0XHRcdGVudHJ5LnJ1bGUud2Fsa0RlY2xzKGVudHJ5LnByb3AsIChkZWNsKSA9PiB7XG5cdFx0XHRcdFx0XHRkZWNsLnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0Y2hhbmdlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRyZW1vdmVkKys7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyb290LndhbGtSdWxlcygocnVsZSkgPT4ge1xuXHRcdFx0aWYgKHJ1bGUubm9kZXMgJiYgcnVsZS5ub2Rlcy5sZW5ndGggPT09IDApIHJ1bGUucmVtb3ZlKCk7XG5cdFx0fSk7XG5cdFx0cmVtb3ZlRW1wdHlBdFJ1bGVzKHJvb3QpO1xuXG5cdFx0cmVzdWx0ID0gcm9vdC50b1N0cmluZygpO1xuXHR9XG5cblx0cmV0dXJuIHsgY3NzOiByZXN1bHQsIHJlbW92ZWQgfTtcbn1cblxuZnVuY3Rpb24gY2xlYW5VbnVzZWRWYXJzKFxuXHRjc3M6IHN0cmluZyxcblx0ZXh0ZXJuYWxseVJlZmVyZW5jZWRWYXJzOiBTZXQ8c3RyaW5nPixcbik6IHN0cmluZyB7XG5cdHJldHVybiBjbGVhblVudXNlZFZhcnNXaXRoUmVwb3J0KGNzcywgZXh0ZXJuYWxseVJlZmVyZW5jZWRWYXJzKS5jc3M7XG59XG5cbi8vIOKUgOKUgCBNaW5pZmljYXRpb246IExpZ2h0bmluZyBDU1Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIG1pbmlmeShjc3M6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IHsgY29kZSB9ID0gdHJhbnNmb3JtKHtcblx0XHRmaWxlbmFtZTogXCJwdXJnZWQuY3NzXCIsXG5cdFx0Y29kZTogQnVmZmVyLmZyb20oY3NzKSxcblx0XHRtaW5pZnk6IHRydWUsXG5cdFx0ZXJyb3JSZWNvdmVyeTogdHJ1ZSxcblx0fSk7XG5cdHJldHVybiBjb2RlLnRvU3RyaW5nKCk7XG59XG5cbi8vIOKUgOKUgCBNYWluIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuXHRjb25zdCB7IGRpc3REaXIsIHNyY0RpciwgbWFuaWZlc3RQYXRoIH0gPSBwYXJzZUFyZ3MocHJvY2Vzcy5hcmd2KTtcblxuXHRjb25zdCBtYW5pZmVzdDogUHVyZ2VNYW5pZmVzdCA9IEpTT04ucGFyc2UoXG5cdFx0YXdhaXQgQnVuLmZpbGUobWFuaWZlc3RQYXRoKS50ZXh0KCksXG5cdCk7XG5cdGNvbnN0IGRhdGFiYXNlID0gbm9ybWFsaXplUHVyZ2VEYXRhYmFzZShtYW5pZmVzdCk7XG5cdGNvbnN0IHJvb3RzID0gbmV3IFNldChPYmplY3Qua2V5cyhkYXRhYmFzZS5jb21wb25lbnRzKS5tYXAocm9vdENvbXBvbmVudCkpO1xuXHRjb25zb2xlLmxvZyhcblx0XHRgW2Nzcy1wdXJnZV0gRGF0YWJhc2UgbG9hZGVkOiAke09iamVjdC5rZXlzKGRhdGFiYXNlLmNvbXBvbmVudHMpLmxlbmd0aH0gcmVjb3JkcyAoJHtyb290cy5zaXplfSBjb21wb25lbnRzKWAsXG5cdCk7XG5cblx0Y29uc3QgdXNhZ2VzID0gYXdhaXQgc2NhbkNvbnN1bWVyU291cmNlKHNyY0Rpcik7XG5cdGNvbnN0IHNhZmVsaXN0cyA9IGJ1aWxkU2FmZWxpc3RzKHVzYWdlcywgbWFuaWZlc3QpO1xuXHRjb25zdCB1c2VkUm9vdHMgPSBuZXcgU2V0KFsuLi5zYWZlbGlzdHMudXNlZENvbXBvbmVudHNdLm1hcChyb290Q29tcG9uZW50KSk7XG5cdGNvbnN0IHJlbW92ZWRSb290cyA9IFsuLi5yb290c10uZmlsdGVyKChyb290KSA9PiAhdXNlZFJvb3RzLmhhcyhyb290KSk7XG5cblx0Y29uc29sZS5sb2coXG5cdFx0YFtjc3MtcHVyZ2VdIENvbXBvbmVudHMgZGV0ZWN0ZWQ6ICR7dXNlZFJvb3RzLnNpemV9IHVzZWQsICR7cmVtb3ZlZFJvb3RzLmxlbmd0aH0gcmVtb3ZhYmxlYCxcblx0KTtcblx0aWYgKHVzZWRSb290cy5zaXplID4gMCkge1xuXHRcdGNvbnNvbGUubG9nKGBbY3NzLXB1cmdlXSAgIHVzZWQ6ICR7Wy4uLnVzZWRSb290c10uc29ydCgpLmpvaW4oXCIsIFwiKX1gKTtcblx0fVxuXHRpZiAocmVtb3ZlZFJvb3RzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zb2xlLmxvZyhgW2Nzcy1wdXJnZV0gICByZW1vdmFibGU6ICR7cmVtb3ZlZFJvb3RzLnNvcnQoKS5qb2luKFwiLCBcIil9YCk7XG5cdH1cblx0Y29uc29sZS5sb2coXG5cdFx0YFtjc3MtcHVyZ2VdIFNhZmVsaXN0IGZhY3RzOiAke3NhZmVsaXN0cy5jbGFzc1NhZmVsaXN0LnNpemV9IGNsYXNzZXMsICR7c2FmZWxpc3RzLmF0dHJTYWZlbGlzdC5zaXplfSBhdHRyIHNlbGVjdG9yc2AsXG5cdCk7XG5cblx0Y29uc3QgcnVudGltZUNzc1ZhclJlZnMgPSBhd2FpdCBjb2xsZWN0UnVudGltZUNzc1ZhclJlZnMoZGlzdERpcik7XG5cdGlmIChydW50aW1lQ3NzVmFyUmVmcy5zaXplID4gMCkge1xuXHRcdGNvbnNvbGUubG9nKFxuXHRcdFx0YFtjc3MtcHVyZ2VdIFJ1bnRpbWUgQ1NTIHZhcnMgcmVmZXJlbmNlZCBmcm9tIEpTOiAke3J1bnRpbWVDc3NWYXJSZWZzLnNpemV9YCxcblx0XHQpO1xuXHR9XG5cblx0Y29uc3QgZ2xvYiA9IG5ldyBHbG9iKFwiKiovKi5jc3NcIik7XG5cdGxldCB0b3RhbEJlZm9yZSA9IDA7XG5cdGxldCB0b3RhbEFmdGVyID0gMDtcblxuXHRmb3IgYXdhaXQgKGNvbnN0IHJlbFBhdGggb2YgZ2xvYi5zY2FuKHsgY3dkOiBkaXN0RGlyIH0pKSB7XG5cdFx0Y29uc3QgZnVsbFBhdGggPSBgJHtkaXN0RGlyfS8ke3JlbFBhdGh9YDtcblx0XHRjb25zdCBvcmlnaW5hbENzcyA9IGF3YWl0IEJ1bi5maWxlKGZ1bGxQYXRoKS50ZXh0KCk7XG5cdFx0Y29uc3Qgb3JpZ2luYWxTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgob3JpZ2luYWxDc3MsIFwidXRmLThcIik7XG5cdFx0dG90YWxCZWZvcmUgKz0gb3JpZ2luYWxTaXplO1xuXG5cdFx0Y29uc29sZS5sb2coXG5cdFx0XHRgW2Nzcy1wdXJnZV0gUHJvY2Vzc2luZyAke3JlbFBhdGh9ICgkeyhvcmlnaW5hbFNpemUgLyAxMDI0KS50b0ZpeGVkKDEpfSBLQilgLFxuXHRcdCk7XG5cblx0XHRjb25zdCBwdXJnZWQgPSBwdXJnZUNzc1dpdGhEYXRhYmFzZShvcmlnaW5hbENzcywgZGF0YWJhc2UsIHNhZmVsaXN0cyk7XG5cdFx0bGV0IHB1cmdlZENzcyA9IHB1cmdlZC5jc3M7XG5cdFx0Y29uc3QgYWZ0ZXJTZWxlY3RvcnMgPSBCdWZmZXIuYnl0ZUxlbmd0aChwdXJnZWRDc3MsIFwidXRmLThcIik7XG5cdFx0Y29uc29sZS5sb2coXG5cdFx0XHRgW2Nzcy1wdXJnZV0gICBzZWxlY3RvcnM6ICR7KG9yaWdpbmFsU2l6ZSAvIDEwMjQpLnRvRml4ZWQoMSl9IC0+ICR7KGFmdGVyU2VsZWN0b3JzIC8gMTAyNCkudG9GaXhlZCgxKX0gS0IgKCR7cHVyZ2VkLnJlcG9ydC5zZWxlY3RvcnNSZW1vdmVkfSByZW1vdmVkLCAke3B1cmdlZC5yZXBvcnQuc2VsZWN0b3JzS2VwdFVua25vd259IGtlcHQgdW5rbm93bilgLFxuXHRcdCk7XG5cdFx0Y29uc29sZS5sb2coXG5cdFx0XHRgW2Nzcy1wdXJnZV0gICBhdHRycyBzZWVuOiAke3B1cmdlZC5yZXBvcnQuYXR0clNlbGVjdG9yc1NlZW59OyBrZXlmcmFtZXMgcmVtb3ZlZDogJHtwdXJnZWQucmVwb3J0LmtleWZyYW1lc1JlbW92ZWR9YCxcblx0XHQpO1xuXG5cdFx0Y29uc3QgdmFycyA9IGNsZWFuVW51c2VkVmFyc1dpdGhSZXBvcnQocHVyZ2VkQ3NzLCBydW50aW1lQ3NzVmFyUmVmcyk7XG5cdFx0cHVyZ2VkQ3NzID0gdmFycy5jc3M7XG5cdFx0Y29uc3QgYWZ0ZXJWYXJzID0gQnVmZmVyLmJ5dGVMZW5ndGgocHVyZ2VkQ3NzLCBcInV0Zi04XCIpO1xuXHRcdGNvbnNvbGUubG9nKFxuXHRcdFx0YFtjc3MtcHVyZ2VdICAgdmFyczogJHsoYWZ0ZXJTZWxlY3RvcnMgLyAxMDI0KS50b0ZpeGVkKDEpfSAtPiAkeyhhZnRlclZhcnMgLyAxMDI0KS50b0ZpeGVkKDEpfSBLQiAoJHt2YXJzLnJlbW92ZWR9IHJlbW92ZWQpYCxcblx0XHQpO1xuXG5cdFx0cHVyZ2VkQ3NzID0gbWluaWZ5KHB1cmdlZENzcyk7XG5cdFx0Y29uc3QgZmluYWxTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgocHVyZ2VkQ3NzLCBcInV0Zi04XCIpO1xuXHRcdHRvdGFsQWZ0ZXIgKz0gZmluYWxTaXplO1xuXHRcdGNvbnNvbGUubG9nKGBbY3NzLXB1cmdlXSAgIG1pbmlmeTogLT4gJHsoZmluYWxTaXplIC8gMTAyNCkudG9GaXhlZCgxKX0gS0JgKTtcblx0XHRjb25zb2xlLmxvZyhcblx0XHRcdGBbY3NzLXB1cmdlXSAgIGZpbmFsOiAkeyhvcmlnaW5hbFNpemUgLyAxMDI0KS50b0ZpeGVkKDEpfSAtPiAkeyhmaW5hbFNpemUgLyAxMDI0KS50b0ZpeGVkKDEpfSBLQiAoJHsoKDEgLSBmaW5hbFNpemUgLyBvcmlnaW5hbFNpemUpICogMTAwKS50b0ZpeGVkKDEpfSUgcmVkdWN0aW9uKWAsXG5cdFx0KTtcblxuXHRcdGF3YWl0IEJ1bi53cml0ZShmdWxsUGF0aCwgcHVyZ2VkQ3NzKTtcblx0fVxuXG5cdGNvbnNvbGUubG9nKFxuXHRcdGBcXG5bY3NzLXB1cmdlXSBUb3RhbDogJHsodG90YWxCZWZvcmUgLyAxMDI0KS50b0ZpeGVkKDEpfSAtPiAkeyh0b3RhbEFmdGVyIC8gMTAyNCkudG9GaXhlZCgxKX0gS0IgKCR7KCgxIC0gdG90YWxBZnRlciAvIHRvdGFsQmVmb3JlKSAqIDEwMCkudG9GaXhlZCgxKX0lIHJlZHVjdGlvbilgLFxuXHQpO1xufVxuXG5pZiAoaW1wb3J0Lm1ldGEubWFpbikge1xuXHRtYWluKCk7XG59XG5cbmV4cG9ydCB0eXBlIHtcblx0Tm9ybWFsaXplZFB1cmdlRGF0YWJhc2UsXG5cdFB1cmdlUmVzdWx0LFxuXHRTZWxlY3RvclB1cmdlUmVwb3J0LFxuXHRWYXJDbGVhbnVwUmVzdWx0LFxufTtcbmV4cG9ydCB7XG5cdGNsZWFuVW51c2VkVmFycyxcblx0Y2xlYW5VbnVzZWRWYXJzV2l0aFJlcG9ydCxcblx0bm9ybWFsaXplUHVyZ2VEYXRhYmFzZSxcblx0cHVyZ2VDc3NXaXRoRGF0YWJhc2UsXG59O1xuIiwKICAgICJpbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5cbmNvbnN0IHsgdHJhbnNmb3JtLCB0cmFuc2Zvcm1TdHlsZUF0dHJpYnV0ZSwgYnVuZGxlLCBidW5kbGVBc3luYywgYnJvd3NlcnNsaXN0VG9UYXJnZXRzLCBjb21wb3NlVmlzaXRvcnMsIEZlYXR1cmVzIH0gPSBpbmRleDtcbmV4cG9ydCB7IHRyYW5zZm9ybSwgdHJhbnNmb3JtU3R5bGVBdHRyaWJ1dGUsIGJ1bmRsZSwgYnVuZGxlQXN5bmMsIGJyb3dzZXJzbGlzdFRvVGFyZ2V0cywgY29tcG9zZVZpc2l0b3JzLCBGZWF0dXJlcyB9O1xuIiwKICAgICIvKipcbiAqIENvbnN1bWVyLXNpZGUgSlNYIHNjYW5uZXIuXG4gKlxuICogV2Fsa3MgYSBjb25zdW1lciBzb3VyY2UgdHJlZSwgcmVzb2x2ZXMgQHBhdGhzY2FsZS91aSBpbXBvcnRzIHdpdGggU1dDLCBhbmRcbiAqIHJlY29yZHMgY2Fub25pY2FsIGNvbXBvbmVudC9wYXJ0IHVzYWdlIHBsdXMgcHJvcCBmYWN0cyBmb3IgZGF0YWJhc2UtZmlyc3QgQ1NTXG4gKiBwdXJnZSBkZWNpc2lvbnMuXG4gKlxuICogVXNhZ2U6ICBidW4gcnVuIHNyYy9zY2FuLWNvbnN1bWVyLnRzIDxjb25zdW1lci1zcmMtZGlyPiA8cHVyZ2UtbWFuaWZlc3QuanNvbj5cbiAqL1xuXG5pbXBvcnQgc3djIGZyb20gXCJAc3djL2NvcmVcIjtcbmltcG9ydCB7IEdsb2IgfSBmcm9tIFwiYnVuXCI7XG5cbi8vIOKUgOKUgCBUeXBlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuaW50ZXJmYWNlIExlZ2FjeUNvbXBvbmVudE1hbmlmZXN0IHtcblx0Y2xhc3Nlczoge1xuXHRcdGFsd2F5czogc3RyaW5nW107XG5cdFx0YnlQcm9wOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPj47XG5cdH07XG5cdGF0dHJzPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG5cdGRlcHM/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIENvbXBvbmVudFB1cmdlUmVjb3JkIGV4dGVuZHMgTGVnYWN5Q29tcG9uZW50TWFuaWZlc3Qge1xuXHRrZXk/OiBzdHJpbmc7XG5cdGNvbXBvbmVudD86IHN0cmluZztcblx0cGFydD86IHN0cmluZztcblx0c2VsZWN0b3JzPzogc3RyaW5nW107XG5cdGF0dHJpYnV0ZVNlbGVjdG9ycz86IHN0cmluZ1tdO1xuXHRjc3NWYXJzPzoge1xuXHRcdGRlY2xhcmVkPzogc3RyaW5nW107XG5cdFx0cmVmZXJlbmNlZD86IHN0cmluZ1tdO1xuXHR9O1xuXHRrZXlmcmFtZXM/OiB7XG5cdFx0ZGVjbGFyZWQ/OiBzdHJpbmdbXTtcblx0XHRyZWZlcmVuY2VkPzogc3RyaW5nW107XG5cdH07XG59XG5cbmludGVyZmFjZSBQdXJnZURhdGFiYXNlVjIge1xuXHR2ZXJzaW9uOiAyO1xuXHRjb21wb25lbnRzOiBSZWNvcmQ8c3RyaW5nLCBDb21wb25lbnRQdXJnZVJlY29yZD47XG5cdHNoYXJlZD86IHtcblx0XHRzZWxlY3RvcnM/OiB1bmtub3duW107XG5cdFx0Y3NzVmFycz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdGtleWZyYW1lcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHR9O1xufVxuXG50eXBlIFB1cmdlTWFuaWZlc3QgPSBSZWNvcmQ8c3RyaW5nLCBMZWdhY3lDb21wb25lbnRNYW5pZmVzdD4gfCBQdXJnZURhdGFiYXNlVjI7XG5cbi8qKiBXaGF0IHdlIGNvbGxlY3QgcGVyIGNvbXBvbmVudCB1c2FnZSBmcm9tIEpTWCAqL1xuaW50ZXJmYWNlIFByb3BVc2FnZSB7XG5cdGNvbXBvbmVudDogc3RyaW5nO1xuXHRwcm9wczogTWFwPHN0cmluZywgc3RyaW5nIHwgXCJEWU5BTUlDXCI+O1xuXHRib29sZWFuUHJvcHM6IFNldDxzdHJpbmc+O1xuXHRoYXNTcHJlYWQ6IGJvb2xlYW47XG5cdHNvdXJjZT86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEltcG9ydEJpbmRpbmdzIHtcblx0Y29tcG9uZW50czogTWFwPHN0cmluZywgc3RyaW5nPjtcblx0bmFtZXNwYWNlczogTWFwPHN0cmluZywgc3RyaW5nIHwgbnVsbD47XG5cdGNvbnNlcnZhdGl2ZVVzYWdlczogUHJvcFVzYWdlW107XG59XG5cbmludGVyZmFjZSBTYWZlbGlzdHMge1xuXHRjbGFzc1NhZmVsaXN0OiBTZXQ8c3RyaW5nPjtcblx0YXR0clNhZmVsaXN0OiBTZXQ8c3RyaW5nPjtcblx0dXNlZENvbXBvbmVudHM6IFNldDxzdHJpbmc+O1xuXHRkeW5hbWljQ29tcG9uZW50czogU2V0PHN0cmluZz47XG59XG5cbnR5cGUgQXN0Tm9kZSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vLyDilIDilIAgQVNUIHdhbGtlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZnVuY3Rpb24gd2Fsa0FTVChub2RlOiB1bmtub3duLCB2aXNpdG9yOiAobm9kZTogQXN0Tm9kZSkgPT4gdm9pZCkge1xuXHRpZiAoIWlzUmVjb3JkKG5vZGUpKSByZXR1cm47XG5cdHZpc2l0b3Iobm9kZSk7XG5cdGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG5vZGUpKSB7XG5cdFx0aWYgKGtleSA9PT0gXCJzcGFuXCIpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IHZhbCA9IG5vZGVba2V5XTtcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsKSB3YWxrQVNUKGl0ZW0sIHZpc2l0b3IpO1xuXHRcdH0gZWxzZSBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdHdhbGtBU1QodmFsLCB2aXNpdG9yKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24ga2ViYWJUb1Bhc2NhbChzOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gc1xuXHRcdC5zcGxpdChcIi1cIilcblx0XHQuZmlsdGVyKEJvb2xlYW4pXG5cdFx0Lm1hcCgocCkgPT4gcC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHAuc2xpY2UoMSkpXG5cdFx0LmpvaW4oXCJcIik7XG59XG5cbmZ1bmN0aW9uIGNvbXBvbmVudEZyb21EZWVwSW1wb3J0KHNvdXJjZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG5cdGNvbnN0IG1hdGNoID0gc291cmNlLm1hdGNoKC9eQHBhdGhzY2FsZVxcL3VpXFwvY29tcG9uZW50c1xcLyhbXi9dKykvKTtcblx0aWYgKCFtYXRjaCkgcmV0dXJuIG51bGw7XG5cdHJldHVybiBrZWJhYlRvUGFzY2FsKG1hdGNoWzFdKTtcbn1cblxuZnVuY3Rpb24gaXNVaUltcG9ydChzb3VyY2U6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHNvdXJjZSBpcyBzdHJpbmcge1xuXHRyZXR1cm4gQm9vbGVhbihzb3VyY2U/LnN0YXJ0c1dpdGgoXCJAcGF0aHNjYWxlL3VpXCIpKTtcbn1cblxuZnVuY3Rpb24gaXNSZWNvcmQodjogdW5rbm93bik6IHYgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuXHRyZXR1cm4gdiAhPT0gbnVsbCAmJiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2KTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RyaW5nKHZhbHVlOiB1bmtub3duLCBrZXk6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmICghaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkO1xuXHRjb25zdCBwcm9wID0gdmFsdWVba2V5XTtcblx0cmV0dXJuIHR5cGVvZiBwcm9wID09PSBcInN0cmluZ1wiID8gcHJvcCA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0Qm9vbGVhbih2YWx1ZTogdW5rbm93biwga2V5OiBzdHJpbmcpOiBib29sZWFuIHtcblx0aWYgKCFpc1JlY29yZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHZhbHVlW2tleV0gPT09IHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldFBhdGhTdHJpbmcodmFsdWU6IHVua25vd24sIC4uLmtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IGN1cnJlbnQgPSB2YWx1ZTtcblx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdGlmICghaXNSZWNvcmQoY3VycmVudCkpIHJldHVybiB1bmRlZmluZWQ7XG5cdFx0Y3VycmVudCA9IGN1cnJlbnRba2V5XTtcblx0fVxuXHRyZXR1cm4gdHlwZW9mIGN1cnJlbnQgPT09IFwic3RyaW5nXCIgPyBjdXJyZW50IDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRBcnJheSh2YWx1ZTogdW5rbm93biwga2V5OiBzdHJpbmcpOiB1bmtub3duW10ge1xuXHRpZiAoIWlzUmVjb3JkKHZhbHVlKSkgcmV0dXJuIFtdO1xuXHRjb25zdCBwcm9wID0gdmFsdWVba2V5XTtcblx0cmV0dXJuIEFycmF5LmlzQXJyYXkocHJvcCkgPyBwcm9wIDogW107XG59XG5cbmZ1bmN0aW9uIGpvaW5QYXRoKGJhc2U6IHN0cmluZywgcmVsOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gYCR7YmFzZS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpfS8ke3JlbC5yZXBsYWNlKC9eXFwvKy8sIFwiXCIpfWA7XG59XG5cbmZ1bmN0aW9uIGNhbm9uaWNhbEltcG9ydGVkTmFtZShzcGVjOiB1bmtub3duLCBzb3VyY2U6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuXHRjb25zdCBpbXBvcnRlZE5hbWUgPVxuXHRcdGdldFBhdGhTdHJpbmcoc3BlYywgXCJpbXBvcnRlZFwiLCBcInZhbHVlXCIpID8/XG5cdFx0Z2V0UGF0aFN0cmluZyhzcGVjLCBcImxvY2FsXCIsIFwidmFsdWVcIikgPz9cblx0XHRudWxsO1xuXG5cdGNvbnN0IGRlZXAgPSAoYzogc3RyaW5nLCB0Pzogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XG5cdFx0aWYgKHQgIT09IFwiSW1wb3J0U3BlY2lmaWVyXCIpIHJldHVybiBjO1xuXHRcdGlmICghaW1wb3J0ZWROYW1lKSByZXR1cm4gbnVsbDtcblx0XHRpZiAoaW1wb3J0ZWROYW1lID09PSBjKSByZXR1cm4gYztcblx0XHRyZXR1cm4gYCR7Y30uJHtpbXBvcnRlZE5hbWV9YDtcblx0fTtcblxuXHRjb25zdCB0eXBlID0gZ2V0U3RyaW5nKHNwZWMsIFwidHlwZVwiKTtcblx0aWYgKGdldEJvb2xlYW4oc3BlYywgXCJpc1R5cGVPbmx5XCIpKSByZXR1cm4gbnVsbDtcblx0Y29uc3QgZGVlcENvbXBvbmVudCA9IGNvbXBvbmVudEZyb21EZWVwSW1wb3J0KHNvdXJjZSk7XG5cdGlmIChkZWVwQ29tcG9uZW50KSByZXR1cm4gZGVlcChkZWVwQ29tcG9uZW50LCB0eXBlKTtcblxuXHRpZiAoc291cmNlID09PSBcIkBwYXRoc2NhbGUvdWlcIiAmJiB0eXBlID09PSBcIkltcG9ydFNwZWNpZmllclwiKVxuXHRcdHJldHVybiBpbXBvcnRlZE5hbWU7XG5cblx0cmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGNvbnNlcnZhdGl2ZVVzYWdlKGNvbXBvbmVudDogc3RyaW5nLCBzb3VyY2U6IHN0cmluZyk6IFByb3BVc2FnZSB7XG5cdHJldHVybiB7XG5cdFx0Y29tcG9uZW50LFxuXHRcdHByb3BzOiBuZXcgTWFwKCksXG5cdFx0Ym9vbGVhblByb3BzOiBuZXcgU2V0KCksXG5cdFx0aGFzU3ByZWFkOiB0cnVlLFxuXHRcdHNvdXJjZSxcblx0fTtcbn1cblxuLyoqIEV4dHJhY3QgQHBhdGhzY2FsZS91aSBiaW5kaW5ncyBmcm9tIGEgcGFyc2VkIG1vZHVsZS4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RVSUJpbmRpbmdzKGFzdDogdW5rbm93bik6IEltcG9ydEJpbmRpbmdzIHtcblx0Y29uc3QgYmluZGluZ3M6IEltcG9ydEJpbmRpbmdzID0ge1xuXHRcdGNvbXBvbmVudHM6IG5ldyBNYXAoKSxcblx0XHRuYW1lc3BhY2VzOiBuZXcgTWFwKCksXG5cdFx0Y29uc2VydmF0aXZlVXNhZ2VzOiBbXSxcblx0fTtcblxuXHRmb3IgKGNvbnN0IG5vZGUgb2YgZ2V0QXJyYXkoYXN0LCBcImJvZHlcIikpIHtcblx0XHRjb25zdCBub2RlVHlwZSA9IGdldFN0cmluZyhub2RlLCBcInR5cGVcIik7XG5cdFx0aWYgKG5vZGVUeXBlID09PSBcIkltcG9ydERlY2xhcmF0aW9uXCIpIHtcblx0XHRcdGNvbnN0IHNvdXJjZSA9IGdldFBhdGhTdHJpbmcobm9kZSwgXCJzb3VyY2VcIiwgXCJ2YWx1ZVwiKTtcblx0XHRcdGlmICghaXNVaUltcG9ydChzb3VyY2UpKSBjb250aW51ZTtcblxuXHRcdFx0Zm9yIChjb25zdCBzcGVjIG9mIGdldEFycmF5KG5vZGUsIFwic3BlY2lmaWVyc1wiKSkge1xuXHRcdFx0XHRjb25zdCBzcGVjVHlwZSA9IGdldFN0cmluZyhzcGVjLCBcInR5cGVcIik7XG5cdFx0XHRcdGlmIChzcGVjVHlwZSA9PT0gXCJJbXBvcnRTcGVjaWZpZXJcIikge1xuXHRcdFx0XHRcdGNvbnN0IGxvY2FsID0gZ2V0UGF0aFN0cmluZyhzcGVjLCBcImxvY2FsXCIsIFwidmFsdWVcIik7XG5cdFx0XHRcdFx0Y29uc3QgY2Fub25pY2FsID0gY2Fub25pY2FsSW1wb3J0ZWROYW1lKHNwZWMsIHNvdXJjZSk7XG5cdFx0XHRcdFx0aWYgKGxvY2FsICYmIGNhbm9uaWNhbCkgYmluZGluZ3MuY29tcG9uZW50cy5zZXQobG9jYWwsIGNhbm9uaWNhbCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoc3BlY1R5cGUgPT09IFwiSW1wb3J0RGVmYXVsdFNwZWNpZmllclwiKSB7XG5cdFx0XHRcdFx0Y29uc3QgbG9jYWwgPSBnZXRQYXRoU3RyaW5nKHNwZWMsIFwibG9jYWxcIiwgXCJ2YWx1ZVwiKTtcblx0XHRcdFx0XHRjb25zdCBjYW5vbmljYWwgPSBjb21wb25lbnRGcm9tRGVlcEltcG9ydChzb3VyY2UpID8/IGxvY2FsO1xuXHRcdFx0XHRcdGlmIChsb2NhbCAmJiBjYW5vbmljYWwpIGJpbmRpbmdzLmNvbXBvbmVudHMuc2V0KGxvY2FsLCBjYW5vbmljYWwpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHNwZWNUeXBlID09PSBcIkltcG9ydE5hbWVzcGFjZVNwZWNpZmllclwiKSB7XG5cdFx0XHRcdFx0Y29uc3QgbG9jYWwgPSBnZXRQYXRoU3RyaW5nKHNwZWMsIFwibG9jYWxcIiwgXCJ2YWx1ZVwiKTtcblx0XHRcdFx0XHRpZiAobG9jYWwpXG5cdFx0XHRcdFx0XHRiaW5kaW5ncy5uYW1lc3BhY2VzLnNldChsb2NhbCwgY29tcG9uZW50RnJvbURlZXBJbXBvcnQoc291cmNlKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRub2RlVHlwZSA9PT0gXCJFeHBvcnROYW1lZERlY2xhcmF0aW9uXCIgJiZcblx0XHRcdGlzVWlJbXBvcnQoZ2V0UGF0aFN0cmluZyhub2RlLCBcInNvdXJjZVwiLCBcInZhbHVlXCIpKVxuXHRcdCkge1xuXHRcdFx0Y29uc3Qgc291cmNlID0gZ2V0UGF0aFN0cmluZyhub2RlLCBcInNvdXJjZVwiLCBcInZhbHVlXCIpO1xuXHRcdFx0aWYgKCFzb3VyY2UpIGNvbnRpbnVlO1xuXHRcdFx0Y29uc3QgZGVlcENvbXBvbmVudCA9IGNvbXBvbmVudEZyb21EZWVwSW1wb3J0KHNvdXJjZSk7XG5cdFx0XHRmb3IgKGNvbnN0IHNwZWMgb2YgZ2V0QXJyYXkobm9kZSwgXCJzcGVjaWZpZXJzXCIpKSB7XG5cdFx0XHRcdGNvbnN0IGV4cG9ydGVkID1cblx0XHRcdFx0XHRnZXRQYXRoU3RyaW5nKHNwZWMsIFwib3JpZ1wiLCBcInZhbHVlXCIpID8/XG5cdFx0XHRcdFx0Z2V0UGF0aFN0cmluZyhzcGVjLCBcImxvY2FsXCIsIFwidmFsdWVcIikgPz9cblx0XHRcdFx0XHRnZXRQYXRoU3RyaW5nKHNwZWMsIFwiZXhwb3J0ZWRcIiwgXCJ2YWx1ZVwiKSA/P1xuXHRcdFx0XHRcdGRlZXBDb21wb25lbnQ7XG5cdFx0XHRcdGNvbnN0IGNhbm9uaWNhbCA9IGRlZXBDb21wb25lbnQgPz8gZXhwb3J0ZWQ7XG5cdFx0XHRcdGlmIChjYW5vbmljYWwpXG5cdFx0XHRcdFx0YmluZGluZ3MuY29uc2VydmF0aXZlVXNhZ2VzLnB1c2goXG5cdFx0XHRcdFx0XHRjb25zZXJ2YXRpdmVVc2FnZShjYW5vbmljYWwsIHNvdXJjZSksXG5cdFx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRub2RlVHlwZSA9PT0gXCJFeHBvcnRBbGxEZWNsYXJhdGlvblwiICYmXG5cdFx0XHRpc1VpSW1wb3J0KGdldFBhdGhTdHJpbmcobm9kZSwgXCJzb3VyY2VcIiwgXCJ2YWx1ZVwiKSlcblx0XHQpIHtcblx0XHRcdGNvbnN0IHNvdXJjZSA9IGdldFBhdGhTdHJpbmcobm9kZSwgXCJzb3VyY2VcIiwgXCJ2YWx1ZVwiKTtcblx0XHRcdGlmICghc291cmNlKSBjb250aW51ZTtcblx0XHRcdGNvbnN0IGRlZXBDb21wb25lbnQgPSBjb21wb25lbnRGcm9tRGVlcEltcG9ydChzb3VyY2UpO1xuXHRcdFx0aWYgKGRlZXBDb21wb25lbnQpIHtcblx0XHRcdFx0YmluZGluZ3MuY29uc2VydmF0aXZlVXNhZ2VzLnB1c2goXG5cdFx0XHRcdFx0Y29uc2VydmF0aXZlVXNhZ2UoZGVlcENvbXBvbmVudCwgc291cmNlKSxcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYmluZGluZ3M7XG59XG5cbi8qKiBCYWNrLWNvbXBhdGlibGUgaW1wb3J0IGV4dHJhY3Rpb24gQVBJOiBsb2NhbCBiaW5kaW5nIC0+IGNhbm9uaWNhbCBjb21wb25lbnQuICovXG5mdW5jdGlvbiBleHRyYWN0VUlJbXBvcnRzKGFzdDogdW5rbm93bik6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuXHRyZXR1cm4gZXh0cmFjdFVJQmluZGluZ3MoYXN0KS5jb21wb25lbnRzO1xufVxuXG5mdW5jdGlvbiBqc3hOYW1lUGFydHMobmFtZTogdW5rbm93bik6IHN0cmluZ1tdIHtcblx0aWYgKCFuYW1lKSByZXR1cm4gW107XG5cdGNvbnN0IHR5cGUgPSBnZXRTdHJpbmcobmFtZSwgXCJ0eXBlXCIpO1xuXHRjb25zdCB2YWx1ZSA9IGdldFN0cmluZyhuYW1lLCBcInZhbHVlXCIpO1xuXHRpZiAoKHR5cGUgPT09IFwiSWRlbnRpZmllclwiIHx8IHR5cGUgPT09IFwiSlNYSWRlbnRpZmllclwiKSAmJiB2YWx1ZSlcblx0XHRyZXR1cm4gW3ZhbHVlXTtcblx0aWYgKHR5cGUgPT09IFwiSlNYTWVtYmVyRXhwcmVzc2lvblwiKSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdC4uLmpzeE5hbWVQYXJ0cyhpc1JlY29yZChuYW1lKSA/IG5hbWUub2JqZWN0IDogdW5kZWZpbmVkKSxcblx0XHRcdC4uLmpzeE5hbWVQYXJ0cyhpc1JlY29yZChuYW1lKSA/IG5hbWUucHJvcGVydHkgOiB1bmRlZmluZWQpLFxuXHRcdF07XG5cdH1cblx0cmV0dXJuIFtdO1xufVxuXG5mdW5jdGlvbiBjYW5vbmljYWxDb21wb25lbnRGcm9tSnN4KFxuXHRwYXJ0czogc3RyaW5nW10sXG5cdGJpbmRpbmdzOiBJbXBvcnRCaW5kaW5ncyxcbik6IHN0cmluZyB8IG51bGwge1xuXHRpZiAocGFydHMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblx0Y29uc3QgW3Jvb3QsIC4uLm1lbWJlcnNdID0gcGFydHM7XG5cblx0Y29uc3QgbmFtZXNwYWNlQ29tcG9uZW50ID0gYmluZGluZ3MubmFtZXNwYWNlcy5nZXQocm9vdCk7XG5cdGlmIChiaW5kaW5ncy5uYW1lc3BhY2VzLmhhcyhyb290KSkge1xuXHRcdGlmIChuYW1lc3BhY2VDb21wb25lbnQpIHtcblx0XHRcdHJldHVybiBbbmFtZXNwYWNlQ29tcG9uZW50LCAuLi5tZW1iZXJzXS5qb2luKFwiLlwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIG1lbWJlcnMuam9pbihcIi5cIikgfHwgbnVsbDtcblx0fVxuXG5cdGNvbnN0IHJvb3RDb21wb25lbnQgPSBiaW5kaW5ncy5jb21wb25lbnRzLmdldChyb290KTtcblx0aWYgKCFyb290Q29tcG9uZW50KSByZXR1cm4gbnVsbDtcblx0cmV0dXJuIFtyb290Q29tcG9uZW50LCAuLi5tZW1iZXJzXS5qb2luKFwiLlwiKTtcbn1cblxuLyoqIEV4dHJhY3QgSlNYIHVzYWdlcyBvZiBVSSBjb21wb25lbnRzLiAqL1xuZnVuY3Rpb24gZXh0cmFjdEpTWFVzYWdlcyhcblx0YXN0OiB1bmtub3duLFxuXHR1aUNvbXBvbmVudHM6IE1hcDxzdHJpbmcsIHN0cmluZz4sXG4pOiBQcm9wVXNhZ2VbXSB7XG5cdGNvbnN0IGJpbmRpbmdzOiBJbXBvcnRCaW5kaW5ncyA9IHtcblx0XHRjb21wb25lbnRzOiB1aUNvbXBvbmVudHMsXG5cdFx0bmFtZXNwYWNlczogZXh0cmFjdFVJQmluZGluZ3MoYXN0KS5uYW1lc3BhY2VzLFxuXHRcdGNvbnNlcnZhdGl2ZVVzYWdlczogW10sXG5cdH07XG5cdGNvbnN0IHVzYWdlczogUHJvcFVzYWdlW10gPSBbXTtcblxuXHR3YWxrQVNUKGFzdCwgKG5vZGUpID0+IHtcblx0XHRpZiAoZ2V0U3RyaW5nKG5vZGUsIFwidHlwZVwiKSAhPT0gXCJKU1hPcGVuaW5nRWxlbWVudFwiKSByZXR1cm47XG5cblx0XHRjb25zdCBjb21wb25lbnQgPSBjYW5vbmljYWxDb21wb25lbnRGcm9tSnN4KFxuXHRcdFx0anN4TmFtZVBhcnRzKG5vZGUubmFtZSksXG5cdFx0XHRiaW5kaW5ncyxcblx0XHQpO1xuXHRcdGlmICghY29tcG9uZW50KSByZXR1cm47XG5cblx0XHRjb25zdCB1c2FnZTogUHJvcFVzYWdlID0ge1xuXHRcdFx0Y29tcG9uZW50LFxuXHRcdFx0cHJvcHM6IG5ldyBNYXAoKSxcblx0XHRcdGJvb2xlYW5Qcm9wczogbmV3IFNldCgpLFxuXHRcdFx0aGFzU3ByZWFkOiBmYWxzZSxcblx0XHR9O1xuXG5cdFx0Zm9yIChjb25zdCBhdHRyIG9mIGdldEFycmF5KG5vZGUsIFwiYXR0cmlidXRlc1wiKSkge1xuXHRcdFx0Y29uc3QgYXR0clR5cGUgPSBnZXRTdHJpbmcoYXR0ciwgXCJ0eXBlXCIpO1xuXHRcdFx0aWYgKGF0dHJUeXBlID09PSBcIlNwcmVhZEVsZW1lbnRcIiB8fCBhdHRyVHlwZSA9PT0gXCJKU1hTcHJlYWRBdHRyaWJ1dGVcIikge1xuXHRcdFx0XHR1c2FnZS5oYXNTcHJlYWQgPSB0cnVlO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGlmIChhdHRyVHlwZSAhPT0gXCJKU1hBdHRyaWJ1dGVcIikgY29udGludWU7XG5cblx0XHRcdGNvbnN0IHByb3BOYW1lID0gZ2V0UGF0aFN0cmluZyhhdHRyLCBcIm5hbWVcIiwgXCJ2YWx1ZVwiKTtcblx0XHRcdGlmICghcHJvcE5hbWUpIGNvbnRpbnVlO1xuXG5cdFx0XHRjb25zdCBhdHRyVmFsdWUgPSBpc1JlY29yZChhdHRyKSA/IGF0dHIudmFsdWUgOiB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCBhdHRyVmFsdWVUeXBlID0gZ2V0U3RyaW5nKGF0dHJWYWx1ZSwgXCJ0eXBlXCIpO1xuXHRcdFx0aWYgKCFhdHRyVmFsdWUpIHtcblx0XHRcdFx0dXNhZ2UuYm9vbGVhblByb3BzLmFkZChwcm9wTmFtZSk7XG5cdFx0XHR9IGVsc2UgaWYgKGF0dHJWYWx1ZVR5cGUgPT09IFwiU3RyaW5nTGl0ZXJhbFwiKSB7XG5cdFx0XHRcdHVzYWdlLnByb3BzLnNldChwcm9wTmFtZSwgZ2V0U3RyaW5nKGF0dHJWYWx1ZSwgXCJ2YWx1ZVwiKSA/PyBcIlwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHVzYWdlLnByb3BzLnNldChwcm9wTmFtZSwgXCJEWU5BTUlDXCIpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHVzYWdlcy5wdXNoKHVzYWdlKTtcblx0fSk7XG5cblx0cmV0dXJuIHVzYWdlcztcbn1cblxuLy8g4pSA4pSAIE1hbmlmZXN0IGNvbXBhdGliaWxpdHkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIG1hbmlmZXN0Q29tcG9uZW50cyhcblx0bWFuaWZlc3Q6IFB1cmdlTWFuaWZlc3QsXG4pOiBSZWNvcmQ8c3RyaW5nLCBMZWdhY3lDb21wb25lbnRNYW5pZmVzdD4ge1xuXHRpZiAoaXNQdXJnZURhdGFiYXNlVjIobWFuaWZlc3QpKSB7XG5cdFx0cmV0dXJuIG1hbmlmZXN0LmNvbXBvbmVudHM7XG5cdH1cblx0cmV0dXJuIG1hbmlmZXN0IGFzIFJlY29yZDxzdHJpbmcsIExlZ2FjeUNvbXBvbmVudE1hbmlmZXN0Pjtcbn1cblxuZnVuY3Rpb24gaXNQdXJnZURhdGFiYXNlVjIoXG5cdG1hbmlmZXN0OiBQdXJnZU1hbmlmZXN0LFxuKTogbWFuaWZlc3QgaXMgUHVyZ2VEYXRhYmFzZVYyIHtcblx0cmV0dXJuIChcblx0XHQobWFuaWZlc3QgYXMgUHVyZ2VEYXRhYmFzZVYyKS52ZXJzaW9uID09PSAyICYmXG5cdFx0aXNSZWNvcmQoKG1hbmlmZXN0IGFzIFB1cmdlRGF0YWJhc2VWMikuY29tcG9uZW50cylcblx0KTtcbn1cblxuLy8g4pSA4pSAIFNhZmVsaXN0IGJ1aWxkZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIGJ1aWxkU2FmZWxpc3RzKFxuXHRhbGxVc2FnZXM6IFByb3BVc2FnZVtdLFxuXHRtYW5pZmVzdDogUHVyZ2VNYW5pZmVzdCxcbik6IFNhZmVsaXN0cyB7XG5cdGNvbnN0IGNsYXNzU2FmZWxpc3QgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0Y29uc3QgYXR0clNhZmVsaXN0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdGNvbnN0IHVzZWRDb21wb25lbnRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdGNvbnN0IGR5bmFtaWNDb21wb25lbnRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdGNvbnN0IGNvbXBvbmVudFVzYWdlcyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9wVXNhZ2VbXT4oKTtcblx0Y29uc3QgY29tcG9uZW50cyA9IG1hbmlmZXN0Q29tcG9uZW50cyhtYW5pZmVzdCk7XG5cblx0Zm9yIChjb25zdCB1c2FnZSBvZiBleHBhbmREZXBlbmRlbmN5VXNhZ2VzKGFsbFVzYWdlcywgY29tcG9uZW50cykpIHtcblx0XHRjb25zdCBleGlzdGluZyA9IGNvbXBvbmVudFVzYWdlcy5nZXQodXNhZ2UuY29tcG9uZW50KSA/PyBbXTtcblx0XHRleGlzdGluZy5wdXNoKHVzYWdlKTtcblx0XHRjb21wb25lbnRVc2FnZXMuc2V0KHVzYWdlLmNvbXBvbmVudCwgZXhpc3RpbmcpO1xuXHRcdHVzZWRDb21wb25lbnRzLmFkZCh1c2FnZS5jb21wb25lbnQpO1xuXHRcdGlmICh1c2FnZS5oYXNTcHJlYWQgfHwgWy4uLnVzYWdlLnByb3BzLnZhbHVlcygpXS5pbmNsdWRlcyhcIkRZTkFNSUNcIikpIHtcblx0XHRcdGR5bmFtaWNDb21wb25lbnRzLmFkZCh1c2FnZS5jb21wb25lbnQpO1xuXHRcdH1cblx0fVxuXG5cdGZvciAoY29uc3QgW2VudHJ5TmFtZSwgZW50cnldIG9mIE9iamVjdC5lbnRyaWVzKGNvbXBvbmVudHMpKSB7XG5cdFx0Y29uc3QgbWF0Y2hpbmdVc2FnZXMgPSBmaW5kTWF0Y2hpbmdVc2FnZXMoZW50cnlOYW1lLCBjb21wb25lbnRVc2FnZXMpO1xuXHRcdGlmIChtYXRjaGluZ1VzYWdlcy5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuXG5cdFx0dXNlZENvbXBvbmVudHMuYWRkKGVudHJ5TmFtZSk7XG5cblx0XHRmb3IgKGNvbnN0IGNscyBvZiBlbnRyeS5jbGFzc2VzLmFsd2F5cykge1xuXHRcdFx0Y2xhc3NTYWZlbGlzdC5hZGQoY2xzKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFtwcm9wT3JTbG90LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZW50cnkuY2xhc3Nlcy5ieVByb3ApKSB7XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdFx0aWYgKGlzUHJvcFVzZWQocHJvcE9yU2xvdCwgbWF0Y2hpbmdVc2FnZXMpKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjbHMgb2YgdmFsdWUpIGNsYXNzU2FmZWxpc3QuYWRkKGNscyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHVzZWRWYWx1ZXMgPSBnZXRVc2VkRW51bVZhbHVlcyhwcm9wT3JTbG90LCBtYXRjaGluZ1VzYWdlcyk7XG5cdFx0XHRcdGlmICh1c2VkVmFsdWVzID09PSBcIkFMTFwiKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjbGFzc2VzIG9mIE9iamVjdC52YWx1ZXModmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGNscyBvZiBjbGFzc2VzKSBjbGFzc1NhZmVsaXN0LmFkZChjbHMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHZhbCBvZiB1c2VkVmFsdWVzKSB7XG5cdFx0XHRcdFx0XHRpZiAodmFsdWVbdmFsXSkge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGNscyBvZiB2YWx1ZVt2YWxdKSBjbGFzc1NhZmVsaXN0LmFkZChjbHMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChlbnRyeS5hdHRycykge1xuXHRcdFx0Zm9yIChjb25zdCBbcHJvcE5hbWUsIGF0dHJNYXBdIG9mIE9iamVjdC5lbnRyaWVzKGVudHJ5LmF0dHJzKSkge1xuXHRcdFx0XHRpZiAoaXNQcm9wVXNlZChwcm9wTmFtZSwgbWF0Y2hpbmdVc2FnZXMpKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBbYXR0ciwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRyTWFwKSkge1xuXHRcdFx0XHRcdFx0YXR0clNhZmVsaXN0LmFkZChgWyR7YXR0cn09XCIke3ZhbH1cIl1gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyBjbGFzc1NhZmVsaXN0LCBhdHRyU2FmZWxpc3QsIHVzZWRDb21wb25lbnRzLCBkeW5hbWljQ29tcG9uZW50cyB9O1xufVxuXG5mdW5jdGlvbiBleHBhbmREZXBlbmRlbmN5VXNhZ2VzKFxuXHRhbGxVc2FnZXM6IFByb3BVc2FnZVtdLFxuXHRtYW5pZmVzdDogUmVjb3JkPHN0cmluZywgTGVnYWN5Q29tcG9uZW50TWFuaWZlc3Q+LFxuKTogUHJvcFVzYWdlW10ge1xuXHRjb25zdCByZXN1bHQgPSBbLi4uYWxsVXNhZ2VzXTtcblx0Y29uc3QgcXVldWUgPSBbLi4uYWxsVXNhZ2VzLm1hcCgodXNhZ2UpID0+IHJvb3RDb21wb25lbnQodXNhZ2UuY29tcG9uZW50KSldO1xuXHRjb25zdCBzZWVuID0gbmV3IFNldChxdWV1ZSk7XG5cblx0d2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCByb290ID0gcXVldWUucG9wKCk7XG5cdFx0aWYgKCFyb290KSBjb250aW51ZTtcblx0XHRjb25zdCBkZXBzID0gZGVwc0ZvclJvb3Qocm9vdCwgbWFuaWZlc3QpO1xuXHRcdGZvciAoY29uc3QgZGVwIG9mIGRlcHMpIHtcblx0XHRcdGlmIChzZWVuLmhhcyhkZXApKSBjb250aW51ZTtcblx0XHRcdHNlZW4uYWRkKGRlcCk7XG5cdFx0XHRxdWV1ZS5wdXNoKGRlcCk7XG5cdFx0XHRyZXN1bHQucHVzaChjb25zZXJ2YXRpdmVVc2FnZShkZXAsIFwibWFuaWZlc3QtZGVwZW5kZW5jeVwiKSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZGVwc0ZvclJvb3QoXG5cdHJvb3Q6IHN0cmluZyxcblx0bWFuaWZlc3Q6IFJlY29yZDxzdHJpbmcsIExlZ2FjeUNvbXBvbmVudE1hbmlmZXN0Pixcbik6IHN0cmluZ1tdIHtcblx0Y29uc3QgZGVwcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRmb3IgKGNvbnN0IFtrZXksIGVudHJ5XSBvZiBPYmplY3QuZW50cmllcyhtYW5pZmVzdCkpIHtcblx0XHRpZiAocm9vdENvbXBvbmVudChrZXkpICE9PSByb290KSBjb250aW51ZTtcblx0XHRmb3IgKGNvbnN0IGRlcCBvZiBlbnRyeS5kZXBzID8/IFtdKSBkZXBzLmFkZChkZXApO1xuXHR9XG5cdHJldHVybiBbLi4uZGVwc107XG59XG5cbmZ1bmN0aW9uIHJvb3RDb21wb25lbnQoY29tcG9uZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gY29tcG9uZW50LnNwbGl0KFwiLlwiKVswXTtcbn1cblxuZnVuY3Rpb24gZmluZE1hdGNoaW5nVXNhZ2VzKFxuXHRlbnRyeU5hbWU6IHN0cmluZyxcblx0dXNhZ2VNYXA6IE1hcDxzdHJpbmcsIFByb3BVc2FnZVtdPixcbik6IFByb3BVc2FnZVtdIHtcblx0Y29uc3QgZGlyZWN0ID0gdXNhZ2VNYXAuZ2V0KGVudHJ5TmFtZSkgPz8gW107XG5cdGNvbnN0IHJlc3VsdHMgPSBbLi4uZGlyZWN0XTtcblx0Y29uc3QgZW50cnlSb290ID0gcm9vdENvbXBvbmVudChlbnRyeU5hbWUpO1xuXG5cdGZvciAoY29uc3QgW3VzYWdlTmFtZSwgdXNhZ2VzXSBvZiB1c2FnZU1hcCkge1xuXHRcdGlmICh1c2FnZU5hbWUgPT09IGVudHJ5TmFtZSkgY29udGludWU7XG5cdFx0aWYgKGVudHJ5TmFtZS5pbmNsdWRlcyhcIi5cIikgJiYgdXNhZ2VOYW1lID09PSBlbnRyeVJvb3QpIHtcblx0XHRcdHJlc3VsdHMucHVzaCguLi51c2FnZXMpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBpc1Byb3BVc2VkKHByb3BOYW1lOiBzdHJpbmcsIHVzYWdlczogUHJvcFVzYWdlW10pOiBib29sZWFuIHtcblx0Zm9yIChjb25zdCB1c2FnZSBvZiB1c2FnZXMpIHtcblx0XHRpZiAodXNhZ2UuaGFzU3ByZWFkKSByZXR1cm4gdHJ1ZTtcblx0XHRpZiAodXNhZ2UuYm9vbGVhblByb3BzLmhhcyhwcm9wTmFtZSkpIHJldHVybiB0cnVlO1xuXHRcdGlmICh1c2FnZS5wcm9wcy5oYXMocHJvcE5hbWUpKSByZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldFVzZWRFbnVtVmFsdWVzKFxuXHRzbG90TmFtZTogc3RyaW5nLFxuXHR1c2FnZXM6IFByb3BVc2FnZVtdLFxuKTogU2V0PHN0cmluZz4gfCBcIkFMTFwiIHtcblx0Y29uc3QgdmFsdWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdGZvciAoY29uc3QgdXNhZ2Ugb2YgdXNhZ2VzKSB7XG5cdFx0aWYgKHVzYWdlLmhhc1NwcmVhZCkgcmV0dXJuIFwiQUxMXCI7XG5cdFx0Y29uc3QgdmFsID0gdXNhZ2UucHJvcHMuZ2V0KHNsb3ROYW1lKTtcblx0XHRpZiAodmFsID09PSBcIkRZTkFNSUNcIikgcmV0dXJuIFwiQUxMXCI7XG5cdFx0aWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB2YWx1ZXMuYWRkKHZhbCk7XG5cdFx0aWYgKHVzYWdlLmJvb2xlYW5Qcm9wcy5oYXMoc2xvdE5hbWUpKSByZXR1cm4gXCJBTExcIjtcblx0fVxuXHRyZXR1cm4gdmFsdWVzO1xufVxuXG4vLyDilIDilIAgQ29uc3VtZXIgc291cmNlIHNjYW5uaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5hc3luYyBmdW5jdGlvbiBzY2FuQ29uc3VtZXJTb3VyY2Uoc3JjRGlyOiBzdHJpbmcpOiBQcm9taXNlPFByb3BVc2FnZVtdPiB7XG5cdGNvbnN0IGFsbFVzYWdlczogUHJvcFVzYWdlW10gPSBbXTtcblx0Y29uc3QgZ2xvYiA9IG5ldyBHbG9iKFwiKiovKi57dHN4LHRzLGpzeCxqc31cIik7XG5cblx0Zm9yIGF3YWl0IChjb25zdCByZWxQYXRoIG9mIGdsb2Iuc2Nhbih7IGN3ZDogc3JjRGlyIH0pKSB7XG5cdFx0aWYgKHJlbFBhdGguaW5jbHVkZXMoXCJub2RlX21vZHVsZXNcIikpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IGZ1bGxQYXRoID0gam9pblBhdGgoc3JjRGlyLCByZWxQYXRoKTtcblx0XHRjb25zdCBjb2RlID0gYXdhaXQgQnVuLmZpbGUoZnVsbFBhdGgpLnRleHQoKTtcblx0XHRpZiAoIWNvZGUuaW5jbHVkZXMoXCJAcGF0aHNjYWxlL3VpXCIpKSBjb250aW51ZTtcblxuXHRcdGNvbnN0IGlzVHN4ID0gL1xcLlt0al1zeCQvLnRlc3QocmVsUGF0aCk7XG5cdFx0Y29uc3QgYXN0ID0gYXdhaXQgc3djLnBhcnNlKGNvZGUsIHsgc3ludGF4OiBcInR5cGVzY3JpcHRcIiwgdHN4OiBpc1RzeCB9KTtcblx0XHRjb25zdCBiaW5kaW5ncyA9IGV4dHJhY3RVSUJpbmRpbmdzKGFzdCk7XG5cdFx0aWYgKFxuXHRcdFx0YmluZGluZ3MuY29tcG9uZW50cy5zaXplID09PSAwICYmXG5cdFx0XHRiaW5kaW5ncy5uYW1lc3BhY2VzLnNpemUgPT09IDAgJiZcblx0XHRcdGJpbmRpbmdzLmNvbnNlcnZhdGl2ZVVzYWdlcy5sZW5ndGggPT09IDBcblx0XHQpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGFsbFVzYWdlcy5wdXNoKC4uLmJpbmRpbmdzLmNvbnNlcnZhdGl2ZVVzYWdlcyk7XG5cdFx0Y29uc3QganN4VXNhZ2VzID0gZXh0cmFjdEpTWFVzYWdlcyhhc3QsIGJpbmRpbmdzLmNvbXBvbmVudHMpO1xuXHRcdGFsbFVzYWdlcy5wdXNoKC4uLmpzeFVzYWdlcyk7XG5cdFx0Zm9yIChjb25zdCBjb21wb25lbnQgb2YgYmluZGluZ3MuY29tcG9uZW50cy52YWx1ZXMoKSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRqc3hVc2FnZXMuc29tZShcblx0XHRcdFx0XHQodXNhZ2UpID0+XG5cdFx0XHRcdFx0XHR1c2FnZS5jb21wb25lbnQgPT09IGNvbXBvbmVudCB8fFxuXHRcdFx0XHRcdFx0dXNhZ2UuY29tcG9uZW50LnN0YXJ0c1dpdGgoYCR7Y29tcG9uZW50fS5gKSxcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0YWxsVXNhZ2VzLnB1c2goY29uc2VydmF0aXZlVXNhZ2UoY29tcG9uZW50LCBcImltcG9ydC13aXRob3V0LWRpcmVjdC1qc3hcIikpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBhbGxVc2FnZXM7XG59XG5cbi8vIOKUgOKUgCBNYWluIChzdGFuZGFsb25lIENMSSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG5cdGNvbnN0IFtzcmNEaXIsIG1hbmlmZXN0UGF0aF0gPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMik7XG5cdGlmICghc3JjRGlyIHx8ICFtYW5pZmVzdFBhdGgpIHtcblx0XHRjb25zb2xlLmVycm9yKFxuXHRcdFx0XCJVc2FnZTogYnVuIHJ1biBzcmMvc2Nhbi1jb25zdW1lci50cyA8Y29uc3VtZXItc3JjLWRpcj4gPHB1cmdlLW1hbmlmZXN0Lmpzb24+XCIsXG5cdFx0KTtcblx0XHRwcm9jZXNzLmV4aXQoMSk7XG5cdH1cblxuXHRjb25zdCBtYW5pZmVzdDogUHVyZ2VNYW5pZmVzdCA9IEpTT04ucGFyc2UoXG5cdFx0YXdhaXQgQnVuLmZpbGUobWFuaWZlc3RQYXRoKS50ZXh0KCksXG5cdCk7XG5cdGNvbnN0IHJlc29sdmVkU3JjID0gc3JjRGlyO1xuXHRjb25zdCBtYW5pZmVzdFNpemUgPSBPYmplY3Qua2V5cyhtYW5pZmVzdENvbXBvbmVudHMobWFuaWZlc3QpKS5sZW5ndGg7XG5cdGNvbnNvbGUubG9nKGBTY2FubmluZyAke3Jlc29sdmVkU3JjfSBmb3IgQHBhdGhzY2FsZS91aSBjb21wb25lbnQgdXNhZ2UuLi5gKTtcblx0Y29uc29sZS5sb2coYE1hbmlmZXN0OiAke21hbmlmZXN0U2l6ZX0gZW50cmllc1xcbmApO1xuXG5cdGNvbnN0IHVzYWdlcyA9IGF3YWl0IHNjYW5Db25zdW1lclNvdXJjZShyZXNvbHZlZFNyYyk7XG5cdGNvbnN0IHsgY2xhc3NTYWZlbGlzdCwgYXR0clNhZmVsaXN0LCB1c2VkQ29tcG9uZW50cyB9ID0gYnVpbGRTYWZlbGlzdHMoXG5cdFx0dXNhZ2VzLFxuXHRcdG1hbmlmZXN0LFxuXHQpO1xuXG5cdGNvbnNvbGUubG9nKFwiPT09IENvbXBvbmVudHMgRGV0ZWN0ZWQgPT09XCIpO1xuXHRmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBbLi4udXNlZENvbXBvbmVudHNdLnNvcnQoKSkge1xuXHRcdGNvbnNvbGUubG9nKGAgICR7Y29tcG9uZW50fWApO1xuXHR9XG5cblx0Y29uc29sZS5sb2coXCJcXG49PT0gQ2xhc3MgU2FmZWxpc3QgPT09XCIpO1xuXHRmb3IgKGNvbnN0IGNscyBvZiBbLi4uY2xhc3NTYWZlbGlzdF0uc29ydCgpKSB7XG5cdFx0Y29uc29sZS5sb2coYCAgJHtjbHN9YCk7XG5cdH1cblxuXHRjb25zb2xlLmxvZyhcIlxcbj09PSBBdHRyaWJ1dGUgU2FmZWxpc3QgPT09XCIpO1xuXHRmb3IgKGNvbnN0IGF0dHIgb2YgWy4uLmF0dHJTYWZlbGlzdF0uc29ydCgpKSB7XG5cdFx0Y29uc29sZS5sb2coYCAgJHthdHRyfWApO1xuXHR9XG5cblx0Y29uc29sZS5sb2coXG5cdFx0YFxcblRvdGFsOiAke3VzZWRDb21wb25lbnRzLnNpemV9IGNvbXBvbmVudHMsICR7Y2xhc3NTYWZlbGlzdC5zaXplfSBjbGFzc2VzLCAke2F0dHJTYWZlbGlzdC5zaXplfSBhdHRyaWJ1dGUgc2VsZWN0b3JzYCxcblx0KTtcbn1cblxuaWYgKGltcG9ydC5tZXRhLm1haW4pIHtcblx0bWFpbigpO1xufVxuXG5leHBvcnQgdHlwZSB7XG5cdENvbXBvbmVudFB1cmdlUmVjb3JkLFxuXHRMZWdhY3lDb21wb25lbnRNYW5pZmVzdCBhcyBDb21wb25lbnRNYW5pZmVzdCxcblx0TGVnYWN5Q29tcG9uZW50TWFuaWZlc3QsXG5cdFByb3BVc2FnZSxcblx0UHVyZ2VEYXRhYmFzZVYyLFxuXHRQdXJnZU1hbmlmZXN0LFxuXHRTYWZlbGlzdHMsXG59O1xuZXhwb3J0IHtcblx0YnVpbGRTYWZlbGlzdHMsXG5cdGV4dHJhY3RKU1hVc2FnZXMsXG5cdGV4dHJhY3RVSUltcG9ydHMsXG5cdHNjYW5Db25zdW1lclNvdXJjZSxcbn07XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBS0EsSUFBTSxVQUFVLE1BQU0sUUFBUSxhQUFhO0FBQUEsRUFFM0MsSUFBSSxTQUFTO0FBQUEsRUFDYixJQUFNLFlBQVksTUFBTTtBQUFBLElBQ3RCLElBQUksQ0FBQyxRQUFRO0FBQUEsTUFFWCxJQUFJLFFBQVEsS0FBSyxRQUFRLFFBQVE7QUFBQSxRQUMvQixNQUFNLE9BQU8sUUFBUSxPQUFPO0FBQUEsUUFDNUIsUUFBUSxPQUFPLGlCQUFpQjtBQUFBLFFBQ2hDLFNBQVMsUUFBUSxPQUFPLFVBQVU7QUFBQSxRQUNsQyxRQUFRLE9BQU8saUJBQWlCO0FBQUEsTUFDbEMsRUFBTztBQUFBLFFBQ0wsU0FBUyxDQUFDO0FBQUE7QUFBQSxJQUVkO0FBQUEsSUFDQSxPQUFPO0FBQUE7QUFBQSxFQUdULE9BQU8sVUFBVSxFQUFFLFNBQVMsVUFBVTtBQUFBOzs7O0VDbEJ0QyxJQUFNO0FBQUEsRUFFTixJQUFNLFdBQVc7QUFBQSxFQUNqQixJQUFNLFlBQVk7QUFBQSxFQUNsQixJQUFNLGFBQWE7QUFBQSxFQVFuQixJQUFNLGVBQWUsQ0FBQyxTQUFTO0FBQUEsSUFDN0IsTUFBTSxLQUFLLEdBQUcsU0FBUyxNQUFNLEdBQUc7QUFBQSxJQUNoQyxNQUFNLFNBQVMsT0FBTyxNQUFNLFVBQVU7QUFBQSxJQUN0QyxNQUFNLFlBQVksR0FBRyxTQUFTLElBQUksUUFBUSxHQUFHLFlBQVksQ0FBQztBQUFBLElBQzFELEdBQUcsTUFBTSxJQUFJLE1BQU0sRUFBRTtBQUFBLElBQ3JCLE9BQU8sT0FBTyxTQUFT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SUFDdEQsUUFBUSxJQUNQLHdCQUF3QixpQkFBaUIsTUFBTSxRQUFRLENBQUMsU0FBUyxZQUFZLE1BQU0sUUFBUSxDQUFDLFNBQVMsS0FBSyxrQkFDM0c7QUFBQSxJQUVBLFlBQVksT0FBTyxTQUFTO0FBQUEsSUFDNUIsTUFBTSxZQUFZLE9BQU8sV0FBVyxXQUFXLE9BQU87QUFBQSxJQUN0RCxjQUFjO0FBQUEsSUFDZCxRQUFRLElBQUksNkJBQTZCLFlBQVksTUFBTSxRQUFRLENBQUMsTUFBTTtBQUFBLElBQzFFLFFBQVEsSUFDUCx5QkFBeUIsZUFBZSxNQUFNLFFBQVEsQ0FBQyxTQUFTLFlBQVksTUFBTSxRQUFRLENBQUMsV0FBVyxJQUFJLFlBQVksZ0JBQWdCLEtBQUssUUFBUSxDQUFDLGVBQ3JKO0FBQUEsSUFFQSxNQUFNLElBQUksTUFBTSxVQUFVLFNBQVM7QUFBQSxFQUNwQztBQUFBLEVBRUEsUUFBUSxJQUNQO0FBQUEsc0JBQXlCLGNBQWMsTUFBTSxRQUFRLENBQUMsU0FBUyxhQUFhLE1BQU0sUUFBUSxDQUFDLFdBQVcsSUFBSSxhQUFhLGVBQWUsS0FBSyxRQUFRLENBQUMsZUFDcko7QUFBQTtBQUdELElBQUksa0JBQWtCO0FBQUEsRUFDckIsS0FBSztBQUNOOyIsCiAgImRlYnVnSWQiOiAiMzBEMUFENTg3RTAzQ0Q1MjY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=