sonamu 0.11.11 → 0.11.13

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 (44) hide show
  1. package/dist/code-formatting/index.d.ts +8 -0
  2. package/dist/code-formatting/index.d.ts.map +1 -0
  3. package/dist/code-formatting/index.js +27 -0
  4. package/dist/code-formatting/oxfmt.d.ts +5 -0
  5. package/dist/code-formatting/oxfmt.d.ts.map +1 -0
  6. package/dist/code-formatting/oxfmt.js +61 -0
  7. package/dist/code-formatting/oxlint.d.ts +30 -0
  8. package/dist/code-formatting/oxlint.d.ts.map +1 -0
  9. package/dist/code-formatting/oxlint.js +130 -0
  10. package/dist/cone/cone-generator.js +1 -1
  11. package/dist/dict/sonamu-dictionary.js +3 -3
  12. package/dist/entity/entity.d.ts.map +1 -1
  13. package/dist/entity/entity.js +3 -3
  14. package/dist/migration/code-generation.d.ts.map +1 -1
  15. package/dist/migration/code-generation.js +3 -3
  16. package/dist/syncer/code-generator.d.ts.map +1 -1
  17. package/dist/syncer/code-generator.js +3 -3
  18. package/dist/syncer/file-copy.js +3 -3
  19. package/dist/syncer/filesystem-dependencies.js +1 -1
  20. package/dist/syncer/syncer-actions.d.ts.map +1 -1
  21. package/dist/syncer/syncer-actions.js +3 -3
  22. package/dist/template/implementations/sd.template.js +1 -1
  23. package/dist/tooling/cdd-service.js +1 -1
  24. package/dist/ui-web/assets/index-BMdIyKXS.css +1 -0
  25. package/dist/ui-web/assets/{index-C_RUxOdN.js → index-ClxAM2Lk.js} +37 -37
  26. package/dist/ui-web/index.html +2 -2
  27. package/dist/utils/fs-utils.js +3 -3
  28. package/package.json +3 -3
  29. package/src/code-formatting/__tests__/formatter-batching.test.ts +210 -0
  30. package/src/{utils → code-formatting}/__tests__/formatter-bin.test.ts +2 -2
  31. package/src/code-formatting/index.ts +29 -0
  32. package/src/code-formatting/oxfmt.ts +63 -0
  33. package/src/{utils/formatter.ts → code-formatting/oxlint.ts} +67 -95
  34. package/src/dict/sonamu-dictionary.ts +1 -1
  35. package/src/entity/entity.ts +1 -1
  36. package/src/migration/code-generation.ts +1 -1
  37. package/src/syncer/code-generator.ts +1 -1
  38. package/src/syncer/file-copy.ts +1 -1
  39. package/src/syncer/syncer-actions.ts +1 -1
  40. package/src/utils/fs-utils.ts +1 -1
  41. package/dist/ui-web/assets/index-5i4uZVES.css +0 -1
  42. package/dist/utils/formatter.d.ts +0 -14
  43. package/dist/utils/formatter.d.ts.map +0 -1
  44. package/dist/utils/formatter.js +0 -147
@@ -1,7 +1,7 @@
1
1
  import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
2
  import { init_runtime_value, isStringValue } from "../utils/runtime-value.js";
3
3
  import { differenceWith, init_utils, intersectionBy } from "../utils/utils.js";
4
- import { formatCode, init_formatter } from "../utils/formatter.js";
4
+ import { formatCode, init_code_formatting } from "../code-formatting/index.js";
5
5
  import { init_types, isSearchTextProp } from "../types/types.js";
6
6
  import { EntityManager, init_entity_manager } from "../entity/entity-manager.js";
7
7
  import { Naite, init_naite } from "../naite/naite.js";
@@ -1140,10 +1140,10 @@ function getPkPgType(col) {
1140
1140
  }
1141
1141
  var NUMERIC_DEFAULT_PRECISION, NUMERIC_DEFAULT_SCALE, SEARCH_TEXT_HELPER_DEFINITIONS, SearchTextExpressionParser;
1142
1142
  var init_code_generation = __esmMin((() => {
1143
+ init_code_formatting();
1143
1144
  init_entity_manager();
1144
1145
  init_naite();
1145
1146
  init_types();
1146
- init_formatter();
1147
1147
  init_runtime_value();
1148
1148
  init_utils();
1149
1149
  init_index_where_predicate();
@@ -1337,4 +1337,4 @@ $$\`);`
1337
1337
  init_code_generation();
1338
1338
  export { generateAlterCode, generateCreateCode, getAlterIndexesTo, init_code_generation, setMigrationIndexDefaults };
1339
1339
 
1340
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1nZW5lcmF0aW9uLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWdyYXRpb24vY29kZS1nZW5lcmF0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBlcXVhbCBmcm9tIFwiZmFzdC1kZWVwLWVxdWFsXCI7XG5pbXBvcnQgeyB0eXBlIEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgYWxwaGFiZXRpY2FsLCBkaWZmIH0gZnJvbSBcInJhZGFzaGlcIjtcblxuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IE5haXRlIH0gZnJvbSBcIi4uL25haXRlL25haXRlXCI7XG5pbXBvcnQge1xuICB0eXBlIEVudGl0eVByb3AsXG4gIHR5cGUgR2VuTWlncmF0aW9uQ29kZSxcbiAgdHlwZSBNaWdyYXRpb25Db2x1bW4sXG4gIHR5cGUgTWlncmF0aW9uRm9yZWlnbixcbiAgdHlwZSBNaWdyYXRpb25JbmRleCxcbiAgdHlwZSBNaWdyYXRpb25TZXQsXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgaXNTZWFyY2hUZXh0UHJvcCB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgZm9ybWF0Q29kZSB9IGZyb20gXCIuLi91dGlscy9mb3JtYXR0ZXJcIjtcbmltcG9ydCB7IGlzU3RyaW5nVmFsdWUgfSBmcm9tIFwiLi4vdXRpbHMvcnVudGltZS12YWx1ZVwiO1xuaW1wb3J0IHsgZGlmZmVyZW5jZVdpdGgsIGludGVyc2VjdGlvbkJ5IH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQge1xuICBub3JtYWxpemVJbmRleFdoZXJlUHJlZGljYXRlLFxuICBub3JtYWxpemVJbmRleFdoZXJlUHJlZGljYXRlRm9yQ29tcGFyaXNvbixcbn0gZnJvbSBcIi4vaW5kZXgtd2hlcmUtcHJlZGljYXRlXCI7XG5pbXBvcnQgeyBQb3N0Z3JlU1FMU2NoZW1hUmVhZGVyIH0gZnJvbSBcIi4vcG9zdGdyZXNxbC1zY2hlbWEtcmVhZGVyXCI7XG5cbi8qKlxuICog7Lus65+8IOygleydmCDqsrDqs7wg7YOA7J6FXG4gKiAtIGJ1aWxkZXI6IEtuZXggdGFibGUgYnVpbGRlciDrqZTshJzrk5zroZwg7Iuk7ZaJ7ZWgIOq1rOusuCAodGFibGUueHh4KCkpXG4gKiAtIHJhdzoga25leC5yYXcoKeuhnCDsi6TtlontlaAg6rWs66y4XG4gKi9cbnR5cGUgQ29sdW1uRGVmaW5pdGlvblJlc3VsdCA9IHtcbiAgYnVpbGRlcjogc3RyaW5nW107XG4gIHJhdzogc3RyaW5nW107XG59O1xuXG5jb25zdCBOVU1FUklDX0RFRkFVTFRfUFJFQ0lTSU9OID0gODtcbmNvbnN0IE5VTUVSSUNfREVGQVVMVF9TQ0FMRSA9IDI7XG5cbnR5cGUgU2VhcmNoVGV4dEhlbHBlcktpbmQgPSBcInRleHQtYXJyYXlcIiB8IFwianNvbmItYXJyYXlcIjtcblxudHlwZSBTZWFyY2hUZXh0RXhwcmVzc2lvblRva2VuID1cbiAgfCB7IHR5cGU6IFwiaWRlbnRpZmllclwiOyB2YWx1ZTogc3RyaW5nIH1cbiAgfCB7IHR5cGU6IFwicXVvdGVkSWRlbnRpZmllclwiOyB2YWx1ZTogc3RyaW5nIH1cbiAgfCB7IHR5cGU6IFwic3RyaW5nXCI7IHZhbHVlOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogXCJzeW1ib2xcIjsgdmFsdWU6IFwiKFwiIHwgXCIpXCIgfCBcIixcIiB9XG4gIHwgeyB0eXBlOiBcIm9wZXJhdG9yXCI7IHZhbHVlOiBcInx8XCIgfCBcIjo6XCIgfTtcblxudHlwZSBTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGUgPVxuICB8IHsgdHlwZTogXCJpZGVudGlmaWVyXCI7IG5hbWU6IHN0cmluZzsgcXVvdGVkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6IFwic3RyaW5nXCI7IHZhbHVlOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogXCJib29sZWFuXCI7IHZhbHVlOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6IFwiZnVuY3Rpb25cIjsgbmFtZTogc3RyaW5nOyBhcmdzOiBTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGVbXSB9XG4gIHwgeyB0eXBlOiBcImNvbmNhdFwiOyBwYXJ0czogU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlW10gfVxuICB8IHsgdHlwZTogXCJjb2xsYXRlXCI7IGV4cHI6IFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZTsgY29sbGF0aW9uOiBzdHJpbmc7IHF1b3RlZDogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiBcImNhc3RcIjsgZXhwcjogU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlOyB0YXJnZXRUeXBlOiBzdHJpbmcgfTtcblxuY29uc3QgU0VBUkNIX1RFWFRfSEVMUEVSX0RFRklOSVRJT05TID0ge1xuICBcInRleHQtYXJyYXlcIjogYGF3YWl0IGtuZXgucmF3KFxcYENSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHNvbmFtdV90ZXh0X2FycmF5X2FnZyhhcnIgdGV4dFtdLCBjaSBib29sZWFuIERFRkFVTFQgdHJ1ZSlcblJFVFVSTlMgdGV4dFxuTEFOR1VBR0Ugc3FsIElNTVVUQUJMRSBQQVJBTExFTCBTQUZFIFJFVFVSTlMgTlVMTCBPTiBOVUxMIElOUFVUXG5BUyAkJFxuICBTRUxFQ1Qgc3RyaW5nX2FnZyhcbiAgICBDQVNFIFdIRU4gY2kgVEhFTiBsb3dlcih2YWx1ZSkgRUxTRSB2YWx1ZSBFTkQsXG4gICAgJyAnXG4gIClcbiAgRlJPTSB1bm5lc3QoYXJyKSBBUyB2YWx1ZVxuJCRcXGApO2AsXG4gIFwianNvbmItYXJyYXlcIjogYGF3YWl0IGtuZXgucmF3KFxcYENSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHNvbmFtdV9qc29uYl9hcnJheV9hZ2coYXJyIGpzb25iLCBjaSBib29sZWFuIERFRkFVTFQgdHJ1ZSlcblJFVFVSTlMgdGV4dFxuTEFOR1VBR0Ugc3FsIElNTVVUQUJMRSBQQVJBTExFTCBTQUZFIFJFVFVSTlMgTlVMTCBPTiBOVUxMIElOUFVUXG5BUyAkJFxuICBTRUxFQ1Qgc3RyaW5nX2FnZyhcbiAgICBDQVNFIFdIRU4gY2kgVEhFTiBsb3dlcih2YWx1ZSkgRUxTRSB2YWx1ZSBFTkQsXG4gICAgJyAnXG4gIClcbiAgRlJPTSBqc29uYl9hcnJheV9lbGVtZW50c190ZXh0KGFycilcbiQkXFxgKTtgLFxufSBzYXRpc2ZpZXMgUmVjb3JkPFNlYXJjaFRleHRIZWxwZXJLaW5kLCBzdHJpbmc+O1xuXG5jbGFzcyBTZWFyY2hUZXh0RXhwcmVzc2lvblBhcnNlciB7XG4gIHByaXZhdGUgaW5kZXggPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdG9rZW5zOiBTZWFyY2hUZXh0RXhwcmVzc2lvblRva2VuW10pIHt9XG5cbiAgaXNBdEVuZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pbmRleCA+PSB0aGlzLnRva2Vucy5sZW5ndGg7XG4gIH1cblxuICBwYXJzZUV4cHJlc3Npb24oKTogU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUNvbmNhdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUNvbmNhdCgpOiBTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGUge1xuICAgIGNvbnN0IHBhcnRzID0gW3RoaXMucGFyc2VQb3N0Zml4KCldO1xuXG4gICAgd2hpbGUgKHRoaXMubWF0Y2hPcGVyYXRvcihcInx8XCIpKSB7XG4gICAgICBwYXJ0cy5wdXNoKHRoaXMucGFyc2VQb3N0Zml4KCkpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPT09IDEgPyBwYXJ0c1swXSA6IHsgdHlwZTogXCJjb25jYXRcIiwgcGFydHMgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VQb3N0Zml4KCk6IFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZSB7XG4gICAgbGV0IG5vZGUgPSB0aGlzLnBhcnNlUHJpbWFyeSgpO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmICh0aGlzLm1hdGNoT3BlcmF0b3IoXCI6OlwiKSkge1xuICAgICAgICBub2RlID0ge1xuICAgICAgICAgIHR5cGU6IFwiY2FzdFwiLFxuICAgICAgICAgIGV4cHI6IG5vZGUsXG4gICAgICAgICAgdGFyZ2V0VHlwZTogdGhpcy5wYXJzZVR5cGVOYW1lKCksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5tYXRjaElkZW50aWZpZXIoXCJjb2xsYXRlXCIpKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jb25zdW1lQ29sbGF0aW9uVG9rZW4oKTtcbiAgICAgICAgbm9kZSA9IHtcbiAgICAgICAgICB0eXBlOiBcImNvbGxhdGVcIixcbiAgICAgICAgICBleHByOiBub2RlLFxuICAgICAgICAgIGNvbGxhdGlvbjogdG9rZW4udmFsdWUsXG4gICAgICAgICAgcXVvdGVkOiB0b2tlbi50eXBlID09PSBcInF1b3RlZElkZW50aWZpZXJcIixcbiAgICAgICAgfTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVByaW1hcnkoKTogU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuY29uc3VtZVRva2VuKFwi7ZGc7ZiE7IudXCIpO1xuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFwic3ltYm9sXCIgJiYgdG9rZW4udmFsdWUgPT09IFwiKFwiKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgIHRoaXMuZXhwZWN0U3ltYm9sKFwiKVwiKTtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIGlmICh0b2tlbi50eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInN0cmluZ1wiLCB2YWx1ZTogdG9rZW4udmFsdWUgfTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gXCJpZGVudGlmaWVyXCIgfHwgdG9rZW4udHlwZSA9PT0gXCJxdW90ZWRJZGVudGlmaWVyXCIpIHtcbiAgICAgIGNvbnN0IGxvd2VyTmFtZSA9IHRva2VuLnZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAodG9rZW4udHlwZSA9PT0gXCJpZGVudGlmaWVyXCIgJiYgKGxvd2VyTmFtZSA9PT0gXCJ0cnVlXCIgfHwgbG93ZXJOYW1lID09PSBcImZhbHNlXCIpKSB7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwiYm9vbGVhblwiLCB2YWx1ZTogbG93ZXJOYW1lID09PSBcInRydWVcIiB9O1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5tYXRjaFN5bWJvbChcIihcIikpIHtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFwiaWRlbnRpZmllclwiICYmIGxvd2VyTmFtZSA9PT0gXCJ0cmltXCIgJiYgdGhpcy5pc1RyaW1Cb3RoRnJvbUZvcm0oKSkge1xuICAgICAgICAgIHRoaXMuaW5kZXggKz0gMjtcbiAgICAgICAgICBjb25zdCBhcmcgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICAgIHRoaXMuZXhwZWN0U3ltYm9sKFwiKVwiKTtcbiAgICAgICAgICByZXR1cm4geyB0eXBlOiBcImZ1bmN0aW9uXCIsIG5hbWU6IFwidHJpbVwiLCBhcmdzOiBbYXJnXSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJncyA9IHRoaXMucGFyc2VGdW5jdGlvbkFyZ3MoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiBcImZ1bmN0aW9uXCIsXG4gICAgICAgICAgbmFtZTogdG9rZW4udmFsdWUsXG4gICAgICAgICAgYXJncyxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJpZGVudGlmaWVyXCIsXG4gICAgICAgIG5hbWU6IHRva2VuLnZhbHVlLFxuICAgICAgICBxdW90ZWQ6IHRva2VuLnR5cGUgPT09IFwicXVvdGVkSWRlbnRpZmllclwiLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYOyngOybkOuQmOyngCDslYrripQgc2VhcmNoVGV4dCBleHByZXNzaW9uIHRva2VuOiAke3Rva2VuLnR5cGV9YCk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlRnVuY3Rpb25BcmdzKCk6IFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZVtdIHtcbiAgICBpZiAodGhpcy5tYXRjaFN5bWJvbChcIilcIikpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBhcmdzOiBTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGVbXSA9IFtdO1xuICAgIGRvIHtcbiAgICAgIGFyZ3MucHVzaCh0aGlzLnBhcnNlRXhwcmVzc2lvbigpKTtcbiAgICB9IHdoaWxlICh0aGlzLm1hdGNoU3ltYm9sKFwiLFwiKSk7XG5cbiAgICB0aGlzLmV4cGVjdFN5bWJvbChcIilcIik7XG4gICAgcmV0dXJuIGFyZ3M7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlVHlwZU5hbWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHRoaXMucGVlaygpO1xuICAgICAgaWYgKFxuICAgICAgICB0b2tlbj8udHlwZSA9PT0gXCJpZGVudGlmaWVyXCIgfHxcbiAgICAgICAgdG9rZW4/LnR5cGUgPT09IFwicXVvdGVkSWRlbnRpZmllclwiIHx8XG4gICAgICAgICh0b2tlbj8udHlwZSA9PT0gXCJzeW1ib2xcIiAmJlxuICAgICAgICAgICh0b2tlbi52YWx1ZSA9PT0gXCIoXCIgfHwgdG9rZW4udmFsdWUgPT09IFwiKVwiIHx8IHRva2VuLnZhbHVlID09PSBcIixcIikpXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFwic3ltYm9sXCIpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnRzLnB1c2godG9rZW4udmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIHRoaXMuaW5kZXggKz0gMTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIu2DgOyehSDsupDsiqTtjIUg64yA7IOBIO2DgOyeheydhCDssL7snYQg7IiYIOyXhuyKteuLiOuLpC5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oXCIgXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdW1lQ29sbGF0aW9uVG9rZW4oKTogRXh0cmFjdDxcbiAgICBTZWFyY2hUZXh0RXhwcmVzc2lvblRva2VuLFxuICAgIHsgdHlwZTogXCJpZGVudGlmaWVyXCIgfCBcInF1b3RlZElkZW50aWZpZXJcIiB9XG4gID4ge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5wZWVrKCk7XG4gICAgaWYgKHRva2VuPy50eXBlICE9PSBcImlkZW50aWZpZXJcIiAmJiB0b2tlbj8udHlwZSAhPT0gXCJxdW90ZWRJZGVudGlmaWVyXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNPTExBVEUg64yA7IOBIOyLneuzhOyekOulvCDssL7snYQg7IiYIOyXhuyKteuLiOuLpC5cIik7XG4gICAgfVxuICAgIHRoaXMuaW5kZXggKz0gMTtcbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBwcml2YXRlIGlzVHJpbUJvdGhGcm9tRm9ybSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBib3RoVG9rZW4gPSB0aGlzLnBlZWsoKTtcbiAgICBjb25zdCBmcm9tVG9rZW4gPSB0aGlzLnBlZWsoMSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgYm90aFRva2VuPy50eXBlID09PSBcImlkZW50aWZpZXJcIiAmJlxuICAgICAgYm90aFRva2VuLnZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwiYm90aFwiICYmXG4gICAgICBmcm9tVG9rZW4/LnR5cGUgPT09IFwiaWRlbnRpZmllclwiICYmXG4gICAgICBmcm9tVG9rZW4udmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJmcm9tXCJcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleHBlY3RTeW1ib2wodmFsdWU6IFwiKFwiIHwgXCIpXCIgfCBcIixcIik6IHZvaWQge1xuICAgIGlmICghdGhpcy5tYXRjaFN5bWJvbCh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgXCIke3ZhbHVlfVwiIO2GoO2BsOydtCDtlYTsmpTtlanri4jri6QuYCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXRjaFN5bWJvbCh2YWx1ZTogXCIoXCIgfCBcIilcIiB8IFwiLFwiKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnBlZWsoKTtcbiAgICBpZiAodG9rZW4/LnR5cGUgPT09IFwic3ltYm9sXCIgJiYgdG9rZW4udmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICB0aGlzLmluZGV4ICs9IDE7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXRjaE9wZXJhdG9yKHZhbHVlOiBcInx8XCIgfCBcIjo6XCIpOiBib29sZWFuIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMucGVlaygpO1xuICAgIGlmICh0b2tlbj8udHlwZSA9PT0gXCJvcGVyYXRvclwiICYmIHRva2VuLnZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgdGhpcy5pbmRleCArPSAxO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgbWF0Y2hJZGVudGlmaWVyKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMucGVlaygpO1xuICAgIGlmICh0b2tlbj8udHlwZSA9PT0gXCJpZGVudGlmaWVyXCIgJiYgdG9rZW4udmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gdmFsdWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgdGhpcy5pbmRleCArPSAxO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3VtZVRva2VuKGNvbnRleHQ6IHN0cmluZyk6IFNlYXJjaFRleHRFeHByZXNzaW9uVG9rZW4ge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5wZWVrKCk7XG4gICAgaWYgKCF0b2tlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2NvbnRleHR9IO2GoO2BsOydtCDtlYTsmpTtlanri4jri6QuYCk7XG4gICAgfVxuICAgIHRoaXMuaW5kZXggKz0gMTtcbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBwcml2YXRlIHBlZWsob2Zmc2V0ID0gMCk6IFNlYXJjaFRleHRFeHByZXNzaW9uVG9rZW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRva2Vuc1t0aGlzLmluZGV4ICsgb2Zmc2V0XTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRJbmRleENvbHVtbk9wY2xhc3MoY29sdW1uOiBNaWdyYXRpb25JbmRleFtcImNvbHVtbnNcIl1bbnVtYmVyXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBjb2x1bW4ub3BjbGFzcyA/PyBjb2x1bW4udmVjdG9yT3BzO1xufVxuXG5mdW5jdGlvbiB0b2tlbml6ZVNlYXJjaFRleHRFeHByZXNzaW9uKGV4cHJlc3Npb246IHN0cmluZyk6IFNlYXJjaFRleHRFeHByZXNzaW9uVG9rZW5bXSB7XG4gIGNvbnN0IHRva2VuczogU2VhcmNoVGV4dEV4cHJlc3Npb25Ub2tlbltdID0gW107XG4gIGxldCBpbmRleCA9IDA7XG5cbiAgd2hpbGUgKGluZGV4IDwgZXhwcmVzc2lvbi5sZW5ndGgpIHtcbiAgICBjb25zdCBjaGFyID0gZXhwcmVzc2lvbltpbmRleF07XG5cbiAgICBpZiAoY2hhciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoL1xccy8udGVzdChjaGFyKSkge1xuICAgICAgaW5kZXggKz0gMTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChleHByZXNzaW9uLnN0YXJ0c1dpdGgoXCJ8fFwiLCBpbmRleCkpIHtcbiAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogXCJvcGVyYXRvclwiLCB2YWx1ZTogXCJ8fFwiIH0pO1xuICAgICAgaW5kZXggKz0gMjtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChleHByZXNzaW9uLnN0YXJ0c1dpdGgoXCI6OlwiLCBpbmRleCkpIHtcbiAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogXCJvcGVyYXRvclwiLCB2YWx1ZTogXCI6OlwiIH0pO1xuICAgICAgaW5kZXggKz0gMjtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjaGFyID09PSBcIihcIiB8fCBjaGFyID09PSBcIilcIiB8fCBjaGFyID09PSBcIixcIikge1xuICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiBcInN5bWJvbFwiLCB2YWx1ZTogY2hhciB9KTtcbiAgICAgIGluZGV4ICs9IDE7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY2hhciA9PT0gXCInXCIpIHtcbiAgICAgIGxldCB2YWx1ZSA9IFwiXCI7XG4gICAgICBpbmRleCArPSAxO1xuXG4gICAgICB3aGlsZSAoaW5kZXggPCBleHByZXNzaW9uLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gZXhwcmVzc2lvbltpbmRleF07XG4gICAgICAgIGlmIChjdXJyZW50ID09PSBcIidcIikge1xuICAgICAgICAgIGlmIChleHByZXNzaW9uW2luZGV4ICsgMV0gPT09IFwiJ1wiKSB7XG4gICAgICAgICAgICB2YWx1ZSArPSBcIidcIjtcbiAgICAgICAgICAgIGluZGV4ICs9IDI7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpbmRleCArPSAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsdWUgKz0gY3VycmVudDtcbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgIH1cblxuICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiBcInN0cmluZ1wiLCB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjaGFyID09PSAnXCInKSB7XG4gICAgICBsZXQgdmFsdWUgPSBcIlwiO1xuICAgICAgaW5kZXggKz0gMTtcblxuICAgICAgd2hpbGUgKGluZGV4IDwgZXhwcmVzc2lvbi5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IGV4cHJlc3Npb25baW5kZXhdO1xuICAgICAgICBpZiAoY3VycmVudCA9PT0gJ1wiJykge1xuICAgICAgICAgIGlmIChleHByZXNzaW9uW2luZGV4ICsgMV0gPT09ICdcIicpIHtcbiAgICAgICAgICAgIHZhbHVlICs9ICdcIic7XG4gICAgICAgICAgICBpbmRleCArPSAyO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbHVlICs9IGN1cnJlbnQ7XG4gICAgICAgIGluZGV4ICs9IDE7XG4gICAgICB9XG5cbiAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogXCJxdW90ZWRJZGVudGlmaWVyXCIsIHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKC9bQS1aYS16X10vLnRlc3QoY2hhcikpIHtcbiAgICAgIGxldCB2YWx1ZSA9IGNoYXI7XG4gICAgICBpbmRleCArPSAxO1xuXG4gICAgICB3aGlsZSAoaW5kZXggPCBleHByZXNzaW9uLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gZXhwcmVzc2lvbltpbmRleF07XG4gICAgICAgIGlmIChjdXJyZW50ICE9PSB1bmRlZmluZWQgJiYgL1tBLVphLXowLTlfJF0vLnRlc3QoY3VycmVudCkpIHtcbiAgICAgICAgICB2YWx1ZSArPSBjdXJyZW50O1xuICAgICAgICAgIGluZGV4ICs9IDE7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogXCJpZGVudGlmaWVyXCIsIHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGDsp4Dsm5DrkJjsp4Ag7JWK64qUIHNlYXJjaFRleHQgZXhwcmVzc2lvbiDrrLjsnpA6ICR7Y2hhcn1gKTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmZ1bmN0aW9uIGNhbm9uaWNhbGl6ZVNlYXJjaFRleHRHZW5lcmF0ZWRFeHByZXNzaW9uKGV4cHJlc3Npb246IHN0cmluZyk6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IFNlYXJjaFRleHRFeHByZXNzaW9uUGFyc2VyKHRva2VuaXplU2VhcmNoVGV4dEV4cHJlc3Npb24oZXhwcmVzc2lvbikpO1xuICAgIGNvbnN0IHBhcnNlZEV4cHJlc3Npb24gPSBwYXJzZXIucGFyc2VFeHByZXNzaW9uKCk7XG5cbiAgICBpZiAoIXBhcnNlci5pc0F0RW5kKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInNlYXJjaFRleHQgZXhwcmVzc2lvbiDtjIzsi7HsnbQg64Gd64KY7KeAIOyViuyVmOyKteuLiOuLpC5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlbmRlclNlYXJjaFRleHRFeHByZXNzaW9uKG5vcm1hbGl6ZVNlYXJjaFRleHRFeHByZXNzaW9uTm9kZShwYXJzZWRFeHByZXNzaW9uKSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBub3JtYWxpemVTZWFyY2hUZXh0RXhwcmVzc2lvbkZhbGxiYWNrKGV4cHJlc3Npb24pO1xuICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlYXJjaFRleHRFeHByZXNzaW9uTm9kZShcbiAgbm9kZTogU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlLFxuKTogU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlIHtcbiAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICBjYXNlIFwiaWRlbnRpZmllclwiOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgbmFtZTogbm9kZS5xdW90ZWQgPyBub2RlLm5hbWUgOiBub2RlLm5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgIH07XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICBjYXNlIFwiY29uY2F0XCI6IHtcbiAgICAgIGNvbnN0IHBhcnRzID0gbm9kZS5wYXJ0cy5mbGF0TWFwKChwYXJ0KSA9PiB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXJ0ID0gbm9ybWFsaXplU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlKHBhcnQpO1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplZFBhcnQudHlwZSA9PT0gXCJjb25jYXRcIiA/IG5vcm1hbGl6ZWRQYXJ0LnBhcnRzIDogW25vcm1hbGl6ZWRQYXJ0XTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJjb25jYXRcIiwgcGFydHMgfTtcbiAgICB9XG4gICAgY2FzZSBcImNvbGxhdGVcIjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiY29sbGF0ZVwiLFxuICAgICAgICBleHByOiBub3JtYWxpemVTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGUobm9kZS5leHByKSxcbiAgICAgICAgY29sbGF0aW9uOiBub2RlLmNvbGxhdGlvbi50b1VwcGVyQ2FzZSgpID09PSBcIkNcIiA/IFwiQ1wiIDogbm9kZS5jb2xsYXRpb24sXG4gICAgICAgIHF1b3RlZDogbm9kZS5xdW90ZWQgfHwgbm9kZS5jb2xsYXRpb24udG9VcHBlckNhc2UoKSA9PT0gXCJDXCIsXG4gICAgICB9O1xuICAgIGNhc2UgXCJjYXN0XCI6IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRFeHByID0gbm9ybWFsaXplU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlKG5vZGUuZXhwcik7XG4gICAgICBjb25zdCB0YXJnZXRUeXBlID0gbm9kZS50YXJnZXRUeXBlLnJlcGxhY2UoL1xccysvZywgXCIgXCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHRhcmdldFR5cGUgPT09IFwidGV4dFwiIHx8IHRhcmdldFR5cGUgPT09IFwiY2hhcmFjdGVyIHZhcnlpbmdcIiB8fCB0YXJnZXRUeXBlID09PSBcInZhcmNoYXJcIikge1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplZEV4cHI7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcImNhc3RcIixcbiAgICAgICAgZXhwcjogbm9ybWFsaXplZEV4cHIsXG4gICAgICAgIHRhcmdldFR5cGUsXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlIFwiZnVuY3Rpb25cIjoge1xuICAgICAgY29uc3QgbmFtZSA9IG5vZGUubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgbGV0IGFyZ3MgPSBub2RlLmFyZ3MubWFwKChhcmcpID0+IG5vcm1hbGl6ZVNlYXJjaFRleHRFeHByZXNzaW9uTm9kZShhcmcpKTtcblxuICAgICAgaWYgKChuYW1lID09PSBcInRyaW1cIiB8fCBuYW1lID09PSBcImJ0cmltXCIpICYmIGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogXCJmdW5jdGlvblwiLFxuICAgICAgICAgIG5hbWU6IFwidHJpbVwiLFxuICAgICAgICAgIGFyZ3MsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgKG5hbWUgPT09IFwic29uYW11X3RleHRfYXJyYXlfYWdnXCIgfHwgbmFtZSA9PT0gXCJzb25hbXVfanNvbmJfYXJyYXlfYWdnXCIpICYmXG4gICAgICAgIGFyZ3MubGVuZ3RoID09PSAyICYmXG4gICAgICAgIGFyZ3NbMV0/LnR5cGUgPT09IFwiYm9vbGVhblwiICYmXG4gICAgICAgIGFyZ3NbMV0udmFsdWVcbiAgICAgICkge1xuICAgICAgICBhcmdzID0gW2FyZ3NbMF1dO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcImZ1bmN0aW9uXCIsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGFyZ3MsXG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZW5kZXJTZWFyY2hUZXh0RXhwcmVzc2lvbihub2RlOiBTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGUsIHBhcmVudFByZWNlZGVuY2UgPSAwKTogc3RyaW5nIHtcbiAgY29uc3QgcHJlY2VkZW5jZSA9IGdldFNlYXJjaFRleHRFeHByZXNzaW9uUHJlY2VkZW5jZShub2RlKTtcbiAgY29uc3QgcmVuZGVyZWQgPSAoKCkgPT4ge1xuICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICBjYXNlIFwiaWRlbnRpZmllclwiOlxuICAgICAgICByZXR1cm4gbm9kZS5xdW90ZWQgPyBgXCIke25vZGUubmFtZS5yZXBsYWNlQWxsKCdcIicsICdcIlwiJyl9XCJgIDogbm9kZS5uYW1lO1xuICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICByZXR1cm4gYCcke25vZGUudmFsdWUucmVwbGFjZUFsbChcIidcIiwgXCInJ1wiKX0nYDtcbiAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgIHJldHVybiBub2RlLnZhbHVlID8gXCJ0cnVlXCIgOiBcImZhbHNlXCI7XG4gICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgcmV0dXJuIGAke25vZGUubmFtZX0oJHtub2RlLmFyZ3NcbiAgICAgICAgICAubWFwKChhcmcpID0+IHJlbmRlclNlYXJjaFRleHRFeHByZXNzaW9uKGFyZykpXG4gICAgICAgICAgLmpvaW4oXCIsIFwiKX0pYDtcbiAgICAgIGNhc2UgXCJjb25jYXRcIjpcbiAgICAgICAgcmV0dXJuIG5vZGUucGFydHMubWFwKChwYXJ0KSA9PiByZW5kZXJTZWFyY2hUZXh0RXhwcmVzc2lvbihwYXJ0LCBwcmVjZWRlbmNlKSkuam9pbihcIiB8fCBcIik7XG4gICAgICBjYXNlIFwiY29sbGF0ZVwiOiB7XG4gICAgICAgIGNvbnN0IGNvbGxhdGlvbiA9IG5vZGUucXVvdGVkXG4gICAgICAgICAgPyBgXCIke25vZGUuY29sbGF0aW9uLnJlcGxhY2VBbGwoJ1wiJywgJ1wiXCInKX1cImBcbiAgICAgICAgICA6IG5vZGUuY29sbGF0aW9uO1xuICAgICAgICByZXR1cm4gYCR7cmVuZGVyU2VhcmNoVGV4dEV4cHJlc3Npb24obm9kZS5leHByLCBwcmVjZWRlbmNlKX0gQ09MTEFURSAke2NvbGxhdGlvbn1gO1xuICAgICAgfVxuICAgICAgY2FzZSBcImNhc3RcIjpcbiAgICAgICAgcmV0dXJuIGAke3JlbmRlclNlYXJjaFRleHRFeHByZXNzaW9uKG5vZGUuZXhwciwgcHJlY2VkZW5jZSl9Ojoke25vZGUudGFyZ2V0VHlwZX1gO1xuICAgIH1cbiAgfSkoKTtcblxuICBpZiAocHJlY2VkZW5jZSA8IHBhcmVudFByZWNlZGVuY2UpIHtcbiAgICByZXR1cm4gYCgke3JlbmRlcmVkfSlgO1xuICB9XG5cbiAgcmV0dXJuIHJlbmRlcmVkO1xufVxuXG5mdW5jdGlvbiBnZXRTZWFyY2hUZXh0RXhwcmVzc2lvblByZWNlZGVuY2Uobm9kZTogU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlKTogbnVtYmVyIHtcbiAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICBjYXNlIFwiY29uY2F0XCI6XG4gICAgICByZXR1cm4gMTtcbiAgICBjYXNlIFwiY29sbGF0ZVwiOlxuICAgIGNhc2UgXCJjYXN0XCI6XG4gICAgICByZXR1cm4gMjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIDM7XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU2VhcmNoVGV4dEV4cHJlc3Npb25GYWxsYmFjayhleHByZXNzaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gZXhwcmVzc2lvblxuICAgIC5yZXBsYWNlKC9cXHMrL2csIFwiIFwiKVxuICAgIC5yZXBsYWNlKC9cXGJUUklNXFxzKlxcKFxccypCT1RIXFxzK0ZST01cXHMrL2dpLCBcInRyaW0oXCIpXG4gICAgLnJlcGxhY2UoLzo6KD86dGV4dHxjaGFyYWN0ZXIgdmFyeWluZ3x2YXJjaGFyKVxcYi9naSwgXCJcIilcbiAgICAucmVwbGFjZSgvLFxccyp0cnVlXFxiL2dpLCBcIlwiKVxuICAgIC50cmltKCk7XG59XG5cbmZ1bmN0aW9uIHZpc2l0U2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlKFxuICBub2RlOiBTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGUsXG4gIHZpc2l0b3I6IChub2RlOiBTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGUpID0+IHZvaWQsXG4pOiB2b2lkIHtcbiAgdmlzaXRvcihub2RlKTtcblxuICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgIGNhc2UgXCJjb25jYXRcIjpcbiAgICAgIG5vZGUucGFydHMuZm9yRWFjaCgocGFydCkgPT4ge1xuICAgICAgICB2aXNpdFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZShwYXJ0LCB2aXNpdG9yKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJjb2xsYXRlXCI6XG4gICAgY2FzZSBcImNhc3RcIjpcbiAgICAgIHZpc2l0U2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlKG5vZGUuZXhwciwgdmlzaXRvcik7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICBub2RlLmFyZ3MuZm9yRWFjaCgoYXJnKSA9PiB7XG4gICAgICAgIHZpc2l0U2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlKGFyZywgdmlzaXRvcik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIFwiaWRlbnRpZmllclwiOlxuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgcmV0dXJuO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFNlYXJjaFRleHRIZWxwZXJLaW5kc0Zyb21FeHByZXNzaW9uKGV4cHJlc3Npb246IHN0cmluZyk6IFNldDxTZWFyY2hUZXh0SGVscGVyS2luZD4ge1xuICBjb25zdCBoZWxwZXJLaW5kcyA9IG5ldyBTZXQ8U2VhcmNoVGV4dEhlbHBlcktpbmQ+KCk7XG4gIGNvbnN0IGFkZEhlbHBlcktpbmRGcm9tTmFtZSA9IChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobm9ybWFsaXplZE5hbWUgPT09IFwic29uYW11X3RleHRfYXJyYXlfYWdnXCIpIHtcbiAgICAgIGhlbHBlcktpbmRzLmFkZChcInRleHQtYXJyYXlcIik7XG4gICAgfSBlbHNlIGlmIChub3JtYWxpemVkTmFtZSA9PT0gXCJzb25hbXVfanNvbmJfYXJyYXlfYWdnXCIpIHtcbiAgICAgIGhlbHBlcktpbmRzLmFkZChcImpzb25iLWFycmF5XCIpO1xuICAgIH1cbiAgfTtcblxuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBTZWFyY2hUZXh0RXhwcmVzc2lvblBhcnNlcih0b2tlbml6ZVNlYXJjaFRleHRFeHByZXNzaW9uKGV4cHJlc3Npb24pKTtcbiAgICBjb25zdCBwYXJzZWRFeHByZXNzaW9uID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgaWYgKCFwYXJzZXIuaXNBdEVuZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZWFyY2hUZXh0IGhlbHBlciBleHByZXNzaW9uIO2MjOyLseydtCDrgZ3rgpjsp4Ag7JWK7JWY7Iq164uI64ukLlwiKTtcbiAgICB9XG5cbiAgICB2aXNpdFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZShwYXJzZWRFeHByZXNzaW9uLCAobm9kZSkgPT4ge1xuICAgICAgaWYgKG5vZGUudHlwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGFkZEhlbHBlcktpbmRGcm9tTmFtZShub2RlLm5hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGNhdGNoIHtcbiAgICBpZiAoL1xcYnNvbmFtdV90ZXh0X2FycmF5X2FnZ1xccypcXCgvaS50ZXN0KGV4cHJlc3Npb24pKSB7XG4gICAgICBoZWxwZXJLaW5kcy5hZGQoXCJ0ZXh0LWFycmF5XCIpO1xuICAgIH1cbiAgICBpZiAoL1xcYnNvbmFtdV9qc29uYl9hcnJheV9hZ2dcXHMqXFwoL2kudGVzdChleHByZXNzaW9uKSkge1xuICAgICAgaGVscGVyS2luZHMuYWRkKFwianNvbmItYXJyYXlcIik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGhlbHBlcktpbmRzO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlU2VhcmNoVGV4dENvbHVtbnModGFibGU6IHN0cmluZywgY29sdW1uczogTWlncmF0aW9uQ29sdW1uW10pOiBNaWdyYXRpb25Db2x1bW5bXSB7XG4gIGNvbnN0IGVudGl0eSA9ICgoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBFbnRpdHlNYW5hZ2VyLmdldEJ5VGFibGUodGFibGUpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9KSgpO1xuXG4gIGlmICghZW50aXR5KSB7XG4gICAgcmV0dXJuIGNvbHVtbnM7XG4gIH1cblxuICBjb25zdCBwcm9wc0J5TmFtZSA9IG5ldyBNYXAoZW50aXR5LnByb3BzLm1hcCgocHJvcCkgPT4gW3Byb3AubmFtZSwgcHJvcF0pKTtcblxuICByZXR1cm4gY29sdW1ucy5tYXAoKGNvbHVtbikgPT4ge1xuICAgIGNvbnN0IHByb3AgPSBwcm9wc0J5TmFtZS5nZXQoY29sdW1uLm5hbWUpO1xuICAgIGlmICghcHJvcCB8fCAhaXNTZWFyY2hUZXh0UHJvcChwcm9wKSkge1xuICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29sdW1uLFxuICAgICAgZ2VuZXJhdGVkOiB7XG4gICAgICAgIHR5cGU6IFwiU1RPUkVEXCIsXG4gICAgICAgIGV4cHJlc3Npb246IGJ1aWxkU2VhcmNoVGV4dEdlbmVyYXRlZEV4cHJlc3Npb24ocHJvcCwgcHJvcHNCeU5hbWUpLFxuICAgICAgfSxcbiAgICB9O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRTZWFyY2hUZXh0R2VuZXJhdGVkRXhwcmVzc2lvbihcbiAgcHJvcDogRXh0cmFjdDxFbnRpdHlQcm9wLCB7IHR5cGU6IFwic2VhcmNoVGV4dFwiIH0+LFxuICBwcm9wc0J5TmFtZTogTWFwPHN0cmluZywgRW50aXR5UHJvcD4sXG4pOiBzdHJpbmcge1xuICBjb25zdCB0b2tlbnMgPSBwcm9wLnNvdXJjZUNvbHVtbnMubWFwKChzb3VyY2UpID0+IHtcbiAgICBjb25zdCBzb3VyY2VQcm9wID0gcHJvcHNCeU5hbWUuZ2V0KHNvdXJjZS5uYW1lKTtcbiAgICBpZiAoIXNvdXJjZVByb3ApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgc2VhcmNoVGV4dCBzb3VyY2UgY29sdW1uIFwiJHtzb3VyY2UubmFtZX1cIuydhCjrpbwpIOywvuydhCDsiJgg7JeG7Iq164uI64ukLmApO1xuICAgIH1cblxuICAgIGlmIChzb3VyY2VQcm9wLnR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBzb3VyY2UuY2FzZUluc2Vuc2l0aXZlXG4gICAgICAgID8gYGxvd2VyKENPQUxFU0NFKCR7c291cmNlLm5hbWV9LCAnJykpYFxuICAgICAgICA6IGBDT0FMRVNDRSgke3NvdXJjZS5uYW1lfSwgJycpYDtcbiAgICB9XG5cbiAgICBpZiAoc291cmNlUHJvcC50eXBlID09PSBcInN0cmluZ1tdXCIpIHtcbiAgICAgIHJldHVybiBzb3VyY2UuY2FzZUluc2Vuc2l0aXZlXG4gICAgICAgID8gYENPQUxFU0NFKHNvbmFtdV90ZXh0X2FycmF5X2FnZygke3NvdXJjZS5uYW1lfSksICcnKWBcbiAgICAgICAgOiBgQ09BTEVTQ0Uoc29uYW11X3RleHRfYXJyYXlfYWdnKCR7c291cmNlLm5hbWV9LCBmYWxzZSksICcnKWA7XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZVByb3AudHlwZSA9PT0gXCJqc29uXCIpIHtcbiAgICAgIHJldHVybiBzb3VyY2UuY2FzZUluc2Vuc2l0aXZlXG4gICAgICAgID8gYENPQUxFU0NFKHNvbmFtdV9qc29uYl9hcnJheV9hZ2coJHtzb3VyY2UubmFtZX0pLCAnJylgXG4gICAgICAgIDogYENPQUxFU0NFKHNvbmFtdV9qc29uYl9hcnJheV9hZ2coJHtzb3VyY2UubmFtZX0sIGZhbHNlKSwgJycpYDtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgc2VhcmNoVGV4dCBzb3VyY2UgY29sdW1uIFwiJHtzb3VyY2UubmFtZX1cIuydmCDtg4DsnoUgXCIke3NvdXJjZVByb3AudHlwZX1cIuydgCjripQpIOyngOybkOuQmOyngCDslYrsirXri4jri6QuYCxcbiAgICApO1xuICB9KTtcblxuICByZXR1cm4gYHRyaW0oJHt0b2tlbnMuam9pbihgIHx8ICcgJyB8fCBgKX0pYDtcbn1cblxuZnVuY3Rpb24gZ2V0U2VhcmNoVGV4dEhlbHBlckRlZmluaXRpb25zKHRhYmxlOiBzdHJpbmcsIGNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdKTogc3RyaW5nW10ge1xuICBjb25zdCBoZWxwZXJLaW5kcyA9IG5ldyBTZXQ8U2VhcmNoVGV4dEhlbHBlcktpbmQ+KCk7XG5cbiAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICBpZiAoIWNvbHVtbi5nZW5lcmF0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBnZXRTZWFyY2hUZXh0SGVscGVyS2luZHNGcm9tRXhwcmVzc2lvbihjb2x1bW4uZ2VuZXJhdGVkLmV4cHJlc3Npb24pLmZvckVhY2goKGtpbmQpID0+IHtcbiAgICAgIGhlbHBlcktpbmRzLmFkZChraW5kKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaWYgKGhlbHBlcktpbmRzLnNpemUgPiAwKSB7XG4gICAgcmV0dXJuIChbXCJ0ZXh0LWFycmF5XCIsIFwianNvbmItYXJyYXlcIl0gYXMgY29uc3QpXG4gICAgICAuZmlsdGVyKChraW5kKSA9PiBoZWxwZXJLaW5kcy5oYXMoa2luZCkpXG4gICAgICAubWFwKChraW5kKSA9PiBTRUFSQ0hfVEVYVF9IRUxQRVJfREVGSU5JVElPTlNba2luZF0pO1xuICB9XG5cbiAgY29uc3QgZW50aXR5ID0gKCgpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEVudGl0eU1hbmFnZXIuZ2V0QnlUYWJsZSh0YWJsZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0pKCk7XG5cbiAgaWYgKCFlbnRpdHkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3QgcHJvcHNCeU5hbWUgPSBuZXcgTWFwKGVudGl0eS5wcm9wcy5tYXAoKHByb3ApID0+IFtwcm9wLm5hbWUsIHByb3BdKSk7XG5cbiAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICBjb25zdCBwcm9wID0gcHJvcHNCeU5hbWUuZ2V0KGNvbHVtbi5uYW1lKTtcbiAgICBpZiAoIXByb3AgfHwgIWlzU2VhcmNoVGV4dFByb3AocHJvcCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcm9wLnNvdXJjZUNvbHVtbnMuZm9yRWFjaCgoc291cmNlKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2VQcm9wID0gcHJvcHNCeU5hbWUuZ2V0KHNvdXJjZS5uYW1lKTtcbiAgICAgIGlmIChzb3VyY2VQcm9wPy50eXBlID09PSBcInN0cmluZ1tdXCIpIHtcbiAgICAgICAgaGVscGVyS2luZHMuYWRkKFwidGV4dC1hcnJheVwiKTtcbiAgICAgIH0gZWxzZSBpZiAoc291cmNlUHJvcD8udHlwZSA9PT0gXCJqc29uXCIpIHtcbiAgICAgICAgaGVscGVyS2luZHMuYWRkKFwianNvbmItYXJyYXlcIik7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiAoW1widGV4dC1hcnJheVwiLCBcImpzb25iLWFycmF5XCJdIGFzIGNvbnN0KVxuICAgIC5maWx0ZXIoKGtpbmQpID0+IGhlbHBlcktpbmRzLmhhcyhraW5kKSlcbiAgICAubWFwKChraW5kKSA9PiBTRUFSQ0hfVEVYVF9IRUxQRVJfREVGSU5JVElPTlNba2luZF0pO1xufVxuXG5mdW5jdGlvbiBnZXRTZWFyY2hUZXh0Q29sdW1uTmFtZXModGFibGU6IHN0cmluZyk6IFNldDxzdHJpbmc+IHtcbiAgY29uc3QgZW50aXR5ID0gKCgpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEVudGl0eU1hbmFnZXIuZ2V0QnlUYWJsZSh0YWJsZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0pKCk7XG5cbiAgaWYgKCFlbnRpdHkpIHtcbiAgICByZXR1cm4gbmV3IFNldCgpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBTZXQoZW50aXR5LnByb3BzLmZpbHRlcihpc1NlYXJjaFRleHRQcm9wKS5tYXAoKHByb3ApID0+IHByb3AubmFtZSkpO1xufVxuXG4vKipcbiAqIO2FjOydtOu4lCDsg53shLHtlZjripQg7LyA7J207IqkIC0g7Lus65+8L+yduOuNseyKpCDsg53shLFcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVDcmVhdGVDb2RlX0NvbHVtbkFuZEluZGV4ZXMoXG4gIHRhYmxlOiBzdHJpbmcsXG4gIGNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdLFxuICBpbmRleGVzOiBNaWdyYXRpb25JbmRleFtdLFxuKTogUHJvbWlzZTxHZW5NaWdyYXRpb25Db2RlPiB7XG4gIGNvbnN0IHJlc29sdmVkQ29sdW1ucyA9IHJlc29sdmVTZWFyY2hUZXh0Q29sdW1ucyh0YWJsZSwgY29sdW1ucyk7XG4gIGNvbnN0IGNvbHVtbkRlZnMgPSBnZW5Db2x1bW5EZWZpbml0aW9ucyh0YWJsZSwgcmVzb2x2ZWRDb2x1bW5zKTtcbiAgY29uc3QgaGVscGVyRGVmaW5pdGlvbnMgPSBnZXRTZWFyY2hUZXh0SGVscGVyRGVmaW5pdGlvbnModGFibGUsIHJlc29sdmVkQ29sdW1ucyk7XG5cbiAgLy8g7Lus65+8LCDsnbjrjbHsiqQg7LKY66asXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtcbiAgICAnaW1wb3J0IHR5cGUgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjsnLFxuICAgIFwiXCIsXG4gICAgXCJleHBvcnQgYXN5bmMgZnVuY3Rpb24gdXAoa25leDogS25leCk6IFByb21pc2U8dm9pZD4ge1wiLFxuICAgIC4uLmhlbHBlckRlZmluaXRpb25zLFxuICAgIGBhd2FpdCBrbmV4LnNjaGVtYS5jcmVhdGVUYWJsZShcIiR7dGFibGV9XCIsICh0YWJsZSkgPT4ge2AsXG4gICAgLi4uY29sdW1uRGVmcy5idWlsZGVyLFxuICAgIFwifSk7XCIsXG4gICAgLy8gcmF3IOq1rOusuCAoR2VuZXJhdGVkIENvbHVtbiDrk7EpXG4gICAgLi4uY29sdW1uRGVmcy5yYXcsXG4gICAgLy8gaW5kZXjripQga25leC5yYXfroZwg7LKY66as7ZWY66+A66GcIGNyZWF0ZVRhYmxlIOuwluyXkOyEnCDsi6TtlolcbiAgICAuLi5pbmRleGVzLm1hcCgoaW5kZXgpID0+IGdlbkluZGV4RGVmaW5pdGlvbihpbmRleCwgdGFibGUpKSxcbiAgICBcIn1cIixcbiAgICBcIlwiLFxuICAgIFwiZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvd24oa25leDogS25leCk6IFByb21pc2U8dm9pZD4ge1wiLFxuICAgIGAgcmV0dXJuIGtuZXguc2NoZW1hLmRyb3BUYWJsZShcIiR7dGFibGV9XCIpO2AsXG4gICAgXCJ9XCIsXG4gIF07XG4gIHJldHVybiB7XG4gICAgdGFibGUsXG4gICAgdHlwZTogXCJub3JtYWxcIixcbiAgICB0aXRsZTogYGNyZWF0ZV9fJHt0YWJsZX1gLFxuICAgIGZvcm1hdHRlZDogYXdhaXQgZm9ybWF0Q29kZShsaW5lcy5qb2luKFwiXFxuXCIpLCBgc3JjL21pZ3JhdGlvbi8ke3RhYmxlfS50c2ApLFxuICB9O1xufVxuXG4vKipcbiAqIE1pZ3JhdGlvbkNvbHVtbltdIOydveyWtOyEnCDsu6zrn7wg7KCV7J2Y7ZWY64qUIOq1rOusuCDsg53shLFcbiAqIEByZXR1cm5zIGJ1aWxkZXI6IHRhYmxlIGJ1aWxkZXIg66mU7ISc65OcLCByYXc6IGtuZXgucmF3KCkg6rWs66y4XG4gKi9cbmZ1bmN0aW9uIGdlbkNvbHVtbkRlZmluaXRpb25zKHRhYmxlOiBzdHJpbmcsIGNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdKTogQ29sdW1uRGVmaW5pdGlvblJlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdDogQ29sdW1uRGVmaW5pdGlvblJlc3VsdCA9IHtcbiAgICBidWlsZGVyOiBbXSxcbiAgICByYXc6IFtdLFxuICB9O1xuXG4gIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcbiAgICAvLyBHZW5lcmF0ZWQgQ29sdW1u7J2AIHJhd+uhnCDsspjrpqxcbiAgICBpZiAoY29sdW1uLmdlbmVyYXRlZCkge1xuICAgICAgcmVzdWx0LnJhdy5wdXNoKGdlbkdlbmVyYXRlZENvbHVtbkRlZmluaXRpb24odGFibGUsIGNvbHVtbikpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8g7J2867CYIOy7rOufvOydgCBidWlsZGVy66GcIOyymOumrFxuICAgIHJlc3VsdC5idWlsZGVyLnB1c2goZ2VuTm9ybWFsQ29sdW1uRGVmaW5pdGlvbihjb2x1bW4pKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVkIENvbHVtbiDsoJXsnZgg7IOd7ISxIChBTFRFUiBUQUJMRSBBREQgQ09MVU1OIOyCrOyaqSlcbiAqL1xuZnVuY3Rpb24gZ2VuR2VuZXJhdGVkQ29sdW1uRGVmaW5pdGlvbih0YWJsZTogc3RyaW5nLCBjb2x1bW46IE1pZ3JhdGlvbkNvbHVtbik6IHN0cmluZyB7XG4gIGlmICghY29sdW1uLmdlbmVyYXRlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRlZCBjb2x1bW4gZGVmaW5pdGlvbiByZXF1aXJlZFwiKTtcbiAgfVxuICBjb25zdCBwZ1R5cGUgPSBnZXRQZ1R5cGVGb3JDb2x1bW4oY29sdW1uKTtcbiAgY29uc3Qgc3RvcmFnZVR5cGUgPSBjb2x1bW4uZ2VuZXJhdGVkLnR5cGUgPT09IFwiVklSVFVBTFwiID8gXCIgVklSVFVBTFwiIDogXCIgU1RPUkVEXCI7XG4gIGNvbnN0IG51bGxhYmxlQ2xhdXNlID0gY29sdW1uLm51bGxhYmxlID8gXCJcIiA6IFwiIE5PVCBOVUxMXCI7XG4gIHJldHVybiBgYXdhaXQga25leC5yYXcoXFxgQUxURVIgVEFCTEUgXCIke3RhYmxlfVwiIEFERCBDT0xVTU4gXCIke2NvbHVtbi5uYW1lfVwiICR7cGdUeXBlfSBHRU5FUkFURUQgQUxXQVlTIEFTICgke2NvbHVtbi5nZW5lcmF0ZWQuZXhwcmVzc2lvbn0pJHtzdG9yYWdlVHlwZX0ke251bGxhYmxlQ2xhdXNlfVxcYCk7YDtcbn1cblxuLyoqXG4gKiDsnbzrsJgg7Lus65+8IOygleydmCDsg53shLEgKHRhYmxlLnh4eCgpIOyytOyduClcbiAqL1xuZnVuY3Rpb24gZ2VuTm9ybWFsQ29sdW1uRGVmaW5pdGlvbihjb2x1bW46IE1pZ3JhdGlvbkNvbHVtbik6IHN0cmluZyB7XG4gIGNvbnN0IGNoYWluczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoY29sdW1uLm5hbWUgPT09IFwiaWRcIikge1xuICAgIC8vIFBLIO2DgOyeheyXkCDrlLDrpbgg67aE6riwIOyymOumrFxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgLy8gc3RyaW5nIFBLOiBsZW5ndGjqsIAg7J6I7Jy866m0IHZhcmNoYXIsIOyXhuycvOuptCB0ZXh0XG4gICAgICBpZiAoY29sdW1uLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBgdGFibGUuc3RyaW5nKCdpZCcsICR7Y29sdW1uLmxlbmd0aH0pLnByaW1hcnkoKS5ub3ROdWxsYWJsZSgpO2A7XG4gICAgICB9XG4gICAgICByZXR1cm4gYHRhYmxlLnRleHQoJ2lkJykucHJpbWFyeSgpLm5vdE51bGxhYmxlKCk7YDtcbiAgICB9XG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBcInV1aWRcIikge1xuICAgICAgcmV0dXJuIGB0YWJsZS51dWlkKCdpZCcpLnByaW1hcnkoKS5ub3ROdWxsYWJsZSgpO2A7XG4gICAgfVxuICAgIC8vIOq4sOyhtCBpbnRlZ2VyIFBLICjquLDrs7jqsJIpXG4gICAgcmV0dXJuIGB0YWJsZS5pbmNyZW1lbnRzKCkucHJpbWFyeSgpO2A7XG4gIH1cblxuICAvLyDrsLDsl7Qg7YOA7J6FIOyymOumrFxuICBpZiAoY29sdW1uLnR5cGUuZW5kc1dpdGgoXCJbXVwiKSkge1xuICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gY29sdW1uLnR5cGUuc2xpY2UoMCwgLTIpOyAvLyBcImludGVnZXJbXVwiIC0+IFwiaW50ZWdlclwiXG4gICAgY29uc3QgcGdUeXBlID0gZ2V0UGdBcnJheVR5cGUoY29sdW1uLCBlbGVtZW50VHlwZSk7XG4gICAgY2hhaW5zLnB1c2goYHNwZWNpZmljVHlwZSgnJHtjb2x1bW4ubmFtZX0nLCAnJHtwZ1R5cGV9JylgKTtcbiAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gXCJ2ZWN0b3JcIikge1xuICAgIC8vIEtuZXjripQgdmVjdG9yIO2DgOyeheydhCDsp4HsoJEg7KeA7JuQ7ZWY7KeAIOyViuycvOuvgOuhnCBzcGVjaWZpY1R5cGUg7IKs7JqpXG4gICAgY2hhaW5zLnB1c2goYHNwZWNpZmljVHlwZSgnJHtjb2x1bW4ubmFtZX0nLCAndmVjdG9yKCR7Y29sdW1uLmRpbWVuc2lvbnN9KScpYCk7XG4gIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IFwibnVtYmVyT3JOdW1lcmljXCIpIHtcbiAgICAvLyBudW1iZXJcbiAgICBpZiAoY29sdW1uLm51bWJlclR5cGUgPT09IFwicmVhbFwiKSB7XG4gICAgICBjaGFpbnMucHVzaChgZmxvYXQoJyR7Y29sdW1uLm5hbWV9JylgKTtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi5udW1iZXJUeXBlID09PSBcImRvdWJsZSBwcmVjaXNpb25cIikge1xuICAgICAgY2hhaW5zLnB1c2goYGRvdWJsZSgnJHtjb2x1bW4ubmFtZX0nKWApO1xuICAgIH0gZWxzZSBpZiAoKGNvbHVtbi5udW1iZXJUeXBlID8/IFwibnVtZXJpY1wiKSA9PT0gXCJudW1lcmljXCIpIHtcbiAgICAgIGNoYWlucy5wdXNoKGBkZWNpbWFsKCcke2NvbHVtbi5uYW1lfScsICR7Y29sdW1uLnByZWNpc2lvbn0sICR7Y29sdW1uLnNjYWxlfSlgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAvLyBzdHJpbmdcbiAgICBpZiAoY29sdW1uLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjaGFpbnMucHVzaChgc3RyaW5nKCcke2NvbHVtbi5uYW1lfScsICR7Y29sdW1uLmxlbmd0aH0pYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoYWlucy5wdXNoKGB0ZXh0KCcke2NvbHVtbi5uYW1lfScpYCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBcImRhdGVcIikge1xuICAgIC8vIGRhdGVcbiAgICBjaGFpbnMucHVzaChcbiAgICAgIGB0aW1lc3RhbXAoJyR7Y29sdW1uLm5hbWV9JywgeyB1c2VUejogdHJ1ZSwgcHJlY2lzaW9uOiAke2NvbHVtbi5wcmVjaXNpb24gPz8gM30gfSlgLFxuICAgICk7XG4gIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IFwianNvblwiKSB7XG4gICAgLy8ganNvblxuICAgIGNoYWlucy5wdXNoKGBqc29uYignJHtjb2x1bW4ubmFtZX0nKWApO1xuICB9IGVsc2Uge1xuICAgIC8vIHR5cGUsIGxlbmd0aFxuICAgIGNoYWlucy5wdXNoKGAke2NvbHVtbi50eXBlfSgnJHtjb2x1bW4ubmFtZX0nJHtjb2x1bW4ubGVuZ3RoID8gYCwgJHtjb2x1bW4ubGVuZ3RofWAgOiBcIlwifSlgKTtcbiAgfVxuXG4gIC8vIG51bGxhYmxlXG4gIGNoYWlucy5wdXNoKGNvbHVtbi5udWxsYWJsZSA/IFwibnVsbGFibGUoKVwiIDogXCJub3ROdWxsYWJsZSgpXCIpO1xuXG4gIC8vIGRlZmF1bHRUb1xuICBpZiAoY29sdW1uLmRlZmF1bHRUbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGlzU3RyaW5nVmFsdWUoY29sdW1uLmRlZmF1bHRUbykgJiYgY29sdW1uLmRlZmF1bHRUby5zdGFydHNXaXRoKGBcImApKSB7XG4gICAgICBjaGFpbnMucHVzaChgZGVmYXVsdFRvKCR7Y29sdW1uLmRlZmF1bHRUb30pYCk7XG4gICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gXCJqc29uXCIgJiYgaXNTdHJpbmdWYWx1ZShjb2x1bW4uZGVmYXVsdFRvKSkge1xuICAgICAgY2hhaW5zLnB1c2goYGRlZmF1bHRUbyhrbmV4LnJhdyhcIiR7Y29sdW1uLmRlZmF1bHRUby5yZXBsYWNlQWxsKCdcIicsIFwiJ1wiKX06Ompzb25iXCIpKWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGFpbnMucHVzaChgZGVmYXVsdFRvKGtuZXgucmF3KCcke2NvbHVtbi5kZWZhdWx0VG99JykpYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGB0YWJsZS4ke2NoYWlucy5qb2luKFwiLlwiKX07YDtcbn1cblxuLyoqXG4gKiBNaWdyYXRpb25Db2x1bW7snZgg7YOA7J6F7J2EIFBvc3RncmVTUUwg7YOA7J6FIOusuOyekOyXtOuhnCDrs4DtmZhcbiAqL1xuZnVuY3Rpb24gZ2V0UGdUeXBlRm9yQ29sdW1uKGNvbHVtbjogTWlncmF0aW9uQ29sdW1uKTogc3RyaW5nIHtcbiAgaWYgKGNvbHVtbi50eXBlLmVuZHNXaXRoKFwiW11cIikpIHtcbiAgICBjb25zdCBlbGVtZW50VHlwZSA9IGNvbHVtbi50eXBlLnNsaWNlKDAsIC0yKTtcbiAgICByZXR1cm4gZ2V0UGdBcnJheVR5cGUoY29sdW1uLCBlbGVtZW50VHlwZSk7XG4gIH1cblxuICBzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIGNvbHVtbi5sZW5ndGggIT09IHVuZGVmaW5lZCA/IGB2YXJjaGFyKCR7Y29sdW1uLmxlbmd0aH0pYCA6IFwidGV4dFwiO1xuICAgIGNhc2UgXCJiaWdJbnRlZ2VyXCI6XG4gICAgICByZXR1cm4gXCJiaWdpbnRcIjtcbiAgICBjYXNlIFwibnVtYmVyT3JOdW1lcmljXCI6XG4gICAgICBpZiAoY29sdW1uLm51bWJlclR5cGUgPT09IFwicmVhbFwiKSByZXR1cm4gXCJyZWFsXCI7XG4gICAgICBpZiAoY29sdW1uLm51bWJlclR5cGUgPT09IFwiZG91YmxlIHByZWNpc2lvblwiKSByZXR1cm4gXCJkb3VibGUgcHJlY2lzaW9uXCI7XG4gICAgICByZXR1cm4gYG51bWVyaWMoJHtjb2x1bW4ucHJlY2lzaW9ufSwgJHtjb2x1bW4uc2NhbGV9KWA7XG4gICAgY2FzZSBcImRhdGVcIjpcbiAgICAgIHJldHVybiBcInRpbWVzdGFtcHR6XCI7XG4gICAgY2FzZSBcImpzb25cIjpcbiAgICAgIHJldHVybiBcImpzb25iXCI7XG4gICAgY2FzZSBcInZlY3RvclwiOlxuICAgICAgcmV0dXJuIGB2ZWN0b3IoJHtjb2x1bW4uZGltZW5zaW9uc30pYDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGNvbHVtbi50eXBlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFBnQXJyYXlUeXBlKGNvbHVtbjogTWlncmF0aW9uQ29sdW1uLCBlbGVtZW50VHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcIm51bWJlck9yTnVtZXJpY1wiKSB7XG4gICAgaWYgKGNvbHVtbi5udW1iZXJUeXBlID09PSBcInJlYWxcIikgcmV0dXJuIFwicmVhbFtdXCI7XG4gICAgaWYgKGNvbHVtbi5udW1iZXJUeXBlID09PSBcImRvdWJsZSBwcmVjaXNpb25cIikgcmV0dXJuIFwiZG91YmxlIHByZWNpc2lvbltdXCI7XG4gICAgaWYgKGNvbHVtbi5wcmVjaXNpb24gPT09IHVuZGVmaW5lZCAmJiBjb2x1bW4uc2NhbGUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFwibnVtZXJpY1tdXCI7XG4gICAgcmV0dXJuIGBudW1lcmljKCR7Y29sdW1uLnByZWNpc2lvbiA/PyBOVU1FUklDX0RFRkFVTFRfUFJFQ0lTSU9OfSwgJHtjb2x1bW4uc2NhbGUgPz8gTlVNRVJJQ19ERUZBVUxUX1NDQUxFfSlbXWA7XG4gIH1cbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGNvbHVtbi5sZW5ndGggPyBgdmFyY2hhcigke2NvbHVtbi5sZW5ndGh9KVtdYCA6IFwidGV4dFtdXCI7XG4gIH1cbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcImRhdGVcIikgcmV0dXJuIFwidGltZXN0YW1wdHpbXVwiO1xuICBpZiAoZWxlbWVudFR5cGUgPT09IFwiaW50ZWdlclwiKSByZXR1cm4gXCJpbnRlZ2VyW11cIjtcbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcImJpZ0ludGVnZXJcIikgcmV0dXJuIFwiYmlnaW50W11cIjtcbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcImJvb2xlYW5cIikgcmV0dXJuIFwiYm9vbGVhbltdXCI7XG4gIGlmIChlbGVtZW50VHlwZSA9PT0gXCJ1dWlkXCIpIHJldHVybiBcInV1aWRbXVwiO1xuICBpZiAoZWxlbWVudFR5cGUgPT09IFwiZW51bVwiKSByZXR1cm4gXCJ0ZXh0W11cIjtcbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcInZlY3RvclwiKSByZXR1cm4gYHZlY3Rvcigke2NvbHVtbi5kaW1lbnNpb25zfSlbXWA7XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGFycmF5IGVsZW1lbnQgdHlwZTogJHtlbGVtZW50VHlwZX1gKTtcbn1cblxuLyoqXG4gKiDqsJzrs4Qg7J24642x7IqkIOygleydmCDsg53shLFcbiAqL1xuZnVuY3Rpb24gZ2VuSW5kZXhEZWZpbml0aW9uKGluZGV4OiBNaWdyYXRpb25JbmRleCwgdGFibGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChpbmRleC50eXBlID09PSBcImhuc3dcIiB8fCBpbmRleC50eXBlID09PSBcIml2ZmZsYXRcIikge1xuICAgIHJldHVybiBnZW5WZWN0b3JJbmRleERlZmluaXRpb24oaW5kZXgsIHRhYmxlKTtcbiAgfVxuXG4gIGlmIChpbmRleC51c2luZyA9PT0gXCJwZ3Jvb25nYVwiKSB7XG4gICAgcmV0dXJuIGdlblBncm9vbmdhSW5kZXhEZWZpbml0aW9uKGluZGV4LCB0YWJsZSk7XG4gIH1cblxuICBjb25zdCBtZXRob2RNYXAgPSB7XG4gICAgaW5kZXg6IFwiSU5ERVhcIixcbiAgICB1bmlxdWU6IFwiVU5JUVVFIElOREVYXCIsXG4gIH07XG5cbiAgY29uc3QgbnVsbHNOb3REaXN0aW5jdENsYXVzZSA9XG4gICAgaW5kZXgudHlwZSA9PT0gXCJ1bmlxdWVcIiAmJiBpbmRleC5udWxsc05vdERpc3RpbmN0ICE9PSB1bmRlZmluZWRcbiAgICAgID8gYCBOVUxMUyAke2luZGV4Lm51bGxzTm90RGlzdGluY3QgPyBcIk5PVCBESVNUSU5DVFwiIDogXCJESVNUSU5DVFwifWBcbiAgICAgIDogXCJcIjtcblxuICBjb25zdCB1c2luZ0NsYXVzZSA9IGluZGV4LnVzaW5nID09PSB1bmRlZmluZWQgPyBcIlwiIDogYFVTSU5HICR7aW5kZXgudXNpbmd9YDtcbiAgY29uc3Qgd2hlcmVDbGF1c2UgPSBnZXRJbmRleFdoZXJlQ2xhdXNlKGluZGV4KTtcblxuICByZXR1cm4gYGF3YWl0IGtuZXgucmF3KFxuICBcXGBDUkVBVEUgJHttZXRob2RNYXBbaW5kZXgudHlwZV19ICR7aW5kZXgubmFtZX0gT04gJHt0YWJsZX0gJHt1c2luZ0NsYXVzZX0oJHtpbmRleC5jb2x1bW5zXG4gICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICBjb25zdCBvcGNsYXNzQ2xhdXNlID0gKCgpID0+IHtcbiAgICAgICAgY29uc3Qgb3BjbGFzcyA9IGdldEluZGV4Q29sdW1uT3BjbGFzcyhjb2wpO1xuICAgICAgICByZXR1cm4gb3BjbGFzcyA/IGAgJHtvcGNsYXNzfWAgOiBcIlwiO1xuICAgICAgfSkoKTtcblxuICAgICAgLy8g7KCV66CsIOyYteyFmOydgCBidHJlZeunjCDsgqzsmqkg6rCA64qlXG4gICAgICBpZiAoaW5kZXgudXNpbmcgIT09IFwiYnRyZWVcIiAmJiBpbmRleC51c2luZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBgJHtjb2wubmFtZX0ke29wY2xhc3NDbGF1c2V9YDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc29ydE9yZGVyQ2xhdXNlID0gY29sLnNvcnRPcmRlciA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IGAgJHtjb2wuc29ydE9yZGVyfWA7XG4gICAgICBjb25zdCBudWxsc0ZpcnN0Q2xhdXNlID1cbiAgICAgICAgY29sLm51bGxzRmlyc3QgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBgIE5VTExTICR7Y29sLm51bGxzRmlyc3QgPyBcIkZJUlNUXCIgOiBcIkxBU1RcIn1gO1xuICAgICAgcmV0dXJuIGAke2NvbC5uYW1lfSR7b3BjbGFzc0NsYXVzZX0ke3NvcnRPcmRlckNsYXVzZX0ke251bGxzRmlyc3RDbGF1c2V9YDtcbiAgICB9KVxuICAgIC5qb2luKFwiLCBcIil9KSR7bnVsbHNOb3REaXN0aW5jdENsYXVzZX0ke3doZXJlQ2xhdXNlfTtcXGBcbiAgKTtgO1xufVxuXG5mdW5jdGlvbiBnZW5QZ3Jvb25nYUluZGV4RGVmaW5pdGlvbihpbmRleDogTWlncmF0aW9uSW5kZXgsIHRhYmxlOiBzdHJpbmcpIHtcbiAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXRCeVRhYmxlKHRhYmxlKTtcbiAgY29uc3Qgd2hlcmVDbGF1c2UgPSBnZXRJbmRleFdoZXJlQ2xhdXNlKGluZGV4KTtcblxuICAvLyDrs7Xtlakg7J24642x7Iqk7J24IOqyveyasCBBUlJBWSDsgqzsmqlcbiAgY29uc3QgY29sdW1uQ2xhdXNlID0gKCgpID0+IHtcbiAgICBpZiAoaW5kZXguY29sdW1ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IGVudGl0eS5wcm9wc0RpY3RbaW5kZXguY29sdW1uc1swXS5uYW1lXTtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IGdldFBncm9vbmdhQ29sdW1uT3B0aW9uKGNvbHVtbik7XG4gICAgICByZXR1cm4gYCR7aW5kZXguY29sdW1uc1swXS5uYW1lfSR7b3B0aW9uID8gYCAke29wdGlvbn1gIDogXCJcIn1gO1xuICAgIH1cblxuICAgIHJldHVybiBgKEFSUkFZWyR7aW5kZXguY29sdW1ucy5tYXAoKGNvbCkgPT4gYCR7Y29sLm5hbWV9Ojp0ZXh0YCkuam9pbihcIixcIil9XSlgO1xuICB9KSgpO1xuXG4gIHJldHVybiBgYXdhaXQga25leC5yYXcoXG4gIFxcYENSRUFURSBJTkRFWCAke2luZGV4Lm5hbWV9IE9OICR7dGFibGV9IFVTSU5HIHBncm9vbmdhICgke2NvbHVtbkNsYXVzZX0pIFdJVEggKHRva2VuaXplcj0nVG9rZW5NZWNhYicpJHt3aGVyZUNsYXVzZX07XFxgXG4gIClgO1xufVxuXG4vKipcbiAqIFBHcm9vbmdhIOy7rOufvCDsmLXshZgg7LaU7LacXG4gKlxuICogRnVsbFRleHQg7Jik7Y2866CI7J207YSw66W8IOyngOybkO2VmOuKlCDqsr3smrAg7Jqw7ISgIOyEpOyglSwg64KY66i47KeA64qUIOuUlO2PtO2KuCDsnbTsmqlcbiAqIEBsaW5rIGh0dHBzOi8vcGdyb29uZ2EuZ2l0aHViLmlvL3JlZmVyZW5jZVxuICovXG5mdW5jdGlvbiBnZXRQZ3Jvb25nYUNvbHVtbk9wdGlvbihjb2x1bW46IEVudGl0eVByb3ApIHtcbiAgaWYgKGNvbHVtbi50eXBlID09PSBcInN0cmluZ1wiICYmIGNvbHVtbi5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBcInBncm9vbmdhX3ZhcmNoYXJfZnVsbF90ZXh0X3NlYXJjaF9vcHNfdjJcIjtcbiAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gXCJqc29uXCIpIHtcbiAgICByZXR1cm4gXCJwZ3Jvb25nYV9qc29uYl9mdWxsX3RleHRfc2VhcmNoX29wc192MlwiO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogLSBITlNXIChIaWVyYXJjaGljYWwgTmF2aWdhYmxlIFNtYWxsIFdvcmxkKTog64qQ66awIOu5jOuTnCwg67mg66W4IOqygOyDiSDsho3rj4QsIOuGkuydgCDrqZTrqqjrpqwg67CPIOygle2ZleuPhFxuICogLSBJVkZGbGF0IChJbnZlcnRlZCBGaWxlIHdpdGggRmxhdCBDb21wcmVzc2lvbik6IOu5oOuluCDruYzrk5wsIOykkeqwhCDqsoDsg4kg7IaN64+ELCDrgq7snYAg66mU66qo66asXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhOU1cg7J24642x7IqkICjqtozsnqUgLSDruaDrpbgg6rKA7IOJLCDrhpLsnYAg7KCV7ZmV64+EKVxuICogQ1JFQVRFIElOREVYIGlkeF9lbWJlZGRpbmcgT04gaXRlbXMgVVNJTkcgaG5zdyAoZW1iZWRkaW5nIHZlY3Rvcl9jb3NpbmVfb3BzKSBXSVRIIChtID0gMTYsIGVmX2NvbnN0cnVjdGlvbiA9IDY0KTtcbiAqXG4gKiAvLyBJVkZGbGF0IOyduOuNseyKpCAo64yA7Jqp65+JIOuNsOydtO2EsCwg67mE7JqpIOykkeyalCDsi5wpXG4gKiBDUkVBVEUgSU5ERVggaWR4X2VtYmVkZGluZyBPTiBpdGVtcyBVU0lORyBpdmZmbGF0IChlbWJlZGRpbmcgdmVjdG9yX2Nvc2luZV9vcHMpIFdJVEggKGxpc3RzID0gMTAwKTtcbiAqL1xuZnVuY3Rpb24gZ2VuVmVjdG9ySW5kZXhEZWZpbml0aW9uKGluZGV4OiBNaWdyYXRpb25JbmRleCwgdGFibGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGNvbHVtbiA9IGluZGV4LmNvbHVtbnNbMF07XG4gIGNvbnN0IHZlY3Rvck9wcyA9IGdldEluZGV4Q29sdW1uT3BjbGFzcyhjb2x1bW4pID8/IFwidmVjdG9yX2Nvc2luZV9vcHNcIjtcbiAgY29uc3Qgd2hlcmVDbGF1c2UgPSBnZXRJbmRleFdoZXJlQ2xhdXNlKGluZGV4KTtcblxuICAvLyBITlNXIChIaWVyYXJjaGljYWwgTmF2aWdhYmxlIFNtYWxsIFdvcmxkKSAtIOq2jOyepTog67mg66W4IOqygOyDiSwg64aS7J2AIOygle2ZleuPhFxuICBpZiAoaW5kZXgudHlwZSA9PT0gXCJobnN3XCIpIHtcbiAgICBjb25zdCBtID0gaW5kZXgubSA/PyAxNjtcbiAgICBjb25zdCBlZkNvbnN0cnVjdGlvbiA9IGluZGV4LmVmQ29uc3RydWN0aW9uID8/IDY0O1xuICAgIHJldHVybiBgYXdhaXQga25leC5yYXcoXFxgQ1JFQVRFIElOREVYICR7aW5kZXgubmFtZX0gT04gJHt0YWJsZX0gVVNJTkcgaG5zdyAoJHtjb2x1bW4ubmFtZX0gJHt2ZWN0b3JPcHN9KSBXSVRIIChtID0gJHttfSwgZWZfY29uc3RydWN0aW9uID0gJHtlZkNvbnN0cnVjdGlvbn0pJHt3aGVyZUNsYXVzZX1cXGApO2A7XG4gIH1cblxuICAvLyBJVkZGbGF0IChJbnZlcnRlZCBGaWxlIHdpdGggRmxhdCBDb21wcmVzc2lvbikgLSDrjIDsmqnrn4ksIOu5hOyaqSDspJHsmpQg7IucXG4gIGlmIChpbmRleC50eXBlID09PSBcIml2ZmZsYXRcIikge1xuICAgIGNvbnN0IGxpc3RzID0gaW5kZXgubGlzdHMgPz8gMTAwO1xuICAgIHJldHVybiBgYXdhaXQga25leC5yYXcoXFxgQ1JFQVRFIElOREVYICR7aW5kZXgubmFtZX0gT04gJHt0YWJsZX0gVVNJTkcgaXZmZmxhdCAoJHtjb2x1bW4ubmFtZX0gJHt2ZWN0b3JPcHN9KSBXSVRIIChsaXN0cyA9ICR7bGlzdHN9KSR7d2hlcmVDbGF1c2V9XFxgKTtgO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJhdyBTUUwgaW5kZXggdHlwZTogJHtpbmRleC50eXBlfWApO1xufVxuXG5mdW5jdGlvbiBnZXRJbmRleFdoZXJlQ2xhdXNlKGluZGV4OiBNaWdyYXRpb25JbmRleCk6IHN0cmluZyB7XG4gIGNvbnN0IHdoZXJlID0gbm9ybWFsaXplSW5kZXhXaGVyZVByZWRpY2F0ZShpbmRleC53aGVyZSk7XG4gIHJldHVybiB3aGVyZSA/IGAgV0hFUkUgJHt3aGVyZX1gIDogXCJcIjtcbn1cblxuLyoqXG4gKiDthYzsnbTruJQg7IOd7ISx7ZWY64qUIOy8gOydtOyKpCAtIEZLIOyDneyEsVxuICovXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUNyZWF0ZUNvZGVfRm9yZWlnbihcbiAgdGFibGU6IHN0cmluZyxcbiAgZm9yZWlnbnM6IE1pZ3JhdGlvbkZvcmVpZ25bXSxcbik6IFByb21pc2U8R2VuTWlncmF0aW9uQ29kZVtdPiB7XG4gIGlmIChmb3JlaWducy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCB7IHVwLCBkb3duIH0gPSBnZW5Gb3JlaWduRGVmaW5pdGlvbnModGFibGUsIGZvcmVpZ25zKTtcbiAgaWYgKHVwLmxlbmd0aCA9PT0gMCAmJiBkb3duLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIGZvcmVpZ25z6rCAIOyeiOuKlOuNsCDsg53shLHrkJwg7L2U65Oc6rCAIOyXhuuKlCDqsr3smrDripQg67mE7KCV7IOB7KCB7J24IOyDge2ZqeydtOyngOunjCxcbiAgICAvLyDrp4jsnbTqt7jroIjsnbTshZgg7IOd7ISx7J2EIOykkeuLqOyLnO2CpOyngCDslYrqs6Ag67mIIOuwsOyXtOydhCDrsJjtmZjtlanri4jri6QuXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW1xuICAgICdpbXBvcnQgdHlwZSB7IEtuZXggfSBmcm9tIFwia25leFwiOycsXG4gICAgXCJcIixcbiAgICBcImV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cChrbmV4OiBLbmV4KTogUHJvbWlzZTx2b2lkPiB7XCIsXG4gICAgYHJldHVybiBrbmV4LnNjaGVtYS5hbHRlclRhYmxlKFwiJHt0YWJsZX1cIiwgKHRhYmxlKSA9PiB7YCxcbiAgICBcIi8vIGNyZWF0ZSBma1wiLFxuICAgIC4uLnVwLFxuICAgIFwifSk7XCIsXG4gICAgXCJ9XCIsXG4gICAgXCJcIixcbiAgICBcImV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb3duKGtuZXg6IEtuZXgpOiBQcm9taXNlPHZvaWQ+IHtcIixcbiAgICBgcmV0dXJuIGtuZXguc2NoZW1hLmFsdGVyVGFibGUoXCIke3RhYmxlfVwiLCAodGFibGUpID0+IHtgLFxuICAgIFwiLy8gZHJvcCBma1wiLFxuICAgIC4uLmRvd24sXG4gICAgXCJ9KTtcIixcbiAgICBcIn1cIixcbiAgXTtcblxuICBjb25zdCBmb3JlaWduS2V5c1N0cmluZyA9IGZvcmVpZ25zLm1hcCgoZm9yZWlnbikgPT4gZm9yZWlnbi5jb2x1bW5zLmpvaW4oXCJfXCIpKS5qb2luKFwiX1wiKTtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICB0YWJsZSxcbiAgICAgIHR5cGU6IFwiZm9yZWlnblwiLFxuICAgICAgdGl0bGU6IGBmb3JlaWduX18ke3RhYmxlfV9fJHtmb3JlaWduS2V5c1N0cmluZ31gLFxuICAgICAgZm9ybWF0dGVkOiBhd2FpdCBmb3JtYXRDb2RlKGxpbmVzLmpvaW4oXCJcXG5cIiksIGBzcmMvbWlncmF0aW9uLyR7dGFibGV9LnRzYCksXG4gICAgfSxcbiAgXTtcbn1cblxuLyoqXG4gKiBNaWdyYXRpb25Gb3JlaWduW10g7J297Ja07IScIOyZuOu2gO2CpCBjb25zdHJhaW50IOygleydmO2VmOuKlCDqtazrrLgg7IOd7ISxXG4gKi9cbmZ1bmN0aW9uIGdlbkZvcmVpZ25EZWZpbml0aW9ucyhcbiAgdGFibGU6IHN0cmluZyxcbiAgZm9yZWlnbnM6IE1pZ3JhdGlvbkZvcmVpZ25bXSxcbik6IHsgdXA6IHN0cmluZ1tdOyBkb3duOiBzdHJpbmdbXSB9IHtcbiAgcmV0dXJuIGZvcmVpZ25zLnJlZHVjZShcbiAgICAociwgZm9yZWlnbikgPT4ge1xuICAgICAgY29uc3QgY29sdW1uc1N0cmluZ1F1b3RlID0gZm9yZWlnbi5jb2x1bW5zXG4gICAgICAgIC5tYXAoKGNvbCkgPT4gYCcke2NvbC5yZXBsYWNlKGAke3RhYmxlfS5gLCBcIlwiKX0nYClcbiAgICAgICAgLmpvaW4oXCIsXCIpO1xuICAgICAgci51cC5wdXNoKFxuICAgICAgICBgdGFibGUuZm9yZWlnbignJHtmb3JlaWduLmNvbHVtbnMuam9pbihcIixcIil9JylcbiAgICAgICAgICAgIC5yZWZlcmVuY2VzKCcke2ZvcmVpZ24udG99JylcbiAgICAgICAgICAgIC5vblVwZGF0ZSgnJHtmb3JlaWduLm9uVXBkYXRlfScpXG4gICAgICAgICAgICAub25EZWxldGUoJyR7Zm9yZWlnbi5vbkRlbGV0ZX0nKWAsXG4gICAgICApO1xuICAgICAgci5kb3duLnB1c2goYHRhYmxlLmRyb3BGb3JlaWduKFske2NvbHVtbnNTdHJpbmdRdW90ZX1dKWApO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfSxcbiAgICB7XG4gICAgICB1cDogLyogU0FGRVRZOiBLbmV47JmAIFBvc3RncmVTUUwg7Iqk7YKk66eIIOyhsO2ajCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBbXSBhcyBzdHJpbmdbXSxcbiAgICAgIGRvd246IC8qIFNBRkVUWTogS25leOyZgCBQb3N0Z3JlU1FMIOyKpO2CpOuniCDsobDtmowg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gW10gYXMgc3RyaW5nW10sXG4gICAgfSxcbiAgKTtcbn1cblxuLyoqXG4gKiDthYzsnbTruJQg67OA6rK9IOy8gOydtOyKpCAtIOy7rOufvC/snbjrjbHsiqQg67OA6rK9XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlQWx0ZXJDb2RlX0NvbHVtbkFuZEluZGV4ZXMoXG4gIHRhYmxlOiBzdHJpbmcsXG4gIGVudGl0eUNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdLFxuICBlbnRpdHlJbmRleGVzOiBNaWdyYXRpb25JbmRleFtdLFxuICBkYkNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdLFxuICBkYkluZGV4ZXM6IE1pZ3JhdGlvbkluZGV4W10sXG4gIGRiRm9yZWlnbnM6IE1pZ3JhdGlvbkZvcmVpZ25bXSxcbiAgY29tcGFyZURCPzogS25leCxcbik6IFByb21pc2U8R2VuTWlncmF0aW9uQ29kZVtdPiB7XG4gIGNvbnN0IHJlc29sdmVkRW50aXR5Q29sdW1ucyA9IHJlc29sdmVTZWFyY2hUZXh0Q29sdW1ucyh0YWJsZSwgZW50aXR5Q29sdW1ucyk7XG4gIGNvbnN0IHNlYXJjaFRleHRDb2x1bW5OYW1lcyA9IGdldFNlYXJjaFRleHRDb2x1bW5OYW1lcyh0YWJsZSk7XG4gIC8qXG4gICAg7IS467aAIOu5hOq1kCDtm4Qg64uk66W47KCQIOywvuyVhOyEnCDsvZTrk5wg7IOd7ISxXG5cbiAgICAxLiDsu6zrn7zqsK/siJgg64uk66aEOiBNROyXkCDsnojsnLzrgpgsIERC7JeQIOyXhuuLpOuptCDstpTqsIBcbiAgICAyLiDsu6zrn7zqsK/siJgg64uk66aEOiBNROyXkCDsl4bsnLzrgpgsIERC7JeQIOyeiOuLpOuptCDsgq3soJxcbiAgICAzLiDqt7jsmbgg7Lus65+8KOy7rOufvCDqsK/siJjqsIAg64+Z7J287ZWY6rGw64KYLCDri6Trpbgg6rK97JqwIOuPmeydvO2VnCDsu6zrn7zrgbzrpqwpID0+IGFsdGVyXG4gICAgNC4g64uk66W46rGwIOuLpCDrj5nsnbztlZjqs6AgaW5kZXjrp4wg67OA6rK965CY64qUIOqyveyasFxuXG4gICAgKiog7Lus65+866qF7J2EIOuzgOqyve2VmOuKlCDqsr3smrDripQg65Sw66GcIO2VuOuTpOunge2VmOyngCDslYrsnYxcbiAgICA9PiBkcm9wL2FkZCDtmJXtg5zsnZgg66eI7J206re466CI7J207IWYIOy9lOuTnOqwgCDsg53shLHrkJjripTrjbAsIOyImOuPmeycvOuhnCByZW5hbWUg7L2U65Oc66GcIOyImOygle2VmOyXrCDsspjrpqxcbiAgKi9cblxuICAvLyBQSyhpZCkg7Lus65+8IO2DgOyehSDrs4Dqsr0g6rCQ7KeAIOuwjyDsspjrpqxcbiAgY29uc3QgZW50aXR5SWRDb2wgPSByZXNvbHZlZEVudGl0eUNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wubmFtZSA9PT0gXCJpZFwiKTtcbiAgY29uc3QgZGJJZENvbCA9IGRiQ29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5uYW1lID09PSBcImlkXCIpO1xuXG4gIGlmIChlbnRpdHlJZENvbCAmJiBkYklkQ29sICYmIGNvbXBhcmVEQikge1xuICAgIGNvbnN0IGlzUGtUeXBlQ2hhbmdlZCA9XG4gICAgICBlbnRpdHlJZENvbC50eXBlICE9PSBkYklkQ29sLnR5cGUgfHwgZW50aXR5SWRDb2wubGVuZ3RoICE9PSBkYklkQ29sLmxlbmd0aDtcblxuICAgIGlmIChpc1BrVHlwZUNoYW5nZWQpIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZVBrVHlwZUNoYW5nZU1pZ3JhdGlvbihcbiAgICAgICAgdGFibGUsXG4gICAgICAgIGVudGl0eUlkQ29sLFxuICAgICAgICBkYklkQ29sLFxuICAgICAgICByZXNvbHZlZEVudGl0eUNvbHVtbnMsXG4gICAgICAgIGVudGl0eUluZGV4ZXMsXG4gICAgICAgIGRiQ29sdW1ucyxcbiAgICAgICAgZGJJbmRleGVzLFxuICAgICAgICBkYkZvcmVpZ25zLFxuICAgICAgICBjb21wYXJlREIsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIOqwgSDsu6zrn7wg7J2066aEIOq4sOykgOycvOuhnCBhZGQsIGRyb3AsIGFsdGVyIOyXrOu2gCDtmZXsnbhcbiAgY29uc3QgYWx0ZXJDb2x1bW5zVG8gPSBnZXRBbHRlckNvbHVtbnNUbyhyZXNvbHZlZEVudGl0eUNvbHVtbnMsIGRiQ29sdW1ucywgc2VhcmNoVGV4dENvbHVtbk5hbWVzKTtcblxuICAvLyDstpTstpzrkJwg7Lus65+865Ok7J2EIOq4sOykgOycvOuhnCDqsIHqsIEg65287J24IOyDneyEsVxuICBjb25zdCBhbHRlckNvbHVtbkxpbmVzVG8gPSBnZXRBbHRlckNvbHVtbkxpbmVzVG8oXG4gICAgYWx0ZXJDb2x1bW5zVG8sXG4gICAgcmVzb2x2ZWRFbnRpdHlDb2x1bW5zLFxuICAgIHRhYmxlLFxuICAgIGRiRm9yZWlnbnMsXG4gICk7XG5cbiAgLy8g7J24642x7Iqk7J2YIGFkZCwgZHJvcCDsl6zrtoAg7ZmV7J24XG4gIGNvbnN0IGFsdGVySW5kZXhlc1RvID0gZ2V0QWx0ZXJJbmRleGVzVG8oZW50aXR5SW5kZXhlcywgZGJJbmRleGVzKTtcbiAgY29uc3QgcmVjcmVhdGVkU2VhcmNoVGV4dENvbHVtbk5hbWVzID0gbmV3IFNldChcbiAgICBhbHRlckNvbHVtbnNUby5hbHRlclxuICAgICAgLmZpbHRlcigoZGJDb2x1bW4pID0+IHtcbiAgICAgICAgY29uc3QgZW50aXR5Q29sdW1uID0gcmVzb2x2ZWRFbnRpdHlDb2x1bW5zLmZpbmQoKGNvbCkgPT4gY29sLm5hbWUgPT09IGRiQ29sdW1uLm5hbWUpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHNlYXJjaFRleHRDb2x1bW5OYW1lcy5oYXMoZGJDb2x1bW4ubmFtZSkgJiZcbiAgICAgICAgICBkYkNvbHVtbi5nZW5lcmF0ZWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGVudGl0eUNvbHVtbj8uZ2VuZXJhdGVkICE9PSB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgICAubWFwKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lKSxcbiAgKTtcbiAgY29uc3QgcmVjcmVhdGVkU2VhcmNoVGV4dERiSW5kZXhlcyA9IGRiSW5kZXhlcy5maWx0ZXIoXG4gICAgKGluZGV4KSA9PlxuICAgICAgaW5kZXguY29sdW1ucy5zb21lKCh7IG5hbWUgfSkgPT4gcmVjcmVhdGVkU2VhcmNoVGV4dENvbHVtbk5hbWVzLmhhcyhuYW1lKSkgJiZcbiAgICAgICFhbHRlckluZGV4ZXNUby5kcm9wLnNvbWUoKGRyb3BJbmRleCkgPT4gZHJvcEluZGV4Lm5hbWUgPT09IGluZGV4Lm5hbWUpLFxuICApO1xuICBjb25zdCByZWNyZWF0ZWRTZWFyY2hUZXh0RW50aXR5SW5kZXhlcyA9IGVudGl0eUluZGV4ZXMuZmlsdGVyKFxuICAgIChpbmRleCkgPT5cbiAgICAgIGluZGV4LmNvbHVtbnMuc29tZSgoeyBuYW1lIH0pID0+IHJlY3JlYXRlZFNlYXJjaFRleHRDb2x1bW5OYW1lcy5oYXMobmFtZSkpICYmXG4gICAgICAhYWx0ZXJJbmRleGVzVG8uYWRkLnNvbWUoKGFkZEluZGV4KSA9PiBhZGRJbmRleC5uYW1lID09PSBpbmRleC5uYW1lKSxcbiAgKTtcbiAgY29uc3QgaW1wbGljaXRseURyb3BwZWREYkluZGV4ZXMgPSBhbHRlckluZGV4ZXNUby5kcm9wLmZpbHRlcigoaW5kZXgpID0+XG4gICAgaW5kZXguY29sdW1ucy5ldmVyeSgoeyBuYW1lIH0pID0+IGFsdGVyQ29sdW1uc1RvLmRyb3Auc29tZSgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gbmFtZSkpLFxuICApO1xuXG4gIC8vIOyduOuNseyKpOqwgCDsgq3soJzrkJjripQg6rK97JqwLCDsu6zrn7zqs7wg6rCZ7J20IOyCreygnOuQnCDsvIDsnbTsiqTsl5DripQgZHJvcOyXkOyEnCDsoJzsmbjtlbTslbztlaghXG4gIGNvbnN0IGluZGV4TmVlZHNUb0Ryb3AgPSBhbHRlckluZGV4ZXNUby5kcm9wLmZpbHRlcihcbiAgICAoaW5kZXgpID0+ICFpbXBsaWNpdGx5RHJvcHBlZERiSW5kZXhlcy5zb21lKChkcm9wcGVkSW5kZXgpID0+IGRyb3BwZWRJbmRleC5uYW1lID09PSBpbmRleC5uYW1lKSxcbiAgKTtcblxuICAvLyDruYgg7L2U65OcIOyDneyEsSDrsKnsp4BcbiAgY29uc3QgaGFzVXBDaGFuZ2VzID1cbiAgICBhbHRlckNvbHVtbkxpbmVzVG8uYWRkLnVwLmJ1aWxkZXIubGVuZ3RoID4gMCB8fFxuICAgIGFsdGVyQ29sdW1uTGluZXNUby5hZGQudXAucmF3Lmxlbmd0aCA+IDAgfHxcbiAgICBhbHRlckNvbHVtbkxpbmVzVG8uZHJvcC51cC5idWlsZGVyLmxlbmd0aCA+IDAgfHxcbiAgICBhbHRlckNvbHVtbkxpbmVzVG8uYWx0ZXIudXAuYnVpbGRlci5sZW5ndGggPiAwIHx8XG4gICAgYWx0ZXJDb2x1bW5MaW5lc1RvLmFsdGVyLnVwLnJhdy5sZW5ndGggPiAwIHx8XG4gICAgYWx0ZXJJbmRleGVzVG8uYWRkLmxlbmd0aCA+IDAgfHxcbiAgICBpbmRleE5lZWRzVG9Ecm9wLmxlbmd0aCA+IDAgfHxcbiAgICByZWNyZWF0ZWRTZWFyY2hUZXh0RGJJbmRleGVzLmxlbmd0aCA+IDA7XG4gIGlmICghaGFzVXBDaGFuZ2VzKSB7XG4gICAgLy8g67OA6rK97IKs7ZWt7J20IOyXhuycvOuptCDruYgg67Cw7Je0IOuwmO2ZmFxuICAgIHJldHVybiBbXTtcbiAgfVxuICBOYWl0ZS50KFwibWlncmF0b3I6Z2VuZXJhdGVBbHRlckNvZGVfQ29sdW1uQW5kSW5kZXhlczpkZWJ1Z1wiLCB7XG4gICAgXCJhbHRlckNvbHVtbnNUby5hZGQubGVuZ3RoXCI6IGFsdGVyQ29sdW1uc1RvLmFkZC5sZW5ndGgsXG4gICAgXCJhbHRlckNvbHVtbnNUby5kcm9wLmxlbmd0aFwiOiBhbHRlckNvbHVtbnNUby5kcm9wLmxlbmd0aCxcbiAgICBcImFsdGVyQ29sdW1uc1RvLmFsdGVyLmxlbmd0aFwiOiBhbHRlckNvbHVtbnNUby5hbHRlci5sZW5ndGgsXG4gICAgXCJhbHRlckluZGV4ZXNUby5hZGQubGVuZ3RoXCI6IGFsdGVySW5kZXhlc1RvLmFkZC5sZW5ndGgsXG4gICAgXCJhbHRlckluZGV4ZXNUby5kcm9wLmxlbmd0aFwiOiBhbHRlckluZGV4ZXNUby5kcm9wLmxlbmd0aCxcbiAgICBcImluZGV4TmVlZHNUb0Ryb3AubGVuZ3RoXCI6IGluZGV4TmVlZHNUb0Ryb3AubGVuZ3RoLFxuICB9KTtcbiAgLy8gTmFpdGUudChcIm1pZ3JhdG9yOmdlbmVyYXRlQWx0ZXJDb2RlX0NvbHVtbkFuZEluZGV4ZXM6YWx0ZXJDb2x1bW5zVG9cIiwgYWx0ZXJDb2x1bW5zVG8pO1xuXG4gIC8vIFRPRE86IOyduOuNseyKpOuqhSDrs4Dqsr3rkJwg6rK97JqwIOyymOumrFxuXG4gIC8vIHRhYmxlIGJ1aWxkZXIg66mU7ISc65Oc66GcIOyLpO2Wie2VoCDsvZTrk5wgKGRyb3Ag4oaSIGFkZCDihpIgYWx0ZXIg7Iic7IScKVxuICBjb25zdCB1cEJ1aWxkZXJMaW5lcyA9IFtcbiAgICAuLi4oYWx0ZXJDb2x1bW5MaW5lc1RvLmRyb3AudXAuYnVpbGRlci5sZW5ndGggPiAwID8gYWx0ZXJDb2x1bW5MaW5lc1RvLmRyb3AudXAuYnVpbGRlciA6IFtdKSxcbiAgICAuLi4oYWx0ZXJDb2x1bW5MaW5lc1RvLmFkZC51cC5idWlsZGVyLmxlbmd0aCA+IDAgPyBhbHRlckNvbHVtbkxpbmVzVG8uYWRkLnVwLmJ1aWxkZXIgOiBbXSksXG4gICAgLi4ucmVjcmVhdGVkU2VhcmNoVGV4dERiSW5kZXhlcy5tYXAoZ2VuSW5kZXhEcm9wRGVmaW5pdGlvbiksXG4gICAgLi4uKGFsdGVyQ29sdW1uTGluZXNUby5hbHRlci51cC5idWlsZGVyLmxlbmd0aCA+IDAgPyBhbHRlckNvbHVtbkxpbmVzVG8uYWx0ZXIudXAuYnVpbGRlciA6IFtdKSxcbiAgICAuLi5pbmRleE5lZWRzVG9Ecm9wLm1hcChnZW5JbmRleERyb3BEZWZpbml0aW9uKSxcbiAgXTtcblxuICAvLyBrbmV4LnJhdygp66GcIOyLpO2Wie2VoCDsvZTrk5xcbiAgY29uc3QgdXBSYXdMaW5lcyA9IFtcbiAgICAuLi4oYWx0ZXJDb2x1bW5MaW5lc1RvLmFkZC51cC5yYXcubGVuZ3RoID4gMCA/IGFsdGVyQ29sdW1uTGluZXNUby5hZGQudXAucmF3IDogW10pLFxuICAgIC4uLihhbHRlckNvbHVtbkxpbmVzVG8uYWx0ZXIudXAucmF3Lmxlbmd0aCA+IDAgPyBhbHRlckNvbHVtbkxpbmVzVG8uYWx0ZXIudXAucmF3IDogW10pLFxuICAgIC4uLnJlY3JlYXRlZFNlYXJjaFRleHRFbnRpdHlJbmRleGVzLm1hcCgoaW5kZXgpID0+IGdlbkluZGV4RGVmaW5pdGlvbihpbmRleCwgdGFibGUpKSxcbiAgICAuLi5hbHRlckluZGV4ZXNUby5hZGQubWFwKChpbmRleCkgPT4gZ2VuSW5kZXhEZWZpbml0aW9uKGluZGV4LCB0YWJsZSkpLFxuICBdO1xuXG4gIC8vIGRvd27snYAgdXDsnZgg7Jet7IicIChhZGQuZG93biA9IGRyb3Agcm9sbGJhY2ssIGRyb3AuZG93biA9IGFkZCByb2xsYmFjaylcbiAgY29uc3QgZG93bkJ1aWxkZXJMaW5lcyA9IFtcbiAgICAuLi4oYWx0ZXJDb2x1bW5MaW5lc1RvLmFkZC5kb3duLmJ1aWxkZXIubGVuZ3RoID4gMCA/IGFsdGVyQ29sdW1uTGluZXNUby5hZGQuZG93bi5idWlsZGVyIDogW10pLFxuICAgIC4uLnJlY3JlYXRlZFNlYXJjaFRleHRFbnRpdHlJbmRleGVzLm1hcChnZW5JbmRleERyb3BEZWZpbml0aW9uKSxcbiAgICAuLi4oYWx0ZXJDb2x1bW5MaW5lc1RvLmFsdGVyLmRvd24uYnVpbGRlci5sZW5ndGggPiAwXG4gICAgICA/IGFsdGVyQ29sdW1uTGluZXNUby5hbHRlci5kb3duLmJ1aWxkZXJcbiAgICAgIDogW10pLFxuICAgIC4uLihhbHRlckNvbHVtbkxpbmVzVG8uZHJvcC5kb3duLmJ1aWxkZXIubGVuZ3RoID4gMFxuICAgICAgPyBhbHRlckNvbHVtbkxpbmVzVG8uZHJvcC5kb3duLmJ1aWxkZXJcbiAgICAgIDogW10pLFxuICAgIC4uLmFsdGVySW5kZXhlc1RvLmFkZFxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKGluZGV4KSA9PlxuICAgICAgICAgICFpbmRleC5jb2x1bW5zLmV2ZXJ5KChpbmRleENvbCkgPT5cbiAgICAgICAgICAgIGFsdGVyQ29sdW1uc1RvLmFkZC5tYXAoKGNvbCkgPT4gY29sLm5hbWUpLmluY2x1ZGVzKGluZGV4Q29sLm5hbWUpLFxuICAgICAgICAgICksXG4gICAgICApXG4gICAgICAubWFwKGdlbkluZGV4RHJvcERlZmluaXRpb24pLFxuICBdO1xuXG4gIGNvbnN0IGRvd25SYXdMaW5lcyA9IFtcbiAgICAuLi4oYWx0ZXJDb2x1bW5MaW5lc1RvLmRyb3AuZG93bi5yYXcubGVuZ3RoID4gMCA/IGFsdGVyQ29sdW1uTGluZXNUby5kcm9wLmRvd24ucmF3IDogW10pLFxuICAgIC4uLihhbHRlckNvbHVtbkxpbmVzVG8uYWx0ZXIuZG93bi5yYXcubGVuZ3RoID4gMCA/IGFsdGVyQ29sdW1uTGluZXNUby5hbHRlci5kb3duLnJhdyA6IFtdKSxcbiAgICAuLi5yZWNyZWF0ZWRTZWFyY2hUZXh0RGJJbmRleGVzLm1hcCgoaW5kZXgpID0+IGdlbkluZGV4RGVmaW5pdGlvbihpbmRleCwgdGFibGUpKSxcbiAgICAuLi5pbXBsaWNpdGx5RHJvcHBlZERiSW5kZXhlcy5tYXAoKGluZGV4KSA9PiBnZW5JbmRleERlZmluaXRpb24oaW5kZXgsIHRhYmxlKSksXG4gICAgLi4uaW5kZXhOZWVkc1RvRHJvcC5tYXAoKGluZGV4KSA9PiBnZW5JbmRleERlZmluaXRpb24oaW5kZXgsIHRhYmxlKSksXG4gIF07XG5cbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW1xuICAgICdpbXBvcnQgdHlwZSB7IEtuZXggfSBmcm9tIFwia25leFwiOycsXG4gICAgXCJcIixcbiAgICBcImV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cChrbmV4OiBLbmV4KTogUHJvbWlzZTx2b2lkPiB7XCIsXG4gICAgLi4uKHVwQnVpbGRlckxpbmVzLmxlbmd0aCA+IDBcbiAgICAgID8gW2Bhd2FpdCBrbmV4LnNjaGVtYS5hbHRlclRhYmxlKFwiJHt0YWJsZX1cIiwgKHRhYmxlKSA9PiB7YCwgLi4udXBCdWlsZGVyTGluZXMsIFwifSk7XCJdXG4gICAgICA6IFtdKSxcbiAgICAuLi51cFJhd0xpbmVzLFxuICAgIFwifVwiLFxuICAgIFwiXCIsXG4gICAgXCJleHBvcnQgYXN5bmMgZnVuY3Rpb24gZG93bihrbmV4OiBLbmV4KTogUHJvbWlzZTx2b2lkPiB7XCIsXG4gICAgLi4uKGRvd25CdWlsZGVyTGluZXMubGVuZ3RoID4gMFxuICAgICAgPyBbYGF3YWl0IGtuZXguc2NoZW1hLmFsdGVyVGFibGUoXCIke3RhYmxlfVwiLCAodGFibGUpID0+IHtgLCAuLi5kb3duQnVpbGRlckxpbmVzLCBcIn0pO1wiXVxuICAgICAgOiBbXSksXG4gICAgLi4uZG93blJhd0xpbmVzLFxuICAgIFwifVwiLFxuICBdO1xuXG4gIGNvbnN0IGZvcm1hdHRlZCA9IGF3YWl0IGZvcm1hdENvZGUobGluZXMuam9pbihcIlxcblwiKSwgYHNyYy9taWdyYXRpb24vJHt0YWJsZX0udHNgKTtcbiAgY29uc3QgdGl0bGUgPSBbXG4gICAgXCJhbHRlclwiLFxuICAgIHRhYmxlLFxuICAgIC4uLihbXCJhZGRcIiwgXCJkcm9wXCIsIFwiYWx0ZXJcIl0gYXMgY29uc3QpXG4gICAgICAubWFwKChhY3Rpb24pID0+IHtcbiAgICAgICAgY29uc3QgbGVuID0gYWx0ZXJDb2x1bW5zVG9bYWN0aW9uXS5sZW5ndGg7XG4gICAgICAgIGlmIChsZW4gPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIGFjdGlvbiArIGxlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0ICE9PSBudWxsKSxcbiAgXS5qb2luKFwiX1wiKTtcblxuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHRhYmxlLFxuICAgICAgdGl0bGUsXG4gICAgICBmb3JtYXR0ZWQsXG4gICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICog7Lus65+8IOu5hOq1kOulvCDsnITtlbQgR2VuZXJhdGVkIENvbHVtbuydmCBleHByZXNzaW9u7J2EIOygnOyZuO2VnCDqsJ3ssrTrpbwg7IOd7ISxXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUpzb25iRW1wdHlEZWZhdWx0Rm9yQ29tcGFyaXNvbjxWYWx1ZT4oZGVmYXVsdFRvOiBWYWx1ZSk6IFZhbHVlIHwgc3RyaW5nIHtcbiAgaWYgKCFpc1N0cmluZ1ZhbHVlKGRlZmF1bHRUbykpIHtcbiAgICByZXR1cm4gZGVmYXVsdFRvO1xuICB9XG5cbiAgY29uc3Qgd2l0aG91dENhc3QgPSBkZWZhdWx0VG9cbiAgICAudHJpbSgpXG4gICAgLnJlcGxhY2UoLzo6XFxzKmpzb25iJC9pLCBcIlwiKVxuICAgIC50cmltKCk7XG4gIGlmICh3aXRob3V0Q2FzdCA9PT0gXCInW10nXCIgfHwgd2l0aG91dENhc3QgPT09ICdcIltdXCInKSB7XG4gICAgcmV0dXJuICdcIltdXCInO1xuICB9XG4gIGlmICh3aXRob3V0Q2FzdCA9PT0gXCIne30nXCIgfHwgd2l0aG91dENhc3QgPT09ICdcInt9XCInKSB7XG4gICAgcmV0dXJuICdcInt9XCInO1xuICB9XG4gIHJldHVybiBkZWZhdWx0VG87XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbHVtbkZvckNvbXBhcmlzb24oXG4gIGNvbDogTWlncmF0aW9uQ29sdW1uLFxuICBzZWFyY2hUZXh0Q29sdW1uTmFtZXM6IFNldDxzdHJpbmc+LFxuKTogTWlncmF0aW9uQ29sdW1uIHtcbiAgY29uc3Qgbm9ybWFsaXplZERlZmF1bHRUbyA9XG4gICAgY29sLnR5cGUgPT09IFwianNvblwiICYmIGNvbC5kZWZhdWx0VG8gIT09IHVuZGVmaW5lZFxuICAgICAgPyBub3JtYWxpemVKc29uYkVtcHR5RGVmYXVsdEZvckNvbXBhcmlzb24oY29sLmRlZmF1bHRUbylcbiAgICAgIDogY29sLmRlZmF1bHRUbztcbiAgY29uc3Qgbm9ybWFsaXplZENvbHVtbiA9XG4gICAgbm9ybWFsaXplZERlZmF1bHRUbyA9PT0gY29sLmRlZmF1bHRUbyA/IGNvbCA6IHsgLi4uY29sLCBkZWZhdWx0VG86IG5vcm1hbGl6ZWREZWZhdWx0VG8gfTtcblxuICBpZiAoIW5vcm1hbGl6ZWRDb2x1bW4uZ2VuZXJhdGVkKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRDb2x1bW47XG4gIH1cblxuICBpZiAoIXNlYXJjaFRleHRDb2x1bW5OYW1lcy5oYXMobm9ybWFsaXplZENvbHVtbi5uYW1lKSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5ub3JtYWxpemVkQ29sdW1uLFxuICAgICAgZ2VuZXJhdGVkOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4ubm9ybWFsaXplZENvbHVtbixcbiAgICBnZW5lcmF0ZWQ6IHtcbiAgICAgIC4uLm5vcm1hbGl6ZWRDb2x1bW4uZ2VuZXJhdGVkLFxuICAgICAgZXhwcmVzc2lvbjogY2Fub25pY2FsaXplU2VhcmNoVGV4dEdlbmVyYXRlZEV4cHJlc3Npb24obm9ybWFsaXplZENvbHVtbi5nZW5lcmF0ZWQuZXhwcmVzc2lvbiksXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiDqsIEg7Lus65+8IOydtOumhCDquLDspIDsnLzroZwgYWRkLCBkcm9wLCBhbHRlciDsl6zrtoAg7ZmV7J24XG4gKi9cbmZ1bmN0aW9uIGdldEFsdGVyQ29sdW1uc1RvKFxuICBlbnRpdHlDb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXSxcbiAgZGJDb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXSxcbiAgc2VhcmNoVGV4dENvbHVtbk5hbWVzOiBTZXQ8c3RyaW5nPixcbikge1xuICBjb25zdCBjb2x1bW5zVG8gPSB7XG4gICAgYWRkOiAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIE1pZ3JhdGlvbkNvbHVtbltdLFxuICAgIGRyb3A6IC8qIFNBRkVUWTogS25leOyZgCBQb3N0Z3JlU1FMIOyKpO2CpOuniCDsobDtmowg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gW10gYXMgTWlncmF0aW9uQ29sdW1uW10sXG4gICAgYWx0ZXI6XG4gICAgICAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIE1pZ3JhdGlvbkNvbHVtbltdLFxuICB9O1xuXG4gIC8vIOy7rOufvOuqhSDquLDspIAg67mE6rWQXG4gIGNvbnN0IGV4dHJhQ29sdW1ucyA9IHtcbiAgICBkYjogZGlmZihkYkNvbHVtbnMsIGVudGl0eUNvbHVtbnMsIChjb2wpID0+IFtjb2wubmFtZSwgY29sLmdlbmVyYXRlZD8udHlwZV0uam9pbihcIi8vL1wiKSksXG4gICAgZW50aXR5OiBkaWZmKGVudGl0eUNvbHVtbnMsIGRiQ29sdW1ucywgKGNvbCkgPT4gW2NvbC5uYW1lLCBjb2wuZ2VuZXJhdGVkPy50eXBlXS5qb2luKFwiLy8vXCIpKSxcbiAgfTtcbiAgaWYgKGV4dHJhQ29sdW1ucy5lbnRpdHkubGVuZ3RoID4gMCkge1xuICAgIGNvbHVtbnNUby5hZGQgPSBjb2x1bW5zVG8uYWRkLmNvbmNhdChleHRyYUNvbHVtbnMuZW50aXR5KTtcbiAgfVxuICBpZiAoZXh0cmFDb2x1bW5zLmRiLmxlbmd0aCA+IDApIHtcbiAgICBjb2x1bW5zVG8uZHJvcCA9IGNvbHVtbnNUby5kcm9wLmNvbmNhdChleHRyYUNvbHVtbnMuZGIpO1xuICB9XG5cbiAgLy8g64+Z7J28IOy7rOufvOuqheydmCDshLjrtoAg7ZWE65OcIOu5hOq1kFxuICBjb25zdCBzYW1lRGJDb2x1bW5zID0gaW50ZXJzZWN0aW9uQnkoZGJDb2x1bW5zLCBlbnRpdHlDb2x1bW5zLCAoY29sKSA9PiBjb2wubmFtZSk7XG4gIGNvbnN0IHNhbWVNZENvbHVtbnMgPSBpbnRlcnNlY3Rpb25CeShlbnRpdHlDb2x1bW5zLCBkYkNvbHVtbnMsIChjb2wpID0+IGNvbC5uYW1lKTtcbiAgY29sdW1uc1RvLmFsdGVyID0gZGlmZmVyZW5jZVdpdGgoc2FtZURiQ29sdW1ucywgc2FtZU1kQ29sdW1ucywgKGEsIGIpID0+XG4gICAgZXF1YWwoXG4gICAgICBub3JtYWxpemVDb2x1bW5Gb3JDb21wYXJpc29uKGEsIHNlYXJjaFRleHRDb2x1bW5OYW1lcyksXG4gICAgICBub3JtYWxpemVDb2x1bW5Gb3JDb21wYXJpc29uKGIsIHNlYXJjaFRleHRDb2x1bW5OYW1lcyksXG4gICAgKSxcbiAgKTtcblxuICByZXR1cm4gY29sdW1uc1RvO1xufVxuXG4vKipcbiAqIOy2lOy2nOuQnCDsu6zrn7zrk6TsnYQg6riw7KSA7Jy866GcIOqwgeqwgSDrnbzsnbgg7IOd7ISxXG4gKi9cbmZ1bmN0aW9uIGdldEFsdGVyQ29sdW1uTGluZXNUbyhcbiAgY29sdW1uc1RvOiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRBbHRlckNvbHVtbnNUbz4sXG4gIGVudGl0eUNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdLFxuICB0YWJsZTogc3RyaW5nLFxuICBkYkZvcmVpZ25zOiBNaWdyYXRpb25Gb3JlaWduW10sXG4pIHtcbiAgY29uc3Qgc2VhcmNoVGV4dENvbHVtbk5hbWVzID0gZ2V0U2VhcmNoVGV4dENvbHVtbk5hbWVzKHRhYmxlKTtcbiAgY29uc3QgbGluZXNUbyA9IHtcbiAgICBhZGQ6IHtcbiAgICAgIHVwOiB7XG4gICAgICAgIGJ1aWxkZXI6XG4gICAgICAgICAgLyogU0FGRVRZOiBLbmV47JmAIFBvc3RncmVTUUwg7Iqk7YKk66eIIOyhsO2ajCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBbXSBhcyBzdHJpbmdbXSxcbiAgICAgICAgcmF3OiAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIHN0cmluZ1tdLFxuICAgICAgfSxcbiAgICAgIGRvd246IHtcbiAgICAgICAgYnVpbGRlcjpcbiAgICAgICAgICAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIHN0cmluZ1tdLFxuICAgICAgICByYXc6IC8qIFNBRkVUWTogS25leOyZgCBQb3N0Z3JlU1FMIOyKpO2CpOuniCDsobDtmowg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gW10gYXMgc3RyaW5nW10sXG4gICAgICB9LFxuICAgIH0sXG4gICAgZHJvcDoge1xuICAgICAgdXA6IHtcbiAgICAgICAgYnVpbGRlcjpcbiAgICAgICAgICAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIHN0cmluZ1tdLFxuICAgICAgICByYXc6IC8qIFNBRkVUWTogS25leOyZgCBQb3N0Z3JlU1FMIOyKpO2CpOuniCDsobDtmowg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gW10gYXMgc3RyaW5nW10sXG4gICAgICB9LFxuICAgICAgZG93bjoge1xuICAgICAgICBidWlsZGVyOlxuICAgICAgICAgIC8qIFNBRkVUWTogS25leOyZgCBQb3N0Z3JlU1FMIOyKpO2CpOuniCDsobDtmowg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gW10gYXMgc3RyaW5nW10sXG4gICAgICAgIHJhdzogLyogU0FGRVRZOiBLbmV47JmAIFBvc3RncmVTUUwg7Iqk7YKk66eIIOyhsO2ajCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBbXSBhcyBzdHJpbmdbXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBhbHRlcjoge1xuICAgICAgdXA6IHtcbiAgICAgICAgYnVpbGRlcjpcbiAgICAgICAgICAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIHN0cmluZ1tdLFxuICAgICAgICByYXc6IC8qIFNBRkVUWTogS25leOyZgCBQb3N0Z3JlU1FMIOyKpO2CpOuniCDsobDtmowg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gW10gYXMgc3RyaW5nW10sXG4gICAgICB9LFxuICAgICAgZG93bjoge1xuICAgICAgICBidWlsZGVyOlxuICAgICAgICAgIC8qIFNBRkVUWTogS25leOyZgCBQb3N0Z3JlU1FMIOyKpO2CpOuniCDsobDtmowg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gW10gYXMgc3RyaW5nW10sXG4gICAgICAgIHJhdzogLyogU0FGRVRZOiBLbmV47JmAIFBvc3RncmVTUUwg7Iqk7YKk66eIIOyhsO2ajCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBbXSBhcyBzdHJpbmdbXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICAvLyBhZGQgY29sdW1uc1xuICBjb25zdCBhZGRDb2x1bW5EZWZzID0gZ2VuQ29sdW1uRGVmaW5pdGlvbnModGFibGUsIGNvbHVtbnNUby5hZGQpO1xuICBsaW5lc1RvLmFkZC51cCA9IHtcbiAgICBidWlsZGVyOiBhZGRDb2x1bW5EZWZzLmJ1aWxkZXIubGVuZ3RoID4gMCA/IFtcIi8vIGFkZFwiLCAuLi5hZGRDb2x1bW5EZWZzLmJ1aWxkZXJdIDogW10sXG4gICAgcmF3OlxuICAgICAgYWRkQ29sdW1uRGVmcy5yYXcubGVuZ3RoID4gMFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIC4uLmdldFNlYXJjaFRleHRIZWxwZXJEZWZpbml0aW9ucyh0YWJsZSwgY29sdW1uc1RvLmFkZCksXG4gICAgICAgICAgICBcIi8vIGFkZCAoZ2VuZXJhdGVkKVwiLFxuICAgICAgICAgICAgLi4uYWRkQ29sdW1uRGVmcy5yYXcsXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdLFxuICB9O1xuICBsaW5lc1RvLmFkZC5kb3duID0ge1xuICAgIGJ1aWxkZXI6XG4gICAgICBjb2x1bW5zVG8uYWRkLmxlbmd0aCA+IDBcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBcIi8vIHJvbGxiYWNrIC0gYWRkXCIsXG4gICAgICAgICAgICBgdGFibGUuZHJvcENvbHVtbnMoJHtjb2x1bW5zVG8uYWRkLm1hcCgoY29sKSA9PiBgJyR7Y29sLm5hbWV9J2ApLmpvaW4oXCIsIFwiKX0pYCxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10sXG4gICAgcmF3OiBbXSxcbiAgfTtcblxuICAvLyBkcm9w7ZWgIOy7rOufvOyXkCDqsbjrprAgRksg7LC+6riwXG4gIGNvbnN0IGRyb3BDb2x1bW5OYW1lcyA9IGNvbHVtbnNUby5kcm9wLm1hcCgoY29sKSA9PiBjb2wubmFtZSk7XG4gIGNvbnN0IGZrVG9Ecm9wQmVmb3JlQ29sdW1uID0gZGJGb3JlaWducy5maWx0ZXIoKGZrKSA9PlxuICAgIGZrLmNvbHVtbnMuc29tZSgoY29sKSA9PiBkcm9wQ29sdW1uTmFtZXMuaW5jbHVkZXMoY29sKSksXG4gICk7XG5cbiAgY29uc3QgZHJvcEZrTGluZXMgPSBma1RvRHJvcEJlZm9yZUNvbHVtbi5tYXAoKGZrKSA9PiB7XG4gICAgY29uc3QgY29sdW1uc1N0cmluZ1F1b3RlID0gZmsuY29sdW1ucy5tYXAoKGNvbCkgPT4gYCcke2NvbH0nYCkuam9pbihcIixcIik7XG4gICAgcmV0dXJuIGB0YWJsZS5kcm9wRm9yZWlnbihbJHtjb2x1bW5zU3RyaW5nUXVvdGV9XSlgO1xuICB9KTtcblxuICBjb25zdCByZXN0b3JlRmtMaW5lcyA9IGdlbkZvcmVpZ25EZWZpbml0aW9ucyh0YWJsZSwgZmtUb0Ryb3BCZWZvcmVDb2x1bW4pLnVwO1xuXG4gIC8vIGRyb3DsnZggcm9sbGJhY2vsi5zsl5DripQgZ2VuZXJhdGVkIGNvbHVtbuuPhCDrs7Xsm5DtlbTslbwg7ZWoXG4gIGNvbnN0IGRyb3BDb2x1bW5EZWZzID0gZ2VuQ29sdW1uRGVmaW5pdGlvbnModGFibGUsIGNvbHVtbnNUby5kcm9wKTtcbiAgbGluZXNUby5kcm9wID0ge1xuICAgIHVwOiB7XG4gICAgICBidWlsZGVyOiBbXG4gICAgICAgIC4uLihkcm9wRmtMaW5lcy5sZW5ndGggPiAwXG4gICAgICAgICAgPyBbXCIvLyBkcm9wIGZvcmVpZ24ga2V5cyBvbiBjb2x1bW5zIHRvIGJlIGRyb3BwZWRcIiwgLi4uZHJvcEZrTGluZXNdXG4gICAgICAgICAgOiBbXSksXG4gICAgICAgIC4uLihjb2x1bW5zVG8uZHJvcC5sZW5ndGggPiAwXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIFwiLy8gZHJvcCBjb2x1bW5zXCIsXG4gICAgICAgICAgICAgIGB0YWJsZS5kcm9wQ29sdW1ucygke2NvbHVtbnNUby5kcm9wLm1hcCgoY29sKSA9PiBgJyR7Y29sLm5hbWV9J2ApLmpvaW4oXCIsIFwiKX0pYCxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtdKSxcbiAgICAgIF0sXG4gICAgICByYXc6IFtdLFxuICAgIH0sXG4gICAgZG93bjoge1xuICAgICAgYnVpbGRlcjogW1xuICAgICAgICAuLi4oZHJvcENvbHVtbkRlZnMuYnVpbGRlci5sZW5ndGggPiAwXG4gICAgICAgICAgPyBbXCIvLyByb2xsYmFjayAtIGRyb3AgY29sdW1uc1wiLCAuLi5kcm9wQ29sdW1uRGVmcy5idWlsZGVyXVxuICAgICAgICAgIDogW10pLFxuICAgICAgICAuLi4ocmVzdG9yZUZrTGluZXMubGVuZ3RoID4gMCA/IFtcIi8vIHJlc3RvcmUgZm9yZWlnbiBrZXlzXCIsIC4uLnJlc3RvcmVGa0xpbmVzXSA6IFtdKSxcbiAgICAgIF0sXG4gICAgICByYXc6XG4gICAgICAgIGRyb3BDb2x1bW5EZWZzLnJhdy5sZW5ndGggPiAwXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIC4uLmdldFNlYXJjaFRleHRIZWxwZXJEZWZpbml0aW9ucyh0YWJsZSwgY29sdW1uc1RvLmRyb3ApLFxuICAgICAgICAgICAgICBcIi8vIHJvbGxiYWNrIC0gZHJvcCBjb2x1bW5zIChnZW5lcmF0ZWQpXCIsXG4gICAgICAgICAgICAgIC4uLmRyb3BDb2x1bW5EZWZzLnJhdyxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtdLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gYWx0ZXIgY29sdW1ucyAoR2VuZXJhdGVkIENvbHVtbuydgCBBTFRFUiDrtojqsIDtlZjrr4DroZwgZHJvcCDtm4Qg7J6s7IOd7ISxKVxuICBsaW5lc1RvLmFsdGVyID0gY29sdW1uc1RvLmFsdGVyLnJlZHVjZShcbiAgICAociwgZGJDb2x1bW4pID0+IHtcbiAgICAgIGNvbnN0IGVudGl0eUNvbHVtbiA9IGVudGl0eUNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wubmFtZSA9PT0gZGJDb2x1bW4ubmFtZSk7XG4gICAgICBpZiAoZW50aXR5Q29sdW1uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgc2VhcmNoVGV4dENvbHVtbk5hbWVzLmhhcyhkYkNvbHVtbi5uYW1lKSAmJlxuICAgICAgICBkYkNvbHVtbi5nZW5lcmF0ZWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBlbnRpdHlDb2x1bW4uZ2VuZXJhdGVkICE9PSB1bmRlZmluZWRcbiAgICAgICkge1xuICAgICAgICByLnVwLmJ1aWxkZXIgPSBbXG4gICAgICAgICAgLi4uci51cC5idWlsZGVyLFxuICAgICAgICAgIFwiLy8gYWx0ZXIgZ2VuZXJhdGVkIGNvbHVtblwiLFxuICAgICAgICAgIGB0YWJsZS5kcm9wQ29sdW1ucygnJHtkYkNvbHVtbi5uYW1lfScpYCxcbiAgICAgICAgXTtcbiAgICAgICAgci51cC5yYXcgPSBbXG4gICAgICAgICAgLi4uci51cC5yYXcsXG4gICAgICAgICAgLi4uZ2V0U2VhcmNoVGV4dEhlbHBlckRlZmluaXRpb25zKHRhYmxlLCBbZW50aXR5Q29sdW1uXSksXG4gICAgICAgICAgXCIvLyBhbHRlciBnZW5lcmF0ZWQgY29sdW1uXCIsXG4gICAgICAgICAgZ2VuR2VuZXJhdGVkQ29sdW1uRGVmaW5pdGlvbih0YWJsZSwgZW50aXR5Q29sdW1uKSxcbiAgICAgICAgXTtcbiAgICAgICAgci5kb3duLmJ1aWxkZXIgPSBbXG4gICAgICAgICAgLi4uci5kb3duLmJ1aWxkZXIsXG4gICAgICAgICAgXCIvLyByb2xsYmFjayAtIGFsdGVyIGdlbmVyYXRlZCBjb2x1bW5cIixcbiAgICAgICAgICBgdGFibGUuZHJvcENvbHVtbnMoJyR7ZGJDb2x1bW4ubmFtZX0nKWAsXG4gICAgICAgIF07XG4gICAgICAgIHIuZG93bi5yYXcgPSBbXG4gICAgICAgICAgLi4uci5kb3duLnJhdyxcbiAgICAgICAgICAuLi5nZXRTZWFyY2hUZXh0SGVscGVyRGVmaW5pdGlvbnModGFibGUsIFtkYkNvbHVtbl0pLFxuICAgICAgICAgIFwiLy8gcm9sbGJhY2sgLSBhbHRlciBnZW5lcmF0ZWQgY29sdW1uXCIsXG4gICAgICAgICAgZ2VuR2VuZXJhdGVkQ29sdW1uRGVmaW5pdGlvbih0YWJsZSwgZGJDb2x1bW4pLFxuICAgICAgICBdO1xuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH1cblxuICAgICAgLy8g7Lus65+8IOuzgOqyveyCrO2VrVxuICAgICAgY29uc3QgY29sdW1uRGlmZlVwID0gZGlmZihcbiAgICAgICAgZ2VuQ29sdW1uRGVmaW5pdGlvbnModGFibGUsIFtlbnRpdHlDb2x1bW5dKS5idWlsZGVyLFxuICAgICAgICBnZW5Db2x1bW5EZWZpbml0aW9ucyh0YWJsZSwgW2RiQ29sdW1uXSkuYnVpbGRlcixcbiAgICAgICk7XG4gICAgICBjb25zdCBjb2x1bW5EaWZmRG93biA9IGRpZmYoXG4gICAgICAgIGdlbkNvbHVtbkRlZmluaXRpb25zKHRhYmxlLCBbZGJDb2x1bW5dKS5idWlsZGVyLFxuICAgICAgICBnZW5Db2x1bW5EZWZpbml0aW9ucyh0YWJsZSwgW2VudGl0eUNvbHVtbl0pLmJ1aWxkZXIsXG4gICAgICApO1xuICAgICAgaWYgKGNvbHVtbkRpZmZVcC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHIudXAuYnVpbGRlciA9IFtcbiAgICAgICAgICAuLi5yLnVwLmJ1aWxkZXIsXG4gICAgICAgICAgXCIvLyBhbHRlciBjb2x1bW5cIixcbiAgICAgICAgICAuLi5jb2x1bW5EaWZmVXAubWFwKChsKSA9PiBgJHtsLnJlcGxhY2UoXCI7XCIsIFwiXCIpfS5hbHRlcigpO2ApLFxuICAgICAgICBdO1xuICAgICAgICByLmRvd24uYnVpbGRlciA9IFtcbiAgICAgICAgICAuLi5yLmRvd24uYnVpbGRlcixcbiAgICAgICAgICBcIi8vIHJvbGxiYWNrIC0gYWx0ZXIgY29sdW1uXCIsXG4gICAgICAgICAgLi4uY29sdW1uRGlmZkRvd24ubWFwKChsKSA9PiBgJHtsLnJlcGxhY2UoXCI7XCIsIFwiXCIpfS5hbHRlcigpO2ApLFxuICAgICAgICBdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcjtcbiAgICB9LFxuICAgIHtcbiAgICAgIHVwOiB7XG4gICAgICAgIGJ1aWxkZXI6XG4gICAgICAgICAgLyogU0FGRVRZOiBLbmV47JmAIFBvc3RncmVTUUwg7Iqk7YKk66eIIOyhsO2ajCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBbXSBhcyBzdHJpbmdbXSxcbiAgICAgICAgcmF3OiAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIHN0cmluZ1tdLFxuICAgICAgfSxcbiAgICAgIGRvd246IHtcbiAgICAgICAgYnVpbGRlcjpcbiAgICAgICAgICAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIHN0cmluZ1tdLFxuICAgICAgICByYXc6IC8qIFNBRkVUWTogS25leOyZgCBQb3N0Z3JlU1FMIOyKpO2CpOuniCDsobDtmowg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gW10gYXMgc3RyaW5nW10sXG4gICAgICB9LFxuICAgIH0sXG4gICk7XG5cbiAgcmV0dXJuIGxpbmVzVG87XG59XG5cbi8vIOyduOuNseyKpCDqs6DsnKAg7Iud67OE7J6QIOyDneyEsSAobmFtZeydhCDsoJzsmbjtlZwg66qo65OgIO2VhOuTnOulvCDrrLjsnpDsl7TroZwg67OA7ZmY7ZWY7JesIOyhsO2VqSlcbmZ1bmN0aW9uIG1pZ3JhdGlvbkluZGV4SWRlbnRpdHkoaW5kZXg6IE1pZ3JhdGlvbkluZGV4KTogc3RyaW5nIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGluZGV4KVxuICAgIC5maWx0ZXIoKGtleSkgPT4ga2V5ICE9PSBcIm5hbWVcIilcbiAgICAudG9Tb3J0ZWQoKTtcblxuICByZXR1cm4ga2V5c1xuICAgIC5tYXAoKGtleSkgPT4ge1xuICAgICAgaWYgKGtleSA9PT0gXCJuYW1lXCIpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBpZiAoa2V5ID09PSBcImNvbHVtbnNcIikge1xuICAgICAgICByZXR1cm4gLyogU0FGRVRZOiBLbmV47JmAIFBvc3RncmVTUUwg7Iqk7YKk66eIIOyhsO2ajCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoXG4gICAgICAgICAgaW5kZXhba2V5XSBhcyBNaWdyYXRpb25JbmRleFtcImNvbHVtbnNcIl1cbiAgICAgICAgKS5tYXAoKGNvbCkgPT5cbiAgICAgICAgICBPYmplY3Qua2V5cyhjb2wpXG4gICAgICAgICAgICAudG9Tb3J0ZWQoKVxuICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgKGNvbHVtbktleSkgPT5cbiAgICAgICAgICAgICAgICBgJHtjb2x1bW5LZXl9PSR7Y29sWy8qIFNBRkVUWTogS25leOyZgCBQb3N0Z3JlU1FMIOyKpO2CpOuniCDsobDtmowg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gY29sdW1uS2V5IGFzIGtleW9mIHR5cGVvZiBjb2xdfWAsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuam9pbihcIi8vXCIpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGAke2tleX09JHtpbmRleFsvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIGtleSBhcyBrZXlvZiBNaWdyYXRpb25JbmRleF19YDtcbiAgICB9KVxuICAgIC5qb2luKFwiLy9cIik7XG59XG5cbi8qKlxuICog7J24642x7Iqk7J2YIGFkZCwgZHJvcCDsl6zrtoAg7ZmV7J24XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbHRlckluZGV4ZXNUbyhlbnRpdHlJbmRleGVzOiBNaWdyYXRpb25JbmRleFtdLCBkYkluZGV4ZXM6IE1pZ3JhdGlvbkluZGV4W10pIHtcbiAgLy8g7J24642x7IqkIOu5hOq1kFxuICBjb25zdCBpbmRleGVzVG8gPSB7XG4gICAgYWRkOiAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIE1pZ3JhdGlvbkluZGV4W10sXG4gICAgZHJvcDogLyogU0FGRVRZOiBLbmV47JmAIFBvc3RncmVTUUwg7Iqk7YKk66eIIOyhsO2ajCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBbXSBhcyBNaWdyYXRpb25JbmRleFtdLFxuICB9O1xuXG4gIGNvbnN0IG5vcm1hbGl6ZWRFbnRpdHlJbmRleGVzID0gZW50aXR5SW5kZXhlcy5tYXAoc2V0TWlncmF0aW9uSW5kZXhEZWZhdWx0cyk7XG4gIGNvbnN0IG5vcm1hbGl6ZWREYkluZGV4ZXMgPSBkYkluZGV4ZXMubWFwKHNldE1pZ3JhdGlvbkluZGV4RGVmYXVsdHMpO1xuICAvLyDruYTqtZDsl5DripQg7KCV6rec7ZmU65CcIHByZWRpY2F0ZeulvCDsk7DrkJgsIOyLpOygnCBtaWdyYXRpb24g7Lac66Cl7J2AIOybkOuzuCBTUUzsnYQg67O07KG07ZWc64ukLlxuICBjb25zdCBjb21wYXJpc29uRW50aXR5SW5kZXhlcyA9IGVudGl0eUluZGV4ZXMubWFwKHNldE1pZ3JhdGlvbkluZGV4Q29tcGFyaXNvbkRlZmF1bHRzKTtcbiAgY29uc3QgY29tcGFyaXNvbkRiSW5kZXhlcyA9IGRiSW5kZXhlcy5tYXAoc2V0TWlncmF0aW9uSW5kZXhDb21wYXJpc29uRGVmYXVsdHMpO1xuICBjb25zdCBleHRyYUluZGV4ZXMgPSB7XG4gICAgZGI6IGRpZmYoY29tcGFyaXNvbkRiSW5kZXhlcywgY29tcGFyaXNvbkVudGl0eUluZGV4ZXMsIG1pZ3JhdGlvbkluZGV4SWRlbnRpdHkpLFxuICAgIGVudGl0eTogZGlmZihjb21wYXJpc29uRW50aXR5SW5kZXhlcywgY29tcGFyaXNvbkRiSW5kZXhlcywgbWlncmF0aW9uSW5kZXhJZGVudGl0eSksXG4gIH07XG4gIGlmIChleHRyYUluZGV4ZXMuZW50aXR5Lmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBhZGRJZGVudGl0aWVzID0gbmV3IFNldChleHRyYUluZGV4ZXMuZW50aXR5Lm1hcChtaWdyYXRpb25JbmRleElkZW50aXR5KSk7XG4gICAgaW5kZXhlc1RvLmFkZCA9IGluZGV4ZXNUby5hZGQuY29uY2F0KFxuICAgICAgbm9ybWFsaXplZEVudGl0eUluZGV4ZXMuZmlsdGVyKChfLCBpbmRleCkgPT5cbiAgICAgICAgYWRkSWRlbnRpdGllcy5oYXMobWlncmF0aW9uSW5kZXhJZGVudGl0eShjb21wYXJpc29uRW50aXR5SW5kZXhlc1tpbmRleF0pKSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICBpZiAoZXh0cmFJbmRleGVzLmRiLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBkcm9wSWRlbnRpdGllcyA9IG5ldyBTZXQoZXh0cmFJbmRleGVzLmRiLm1hcChtaWdyYXRpb25JbmRleElkZW50aXR5KSk7XG4gICAgaW5kZXhlc1RvLmRyb3AgPSBpbmRleGVzVG8uZHJvcC5jb25jYXQoXG4gICAgICBub3JtYWxpemVkRGJJbmRleGVzLmZpbHRlcigoXywgaW5kZXgpID0+XG4gICAgICAgIGRyb3BJZGVudGl0aWVzLmhhcyhtaWdyYXRpb25JbmRleElkZW50aXR5KGNvbXBhcmlzb25EYkluZGV4ZXNbaW5kZXhdKSksXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gaW5kZXhlc1RvO1xufVxuXG4vKipcbiAqIOyduOuNseyKpCDsgq3soJwg7KCV7J2YIOyDneyEsVxuICovXG5mdW5jdGlvbiBnZW5JbmRleERyb3BEZWZpbml0aW9uKGluZGV4OiBNaWdyYXRpb25JbmRleCkge1xuICByZXR1cm4gYHRhYmxlLmRyb3BJbmRleChbJHtpbmRleC5jb2x1bW5zXG4gICAgLm1hcCgoY29sdW1uKSA9PiBgJyR7Y29sdW1uLm5hbWV9J2ApXG4gICAgLmpvaW4oXCIsXCIpfV0sICcke2luZGV4Lm5hbWV9JylgO1xufVxuXG4vKipcbiAqIERCIOyhsO2ajCDqsrDqs7zsmYAg67mE6rWQ7ZWY6riwIOychO2VnCDsnbjrjbHsiqQg6riw67O46rCSIOyEpOyglVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TWlncmF0aW9uSW5kZXhEZWZhdWx0cyhpbmRleDogTWlncmF0aW9uSW5kZXgpOiBNaWdyYXRpb25JbmRleCB7XG4gIHJldHVybiBzZXRNaWdyYXRpb25JbmRleERlZmF1bHRzQmFzZShpbmRleCwgZmFsc2UpO1xufVxuXG5mdW5jdGlvbiBzZXRNaWdyYXRpb25JbmRleENvbXBhcmlzb25EZWZhdWx0cyhpbmRleDogTWlncmF0aW9uSW5kZXgpOiBNaWdyYXRpb25JbmRleCB7XG4gIC8vIERCIGNhbm9uaWNhbCBTUUzqs7wgZW50aXR5IFNRTOydmCDtkZztmIQg7LCo7J2066W8IGRpZmYgaWRlbnRpdHnsl5DshJzrp4wg7Z2h7IiY7ZWc64ukLlxuICByZXR1cm4gc2V0TWlncmF0aW9uSW5kZXhEZWZhdWx0c0Jhc2UoaW5kZXgsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBzZXRNaWdyYXRpb25JbmRleERlZmF1bHRzQmFzZShcbiAgaW5kZXg6IE1pZ3JhdGlvbkluZGV4LFxuICBub3JtYWxpemVXaGVyZUZvckNvbXBhcmlzb246IGJvb2xlYW4sXG4pOiBNaWdyYXRpb25JbmRleCB7XG4gIGNvbnN0IGlzVmVjdG9ySW5kZXggPSBpbmRleC50eXBlID09PSBcImhuc3dcIiB8fCBpbmRleC50eXBlID09PSBcIml2ZmZsYXRcIjtcbiAgY29uc3Qgc3VwcG9ydHNPcmRlcmluZyA9ICFpc1ZlY3RvckluZGV4ICYmICghaW5kZXgudXNpbmcgfHwgaW5kZXgudXNpbmcgPT09IFwiYnRyZWVcIik7XG4gIGNvbnN0IG5vcm1hbGl6ZWRVc2luZyA9IGlzVmVjdG9ySW5kZXggPyBpbmRleC51c2luZyA6IChpbmRleC51c2luZyA/PyBcImJ0cmVlXCIpO1xuICBjb25zdCBub3JtYWxpemVkV2hlcmUgPSBub3JtYWxpemVXaGVyZUZvckNvbXBhcmlzb25cbiAgICA/IG5vcm1hbGl6ZUluZGV4V2hlcmVQcmVkaWNhdGVGb3JDb21wYXJpc29uKGluZGV4LndoZXJlKVxuICAgIDogbm9ybWFsaXplSW5kZXhXaGVyZVByZWRpY2F0ZShpbmRleC53aGVyZSk7XG5cbiAgY29uc3QgY29sdW1ucyA9IGluZGV4LmNvbHVtbnMubWFwKChjb2wpID0+IHtcbiAgICBjb25zdCBjb2x1bW46IE1pZ3JhdGlvbkluZGV4W1wiY29sdW1uc1wiXVtudW1iZXJdID0geyBuYW1lOiBjb2wubmFtZSB9O1xuICAgIGNvbnN0IG9wY2xhc3MgPSBnZXRJbmRleENvbHVtbk9wY2xhc3MoY29sKTtcbiAgICBpZiAob3BjbGFzcykgY29sdW1uLm9wY2xhc3MgPSBvcGNsYXNzO1xuICAgIGlmIChzdXBwb3J0c09yZGVyaW5nKSB7XG4gICAgICBjb2x1bW4uc29ydE9yZGVyID0gY29sLnNvcnRPcmRlciA/PyBcIkFTQ1wiO1xuICAgICAgY29sdW1uLm51bGxzRmlyc3QgPSBjb2wubnVsbHNGaXJzdCA/PyBjb2wuc29ydE9yZGVyID09PSBcIkRFU0NcIjtcbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfSk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRJbmRleDogTWlncmF0aW9uSW5kZXggPSB7XG4gICAgLi4uaW5kZXgsXG4gICAgY29sdW1ucyxcbiAgICBudWxsc05vdERpc3RpbmN0OiBpbmRleC5udWxsc05vdERpc3RpbmN0ID8/IGZhbHNlLFxuICB9O1xuICBpZiAobm9ybWFsaXplZFVzaW5nKSBub3JtYWxpemVkSW5kZXgudXNpbmcgPSBub3JtYWxpemVkVXNpbmc7XG4gIGlmIChub3JtYWxpemVkV2hlcmUpIG5vcm1hbGl6ZWRJbmRleC53aGVyZSA9IG5vcm1hbGl6ZWRXaGVyZTtcbiAgcmV0dXJuIG5vcm1hbGl6ZWRJbmRleDtcbn1cblxuZnVuY3Rpb24gbWlncmF0aW9uRm9yZWlnbktleShtaWdyYXRpb25Gb3JlaWduOiBNaWdyYXRpb25Gb3JlaWduKTogc3RyaW5nIHtcbiAgcmV0dXJuIFttaWdyYXRpb25Gb3JlaWduLmNvbHVtbnMuam9pbihcIi1cIiksIG1pZ3JhdGlvbkZvcmVpZ24udG9dLmpvaW4oXCIvLy9cIik7XG59XG5cbi8qKlxuICog7YWM7J2067iUIOuzgOqyvSDsvIDsnbTsiqQgLSBGb3JlaWduIEtleSDrs4Dqsr1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVBbHRlckNvZGVfRm9yZWlnbnMoXG4gIHRhYmxlOiBzdHJpbmcsXG4gIGVudGl0eUZvcmVpZ25zOiBNaWdyYXRpb25Gb3JlaWduW10sXG4gIGRiRm9yZWlnbnM6IE1pZ3JhdGlvbkZvcmVpZ25bXSxcbiAgZHJvcHBpbmdDb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXSA9IFtdLFxuKTogUHJvbWlzZTxHZW5NaWdyYXRpb25Db2RlW10+IHtcbiAgLy8gY29uc29sZS5sb2coeyBlbnRpdHlGb3JlaWducywgZGJGb3JlaWducyB9KTtcblxuICAvLyDsgq3soJzrkKAg7Lus65+866qFIOuqqeuhnVxuICBjb25zdCBkcm9wcGluZ0NvbHVtbk5hbWVzID0gZHJvcHBpbmdDb2x1bW5zLm1hcCgoY29sKSA9PiBjb2wubmFtZSk7XG5cbiAgY29uc3QgZmtUbyA9IGVudGl0eUZvcmVpZ25zLnJlZHVjZShcbiAgICAocmVzdWx0LCBlbnRpdHlGKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGluZ0RiRiA9IGRiRm9yZWlnbnMuZmluZChcbiAgICAgICAgKGRiRikgPT4gbWlncmF0aW9uRm9yZWlnbktleShlbnRpdHlGKSA9PT0gbWlncmF0aW9uRm9yZWlnbktleShkYkYpLFxuICAgICAgKTtcbiAgICAgIGlmICghbWF0Y2hpbmdEYkYpIHtcbiAgICAgICAgcmVzdWx0LmFkZC5wdXNoKGVudGl0eUYpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBpZiAoIWVxdWFsKGVudGl0eUYsIG1hdGNoaW5nRGJGKSkge1xuICAgICAgICByZXN1bHQuYWx0ZXJTcmMucHVzaChtYXRjaGluZ0RiRik7XG4gICAgICAgIHJlc3VsdC5hbHRlckRzdC5wdXNoKGVudGl0eUYpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIHtcbiAgICAgIGFkZDogLyogU0FGRVRZOiBLbmV47JmAIFBvc3RncmVTUUwg7Iqk7YKk66eIIOyhsO2ajCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBbXSBhcyBNaWdyYXRpb25Gb3JlaWduW10sXG4gICAgICBkcm9wOiAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIE1pZ3JhdGlvbkZvcmVpZ25bXSxcbiAgICAgIGFsdGVyU3JjOlxuICAgICAgICAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIE1pZ3JhdGlvbkZvcmVpZ25bXSxcbiAgICAgIGFsdGVyRHN0OlxuICAgICAgICAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIE1pZ3JhdGlvbkZvcmVpZ25bXSxcbiAgICB9LFxuICApO1xuXG4gIC8vIGRiRm9yZWlnbnPsl5DripQg7J6I7KeA66eMIGVudGl0eUZvcmVpZ25z7JeQ64qUIOyXhuuKlCDqsr3smrAgKOyCreygnOuQnCBGSylcbiAgLy8g64uoLCDsgq3soJzrkKAg7Lus65+87J2YIEZL64qUIOygnOyZuCAoZ2VuZXJhdGVBbHRlckNvZGVfQ29sdW1uQW5kSW5kZXhlc+yXkOyEnCDsspjrpqwpXG4gIGRiRm9yZWlnbnMuZm9yRWFjaCgoZGJGKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hpbmdFbnRpdHlGID0gZW50aXR5Rm9yZWlnbnMuZmluZChcbiAgICAgIChlbnRpdHlGKSA9PiBtaWdyYXRpb25Gb3JlaWduS2V5KGVudGl0eUYpID09PSBtaWdyYXRpb25Gb3JlaWduS2V5KGRiRiksXG4gICAgKTtcbiAgICBpZiAoIW1hdGNoaW5nRW50aXR5Rikge1xuICAgICAgLy8g7J20IEZL7J2YIOy7rOufvOydtCDsgq3soJzrkKAg7Lus65+8IOuqqeuhneyXkCDsnojripTsp4Ag7ZmV7J24XG4gICAgICBjb25zdCBpc0NvbHVtbkRyb3BwaW5nID0gZGJGLmNvbHVtbnMuc29tZSgoY29sKSA9PiBkcm9wcGluZ0NvbHVtbk5hbWVzLmluY2x1ZGVzKGNvbCkpO1xuICAgICAgLy8g7Lus65+87J20IOyCreygnOuQmOyngCDslYrripQg6rK97Jqw7JeQ66eMIEZLIGRyb3Ag66qp66Gd7JeQIOy2lOqwgFxuICAgICAgaWYgKCFpc0NvbHVtbkRyb3BwaW5nKSB7XG4gICAgICAgIGZrVG8uZHJvcC5wdXNoKGRiRik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBsaW5lc1RvID0ge1xuICAgIGFkZDogZ2VuRm9yZWlnbkRlZmluaXRpb25zKHRhYmxlLCBma1RvLmFkZCksXG4gICAgZHJvcDogZ2VuRm9yZWlnbkRlZmluaXRpb25zKHRhYmxlLCBma1RvLmRyb3ApLFxuICAgIGFsdGVyU3JjOiBnZW5Gb3JlaWduRGVmaW5pdGlvbnModGFibGUsIGZrVG8uYWx0ZXJTcmMpLFxuICAgIGFsdGVyRHN0OiBnZW5Gb3JlaWduRGVmaW5pdGlvbnModGFibGUsIGZrVG8uYWx0ZXJEc3QpLFxuICB9O1xuXG4gIC8vIGRyb3AgZmsgY29sdW1uc+yduCDqsr3smrAo7IOd7ISx65CgIOy9lOuTnCDsl4bripQg6rK97JqwKSDtjKjsiqRcbiAgY29uc3QgaGFzTGluZXMgPSBPYmplY3QudmFsdWVzKGxpbmVzVG8pLnNvbWUoKGwpID0+IGwudXAubGVuZ3RoID4gMCB8fCBsLmRvd24ubGVuZ3RoID4gMCk7XG4gIGlmICghaGFzTGluZXMpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBpZiAoXG4gICAgbGluZXNUby5hZGQudXAubGVuZ3RoID09PSAwICYmXG4gICAgbGluZXNUby5kcm9wLnVwLmxlbmd0aCA9PT0gMCAmJlxuICAgIGxpbmVzVG8uYWx0ZXJTcmMudXAubGVuZ3RoID09PSAwICYmXG4gICAgbGluZXNUby5hbHRlckRzdC51cC5sZW5ndGggPT09IDBcbiAgKSB7XG4gICAgTmFpdGUudChcIm1pZ3JhdG9yOmdlbmVyYXRlQWx0ZXJDb2RlX0ZvcmVpZ25zOmZrQ2hhbmdlQ29kZUdlbmVyYXRpb25FcnJvclwiLCB7XG4gICAgICB0YWJsZSxcbiAgICAgIGVudGl0eUZvcmVpZ25zLFxuICAgICAgZGJGb3JlaWducyxcbiAgICB9KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJGSyDrs4Dqsr0g7L2U65OcIOyDneyEsSDsmKTrpZhcIik7XG4gIH1cblxuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXG4gICAgJ2ltcG9ydCB0eXBlIHsgS25leCB9IGZyb20gXCJrbmV4XCI7JyxcbiAgICBcIlwiLFxuICAgIFwiZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwKGtuZXg6IEtuZXgpOiBQcm9taXNlPHZvaWQ+IHtcIixcbiAgICBgcmV0dXJuIGtuZXguc2NoZW1hLmFsdGVyVGFibGUoXCIke3RhYmxlfVwiLCAodGFibGUpID0+IHtgLFxuICAgIC4uLmxpbmVzVG8uZHJvcC5kb3duLFxuICAgIC4uLmxpbmVzVG8uYWRkLnVwLFxuICAgIC4uLmxpbmVzVG8uYWx0ZXJTcmMuZG93bixcbiAgICAuLi5saW5lc1RvLmFsdGVyRHN0LnVwLFxuICAgIFwifSlcIixcbiAgICBcIn1cIixcbiAgICBcIlwiLFxuICAgIFwiZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvd24oa25leDogS25leCk6IFByb21pc2U8dm9pZD4ge1wiLFxuICAgIGByZXR1cm4ga25leC5zY2hlbWEuYWx0ZXJUYWJsZShcIiR7dGFibGV9XCIsICh0YWJsZSkgPT4ge2AsXG4gICAgLi4ubGluZXNUby5hZGQuZG93bixcbiAgICAuLi5saW5lc1RvLmFsdGVyRHN0LmRvd24sXG4gICAgLi4ubGluZXNUby5hbHRlclNyYy51cCxcbiAgICAuLi5saW5lc1RvLmRyb3AudXAsXG4gICAgXCJ9KVwiLFxuICAgIFwifVwiLFxuICBdO1xuXG4gIGNvbnN0IGZvcm1hdHRlZCA9IGF3YWl0IGZvcm1hdENvZGUobGluZXMuam9pbihcIlxcblwiKSwgYHNyYy9taWdyYXRpb24vJHt0YWJsZX0udHNgKTtcbiAgY29uc3QgdGl0bGUgPSBbXCJhbHRlclwiLCB0YWJsZSwgXCJmb3JlaWduc1wiXS5qb2luKFwiX1wiKTtcblxuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHRhYmxlLFxuICAgICAgdGl0bGUsXG4gICAgICBmb3JtYXR0ZWQsXG4gICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICog7KO87Ja07KeEIEVudGl0eVNldOydhCDquLDrsJjsnLzroZwg7YWM7J2067iUIENSRUFURSDrp4jsnbTqt7jroIjsnbTshZgg7L2U65Oc66W8IOyDneyEse2VqeuLiOuLpC5cbiAqIEBwYXJhbSBlbnRpdHlTZXRcbiAqIEByZXR1cm5zIENSRUFURSDrp4jsnbTqt7jroIjsnbTshZgg7L2U65OcXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUNyZWF0ZUNvZGUoZW50aXR5U2V0OiBNaWdyYXRpb25TZXQpOiBQcm9taXNlPEdlbk1pZ3JhdGlvbkNvZGVbXT4ge1xuICByZXR1cm4gW1xuICAgIGF3YWl0IGdlbmVyYXRlQ3JlYXRlQ29kZV9Db2x1bW5BbmRJbmRleGVzKFxuICAgICAgZW50aXR5U2V0LnRhYmxlLFxuICAgICAgZW50aXR5U2V0LmNvbHVtbnMsXG4gICAgICBlbnRpdHlTZXQuaW5kZXhlcyxcbiAgICApLFxuICAgIC4uLihhd2FpdCBnZW5lcmF0ZUNyZWF0ZUNvZGVfRm9yZWlnbihlbnRpdHlTZXQudGFibGUsIGVudGl0eVNldC5mb3JlaWducykpLFxuICBdO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlQ29sdW1uRGVmYXVsdFRvKGNvbHVtbjogTWlncmF0aW9uQ29sdW1uKSB7XG4gIC8vIEZJWE1FOiDsnbzri6ggTXlTUUwg7IOB7Zmp7JeQ7IScIOuwnOyDne2WiOuNmCDsnbTsiojsnZggd29ya2Fyb3VuZCDsnbTrr4DroZwgUGfsl5DshJwg7J6s7ZmV7J24IO2bhCDrjIDsnZEg7LaU6rCAXG4gIHJldHVybiBjb2x1bW47XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VOb0FjdGlvbk9uTXlTUUwoZm9yZWlnbjogTWlncmF0aW9uRm9yZWlnbikge1xuICAvLyBNeVNRTOyXkOyEnCBSRVNUUklDVOyZgCBOTyBBQ1RJT07snYAg64+Z7J287ZWoXG4gIGNvbnN0IHsgb25EZWxldGUsIG9uVXBkYXRlIH0gPSBmb3JlaWduO1xuICByZXR1cm4ge1xuICAgIC4uLmZvcmVpZ24sXG4gICAgb25VcGRhdGU6IG9uVXBkYXRlID09PSBcIlJFU1RSSUNUXCIgPyBcIk5PIEFDVElPTlwiIDogb25VcGRhdGUsXG4gICAgb25EZWxldGU6IG9uRGVsZXRlID09PSBcIlJFU1RSSUNUXCIgPyBcIk5PIEFDVElPTlwiIDogb25EZWxldGUsXG4gIH07XG59XG5cbi8qKlxuICog7KO87Ja07KeEIGVudGl0eVNldOydhCDrqqntkZzroZwsIGRiU2V07J2EIO2YhCDsg4HtmansnLzroZwg7ZWY7JesIO2FjOydtOu4lCBBTFRFUiDrp4jsnbTqt7jroIjsnbTshZgg7L2U65Oc66W8IOyDneyEse2VqeuLiOuLpC5cbiAqIEBwYXJhbSBlbnRpdHlTZXQg7ZiEIOyDge2ZqeydmCBNaWdyYXRpb25TZXRcbiAqIEBwYXJhbSBkYlNldCDrqqntkZwg7IOB7Zmp7J2YIE1pZ3JhdGlvblNldFxuICogQHBhcmFtIGNvbXBhcmVEQiBQSyDtg4DsnoUg67OA6rK9IOyLnCDsl63ssLjsobAgRkvrpbwg7KGw7ZqM7ZWY6riwIOychO2VnCBLbmV4IOyduOyKpO2EtOyKpCAo7ISg7YOdKVxuICogQHJldHVybnMgQUxURVIg66eI7J206re466CI7J207IWYIOy9lOuTnFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVBbHRlckNvZGUoXG4gIGVudGl0eVNldDogTWlncmF0aW9uU2V0LFxuICBkYlNldDogTWlncmF0aW9uU2V0LFxuICBjb21wYXJlREI/OiBLbmV4LFxuKTogUHJvbWlzZTxHZW5NaWdyYXRpb25Db2RlW10+IHtcbiAgY29uc3QgZW50aXR5Q29sdW1ucyA9IGFscGhhYmV0aWNhbChlbnRpdHlTZXQuY29sdW1ucywgKGEpID0+IGEubmFtZSkubWFwKHJlcGxhY2VDb2x1bW5EZWZhdWx0VG8pO1xuICBjb25zdCBkYkNvbHVtbnMgPSBhbHBoYWJldGljYWwoZGJTZXQuY29sdW1ucywgKGEpID0+IGEubmFtZSkubWFwKHJlcGxhY2VDb2x1bW5EZWZhdWx0VG8pO1xuXG4gIC8qIOuUlOuyhOq5heyaqSDsvZTrk5wsIO2KueyglSDsu6zrn7zsl5DshJwg67aI7J287LmYIOuwnOyDne2VoCDrlYwg7ZmV7J24XG4gICAgICAgIGNvbnN0IGVudGl0eUNvbHVtbiA9IGVudGl0eVNldC5jb2x1bW5zLmZpbmQoXG4gICAgICAgICAgKGNvbCkgPT4gY29sLm5hbWUgPT09IFwicHJpY2Vfa3J3XCJcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZGJDb2x1bW4gPSBkYlNldC5jb2x1bW5zLmZpbmQoXG4gICAgICAgICAgKGNvbCkgPT4gY29sLm5hbWUgPT09IFwicHJpY2Vfa3J3XCJcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS5kZWJ1Zyh7IGVudGl0eUNvbHVtbiwgZGJDb2x1bW4gfSk7XG4gICAgICAgICAqL1xuXG4gIGNvbnN0IGVudGl0eUluZGV4ZXMgPSBhbHBoYWJldGljYWwoZW50aXR5U2V0LmluZGV4ZXMsIChhKSA9PlxuICAgIFthLnR5cGUsIC4uLmEuY29sdW1ucy5tYXAoKGMpID0+IGMubmFtZSldLmpvaW4oXCItXCIpLFxuICApO1xuICBjb25zdCBkYkluZGV4ZXMgPSBhbHBoYWJldGljYWwoZGJTZXQuaW5kZXhlcywgKGEpID0+XG4gICAgW2EudHlwZSwgLi4uYS5jb2x1bW5zLm1hcCgoYykgPT4gYy5uYW1lKV0uam9pbihcIi1cIiksXG4gICk7XG5cbiAgY29uc3QgZW50aXR5Rm9yZWlnbnMgPSBhbHBoYWJldGljYWwoZW50aXR5U2V0LmZvcmVpZ25zLCAoYSkgPT5cbiAgICBbYS50bywgLi4uYS5jb2x1bW5zXS5qb2luKFwiLVwiKSxcbiAgKS5tYXAoKGYpID0+IHJlcGxhY2VOb0FjdGlvbk9uTXlTUUwoZikpO1xuICBjb25zdCBkYkZvcmVpZ25zID0gYWxwaGFiZXRpY2FsKGRiU2V0LmZvcmVpZ25zLCAoYSkgPT4gW2EudG8sIC4uLmEuY29sdW1uc10uam9pbihcIi1cIikpLm1hcCgoZikgPT5cbiAgICByZXBsYWNlTm9BY3Rpb25Pbk15U1FMKGYpLFxuICApO1xuXG4gIC8vIOyCreygnOuQoCDsu6zrn7wg66qp66GdIOqzhOyCsFxuICBjb25zdCBkcm9wcGluZ0NvbHVtbnMgPSBkaWZmKGRiQ29sdW1ucywgZW50aXR5Q29sdW1ucywgKGNvbCkgPT4gY29sLm5hbWUpO1xuXG4gIGNvbnN0IGFsdGVyQ29kZXM6IChHZW5NaWdyYXRpb25Db2RlIHwgR2VuTWlncmF0aW9uQ29kZVtdIHwgbnVsbClbXSA9IFtdO1xuXG4gIC8vIDEuIGNvbHVtbnNBbmRJbmRleGVzIOyymOumrFxuICBjb25zdCBzZWFyY2hUZXh0Q29sdW1uTmFtZXMgPSBnZXRTZWFyY2hUZXh0Q29sdW1uTmFtZXMoZW50aXR5U2V0LnRhYmxlKTtcbiAgY29uc3QgaXNFcXVhbENvbHVtbnMgPSBlcXVhbChcbiAgICBlbnRpdHlDb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBub3JtYWxpemVDb2x1bW5Gb3JDb21wYXJpc29uKGNvbHVtbiwgc2VhcmNoVGV4dENvbHVtbk5hbWVzKSksXG4gICAgZGJDb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBub3JtYWxpemVDb2x1bW5Gb3JDb21wYXJpc29uKGNvbHVtbiwgc2VhcmNoVGV4dENvbHVtbk5hbWVzKSksXG4gICk7XG4gIGNvbnN0IGlzRXF1YWxJbmRleGVzID0gZXF1YWwoXG4gICAgZW50aXR5SW5kZXhlcy5tYXAoc2V0TWlncmF0aW9uSW5kZXhEZWZhdWx0cyksXG4gICAgZGJJbmRleGVzLm1hcChzZXRNaWdyYXRpb25JbmRleERlZmF1bHRzKSxcbiAgKTtcbiAgaWYgKCFpc0VxdWFsQ29sdW1ucyB8fCAhaXNFcXVhbEluZGV4ZXMpIHtcbiAgICBhbHRlckNvZGVzLnB1c2goXG4gICAgICBhd2FpdCBnZW5lcmF0ZUFsdGVyQ29kZV9Db2x1bW5BbmRJbmRleGVzKFxuICAgICAgICBlbnRpdHlTZXQudGFibGUsXG4gICAgICAgIGVudGl0eUNvbHVtbnMsXG4gICAgICAgIGVudGl0eUluZGV4ZXMsXG4gICAgICAgIGRiQ29sdW1ucyxcbiAgICAgICAgZGJJbmRleGVzLFxuICAgICAgICBkYlNldC5mb3JlaWducyxcbiAgICAgICAgY29tcGFyZURCLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgLy8gMi4gZm9yZWlnbnMg7LKY66asICjsgq3soJzrkKAg7Lus65+8IOygleuztCDsoITri6wpXG4gIGlmICghZXF1YWwoZW50aXR5Rm9yZWlnbnMsIGRiRm9yZWlnbnMpKSB7XG4gICAgYWx0ZXJDb2Rlcy5wdXNoKFxuICAgICAgYXdhaXQgZ2VuZXJhdGVBbHRlckNvZGVfRm9yZWlnbnMoXG4gICAgICAgIGVudGl0eVNldC50YWJsZSxcbiAgICAgICAgZW50aXR5Rm9yZWlnbnMsXG4gICAgICAgIGRiRm9yZWlnbnMsXG4gICAgICAgIGRyb3BwaW5nQ29sdW1ucyxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIGlmIChhbHRlckNvZGVzLmV2ZXJ5KChhbHRlckNvZGUpID0+IGFsdGVyQ29kZSA9PT0gbnVsbCkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gYWx0ZXJDb2Rlcy5maWx0ZXIoKGFsdGVyQ29kZSkgPT4gYWx0ZXJDb2RlICE9PSBudWxsKS5mbGF0KCk7XG59XG5cbi8qKlxuICogUEsg7YOA7J6FIOuzgOqyvSDsi5wg7Jet7LC47KGwIEZLIOygnOyVveyhsOqxtOydhCDsspjrpqztlZjripQg66eI7J206re466CI7J207IWYIOy9lOuTnOulvCDsg53shLHtlanri4jri6QuXG4gKlxuICogUEsg7YOA7J6FIOuzgOqyvSDsi5wg7Iic7IScOlxuICogMS4gRksg7KCc7JW97KGw6rG0IOyCreygnCAo7Jet7LC47KGwIO2FjOydtOu4lOuTpClcbiAqIDIuIOyekOq4sCDssLjsobAgRksg7IKt7KCcICjsnojripQg6rK97JqwKVxuICogMy4gUEsg7KCc7JW97KGw6rG0IOyCreygnFxuICogNC4gUEsg7Lus65+8IO2DgOyehSDrs4Dqsr1cbiAqIDUuIEZLIOy7rOufvCDtg4DsnoUg67OA6rK9ICjsl63ssLjsobAg7YWM7J2067iU65OkKVxuICogNi4gUEsg7KCc7JW97KGw6rG0IOuzteq1rFxuICogNy4g7J6Q6riwIOywuOyhsCBGSyDrs7XqtaxcbiAqIDguIEZLIOygnOyVveyhsOqxtCDrs7XqtaxcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVQa1R5cGVDaGFuZ2VNaWdyYXRpb24oXG4gIHRhYmxlOiBzdHJpbmcsXG4gIGVudGl0eUlkQ29sOiBNaWdyYXRpb25Db2x1bW4sXG4gIGRiSWRDb2w6IE1pZ3JhdGlvbkNvbHVtbixcbiAgX2VudGl0eUNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdLFxuICBfZW50aXR5SW5kZXhlczogTWlncmF0aW9uSW5kZXhbXSxcbiAgX2RiQ29sdW1uczogTWlncmF0aW9uQ29sdW1uW10sXG4gIF9kYkluZGV4ZXM6IE1pZ3JhdGlvbkluZGV4W10sXG4gIF9kYkZvcmVpZ25zOiBNaWdyYXRpb25Gb3JlaWduW10sXG4gIGNvbXBhcmVEQjogS25leCxcbik6IFByb21pc2U8R2VuTWlncmF0aW9uQ29kZVtdPiB7XG4gIC8vIOyXreywuOyhsCBGSyDsobDtmowgKOydtCDthYzsnbTruJTsnZggUEvrpbwg7LC47KGw7ZWY64qUIOuLpOuluCDthYzsnbTruJTsnZggRkvrk6QpXG4gIGNvbnN0IHJlZmVyZW5jaW5nRktzID0gYXdhaXQgUG9zdGdyZVNRTFNjaGVtYVJlYWRlci5nZXRSZWZlcmVuY2luZ0ZvcmVpZ25LZXlzKGNvbXBhcmVEQiwgdGFibGUpO1xuXG4gIC8vIOyekOq4sCDssLjsobAgRksg67aE66asICjsmIg6IERlcGFydG1lbnQucGFyZW50X2lkIOKGkiBEZXBhcnRtZW50LmlkKVxuICBjb25zdCBzZWxmUmVmZXJlbmNpbmdGS3MgPSByZWZlcmVuY2luZ0ZLcy5maWx0ZXIoKGZrKSA9PiBmay50YWJsZU5hbWUgPT09IHRhYmxlKTtcbiAgY29uc3QgZXh0ZXJuYWxSZWZlcmVuY2luZ0ZLcyA9IHJlZmVyZW5jaW5nRktzLmZpbHRlcigoZmspID0+IGZrLnRhYmxlTmFtZSAhPT0gdGFibGUpO1xuXG4gIC8vIFBLIOygnOyVveyhsOqxtCDsnbTrpoQg7KGw7ZqMXG4gIGNvbnN0IHBrQ29uc3RyYWludE5hbWUgPSBgJHt0YWJsZX1fcGtleWA7XG5cbiAgLy8g7IOIIFBLIO2DgOyeheyXkCDrp57ripQgUG9zdGdyZVNRTCDtg4DsnoUg66y47J6Q7Je0XG4gIGNvbnN0IG5ld1BrUGdUeXBlID0gZ2V0UGtQZ1R5cGUoZW50aXR5SWRDb2wpO1xuICBjb25zdCBvbGRQa1BnVHlwZSA9IGdldFBrUGdUeXBlKGRiSWRDb2wpO1xuXG4gIC8vIFVQIOy9lOuTnCDsg53shLFcbiAgY29uc3QgdXBMaW5lczogc3RyaW5nW10gPSBbXTtcblxuICAvLyAxLiDsmbjrtoAg7YWM7J2067iU7J2YIEZLIOygnOyVveyhsOqxtCDsgq3soJxcbiAgZm9yIChjb25zdCBmayBvZiBleHRlcm5hbFJlZmVyZW5jaW5nRktzKSB7XG4gICAgdXBMaW5lcy5wdXNoKGAgIC8vICR7ZmsudGFibGVOYW1lfS4ke2ZrLmNvbHVtbk5hbWV9IEZLIOygnOyVveyhsOqxtCDsgq3soJxgKTtcbiAgICB1cExpbmVzLnB1c2goXG4gICAgICBgICBhd2FpdCBrbmV4LnJhdygnQUxURVIgVEFCTEUgXCIke2ZrLnRhYmxlTmFtZX1cIiBEUk9QIENPTlNUUkFJTlQgXCIke2ZrLmNvbnN0cmFpbnROYW1lfVwiJyk7YCxcbiAgICApO1xuICB9XG5cbiAgLy8gMi4g7J6Q6riwIOywuOyhsCBGSyDsgq3soJxcbiAgZm9yIChjb25zdCBmayBvZiBzZWxmUmVmZXJlbmNpbmdGS3MpIHtcbiAgICB1cExpbmVzLnB1c2goYCAgLy8g7J6Q6riwIOywuOyhsCBGSyDsgq3soJw6ICR7ZmsuY29sdW1uTmFtZX1gKTtcbiAgICB1cExpbmVzLnB1c2goXG4gICAgICBgICBhd2FpdCBrbmV4LnJhdygnQUxURVIgVEFCTEUgXCIke3RhYmxlfVwiIERST1AgQ09OU1RSQUlOVCBcIiR7ZmsuY29uc3RyYWludE5hbWV9XCInKTtgLFxuICAgICk7XG4gIH1cblxuICAvLyAzLiBQSyDsoJzslb3sobDqsbQg7IKt7KCcXG4gIHVwTGluZXMucHVzaChgICAvLyBQSyDsoJzslb3sobDqsbQg7IKt7KCcYCk7XG4gIHVwTGluZXMucHVzaChgICBhd2FpdCBrbmV4LnJhdygnQUxURVIgVEFCTEUgXCIke3RhYmxlfVwiIERST1AgQ09OU1RSQUlOVCBcIiR7cGtDb25zdHJhaW50TmFtZX1cIicpO2ApO1xuXG4gIC8vIDQuIFBLIOy7rOufvCDtg4DsnoUg67OA6rK9XG4gIHVwTGluZXMucHVzaChgICAvLyBQSyDsu6zrn7wg7YOA7J6FIOuzgOqyvWApO1xuICB1cExpbmVzLnB1c2goXG4gICAgYCAgYXdhaXQga25leC5yYXcoJ0FMVEVSIFRBQkxFIFwiJHt0YWJsZX1cIiBBTFRFUiBDT0xVTU4gXCJpZFwiIFRZUEUgJHtuZXdQa1BnVHlwZX0gVVNJTkcgXCJpZFwiOjoke25ld1BrUGdUeXBlfScpO2AsXG4gICk7XG5cbiAgLy8gNS4gRksg7Lus65+8IO2DgOyehSDrs4Dqsr0gKOyXreywuOyhsCDthYzsnbTruJTrk6QpIC0g7J6Q6riwIOywuOyhsCDtj6ztlahcbiAgZm9yIChjb25zdCBmayBvZiByZWZlcmVuY2luZ0ZLcykge1xuICAgIHVwTGluZXMucHVzaChgICAvLyAke2ZrLnRhYmxlTmFtZX0uJHtmay5jb2x1bW5OYW1lfSDsu6zrn7wg7YOA7J6FIOuzgOqyvWApO1xuICAgIHVwTGluZXMucHVzaChcbiAgICAgIGAgIGF3YWl0IGtuZXgucmF3KCdBTFRFUiBUQUJMRSBcIiR7ZmsudGFibGVOYW1lfVwiIEFMVEVSIENPTFVNTiBcIiR7ZmsuY29sdW1uTmFtZX1cIiBUWVBFICR7bmV3UGtQZ1R5cGV9IFVTSU5HIFwiJHtmay5jb2x1bW5OYW1lfVwiOjoke25ld1BrUGdUeXBlfScpO2AsXG4gICAgKTtcbiAgfVxuXG4gIC8vIDYuIFBLIOygnOyVveyhsOqxtCDrs7XqtaxcbiAgdXBMaW5lcy5wdXNoKGAgIC8vIFBLIOygnOyVveyhsOqxtCDrs7XqtaxgKTtcbiAgdXBMaW5lcy5wdXNoKFxuICAgIGAgIGF3YWl0IGtuZXgucmF3KCdBTFRFUiBUQUJMRSBcIiR7dGFibGV9XCIgQUREIENPTlNUUkFJTlQgXCIke3BrQ29uc3RyYWludE5hbWV9XCIgUFJJTUFSWSBLRVkgKFwiaWRcIiknKTtgLFxuICApO1xuXG4gIC8vIDcuIOyekOq4sCDssLjsobAgRksg67O16rWsXG4gIGZvciAoY29uc3QgZmsgb2Ygc2VsZlJlZmVyZW5jaW5nRktzKSB7XG4gICAgdXBMaW5lcy5wdXNoKGAgIC8vIOyekOq4sCDssLjsobAgRksg67O16rWsOiAke2ZrLmNvbHVtbk5hbWV9YCk7XG4gICAgdXBMaW5lcy5wdXNoKFxuICAgICAgYCAgYXdhaXQga25leC5yYXcoJ0FMVEVSIFRBQkxFIFwiJHt0YWJsZX1cIiBBREQgQ09OU1RSQUlOVCBcIiR7ZmsuY29uc3RyYWludE5hbWV9XCIgRk9SRUlHTiBLRVkgKFwiJHtmay5jb2x1bW5OYW1lfVwiKSBSRUZFUkVOQ0VTIFwiJHt0YWJsZX1cIihcImlkXCIpIE9OIFVQREFURSAke2ZrLm9uVXBkYXRlfSBPTiBERUxFVEUgJHtmay5vbkRlbGV0ZX0nKTtgLFxuICAgICk7XG4gIH1cblxuICAvLyA4LiDsmbjrtoAg7YWM7J2067iU7J2YIEZLIOygnOyVveyhsOqxtCDrs7XqtaxcbiAgZm9yIChjb25zdCBmayBvZiBleHRlcm5hbFJlZmVyZW5jaW5nRktzKSB7XG4gICAgdXBMaW5lcy5wdXNoKGAgIC8vICR7ZmsudGFibGVOYW1lfS4ke2ZrLmNvbHVtbk5hbWV9IEZLIOygnOyVveyhsOqxtCDrs7XqtaxgKTtcbiAgICB1cExpbmVzLnB1c2goXG4gICAgICBgICBhd2FpdCBrbmV4LnJhdygnQUxURVIgVEFCTEUgXCIke2ZrLnRhYmxlTmFtZX1cIiBBREQgQ09OU1RSQUlOVCBcIiR7ZmsuY29uc3RyYWludE5hbWV9XCIgRk9SRUlHTiBLRVkgKFwiJHtmay5jb2x1bW5OYW1lfVwiKSBSRUZFUkVOQ0VTIFwiJHt0YWJsZX1cIihcImlkXCIpIE9OIFVQREFURSAke2ZrLm9uVXBkYXRlfSBPTiBERUxFVEUgJHtmay5vbkRlbGV0ZX0nKTtgLFxuICAgICk7XG4gIH1cblxuICAvLyBET1dOIOy9lOuTnCDsg53shLEgKOyXreyInClcbiAgY29uc3QgZG93bkxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIDEuIOyZuOu2gCDthYzsnbTruJTsnZggRksg7KCc7JW97KGw6rG0IOyCreygnFxuICBmb3IgKGNvbnN0IGZrIG9mIGV4dGVybmFsUmVmZXJlbmNpbmdGS3MpIHtcbiAgICBkb3duTGluZXMucHVzaChgICAvLyAke2ZrLnRhYmxlTmFtZX0uJHtmay5jb2x1bW5OYW1lfSBGSyDsoJzslb3sobDqsbQg7IKt7KCcYCk7XG4gICAgZG93bkxpbmVzLnB1c2goXG4gICAgICBgICBhd2FpdCBrbmV4LnJhdygnQUxURVIgVEFCTEUgXCIke2ZrLnRhYmxlTmFtZX1cIiBEUk9QIENPTlNUUkFJTlQgXCIke2ZrLmNvbnN0cmFpbnROYW1lfVwiJyk7YCxcbiAgICApO1xuICB9XG5cbiAgLy8gMi4g7J6Q6riwIOywuOyhsCBGSyDsgq3soJxcbiAgZm9yIChjb25zdCBmayBvZiBzZWxmUmVmZXJlbmNpbmdGS3MpIHtcbiAgICBkb3duTGluZXMucHVzaChgICAvLyDsnpDquLAg7LC47KGwIEZLIOyCreygnDogJHtmay5jb2x1bW5OYW1lfWApO1xuICAgIGRvd25MaW5lcy5wdXNoKFxuICAgICAgYCAgYXdhaXQga25leC5yYXcoJ0FMVEVSIFRBQkxFIFwiJHt0YWJsZX1cIiBEUk9QIENPTlNUUkFJTlQgXCIke2ZrLmNvbnN0cmFpbnROYW1lfVwiJyk7YCxcbiAgICApO1xuICB9XG5cbiAgLy8gMy4gUEsg7KCc7JW97KGw6rG0IOyCreygnFxuICBkb3duTGluZXMucHVzaChgICAvLyBQSyDsoJzslb3sobDqsbQg7IKt7KCcYCk7XG4gIGRvd25MaW5lcy5wdXNoKFxuICAgIGAgIGF3YWl0IGtuZXgucmF3KCdBTFRFUiBUQUJMRSBcIiR7dGFibGV9XCIgRFJPUCBDT05TVFJBSU5UIFwiJHtwa0NvbnN0cmFpbnROYW1lfVwiJyk7YCxcbiAgKTtcblxuICAvLyA0LiBQSyDsu6zrn7wg7YOA7J6FIOybkOuztVxuICBkb3duTGluZXMucHVzaChgICAvLyBQSyDsu6zrn7wg7YOA7J6FIOybkOuztWApO1xuICBkb3duTGluZXMucHVzaChcbiAgICBgICBhd2FpdCBrbmV4LnJhdygnQUxURVIgVEFCTEUgXCIke3RhYmxlfVwiIEFMVEVSIENPTFVNTiBcImlkXCIgVFlQRSAke29sZFBrUGdUeXBlfSBVU0lORyBcImlkXCI6OiR7b2xkUGtQZ1R5cGV9Jyk7YCxcbiAgKTtcblxuICAvLyA1LiBGSyDsu6zrn7wg7YOA7J6FIOybkOuztSAo7Jet7LC47KGwIO2FjOydtOu4lOuTpClcbiAgZm9yIChjb25zdCBmayBvZiByZWZlcmVuY2luZ0ZLcykge1xuICAgIGRvd25MaW5lcy5wdXNoKGAgIC8vICR7ZmsudGFibGVOYW1lfS4ke2ZrLmNvbHVtbk5hbWV9IOy7rOufvCDtg4DsnoUg7JuQ67O1YCk7XG4gICAgZG93bkxpbmVzLnB1c2goXG4gICAgICBgICBhd2FpdCBrbmV4LnJhdygnQUxURVIgVEFCTEUgXCIke2ZrLnRhYmxlTmFtZX1cIiBBTFRFUiBDT0xVTU4gXCIke2ZrLmNvbHVtbk5hbWV9XCIgVFlQRSAke29sZFBrUGdUeXBlfSBVU0lORyBcIiR7ZmsuY29sdW1uTmFtZX1cIjo6JHtvbGRQa1BnVHlwZX0nKTtgLFxuICAgICk7XG4gIH1cblxuICAvLyA2LiBQSyDsoJzslb3sobDqsbQg67O16rWsXG4gIGRvd25MaW5lcy5wdXNoKGAgIC8vIFBLIOygnOyVveyhsOqxtCDrs7XqtaxgKTtcbiAgZG93bkxpbmVzLnB1c2goXG4gICAgYCAgYXdhaXQga25leC5yYXcoJ0FMVEVSIFRBQkxFIFwiJHt0YWJsZX1cIiBBREQgQ09OU1RSQUlOVCBcIiR7cGtDb25zdHJhaW50TmFtZX1cIiBQUklNQVJZIEtFWSAoXCJpZFwiKScpO2AsXG4gICk7XG5cbiAgLy8gNy4g7J6Q6riwIOywuOyhsCBGSyDrs7XqtaxcbiAgZm9yIChjb25zdCBmayBvZiBzZWxmUmVmZXJlbmNpbmdGS3MpIHtcbiAgICBkb3duTGluZXMucHVzaChgICAvLyDsnpDquLAg7LC47KGwIEZLIOuzteq1rDogJHtmay5jb2x1bW5OYW1lfWApO1xuICAgIGRvd25MaW5lcy5wdXNoKFxuICAgICAgYCAgYXdhaXQga25leC5yYXcoJ0FMVEVSIFRBQkxFIFwiJHt0YWJsZX1cIiBBREQgQ09OU1RSQUlOVCBcIiR7ZmsuY29uc3RyYWludE5hbWV9XCIgRk9SRUlHTiBLRVkgKFwiJHtmay5jb2x1bW5OYW1lfVwiKSBSRUZFUkVOQ0VTIFwiJHt0YWJsZX1cIihcImlkXCIpIE9OIFVQREFURSAke2ZrLm9uVXBkYXRlfSBPTiBERUxFVEUgJHtmay5vbkRlbGV0ZX0nKTtgLFxuICAgICk7XG4gIH1cblxuICAvLyA4LiDsmbjrtoAg7YWM7J2067iU7J2YIEZLIOygnOyVveyhsOqxtCDrs7XqtaxcbiAgZm9yIChjb25zdCBmayBvZiBleHRlcm5hbFJlZmVyZW5jaW5nRktzKSB7XG4gICAgZG93bkxpbmVzLnB1c2goYCAgLy8gJHtmay50YWJsZU5hbWV9LiR7ZmsuY29sdW1uTmFtZX0gRksg7KCc7JW97KGw6rG0IOuzteq1rGApO1xuICAgIGRvd25MaW5lcy5wdXNoKFxuICAgICAgYCAgYXdhaXQga25leC5yYXcoJ0FMVEVSIFRBQkxFIFwiJHtmay50YWJsZU5hbWV9XCIgQUREIENPTlNUUkFJTlQgXCIke2ZrLmNvbnN0cmFpbnROYW1lfVwiIEZPUkVJR04gS0VZIChcIiR7ZmsuY29sdW1uTmFtZX1cIikgUkVGRVJFTkNFUyBcIiR7dGFibGV9XCIoXCJpZFwiKSBPTiBVUERBVEUgJHtmay5vblVwZGF0ZX0gT04gREVMRVRFICR7Zmsub25EZWxldGV9Jyk7YCxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW1xuICAgICdpbXBvcnQgdHlwZSB7IEtuZXggfSBmcm9tIFwia25leFwiOycsXG4gICAgXCJcIixcbiAgICBcImV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cChrbmV4OiBLbmV4KTogUHJvbWlzZTx2b2lkPiB7XCIsXG4gICAgLi4udXBMaW5lcyxcbiAgICBcIn1cIixcbiAgICBcIlwiLFxuICAgIFwiZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvd24oa25leDogS25leCk6IFByb21pc2U8dm9pZD4ge1wiLFxuICAgIC4uLmRvd25MaW5lcyxcbiAgICBcIn1cIixcbiAgXTtcblxuICBjb25zdCBmb3JtYXR0ZWQgPSBhd2FpdCBmb3JtYXRDb2RlKGxpbmVzLmpvaW4oXCJcXG5cIiksIGBzcmMvbWlncmF0aW9uLyR7dGFibGV9LnRzYCk7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICB0YWJsZSxcbiAgICAgIHRpdGxlOiBgYWx0ZXJfJHt0YWJsZX1fcGtfdHlwZWAsXG4gICAgICBmb3JtYXR0ZWQsXG4gICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICogUEsg7Lus65+87J2YIFBvc3RncmVTUUwg7YOA7J6FIOusuOyekOyXtOydhCDrsJjtmZjtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIGdldFBrUGdUeXBlKGNvbDogTWlncmF0aW9uQ29sdW1uKTogc3RyaW5nIHtcbiAgaWYgKGNvbC50eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGNvbC5sZW5ndGggIT09IHVuZGVmaW5lZCA/IGB2YXJjaGFyKCR7Y29sLmxlbmd0aH0pYCA6IFwidGV4dFwiO1xuICB9XG4gIGlmIChjb2wudHlwZSA9PT0gXCJ1dWlkXCIpIHtcbiAgICByZXR1cm4gXCJ1dWlkXCI7XG4gIH1cbiAgLy8gaW50ZWdlcuydmCDqsr3smrAgc2VyaWFsL2ludGVnZXIg6rWs67aE7J20IO2VhOyalO2VmOyngOunjCxcbiAgLy8g7YOA7J6FIOuzgOqyvSDsi5zsl5DripQgaW50ZWdlcuuhnCDsspjrpqztlanri4jri6QuXG4gIHJldHVybiBcImludGVnZXJcIjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBbVNBLFNBQVMsc0JBQXNCLFFBQStEO0NBQzVGLE9BQU8sT0FBTyxXQUFXLE9BQU87QUFDbEM7QUFFQSxTQUFTLDZCQUE2QixZQUFpRDtDQUNyRixNQUFNLFNBQXNDLENBQUM7Q0FDN0MsSUFBSSxRQUFRO0NBRVosT0FBTyxRQUFRLFdBQVcsUUFBUTtFQUNoQyxNQUFNLE9BQU8sV0FBVztFQUV4QixJQUFJLFNBQVMsUUFDWDtFQUdGLElBQUksS0FBSyxLQUFLLElBQUksR0FBRztHQUNuQixTQUFTO0dBQ1Q7RUFDRjtFQUVBLElBQUksV0FBVyxXQUFXLE1BQU0sS0FBSyxHQUFHO0dBQ3RDLE9BQU8sS0FBSztJQUFFLE1BQU07SUFBWSxPQUFPO0dBQUssQ0FBQztHQUM3QyxTQUFTO0dBQ1Q7RUFDRjtFQUVBLElBQUksV0FBVyxXQUFXLE1BQU0sS0FBSyxHQUFHO0dBQ3RDLE9BQU8sS0FBSztJQUFFLE1BQU07SUFBWSxPQUFPO0dBQUssQ0FBQztHQUM3QyxTQUFTO0dBQ1Q7RUFDRjtFQUVBLElBQUksU0FBUyxPQUFPLFNBQVMsT0FBTyxTQUFTLEtBQUs7R0FDaEQsT0FBTyxLQUFLO0lBQUUsTUFBTTtJQUFVLE9BQU87R0FB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
1340
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1nZW5lcmF0aW9uLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWdyYXRpb24vY29kZS1nZW5lcmF0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBlcXVhbCBmcm9tIFwiZmFzdC1kZWVwLWVxdWFsXCI7XG5pbXBvcnQgeyB0eXBlIEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgYWxwaGFiZXRpY2FsLCBkaWZmIH0gZnJvbSBcInJhZGFzaGlcIjtcblxuaW1wb3J0IHsgZm9ybWF0Q29kZSB9IGZyb20gXCIuLi9jb2RlLWZvcm1hdHRpbmdcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBFbnRpdHlQcm9wLFxuICB0eXBlIEdlbk1pZ3JhdGlvbkNvZGUsXG4gIHR5cGUgTWlncmF0aW9uQ29sdW1uLFxuICB0eXBlIE1pZ3JhdGlvbkZvcmVpZ24sXG4gIHR5cGUgTWlncmF0aW9uSW5kZXgsXG4gIHR5cGUgTWlncmF0aW9uU2V0LFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGlzU2VhcmNoVGV4dFByb3AgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGlzU3RyaW5nVmFsdWUgfSBmcm9tIFwiLi4vdXRpbHMvcnVudGltZS12YWx1ZVwiO1xuaW1wb3J0IHsgZGlmZmVyZW5jZVdpdGgsIGludGVyc2VjdGlvbkJ5IH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQge1xuICBub3JtYWxpemVJbmRleFdoZXJlUHJlZGljYXRlLFxuICBub3JtYWxpemVJbmRleFdoZXJlUHJlZGljYXRlRm9yQ29tcGFyaXNvbixcbn0gZnJvbSBcIi4vaW5kZXgtd2hlcmUtcHJlZGljYXRlXCI7XG5pbXBvcnQgeyBQb3N0Z3JlU1FMU2NoZW1hUmVhZGVyIH0gZnJvbSBcIi4vcG9zdGdyZXNxbC1zY2hlbWEtcmVhZGVyXCI7XG5cbi8qKlxuICog7Lus65+8IOygleydmCDqsrDqs7wg7YOA7J6FXG4gKiAtIGJ1aWxkZXI6IEtuZXggdGFibGUgYnVpbGRlciDrqZTshJzrk5zroZwg7Iuk7ZaJ7ZWgIOq1rOusuCAodGFibGUueHh4KCkpXG4gKiAtIHJhdzoga25leC5yYXcoKeuhnCDsi6TtlontlaAg6rWs66y4XG4gKi9cbnR5cGUgQ29sdW1uRGVmaW5pdGlvblJlc3VsdCA9IHtcbiAgYnVpbGRlcjogc3RyaW5nW107XG4gIHJhdzogc3RyaW5nW107XG59O1xuXG5jb25zdCBOVU1FUklDX0RFRkFVTFRfUFJFQ0lTSU9OID0gODtcbmNvbnN0IE5VTUVSSUNfREVGQVVMVF9TQ0FMRSA9IDI7XG5cbnR5cGUgU2VhcmNoVGV4dEhlbHBlcktpbmQgPSBcInRleHQtYXJyYXlcIiB8IFwianNvbmItYXJyYXlcIjtcblxudHlwZSBTZWFyY2hUZXh0RXhwcmVzc2lvblRva2VuID1cbiAgfCB7IHR5cGU6IFwiaWRlbnRpZmllclwiOyB2YWx1ZTogc3RyaW5nIH1cbiAgfCB7IHR5cGU6IFwicXVvdGVkSWRlbnRpZmllclwiOyB2YWx1ZTogc3RyaW5nIH1cbiAgfCB7IHR5cGU6IFwic3RyaW5nXCI7IHZhbHVlOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogXCJzeW1ib2xcIjsgdmFsdWU6IFwiKFwiIHwgXCIpXCIgfCBcIixcIiB9XG4gIHwgeyB0eXBlOiBcIm9wZXJhdG9yXCI7IHZhbHVlOiBcInx8XCIgfCBcIjo6XCIgfTtcblxudHlwZSBTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGUgPVxuICB8IHsgdHlwZTogXCJpZGVudGlmaWVyXCI7IG5hbWU6IHN0cmluZzsgcXVvdGVkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6IFwic3RyaW5nXCI7IHZhbHVlOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogXCJib29sZWFuXCI7IHZhbHVlOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6IFwiZnVuY3Rpb25cIjsgbmFtZTogc3RyaW5nOyBhcmdzOiBTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGVbXSB9XG4gIHwgeyB0eXBlOiBcImNvbmNhdFwiOyBwYXJ0czogU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlW10gfVxuICB8IHsgdHlwZTogXCJjb2xsYXRlXCI7IGV4cHI6IFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZTsgY29sbGF0aW9uOiBzdHJpbmc7IHF1b3RlZDogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiBcImNhc3RcIjsgZXhwcjogU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlOyB0YXJnZXRUeXBlOiBzdHJpbmcgfTtcblxuY29uc3QgU0VBUkNIX1RFWFRfSEVMUEVSX0RFRklOSVRJT05TID0ge1xuICBcInRleHQtYXJyYXlcIjogYGF3YWl0IGtuZXgucmF3KFxcYENSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHNvbmFtdV90ZXh0X2FycmF5X2FnZyhhcnIgdGV4dFtdLCBjaSBib29sZWFuIERFRkFVTFQgdHJ1ZSlcblJFVFVSTlMgdGV4dFxuTEFOR1VBR0Ugc3FsIElNTVVUQUJMRSBQQVJBTExFTCBTQUZFIFJFVFVSTlMgTlVMTCBPTiBOVUxMIElOUFVUXG5BUyAkJFxuICBTRUxFQ1Qgc3RyaW5nX2FnZyhcbiAgICBDQVNFIFdIRU4gY2kgVEhFTiBsb3dlcih2YWx1ZSkgRUxTRSB2YWx1ZSBFTkQsXG4gICAgJyAnXG4gIClcbiAgRlJPTSB1bm5lc3QoYXJyKSBBUyB2YWx1ZVxuJCRcXGApO2AsXG4gIFwianNvbmItYXJyYXlcIjogYGF3YWl0IGtuZXgucmF3KFxcYENSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHNvbmFtdV9qc29uYl9hcnJheV9hZ2coYXJyIGpzb25iLCBjaSBib29sZWFuIERFRkFVTFQgdHJ1ZSlcblJFVFVSTlMgdGV4dFxuTEFOR1VBR0Ugc3FsIElNTVVUQUJMRSBQQVJBTExFTCBTQUZFIFJFVFVSTlMgTlVMTCBPTiBOVUxMIElOUFVUXG5BUyAkJFxuICBTRUxFQ1Qgc3RyaW5nX2FnZyhcbiAgICBDQVNFIFdIRU4gY2kgVEhFTiBsb3dlcih2YWx1ZSkgRUxTRSB2YWx1ZSBFTkQsXG4gICAgJyAnXG4gIClcbiAgRlJPTSBqc29uYl9hcnJheV9lbGVtZW50c190ZXh0KGFycilcbiQkXFxgKTtgLFxufSBzYXRpc2ZpZXMgUmVjb3JkPFNlYXJjaFRleHRIZWxwZXJLaW5kLCBzdHJpbmc+O1xuXG5jbGFzcyBTZWFyY2hUZXh0RXhwcmVzc2lvblBhcnNlciB7XG4gIHByaXZhdGUgaW5kZXggPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdG9rZW5zOiBTZWFyY2hUZXh0RXhwcmVzc2lvblRva2VuW10pIHt9XG5cbiAgaXNBdEVuZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pbmRleCA+PSB0aGlzLnRva2Vucy5sZW5ndGg7XG4gIH1cblxuICBwYXJzZUV4cHJlc3Npb24oKTogU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUNvbmNhdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUNvbmNhdCgpOiBTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGUge1xuICAgIGNvbnN0IHBhcnRzID0gW3RoaXMucGFyc2VQb3N0Zml4KCldO1xuXG4gICAgd2hpbGUgKHRoaXMubWF0Y2hPcGVyYXRvcihcInx8XCIpKSB7XG4gICAgICBwYXJ0cy5wdXNoKHRoaXMucGFyc2VQb3N0Zml4KCkpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPT09IDEgPyBwYXJ0c1swXSA6IHsgdHlwZTogXCJjb25jYXRcIiwgcGFydHMgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VQb3N0Zml4KCk6IFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZSB7XG4gICAgbGV0IG5vZGUgPSB0aGlzLnBhcnNlUHJpbWFyeSgpO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmICh0aGlzLm1hdGNoT3BlcmF0b3IoXCI6OlwiKSkge1xuICAgICAgICBub2RlID0ge1xuICAgICAgICAgIHR5cGU6IFwiY2FzdFwiLFxuICAgICAgICAgIGV4cHI6IG5vZGUsXG4gICAgICAgICAgdGFyZ2V0VHlwZTogdGhpcy5wYXJzZVR5cGVOYW1lKCksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5tYXRjaElkZW50aWZpZXIoXCJjb2xsYXRlXCIpKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jb25zdW1lQ29sbGF0aW9uVG9rZW4oKTtcbiAgICAgICAgbm9kZSA9IHtcbiAgICAgICAgICB0eXBlOiBcImNvbGxhdGVcIixcbiAgICAgICAgICBleHByOiBub2RlLFxuICAgICAgICAgIGNvbGxhdGlvbjogdG9rZW4udmFsdWUsXG4gICAgICAgICAgcXVvdGVkOiB0b2tlbi50eXBlID09PSBcInF1b3RlZElkZW50aWZpZXJcIixcbiAgICAgICAgfTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVByaW1hcnkoKTogU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuY29uc3VtZVRva2VuKFwi7ZGc7ZiE7IudXCIpO1xuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFwic3ltYm9sXCIgJiYgdG9rZW4udmFsdWUgPT09IFwiKFwiKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgIHRoaXMuZXhwZWN0U3ltYm9sKFwiKVwiKTtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIGlmICh0b2tlbi50eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInN0cmluZ1wiLCB2YWx1ZTogdG9rZW4udmFsdWUgfTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gXCJpZGVudGlmaWVyXCIgfHwgdG9rZW4udHlwZSA9PT0gXCJxdW90ZWRJZGVudGlmaWVyXCIpIHtcbiAgICAgIGNvbnN0IGxvd2VyTmFtZSA9IHRva2VuLnZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAodG9rZW4udHlwZSA9PT0gXCJpZGVudGlmaWVyXCIgJiYgKGxvd2VyTmFtZSA9PT0gXCJ0cnVlXCIgfHwgbG93ZXJOYW1lID09PSBcImZhbHNlXCIpKSB7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwiYm9vbGVhblwiLCB2YWx1ZTogbG93ZXJOYW1lID09PSBcInRydWVcIiB9O1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5tYXRjaFN5bWJvbChcIihcIikpIHtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFwiaWRlbnRpZmllclwiICYmIGxvd2VyTmFtZSA9PT0gXCJ0cmltXCIgJiYgdGhpcy5pc1RyaW1Cb3RoRnJvbUZvcm0oKSkge1xuICAgICAgICAgIHRoaXMuaW5kZXggKz0gMjtcbiAgICAgICAgICBjb25zdCBhcmcgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICAgIHRoaXMuZXhwZWN0U3ltYm9sKFwiKVwiKTtcbiAgICAgICAgICByZXR1cm4geyB0eXBlOiBcImZ1bmN0aW9uXCIsIG5hbWU6IFwidHJpbVwiLCBhcmdzOiBbYXJnXSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJncyA9IHRoaXMucGFyc2VGdW5jdGlvbkFyZ3MoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiBcImZ1bmN0aW9uXCIsXG4gICAgICAgICAgbmFtZTogdG9rZW4udmFsdWUsXG4gICAgICAgICAgYXJncyxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJpZGVudGlmaWVyXCIsXG4gICAgICAgIG5hbWU6IHRva2VuLnZhbHVlLFxuICAgICAgICBxdW90ZWQ6IHRva2VuLnR5cGUgPT09IFwicXVvdGVkSWRlbnRpZmllclwiLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYOyngOybkOuQmOyngCDslYrripQgc2VhcmNoVGV4dCBleHByZXNzaW9uIHRva2VuOiAke3Rva2VuLnR5cGV9YCk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlRnVuY3Rpb25BcmdzKCk6IFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZVtdIHtcbiAgICBpZiAodGhpcy5tYXRjaFN5bWJvbChcIilcIikpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBhcmdzOiBTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGVbXSA9IFtdO1xuICAgIGRvIHtcbiAgICAgIGFyZ3MucHVzaCh0aGlzLnBhcnNlRXhwcmVzc2lvbigpKTtcbiAgICB9IHdoaWxlICh0aGlzLm1hdGNoU3ltYm9sKFwiLFwiKSk7XG5cbiAgICB0aGlzLmV4cGVjdFN5bWJvbChcIilcIik7XG4gICAgcmV0dXJuIGFyZ3M7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlVHlwZU5hbWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHRoaXMucGVlaygpO1xuICAgICAgaWYgKFxuICAgICAgICB0b2tlbj8udHlwZSA9PT0gXCJpZGVudGlmaWVyXCIgfHxcbiAgICAgICAgdG9rZW4/LnR5cGUgPT09IFwicXVvdGVkSWRlbnRpZmllclwiIHx8XG4gICAgICAgICh0b2tlbj8udHlwZSA9PT0gXCJzeW1ib2xcIiAmJlxuICAgICAgICAgICh0b2tlbi52YWx1ZSA9PT0gXCIoXCIgfHwgdG9rZW4udmFsdWUgPT09IFwiKVwiIHx8IHRva2VuLnZhbHVlID09PSBcIixcIikpXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFwic3ltYm9sXCIpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnRzLnB1c2godG9rZW4udmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIHRoaXMuaW5kZXggKz0gMTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIu2DgOyehSDsupDsiqTtjIUg64yA7IOBIO2DgOyeheydhCDssL7snYQg7IiYIOyXhuyKteuLiOuLpC5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oXCIgXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdW1lQ29sbGF0aW9uVG9rZW4oKTogRXh0cmFjdDxcbiAgICBTZWFyY2hUZXh0RXhwcmVzc2lvblRva2VuLFxuICAgIHsgdHlwZTogXCJpZGVudGlmaWVyXCIgfCBcInF1b3RlZElkZW50aWZpZXJcIiB9XG4gID4ge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5wZWVrKCk7XG4gICAgaWYgKHRva2VuPy50eXBlICE9PSBcImlkZW50aWZpZXJcIiAmJiB0b2tlbj8udHlwZSAhPT0gXCJxdW90ZWRJZGVudGlmaWVyXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNPTExBVEUg64yA7IOBIOyLneuzhOyekOulvCDssL7snYQg7IiYIOyXhuyKteuLiOuLpC5cIik7XG4gICAgfVxuICAgIHRoaXMuaW5kZXggKz0gMTtcbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBwcml2YXRlIGlzVHJpbUJvdGhGcm9tRm9ybSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBib3RoVG9rZW4gPSB0aGlzLnBlZWsoKTtcbiAgICBjb25zdCBmcm9tVG9rZW4gPSB0aGlzLnBlZWsoMSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgYm90aFRva2VuPy50eXBlID09PSBcImlkZW50aWZpZXJcIiAmJlxuICAgICAgYm90aFRva2VuLnZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwiYm90aFwiICYmXG4gICAgICBmcm9tVG9rZW4/LnR5cGUgPT09IFwiaWRlbnRpZmllclwiICYmXG4gICAgICBmcm9tVG9rZW4udmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJmcm9tXCJcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleHBlY3RTeW1ib2wodmFsdWU6IFwiKFwiIHwgXCIpXCIgfCBcIixcIik6IHZvaWQge1xuICAgIGlmICghdGhpcy5tYXRjaFN5bWJvbCh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgXCIke3ZhbHVlfVwiIO2GoO2BsOydtCDtlYTsmpTtlanri4jri6QuYCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXRjaFN5bWJvbCh2YWx1ZTogXCIoXCIgfCBcIilcIiB8IFwiLFwiKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnBlZWsoKTtcbiAgICBpZiAodG9rZW4/LnR5cGUgPT09IFwic3ltYm9sXCIgJiYgdG9rZW4udmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICB0aGlzLmluZGV4ICs9IDE7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXRjaE9wZXJhdG9yKHZhbHVlOiBcInx8XCIgfCBcIjo6XCIpOiBib29sZWFuIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMucGVlaygpO1xuICAgIGlmICh0b2tlbj8udHlwZSA9PT0gXCJvcGVyYXRvclwiICYmIHRva2VuLnZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgdGhpcy5pbmRleCArPSAxO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgbWF0Y2hJZGVudGlmaWVyKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMucGVlaygpO1xuICAgIGlmICh0b2tlbj8udHlwZSA9PT0gXCJpZGVudGlmaWVyXCIgJiYgdG9rZW4udmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gdmFsdWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgdGhpcy5pbmRleCArPSAxO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3VtZVRva2VuKGNvbnRleHQ6IHN0cmluZyk6IFNlYXJjaFRleHRFeHByZXNzaW9uVG9rZW4ge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5wZWVrKCk7XG4gICAgaWYgKCF0b2tlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2NvbnRleHR9IO2GoO2BsOydtCDtlYTsmpTtlanri4jri6QuYCk7XG4gICAgfVxuICAgIHRoaXMuaW5kZXggKz0gMTtcbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBwcml2YXRlIHBlZWsob2Zmc2V0ID0gMCk6IFNlYXJjaFRleHRFeHByZXNzaW9uVG9rZW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRva2Vuc1t0aGlzLmluZGV4ICsgb2Zmc2V0XTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRJbmRleENvbHVtbk9wY2xhc3MoY29sdW1uOiBNaWdyYXRpb25JbmRleFtcImNvbHVtbnNcIl1bbnVtYmVyXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBjb2x1bW4ub3BjbGFzcyA/PyBjb2x1bW4udmVjdG9yT3BzO1xufVxuXG5mdW5jdGlvbiB0b2tlbml6ZVNlYXJjaFRleHRFeHByZXNzaW9uKGV4cHJlc3Npb246IHN0cmluZyk6IFNlYXJjaFRleHRFeHByZXNzaW9uVG9rZW5bXSB7XG4gIGNvbnN0IHRva2VuczogU2VhcmNoVGV4dEV4cHJlc3Npb25Ub2tlbltdID0gW107XG4gIGxldCBpbmRleCA9IDA7XG5cbiAgd2hpbGUgKGluZGV4IDwgZXhwcmVzc2lvbi5sZW5ndGgpIHtcbiAgICBjb25zdCBjaGFyID0gZXhwcmVzc2lvbltpbmRleF07XG5cbiAgICBpZiAoY2hhciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoL1xccy8udGVzdChjaGFyKSkge1xuICAgICAgaW5kZXggKz0gMTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChleHByZXNzaW9uLnN0YXJ0c1dpdGgoXCJ8fFwiLCBpbmRleCkpIHtcbiAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogXCJvcGVyYXRvclwiLCB2YWx1ZTogXCJ8fFwiIH0pO1xuICAgICAgaW5kZXggKz0gMjtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChleHByZXNzaW9uLnN0YXJ0c1dpdGgoXCI6OlwiLCBpbmRleCkpIHtcbiAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogXCJvcGVyYXRvclwiLCB2YWx1ZTogXCI6OlwiIH0pO1xuICAgICAgaW5kZXggKz0gMjtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjaGFyID09PSBcIihcIiB8fCBjaGFyID09PSBcIilcIiB8fCBjaGFyID09PSBcIixcIikge1xuICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiBcInN5bWJvbFwiLCB2YWx1ZTogY2hhciB9KTtcbiAgICAgIGluZGV4ICs9IDE7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY2hhciA9PT0gXCInXCIpIHtcbiAgICAgIGxldCB2YWx1ZSA9IFwiXCI7XG4gICAgICBpbmRleCArPSAxO1xuXG4gICAgICB3aGlsZSAoaW5kZXggPCBleHByZXNzaW9uLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gZXhwcmVzc2lvbltpbmRleF07XG4gICAgICAgIGlmIChjdXJyZW50ID09PSBcIidcIikge1xuICAgICAgICAgIGlmIChleHByZXNzaW9uW2luZGV4ICsgMV0gPT09IFwiJ1wiKSB7XG4gICAgICAgICAgICB2YWx1ZSArPSBcIidcIjtcbiAgICAgICAgICAgIGluZGV4ICs9IDI7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpbmRleCArPSAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsdWUgKz0gY3VycmVudDtcbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgIH1cblxuICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiBcInN0cmluZ1wiLCB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjaGFyID09PSAnXCInKSB7XG4gICAgICBsZXQgdmFsdWUgPSBcIlwiO1xuICAgICAgaW5kZXggKz0gMTtcblxuICAgICAgd2hpbGUgKGluZGV4IDwgZXhwcmVzc2lvbi5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IGV4cHJlc3Npb25baW5kZXhdO1xuICAgICAgICBpZiAoY3VycmVudCA9PT0gJ1wiJykge1xuICAgICAgICAgIGlmIChleHByZXNzaW9uW2luZGV4ICsgMV0gPT09ICdcIicpIHtcbiAgICAgICAgICAgIHZhbHVlICs9ICdcIic7XG4gICAgICAgICAgICBpbmRleCArPSAyO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbHVlICs9IGN1cnJlbnQ7XG4gICAgICAgIGluZGV4ICs9IDE7XG4gICAgICB9XG5cbiAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogXCJxdW90ZWRJZGVudGlmaWVyXCIsIHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKC9bQS1aYS16X10vLnRlc3QoY2hhcikpIHtcbiAgICAgIGxldCB2YWx1ZSA9IGNoYXI7XG4gICAgICBpbmRleCArPSAxO1xuXG4gICAgICB3aGlsZSAoaW5kZXggPCBleHByZXNzaW9uLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gZXhwcmVzc2lvbltpbmRleF07XG4gICAgICAgIGlmIChjdXJyZW50ICE9PSB1bmRlZmluZWQgJiYgL1tBLVphLXowLTlfJF0vLnRlc3QoY3VycmVudCkpIHtcbiAgICAgICAgICB2YWx1ZSArPSBjdXJyZW50O1xuICAgICAgICAgIGluZGV4ICs9IDE7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogXCJpZGVudGlmaWVyXCIsIHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGDsp4Dsm5DrkJjsp4Ag7JWK64qUIHNlYXJjaFRleHQgZXhwcmVzc2lvbiDrrLjsnpA6ICR7Y2hhcn1gKTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmZ1bmN0aW9uIGNhbm9uaWNhbGl6ZVNlYXJjaFRleHRHZW5lcmF0ZWRFeHByZXNzaW9uKGV4cHJlc3Npb246IHN0cmluZyk6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IFNlYXJjaFRleHRFeHByZXNzaW9uUGFyc2VyKHRva2VuaXplU2VhcmNoVGV4dEV4cHJlc3Npb24oZXhwcmVzc2lvbikpO1xuICAgIGNvbnN0IHBhcnNlZEV4cHJlc3Npb24gPSBwYXJzZXIucGFyc2VFeHByZXNzaW9uKCk7XG5cbiAgICBpZiAoIXBhcnNlci5pc0F0RW5kKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInNlYXJjaFRleHQgZXhwcmVzc2lvbiDtjIzsi7HsnbQg64Gd64KY7KeAIOyViuyVmOyKteuLiOuLpC5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlbmRlclNlYXJjaFRleHRFeHByZXNzaW9uKG5vcm1hbGl6ZVNlYXJjaFRleHRFeHByZXNzaW9uTm9kZShwYXJzZWRFeHByZXNzaW9uKSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBub3JtYWxpemVTZWFyY2hUZXh0RXhwcmVzc2lvbkZhbGxiYWNrKGV4cHJlc3Npb24pO1xuICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlYXJjaFRleHRFeHByZXNzaW9uTm9kZShcbiAgbm9kZTogU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlLFxuKTogU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlIHtcbiAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICBjYXNlIFwiaWRlbnRpZmllclwiOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgbmFtZTogbm9kZS5xdW90ZWQgPyBub2RlLm5hbWUgOiBub2RlLm5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgIH07XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICBjYXNlIFwiY29uY2F0XCI6IHtcbiAgICAgIGNvbnN0IHBhcnRzID0gbm9kZS5wYXJ0cy5mbGF0TWFwKChwYXJ0KSA9PiB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXJ0ID0gbm9ybWFsaXplU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlKHBhcnQpO1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplZFBhcnQudHlwZSA9PT0gXCJjb25jYXRcIiA/IG5vcm1hbGl6ZWRQYXJ0LnBhcnRzIDogW25vcm1hbGl6ZWRQYXJ0XTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJjb25jYXRcIiwgcGFydHMgfTtcbiAgICB9XG4gICAgY2FzZSBcImNvbGxhdGVcIjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiY29sbGF0ZVwiLFxuICAgICAgICBleHByOiBub3JtYWxpemVTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGUobm9kZS5leHByKSxcbiAgICAgICAgY29sbGF0aW9uOiBub2RlLmNvbGxhdGlvbi50b1VwcGVyQ2FzZSgpID09PSBcIkNcIiA/IFwiQ1wiIDogbm9kZS5jb2xsYXRpb24sXG4gICAgICAgIHF1b3RlZDogbm9kZS5xdW90ZWQgfHwgbm9kZS5jb2xsYXRpb24udG9VcHBlckNhc2UoKSA9PT0gXCJDXCIsXG4gICAgICB9O1xuICAgIGNhc2UgXCJjYXN0XCI6IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRFeHByID0gbm9ybWFsaXplU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlKG5vZGUuZXhwcik7XG4gICAgICBjb25zdCB0YXJnZXRUeXBlID0gbm9kZS50YXJnZXRUeXBlLnJlcGxhY2UoL1xccysvZywgXCIgXCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHRhcmdldFR5cGUgPT09IFwidGV4dFwiIHx8IHRhcmdldFR5cGUgPT09IFwiY2hhcmFjdGVyIHZhcnlpbmdcIiB8fCB0YXJnZXRUeXBlID09PSBcInZhcmNoYXJcIikge1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplZEV4cHI7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcImNhc3RcIixcbiAgICAgICAgZXhwcjogbm9ybWFsaXplZEV4cHIsXG4gICAgICAgIHRhcmdldFR5cGUsXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlIFwiZnVuY3Rpb25cIjoge1xuICAgICAgY29uc3QgbmFtZSA9IG5vZGUubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgbGV0IGFyZ3MgPSBub2RlLmFyZ3MubWFwKChhcmcpID0+IG5vcm1hbGl6ZVNlYXJjaFRleHRFeHByZXNzaW9uTm9kZShhcmcpKTtcblxuICAgICAgaWYgKChuYW1lID09PSBcInRyaW1cIiB8fCBuYW1lID09PSBcImJ0cmltXCIpICYmIGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogXCJmdW5jdGlvblwiLFxuICAgICAgICAgIG5hbWU6IFwidHJpbVwiLFxuICAgICAgICAgIGFyZ3MsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgKG5hbWUgPT09IFwic29uYW11X3RleHRfYXJyYXlfYWdnXCIgfHwgbmFtZSA9PT0gXCJzb25hbXVfanNvbmJfYXJyYXlfYWdnXCIpICYmXG4gICAgICAgIGFyZ3MubGVuZ3RoID09PSAyICYmXG4gICAgICAgIGFyZ3NbMV0/LnR5cGUgPT09IFwiYm9vbGVhblwiICYmXG4gICAgICAgIGFyZ3NbMV0udmFsdWVcbiAgICAgICkge1xuICAgICAgICBhcmdzID0gW2FyZ3NbMF1dO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcImZ1bmN0aW9uXCIsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGFyZ3MsXG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZW5kZXJTZWFyY2hUZXh0RXhwcmVzc2lvbihub2RlOiBTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGUsIHBhcmVudFByZWNlZGVuY2UgPSAwKTogc3RyaW5nIHtcbiAgY29uc3QgcHJlY2VkZW5jZSA9IGdldFNlYXJjaFRleHRFeHByZXNzaW9uUHJlY2VkZW5jZShub2RlKTtcbiAgY29uc3QgcmVuZGVyZWQgPSAoKCkgPT4ge1xuICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICBjYXNlIFwiaWRlbnRpZmllclwiOlxuICAgICAgICByZXR1cm4gbm9kZS5xdW90ZWQgPyBgXCIke25vZGUubmFtZS5yZXBsYWNlQWxsKCdcIicsICdcIlwiJyl9XCJgIDogbm9kZS5uYW1lO1xuICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICByZXR1cm4gYCcke25vZGUudmFsdWUucmVwbGFjZUFsbChcIidcIiwgXCInJ1wiKX0nYDtcbiAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgIHJldHVybiBub2RlLnZhbHVlID8gXCJ0cnVlXCIgOiBcImZhbHNlXCI7XG4gICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgcmV0dXJuIGAke25vZGUubmFtZX0oJHtub2RlLmFyZ3NcbiAgICAgICAgICAubWFwKChhcmcpID0+IHJlbmRlclNlYXJjaFRleHRFeHByZXNzaW9uKGFyZykpXG4gICAgICAgICAgLmpvaW4oXCIsIFwiKX0pYDtcbiAgICAgIGNhc2UgXCJjb25jYXRcIjpcbiAgICAgICAgcmV0dXJuIG5vZGUucGFydHMubWFwKChwYXJ0KSA9PiByZW5kZXJTZWFyY2hUZXh0RXhwcmVzc2lvbihwYXJ0LCBwcmVjZWRlbmNlKSkuam9pbihcIiB8fCBcIik7XG4gICAgICBjYXNlIFwiY29sbGF0ZVwiOiB7XG4gICAgICAgIGNvbnN0IGNvbGxhdGlvbiA9IG5vZGUucXVvdGVkXG4gICAgICAgICAgPyBgXCIke25vZGUuY29sbGF0aW9uLnJlcGxhY2VBbGwoJ1wiJywgJ1wiXCInKX1cImBcbiAgICAgICAgICA6IG5vZGUuY29sbGF0aW9uO1xuICAgICAgICByZXR1cm4gYCR7cmVuZGVyU2VhcmNoVGV4dEV4cHJlc3Npb24obm9kZS5leHByLCBwcmVjZWRlbmNlKX0gQ09MTEFURSAke2NvbGxhdGlvbn1gO1xuICAgICAgfVxuICAgICAgY2FzZSBcImNhc3RcIjpcbiAgICAgICAgcmV0dXJuIGAke3JlbmRlclNlYXJjaFRleHRFeHByZXNzaW9uKG5vZGUuZXhwciwgcHJlY2VkZW5jZSl9Ojoke25vZGUudGFyZ2V0VHlwZX1gO1xuICAgIH1cbiAgfSkoKTtcblxuICBpZiAocHJlY2VkZW5jZSA8IHBhcmVudFByZWNlZGVuY2UpIHtcbiAgICByZXR1cm4gYCgke3JlbmRlcmVkfSlgO1xuICB9XG5cbiAgcmV0dXJuIHJlbmRlcmVkO1xufVxuXG5mdW5jdGlvbiBnZXRTZWFyY2hUZXh0RXhwcmVzc2lvblByZWNlZGVuY2Uobm9kZTogU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlKTogbnVtYmVyIHtcbiAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICBjYXNlIFwiY29uY2F0XCI6XG4gICAgICByZXR1cm4gMTtcbiAgICBjYXNlIFwiY29sbGF0ZVwiOlxuICAgIGNhc2UgXCJjYXN0XCI6XG4gICAgICByZXR1cm4gMjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIDM7XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU2VhcmNoVGV4dEV4cHJlc3Npb25GYWxsYmFjayhleHByZXNzaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gZXhwcmVzc2lvblxuICAgIC5yZXBsYWNlKC9cXHMrL2csIFwiIFwiKVxuICAgIC5yZXBsYWNlKC9cXGJUUklNXFxzKlxcKFxccypCT1RIXFxzK0ZST01cXHMrL2dpLCBcInRyaW0oXCIpXG4gICAgLnJlcGxhY2UoLzo6KD86dGV4dHxjaGFyYWN0ZXIgdmFyeWluZ3x2YXJjaGFyKVxcYi9naSwgXCJcIilcbiAgICAucmVwbGFjZSgvLFxccyp0cnVlXFxiL2dpLCBcIlwiKVxuICAgIC50cmltKCk7XG59XG5cbmZ1bmN0aW9uIHZpc2l0U2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlKFxuICBub2RlOiBTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGUsXG4gIHZpc2l0b3I6IChub2RlOiBTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGUpID0+IHZvaWQsXG4pOiB2b2lkIHtcbiAgdmlzaXRvcihub2RlKTtcblxuICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgIGNhc2UgXCJjb25jYXRcIjpcbiAgICAgIG5vZGUucGFydHMuZm9yRWFjaCgocGFydCkgPT4ge1xuICAgICAgICB2aXNpdFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZShwYXJ0LCB2aXNpdG9yKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJjb2xsYXRlXCI6XG4gICAgY2FzZSBcImNhc3RcIjpcbiAgICAgIHZpc2l0U2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlKG5vZGUuZXhwciwgdmlzaXRvcik7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICBub2RlLmFyZ3MuZm9yRWFjaCgoYXJnKSA9PiB7XG4gICAgICAgIHZpc2l0U2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlKGFyZywgdmlzaXRvcik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIFwiaWRlbnRpZmllclwiOlxuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgcmV0dXJuO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFNlYXJjaFRleHRIZWxwZXJLaW5kc0Zyb21FeHByZXNzaW9uKGV4cHJlc3Npb246IHN0cmluZyk6IFNldDxTZWFyY2hUZXh0SGVscGVyS2luZD4ge1xuICBjb25zdCBoZWxwZXJLaW5kcyA9IG5ldyBTZXQ8U2VhcmNoVGV4dEhlbHBlcktpbmQ+KCk7XG4gIGNvbnN0IGFkZEhlbHBlcktpbmRGcm9tTmFtZSA9IChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobm9ybWFsaXplZE5hbWUgPT09IFwic29uYW11X3RleHRfYXJyYXlfYWdnXCIpIHtcbiAgICAgIGhlbHBlcktpbmRzLmFkZChcInRleHQtYXJyYXlcIik7XG4gICAgfSBlbHNlIGlmIChub3JtYWxpemVkTmFtZSA9PT0gXCJzb25hbXVfanNvbmJfYXJyYXlfYWdnXCIpIHtcbiAgICAgIGhlbHBlcktpbmRzLmFkZChcImpzb25iLWFycmF5XCIpO1xuICAgIH1cbiAgfTtcblxuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBTZWFyY2hUZXh0RXhwcmVzc2lvblBhcnNlcih0b2tlbml6ZVNlYXJjaFRleHRFeHByZXNzaW9uKGV4cHJlc3Npb24pKTtcbiAgICBjb25zdCBwYXJzZWRFeHByZXNzaW9uID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgaWYgKCFwYXJzZXIuaXNBdEVuZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZWFyY2hUZXh0IGhlbHBlciBleHByZXNzaW9uIO2MjOyLseydtCDrgZ3rgpjsp4Ag7JWK7JWY7Iq164uI64ukLlwiKTtcbiAgICB9XG5cbiAgICB2aXNpdFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZShwYXJzZWRFeHByZXNzaW9uLCAobm9kZSkgPT4ge1xuICAgICAgaWYgKG5vZGUudHlwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGFkZEhlbHBlcktpbmRGcm9tTmFtZShub2RlLm5hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGNhdGNoIHtcbiAgICBpZiAoL1xcYnNvbmFtdV90ZXh0X2FycmF5X2FnZ1xccypcXCgvaS50ZXN0KGV4cHJlc3Npb24pKSB7XG4gICAgICBoZWxwZXJLaW5kcy5hZGQoXCJ0ZXh0LWFycmF5XCIpO1xuICAgIH1cbiAgICBpZiAoL1xcYnNvbmFtdV9qc29uYl9hcnJheV9hZ2dcXHMqXFwoL2kudGVzdChleHByZXNzaW9uKSkge1xuICAgICAgaGVscGVyS2luZHMuYWRkKFwianNvbmItYXJyYXlcIik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGhlbHBlcktpbmRzO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlU2VhcmNoVGV4dENvbHVtbnModGFibGU6IHN0cmluZywgY29sdW1uczogTWlncmF0aW9uQ29sdW1uW10pOiBNaWdyYXRpb25Db2x1bW5bXSB7XG4gIGNvbnN0IGVudGl0eSA9ICgoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBFbnRpdHlNYW5hZ2VyLmdldEJ5VGFibGUodGFibGUpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9KSgpO1xuXG4gIGlmICghZW50aXR5KSB7XG4gICAgcmV0dXJuIGNvbHVtbnM7XG4gIH1cblxuICBjb25zdCBwcm9wc0J5TmFtZSA9IG5ldyBNYXAoZW50aXR5LnByb3BzLm1hcCgocHJvcCkgPT4gW3Byb3AubmFtZSwgcHJvcF0pKTtcblxuICByZXR1cm4gY29sdW1ucy5tYXAoKGNvbHVtbikgPT4ge1xuICAgIGNvbnN0IHByb3AgPSBwcm9wc0J5TmFtZS5nZXQoY29sdW1uLm5hbWUpO1xuICAgIGlmICghcHJvcCB8fCAhaXNTZWFyY2hUZXh0UHJvcChwcm9wKSkge1xuICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29sdW1uLFxuICAgICAgZ2VuZXJhdGVkOiB7XG4gICAgICAgIHR5cGU6IFwiU1RPUkVEXCIsXG4gICAgICAgIGV4cHJlc3Npb246IGJ1aWxkU2VhcmNoVGV4dEdlbmVyYXRlZEV4cHJlc3Npb24ocHJvcCwgcHJvcHNCeU5hbWUpLFxuICAgICAgfSxcbiAgICB9O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRTZWFyY2hUZXh0R2VuZXJhdGVkRXhwcmVzc2lvbihcbiAgcHJvcDogRXh0cmFjdDxFbnRpdHlQcm9wLCB7IHR5cGU6IFwic2VhcmNoVGV4dFwiIH0+LFxuICBwcm9wc0J5TmFtZTogTWFwPHN0cmluZywgRW50aXR5UHJvcD4sXG4pOiBzdHJpbmcge1xuICBjb25zdCB0b2tlbnMgPSBwcm9wLnNvdXJjZUNvbHVtbnMubWFwKChzb3VyY2UpID0+IHtcbiAgICBjb25zdCBzb3VyY2VQcm9wID0gcHJvcHNCeU5hbWUuZ2V0KHNvdXJjZS5uYW1lKTtcbiAgICBpZiAoIXNvdXJjZVByb3ApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgc2VhcmNoVGV4dCBzb3VyY2UgY29sdW1uIFwiJHtzb3VyY2UubmFtZX1cIuydhCjrpbwpIOywvuydhCDsiJgg7JeG7Iq164uI64ukLmApO1xuICAgIH1cblxuICAgIGlmIChzb3VyY2VQcm9wLnR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBzb3VyY2UuY2FzZUluc2Vuc2l0aXZlXG4gICAgICAgID8gYGxvd2VyKENPQUxFU0NFKCR7c291cmNlLm5hbWV9LCAnJykpYFxuICAgICAgICA6IGBDT0FMRVNDRSgke3NvdXJjZS5uYW1lfSwgJycpYDtcbiAgICB9XG5cbiAgICBpZiAoc291cmNlUHJvcC50eXBlID09PSBcInN0cmluZ1tdXCIpIHtcbiAgICAgIHJldHVybiBzb3VyY2UuY2FzZUluc2Vuc2l0aXZlXG4gICAgICAgID8gYENPQUxFU0NFKHNvbmFtdV90ZXh0X2FycmF5X2FnZygke3NvdXJjZS5uYW1lfSksICcnKWBcbiAgICAgICAgOiBgQ09BTEVTQ0Uoc29uYW11X3RleHRfYXJyYXlfYWdnKCR7c291cmNlLm5hbWV9LCBmYWxzZSksICcnKWA7XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZVByb3AudHlwZSA9PT0gXCJqc29uXCIpIHtcbiAgICAgIHJldHVybiBzb3VyY2UuY2FzZUluc2Vuc2l0aXZlXG4gICAgICAgID8gYENPQUxFU0NFKHNvbmFtdV9qc29uYl9hcnJheV9hZ2coJHtzb3VyY2UubmFtZX0pLCAnJylgXG4gICAgICAgIDogYENPQUxFU0NFKHNvbmFtdV9qc29uYl9hcnJheV9hZ2coJHtzb3VyY2UubmFtZX0sIGZhbHNlKSwgJycpYDtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgc2VhcmNoVGV4dCBzb3VyY2UgY29sdW1uIFwiJHtzb3VyY2UubmFtZX1cIuydmCDtg4DsnoUgXCIke3NvdXJjZVByb3AudHlwZX1cIuydgCjripQpIOyngOybkOuQmOyngCDslYrsirXri4jri6QuYCxcbiAgICApO1xuICB9KTtcblxuICByZXR1cm4gYHRyaW0oJHt0b2tlbnMuam9pbihgIHx8ICcgJyB8fCBgKX0pYDtcbn1cblxuZnVuY3Rpb24gZ2V0U2VhcmNoVGV4dEhlbHBlckRlZmluaXRpb25zKHRhYmxlOiBzdHJpbmcsIGNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdKTogc3RyaW5nW10ge1xuICBjb25zdCBoZWxwZXJLaW5kcyA9IG5ldyBTZXQ8U2VhcmNoVGV4dEhlbHBlcktpbmQ+KCk7XG5cbiAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICBpZiAoIWNvbHVtbi5nZW5lcmF0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBnZXRTZWFyY2hUZXh0SGVscGVyS2luZHNGcm9tRXhwcmVzc2lvbihjb2x1bW4uZ2VuZXJhdGVkLmV4cHJlc3Npb24pLmZvckVhY2goKGtpbmQpID0+IHtcbiAgICAgIGhlbHBlcktpbmRzLmFkZChraW5kKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaWYgKGhlbHBlcktpbmRzLnNpemUgPiAwKSB7XG4gICAgcmV0dXJuIChbXCJ0ZXh0LWFycmF5XCIsIFwianNvbmItYXJyYXlcIl0gYXMgY29uc3QpXG4gICAgICAuZmlsdGVyKChraW5kKSA9PiBoZWxwZXJLaW5kcy5oYXMoa2luZCkpXG4gICAgICAubWFwKChraW5kKSA9PiBTRUFSQ0hfVEVYVF9IRUxQRVJfREVGSU5JVElPTlNba2luZF0pO1xuICB9XG5cbiAgY29uc3QgZW50aXR5ID0gKCgpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEVudGl0eU1hbmFnZXIuZ2V0QnlUYWJsZSh0YWJsZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0pKCk7XG5cbiAgaWYgKCFlbnRpdHkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3QgcHJvcHNCeU5hbWUgPSBuZXcgTWFwKGVudGl0eS5wcm9wcy5tYXAoKHByb3ApID0+IFtwcm9wLm5hbWUsIHByb3BdKSk7XG5cbiAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICBjb25zdCBwcm9wID0gcHJvcHNCeU5hbWUuZ2V0KGNvbHVtbi5uYW1lKTtcbiAgICBpZiAoIXByb3AgfHwgIWlzU2VhcmNoVGV4dFByb3AocHJvcCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcm9wLnNvdXJjZUNvbHVtbnMuZm9yRWFjaCgoc291cmNlKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2VQcm9wID0gcHJvcHNCeU5hbWUuZ2V0KHNvdXJjZS5uYW1lKTtcbiAgICAgIGlmIChzb3VyY2VQcm9wPy50eXBlID09PSBcInN0cmluZ1tdXCIpIHtcbiAgICAgICAgaGVscGVyS2luZHMuYWRkKFwidGV4dC1hcnJheVwiKTtcbiAgICAgIH0gZWxzZSBpZiAoc291cmNlUHJvcD8udHlwZSA9PT0gXCJqc29uXCIpIHtcbiAgICAgICAgaGVscGVyS2luZHMuYWRkKFwianNvbmItYXJyYXlcIik7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiAoW1widGV4dC1hcnJheVwiLCBcImpzb25iLWFycmF5XCJdIGFzIGNvbnN0KVxuICAgIC5maWx0ZXIoKGtpbmQpID0+IGhlbHBlcktpbmRzLmhhcyhraW5kKSlcbiAgICAubWFwKChraW5kKSA9PiBTRUFSQ0hfVEVYVF9IRUxQRVJfREVGSU5JVElPTlNba2luZF0pO1xufVxuXG5mdW5jdGlvbiBnZXRTZWFyY2hUZXh0Q29sdW1uTmFtZXModGFibGU6IHN0cmluZyk6IFNldDxzdHJpbmc+IHtcbiAgY29uc3QgZW50aXR5ID0gKCgpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEVudGl0eU1hbmFnZXIuZ2V0QnlUYWJsZSh0YWJsZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0pKCk7XG5cbiAgaWYgKCFlbnRpdHkpIHtcbiAgICByZXR1cm4gbmV3IFNldCgpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBTZXQoZW50aXR5LnByb3BzLmZpbHRlcihpc1NlYXJjaFRleHRQcm9wKS5tYXAoKHByb3ApID0+IHByb3AubmFtZSkpO1xufVxuXG4vKipcbiAqIO2FjOydtOu4lCDsg53shLHtlZjripQg7LyA7J207IqkIC0g7Lus65+8L+yduOuNseyKpCDsg53shLFcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVDcmVhdGVDb2RlX0NvbHVtbkFuZEluZGV4ZXMoXG4gIHRhYmxlOiBzdHJpbmcsXG4gIGNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdLFxuICBpbmRleGVzOiBNaWdyYXRpb25JbmRleFtdLFxuKTogUHJvbWlzZTxHZW5NaWdyYXRpb25Db2RlPiB7XG4gIGNvbnN0IHJlc29sdmVkQ29sdW1ucyA9IHJlc29sdmVTZWFyY2hUZXh0Q29sdW1ucyh0YWJsZSwgY29sdW1ucyk7XG4gIGNvbnN0IGNvbHVtbkRlZnMgPSBnZW5Db2x1bW5EZWZpbml0aW9ucyh0YWJsZSwgcmVzb2x2ZWRDb2x1bW5zKTtcbiAgY29uc3QgaGVscGVyRGVmaW5pdGlvbnMgPSBnZXRTZWFyY2hUZXh0SGVscGVyRGVmaW5pdGlvbnModGFibGUsIHJlc29sdmVkQ29sdW1ucyk7XG5cbiAgLy8g7Lus65+8LCDsnbjrjbHsiqQg7LKY66asXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtcbiAgICAnaW1wb3J0IHR5cGUgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjsnLFxuICAgIFwiXCIsXG4gICAgXCJleHBvcnQgYXN5bmMgZnVuY3Rpb24gdXAoa25leDogS25leCk6IFByb21pc2U8dm9pZD4ge1wiLFxuICAgIC4uLmhlbHBlckRlZmluaXRpb25zLFxuICAgIGBhd2FpdCBrbmV4LnNjaGVtYS5jcmVhdGVUYWJsZShcIiR7dGFibGV9XCIsICh0YWJsZSkgPT4ge2AsXG4gICAgLi4uY29sdW1uRGVmcy5idWlsZGVyLFxuICAgIFwifSk7XCIsXG4gICAgLy8gcmF3IOq1rOusuCAoR2VuZXJhdGVkIENvbHVtbiDrk7EpXG4gICAgLi4uY29sdW1uRGVmcy5yYXcsXG4gICAgLy8gaW5kZXjripQga25leC5yYXfroZwg7LKY66as7ZWY66+A66GcIGNyZWF0ZVRhYmxlIOuwluyXkOyEnCDsi6TtlolcbiAgICAuLi5pbmRleGVzLm1hcCgoaW5kZXgpID0+IGdlbkluZGV4RGVmaW5pdGlvbihpbmRleCwgdGFibGUpKSxcbiAgICBcIn1cIixcbiAgICBcIlwiLFxuICAgIFwiZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvd24oa25leDogS25leCk6IFByb21pc2U8dm9pZD4ge1wiLFxuICAgIGAgcmV0dXJuIGtuZXguc2NoZW1hLmRyb3BUYWJsZShcIiR7dGFibGV9XCIpO2AsXG4gICAgXCJ9XCIsXG4gIF07XG4gIHJldHVybiB7XG4gICAgdGFibGUsXG4gICAgdHlwZTogXCJub3JtYWxcIixcbiAgICB0aXRsZTogYGNyZWF0ZV9fJHt0YWJsZX1gLFxuICAgIGZvcm1hdHRlZDogYXdhaXQgZm9ybWF0Q29kZShsaW5lcy5qb2luKFwiXFxuXCIpLCBgc3JjL21pZ3JhdGlvbi8ke3RhYmxlfS50c2ApLFxuICB9O1xufVxuXG4vKipcbiAqIE1pZ3JhdGlvbkNvbHVtbltdIOydveyWtOyEnCDsu6zrn7wg7KCV7J2Y7ZWY64qUIOq1rOusuCDsg53shLFcbiAqIEByZXR1cm5zIGJ1aWxkZXI6IHRhYmxlIGJ1aWxkZXIg66mU7ISc65OcLCByYXc6IGtuZXgucmF3KCkg6rWs66y4XG4gKi9cbmZ1bmN0aW9uIGdlbkNvbHVtbkRlZmluaXRpb25zKHRhYmxlOiBzdHJpbmcsIGNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdKTogQ29sdW1uRGVmaW5pdGlvblJlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdDogQ29sdW1uRGVmaW5pdGlvblJlc3VsdCA9IHtcbiAgICBidWlsZGVyOiBbXSxcbiAgICByYXc6IFtdLFxuICB9O1xuXG4gIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcbiAgICAvLyBHZW5lcmF0ZWQgQ29sdW1u7J2AIHJhd+uhnCDsspjrpqxcbiAgICBpZiAoY29sdW1uLmdlbmVyYXRlZCkge1xuICAgICAgcmVzdWx0LnJhdy5wdXNoKGdlbkdlbmVyYXRlZENvbHVtbkRlZmluaXRpb24odGFibGUsIGNvbHVtbikpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8g7J2867CYIOy7rOufvOydgCBidWlsZGVy66GcIOyymOumrFxuICAgIHJlc3VsdC5idWlsZGVyLnB1c2goZ2VuTm9ybWFsQ29sdW1uRGVmaW5pdGlvbihjb2x1bW4pKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVkIENvbHVtbiDsoJXsnZgg7IOd7ISxIChBTFRFUiBUQUJMRSBBREQgQ09MVU1OIOyCrOyaqSlcbiAqL1xuZnVuY3Rpb24gZ2VuR2VuZXJhdGVkQ29sdW1uRGVmaW5pdGlvbih0YWJsZTogc3RyaW5nLCBjb2x1bW46IE1pZ3JhdGlvbkNvbHVtbik6IHN0cmluZyB7XG4gIGlmICghY29sdW1uLmdlbmVyYXRlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRlZCBjb2x1bW4gZGVmaW5pdGlvbiByZXF1aXJlZFwiKTtcbiAgfVxuICBjb25zdCBwZ1R5cGUgPSBnZXRQZ1R5cGVGb3JDb2x1bW4oY29sdW1uKTtcbiAgY29uc3Qgc3RvcmFnZVR5cGUgPSBjb2x1bW4uZ2VuZXJhdGVkLnR5cGUgPT09IFwiVklSVFVBTFwiID8gXCIgVklSVFVBTFwiIDogXCIgU1RPUkVEXCI7XG4gIGNvbnN0IG51bGxhYmxlQ2xhdXNlID0gY29sdW1uLm51bGxhYmxlID8gXCJcIiA6IFwiIE5PVCBOVUxMXCI7XG4gIHJldHVybiBgYXdhaXQga25leC5yYXcoXFxgQUxURVIgVEFCTEUgXCIke3RhYmxlfVwiIEFERCBDT0xVTU4gXCIke2NvbHVtbi5uYW1lfVwiICR7cGdUeXBlfSBHRU5FUkFURUQgQUxXQVlTIEFTICgke2NvbHVtbi5nZW5lcmF0ZWQuZXhwcmVzc2lvbn0pJHtzdG9yYWdlVHlwZX0ke251bGxhYmxlQ2xhdXNlfVxcYCk7YDtcbn1cblxuLyoqXG4gKiDsnbzrsJgg7Lus65+8IOygleydmCDsg53shLEgKHRhYmxlLnh4eCgpIOyytOyduClcbiAqL1xuZnVuY3Rpb24gZ2VuTm9ybWFsQ29sdW1uRGVmaW5pdGlvbihjb2x1bW46IE1pZ3JhdGlvbkNvbHVtbik6IHN0cmluZyB7XG4gIGNvbnN0IGNoYWluczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoY29sdW1uLm5hbWUgPT09IFwiaWRcIikge1xuICAgIC8vIFBLIO2DgOyeheyXkCDrlLDrpbgg67aE6riwIOyymOumrFxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgLy8gc3RyaW5nIFBLOiBsZW5ndGjqsIAg7J6I7Jy866m0IHZhcmNoYXIsIOyXhuycvOuptCB0ZXh0XG4gICAgICBpZiAoY29sdW1uLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBgdGFibGUuc3RyaW5nKCdpZCcsICR7Y29sdW1uLmxlbmd0aH0pLnByaW1hcnkoKS5ub3ROdWxsYWJsZSgpO2A7XG4gICAgICB9XG4gICAgICByZXR1cm4gYHRhYmxlLnRleHQoJ2lkJykucHJpbWFyeSgpLm5vdE51bGxhYmxlKCk7YDtcbiAgICB9XG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBcInV1aWRcIikge1xuICAgICAgcmV0dXJuIGB0YWJsZS51dWlkKCdpZCcpLnByaW1hcnkoKS5ub3ROdWxsYWJsZSgpO2A7XG4gICAgfVxuICAgIC8vIOq4sOyhtCBpbnRlZ2VyIFBLICjquLDrs7jqsJIpXG4gICAgcmV0dXJuIGB0YWJsZS5pbmNyZW1lbnRzKCkucHJpbWFyeSgpO2A7XG4gIH1cblxuICAvLyDrsLDsl7Qg7YOA7J6FIOyymOumrFxuICBpZiAoY29sdW1uLnR5cGUuZW5kc1dpdGgoXCJbXVwiKSkge1xuICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gY29sdW1uLnR5cGUuc2xpY2UoMCwgLTIpOyAvLyBcImludGVnZXJbXVwiIC0+IFwiaW50ZWdlclwiXG4gICAgY29uc3QgcGdUeXBlID0gZ2V0UGdBcnJheVR5cGUoY29sdW1uLCBlbGVtZW50VHlwZSk7XG4gICAgY2hhaW5zLnB1c2goYHNwZWNpZmljVHlwZSgnJHtjb2x1bW4ubmFtZX0nLCAnJHtwZ1R5cGV9JylgKTtcbiAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gXCJ2ZWN0b3JcIikge1xuICAgIC8vIEtuZXjripQgdmVjdG9yIO2DgOyeheydhCDsp4HsoJEg7KeA7JuQ7ZWY7KeAIOyViuycvOuvgOuhnCBzcGVjaWZpY1R5cGUg7IKs7JqpXG4gICAgY2hhaW5zLnB1c2goYHNwZWNpZmljVHlwZSgnJHtjb2x1bW4ubmFtZX0nLCAndmVjdG9yKCR7Y29sdW1uLmRpbWVuc2lvbnN9KScpYCk7XG4gIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IFwibnVtYmVyT3JOdW1lcmljXCIpIHtcbiAgICAvLyBudW1iZXJcbiAgICBpZiAoY29sdW1uLm51bWJlclR5cGUgPT09IFwicmVhbFwiKSB7XG4gICAgICBjaGFpbnMucHVzaChgZmxvYXQoJyR7Y29sdW1uLm5hbWV9JylgKTtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi5udW1iZXJUeXBlID09PSBcImRvdWJsZSBwcmVjaXNpb25cIikge1xuICAgICAgY2hhaW5zLnB1c2goYGRvdWJsZSgnJHtjb2x1bW4ubmFtZX0nKWApO1xuICAgIH0gZWxzZSBpZiAoKGNvbHVtbi5udW1iZXJUeXBlID8/IFwibnVtZXJpY1wiKSA9PT0gXCJudW1lcmljXCIpIHtcbiAgICAgIGNoYWlucy5wdXNoKGBkZWNpbWFsKCcke2NvbHVtbi5uYW1lfScsICR7Y29sdW1uLnByZWNpc2lvbn0sICR7Y29sdW1uLnNjYWxlfSlgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAvLyBzdHJpbmdcbiAgICBpZiAoY29sdW1uLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjaGFpbnMucHVzaChgc3RyaW5nKCcke2NvbHVtbi5uYW1lfScsICR7Y29sdW1uLmxlbmd0aH0pYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoYWlucy5wdXNoKGB0ZXh0KCcke2NvbHVtbi5uYW1lfScpYCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBcImRhdGVcIikge1xuICAgIC8vIGRhdGVcbiAgICBjaGFpbnMucHVzaChcbiAgICAgIGB0aW1lc3RhbXAoJyR7Y29sdW1uLm5hbWV9JywgeyB1c2VUejogdHJ1ZSwgcHJlY2lzaW9uOiAke2NvbHVtbi5wcmVjaXNpb24gPz8gM30gfSlgLFxuICAgICk7XG4gIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IFwianNvblwiKSB7XG4gICAgLy8ganNvblxuICAgIGNoYWlucy5wdXNoKGBqc29uYignJHtjb2x1bW4ubmFtZX0nKWApO1xuICB9IGVsc2Uge1xuICAgIC8vIHR5cGUsIGxlbmd0aFxuICAgIGNoYWlucy5wdXNoKGAke2NvbHVtbi50eXBlfSgnJHtjb2x1bW4ubmFtZX0nJHtjb2x1bW4ubGVuZ3RoID8gYCwgJHtjb2x1bW4ubGVuZ3RofWAgOiBcIlwifSlgKTtcbiAgfVxuXG4gIC8vIG51bGxhYmxlXG4gIGNoYWlucy5wdXNoKGNvbHVtbi5udWxsYWJsZSA/IFwibnVsbGFibGUoKVwiIDogXCJub3ROdWxsYWJsZSgpXCIpO1xuXG4gIC8vIGRlZmF1bHRUb1xuICBpZiAoY29sdW1uLmRlZmF1bHRUbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGlzU3RyaW5nVmFsdWUoY29sdW1uLmRlZmF1bHRUbykgJiYgY29sdW1uLmRlZmF1bHRUby5zdGFydHNXaXRoKGBcImApKSB7XG4gICAgICBjaGFpbnMucHVzaChgZGVmYXVsdFRvKCR7Y29sdW1uLmRlZmF1bHRUb30pYCk7XG4gICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gXCJqc29uXCIgJiYgaXNTdHJpbmdWYWx1ZShjb2x1bW4uZGVmYXVsdFRvKSkge1xuICAgICAgY2hhaW5zLnB1c2goYGRlZmF1bHRUbyhrbmV4LnJhdyhcIiR7Y29sdW1uLmRlZmF1bHRUby5yZXBsYWNlQWxsKCdcIicsIFwiJ1wiKX06Ompzb25iXCIpKWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGFpbnMucHVzaChgZGVmYXVsdFRvKGtuZXgucmF3KCcke2NvbHVtbi5kZWZhdWx0VG99JykpYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGB0YWJsZS4ke2NoYWlucy5qb2luKFwiLlwiKX07YDtcbn1cblxuLyoqXG4gKiBNaWdyYXRpb25Db2x1bW7snZgg7YOA7J6F7J2EIFBvc3RncmVTUUwg7YOA7J6FIOusuOyekOyXtOuhnCDrs4DtmZhcbiAqL1xuZnVuY3Rpb24gZ2V0UGdUeXBlRm9yQ29sdW1uKGNvbHVtbjogTWlncmF0aW9uQ29sdW1uKTogc3RyaW5nIHtcbiAgaWYgKGNvbHVtbi50eXBlLmVuZHNXaXRoKFwiW11cIikpIHtcbiAgICBjb25zdCBlbGVtZW50VHlwZSA9IGNvbHVtbi50eXBlLnNsaWNlKDAsIC0yKTtcbiAgICByZXR1cm4gZ2V0UGdBcnJheVR5cGUoY29sdW1uLCBlbGVtZW50VHlwZSk7XG4gIH1cblxuICBzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIGNvbHVtbi5sZW5ndGggIT09IHVuZGVmaW5lZCA/IGB2YXJjaGFyKCR7Y29sdW1uLmxlbmd0aH0pYCA6IFwidGV4dFwiO1xuICAgIGNhc2UgXCJiaWdJbnRlZ2VyXCI6XG4gICAgICByZXR1cm4gXCJiaWdpbnRcIjtcbiAgICBjYXNlIFwibnVtYmVyT3JOdW1lcmljXCI6XG4gICAgICBpZiAoY29sdW1uLm51bWJlclR5cGUgPT09IFwicmVhbFwiKSByZXR1cm4gXCJyZWFsXCI7XG4gICAgICBpZiAoY29sdW1uLm51bWJlclR5cGUgPT09IFwiZG91YmxlIHByZWNpc2lvblwiKSByZXR1cm4gXCJkb3VibGUgcHJlY2lzaW9uXCI7XG4gICAgICByZXR1cm4gYG51bWVyaWMoJHtjb2x1bW4ucHJlY2lzaW9ufSwgJHtjb2x1bW4uc2NhbGV9KWA7XG4gICAgY2FzZSBcImRhdGVcIjpcbiAgICAgIHJldHVybiBcInRpbWVzdGFtcHR6XCI7XG4gICAgY2FzZSBcImpzb25cIjpcbiAgICAgIHJldHVybiBcImpzb25iXCI7XG4gICAgY2FzZSBcInZlY3RvclwiOlxuICAgICAgcmV0dXJuIGB2ZWN0b3IoJHtjb2x1bW4uZGltZW5zaW9uc30pYDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGNvbHVtbi50eXBlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFBnQXJyYXlUeXBlKGNvbHVtbjogTWlncmF0aW9uQ29sdW1uLCBlbGVtZW50VHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcIm51bWJlck9yTnVtZXJpY1wiKSB7XG4gICAgaWYgKGNvbHVtbi5udW1iZXJUeXBlID09PSBcInJlYWxcIikgcmV0dXJuIFwicmVhbFtdXCI7XG4gICAgaWYgKGNvbHVtbi5udW1iZXJUeXBlID09PSBcImRvdWJsZSBwcmVjaXNpb25cIikgcmV0dXJuIFwiZG91YmxlIHByZWNpc2lvbltdXCI7XG4gICAgaWYgKGNvbHVtbi5wcmVjaXNpb24gPT09IHVuZGVmaW5lZCAmJiBjb2x1bW4uc2NhbGUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFwibnVtZXJpY1tdXCI7XG4gICAgcmV0dXJuIGBudW1lcmljKCR7Y29sdW1uLnByZWNpc2lvbiA/PyBOVU1FUklDX0RFRkFVTFRfUFJFQ0lTSU9OfSwgJHtjb2x1bW4uc2NhbGUgPz8gTlVNRVJJQ19ERUZBVUxUX1NDQUxFfSlbXWA7XG4gIH1cbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGNvbHVtbi5sZW5ndGggPyBgdmFyY2hhcigke2NvbHVtbi5sZW5ndGh9KVtdYCA6IFwidGV4dFtdXCI7XG4gIH1cbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcImRhdGVcIikgcmV0dXJuIFwidGltZXN0YW1wdHpbXVwiO1xuICBpZiAoZWxlbWVudFR5cGUgPT09IFwiaW50ZWdlclwiKSByZXR1cm4gXCJpbnRlZ2VyW11cIjtcbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcImJpZ0ludGVnZXJcIikgcmV0dXJuIFwiYmlnaW50W11cIjtcbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcImJvb2xlYW5cIikgcmV0dXJuIFwiYm9vbGVhbltdXCI7XG4gIGlmIChlbGVtZW50VHlwZSA9PT0gXCJ1dWlkXCIpIHJldHVybiBcInV1aWRbXVwiO1xuICBpZiAoZWxlbWVudFR5cGUgPT09IFwiZW51bVwiKSByZXR1cm4gXCJ0ZXh0W11cIjtcbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcInZlY3RvclwiKSByZXR1cm4gYHZlY3Rvcigke2NvbHVtbi5kaW1lbnNpb25zfSlbXWA7XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGFycmF5IGVsZW1lbnQgdHlwZTogJHtlbGVtZW50VHlwZX1gKTtcbn1cblxuLyoqXG4gKiDqsJzrs4Qg7J24642x7IqkIOygleydmCDsg53shLFcbiAqL1xuZnVuY3Rpb24gZ2VuSW5kZXhEZWZpbml0aW9uKGluZGV4OiBNaWdyYXRpb25JbmRleCwgdGFibGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChpbmRleC50eXBlID09PSBcImhuc3dcIiB8fCBpbmRleC50eXBlID09PSBcIml2ZmZsYXRcIikge1xuICAgIHJldHVybiBnZW5WZWN0b3JJbmRleERlZmluaXRpb24oaW5kZXgsIHRhYmxlKTtcbiAgfVxuXG4gIGlmIChpbmRleC51c2luZyA9PT0gXCJwZ3Jvb25nYVwiKSB7XG4gICAgcmV0dXJuIGdlblBncm9vbmdhSW5kZXhEZWZpbml0aW9uKGluZGV4LCB0YWJsZSk7XG4gIH1cblxuICBjb25zdCBtZXRob2RNYXAgPSB7XG4gICAgaW5kZXg6IFwiSU5ERVhcIixcbiAgICB1bmlxdWU6IFwiVU5JUVVFIElOREVYXCIsXG4gIH07XG5cbiAgY29uc3QgbnVsbHNOb3REaXN0aW5jdENsYXVzZSA9XG4gICAgaW5kZXgudHlwZSA9PT0gXCJ1bmlxdWVcIiAmJiBpbmRleC5udWxsc05vdERpc3RpbmN0ICE9PSB1bmRlZmluZWRcbiAgICAgID8gYCBOVUxMUyAke2luZGV4Lm51bGxzTm90RGlzdGluY3QgPyBcIk5PVCBESVNUSU5DVFwiIDogXCJESVNUSU5DVFwifWBcbiAgICAgIDogXCJcIjtcblxuICBjb25zdCB1c2luZ0NsYXVzZSA9IGluZGV4LnVzaW5nID09PSB1bmRlZmluZWQgPyBcIlwiIDogYFVTSU5HICR7aW5kZXgudXNpbmd9YDtcbiAgY29uc3Qgd2hlcmVDbGF1c2UgPSBnZXRJbmRleFdoZXJlQ2xhdXNlKGluZGV4KTtcblxuICByZXR1cm4gYGF3YWl0IGtuZXgucmF3KFxuICBcXGBDUkVBVEUgJHttZXRob2RNYXBbaW5kZXgudHlwZV19ICR7aW5kZXgubmFtZX0gT04gJHt0YWJsZX0gJHt1c2luZ0NsYXVzZX0oJHtpbmRleC5jb2x1bW5zXG4gICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICBjb25zdCBvcGNsYXNzQ2xhdXNlID0gKCgpID0+IHtcbiAgICAgICAgY29uc3Qgb3BjbGFzcyA9IGdldEluZGV4Q29sdW1uT3BjbGFzcyhjb2wpO1xuICAgICAgICByZXR1cm4gb3BjbGFzcyA/IGAgJHtvcGNsYXNzfWAgOiBcIlwiO1xuICAgICAgfSkoKTtcblxuICAgICAgLy8g7KCV66CsIOyYteyFmOydgCBidHJlZeunjCDsgqzsmqkg6rCA64qlXG4gICAgICBpZiAoaW5kZXgudXNpbmcgIT09IFwiYnRyZWVcIiAmJiBpbmRleC51c2luZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBgJHtjb2wubmFtZX0ke29wY2xhc3NDbGF1c2V9YDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc29ydE9yZGVyQ2xhdXNlID0gY29sLnNvcnRPcmRlciA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IGAgJHtjb2wuc29ydE9yZGVyfWA7XG4gICAgICBjb25zdCBudWxsc0ZpcnN0Q2xhdXNlID1cbiAgICAgICAgY29sLm51bGxzRmlyc3QgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBgIE5VTExTICR7Y29sLm51bGxzRmlyc3QgPyBcIkZJUlNUXCIgOiBcIkxBU1RcIn1gO1xuICAgICAgcmV0dXJuIGAke2NvbC5uYW1lfSR7b3BjbGFzc0NsYXVzZX0ke3NvcnRPcmRlckNsYXVzZX0ke251bGxzRmlyc3RDbGF1c2V9YDtcbiAgICB9KVxuICAgIC5qb2luKFwiLCBcIil9KSR7bnVsbHNOb3REaXN0aW5jdENsYXVzZX0ke3doZXJlQ2xhdXNlfTtcXGBcbiAgKTtgO1xufVxuXG5mdW5jdGlvbiBnZW5QZ3Jvb25nYUluZGV4RGVmaW5pdGlvbihpbmRleDogTWlncmF0aW9uSW5kZXgsIHRhYmxlOiBzdHJpbmcpIHtcbiAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXRCeVRhYmxlKHRhYmxlKTtcbiAgY29uc3Qgd2hlcmVDbGF1c2UgPSBnZXRJbmRleFdoZXJlQ2xhdXNlKGluZGV4KTtcblxuICAvLyDrs7Xtlakg7J24642x7Iqk7J24IOqyveyasCBBUlJBWSDsgqzsmqlcbiAgY29uc3QgY29sdW1uQ2xhdXNlID0gKCgpID0+IHtcbiAgICBpZiAoaW5kZXguY29sdW1ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IGVudGl0eS5wcm9wc0RpY3RbaW5kZXguY29sdW1uc1swXS5uYW1lXTtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IGdldFBncm9vbmdhQ29sdW1uT3B0aW9uKGNvbHVtbik7XG4gICAgICByZXR1cm4gYCR7aW5kZXguY29sdW1uc1swXS5uYW1lfSR7b3B0aW9uID8gYCAke29wdGlvbn1gIDogXCJcIn1gO1xuICAgIH1cblxuICAgIHJldHVybiBgKEFSUkFZWyR7aW5kZXguY29sdW1ucy5tYXAoKGNvbCkgPT4gYCR7Y29sLm5hbWV9Ojp0ZXh0YCkuam9pbihcIixcIil9XSlgO1xuICB9KSgpO1xuXG4gIHJldHVybiBgYXdhaXQga25leC5yYXcoXG4gIFxcYENSRUFURSBJTkRFWCAke2luZGV4Lm5hbWV9IE9OICR7dGFibGV9IFVTSU5HIHBncm9vbmdhICgke2NvbHVtbkNsYXVzZX0pIFdJVEggKHRva2VuaXplcj0nVG9rZW5NZWNhYicpJHt3aGVyZUNsYXVzZX07XFxgXG4gIClgO1xufVxuXG4vKipcbiAqIFBHcm9vbmdhIOy7rOufvCDsmLXshZgg7LaU7LacXG4gKlxuICogRnVsbFRleHQg7Jik7Y2866CI7J207YSw66W8IOyngOybkO2VmOuKlCDqsr3smrAg7Jqw7ISgIOyEpOyglSwg64KY66i47KeA64qUIOuUlO2PtO2KuCDsnbTsmqlcbiAqIEBsaW5rIGh0dHBzOi8vcGdyb29uZ2EuZ2l0aHViLmlvL3JlZmVyZW5jZVxuICovXG5mdW5jdGlvbiBnZXRQZ3Jvb25nYUNvbHVtbk9wdGlvbihjb2x1bW46IEVudGl0eVByb3ApIHtcbiAgaWYgKGNvbHVtbi50eXBlID09PSBcInN0cmluZ1wiICYmIGNvbHVtbi5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBcInBncm9vbmdhX3ZhcmNoYXJfZnVsbF90ZXh0X3NlYXJjaF9vcHNfdjJcIjtcbiAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gXCJqc29uXCIpIHtcbiAgICByZXR1cm4gXCJwZ3Jvb25nYV9qc29uYl9mdWxsX3RleHRfc2VhcmNoX29wc192MlwiO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogLSBITlNXIChIaWVyYXJjaGljYWwgTmF2aWdhYmxlIFNtYWxsIFdvcmxkKTog64qQ66awIOu5jOuTnCwg67mg66W4IOqygOyDiSDsho3rj4QsIOuGkuydgCDrqZTrqqjrpqwg67CPIOygle2ZleuPhFxuICogLSBJVkZGbGF0IChJbnZlcnRlZCBGaWxlIHdpdGggRmxhdCBDb21wcmVzc2lvbik6IOu5oOuluCDruYzrk5wsIOykkeqwhCDqsoDsg4kg7IaN64+ELCDrgq7snYAg66mU66qo66asXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhOU1cg7J24642x7IqkICjqtozsnqUgLSDruaDrpbgg6rKA7IOJLCDrhpLsnYAg7KCV7ZmV64+EKVxuICogQ1JFQVRFIElOREVYIGlkeF9lbWJlZGRpbmcgT04gaXRlbXMgVVNJTkcgaG5zdyAoZW1iZWRkaW5nIHZlY3Rvcl9jb3NpbmVfb3BzKSBXSVRIIChtID0gMTYsIGVmX2NvbnN0cnVjdGlvbiA9IDY0KTtcbiAqXG4gKiAvLyBJVkZGbGF0IOyduOuNseyKpCAo64yA7Jqp65+JIOuNsOydtO2EsCwg67mE7JqpIOykkeyalCDsi5wpXG4gKiBDUkVBVEUgSU5ERVggaWR4X2VtYmVkZGluZyBPTiBpdGVtcyBVU0lORyBpdmZmbGF0IChlbWJlZGRpbmcgdmVjdG9yX2Nvc2luZV9vcHMpIFdJVEggKGxpc3RzID0gMTAwKTtcbiAqL1xuZnVuY3Rpb24gZ2VuVmVjdG9ySW5kZXhEZWZpbml0aW9uKGluZGV4OiBNaWdyYXRpb25JbmRleCwgdGFibGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGNvbHVtbiA9IGluZGV4LmNvbHVtbnNbMF07XG4gIGNvbnN0IHZlY3Rvck9wcyA9IGdldEluZGV4Q29sdW1uT3BjbGFzcyhjb2x1bW4pID8/IFwidmVjdG9yX2Nvc2luZV9vcHNcIjtcbiAgY29uc3Qgd2hlcmVDbGF1c2UgPSBnZXRJbmRleFdoZXJlQ2xhdXNlKGluZGV4KTtcblxuICAvLyBITlNXIChIaWVyYXJjaGljYWwgTmF2aWdhYmxlIFNtYWxsIFdvcmxkKSAtIOq2jOyepTog67mg66W4IOqygOyDiSwg64aS7J2AIOygle2ZleuPhFxuICBpZiAoaW5kZXgudHlwZSA9PT0gXCJobnN3XCIpIHtcbiAgICBjb25zdCBtID0gaW5kZXgubSA/PyAxNjtcbiAgICBjb25zdCBlZkNvbnN0cnVjdGlvbiA9IGluZGV4LmVmQ29uc3RydWN0aW9uID8/IDY0O1xuICAgIHJldHVybiBgYXdhaXQga25leC5yYXcoXFxgQ1JFQVRFIElOREVYICR7aW5kZXgubmFtZX0gT04gJHt0YWJsZX0gVVNJTkcgaG5zdyAoJHtjb2x1bW4ubmFtZX0gJHt2ZWN0b3JPcHN9KSBXSVRIIChtID0gJHttfSwgZWZfY29uc3RydWN0aW9uID0gJHtlZkNvbnN0cnVjdGlvbn0pJHt3aGVyZUNsYXVzZX1cXGApO2A7XG4gIH1cblxuICAvLyBJVkZGbGF0IChJbnZlcnRlZCBGaWxlIHdpdGggRmxhdCBDb21wcmVzc2lvbikgLSDrjIDsmqnrn4ksIOu5hOyaqSDspJHsmpQg7IucXG4gIGlmIChpbmRleC50eXBlID09PSBcIml2ZmZsYXRcIikge1xuICAgIGNvbnN0IGxpc3RzID0gaW5kZXgubGlzdHMgPz8gMTAwO1xuICAgIHJldHVybiBgYXdhaXQga25leC5yYXcoXFxgQ1JFQVRFIElOREVYICR7aW5kZXgubmFtZX0gT04gJHt0YWJsZX0gVVNJTkcgaXZmZmxhdCAoJHtjb2x1bW4ubmFtZX0gJHt2ZWN0b3JPcHN9KSBXSVRIIChsaXN0cyA9ICR7bGlzdHN9KSR7d2hlcmVDbGF1c2V9XFxgKTtgO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJhdyBTUUwgaW5kZXggdHlwZTogJHtpbmRleC50eXBlfWApO1xufVxuXG5mdW5jdGlvbiBnZXRJbmRleFdoZXJlQ2xhdXNlKGluZGV4OiBNaWdyYXRpb25JbmRleCk6IHN0cmluZyB7XG4gIGNvbnN0IHdoZXJlID0gbm9ybWFsaXplSW5kZXhXaGVyZVByZWRpY2F0ZShpbmRleC53aGVyZSk7XG4gIHJldHVybiB3aGVyZSA/IGAgV0hFUkUgJHt3aGVyZX1gIDogXCJcIjtcbn1cblxuLyoqXG4gKiDthYzsnbTruJQg7IOd7ISx7ZWY64qUIOy8gOydtOyKpCAtIEZLIOyDneyEsVxuICovXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUNyZWF0ZUNvZGVfRm9yZWlnbihcbiAgdGFibGU6IHN0cmluZyxcbiAgZm9yZWlnbnM6IE1pZ3JhdGlvbkZvcmVpZ25bXSxcbik6IFByb21pc2U8R2VuTWlncmF0aW9uQ29kZVtdPiB7XG4gIGlmIChmb3JlaWducy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCB7IHVwLCBkb3duIH0gPSBnZW5Gb3JlaWduRGVmaW5pdGlvbnModGFibGUsIGZvcmVpZ25zKTtcbiAgaWYgKHVwLmxlbmd0aCA9PT0gMCAmJiBkb3duLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIGZvcmVpZ25z6rCAIOyeiOuKlOuNsCDsg53shLHrkJwg7L2U65Oc6rCAIOyXhuuKlCDqsr3smrDripQg67mE7KCV7IOB7KCB7J24IOyDge2ZqeydtOyngOunjCxcbiAgICAvLyDrp4jsnbTqt7jroIjsnbTshZgg7IOd7ISx7J2EIOykkeuLqOyLnO2CpOyngCDslYrqs6Ag67mIIOuwsOyXtOydhCDrsJjtmZjtlanri4jri6QuXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW1xuICAgICdpbXBvcnQgdHlwZSB7IEtuZXggfSBmcm9tIFwia25leFwiOycsXG4gICAgXCJcIixcbiAgICBcImV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cChrbmV4OiBLbmV4KTogUHJvbWlzZTx2b2lkPiB7XCIsXG4gICAgYHJldHVybiBrbmV4LnNjaGVtYS5hbHRlclRhYmxlKFwiJHt0YWJsZX1cIiwgKHRhYmxlKSA9PiB7YCxcbiAgICBcIi8vIGNyZWF0ZSBma1wiLFxuICAgIC4uLnVwLFxuICAgIFwifSk7XCIsXG4gICAgXCJ9XCIsXG4gICAgXCJcIixcbiAgICBcImV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb3duKGtuZXg6IEtuZXgpOiBQcm9taXNlPHZvaWQ+IHtcIixcbiAgICBgcmV0dXJuIGtuZXguc2NoZW1hLmFsdGVyVGFibGUoXCIke3RhYmxlfVwiLCAodGFibGUpID0+IHtgLFxuICAgIFwiLy8gZHJvcCBma1wiLFxuICAgIC4uLmRvd24sXG4gICAgXCJ9KTtcIixcbiAgICBcIn1cIixcbiAgXTtcblxuICBjb25zdCBmb3JlaWduS2V5c1N0cmluZyA9IGZvcmVpZ25zLm1hcCgoZm9yZWlnbikgPT4gZm9yZWlnbi5jb2x1bW5zLmpvaW4oXCJfXCIpKS5qb2luKFwiX1wiKTtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICB0YWJsZSxcbiAgICAgIHR5cGU6IFwiZm9yZWlnblwiLFxuICAgICAgdGl0bGU6IGBmb3JlaWduX18ke3RhYmxlfV9fJHtmb3JlaWduS2V5c1N0cmluZ31gLFxuICAgICAgZm9ybWF0dGVkOiBhd2FpdCBmb3JtYXRDb2RlKGxpbmVzLmpvaW4oXCJcXG5cIiksIGBzcmMvbWlncmF0aW9uLyR7dGFibGV9LnRzYCksXG4gICAgfSxcbiAgXTtcbn1cblxuLyoqXG4gKiBNaWdyYXRpb25Gb3JlaWduW10g7J297Ja07IScIOyZuOu2gO2CpCBjb25zdHJhaW50IOygleydmO2VmOuKlCDqtazrrLgg7IOd7ISxXG4gKi9cbmZ1bmN0aW9uIGdlbkZvcmVpZ25EZWZpbml0aW9ucyhcbiAgdGFibGU6IHN0cmluZyxcbiAgZm9yZWlnbnM6IE1pZ3JhdGlvbkZvcmVpZ25bXSxcbik6IHsgdXA6IHN0cmluZ1tdOyBkb3duOiBzdHJpbmdbXSB9IHtcbiAgcmV0dXJuIGZvcmVpZ25zLnJlZHVjZShcbiAgICAociwgZm9yZWlnbikgPT4ge1xuICAgICAgY29uc3QgY29sdW1uc1N0cmluZ1F1b3RlID0gZm9yZWlnbi5jb2x1bW5zXG4gICAgICAgIC5tYXAoKGNvbCkgPT4gYCcke2NvbC5yZXBsYWNlKGAke3RhYmxlfS5gLCBcIlwiKX0nYClcbiAgICAgICAgLmpvaW4oXCIsXCIpO1xuICAgICAgci51cC5wdXNoKFxuICAgICAgICBgdGFibGUuZm9yZWlnbignJHtmb3JlaWduLmNvbHVtbnMuam9pbihcIixcIil9JylcbiAgICAgICAgICAgIC5yZWZlcmVuY2VzKCcke2ZvcmVpZ24udG99JylcbiAgICAgICAgICAgIC5vblVwZGF0ZSgnJHtmb3JlaWduLm9uVXBkYXRlfScpXG4gICAgICAgICAgICAub25EZWxldGUoJyR7Zm9yZWlnbi5vbkRlbGV0ZX0nKWAsXG4gICAgICApO1xuICAgICAgci5kb3duLnB1c2goYHRhYmxlLmRyb3BGb3JlaWduKFske2NvbHVtbnNTdHJpbmdRdW90ZX1dKWApO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfSxcbiAgICB7XG4gICAgICB1cDogLyogU0FGRVRZOiBLbmV47JmAIFBvc3RncmVTUUwg7Iqk7YKk66eIIOyhsO2ajCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBbXSBhcyBzdHJpbmdbXSxcbiAgICAgIGRvd246IC8qIFNBRkVUWTogS25leOyZgCBQb3N0Z3JlU1FMIOyKpO2CpOuniCDsobDtmowg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gW10gYXMgc3RyaW5nW10sXG4gICAgfSxcbiAgKTtcbn1cblxuLyoqXG4gKiDthYzsnbTruJQg67OA6rK9IOy8gOydtOyKpCAtIOy7rOufvC/snbjrjbHsiqQg67OA6rK9XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlQWx0ZXJDb2RlX0NvbHVtbkFuZEluZGV4ZXMoXG4gIHRhYmxlOiBzdHJpbmcsXG4gIGVudGl0eUNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdLFxuICBlbnRpdHlJbmRleGVzOiBNaWdyYXRpb25JbmRleFtdLFxuICBkYkNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdLFxuICBkYkluZGV4ZXM6IE1pZ3JhdGlvbkluZGV4W10sXG4gIGRiRm9yZWlnbnM6IE1pZ3JhdGlvbkZvcmVpZ25bXSxcbiAgY29tcGFyZURCPzogS25leCxcbik6IFByb21pc2U8R2VuTWlncmF0aW9uQ29kZVtdPiB7XG4gIGNvbnN0IHJlc29sdmVkRW50aXR5Q29sdW1ucyA9IHJlc29sdmVTZWFyY2hUZXh0Q29sdW1ucyh0YWJsZSwgZW50aXR5Q29sdW1ucyk7XG4gIGNvbnN0IHNlYXJjaFRleHRDb2x1bW5OYW1lcyA9IGdldFNlYXJjaFRleHRDb2x1bW5OYW1lcyh0YWJsZSk7XG4gIC8qXG4gICAg7IS467aAIOu5hOq1kCDtm4Qg64uk66W47KCQIOywvuyVhOyEnCDsvZTrk5wg7IOd7ISxXG5cbiAgICAxLiDsu6zrn7zqsK/siJgg64uk66aEOiBNROyXkCDsnojsnLzrgpgsIERC7JeQIOyXhuuLpOuptCDstpTqsIBcbiAgICAyLiDsu6zrn7zqsK/siJgg64uk66aEOiBNROyXkCDsl4bsnLzrgpgsIERC7JeQIOyeiOuLpOuptCDsgq3soJxcbiAgICAzLiDqt7jsmbgg7Lus65+8KOy7rOufvCDqsK/siJjqsIAg64+Z7J287ZWY6rGw64KYLCDri6Trpbgg6rK97JqwIOuPmeydvO2VnCDsu6zrn7zrgbzrpqwpID0+IGFsdGVyXG4gICAgNC4g64uk66W46rGwIOuLpCDrj5nsnbztlZjqs6AgaW5kZXjrp4wg67OA6rK965CY64qUIOqyveyasFxuXG4gICAgKiog7Lus65+866qF7J2EIOuzgOqyve2VmOuKlCDqsr3smrDripQg65Sw66GcIO2VuOuTpOunge2VmOyngCDslYrsnYxcbiAgICA9PiBkcm9wL2FkZCDtmJXtg5zsnZgg66eI7J206re466CI7J207IWYIOy9lOuTnOqwgCDsg53shLHrkJjripTrjbAsIOyImOuPmeycvOuhnCByZW5hbWUg7L2U65Oc66GcIOyImOygle2VmOyXrCDsspjrpqxcbiAgKi9cblxuICAvLyBQSyhpZCkg7Lus65+8IO2DgOyehSDrs4Dqsr0g6rCQ7KeAIOuwjyDsspjrpqxcbiAgY29uc3QgZW50aXR5SWRDb2wgPSByZXNvbHZlZEVudGl0eUNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wubmFtZSA9PT0gXCJpZFwiKTtcbiAgY29uc3QgZGJJZENvbCA9IGRiQ29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5uYW1lID09PSBcImlkXCIpO1xuXG4gIGlmIChlbnRpdHlJZENvbCAmJiBkYklkQ29sICYmIGNvbXBhcmVEQikge1xuICAgIGNvbnN0IGlzUGtUeXBlQ2hhbmdlZCA9XG4gICAgICBlbnRpdHlJZENvbC50eXBlICE9PSBkYklkQ29sLnR5cGUgfHwgZW50aXR5SWRDb2wubGVuZ3RoICE9PSBkYklkQ29sLmxlbmd0aDtcblxuICAgIGlmIChpc1BrVHlwZUNoYW5nZWQpIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZVBrVHlwZUNoYW5nZU1pZ3JhdGlvbihcbiAgICAgICAgdGFibGUsXG4gICAgICAgIGVudGl0eUlkQ29sLFxuICAgICAgICBkYklkQ29sLFxuICAgICAgICByZXNvbHZlZEVudGl0eUNvbHVtbnMsXG4gICAgICAgIGVudGl0eUluZGV4ZXMsXG4gICAgICAgIGRiQ29sdW1ucyxcbiAgICAgICAgZGJJbmRleGVzLFxuICAgICAgICBkYkZvcmVpZ25zLFxuICAgICAgICBjb21wYXJlREIsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIOqwgSDsu6zrn7wg7J2066aEIOq4sOykgOycvOuhnCBhZGQsIGRyb3AsIGFsdGVyIOyXrOu2gCDtmZXsnbhcbiAgY29uc3QgYWx0ZXJDb2x1bW5zVG8gPSBnZXRBbHRlckNvbHVtbnNUbyhyZXNvbHZlZEVudGl0eUNvbHVtbnMsIGRiQ29sdW1ucywgc2VhcmNoVGV4dENvbHVtbk5hbWVzKTtcblxuICAvLyDstpTstpzrkJwg7Lus65+865Ok7J2EIOq4sOykgOycvOuhnCDqsIHqsIEg65287J24IOyDneyEsVxuICBjb25zdCBhbHRlckNvbHVtbkxpbmVzVG8gPSBnZXRBbHRlckNvbHVtbkxpbmVzVG8oXG4gICAgYWx0ZXJDb2x1bW5zVG8sXG4gICAgcmVzb2x2ZWRFbnRpdHlDb2x1bW5zLFxuICAgIHRhYmxlLFxuICAgIGRiRm9yZWlnbnMsXG4gICk7XG5cbiAgLy8g7J24642x7Iqk7J2YIGFkZCwgZHJvcCDsl6zrtoAg7ZmV7J24XG4gIGNvbnN0IGFsdGVySW5kZXhlc1RvID0gZ2V0QWx0ZXJJbmRleGVzVG8oZW50aXR5SW5kZXhlcywgZGJJbmRleGVzKTtcbiAgY29uc3QgcmVjcmVhdGVkU2VhcmNoVGV4dENvbHVtbk5hbWVzID0gbmV3IFNldChcbiAgICBhbHRlckNvbHVtbnNUby5hbHRlclxuICAgICAgLmZpbHRlcigoZGJDb2x1bW4pID0+IHtcbiAgICAgICAgY29uc3QgZW50aXR5Q29sdW1uID0gcmVzb2x2ZWRFbnRpdHlDb2x1bW5zLmZpbmQoKGNvbCkgPT4gY29sLm5hbWUgPT09IGRiQ29sdW1uLm5hbWUpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHNlYXJjaFRleHRDb2x1bW5OYW1lcy5oYXMoZGJDb2x1bW4ubmFtZSkgJiZcbiAgICAgICAgICBkYkNvbHVtbi5nZW5lcmF0ZWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGVudGl0eUNvbHVtbj8uZ2VuZXJhdGVkICE9PSB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgICAubWFwKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lKSxcbiAgKTtcbiAgY29uc3QgcmVjcmVhdGVkU2VhcmNoVGV4dERiSW5kZXhlcyA9IGRiSW5kZXhlcy5maWx0ZXIoXG4gICAgKGluZGV4KSA9PlxuICAgICAgaW5kZXguY29sdW1ucy5zb21lKCh7IG5hbWUgfSkgPT4gcmVjcmVhdGVkU2VhcmNoVGV4dENvbHVtbk5hbWVzLmhhcyhuYW1lKSkgJiZcbiAgICAgICFhbHRlckluZGV4ZXNUby5kcm9wLnNvbWUoKGRyb3BJbmRleCkgPT4gZHJvcEluZGV4Lm5hbWUgPT09IGluZGV4Lm5hbWUpLFxuICApO1xuICBjb25zdCByZWNyZWF0ZWRTZWFyY2hUZXh0RW50aXR5SW5kZXhlcyA9IGVudGl0eUluZGV4ZXMuZmlsdGVyKFxuICAgIChpbmRleCkgPT5cbiAgICAgIGluZGV4LmNvbHVtbnMuc29tZSgoeyBuYW1lIH0pID0+IHJlY3JlYXRlZFNlYXJjaFRleHRDb2x1bW5OYW1lcy5oYXMobmFtZSkpICYmXG4gICAgICAhYWx0ZXJJbmRleGVzVG8uYWRkLnNvbWUoKGFkZEluZGV4KSA9PiBhZGRJbmRleC5uYW1lID09PSBpbmRleC5uYW1lKSxcbiAgKTtcbiAgY29uc3QgaW1wbGljaXRseURyb3BwZWREYkluZGV4ZXMgPSBhbHRlckluZGV4ZXNUby5kcm9wLmZpbHRlcigoaW5kZXgpID0+XG4gICAgaW5kZXguY29sdW1ucy5ldmVyeSgoeyBuYW1lIH0pID0+IGFsdGVyQ29sdW1uc1RvLmRyb3Auc29tZSgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gbmFtZSkpLFxuICApO1xuXG4gIC8vIOyduOuNseyKpOqwgCDsgq3soJzrkJjripQg6rK97JqwLCDsu6zrn7zqs7wg6rCZ7J20IOyCreygnOuQnCDsvIDsnbTsiqTsl5DripQgZHJvcOyXkOyEnCDsoJzsmbjtlbTslbztlaghXG4gIGNvbnN0IGluZGV4TmVlZHNUb0Ryb3AgPSBhbHRlckluZGV4ZXNUby5kcm9wLmZpbHRlcihcbiAgICAoaW5kZXgpID0+ICFpbXBsaWNpdGx5RHJvcHBlZERiSW5kZXhlcy5zb21lKChkcm9wcGVkSW5kZXgpID0+IGRyb3BwZWRJbmRleC5uYW1lID09PSBpbmRleC5uYW1lKSxcbiAgKTtcblxuICAvLyDruYgg7L2U65OcIOyDneyEsSDrsKnsp4BcbiAgY29uc3QgaGFzVXBDaGFuZ2VzID1cbiAgICBhbHRlckNvbHVtbkxpbmVzVG8uYWRkLnVwLmJ1aWxkZXIubGVuZ3RoID4gMCB8fFxuICAgIGFsdGVyQ29sdW1uTGluZXNUby5hZGQudXAucmF3Lmxlbmd0aCA+IDAgfHxcbiAgICBhbHRlckNvbHVtbkxpbmVzVG8uZHJvcC51cC5idWlsZGVyLmxlbmd0aCA+IDAgfHxcbiAgICBhbHRlckNvbHVtbkxpbmVzVG8uYWx0ZXIudXAuYnVpbGRlci5sZW5ndGggPiAwIHx8XG4gICAgYWx0ZXJDb2x1bW5MaW5lc1RvLmFsdGVyLnVwLnJhdy5sZW5ndGggPiAwIHx8XG4gICAgYWx0ZXJJbmRleGVzVG8uYWRkLmxlbmd0aCA+IDAgfHxcbiAgICBpbmRleE5lZWRzVG9Ecm9wLmxlbmd0aCA+IDAgfHxcbiAgICByZWNyZWF0ZWRTZWFyY2hUZXh0RGJJbmRleGVzLmxlbmd0aCA+IDA7XG4gIGlmICghaGFzVXBDaGFuZ2VzKSB7XG4gICAgLy8g67OA6rK97IKs7ZWt7J20IOyXhuycvOuptCDruYgg67Cw7Je0IOuwmO2ZmFxuICAgIHJldHVybiBbXTtcbiAgfVxuICBOYWl0ZS50KFwibWlncmF0b3I6Z2VuZXJhdGVBbHRlckNvZGVfQ29sdW1uQW5kSW5kZXhlczpkZWJ1Z1wiLCB7XG4gICAgXCJhbHRlckNvbHVtbnNUby5hZGQubGVuZ3RoXCI6IGFsdGVyQ29sdW1uc1RvLmFkZC5sZW5ndGgsXG4gICAgXCJhbHRlckNvbHVtbnNUby5kcm9wLmxlbmd0aFwiOiBhbHRlckNvbHVtbnNUby5kcm9wLmxlbmd0aCxcbiAgICBcImFsdGVyQ29sdW1uc1RvLmFsdGVyLmxlbmd0aFwiOiBhbHRlckNvbHVtbnNUby5hbHRlci5sZW5ndGgsXG4gICAgXCJhbHRlckluZGV4ZXNUby5hZGQubGVuZ3RoXCI6IGFsdGVySW5kZXhlc1RvLmFkZC5sZW5ndGgsXG4gICAgXCJhbHRlckluZGV4ZXNUby5kcm9wLmxlbmd0aFwiOiBhbHRlckluZGV4ZXNUby5kcm9wLmxlbmd0aCxcbiAgICBcImluZGV4TmVlZHNUb0Ryb3AubGVuZ3RoXCI6IGluZGV4TmVlZHNUb0Ryb3AubGVuZ3RoLFxuICB9KTtcbiAgLy8gTmFpdGUudChcIm1pZ3JhdG9yOmdlbmVyYXRlQWx0ZXJDb2RlX0NvbHVtbkFuZEluZGV4ZXM6YWx0ZXJDb2x1bW5zVG9cIiwgYWx0ZXJDb2x1bW5zVG8pO1xuXG4gIC8vIFRPRE86IOyduOuNseyKpOuqhSDrs4Dqsr3rkJwg6rK97JqwIOyymOumrFxuXG4gIC8vIHRhYmxlIGJ1aWxkZXIg66mU7ISc65Oc66GcIOyLpO2Wie2VoCDsvZTrk5wgKGRyb3Ag4oaSIGFkZCDihpIgYWx0ZXIg7Iic7IScKVxuICBjb25zdCB1cEJ1aWxkZXJMaW5lcyA9IFtcbiAgICAuLi4oYWx0ZXJDb2x1bW5MaW5lc1RvLmRyb3AudXAuYnVpbGRlci5sZW5ndGggPiAwID8gYWx0ZXJDb2x1bW5MaW5lc1RvLmRyb3AudXAuYnVpbGRlciA6IFtdKSxcbiAgICAuLi4oYWx0ZXJDb2x1bW5MaW5lc1RvLmFkZC51cC5idWlsZGVyLmxlbmd0aCA+IDAgPyBhbHRlckNvbHVtbkxpbmVzVG8uYWRkLnVwLmJ1aWxkZXIgOiBbXSksXG4gICAgLi4ucmVjcmVhdGVkU2VhcmNoVGV4dERiSW5kZXhlcy5tYXAoZ2VuSW5kZXhEcm9wRGVmaW5pdGlvbiksXG4gICAgLi4uKGFsdGVyQ29sdW1uTGluZXNUby5hbHRlci51cC5idWlsZGVyLmxlbmd0aCA+IDAgPyBhbHRlckNvbHVtbkxpbmVzVG8uYWx0ZXIudXAuYnVpbGRlciA6IFtdKSxcbiAgICAuLi5pbmRleE5lZWRzVG9Ecm9wLm1hcChnZW5JbmRleERyb3BEZWZpbml0aW9uKSxcbiAgXTtcblxuICAvLyBrbmV4LnJhdygp66GcIOyLpO2Wie2VoCDsvZTrk5xcbiAgY29uc3QgdXBSYXdMaW5lcyA9IFtcbiAgICAuLi4oYWx0ZXJDb2x1bW5MaW5lc1RvLmFkZC51cC5yYXcubGVuZ3RoID4gMCA/IGFsdGVyQ29sdW1uTGluZXNUby5hZGQudXAucmF3IDogW10pLFxuICAgIC4uLihhbHRlckNvbHVtbkxpbmVzVG8uYWx0ZXIudXAucmF3Lmxlbmd0aCA+IDAgPyBhbHRlckNvbHVtbkxpbmVzVG8uYWx0ZXIudXAucmF3IDogW10pLFxuICAgIC4uLnJlY3JlYXRlZFNlYXJjaFRleHRFbnRpdHlJbmRleGVzLm1hcCgoaW5kZXgpID0+IGdlbkluZGV4RGVmaW5pdGlvbihpbmRleCwgdGFibGUpKSxcbiAgICAuLi5hbHRlckluZGV4ZXNUby5hZGQubWFwKChpbmRleCkgPT4gZ2VuSW5kZXhEZWZpbml0aW9uKGluZGV4LCB0YWJsZSkpLFxuICBdO1xuXG4gIC8vIGRvd27snYAgdXDsnZgg7Jet7IicIChhZGQuZG93biA9IGRyb3Agcm9sbGJhY2ssIGRyb3AuZG93biA9IGFkZCByb2xsYmFjaylcbiAgY29uc3QgZG93bkJ1aWxkZXJMaW5lcyA9IFtcbiAgICAuLi4oYWx0ZXJDb2x1bW5MaW5lc1RvLmFkZC5kb3duLmJ1aWxkZXIubGVuZ3RoID4gMCA/IGFsdGVyQ29sdW1uTGluZXNUby5hZGQuZG93bi5idWlsZGVyIDogW10pLFxuICAgIC4uLnJlY3JlYXRlZFNlYXJjaFRleHRFbnRpdHlJbmRleGVzLm1hcChnZW5JbmRleERyb3BEZWZpbml0aW9uKSxcbiAgICAuLi4oYWx0ZXJDb2x1bW5MaW5lc1RvLmFsdGVyLmRvd24uYnVpbGRlci5sZW5ndGggPiAwXG4gICAgICA/IGFsdGVyQ29sdW1uTGluZXNUby5hbHRlci5kb3duLmJ1aWxkZXJcbiAgICAgIDogW10pLFxuICAgIC4uLihhbHRlckNvbHVtbkxpbmVzVG8uZHJvcC5kb3duLmJ1aWxkZXIubGVuZ3RoID4gMFxuICAgICAgPyBhbHRlckNvbHVtbkxpbmVzVG8uZHJvcC5kb3duLmJ1aWxkZXJcbiAgICAgIDogW10pLFxuICAgIC4uLmFsdGVySW5kZXhlc1RvLmFkZFxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKGluZGV4KSA9PlxuICAgICAgICAgICFpbmRleC5jb2x1bW5zLmV2ZXJ5KChpbmRleENvbCkgPT5cbiAgICAgICAgICAgIGFsdGVyQ29sdW1uc1RvLmFkZC5tYXAoKGNvbCkgPT4gY29sLm5hbWUpLmluY2x1ZGVzKGluZGV4Q29sLm5hbWUpLFxuICAgICAgICAgICksXG4gICAgICApXG4gICAgICAubWFwKGdlbkluZGV4RHJvcERlZmluaXRpb24pLFxuICBdO1xuXG4gIGNvbnN0IGRvd25SYXdMaW5lcyA9IFtcbiAgICAuLi4oYWx0ZXJDb2x1bW5MaW5lc1RvLmRyb3AuZG93bi5yYXcubGVuZ3RoID4gMCA/IGFsdGVyQ29sdW1uTGluZXNUby5kcm9wLmRvd24ucmF3IDogW10pLFxuICAgIC4uLihhbHRlckNvbHVtbkxpbmVzVG8uYWx0ZXIuZG93bi5yYXcubGVuZ3RoID4gMCA/IGFsdGVyQ29sdW1uTGluZXNUby5hbHRlci5kb3duLnJhdyA6IFtdKSxcbiAgICAuLi5yZWNyZWF0ZWRTZWFyY2hUZXh0RGJJbmRleGVzLm1hcCgoaW5kZXgpID0+IGdlbkluZGV4RGVmaW5pdGlvbihpbmRleCwgdGFibGUpKSxcbiAgICAuLi5pbXBsaWNpdGx5RHJvcHBlZERiSW5kZXhlcy5tYXAoKGluZGV4KSA9PiBnZW5JbmRleERlZmluaXRpb24oaW5kZXgsIHRhYmxlKSksXG4gICAgLi4uaW5kZXhOZWVkc1RvRHJvcC5tYXAoKGluZGV4KSA9PiBnZW5JbmRleERlZmluaXRpb24oaW5kZXgsIHRhYmxlKSksXG4gIF07XG5cbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW1xuICAgICdpbXBvcnQgdHlwZSB7IEtuZXggfSBmcm9tIFwia25leFwiOycsXG4gICAgXCJcIixcbiAgICBcImV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cChrbmV4OiBLbmV4KTogUHJvbWlzZTx2b2lkPiB7XCIsXG4gICAgLi4uKHVwQnVpbGRlckxpbmVzLmxlbmd0aCA+IDBcbiAgICAgID8gW2Bhd2FpdCBrbmV4LnNjaGVtYS5hbHRlclRhYmxlKFwiJHt0YWJsZX1cIiwgKHRhYmxlKSA9PiB7YCwgLi4udXBCdWlsZGVyTGluZXMsIFwifSk7XCJdXG4gICAgICA6IFtdKSxcbiAgICAuLi51cFJhd0xpbmVzLFxuICAgIFwifVwiLFxuICAgIFwiXCIsXG4gICAgXCJleHBvcnQgYXN5bmMgZnVuY3Rpb24gZG93bihrbmV4OiBLbmV4KTogUHJvbWlzZTx2b2lkPiB7XCIsXG4gICAgLi4uKGRvd25CdWlsZGVyTGluZXMubGVuZ3RoID4gMFxuICAgICAgPyBbYGF3YWl0IGtuZXguc2NoZW1hLmFsdGVyVGFibGUoXCIke3RhYmxlfVwiLCAodGFibGUpID0+IHtgLCAuLi5kb3duQnVpbGRlckxpbmVzLCBcIn0pO1wiXVxuICAgICAgOiBbXSksXG4gICAgLi4uZG93blJhd0xpbmVzLFxuICAgIFwifVwiLFxuICBdO1xuXG4gIGNvbnN0IGZvcm1hdHRlZCA9IGF3YWl0IGZvcm1hdENvZGUobGluZXMuam9pbihcIlxcblwiKSwgYHNyYy9taWdyYXRpb24vJHt0YWJsZX0udHNgKTtcbiAgY29uc3QgdGl0bGUgPSBbXG4gICAgXCJhbHRlclwiLFxuICAgIHRhYmxlLFxuICAgIC4uLihbXCJhZGRcIiwgXCJkcm9wXCIsIFwiYWx0ZXJcIl0gYXMgY29uc3QpXG4gICAgICAubWFwKChhY3Rpb24pID0+IHtcbiAgICAgICAgY29uc3QgbGVuID0gYWx0ZXJDb2x1bW5zVG9bYWN0aW9uXS5sZW5ndGg7XG4gICAgICAgIGlmIChsZW4gPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIGFjdGlvbiArIGxlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0ICE9PSBudWxsKSxcbiAgXS5qb2luKFwiX1wiKTtcblxuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHRhYmxlLFxuICAgICAgdGl0bGUsXG4gICAgICBmb3JtYXR0ZWQsXG4gICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICog7Lus65+8IOu5hOq1kOulvCDsnITtlbQgR2VuZXJhdGVkIENvbHVtbuydmCBleHByZXNzaW9u7J2EIOygnOyZuO2VnCDqsJ3ssrTrpbwg7IOd7ISxXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUpzb25iRW1wdHlEZWZhdWx0Rm9yQ29tcGFyaXNvbjxWYWx1ZT4oZGVmYXVsdFRvOiBWYWx1ZSk6IFZhbHVlIHwgc3RyaW5nIHtcbiAgaWYgKCFpc1N0cmluZ1ZhbHVlKGRlZmF1bHRUbykpIHtcbiAgICByZXR1cm4gZGVmYXVsdFRvO1xuICB9XG5cbiAgY29uc3Qgd2l0aG91dENhc3QgPSBkZWZhdWx0VG9cbiAgICAudHJpbSgpXG4gICAgLnJlcGxhY2UoLzo6XFxzKmpzb25iJC9pLCBcIlwiKVxuICAgIC50cmltKCk7XG4gIGlmICh3aXRob3V0Q2FzdCA9PT0gXCInW10nXCIgfHwgd2l0aG91dENhc3QgPT09ICdcIltdXCInKSB7XG4gICAgcmV0dXJuICdcIltdXCInO1xuICB9XG4gIGlmICh3aXRob3V0Q2FzdCA9PT0gXCIne30nXCIgfHwgd2l0aG91dENhc3QgPT09ICdcInt9XCInKSB7XG4gICAgcmV0dXJuICdcInt9XCInO1xuICB9XG4gIHJldHVybiBkZWZhdWx0VG87XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbHVtbkZvckNvbXBhcmlzb24oXG4gIGNvbDogTWlncmF0aW9uQ29sdW1uLFxuICBzZWFyY2hUZXh0Q29sdW1uTmFtZXM6IFNldDxzdHJpbmc+LFxuKTogTWlncmF0aW9uQ29sdW1uIHtcbiAgY29uc3Qgbm9ybWFsaXplZERlZmF1bHRUbyA9XG4gICAgY29sLnR5cGUgPT09IFwianNvblwiICYmIGNvbC5kZWZhdWx0VG8gIT09IHVuZGVmaW5lZFxuICAgICAgPyBub3JtYWxpemVKc29uYkVtcHR5RGVmYXVsdEZvckNvbXBhcmlzb24oY29sLmRlZmF1bHRUbylcbiAgICAgIDogY29sLmRlZmF1bHRUbztcbiAgY29uc3Qgbm9ybWFsaXplZENvbHVtbiA9XG4gICAgbm9ybWFsaXplZERlZmF1bHRUbyA9PT0gY29sLmRlZmF1bHRUbyA/IGNvbCA6IHsgLi4uY29sLCBkZWZhdWx0VG86IG5vcm1hbGl6ZWREZWZhdWx0VG8gfTtcblxuICBpZiAoIW5vcm1hbGl6ZWRDb2x1bW4uZ2VuZXJhdGVkKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRDb2x1bW47XG4gIH1cblxuICBpZiAoIXNlYXJjaFRleHRDb2x1bW5OYW1lcy5oYXMobm9ybWFsaXplZENvbHVtbi5uYW1lKSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5ub3JtYWxpemVkQ29sdW1uLFxuICAgICAgZ2VuZXJhdGVkOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4ubm9ybWFsaXplZENvbHVtbixcbiAgICBnZW5lcmF0ZWQ6IHtcbiAgICAgIC4uLm5vcm1hbGl6ZWRDb2x1bW4uZ2VuZXJhdGVkLFxuICAgICAgZXhwcmVzc2lvbjogY2Fub25pY2FsaXplU2VhcmNoVGV4dEdlbmVyYXRlZEV4cHJlc3Npb24obm9ybWFsaXplZENvbHVtbi5nZW5lcmF0ZWQuZXhwcmVzc2lvbiksXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiDqsIEg7Lus65+8IOydtOumhCDquLDspIDsnLzroZwgYWRkLCBkcm9wLCBhbHRlciDsl6zrtoAg7ZmV7J24XG4gKi9cbmZ1bmN0aW9uIGdldEFsdGVyQ29sdW1uc1RvKFxuICBlbnRpdHlDb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXSxcbiAgZGJDb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXSxcbiAgc2VhcmNoVGV4dENvbHVtbk5hbWVzOiBTZXQ8c3RyaW5nPixcbikge1xuICBjb25zdCBjb2x1bW5zVG8gPSB7XG4gICAgYWRkOiAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIE1pZ3JhdGlvbkNvbHVtbltdLFxuICAgIGRyb3A6IC8qIFNBRkVUWTogS25leOyZgCBQb3N0Z3JlU1FMIOyKpO2CpOuniCDsobDtmowg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gW10gYXMgTWlncmF0aW9uQ29sdW1uW10sXG4gICAgYWx0ZXI6XG4gICAgICAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIE1pZ3JhdGlvbkNvbHVtbltdLFxuICB9O1xuXG4gIC8vIOy7rOufvOuqhSDquLDspIAg67mE6rWQXG4gIGNvbnN0IGV4dHJhQ29sdW1ucyA9IHtcbiAgICBkYjogZGlmZihkYkNvbHVtbnMsIGVudGl0eUNvbHVtbnMsIChjb2wpID0+IFtjb2wubmFtZSwgY29sLmdlbmVyYXRlZD8udHlwZV0uam9pbihcIi8vL1wiKSksXG4gICAgZW50aXR5OiBkaWZmKGVudGl0eUNvbHVtbnMsIGRiQ29sdW1ucywgKGNvbCkgPT4gW2NvbC5uYW1lLCBjb2wuZ2VuZXJhdGVkPy50eXBlXS5qb2luKFwiLy8vXCIpKSxcbiAgfTtcbiAgaWYgKGV4dHJhQ29sdW1ucy5lbnRpdHkubGVuZ3RoID4gMCkge1xuICAgIGNvbHVtbnNUby5hZGQgPSBjb2x1bW5zVG8uYWRkLmNvbmNhdChleHRyYUNvbHVtbnMuZW50aXR5KTtcbiAgfVxuICBpZiAoZXh0cmFDb2x1bW5zLmRiLmxlbmd0aCA+IDApIHtcbiAgICBjb2x1bW5zVG8uZHJvcCA9IGNvbHVtbnNUby5kcm9wLmNvbmNhdChleHRyYUNvbHVtbnMuZGIpO1xuICB9XG5cbiAgLy8g64+Z7J28IOy7rOufvOuqheydmCDshLjrtoAg7ZWE65OcIOu5hOq1kFxuICBjb25zdCBzYW1lRGJDb2x1bW5zID0gaW50ZXJzZWN0aW9uQnkoZGJDb2x1bW5zLCBlbnRpdHlDb2x1bW5zLCAoY29sKSA9PiBjb2wubmFtZSk7XG4gIGNvbnN0IHNhbWVNZENvbHVtbnMgPSBpbnRlcnNlY3Rpb25CeShlbnRpdHlDb2x1bW5zLCBkYkNvbHVtbnMsIChjb2wpID0+IGNvbC5uYW1lKTtcbiAgY29sdW1uc1RvLmFsdGVyID0gZGlmZmVyZW5jZVdpdGgoc2FtZURiQ29sdW1ucywgc2FtZU1kQ29sdW1ucywgKGEsIGIpID0+XG4gICAgZXF1YWwoXG4gICAgICBub3JtYWxpemVDb2x1bW5Gb3JDb21wYXJpc29uKGEsIHNlYXJjaFRleHRDb2x1bW5OYW1lcyksXG4gICAgICBub3JtYWxpemVDb2x1bW5Gb3JDb21wYXJpc29uKGIsIHNlYXJjaFRleHRDb2x1bW5OYW1lcyksXG4gICAgKSxcbiAgKTtcblxuICByZXR1cm4gY29sdW1uc1RvO1xufVxuXG4vKipcbiAqIOy2lOy2nOuQnCDsu6zrn7zrk6TsnYQg6riw7KSA7Jy866GcIOqwgeqwgSDrnbzsnbgg7IOd7ISxXG4gKi9cbmZ1bmN0aW9uIGdldEFsdGVyQ29sdW1uTGluZXNUbyhcbiAgY29sdW1uc1RvOiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRBbHRlckNvbHVtbnNUbz4sXG4gIGVudGl0eUNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdLFxuICB0YWJsZTogc3RyaW5nLFxuICBkYkZvcmVpZ25zOiBNaWdyYXRpb25Gb3JlaWduW10sXG4pIHtcbiAgY29uc3Qgc2VhcmNoVGV4dENvbHVtbk5hbWVzID0gZ2V0U2VhcmNoVGV4dENvbHVtbk5hbWVzKHRhYmxlKTtcbiAgY29uc3QgbGluZXNUbyA9IHtcbiAgICBhZGQ6IHtcbiAgICAgIHVwOiB7XG4gICAgICAgIGJ1aWxkZXI6XG4gICAgICAgICAgLyogU0FGRVRZOiBLbmV47JmAIFBvc3RncmVTUUwg7Iqk7YKk66eIIOyhsO2ajCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBbXSBhcyBzdHJpbmdbXSxcbiAgICAgICAgcmF3OiAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIHN0cmluZ1tdLFxuICAgICAgfSxcbiAgICAgIGRvd246IHtcbiAgICAgICAgYnVpbGRlcjpcbiAgICAgICAgICAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIHN0cmluZ1tdLFxuICAgICAgICByYXc6IC8qIFNBRkVUWTogS25leOyZgCBQb3N0Z3JlU1FMIOyKpO2CpOuniCDsobDtmowg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gW10gYXMgc3RyaW5nW10sXG4gICAgICB9LFxuICAgIH0sXG4gICAgZHJvcDoge1xuICAgICAgdXA6IHtcbiAgICAgICAgYnVpbGRlcjpcbiAgICAgICAgICAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIHN0cmluZ1tdLFxuICAgICAgICByYXc6IC8qIFNBRkVUWTogS25leOyZgCBQb3N0Z3JlU1FMIOyKpO2CpOuniCDsobDtmowg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gW10gYXMgc3RyaW5nW10sXG4gICAgICB9LFxuICAgICAgZG93bjoge1xuICAgICAgICBidWlsZGVyOlxuICAgICAgICAgIC8qIFNBRkVUWTogS25leOyZgCBQb3N0Z3JlU1FMIOyKpO2CpOuniCDsobDtmowg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gW10gYXMgc3RyaW5nW10sXG4gICAgICAgIHJhdzogLyogU0FGRVRZOiBLbmV47JmAIFBvc3RncmVTUUwg7Iqk7YKk66eIIOyhsO2ajCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBbXSBhcyBzdHJpbmdbXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBhbHRlcjoge1xuICAgICAgdXA6IHtcbiAgICAgICAgYnVpbGRlcjpcbiAgICAgICAgICAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIHN0cmluZ1tdLFxuICAgICAgICByYXc6IC8qIFNBRkVUWTogS25leOyZgCBQb3N0Z3JlU1FMIOyKpO2CpOuniCDsobDtmowg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gW10gYXMgc3RyaW5nW10sXG4gICAgICB9LFxuICAgICAgZG93bjoge1xuICAgICAgICBidWlsZGVyOlxuICAgICAgICAgIC8qIFNBRkVUWTogS25leOyZgCBQb3N0Z3JlU1FMIOyKpO2CpOuniCDsobDtmowg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gW10gYXMgc3RyaW5nW10sXG4gICAgICAgIHJhdzogLyogU0FGRVRZOiBLbmV47JmAIFBvc3RncmVTUUwg7Iqk7YKk66eIIOyhsO2ajCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBbXSBhcyBzdHJpbmdbXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICAvLyBhZGQgY29sdW1uc1xuICBjb25zdCBhZGRDb2x1bW5EZWZzID0gZ2VuQ29sdW1uRGVmaW5pdGlvbnModGFibGUsIGNvbHVtbnNUby5hZGQpO1xuICBsaW5lc1RvLmFkZC51cCA9IHtcbiAgICBidWlsZGVyOiBhZGRDb2x1bW5EZWZzLmJ1aWxkZXIubGVuZ3RoID4gMCA/IFtcIi8vIGFkZFwiLCAuLi5hZGRDb2x1bW5EZWZzLmJ1aWxkZXJdIDogW10sXG4gICAgcmF3OlxuICAgICAgYWRkQ29sdW1uRGVmcy5yYXcubGVuZ3RoID4gMFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIC4uLmdldFNlYXJjaFRleHRIZWxwZXJEZWZpbml0aW9ucyh0YWJsZSwgY29sdW1uc1RvLmFkZCksXG4gICAgICAgICAgICBcIi8vIGFkZCAoZ2VuZXJhdGVkKVwiLFxuICAgICAgICAgICAgLi4uYWRkQ29sdW1uRGVmcy5yYXcsXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdLFxuICB9O1xuICBsaW5lc1RvLmFkZC5kb3duID0ge1xuICAgIGJ1aWxkZXI6XG4gICAgICBjb2x1bW5zVG8uYWRkLmxlbmd0aCA+IDBcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBcIi8vIHJvbGxiYWNrIC0gYWRkXCIsXG4gICAgICAgICAgICBgdGFibGUuZHJvcENvbHVtbnMoJHtjb2x1bW5zVG8uYWRkLm1hcCgoY29sKSA9PiBgJyR7Y29sLm5hbWV9J2ApLmpvaW4oXCIsIFwiKX0pYCxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10sXG4gICAgcmF3OiBbXSxcbiAgfTtcblxuICAvLyBkcm9w7ZWgIOy7rOufvOyXkCDqsbjrprAgRksg7LC+6riwXG4gIGNvbnN0IGRyb3BDb2x1bW5OYW1lcyA9IGNvbHVtbnNUby5kcm9wLm1hcCgoY29sKSA9PiBjb2wubmFtZSk7XG4gIGNvbnN0IGZrVG9Ecm9wQmVmb3JlQ29sdW1uID0gZGJGb3JlaWducy5maWx0ZXIoKGZrKSA9PlxuICAgIGZrLmNvbHVtbnMuc29tZSgoY29sKSA9PiBkcm9wQ29sdW1uTmFtZXMuaW5jbHVkZXMoY29sKSksXG4gICk7XG5cbiAgY29uc3QgZHJvcEZrTGluZXMgPSBma1RvRHJvcEJlZm9yZUNvbHVtbi5tYXAoKGZrKSA9PiB7XG4gICAgY29uc3QgY29sdW1uc1N0cmluZ1F1b3RlID0gZmsuY29sdW1ucy5tYXAoKGNvbCkgPT4gYCcke2NvbH0nYCkuam9pbihcIixcIik7XG4gICAgcmV0dXJuIGB0YWJsZS5kcm9wRm9yZWlnbihbJHtjb2x1bW5zU3RyaW5nUXVvdGV9XSlgO1xuICB9KTtcblxuICBjb25zdCByZXN0b3JlRmtMaW5lcyA9IGdlbkZvcmVpZ25EZWZpbml0aW9ucyh0YWJsZSwgZmtUb0Ryb3BCZWZvcmVDb2x1bW4pLnVwO1xuXG4gIC8vIGRyb3DsnZggcm9sbGJhY2vsi5zsl5DripQgZ2VuZXJhdGVkIGNvbHVtbuuPhCDrs7Xsm5DtlbTslbwg7ZWoXG4gIGNvbnN0IGRyb3BDb2x1bW5EZWZzID0gZ2VuQ29sdW1uRGVmaW5pdGlvbnModGFibGUsIGNvbHVtbnNUby5kcm9wKTtcbiAgbGluZXNUby5kcm9wID0ge1xuICAgIHVwOiB7XG4gICAgICBidWlsZGVyOiBbXG4gICAgICAgIC4uLihkcm9wRmtMaW5lcy5sZW5ndGggPiAwXG4gICAgICAgICAgPyBbXCIvLyBkcm9wIGZvcmVpZ24ga2V5cyBvbiBjb2x1bW5zIHRvIGJlIGRyb3BwZWRcIiwgLi4uZHJvcEZrTGluZXNdXG4gICAgICAgICAgOiBbXSksXG4gICAgICAgIC4uLihjb2x1bW5zVG8uZHJvcC5sZW5ndGggPiAwXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIFwiLy8gZHJvcCBjb2x1bW5zXCIsXG4gICAgICAgICAgICAgIGB0YWJsZS5kcm9wQ29sdW1ucygke2NvbHVtbnNUby5kcm9wLm1hcCgoY29sKSA9PiBgJyR7Y29sLm5hbWV9J2ApLmpvaW4oXCIsIFwiKX0pYCxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtdKSxcbiAgICAgIF0sXG4gICAgICByYXc6IFtdLFxuICAgIH0sXG4gICAgZG93bjoge1xuICAgICAgYnVpbGRlcjogW1xuICAgICAgICAuLi4oZHJvcENvbHVtbkRlZnMuYnVpbGRlci5sZW5ndGggPiAwXG4gICAgICAgICAgPyBbXCIvLyByb2xsYmFjayAtIGRyb3AgY29sdW1uc1wiLCAuLi5kcm9wQ29sdW1uRGVmcy5idWlsZGVyXVxuICAgICAgICAgIDogW10pLFxuICAgICAgICAuLi4ocmVzdG9yZUZrTGluZXMubGVuZ3RoID4gMCA/IFtcIi8vIHJlc3RvcmUgZm9yZWlnbiBrZXlzXCIsIC4uLnJlc3RvcmVGa0xpbmVzXSA6IFtdKSxcbiAgICAgIF0sXG4gICAgICByYXc6XG4gICAgICAgIGRyb3BDb2x1bW5EZWZzLnJhdy5sZW5ndGggPiAwXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIC4uLmdldFNlYXJjaFRleHRIZWxwZXJEZWZpbml0aW9ucyh0YWJsZSwgY29sdW1uc1RvLmRyb3ApLFxuICAgICAgICAgICAgICBcIi8vIHJvbGxiYWNrIC0gZHJvcCBjb2x1bW5zIChnZW5lcmF0ZWQpXCIsXG4gICAgICAgICAgICAgIC4uLmRyb3BDb2x1bW5EZWZzLnJhdyxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtdLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gYWx0ZXIgY29sdW1ucyAoR2VuZXJhdGVkIENvbHVtbuydgCBBTFRFUiDrtojqsIDtlZjrr4DroZwgZHJvcCDtm4Qg7J6s7IOd7ISxKVxuICBsaW5lc1RvLmFsdGVyID0gY29sdW1uc1RvLmFsdGVyLnJlZHVjZShcbiAgICAociwgZGJDb2x1bW4pID0+IHtcbiAgICAgIGNvbnN0IGVudGl0eUNvbHVtbiA9IGVudGl0eUNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wubmFtZSA9PT0gZGJDb2x1bW4ubmFtZSk7XG4gICAgICBpZiAoZW50aXR5Q29sdW1uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgc2VhcmNoVGV4dENvbHVtbk5hbWVzLmhhcyhkYkNvbHVtbi5uYW1lKSAmJlxuICAgICAgICBkYkNvbHVtbi5nZW5lcmF0ZWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBlbnRpdHlDb2x1bW4uZ2VuZXJhdGVkICE9PSB1bmRlZmluZWRcbiAgICAgICkge1xuICAgICAgICByLnVwLmJ1aWxkZXIgPSBbXG4gICAgICAgICAgLi4uci51cC5idWlsZGVyLFxuICAgICAgICAgIFwiLy8gYWx0ZXIgZ2VuZXJhdGVkIGNvbHVtblwiLFxuICAgICAgICAgIGB0YWJsZS5kcm9wQ29sdW1ucygnJHtkYkNvbHVtbi5uYW1lfScpYCxcbiAgICAgICAgXTtcbiAgICAgICAgci51cC5yYXcgPSBbXG4gICAgICAgICAgLi4uci51cC5yYXcsXG4gICAgICAgICAgLi4uZ2V0U2VhcmNoVGV4dEhlbHBlckRlZmluaXRpb25zKHRhYmxlLCBbZW50aXR5Q29sdW1uXSksXG4gICAgICAgICAgXCIvLyBhbHRlciBnZW5lcmF0ZWQgY29sdW1uXCIsXG4gICAgICAgICAgZ2VuR2VuZXJhdGVkQ29sdW1uRGVmaW5pdGlvbih0YWJsZSwgZW50aXR5Q29sdW1uKSxcbiAgICAgICAgXTtcbiAgICAgICAgci5kb3duLmJ1aWxkZXIgPSBbXG4gICAgICAgICAgLi4uci5kb3duLmJ1aWxkZXIsXG4gICAgICAgICAgXCIvLyByb2xsYmFjayAtIGFsdGVyIGdlbmVyYXRlZCBjb2x1bW5cIixcbiAgICAgICAgICBgdGFibGUuZHJvcENvbHVtbnMoJyR7ZGJDb2x1bW4ubmFtZX0nKWAsXG4gICAgICAgIF07XG4gICAgICAgIHIuZG93bi5yYXcgPSBbXG4gICAgICAgICAgLi4uci5kb3duLnJhdyxcbiAgICAgICAgICAuLi5nZXRTZWFyY2hUZXh0SGVscGVyRGVmaW5pdGlvbnModGFibGUsIFtkYkNvbHVtbl0pLFxuICAgICAgICAgIFwiLy8gcm9sbGJhY2sgLSBhbHRlciBnZW5lcmF0ZWQgY29sdW1uXCIsXG4gICAgICAgICAgZ2VuR2VuZXJhdGVkQ29sdW1uRGVmaW5pdGlvbih0YWJsZSwgZGJDb2x1bW4pLFxuICAgICAgICBdO1xuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH1cblxuICAgICAgLy8g7Lus65+8IOuzgOqyveyCrO2VrVxuICAgICAgY29uc3QgY29sdW1uRGlmZlVwID0gZGlmZihcbiAgICAgICAgZ2VuQ29sdW1uRGVmaW5pdGlvbnModGFibGUsIFtlbnRpdHlDb2x1bW5dKS5idWlsZGVyLFxuICAgICAgICBnZW5Db2x1bW5EZWZpbml0aW9ucyh0YWJsZSwgW2RiQ29sdW1uXSkuYnVpbGRlcixcbiAgICAgICk7XG4gICAgICBjb25zdCBjb2x1bW5EaWZmRG93biA9IGRpZmYoXG4gICAgICAgIGdlbkNvbHVtbkRlZmluaXRpb25zKHRhYmxlLCBbZGJDb2x1bW5dKS5idWlsZGVyLFxuICAgICAgICBnZW5Db2x1bW5EZWZpbml0aW9ucyh0YWJsZSwgW2VudGl0eUNvbHVtbl0pLmJ1aWxkZXIsXG4gICAgICApO1xuICAgICAgaWYgKGNvbHVtbkRpZmZVcC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHIudXAuYnVpbGRlciA9IFtcbiAgICAgICAgICAuLi5yLnVwLmJ1aWxkZXIsXG4gICAgICAgICAgXCIvLyBhbHRlciBjb2x1bW5cIixcbiAgICAgICAgICAuLi5jb2x1bW5EaWZmVXAubWFwKChsKSA9PiBgJHtsLnJlcGxhY2UoXCI7XCIsIFwiXCIpfS5hbHRlcigpO2ApLFxuICAgICAgICBdO1xuICAgICAgICByLmRvd24uYnVpbGRlciA9IFtcbiAgICAgICAgICAuLi5yLmRvd24uYnVpbGRlcixcbiAgICAgICAgICBcIi8vIHJvbGxiYWNrIC0gYWx0ZXIgY29sdW1uXCIsXG4gICAgICAgICAgLi4uY29sdW1uRGlmZkRvd24ubWFwKChsKSA9PiBgJHtsLnJlcGxhY2UoXCI7XCIsIFwiXCIpfS5hbHRlcigpO2ApLFxuICAgICAgICBdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcjtcbiAgICB9LFxuICAgIHtcbiAgICAgIHVwOiB7XG4gICAgICAgIGJ1aWxkZXI6XG4gICAgICAgICAgLyogU0FGRVRZOiBLbmV47JmAIFBvc3RncmVTUUwg7Iqk7YKk66eIIOyhsO2ajCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBbXSBhcyBzdHJpbmdbXSxcbiAgICAgICAgcmF3OiAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIHN0cmluZ1tdLFxuICAgICAgfSxcbiAgICAgIGRvd246IHtcbiAgICAgICAgYnVpbGRlcjpcbiAgICAgICAgICAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIHN0cmluZ1tdLFxuICAgICAgICByYXc6IC8qIFNBRkVUWTogS25leOyZgCBQb3N0Z3JlU1FMIOyKpO2CpOuniCDsobDtmowg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gW10gYXMgc3RyaW5nW10sXG4gICAgICB9LFxuICAgIH0sXG4gICk7XG5cbiAgcmV0dXJuIGxpbmVzVG87XG59XG5cbi8vIOyduOuNseyKpCDqs6DsnKAg7Iud67OE7J6QIOyDneyEsSAobmFtZeydhCDsoJzsmbjtlZwg66qo65OgIO2VhOuTnOulvCDrrLjsnpDsl7TroZwg67OA7ZmY7ZWY7JesIOyhsO2VqSlcbmZ1bmN0aW9uIG1pZ3JhdGlvbkluZGV4SWRlbnRpdHkoaW5kZXg6IE1pZ3JhdGlvbkluZGV4KTogc3RyaW5nIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGluZGV4KVxuICAgIC5maWx0ZXIoKGtleSkgPT4ga2V5ICE9PSBcIm5hbWVcIilcbiAgICAudG9Tb3J0ZWQoKTtcblxuICByZXR1cm4ga2V5c1xuICAgIC5tYXAoKGtleSkgPT4ge1xuICAgICAgaWYgKGtleSA9PT0gXCJuYW1lXCIpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBpZiAoa2V5ID09PSBcImNvbHVtbnNcIikge1xuICAgICAgICByZXR1cm4gLyogU0FGRVRZOiBLbmV47JmAIFBvc3RncmVTUUwg7Iqk7YKk66eIIOyhsO2ajCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoXG4gICAgICAgICAgaW5kZXhba2V5XSBhcyBNaWdyYXRpb25JbmRleFtcImNvbHVtbnNcIl1cbiAgICAgICAgKS5tYXAoKGNvbCkgPT5cbiAgICAgICAgICBPYmplY3Qua2V5cyhjb2wpXG4gICAgICAgICAgICAudG9Tb3J0ZWQoKVxuICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgKGNvbHVtbktleSkgPT5cbiAgICAgICAgICAgICAgICBgJHtjb2x1bW5LZXl9PSR7Y29sWy8qIFNBRkVUWTogS25leOyZgCBQb3N0Z3JlU1FMIOyKpO2CpOuniCDsobDtmowg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gY29sdW1uS2V5IGFzIGtleW9mIHR5cGVvZiBjb2xdfWAsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuam9pbihcIi8vXCIpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGAke2tleX09JHtpbmRleFsvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIGtleSBhcyBrZXlvZiBNaWdyYXRpb25JbmRleF19YDtcbiAgICB9KVxuICAgIC5qb2luKFwiLy9cIik7XG59XG5cbi8qKlxuICog7J24642x7Iqk7J2YIGFkZCwgZHJvcCDsl6zrtoAg7ZmV7J24XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbHRlckluZGV4ZXNUbyhlbnRpdHlJbmRleGVzOiBNaWdyYXRpb25JbmRleFtdLCBkYkluZGV4ZXM6IE1pZ3JhdGlvbkluZGV4W10pIHtcbiAgLy8g7J24642x7IqkIOu5hOq1kFxuICBjb25zdCBpbmRleGVzVG8gPSB7XG4gICAgYWRkOiAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIE1pZ3JhdGlvbkluZGV4W10sXG4gICAgZHJvcDogLyogU0FGRVRZOiBLbmV47JmAIFBvc3RncmVTUUwg7Iqk7YKk66eIIOyhsO2ajCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBbXSBhcyBNaWdyYXRpb25JbmRleFtdLFxuICB9O1xuXG4gIGNvbnN0IG5vcm1hbGl6ZWRFbnRpdHlJbmRleGVzID0gZW50aXR5SW5kZXhlcy5tYXAoc2V0TWlncmF0aW9uSW5kZXhEZWZhdWx0cyk7XG4gIGNvbnN0IG5vcm1hbGl6ZWREYkluZGV4ZXMgPSBkYkluZGV4ZXMubWFwKHNldE1pZ3JhdGlvbkluZGV4RGVmYXVsdHMpO1xuICAvLyDruYTqtZDsl5DripQg7KCV6rec7ZmU65CcIHByZWRpY2F0ZeulvCDsk7DrkJgsIOyLpOygnCBtaWdyYXRpb24g7Lac66Cl7J2AIOybkOuzuCBTUUzsnYQg67O07KG07ZWc64ukLlxuICBjb25zdCBjb21wYXJpc29uRW50aXR5SW5kZXhlcyA9IGVudGl0eUluZGV4ZXMubWFwKHNldE1pZ3JhdGlvbkluZGV4Q29tcGFyaXNvbkRlZmF1bHRzKTtcbiAgY29uc3QgY29tcGFyaXNvbkRiSW5kZXhlcyA9IGRiSW5kZXhlcy5tYXAoc2V0TWlncmF0aW9uSW5kZXhDb21wYXJpc29uRGVmYXVsdHMpO1xuICBjb25zdCBleHRyYUluZGV4ZXMgPSB7XG4gICAgZGI6IGRpZmYoY29tcGFyaXNvbkRiSW5kZXhlcywgY29tcGFyaXNvbkVudGl0eUluZGV4ZXMsIG1pZ3JhdGlvbkluZGV4SWRlbnRpdHkpLFxuICAgIGVudGl0eTogZGlmZihjb21wYXJpc29uRW50aXR5SW5kZXhlcywgY29tcGFyaXNvbkRiSW5kZXhlcywgbWlncmF0aW9uSW5kZXhJZGVudGl0eSksXG4gIH07XG4gIGlmIChleHRyYUluZGV4ZXMuZW50aXR5Lmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBhZGRJZGVudGl0aWVzID0gbmV3IFNldChleHRyYUluZGV4ZXMuZW50aXR5Lm1hcChtaWdyYXRpb25JbmRleElkZW50aXR5KSk7XG4gICAgaW5kZXhlc1RvLmFkZCA9IGluZGV4ZXNUby5hZGQuY29uY2F0KFxuICAgICAgbm9ybWFsaXplZEVudGl0eUluZGV4ZXMuZmlsdGVyKChfLCBpbmRleCkgPT5cbiAgICAgICAgYWRkSWRlbnRpdGllcy5oYXMobWlncmF0aW9uSW5kZXhJZGVudGl0eShjb21wYXJpc29uRW50aXR5SW5kZXhlc1tpbmRleF0pKSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICBpZiAoZXh0cmFJbmRleGVzLmRiLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBkcm9wSWRlbnRpdGllcyA9IG5ldyBTZXQoZXh0cmFJbmRleGVzLmRiLm1hcChtaWdyYXRpb25JbmRleElkZW50aXR5KSk7XG4gICAgaW5kZXhlc1RvLmRyb3AgPSBpbmRleGVzVG8uZHJvcC5jb25jYXQoXG4gICAgICBub3JtYWxpemVkRGJJbmRleGVzLmZpbHRlcigoXywgaW5kZXgpID0+XG4gICAgICAgIGRyb3BJZGVudGl0aWVzLmhhcyhtaWdyYXRpb25JbmRleElkZW50aXR5KGNvbXBhcmlzb25EYkluZGV4ZXNbaW5kZXhdKSksXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gaW5kZXhlc1RvO1xufVxuXG4vKipcbiAqIOyduOuNseyKpCDsgq3soJwg7KCV7J2YIOyDneyEsVxuICovXG5mdW5jdGlvbiBnZW5JbmRleERyb3BEZWZpbml0aW9uKGluZGV4OiBNaWdyYXRpb25JbmRleCkge1xuICByZXR1cm4gYHRhYmxlLmRyb3BJbmRleChbJHtpbmRleC5jb2x1bW5zXG4gICAgLm1hcCgoY29sdW1uKSA9PiBgJyR7Y29sdW1uLm5hbWV9J2ApXG4gICAgLmpvaW4oXCIsXCIpfV0sICcke2luZGV4Lm5hbWV9JylgO1xufVxuXG4vKipcbiAqIERCIOyhsO2ajCDqsrDqs7zsmYAg67mE6rWQ7ZWY6riwIOychO2VnCDsnbjrjbHsiqQg6riw67O46rCSIOyEpOyglVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TWlncmF0aW9uSW5kZXhEZWZhdWx0cyhpbmRleDogTWlncmF0aW9uSW5kZXgpOiBNaWdyYXRpb25JbmRleCB7XG4gIHJldHVybiBzZXRNaWdyYXRpb25JbmRleERlZmF1bHRzQmFzZShpbmRleCwgZmFsc2UpO1xufVxuXG5mdW5jdGlvbiBzZXRNaWdyYXRpb25JbmRleENvbXBhcmlzb25EZWZhdWx0cyhpbmRleDogTWlncmF0aW9uSW5kZXgpOiBNaWdyYXRpb25JbmRleCB7XG4gIC8vIERCIGNhbm9uaWNhbCBTUUzqs7wgZW50aXR5IFNRTOydmCDtkZztmIQg7LCo7J2066W8IGRpZmYgaWRlbnRpdHnsl5DshJzrp4wg7Z2h7IiY7ZWc64ukLlxuICByZXR1cm4gc2V0TWlncmF0aW9uSW5kZXhEZWZhdWx0c0Jhc2UoaW5kZXgsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBzZXRNaWdyYXRpb25JbmRleERlZmF1bHRzQmFzZShcbiAgaW5kZXg6IE1pZ3JhdGlvbkluZGV4LFxuICBub3JtYWxpemVXaGVyZUZvckNvbXBhcmlzb246IGJvb2xlYW4sXG4pOiBNaWdyYXRpb25JbmRleCB7XG4gIGNvbnN0IGlzVmVjdG9ySW5kZXggPSBpbmRleC50eXBlID09PSBcImhuc3dcIiB8fCBpbmRleC50eXBlID09PSBcIml2ZmZsYXRcIjtcbiAgY29uc3Qgc3VwcG9ydHNPcmRlcmluZyA9ICFpc1ZlY3RvckluZGV4ICYmICghaW5kZXgudXNpbmcgfHwgaW5kZXgudXNpbmcgPT09IFwiYnRyZWVcIik7XG4gIGNvbnN0IG5vcm1hbGl6ZWRVc2luZyA9IGlzVmVjdG9ySW5kZXggPyBpbmRleC51c2luZyA6IChpbmRleC51c2luZyA/PyBcImJ0cmVlXCIpO1xuICBjb25zdCBub3JtYWxpemVkV2hlcmUgPSBub3JtYWxpemVXaGVyZUZvckNvbXBhcmlzb25cbiAgICA/IG5vcm1hbGl6ZUluZGV4V2hlcmVQcmVkaWNhdGVGb3JDb21wYXJpc29uKGluZGV4LndoZXJlKVxuICAgIDogbm9ybWFsaXplSW5kZXhXaGVyZVByZWRpY2F0ZShpbmRleC53aGVyZSk7XG5cbiAgY29uc3QgY29sdW1ucyA9IGluZGV4LmNvbHVtbnMubWFwKChjb2wpID0+IHtcbiAgICBjb25zdCBjb2x1bW46IE1pZ3JhdGlvbkluZGV4W1wiY29sdW1uc1wiXVtudW1iZXJdID0geyBuYW1lOiBjb2wubmFtZSB9O1xuICAgIGNvbnN0IG9wY2xhc3MgPSBnZXRJbmRleENvbHVtbk9wY2xhc3MoY29sKTtcbiAgICBpZiAob3BjbGFzcykgY29sdW1uLm9wY2xhc3MgPSBvcGNsYXNzO1xuICAgIGlmIChzdXBwb3J0c09yZGVyaW5nKSB7XG4gICAgICBjb2x1bW4uc29ydE9yZGVyID0gY29sLnNvcnRPcmRlciA/PyBcIkFTQ1wiO1xuICAgICAgY29sdW1uLm51bGxzRmlyc3QgPSBjb2wubnVsbHNGaXJzdCA/PyBjb2wuc29ydE9yZGVyID09PSBcIkRFU0NcIjtcbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfSk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRJbmRleDogTWlncmF0aW9uSW5kZXggPSB7XG4gICAgLi4uaW5kZXgsXG4gICAgY29sdW1ucyxcbiAgICBudWxsc05vdERpc3RpbmN0OiBpbmRleC5udWxsc05vdERpc3RpbmN0ID8/IGZhbHNlLFxuICB9O1xuICBpZiAobm9ybWFsaXplZFVzaW5nKSBub3JtYWxpemVkSW5kZXgudXNpbmcgPSBub3JtYWxpemVkVXNpbmc7XG4gIGlmIChub3JtYWxpemVkV2hlcmUpIG5vcm1hbGl6ZWRJbmRleC53aGVyZSA9IG5vcm1hbGl6ZWRXaGVyZTtcbiAgcmV0dXJuIG5vcm1hbGl6ZWRJbmRleDtcbn1cblxuZnVuY3Rpb24gbWlncmF0aW9uRm9yZWlnbktleShtaWdyYXRpb25Gb3JlaWduOiBNaWdyYXRpb25Gb3JlaWduKTogc3RyaW5nIHtcbiAgcmV0dXJuIFttaWdyYXRpb25Gb3JlaWduLmNvbHVtbnMuam9pbihcIi1cIiksIG1pZ3JhdGlvbkZvcmVpZ24udG9dLmpvaW4oXCIvLy9cIik7XG59XG5cbi8qKlxuICog7YWM7J2067iUIOuzgOqyvSDsvIDsnbTsiqQgLSBGb3JlaWduIEtleSDrs4Dqsr1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVBbHRlckNvZGVfRm9yZWlnbnMoXG4gIHRhYmxlOiBzdHJpbmcsXG4gIGVudGl0eUZvcmVpZ25zOiBNaWdyYXRpb25Gb3JlaWduW10sXG4gIGRiRm9yZWlnbnM6IE1pZ3JhdGlvbkZvcmVpZ25bXSxcbiAgZHJvcHBpbmdDb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXSA9IFtdLFxuKTogUHJvbWlzZTxHZW5NaWdyYXRpb25Db2RlW10+IHtcbiAgLy8gY29uc29sZS5sb2coeyBlbnRpdHlGb3JlaWducywgZGJGb3JlaWducyB9KTtcblxuICAvLyDsgq3soJzrkKAg7Lus65+866qFIOuqqeuhnVxuICBjb25zdCBkcm9wcGluZ0NvbHVtbk5hbWVzID0gZHJvcHBpbmdDb2x1bW5zLm1hcCgoY29sKSA9PiBjb2wubmFtZSk7XG5cbiAgY29uc3QgZmtUbyA9IGVudGl0eUZvcmVpZ25zLnJlZHVjZShcbiAgICAocmVzdWx0LCBlbnRpdHlGKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGluZ0RiRiA9IGRiRm9yZWlnbnMuZmluZChcbiAgICAgICAgKGRiRikgPT4gbWlncmF0aW9uRm9yZWlnbktleShlbnRpdHlGKSA9PT0gbWlncmF0aW9uRm9yZWlnbktleShkYkYpLFxuICAgICAgKTtcbiAgICAgIGlmICghbWF0Y2hpbmdEYkYpIHtcbiAgICAgICAgcmVzdWx0LmFkZC5wdXNoKGVudGl0eUYpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBpZiAoIWVxdWFsKGVudGl0eUYsIG1hdGNoaW5nRGJGKSkge1xuICAgICAgICByZXN1bHQuYWx0ZXJTcmMucHVzaChtYXRjaGluZ0RiRik7XG4gICAgICAgIHJlc3VsdC5hbHRlckRzdC5wdXNoKGVudGl0eUYpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIHtcbiAgICAgIGFkZDogLyogU0FGRVRZOiBLbmV47JmAIFBvc3RncmVTUUwg7Iqk7YKk66eIIOyhsO2ajCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBbXSBhcyBNaWdyYXRpb25Gb3JlaWduW10sXG4gICAgICBkcm9wOiAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIE1pZ3JhdGlvbkZvcmVpZ25bXSxcbiAgICAgIGFsdGVyU3JjOlxuICAgICAgICAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIE1pZ3JhdGlvbkZvcmVpZ25bXSxcbiAgICAgIGFsdGVyRHN0OlxuICAgICAgICAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIE1pZ3JhdGlvbkZvcmVpZ25bXSxcbiAgICB9LFxuICApO1xuXG4gIC8vIGRiRm9yZWlnbnPsl5DripQg7J6I7KeA66eMIGVudGl0eUZvcmVpZ25z7JeQ64qUIOyXhuuKlCDqsr3smrAgKOyCreygnOuQnCBGSylcbiAgLy8g64uoLCDsgq3soJzrkKAg7Lus65+87J2YIEZL64qUIOygnOyZuCAoZ2VuZXJhdGVBbHRlckNvZGVfQ29sdW1uQW5kSW5kZXhlc+yXkOyEnCDsspjrpqwpXG4gIGRiRm9yZWlnbnMuZm9yRWFjaCgoZGJGKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hpbmdFbnRpdHlGID0gZW50aXR5Rm9yZWlnbnMuZmluZChcbiAgICAgIChlbnRpdHlGKSA9PiBtaWdyYXRpb25Gb3JlaWduS2V5KGVudGl0eUYpID09PSBtaWdyYXRpb25Gb3JlaWduS2V5KGRiRiksXG4gICAgKTtcbiAgICBpZiAoIW1hdGNoaW5nRW50aXR5Rikge1xuICAgICAgLy8g7J20IEZL7J2YIOy7rOufvOydtCDsgq3soJzrkKAg7Lus65+8IOuqqeuhneyXkCDsnojripTsp4Ag7ZmV7J24XG4gICAgICBjb25zdCBpc0NvbHVtbkRyb3BwaW5nID0gZGJGLmNvbHVtbnMuc29tZSgoY29sKSA9PiBkcm9wcGluZ0NvbHVtbk5hbWVzLmluY2x1ZGVzKGNvbCkpO1xuICAgICAgLy8g7Lus65+87J20IOyCreygnOuQmOyngCDslYrripQg6rK97Jqw7JeQ66eMIEZLIGRyb3Ag66qp66Gd7JeQIOy2lOqwgFxuICAgICAgaWYgKCFpc0NvbHVtbkRyb3BwaW5nKSB7XG4gICAgICAgIGZrVG8uZHJvcC5wdXNoKGRiRik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBsaW5lc1RvID0ge1xuICAgIGFkZDogZ2VuRm9yZWlnbkRlZmluaXRpb25zKHRhYmxlLCBma1RvLmFkZCksXG4gICAgZHJvcDogZ2VuRm9yZWlnbkRlZmluaXRpb25zKHRhYmxlLCBma1RvLmRyb3ApLFxuICAgIGFsdGVyU3JjOiBnZW5Gb3JlaWduRGVmaW5pdGlvbnModGFibGUsIGZrVG8uYWx0ZXJTcmMpLFxuICAgIGFsdGVyRHN0OiBnZW5Gb3JlaWduRGVmaW5pdGlvbnModGFibGUsIGZrVG8uYWx0ZXJEc3QpLFxuICB9O1xuXG4gIC8vIGRyb3AgZmsgY29sdW1uc+yduCDqsr3smrAo7IOd7ISx65CgIOy9lOuTnCDsl4bripQg6rK97JqwKSDtjKjsiqRcbiAgY29uc3QgaGFzTGluZXMgPSBPYmplY3QudmFsdWVzKGxpbmVzVG8pLnNvbWUoKGwpID0+IGwudXAubGVuZ3RoID4gMCB8fCBsLmRvd24ubGVuZ3RoID4gMCk7XG4gIGlmICghaGFzTGluZXMpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBpZiAoXG4gICAgbGluZXNUby5hZGQudXAubGVuZ3RoID09PSAwICYmXG4gICAgbGluZXNUby5kcm9wLnVwLmxlbmd0aCA9PT0gMCAmJlxuICAgIGxpbmVzVG8uYWx0ZXJTcmMudXAubGVuZ3RoID09PSAwICYmXG4gICAgbGluZXNUby5hbHRlckRzdC51cC5sZW5ndGggPT09IDBcbiAgKSB7XG4gICAgTmFpdGUudChcIm1pZ3JhdG9yOmdlbmVyYXRlQWx0ZXJDb2RlX0ZvcmVpZ25zOmZrQ2hhbmdlQ29kZUdlbmVyYXRpb25FcnJvclwiLCB7XG4gICAgICB0YWJsZSxcbiAgICAgIGVudGl0eUZvcmVpZ25zLFxuICAgICAgZGJGb3JlaWducyxcbiAgICB9KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJGSyDrs4Dqsr0g7L2U65OcIOyDneyEsSDsmKTrpZhcIik7XG4gIH1cblxuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXG4gICAgJ2ltcG9ydCB0eXBlIHsgS25leCB9IGZyb20gXCJrbmV4XCI7JyxcbiAgICBcIlwiLFxuICAgIFwiZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwKGtuZXg6IEtuZXgpOiBQcm9taXNlPHZvaWQ+IHtcIixcbiAgICBgcmV0dXJuIGtuZXguc2NoZW1hLmFsdGVyVGFibGUoXCIke3RhYmxlfVwiLCAodGFibGUpID0+IHtgLFxuICAgIC4uLmxpbmVzVG8uZHJvcC5kb3duLFxuICAgIC4uLmxpbmVzVG8uYWRkLnVwLFxuICAgIC4uLmxpbmVzVG8uYWx0ZXJTcmMuZG93bixcbiAgICAuLi5saW5lc1RvLmFsdGVyRHN0LnVwLFxuICAgIFwifSlcIixcbiAgICBcIn1cIixcbiAgICBcIlwiLFxuICAgIFwiZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvd24oa25leDogS25leCk6IFByb21pc2U8dm9pZD4ge1wiLFxuICAgIGByZXR1cm4ga25leC5zY2hlbWEuYWx0ZXJUYWJsZShcIiR7dGFibGV9XCIsICh0YWJsZSkgPT4ge2AsXG4gICAgLi4ubGluZXNUby5hZGQuZG93bixcbiAgICAuLi5saW5lc1RvLmFsdGVyRHN0LmRvd24sXG4gICAgLi4ubGluZXNUby5hbHRlclNyYy51cCxcbiAgICAuLi5saW5lc1RvLmRyb3AudXAsXG4gICAgXCJ9KVwiLFxuICAgIFwifVwiLFxuICBdO1xuXG4gIGNvbnN0IGZvcm1hdHRlZCA9IGF3YWl0IGZvcm1hdENvZGUobGluZXMuam9pbihcIlxcblwiKSwgYHNyYy9taWdyYXRpb24vJHt0YWJsZX0udHNgKTtcbiAgY29uc3QgdGl0bGUgPSBbXCJhbHRlclwiLCB0YWJsZSwgXCJmb3JlaWduc1wiXS5qb2luKFwiX1wiKTtcblxuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHRhYmxlLFxuICAgICAgdGl0bGUsXG4gICAgICBmb3JtYXR0ZWQsXG4gICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICog7KO87Ja07KeEIEVudGl0eVNldOydhCDquLDrsJjsnLzroZwg7YWM7J2067iUIENSRUFURSDrp4jsnbTqt7jroIjsnbTshZgg7L2U65Oc66W8IOyDneyEse2VqeuLiOuLpC5cbiAqIEBwYXJhbSBlbnRpdHlTZXRcbiAqIEByZXR1cm5zIENSRUFURSDrp4jsnbTqt7jroIjsnbTshZgg7L2U65OcXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUNyZWF0ZUNvZGUoZW50aXR5U2V0OiBNaWdyYXRpb25TZXQpOiBQcm9taXNlPEdlbk1pZ3JhdGlvbkNvZGVbXT4ge1xuICByZXR1cm4gW1xuICAgIGF3YWl0IGdlbmVyYXRlQ3JlYXRlQ29kZV9Db2x1bW5BbmRJbmRleGVzKFxuICAgICAgZW50aXR5U2V0LnRhYmxlLFxuICAgICAgZW50aXR5U2V0LmNvbHVtbnMsXG4gICAgICBlbnRpdHlTZXQuaW5kZXhlcyxcbiAgICApLFxuICAgIC4uLihhd2FpdCBnZW5lcmF0ZUNyZWF0ZUNvZGVfRm9yZWlnbihlbnRpdHlTZXQudGFibGUsIGVudGl0eVNldC5mb3JlaWducykpLFxuICBdO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlQ29sdW1uRGVmYXVsdFRvKGNvbHVtbjogTWlncmF0aW9uQ29sdW1uKSB7XG4gIC8vIEZJWE1FOiDsnbzri6ggTXlTUUwg7IOB7Zmp7JeQ7IScIOuwnOyDne2WiOuNmCDsnbTsiojsnZggd29ya2Fyb3VuZCDsnbTrr4DroZwgUGfsl5DshJwg7J6s7ZmV7J24IO2bhCDrjIDsnZEg7LaU6rCAXG4gIHJldHVybiBjb2x1bW47XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VOb0FjdGlvbk9uTXlTUUwoZm9yZWlnbjogTWlncmF0aW9uRm9yZWlnbikge1xuICAvLyBNeVNRTOyXkOyEnCBSRVNUUklDVOyZgCBOTyBBQ1RJT07snYAg64+Z7J287ZWoXG4gIGNvbnN0IHsgb25EZWxldGUsIG9uVXBkYXRlIH0gPSBmb3JlaWduO1xuICByZXR1cm4ge1xuICAgIC4uLmZvcmVpZ24sXG4gICAgb25VcGRhdGU6IG9uVXBkYXRlID09PSBcIlJFU1RSSUNUXCIgPyBcIk5PIEFDVElPTlwiIDogb25VcGRhdGUsXG4gICAgb25EZWxldGU6IG9uRGVsZXRlID09PSBcIlJFU1RSSUNUXCIgPyBcIk5PIEFDVElPTlwiIDogb25EZWxldGUsXG4gIH07XG59XG5cbi8qKlxuICog7KO87Ja07KeEIGVudGl0eVNldOydhCDrqqntkZzroZwsIGRiU2V07J2EIO2YhCDsg4HtmansnLzroZwg7ZWY7JesIO2FjOydtOu4lCBBTFRFUiDrp4jsnbTqt7jroIjsnbTshZgg7L2U65Oc66W8IOyDneyEse2VqeuLiOuLpC5cbiAqIEBwYXJhbSBlbnRpdHlTZXQg7ZiEIOyDge2ZqeydmCBNaWdyYXRpb25TZXRcbiAqIEBwYXJhbSBkYlNldCDrqqntkZwg7IOB7Zmp7J2YIE1pZ3JhdGlvblNldFxuICogQHBhcmFtIGNvbXBhcmVEQiBQSyDtg4DsnoUg67OA6rK9IOyLnCDsl63ssLjsobAgRkvrpbwg7KGw7ZqM7ZWY6riwIOychO2VnCBLbmV4IOyduOyKpO2EtOyKpCAo7ISg7YOdKVxuICogQHJldHVybnMgQUxURVIg66eI7J206re466CI7J207IWYIOy9lOuTnFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVBbHRlckNvZGUoXG4gIGVudGl0eVNldDogTWlncmF0aW9uU2V0LFxuICBkYlNldDogTWlncmF0aW9uU2V0LFxuICBjb21wYXJlREI/OiBLbmV4LFxuKTogUHJvbWlzZTxHZW5NaWdyYXRpb25Db2RlW10+IHtcbiAgY29uc3QgZW50aXR5Q29sdW1ucyA9IGFscGhhYmV0aWNhbChlbnRpdHlTZXQuY29sdW1ucywgKGEpID0+IGEubmFtZSkubWFwKHJlcGxhY2VDb2x1bW5EZWZhdWx0VG8pO1xuICBjb25zdCBkYkNvbHVtbnMgPSBhbHBoYWJldGljYWwoZGJTZXQuY29sdW1ucywgKGEpID0+IGEubmFtZSkubWFwKHJlcGxhY2VDb2x1bW5EZWZhdWx0VG8pO1xuXG4gIC8qIOuUlOuyhOq5heyaqSDsvZTrk5wsIO2KueyglSDsu6zrn7zsl5DshJwg67aI7J287LmYIOuwnOyDne2VoCDrlYwg7ZmV7J24XG4gICAgICAgIGNvbnN0IGVudGl0eUNvbHVtbiA9IGVudGl0eVNldC5jb2x1bW5zLmZpbmQoXG4gICAgICAgICAgKGNvbCkgPT4gY29sLm5hbWUgPT09IFwicHJpY2Vfa3J3XCJcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZGJDb2x1bW4gPSBkYlNldC5jb2x1bW5zLmZpbmQoXG4gICAgICAgICAgKGNvbCkgPT4gY29sLm5hbWUgPT09IFwicHJpY2Vfa3J3XCJcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS5kZWJ1Zyh7IGVudGl0eUNvbHVtbiwgZGJDb2x1bW4gfSk7XG4gICAgICAgICAqL1xuXG4gIGNvbnN0IGVudGl0eUluZGV4ZXMgPSBhbHBoYWJldGljYWwoZW50aXR5U2V0LmluZGV4ZXMsIChhKSA9PlxuICAgIFthLnR5cGUsIC4uLmEuY29sdW1ucy5tYXAoKGMpID0+IGMubmFtZSldLmpvaW4oXCItXCIpLFxuICApO1xuICBjb25zdCBkYkluZGV4ZXMgPSBhbHBoYWJldGljYWwoZGJTZXQuaW5kZXhlcywgKGEpID0+XG4gICAgW2EudHlwZSwgLi4uYS5jb2x1bW5zLm1hcCgoYykgPT4gYy5uYW1lKV0uam9pbihcIi1cIiksXG4gICk7XG5cbiAgY29uc3QgZW50aXR5Rm9yZWlnbnMgPSBhbHBoYWJldGljYWwoZW50aXR5U2V0LmZvcmVpZ25zLCAoYSkgPT5cbiAgICBbYS50bywgLi4uYS5jb2x1bW5zXS5qb2luKFwiLVwiKSxcbiAgKS5tYXAoKGYpID0+IHJlcGxhY2VOb0FjdGlvbk9uTXlTUUwoZikpO1xuICBjb25zdCBkYkZvcmVpZ25zID0gYWxwaGFiZXRpY2FsKGRiU2V0LmZvcmVpZ25zLCAoYSkgPT4gW2EudG8sIC4uLmEuY29sdW1uc10uam9pbihcIi1cIikpLm1hcCgoZikgPT5cbiAgICByZXBsYWNlTm9BY3Rpb25Pbk15U1FMKGYpLFxuICApO1xuXG4gIC8vIOyCreygnOuQoCDsu6zrn7wg66qp66GdIOqzhOyCsFxuICBjb25zdCBkcm9wcGluZ0NvbHVtbnMgPSBkaWZmKGRiQ29sdW1ucywgZW50aXR5Q29sdW1ucywgKGNvbCkgPT4gY29sLm5hbWUpO1xuXG4gIGNvbnN0IGFsdGVyQ29kZXM6IChHZW5NaWdyYXRpb25Db2RlIHwgR2VuTWlncmF0aW9uQ29kZVtdIHwgbnVsbClbXSA9IFtdO1xuXG4gIC8vIDEuIGNvbHVtbnNBbmRJbmRleGVzIOyymOumrFxuICBjb25zdCBzZWFyY2hUZXh0Q29sdW1uTmFtZXMgPSBnZXRTZWFyY2hUZXh0Q29sdW1uTmFtZXMoZW50aXR5U2V0LnRhYmxlKTtcbiAgY29uc3QgaXNFcXVhbENvbHVtbnMgPSBlcXVhbChcbiAgICBlbnRpdHlDb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBub3JtYWxpemVDb2x1bW5Gb3JDb21wYXJpc29uKGNvbHVtbiwgc2VhcmNoVGV4dENvbHVtbk5hbWVzKSksXG4gICAgZGJDb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBub3JtYWxpemVDb2x1bW5Gb3JDb21wYXJpc29uKGNvbHVtbiwgc2VhcmNoVGV4dENvbHVtbk5hbWVzKSksXG4gICk7XG4gIGNvbnN0IGlzRXF1YWxJbmRleGVzID0gZXF1YWwoXG4gICAgZW50aXR5SW5kZXhlcy5tYXAoc2V0TWlncmF0aW9uSW5kZXhEZWZhdWx0cyksXG4gICAgZGJJbmRleGVzLm1hcChzZXRNaWdyYXRpb25JbmRleERlZmF1bHRzKSxcbiAgKTtcbiAgaWYgKCFpc0VxdWFsQ29sdW1ucyB8fCAhaXNFcXVhbEluZGV4ZXMpIHtcbiAgICBhbHRlckNvZGVzLnB1c2goXG4gICAgICBhd2FpdCBnZW5lcmF0ZUFsdGVyQ29kZV9Db2x1bW5BbmRJbmRleGVzKFxuICAgICAgICBlbnRpdHlTZXQudGFibGUsXG4gICAgICAgIGVudGl0eUNvbHVtbnMsXG4gICAgICAgIGVudGl0eUluZGV4ZXMsXG4gICAgICAgIGRiQ29sdW1ucyxcbiAgICAgICAgZGJJbmRleGVzLFxuICAgICAgICBkYlNldC5mb3JlaWducyxcbiAgICAgICAgY29tcGFyZURCLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgLy8gMi4gZm9yZWlnbnMg7LKY66asICjsgq3soJzrkKAg7Lus65+8IOygleuztCDsoITri6wpXG4gIGlmICghZXF1YWwoZW50aXR5Rm9yZWlnbnMsIGRiRm9yZWlnbnMpKSB7XG4gICAgYWx0ZXJDb2Rlcy5wdXNoKFxuICAgICAgYXdhaXQgZ2VuZXJhdGVBbHRlckNvZGVfRm9yZWlnbnMoXG4gICAgICAgIGVudGl0eVNldC50YWJsZSxcbiAgICAgICAgZW50aXR5Rm9yZWlnbnMsXG4gICAgICAgIGRiRm9yZWlnbnMsXG4gICAgICAgIGRyb3BwaW5nQ29sdW1ucyxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIGlmIChhbHRlckNvZGVzLmV2ZXJ5KChhbHRlckNvZGUpID0+IGFsdGVyQ29kZSA9PT0gbnVsbCkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gYWx0ZXJDb2Rlcy5maWx0ZXIoKGFsdGVyQ29kZSkgPT4gYWx0ZXJDb2RlICE9PSBudWxsKS5mbGF0KCk7XG59XG5cbi8qKlxuICogUEsg7YOA7J6FIOuzgOqyvSDsi5wg7Jet7LC47KGwIEZLIOygnOyVveyhsOqxtOydhCDsspjrpqztlZjripQg66eI7J206re466CI7J207IWYIOy9lOuTnOulvCDsg53shLHtlanri4jri6QuXG4gKlxuICogUEsg7YOA7J6FIOuzgOqyvSDsi5wg7Iic7IScOlxuICogMS4gRksg7KCc7JW97KGw6rG0IOyCreygnCAo7Jet7LC47KGwIO2FjOydtOu4lOuTpClcbiAqIDIuIOyekOq4sCDssLjsobAgRksg7IKt7KCcICjsnojripQg6rK97JqwKVxuICogMy4gUEsg7KCc7JW97KGw6rG0IOyCreygnFxuICogNC4gUEsg7Lus65+8IO2DgOyehSDrs4Dqsr1cbiAqIDUuIEZLIOy7rOufvCDtg4DsnoUg67OA6rK9ICjsl63ssLjsobAg7YWM7J2067iU65OkKVxuICogNi4gUEsg7KCc7JW97KGw6rG0IOuzteq1rFxuICogNy4g7J6Q6riwIOywuOyhsCBGSyDrs7XqtaxcbiAqIDguIEZLIOygnOyVveyhsOqxtCDrs7XqtaxcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVQa1R5cGVDaGFuZ2VNaWdyYXRpb24oXG4gIHRhYmxlOiBzdHJpbmcsXG4gIGVudGl0eUlkQ29sOiBNaWdyYXRpb25Db2x1bW4sXG4gIGRiSWRDb2w6IE1pZ3JhdGlvbkNvbHVtbixcbiAgX2VudGl0eUNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdLFxuICBfZW50aXR5SW5kZXhlczogTWlncmF0aW9uSW5kZXhbXSxcbiAgX2RiQ29sdW1uczogTWlncmF0aW9uQ29sdW1uW10sXG4gIF9kYkluZGV4ZXM6IE1pZ3JhdGlvbkluZGV4W10sXG4gIF9kYkZvcmVpZ25zOiBNaWdyYXRpb25Gb3JlaWduW10sXG4gIGNvbXBhcmVEQjogS25leCxcbik6IFByb21pc2U8R2VuTWlncmF0aW9uQ29kZVtdPiB7XG4gIC8vIOyXreywuOyhsCBGSyDsobDtmowgKOydtCDthYzsnbTruJTsnZggUEvrpbwg7LC47KGw7ZWY64qUIOuLpOuluCDthYzsnbTruJTsnZggRkvrk6QpXG4gIGNvbnN0IHJlZmVyZW5jaW5nRktzID0gYXdhaXQgUG9zdGdyZVNRTFNjaGVtYVJlYWRlci5nZXRSZWZlcmVuY2luZ0ZvcmVpZ25LZXlzKGNvbXBhcmVEQiwgdGFibGUpO1xuXG4gIC8vIOyekOq4sCDssLjsobAgRksg67aE66asICjsmIg6IERlcGFydG1lbnQucGFyZW50X2lkIOKGkiBEZXBhcnRtZW50LmlkKVxuICBjb25zdCBzZWxmUmVmZXJlbmNpbmdGS3MgPSByZWZlcmVuY2luZ0ZLcy5maWx0ZXIoKGZrKSA9PiBmay50YWJsZU5hbWUgPT09IHRhYmxlKTtcbiAgY29uc3QgZXh0ZXJuYWxSZWZlcmVuY2luZ0ZLcyA9IHJlZmVyZW5jaW5nRktzLmZpbHRlcigoZmspID0+IGZrLnRhYmxlTmFtZSAhPT0gdGFibGUpO1xuXG4gIC8vIFBLIOygnOyVveyhsOqxtCDsnbTrpoQg7KGw7ZqMXG4gIGNvbnN0IHBrQ29uc3RyYWludE5hbWUgPSBgJHt0YWJsZX1fcGtleWA7XG5cbiAgLy8g7IOIIFBLIO2DgOyeheyXkCDrp57ripQgUG9zdGdyZVNRTCDtg4DsnoUg66y47J6Q7Je0XG4gIGNvbnN0IG5ld1BrUGdUeXBlID0gZ2V0UGtQZ1R5cGUoZW50aXR5SWRDb2wpO1xuICBjb25zdCBvbGRQa1BnVHlwZSA9IGdldFBrUGdUeXBlKGRiSWRDb2wpO1xuXG4gIC8vIFVQIOy9lOuTnCDsg53shLFcbiAgY29uc3QgdXBMaW5lczogc3RyaW5nW10gPSBbXTtcblxuICAvLyAxLiDsmbjrtoAg7YWM7J2067iU7J2YIEZLIOygnOyVveyhsOqxtCDsgq3soJxcbiAgZm9yIChjb25zdCBmayBvZiBleHRlcm5hbFJlZmVyZW5jaW5nRktzKSB7XG4gICAgdXBMaW5lcy5wdXNoKGAgIC8vICR7ZmsudGFibGVOYW1lfS4ke2ZrLmNvbHVtbk5hbWV9IEZLIOygnOyVveyhsOqxtCDsgq3soJxgKTtcbiAgICB1cExpbmVzLnB1c2goXG4gICAgICBgICBhd2FpdCBrbmV4LnJhdygnQUxURVIgVEFCTEUgXCIke2ZrLnRhYmxlTmFtZX1cIiBEUk9QIENPTlNUUkFJTlQgXCIke2ZrLmNvbnN0cmFpbnROYW1lfVwiJyk7YCxcbiAgICApO1xuICB9XG5cbiAgLy8gMi4g7J6Q6riwIOywuOyhsCBGSyDsgq3soJxcbiAgZm9yIChjb25zdCBmayBvZiBzZWxmUmVmZXJlbmNpbmdGS3MpIHtcbiAgICB1cExpbmVzLnB1c2goYCAgLy8g7J6Q6riwIOywuOyhsCBGSyDsgq3soJw6ICR7ZmsuY29sdW1uTmFtZX1gKTtcbiAgICB1cExpbmVzLnB1c2goXG4gICAgICBgICBhd2FpdCBrbmV4LnJhdygnQUxURVIgVEFCTEUgXCIke3RhYmxlfVwiIERST1AgQ09OU1RSQUlOVCBcIiR7ZmsuY29uc3RyYWludE5hbWV9XCInKTtgLFxuICAgICk7XG4gIH1cblxuICAvLyAzLiBQSyDsoJzslb3sobDqsbQg7IKt7KCcXG4gIHVwTGluZXMucHVzaChgICAvLyBQSyDsoJzslb3sobDqsbQg7IKt7KCcYCk7XG4gIHVwTGluZXMucHVzaChgICBhd2FpdCBrbmV4LnJhdygnQUxURVIgVEFCTEUgXCIke3RhYmxlfVwiIERST1AgQ09OU1RSQUlOVCBcIiR7cGtDb25zdHJhaW50TmFtZX1cIicpO2ApO1xuXG4gIC8vIDQuIFBLIOy7rOufvCDtg4DsnoUg67OA6rK9XG4gIHVwTGluZXMucHVzaChgICAvLyBQSyDsu6zrn7wg7YOA7J6FIOuzgOqyvWApO1xuICB1cExpbmVzLnB1c2goXG4gICAgYCAgYXdhaXQga25leC5yYXcoJ0FMVEVSIFRBQkxFIFwiJHt0YWJsZX1cIiBBTFRFUiBDT0xVTU4gXCJpZFwiIFRZUEUgJHtuZXdQa1BnVHlwZX0gVVNJTkcgXCJpZFwiOjoke25ld1BrUGdUeXBlfScpO2AsXG4gICk7XG5cbiAgLy8gNS4gRksg7Lus65+8IO2DgOyehSDrs4Dqsr0gKOyXreywuOyhsCDthYzsnbTruJTrk6QpIC0g7J6Q6riwIOywuOyhsCDtj6ztlahcbiAgZm9yIChjb25zdCBmayBvZiByZWZlcmVuY2luZ0ZLcykge1xuICAgIHVwTGluZXMucHVzaChgICAvLyAke2ZrLnRhYmxlTmFtZX0uJHtmay5jb2x1bW5OYW1lfSDsu6zrn7wg7YOA7J6FIOuzgOqyvWApO1xuICAgIHVwTGluZXMucHVzaChcbiAgICAgIGAgIGF3YWl0IGtuZXgucmF3KCdBTFRFUiBUQUJMRSBcIiR7ZmsudGFibGVOYW1lfVwiIEFMVEVSIENPTFVNTiBcIiR7ZmsuY29sdW1uTmFtZX1cIiBUWVBFICR7bmV3UGtQZ1R5cGV9IFVTSU5HIFwiJHtmay5jb2x1bW5OYW1lfVwiOjoke25ld1BrUGdUeXBlfScpO2AsXG4gICAgKTtcbiAgfVxuXG4gIC8vIDYuIFBLIOygnOyVveyhsOqxtCDrs7XqtaxcbiAgdXBMaW5lcy5wdXNoKGAgIC8vIFBLIOygnOyVveyhsOqxtCDrs7XqtaxgKTtcbiAgdXBMaW5lcy5wdXNoKFxuICAgIGAgIGF3YWl0IGtuZXgucmF3KCdBTFRFUiBUQUJMRSBcIiR7dGFibGV9XCIgQUREIENPTlNUUkFJTlQgXCIke3BrQ29uc3RyYWludE5hbWV9XCIgUFJJTUFSWSBLRVkgKFwiaWRcIiknKTtgLFxuICApO1xuXG4gIC8vIDcuIOyekOq4sCDssLjsobAgRksg67O16rWsXG4gIGZvciAoY29uc3QgZmsgb2Ygc2VsZlJlZmVyZW5jaW5nRktzKSB7XG4gICAgdXBMaW5lcy5wdXNoKGAgIC8vIOyekOq4sCDssLjsobAgRksg67O16rWsOiAke2ZrLmNvbHVtbk5hbWV9YCk7XG4gICAgdXBMaW5lcy5wdXNoKFxuICAgICAgYCAgYXdhaXQga25leC5yYXcoJ0FMVEVSIFRBQkxFIFwiJHt0YWJsZX1cIiBBREQgQ09OU1RSQUlOVCBcIiR7ZmsuY29uc3RyYWludE5hbWV9XCIgRk9SRUlHTiBLRVkgKFwiJHtmay5jb2x1bW5OYW1lfVwiKSBSRUZFUkVOQ0VTIFwiJHt0YWJsZX1cIihcImlkXCIpIE9OIFVQREFURSAke2ZrLm9uVXBkYXRlfSBPTiBERUxFVEUgJHtmay5vbkRlbGV0ZX0nKTtgLFxuICAgICk7XG4gIH1cblxuICAvLyA4LiDsmbjrtoAg7YWM7J2067iU7J2YIEZLIOygnOyVveyhsOqxtCDrs7XqtaxcbiAgZm9yIChjb25zdCBmayBvZiBleHRlcm5hbFJlZmVyZW5jaW5nRktzKSB7XG4gICAgdXBMaW5lcy5wdXNoKGAgIC8vICR7ZmsudGFibGVOYW1lfS4ke2ZrLmNvbHVtbk5hbWV9IEZLIOygnOyVveyhsOqxtCDrs7XqtaxgKTtcbiAgICB1cExpbmVzLnB1c2goXG4gICAgICBgICBhd2FpdCBrbmV4LnJhdygnQUxURVIgVEFCTEUgXCIke2ZrLnRhYmxlTmFtZX1cIiBBREQgQ09OU1RSQUlOVCBcIiR7ZmsuY29uc3RyYWludE5hbWV9XCIgRk9SRUlHTiBLRVkgKFwiJHtmay5jb2x1bW5OYW1lfVwiKSBSRUZFUkVOQ0VTIFwiJHt0YWJsZX1cIihcImlkXCIpIE9OIFVQREFURSAke2ZrLm9uVXBkYXRlfSBPTiBERUxFVEUgJHtmay5vbkRlbGV0ZX0nKTtgLFxuICAgICk7XG4gIH1cblxuICAvLyBET1dOIOy9lOuTnCDsg53shLEgKOyXreyInClcbiAgY29uc3QgZG93bkxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIDEuIOyZuOu2gCDthYzsnbTruJTsnZggRksg7KCc7JW97KGw6rG0IOyCreygnFxuICBmb3IgKGNvbnN0IGZrIG9mIGV4dGVybmFsUmVmZXJlbmNpbmdGS3MpIHtcbiAgICBkb3duTGluZXMucHVzaChgICAvLyAke2ZrLnRhYmxlTmFtZX0uJHtmay5jb2x1bW5OYW1lfSBGSyDsoJzslb3sobDqsbQg7IKt7KCcYCk7XG4gICAgZG93bkxpbmVzLnB1c2goXG4gICAgICBgICBhd2FpdCBrbmV4LnJhdygnQUxURVIgVEFCTEUgXCIke2ZrLnRhYmxlTmFtZX1cIiBEUk9QIENPTlNUUkFJTlQgXCIke2ZrLmNvbnN0cmFpbnROYW1lfVwiJyk7YCxcbiAgICApO1xuICB9XG5cbiAgLy8gMi4g7J6Q6riwIOywuOyhsCBGSyDsgq3soJxcbiAgZm9yIChjb25zdCBmayBvZiBzZWxmUmVmZXJlbmNpbmdGS3MpIHtcbiAgICBkb3duTGluZXMucHVzaChgICAvLyDsnpDquLAg7LC47KGwIEZLIOyCreygnDogJHtmay5jb2x1bW5OYW1lfWApO1xuICAgIGRvd25MaW5lcy5wdXNoKFxuICAgICAgYCAgYXdhaXQga25leC5yYXcoJ0FMVEVSIFRBQkxFIFwiJHt0YWJsZX1cIiBEUk9QIENPTlNUUkFJTlQgXCIke2ZrLmNvbnN0cmFpbnROYW1lfVwiJyk7YCxcbiAgICApO1xuICB9XG5cbiAgLy8gMy4gUEsg7KCc7JW97KGw6rG0IOyCreygnFxuICBkb3duTGluZXMucHVzaChgICAvLyBQSyDsoJzslb3sobDqsbQg7IKt7KCcYCk7XG4gIGRvd25MaW5lcy5wdXNoKFxuICAgIGAgIGF3YWl0IGtuZXgucmF3KCdBTFRFUiBUQUJMRSBcIiR7dGFibGV9XCIgRFJPUCBDT05TVFJBSU5UIFwiJHtwa0NvbnN0cmFpbnROYW1lfVwiJyk7YCxcbiAgKTtcblxuICAvLyA0LiBQSyDsu6zrn7wg7YOA7J6FIOybkOuztVxuICBkb3duTGluZXMucHVzaChgICAvLyBQSyDsu6zrn7wg7YOA7J6FIOybkOuztWApO1xuICBkb3duTGluZXMucHVzaChcbiAgICBgICBhd2FpdCBrbmV4LnJhdygnQUxURVIgVEFCTEUgXCIke3RhYmxlfVwiIEFMVEVSIENPTFVNTiBcImlkXCIgVFlQRSAke29sZFBrUGdUeXBlfSBVU0lORyBcImlkXCI6OiR7b2xkUGtQZ1R5cGV9Jyk7YCxcbiAgKTtcblxuICAvLyA1LiBGSyDsu6zrn7wg7YOA7J6FIOybkOuztSAo7Jet7LC47KGwIO2FjOydtOu4lOuTpClcbiAgZm9yIChjb25zdCBmayBvZiByZWZlcmVuY2luZ0ZLcykge1xuICAgIGRvd25MaW5lcy5wdXNoKGAgIC8vICR7ZmsudGFibGVOYW1lfS4ke2ZrLmNvbHVtbk5hbWV9IOy7rOufvCDtg4DsnoUg7JuQ67O1YCk7XG4gICAgZG93bkxpbmVzLnB1c2goXG4gICAgICBgICBhd2FpdCBrbmV4LnJhdygnQUxURVIgVEFCTEUgXCIke2ZrLnRhYmxlTmFtZX1cIiBBTFRFUiBDT0xVTU4gXCIke2ZrLmNvbHVtbk5hbWV9XCIgVFlQRSAke29sZFBrUGdUeXBlfSBVU0lORyBcIiR7ZmsuY29sdW1uTmFtZX1cIjo6JHtvbGRQa1BnVHlwZX0nKTtgLFxuICAgICk7XG4gIH1cblxuICAvLyA2LiBQSyDsoJzslb3sobDqsbQg67O16rWsXG4gIGRvd25MaW5lcy5wdXNoKGAgIC8vIFBLIOygnOyVveyhsOqxtCDrs7XqtaxgKTtcbiAgZG93bkxpbmVzLnB1c2goXG4gICAgYCAgYXdhaXQga25leC5yYXcoJ0FMVEVSIFRBQkxFIFwiJHt0YWJsZX1cIiBBREQgQ09OU1RSQUlOVCBcIiR7cGtDb25zdHJhaW50TmFtZX1cIiBQUklNQVJZIEtFWSAoXCJpZFwiKScpO2AsXG4gICk7XG5cbiAgLy8gNy4g7J6Q6riwIOywuOyhsCBGSyDrs7XqtaxcbiAgZm9yIChjb25zdCBmayBvZiBzZWxmUmVmZXJlbmNpbmdGS3MpIHtcbiAgICBkb3duTGluZXMucHVzaChgICAvLyDsnpDquLAg7LC47KGwIEZLIOuzteq1rDogJHtmay5jb2x1bW5OYW1lfWApO1xuICAgIGRvd25MaW5lcy5wdXNoKFxuICAgICAgYCAgYXdhaXQga25leC5yYXcoJ0FMVEVSIFRBQkxFIFwiJHt0YWJsZX1cIiBBREQgQ09OU1RSQUlOVCBcIiR7ZmsuY29uc3RyYWludE5hbWV9XCIgRk9SRUlHTiBLRVkgKFwiJHtmay5jb2x1bW5OYW1lfVwiKSBSRUZFUkVOQ0VTIFwiJHt0YWJsZX1cIihcImlkXCIpIE9OIFVQREFURSAke2ZrLm9uVXBkYXRlfSBPTiBERUxFVEUgJHtmay5vbkRlbGV0ZX0nKTtgLFxuICAgICk7XG4gIH1cblxuICAvLyA4LiDsmbjrtoAg7YWM7J2067iU7J2YIEZLIOygnOyVveyhsOqxtCDrs7XqtaxcbiAgZm9yIChjb25zdCBmayBvZiBleHRlcm5hbFJlZmVyZW5jaW5nRktzKSB7XG4gICAgZG93bkxpbmVzLnB1c2goYCAgLy8gJHtmay50YWJsZU5hbWV9LiR7ZmsuY29sdW1uTmFtZX0gRksg7KCc7JW97KGw6rG0IOuzteq1rGApO1xuICAgIGRvd25MaW5lcy5wdXNoKFxuICAgICAgYCAgYXdhaXQga25leC5yYXcoJ0FMVEVSIFRBQkxFIFwiJHtmay50YWJsZU5hbWV9XCIgQUREIENPTlNUUkFJTlQgXCIke2ZrLmNvbnN0cmFpbnROYW1lfVwiIEZPUkVJR04gS0VZIChcIiR7ZmsuY29sdW1uTmFtZX1cIikgUkVGRVJFTkNFUyBcIiR7dGFibGV9XCIoXCJpZFwiKSBPTiBVUERBVEUgJHtmay5vblVwZGF0ZX0gT04gREVMRVRFICR7Zmsub25EZWxldGV9Jyk7YCxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW1xuICAgICdpbXBvcnQgdHlwZSB7IEtuZXggfSBmcm9tIFwia25leFwiOycsXG4gICAgXCJcIixcbiAgICBcImV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cChrbmV4OiBLbmV4KTogUHJvbWlzZTx2b2lkPiB7XCIsXG4gICAgLi4udXBMaW5lcyxcbiAgICBcIn1cIixcbiAgICBcIlwiLFxuICAgIFwiZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvd24oa25leDogS25leCk6IFByb21pc2U8dm9pZD4ge1wiLFxuICAgIC4uLmRvd25MaW5lcyxcbiAgICBcIn1cIixcbiAgXTtcblxuICBjb25zdCBmb3JtYXR0ZWQgPSBhd2FpdCBmb3JtYXRDb2RlKGxpbmVzLmpvaW4oXCJcXG5cIiksIGBzcmMvbWlncmF0aW9uLyR7dGFibGV9LnRzYCk7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICB0YWJsZSxcbiAgICAgIHRpdGxlOiBgYWx0ZXJfJHt0YWJsZX1fcGtfdHlwZWAsXG4gICAgICBmb3JtYXR0ZWQsXG4gICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICogUEsg7Lus65+87J2YIFBvc3RncmVTUUwg7YOA7J6FIOusuOyekOyXtOydhCDrsJjtmZjtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIGdldFBrUGdUeXBlKGNvbDogTWlncmF0aW9uQ29sdW1uKTogc3RyaW5nIHtcbiAgaWYgKGNvbC50eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGNvbC5sZW5ndGggIT09IHVuZGVmaW5lZCA/IGB2YXJjaGFyKCR7Y29sLmxlbmd0aH0pYCA6IFwidGV4dFwiO1xuICB9XG4gIGlmIChjb2wudHlwZSA9PT0gXCJ1dWlkXCIpIHtcbiAgICByZXR1cm4gXCJ1dWlkXCI7XG4gIH1cbiAgLy8gaW50ZWdlcuydmCDqsr3smrAgc2VyaWFsL2ludGVnZXIg6rWs67aE7J20IO2VhOyalO2VmOyngOunjCxcbiAgLy8g7YOA7J6FIOuzgOqyvSDsi5zsl5DripQgaW50ZWdlcuuhnCDsspjrpqztlanri4jri6QuXG4gIHJldHVybiBcImludGVnZXJcIjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBbVNBLFNBQVMsc0JBQXNCLFFBQStEO0NBQzVGLE9BQU8sT0FBTyxXQUFXLE9BQU87QUFDbEM7QUFFQSxTQUFTLDZCQUE2QixZQUFpRDtDQUNyRixNQUFNLFNBQXNDLENBQUM7Q0FDN0MsSUFBSSxRQUFRO0NBRVosT0FBTyxRQUFRLFdBQVcsUUFBUTtFQUNoQyxNQUFNLE9BQU8sV0FBVztFQUV4QixJQUFJLFNBQVMsUUFDWDtFQUdGLElBQUksS0FBSyxLQUFLLElBQUksR0FBRztHQUNuQixTQUFTO0dBQ1Q7RUFDRjtFQUVBLElBQUksV0FBVyxXQUFXLE1BQU0sS0FBSyxHQUFHO0dBQ3RDLE9BQU8sS0FBSztJQUFFLE1BQU07SUFBWSxPQUFPO0dBQUssQ0FBQztHQUM3QyxTQUFTO0dBQ1Q7RUFDRjtFQUVBLElBQUksV0FBVyxXQUFXLE1BQU0sS0FBSyxHQUFHO0dBQ3RDLE9BQU8sS0FBSztJQUFFLE1BQU07SUFBWSxPQUFPO0dBQUssQ0FBQztHQUM3QyxTQUFTO0dBQ1Q7RUFDRjtFQUVBLElBQUksU0FBUyxPQUFPLFNBQVMsT0FBTyxTQUFTLEtBQUs7R0FDaEQsT0FBTyxLQUFLO0lBQUUsTUFBTTtJQUFVLE9BQU87R0FB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