@tricoteuses/assemblee 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/lib/bugs/acteur-00010/plugin.test.js +1 -1
  2. package/lib/bugs/acteur-00010.js +9 -4
  3. package/lib/bugs/agenda-00002/plugin.test.js +1 -1
  4. package/lib/bugs/agenda-00002.js +13 -9
  5. package/lib/bugs/agenda-00002.mjs +4 -2
  6. package/lib/bugs/agenda-00008/plugin.test.js +1 -1
  7. package/lib/bugs/agenda-00008.js +9 -4
  8. package/lib/bugs/agenda-00011/plugin.test.js +1 -1
  9. package/lib/bugs/agenda-00011.js +14 -9
  10. package/lib/bugs/agenda-00011.mjs +4 -2
  11. package/lib/bugs.js +13 -8
  12. package/lib/bugs.mjs +4 -2
  13. package/lib/cleaners/xml.js +1 -1
  14. package/lib/datasets.js +1 -1
  15. package/lib/dossiers_legislatifs.d.ts +1 -1
  16. package/lib/file_systems.js +9 -4
  17. package/lib/file_systems.mjs +4 -2
  18. package/lib/parsers/documents.js +1 -1
  19. package/lib/parsers/recherche_amendements.js +2 -2
  20. package/lib/raw_types/acteurs_et_organes.d.ts +1 -1
  21. package/lib/raw_types/acteurs_et_organes.js +11 -6
  22. package/lib/raw_types/acteurs_et_organes.mjs +2 -2
  23. package/lib/raw_types/agendas.js +10 -5
  24. package/lib/raw_types/amendements.js +10 -5
  25. package/lib/raw_types/dossiers_legislatifs.js +10 -5
  26. package/lib/raw_types/scrutins.js +10 -5
  27. package/lib/scripts/bugs_helper.js +13 -9
  28. package/lib/scripts/bugs_helper.mjs +4 -2
  29. package/lib/scripts/clean_reorganized_data.js +1 -1
  30. package/lib/scripts/document_dossiers_legislatifs.js +9 -4
  31. package/lib/scripts/document_dossiers_legislatifs.mjs +4 -2
  32. package/lib/scripts/raw_types_from_amendements.js +1 -1
  33. package/lib/scripts/reorganize_data.js +1 -1
  34. package/lib/scripts/retrieve_deputes_photos.js +2 -2
  35. package/lib/scripts/retrieve_documents.js +14 -9
  36. package/lib/scripts/retrieve_documents.mjs +4 -2
  37. package/lib/scripts/retrieve_open_data.js +1 -1
  38. package/lib/scripts/retrieve_pending_amendments.js +2 -2
  39. package/lib/scripts/retrieve_senateurs_photos.js +2 -2
  40. package/lib/scripts/retrieve_textes_lois.js +8 -3
  41. package/lib/scripts/validate_json.js +13 -8
  42. package/lib/scripts/validate_json.mjs +4 -2
  43. package/lib/shared_types/codes_actes.d.ts +3 -1
  44. package/lib/shared_types/codes_actes.js +17 -5
  45. package/lib/shared_types/codes_actes.mjs +2 -1
  46. package/lib/types/acteurs_et_organes.d.ts +1 -1
  47. package/lib/types/acteurs_et_organes.js +10 -5
  48. package/lib/types/agendas.js +10 -5
  49. package/lib/types/amendements.js +10 -5
  50. package/lib/types/dossiers_legislatifs.js +10 -5
  51. package/lib/types/scrutins.js +10 -5
  52. package/package.json +4 -4
@@ -1,4 +1,6 @@
1
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
1
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
3
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
2
4
  import commandLineArgs from "command-line-args";
3
5
  import commandLineUsage from "command-line-usage";
4
6
  import assert from "assert";
@@ -407,4 +409,4 @@ function main(argv) {
407
409
 
408
410
  /* istanbul ignore if */
409
411
  if (process.argv[1].endsWith("document_dossiers_legislatifs.ts")) process.exit(main(process.argv));
410
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kTGluZUFyZ3MiLCJjb21tYW5kTGluZVVzYWdlIiwiYXNzZXJ0IiwibG9hZCIsImdldEZpbGVzIiwicGFyc2VBcmdzIiwiYXJndiIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImRlc2NyaXB0aW9uIiwiZGVmYXVsdE9wdGlvbiIsIm11bHRpcGxlIiwibmFtZSIsInR5cGUiLCJTdHJpbmciLCJCb29sZWFuIiwic2VjdGlvbnMiLCJoZWFkZXIiLCJjb250ZW50Iiwib3B0aW9uTGlzdCIsIm9wdGlvbnMiLCJjb25zb2xlIiwiZXJyb3IiLCJoZWxwIiwidXNhZ2UiLCJ3YXJuIiwiZXFTZXQiLCJhcyIsImJzIiwic2l6ZSIsImEiLCJoYXMiLCJDb2RlMlBhdHRlcm4iLCJjb25zdHJ1Y3RvciIsInBhdHRlcm4iLCJjaGlsZHJlbiIsIl9wYXR0ZXJuXyIsIl9tYXRjaF9jb3VudF8iLCJPYmplY3QiLCJhc3NpZ24iLCJDb2RlMlBhdHRlcm5Db21Gb25kIiwiTGVjdHVyZU1hcHBpbmciLCJTZXQiLCJpc0xlY3R1cmUiLCJhY3RlIiwiY29kZUFjdGUiLCJtYXRjaCIsImNvZGVzX2xlY3R1cmVfcmVnZXhwIiwiZ2V0VHlwZSIsIkVycm9yIiwibWFwIiwicmVwbGFjZSIsImdldENvZGVBY3RlIiwiYWRkIiwiY29kZXMiLCJsaWJlbGxlQWN0ZSIsIm5vbUNhbm9uaXF1ZSIsImxpYmVsbGUiLCJyZW1hcCIsInR5cGVzIiwibWVyZ2VDb2RlcyIsImMiLCJBcnJheSIsImZyb20iLCJwcmludEFuY2hvcnMiLCJjb2RlIiwibG9nIiwiZ2V0Q29kZXMiLCJqb2luIiwiUmVnRXhwIiwiY29kZXNfbGVjdHVyZSIsIkxlY3R1cmVNYXBwZXIiLCJtYXBwaW5nIiwiY29sbGVjdCIsInVuZGVmaW5lZCIsImxlY3R1cmVzIiwiQWN0ZXNEb2N1bWVudGF0aW9uIiwic2FuaXR5Q2hlY2tzIiwidmVyYm9zZSIsImxlY3R1cmUiLCJDTVAiLCJDQyIsIlBST00iLCJBTjIxIiwiQU5MVU5JIiwiUsOpc29sdXRpb24iLCJBTjIwIiwiRVUiLCJJbW11bml0w6kiLCJwcm9jZWR1cmVzIiwiY29kZTJwYXR0ZXJuIiwid2Fsa0ZpbGVzIiwiZGF0YSIsImFjdGlvbiIsImZpbGUiLCJkb3NzaWVyIiwicHJvY2VkdXJlIiwicmVtYXBQcm9jZWR1cmUiLCJwcm9jZWR1cmVQYXJsZW1lbnRhaXJlIiwiYWN0ZXNMZWdpc2xhdGlmcyIsImNvbGxlY3RGaWxlcyIsIl9hY3RlcyIsIl9jMnAiLCJfcGFyZW50IiwicHJvY2Vzc0ZpbGVzIiwiYWN0ZXMiLCJjMnAiLCJwYXJlbnQiLCJtZXJnZSIsInZhbGlkYXRlIiwicmVtYXBBY3RlcyIsInJlc3VsdHMiLCJsZWN0dXJlTWFwcGVyIiwicHVzaCIsImNvbGxlY3RBY3RlcyIsIm1lcmdlX3Byb2NlZHVyZXMiLCJNYXAiLCJyZW1hcHBlZFByb2NlZHVyZXMiLCJnZXQiLCJvcmRlcmVkQ29kZXMiLCJvcmRlcmVkIiwieCIsInZhbGlkYXRlQ2hyb25vbG9neSIsInNlcXVlbmNlIiwibWVyZ2VBY3RlIiwic2hvcnRDb2RlIiwieHNpVHlwZSIsImwiLCJ2YWxpZGF0ZUxldmVsIiwicGF0aCIsImtleSIsInZhbHVlIiwiZW50cmllcyIsImNvbmNhdCIsInByaW50RW50cnkiLCJlbnRyeSIsInRpdGxlIiwidW5kZXJsaW5lIiwibGVuZ3RoIiwiYWRkQW5jaG9ycyIsImFuY2hvcnNQcmludGVkIiwiYW5jaG9ycyIsInJlbmFtZUNNUCIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsInByaW50TGV2ZWwiLCJrZXlzIiwic3Vic3RyaW5nIiwicHJpbnRDb2RlcyIsInByaW50QW5jaG9yc0luZGV4IiwiZ2V0QWdncmVnYXRlZCIsInJlbWFwcGVkIiwicHJpbnQiLCJhZ2dyZWdhdGVkIiwibWFpbiIsImRvYyIsInByb2Nlc3MiLCJleGl0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvZG9jdW1lbnRfZG9zc2llcnNfbGVnaXNsYXRpZnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lVXNhZ2UgZnJvbSBcImNvbW1hbmQtbGluZS11c2FnZVwiXG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IHsgbG9hZCwgZ2V0RmlsZXMgfSBmcm9tIFwiLi4vZmlsZV9zeXN0ZW1zXCJcblxuZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ3Y6IHN0cmluZ1tdKTogYW55IHtcbiAgY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcInBhdGhuYW1lIHRvIGEgSlNPTiBmaWxlIG9yIGEgZ2xvYiBwYXR0ZXJuIHRvIEpTT04gZmlsZXNcIixcbiAgICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG5hbWU6IFwiZGF0YVwiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJuby1zYW5pdHktY2hlY2tzXCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVzY3JpcHRpb246IFwiRG8gbm90IHBlcmZvcm0gc2FuaXR5IGNoZWNrcy5cIixcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidmVyYm9zZVwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlc2NyaXB0aW9uOiBcImluY3JlYXNlIHZlcmJvc2l0eVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJoZWxwXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJQcmludCB0aGlzIHVzYWdlIGd1aWRlLlwiLFxuICAgIH0sXG4gIF1cbiAgY29uc3Qgc2VjdGlvbnMgPSBbXG4gICAge1xuICAgICAgaGVhZGVyOiBcIkFpZGUgw6AgbGEgZG9jdW1lbnRhdGlvbiBkdSBkb3NzaWVyIGzDqWdpc2xhdGlmXCIsXG4gICAgICBjb250ZW50OiBcIkfDqW7DqHJlIHVuZSBoacOpcmFyY2hpZSBkZXMgYWN0ZXMgbMOpZ2lzbGF0aWZzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBoZWFkZXI6IFwiT3B0aW9uc1wiLFxuICAgICAgb3B0aW9uTGlzdDogb3B0aW9uc0RlZmluaXRpb25zLFxuICAgIH0sXG4gIF1cbiAgY29uc3Qgb3B0aW9ucyA9IGNvbW1hbmRMaW5lQXJncyhvcHRpb25zRGVmaW5pdGlvbnMsIHtcbiAgICBhcmd2OiBhcmd2LFxuICB9KVxuICBpZiAoIShcImhlbHBcIiBpbiBvcHRpb25zKSAmJiAhKFwiZGF0YVwiIGluIG9wdGlvbnMpKSB7XG4gICAgY29uc29sZS5lcnJvcihcIi0tZGF0YSBpcyBtYW5kYXRvcnlcIilcbiAgICBvcHRpb25zLmhlbHAgPSB0cnVlXG4gIH1cbiAgaWYgKFwiaGVscFwiIGluIG9wdGlvbnMpIHtcbiAgICBjb25zdCB1c2FnZSA9IGNvbW1hbmRMaW5lVXNhZ2Uoc2VjdGlvbnMpXG4gICAgY29uc29sZS53YXJuKHVzYWdlKVxuICAgIHJldHVybiBudWxsXG4gIH1cbiAgcmV0dXJuIG9wdGlvbnNcbn1cblxuZnVuY3Rpb24gZXFTZXQoYXM6IFNldDxzdHJpbmc+LCBiczogU2V0PHN0cmluZz4pOiBib29sZWFuIHtcbiAgaWYgKGFzLnNpemUgIT09IGJzLnNpemUpIHJldHVybiBmYWxzZVxuICBmb3IgKHZhciBhIG9mIGFzKSBpZiAoIWJzLmhhcyhhKSkgcmV0dXJuIGZhbHNlXG4gIHJldHVybiB0cnVlXG59XG5cbmNsYXNzIENvZGUyUGF0dGVybiB7XG4gIF9wYXR0ZXJuXzogYW55XG4gIF9tYXRjaF9jb3VudF86IG51bWJlclxuICBjb25zdHJ1Y3RvcihwYXR0ZXJuOiBhbnksIGNoaWxkcmVuOiBhbnkpIHtcbiAgICB0aGlzLl9wYXR0ZXJuXyA9IHBhdHRlcm5cbiAgICB0aGlzLl9tYXRjaF9jb3VudF8gPSAwXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBjaGlsZHJlbilcbiAgfVxufVxuXG5jbGFzcyBDb2RlMlBhdHRlcm5Db21Gb25kIGV4dGVuZHMgQ29kZTJQYXR0ZXJuIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJeL1NBSVNJRS8oL05PTUlOLykqKC9SRVVOSU9OLykqKC9SQVBQT1JULykqJFwiLCB7fSlcbiAgfVxufVxuXG5jbGFzcyBMZWN0dXJlTWFwcGluZyB7XG4gIGxpYmVsbGU6IGFueSA9IHt9XG4gIGNvZGVzOiBhbnkgPSBuZXcgU2V0KClcblxuICBzdGF0aWMgY29kZXNfbGVjdHVyZTogc3RyaW5nW10gPSBbXG4gICAgXCJBTjFcIixcbiAgICBcIlNOMVwiLFxuICAgIFwiQU5OTEVDXCIsXG4gICAgXCJTTk5MRUNcIixcbiAgICBcIkFOTERFRlwiLFxuICAgIFwiQU4yXCIsXG4gICAgXCJTTjJcIixcbiAgICBcIlNOM1wiLFxuICBdXG4gIHN0YXRpYyBjb2Rlc19sZWN0dXJlX3JlZ2V4cDogYW55ID0gbmV3IFJlZ0V4cChcbiAgICBcIl4oPzpcIiArIExlY3R1cmVNYXBwaW5nLmNvZGVzX2xlY3R1cmUuam9pbihcInxcIikgKyBcIikoLS4qKT8kXCIsXG4gIClcblxuICBzdGF0aWMgaXNMZWN0dXJlKGFjdGU6IGFueSkge1xuICAgIHJldHVybiBhY3RlLmNvZGVBY3RlLm1hdGNoKExlY3R1cmVNYXBwaW5nLmNvZGVzX2xlY3R1cmVfcmVnZXhwKVxuICB9XG5cbiAgc3RhdGljIGdldFR5cGUoYWN0ZTogYW55KSB7XG4gICAgaWYgKGFjdGUuY29kZUFjdGUubWF0Y2goL15BTi8pKSByZXR1cm4gXCJBTlwiXG4gICAgZWxzZSBpZiAoYWN0ZS5jb2RlQWN0ZS5tYXRjaCgvXlNOLykpIHJldHVybiBcIlNOXCJcbiAgICBlbHNlIHRocm93IEVycm9yKGAke2FjdGUuY29kZUFjdGV9IGRvZXMgbm90IHN0YXJ0IHdpdGggQU4gb3IgU05gKVxuICB9XG5cbiAgc3RhdGljIG1hcChjb2RlQWN0ZTogYW55KSB7XG4gICAgcmV0dXJuIGNvZGVBY3RlLnJlcGxhY2UoTGVjdHVyZU1hcHBpbmcuY29kZXNfbGVjdHVyZV9yZWdleHAsIGBsZWN0dXJlJDFgKVxuICB9XG5cbiAgc3RhdGljIGdldENvZGVBY3RlKGFjdGU6IGFueSkge1xuICAgIGlmICghTGVjdHVyZU1hcHBpbmcuaXNMZWN0dXJlKGFjdGUpKSByZXR1cm5cblxuICAgIHJldHVybiBMZWN0dXJlTWFwcGluZy5tYXAoYWN0ZS5jb2RlQWN0ZSlcbiAgfVxuXG4gIGFkZChhY3RlOiBhbnkpIHtcbiAgICB0aGlzLmNvZGVzLmFkZChhY3RlLmNvZGVBY3RlKVxuXG4gICAgY29uc3QgdHlwZSA9IExlY3R1cmVNYXBwaW5nLmdldFR5cGUoYWN0ZSlcblxuICAgIGlmICghKGFjdGUubGliZWxsZUFjdGUubm9tQ2Fub25pcXVlIGluIHRoaXMubGliZWxsZSkpXG4gICAgICB0aGlzLmxpYmVsbGVbYWN0ZS5saWJlbGxlQWN0ZS5ub21DYW5vbmlxdWVdID0gbmV3IFNldCgpXG4gICAgdGhpcy5saWJlbGxlW2FjdGUubGliZWxsZUFjdGUubm9tQ2Fub25pcXVlXS5hZGQodHlwZSlcbiAgfVxuXG4gIHJlbWFwKGFjdGU6IGFueSwgY29kZUFjdGU6IHN0cmluZykge1xuICAgIGFjdGUuY29kZUFjdGUgPSBjb2RlQWN0ZVxuXG4gICAgbGV0IHR5cGVzID0gdGhpcy5saWJlbGxlW2FjdGUubGliZWxsZUFjdGUubm9tQ2Fub25pcXVlXVxuICAgIGlmICghKHR5cGVzLmhhcyhcIlNOXCIpICYmIHR5cGVzLmhhcyhcIkFOXCIpKSkge1xuICAgICAgaWYgKHR5cGVzLmhhcyhcIlNOXCIpKSBhY3RlLmxpYmVsbGVBY3RlLm5vbUNhbm9uaXF1ZSArPSBcIiAoU8OpbmF0KVwiXG4gICAgICBlbHNlIGlmICh0eXBlcy5oYXMoXCJBTlwiKSlcbiAgICAgICAgYWN0ZS5saWJlbGxlQWN0ZS5ub21DYW5vbmlxdWUgKz0gXCIgKEFzc2VtYmzDqWUgTmF0aW9uYWxlKVwiXG4gICAgfVxuICB9XG5cbiAgbWVyZ2VDb2Rlcyhjb2RlczogYW55KSB7XG4gICAgZm9yIChjb25zdCBjIG9mIEFycmF5LmZyb20odGhpcy5jb2RlcykpIGNvZGVzLmFkZChjKVxuICB9XG5cbiAgcHJpbnRBbmNob3JzKCkge1xuICAgIGZvciAoY29uc3QgY29kZSBvZiBBcnJheS5mcm9tKHRoaXMuY29kZXMpKSBjb25zb2xlLmxvZyhgLi4gXyR7Y29kZX06YClcbiAgfVxuXG4gIGdldENvZGVzKCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuY29kZXMpLmpvaW4oXCIsXCIpXG4gIH1cbn1cblxuY2xhc3MgTGVjdHVyZU1hcHBlciB7XG4gIG1hcHBpbmc6IGFueSA9IHt9XG5cbiAgaGFzKGNvZGVBY3RlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY29kZUFjdGUgaW4gdGhpcy5tYXBwaW5nXG4gIH1cblxuICBjb2xsZWN0KGFjdGU6IGFueSkge1xuICAgIGNvbnN0IGNvZGVBY3RlID0gTGVjdHVyZU1hcHBpbmcuZ2V0Q29kZUFjdGUoYWN0ZSlcbiAgICBpZiAoY29kZUFjdGUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgbGVjdHVyZXMgPSB0aGlzLm1hcHBpbmdcbiAgICAgIGlmICghKGNvZGVBY3RlIGluIGxlY3R1cmVzKSkgbGVjdHVyZXNbY29kZUFjdGVdID0gbmV3IExlY3R1cmVNYXBwaW5nKClcbiAgICAgIGxlY3R1cmVzW2NvZGVBY3RlXS5hZGQoYWN0ZSlcbiAgICB9XG4gIH1cblxuICByZW1hcChhY3RlOiBhbnkpIHtcbiAgICBjb25zdCBjb2RlQWN0ZSA9IExlY3R1cmVNYXBwaW5nLmdldENvZGVBY3RlKGFjdGUpXG4gICAgaWYgKGNvZGVBY3RlICE9IHVuZGVmaW5lZCkgdGhpcy5tYXBwaW5nW2NvZGVBY3RlXS5yZW1hcChhY3RlLCBjb2RlQWN0ZSlcbiAgfVxuXG4gIG1lcmdlQ29kZXMoY29kZXM6IGFueSwgY29kZUFjdGU6IHN0cmluZykge1xuICAgIHRoaXMubWFwcGluZ1tjb2RlQWN0ZV0ubWVyZ2VDb2Rlcyhjb2RlcylcbiAgfVxuXG4gIHByaW50QW5jaG9ycyhjb2RlQWN0ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5tYXBwaW5nW2NvZGVBY3RlXS5wcmludEFuY2hvcnMoKVxuICB9XG5cbiAgZ2V0Q29kZXMoY29kZUFjdGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm1hcHBpbmdbY29kZUFjdGVdLmdldENvZGVzKClcbiAgfVxufVxuXG5jbGFzcyBBY3Rlc0RvY3VtZW50YXRpb24ge1xuICB2ZXJib3NlOiBib29sZWFuXG4gIHNhbml0eUNoZWNrczogYm9vbGVhblxuICBsZWN0dXJlTWFwcGVyOiBhbnkgPSBuZXcgTGVjdHVyZU1hcHBlcigpXG4gIHJlbWFwcGVkUHJvY2VkdXJlczogYW55ID0ge31cbiAgYW5jaG9yc1ByaW50ZWQ6IGFueSA9IHt9XG4gIGFuY2hvcnM6IGFueSA9IG5ldyBTZXQoKVxuICBjb2RlczogYW55ID0ge31cbiAgcHJvY2VkdXJlczogYW55ID0gbnVsbFxuICBjb2RlMnBhdHRlcm46IGFueSA9IG5ldyBDb2RlMlBhdHRlcm4obnVsbCwge1xuICAgIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgIFwiXigoKC9sZWN0dXJlLykrKXwoKC9sZWN0dXJlLykrL0NNUC8oL2xlY3R1cmUvKSopKSgvQ0MvKT8oL1BST00vKT8oL0FOLUFQUExJLyk/JFwiLFxuICAgICAge1xuICAgICAgICBsZWN0dXJlOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgIFwiXigvREVQT1QvKT8oL0RQVExFVFRSRUNULyk/KC9FVEkvKT8oL0FWQ0UvKT8oL0RHVlQvKT8oL0FDSU4vKT8oL01PVElPTi8pKigvUFJPQ0FDQy8pPygvQ09NLyk/KCgvREVCQVRTLykrKT8oL1JUUklOSS8pPyRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImxlY3R1cmUtQ09NXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9GT05EL3wvQVZJUy8pKyRcIiwge1xuICAgICAgICAgICAgICBcImxlY3R1cmUtQ09NLUZPTkRcIjogbmV3IENvZGUyUGF0dGVybkNvbUZvbmQoKSxcbiAgICAgICAgICAgICAgXCJsZWN0dXJlLUNPTS1BVklTXCI6IG5ldyBDb2RlMlBhdHRlcm5Db21Gb25kKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIFwibGVjdHVyZS1ERUJBVFNcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICAgICAgXCJeKC9TRUFOQ0UvKSooKC9NT1RJT04vKT8oL01PVElPTi1WT1RFLykrKT8oL0RFQy8pPyRcIixcbiAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICAgIENNUDogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICBcIl4oL0RFUE9UL3wvU0FJU0lFLyl7MSwyfSgvQ09NLyk/KC9ERUMvKT8oL0RFQkFUUy1BTi8vREVCQVRTLVNOLyk/XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJDTVAtQ09NXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICAgICAgICAgIFwiXigvTk9NSU4vKT8oL1JBUFBPUlQtQU4vfC9SQVBQT1JULVNOLyl7Mn0kXCIsXG4gICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIFwiQ01QLURFQkFUUy1BTlwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0VBTkNFLykqKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgICAgICAgIFwiQ01QLURFQkFUUy1TTlwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0VBTkNFLykqKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgICBDQzogbmV3IENvZGUyUGF0dGVybihcIl4oL1NBSVNJRS8pKygvQ09OQ0xVU0lPTi8pPyRcIiwge30pLFxuICAgICAgICBQUk9NOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvUFVCLyk/JFwiLCB7fSksXG4gICAgICAgIFwiQU4tQVBQTElcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL1JBUFBPUlQvKT8kXCIsIHt9KSxcbiAgICAgIH0sXG4gICAgKSxcbiAgICBcIkFsbG9jdXRpb24gZHUgUHLDqXNpZGVudCBkZSBsJ0Fzc2VtYmzDqWUgbmF0aW9uYWxlXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICBcIl4vQU4yMS8kXCIsXG4gICAgICB7XG4gICAgICAgIEFOMjE6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9BUEFOLyk/JFwiLCB7fSksXG4gICAgICB9LFxuICAgICksXG4gICAgXCJSw6lzb2x1dGlvbiBBcnRpY2xlIDM0LTFcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0FOTFVOSS8pPyRcIiwge1xuICAgICAgQU5MVU5JOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL0RFQkFUUy8pPygvUlRSSU5JLyk/JFwiLCB7XG4gICAgICAgIFwiQU5MVU5JLURFQkFUU1wiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0VBTkNFLykrKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgIH0pLFxuICAgIH0pLFxuICAgIFLDqXNvbHV0aW9uOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvQU5MVU5JLyk/KC9DQy8pPyRcIiwge1xuICAgICAgQU5MVU5JOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL0NPTS8pPygvREVCQVRTL3wvUlRSSU5JLyk/JFwiLCB7XG4gICAgICAgIFwiQU5MVU5JLUNPTVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvQ0FFLyk/KC9GT05ELyk/JFwiLCB7XG4gICAgICAgICAgXCJBTkxVTkktQ09NLUZPTkRcIjogbmV3IENvZGUyUGF0dGVybkNvbUZvbmQoKSxcbiAgICAgICAgICBcIkFOTFVOSS1DT00tQ0FFXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICAgICAgICBcIl4oL1NBSVNJRS8pPygvTk9NSU4vKT8oL1JFVU5JT04vKT8oL1JBUFBPUlQvKT8oL0RFQy8pPyRcIixcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICksXG4gICAgICAgIH0pLFxuICAgICAgICBcIkFOTFVOSS1ERUJBVFNcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL1NFQU5DRS8pKigvREVDLyk/JFwiLCB7fSksXG4gICAgICB9KSxcbiAgICAgIENDOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0FJU0lFLyk/KC9DT05DTFVTSU9OLyk/JFwiLCB7fSksXG4gICAgfSksXG4gICAgXCJSYXBwb3J0IGQnaW5mb3JtYXRpb24gc2FucyBtaXNzaW9uXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICBcIl4oL0FOMjAvKT8oL0VVLyk/JFwiLFxuICAgICAge1xuICAgICAgICBBTjIwOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvUkFQUE9SVC8pPyRcIiwge30pLFxuICAgICAgICBFVTogbmV3IENvZGUyUGF0dGVybihcIl4oL0RFQy8pKyRcIiwge30pLFxuICAgICAgfSxcbiAgICApLFxuICAgIFwiTWlzc2lvbiBkJ2luZm9ybWF0aW9uXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9BTjIwLyk/JFwiLCB7XG4gICAgICBBTjIwOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvTUlTSU5GLyk/JFwiLCB7XG4gICAgICAgIFwiQU4yMC1NSVNJTkZcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICBcIl4oL0NSRUEvKT8oL05PTUlOLyk/KC9SQVBQT1JULyk/JFwiLFxuICAgICAgICAgIHt9LFxuICAgICAgICApLFxuICAgICAgfSksXG4gICAgfSksXG4gICAgXCJDb21taXNzaW9uIGQnZW5xdcOqdGVcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0FOMjAvKT8kXCIsIHtcbiAgICAgIEFOMjA6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9DT01FTlEvKT8kXCIsIHtcbiAgICAgICAgXCJBTjIwLUNPTUVOUVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgIFwiXigvQ1JFQS8pPygvTk9NSU4vKT8oL1JBUFBPUlQvKT8kXCIsXG4gICAgICAgICAge30sXG4gICAgICAgICksXG4gICAgICB9KSxcbiAgICB9KSxcbiAgICBcIkVuZ2FnZW1lbnQgZGUgbGEgcmVzcG9uc2FiaWxpdMOpIGdvdXZlcm5lbWVudGFsZVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgXCJeL0FOMjEvJFwiLFxuICAgICAge1xuICAgICAgICBBTjIxOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigoKC9NT1RJT04vKSovREVCQVRTLyl8KC9ER1ZULykpezEsMn0kXCIsIHtcbiAgICAgICAgICBcIkFOMjEtREVCQVRTXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9TRUFOQ0UvKSooL01PVElPTi1WT1RFLykqJFwiLCB7fSksXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICApLFxuICAgIFwiTW90aW9uIHLDqWbDqXJlbmRhaXJlXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9sZWN0dXJlLykrJFwiLCB7XG4gICAgICBsZWN0dXJlOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL0NPTS8pPygvREVCQVRTLyk/JFwiLCB7XG4gICAgICAgIFwibGVjdHVyZS1DT01cIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0ZPTkQvKT8kXCIsIHtcbiAgICAgICAgICBcImxlY3R1cmUtQ09NLUZPTkRcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICAgIFwiXigvU0FJU0lFLyk/KC9OT01JTi8pKigvUkFQUE9SVC8pKiRcIixcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICksXG4gICAgICAgIH0pLFxuICAgICAgICBcImxlY3R1cmUtREVCQVRTXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgIH0pLFxuICAgIH0pLFxuICAgIEltbXVuaXTDqTogbmV3IENvZGUyUGF0dGVybihcIl4oL0FOTFVOSS8pKyRcIiwge1xuICAgICAgQU5MVU5JOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL0NPTS8pPygvREVCQVRTLyk/KC9SVFJJTkkvKT8kXCIsIHtcbiAgICAgICAgXCJBTkxVTkktQ09NXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9GT05ELyk/JFwiLCB7XG4gICAgICAgICAgXCJBTkxVTkktQ09NLUZPTkRcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICAgIFwiXigvU0FJU0lFLyk/KC9OT01JTi8pKigvUkFQUE9SVC8pKiRcIixcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICksXG4gICAgICAgIH0pLFxuICAgICAgICBcIkFOTFVOSS1ERUJBVFNcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL1NFQU5DRS8pPygvREVDLykkXCIsIHt9KSxcbiAgICAgIH0pLFxuICAgIH0pLFxuICAgIFwiUmVzcG9uc2FiaWxpdMOpIHDDqW5hbGUgZHUgcHLDqXNpZGVudCBkZSBsYSByw6lwdWJsaXF1ZVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgXCJeL2xlY3R1cmUvJFwiLFxuICAgICAge1xuICAgICAgICBsZWN0dXJlOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL1JFQ0JVUkVBVS8pPyRcIiwge30pLFxuICAgICAgfSxcbiAgICApLFxuICAgIFwiUHJvcG9zaXRpb24gZGUgbG9pIHByw6lzZW50w6llIGVuIGFwcGxpY2F0aW9uIGRlIGwnYXJ0aWNsZSAxMSBkZSBsYSBDb25zdGl0dXRpb25cIjpcbiAgICAgIG5ldyBDb2RlMlBhdHRlcm4oXCJeL2xlY3R1cmUvJFwiLCB7XG4gICAgICAgIGxlY3R1cmU6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9ERVBPVC8pPyRcIiwge30pLFxuICAgICAgfSksXG4gIH0pXG5cbiAgY29uc3RydWN0b3Ioc2FuaXR5Q2hlY2tzOiBib29sZWFuLCB2ZXJib3NlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLnZlcmJvc2UgPSB2ZXJib3NlXG4gICAgdGhpcy5zYW5pdHlDaGVja3MgPSBzYW5pdHlDaGVja3NcbiAgICB0aGlzLnByb2NlZHVyZXMgPSB7fVxuICAgIHRoaXMuY29kZTJwYXR0ZXJuLl9tYXRjaF9jb3VudF8rK1xuICB9XG5cbiAgd2Fsa0ZpbGVzKGRhdGE6IHN0cmluZ1tdLCBhY3Rpb246IGFueSkge1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBnZXRGaWxlcyhkYXRhKSkge1xuICAgICAgY29uc3QgZG9zc2llciA9IGxvYWQoZmlsZSlcbiAgICAgIGxldCBwcm9jZWR1cmU6IHN0cmluZyA9IHRoaXMucmVtYXBQcm9jZWR1cmUoXG4gICAgICAgIGRvc3NpZXIucHJvY2VkdXJlUGFybGVtZW50YWlyZS5saWJlbGxlLFxuICAgICAgKVxuICAgICAgaWYgKCEocHJvY2VkdXJlIGluIHRoaXMucHJvY2VkdXJlcykpIHRoaXMucHJvY2VkdXJlc1twcm9jZWR1cmVdID0ge31cbiAgICAgIGFjdGlvbihcbiAgICAgICAgdGhpcy5wcm9jZWR1cmVzW3Byb2NlZHVyZV0sXG4gICAgICAgIGRvc3NpZXIuYWN0ZXNMZWdpc2xhdGlmcyxcbiAgICAgICAgdGhpcy5jb2RlMnBhdHRlcm5bcHJvY2VkdXJlXSxcbiAgICAgICAgbnVsbCxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBjb2xsZWN0RmlsZXMoZGF0YTogc3RyaW5nW10pIHtcbiAgICB0aGlzLndhbGtGaWxlcyhcbiAgICAgIGRhdGEsXG4gICAgICAoX2FjdGVzOiBhbnksIGFjdGVzTGVnaXNsYXRpZnM6IGFueSwgX2MycDogYW55LCBfcGFyZW50OiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5jb2xsZWN0KGFjdGVzTGVnaXNsYXRpZnMpXG4gICAgICB9LFxuICAgIClcbiAgfVxuXG4gIHByb2Nlc3NGaWxlcyhkYXRhOiBzdHJpbmdbXSkge1xuICAgIHRoaXMud2Fsa0ZpbGVzKFxuICAgICAgZGF0YSxcbiAgICAgIChhY3RlczogYW55LCBhY3Rlc0xlZ2lzbGF0aWZzOiBhbnksIGMycDogYW55LCBwYXJlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLm1lcmdlKGFjdGVzLCBhY3Rlc0xlZ2lzbGF0aWZzLCBjMnAsIHBhcmVudClcbiAgICAgIH0sXG4gICAgKVxuICAgIGlmICh0aGlzLnNhbml0eUNoZWNrcykgdGhpcy52YWxpZGF0ZSgpXG4gIH1cblxuICByZW1hcEFjdGVzKGFjdGVzOiBhbnkpOiBhbnkge1xuICAgIGxldCByZXN1bHRzID0gW11cbiAgICBmb3IgKGNvbnN0IGFjdGUgb2YgYWN0ZXMpIHtcbiAgICAgIHRoaXMubGVjdHVyZU1hcHBlci5yZW1hcChhY3RlKVxuXG4gICAgICAvLyBDQy1TQUlTSUUtIHN1ZmZpeCBkb2VzIG5vdCBpbXBseSBhIGhpZXJhcmNoeVxuICAgICAgYWN0ZS5jb2RlQWN0ZSA9IGFjdGUuY29kZUFjdGUucmVwbGFjZSgvXkNDLVNBSVNJRS4qLywgXCJDQy1TQUlTSUVcIilcblxuICAgICAgcmVzdWx0cy5wdXNoKGFjdGUpXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzXG4gIH1cblxuICBjb2xsZWN0QWN0ZXMoYWN0ZXM6IGFueSk6IGFueSB7XG4gICAgbGV0IHJlc3VsdHMgPSBbXVxuICAgIGZvciAoY29uc3QgYWN0ZSBvZiBhY3Rlcykge1xuICAgICAgdGhpcy5sZWN0dXJlTWFwcGVyLmNvbGxlY3QoYWN0ZSlcblxuICAgICAgcmVzdWx0cy5wdXNoKGFjdGUpXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzXG4gIH1cblxuICByZW1hcFByb2NlZHVyZShwcm9jZWR1cmU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWVyZ2VfcHJvY2VkdXJlczogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoW1xuICAgICAgW1wiUHJvcG9zaXRpb24gZGUgbG9pIG9yZGluYWlyZVwiLCBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCJdLFxuICAgICAgW1wiUHJvamV0IGRlIGxvaSBvcmRpbmFpcmVcIiwgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiXSxcbiAgICAgIFtcbiAgICAgICAgXCJQcm9qZXQgZGUgcmF0aWZpY2F0aW9uIGRlcyB0cmFpdMOpcyBldCBjb252ZW50aW9uc1wiLFxuICAgICAgICBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCIsXG4gICAgICBdLFxuICAgICAgW1wiUHJvamV0IG91IHByb3Bvc2l0aW9uIGRlIGxvaSBvcmdhbmlxdWVcIiwgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiXSxcbiAgICAgIFtcbiAgICAgICAgXCJQcm9qZXQgb3UgcHJvcG9zaXRpb24gZGUgbG9pIGNvbnN0aXR1dGlvbm5lbGxlXCIsXG4gICAgICAgIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIixcbiAgICAgIF0sXG4gICAgICBbXCJQcm9qZXQgZGUgbG9pIGRlIGZpbmFuY2VzIGRlIGwnYW5uw6llXCIsIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIl0sXG4gICAgICBbXCJQcm9qZXQgZGUgbG9pIGRlIGZpbmFuY2VzIHJlY3RpZmljYXRpdmVcIiwgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiXSxcbiAgICAgIFtcbiAgICAgICAgXCJQcm9qZXQgZGUgbG9pIGRlIGZpbmFuY2VtZW50IGRlIGxhIHPDqWN1cml0w6kgc29jaWFsZVwiLFxuICAgICAgICBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCIsXG4gICAgICBdLFxuICAgIF0pXG4gICAgaWYgKG1lcmdlX3Byb2NlZHVyZXMuaGFzKHByb2NlZHVyZSkpIHtcbiAgICAgIHRoaXMucmVtYXBwZWRQcm9jZWR1cmVzW3Byb2NlZHVyZV0gPSBudWxsXG4gICAgICByZXR1cm4gbWVyZ2VfcHJvY2VkdXJlcy5nZXQocHJvY2VkdXJlKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcHJvY2VkdXJlXG4gICAgfVxuICB9XG5cbiAgLy8gcmV0dXJuIHRoZSBjb2RlQWN0ZXMgaW4gdGhlIHNhbWUgb3JkZXIgdGhleSBhcHBlYXIgaW4gdGhlIHJlZ2V4cFxuICBvcmRlcmVkQ29kZXMoY29kZXM6IGFueSwgYzJwOiBhbnksIHBhcmVudDogc3RyaW5nKTogU2V0PHN0cmluZz4ge1xuICAgIGNvZGVzID0gbmV3IFNldChjb2RlcylcbiAgICBpZiAoIXRoaXMuc2FuaXR5Q2hlY2tzKSByZXR1cm4gY29kZXNcbiAgICBsZXQgb3JkZXJlZCA9IGMycFtcIl9wYXR0ZXJuX1wiXS5tYXRjaChuZXcgUmVnRXhwKFwiLy4qPy9cIiwgXCJnXCIpKVxuICAgIG9yZGVyZWQgPSBvcmRlcmVkLm1hcCgoeDogc3RyaW5nKSA9PiB4LnJlcGxhY2UobmV3IFJlZ0V4cChcIi8oLiopL1wiKSwgXCIkMVwiKSlcbiAgICBpZiAocGFyZW50ICE9IG51bGwpIG9yZGVyZWQgPSBvcmRlcmVkLm1hcCgoeDogc3RyaW5nKSA9PiBgJHtwYXJlbnR9LSR7eH1gKVxuICAgIG9yZGVyZWQgPSBuZXcgU2V0KG9yZGVyZWQpXG4gICAgYXNzZXJ0KGVxU2V0KG9yZGVyZWQsIGNvZGVzKSwgYCR7Wy4uLm9yZGVyZWRdfSAhPSAke1suLi5jb2Rlc119YClcbiAgICByZXR1cm4gb3JkZXJlZFxuICB9XG5cbiAgdmFsaWRhdGVDaHJvbm9sb2d5KGFjdGVzTGVnaXNsYXRpZnM6IGFueSwgYzJwOiBhbnksIHBhcmVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcGF0dGVybiA9IGMycFtcIl9wYXR0ZXJuX1wiXVxuICAgIGNvbnN0IHNlcXVlbmNlID0gYWN0ZXNMZWdpc2xhdGlmc1xuICAgICAgLm1hcCgoeDogYW55KSA9PiBgLyR7eC5jb2RlQWN0ZX0vYC5yZXBsYWNlKGAvJHtwYXJlbnR9LWAsIFwiL1wiKSlcbiAgICAgIC5qb2luKFwiXCIpXG4gICAgYXNzZXJ0KFxuICAgICAgc2VxdWVuY2UubWF0Y2gobmV3IFJlZ0V4cChwYXR0ZXJuKSksXG4gICAgICBgJHtwYXR0ZXJufSBkb2VzIG5vdCBtYXRjaCAke3NlcXVlbmNlfWAsXG4gICAgKVxuICAgIGMycC5fbWF0Y2hfY291bnRfKytcbiAgfVxuXG4gIG1lcmdlQWN0ZShhY3RlczogYW55LCBhY3RlOiBhbnksIGMycDogYW55LCBwYXJlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGxldCBjb2RlOiBzdHJpbmcgPSBhY3RlLmNvZGVBY3RlXG4gICAgbGV0IHNob3J0Q29kZTogc3RyaW5nID0gY29kZS5yZXBsYWNlKG5ldyBSZWdFeHAoYF4ke3BhcmVudH0tYCksIFwiXCIpXG4gICAgc2hvcnRDb2RlID0gc2hvcnRDb2RlLnJlcGxhY2UoLy0oQU58U04pJC8sIFwiXCIpXG4gICAgdGhpcy5jb2Rlc1tzaG9ydENvZGVdID0gbnVsbFxuICAgIGxldCBuYW1lOiBzdHJpbmcgPSBhY3RlLmxpYmVsbGVBY3RlLm5vbUNhbm9uaXF1ZVxuICAgIGlmICghKGNvZGUgaW4gYWN0ZXMpKSB7XG4gICAgICBhY3Rlc1tjb2RlXSA9IHtcbiAgICAgICAgdHlwZTogYWN0ZS54c2lUeXBlLFxuICAgICAgICBuYW1lOiBuZXcgU2V0KFtuYW1lXSksXG4gICAgICAgIHNob3J0Q29kZTogc2hvcnRDb2RlLFxuICAgICAgICBhY3Rlczoge30sXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjdGVzW2NvZGVdLm5hbWUuYWRkKG5hbWUpXG4gICAgfVxuICAgIGlmIChcImFjdGVzTGVnaXNsYXRpZnNcIiBpbiBhY3RlKVxuICAgICAgdGhpcy5tZXJnZShhY3Rlc1tjb2RlXS5hY3RlcywgYWN0ZS5hY3Rlc0xlZ2lzbGF0aWZzLCBjMnBbY29kZV0sIGNvZGUpXG4gIH1cblxuICBtZXJnZShhY3RlczogYW55LCBhY3Rlc0xlZ2lzbGF0aWZzOiBhbnksIGMycDogYW55LCBwYXJlbnQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGwgPSB0aGlzLnJlbWFwQWN0ZXMoYWN0ZXNMZWdpc2xhdGlmcylcbiAgICB0aGlzLnZhbGlkYXRlQ2hyb25vbG9neShsLCBjMnAsIHBhcmVudClcbiAgICBmb3IgKGNvbnN0IGFjdGUgb2YgbCkgdGhpcy5tZXJnZUFjdGUoYWN0ZXMsIGFjdGUsIGMycCwgcGFyZW50KVxuICB9XG5cbiAgY29sbGVjdChhY3Rlc0xlZ2lzbGF0aWZzOiBhbnkpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGFjdGUgb2YgdGhpcy5jb2xsZWN0QWN0ZXMoYWN0ZXNMZWdpc2xhdGlmcykpXG4gICAgICBpZiAoXCJhY3Rlc0xlZ2lzbGF0aWZzXCIgaW4gYWN0ZSkgdGhpcy5jb2xsZWN0KGFjdGUuYWN0ZXNMZWdpc2xhdGlmcylcbiAgfVxuXG4gIHZhbGlkYXRlTGV2ZWwoYzJwOiBhbnksIHBhdGg6IGFueSkge1xuICAgIGFzc2VydChjMnAuX21hdGNoX2NvdW50XyA+IDAsIGAke3BhdGh9IGlzIG5ldmVyIHVzZWRgKVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGMycCkgYXMgW3N0cmluZywgYW55XVtdKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lID09IFwiQ29kZTJQYXR0ZXJuXCIpXG4gICAgICAgIHRoaXMudmFsaWRhdGVMZXZlbCh2YWx1ZSwgcGF0aC5jb25jYXQoW2tleV0pKVxuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlKCkge1xuICAgIHRoaXMudmFsaWRhdGVMZXZlbCh0aGlzLmNvZGUycGF0dGVybiwgW10pXG4gIH1cblxuICBwcmludEVudHJ5KHNlY3Rpb25zOiBzdHJpbmcsIGVudHJ5OiBzdHJpbmcsIGNvZGVzOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0aXRsZSA9IGBcXGAke2VudHJ5fVxcYF9fYFxuICAgIGNvbnNvbGUubG9nKHRpdGxlKVxuICAgIGNvbnN0IHVuZGVybGluZSA9IG5ldyBBcnJheSh0aXRsZS5sZW5ndGggKyAxKS5qb2luKHNlY3Rpb25zWzBdKVxuICAgIGNvbnNvbGUubG9nKHVuZGVybGluZSlcbiAgICBjb25zb2xlLmxvZyhjb2RlcylcbiAgfVxuXG4gIGFkZEFuY2hvcnMoa2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoa2V5IGluIHRoaXMuYW5jaG9yc1ByaW50ZWQpIHJldHVyblxuICAgIGlmICh0aGlzLmxlY3R1cmVNYXBwZXIuaGFzKGtleSkpXG4gICAgICB0aGlzLmxlY3R1cmVNYXBwZXIubWVyZ2VDb2Rlcyh0aGlzLmFuY2hvcnMsIGtleSlcbiAgICBlbHNlIHRoaXMuYW5jaG9ycy5hZGQoa2V5KVxuICB9XG5cbiAgcHJpbnRBbmNob3JzKGtleTogc3RyaW5nKSB7XG4gICAgaWYgKGtleSBpbiB0aGlzLmFuY2hvcnNQcmludGVkKSByZXR1cm5cbiAgICB0aGlzLmFuY2hvcnNQcmludGVkW2tleV0gPSBudWxsXG4gICAgaWYgKHRoaXMubGVjdHVyZU1hcHBlci5oYXMoa2V5KSkgdGhpcy5sZWN0dXJlTWFwcGVyLnByaW50QW5jaG9ycyhrZXkpXG4gICAgZWxzZSBjb25zb2xlLmxvZyhgLi4gXyR7a2V5fTpgKVxuICB9XG5cbiAgZ2V0Q29kZXMoa2V5OiBzdHJpbmcsIHNob3J0Q29kZTogc3RyaW5nKSB7XG4gICAgaWYgKGtleSBpbiB0aGlzLmFuY2hvcnNQcmludGVkKSByZXR1cm4gYGNmIFxcXFwqJHtzaG9ydENvZGV9XFxcXCpgXG4gICAgaWYgKHRoaXMubGVjdHVyZU1hcHBlci5oYXMoa2V5KSkgcmV0dXJuIHRoaXMubGVjdHVyZU1hcHBlci5nZXRDb2RlcyhrZXkpXG4gICAgZWxzZSByZXR1cm4ga2V5XG4gIH1cblxuICByZW5hbWVDTVAoa2V5OiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICAgIGlmIChrZXkuc3RhcnRzV2l0aChcIkNNUFwiKSkge1xuICAgICAgaWYgKGtleS5lbmRzV2l0aChcIi1TTlwiKSkgcmV0dXJuIGAke25hbWV9IChTw6luYXQpYFxuICAgICAgZWxzZSBpZiAoa2V5LmVuZHNXaXRoKFwiLUFOXCIpKSByZXR1cm4gYCR7bmFtZX0gKEFzc2VtYmzDqWUgTmF0aW9uYWxlKWBcbiAgICAgIGVsc2UgcmV0dXJuIG5hbWVcbiAgICB9IGVsc2UgcmV0dXJuIG5hbWVcbiAgfVxuXG4gIHByaW50TGV2ZWwoYWN0ZXM6IGFueSwgc2VjdGlvbnM6IHN0cmluZywgYzJwOiBhbnksIHBhcmVudDogYW55KSB7XG4gICAgY29uc3Qga2V5czogU2V0PHN0cmluZz4gPSB0aGlzLm9yZGVyZWRDb2RlcyhPYmplY3Qua2V5cyhhY3RlcyksIGMycCwgcGFyZW50KVxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gYWN0ZXNba2V5XVxuICAgICAgbGV0IG5hbWUgPSBBcnJheS5mcm9tKHZhbHVlLm5hbWUpLmpvaW4oXCIsIFwiKVxuICAgICAgbmFtZSA9IHRoaXMucmVuYW1lQ01QKGtleSwgbmFtZSlcbiAgICAgIGNvbnN0IGNvZGVzID0gdGhpcy5nZXRDb2RlcyhrZXksIHZhbHVlLnNob3J0Q29kZSlcbiAgICAgIHRoaXMuYWRkQW5jaG9ycyhrZXkpXG4gICAgICB0aGlzLnByaW50QW5jaG9ycyhrZXkpXG4gICAgICBjb25zb2xlLmxvZyhcIlwiKVxuICAgICAgdGhpcy5wcmludEVudHJ5KHNlY3Rpb25zLCBgJHtuYW1lfSA8JHt2YWx1ZS5zaG9ydENvZGV9VE9DXz5gLCBjb2RlcylcbiAgICAgIGNvbnNvbGUubG9nKFwiXCIpXG4gICAgICBpZiAoT2JqZWN0LmtleXModmFsdWUuYWN0ZXMpLmxlbmd0aCA+IDApXG4gICAgICAgIHRoaXMucHJpbnRMZXZlbCh2YWx1ZS5hY3Rlcywgc2VjdGlvbnMuc3Vic3RyaW5nKDEpLCBjMnBba2V5XSwga2V5KVxuICAgIH1cbiAgfVxuXG4gIHByaW50Q29kZXMoKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5jb2RlcykpXG4gICAgICBjb25zb2xlLmxvZyhgLi4gXyR7a2V5fVRPQzogaHR0cDovL2ApXG4gIH1cblxuICBwcmludEFuY2hvcnNJbmRleCgpIHtcbiAgICBmb3IgKGNvbnN0IGNvZGUgb2YgQXJyYXkuZnJvbSh0aGlzLmFuY2hvcnMpKVxuICAgICAgY29uc29sZS5sb2coYCogOnJlZjpcXGAke2NvZGV9IDwke2NvZGV9PlxcYGApXG4gIH1cblxuICBnZXRBZ2dyZWdhdGVkKHByb2NlZHVyZTogc3RyaW5nKSB7XG4gICAgaWYgKHByb2NlZHVyZSA9PSBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCIpIHtcbiAgICAgIGNvbnN0IHJlbWFwcGVkID0gT2JqZWN0LmtleXModGhpcy5yZW1hcHBlZFByb2NlZHVyZXMpLmpvaW4oXCIsIFwiKVxuICAgICAgcmV0dXJuIGAgKGFncsOpZ2F0aW9uIGRlICR7cmVtYXBwZWR9KWBcbiAgICB9IGVsc2UgcmV0dXJuIFwiXCJcbiAgfVxuXG4gIHByaW50KCk6IHZvaWQge1xuICAgIHRoaXMuYW5jaG9yc1ByaW50ZWQgPSB7fVxuICAgIGZvciAoY29uc3QgW2tleSwgYWN0ZXNdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucHJvY2VkdXJlcykgYXMgW1xuICAgICAgc3RyaW5nLFxuICAgICAgYW55LFxuICAgIF1bXSkge1xuICAgICAgY29uc3QgY29kZSA9IGtleS5yZXBsYWNlKC8gKy9nLCBcIl9cIilcbiAgICAgIHRoaXMuY29kZXNbY29kZV0gPSBudWxsXG4gICAgICBjb25zdCBhZ2dyZWdhdGVkID0gdGhpcy5nZXRBZ2dyZWdhdGVkKGtleSlcbiAgICAgIGNvbnN0IHRpdGxlID0gYFxcYCR7a2V5fSA8JHtjb2RlfVRPQ18+XFxgX18ke2FnZ3JlZ2F0ZWR9YFxuICAgICAgY29uc29sZS5sb2codGl0bGUpXG4gICAgICBjb25zdCB1bmRlcmxpbmUgPSBuZXcgQXJyYXkodGl0bGUubGVuZ3RoICsgMSkuam9pbihcIj1cIilcbiAgICAgIGNvbnNvbGUubG9nKHVuZGVybGluZSlcbiAgICAgIHRoaXMucHJpbnRMZXZlbChhY3RlcywgXCItfi4nXCIsIHRoaXMuY29kZTJwYXR0ZXJuW2tleV0sIG51bGwpXG4gICAgfVxuICAgIHRoaXMucHJpbnRDb2RlcygpXG4gICAgdGhpcy5wcmludEFuY2hvcnNJbmRleCgpXG4gIH1cbn1cblxuZnVuY3Rpb24gbWFpbihhcmd2OiBhbnkpOiBudW1iZXIge1xuICBjb25zdCBvcHRpb25zID0gcGFyc2VBcmdzKGFyZ3YpXG4gIGlmIChvcHRpb25zID09PSBudWxsKSByZXR1cm4gMVxuICBsZXQgZG9jID0gbmV3IEFjdGVzRG9jdW1lbnRhdGlvbihcbiAgICAhb3B0aW9uc1tcIm5vLXNhbml0eS1jaGVja3NcIl0sXG4gICAgb3B0aW9ucy52ZXJib3NlLFxuICApXG4gIGRvYy5jb2xsZWN0RmlsZXMob3B0aW9ucy5kYXRhKVxuICBkb2MucHJvY2Vzc0ZpbGVzKG9wdGlvbnMuZGF0YSlcbiAgZG9jLnByaW50KClcbiAgcmV0dXJuIDBcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAocHJvY2Vzcy5hcmd2WzFdLmVuZHNXaXRoKFwiZG9jdW1lbnRfZG9zc2llcnNfbGVnaXNsYXRpZnMudHNcIikpXG4gIHByb2Nlc3MuZXhpdChtYWluKHByb2Nlc3MuYXJndikpXG4iXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPQSxlQUFlLE1BQU0sbUJBQW1CO0FBQy9DLE9BQU9DLGdCQUFnQixNQUFNLG9CQUFvQjtBQUNqRCxPQUFPQyxNQUFNLE1BQU0sUUFBUTtBQUFBLFNBQ2xCQyxJQUFJLEVBQUVDLFFBQVE7QUFFdkIsU0FBU0MsU0FBUyxDQUFDQyxJQUFjLEVBQU87RUFDdEMsTUFBTUMsa0JBQWtCLEdBQUcsQ0FDekI7SUFDRUMsV0FBVyxFQUFFLHlEQUF5RDtJQUN0RUMsYUFBYSxFQUFFLElBQUk7SUFDbkJDLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLElBQUksRUFBRSxNQUFNO0lBQ1pDLElBQUksRUFBRUM7RUFDUixDQUFDLEVBQ0Q7SUFDRUYsSUFBSSxFQUFFLGtCQUFrQjtJQUN4QkMsSUFBSSxFQUFFRSxPQUFPO0lBQ2JOLFdBQVcsRUFBRTtFQUNmLENBQUMsRUFDRDtJQUNFRyxJQUFJLEVBQUUsU0FBUztJQUNmQyxJQUFJLEVBQUVFLE9BQU87SUFDYk4sV0FBVyxFQUFFO0VBQ2YsQ0FBQyxFQUNEO0lBQ0VHLElBQUksRUFBRSxNQUFNO0lBQ1pILFdBQVcsRUFBRTtFQUNmLENBQUMsQ0FDRjtFQUNELE1BQU1PLFFBQVEsR0FBRyxDQUNmO0lBQ0VDLE1BQU0sRUFBRSwrQ0FBK0M7SUFD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
412
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kTGluZUFyZ3MiLCJjb21tYW5kTGluZVVzYWdlIiwiYXNzZXJ0IiwibG9hZCIsImdldEZpbGVzIiwicGFyc2VBcmdzIiwiYXJndiIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImRlc2NyaXB0aW9uIiwiZGVmYXVsdE9wdGlvbiIsIm11bHRpcGxlIiwibmFtZSIsInR5cGUiLCJTdHJpbmciLCJCb29sZWFuIiwic2VjdGlvbnMiLCJoZWFkZXIiLCJjb250ZW50Iiwib3B0aW9uTGlzdCIsIm9wdGlvbnMiLCJjb25zb2xlIiwiZXJyb3IiLCJoZWxwIiwidXNhZ2UiLCJ3YXJuIiwiZXFTZXQiLCJhcyIsImJzIiwic2l6ZSIsImEiLCJoYXMiLCJDb2RlMlBhdHRlcm4iLCJjb25zdHJ1Y3RvciIsInBhdHRlcm4iLCJjaGlsZHJlbiIsIl9wYXR0ZXJuXyIsIl9tYXRjaF9jb3VudF8iLCJPYmplY3QiLCJhc3NpZ24iLCJDb2RlMlBhdHRlcm5Db21Gb25kIiwiTGVjdHVyZU1hcHBpbmciLCJTZXQiLCJpc0xlY3R1cmUiLCJhY3RlIiwiY29kZUFjdGUiLCJtYXRjaCIsImNvZGVzX2xlY3R1cmVfcmVnZXhwIiwiZ2V0VHlwZSIsIkVycm9yIiwibWFwIiwicmVwbGFjZSIsImdldENvZGVBY3RlIiwiYWRkIiwiY29kZXMiLCJsaWJlbGxlQWN0ZSIsIm5vbUNhbm9uaXF1ZSIsImxpYmVsbGUiLCJyZW1hcCIsInR5cGVzIiwibWVyZ2VDb2RlcyIsImMiLCJBcnJheSIsImZyb20iLCJwcmludEFuY2hvcnMiLCJjb2RlIiwibG9nIiwiZ2V0Q29kZXMiLCJqb2luIiwiUmVnRXhwIiwiY29kZXNfbGVjdHVyZSIsIkxlY3R1cmVNYXBwZXIiLCJtYXBwaW5nIiwiY29sbGVjdCIsInVuZGVmaW5lZCIsImxlY3R1cmVzIiwiQWN0ZXNEb2N1bWVudGF0aW9uIiwic2FuaXR5Q2hlY2tzIiwidmVyYm9zZSIsImxlY3R1cmUiLCJDTVAiLCJDQyIsIlBST00iLCJBTjIxIiwiQU5MVU5JIiwiUsOpc29sdXRpb24iLCJBTjIwIiwiRVUiLCJJbW11bml0w6kiLCJwcm9jZWR1cmVzIiwiY29kZTJwYXR0ZXJuIiwid2Fsa0ZpbGVzIiwiZGF0YSIsImFjdGlvbiIsImZpbGUiLCJkb3NzaWVyIiwicHJvY2VkdXJlIiwicmVtYXBQcm9jZWR1cmUiLCJwcm9jZWR1cmVQYXJsZW1lbnRhaXJlIiwiYWN0ZXNMZWdpc2xhdGlmcyIsImNvbGxlY3RGaWxlcyIsIl9hY3RlcyIsIl9jMnAiLCJfcGFyZW50IiwicHJvY2Vzc0ZpbGVzIiwiYWN0ZXMiLCJjMnAiLCJwYXJlbnQiLCJtZXJnZSIsInZhbGlkYXRlIiwicmVtYXBBY3RlcyIsInJlc3VsdHMiLCJsZWN0dXJlTWFwcGVyIiwicHVzaCIsImNvbGxlY3RBY3RlcyIsIm1lcmdlX3Byb2NlZHVyZXMiLCJNYXAiLCJyZW1hcHBlZFByb2NlZHVyZXMiLCJnZXQiLCJvcmRlcmVkQ29kZXMiLCJvcmRlcmVkIiwieCIsInZhbGlkYXRlQ2hyb25vbG9neSIsInNlcXVlbmNlIiwibWVyZ2VBY3RlIiwic2hvcnRDb2RlIiwieHNpVHlwZSIsImwiLCJ2YWxpZGF0ZUxldmVsIiwicGF0aCIsImtleSIsInZhbHVlIiwiZW50cmllcyIsImNvbmNhdCIsInByaW50RW50cnkiLCJlbnRyeSIsInRpdGxlIiwidW5kZXJsaW5lIiwibGVuZ3RoIiwiYWRkQW5jaG9ycyIsImFuY2hvcnNQcmludGVkIiwiYW5jaG9ycyIsInJlbmFtZUNNUCIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsInByaW50TGV2ZWwiLCJrZXlzIiwic3Vic3RyaW5nIiwicHJpbnRDb2RlcyIsInByaW50QW5jaG9yc0luZGV4IiwiZ2V0QWdncmVnYXRlZCIsInJlbWFwcGVkIiwicHJpbnQiLCJhZ2dyZWdhdGVkIiwibWFpbiIsImRvYyIsInByb2Nlc3MiLCJleGl0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvZG9jdW1lbnRfZG9zc2llcnNfbGVnaXNsYXRpZnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lVXNhZ2UgZnJvbSBcImNvbW1hbmQtbGluZS11c2FnZVwiXG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IHsgbG9hZCwgZ2V0RmlsZXMgfSBmcm9tIFwiLi4vZmlsZV9zeXN0ZW1zXCJcblxuZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ3Y6IHN0cmluZ1tdKTogYW55IHtcbiAgY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcInBhdGhuYW1lIHRvIGEgSlNPTiBmaWxlIG9yIGEgZ2xvYiBwYXR0ZXJuIHRvIEpTT04gZmlsZXNcIixcbiAgICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG5hbWU6IFwiZGF0YVwiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJuby1zYW5pdHktY2hlY2tzXCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVzY3JpcHRpb246IFwiRG8gbm90IHBlcmZvcm0gc2FuaXR5IGNoZWNrcy5cIixcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidmVyYm9zZVwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlc2NyaXB0aW9uOiBcImluY3JlYXNlIHZlcmJvc2l0eVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJoZWxwXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJQcmludCB0aGlzIHVzYWdlIGd1aWRlLlwiLFxuICAgIH0sXG4gIF1cbiAgY29uc3Qgc2VjdGlvbnMgPSBbXG4gICAge1xuICAgICAgaGVhZGVyOiBcIkFpZGUgw6AgbGEgZG9jdW1lbnRhdGlvbiBkdSBkb3NzaWVyIGzDqWdpc2xhdGlmXCIsXG4gICAgICBjb250ZW50OiBcIkfDqW7DqHJlIHVuZSBoacOpcmFyY2hpZSBkZXMgYWN0ZXMgbMOpZ2lzbGF0aWZzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBoZWFkZXI6IFwiT3B0aW9uc1wiLFxuICAgICAgb3B0aW9uTGlzdDogb3B0aW9uc0RlZmluaXRpb25zLFxuICAgIH0sXG4gIF1cbiAgY29uc3Qgb3B0aW9ucyA9IGNvbW1hbmRMaW5lQXJncyhvcHRpb25zRGVmaW5pdGlvbnMsIHtcbiAgICBhcmd2OiBhcmd2LFxuICB9KVxuICBpZiAoIShcImhlbHBcIiBpbiBvcHRpb25zKSAmJiAhKFwiZGF0YVwiIGluIG9wdGlvbnMpKSB7XG4gICAgY29uc29sZS5lcnJvcihcIi0tZGF0YSBpcyBtYW5kYXRvcnlcIilcbiAgICBvcHRpb25zLmhlbHAgPSB0cnVlXG4gIH1cbiAgaWYgKFwiaGVscFwiIGluIG9wdGlvbnMpIHtcbiAgICBjb25zdCB1c2FnZSA9IGNvbW1hbmRMaW5lVXNhZ2Uoc2VjdGlvbnMpXG4gICAgY29uc29sZS53YXJuKHVzYWdlKVxuICAgIHJldHVybiBudWxsXG4gIH1cbiAgcmV0dXJuIG9wdGlvbnNcbn1cblxuZnVuY3Rpb24gZXFTZXQoYXM6IFNldDxzdHJpbmc+LCBiczogU2V0PHN0cmluZz4pOiBib29sZWFuIHtcbiAgaWYgKGFzLnNpemUgIT09IGJzLnNpemUpIHJldHVybiBmYWxzZVxuICBmb3IgKHZhciBhIG9mIGFzKSBpZiAoIWJzLmhhcyhhKSkgcmV0dXJuIGZhbHNlXG4gIHJldHVybiB0cnVlXG59XG5cbmNsYXNzIENvZGUyUGF0dGVybiB7XG4gIF9wYXR0ZXJuXzogYW55XG4gIF9tYXRjaF9jb3VudF86IG51bWJlclxuICBjb25zdHJ1Y3RvcihwYXR0ZXJuOiBhbnksIGNoaWxkcmVuOiBhbnkpIHtcbiAgICB0aGlzLl9wYXR0ZXJuXyA9IHBhdHRlcm5cbiAgICB0aGlzLl9tYXRjaF9jb3VudF8gPSAwXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBjaGlsZHJlbilcbiAgfVxufVxuXG5jbGFzcyBDb2RlMlBhdHRlcm5Db21Gb25kIGV4dGVuZHMgQ29kZTJQYXR0ZXJuIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJeL1NBSVNJRS8oL05PTUlOLykqKC9SRVVOSU9OLykqKC9SQVBQT1JULykqJFwiLCB7fSlcbiAgfVxufVxuXG5jbGFzcyBMZWN0dXJlTWFwcGluZyB7XG4gIGxpYmVsbGU6IGFueSA9IHt9XG4gIGNvZGVzOiBhbnkgPSBuZXcgU2V0KClcblxuICBzdGF0aWMgY29kZXNfbGVjdHVyZTogc3RyaW5nW10gPSBbXG4gICAgXCJBTjFcIixcbiAgICBcIlNOMVwiLFxuICAgIFwiQU5OTEVDXCIsXG4gICAgXCJTTk5MRUNcIixcbiAgICBcIkFOTERFRlwiLFxuICAgIFwiQU4yXCIsXG4gICAgXCJTTjJcIixcbiAgICBcIlNOM1wiLFxuICBdXG4gIHN0YXRpYyBjb2Rlc19sZWN0dXJlX3JlZ2V4cDogYW55ID0gbmV3IFJlZ0V4cChcbiAgICBcIl4oPzpcIiArIExlY3R1cmVNYXBwaW5nLmNvZGVzX2xlY3R1cmUuam9pbihcInxcIikgKyBcIikoLS4qKT8kXCIsXG4gIClcblxuICBzdGF0aWMgaXNMZWN0dXJlKGFjdGU6IGFueSkge1xuICAgIHJldHVybiBhY3RlLmNvZGVBY3RlLm1hdGNoKExlY3R1cmVNYXBwaW5nLmNvZGVzX2xlY3R1cmVfcmVnZXhwKVxuICB9XG5cbiAgc3RhdGljIGdldFR5cGUoYWN0ZTogYW55KSB7XG4gICAgaWYgKGFjdGUuY29kZUFjdGUubWF0Y2goL15BTi8pKSByZXR1cm4gXCJBTlwiXG4gICAgZWxzZSBpZiAoYWN0ZS5jb2RlQWN0ZS5tYXRjaCgvXlNOLykpIHJldHVybiBcIlNOXCJcbiAgICBlbHNlIHRocm93IEVycm9yKGAke2FjdGUuY29kZUFjdGV9IGRvZXMgbm90IHN0YXJ0IHdpdGggQU4gb3IgU05gKVxuICB9XG5cbiAgc3RhdGljIG1hcChjb2RlQWN0ZTogYW55KSB7XG4gICAgcmV0dXJuIGNvZGVBY3RlLnJlcGxhY2UoTGVjdHVyZU1hcHBpbmcuY29kZXNfbGVjdHVyZV9yZWdleHAsIGBsZWN0dXJlJDFgKVxuICB9XG5cbiAgc3RhdGljIGdldENvZGVBY3RlKGFjdGU6IGFueSkge1xuICAgIGlmICghTGVjdHVyZU1hcHBpbmcuaXNMZWN0dXJlKGFjdGUpKSByZXR1cm5cblxuICAgIHJldHVybiBMZWN0dXJlTWFwcGluZy5tYXAoYWN0ZS5jb2RlQWN0ZSlcbiAgfVxuXG4gIGFkZChhY3RlOiBhbnkpIHtcbiAgICB0aGlzLmNvZGVzLmFkZChhY3RlLmNvZGVBY3RlKVxuXG4gICAgY29uc3QgdHlwZSA9IExlY3R1cmVNYXBwaW5nLmdldFR5cGUoYWN0ZSlcblxuICAgIGlmICghKGFjdGUubGliZWxsZUFjdGUubm9tQ2Fub25pcXVlIGluIHRoaXMubGliZWxsZSkpXG4gICAgICB0aGlzLmxpYmVsbGVbYWN0ZS5saWJlbGxlQWN0ZS5ub21DYW5vbmlxdWVdID0gbmV3IFNldCgpXG4gICAgdGhpcy5saWJlbGxlW2FjdGUubGliZWxsZUFjdGUubm9tQ2Fub25pcXVlXS5hZGQodHlwZSlcbiAgfVxuXG4gIHJlbWFwKGFjdGU6IGFueSwgY29kZUFjdGU6IHN0cmluZykge1xuICAgIGFjdGUuY29kZUFjdGUgPSBjb2RlQWN0ZVxuXG4gICAgbGV0IHR5cGVzID0gdGhpcy5saWJlbGxlW2FjdGUubGliZWxsZUFjdGUubm9tQ2Fub25pcXVlXVxuICAgIGlmICghKHR5cGVzLmhhcyhcIlNOXCIpICYmIHR5cGVzLmhhcyhcIkFOXCIpKSkge1xuICAgICAgaWYgKHR5cGVzLmhhcyhcIlNOXCIpKSBhY3RlLmxpYmVsbGVBY3RlLm5vbUNhbm9uaXF1ZSArPSBcIiAoU8OpbmF0KVwiXG4gICAgICBlbHNlIGlmICh0eXBlcy5oYXMoXCJBTlwiKSlcbiAgICAgICAgYWN0ZS5saWJlbGxlQWN0ZS5ub21DYW5vbmlxdWUgKz0gXCIgKEFzc2VtYmzDqWUgTmF0aW9uYWxlKVwiXG4gICAgfVxuICB9XG5cbiAgbWVyZ2VDb2Rlcyhjb2RlczogYW55KSB7XG4gICAgZm9yIChjb25zdCBjIG9mIEFycmF5LmZyb20odGhpcy5jb2RlcykpIGNvZGVzLmFkZChjKVxuICB9XG5cbiAgcHJpbnRBbmNob3JzKCkge1xuICAgIGZvciAoY29uc3QgY29kZSBvZiBBcnJheS5mcm9tKHRoaXMuY29kZXMpKSBjb25zb2xlLmxvZyhgLi4gXyR7Y29kZX06YClcbiAgfVxuXG4gIGdldENvZGVzKCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuY29kZXMpLmpvaW4oXCIsXCIpXG4gIH1cbn1cblxuY2xhc3MgTGVjdHVyZU1hcHBlciB7XG4gIG1hcHBpbmc6IGFueSA9IHt9XG5cbiAgaGFzKGNvZGVBY3RlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY29kZUFjdGUgaW4gdGhpcy5tYXBwaW5nXG4gIH1cblxuICBjb2xsZWN0KGFjdGU6IGFueSkge1xuICAgIGNvbnN0IGNvZGVBY3RlID0gTGVjdHVyZU1hcHBpbmcuZ2V0Q29kZUFjdGUoYWN0ZSlcbiAgICBpZiAoY29kZUFjdGUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgbGVjdHVyZXMgPSB0aGlzLm1hcHBpbmdcbiAgICAgIGlmICghKGNvZGVBY3RlIGluIGxlY3R1cmVzKSkgbGVjdHVyZXNbY29kZUFjdGVdID0gbmV3IExlY3R1cmVNYXBwaW5nKClcbiAgICAgIGxlY3R1cmVzW2NvZGVBY3RlXS5hZGQoYWN0ZSlcbiAgICB9XG4gIH1cblxuICByZW1hcChhY3RlOiBhbnkpIHtcbiAgICBjb25zdCBjb2RlQWN0ZSA9IExlY3R1cmVNYXBwaW5nLmdldENvZGVBY3RlKGFjdGUpXG4gICAgaWYgKGNvZGVBY3RlICE9IHVuZGVmaW5lZCkgdGhpcy5tYXBwaW5nW2NvZGVBY3RlXS5yZW1hcChhY3RlLCBjb2RlQWN0ZSlcbiAgfVxuXG4gIG1lcmdlQ29kZXMoY29kZXM6IGFueSwgY29kZUFjdGU6IHN0cmluZykge1xuICAgIHRoaXMubWFwcGluZ1tjb2RlQWN0ZV0ubWVyZ2VDb2Rlcyhjb2RlcylcbiAgfVxuXG4gIHByaW50QW5jaG9ycyhjb2RlQWN0ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5tYXBwaW5nW2NvZGVBY3RlXS5wcmludEFuY2hvcnMoKVxuICB9XG5cbiAgZ2V0Q29kZXMoY29kZUFjdGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm1hcHBpbmdbY29kZUFjdGVdLmdldENvZGVzKClcbiAgfVxufVxuXG5jbGFzcyBBY3Rlc0RvY3VtZW50YXRpb24ge1xuICB2ZXJib3NlOiBib29sZWFuXG4gIHNhbml0eUNoZWNrczogYm9vbGVhblxuICBsZWN0dXJlTWFwcGVyOiBhbnkgPSBuZXcgTGVjdHVyZU1hcHBlcigpXG4gIHJlbWFwcGVkUHJvY2VkdXJlczogYW55ID0ge31cbiAgYW5jaG9yc1ByaW50ZWQ6IGFueSA9IHt9XG4gIGFuY2hvcnM6IGFueSA9IG5ldyBTZXQoKVxuICBjb2RlczogYW55ID0ge31cbiAgcHJvY2VkdXJlczogYW55ID0gbnVsbFxuICBjb2RlMnBhdHRlcm46IGFueSA9IG5ldyBDb2RlMlBhdHRlcm4obnVsbCwge1xuICAgIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgIFwiXigoKC9sZWN0dXJlLykrKXwoKC9sZWN0dXJlLykrL0NNUC8oL2xlY3R1cmUvKSopKSgvQ0MvKT8oL1BST00vKT8oL0FOLUFQUExJLyk/JFwiLFxuICAgICAge1xuICAgICAgICBsZWN0dXJlOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgIFwiXigvREVQT1QvKT8oL0RQVExFVFRSRUNULyk/KC9FVEkvKT8oL0FWQ0UvKT8oL0RHVlQvKT8oL0FDSU4vKT8oL01PVElPTi8pKigvUFJPQ0FDQy8pPygvQ09NLyk/KCgvREVCQVRTLykrKT8oL1JUUklOSS8pPyRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImxlY3R1cmUtQ09NXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9GT05EL3wvQVZJUy8pKyRcIiwge1xuICAgICAgICAgICAgICBcImxlY3R1cmUtQ09NLUZPTkRcIjogbmV3IENvZGUyUGF0dGVybkNvbUZvbmQoKSxcbiAgICAgICAgICAgICAgXCJsZWN0dXJlLUNPTS1BVklTXCI6IG5ldyBDb2RlMlBhdHRlcm5Db21Gb25kKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIFwibGVjdHVyZS1ERUJBVFNcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICAgICAgXCJeKC9TRUFOQ0UvKSooKC9NT1RJT04vKT8oL01PVElPTi1WT1RFLykrKT8oL0RFQy8pPyRcIixcbiAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICAgIENNUDogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICBcIl4oL0RFUE9UL3wvU0FJU0lFLyl7MSwyfSgvQ09NLyk/KC9ERUMvKT8oL0RFQkFUUy1BTi8vREVCQVRTLVNOLyk/XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJDTVAtQ09NXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICAgICAgICAgIFwiXigvTk9NSU4vKT8oL1JBUFBPUlQtQU4vfC9SQVBQT1JULVNOLyl7Mn0kXCIsXG4gICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIFwiQ01QLURFQkFUUy1BTlwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0VBTkNFLykqKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgICAgICAgIFwiQ01QLURFQkFUUy1TTlwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0VBTkNFLykqKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgICBDQzogbmV3IENvZGUyUGF0dGVybihcIl4oL1NBSVNJRS8pKygvQ09OQ0xVU0lPTi8pPyRcIiwge30pLFxuICAgICAgICBQUk9NOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvUFVCLyk/JFwiLCB7fSksXG4gICAgICAgIFwiQU4tQVBQTElcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL1JBUFBPUlQvKT8kXCIsIHt9KSxcbiAgICAgIH0sXG4gICAgKSxcbiAgICBcIkFsbG9jdXRpb24gZHUgUHLDqXNpZGVudCBkZSBsJ0Fzc2VtYmzDqWUgbmF0aW9uYWxlXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICBcIl4vQU4yMS8kXCIsXG4gICAgICB7XG4gICAgICAgIEFOMjE6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9BUEFOLyk/JFwiLCB7fSksXG4gICAgICB9LFxuICAgICksXG4gICAgXCJSw6lzb2x1dGlvbiBBcnRpY2xlIDM0LTFcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0FOTFVOSS8pPyRcIiwge1xuICAgICAgQU5MVU5JOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL0RFQkFUUy8pPygvUlRSSU5JLyk/JFwiLCB7XG4gICAgICAgIFwiQU5MVU5JLURFQkFUU1wiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0VBTkNFLykrKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgIH0pLFxuICAgIH0pLFxuICAgIFLDqXNvbHV0aW9uOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvQU5MVU5JLyk/KC9DQy8pPyRcIiwge1xuICAgICAgQU5MVU5JOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL0NPTS8pPygvREVCQVRTL3wvUlRSSU5JLyk/JFwiLCB7XG4gICAgICAgIFwiQU5MVU5JLUNPTVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvQ0FFLyk/KC9GT05ELyk/JFwiLCB7XG4gICAgICAgICAgXCJBTkxVTkktQ09NLUZPTkRcIjogbmV3IENvZGUyUGF0dGVybkNvbUZvbmQoKSxcbiAgICAgICAgICBcIkFOTFVOSS1DT00tQ0FFXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICAgICAgICBcIl4oL1NBSVNJRS8pPygvTk9NSU4vKT8oL1JFVU5JT04vKT8oL1JBUFBPUlQvKT8oL0RFQy8pPyRcIixcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICksXG4gICAgICAgIH0pLFxuICAgICAgICBcIkFOTFVOSS1ERUJBVFNcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL1NFQU5DRS8pKigvREVDLyk/JFwiLCB7fSksXG4gICAgICB9KSxcbiAgICAgIENDOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0FJU0lFLyk/KC9DT05DTFVTSU9OLyk/JFwiLCB7fSksXG4gICAgfSksXG4gICAgXCJSYXBwb3J0IGQnaW5mb3JtYXRpb24gc2FucyBtaXNzaW9uXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICBcIl4oL0FOMjAvKT8oL0VVLyk/JFwiLFxuICAgICAge1xuICAgICAgICBBTjIwOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvUkFQUE9SVC8pPyRcIiwge30pLFxuICAgICAgICBFVTogbmV3IENvZGUyUGF0dGVybihcIl4oL0RFQy8pKyRcIiwge30pLFxuICAgICAgfSxcbiAgICApLFxuICAgIFwiTWlzc2lvbiBkJ2luZm9ybWF0aW9uXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9BTjIwLyk/JFwiLCB7XG4gICAgICBBTjIwOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvTUlTSU5GLyk/JFwiLCB7XG4gICAgICAgIFwiQU4yMC1NSVNJTkZcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICBcIl4oL0NSRUEvKT8oL05PTUlOLyk/KC9SQVBQT1JULyk/JFwiLFxuICAgICAgICAgIHt9LFxuICAgICAgICApLFxuICAgICAgfSksXG4gICAgfSksXG4gICAgXCJDb21taXNzaW9uIGQnZW5xdcOqdGVcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0FOMjAvKT8kXCIsIHtcbiAgICAgIEFOMjA6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9DT01FTlEvKT8kXCIsIHtcbiAgICAgICAgXCJBTjIwLUNPTUVOUVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgIFwiXigvQ1JFQS8pPygvTk9NSU4vKT8oL1JBUFBPUlQvKT8kXCIsXG4gICAgICAgICAge30sXG4gICAgICAgICksXG4gICAgICB9KSxcbiAgICB9KSxcbiAgICBcIkVuZ2FnZW1lbnQgZGUgbGEgcmVzcG9uc2FiaWxpdMOpIGdvdXZlcm5lbWVudGFsZVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgXCJeL0FOMjEvJFwiLFxuICAgICAge1xuICAgICAgICBBTjIxOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigoKC9NT1RJT04vKSovREVCQVRTLyl8KC9ER1ZULykpezEsMn0kXCIsIHtcbiAgICAgICAgICBcIkFOMjEtREVCQVRTXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9TRUFOQ0UvKSooL01PVElPTi1WT1RFLykqJFwiLCB7fSksXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICApLFxuICAgIFwiTW90aW9uIHLDqWbDqXJlbmRhaXJlXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9sZWN0dXJlLykrJFwiLCB7XG4gICAgICBsZWN0dXJlOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL0NPTS8pPygvREVCQVRTLyk/JFwiLCB7XG4gICAgICAgIFwibGVjdHVyZS1DT01cIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0ZPTkQvKT8kXCIsIHtcbiAgICAgICAgICBcImxlY3R1cmUtQ09NLUZPTkRcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICAgIFwiXigvU0FJU0lFLyk/KC9OT01JTi8pKigvUkFQUE9SVC8pKiRcIixcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICksXG4gICAgICAgIH0pLFxuICAgICAgICBcImxlY3R1cmUtREVCQVRTXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgIH0pLFxuICAgIH0pLFxuICAgIEltbXVuaXTDqTogbmV3IENvZGUyUGF0dGVybihcIl4oL0FOTFVOSS8pKyRcIiwge1xuICAgICAgQU5MVU5JOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL0NPTS8pPygvREVCQVRTLyk/KC9SVFJJTkkvKT8kXCIsIHtcbiAgICAgICAgXCJBTkxVTkktQ09NXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9GT05ELyk/JFwiLCB7XG4gICAgICAgICAgXCJBTkxVTkktQ09NLUZPTkRcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICAgIFwiXigvU0FJU0lFLyk/KC9OT01JTi8pKigvUkFQUE9SVC8pKiRcIixcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICksXG4gICAgICAgIH0pLFxuICAgICAgICBcIkFOTFVOSS1ERUJBVFNcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL1NFQU5DRS8pPygvREVDLykkXCIsIHt9KSxcbiAgICAgIH0pLFxuICAgIH0pLFxuICAgIFwiUmVzcG9uc2FiaWxpdMOpIHDDqW5hbGUgZHUgcHLDqXNpZGVudCBkZSBsYSByw6lwdWJsaXF1ZVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgXCJeL2xlY3R1cmUvJFwiLFxuICAgICAge1xuICAgICAgICBsZWN0dXJlOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL1JFQ0JVUkVBVS8pPyRcIiwge30pLFxuICAgICAgfSxcbiAgICApLFxuICAgIFwiUHJvcG9zaXRpb24gZGUgbG9pIHByw6lzZW50w6llIGVuIGFwcGxpY2F0aW9uIGRlIGwnYXJ0aWNsZSAxMSBkZSBsYSBDb25zdGl0dXRpb25cIjpcbiAgICAgIG5ldyBDb2RlMlBhdHRlcm4oXCJeL2xlY3R1cmUvJFwiLCB7XG4gICAgICAgIGxlY3R1cmU6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9ERVBPVC8pPyRcIiwge30pLFxuICAgICAgfSksXG4gIH0pXG5cbiAgY29uc3RydWN0b3Ioc2FuaXR5Q2hlY2tzOiBib29sZWFuLCB2ZXJib3NlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLnZlcmJvc2UgPSB2ZXJib3NlXG4gICAgdGhpcy5zYW5pdHlDaGVja3MgPSBzYW5pdHlDaGVja3NcbiAgICB0aGlzLnByb2NlZHVyZXMgPSB7fVxuICAgIHRoaXMuY29kZTJwYXR0ZXJuLl9tYXRjaF9jb3VudF8rK1xuICB9XG5cbiAgd2Fsa0ZpbGVzKGRhdGE6IHN0cmluZ1tdLCBhY3Rpb246IGFueSkge1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBnZXRGaWxlcyhkYXRhKSkge1xuICAgICAgY29uc3QgZG9zc2llciA9IGxvYWQoZmlsZSlcbiAgICAgIGxldCBwcm9jZWR1cmU6IHN0cmluZyA9IHRoaXMucmVtYXBQcm9jZWR1cmUoXG4gICAgICAgIGRvc3NpZXIucHJvY2VkdXJlUGFybGVtZW50YWlyZS5saWJlbGxlLFxuICAgICAgKVxuICAgICAgaWYgKCEocHJvY2VkdXJlIGluIHRoaXMucHJvY2VkdXJlcykpIHRoaXMucHJvY2VkdXJlc1twcm9jZWR1cmVdID0ge31cbiAgICAgIGFjdGlvbihcbiAgICAgICAgdGhpcy5wcm9jZWR1cmVzW3Byb2NlZHVyZV0sXG4gICAgICAgIGRvc3NpZXIuYWN0ZXNMZWdpc2xhdGlmcyxcbiAgICAgICAgdGhpcy5jb2RlMnBhdHRlcm5bcHJvY2VkdXJlXSxcbiAgICAgICAgbnVsbCxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBjb2xsZWN0RmlsZXMoZGF0YTogc3RyaW5nW10pIHtcbiAgICB0aGlzLndhbGtGaWxlcyhcbiAgICAgIGRhdGEsXG4gICAgICAoX2FjdGVzOiBhbnksIGFjdGVzTGVnaXNsYXRpZnM6IGFueSwgX2MycDogYW55LCBfcGFyZW50OiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5jb2xsZWN0KGFjdGVzTGVnaXNsYXRpZnMpXG4gICAgICB9LFxuICAgIClcbiAgfVxuXG4gIHByb2Nlc3NGaWxlcyhkYXRhOiBzdHJpbmdbXSkge1xuICAgIHRoaXMud2Fsa0ZpbGVzKFxuICAgICAgZGF0YSxcbiAgICAgIChhY3RlczogYW55LCBhY3Rlc0xlZ2lzbGF0aWZzOiBhbnksIGMycDogYW55LCBwYXJlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLm1lcmdlKGFjdGVzLCBhY3Rlc0xlZ2lzbGF0aWZzLCBjMnAsIHBhcmVudClcbiAgICAgIH0sXG4gICAgKVxuICAgIGlmICh0aGlzLnNhbml0eUNoZWNrcykgdGhpcy52YWxpZGF0ZSgpXG4gIH1cblxuICByZW1hcEFjdGVzKGFjdGVzOiBhbnkpOiBhbnkge1xuICAgIGxldCByZXN1bHRzID0gW11cbiAgICBmb3IgKGNvbnN0IGFjdGUgb2YgYWN0ZXMpIHtcbiAgICAgIHRoaXMubGVjdHVyZU1hcHBlci5yZW1hcChhY3RlKVxuXG4gICAgICAvLyBDQy1TQUlTSUUtIHN1ZmZpeCBkb2VzIG5vdCBpbXBseSBhIGhpZXJhcmNoeVxuICAgICAgYWN0ZS5jb2RlQWN0ZSA9IGFjdGUuY29kZUFjdGUucmVwbGFjZSgvXkNDLVNBSVNJRS4qLywgXCJDQy1TQUlTSUVcIilcblxuICAgICAgcmVzdWx0cy5wdXNoKGFjdGUpXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzXG4gIH1cblxuICBjb2xsZWN0QWN0ZXMoYWN0ZXM6IGFueSk6IGFueSB7XG4gICAgbGV0IHJlc3VsdHMgPSBbXVxuICAgIGZvciAoY29uc3QgYWN0ZSBvZiBhY3Rlcykge1xuICAgICAgdGhpcy5sZWN0dXJlTWFwcGVyLmNvbGxlY3QoYWN0ZSlcblxuICAgICAgcmVzdWx0cy5wdXNoKGFjdGUpXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzXG4gIH1cblxuICByZW1hcFByb2NlZHVyZShwcm9jZWR1cmU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWVyZ2VfcHJvY2VkdXJlczogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoW1xuICAgICAgW1wiUHJvcG9zaXRpb24gZGUgbG9pIG9yZGluYWlyZVwiLCBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCJdLFxuICAgICAgW1wiUHJvamV0IGRlIGxvaSBvcmRpbmFpcmVcIiwgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiXSxcbiAgICAgIFtcbiAgICAgICAgXCJQcm9qZXQgZGUgcmF0aWZpY2F0aW9uIGRlcyB0cmFpdMOpcyBldCBjb252ZW50aW9uc1wiLFxuICAgICAgICBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCIsXG4gICAgICBdLFxuICAgICAgW1wiUHJvamV0IG91IHByb3Bvc2l0aW9uIGRlIGxvaSBvcmdhbmlxdWVcIiwgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiXSxcbiAgICAgIFtcbiAgICAgICAgXCJQcm9qZXQgb3UgcHJvcG9zaXRpb24gZGUgbG9pIGNvbnN0aXR1dGlvbm5lbGxlXCIsXG4gICAgICAgIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIixcbiAgICAgIF0sXG4gICAgICBbXCJQcm9qZXQgZGUgbG9pIGRlIGZpbmFuY2VzIGRlIGwnYW5uw6llXCIsIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIl0sXG4gICAgICBbXCJQcm9qZXQgZGUgbG9pIGRlIGZpbmFuY2VzIHJlY3RpZmljYXRpdmVcIiwgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiXSxcbiAgICAgIFtcbiAgICAgICAgXCJQcm9qZXQgZGUgbG9pIGRlIGZpbmFuY2VtZW50IGRlIGxhIHPDqWN1cml0w6kgc29jaWFsZVwiLFxuICAgICAgICBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCIsXG4gICAgICBdLFxuICAgIF0pXG4gICAgaWYgKG1lcmdlX3Byb2NlZHVyZXMuaGFzKHByb2NlZHVyZSkpIHtcbiAgICAgIHRoaXMucmVtYXBwZWRQcm9jZWR1cmVzW3Byb2NlZHVyZV0gPSBudWxsXG4gICAgICByZXR1cm4gbWVyZ2VfcHJvY2VkdXJlcy5nZXQocHJvY2VkdXJlKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcHJvY2VkdXJlXG4gICAgfVxuICB9XG5cbiAgLy8gcmV0dXJuIHRoZSBjb2RlQWN0ZXMgaW4gdGhlIHNhbWUgb3JkZXIgdGhleSBhcHBlYXIgaW4gdGhlIHJlZ2V4cFxuICBvcmRlcmVkQ29kZXMoY29kZXM6IGFueSwgYzJwOiBhbnksIHBhcmVudDogc3RyaW5nKTogU2V0PHN0cmluZz4ge1xuICAgIGNvZGVzID0gbmV3IFNldChjb2RlcylcbiAgICBpZiAoIXRoaXMuc2FuaXR5Q2hlY2tzKSByZXR1cm4gY29kZXNcbiAgICBsZXQgb3JkZXJlZCA9IGMycFtcIl9wYXR0ZXJuX1wiXS5tYXRjaChuZXcgUmVnRXhwKFwiLy4qPy9cIiwgXCJnXCIpKVxuICAgIG9yZGVyZWQgPSBvcmRlcmVkLm1hcCgoeDogc3RyaW5nKSA9PiB4LnJlcGxhY2UobmV3IFJlZ0V4cChcIi8oLiopL1wiKSwgXCIkMVwiKSlcbiAgICBpZiAocGFyZW50ICE9IG51bGwpIG9yZGVyZWQgPSBvcmRlcmVkLm1hcCgoeDogc3RyaW5nKSA9PiBgJHtwYXJlbnR9LSR7eH1gKVxuICAgIG9yZGVyZWQgPSBuZXcgU2V0KG9yZGVyZWQpXG4gICAgYXNzZXJ0KGVxU2V0KG9yZGVyZWQsIGNvZGVzKSwgYCR7Wy4uLm9yZGVyZWRdfSAhPSAke1suLi5jb2Rlc119YClcbiAgICByZXR1cm4gb3JkZXJlZFxuICB9XG5cbiAgdmFsaWRhdGVDaHJvbm9sb2d5KGFjdGVzTGVnaXNsYXRpZnM6IGFueSwgYzJwOiBhbnksIHBhcmVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcGF0dGVybiA9IGMycFtcIl9wYXR0ZXJuX1wiXVxuICAgIGNvbnN0IHNlcXVlbmNlID0gYWN0ZXNMZWdpc2xhdGlmc1xuICAgICAgLm1hcCgoeDogYW55KSA9PiBgLyR7eC5jb2RlQWN0ZX0vYC5yZXBsYWNlKGAvJHtwYXJlbnR9LWAsIFwiL1wiKSlcbiAgICAgIC5qb2luKFwiXCIpXG4gICAgYXNzZXJ0KFxuICAgICAgc2VxdWVuY2UubWF0Y2gobmV3IFJlZ0V4cChwYXR0ZXJuKSksXG4gICAgICBgJHtwYXR0ZXJufSBkb2VzIG5vdCBtYXRjaCAke3NlcXVlbmNlfWAsXG4gICAgKVxuICAgIGMycC5fbWF0Y2hfY291bnRfKytcbiAgfVxuXG4gIG1lcmdlQWN0ZShhY3RlczogYW55LCBhY3RlOiBhbnksIGMycDogYW55LCBwYXJlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGxldCBjb2RlOiBzdHJpbmcgPSBhY3RlLmNvZGVBY3RlXG4gICAgbGV0IHNob3J0Q29kZTogc3RyaW5nID0gY29kZS5yZXBsYWNlKG5ldyBSZWdFeHAoYF4ke3BhcmVudH0tYCksIFwiXCIpXG4gICAgc2hvcnRDb2RlID0gc2hvcnRDb2RlLnJlcGxhY2UoLy0oQU58U04pJC8sIFwiXCIpXG4gICAgdGhpcy5jb2Rlc1tzaG9ydENvZGVdID0gbnVsbFxuICAgIGxldCBuYW1lOiBzdHJpbmcgPSBhY3RlLmxpYmVsbGVBY3RlLm5vbUNhbm9uaXF1ZVxuICAgIGlmICghKGNvZGUgaW4gYWN0ZXMpKSB7XG4gICAgICBhY3Rlc1tjb2RlXSA9IHtcbiAgICAgICAgdHlwZTogYWN0ZS54c2lUeXBlLFxuICAgICAgICBuYW1lOiBuZXcgU2V0KFtuYW1lXSksXG4gICAgICAgIHNob3J0Q29kZTogc2hvcnRDb2RlLFxuICAgICAgICBhY3Rlczoge30sXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjdGVzW2NvZGVdLm5hbWUuYWRkKG5hbWUpXG4gICAgfVxuICAgIGlmIChcImFjdGVzTGVnaXNsYXRpZnNcIiBpbiBhY3RlKVxuICAgICAgdGhpcy5tZXJnZShhY3Rlc1tjb2RlXS5hY3RlcywgYWN0ZS5hY3Rlc0xlZ2lzbGF0aWZzLCBjMnBbY29kZV0sIGNvZGUpXG4gIH1cblxuICBtZXJnZShhY3RlczogYW55LCBhY3Rlc0xlZ2lzbGF0aWZzOiBhbnksIGMycDogYW55LCBwYXJlbnQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGwgPSB0aGlzLnJlbWFwQWN0ZXMoYWN0ZXNMZWdpc2xhdGlmcylcbiAgICB0aGlzLnZhbGlkYXRlQ2hyb25vbG9neShsLCBjMnAsIHBhcmVudClcbiAgICBmb3IgKGNvbnN0IGFjdGUgb2YgbCkgdGhpcy5tZXJnZUFjdGUoYWN0ZXMsIGFjdGUsIGMycCwgcGFyZW50KVxuICB9XG5cbiAgY29sbGVjdChhY3Rlc0xlZ2lzbGF0aWZzOiBhbnkpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGFjdGUgb2YgdGhpcy5jb2xsZWN0QWN0ZXMoYWN0ZXNMZWdpc2xhdGlmcykpXG4gICAgICBpZiAoXCJhY3Rlc0xlZ2lzbGF0aWZzXCIgaW4gYWN0ZSkgdGhpcy5jb2xsZWN0KGFjdGUuYWN0ZXNMZWdpc2xhdGlmcylcbiAgfVxuXG4gIHZhbGlkYXRlTGV2ZWwoYzJwOiBhbnksIHBhdGg6IGFueSkge1xuICAgIGFzc2VydChjMnAuX21hdGNoX2NvdW50XyA+IDAsIGAke3BhdGh9IGlzIG5ldmVyIHVzZWRgKVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGMycCkgYXMgW3N0cmluZywgYW55XVtdKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lID09IFwiQ29kZTJQYXR0ZXJuXCIpXG4gICAgICAgIHRoaXMudmFsaWRhdGVMZXZlbCh2YWx1ZSwgcGF0aC5jb25jYXQoW2tleV0pKVxuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlKCkge1xuICAgIHRoaXMudmFsaWRhdGVMZXZlbCh0aGlzLmNvZGUycGF0dGVybiwgW10pXG4gIH1cblxuICBwcmludEVudHJ5KHNlY3Rpb25zOiBzdHJpbmcsIGVudHJ5OiBzdHJpbmcsIGNvZGVzOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0aXRsZSA9IGBcXGAke2VudHJ5fVxcYF9fYFxuICAgIGNvbnNvbGUubG9nKHRpdGxlKVxuICAgIGNvbnN0IHVuZGVybGluZSA9IG5ldyBBcnJheSh0aXRsZS5sZW5ndGggKyAxKS5qb2luKHNlY3Rpb25zWzBdKVxuICAgIGNvbnNvbGUubG9nKHVuZGVybGluZSlcbiAgICBjb25zb2xlLmxvZyhjb2RlcylcbiAgfVxuXG4gIGFkZEFuY2hvcnMoa2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoa2V5IGluIHRoaXMuYW5jaG9yc1ByaW50ZWQpIHJldHVyblxuICAgIGlmICh0aGlzLmxlY3R1cmVNYXBwZXIuaGFzKGtleSkpXG4gICAgICB0aGlzLmxlY3R1cmVNYXBwZXIubWVyZ2VDb2Rlcyh0aGlzLmFuY2hvcnMsIGtleSlcbiAgICBlbHNlIHRoaXMuYW5jaG9ycy5hZGQoa2V5KVxuICB9XG5cbiAgcHJpbnRBbmNob3JzKGtleTogc3RyaW5nKSB7XG4gICAgaWYgKGtleSBpbiB0aGlzLmFuY2hvcnNQcmludGVkKSByZXR1cm5cbiAgICB0aGlzLmFuY2hvcnNQcmludGVkW2tleV0gPSBudWxsXG4gICAgaWYgKHRoaXMubGVjdHVyZU1hcHBlci5oYXMoa2V5KSkgdGhpcy5sZWN0dXJlTWFwcGVyLnByaW50QW5jaG9ycyhrZXkpXG4gICAgZWxzZSBjb25zb2xlLmxvZyhgLi4gXyR7a2V5fTpgKVxuICB9XG5cbiAgZ2V0Q29kZXMoa2V5OiBzdHJpbmcsIHNob3J0Q29kZTogc3RyaW5nKSB7XG4gICAgaWYgKGtleSBpbiB0aGlzLmFuY2hvcnNQcmludGVkKSByZXR1cm4gYGNmIFxcXFwqJHtzaG9ydENvZGV9XFxcXCpgXG4gICAgaWYgKHRoaXMubGVjdHVyZU1hcHBlci5oYXMoa2V5KSkgcmV0dXJuIHRoaXMubGVjdHVyZU1hcHBlci5nZXRDb2RlcyhrZXkpXG4gICAgZWxzZSByZXR1cm4ga2V5XG4gIH1cblxuICByZW5hbWVDTVAoa2V5OiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICAgIGlmIChrZXkuc3RhcnRzV2l0aChcIkNNUFwiKSkge1xuICAgICAgaWYgKGtleS5lbmRzV2l0aChcIi1TTlwiKSkgcmV0dXJuIGAke25hbWV9IChTw6luYXQpYFxuICAgICAgZWxzZSBpZiAoa2V5LmVuZHNXaXRoKFwiLUFOXCIpKSByZXR1cm4gYCR7bmFtZX0gKEFzc2VtYmzDqWUgTmF0aW9uYWxlKWBcbiAgICAgIGVsc2UgcmV0dXJuIG5hbWVcbiAgICB9IGVsc2UgcmV0dXJuIG5hbWVcbiAgfVxuXG4gIHByaW50TGV2ZWwoYWN0ZXM6IGFueSwgc2VjdGlvbnM6IHN0cmluZywgYzJwOiBhbnksIHBhcmVudDogYW55KSB7XG4gICAgY29uc3Qga2V5czogU2V0PHN0cmluZz4gPSB0aGlzLm9yZGVyZWRDb2RlcyhPYmplY3Qua2V5cyhhY3RlcyksIGMycCwgcGFyZW50KVxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gYWN0ZXNba2V5XVxuICAgICAgbGV0IG5hbWUgPSBBcnJheS5mcm9tKHZhbHVlLm5hbWUpLmpvaW4oXCIsIFwiKVxuICAgICAgbmFtZSA9IHRoaXMucmVuYW1lQ01QKGtleSwgbmFtZSlcbiAgICAgIGNvbnN0IGNvZGVzID0gdGhpcy5nZXRDb2RlcyhrZXksIHZhbHVlLnNob3J0Q29kZSlcbiAgICAgIHRoaXMuYWRkQW5jaG9ycyhrZXkpXG4gICAgICB0aGlzLnByaW50QW5jaG9ycyhrZXkpXG4gICAgICBjb25zb2xlLmxvZyhcIlwiKVxuICAgICAgdGhpcy5wcmludEVudHJ5KHNlY3Rpb25zLCBgJHtuYW1lfSA8JHt2YWx1ZS5zaG9ydENvZGV9VE9DXz5gLCBjb2RlcylcbiAgICAgIGNvbnNvbGUubG9nKFwiXCIpXG4gICAgICBpZiAoT2JqZWN0LmtleXModmFsdWUuYWN0ZXMpLmxlbmd0aCA+IDApXG4gICAgICAgIHRoaXMucHJpbnRMZXZlbCh2YWx1ZS5hY3Rlcywgc2VjdGlvbnMuc3Vic3RyaW5nKDEpLCBjMnBba2V5XSwga2V5KVxuICAgIH1cbiAgfVxuXG4gIHByaW50Q29kZXMoKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5jb2RlcykpXG4gICAgICBjb25zb2xlLmxvZyhgLi4gXyR7a2V5fVRPQzogaHR0cDovL2ApXG4gIH1cblxuICBwcmludEFuY2hvcnNJbmRleCgpIHtcbiAgICBmb3IgKGNvbnN0IGNvZGUgb2YgQXJyYXkuZnJvbSh0aGlzLmFuY2hvcnMpKVxuICAgICAgY29uc29sZS5sb2coYCogOnJlZjpcXGAke2NvZGV9IDwke2NvZGV9PlxcYGApXG4gIH1cblxuICBnZXRBZ2dyZWdhdGVkKHByb2NlZHVyZTogc3RyaW5nKSB7XG4gICAgaWYgKHByb2NlZHVyZSA9PSBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCIpIHtcbiAgICAgIGNvbnN0IHJlbWFwcGVkID0gT2JqZWN0LmtleXModGhpcy5yZW1hcHBlZFByb2NlZHVyZXMpLmpvaW4oXCIsIFwiKVxuICAgICAgcmV0dXJuIGAgKGFncsOpZ2F0aW9uIGRlICR7cmVtYXBwZWR9KWBcbiAgICB9IGVsc2UgcmV0dXJuIFwiXCJcbiAgfVxuXG4gIHByaW50KCk6IHZvaWQge1xuICAgIHRoaXMuYW5jaG9yc1ByaW50ZWQgPSB7fVxuICAgIGZvciAoY29uc3QgW2tleSwgYWN0ZXNdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucHJvY2VkdXJlcykgYXMgW1xuICAgICAgc3RyaW5nLFxuICAgICAgYW55LFxuICAgIF1bXSkge1xuICAgICAgY29uc3QgY29kZSA9IGtleS5yZXBsYWNlKC8gKy9nLCBcIl9cIilcbiAgICAgIHRoaXMuY29kZXNbY29kZV0gPSBudWxsXG4gICAgICBjb25zdCBhZ2dyZWdhdGVkID0gdGhpcy5nZXRBZ2dyZWdhdGVkKGtleSlcbiAgICAgIGNvbnN0IHRpdGxlID0gYFxcYCR7a2V5fSA8JHtjb2RlfVRPQ18+XFxgX18ke2FnZ3JlZ2F0ZWR9YFxuICAgICAgY29uc29sZS5sb2codGl0bGUpXG4gICAgICBjb25zdCB1bmRlcmxpbmUgPSBuZXcgQXJyYXkodGl0bGUubGVuZ3RoICsgMSkuam9pbihcIj1cIilcbiAgICAgIGNvbnNvbGUubG9nKHVuZGVybGluZSlcbiAgICAgIHRoaXMucHJpbnRMZXZlbChhY3RlcywgXCItfi4nXCIsIHRoaXMuY29kZTJwYXR0ZXJuW2tleV0sIG51bGwpXG4gICAgfVxuICAgIHRoaXMucHJpbnRDb2RlcygpXG4gICAgdGhpcy5wcmludEFuY2hvcnNJbmRleCgpXG4gIH1cbn1cblxuZnVuY3Rpb24gbWFpbihhcmd2OiBhbnkpOiBudW1iZXIge1xuICBjb25zdCBvcHRpb25zID0gcGFyc2VBcmdzKGFyZ3YpXG4gIGlmIChvcHRpb25zID09PSBudWxsKSByZXR1cm4gMVxuICBsZXQgZG9jID0gbmV3IEFjdGVzRG9jdW1lbnRhdGlvbihcbiAgICAhb3B0aW9uc1tcIm5vLXNhbml0eS1jaGVja3NcIl0sXG4gICAgb3B0aW9ucy52ZXJib3NlLFxuICApXG4gIGRvYy5jb2xsZWN0RmlsZXMob3B0aW9ucy5kYXRhKVxuICBkb2MucHJvY2Vzc0ZpbGVzKG9wdGlvbnMuZGF0YSlcbiAgZG9jLnByaW50KClcbiAgcmV0dXJuIDBcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAocHJvY2Vzcy5hcmd2WzFdLmVuZHNXaXRoKFwiZG9jdW1lbnRfZG9zc2llcnNfbGVnaXNsYXRpZnMudHNcIikpXG4gIHByb2Nlc3MuZXhpdChtYWluKHByb2Nlc3MuYXJndikpXG4iXSwibWFwcGluZ3MiOiI7OztBQUFBLE9BQU9BLGVBQWUsTUFBTSxtQkFBbUI7QUFDL0MsT0FBT0MsZ0JBQWdCLE1BQU0sb0JBQW9CO0FBQ2pELE9BQU9DLE1BQU0sTUFBTSxRQUFRO0FBQUEsU0FDbEJDLElBQUksRUFBRUMsUUFBUTtBQUV2QixTQUFTQyxTQUFTLENBQUNDLElBQWMsRUFBTztFQUN0QyxNQUFNQyxrQkFBa0IsR0FBRyxDQUN6QjtJQUNFQyxXQUFXLEVBQUUseURBQXlEO0lBQ3RFQyxhQUFhLEVBQUUsSUFBSTtJQUNuQkMsUUFBUSxFQUFFLElBQUk7SUFDZEMsSUFBSSxFQUFFLE1BQU07SUFDWkMsSUFBSSxFQUFFQztFQUNSLENBQUMsRUFDRDtJQUNFRixJQUFJLEVBQUUsa0JBQWtCO0lBQ3hCQyxJQUFJLEVBQUVFLE9BQU87SUFDYk4sV0FBVyxFQUFFO0VBQ2YsQ0FBQyxFQUNEO0lBQ0VHLElBQUksRUFBRSxTQUFTO0lBQ2ZDLElBQUksRUFBRUUsT0FBTztJQUNiTixXQUFXLEVBQUU7RUFDZixDQUFDLEVBQ0Q7SUFDRUcsSUFBSSxFQUFFLE1BQU07SUFDWkgsV0FBVyxFQUFFO0VBQ2YsQ0FBQyxDQUNGO0VBQ0QsTUFBTU8sUUFBUSxHQUFHLENBQ2Y7SUFDRUMsTUFBTSxFQUFFLCtDQUErQztJ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
@@ -37,7 +37,7 @@ var _quicktypeCore = require("quicktype-core");
37
37
  var _datasets = require("../datasets");
38
38
  var _file_systems = require("../file_systems");
39
39
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
40
- function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (undefined === method) { if (context.delegate = null, "throw" === context.method) { if (delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel; context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
40
+ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
41
41
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
42
42
  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
43
43
  function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
@@ -50,7 +50,7 @@ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symb
50
50
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
51
51
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
52
52
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
53
- function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
53
+ function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
54
54
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
55
55
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
56
56
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
@@ -43,10 +43,10 @@ var _datasets = require("../datasets");
43
43
  var _loaders = require("../loaders");
44
44
  var _acteurs_et_organes = require("../types/acteurs_et_organes");
45
45
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
46
- function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (undefined === method) { if (context.delegate = null, "throw" === context.method) { if (delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel; context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
46
+ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
47
47
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
48
48
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
49
- function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
49
+ function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
50
50
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
51
51
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
52
52
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }