@expcluster/permission-groups 7.0.1

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 (91) hide show
  1. package/LICENSE.md +21 -0
  2. package/controller.ts +434 -0
  3. package/dist/browser/messages.d.ts +527 -0
  4. package/dist/browser/messages.d.ts.map +1 -0
  5. package/dist/browser/messages.js +561 -0
  6. package/dist/browser/messages.js.map +1 -0
  7. package/dist/browser/package.json +49 -0
  8. package/dist/browser/tsconfig.browser.tsbuildinfo +1 -0
  9. package/dist/browser/web/components/AssignmentForm.d.ts +7 -0
  10. package/dist/browser/web/components/AssignmentForm.d.ts.map +1 -0
  11. package/dist/browser/web/components/AssignmentForm.js +29 -0
  12. package/dist/browser/web/components/AssignmentForm.js.map +1 -0
  13. package/dist/browser/web/components/AssignmentsTable.d.ts +2 -0
  14. package/dist/browser/web/components/AssignmentsTable.d.ts.map +1 -0
  15. package/dist/browser/web/components/AssignmentsTable.js +61 -0
  16. package/dist/browser/web/components/AssignmentsTable.js.map +1 -0
  17. package/dist/browser/web/components/DeleteConfirm.d.ts +6 -0
  18. package/dist/browser/web/components/DeleteConfirm.d.ts.map +1 -0
  19. package/dist/browser/web/components/DeleteConfirm.js +7 -0
  20. package/dist/browser/web/components/DeleteConfirm.js.map +1 -0
  21. package/dist/browser/web/components/GroupForm.d.ts +5 -0
  22. package/dist/browser/web/components/GroupForm.d.ts.map +1 -0
  23. package/dist/browser/web/components/GroupForm.js +22 -0
  24. package/dist/browser/web/components/GroupForm.js.map +1 -0
  25. package/dist/browser/web/components/GroupViewPage.d.ts +2 -0
  26. package/dist/browser/web/components/GroupViewPage.d.ts.map +1 -0
  27. package/dist/browser/web/components/GroupViewPage.js +161 -0
  28. package/dist/browser/web/components/GroupViewPage.js.map +1 -0
  29. package/dist/browser/web/components/GroupsTable.d.ts +2 -0
  30. package/dist/browser/web/components/GroupsTable.d.ts.map +1 -0
  31. package/dist/browser/web/components/GroupsTable.js +29 -0
  32. package/dist/browser/web/components/GroupsTable.js.map +1 -0
  33. package/dist/browser/web/components/RoleMappingForm.d.ts +7 -0
  34. package/dist/browser/web/components/RoleMappingForm.d.ts.map +1 -0
  35. package/dist/browser/web/components/RoleMappingForm.js +32 -0
  36. package/dist/browser/web/components/RoleMappingForm.js.map +1 -0
  37. package/dist/browser/web/components/RoleMappingsTable.d.ts +2 -0
  38. package/dist/browser/web/components/RoleMappingsTable.d.ts.map +1 -0
  39. package/dist/browser/web/components/RoleMappingsTable.js +64 -0
  40. package/dist/browser/web/components/RoleMappingsTable.js.map +1 -0
  41. package/dist/browser/web/index.d.ts +13 -0
  42. package/dist/browser/web/index.d.ts.map +1 -0
  43. package/dist/browser/web/index.js +60 -0
  44. package/dist/browser/web/index.js.map +1 -0
  45. package/dist/node/controller.d.ts +37 -0
  46. package/dist/node/controller.d.ts.map +1 -0
  47. package/dist/node/controller.js +372 -0
  48. package/dist/node/controller.js.map +1 -0
  49. package/dist/node/index.d.ts +10 -0
  50. package/dist/node/index.d.ts.map +1 -0
  51. package/dist/node/index.js +196 -0
  52. package/dist/node/index.js.map +1 -0
  53. package/dist/node/instance.d.ts +40 -0
  54. package/dist/node/instance.d.ts.map +1 -0
  55. package/dist/node/instance.js +155 -0
  56. package/dist/node/instance.js.map +1 -0
  57. package/dist/node/messages.d.ts +527 -0
  58. package/dist/node/messages.d.ts.map +1 -0
  59. package/dist/node/messages.js +620 -0
  60. package/dist/node/messages.js.map +1 -0
  61. package/dist/node/tsconfig.node.tsbuildinfo +1 -0
  62. package/dist/web/manifest.json +10 -0
  63. package/dist/web/static/exp_groups.afefd90b210f7c8e0df2.js +543 -0
  64. package/dist/web/static/index_ts.f7d30aa0c13ff0be393a.js +22 -0
  65. package/dist/web/static/main.c2178975889c1c720e80.js +653 -0
  66. package/dist/web/static/messages_ts.65a81c17fb37953c5d68.js +22 -0
  67. package/dist/web/static/package_json.aab0d3f37da0567c250c.js +22 -0
  68. package/dist/web/static/vendors-node_modules_pnpm_ant-design_icons_6_2_3_rea_94b50600dfe79448cabf92d130d83059_node_mo-c79f54.cf768c64b40c811ce6c9.js +273 -0
  69. package/dist/web/static/vendors-node_modules_pnpm_sinclair_typebox_0_30_4_node_modules_sinclair_typebox_typebox_js.7fa46fac84f2e9324e54.js +22 -0
  70. package/dist/web/static/web_index_tsx-webpack_sharing_consume_default_react.b4766180f4d467b7b24f.js +102 -0
  71. package/index.ts +183 -0
  72. package/instance.ts +171 -0
  73. package/messages.ts +692 -0
  74. package/module/control.lua +438 -0
  75. package/module/globals.lua +11 -0
  76. package/module/module.json +12 -0
  77. package/module/module_exports.lua +3 -0
  78. package/package.json +47 -0
  79. package/tsconfig.browser.json +4 -0
  80. package/tsconfig.json +7 -0
  81. package/tsconfig.node.json +5 -0
  82. package/web/components/AssignmentForm.tsx +74 -0
  83. package/web/components/AssignmentsTable.tsx +111 -0
  84. package/web/components/DeleteConfirm.tsx +16 -0
  85. package/web/components/GroupForm.tsx +45 -0
  86. package/web/components/GroupViewPage.tsx +287 -0
  87. package/web/components/GroupsTable.tsx +49 -0
  88. package/web/components/RoleMappingForm.tsx +106 -0
  89. package/web/components/RoleMappingsTable.tsx +107 -0
  90. package/web/index.tsx +108 -0
  91. package/webpack.config.js +34 -0
@@ -0,0 +1,653 @@
1
+ /*
2
+ * ATTENTION: An "eval-source-map" devtool has been used.
3
+ * This devtool is neither made for production nor for readable output files.
4
+ * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
5
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
6
+ * or disable the default devtool with "devtool: false".
7
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
8
+ */
9
+ /******/ (() => { // webpackBootstrap
10
+ /******/ "use strict";
11
+ /******/ var __webpack_modules__ = ({
12
+
13
+ /***/ 686
14
+ /*!***********************************************************************************************************!*\
15
+ !*** ../../../node_modules/.pnpm/@ant-design+colors@8.0.1/node_modules/@ant-design/colors/es/generate.js ***!
16
+ \***********************************************************************************************************/
17
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
18
+
19
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ generate)\n/* harmony export */ });\n/* harmony import */ var _ant_design_fast_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ant-design/fast-color */ 82);\n\nconst hueStep = 2; // 色相阶梯\nconst saturationStep = 0.16; // 饱和度阶梯,浅色部分\nconst saturationStep2 = 0.05; // 饱和度阶梯,深色部分\nconst brightnessStep1 = 0.05; // 亮度阶梯,浅色部分\nconst brightnessStep2 = 0.15; // 亮度阶梯,深色部分\nconst lightColorCount = 5; // 浅色数量,主色上\nconst darkColorCount = 4; // 深色数量,主色下\n\n// 暗色主题颜色映射关系表\nconst darkColorMap = [{\n index: 7,\n amount: 15\n}, {\n index: 6,\n amount: 25\n}, {\n index: 5,\n amount: 30\n}, {\n index: 5,\n amount: 45\n}, {\n index: 5,\n amount: 65\n}, {\n index: 5,\n amount: 85\n}, {\n index: 4,\n amount: 90\n}, {\n index: 3,\n amount: 95\n}, {\n index: 2,\n amount: 97\n}, {\n index: 1,\n amount: 98\n}];\nfunction getHue(hsv, i, light) {\n let hue;\n // 根据色相不同,色相转向不同\n if (Math.round(hsv.h) >= 60 && Math.round(hsv.h) <= 240) {\n hue = light ? Math.round(hsv.h) - hueStep * i : Math.round(hsv.h) + hueStep * i;\n } else {\n hue = light ? Math.round(hsv.h) + hueStep * i : Math.round(hsv.h) - hueStep * i;\n }\n if (hue < 0) {\n hue += 360;\n } else if (hue >= 360) {\n hue -= 360;\n }\n return hue;\n}\nfunction getSaturation(hsv, i, light) {\n // grey color don't change saturation\n if (hsv.h === 0 && hsv.s === 0) {\n return hsv.s;\n }\n let saturation;\n if (light) {\n saturation = hsv.s - saturationStep * i;\n } else if (i === darkColorCount) {\n saturation = hsv.s + saturationStep;\n } else {\n saturation = hsv.s + saturationStep2 * i;\n }\n // 边界值修正\n if (saturation > 1) {\n saturation = 1;\n }\n // 第一格的 s 限制在 0.06-0.1 之间\n if (light && i === lightColorCount && saturation > 0.1) {\n saturation = 0.1;\n }\n if (saturation < 0.06) {\n saturation = 0.06;\n }\n return Math.round(saturation * 100) / 100;\n}\nfunction getValue(hsv, i, light) {\n let value;\n if (light) {\n value = hsv.v + brightnessStep1 * i;\n } else {\n value = hsv.v - brightnessStep2 * i;\n }\n // Clamp value between 0 and 1\n value = Math.max(0, Math.min(1, value));\n return Math.round(value * 100) / 100;\n}\nfunction generate(color, opts = {}) {\n const patterns = [];\n const pColor = new _ant_design_fast_color__WEBPACK_IMPORTED_MODULE_0__.FastColor(color);\n const hsv = pColor.toHsv();\n for (let i = lightColorCount; i > 0; i -= 1) {\n const c = new _ant_design_fast_color__WEBPACK_IMPORTED_MODULE_0__.FastColor({\n h: getHue(hsv, i, true),\n s: getSaturation(hsv, i, true),\n v: getValue(hsv, i, true)\n });\n patterns.push(c);\n }\n patterns.push(pColor);\n for (let i = 1; i <= darkColorCount; i += 1) {\n const c = new _ant_design_fast_color__WEBPACK_IMPORTED_MODULE_0__.FastColor({\n h: getHue(hsv, i),\n s: getSaturation(hsv, i),\n v: getValue(hsv, i)\n });\n patterns.push(c);\n }\n\n // dark theme patterns\n if (opts.theme === 'dark') {\n return darkColorMap.map(({\n index,\n amount\n }) => new _ant_design_fast_color__WEBPACK_IMPORTED_MODULE_0__.FastColor(opts.backgroundColor || '#141414').mix(patterns[index], amount).toHexString());\n }\n return patterns.map(c => c.toHexString());\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg2LmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQW1EO0FBQ25ELG1CQUFtQjtBQUNuQiw2QkFBNkI7QUFDN0IsOEJBQThCO0FBQzlCLDhCQUE4QjtBQUM5Qiw4QkFBOEI7QUFDOUIsMkJBQTJCO0FBQzNCLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2Usa0NBQWtDO0FBQ2pEO0FBQ0EscUJBQXFCLDZEQUFTO0FBQzlCO0FBQ0EsZ0NBQWdDLE9BQU87QUFDdkMsa0JBQWtCLDZEQUFTO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IscUJBQXFCO0FBQ3ZDLGtCQUFrQiw2REFBUztBQUMzQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxTQUFTLDZEQUFTO0FBQ3ZCO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BleHBjbHVzdGVyL3Blcm1pc3Npb24tZ3JvdXBzLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYW50LWRlc2lnbitjb2xvcnNAOC4wLjEvbm9kZV9tb2R1bGVzL0BhbnQtZGVzaWduL2NvbG9ycy9lcy9nZW5lcmF0ZS5qcz9mMjRkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZhc3RDb2xvciB9IGZyb20gJ0BhbnQtZGVzaWduL2Zhc3QtY29sb3InO1xuY29uc3QgaHVlU3RlcCA9IDI7IC8vIOiJsuebuOmYtuair1xuY29uc3Qgc2F0dXJhdGlvblN0ZXAgPSAwLjE2OyAvLyDppbHlkozluqbpmLbmoq/vvIzmtYXoibLpg6jliIZcbmNvbnN0IHNhdHVyYXRpb25TdGVwMiA9IDAuMDU7IC8vIOmlseWSjOW6pumYtuair++8jOa3seiJsumDqOWIhlxuY29uc3QgYnJpZ2h0bmVzc1N0ZXAxID0gMC4wNTsgLy8g5Lqu5bqm6Zi25qKv77yM5rWF6Imy6YOo5YiGXG5jb25zdCBicmlnaHRuZXNzU3RlcDIgPSAwLjE1OyAvLyDkuq7luqbpmLbmoq/vvIzmt7HoibLpg6jliIZcbmNvbnN0IGxpZ2h0Q29sb3JDb3VudCA9IDU7IC8vIOa1heiJsuaVsOmHj++8jOS4u+iJsuS4ilxuY29uc3QgZGFya0NvbG9yQ291bnQgPSA0OyAvLyDmt7HoibLmlbDph4/vvIzkuLvoibLkuItcblxuLy8g5pqX6Imy5Li76aKY6aKc6Imy5pig5bCE5YWz57O76KGoXG5jb25zdCBkYXJrQ29sb3JNYXAgPSBbe1xuICBpbmRleDogNyxcbiAgYW1vdW50OiAxNVxufSwge1xuICBpbmRleDogNixcbiAgYW1vdW50OiAyNVxufSwge1xuICBpbmRleDogNSxcbiAgYW1vdW50OiAzMFxufSwge1xuICBpbmRleDogNSxcbiAgYW1vdW50OiA0NVxufSwge1xuICBpbmRleDogNSxcbiAgYW1vdW50OiA2NVxufSwge1xuICBpbmRleDogNSxcbiAgYW1vdW50OiA4NVxufSwge1xuICBpbmRleDogNCxcbiAgYW1vdW50OiA5MFxufSwge1xuICBpbmRleDogMyxcbiAgYW1vdW50OiA5NVxufSwge1xuICBpbmRleDogMixcbiAgYW1vdW50OiA5N1xufSwge1xuICBpbmRleDogMSxcbiAgYW1vdW50OiA5OFxufV07XG5mdW5jdGlvbiBnZXRIdWUoaHN2LCBpLCBsaWdodCkge1xuICBsZXQgaHVlO1xuICAvLyDmoLnmja7oibLnm7jkuI3lkIzvvIzoibLnm7jovazlkJHkuI3lkIxcbiAgaWYgKE1hdGgucm91bmQoaHN2LmgpID49IDYwICYmIE1hdGgucm91bmQoaHN2LmgpIDw9IDI0MCkge1xuICAgIGh1ZSA9IGxpZ2h0ID8gTWF0aC5yb3VuZChoc3YuaCkgLSBodWVTdGVwICogaSA6IE1hdGgucm91bmQoaHN2LmgpICsgaHVlU3RlcCAqIGk7XG4gIH0gZWxzZSB7XG4gICAgaHVlID0gbGlnaHQgPyBNYXRoLnJvdW5kKGhzdi5oKSArIGh1ZVN0ZXAgKiBpIDogTWF0aC5yb3VuZChoc3YuaCkgLSBodWVTdGVwICogaTtcbiAgfVxuICBpZiAoaHVlIDwgMCkge1xuICAgIGh1ZSArPSAzNjA7XG4gIH0gZWxzZSBpZiAoaHVlID49IDM2MCkge1xuICAgIGh1ZSAtPSAzNjA7XG4gIH1cbiAgcmV0dXJuIGh1ZTtcbn1cbmZ1bmN0aW9uIGdldFNhdHVyYXRpb24oaHN2LCBpLCBsaWdodCkge1xuICAvLyBncmV5IGNvbG9yIGRvbid0IGNoYW5nZSBzYXR1cmF0aW9uXG4gIGlmIChoc3YuaCA9PT0gMCAmJiBoc3YucyA9PT0gMCkge1xuICAgIHJldHVybiBoc3YucztcbiAgfVxuICBsZXQgc2F0dXJhdGlvbjtcbiAgaWYgKGxpZ2h0KSB7XG4gICAgc2F0dXJhdGlvbiA9IGhzdi5zIC0gc2F0dXJhdGlvblN0ZXAgKiBpO1xuICB9IGVsc2UgaWYgKGkgPT09IGRhcmtDb2xvckNvdW50KSB7XG4gICAgc2F0dXJhdGlvbiA9IGhzdi5zICsgc2F0dXJhdGlvblN0ZXA7XG4gIH0gZWxzZSB7XG4gICAgc2F0dXJhdGlvbiA9IGhzdi5zICsgc2F0dXJhdGlvblN0ZXAyICogaTtcbiAgfVxuICAvLyDovrnnlYzlgLzkv67mraNcbiAgaWYgKHNhdHVyYXRpb24gPiAxKSB7XG4gICAgc2F0dXJhdGlvbiA9IDE7XG4gIH1cbiAgLy8g56ys5LiA5qC855qEIHMg6ZmQ5Yi25ZyoIDAuMDYtMC4xIOS5i+mXtFxuICBpZiAobGlnaHQgJiYgaSA9PT0gbGlnaHRDb2xvckNvdW50ICYmIHNhdHVyYXRpb24gPiAwLjEpIHtcbiAgICBzYXR1cmF0aW9uID0gMC4xO1xuICB9XG4gIGlmIChzYXR1cmF0aW9uIDwgMC4wNikge1xuICAgIHNhdHVyYXRpb24gPSAwLjA2O1xuICB9XG4gIHJldHVybiBNYXRoLnJvdW5kKHNhdHVyYXRpb24gKiAxMDApIC8gMTAwO1xufVxuZnVuY3Rpb24gZ2V0VmFsdWUoaHN2LCBpLCBsaWdodCkge1xuICBsZXQgdmFsdWU7XG4gIGlmIChsaWdodCkge1xuICAgIHZhbHVlID0gaHN2LnYgKyBicmlnaHRuZXNzU3RlcDEgKiBpO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlID0gaHN2LnYgLSBicmlnaHRuZXNzU3RlcDIgKiBpO1xuICB9XG4gIC8vIENsYW1wIHZhbHVlIGJldHdlZW4gMCBhbmQgMVxuICB2YWx1ZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHZhbHVlKSk7XG4gIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlICogMTAwKSAvIDEwMDtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdlbmVyYXRlKGNvbG9yLCBvcHRzID0ge30pIHtcbiAgY29uc3QgcGF0dGVybnMgPSBbXTtcbiAgY29uc3QgcENvbG9yID0gbmV3IEZhc3RDb2xvcihjb2xvcik7XG4gIGNvbnN0IGhzdiA9IHBDb2xvci50b0hzdigpO1xuICBmb3IgKGxldCBpID0gbGlnaHRDb2xvckNvdW50OyBpID4gMDsgaSAtPSAxKSB7XG4gICAgY29uc3QgYyA9IG5ldyBGYXN0Q29sb3Ioe1xuICAgICAgaDogZ2V0SHVlKGhzdiwgaSwgdHJ1ZSksXG4gICAgICBzOiBnZXRTYXR1cmF0aW9uKGhzdiwgaSwgdHJ1ZSksXG4gICAgICB2OiBnZXRWYWx1ZShoc3YsIGksIHRydWUpXG4gICAgfSk7XG4gICAgcGF0dGVybnMucHVzaChjKTtcbiAgfVxuICBwYXR0ZXJucy5wdXNoKHBDb2xvcik7XG4gIGZvciAobGV0IGkgPSAxOyBpIDw9IGRhcmtDb2xvckNvdW50OyBpICs9IDEpIHtcbiAgICBjb25zdCBjID0gbmV3IEZhc3RDb2xvcih7XG4gICAgICBoOiBnZXRIdWUoaHN2LCBpKSxcbiAgICAgIHM6IGdldFNhdHVyYXRpb24oaHN2LCBpKSxcbiAgICAgIHY6IGdldFZhbHVlKGhzdiwgaSlcbiAgICB9KTtcbiAgICBwYXR0ZXJucy5wdXNoKGMpO1xuICB9XG5cbiAgLy8gZGFyayB0aGVtZSBwYXR0ZXJuc1xuICBpZiAob3B0cy50aGVtZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIGRhcmtDb2xvck1hcC5tYXAoKHtcbiAgICAgIGluZGV4LFxuICAgICAgYW1vdW50XG4gICAgfSkgPT4gbmV3IEZhc3RDb2xvcihvcHRzLmJhY2tncm91bmRDb2xvciB8fCAnIzE0MTQxNCcpLm1peChwYXR0ZXJuc1tpbmRleF0sIGFtb3VudCkudG9IZXhTdHJpbmcoKSk7XG4gIH1cbiAgcmV0dXJuIHBhdHRlcm5zLm1hcChjID0+IGMudG9IZXhTdHJpbmcoKSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///686\n\n}");
20
+
21
+ /***/ },
22
+
23
+ /***/ 393
24
+ /*!********************************************************************************************************!*\
25
+ !*** ../../../node_modules/.pnpm/@ant-design+colors@8.0.1/node_modules/@ant-design/colors/es/index.js ***!
26
+ \********************************************************************************************************/
27
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
28
+
29
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ blue: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.blue),\n/* harmony export */ blueDark: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.blueDark),\n/* harmony export */ cyan: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.cyan),\n/* harmony export */ cyanDark: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.cyanDark),\n/* harmony export */ geekblue: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.geekblue),\n/* harmony export */ geekblueDark: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.geekblueDark),\n/* harmony export */ generate: () => (/* reexport safe */ _generate__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ gold: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.gold),\n/* harmony export */ goldDark: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.goldDark),\n/* harmony export */ gray: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.gray),\n/* harmony export */ green: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.green),\n/* harmony export */ greenDark: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.greenDark),\n/* harmony export */ grey: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.grey),\n/* harmony export */ greyDark: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.greyDark),\n/* harmony export */ lime: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.lime),\n/* harmony export */ limeDark: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.limeDark),\n/* harmony export */ magenta: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.magenta),\n/* harmony export */ magentaDark: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.magentaDark),\n/* harmony export */ orange: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.orange),\n/* harmony export */ orangeDark: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.orangeDark),\n/* harmony export */ presetDarkPalettes: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.presetDarkPalettes),\n/* harmony export */ presetPalettes: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.presetPalettes),\n/* harmony export */ presetPrimaryColors: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.presetPrimaryColors),\n/* harmony export */ purple: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.purple),\n/* harmony export */ purpleDark: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.purpleDark),\n/* harmony export */ red: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.red),\n/* harmony export */ redDark: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.redDark),\n/* harmony export */ volcano: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.volcano),\n/* harmony export */ volcanoDark: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.volcanoDark),\n/* harmony export */ yellow: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.yellow),\n/* harmony export */ yellowDark: () => (/* reexport safe */ _presets__WEBPACK_IMPORTED_MODULE_1__.yellowDark)\n/* harmony export */ });\n/* harmony import */ var _generate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./generate */ 686);\n/* harmony import */ var _presets__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./presets */ 225);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFpRCIsInNvdXJjZXMiOlsid2VicGFjazovL0BleHBjbHVzdGVyL3Blcm1pc3Npb24tZ3JvdXBzLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYW50LWRlc2lnbitjb2xvcnNAOC4wLjEvbm9kZV9tb2R1bGVzL0BhbnQtZGVzaWduL2NvbG9ycy9lcy9pbmRleC5qcz9kNWQzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGRlZmF1bHQgYXMgZ2VuZXJhdGUgfSBmcm9tIFwiLi9nZW5lcmF0ZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHJlc2V0c1wiOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///393\n\n}");
30
+
31
+ /***/ },
32
+
33
+ /***/ 225
34
+ /*!**********************************************************************************************************!*\
35
+ !*** ../../../node_modules/.pnpm/@ant-design+colors@8.0.1/node_modules/@ant-design/colors/es/presets.js ***!
36
+ \**********************************************************************************************************/
37
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
38
+
39
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ blue: () => (/* binding */ blue),\n/* harmony export */ blueDark: () => (/* binding */ blueDark),\n/* harmony export */ cyan: () => (/* binding */ cyan),\n/* harmony export */ cyanDark: () => (/* binding */ cyanDark),\n/* harmony export */ geekblue: () => (/* binding */ geekblue),\n/* harmony export */ geekblueDark: () => (/* binding */ geekblueDark),\n/* harmony export */ gold: () => (/* binding */ gold),\n/* harmony export */ goldDark: () => (/* binding */ goldDark),\n/* harmony export */ gray: () => (/* binding */ gray),\n/* harmony export */ green: () => (/* binding */ green),\n/* harmony export */ greenDark: () => (/* binding */ greenDark),\n/* harmony export */ grey: () => (/* binding */ grey),\n/* harmony export */ greyDark: () => (/* binding */ greyDark),\n/* harmony export */ lime: () => (/* binding */ lime),\n/* harmony export */ limeDark: () => (/* binding */ limeDark),\n/* harmony export */ magenta: () => (/* binding */ magenta),\n/* harmony export */ magentaDark: () => (/* binding */ magentaDark),\n/* harmony export */ orange: () => (/* binding */ orange),\n/* harmony export */ orangeDark: () => (/* binding */ orangeDark),\n/* harmony export */ presetDarkPalettes: () => (/* binding */ presetDarkPalettes),\n/* harmony export */ presetPalettes: () => (/* binding */ presetPalettes),\n/* harmony export */ presetPrimaryColors: () => (/* binding */ presetPrimaryColors),\n/* harmony export */ purple: () => (/* binding */ purple),\n/* harmony export */ purpleDark: () => (/* binding */ purpleDark),\n/* harmony export */ red: () => (/* binding */ red),\n/* harmony export */ redDark: () => (/* binding */ redDark),\n/* harmony export */ volcano: () => (/* binding */ volcano),\n/* harmony export */ volcanoDark: () => (/* binding */ volcanoDark),\n/* harmony export */ yellow: () => (/* binding */ yellow),\n/* harmony export */ yellowDark: () => (/* binding */ yellowDark)\n/* harmony export */ });\n// Generated by script. Do NOT modify!\n\nconst presetPrimaryColors = {\n \"red\": \"#F5222D\",\n \"volcano\": \"#FA541C\",\n \"orange\": \"#FA8C16\",\n \"gold\": \"#FAAD14\",\n \"yellow\": \"#FADB14\",\n \"lime\": \"#A0D911\",\n \"green\": \"#52C41A\",\n \"cyan\": \"#13C2C2\",\n \"blue\": \"#1677FF\",\n \"geekblue\": \"#2F54EB\",\n \"purple\": \"#722ED1\",\n \"magenta\": \"#EB2F96\",\n \"grey\": \"#666666\"\n};\nconst red = [\"#fff1f0\", \"#ffccc7\", \"#ffa39e\", \"#ff7875\", \"#ff4d4f\", \"#f5222d\", \"#cf1322\", \"#a8071a\", \"#820014\", \"#5c0011\"];\nred.primary = red[5];\nconst volcano = [\"#fff2e8\", \"#ffd8bf\", \"#ffbb96\", \"#ff9c6e\", \"#ff7a45\", \"#fa541c\", \"#d4380d\", \"#ad2102\", \"#871400\", \"#610b00\"];\nvolcano.primary = volcano[5];\nconst orange = [\"#fff7e6\", \"#ffe7ba\", \"#ffd591\", \"#ffc069\", \"#ffa940\", \"#fa8c16\", \"#d46b08\", \"#ad4e00\", \"#873800\", \"#612500\"];\norange.primary = orange[5];\nconst gold = [\"#fffbe6\", \"#fff1b8\", \"#ffe58f\", \"#ffd666\", \"#ffc53d\", \"#faad14\", \"#d48806\", \"#ad6800\", \"#874d00\", \"#613400\"];\ngold.primary = gold[5];\nconst yellow = [\"#feffe6\", \"#ffffb8\", \"#fffb8f\", \"#fff566\", \"#ffec3d\", \"#fadb14\", \"#d4b106\", \"#ad8b00\", \"#876800\", \"#614700\"];\nyellow.primary = yellow[5];\nconst lime = [\"#fcffe6\", \"#f4ffb8\", \"#eaff8f\", \"#d3f261\", \"#bae637\", \"#a0d911\", \"#7cb305\", \"#5b8c00\", \"#3f6600\", \"#254000\"];\nlime.primary = lime[5];\nconst green = [\"#f6ffed\", \"#d9f7be\", \"#b7eb8f\", \"#95de64\", \"#73d13d\", \"#52c41a\", \"#389e0d\", \"#237804\", \"#135200\", \"#092b00\"];\ngreen.primary = green[5];\nconst cyan = [\"#e6fffb\", \"#b5f5ec\", \"#87e8de\", \"#5cdbd3\", \"#36cfc9\", \"#13c2c2\", \"#08979c\", \"#006d75\", \"#00474f\", \"#002329\"];\ncyan.primary = cyan[5];\nconst blue = [\"#e6f4ff\", \"#bae0ff\", \"#91caff\", \"#69b1ff\", \"#4096ff\", \"#1677ff\", \"#0958d9\", \"#003eb3\", \"#002c8c\", \"#001d66\"];\nblue.primary = blue[5];\nconst geekblue = [\"#f0f5ff\", \"#d6e4ff\", \"#adc6ff\", \"#85a5ff\", \"#597ef7\", \"#2f54eb\", \"#1d39c4\", \"#10239e\", \"#061178\", \"#030852\"];\ngeekblue.primary = geekblue[5];\nconst purple = [\"#f9f0ff\", \"#efdbff\", \"#d3adf7\", \"#b37feb\", \"#9254de\", \"#722ed1\", \"#531dab\", \"#391085\", \"#22075e\", \"#120338\"];\npurple.primary = purple[5];\nconst magenta = [\"#fff0f6\", \"#ffd6e7\", \"#ffadd2\", \"#ff85c0\", \"#f759ab\", \"#eb2f96\", \"#c41d7f\", \"#9e1068\", \"#780650\", \"#520339\"];\nmagenta.primary = magenta[5];\nconst grey = [\"#a6a6a6\", \"#999999\", \"#8c8c8c\", \"#808080\", \"#737373\", \"#666666\", \"#404040\", \"#1a1a1a\", \"#000000\", \"#000000\"];\ngrey.primary = grey[5];\nconst gray = grey;\nconst presetPalettes = {\n red,\n volcano,\n orange,\n gold,\n yellow,\n lime,\n green,\n cyan,\n blue,\n geekblue,\n purple,\n magenta,\n grey\n};\nconst redDark = [\"#2a1215\", \"#431418\", \"#58181c\", \"#791a1f\", \"#a61d24\", \"#d32029\", \"#e84749\", \"#f37370\", \"#f89f9a\", \"#fac8c3\"];\nredDark.primary = redDark[5];\nconst volcanoDark = [\"#2b1611\", \"#441d12\", \"#592716\", \"#7c3118\", \"#aa3e19\", \"#d84a1b\", \"#e87040\", \"#f3956a\", \"#f8b692\", \"#fad4bc\"];\nvolcanoDark.primary = volcanoDark[5];\nconst orangeDark = [\"#2b1d11\", \"#442a11\", \"#593815\", \"#7c4a15\", \"#aa6215\", \"#d87a16\", \"#e89a3c\", \"#f3b765\", \"#f8cf8d\", \"#fae3b7\"];\norangeDark.primary = orangeDark[5];\nconst goldDark = [\"#2b2111\", \"#443111\", \"#594214\", \"#7c5914\", \"#aa7714\", \"#d89614\", \"#e8b339\", \"#f3cc62\", \"#f8df8b\", \"#faedb5\"];\ngoldDark.primary = goldDark[5];\nconst yellowDark = [\"#2b2611\", \"#443b11\", \"#595014\", \"#7c6e14\", \"#aa9514\", \"#d8bd14\", \"#e8d639\", \"#f3ea62\", \"#f8f48b\", \"#fafab5\"];\nyellowDark.primary = yellowDark[5];\nconst limeDark = [\"#1f2611\", \"#2e3c10\", \"#3e4f13\", \"#536d13\", \"#6f9412\", \"#8bbb11\", \"#a9d134\", \"#c9e75d\", \"#e4f88b\", \"#f0fab5\"];\nlimeDark.primary = limeDark[5];\nconst greenDark = [\"#162312\", \"#1d3712\", \"#274916\", \"#306317\", \"#3c8618\", \"#49aa19\", \"#6abe39\", \"#8fd460\", \"#b2e58b\", \"#d5f2bb\"];\ngreenDark.primary = greenDark[5];\nconst cyanDark = [\"#112123\", \"#113536\", \"#144848\", \"#146262\", \"#138585\", \"#13a8a8\", \"#33bcb7\", \"#58d1c9\", \"#84e2d8\", \"#b2f1e8\"];\ncyanDark.primary = cyanDark[5];\nconst blueDark = [\"#111a2c\", \"#112545\", \"#15325b\", \"#15417e\", \"#1554ad\", \"#1668dc\", \"#3c89e8\", \"#65a9f3\", \"#8dc5f8\", \"#b7dcfa\"];\nblueDark.primary = blueDark[5];\nconst geekblueDark = [\"#131629\", \"#161d40\", \"#1c2755\", \"#203175\", \"#263ea0\", \"#2b4acb\", \"#5273e0\", \"#7f9ef3\", \"#a8c1f8\", \"#d2e0fa\"];\ngeekblueDark.primary = geekblueDark[5];\nconst purpleDark = [\"#1a1325\", \"#24163a\", \"#301c4d\", \"#3e2069\", \"#51258f\", \"#642ab5\", \"#854eca\", \"#ab7ae0\", \"#cda8f0\", \"#ebd7fa\"];\npurpleDark.primary = purpleDark[5];\nconst magentaDark = [\"#291321\", \"#40162f\", \"#551c3b\", \"#75204f\", \"#a02669\", \"#cb2b83\", \"#e0529c\", \"#f37fb7\", \"#f8a8cc\", \"#fad2e3\"];\nmagentaDark.primary = magentaDark[5];\nconst greyDark = [\"#151515\", \"#1f1f1f\", \"#2d2d2d\", \"#393939\", \"#494949\", \"#5a5a5a\", \"#6a6a6a\", \"#7b7b7b\", \"#888888\", \"#969696\"];\ngreyDark.primary = greyDark[5];\nconst presetDarkPalettes = {\n red: redDark,\n volcano: volcanoDark,\n orange: orangeDark,\n gold: goldDark,\n yellow: yellowDark,\n lime: limeDark,\n green: greenDark,\n cyan: cyanDark,\n blue: blueDark,\n geekblue: geekblueDark,\n purple: purpleDark,\n magenta: magentaDark,\n grey: greyDark\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjI1LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDTztBQUNQO0FBQ087QUFDUDtBQUNPO0FBQ1A7QUFDTztBQUNQO0FBQ087QUFDUDtBQUNPO0FBQ1A7QUFDTztBQUNQO0FBQ087QUFDUDtBQUNPO0FBQ1A7QUFDTztBQUNQO0FBQ087QUFDUDtBQUNPO0FBQ1A7QUFDTztBQUNBO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDTztBQUNQO0FBQ087QUFDUDtBQUNPO0FBQ1A7QUFDTztBQUNQO0FBQ087QUFDUDtBQUNPO0FBQ1A7QUFDTztBQUNQO0FBQ087QUFDUDtBQUNPO0FBQ1A7QUFDTztBQUNQO0FBQ087QUFDUDtBQUNPO0FBQ1A7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZXhwY2x1c3Rlci9wZXJtaXNzaW9uLWdyb3Vwcy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGFudC1kZXNpZ24rY29sb3JzQDguMC4xL25vZGVfbW9kdWxlcy9AYW50LWRlc2lnbi9jb2xvcnMvZXMvcHJlc2V0cy5qcz81MmQ1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEdlbmVyYXRlZCBieSBzY3JpcHQuIERvIE5PVCBtb2RpZnkhXG5cbmV4cG9ydCBjb25zdCBwcmVzZXRQcmltYXJ5Q29sb3JzID0ge1xuICBcInJlZFwiOiBcIiNGNTIyMkRcIixcbiAgXCJ2b2xjYW5vXCI6IFwiI0ZBNTQxQ1wiLFxuICBcIm9yYW5nZVwiOiBcIiNGQThDMTZcIixcbiAgXCJnb2xkXCI6IFwiI0ZBQUQxNFwiLFxuICBcInllbGxvd1wiOiBcIiNGQURCMTRcIixcbiAgXCJsaW1lXCI6IFwiI0EwRDkxMVwiLFxuICBcImdyZWVuXCI6IFwiIzUyQzQxQVwiLFxuICBcImN5YW5cIjogXCIjMTNDMkMyXCIsXG4gIFwiYmx1ZVwiOiBcIiMxNjc3RkZcIixcbiAgXCJnZWVrYmx1ZVwiOiBcIiMyRjU0RUJcIixcbiAgXCJwdXJwbGVcIjogXCIjNzIyRUQxXCIsXG4gIFwibWFnZW50YVwiOiBcIiNFQjJGOTZcIixcbiAgXCJncmV5XCI6IFwiIzY2NjY2NlwiXG59O1xuZXhwb3J0IGNvbnN0IHJlZCA9IFtcIiNmZmYxZjBcIiwgXCIjZmZjY2M3XCIsIFwiI2ZmYTM5ZVwiLCBcIiNmZjc4NzVcIiwgXCIjZmY0ZDRmXCIsIFwiI2Y1MjIyZFwiLCBcIiNjZjEzMjJcIiwgXCIjYTgwNzFhXCIsIFwiIzgyMDAxNFwiLCBcIiM1YzAwMTFcIl07XG5yZWQucHJpbWFyeSA9IHJlZFs1XTtcbmV4cG9ydCBjb25zdCB2b2xjYW5vID0gW1wiI2ZmZjJlOFwiLCBcIiNmZmQ4YmZcIiwgXCIjZmZiYjk2XCIsIFwiI2ZmOWM2ZVwiLCBcIiNmZjdhNDVcIiwgXCIjZmE1NDFjXCIsIFwiI2Q0MzgwZFwiLCBcIiNhZDIxMDJcIiwgXCIjODcxNDAwXCIsIFwiIzYxMGIwMFwiXTtcbnZvbGNhbm8ucHJpbWFyeSA9IHZvbGNhbm9bNV07XG5leHBvcnQgY29uc3Qgb3JhbmdlID0gW1wiI2ZmZjdlNlwiLCBcIiNmZmU3YmFcIiwgXCIjZmZkNTkxXCIsIFwiI2ZmYzA2OVwiLCBcIiNmZmE5NDBcIiwgXCIjZmE4YzE2XCIsIFwiI2Q0NmIwOFwiLCBcIiNhZDRlMDBcIiwgXCIjODczODAwXCIsIFwiIzYxMjUwMFwiXTtcbm9yYW5nZS5wcmltYXJ5ID0gb3JhbmdlWzVdO1xuZXhwb3J0IGNvbnN0IGdvbGQgPSBbXCIjZmZmYmU2XCIsIFwiI2ZmZjFiOFwiLCBcIiNmZmU1OGZcIiwgXCIjZmZkNjY2XCIsIFwiI2ZmYzUzZFwiLCBcIiNmYWFkMTRcIiwgXCIjZDQ4ODA2XCIsIFwiI2FkNjgwMFwiLCBcIiM4NzRkMDBcIiwgXCIjNjEzNDAwXCJdO1xuZ29sZC5wcmltYXJ5ID0gZ29sZFs1XTtcbmV4cG9ydCBjb25zdCB5ZWxsb3cgPSBbXCIjZmVmZmU2XCIsIFwiI2ZmZmZiOFwiLCBcIiNmZmZiOGZcIiwgXCIjZmZmNTY2XCIsIFwiI2ZmZWMzZFwiLCBcIiNmYWRiMTRcIiwgXCIjZDRiMTA2XCIsIFwiI2FkOGIwMFwiLCBcIiM4NzY4MDBcIiwgXCIjNjE0NzAwXCJdO1xueWVsbG93LnByaW1hcnkgPSB5ZWxsb3dbNV07XG5leHBvcnQgY29uc3QgbGltZSA9IFtcIiNmY2ZmZTZcIiwgXCIjZjRmZmI4XCIsIFwiI2VhZmY4ZlwiLCBcIiNkM2YyNjFcIiwgXCIjYmFlNjM3XCIsIFwiI2EwZDkxMVwiLCBcIiM3Y2IzMDVcIiwgXCIjNWI4YzAwXCIsIFwiIzNmNjYwMFwiLCBcIiMyNTQwMDBcIl07XG5saW1lLnByaW1hcnkgPSBsaW1lWzVdO1xuZXhwb3J0IGNvbnN0IGdyZWVuID0gW1wiI2Y2ZmZlZFwiLCBcIiNkOWY3YmVcIiwgXCIjYjdlYjhmXCIsIFwiIzk1ZGU2NFwiLCBcIiM3M2QxM2RcIiwgXCIjNTJjNDFhXCIsIFwiIzM4OWUwZFwiLCBcIiMyMzc4MDRcIiwgXCIjMTM1MjAwXCIsIFwiIzA5MmIwMFwiXTtcbmdyZWVuLnByaW1hcnkgPSBncmVlbls1XTtcbmV4cG9ydCBjb25zdCBjeWFuID0gW1wiI2U2ZmZmYlwiLCBcIiNiNWY1ZWNcIiwgXCIjODdlOGRlXCIsIFwiIzVjZGJkM1wiLCBcIiMzNmNmYzlcIiwgXCIjMTNjMmMyXCIsIFwiIzA4OTc5Y1wiLCBcIiMwMDZkNzVcIiwgXCIjMDA0NzRmXCIsIFwiIzAwMjMyOVwiXTtcbmN5YW4ucHJpbWFyeSA9IGN5YW5bNV07XG5leHBvcnQgY29uc3QgYmx1ZSA9IFtcIiNlNmY0ZmZcIiwgXCIjYmFlMGZmXCIsIFwiIzkxY2FmZlwiLCBcIiM2OWIxZmZcIiwgXCIjNDA5NmZmXCIsIFwiIzE2NzdmZlwiLCBcIiMwOTU4ZDlcIiwgXCIjMDAzZWIzXCIsIFwiIzAwMmM4Y1wiLCBcIiMwMDFkNjZcIl07XG5ibHVlLnByaW1hcnkgPSBibHVlWzVdO1xuZXhwb3J0IGNvbnN0IGdlZWtibHVlID0gW1wiI2YwZjVmZlwiLCBcIiNkNmU0ZmZcIiwgXCIjYWRjNmZmXCIsIFwiIzg1YTVmZlwiLCBcIiM1OTdlZjdcIiwgXCIjMmY1NGViXCIsIFwiIzFkMzljNFwiLCBcIiMxMDIzOWVcIiwgXCIjMDYxMTc4XCIsIFwiIzAzMDg1MlwiXTtcbmdlZWtibHVlLnByaW1hcnkgPSBnZWVrYmx1ZVs1XTtcbmV4cG9ydCBjb25zdCBwdXJwbGUgPSBbXCIjZjlmMGZmXCIsIFwiI2VmZGJmZlwiLCBcIiNkM2FkZjdcIiwgXCIjYjM3ZmViXCIsIFwiIzkyNTRkZVwiLCBcIiM3MjJlZDFcIiwgXCIjNTMxZGFiXCIsIFwiIzM5MTA4NVwiLCBcIiMyMjA3NWVcIiwgXCIjMTIwMzM4XCJdO1xucHVycGxlLnByaW1hcnkgPSBwdXJwbGVbNV07XG5leHBvcnQgY29uc3QgbWFnZW50YSA9IFtcIiNmZmYwZjZcIiwgXCIjZmZkNmU3XCIsIFwiI2ZmYWRkMlwiLCBcIiNmZjg1YzBcIiwgXCIjZjc1OWFiXCIsIFwiI2ViMmY5NlwiLCBcIiNjNDFkN2ZcIiwgXCIjOWUxMDY4XCIsIFwiIzc4MDY1MFwiLCBcIiM1MjAzMzlcIl07XG5tYWdlbnRhLnByaW1hcnkgPSBtYWdlbnRhWzVdO1xuZXhwb3J0IGNvbnN0IGdyZXkgPSBbXCIjYTZhNmE2XCIsIFwiIzk5OTk5OVwiLCBcIiM4YzhjOGNcIiwgXCIjODA4MDgwXCIsIFwiIzczNzM3M1wiLCBcIiM2NjY2NjZcIiwgXCIjNDA0MDQwXCIsIFwiIzFhMWExYVwiLCBcIiMwMDAwMDBcIiwgXCIjMDAwMDAwXCJdO1xuZ3JleS5wcmltYXJ5ID0gZ3JleVs1XTtcbmV4cG9ydCBjb25zdCBncmF5ID0gZ3JleTtcbmV4cG9ydCBjb25zdCBwcmVzZXRQYWxldHRlcyA9IHtcbiAgcmVkLFxuICB2b2xjYW5vLFxuICBvcmFuZ2UsXG4gIGdvbGQsXG4gIHllbGxvdyxcbiAgbGltZSxcbiAgZ3JlZW4sXG4gIGN5YW4sXG4gIGJsdWUsXG4gIGdlZWtibHVlLFxuICBwdXJwbGUsXG4gIG1hZ2VudGEsXG4gIGdyZXlcbn07XG5leHBvcnQgY29uc3QgcmVkRGFyayA9IFtcIiMyYTEyMTVcIiwgXCIjNDMxNDE4XCIsIFwiIzU4MTgxY1wiLCBcIiM3OTFhMWZcIiwgXCIjYTYxZDI0XCIsIFwiI2QzMjAyOVwiLCBcIiNlODQ3NDlcIiwgXCIjZjM3MzcwXCIsIFwiI2Y4OWY5YVwiLCBcIiNmYWM4YzNcIl07XG5yZWREYXJrLnByaW1hcnkgPSByZWREYXJrWzVdO1xuZXhwb3J0IGNvbnN0IHZvbGNhbm9EYXJrID0gW1wiIzJiMTYxMVwiLCBcIiM0NDFkMTJcIiwgXCIjNTkyNzE2XCIsIFwiIzdjMzExOFwiLCBcIiNhYTNlMTlcIiwgXCIjZDg0YTFiXCIsIFwiI2U4NzA0MFwiLCBcIiNmMzk1NmFcIiwgXCIjZjhiNjkyXCIsIFwiI2ZhZDRiY1wiXTtcbnZvbGNhbm9EYXJrLnByaW1hcnkgPSB2b2xjYW5vRGFya1s1XTtcbmV4cG9ydCBjb25zdCBvcmFuZ2VEYXJrID0gW1wiIzJiMWQxMVwiLCBcIiM0NDJhMTFcIiwgXCIjNTkzODE1XCIsIFwiIzdjNGExNVwiLCBcIiNhYTYyMTVcIiwgXCIjZDg3YTE2XCIsIFwiI2U4OWEzY1wiLCBcIiNmM2I3NjVcIiwgXCIjZjhjZjhkXCIsIFwiI2ZhZTNiN1wiXTtcbm9yYW5nZURhcmsucHJpbWFyeSA9IG9yYW5nZURhcmtbNV07XG5leHBvcnQgY29uc3QgZ29sZERhcmsgPSBbXCIjMmIyMTExXCIsIFwiIzQ0MzExMVwiLCBcIiM1OTQyMTRcIiwgXCIjN2M1OTE0XCIsIFwiI2FhNzcxNFwiLCBcIiNkODk2MTRcIiwgXCIjZThiMzM5XCIsIFwiI2YzY2M2MlwiLCBcIiNmOGRmOGJcIiwgXCIjZmFlZGI1XCJdO1xuZ29sZERhcmsucHJpbWFyeSA9IGdvbGREYXJrWzVdO1xuZXhwb3J0IGNvbnN0IHllbGxvd0RhcmsgPSBbXCIjMmIyNjExXCIsIFwiIzQ0M2IxMVwiLCBcIiM1OTUwMTRcIiwgXCIjN2M2ZTE0XCIsIFwiI2FhOTUxNFwiLCBcIiNkOGJkMTRcIiwgXCIjZThkNjM5XCIsIFwiI2YzZWE2MlwiLCBcIiNmOGY0OGJcIiwgXCIjZmFmYWI1XCJdO1xueWVsbG93RGFyay5wcmltYXJ5ID0geWVsbG93RGFya1s1XTtcbmV4cG9ydCBjb25zdCBsaW1lRGFyayA9IFtcIiMxZjI2MTFcIiwgXCIjMmUzYzEwXCIsIFwiIzNlNGYxM1wiLCBcIiM1MzZkMTNcIiwgXCIjNmY5NDEyXCIsIFwiIzhiYmIxMVwiLCBcIiNhOWQxMzRcIiwgXCIjYzllNzVkXCIsIFwiI2U0Zjg4YlwiLCBcIiNmMGZhYjVcIl07XG5saW1lRGFyay5wcmltYXJ5ID0gbGltZURhcmtbNV07XG5leHBvcnQgY29uc3QgZ3JlZW5EYXJrID0gW1wiIzE2MjMxMlwiLCBcIiMxZDM3MTJcIiwgXCIjMjc0OTE2XCIsIFwiIzMwNjMxN1wiLCBcIiMzYzg2MThcIiwgXCIjNDlhYTE5XCIsIFwiIzZhYmUzOVwiLCBcIiM4ZmQ0NjBcIiwgXCIjYjJlNThiXCIsIFwiI2Q1ZjJiYlwiXTtcbmdyZWVuRGFyay5wcmltYXJ5ID0gZ3JlZW5EYXJrWzVdO1xuZXhwb3J0IGNvbnN0IGN5YW5EYXJrID0gW1wiIzExMjEyM1wiLCBcIiMxMTM1MzZcIiwgXCIjMTQ0ODQ4XCIsIFwiIzE0NjI2MlwiLCBcIiMxMzg1ODVcIiwgXCIjMTNhOGE4XCIsIFwiIzMzYmNiN1wiLCBcIiM1OGQxYzlcIiwgXCIjODRlMmQ4XCIsIFwiI2IyZjFlOFwiXTtcbmN5YW5EYXJrLnByaW1hcnkgPSBjeWFuRGFya1s1XTtcbmV4cG9ydCBjb25zdCBibHVlRGFyayA9IFtcIiMxMTFhMmNcIiwgXCIjMTEyNTQ1XCIsIFwiIzE1MzI1YlwiLCBcIiMxNTQxN2VcIiwgXCIjMTU1NGFkXCIsIFwiIzE2NjhkY1wiLCBcIiMzYzg5ZThcIiwgXCIjNjVhOWYzXCIsIFwiIzhkYzVmOFwiLCBcIiNiN2RjZmFcIl07XG5ibHVlRGFyay5wcmltYXJ5ID0gYmx1ZURhcmtbNV07XG5leHBvcnQgY29uc3QgZ2Vla2JsdWVEYXJrID0gW1wiIzEzMTYyOVwiLCBcIiMxNjFkNDBcIiwgXCIjMWMyNzU1XCIsIFwiIzIwMzE3NVwiLCBcIiMyNjNlYTBcIiwgXCIjMmI0YWNiXCIsIFwiIzUyNzNlMFwiLCBcIiM3ZjllZjNcIiwgXCIjYThjMWY4XCIsIFwiI2QyZTBmYVwiXTtcbmdlZWtibHVlRGFyay5wcmltYXJ5ID0gZ2Vla2JsdWVEYXJrWzVdO1xuZXhwb3J0IGNvbnN0IHB1cnBsZURhcmsgPSBbXCIjMWExMzI1XCIsIFwiIzI0MTYzYVwiLCBcIiMzMDFjNGRcIiwgXCIjM2UyMDY5XCIsIFwiIzUxMjU4ZlwiLCBcIiM2NDJhYjVcIiwgXCIjODU0ZWNhXCIsIFwiI2FiN2FlMFwiLCBcIiNjZGE4ZjBcIiwgXCIjZWJkN2ZhXCJdO1xucHVycGxlRGFyay5wcmltYXJ5ID0gcHVycGxlRGFya1s1XTtcbmV4cG9ydCBjb25zdCBtYWdlbnRhRGFyayA9IFtcIiMyOTEzMjFcIiwgXCIjNDAxNjJmXCIsIFwiIzU1MWMzYlwiLCBcIiM3NTIwNGZcIiwgXCIjYTAyNjY5XCIsIFwiI2NiMmI4M1wiLCBcIiNlMDUyOWNcIiwgXCIjZjM3ZmI3XCIsIFwiI2Y4YThjY1wiLCBcIiNmYWQyZTNcIl07XG5tYWdlbnRhRGFyay5wcmltYXJ5ID0gbWFnZW50YURhcmtbNV07XG5leHBvcnQgY29uc3QgZ3JleURhcmsgPSBbXCIjMTUxNTE1XCIsIFwiIzFmMWYxZlwiLCBcIiMyZDJkMmRcIiwgXCIjMzkzOTM5XCIsIFwiIzQ5NDk0OVwiLCBcIiM1YTVhNWFcIiwgXCIjNmE2YTZhXCIsIFwiIzdiN2I3YlwiLCBcIiM4ODg4ODhcIiwgXCIjOTY5Njk2XCJdO1xuZ3JleURhcmsucHJpbWFyeSA9IGdyZXlEYXJrWzVdO1xuZXhwb3J0IGNvbnN0IHByZXNldERhcmtQYWxldHRlcyA9IHtcbiAgcmVkOiByZWREYXJrLFxuICB2b2xjYW5vOiB2b2xjYW5vRGFyayxcbiAgb3JhbmdlOiBvcmFuZ2VEYXJrLFxuICBnb2xkOiBnb2xkRGFyayxcbiAgeWVsbG93OiB5ZWxsb3dEYXJrLFxuICBsaW1lOiBsaW1lRGFyayxcbiAgZ3JlZW46IGdyZWVuRGFyayxcbiAgY3lhbjogY3lhbkRhcmssXG4gIGJsdWU6IGJsdWVEYXJrLFxuICBnZWVrYmx1ZTogZ2Vla2JsdWVEYXJrLFxuICBwdXJwbGU6IHB1cnBsZURhcmssXG4gIG1hZ2VudGE6IG1hZ2VudGFEYXJrLFxuICBncmV5OiBncmV5RGFya1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///225\n\n}");
40
+
41
+ /***/ },
42
+
43
+ /***/ 103
44
+ /*!********************************************************************************************************************!*\
45
+ !*** ../../../node_modules/.pnpm/@ant-design+fast-color@3.0.1/node_modules/@ant-design/fast-color/es/FastColor.js ***!
46
+ \********************************************************************************************************************/
47
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
48
+
49
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ FastColor: () => (/* binding */ FastColor)\n/* harmony export */ });\n/* harmony import */ var _presetColors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./presetColors */ 63);\n\nconst round = Math.round;\n\n/**\n * Support format, alpha unit will check the % mark:\n * - rgba(102, 204, 255, .5) -> [102, 204, 255, 0.5]\n * - rgb(102 204 255 / .5) -> [102, 204, 255, 0.5]\n * - rgb(100%, 50%, 0% / 50%) -> [255, 128, 0, 0.5]\n * - hsl(270, 60, 40, .5) -> [270, 60, 40, 0.5]\n * - hsl(270deg 60% 40% / 50%) -> [270, 60, 40, 0.5]\n *\n * When `base` is provided, the percentage value will be divided by `base`.\n */\nfunction splitColorStr(str, parseNum) {\n const match = str\n // Remove str before `(`\n .replace(/^[^(]*\\((.*)/, '$1')\n // Remove str after `)`\n .replace(/\\).*/, '').match(/\\d*\\.?\\d+%?/g) || [];\n const numList = match.map(item => parseFloat(item));\n for (let i = 0; i < 3; i += 1) {\n numList[i] = parseNum(numList[i] || 0, match[i] || '', i);\n }\n\n // For alpha. 50% should be 0.5\n if (match[3]) {\n numList[3] = match[3].includes('%') ? numList[3] / 100 : numList[3];\n } else {\n // By default, alpha is 1\n numList[3] = 1;\n }\n return numList;\n}\nconst parseHSVorHSL = (num, _, index) => index === 0 ? num : num / 100;\n\n/** round and limit number to integer between 0-255 */\nfunction limitRange(value, max) {\n const mergedMax = max || 255;\n if (value > mergedMax) {\n return mergedMax;\n }\n if (value < 0) {\n return 0;\n }\n return value;\n}\nclass FastColor {\n /**\n * All FastColor objects are valid. So isValid is always true. This property is kept to be compatible with TinyColor.\n */\n isValid = true;\n\n /**\n * Red, R in RGB\n */\n r = 0;\n\n /**\n * Green, G in RGB\n */\n g = 0;\n\n /**\n * Blue, B in RGB\n */\n b = 0;\n\n /**\n * Alpha/Opacity, A in RGBA/HSLA\n */\n a = 1;\n\n // HSV privates\n _h;\n _hsl_s;\n _hsv_s;\n _l;\n _v;\n\n // intermediate variables to calculate HSL/HSV\n _max;\n _min;\n _brightness;\n constructor(input) {\n /**\n * Always check 3 char in the object to determine the format.\n * We not use function in check to save bundle size.\n * e.g. 'rgb' -> { r: 0, g: 0, b: 0 }.\n */\n function matchFormat(str) {\n return str[0] in input && str[1] in input && str[2] in input;\n }\n if (!input) {\n // Do nothing since already initialized\n } else if (typeof input === 'string') {\n const trimStr = input.trim();\n function matchPrefix(prefix) {\n return trimStr.startsWith(prefix);\n }\n if (/^#?[A-F\\d]{3,8}$/i.test(trimStr)) {\n this.fromHexString(trimStr);\n } else if (matchPrefix('rgb')) {\n this.fromRgbString(trimStr);\n } else if (matchPrefix('hsl')) {\n this.fromHslString(trimStr);\n } else if (matchPrefix('hsv') || matchPrefix('hsb')) {\n this.fromHsvString(trimStr);\n } else {\n // From preset color\n const presetColor = _presetColors__WEBPACK_IMPORTED_MODULE_0__[\"default\"][trimStr.toLowerCase()];\n if (presetColor) {\n this.fromHexString(\n // Convert 36 hex to 16 hex\n parseInt(presetColor, 36).toString(16).padStart(6, '0'));\n }\n }\n } else if (input instanceof FastColor) {\n this.r = input.r;\n this.g = input.g;\n this.b = input.b;\n this.a = input.a;\n this._h = input._h;\n this._hsl_s = input._hsl_s;\n this._hsv_s = input._hsv_s;\n this._l = input._l;\n this._v = input._v;\n } else if (matchFormat('rgb')) {\n this.r = limitRange(input.r);\n this.g = limitRange(input.g);\n this.b = limitRange(input.b);\n this.a = typeof input.a === 'number' ? limitRange(input.a, 1) : 1;\n } else if (matchFormat('hsl')) {\n this.fromHsl(input);\n } else if (matchFormat('hsv')) {\n this.fromHsv(input);\n } else {\n throw new Error('@ant-design/fast-color: unsupported input ' + JSON.stringify(input));\n }\n }\n\n // ======================= Setter =======================\n\n setR(value) {\n return this._sc('r', value);\n }\n setG(value) {\n return this._sc('g', value);\n }\n setB(value) {\n return this._sc('b', value);\n }\n setA(value) {\n return this._sc('a', value, 1);\n }\n setHue(value) {\n const hsv = this.toHsv();\n hsv.h = value;\n return this._c(hsv);\n }\n\n // ======================= Getter =======================\n /**\n * Returns the perceived luminance of a color, from 0-1.\n * @see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n */\n getLuminance() {\n function adjustGamma(raw) {\n const val = raw / 255;\n return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4);\n }\n const R = adjustGamma(this.r);\n const G = adjustGamma(this.g);\n const B = adjustGamma(this.b);\n return 0.2126 * R + 0.7152 * G + 0.0722 * B;\n }\n getHue() {\n if (typeof this._h === 'undefined') {\n const delta = this.getMax() - this.getMin();\n if (delta === 0) {\n this._h = 0;\n } else {\n this._h = round(60 * (this.r === this.getMax() ? (this.g - this.b) / delta + (this.g < this.b ? 6 : 0) : this.g === this.getMax() ? (this.b - this.r) / delta + 2 : (this.r - this.g) / delta + 4));\n }\n }\n return this._h;\n }\n\n /**\n * @deprecated should use getHSVSaturation or getHSLSaturation instead\n */\n getSaturation() {\n return this.getHSVSaturation();\n }\n getHSVSaturation() {\n if (typeof this._hsv_s === 'undefined') {\n const delta = this.getMax() - this.getMin();\n if (delta === 0) {\n this._hsv_s = 0;\n } else {\n this._hsv_s = delta / this.getMax();\n }\n }\n return this._hsv_s;\n }\n getHSLSaturation() {\n if (typeof this._hsl_s === 'undefined') {\n const delta = this.getMax() - this.getMin();\n if (delta === 0) {\n this._hsl_s = 0;\n } else {\n const l = this.getLightness();\n this._hsl_s = delta / 255 / (1 - Math.abs(2 * l - 1));\n }\n }\n return this._hsl_s;\n }\n getLightness() {\n if (typeof this._l === 'undefined') {\n this._l = (this.getMax() + this.getMin()) / 510;\n }\n return this._l;\n }\n getValue() {\n if (typeof this._v === 'undefined') {\n this._v = this.getMax() / 255;\n }\n return this._v;\n }\n\n /**\n * Returns the perceived brightness of the color, from 0-255.\n * Note: this is not the b of HSB\n * @see http://www.w3.org/TR/AERT#color-contrast\n */\n getBrightness() {\n if (typeof this._brightness === 'undefined') {\n this._brightness = (this.r * 299 + this.g * 587 + this.b * 114) / 1000;\n }\n return this._brightness;\n }\n\n // ======================== Func ========================\n\n darken(amount = 10) {\n const h = this.getHue();\n const s = this.getSaturation();\n let l = this.getLightness() - amount / 100;\n if (l < 0) {\n l = 0;\n }\n return this._c({\n h,\n s,\n l,\n a: this.a\n });\n }\n lighten(amount = 10) {\n const h = this.getHue();\n const s = this.getSaturation();\n let l = this.getLightness() + amount / 100;\n if (l > 1) {\n l = 1;\n }\n return this._c({\n h,\n s,\n l,\n a: this.a\n });\n }\n\n /**\n * Mix the current color a given amount with another color, from 0 to 100.\n * 0 means no mixing (return current color).\n */\n mix(input, amount = 50) {\n const color = this._c(input);\n const p = amount / 100;\n const calc = key => (color[key] - this[key]) * p + this[key];\n const rgba = {\n r: round(calc('r')),\n g: round(calc('g')),\n b: round(calc('b')),\n a: round(calc('a') * 100) / 100\n };\n return this._c(rgba);\n }\n\n /**\n * Mix the color with pure white, from 0 to 100.\n * Providing 0 will do nothing, providing 100 will always return white.\n */\n tint(amount = 10) {\n return this.mix({\n r: 255,\n g: 255,\n b: 255,\n a: 1\n }, amount);\n }\n\n /**\n * Mix the color with pure black, from 0 to 100.\n * Providing 0 will do nothing, providing 100 will always return black.\n */\n shade(amount = 10) {\n return this.mix({\n r: 0,\n g: 0,\n b: 0,\n a: 1\n }, amount);\n }\n onBackground(background) {\n const bg = this._c(background);\n const alpha = this.a + bg.a * (1 - this.a);\n const calc = key => {\n return round((this[key] * this.a + bg[key] * bg.a * (1 - this.a)) / alpha);\n };\n return this._c({\n r: calc('r'),\n g: calc('g'),\n b: calc('b'),\n a: alpha\n });\n }\n\n // ======================= Status =======================\n isDark() {\n return this.getBrightness() < 128;\n }\n isLight() {\n return this.getBrightness() >= 128;\n }\n\n // ======================== MISC ========================\n equals(other) {\n return this.r === other.r && this.g === other.g && this.b === other.b && this.a === other.a;\n }\n clone() {\n return this._c(this);\n }\n\n // ======================= Format =======================\n toHexString() {\n let hex = '#';\n const rHex = (this.r || 0).toString(16);\n hex += rHex.length === 2 ? rHex : '0' + rHex;\n const gHex = (this.g || 0).toString(16);\n hex += gHex.length === 2 ? gHex : '0' + gHex;\n const bHex = (this.b || 0).toString(16);\n hex += bHex.length === 2 ? bHex : '0' + bHex;\n if (typeof this.a === 'number' && this.a >= 0 && this.a < 1) {\n const aHex = round(this.a * 255).toString(16);\n hex += aHex.length === 2 ? aHex : '0' + aHex;\n }\n return hex;\n }\n\n /** CSS support color pattern */\n toHsl() {\n return {\n h: this.getHue(),\n s: this.getHSLSaturation(),\n l: this.getLightness(),\n a: this.a\n };\n }\n\n /** CSS support color pattern */\n toHslString() {\n const h = this.getHue();\n const s = round(this.getHSLSaturation() * 100);\n const l = round(this.getLightness() * 100);\n return this.a !== 1 ? `hsla(${h},${s}%,${l}%,${this.a})` : `hsl(${h},${s}%,${l}%)`;\n }\n\n /** Same as toHsb */\n toHsv() {\n return {\n h: this.getHue(),\n s: this.getHSVSaturation(),\n v: this.getValue(),\n a: this.a\n };\n }\n toRgb() {\n return {\n r: this.r,\n g: this.g,\n b: this.b,\n a: this.a\n };\n }\n toRgbString() {\n return this.a !== 1 ? `rgba(${this.r},${this.g},${this.b},${this.a})` : `rgb(${this.r},${this.g},${this.b})`;\n }\n toString() {\n return this.toRgbString();\n }\n\n // ====================== Privates ======================\n /** Return a new FastColor object with one channel changed */\n _sc(rgb, value, max) {\n const clone = this.clone();\n clone[rgb] = limitRange(value, max);\n return clone;\n }\n _c(input) {\n return new this.constructor(input);\n }\n getMax() {\n if (typeof this._max === 'undefined') {\n this._max = Math.max(this.r, this.g, this.b);\n }\n return this._max;\n }\n getMin() {\n if (typeof this._min === 'undefined') {\n this._min = Math.min(this.r, this.g, this.b);\n }\n return this._min;\n }\n fromHexString(trimStr) {\n const withoutPrefix = trimStr.replace('#', '');\n function connectNum(index1, index2) {\n return parseInt(withoutPrefix[index1] + withoutPrefix[index2 || index1], 16);\n }\n if (withoutPrefix.length < 6) {\n // #rgb or #rgba\n this.r = connectNum(0);\n this.g = connectNum(1);\n this.b = connectNum(2);\n this.a = withoutPrefix[3] ? connectNum(3) / 255 : 1;\n } else {\n // #rrggbb or #rrggbbaa\n this.r = connectNum(0, 1);\n this.g = connectNum(2, 3);\n this.b = connectNum(4, 5);\n this.a = withoutPrefix[6] ? connectNum(6, 7) / 255 : 1;\n }\n }\n fromHsl({\n h: _h,\n s,\n l,\n a\n }) {\n const h = (_h % 360 + 360) % 360;\n this._h = h;\n this._hsl_s = s;\n this._l = l;\n this.a = typeof a === 'number' ? a : 1;\n if (s <= 0) {\n const rgb = round(l * 255);\n this.r = rgb;\n this.g = rgb;\n this.b = rgb;\n return;\n }\n let r = 0,\n g = 0,\n b = 0;\n const huePrime = h / 60;\n const chroma = (1 - Math.abs(2 * l - 1)) * s;\n const secondComponent = chroma * (1 - Math.abs(huePrime % 2 - 1));\n if (huePrime >= 0 && huePrime < 1) {\n r = chroma;\n g = secondComponent;\n } else if (huePrime >= 1 && huePrime < 2) {\n r = secondComponent;\n g = chroma;\n } else if (huePrime >= 2 && huePrime < 3) {\n g = chroma;\n b = secondComponent;\n } else if (huePrime >= 3 && huePrime < 4) {\n g = secondComponent;\n b = chroma;\n } else if (huePrime >= 4 && huePrime < 5) {\n r = secondComponent;\n b = chroma;\n } else if (huePrime >= 5 && huePrime < 6) {\n r = chroma;\n b = secondComponent;\n }\n const lightnessModification = l - chroma / 2;\n this.r = round((r + lightnessModification) * 255);\n this.g = round((g + lightnessModification) * 255);\n this.b = round((b + lightnessModification) * 255);\n }\n fromHsv({\n h: _h,\n s,\n v,\n a\n }) {\n const h = (_h % 360 + 360) % 360;\n this._h = h;\n this._hsv_s = s;\n this._v = v;\n this.a = typeof a === 'number' ? a : 1;\n const vv = round(v * 255);\n this.r = vv;\n this.g = vv;\n this.b = vv;\n if (s <= 0) {\n return;\n }\n const hh = h / 60;\n const i = Math.floor(hh);\n const ff = hh - i;\n const p = round(v * (1.0 - s) * 255);\n const q = round(v * (1.0 - s * ff) * 255);\n const t = round(v * (1.0 - s * (1.0 - ff)) * 255);\n switch (i) {\n case 0:\n this.g = t;\n this.b = p;\n break;\n case 1:\n this.r = q;\n this.b = p;\n break;\n case 2:\n this.r = p;\n this.b = t;\n break;\n case 3:\n this.r = p;\n this.g = q;\n break;\n case 4:\n this.r = t;\n this.g = p;\n break;\n case 5:\n default:\n this.g = p;\n this.b = q;\n break;\n }\n }\n fromHsvString(trimStr) {\n const cells = splitColorStr(trimStr, parseHSVorHSL);\n this.fromHsv({\n h: cells[0],\n s: cells[1],\n v: cells[2],\n a: cells[3]\n });\n }\n fromHslString(trimStr) {\n const cells = splitColorStr(trimStr, parseHSVorHSL);\n this.fromHsl({\n h: cells[0],\n s: cells[1],\n l: cells[2],\n a: cells[3]\n });\n }\n fromRgbString(trimStr) {\n const cells = splitColorStr(trimStr, (num, txt) =>\n // Convert percentage to number. e.g. 50% -> 128\n txt.includes('%') ? round(num / 100 * 255) : num);\n this.r = cells[0];\n this.g = cells[1];\n this.b = cells[2];\n this.a = cells[3];\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTAzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTBDO0FBQzFDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsT0FBTztBQUN6QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsa0JBQWtCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixJQUFJO0FBQzFCO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsNEJBQTRCLHFEQUFZO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksT0FBTyxZQUFZLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRTtBQUNuRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsT0FBTyxHQUFHLE9BQU8sR0FBRyxPQUFPLEdBQUcsT0FBTyxZQUFZLE9BQU8sR0FBRyxPQUFPLEdBQUcsT0FBTztBQUM5RztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGV4cGNsdXN0ZXIvcGVybWlzc2lvbi1ncm91cHMvLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhbnQtZGVzaWduK2Zhc3QtY29sb3JAMy4wLjEvbm9kZV9tb2R1bGVzL0BhbnQtZGVzaWduL2Zhc3QtY29sb3IvZXMvRmFzdENvbG9yLmpzPzUyNWQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHByZXNldENvbG9ycyBmcm9tIFwiLi9wcmVzZXRDb2xvcnNcIjtcbmNvbnN0IHJvdW5kID0gTWF0aC5yb3VuZDtcblxuLyoqXG4gKiBTdXBwb3J0IGZvcm1hdCwgYWxwaGEgdW5pdCB3aWxsIGNoZWNrIHRoZSAlIG1hcms6XG4gKiAtIHJnYmEoMTAyLCAyMDQsIDI1NSwgLjUpICAgICAgLT4gWzEwMiwgMjA0LCAyNTUsIDAuNV1cbiAqIC0gcmdiKDEwMiAyMDQgMjU1IC8gLjUpICAgICAgICAtPiBbMTAyLCAyMDQsIDI1NSwgMC41XVxuICogLSByZ2IoMTAwJSwgNTAlLCAwJSAvIDUwJSkgICAgIC0+IFsyNTUsIDEyOCwgMCwgMC41XVxuICogLSBoc2woMjcwLCA2MCwgNDAsIC41KSAgICAgICAgIC0+IFsyNzAsIDYwLCA0MCwgMC41XVxuICogLSBoc2woMjcwZGVnIDYwJSA0MCUgLyA1MCUpICAgLT4gWzI3MCwgNjAsIDQwLCAwLjVdXG4gKlxuICogV2hlbiBgYmFzZWAgaXMgcHJvdmlkZWQsIHRoZSBwZXJjZW50YWdlIHZhbHVlIHdpbGwgYmUgZGl2aWRlZCBieSBgYmFzZWAuXG4gKi9cbmZ1bmN0aW9uIHNwbGl0Q29sb3JTdHIoc3RyLCBwYXJzZU51bSkge1xuICBjb25zdCBtYXRjaCA9IHN0clxuICAvLyBSZW1vdmUgc3RyIGJlZm9yZSBgKGBcbiAgLnJlcGxhY2UoL15bXihdKlxcKCguKikvLCAnJDEnKVxuICAvLyBSZW1vdmUgc3RyIGFmdGVyIGApYFxuICAucmVwbGFjZSgvXFwpLiovLCAnJykubWF0Y2goL1xcZCpcXC4/XFxkKyU/L2cpIHx8IFtdO1xuICBjb25zdCBudW1MaXN0ID0gbWF0Y2gubWFwKGl0ZW0gPT4gcGFyc2VGbG9hdChpdGVtKSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSArPSAxKSB7XG4gICAgbnVtTGlzdFtpXSA9IHBhcnNlTnVtKG51bUxpc3RbaV0gfHwgMCwgbWF0Y2hbaV0gfHwgJycsIGkpO1xuICB9XG5cbiAgLy8gRm9yIGFscGhhLiA1MCUgc2hvdWxkIGJlIDAuNVxuICBpZiAobWF0Y2hbM10pIHtcbiAgICBudW1MaXN0WzNdID0gbWF0Y2hbM10uaW5jbHVkZXMoJyUnKSA/IG51bUxpc3RbM10gLyAxMDAgOiBudW1MaXN0WzNdO1xuICB9IGVsc2Uge1xuICAgIC8vIEJ5IGRlZmF1bHQsIGFscGhhIGlzIDFcbiAgICBudW1MaXN0WzNdID0gMTtcbiAgfVxuICByZXR1cm4gbnVtTGlzdDtcbn1cbmNvbnN0IHBhcnNlSFNWb3JIU0wgPSAobnVtLCBfLCBpbmRleCkgPT4gaW5kZXggPT09IDAgPyBudW0gOiBudW0gLyAxMDA7XG5cbi8qKiByb3VuZCBhbmQgbGltaXQgbnVtYmVyIHRvIGludGVnZXIgYmV0d2VlbiAwLTI1NSAqL1xuZnVuY3Rpb24gbGltaXRSYW5nZSh2YWx1ZSwgbWF4KSB7XG4gIGNvbnN0IG1lcmdlZE1heCA9IG1heCB8fCAyNTU7XG4gIGlmICh2YWx1ZSA+IG1lcmdlZE1heCkge1xuICAgIHJldHVybiBtZXJnZWRNYXg7XG4gIH1cbiAgaWYgKHZhbHVlIDwgMCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmV4cG9ydCBjbGFzcyBGYXN0Q29sb3Ige1xuICAvKipcbiAgICogQWxsIEZhc3RDb2xvciBvYmplY3RzIGFyZSB2YWxpZC4gU28gaXNWYWxpZCBpcyBhbHdheXMgdHJ1ZS4gVGhpcyBwcm9wZXJ0eSBpcyBrZXB0IHRvIGJlIGNvbXBhdGlibGUgd2l0aCBUaW55Q29sb3IuXG4gICAqL1xuICBpc1ZhbGlkID0gdHJ1ZTtcblxuICAvKipcbiAgICogUmVkLCBSIGluIFJHQlxuICAgKi9cbiAgciA9IDA7XG5cbiAgLyoqXG4gICAqIEdyZWVuLCBHIGluIFJHQlxuICAgKi9cbiAgZyA9IDA7XG5cbiAgLyoqXG4gICAqIEJsdWUsIEIgaW4gUkdCXG4gICAqL1xuICBiID0gMDtcblxuICAvKipcbiAgICogQWxwaGEvT3BhY2l0eSwgQSBpbiBSR0JBL0hTTEFcbiAgICovXG4gIGEgPSAxO1xuXG4gIC8vIEhTViBwcml2YXRlc1xuICBfaDtcbiAgX2hzbF9zO1xuICBfaHN2X3M7XG4gIF9sO1xuICBfdjtcblxuICAvLyBpbnRlcm1lZGlhdGUgdmFyaWFibGVzIHRvIGNhbGN1bGF0ZSBIU0wvSFNWXG4gIF9tYXg7XG4gIF9taW47XG4gIF9icmlnaHRuZXNzO1xuICBjb25zdHJ1Y3RvcihpbnB1dCkge1xuICAgIC8qKlxuICAgICAqIEFsd2F5cyBjaGVjayAzIGNoYXIgaW4gdGhlIG9iamVjdCB0byBkZXRlcm1pbmUgdGhlIGZvcm1hdC5cbiAgICAgKiBXZSBub3QgdXNlIGZ1bmN0aW9uIGluIGNoZWNrIHRvIHNhdmUgYnVuZGxlIHNpemUuXG4gICAgICogZS5nLiAncmdiJyAtPiB7IHI6IDAsIGc6IDAsIGI6IDAgfS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXRjaEZvcm1hdChzdHIpIHtcbiAgICAgIHJldHVybiBzdHJbMF0gaW4gaW5wdXQgJiYgc3RyWzFdIGluIGlucHV0ICYmIHN0clsyXSBpbiBpbnB1dDtcbiAgICB9XG4gICAgaWYgKCFpbnB1dCkge1xuICAgICAgLy8gRG8gbm90aGluZyBzaW5jZSBhbHJlYWR5IGluaXRpYWxpemVkXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCB0cmltU3RyID0gaW5wdXQudHJpbSgpO1xuICAgICAgZnVuY3Rpb24gbWF0Y2hQcmVmaXgocHJlZml4KSB7XG4gICAgICAgIHJldHVybiB0cmltU3RyLnN0YXJ0c1dpdGgocHJlZml4KTtcbiAgICAgIH1cbiAgICAgIGlmICgvXiM/W0EtRlxcZF17Myw4fSQvaS50ZXN0KHRyaW1TdHIpKSB7XG4gICAgICAgIHRoaXMuZnJvbUhleFN0cmluZyh0cmltU3RyKTtcbiAgICAgIH0gZWxzZSBpZiAobWF0Y2hQcmVmaXgoJ3JnYicpKSB7XG4gICAgICAgIHRoaXMuZnJvbVJnYlN0cmluZyh0cmltU3RyKTtcbiAgICAgIH0gZWxzZSBpZiAobWF0Y2hQcmVmaXgoJ2hzbCcpKSB7XG4gICAgICAgIHRoaXMuZnJvbUhzbFN0cmluZyh0cmltU3RyKTtcbiAgICAgIH0gZWxzZSBpZiAobWF0Y2hQcmVmaXgoJ2hzdicpIHx8IG1hdGNoUHJlZml4KCdoc2InKSkge1xuICAgICAgICB0aGlzLmZyb21Ic3ZTdHJpbmcodHJpbVN0cik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGcm9tIHByZXNldCBjb2xvclxuICAgICAgICBjb25zdCBwcmVzZXRDb2xvciA9IHByZXNldENvbG9yc1t0cmltU3RyLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBpZiAocHJlc2V0Q29sb3IpIHtcbiAgICAgICAgICB0aGlzLmZyb21IZXhTdHJpbmcoXG4gICAgICAgICAgLy8gQ29udmVydCAzNiBoZXggdG8gMTYgaGV4XG4gICAgICAgICAgcGFyc2VJbnQocHJlc2V0Q29sb3IsIDM2KS50b1N0cmluZygxNikucGFkU3RhcnQoNiwgJzAnKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlucHV0IGluc3RhbmNlb2YgRmFzdENvbG9yKSB7XG4gICAgICB0aGlzLnIgPSBpbnB1dC5yO1xuICAgICAgdGhpcy5nID0gaW5wdXQuZztcbiAgICAgIHRoaXMuYiA9IGlucHV0LmI7XG4gICAgICB0aGlzLmEgPSBpbnB1dC5hO1xuICAgICAgdGhpcy5faCA9IGlucHV0Ll9oO1xuICAgICAgdGhpcy5faHNsX3MgPSBpbnB1dC5faHNsX3M7XG4gICAgICB0aGlzLl9oc3ZfcyA9IGlucHV0Ll9oc3ZfcztcbiAgICAgIHRoaXMuX2wgPSBpbnB1dC5fbDtcbiAgICAgIHRoaXMuX3YgPSBpbnB1dC5fdjtcbiAgICB9IGVsc2UgaWYgKG1hdGNoRm9ybWF0KCdyZ2InKSkge1xuICAgICAgdGhpcy5yID0gbGltaXRSYW5nZShpbnB1dC5yKTtcbiAgICAgIHRoaXMuZyA9IGxpbWl0UmFuZ2UoaW5wdXQuZyk7XG4gICAgICB0aGlzLmIgPSBsaW1pdFJhbmdlKGlucHV0LmIpO1xuICAgICAgdGhpcy5hID0gdHlwZW9mIGlucHV0LmEgPT09ICdudW1iZXInID8gbGltaXRSYW5nZShpbnB1dC5hLCAxKSA6IDE7XG4gICAgfSBlbHNlIGlmIChtYXRjaEZvcm1hdCgnaHNsJykpIHtcbiAgICAgIHRoaXMuZnJvbUhzbChpbnB1dCk7XG4gICAgfSBlbHNlIGlmIChtYXRjaEZvcm1hdCgnaHN2JykpIHtcbiAgICAgIHRoaXMuZnJvbUhzdihpbnB1dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQGFudC1kZXNpZ24vZmFzdC1jb2xvcjogdW5zdXBwb3J0ZWQgaW5wdXQgJyArIEpTT04uc3RyaW5naWZ5KGlucHV0KSk7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0gU2V0dGVyID09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgc2V0Uih2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9zYygncicsIHZhbHVlKTtcbiAgfVxuICBzZXRHKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NjKCdnJywgdmFsdWUpO1xuICB9XG4gIHNldEIodmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5fc2MoJ2InLCB2YWx1ZSk7XG4gIH1cbiAgc2V0QSh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9zYygnYScsIHZhbHVlLCAxKTtcbiAgfVxuICBzZXRIdWUodmFsdWUpIHtcbiAgICBjb25zdCBoc3YgPSB0aGlzLnRvSHN2KCk7XG4gICAgaHN2LmggPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcy5fYyhoc3YpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0gR2V0dGVyID09PT09PT09PT09PT09PT09PT09PT09XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwZXJjZWl2ZWQgbHVtaW5hbmNlIG9mIGEgY29sb3IsIGZyb20gMC0xLlxuICAgKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLVdDQUcyMC0yMDA4MTIxMS8jcmVsYXRpdmVsdW1pbmFuY2VkZWZcbiAgICovXG4gIGdldEx1bWluYW5jZSgpIHtcbiAgICBmdW5jdGlvbiBhZGp1c3RHYW1tYShyYXcpIHtcbiAgICAgIGNvbnN0IHZhbCA9IHJhdyAvIDI1NTtcbiAgICAgIHJldHVybiB2YWwgPD0gMC4wMzkyOCA/IHZhbCAvIDEyLjkyIDogTWF0aC5wb3coKHZhbCArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xuICAgIH1cbiAgICBjb25zdCBSID0gYWRqdXN0R2FtbWEodGhpcy5yKTtcbiAgICBjb25zdCBHID0gYWRqdXN0R2FtbWEodGhpcy5nKTtcbiAgICBjb25zdCBCID0gYWRqdXN0R2FtbWEodGhpcy5iKTtcbiAgICByZXR1cm4gMC4yMTI2ICogUiArIDAuNzE1MiAqIEcgKyAwLjA3MjIgKiBCO1xuICB9XG4gIGdldEh1ZSgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuX2ggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zdCBkZWx0YSA9IHRoaXMuZ2V0TWF4KCkgLSB0aGlzLmdldE1pbigpO1xuICAgICAgaWYgKGRlbHRhID09PSAwKSB7XG4gICAgICAgIHRoaXMuX2ggPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faCA9IHJvdW5kKDYwICogKHRoaXMuciA9PT0gdGhpcy5nZXRNYXgoKSA/ICh0aGlzLmcgLSB0aGlzLmIpIC8gZGVsdGEgKyAodGhpcy5nIDwgdGhpcy5iID8gNiA6IDApIDogdGhpcy5nID09PSB0aGlzLmdldE1heCgpID8gKHRoaXMuYiAtIHRoaXMucikgLyBkZWx0YSArIDIgOiAodGhpcy5yIC0gdGhpcy5nKSAvIGRlbHRhICsgNCkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5faDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBzaG91bGQgdXNlIGdldEhTVlNhdHVyYXRpb24gb3IgZ2V0SFNMU2F0dXJhdGlvbiBpbnN0ZWFkXG4gICAqL1xuICBnZXRTYXR1cmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldEhTVlNhdHVyYXRpb24oKTtcbiAgfVxuICBnZXRIU1ZTYXR1cmF0aW9uKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5faHN2X3MgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zdCBkZWx0YSA9IHRoaXMuZ2V0TWF4KCkgLSB0aGlzLmdldE1pbigpO1xuICAgICAgaWYgKGRlbHRhID09PSAwKSB7XG4gICAgICAgIHRoaXMuX2hzdl9zID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2hzdl9zID0gZGVsdGEgLyB0aGlzLmdldE1heCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5faHN2X3M7XG4gIH1cbiAgZ2V0SFNMU2F0dXJhdGlvbigpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuX2hzbF9zID09PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3QgZGVsdGEgPSB0aGlzLmdldE1heCgpIC0gdGhpcy5nZXRNaW4oKTtcbiAgICAgIGlmIChkZWx0YSA9PT0gMCkge1xuICAgICAgICB0aGlzLl9oc2xfcyA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsID0gdGhpcy5nZXRMaWdodG5lc3MoKTtcbiAgICAgICAgdGhpcy5faHNsX3MgPSBkZWx0YSAvIDI1NSAvICgxIC0gTWF0aC5hYnMoMiAqIGwgLSAxKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9oc2xfcztcbiAgfVxuICBnZXRMaWdodG5lc3MoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9sID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5fbCA9ICh0aGlzLmdldE1heCgpICsgdGhpcy5nZXRNaW4oKSkgLyA1MTA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9sO1xuICB9XG4gIGdldFZhbHVlKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5fdiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMuX3YgPSB0aGlzLmdldE1heCgpIC8gMjU1O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwZXJjZWl2ZWQgYnJpZ2h0bmVzcyBvZiB0aGUgY29sb3IsIGZyb20gMC0yNTUuXG4gICAqIE5vdGU6IHRoaXMgaXMgbm90IHRoZSBiIG9mIEhTQlxuICAgKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0FFUlQjY29sb3ItY29udHJhc3RcbiAgICovXG4gIGdldEJyaWdodG5lc3MoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9icmlnaHRuZXNzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5fYnJpZ2h0bmVzcyA9ICh0aGlzLnIgKiAyOTkgKyB0aGlzLmcgKiA1ODcgKyB0aGlzLmIgKiAxMTQpIC8gMTAwMDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2JyaWdodG5lc3M7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gRnVuYyA9PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBkYXJrZW4oYW1vdW50ID0gMTApIHtcbiAgICBjb25zdCBoID0gdGhpcy5nZXRIdWUoKTtcbiAgICBjb25zdCBzID0gdGhpcy5nZXRTYXR1cmF0aW9uKCk7XG4gICAgbGV0IGwgPSB0aGlzLmdldExpZ2h0bmVzcygpIC0gYW1vdW50IC8gMTAwO1xuICAgIGlmIChsIDwgMCkge1xuICAgICAgbCA9IDA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jKHtcbiAgICAgIGgsXG4gICAgICBzLFxuICAgICAgbCxcbiAgICAgIGE6IHRoaXMuYVxuICAgIH0pO1xuICB9XG4gIGxpZ2h0ZW4oYW1vdW50ID0gMTApIHtcbiAgICBjb25zdCBoID0gdGhpcy5nZXRIdWUoKTtcbiAgICBjb25zdCBzID0gdGhpcy5nZXRTYXR1cmF0aW9uKCk7XG4gICAgbGV0IGwgPSB0aGlzLmdldExpZ2h0bmVzcygpICsgYW1vdW50IC8gMTAwO1xuICAgIGlmIChsID4gMSkge1xuICAgICAgbCA9IDE7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jKHtcbiAgICAgIGgsXG4gICAgICBzLFxuICAgICAgbCxcbiAgICAgIGE6IHRoaXMuYVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1peCB0aGUgY3VycmVudCBjb2xvciBhIGdpdmVuIGFtb3VudCB3aXRoIGFub3RoZXIgY29sb3IsIGZyb20gMCB0byAxMDAuXG4gICAqIDAgbWVhbnMgbm8gbWl4aW5nIChyZXR1cm4gY3VycmVudCBjb2xvcikuXG4gICAqL1xuICBtaXgoaW5wdXQsIGFtb3VudCA9IDUwKSB7XG4gICAgY29uc3QgY29sb3IgPSB0aGlzLl9jKGlucHV0KTtcbiAgICBjb25zdCBwID0gYW1vdW50IC8gMTAwO1xuICAgIGNvbnN0IGNhbGMgPSBrZXkgPT4gKGNvbG9yW2tleV0gLSB0aGlzW2tleV0pICogcCArIHRoaXNba2V5XTtcbiAgICBjb25zdCByZ2JhID0ge1xuICAgICAgcjogcm91bmQoY2FsYygncicpKSxcbiAgICAgIGc6IHJvdW5kKGNhbGMoJ2cnKSksXG4gICAgICBiOiByb3VuZChjYWxjKCdiJykpLFxuICAgICAgYTogcm91bmQoY2FsYygnYScpICogMTAwKSAvIDEwMFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuX2MocmdiYSk7XG4gIH1cblxuICAvKipcbiAgICogTWl4IHRoZSBjb2xvciB3aXRoIHB1cmUgd2hpdGUsIGZyb20gMCB0byAxMDAuXG4gICAqIFByb3ZpZGluZyAwIHdpbGwgZG8gbm90aGluZywgcHJvdmlkaW5nIDEwMCB3aWxsIGFsd2F5cyByZXR1cm4gd2hpdGUuXG4gICAqL1xuICB0aW50KGFtb3VudCA9IDEwKSB7XG4gICAgcmV0dXJuIHRoaXMubWl4KHtcbiAgICAgIHI6IDI1NSxcbiAgICAgIGc6IDI1NSxcbiAgICAgIGI6IDI1NSxcbiAgICAgIGE6IDFcbiAgICB9LCBhbW91bnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1peCB0aGUgY29sb3Igd2l0aCBwdXJlIGJsYWNrLCBmcm9tIDAgdG8gMTAwLlxuICAgKiBQcm92aWRpbmcgMCB3aWxsIGRvIG5vdGhpbmcsIHByb3ZpZGluZyAxMDAgd2lsbCBhbHdheXMgcmV0dXJuIGJsYWNrLlxuICAgKi9cbiAgc2hhZGUoYW1vdW50ID0gMTApIHtcbiAgICByZXR1cm4gdGhpcy5taXgoe1xuICAgICAgcjogMCxcbiAgICAgIGc6IDAsXG4gICAgICBiOiAwLFxuICAgICAgYTogMVxuICAgIH0sIGFtb3VudCk7XG4gIH1cbiAgb25CYWNrZ3JvdW5kKGJhY2tncm91bmQpIHtcbiAgICBjb25zdCBiZyA9IHRoaXMuX2MoYmFja2dyb3VuZCk7XG4gICAgY29uc3QgYWxwaGEgPSB0aGlzLmEgKyBiZy5hICogKDEgLSB0aGlzLmEpO1xuICAgIGNvbnN0IGNhbGMgPSBrZXkgPT4ge1xuICAgICAgcmV0dXJuIHJvdW5kKCh0aGlzW2tleV0gKiB0aGlzLmEgKyBiZ1trZXldICogYmcuYSAqICgxIC0gdGhpcy5hKSkgLyBhbHBoYSk7XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5fYyh7XG4gICAgICByOiBjYWxjKCdyJyksXG4gICAgICBnOiBjYWxjKCdnJyksXG4gICAgICBiOiBjYWxjKCdiJyksXG4gICAgICBhOiBhbHBoYVxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0gU3RhdHVzID09PT09PT09PT09PT09PT09PT09PT09XG4gIGlzRGFyaygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCcmlnaHRuZXNzKCkgPCAxMjg7XG4gIH1cbiAgaXNMaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCcmlnaHRuZXNzKCkgPj0gMTI4O1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IE1JU0MgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIGVxdWFscyhvdGhlcikge1xuICAgIHJldHVybiB0aGlzLnIgPT09IG90aGVyLnIgJiYgdGhpcy5nID09PSBvdGhlci5nICYmIHRoaXMuYiA9PT0gb3RoZXIuYiAmJiB0aGlzLmEgPT09IG90aGVyLmE7XG4gIH1cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ModGhpcyk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PSBGb3JtYXQgPT09PT09PT09PT09PT09PT09PT09PT1cbiAgdG9IZXhTdHJpbmcoKSB7XG4gICAgbGV0IGhleCA9ICcjJztcbiAgICBjb25zdCBySGV4ID0gKHRoaXMuciB8fCAwKS50b1N0cmluZygxNik7XG4gICAgaGV4ICs9IHJIZXgubGVuZ3RoID09PSAyID8gckhleCA6ICcwJyArIHJIZXg7XG4gICAgY29uc3QgZ0hleCA9ICh0aGlzLmcgfHwgMCkudG9TdHJpbmcoMTYpO1xuICAgIGhleCArPSBnSGV4Lmxlbmd0aCA9PT0gMiA/IGdIZXggOiAnMCcgKyBnSGV4O1xuICAgIGNvbnN0IGJIZXggPSAodGhpcy5iIHx8IDApLnRvU3RyaW5nKDE2KTtcbiAgICBoZXggKz0gYkhleC5sZW5ndGggPT09IDIgPyBiSGV4IDogJzAnICsgYkhleDtcbiAgICBpZiAodHlwZW9mIHRoaXMuYSA9PT0gJ251bWJlcicgJiYgdGhpcy5hID49IDAgJiYgdGhpcy5hIDwgMSkge1xuICAgICAgY29uc3QgYUhleCA9IHJvdW5kKHRoaXMuYSAqIDI1NSkudG9TdHJpbmcoMTYpO1xuICAgICAgaGV4ICs9IGFIZXgubGVuZ3RoID09PSAyID8gYUhleCA6ICcwJyArIGFIZXg7XG4gICAgfVxuICAgIHJldHVybiBoZXg7XG4gIH1cblxuICAvKiogQ1NTIHN1cHBvcnQgY29sb3IgcGF0dGVybiAqL1xuICB0b0hzbCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaDogdGhpcy5nZXRIdWUoKSxcbiAgICAgIHM6IHRoaXMuZ2V0SFNMU2F0dXJhdGlvbigpLFxuICAgICAgbDogdGhpcy5nZXRMaWdodG5lc3MoKSxcbiAgICAgIGE6IHRoaXMuYVxuICAgIH07XG4gIH1cblxuICAvKiogQ1NTIHN1cHBvcnQgY29sb3IgcGF0dGVybiAqL1xuICB0b0hzbFN0cmluZygpIHtcbiAgICBjb25zdCBoID0gdGhpcy5nZXRIdWUoKTtcbiAgICBjb25zdCBzID0gcm91bmQodGhpcy5nZXRIU0xTYXR1cmF0aW9uKCkgKiAxMDApO1xuICAgIGNvbnN0IGwgPSByb3VuZCh0aGlzLmdldExpZ2h0bmVzcygpICogMTAwKTtcbiAgICByZXR1cm4gdGhpcy5hICE9PSAxID8gYGhzbGEoJHtofSwke3N9JSwke2x9JSwke3RoaXMuYX0pYCA6IGBoc2woJHtofSwke3N9JSwke2x9JSlgO1xuICB9XG5cbiAgLyoqIFNhbWUgYXMgdG9Ic2IgKi9cbiAgdG9Ic3YoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGg6IHRoaXMuZ2V0SHVlKCksXG4gICAgICBzOiB0aGlzLmdldEhTVlNhdHVyYXRpb24oKSxcbiAgICAgIHY6IHRoaXMuZ2V0VmFsdWUoKSxcbiAgICAgIGE6IHRoaXMuYVxuICAgIH07XG4gIH1cbiAgdG9SZ2IoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHI6IHRoaXMucixcbiAgICAgIGc6IHRoaXMuZyxcbiAgICAgIGI6IHRoaXMuYixcbiAgICAgIGE6IHRoaXMuYVxuICAgIH07XG4gIH1cbiAgdG9SZ2JTdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuYSAhPT0gMSA/IGByZ2JhKCR7dGhpcy5yfSwke3RoaXMuZ30sJHt0aGlzLmJ9LCR7dGhpcy5hfSlgIDogYHJnYigke3RoaXMucn0sJHt0aGlzLmd9LCR7dGhpcy5ifSlgO1xuICB9XG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnRvUmdiU3RyaW5nKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09IFByaXZhdGVzID09PT09PT09PT09PT09PT09PT09PT1cbiAgLyoqIFJldHVybiBhIG5ldyBGYXN0Q29sb3Igb2JqZWN0IHdpdGggb25lIGNoYW5uZWwgY2hhbmdlZCAqL1xuICBfc2MocmdiLCB2YWx1ZSwgbWF4KSB7XG4gICAgY29uc3QgY2xvbmUgPSB0aGlzLmNsb25lKCk7XG4gICAgY2xvbmVbcmdiXSA9IGxpbWl0UmFuZ2UodmFsdWUsIG1heCk7XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG4gIF9jKGlucHV0KSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKGlucHV0KTtcbiAgfVxuICBnZXRNYXgoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9tYXggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLl9tYXggPSBNYXRoLm1heCh0aGlzLnIsIHRoaXMuZywgdGhpcy5iKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX21heDtcbiAgfVxuICBnZXRNaW4oKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9taW4gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLl9taW4gPSBNYXRoLm1pbih0aGlzLnIsIHRoaXMuZywgdGhpcy5iKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX21pbjtcbiAgfVxuICBmcm9tSGV4U3RyaW5nKHRyaW1TdHIpIHtcbiAgICBjb25zdCB3aXRob3V0UHJlZml4ID0gdHJpbVN0ci5yZXBsYWNlKCcjJywgJycpO1xuICAgIGZ1bmN0aW9uIGNvbm5lY3ROdW0oaW5kZXgxLCBpbmRleDIpIHtcbiAgICAgIHJldHVybiBwYXJzZUludCh3aXRob3V0UHJlZml4W2luZGV4MV0gKyB3aXRob3V0UHJlZml4W2luZGV4MiB8fCBpbmRleDFdLCAxNik7XG4gICAgfVxuICAgIGlmICh3aXRob3V0UHJlZml4Lmxlbmd0aCA8IDYpIHtcbiAgICAgIC8vICNyZ2Igb3IgI3JnYmFcbiAgICAgIHRoaXMuciA9IGNvbm5lY3ROdW0oMCk7XG4gICAgICB0aGlzLmcgPSBjb25uZWN0TnVtKDEpO1xuICAgICAgdGhpcy5iID0gY29ubmVjdE51bSgyKTtcbiAgICAgIHRoaXMuYSA9IHdpdGhvdXRQcmVmaXhbM10gPyBjb25uZWN0TnVtKDMpIC8gMjU1IDogMTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gI3JyZ2diYiBvciAjcnJnZ2JiYWFcbiAgICAgIHRoaXMuciA9IGNvbm5lY3ROdW0oMCwgMSk7XG4gICAgICB0aGlzLmcgPSBjb25uZWN0TnVtKDIsIDMpO1xuICAgICAgdGhpcy5iID0gY29ubmVjdE51bSg0LCA1KTtcbiAgICAgIHRoaXMuYSA9IHdpdGhvdXRQcmVmaXhbNl0gPyBjb25uZWN0TnVtKDYsIDcpIC8gMjU1IDogMTtcbiAgICB9XG4gIH1cbiAgZnJvbUhzbCh7XG4gICAgaDogX2gsXG4gICAgcyxcbiAgICBsLFxuICAgIGFcbiAgfSkge1xuICAgIGNvbnN0IGggPSAoX2ggJSAzNjAgKyAzNjApICUgMzYwO1xuICAgIHRoaXMuX2ggPSBoO1xuICAgIHRoaXMuX2hzbF9zID0gcztcbiAgICB0aGlzLl9sID0gbDtcbiAgICB0aGlzLmEgPSB0eXBlb2YgYSA9PT0gJ251bWJlcicgPyBhIDogMTtcbiAgICBpZiAocyA8PSAwKSB7XG4gICAgICBjb25zdCByZ2IgPSByb3VuZChsICogMjU1KTtcbiAgICAgIHRoaXMuciA9IHJnYjtcbiAgICAgIHRoaXMuZyA9IHJnYjtcbiAgICAgIHRoaXMuYiA9IHJnYjtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHIgPSAwLFxuICAgICAgZyA9IDAsXG4gICAgICBiID0gMDtcbiAgICBjb25zdCBodWVQcmltZSA9IGggLyA2MDtcbiAgICBjb25zdCBjaHJvbWEgPSAoMSAtIE1hdGguYWJzKDIgKiBsIC0gMSkpICogcztcbiAgICBjb25zdCBzZWNvbmRDb21wb25lbnQgPSBjaHJvbWEgKiAoMSAtIE1hdGguYWJzKGh1ZVByaW1lICUgMiAtIDEpKTtcbiAgICBpZiAoaHVlUHJpbWUgPj0gMCAmJiBodWVQcmltZSA8IDEpIHtcbiAgICAgIHIgPSBjaHJvbWE7XG4gICAgICBnID0gc2Vjb25kQ29tcG9uZW50O1xuICAgIH0gZWxzZSBpZiAoaHVlUHJpbWUgPj0gMSAmJiBodWVQcmltZSA8IDIpIHtcbiAgICAgIHIgPSBzZWNvbmRDb21wb25lbnQ7XG4gICAgICBnID0gY2hyb21hO1xuICAgIH0gZWxzZSBpZiAoaHVlUHJpbWUgPj0gMiAmJiBodWVQcmltZSA8IDMpIHtcbiAgICAgIGcgPSBjaHJvbWE7XG4gICAgICBiID0gc2Vjb25kQ29tcG9uZW50O1xuICAgIH0gZWxzZSBpZiAoaHVlUHJpbWUgPj0gMyAmJiBodWVQcmltZSA8IDQpIHtcbiAgICAgIGcgPSBzZWNvbmRDb21wb25lbnQ7XG4gICAgICBiID0gY2hyb21hO1xuICAgIH0gZWxzZSBpZiAoaHVlUHJpbWUgPj0gNCAmJiBodWVQcmltZSA8IDUpIHtcbiAgICAgIHIgPSBzZWNvbmRDb21wb25lbnQ7XG4gICAgICBiID0gY2hyb21hO1xuICAgIH0gZWxzZSBpZiAoaHVlUHJpbWUgPj0gNSAmJiBodWVQcmltZSA8IDYpIHtcbiAgICAgIHIgPSBjaHJvbWE7XG4gICAgICBiID0gc2Vjb25kQ29tcG9uZW50O1xuICAgIH1cbiAgICBjb25zdCBsaWdodG5lc3NNb2RpZmljYXRpb24gPSBsIC0gY2hyb21hIC8gMjtcbiAgICB0aGlzLnIgPSByb3VuZCgociArIGxpZ2h0bmVzc01vZGlmaWNhdGlvbikgKiAyNTUpO1xuICAgIHRoaXMuZyA9IHJvdW5kKChnICsgbGlnaHRuZXNzTW9kaWZpY2F0aW9uKSAqIDI1NSk7XG4gICAgdGhpcy5iID0gcm91bmQoKGIgKyBsaWdodG5lc3NNb2RpZmljYXRpb24pICogMjU1KTtcbiAgfVxuICBmcm9tSHN2KHtcbiAgICBoOiBfaCxcbiAgICBzLFxuICAgIHYsXG4gICAgYVxuICB9KSB7XG4gICAgY29uc3QgaCA9IChfaCAlIDM2MCArIDM2MCkgJSAzNjA7XG4gICAgdGhpcy5faCA9IGg7XG4gICAgdGhpcy5faHN2X3MgPSBzO1xuICAgIHRoaXMuX3YgPSB2O1xuICAgIHRoaXMuYSA9IHR5cGVvZiBhID09PSAnbnVtYmVyJyA/IGEgOiAxO1xuICAgIGNvbnN0IHZ2ID0gcm91bmQodiAqIDI1NSk7XG4gICAgdGhpcy5yID0gdnY7XG4gICAgdGhpcy5nID0gdnY7XG4gICAgdGhpcy5iID0gdnY7XG4gICAgaWYgKHMgPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBoaCA9IGggLyA2MDtcbiAgICBjb25zdCBpID0gTWF0aC5mbG9vcihoaCk7XG4gICAgY29uc3QgZmYgPSBoaCAtIGk7XG4gICAgY29uc3QgcCA9IHJvdW5kKHYgKiAoMS4wIC0gcykgKiAyNTUpO1xuICAgIGNvbnN0IHEgPSByb3VuZCh2ICogKDEuMCAtIHMgKiBmZikgKiAyNTUpO1xuICAgIGNvbnN0IHQgPSByb3VuZCh2ICogKDEuMCAtIHMgKiAoMS4wIC0gZmYpKSAqIDI1NSk7XG4gICAgc3dpdGNoIChpKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHRoaXMuZyA9IHQ7XG4gICAgICAgIHRoaXMuYiA9IHA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICB0aGlzLnIgPSBxO1xuICAgICAgICB0aGlzLmIgPSBwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgdGhpcy5yID0gcDtcbiAgICAgICAgdGhpcy5iID0gdDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHRoaXMuciA9IHA7XG4gICAgICAgIHRoaXMuZyA9IHE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA0OlxuICAgICAgICB0aGlzLnIgPSB0O1xuICAgICAgICB0aGlzLmcgPSBwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNTpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuZyA9IHA7XG4gICAgICAgIHRoaXMuYiA9IHE7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBmcm9tSHN2U3RyaW5nKHRyaW1TdHIpIHtcbiAgICBjb25zdCBjZWxscyA9IHNwbGl0Q29sb3JTdHIodHJpbVN0ciwgcGFyc2VIU1ZvckhTTCk7XG4gICAgdGhpcy5mcm9tSHN2KHtcbiAgICAgIGg6IGNlbGxzWzBdLFxuICAgICAgczogY2VsbHNbMV0sXG4gICAgICB2OiBjZWxsc1syXSxcbiAgICAgIGE6IGNlbGxzWzNdXG4gICAgfSk7XG4gIH1cbiAgZnJvbUhzbFN0cmluZyh0cmltU3RyKSB7XG4gICAgY29uc3QgY2VsbHMgPSBzcGxpdENvbG9yU3RyKHRyaW1TdHIsIHBhcnNlSFNWb3JIU0wpO1xuICAgIHRoaXMuZnJvbUhzbCh7XG4gICAgICBoOiBjZWxsc1swXSxcbiAgICAgIHM6IGNlbGxzWzFdLFxuICAgICAgbDogY2VsbHNbMl0sXG4gICAgICBhOiBjZWxsc1szXVxuICAgIH0pO1xuICB9XG4gIGZyb21SZ2JTdHJpbmcodHJpbVN0cikge1xuICAgIGNvbnN0IGNlbGxzID0gc3BsaXRDb2xvclN0cih0cmltU3RyLCAobnVtLCB0eHQpID0+XG4gICAgLy8gQ29udmVydCBwZXJjZW50YWdlIHRvIG51bWJlci4gZS5nLiA1MCUgLT4gMTI4XG4gICAgdHh0LmluY2x1ZGVzKCclJykgPyByb3VuZChudW0gLyAxMDAgKiAyNTUpIDogbnVtKTtcbiAgICB0aGlzLnIgPSBjZWxsc1swXTtcbiAgICB0aGlzLmcgPSBjZWxsc1sxXTtcbiAgICB0aGlzLmIgPSBjZWxsc1syXTtcbiAgICB0aGlzLmEgPSBjZWxsc1szXTtcbiAgfVxufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///103\n\n}");
50
+
51
+ /***/ },
52
+
53
+ /***/ 82
54
+ /*!****************************************************************************************************************!*\
55
+ !*** ../../../node_modules/.pnpm/@ant-design+fast-color@3.0.1/node_modules/@ant-design/fast-color/es/index.js ***!
56
+ \****************************************************************************************************************/
57
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
58
+
59
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ FastColor: () => (/* reexport safe */ _FastColor__WEBPACK_IMPORTED_MODULE_0__.FastColor)\n/* harmony export */ });\n/* harmony import */ var _FastColor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./FastColor */ 103);\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./types */ 47);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQTRCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGV4cGNsdXN0ZXIvcGVybWlzc2lvbi1ncm91cHMvLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhbnQtZGVzaWduK2Zhc3QtY29sb3JAMy4wLjEvbm9kZV9tb2R1bGVzL0BhbnQtZGVzaWduL2Zhc3QtY29sb3IvZXMvaW5kZXguanM/YzFiZCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9GYXN0Q29sb3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCI7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///82\n\n}");
60
+
61
+ /***/ },
62
+
63
+ /***/ 63
64
+ /*!***********************************************************************************************************************!*\
65
+ !*** ../../../node_modules/.pnpm/@ant-design+fast-color@3.0.1/node_modules/@ant-design/fast-color/es/presetColors.js ***!
66
+ \***********************************************************************************************************************/
67
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
68
+
69
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n// 36 Hex to reduce the size of the file\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n aliceblue: '9ehhb',\n antiquewhite: '9sgk7',\n aqua: '1ekf',\n aquamarine: '4zsno',\n azure: '9eiv3',\n beige: '9lhp8',\n bisque: '9zg04',\n black: '0',\n blanchedalmond: '9zhe5',\n blue: '73',\n blueviolet: '5e31e',\n brown: '6g016',\n burlywood: '8ouiv',\n cadetblue: '3qba8',\n chartreuse: '4zshs',\n chocolate: '87k0u',\n coral: '9yvyo',\n cornflowerblue: '3xael',\n cornsilk: '9zjz0',\n crimson: '8l4xo',\n cyan: '1ekf',\n darkblue: '3v',\n darkcyan: 'rkb',\n darkgoldenrod: '776yz',\n darkgray: '6mbhl',\n darkgreen: 'jr4',\n darkgrey: '6mbhl',\n darkkhaki: '7ehkb',\n darkmagenta: '5f91n',\n darkolivegreen: '3bzfz',\n darkorange: '9yygw',\n darkorchid: '5z6x8',\n darkred: '5f8xs',\n darksalmon: '9441m',\n darkseagreen: '5lwgf',\n darkslateblue: '2th1n',\n darkslategray: '1ugcv',\n darkslategrey: '1ugcv',\n darkturquoise: '14up',\n darkviolet: '5rw7n',\n deeppink: '9yavn',\n deepskyblue: '11xb',\n dimgray: '442g9',\n dimgrey: '442g9',\n dodgerblue: '16xof',\n firebrick: '6y7tu',\n floralwhite: '9zkds',\n forestgreen: '1cisi',\n fuchsia: '9y70f',\n gainsboro: '8m8kc',\n ghostwhite: '9pq0v',\n goldenrod: '8j4f4',\n gold: '9zda8',\n gray: '50i2o',\n green: 'pa8',\n greenyellow: '6senj',\n grey: '50i2o',\n honeydew: '9eiuo',\n hotpink: '9yrp0',\n indianred: '80gnw',\n indigo: '2xcoy',\n ivory: '9zldc',\n khaki: '9edu4',\n lavenderblush: '9ziet',\n lavender: '90c8q',\n lawngreen: '4vk74',\n lemonchiffon: '9zkct',\n lightblue: '6s73a',\n lightcoral: '9dtog',\n lightcyan: '8s1rz',\n lightgoldenrodyellow: '9sjiq',\n lightgray: '89jo3',\n lightgreen: '5nkwg',\n lightgrey: '89jo3',\n lightpink: '9z6wx',\n lightsalmon: '9z2ii',\n lightseagreen: '19xgq',\n lightskyblue: '5arju',\n lightslategray: '4nwk9',\n lightslategrey: '4nwk9',\n lightsteelblue: '6wau6',\n lightyellow: '9zlcw',\n lime: '1edc',\n limegreen: '1zcxe',\n linen: '9shk6',\n magenta: '9y70f',\n maroon: '4zsow',\n mediumaquamarine: '40eju',\n mediumblue: '5p',\n mediumorchid: '79qkz',\n mediumpurple: '5r3rv',\n mediumseagreen: '2d9ip',\n mediumslateblue: '4tcku',\n mediumspringgreen: '1di2',\n mediumturquoise: '2uabw',\n mediumvioletred: '7rn9h',\n midnightblue: 'z980',\n mintcream: '9ljp6',\n mistyrose: '9zg0x',\n moccasin: '9zfzp',\n navajowhite: '9zest',\n navy: '3k',\n oldlace: '9wq92',\n olive: '50hz4',\n olivedrab: '472ub',\n orange: '9z3eo',\n orangered: '9ykg0',\n orchid: '8iu3a',\n palegoldenrod: '9bl4a',\n palegreen: '5yw0o',\n paleturquoise: '6v4ku',\n palevioletred: '8k8lv',\n papayawhip: '9zi6t',\n peachpuff: '9ze0p',\n peru: '80oqn',\n pink: '9z8wb',\n plum: '8nba5',\n powderblue: '6wgdi',\n purple: '4zssg',\n rebeccapurple: '3zk49',\n red: '9y6tc',\n rosybrown: '7cv4f',\n royalblue: '2jvtt',\n saddlebrown: '5fmkz',\n salmon: '9rvci',\n sandybrown: '9jn1c',\n seagreen: '1tdnb',\n seashell: '9zje6',\n sienna: '6973h',\n silver: '7ir40',\n skyblue: '5arjf',\n slateblue: '45e4t',\n slategray: '4e100',\n slategrey: '4e100',\n snow: '9zke2',\n springgreen: '1egv',\n steelblue: '2r1kk',\n tan: '87yx8',\n teal: 'pds',\n thistle: '8ggk8',\n tomato: '9yqfb',\n turquoise: '2j4r4',\n violet: '9b10u',\n wheat: '9ld4j',\n white: '9zldr',\n whitesmoke: '9lhpx',\n yellow: '9zl6o',\n yellowgreen: '61fzm'\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0EsaUVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZXhwY2x1c3Rlci9wZXJtaXNzaW9uLWdyb3Vwcy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGFudC1kZXNpZ24rZmFzdC1jb2xvckAzLjAuMS9ub2RlX21vZHVsZXMvQGFudC1kZXNpZ24vZmFzdC1jb2xvci9lcy9wcmVzZXRDb2xvcnMuanM/MjIyZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAzNiBIZXggdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBmaWxlXG5leHBvcnQgZGVmYXVsdCB7XG4gIGFsaWNlYmx1ZTogJzllaGhiJyxcbiAgYW50aXF1ZXdoaXRlOiAnOXNnazcnLFxuICBhcXVhOiAnMWVrZicsXG4gIGFxdWFtYXJpbmU6ICc0enNubycsXG4gIGF6dXJlOiAnOWVpdjMnLFxuICBiZWlnZTogJzlsaHA4JyxcbiAgYmlzcXVlOiAnOXpnMDQnLFxuICBibGFjazogJzAnLFxuICBibGFuY2hlZGFsbW9uZDogJzl6aGU1JyxcbiAgYmx1ZTogJzczJyxcbiAgYmx1ZXZpb2xldDogJzVlMzFlJyxcbiAgYnJvd246ICc2ZzAxNicsXG4gIGJ1cmx5d29vZDogJzhvdWl2JyxcbiAgY2FkZXRibHVlOiAnM3FiYTgnLFxuICBjaGFydHJldXNlOiAnNHpzaHMnLFxuICBjaG9jb2xhdGU6ICc4N2swdScsXG4gIGNvcmFsOiAnOXl2eW8nLFxuICBjb3JuZmxvd2VyYmx1ZTogJzN4YWVsJyxcbiAgY29ybnNpbGs6ICc5emp6MCcsXG4gIGNyaW1zb246ICc4bDR4bycsXG4gIGN5YW46ICcxZWtmJyxcbiAgZGFya2JsdWU6ICczdicsXG4gIGRhcmtjeWFuOiAncmtiJyxcbiAgZGFya2dvbGRlbnJvZDogJzc3Nnl6JyxcbiAgZGFya2dyYXk6ICc2bWJobCcsXG4gIGRhcmtncmVlbjogJ2pyNCcsXG4gIGRhcmtncmV5OiAnNm1iaGwnLFxuICBkYXJra2hha2k6ICc3ZWhrYicsXG4gIGRhcmttYWdlbnRhOiAnNWY5MW4nLFxuICBkYXJrb2xpdmVncmVlbjogJzNiemZ6JyxcbiAgZGFya29yYW5nZTogJzl5eWd3JyxcbiAgZGFya29yY2hpZDogJzV6Nng4JyxcbiAgZGFya3JlZDogJzVmOHhzJyxcbiAgZGFya3NhbG1vbjogJzk0NDFtJyxcbiAgZGFya3NlYWdyZWVuOiAnNWx3Z2YnLFxuICBkYXJrc2xhdGVibHVlOiAnMnRoMW4nLFxuICBkYXJrc2xhdGVncmF5OiAnMXVnY3YnLFxuICBkYXJrc2xhdGVncmV5OiAnMXVnY3YnLFxuICBkYXJrdHVycXVvaXNlOiAnMTR1cCcsXG4gIGRhcmt2aW9sZXQ6ICc1cnc3bicsXG4gIGRlZXBwaW5rOiAnOXlhdm4nLFxuICBkZWVwc2t5Ymx1ZTogJzExeGInLFxuICBkaW1ncmF5OiAnNDQyZzknLFxuICBkaW1ncmV5OiAnNDQyZzknLFxuICBkb2RnZXJibHVlOiAnMTZ4b2YnLFxuICBmaXJlYnJpY2s6ICc2eTd0dScsXG4gIGZsb3JhbHdoaXRlOiAnOXprZHMnLFxuICBmb3Jlc3RncmVlbjogJzFjaXNpJyxcbiAgZnVjaHNpYTogJzl5NzBmJyxcbiAgZ2FpbnNib3JvOiAnOG04a2MnLFxuICBnaG9zdHdoaXRlOiAnOXBxMHYnLFxuICBnb2xkZW5yb2Q6ICc4ajRmNCcsXG4gIGdvbGQ6ICc5emRhOCcsXG4gIGdyYXk6ICc1MGkybycsXG4gIGdyZWVuOiAncGE4JyxcbiAgZ3JlZW55ZWxsb3c6ICc2c2VuaicsXG4gIGdyZXk6ICc1MGkybycsXG4gIGhvbmV5ZGV3OiAnOWVpdW8nLFxuICBob3RwaW5rOiAnOXlycDAnLFxuICBpbmRpYW5yZWQ6ICc4MGdudycsXG4gIGluZGlnbzogJzJ4Y295JyxcbiAgaXZvcnk6ICc5emxkYycsXG4gIGtoYWtpOiAnOWVkdTQnLFxuICBsYXZlbmRlcmJsdXNoOiAnOXppZXQnLFxuICBsYXZlbmRlcjogJzkwYzhxJyxcbiAgbGF3bmdyZWVuOiAnNHZrNzQnLFxuICBsZW1vbmNoaWZmb246ICc5emtjdCcsXG4gIGxpZ2h0Ymx1ZTogJzZzNzNhJyxcbiAgbGlnaHRjb3JhbDogJzlkdG9nJyxcbiAgbGlnaHRjeWFuOiAnOHMxcnonLFxuICBsaWdodGdvbGRlbnJvZHllbGxvdzogJzlzamlxJyxcbiAgbGlnaHRncmF5OiAnODlqbzMnLFxuICBsaWdodGdyZWVuOiAnNW5rd2cnLFxuICBsaWdodGdyZXk6ICc4OWpvMycsXG4gIGxpZ2h0cGluazogJzl6Nnd4JyxcbiAgbGlnaHRzYWxtb246ICc5ejJpaScsXG4gIGxpZ2h0c2VhZ3JlZW46ICcxOXhncScsXG4gIGxpZ2h0c2t5Ymx1ZTogJzVhcmp1JyxcbiAgbGlnaHRzbGF0ZWdyYXk6ICc0bndrOScsXG4gIGxpZ2h0c2xhdGVncmV5OiAnNG53azknLFxuICBsaWdodHN0ZWVsYmx1ZTogJzZ3YXU2JyxcbiAgbGlnaHR5ZWxsb3c6ICc5emxjdycsXG4gIGxpbWU6ICcxZWRjJyxcbiAgbGltZWdyZWVuOiAnMXpjeGUnLFxuICBsaW5lbjogJzlzaGs2JyxcbiAgbWFnZW50YTogJzl5NzBmJyxcbiAgbWFyb29uOiAnNHpzb3cnLFxuICBtZWRpdW1hcXVhbWFyaW5lOiAnNDBlanUnLFxuICBtZWRpdW1ibHVlOiAnNXAnLFxuICBtZWRpdW1vcmNoaWQ6ICc3OXFreicsXG4gIG1lZGl1bXB1cnBsZTogJzVyM3J2JyxcbiAgbWVkaXVtc2VhZ3JlZW46ICcyZDlpcCcsXG4gIG1lZGl1bXNsYXRlYmx1ZTogJzR0Y2t1JyxcbiAgbWVkaXVtc3ByaW5nZ3JlZW46ICcxZGkyJyxcbiAgbWVkaXVtdHVycXVvaXNlOiAnMnVhYncnLFxuICBtZWRpdW12aW9sZXRyZWQ6ICc3cm45aCcsXG4gIG1pZG5pZ2h0Ymx1ZTogJ3o5ODAnLFxuICBtaW50Y3JlYW06ICc5bGpwNicsXG4gIG1pc3R5cm9zZTogJzl6ZzB4JyxcbiAgbW9jY2FzaW46ICc5emZ6cCcsXG4gIG5hdmFqb3doaXRlOiAnOXplc3QnLFxuICBuYXZ5OiAnM2snLFxuICBvbGRsYWNlOiAnOXdxOTInLFxuICBvbGl2ZTogJzUwaHo0JyxcbiAgb2xpdmVkcmFiOiAnNDcydWInLFxuICBvcmFuZ2U6ICc5ejNlbycsXG4gIG9yYW5nZXJlZDogJzl5a2cwJyxcbiAgb3JjaGlkOiAnOGl1M2EnLFxuICBwYWxlZ29sZGVucm9kOiAnOWJsNGEnLFxuICBwYWxlZ3JlZW46ICc1eXcwbycsXG4gIHBhbGV0dXJxdW9pc2U6ICc2djRrdScsXG4gIHBhbGV2aW9sZXRyZWQ6ICc4azhsdicsXG4gIHBhcGF5YXdoaXA6ICc5emk2dCcsXG4gIHBlYWNocHVmZjogJzl6ZTBwJyxcbiAgcGVydTogJzgwb3FuJyxcbiAgcGluazogJzl6OHdiJyxcbiAgcGx1bTogJzhuYmE1JyxcbiAgcG93ZGVyYmx1ZTogJzZ3Z2RpJyxcbiAgcHVycGxlOiAnNHpzc2cnLFxuICByZWJlY2NhcHVycGxlOiAnM3prNDknLFxuICByZWQ6ICc5eTZ0YycsXG4gIHJvc3licm93bjogJzdjdjRmJyxcbiAgcm95YWxibHVlOiAnMmp2dHQnLFxuICBzYWRkbGVicm93bjogJzVmbWt6JyxcbiAgc2FsbW9uOiAnOXJ2Y2knLFxuICBzYW5keWJyb3duOiAnOWpuMWMnLFxuICBzZWFncmVlbjogJzF0ZG5iJyxcbiAgc2Vhc2hlbGw6ICc5emplNicsXG4gIHNpZW5uYTogJzY5NzNoJyxcbiAgc2lsdmVyOiAnN2lyNDAnLFxuICBza3libHVlOiAnNWFyamYnLFxuICBzbGF0ZWJsdWU6ICc0NWU0dCcsXG4gIHNsYXRlZ3JheTogJzRlMTAwJyxcbiAgc2xhdGVncmV5OiAnNGUxMDAnLFxuICBzbm93OiAnOXprZTInLFxuICBzcHJpbmdncmVlbjogJzFlZ3YnLFxuICBzdGVlbGJsdWU6ICcycjFraycsXG4gIHRhbjogJzg3eXg4JyxcbiAgdGVhbDogJ3BkcycsXG4gIHRoaXN0bGU6ICc4Z2drOCcsXG4gIHRvbWF0bzogJzl5cWZiJyxcbiAgdHVycXVvaXNlOiAnMmo0cjQnLFxuICB2aW9sZXQ6ICc5YjEwdScsXG4gIHdoZWF0OiAnOWxkNGonLFxuICB3aGl0ZTogJzl6bGRyJyxcbiAgd2hpdGVzbW9rZTogJzlsaHB4JyxcbiAgeWVsbG93OiAnOXpsNm8nLFxuICB5ZWxsb3dncmVlbjogJzYxZnptJ1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///63\n\n}");
70
+
71
+ /***/ },
72
+
73
+ /***/ 47
74
+ /*!****************************************************************************************************************!*\
75
+ !*** ../../../node_modules/.pnpm/@ant-design+fast-color@3.0.1/node_modules/@ant-design/fast-color/es/types.js ***!
76
+ \****************************************************************************************************************/
77
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
78
+
79
+ __webpack_require__.r(__webpack_exports__);
80
+
81
+
82
+ /***/ },
83
+
84
+ /***/ 578
85
+ /*!***************************************************************************************************************************!*\
86
+ !*** ../../../node_modules/.pnpm/@ant-design+icons-svg@4.4.2/node_modules/@ant-design/icons-svg/es/asn/DeleteOutlined.js ***!
87
+ \***************************************************************************************************************************/
88
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
89
+
90
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n// This icon file is generated automatically.\nvar DeleteOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z\" } }] }, \"name\": \"delete\", \"theme\": \"outlined\" };\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DeleteOutlined);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc4LmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBLHVCQUF1QixVQUFVLHlCQUF5QixrREFBa0QsaUJBQWlCLDBCQUEwQiw4VkFBOFYsR0FBRztBQUN4ZixpRUFBZSxjQUFjLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZXhwY2x1c3Rlci9wZXJtaXNzaW9uLWdyb3Vwcy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGFudC1kZXNpZ24raWNvbnMtc3ZnQDQuNC4yL25vZGVfbW9kdWxlcy9AYW50LWRlc2lnbi9pY29ucy1zdmcvZXMvYXNuL0RlbGV0ZU91dGxpbmVkLmpzPzUxMzAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBpY29uIGZpbGUgaXMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkuXG52YXIgRGVsZXRlT3V0bGluZWQgPSB7IFwiaWNvblwiOiB7IFwidGFnXCI6IFwic3ZnXCIsIFwiYXR0cnNcIjogeyBcInZpZXdCb3hcIjogXCI2NCA2NCA4OTYgODk2XCIsIFwiZm9jdXNhYmxlXCI6IFwiZmFsc2VcIiB9LCBcImNoaWxkcmVuXCI6IFt7IFwidGFnXCI6IFwicGF0aFwiLCBcImF0dHJzXCI6IHsgXCJkXCI6IFwiTTM2MCAxODRoLThjNC40IDAgOC0zLjYgOC04djhoMzA0di04YzAgNC40IDMuNiA4IDggOGgtOHY3Mmg3MnYtODBjMC0zNS4zLTI4LjctNjQtNjQtNjRIMzUyYy0zNS4zIDAtNjQgMjguNy02NCA2NHY4MGg3MnYtNzJ6bTUwNCA3MkgxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjMyYzAgNC40IDMuNiA4IDggOGg2MC40bDI0LjcgNTIzYzEuNiAzNC4xIDI5LjggNjEgNjMuOSA2MWg0NTRjMzQuMiAwIDYyLjMtMjYuOCA2My45LTYxbDI0LjctNTIzSDg4OGM0LjQgMCA4LTMuNiA4LTh2LTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyek03MzEuMyA4NDBIMjkyLjdsLTI0LjItNTEyaDQ4N2wtMjQuMiA1MTJ6XCIgfSB9XSB9LCBcIm5hbWVcIjogXCJkZWxldGVcIiwgXCJ0aGVtZVwiOiBcIm91dGxpbmVkXCIgfTtcbmV4cG9ydCBkZWZhdWx0IERlbGV0ZU91dGxpbmVkO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///578\n\n}");
91
+
92
+ /***/ },
93
+
94
+ /***/ 421
95
+ /*!*************************************************************************************************************************!*\
96
+ !*** ../../../node_modules/.pnpm/@ant-design+icons-svg@4.4.2/node_modules/@ant-design/icons-svg/es/asn/EditOutlined.js ***!
97
+ \*************************************************************************************************************************/
98
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
99
+
100
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n// This icon file is generated automatically.\nvar EditOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M257.7 752c2 0 4-.2 6-.5L431.9 722c2-.4 3.9-1.3 5.3-2.8l423.9-423.9a9.96 9.96 0 000-14.1L694.9 114.9c-1.9-1.9-4.4-2.9-7.1-2.9s-5.2 1-7.1 2.9L256.8 538.8c-1.5 1.5-2.4 3.3-2.8 5.3l-29.5 168.2a33.5 33.5 0 009.4 29.8c6.6 6.4 14.9 9.9 23.8 9.9zm67.4-174.4L687.8 215l73.3 73.3-362.7 362.6-88.9 15.7 15.6-89zM880 836H144c-17.7 0-32 14.3-32 32v36c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-36c0-17.7-14.3-32-32-32z\" } }] }, \"name\": \"edit\", \"theme\": \"outlined\" };\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (EditOutlined);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIxLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBLHFCQUFxQixVQUFVLHlCQUF5QixrREFBa0QsaUJBQWlCLDBCQUEwQiwyWkFBMlosR0FBRztBQUNuakIsaUVBQWUsWUFBWSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGV4cGNsdXN0ZXIvcGVybWlzc2lvbi1ncm91cHMvLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhbnQtZGVzaWduK2ljb25zLXN2Z0A0LjQuMi9ub2RlX21vZHVsZXMvQGFudC1kZXNpZ24vaWNvbnMtc3ZnL2VzL2Fzbi9FZGl0T3V0bGluZWQuanM/NDRmOCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIGljb24gZmlsZSBpcyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseS5cbnZhciBFZGl0T3V0bGluZWQgPSB7IFwiaWNvblwiOiB7IFwidGFnXCI6IFwic3ZnXCIsIFwiYXR0cnNcIjogeyBcInZpZXdCb3hcIjogXCI2NCA2NCA4OTYgODk2XCIsIFwiZm9jdXNhYmxlXCI6IFwiZmFsc2VcIiB9LCBcImNoaWxkcmVuXCI6IFt7IFwidGFnXCI6IFwicGF0aFwiLCBcImF0dHJzXCI6IHsgXCJkXCI6IFwiTTI1Ny43IDc1MmMyIDAgNC0uMiA2LS41TDQzMS45IDcyMmMyLS40IDMuOS0xLjMgNS4zLTIuOGw0MjMuOS00MjMuOWE5Ljk2IDkuOTYgMCAwMDAtMTQuMUw2OTQuOSAxMTQuOWMtMS45LTEuOS00LjQtMi45LTcuMS0yLjlzLTUuMiAxLTcuMSAyLjlMMjU2LjggNTM4LjhjLTEuNSAxLjUtMi40IDMuMy0yLjggNS4zbC0yOS41IDE2OC4yYTMzLjUgMzMuNSAwIDAwOS40IDI5LjhjNi42IDYuNCAxNC45IDkuOSAyMy44IDkuOXptNjcuNC0xNzQuNEw2ODcuOCAyMTVsNzMuMyA3My4zLTM2Mi43IDM2Mi42LTg4LjkgMTUuNyAxNS42LTg5ek04ODAgODM2SDE0NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2MzZjMCA0LjQgMy42IDggOCA4aDc4NGM0LjQgMCA4LTMuNiA4LTh2LTM2YzAtMTcuNy0xNC4zLTMyLTMyLTMyelwiIH0gfV0gfSwgXCJuYW1lXCI6IFwiZWRpdFwiLCBcInRoZW1lXCI6IFwib3V0bGluZWRcIiB9O1xuZXhwb3J0IGRlZmF1bHQgRWRpdE91dGxpbmVkO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///421\n\n}");
101
+
102
+ /***/ },
103
+
104
+ /***/ 21
105
+ /*!***************************************************************************************************************************!*\
106
+ !*** ../../../node_modules/.pnpm/@ant-design+icons-svg@4.4.2/node_modules/@ant-design/icons-svg/es/asn/SearchOutlined.js ***!
107
+ \***************************************************************************************************************************/
108
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
109
+
110
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n// This icon file is generated automatically.\nvar SearchOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M909.6 854.5L649.9 594.8C690.2 542.7 712 479 712 412c0-80.2-31.3-155.4-87.9-212.1-56.6-56.7-132-87.9-212.1-87.9s-155.5 31.3-212.1 87.9C143.2 256.5 112 331.8 112 412c0 80.1 31.3 155.5 87.9 212.1C256.5 680.8 331.8 712 412 712c67 0 130.6-21.8 182.7-62l259.7 259.6a8.2 8.2 0 0011.6 0l43.6-43.5a8.2 8.2 0 000-11.6zM570.4 570.4C528 612.7 471.8 636 412 636s-116-23.3-158.4-65.6C211.3 528 188 471.8 188 412s23.3-116.1 65.6-158.4C296 211.3 352.2 188 412 188s116.1 23.2 158.4 65.6S636 352.2 636 412s-23.3 116.1-65.6 158.4z\" } }] }, \"name\": \"search\", \"theme\": \"outlined\" };\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SearchOutlined);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjEuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0EsdUJBQXVCLFVBQVUseUJBQXlCLGtEQUFrRCxpQkFBaUIsMEJBQTBCLDJnQkFBMmdCLEdBQUc7QUFDcnFCLGlFQUFlLGNBQWMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BleHBjbHVzdGVyL3Blcm1pc3Npb24tZ3JvdXBzLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYW50LWRlc2lnbitpY29ucy1zdmdANC40LjIvbm9kZV9tb2R1bGVzL0BhbnQtZGVzaWduL2ljb25zLXN2Zy9lcy9hc24vU2VhcmNoT3V0bGluZWQuanM/NWNlYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIGljb24gZmlsZSBpcyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseS5cbnZhciBTZWFyY2hPdXRsaW5lZCA9IHsgXCJpY29uXCI6IHsgXCJ0YWdcIjogXCJzdmdcIiwgXCJhdHRyc1wiOiB7IFwidmlld0JveFwiOiBcIjY0IDY0IDg5NiA4OTZcIiwgXCJmb2N1c2FibGVcIjogXCJmYWxzZVwiIH0sIFwiY2hpbGRyZW5cIjogW3sgXCJ0YWdcIjogXCJwYXRoXCIsIFwiYXR0cnNcIjogeyBcImRcIjogXCJNOTA5LjYgODU0LjVMNjQ5LjkgNTk0LjhDNjkwLjIgNTQyLjcgNzEyIDQ3OSA3MTIgNDEyYzAtODAuMi0zMS4zLTE1NS40LTg3LjktMjEyLjEtNTYuNi01Ni43LTEzMi04Ny45LTIxMi4xLTg3LjlzLTE1NS41IDMxLjMtMjEyLjEgODcuOUMxNDMuMiAyNTYuNSAxMTIgMzMxLjggMTEyIDQxMmMwIDgwLjEgMzEuMyAxNTUuNSA4Ny45IDIxMi4xQzI1Ni41IDY4MC44IDMzMS44IDcxMiA0MTIgNzEyYzY3IDAgMTMwLjYtMjEuOCAxODIuNy02MmwyNTkuNyAyNTkuNmE4LjIgOC4yIDAgMDAxMS42IDBsNDMuNi00My41YTguMiA4LjIgMCAwMDAtMTEuNnpNNTcwLjQgNTcwLjRDNTI4IDYxMi43IDQ3MS44IDYzNiA0MTIgNjM2cy0xMTYtMjMuMy0xNTguNC02NS42QzIxMS4zIDUyOCAxODggNDcxLjggMTg4IDQxMnMyMy4zLTExNi4xIDY1LjYtMTU4LjRDMjk2IDIxMS4zIDM1Mi4yIDE4OCA0MTIgMTg4czExNi4xIDIzLjIgMTU4LjQgNjUuNlM2MzYgMzUyLjIgNjM2IDQxMnMtMjMuMyAxMTYuMS02NS42IDE1OC40elwiIH0gfV0gfSwgXCJuYW1lXCI6IFwic2VhcmNoXCIsIFwidGhlbWVcIjogXCJvdXRsaW5lZFwiIH07XG5leHBvcnQgZGVmYXVsdCBTZWFyY2hPdXRsaW5lZDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///21\n\n}");
111
+
112
+ /***/ },
113
+
114
+ /***/ 549
115
+ /*!*********************************************************************************************************************************************************!*\
116
+ !*** ../../../node_modules/.pnpm/@ant-design+icons@6.2.3_rea_94b50600dfe79448cabf92d130d83059/node_modules/@ant-design/icons/es/components/AntdIcon.js ***!
117
+ \*********************************************************************************************************************************************************/
118
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
119
+
120
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ 533);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! clsx */ 882);\n/* harmony import */ var _ant_design_colors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ant-design/colors */ 393);\n/* harmony import */ var _Context__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Context */ 4);\n/* harmony import */ var _IconBase__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./IconBase */ 447);\n/* harmony import */ var _twoTonePrimaryColor__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./twoTonePrimaryColor */ 708);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils */ 463);\n'use client';\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n;\n\n\n\n\n\n\n// Initial setting\n// should move it to antd main repo?\n(0,_twoTonePrimaryColor__WEBPACK_IMPORTED_MODULE_5__.setTwoToneColor)(_ant_design_colors__WEBPACK_IMPORTED_MODULE_2__.blue.primary);\n\n// https://github.com/DefinitelyTyped/DefinitelyTyped/issues/34757#issuecomment-488848720\n\nconst Icon = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((props, ref) => {\n const {\n // affect outter <i>...</i>\n className,\n // affect inner <svg>...</svg>\n icon,\n spin,\n rotate,\n tabIndex,\n onClick,\n // other\n twoToneColor,\n ...restProps\n } = props;\n const {\n prefixCls = 'anticon',\n rootClassName\n } = react__WEBPACK_IMPORTED_MODULE_0__.useContext(_Context__WEBPACK_IMPORTED_MODULE_3__[\"default\"]);\n const classString = (0,clsx__WEBPACK_IMPORTED_MODULE_1__.clsx)(rootClassName, prefixCls, {\n [`${prefixCls}-${icon.name}`]: !!icon.name,\n [`${prefixCls}-spin`]: !!spin || icon.name === 'loading'\n }, className);\n let iconTabIndex = tabIndex;\n if (iconTabIndex === undefined && onClick) {\n iconTabIndex = -1;\n }\n const svgStyle = rotate ? {\n msTransform: `rotate(${rotate}deg)`,\n transform: `rotate(${rotate}deg)`\n } : undefined;\n const [primaryColor, secondaryColor] = (0,_utils__WEBPACK_IMPORTED_MODULE_6__.normalizeTwoToneColors)(twoToneColor);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"span\", _extends({\n role: \"img\",\n \"aria-label\": icon.name\n }, restProps, {\n ref: ref,\n tabIndex: iconTabIndex,\n onClick: onClick,\n className: classString\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_IconBase__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n icon: icon,\n primaryColor: primaryColor,\n secondaryColor: secondaryColor,\n style: svgStyle\n }));\n});\nIcon.getTwoToneColor = _twoTonePrimaryColor__WEBPACK_IMPORTED_MODULE_5__.getTwoToneColor;\nIcon.setTwoToneColor = _twoTonePrimaryColor__WEBPACK_IMPORTED_MODULE_5__.setTwoToneColor;\nif (true) {\n Icon.displayName = 'AntdIcon';\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Icon);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQ5LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBOztBQUVBLHNCQUFzQixzRUFBc0UsZ0JBQWdCLHNCQUFzQixPQUFPLDJCQUEyQiwwQkFBMEIseURBQXlELGlDQUFpQyxrQkFBa0I7QUFDMVMsQ0FBK0I7QUFDSDtBQUNjO0FBQ1Y7QUFDRztBQUNzQztBQUN2QjtBQUNsRDtBQUNBO0FBQ0EscUVBQWUsQ0FBQyxvREFBSTs7QUFFcEI7O0FBRUEsMEJBQTBCLDZDQUFnQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsSUFBSSxFQUFFLDZDQUFnQixDQUFDLGdEQUFPO0FBQzlCLHNCQUFzQiwwQ0FBSTtBQUMxQixRQUFRLFVBQVUsR0FBRyxVQUFVO0FBQy9CLFFBQVEsVUFBVTtBQUNsQixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixPQUFPO0FBQ2xDLHlCQUF5QixPQUFPO0FBQ2hDLElBQUk7QUFDSix5Q0FBeUMsOERBQXNCO0FBQy9ELHNCQUFzQixnREFBbUI7QUFDekM7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsZ0JBQWdCLGdEQUFtQixDQUFDLGlEQUFTO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRCx1QkFBdUIsaUVBQWU7QUFDdEMsdUJBQXVCLGlFQUFlO0FBQ3RDLElBQUksSUFBcUM7QUFDekM7QUFDQTtBQUNBLGlFQUFlLElBQUkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZXhwY2x1c3Rlci9wZXJtaXNzaW9uLWdyb3Vwcy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGFudC1kZXNpZ24raWNvbnNANi4yLjNfcmVhXzk0YjUwNjAwZGZlNzk0NDhjYWJmOTJkMTMwZDgzMDU5L25vZGVfbW9kdWxlcy9AYW50LWRlc2lnbi9pY29ucy9lcy9jb21wb25lbnRzL0FudGRJY29uLmpzPzUyMWUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNsc3ggfSBmcm9tICdjbHN4JztcbmltcG9ydCB7IGJsdWUgfSBmcm9tICdAYW50LWRlc2lnbi9jb2xvcnMnO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4vQ29udGV4dFwiO1xuaW1wb3J0IFJlYWN0SWNvbiBmcm9tIFwiLi9JY29uQmFzZVwiO1xuaW1wb3J0IHsgZ2V0VHdvVG9uZUNvbG9yLCBzZXRUd29Ub25lQ29sb3IgfSBmcm9tIFwiLi90d29Ub25lUHJpbWFyeUNvbG9yXCI7XG5pbXBvcnQgeyBub3JtYWxpemVUd29Ub25lQ29sb3JzIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG4vLyBJbml0aWFsIHNldHRpbmdcbi8vIHNob3VsZCBtb3ZlIGl0IHRvIGFudGQgbWFpbiByZXBvP1xuc2V0VHdvVG9uZUNvbG9yKGJsdWUucHJpbWFyeSk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EZWZpbml0ZWx5VHlwZWQvRGVmaW5pdGVseVR5cGVkL2lzc3Vlcy8zNDc1NyNpc3N1ZWNvbW1lbnQtNDg4ODQ4NzIwXG5cbmNvbnN0IEljb24gPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIHJlZikgPT4ge1xuICBjb25zdCB7XG4gICAgLy8gYWZmZWN0IG91dHRlciA8aT4uLi48L2k+XG4gICAgY2xhc3NOYW1lLFxuICAgIC8vIGFmZmVjdCBpbm5lciA8c3ZnPi4uLjwvc3ZnPlxuICAgIGljb24sXG4gICAgc3BpbixcbiAgICByb3RhdGUsXG4gICAgdGFiSW5kZXgsXG4gICAgb25DbGljayxcbiAgICAvLyBvdGhlclxuICAgIHR3b1RvbmVDb2xvcixcbiAgICAuLi5yZXN0UHJvcHNcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgcHJlZml4Q2xzID0gJ2FudGljb24nLFxuICAgIHJvb3RDbGFzc05hbWVcbiAgfSA9IFJlYWN0LnVzZUNvbnRleHQoQ29udGV4dCk7XG4gIGNvbnN0IGNsYXNzU3RyaW5nID0gY2xzeChyb290Q2xhc3NOYW1lLCBwcmVmaXhDbHMsIHtcbiAgICBbYCR7cHJlZml4Q2xzfS0ke2ljb24ubmFtZX1gXTogISFpY29uLm5hbWUsXG4gICAgW2Ake3ByZWZpeENsc30tc3BpbmBdOiAhIXNwaW4gfHwgaWNvbi5uYW1lID09PSAnbG9hZGluZydcbiAgfSwgY2xhc3NOYW1lKTtcbiAgbGV0IGljb25UYWJJbmRleCA9IHRhYkluZGV4O1xuICBpZiAoaWNvblRhYkluZGV4ID09PSB1bmRlZmluZWQgJiYgb25DbGljaykge1xuICAgIGljb25UYWJJbmRleCA9IC0xO1xuICB9XG4gIGNvbnN0IHN2Z1N0eWxlID0gcm90YXRlID8ge1xuICAgIG1zVHJhbnNmb3JtOiBgcm90YXRlKCR7cm90YXRlfWRlZylgLFxuICAgIHRyYW5zZm9ybTogYHJvdGF0ZSgke3JvdGF0ZX1kZWcpYFxuICB9IDogdW5kZWZpbmVkO1xuICBjb25zdCBbcHJpbWFyeUNvbG9yLCBzZWNvbmRhcnlDb2xvcl0gPSBub3JtYWxpemVUd29Ub25lQ29sb3JzKHR3b1RvbmVDb2xvcik7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgIHJvbGU6IFwiaW1nXCIsXG4gICAgXCJhcmlhLWxhYmVsXCI6IGljb24ubmFtZVxuICB9LCByZXN0UHJvcHMsIHtcbiAgICByZWY6IHJlZixcbiAgICB0YWJJbmRleDogaWNvblRhYkluZGV4LFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgY2xhc3NOYW1lOiBjbGFzc1N0cmluZ1xuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3RJY29uLCB7XG4gICAgaWNvbjogaWNvbixcbiAgICBwcmltYXJ5Q29sb3I6IHByaW1hcnlDb2xvcixcbiAgICBzZWNvbmRhcnlDb2xvcjogc2Vjb25kYXJ5Q29sb3IsXG4gICAgc3R5bGU6IHN2Z1N0eWxlXG4gIH0pKTtcbn0pO1xuSWNvbi5nZXRUd29Ub25lQ29sb3IgPSBnZXRUd29Ub25lQ29sb3I7XG5JY29uLnNldFR3b1RvbmVDb2xvciA9IHNldFR3b1RvbmVDb2xvcjtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEljb24uZGlzcGxheU5hbWUgPSAnQW50ZEljb24nO1xufVxuZXhwb3J0IGRlZmF1bHQgSWNvbjsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///549\n\n}");
121
+
122
+ /***/ },
123
+
124
+ /***/ 4
125
+ /*!********************************************************************************************************************************************************!*\
126
+ !*** ../../../node_modules/.pnpm/@ant-design+icons@6.2.3_rea_94b50600dfe79448cabf92d130d83059/node_modules/@ant-design/icons/es/components/Context.js ***!
127
+ \********************************************************************************************************************************************************/
128
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
129
+
130
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ 533);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nconst IconContext = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (IconContext);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBc0M7QUFDdEMsaUNBQWlDLG9EQUFhLEdBQUc7QUFDakQsaUVBQWUsV0FBVyIsInNvdXJjZXMiOlsid2VicGFjazovL0BleHBjbHVzdGVyL3Blcm1pc3Npb24tZ3JvdXBzLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYW50LWRlc2lnbitpY29uc0A2LjIuM19yZWFfOTRiNTA2MDBkZmU3OTQ0OGNhYmY5MmQxMzBkODMwNTkvbm9kZV9tb2R1bGVzL0BhbnQtZGVzaWduL2ljb25zL2VzL2NvbXBvbmVudHMvQ29udGV4dC5qcz9mMjk3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5jb25zdCBJY29uQ29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KHt9KTtcbmV4cG9ydCBkZWZhdWx0IEljb25Db250ZXh0OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4\n\n}");
131
+
132
+ /***/ },
133
+
134
+ /***/ 447
135
+ /*!*********************************************************************************************************************************************************!*\
136
+ !*** ../../../node_modules/.pnpm/@ant-design+icons@6.2.3_rea_94b50600dfe79448cabf92d130d83059/node_modules/@ant-design/icons/es/components/IconBase.js ***!
137
+ \*********************************************************************************************************************************************************/
138
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
139
+
140
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ 533);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils */ 463);\n\n\nconst twoToneColorPalette = {\n primaryColor: '#333',\n secondaryColor: '#E6E6E6',\n calculated: false\n};\nfunction setTwoToneColors({\n primaryColor,\n secondaryColor\n}) {\n twoToneColorPalette.primaryColor = primaryColor;\n twoToneColorPalette.secondaryColor = secondaryColor || (0,_utils__WEBPACK_IMPORTED_MODULE_1__.getSecondaryColor)(primaryColor);\n twoToneColorPalette.calculated = !!secondaryColor;\n}\nfunction getTwoToneColors() {\n return {\n ...twoToneColorPalette\n };\n}\nconst IconBase = props => {\n const {\n icon,\n className,\n onClick,\n style,\n primaryColor,\n secondaryColor,\n ...restProps\n } = props;\n const svgRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n let colors = twoToneColorPalette;\n if (primaryColor) {\n colors = {\n primaryColor,\n secondaryColor: secondaryColor || (0,_utils__WEBPACK_IMPORTED_MODULE_1__.getSecondaryColor)(primaryColor)\n };\n }\n ;(0,_utils__WEBPACK_IMPORTED_MODULE_1__.useInsertStyles)(svgRef);\n (0,_utils__WEBPACK_IMPORTED_MODULE_1__.warning)((0,_utils__WEBPACK_IMPORTED_MODULE_1__.isIconDefinition)(icon), `icon should be icon definiton, but got ${icon}`);\n if (!(0,_utils__WEBPACK_IMPORTED_MODULE_1__.isIconDefinition)(icon)) {\n return null;\n }\n let target = icon;\n if (target && typeof target.icon === 'function') {\n target = {\n ...target,\n icon: target.icon(colors.primaryColor, colors.secondaryColor)\n };\n }\n return (0,_utils__WEBPACK_IMPORTED_MODULE_1__.generate)(target.icon, `svg-${target.name}`, {\n className,\n onClick,\n style,\n 'data-icon': target.name,\n width: '1em',\n height: '1em',\n fill: 'currentColor',\n 'aria-hidden': 'true',\n ...restProps,\n ref: svgRef\n });\n};\nIconBase.displayName = 'IconReact';\nIconBase.getTwoToneColors = getTwoToneColors;\nIconBase.setTwoToneColors = setTwoToneColors;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (IconBase);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ3LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBK0I7QUFDb0U7QUFDbkc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLHlEQUF5RCx5REFBaUI7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUJBQWlCLHlDQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLHlEQUFpQjtBQUN6RDtBQUNBO0FBQ0EsRUFBRSx3REFBZTtBQUNqQixFQUFFLCtDQUFPLENBQUMsd0RBQWdCLGtEQUFrRCxLQUFLO0FBQ2pGLE9BQU8sd0RBQWdCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsZ0RBQVEscUJBQXFCLFlBQVk7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBZSxRQUFRIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGV4cGNsdXN0ZXIvcGVybWlzc2lvbi1ncm91cHMvLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhbnQtZGVzaWduK2ljb25zQDYuMi4zX3JlYV85NGI1MDYwMGRmZTc5NDQ4Y2FiZjkyZDEzMGQ4MzA1OS9ub2RlX21vZHVsZXMvQGFudC1kZXNpZ24vaWNvbnMvZXMvY29tcG9uZW50cy9JY29uQmFzZS5qcz9mYTBlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGdlbmVyYXRlLCBnZXRTZWNvbmRhcnlDb2xvciwgaXNJY29uRGVmaW5pdGlvbiwgd2FybmluZywgdXNlSW5zZXJ0U3R5bGVzIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5jb25zdCB0d29Ub25lQ29sb3JQYWxldHRlID0ge1xuICBwcmltYXJ5Q29sb3I6ICcjMzMzJyxcbiAgc2Vjb25kYXJ5Q29sb3I6ICcjRTZFNkU2JyxcbiAgY2FsY3VsYXRlZDogZmFsc2Vcbn07XG5mdW5jdGlvbiBzZXRUd29Ub25lQ29sb3JzKHtcbiAgcHJpbWFyeUNvbG9yLFxuICBzZWNvbmRhcnlDb2xvclxufSkge1xuICB0d29Ub25lQ29sb3JQYWxldHRlLnByaW1hcnlDb2xvciA9IHByaW1hcnlDb2xvcjtcbiAgdHdvVG9uZUNvbG9yUGFsZXR0ZS5zZWNvbmRhcnlDb2xvciA9IHNlY29uZGFyeUNvbG9yIHx8IGdldFNlY29uZGFyeUNvbG9yKHByaW1hcnlDb2xvcik7XG4gIHR3b1RvbmVDb2xvclBhbGV0dGUuY2FsY3VsYXRlZCA9ICEhc2Vjb25kYXJ5Q29sb3I7XG59XG5mdW5jdGlvbiBnZXRUd29Ub25lQ29sb3JzKCkge1xuICByZXR1cm4ge1xuICAgIC4uLnR3b1RvbmVDb2xvclBhbGV0dGVcbiAgfTtcbn1cbmNvbnN0IEljb25CYXNlID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgaWNvbixcbiAgICBjbGFzc05hbWUsXG4gICAgb25DbGljayxcbiAgICBzdHlsZSxcbiAgICBwcmltYXJ5Q29sb3IsXG4gICAgc2Vjb25kYXJ5Q29sb3IsXG4gICAgLi4ucmVzdFByb3BzXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qgc3ZnUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBsZXQgY29sb3JzID0gdHdvVG9uZUNvbG9yUGFsZXR0ZTtcbiAgaWYgKHByaW1hcnlDb2xvcikge1xuICAgIGNvbG9ycyA9IHtcbiAgICAgIHByaW1hcnlDb2xvcixcbiAgICAgIHNlY29uZGFyeUNvbG9yOiBzZWNvbmRhcnlDb2xvciB8fCBnZXRTZWNvbmRhcnlDb2xvcihwcmltYXJ5Q29sb3IpXG4gICAgfTtcbiAgfVxuICB1c2VJbnNlcnRTdHlsZXMoc3ZnUmVmKTtcbiAgd2FybmluZyhpc0ljb25EZWZpbml0aW9uKGljb24pLCBgaWNvbiBzaG91bGQgYmUgaWNvbiBkZWZpbml0b24sIGJ1dCBnb3QgJHtpY29ufWApO1xuICBpZiAoIWlzSWNvbkRlZmluaXRpb24oaWNvbikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBsZXQgdGFyZ2V0ID0gaWNvbjtcbiAgaWYgKHRhcmdldCAmJiB0eXBlb2YgdGFyZ2V0Lmljb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICB0YXJnZXQgPSB7XG4gICAgICAuLi50YXJnZXQsXG4gICAgICBpY29uOiB0YXJnZXQuaWNvbihjb2xvcnMucHJpbWFyeUNvbG9yLCBjb2xvcnMuc2Vjb25kYXJ5Q29sb3IpXG4gICAgfTtcbiAgfVxuICByZXR1cm4gZ2VuZXJhdGUodGFyZ2V0Lmljb24sIGBzdmctJHt0YXJnZXQubmFtZX1gLCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIG9uQ2xpY2ssXG4gICAgc3R5bGUsXG4gICAgJ2RhdGEtaWNvbic6IHRhcmdldC5uYW1lLFxuICAgIHdpZHRoOiAnMWVtJyxcbiAgICBoZWlnaHQ6ICcxZW0nLFxuICAgIGZpbGw6ICdjdXJyZW50Q29sb3InLFxuICAgICdhcmlhLWhpZGRlbic6ICd0cnVlJyxcbiAgICAuLi5yZXN0UHJvcHMsXG4gICAgcmVmOiBzdmdSZWZcbiAgfSk7XG59O1xuSWNvbkJhc2UuZGlzcGxheU5hbWUgPSAnSWNvblJlYWN0Jztcbkljb25CYXNlLmdldFR3b1RvbmVDb2xvcnMgPSBnZXRUd29Ub25lQ29sb3JzO1xuSWNvbkJhc2Uuc2V0VHdvVG9uZUNvbG9ycyA9IHNldFR3b1RvbmVDb2xvcnM7XG5leHBvcnQgZGVmYXVsdCBJY29uQmFzZTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///447\n\n}");
141
+
142
+ /***/ },
143
+
144
+ /***/ 708
145
+ /*!********************************************************************************************************************************************************************!*\
146
+ !*** ../../../node_modules/.pnpm/@ant-design+icons@6.2.3_rea_94b50600dfe79448cabf92d130d83059/node_modules/@ant-design/icons/es/components/twoTonePrimaryColor.js ***!
147
+ \********************************************************************************************************************************************************************/
148
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
149
+
150
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getTwoToneColor: () => (/* binding */ getTwoToneColor),\n/* harmony export */ setTwoToneColor: () => (/* binding */ setTwoToneColor)\n/* harmony export */ });\n/* harmony import */ var _IconBase__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./IconBase */ 447);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils */ 463);\n\n\nfunction setTwoToneColor(twoToneColor) {\n const [primaryColor, secondaryColor] = (0,_utils__WEBPACK_IMPORTED_MODULE_1__.normalizeTwoToneColors)(twoToneColor);\n return _IconBase__WEBPACK_IMPORTED_MODULE_0__[\"default\"].setTwoToneColors({\n primaryColor,\n secondaryColor\n });\n}\nfunction getTwoToneColor() {\n const colors = _IconBase__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getTwoToneColors();\n if (!colors.calculated) {\n return colors.primaryColor;\n }\n return [colors.primaryColor, colors.secondaryColor];\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzA4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBbUM7QUFDZTtBQUMzQztBQUNQLHlDQUF5Qyw4REFBc0I7QUFDL0QsU0FBUyxpREFBUztBQUNsQjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ087QUFDUCxpQkFBaUIsaURBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BleHBjbHVzdGVyL3Blcm1pc3Npb24tZ3JvdXBzLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYW50LWRlc2lnbitpY29uc0A2LjIuM19yZWFfOTRiNTA2MDBkZmU3OTQ0OGNhYmY5MmQxMzBkODMwNTkvbm9kZV9tb2R1bGVzL0BhbnQtZGVzaWduL2ljb25zL2VzL2NvbXBvbmVudHMvdHdvVG9uZVByaW1hcnlDb2xvci5qcz85ZjRlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdEljb24gZnJvbSBcIi4vSWNvbkJhc2VcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZVR3b1RvbmVDb2xvcnMgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmV4cG9ydCBmdW5jdGlvbiBzZXRUd29Ub25lQ29sb3IodHdvVG9uZUNvbG9yKSB7XG4gIGNvbnN0IFtwcmltYXJ5Q29sb3IsIHNlY29uZGFyeUNvbG9yXSA9IG5vcm1hbGl6ZVR3b1RvbmVDb2xvcnModHdvVG9uZUNvbG9yKTtcbiAgcmV0dXJuIFJlYWN0SWNvbi5zZXRUd29Ub25lQ29sb3JzKHtcbiAgICBwcmltYXJ5Q29sb3IsXG4gICAgc2Vjb25kYXJ5Q29sb3JcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VHdvVG9uZUNvbG9yKCkge1xuICBjb25zdCBjb2xvcnMgPSBSZWFjdEljb24uZ2V0VHdvVG9uZUNvbG9ycygpO1xuICBpZiAoIWNvbG9ycy5jYWxjdWxhdGVkKSB7XG4gICAgcmV0dXJuIGNvbG9ycy5wcmltYXJ5Q29sb3I7XG4gIH1cbiAgcmV0dXJuIFtjb2xvcnMucHJpbWFyeUNvbG9yLCBjb2xvcnMuc2Vjb25kYXJ5Q29sb3JdO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///708\n\n}");
151
+
152
+ /***/ },
153
+
154
+ /***/ 370
155
+ /*!**********************************************************************************************************************************************************!*\
156
+ !*** ../../../node_modules/.pnpm/@ant-design+icons@6.2.3_rea_94b50600dfe79448cabf92d130d83059/node_modules/@ant-design/icons/es/icons/DeleteOutlined.js ***!
157
+ \**********************************************************************************************************************************************************/
158
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
159
+
160
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ 533);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _ant_design_icons_svg_es_asn_DeleteOutlined__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ant-design/icons-svg/es/asn/DeleteOutlined */ 578);\n/* harmony import */ var _components_AntdIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/AntdIcon */ 549);\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\n;\n\n\nconst DeleteOutlined = (props, ref) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_components_AntdIcon__WEBPACK_IMPORTED_MODULE_2__[\"default\"], _extends({}, props, {\n ref: ref,\n icon: _ant_design_icons_svg_es_asn_DeleteOutlined__WEBPACK_IMPORTED_MODULE_1__[\"default\"]\n}));\n\n/**![delete](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTM2MCAxODRoLThjNC40IDAgOC0zLjYgOC04djhoMzA0di04YzAgNC40IDMuNiA4IDggOGgtOHY3Mmg3MnYtODBjMC0zNS4zLTI4LjctNjQtNjQtNjRIMzUyYy0zNS4zIDAtNjQgMjguNy02NCA2NHY4MGg3MnYtNzJ6bTUwNCA3MkgxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjMyYzAgNC40IDMuNiA4IDggOGg2MC40bDI0LjcgNTIzYzEuNiAzNC4xIDI5LjggNjEgNjMuOSA2MWg0NTRjMzQuMiAwIDYyLjMtMjYuOCA2My45LTYxbDI0LjctNTIzSDg4OGM0LjQgMCA4LTMuNiA4LTh2LTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyek03MzEuMyA4NDBIMjkyLjdsLTI0LjItNTEyaDQ4N2wtMjQuMiA1MTJ6IiAvPjwvc3ZnPg==) */\nconst RefIcon = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(DeleteOutlined);\nif (true) {\n RefIcon.displayName = 'DeleteOutlined';\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RefIcon);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcwLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsc0JBQXNCLHNFQUFzRSxnQkFBZ0Isc0JBQXNCLE9BQU8sMkJBQTJCLDBCQUEwQix5REFBeUQsaUNBQWlDLGtCQUFrQjtBQUMxUztBQUNBOztBQUVBLENBQStCO0FBQzZDO0FBQzlCO0FBQzlDLG9EQUFvRCxnREFBbUIsQ0FBQyw0REFBUSxhQUFhO0FBQzdGO0FBQ0EsUUFBUSxtRkFBaUI7QUFDekIsQ0FBQzs7QUFFRCxnQ0FBZ0M7QUFDaEMsNkJBQTZCLDZDQUFnQjtBQUM3QyxJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7QUFDQSxpRUFBZSxPQUFPIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGV4cGNsdXN0ZXIvcGVybWlzc2lvbi1ncm91cHMvLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhbnQtZGVzaWduK2ljb25zQDYuMi4zX3JlYV85NGI1MDYwMGRmZTc5NDQ4Y2FiZjkyZDEzMGQ4MzA1OS9ub2RlX21vZHVsZXMvQGFudC1kZXNpZ24vaWNvbnMvZXMvaWNvbnMvRGVsZXRlT3V0bGluZWQuanM/OTY1ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbi8vIEdFTkVSQVRFIEJZIC4vc2NyaXB0cy9nZW5lcmF0ZS50c1xuLy8gRE9OIE5PVCBFRElUIElUIE1BTlVBTExZXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBEZWxldGVPdXRsaW5lZFN2ZyBmcm9tIFwiQGFudC1kZXNpZ24vaWNvbnMtc3ZnL2VzL2Fzbi9EZWxldGVPdXRsaW5lZFwiO1xuaW1wb3J0IEFudGRJY29uIGZyb20gXCIuLi9jb21wb25lbnRzL0FudGRJY29uXCI7XG5jb25zdCBEZWxldGVPdXRsaW5lZCA9IChwcm9wcywgcmVmKSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChBbnRkSWNvbiwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gIHJlZjogcmVmLFxuICBpY29uOiBEZWxldGVPdXRsaW5lZFN2Z1xufSkpO1xuXG4vKiohW2RlbGV0ZV0oZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTlRBaUlHaGxhV2RvZEQwaU5UQWlJR1pwYkd3OUlpTmpZV05oWTJFaUlIWnBaWGRDYjNnOUlqWTBJRFkwSURnNU5pQTRPVFlpSUdadlkzVnpZV0pzWlQwaVptRnNjMlVpSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh5TURBd0wzTjJaeUkrUEhCaGRHZ2daRDBpVFRNMk1DQXhPRFJvTFRoak5DNDBJREFnT0MwekxqWWdPQzA0ZGpob016QTBkaTA0WXpBZ05DNDBJRE11TmlBNElEZ2dPR2d0T0hZM01tZzNNbll0T0RCak1DMHpOUzR6TFRJNExqY3ROalF0TmpRdE5qUklNelV5WXkwek5TNHpJREF0TmpRZ01qZ3VOeTAyTkNBMk5IWTRNR2czTW5ZdE56SjZiVFV3TkNBM01rZ3hOakJqTFRFM0xqY2dNQzB6TWlBeE5DNHpMVE15SURNeWRqTXlZekFnTkM0MElETXVOaUE0SURnZ09HZzJNQzQwYkRJMExqY2dOVEl6WXpFdU5pQXpOQzR4SURJNUxqZ2dOakVnTmpNdU9TQTJNV2cwTlRSak16UXVNaUF3SURZeUxqTXRNall1T0NBMk15NDVMVFl4YkRJMExqY3ROVEl6U0RnNE9HTTBMalFnTUNBNExUTXVOaUE0TFRoMkxUTXlZekF0TVRjdU55MHhOQzR6TFRNeUxUTXlMVE15ZWswM016RXVNeUE0TkRCSU1qa3lMamRzTFRJMExqSXROVEV5YURRNE4yd3RNalF1TWlBMU1USjZJaUF2UGp3dmMzWm5QZz09KSAqL1xuY29uc3QgUmVmSWNvbiA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKERlbGV0ZU91dGxpbmVkKTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIFJlZkljb24uZGlzcGxheU5hbWUgPSAnRGVsZXRlT3V0bGluZWQnO1xufVxuZXhwb3J0IGRlZmF1bHQgUmVmSWNvbjsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///370\n\n}");
161
+
162
+ /***/ },
163
+
164
+ /***/ 893
165
+ /*!********************************************************************************************************************************************************!*\
166
+ !*** ../../../node_modules/.pnpm/@ant-design+icons@6.2.3_rea_94b50600dfe79448cabf92d130d83059/node_modules/@ant-design/icons/es/icons/EditOutlined.js ***!
167
+ \********************************************************************************************************************************************************/
168
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
169
+
170
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ 533);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _ant_design_icons_svg_es_asn_EditOutlined__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ant-design/icons-svg/es/asn/EditOutlined */ 421);\n/* harmony import */ var _components_AntdIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/AntdIcon */ 549);\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\n;\n\n\nconst EditOutlined = (props, ref) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_components_AntdIcon__WEBPACK_IMPORTED_MODULE_2__[\"default\"], _extends({}, props, {\n ref: ref,\n icon: _ant_design_icons_svg_es_asn_EditOutlined__WEBPACK_IMPORTED_MODULE_1__[\"default\"]\n}));\n\n/**![edit](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTI1Ny43IDc1MmMyIDAgNC0uMiA2LS41TDQzMS45IDcyMmMyLS40IDMuOS0xLjMgNS4zLTIuOGw0MjMuOS00MjMuOWE5Ljk2IDkuOTYgMCAwMDAtMTQuMUw2OTQuOSAxMTQuOWMtMS45LTEuOS00LjQtMi45LTcuMS0yLjlzLTUuMiAxLTcuMSAyLjlMMjU2LjggNTM4LjhjLTEuNSAxLjUtMi40IDMuMy0yLjggNS4zbC0yOS41IDE2OC4yYTMzLjUgMzMuNSAwIDAwOS40IDI5LjhjNi42IDYuNCAxNC45IDkuOSAyMy44IDkuOXptNjcuNC0xNzQuNEw2ODcuOCAyMTVsNzMuMyA3My4zLTM2Mi43IDM2Mi42LTg4LjkgMTUuNyAxNS42LTg5ek04ODAgODM2SDE0NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2MzZjMCA0LjQgMy42IDggOCA4aDc4NGM0LjQgMCA4LTMuNiA4LTh2LTM2YzAtMTcuNy0xNC4zLTMyLTMyLTMyeiIgLz48L3N2Zz4=) */\nconst RefIcon = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(EditOutlined);\nif (true) {\n RefIcon.displayName = 'EditOutlined';\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RefIcon);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsc0JBQXNCLHNFQUFzRSxnQkFBZ0Isc0JBQXNCLE9BQU8sMkJBQTJCLDBCQUEwQix5REFBeUQsaUNBQWlDLGtCQUFrQjtBQUMxUztBQUNBOztBQUVBLENBQStCO0FBQ3lDO0FBQzFCO0FBQzlDLGtEQUFrRCxnREFBbUIsQ0FBQyw0REFBUSxhQUFhO0FBQzNGO0FBQ0EsUUFBUSxpRkFBZTtBQUN2QixDQUFDOztBQUVELDhCQUE4QjtBQUM5Qiw2QkFBNkIsNkNBQWdCO0FBQzdDLElBQUksSUFBcUM7QUFDekM7QUFDQTtBQUNBLGlFQUFlLE9BQU8iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZXhwY2x1c3Rlci9wZXJtaXNzaW9uLWdyb3Vwcy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGFudC1kZXNpZ24raWNvbnNANi4yLjNfcmVhXzk0YjUwNjAwZGZlNzk0NDhjYWJmOTJkMTMwZDgzMDU5L25vZGVfbW9kdWxlcy9AYW50LWRlc2lnbi9pY29ucy9lcy9pY29ucy9FZGl0T3V0bGluZWQuanM/NTkyMyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbi8vIEdFTkVSQVRFIEJZIC4vc2NyaXB0cy9nZW5lcmF0ZS50c1xuLy8gRE9OIE5PVCBFRElUIElUIE1BTlVBTExZXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBFZGl0T3V0bGluZWRTdmcgZnJvbSBcIkBhbnQtZGVzaWduL2ljb25zLXN2Zy9lcy9hc24vRWRpdE91dGxpbmVkXCI7XG5pbXBvcnQgQW50ZEljb24gZnJvbSBcIi4uL2NvbXBvbmVudHMvQW50ZEljb25cIjtcbmNvbnN0IEVkaXRPdXRsaW5lZCA9IChwcm9wcywgcmVmKSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChBbnRkSWNvbiwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gIHJlZjogcmVmLFxuICBpY29uOiBFZGl0T3V0bGluZWRTdmdcbn0pKTtcblxuLyoqIVtlZGl0XShkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlOVEFpSUdobGFXZG9kRDBpTlRBaUlHWnBiR3c5SWlOallXTmhZMkVpSUhacFpYZENiM2c5SWpZMElEWTBJRGc1TmlBNE9UWWlJR1p2WTNWellXSnNaVDBpWm1Gc2MyVWlJSGh0Ykc1elBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHlNREF3TDNOMlp5SStQSEJoZEdnZ1pEMGlUVEkxTnk0M0lEYzFNbU15SURBZ05DMHVNaUEyTFM0MVREUXpNUzQ1SURjeU1tTXlMUzQwSURNdU9TMHhMak1nTlM0ekxUSXVPR3cwTWpNdU9TMDBNak11T1dFNUxqazJJRGt1T1RZZ01DQXdNREF0TVRRdU1VdzJPVFF1T1NBeE1UUXVPV010TVM0NUxURXVPUzAwTGpRdE1pNDVMVGN1TVMweUxqbHpMVFV1TWlBeExUY3VNU0F5TGpsTU1qVTJMamdnTlRNNExqaGpMVEV1TlNBeExqVXRNaTQwSURNdU15MHlMamdnTlM0emJDMHlPUzQxSURFMk9DNHlZVE16TGpVZ016TXVOU0F3SURBd09TNDBJREk1TGpoak5pNDJJRFl1TkNBeE5DNDVJRGt1T1NBeU15NDRJRGt1T1hwdE5qY3VOQzB4TnpRdU5FdzJPRGN1T0NBeU1UVnNOek11TXlBM015NHpMVE0yTWk0M0lETTJNaTQyTFRnNExqa2dNVFV1TnlBeE5TNDJMVGc1ZWswNE9EQWdPRE0yU0RFME5HTXRNVGN1TnlBd0xUTXlJREUwTGpNdE16SWdNekoyTXpaak1DQTBMalFnTXk0MklEZ2dPQ0E0YURjNE5HTTBMalFnTUNBNExUTXVOaUE0TFRoMkxUTTJZekF0TVRjdU55MHhOQzR6TFRNeUxUTXlMVE15ZWlJZ0x6NDhMM04yWno0PSkgKi9cbmNvbnN0IFJlZkljb24gPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihFZGl0T3V0bGluZWQpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgUmVmSWNvbi5kaXNwbGF5TmFtZSA9ICdFZGl0T3V0bGluZWQnO1xufVxuZXhwb3J0IGRlZmF1bHQgUmVmSWNvbjsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///893\n\n}");
171
+
172
+ /***/ },
173
+
174
+ /***/ 317
175
+ /*!**********************************************************************************************************************************************************!*\
176
+ !*** ../../../node_modules/.pnpm/@ant-design+icons@6.2.3_rea_94b50600dfe79448cabf92d130d83059/node_modules/@ant-design/icons/es/icons/SearchOutlined.js ***!
177
+ \**********************************************************************************************************************************************************/
178
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
179
+
180
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ 533);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _ant_design_icons_svg_es_asn_SearchOutlined__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ant-design/icons-svg/es/asn/SearchOutlined */ 21);\n/* harmony import */ var _components_AntdIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/AntdIcon */ 549);\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\n;\n\n\nconst SearchOutlined = (props, ref) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_components_AntdIcon__WEBPACK_IMPORTED_MODULE_2__[\"default\"], _extends({}, props, {\n ref: ref,\n icon: _ant_design_icons_svg_es_asn_SearchOutlined__WEBPACK_IMPORTED_MODULE_1__[\"default\"]\n}));\n\n/**![search](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTkwOS42IDg1NC41TDY0OS45IDU5NC44QzY5MC4yIDU0Mi43IDcxMiA0NzkgNzEyIDQxMmMwLTgwLjItMzEuMy0xNTUuNC04Ny45LTIxMi4xLTU2LjYtNTYuNy0xMzItODcuOS0yMTIuMS04Ny45cy0xNTUuNSAzMS4zLTIxMi4xIDg3LjlDMTQzLjIgMjU2LjUgMTEyIDMzMS44IDExMiA0MTJjMCA4MC4xIDMxLjMgMTU1LjUgODcuOSAyMTIuMUMyNTYuNSA2ODAuOCAzMzEuOCA3MTIgNDEyIDcxMmM2NyAwIDEzMC42LTIxLjggMTgyLjctNjJsMjU5LjcgMjU5LjZhOC4yIDguMiAwIDAwMTEuNiAwbDQzLjYtNDMuNWE4LjIgOC4yIDAgMDAwLTExLjZ6TTU3MC40IDU3MC40QzUyOCA2MTIuNyA0NzEuOCA2MzYgNDEyIDYzNnMtMTE2LTIzLjMtMTU4LjQtNjUuNkMyMTEuMyA1MjggMTg4IDQ3MS44IDE4OCA0MTJzMjMuMy0xMTYuMSA2NS42LTE1OC40QzI5NiAyMTEuMyAzNTIuMiAxODggNDEyIDE4OHMxMTYuMSAyMy4yIDE1OC40IDY1LjZTNjM2IDM1Mi4yIDYzNiA0MTJzLTIzLjMgMTE2LjEtNjUuNiAxNTguNHoiIC8+PC9zdmc+) */\nconst RefIcon = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(SearchOutlined);\nif (true) {\n RefIcon.displayName = 'SearchOutlined';\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RefIcon);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzE3LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsc0JBQXNCLHNFQUFzRSxnQkFBZ0Isc0JBQXNCLE9BQU8sMkJBQTJCLDBCQUEwQix5REFBeUQsaUNBQWlDLGtCQUFrQjtBQUMxUztBQUNBOztBQUVBLENBQStCO0FBQzZDO0FBQzlCO0FBQzlDLG9EQUFvRCxnREFBbUIsQ0FBQyw0REFBUSxhQUFhO0FBQzdGO0FBQ0EsUUFBUSxtRkFBaUI7QUFDekIsQ0FBQzs7QUFFRCxnQ0FBZ0M7QUFDaEMsNkJBQTZCLDZDQUFnQjtBQUM3QyxJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7QUFDQSxpRUFBZSxPQUFPIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGV4cGNsdXN0ZXIvcGVybWlzc2lvbi1ncm91cHMvLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhbnQtZGVzaWduK2ljb25zQDYuMi4zX3JlYV85NGI1MDYwMGRmZTc5NDQ4Y2FiZjkyZDEzMGQ4MzA1OS9ub2RlX21vZHVsZXMvQGFudC1kZXNpZ24vaWNvbnMvZXMvaWNvbnMvU2VhcmNoT3V0bGluZWQuanM/MzQ3YSJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbi8vIEdFTkVSQVRFIEJZIC4vc2NyaXB0cy9nZW5lcmF0ZS50c1xuLy8gRE9OIE5PVCBFRElUIElUIE1BTlVBTExZXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTZWFyY2hPdXRsaW5lZFN2ZyBmcm9tIFwiQGFudC1kZXNpZ24vaWNvbnMtc3ZnL2VzL2Fzbi9TZWFyY2hPdXRsaW5lZFwiO1xuaW1wb3J0IEFudGRJY29uIGZyb20gXCIuLi9jb21wb25lbnRzL0FudGRJY29uXCI7XG5jb25zdCBTZWFyY2hPdXRsaW5lZCA9IChwcm9wcywgcmVmKSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChBbnRkSWNvbiwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gIHJlZjogcmVmLFxuICBpY29uOiBTZWFyY2hPdXRsaW5lZFN2Z1xufSkpO1xuXG4vKiohW3NlYXJjaF0oZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTlRBaUlHaGxhV2RvZEQwaU5UQWlJR1pwYkd3OUlpTmpZV05oWTJFaUlIWnBaWGRDYjNnOUlqWTBJRFkwSURnNU5pQTRPVFlpSUdadlkzVnpZV0pzWlQwaVptRnNjMlVpSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh5TURBd0wzTjJaeUkrUEhCaGRHZ2daRDBpVFRrd09TNDJJRGcxTkM0MVREWTBPUzQ1SURVNU5DNDRRelk1TUM0eUlEVTBNaTQzSURjeE1pQTBOemtnTnpFeUlEUXhNbU13TFRnd0xqSXRNekV1TXkweE5UVXVOQzA0Tnk0NUxUSXhNaTR4TFRVMkxqWXROVFl1TnkweE16SXRPRGN1T1MweU1USXVNUzA0Tnk0NWN5MHhOVFV1TlNBek1TNHpMVEl4TWk0eElEZzNMamxETVRRekxqSWdNalUyTGpVZ01URXlJRE16TVM0NElERXhNaUEwTVRKak1DQTRNQzR4SURNeExqTWdNVFUxTGpVZ09EY3VPU0F5TVRJdU1VTXlOVFl1TlNBMk9EQXVPQ0F6TXpFdU9DQTNNVElnTkRFeUlEY3hNbU0yTnlBd0lERXpNQzQyTFRJeExqZ2dNVGd5TGpjdE5qSnNNalU1TGpjZ01qVTVMalpoT0M0eUlEZ3VNaUF3SURBd01URXVOaUF3YkRRekxqWXRORE11TldFNExqSWdPQzR5SURBZ01EQXdMVEV4TGpaNlRUVTNNQzQwSURVM01DNDBRelV5T0NBMk1USXVOeUEwTnpFdU9DQTJNellnTkRFeUlEWXpObk10TVRFMkxUSXpMak10TVRVNExqUXROalV1TmtNeU1URXVNeUExTWpnZ01UZzRJRFEzTVM0NElERTRPQ0EwTVRKek1qTXVNeTB4TVRZdU1TQTJOUzQyTFRFMU9DNDBRekk1TmlBeU1URXVNeUF6TlRJdU1pQXhPRGdnTkRFeUlERTRPSE14TVRZdU1TQXlNeTR5SURFMU9DNDBJRFkxTGpaVE5qTTJJRE0xTWk0eUlEWXpOaUEwTVRKekxUSXpMak1nTVRFMkxqRXROalV1TmlBeE5UZ3VOSG9pSUM4K1BDOXpkbWMrKSAqL1xuY29uc3QgUmVmSWNvbiA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKFNlYXJjaE91dGxpbmVkKTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIFJlZkljb24uZGlzcGxheU5hbWUgPSAnU2VhcmNoT3V0bGluZWQnO1xufVxuZXhwb3J0IGRlZmF1bHQgUmVmSWNvbjsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///317\n\n}");
181
+
182
+ /***/ },
183
+
184
+ /***/ 463
185
+ /*!*******************************************************************************************************************************************!*\
186
+ !*** ../../../node_modules/.pnpm/@ant-design+icons@6.2.3_rea_94b50600dfe79448cabf92d130d83059/node_modules/@ant-design/icons/es/utils.js ***!
187
+ \*******************************************************************************************************************************************/
188
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
189
+
190
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ generate: () => (/* binding */ generate),\n/* harmony export */ getSecondaryColor: () => (/* binding */ getSecondaryColor),\n/* harmony export */ iconStyles: () => (/* binding */ iconStyles),\n/* harmony export */ isIconDefinition: () => (/* binding */ isIconDefinition),\n/* harmony export */ normalizeAttrs: () => (/* binding */ normalizeAttrs),\n/* harmony export */ normalizeTwoToneColors: () => (/* binding */ normalizeTwoToneColors),\n/* harmony export */ svgBaseProps: () => (/* binding */ svgBaseProps),\n/* harmony export */ useInsertStyles: () => (/* binding */ useInsertStyles),\n/* harmony export */ warning: () => (/* binding */ warning)\n/* harmony export */ });\n/* harmony import */ var _ant_design_colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ant-design/colors */ 393);\n/* harmony import */ var _rc_component_util_es_Dom_dynamicCSS__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @rc-component/util/es/Dom/dynamicCSS */ 346);\n/* harmony import */ var _rc_component_util_es_Dom_shadow__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @rc-component/util/es/Dom/shadow */ 54);\n/* harmony import */ var _rc_component_util_es_warning__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @rc-component/util/es/warning */ 403);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ 533);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _components_Context__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/Context */ 4);\n\n\n\n\n\n\nfunction camelCase(input) {\n return input.replace(/-(.)/g, (match, g) => g.toUpperCase());\n}\nfunction warning(valid, message) {\n ;(0,_rc_component_util_es_warning__WEBPACK_IMPORTED_MODULE_3__.warningOnce)(valid, `[@ant-design/icons] ${message}`);\n}\nfunction isIconDefinition(target) {\n return typeof target === 'object' && typeof target.name === 'string' && typeof target.theme === 'string' && (typeof target.icon === 'object' || typeof target.icon === 'function');\n}\nfunction normalizeAttrs(attrs = {}) {\n return Object.keys(attrs).reduce((acc, key) => {\n const val = attrs[key];\n switch (key) {\n case 'class':\n acc.className = val;\n delete acc.class;\n break;\n default:\n delete acc[key];\n acc[camelCase(key)] = val;\n }\n return acc;\n }, {});\n}\nfunction generate(node, key, rootProps) {\n if (!rootProps) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default().createElement(node.tag, {\n key,\n ...normalizeAttrs(node.attrs)\n }, (node.children || []).map((child, index) => generate(child, `${key}-${node.tag}-${index}`)));\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4___default().createElement(node.tag, {\n key,\n ...normalizeAttrs(node.attrs),\n ...rootProps\n }, (node.children || []).map((child, index) => generate(child, `${key}-${node.tag}-${index}`)));\n}\nfunction getSecondaryColor(primaryColor) {\n // choose the second color\n return (0,_ant_design_colors__WEBPACK_IMPORTED_MODULE_0__.generate)(primaryColor)[0];\n}\nfunction normalizeTwoToneColors(twoToneColor) {\n if (!twoToneColor) {\n return [];\n }\n return Array.isArray(twoToneColor) ? twoToneColor : [twoToneColor];\n}\n\n// These props make sure that the SVG behaviours like general text.\n// Reference: https://blog.prototypr.io/align-svg-icons-to-text-and-say-goodbye-to-font-icons-d44b3d7b26b4\nconst svgBaseProps = {\n width: '1em',\n height: '1em',\n fill: 'currentColor',\n 'aria-hidden': 'true',\n focusable: 'false'\n};\nconst iconStyles = `\n.anticon {\n display: inline-flex;\n align-items: center;\n color: inherit;\n font-style: normal;\n line-height: 0;\n text-align: center;\n text-transform: none;\n vertical-align: -0.125em;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n.anticon > * {\n line-height: 1;\n}\n\n.anticon svg {\n display: inline-block;\n vertical-align: inherit;\n}\n\n.anticon::before {\n display: none;\n}\n\n.anticon .anticon-icon {\n display: block;\n}\n\n.anticon[tabindex] {\n cursor: pointer;\n}\n\n.anticon-spin {\n -webkit-animation: loadingCircle 1s infinite linear;\n animation: loadingCircle 1s infinite linear;\n}\n\n@-webkit-keyframes loadingCircle {\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n@keyframes loadingCircle {\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n`;\nconst useInsertStyles = eleRef => {\n const {\n csp,\n prefixCls,\n layer\n } = (0,react__WEBPACK_IMPORTED_MODULE_4__.useContext)(_components_Context__WEBPACK_IMPORTED_MODULE_5__[\"default\"]);\n let mergedStyleStr = iconStyles;\n if (prefixCls) {\n mergedStyleStr = mergedStyleStr.replace(/anticon/g, prefixCls);\n }\n if (layer) {\n mergedStyleStr = `@layer ${layer} {\\n${mergedStyleStr}\\n}`;\n }\n ;(0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(() => {\n const ele = eleRef.current;\n const shadowRoot = (0,_rc_component_util_es_Dom_shadow__WEBPACK_IMPORTED_MODULE_2__.getShadowRoot)(ele);\n (0,_rc_component_util_es_Dom_dynamicCSS__WEBPACK_IMPORTED_MODULE_1__.updateCSS)(mergedStyleStr, '@ant-design-icons', {\n prepend: !layer,\n csp,\n attachTo: shadowRoot\n });\n }, []);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBK0Q7QUFDRTtBQUNBO0FBQ0w7QUFDUDtBQUNOO0FBQy9DO0FBQ0E7QUFDQTtBQUNPO0FBQ1AsRUFBRSwyRUFBVywrQkFBK0IsUUFBUTtBQUNwRDtBQUNPO0FBQ1A7QUFDQTtBQUNPLGtDQUFrQztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLElBQUk7QUFDUDtBQUNPO0FBQ1A7QUFDQSx3QkFBd0IsMERBQW1CO0FBQzNDO0FBQ0E7QUFDQSxLQUFLLGlFQUFpRSxJQUFJLEdBQUcsU0FBUyxHQUFHLE1BQU07QUFDL0Y7QUFDQSxzQkFBc0IsMERBQW1CO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLEdBQUcsaUVBQWlFLElBQUksR0FBRyxTQUFTLEdBQUcsTUFBTTtBQUM3RjtBQUNPO0FBQ1A7QUFDQSxTQUFTLDREQUFhO0FBQ3RCO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEVBQUUsaURBQVUsQ0FBQywyREFBVztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLFFBQVEsSUFBSSxlQUFlLEdBQUc7QUFDN0Q7QUFDQSxFQUFFLGlEQUFTO0FBQ1g7QUFDQSx1QkFBdUIsK0VBQWE7QUFDcEMsSUFBSSwrRUFBUztBQUNiO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZXhwY2x1c3Rlci9wZXJtaXNzaW9uLWdyb3Vwcy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGFudC1kZXNpZ24raWNvbnNANi4yLjNfcmVhXzk0YjUwNjAwZGZlNzk0NDhjYWJmOTJkMTMwZDgzMDU5L25vZGVfbW9kdWxlcy9AYW50LWRlc2lnbi9pY29ucy9lcy91dGlscy5qcz8wNzQ3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdlbmVyYXRlIGFzIGdlbmVyYXRlQ29sb3IgfSBmcm9tICdAYW50LWRlc2lnbi9jb2xvcnMnO1xuaW1wb3J0IHsgdXBkYXRlQ1NTIH0gZnJvbSBcIkByYy1jb21wb25lbnQvdXRpbC9lcy9Eb20vZHluYW1pY0NTU1wiO1xuaW1wb3J0IHsgZ2V0U2hhZG93Um9vdCB9IGZyb20gXCJAcmMtY29tcG9uZW50L3V0aWwvZXMvRG9tL3NoYWRvd1wiO1xuaW1wb3J0IHsgd2FybmluZ09uY2UgfSBmcm9tIFwiQHJjLWNvbXBvbmVudC91dGlsL2VzL3dhcm5pbmdcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0LCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgSWNvbkNvbnRleHQgZnJvbSBcIi4vY29tcG9uZW50cy9Db250ZXh0XCI7XG5mdW5jdGlvbiBjYW1lbENhc2UoaW5wdXQpIHtcbiAgcmV0dXJuIGlucHV0LnJlcGxhY2UoLy0oLikvZywgKG1hdGNoLCBnKSA9PiBnLnRvVXBwZXJDYXNlKCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdhcm5pbmcodmFsaWQsIG1lc3NhZ2UpIHtcbiAgd2FybmluZ09uY2UodmFsaWQsIGBbQGFudC1kZXNpZ24vaWNvbnNdICR7bWVzc2FnZX1gKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0ljb25EZWZpbml0aW9uKHRhcmdldCkge1xuICByZXR1cm4gdHlwZW9mIHRhcmdldCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHRhcmdldC5uYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgdGFyZ2V0LnRoZW1lID09PSAnc3RyaW5nJyAmJiAodHlwZW9mIHRhcmdldC5pY29uID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdGFyZ2V0Lmljb24gPT09ICdmdW5jdGlvbicpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUF0dHJzKGF0dHJzID0ge30pIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGF0dHJzKS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgY29uc3QgdmFsID0gYXR0cnNba2V5XTtcbiAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgY2FzZSAnY2xhc3MnOlxuICAgICAgICBhY2MuY2xhc3NOYW1lID0gdmFsO1xuICAgICAgICBkZWxldGUgYWNjLmNsYXNzO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGRlbGV0ZSBhY2Nba2V5XTtcbiAgICAgICAgYWNjW2NhbWVsQ2FzZShrZXkpXSA9IHZhbDtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlKG5vZGUsIGtleSwgcm9vdFByb3BzKSB7XG4gIGlmICghcm9vdFByb3BzKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KG5vZGUudGFnLCB7XG4gICAgICBrZXksXG4gICAgICAuLi5ub3JtYWxpemVBdHRycyhub2RlLmF0dHJzKVxuICAgIH0sIChub2RlLmNoaWxkcmVuIHx8IFtdKS5tYXAoKGNoaWxkLCBpbmRleCkgPT4gZ2VuZXJhdGUoY2hpbGQsIGAke2tleX0tJHtub2RlLnRhZ30tJHtpbmRleH1gKSkpO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChub2RlLnRhZywge1xuICAgIGtleSxcbiAgICAuLi5ub3JtYWxpemVBdHRycyhub2RlLmF0dHJzKSxcbiAgICAuLi5yb290UHJvcHNcbiAgfSwgKG5vZGUuY2hpbGRyZW4gfHwgW10pLm1hcCgoY2hpbGQsIGluZGV4KSA9PiBnZW5lcmF0ZShjaGlsZCwgYCR7a2V5fS0ke25vZGUudGFnfS0ke2luZGV4fWApKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U2Vjb25kYXJ5Q29sb3IocHJpbWFyeUNvbG9yKSB7XG4gIC8vIGNob29zZSB0aGUgc2Vjb25kIGNvbG9yXG4gIHJldHVybiBnZW5lcmF0ZUNvbG9yKHByaW1hcnlDb2xvcilbMF07XG59XG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplVHdvVG9uZUNvbG9ycyh0d29Ub25lQ29sb3IpIHtcbiAgaWYgKCF0d29Ub25lQ29sb3IpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodHdvVG9uZUNvbG9yKSA/IHR3b1RvbmVDb2xvciA6IFt0d29Ub25lQ29sb3JdO1xufVxuXG4vLyBUaGVzZSBwcm9wcyBtYWtlIHN1cmUgdGhhdCB0aGUgU1ZHIGJlaGF2aW91cnMgbGlrZSBnZW5lcmFsIHRleHQuXG4vLyBSZWZlcmVuY2U6IGh0dHBzOi8vYmxvZy5wcm90b3R5cHIuaW8vYWxpZ24tc3ZnLWljb25zLXRvLXRleHQtYW5kLXNheS1nb29kYnllLXRvLWZvbnQtaWNvbnMtZDQ0YjNkN2IyNmI0XG5leHBvcnQgY29uc3Qgc3ZnQmFzZVByb3BzID0ge1xuICB3aWR0aDogJzFlbScsXG4gIGhlaWdodDogJzFlbScsXG4gIGZpbGw6ICdjdXJyZW50Q29sb3InLFxuICAnYXJpYS1oaWRkZW4nOiAndHJ1ZScsXG4gIGZvY3VzYWJsZTogJ2ZhbHNlJ1xufTtcbmV4cG9ydCBjb25zdCBpY29uU3R5bGVzID0gYFxuLmFudGljb24ge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gIHZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTtcbiAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTtcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG59XG5cbi5hbnRpY29uID4gKiB7XG4gIGxpbmUtaGVpZ2h0OiAxO1xufVxuXG4uYW50aWNvbiBzdmcge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiBpbmhlcml0O1xufVxuXG4uYW50aWNvbjo6YmVmb3JlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLmFudGljb24gLmFudGljb24taWNvbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4uYW50aWNvblt0YWJpbmRleF0ge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5hbnRpY29uLXNwaW4ge1xuICAtd2Via2l0LWFuaW1hdGlvbjogbG9hZGluZ0NpcmNsZSAxcyBpbmZpbml0ZSBsaW5lYXI7XG4gIGFuaW1hdGlvbjogbG9hZGluZ0NpcmNsZSAxcyBpbmZpbml0ZSBsaW5lYXI7XG59XG5cbkAtd2Via2l0LWtleWZyYW1lcyBsb2FkaW5nQ2lyY2xlIHtcbiAgMTAwJSB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBsb2FkaW5nQ2lyY2xlIHtcbiAgMTAwJSB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gIH1cbn1cbmA7XG5leHBvcnQgY29uc3QgdXNlSW5zZXJ0U3R5bGVzID0gZWxlUmVmID0+IHtcbiAgY29uc3Qge1xuICAgIGNzcCxcbiAgICBwcmVmaXhDbHMsXG4gICAgbGF5ZXJcbiAgfSA9IHVzZUNvbnRleHQoSWNvbkNvbnRleHQpO1xuICBsZXQgbWVyZ2VkU3R5bGVTdHIgPSBpY29uU3R5bGVzO1xuICBpZiAocHJlZml4Q2xzKSB7XG4gICAgbWVyZ2VkU3R5bGVTdHIgPSBtZXJnZWRTdHlsZVN0ci5yZXBsYWNlKC9hbnRpY29uL2csIHByZWZpeENscyk7XG4gIH1cbiAgaWYgKGxheWVyKSB7XG4gICAgbWVyZ2VkU3R5bGVTdHIgPSBgQGxheWVyICR7bGF5ZXJ9IHtcXG4ke21lcmdlZFN0eWxlU3RyfVxcbn1gO1xuICB9XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZWxlID0gZWxlUmVmLmN1cnJlbnQ7XG4gICAgY29uc3Qgc2hhZG93Um9vdCA9IGdldFNoYWRvd1Jvb3QoZWxlKTtcbiAgICB1cGRhdGVDU1MobWVyZ2VkU3R5bGVTdHIsICdAYW50LWRlc2lnbi1pY29ucycsIHtcbiAgICAgIHByZXBlbmQ6ICFsYXllcixcbiAgICAgIGNzcCxcbiAgICAgIGF0dGFjaFRvOiBzaGFkb3dSb290XG4gICAgfSk7XG4gIH0sIFtdKTtcbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///463\n\n}");
191
+
192
+ /***/ },
193
+
194
+ /***/ 499
195
+ /*!****************************************************************************************************************************************************!*\
196
+ !*** ../../../node_modules/.pnpm/@rc-component+util@1.11.1_r_8567e4238d468c019972fac30d8fedd2/node_modules/@rc-component/util/es/Dom/canUseDom.js ***!
197
+ \****************************************************************************************************************************************************/
198
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
199
+
200
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ canUseDom)\n/* harmony export */ });\nfunction canUseDom() {\n return !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk5LmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZTtBQUNmO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZXhwY2x1c3Rlci9wZXJtaXNzaW9uLWdyb3Vwcy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHJjLWNvbXBvbmVudCt1dGlsQDEuMTEuMV9yXzg1NjdlNDIzOGQ0NjhjMDE5OTcyZmFjMzBkOGZlZGQyL25vZGVfbW9kdWxlcy9AcmMtY29tcG9uZW50L3V0aWwvZXMvRG9tL2NhblVzZURvbS5qcz8yMzRkIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNhblVzZURvbSgpIHtcbiAgcmV0dXJuICEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kb2N1bWVudCAmJiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///499\n\n}");
201
+
202
+ /***/ },
203
+
204
+ /***/ 59
205
+ /*!***************************************************************************************************************************************************!*\
206
+ !*** ../../../node_modules/.pnpm/@rc-component+util@1.11.1_r_8567e4238d468c019972fac30d8fedd2/node_modules/@rc-component/util/es/Dom/contains.js ***!
207
+ \***************************************************************************************************************************************************/
208
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
209
+
210
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ contains)\n/* harmony export */ });\nfunction contains(root, n) {\n if (!root) {\n return false;\n }\n\n // Use native if support\n if (root.contains) {\n return root.contains(n);\n }\n\n // `document.contains` not support with IE11\n let node = n;\n while (node) {\n if (node === root) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGV4cGNsdXN0ZXIvcGVybWlzc2lvbi1ncm91cHMvLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0ByYy1jb21wb25lbnQrdXRpbEAxLjExLjFfcl84NTY3ZTQyMzhkNDY4YzAxOTk3MmZhYzMwZDhmZWRkMi9ub2RlX21vZHVsZXMvQHJjLWNvbXBvbmVudC91dGlsL2VzL0RvbS9jb250YWlucy5qcz8zOGJhIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRhaW5zKHJvb3QsIG4pIHtcbiAgaWYgKCFyb290KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gVXNlIG5hdGl2ZSBpZiBzdXBwb3J0XG4gIGlmIChyb290LmNvbnRhaW5zKSB7XG4gICAgcmV0dXJuIHJvb3QuY29udGFpbnMobik7XG4gIH1cblxuICAvLyBgZG9jdW1lbnQuY29udGFpbnNgIG5vdCBzdXBwb3J0IHdpdGggSUUxMVxuICBsZXQgbm9kZSA9IG47XG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUgPT09IHJvb3QpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///59\n\n}");
211
+
212
+ /***/ },
213
+
214
+ /***/ 346
215
+ /*!*****************************************************************************************************************************************************!*\
216
+ !*** ../../../node_modules/.pnpm/@rc-component+util@1.11.1_r_8567e4238d468c019972fac30d8fedd2/node_modules/@rc-component/util/es/Dom/dynamicCSS.js ***!
217
+ \*****************************************************************************************************************************************************/
218
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
219
+
220
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ clearContainerCache: () => (/* binding */ clearContainerCache),\n/* harmony export */ injectCSS: () => (/* binding */ injectCSS),\n/* harmony export */ removeCSS: () => (/* binding */ removeCSS),\n/* harmony export */ updateCSS: () => (/* binding */ updateCSS)\n/* harmony export */ });\n/* harmony import */ var _canUseDom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./canUseDom */ 499);\n/* harmony import */ var _contains__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./contains */ 59);\n\n\nconst APPEND_ORDER = 'data-rc-order';\nconst APPEND_PRIORITY = 'data-rc-priority';\nconst MARK_KEY = `rc-util-key`;\nconst containerCache = new Map();\nfunction getMark({\n mark\n} = {}) {\n if (mark) {\n return mark.startsWith('data-') ? mark : `data-${mark}`;\n }\n return MARK_KEY;\n}\nfunction getContainer(option) {\n if (option.attachTo) {\n return option.attachTo;\n }\n const head = document.querySelector('head');\n return head || document.body;\n}\nfunction getOrder(prepend) {\n if (prepend === 'queue') {\n return 'prependQueue';\n }\n return prepend ? 'prepend' : 'append';\n}\n\n/**\n * Find style which inject by rc-util\n */\nfunction findStyles(container) {\n return Array.from((containerCache.get(container) || container).children).filter(node => node.tagName === 'STYLE');\n}\nfunction injectCSS(css, option = {}) {\n if (!(0,_canUseDom__WEBPACK_IMPORTED_MODULE_0__[\"default\"])()) {\n return null;\n }\n const {\n csp,\n prepend,\n priority = 0\n } = option;\n const mergedOrder = getOrder(prepend);\n const isPrependQueue = mergedOrder === 'prependQueue';\n const styleNode = document.createElement('style');\n styleNode.setAttribute(APPEND_ORDER, mergedOrder);\n if (isPrependQueue && priority) {\n styleNode.setAttribute(APPEND_PRIORITY, `${priority}`);\n }\n if (csp?.nonce) {\n styleNode.nonce = csp?.nonce;\n }\n styleNode.innerHTML = css;\n const container = getContainer(option);\n const {\n firstChild\n } = container;\n if (prepend) {\n // If is queue `prepend`, it will prepend first style and then append rest style\n if (isPrependQueue) {\n const existStyle = (option.styles || findStyles(container)).filter(node => {\n // Ignore style which not injected by rc-util with prepend\n if (!['prepend', 'prependQueue'].includes(node.getAttribute(APPEND_ORDER))) {\n return false;\n }\n\n // Ignore style which priority less then new style\n const nodePriority = Number(node.getAttribute(APPEND_PRIORITY) || 0);\n return priority >= nodePriority;\n });\n if (existStyle.length) {\n container.insertBefore(styleNode, existStyle[existStyle.length - 1].nextSibling);\n return styleNode;\n }\n }\n\n // Use `insertBefore` as `prepend`\n container.insertBefore(styleNode, firstChild);\n } else {\n container.appendChild(styleNode);\n }\n return styleNode;\n}\nfunction findExistNode(key, option = {}) {\n let {\n styles\n } = option;\n styles ||= findStyles(getContainer(option));\n return styles.find(node => node.getAttribute(getMark(option)) === key);\n}\nfunction removeCSS(key, option = {}) {\n const existNode = findExistNode(key, option);\n if (existNode) {\n const container = getContainer(option);\n container.removeChild(existNode);\n }\n}\n\n/**\n * qiankun will inject `appendChild` to insert into other\n */\nfunction syncRealContainer(container, option) {\n const cachedRealContainer = containerCache.get(container);\n\n // Find real container when not cached or cached container removed\n if (!cachedRealContainer || !(0,_contains__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(document, cachedRealContainer)) {\n const placeholderStyle = injectCSS('', option);\n const {\n parentNode\n } = placeholderStyle;\n containerCache.set(container, parentNode);\n container.removeChild(placeholderStyle);\n }\n}\n\n/**\n * manually clear container cache to avoid global cache in unit testes\n */\nfunction clearContainerCache() {\n containerCache.clear();\n}\nfunction updateCSS(css, key, originOption = {}) {\n const container = getContainer(originOption);\n const styles = findStyles(container);\n const option = {\n ...originOption,\n styles\n };\n\n // Sync real parent\n syncRealContainer(container, option);\n const existNode = findExistNode(key, option);\n if (existNode) {\n if (option.csp?.nonce && existNode.nonce !== option.csp?.nonce) {\n existNode.nonce = option.csp?.nonce;\n }\n if (existNode.innerHTML !== css) {\n existNode.innerHTML = css;\n }\n return existNode;\n }\n const newNode = injectCSS(css, option);\n newNode.setAttribute(getMark(option), key);\n return newNode;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ2LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFvQztBQUNGO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFBSTtBQUNOO0FBQ0EscURBQXFELEtBQUs7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sbUNBQW1DO0FBQzFDLE9BQU8sc0RBQVM7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsU0FBUztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNPLG1DQUFtQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLCtCQUErQixxREFBUTtBQUN2QztBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ08sOENBQThDO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BleHBjbHVzdGVyL3Blcm1pc3Npb24tZ3JvdXBzLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcmMtY29tcG9uZW50K3V0aWxAMS4xMS4xX3JfODU2N2U0MjM4ZDQ2OGMwMTk5NzJmYWMzMGQ4ZmVkZDIvbm9kZV9tb2R1bGVzL0ByYy1jb21wb25lbnQvdXRpbC9lcy9Eb20vZHluYW1pY0NTUy5qcz80NzcwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjYW5Vc2VEb20gZnJvbSBcIi4vY2FuVXNlRG9tXCI7XG5pbXBvcnQgY29udGFpbnMgZnJvbSBcIi4vY29udGFpbnNcIjtcbmNvbnN0IEFQUEVORF9PUkRFUiA9ICdkYXRhLXJjLW9yZGVyJztcbmNvbnN0IEFQUEVORF9QUklPUklUWSA9ICdkYXRhLXJjLXByaW9yaXR5JztcbmNvbnN0IE1BUktfS0VZID0gYHJjLXV0aWwta2V5YDtcbmNvbnN0IGNvbnRhaW5lckNhY2hlID0gbmV3IE1hcCgpO1xuZnVuY3Rpb24gZ2V0TWFyayh7XG4gIG1hcmtcbn0gPSB7fSkge1xuICBpZiAobWFyaykge1xuICAgIHJldHVybiBtYXJrLnN0YXJ0c1dpdGgoJ2RhdGEtJykgPyBtYXJrIDogYGRhdGEtJHttYXJrfWA7XG4gIH1cbiAgcmV0dXJuIE1BUktfS0VZO1xufVxuZnVuY3Rpb24gZ2V0Q29udGFpbmVyKG9wdGlvbikge1xuICBpZiAob3B0aW9uLmF0dGFjaFRvKSB7XG4gICAgcmV0dXJuIG9wdGlvbi5hdHRhY2hUbztcbiAgfVxuICBjb25zdCBoZWFkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaGVhZCcpO1xuICByZXR1cm4gaGVhZCB8fCBkb2N1bWVudC5ib2R5O1xufVxuZnVuY3Rpb24gZ2V0T3JkZXIocHJlcGVuZCkge1xuICBpZiAocHJlcGVuZCA9PT0gJ3F1ZXVlJykge1xuICAgIHJldHVybiAncHJlcGVuZFF1ZXVlJztcbiAgfVxuICByZXR1cm4gcHJlcGVuZCA/ICdwcmVwZW5kJyA6ICdhcHBlbmQnO1xufVxuXG4vKipcbiAqIEZpbmQgc3R5bGUgd2hpY2ggaW5qZWN0IGJ5IHJjLXV0aWxcbiAqL1xuZnVuY3Rpb24gZmluZFN0eWxlcyhjb250YWluZXIpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20oKGNvbnRhaW5lckNhY2hlLmdldChjb250YWluZXIpIHx8IGNvbnRhaW5lcikuY2hpbGRyZW4pLmZpbHRlcihub2RlID0+IG5vZGUudGFnTmFtZSA9PT0gJ1NUWUxFJyk7XG59XG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Q1NTKGNzcywgb3B0aW9uID0ge30pIHtcbiAgaWYgKCFjYW5Vc2VEb20oKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHtcbiAgICBjc3AsXG4gICAgcHJlcGVuZCxcbiAgICBwcmlvcml0eSA9IDBcbiAgfSA9IG9wdGlvbjtcbiAgY29uc3QgbWVyZ2VkT3JkZXIgPSBnZXRPcmRlcihwcmVwZW5kKTtcbiAgY29uc3QgaXNQcmVwZW5kUXVldWUgPSBtZXJnZWRPcmRlciA9PT0gJ3ByZXBlbmRRdWV1ZSc7XG4gIGNvbnN0IHN0eWxlTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlTm9kZS5zZXRBdHRyaWJ1dGUoQVBQRU5EX09SREVSLCBtZXJnZWRPcmRlcik7XG4gIGlmIChpc1ByZXBlbmRRdWV1ZSAmJiBwcmlvcml0eSkge1xuICAgIHN0eWxlTm9kZS5zZXRBdHRyaWJ1dGUoQVBQRU5EX1BSSU9SSVRZLCBgJHtwcmlvcml0eX1gKTtcbiAgfVxuICBpZiAoY3NwPy5ub25jZSkge1xuICAgIHN0eWxlTm9kZS5ub25jZSA9IGNzcD8ubm9uY2U7XG4gIH1cbiAgc3R5bGVOb2RlLmlubmVySFRNTCA9IGNzcztcbiAgY29uc3QgY29udGFpbmVyID0gZ2V0Q29udGFpbmVyKG9wdGlvbik7XG4gIGNvbnN0IHtcbiAgICBmaXJzdENoaWxkXG4gIH0gPSBjb250YWluZXI7XG4gIGlmIChwcmVwZW5kKSB7XG4gICAgLy8gSWYgaXMgcXVldWUgYHByZXBlbmRgLCBpdCB3aWxsIHByZXBlbmQgZmlyc3Qgc3R5bGUgYW5kIHRoZW4gYXBwZW5kIHJlc3Qgc3R5bGVcbiAgICBpZiAoaXNQcmVwZW5kUXVldWUpIHtcbiAgICAgIGNvbnN0IGV4aXN0U3R5bGUgPSAob3B0aW9uLnN0eWxlcyB8fCBmaW5kU3R5bGVzKGNvbnRhaW5lcikpLmZpbHRlcihub2RlID0+IHtcbiAgICAgICAgLy8gSWdub3JlIHN0eWxlIHdoaWNoIG5vdCBpbmplY3RlZCBieSByYy11dGlsIHdpdGggcHJlcGVuZFxuICAgICAgICBpZiAoIVsncHJlcGVuZCcsICdwcmVwZW5kUXVldWUnXS5pbmNsdWRlcyhub2RlLmdldEF0dHJpYnV0ZShBUFBFTkRfT1JERVIpKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElnbm9yZSBzdHlsZSB3aGljaCBwcmlvcml0eSBsZXNzIHRoZW4gbmV3IHN0eWxlXG4gICAgICAgIGNvbnN0IG5vZGVQcmlvcml0eSA9IE51bWJlcihub2RlLmdldEF0dHJpYnV0ZShBUFBFTkRfUFJJT1JJVFkpIHx8IDApO1xuICAgICAgICByZXR1cm4gcHJpb3JpdHkgPj0gbm9kZVByaW9yaXR5O1xuICAgICAgfSk7XG4gICAgICBpZiAoZXhpc3RTdHlsZS5sZW5ndGgpIHtcbiAgICAgICAgY29udGFpbmVyLmluc2VydEJlZm9yZShzdHlsZU5vZGUsIGV4aXN0U3R5bGVbZXhpc3RTdHlsZS5sZW5ndGggLSAxXS5uZXh0U2libGluZyk7XG4gICAgICAgIHJldHVybiBzdHlsZU5vZGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXNlIGBpbnNlcnRCZWZvcmVgIGFzIGBwcmVwZW5kYFxuICAgIGNvbnRhaW5lci5pbnNlcnRCZWZvcmUoc3R5bGVOb2RlLCBmaXJzdENoaWxkKTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoc3R5bGVOb2RlKTtcbiAgfVxuICByZXR1cm4gc3R5bGVOb2RlO1xufVxuZnVuY3Rpb24gZmluZEV4aXN0Tm9kZShrZXksIG9wdGlvbiA9IHt9KSB7XG4gIGxldCB7XG4gICAgc3R5bGVzXG4gIH0gPSBvcHRpb247XG4gIHN0eWxlcyB8fD0gZmluZFN0eWxlcyhnZXRDb250YWluZXIob3B0aW9uKSk7XG4gIHJldHVybiBzdHlsZXMuZmluZChub2RlID0+IG5vZGUuZ2V0QXR0cmlidXRlKGdldE1hcmsob3B0aW9uKSkgPT09IGtleSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQ1NTKGtleSwgb3B0aW9uID0ge30pIHtcbiAgY29uc3QgZXhpc3ROb2RlID0gZmluZEV4aXN0Tm9kZShrZXksIG9wdGlvbik7XG4gIGlmIChleGlzdE5vZGUpIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBnZXRDb250YWluZXIob3B0aW9uKTtcbiAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQoZXhpc3ROb2RlKTtcbiAgfVxufVxuXG4vKipcbiAqIHFpYW5rdW4gd2lsbCBpbmplY3QgYGFwcGVuZENoaWxkYCB0byBpbnNlcnQgaW50byBvdGhlclxuICovXG5mdW5jdGlvbiBzeW5jUmVhbENvbnRhaW5lcihjb250YWluZXIsIG9wdGlvbikge1xuICBjb25zdCBjYWNoZWRSZWFsQ29udGFpbmVyID0gY29udGFpbmVyQ2FjaGUuZ2V0KGNvbnRhaW5lcik7XG5cbiAgLy8gRmluZCByZWFsIGNvbnRhaW5lciB3aGVuIG5vdCBjYWNoZWQgb3IgY2FjaGVkIGNvbnRhaW5lciByZW1vdmVkXG4gIGlmICghY2FjaGVkUmVhbENvbnRhaW5lciB8fCAhY29udGFpbnMoZG9jdW1lbnQsIGNhY2hlZFJlYWxDb250YWluZXIpKSB7XG4gICAgY29uc3QgcGxhY2Vob2xkZXJTdHlsZSA9IGluamVjdENTUygnJywgb3B0aW9uKTtcbiAgICBjb25zdCB7XG4gICAgICBwYXJlbnROb2RlXG4gICAgfSA9IHBsYWNlaG9sZGVyU3R5bGU7XG4gICAgY29udGFpbmVyQ2FjaGUuc2V0KGNvbnRhaW5lciwgcGFyZW50Tm9kZSk7XG4gICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKHBsYWNlaG9sZGVyU3R5bGUpO1xuICB9XG59XG5cbi8qKlxuICogbWFudWFsbHkgY2xlYXIgY29udGFpbmVyIGNhY2hlIHRvIGF2b2lkIGdsb2JhbCBjYWNoZSBpbiB1bml0IHRlc3Rlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJDb250YWluZXJDYWNoZSgpIHtcbiAgY29udGFpbmVyQ2FjaGUuY2xlYXIoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVDU1MoY3NzLCBrZXksIG9yaWdpbk9wdGlvbiA9IHt9KSB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGdldENvbnRhaW5lcihvcmlnaW5PcHRpb24pO1xuICBjb25zdCBzdHlsZXMgPSBmaW5kU3R5bGVzKGNvbnRhaW5lcik7XG4gIGNvbnN0IG9wdGlvbiA9IHtcbiAgICAuLi5vcmlnaW5PcHRpb24sXG4gICAgc3R5bGVzXG4gIH07XG5cbiAgLy8gU3luYyByZWFsIHBhcmVudFxuICBzeW5jUmVhbENvbnRhaW5lcihjb250YWluZXIsIG9wdGlvbik7XG4gIGNvbnN0IGV4aXN0Tm9kZSA9IGZpbmRFeGlzdE5vZGUoa2V5LCBvcHRpb24pO1xuICBpZiAoZXhpc3ROb2RlKSB7XG4gICAgaWYgKG9wdGlvbi5jc3A/Lm5vbmNlICYmIGV4aXN0Tm9kZS5ub25jZSAhPT0gb3B0aW9uLmNzcD8ubm9uY2UpIHtcbiAgICAgIGV4aXN0Tm9kZS5ub25jZSA9IG9wdGlvbi5jc3A/Lm5vbmNlO1xuICAgIH1cbiAgICBpZiAoZXhpc3ROb2RlLmlubmVySFRNTCAhPT0gY3NzKSB7XG4gICAgICBleGlzdE5vZGUuaW5uZXJIVE1MID0gY3NzO1xuICAgIH1cbiAgICByZXR1cm4gZXhpc3ROb2RlO1xuICB9XG4gIGNvbnN0IG5ld05vZGUgPSBpbmplY3RDU1MoY3NzLCBvcHRpb24pO1xuICBuZXdOb2RlLnNldEF0dHJpYnV0ZShnZXRNYXJrKG9wdGlvbiksIGtleSk7XG4gIHJldHVybiBuZXdOb2RlO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///346\n\n}");
221
+
222
+ /***/ },
223
+
224
+ /***/ 54
225
+ /*!*************************************************************************************************************************************************!*\
226
+ !*** ../../../node_modules/.pnpm/@rc-component+util@1.11.1_r_8567e4238d468c019972fac30d8fedd2/node_modules/@rc-component/util/es/Dom/shadow.js ***!
227
+ \*************************************************************************************************************************************************/
228
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
229
+
230
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getShadowRoot: () => (/* binding */ getShadowRoot),\n/* harmony export */ inShadow: () => (/* binding */ inShadow)\n/* harmony export */ });\nfunction getRoot(ele) {\n return ele?.getRootNode?.();\n}\n\n/**\n * Check if is in shadowRoot\n */\nfunction inShadow(ele) {\n return getRoot(ele) instanceof ShadowRoot;\n}\n\n/**\n * Return shadowRoot if possible\n */\nfunction getShadowRoot(ele) {\n return inShadow(ele) ? getRoot(ele) : null;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BleHBjbHVzdGVyL3Blcm1pc3Npb24tZ3JvdXBzLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcmMtY29tcG9uZW50K3V0aWxAMS4xMS4xX3JfODU2N2U0MjM4ZDQ2OGMwMTk5NzJmYWMzMGQ4ZmVkZDIvbm9kZV9tb2R1bGVzL0ByYy1jb21wb25lbnQvdXRpbC9lcy9Eb20vc2hhZG93LmpzPzUyN2EiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gZ2V0Um9vdChlbGUpIHtcbiAgcmV0dXJuIGVsZT8uZ2V0Um9vdE5vZGU/LigpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGlzIGluIHNoYWRvd1Jvb3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluU2hhZG93KGVsZSkge1xuICByZXR1cm4gZ2V0Um9vdChlbGUpIGluc3RhbmNlb2YgU2hhZG93Um9vdDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gc2hhZG93Um9vdCBpZiBwb3NzaWJsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2hhZG93Um9vdChlbGUpIHtcbiAgcmV0dXJuIGluU2hhZG93KGVsZSkgPyBnZXRSb290KGVsZSkgOiBudWxsO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///54\n\n}");
231
+
232
+ /***/ },
233
+
234
+ /***/ 403
235
+ /*!**********************************************************************************************************************************************!*\
236
+ !*** ../../../node_modules/.pnpm/@rc-component+util@1.11.1_r_8567e4238d468c019972fac30d8fedd2/node_modules/@rc-component/util/es/warning.js ***!
237
+ \**********************************************************************************************************************************************/
238
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
239
+
240
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ call: () => (/* binding */ call),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ note: () => (/* binding */ note),\n/* harmony export */ noteOnce: () => (/* binding */ noteOnce),\n/* harmony export */ preMessage: () => (/* binding */ preMessage),\n/* harmony export */ resetWarned: () => (/* binding */ resetWarned),\n/* harmony export */ warning: () => (/* binding */ warning),\n/* harmony export */ warningOnce: () => (/* binding */ warningOnce)\n/* harmony export */ });\n/* eslint-disable no-console */\nlet warned = {};\nconst preWarningFns = [];\n\n/**\n * Pre warning enable you to parse content before console.error.\n * Modify to null will prevent warning.\n */\nconst preMessage = fn => {\n preWarningFns.push(fn);\n};\n\n/**\n * Warning if condition not match.\n * @param valid Condition\n * @param message Warning message\n * @example\n * ```js\n * warning(false, 'some error'); // print some error\n * warning(true, 'some error'); // print nothing\n * warning(1 === 2, 'some error'); // print some error\n * ```\n */\nfunction warning(valid, message) {\n if ( true && !valid && console !== undefined) {\n const finalMessage = preWarningFns.reduce((msg, preMessageFn) => preMessageFn(msg ?? '', 'warning'), message);\n if (finalMessage) {\n console.error(`Warning: ${finalMessage}`);\n }\n }\n}\n\n/** @see Similar to {@link warning} */\nfunction note(valid, message) {\n if ( true && !valid && console !== undefined) {\n const finalMessage = preWarningFns.reduce((msg, preMessageFn) => preMessageFn(msg ?? '', 'note'), message);\n if (finalMessage) {\n console.warn(`Note: ${finalMessage}`);\n }\n }\n}\nfunction resetWarned() {\n warned = {};\n}\nfunction call(method, valid, message) {\n if (!valid && !warned[message]) {\n method(false, message);\n warned[message] = true;\n }\n}\n\n/** @see Same as {@link warning}, but only warn once for the same message */\nfunction warningOnce(valid, message) {\n call(warning, valid, message);\n}\n\n/** @see Same as {@link warning}, but only warn once for the same message */\nfunction noteOnce(valid, message) {\n call(note, valid, message);\n}\nwarningOnce.preMessage = preMessage;\nwarningOnce.resetWarned = resetWarned;\nwarningOnce.noteOnce = noteOnce;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (warningOnce);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDAzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQyxnQ0FBZ0M7QUFDaEMsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDTztBQUNQLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBLGdDQUFnQyxhQUFhO0FBQzdDO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsZUFBZTtBQUM3QjtBQUNQLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBLDRCQUE0QixhQUFhO0FBQ3pDO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsY0FBYztBQUN6QjtBQUNQO0FBQ0E7O0FBRUEsa0JBQWtCLGNBQWM7QUFDekI7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBQWUsV0FBVyIsInNvdXJjZXMiOlsid2VicGFjazovL0BleHBjbHVzdGVyL3Blcm1pc3Npb24tZ3JvdXBzLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcmMtY29tcG9uZW50K3V0aWxAMS4xMS4xX3JfODU2N2U0MjM4ZDQ2OGMwMTk5NzJmYWMzMGQ4ZmVkZDIvbm9kZV9tb2R1bGVzL0ByYy1jb21wb25lbnQvdXRpbC9lcy93YXJuaW5nLmpzP2FjYzIiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xubGV0IHdhcm5lZCA9IHt9O1xuY29uc3QgcHJlV2FybmluZ0ZucyA9IFtdO1xuXG4vKipcbiAqIFByZSB3YXJuaW5nIGVuYWJsZSB5b3UgdG8gcGFyc2UgY29udGVudCBiZWZvcmUgY29uc29sZS5lcnJvci5cbiAqIE1vZGlmeSB0byBudWxsIHdpbGwgcHJldmVudCB3YXJuaW5nLlxuICovXG5leHBvcnQgY29uc3QgcHJlTWVzc2FnZSA9IGZuID0+IHtcbiAgcHJlV2FybmluZ0Zucy5wdXNoKGZuKTtcbn07XG5cbi8qKlxuICogV2FybmluZyBpZiBjb25kaXRpb24gbm90IG1hdGNoLlxuICogQHBhcmFtIHZhbGlkIENvbmRpdGlvblxuICogQHBhcmFtIG1lc3NhZ2UgV2FybmluZyBtZXNzYWdlXG4gKiBAZXhhbXBsZVxuICogYGBganNcbiAqIHdhcm5pbmcoZmFsc2UsICdzb21lIGVycm9yJyk7IC8vIHByaW50IHNvbWUgZXJyb3JcbiAqIHdhcm5pbmcodHJ1ZSwgJ3NvbWUgZXJyb3InKTsgLy8gcHJpbnQgbm90aGluZ1xuICogd2FybmluZygxID09PSAyLCAnc29tZSBlcnJvcicpOyAvLyBwcmludCBzb21lIGVycm9yXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhcm5pbmcodmFsaWQsIG1lc3NhZ2UpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXZhbGlkICYmIGNvbnNvbGUgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGZpbmFsTWVzc2FnZSA9IHByZVdhcm5pbmdGbnMucmVkdWNlKChtc2csIHByZU1lc3NhZ2VGbikgPT4gcHJlTWVzc2FnZUZuKG1zZyA/PyAnJywgJ3dhcm5pbmcnKSwgbWVzc2FnZSk7XG4gICAgaWYgKGZpbmFsTWVzc2FnZSkge1xuICAgICAgY29uc29sZS5lcnJvcihgV2FybmluZzogJHtmaW5hbE1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG59XG5cbi8qKiBAc2VlIFNpbWlsYXIgdG8ge0BsaW5rIHdhcm5pbmd9ICovXG5leHBvcnQgZnVuY3Rpb24gbm90ZSh2YWxpZCwgbWVzc2FnZSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdmFsaWQgJiYgY29uc29sZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgZmluYWxNZXNzYWdlID0gcHJlV2FybmluZ0Zucy5yZWR1Y2UoKG1zZywgcHJlTWVzc2FnZUZuKSA9PiBwcmVNZXNzYWdlRm4obXNnID8/ICcnLCAnbm90ZScpLCBtZXNzYWdlKTtcbiAgICBpZiAoZmluYWxNZXNzYWdlKSB7XG4gICAgICBjb25zb2xlLndhcm4oYE5vdGU6ICR7ZmluYWxNZXNzYWdlfWApO1xuICAgIH1cbiAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0V2FybmVkKCkge1xuICB3YXJuZWQgPSB7fTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjYWxsKG1ldGhvZCwgdmFsaWQsIG1lc3NhZ2UpIHtcbiAgaWYgKCF2YWxpZCAmJiAhd2FybmVkW21lc3NhZ2VdKSB7XG4gICAgbWV0aG9kKGZhbHNlLCBtZXNzYWdlKTtcbiAgICB3YXJuZWRbbWVzc2FnZV0gPSB0cnVlO1xuICB9XG59XG5cbi8qKiBAc2VlIFNhbWUgYXMge0BsaW5rIHdhcm5pbmd9LCBidXQgb25seSB3YXJuIG9uY2UgZm9yIHRoZSBzYW1lIG1lc3NhZ2UgKi9cbmV4cG9ydCBmdW5jdGlvbiB3YXJuaW5nT25jZSh2YWxpZCwgbWVzc2FnZSkge1xuICBjYWxsKHdhcm5pbmcsIHZhbGlkLCBtZXNzYWdlKTtcbn1cblxuLyoqIEBzZWUgU2FtZSBhcyB7QGxpbmsgd2FybmluZ30sIGJ1dCBvbmx5IHdhcm4gb25jZSBmb3IgdGhlIHNhbWUgbWVzc2FnZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vdGVPbmNlKHZhbGlkLCBtZXNzYWdlKSB7XG4gIGNhbGwobm90ZSwgdmFsaWQsIG1lc3NhZ2UpO1xufVxud2FybmluZ09uY2UucHJlTWVzc2FnZSA9IHByZU1lc3NhZ2U7XG53YXJuaW5nT25jZS5yZXNldFdhcm5lZCA9IHJlc2V0V2FybmVkO1xud2FybmluZ09uY2Uubm90ZU9uY2UgPSBub3RlT25jZTtcbmV4cG9ydCBkZWZhdWx0IHdhcm5pbmdPbmNlOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///403\n\n}");
241
+
242
+ /***/ },
243
+
244
+ /***/ 213
245
+ /*!******************************************************************************************************!*\
246
+ !*** ../../../node_modules/.pnpm/@sinclair+typebox@0.30.4/node_modules/@sinclair/typebox/typebox.js ***!
247
+ \******************************************************************************************************/
248
+ (__unused_webpack_module, exports) {
249
+
250
+ eval("{\n/*--------------------------------------------------------------------------\n\n@sinclair/typebox\n\nThe MIT License (MIT)\n\nCopyright (c) 2017-2023 Haydn Paterson (sinclair) <haydn.developer@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n---------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Type = exports.StandardType = exports.ExtendedTypeBuilder = exports.StandardTypeBuilder = exports.TypeBuilder = exports.TemplateLiteralDslParser = exports.TemplateLiteralGenerator = exports.TemplateLiteralFinite = exports.TemplateLiteralParser = exports.TemplateLiteralParserError = exports.TemplateLiteralResolver = exports.TemplateLiteralPattern = exports.UnionResolver = exports.KeyArrayResolver = exports.KeyResolver = exports.ObjectMap = exports.Intrinsic = exports.IndexedAccessor = exports.TypeClone = exports.TypeExtends = exports.TypeExtendsResult = exports.ExtendsUndefined = exports.TypeGuard = exports.TypeGuardUnknownTypeError = exports.ValueGuard = exports.FormatRegistry = exports.TypeRegistry = exports.PatternStringExact = exports.PatternNumberExact = exports.PatternBooleanExact = exports.PatternString = exports.PatternNumber = exports.PatternBoolean = exports.Kind = exports.Hint = exports.Optional = exports.Readonly = void 0;\n// --------------------------------------------------------------------------\n// Symbols\n// --------------------------------------------------------------------------\nexports.Readonly = Symbol.for('TypeBox.Readonly');\nexports.Optional = Symbol.for('TypeBox.Optional');\nexports.Hint = Symbol.for('TypeBox.Hint');\nexports.Kind = Symbol.for('TypeBox.Kind');\n// --------------------------------------------------------------------------\n// Patterns\n// --------------------------------------------------------------------------\nexports.PatternBoolean = '(true|false)';\nexports.PatternNumber = '(0|[1-9][0-9]*)';\nexports.PatternString = '(.*)';\nexports.PatternBooleanExact = `^${exports.PatternBoolean}$`;\nexports.PatternNumberExact = `^${exports.PatternNumber}$`;\nexports.PatternStringExact = `^${exports.PatternString}$`;\n/** A registry for user defined types */\nvar TypeRegistry;\n(function (TypeRegistry) {\n const map = new Map();\n /** Returns the entries in this registry */\n function Entries() {\n return new Map(map);\n }\n TypeRegistry.Entries = Entries;\n /** Clears all user defined types */\n function Clear() {\n return map.clear();\n }\n TypeRegistry.Clear = Clear;\n /** Deletes a registered type */\n function Delete(kind) {\n return map.delete(kind);\n }\n TypeRegistry.Delete = Delete;\n /** Returns true if this registry contains this kind */\n function Has(kind) {\n return map.has(kind);\n }\n TypeRegistry.Has = Has;\n /** Sets a validation function for a user defined type */\n function Set(kind, func) {\n map.set(kind, func);\n }\n TypeRegistry.Set = Set;\n /** Gets a custom validation function for a user defined type */\n function Get(kind) {\n return map.get(kind);\n }\n TypeRegistry.Get = Get;\n})(TypeRegistry || (exports.TypeRegistry = TypeRegistry = {}));\n/** A registry for user defined string formats */\nvar FormatRegistry;\n(function (FormatRegistry) {\n const map = new Map();\n /** Returns the entries in this registry */\n function Entries() {\n return new Map(map);\n }\n FormatRegistry.Entries = Entries;\n /** Clears all user defined string formats */\n function Clear() {\n return map.clear();\n }\n FormatRegistry.Clear = Clear;\n /** Deletes a registered format */\n function Delete(format) {\n return map.delete(format);\n }\n FormatRegistry.Delete = Delete;\n /** Returns true if the user defined string format exists */\n function Has(format) {\n return map.has(format);\n }\n FormatRegistry.Has = Has;\n /** Sets a validation function for a user defined string format */\n function Set(format, func) {\n map.set(format, func);\n }\n FormatRegistry.Set = Set;\n /** Gets a validation function for a user defined string format */\n function Get(format) {\n return map.get(format);\n }\n FormatRegistry.Get = Get;\n})(FormatRegistry || (exports.FormatRegistry = FormatRegistry = {}));\n// --------------------------------------------------------------------------\n// ValueGuard\n// --------------------------------------------------------------------------\nvar ValueGuard;\n(function (ValueGuard) {\n function IsObject(value) {\n return typeof value === 'object' && value !== null;\n }\n ValueGuard.IsObject = IsObject;\n function IsArray(value) {\n return Array.isArray(value);\n }\n ValueGuard.IsArray = IsArray;\n function IsBoolean(value) {\n return typeof value === 'boolean';\n }\n ValueGuard.IsBoolean = IsBoolean;\n function IsNull(value) {\n return value === null;\n }\n ValueGuard.IsNull = IsNull;\n function IsUndefined(value) {\n return value === undefined;\n }\n ValueGuard.IsUndefined = IsUndefined;\n function IsBigInt(value) {\n return typeof value === 'bigint';\n }\n ValueGuard.IsBigInt = IsBigInt;\n function IsNumber(value) {\n return typeof value === 'number';\n }\n ValueGuard.IsNumber = IsNumber;\n function IsString(value) {\n return typeof value === 'string';\n }\n ValueGuard.IsString = IsString;\n})(ValueGuard || (exports.ValueGuard = ValueGuard = {}));\n// --------------------------------------------------------------------------\n// TypeGuard\n// --------------------------------------------------------------------------\nclass TypeGuardUnknownTypeError extends Error {\n constructor(schema) {\n super('TypeGuard: Unknown type');\n this.schema = schema;\n }\n}\nexports.TypeGuardUnknownTypeError = TypeGuardUnknownTypeError;\n/** Provides functions to test if JavaScript values are TypeBox types */\nvar TypeGuard;\n(function (TypeGuard) {\n function IsPattern(value) {\n try {\n new RegExp(value);\n return true;\n }\n catch {\n return false;\n }\n }\n function IsControlCharacterFree(value) {\n if (!ValueGuard.IsString(value))\n return false;\n for (let i = 0; i < value.length; i++) {\n const code = value.charCodeAt(i);\n if ((code >= 7 && code <= 13) || code === 27 || code === 127) {\n return false;\n }\n }\n return true;\n }\n function IsAdditionalProperties(value) {\n return IsOptionalBoolean(value) || TSchema(value);\n }\n function IsOptionalBigInt(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsBigInt(value);\n }\n function IsOptionalNumber(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsNumber(value);\n }\n function IsOptionalBoolean(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsBoolean(value);\n }\n function IsOptionalString(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsString(value);\n }\n function IsOptionalPattern(value) {\n return ValueGuard.IsUndefined(value) || (ValueGuard.IsString(value) && IsControlCharacterFree(value) && IsPattern(value));\n }\n function IsOptionalFormat(value) {\n return ValueGuard.IsUndefined(value) || (ValueGuard.IsString(value) && IsControlCharacterFree(value));\n }\n function IsOptionalSchema(value) {\n return ValueGuard.IsUndefined(value) || TSchema(value);\n }\n /** Returns true if the given schema is TAny */\n function TAny(schema) {\n // prettier-ignore\n return (TKindOf(schema, 'Any') &&\n IsOptionalString(schema.$id));\n }\n TypeGuard.TAny = TAny;\n /** Returns true if the given schema is TArray */\n function TArray(schema) {\n return (TKindOf(schema, 'Array') &&\n schema.type === 'array' &&\n IsOptionalString(schema.$id) &&\n TSchema(schema.items) &&\n IsOptionalNumber(schema.minItems) &&\n IsOptionalNumber(schema.maxItems) &&\n IsOptionalBoolean(schema.uniqueItems) &&\n IsOptionalSchema(schema.contains) &&\n IsOptionalNumber(schema.minContains) &&\n IsOptionalNumber(schema.maxContains));\n }\n TypeGuard.TArray = TArray;\n /** Returns true if the given schema is TAsyncIterator */\n function TAsyncIterator(schema) {\n // prettier-ignore\n return (TKindOf(schema, 'AsyncIterator') &&\n schema.type === 'AsyncIterator' &&\n IsOptionalString(schema.$id) &&\n TSchema(schema.items));\n }\n TypeGuard.TAsyncIterator = TAsyncIterator;\n /** Returns true if the given schema is TBigInt */\n function TBigInt(schema) {\n // prettier-ignore\n return (TKindOf(schema, 'BigInt') &&\n schema.type === 'bigint' &&\n IsOptionalString(schema.$id) &&\n IsOptionalBigInt(schema.multipleOf) &&\n IsOptionalBigInt(schema.minimum) &&\n IsOptionalBigInt(schema.maximum) &&\n IsOptionalBigInt(schema.exclusiveMinimum) &&\n IsOptionalBigInt(schema.exclusiveMaximum));\n }\n TypeGuard.TBigInt = TBigInt;\n /** Returns true if the given schema is TBoolean */\n function TBoolean(schema) {\n // prettier-ignore\n return (TKindOf(schema, 'Boolean') &&\n schema.type === 'boolean' &&\n IsOptionalString(schema.$id));\n }\n TypeGuard.TBoolean = TBoolean;\n /** Returns true if the given schema is TConstructor */\n function TConstructor(schema) {\n // prettier-ignore\n if (!(TKindOf(schema, 'Constructor') &&\n schema.type === 'constructor' &&\n IsOptionalString(schema.$id) &&\n ValueGuard.IsArray(schema.parameters) &&\n TSchema(schema.returns))) {\n return false;\n }\n for (const parameter of schema.parameters) {\n if (!TSchema(parameter))\n return false;\n }\n return true;\n }\n TypeGuard.TConstructor = TConstructor;\n /** Returns true if the given schema is TDate */\n function TDate(schema) {\n return (TKindOf(schema, 'Date') &&\n schema.type === 'Date' &&\n IsOptionalString(schema.$id) &&\n IsOptionalNumber(schema.minimumTimestamp) &&\n IsOptionalNumber(schema.maximumTimestamp) &&\n IsOptionalNumber(schema.exclusiveMinimumTimestamp) &&\n IsOptionalNumber(schema.exclusiveMaximumTimestamp));\n }\n TypeGuard.TDate = TDate;\n /** Returns true if the given schema is TFunction */\n function TFunction(schema) {\n // prettier-ignore\n if (!(TKindOf(schema, 'Function') &&\n schema.type === 'function' &&\n IsOptionalString(schema.$id) &&\n ValueGuard.IsArray(schema.parameters) &&\n TSchema(schema.returns))) {\n return false;\n }\n for (const parameter of schema.parameters) {\n if (!TSchema(parameter))\n return false;\n }\n return true;\n }\n TypeGuard.TFunction = TFunction;\n /** Returns true if the given schema is TInteger */\n function TInteger(schema) {\n return (TKindOf(schema, 'Integer') &&\n schema.type === 'integer' &&\n IsOptionalString(schema.$id) &&\n IsOptionalNumber(schema.multipleOf) &&\n IsOptionalNumber(schema.minimum) &&\n IsOptionalNumber(schema.maximum) &&\n IsOptionalNumber(schema.exclusiveMinimum) &&\n IsOptionalNumber(schema.exclusiveMaximum));\n }\n TypeGuard.TInteger = TInteger;\n /** Returns true if the given schema is TIntersect */\n function TIntersect(schema) {\n // prettier-ignore\n if (!(TKindOf(schema, 'Intersect') &&\n ValueGuard.IsArray(schema.allOf) &&\n IsOptionalString(schema.type) &&\n (IsOptionalBoolean(schema.unevaluatedProperties) || IsOptionalSchema(schema.unevaluatedProperties)) &&\n IsOptionalString(schema.$id))) {\n return false;\n }\n if ('type' in schema && schema.type !== 'object') {\n return false;\n }\n for (const inner of schema.allOf) {\n if (!TSchema(inner))\n return false;\n }\n return true;\n }\n TypeGuard.TIntersect = TIntersect;\n /** Returns true if the given schema is TIterator */\n function TIterator(schema) {\n // prettier-ignore\n return (TKindOf(schema, 'Iterator') &&\n schema.type === 'Iterator' &&\n IsOptionalString(schema.$id) &&\n TSchema(schema.items));\n }\n TypeGuard.TIterator = TIterator;\n /** Returns true if the given schema is a TKind with the given name. */\n function TKindOf(schema, kind) {\n return TKind(schema) && schema[exports.Kind] === kind;\n }\n TypeGuard.TKindOf = TKindOf;\n /** Returns true if the given schema is TKind */\n function TKind(schema) {\n return ValueGuard.IsObject(schema) && exports.Kind in schema && ValueGuard.IsString(schema[exports.Kind]);\n }\n TypeGuard.TKind = TKind;\n /** Returns true if the given schema is TLiteral<string> */\n function TLiteralString(schema) {\n return TLiteral(schema) && ValueGuard.IsString(schema.const);\n }\n TypeGuard.TLiteralString = TLiteralString;\n /** Returns true if the given schema is TLiteral<number> */\n function TLiteralNumber(schema) {\n return TLiteral(schema) && ValueGuard.IsNumber(schema.const);\n }\n TypeGuard.TLiteralNumber = TLiteralNumber;\n /** Returns true if the given schema is TLiteral<boolean> */\n function TLiteralBoolean(schema) {\n return TLiteral(schema) && ValueGuard.IsBoolean(schema.const);\n }\n TypeGuard.TLiteralBoolean = TLiteralBoolean;\n /** Returns true if the given schema is TLiteral */\n function TLiteral(schema) {\n // prettier-ignore\n return (TKindOf(schema, 'Literal') &&\n IsOptionalString(schema.$id) && (ValueGuard.IsBoolean(schema.const) ||\n ValueGuard.IsNumber(schema.const) ||\n ValueGuard.IsString(schema.const)));\n }\n TypeGuard.TLiteral = TLiteral;\n /** Returns true if the given schema is TNever */\n function TNever(schema) {\n // prettier-ignore\n return (TKindOf(schema, 'Never') &&\n ValueGuard.IsObject(schema.not) &&\n Object.getOwnPropertyNames(schema.not).length === 0);\n }\n TypeGuard.TNever = TNever;\n /** Returns true if the given schema is TNot */\n function TNot(schema) {\n // prettier-ignore\n return (TKindOf(schema, 'Not') &&\n TSchema(schema.not));\n }\n TypeGuard.TNot = TNot;\n /** Returns true if the given schema is TNull */\n function TNull(schema) {\n // prettier-ignore\n return (TKindOf(schema, 'Null') &&\n schema.type === 'null' &&\n IsOptionalString(schema.$id));\n }\n TypeGuard.TNull = TNull;\n /** Returns true if the given schema is TNumber */\n function TNumber(schema) {\n return (TKindOf(schema, 'Number') &&\n schema.type === 'number' &&\n IsOptionalString(schema.$id) &&\n IsOptionalNumber(schema.multipleOf) &&\n IsOptionalNumber(schema.minimum) &&\n IsOptionalNumber(schema.maximum) &&\n IsOptionalNumber(schema.exclusiveMinimum) &&\n IsOptionalNumber(schema.exclusiveMaximum));\n }\n TypeGuard.TNumber = TNumber;\n /** Returns true if the given schema is TObject */\n function TObject(schema) {\n if (!(TKindOf(schema, 'Object') &&\n schema.type === 'object' &&\n IsOptionalString(schema.$id) &&\n ValueGuard.IsObject(schema.properties) &&\n IsAdditionalProperties(schema.additionalProperties) &&\n IsOptionalNumber(schema.minProperties) &&\n IsOptionalNumber(schema.maxProperties))) {\n return false;\n }\n for (const [key, value] of Object.entries(schema.properties)) {\n if (!IsControlCharacterFree(key))\n return false;\n if (!TSchema(value))\n return false;\n }\n return true;\n }\n TypeGuard.TObject = TObject;\n /** Returns true if the given schema is TPromise */\n function TPromise(schema) {\n // prettier-ignore\n return (TKindOf(schema, 'Promise') &&\n schema.type === 'Promise' &&\n IsOptionalString(schema.$id) &&\n TSchema(schema.item));\n }\n TypeGuard.TPromise = TPromise;\n /** Returns true if the given schema is TRecord */\n function TRecord(schema) {\n // prettier-ignore\n if (!(TKindOf(schema, 'Record') &&\n schema.type === 'object' &&\n IsOptionalString(schema.$id) &&\n IsAdditionalProperties(schema.additionalProperties) &&\n ValueGuard.IsObject(schema.patternProperties))) {\n return false;\n }\n const keys = Object.getOwnPropertyNames(schema.patternProperties);\n if (keys.length !== 1) {\n return false;\n }\n if (!IsPattern(keys[0])) {\n return false;\n }\n if (!TSchema(schema.patternProperties[keys[0]])) {\n return false;\n }\n return true;\n }\n TypeGuard.TRecord = TRecord;\n /** Returns true if the given schema is TRef */\n function TRef(schema) {\n // prettier-ignore\n return (TKindOf(schema, 'Ref') &&\n IsOptionalString(schema.$id) &&\n ValueGuard.IsString(schema.$ref));\n }\n TypeGuard.TRef = TRef;\n /** Returns true if the given schema is TString */\n function TString(schema) {\n // prettier-ignore\n return (TKindOf(schema, 'String') &&\n schema.type === 'string' &&\n IsOptionalString(schema.$id) &&\n IsOptionalNumber(schema.minLength) &&\n IsOptionalNumber(schema.maxLength) &&\n IsOptionalPattern(schema.pattern) &&\n IsOptionalFormat(schema.format));\n }\n TypeGuard.TString = TString;\n /** Returns true if the given schema is TSymbol */\n function TSymbol(schema) {\n // prettier-ignore\n return (TKindOf(schema, 'Symbol') &&\n schema.type === 'symbol' &&\n IsOptionalString(schema.$id));\n }\n TypeGuard.TSymbol = TSymbol;\n /** Returns true if the given schema is TTemplateLiteral */\n function TTemplateLiteral(schema) {\n // prettier-ignore\n return (TKindOf(schema, 'TemplateLiteral') &&\n schema.type === 'string' &&\n ValueGuard.IsString(schema.pattern) &&\n schema.pattern[0] === '^' &&\n schema.pattern[schema.pattern.length - 1] === '$');\n }\n TypeGuard.TTemplateLiteral = TTemplateLiteral;\n /** Returns true if the given schema is TThis */\n function TThis(schema) {\n // prettier-ignore\n return (TKindOf(schema, 'This') &&\n IsOptionalString(schema.$id) &&\n ValueGuard.IsString(schema.$ref));\n }\n TypeGuard.TThis = TThis;\n /** Returns true if the given schema is TTuple */\n function TTuple(schema) {\n // prettier-ignore\n if (!(TKindOf(schema, 'Tuple') &&\n schema.type === 'array' &&\n IsOptionalString(schema.$id) &&\n ValueGuard.IsNumber(schema.minItems) &&\n ValueGuard.IsNumber(schema.maxItems) &&\n schema.minItems === schema.maxItems)) {\n return false;\n }\n if (ValueGuard.IsUndefined(schema.items) && ValueGuard.IsUndefined(schema.additionalItems) && schema.minItems === 0) {\n return true;\n }\n if (!ValueGuard.IsArray(schema.items)) {\n return false;\n }\n for (const inner of schema.items) {\n if (!TSchema(inner))\n return false;\n }\n return true;\n }\n TypeGuard.TTuple = TTuple;\n /** Returns true if the given schema is TUndefined */\n function TUndefined(schema) {\n // prettier-ignore\n return (TKindOf(schema, 'Undefined') &&\n schema.type === 'undefined' &&\n IsOptionalString(schema.$id));\n }\n TypeGuard.TUndefined = TUndefined;\n /** Returns true if the given schema is TUnion<Literal<string | number>[]> */\n function TUnionLiteral(schema) {\n return TUnion(schema) && schema.anyOf.every((schema) => TLiteralString(schema) || TLiteralNumber(schema));\n }\n TypeGuard.TUnionLiteral = TUnionLiteral;\n /** Returns true if the given schema is TUnion */\n function TUnion(schema) {\n // prettier-ignore\n if (!(TKindOf(schema, 'Union') &&\n ValueGuard.IsArray(schema.anyOf) &&\n IsOptionalString(schema.$id))) {\n return false;\n }\n for (const inner of schema.anyOf) {\n if (!TSchema(inner))\n return false;\n }\n return true;\n }\n TypeGuard.TUnion = TUnion;\n /** Returns true if the given schema is TUint8Array */\n function TUint8Array(schema) {\n // prettier-ignore\n return (TKindOf(schema, 'Uint8Array') &&\n schema.type === 'Uint8Array' &&\n IsOptionalString(schema.$id) &&\n IsOptionalNumber(schema.minByteLength) &&\n IsOptionalNumber(schema.maxByteLength));\n }\n TypeGuard.TUint8Array = TUint8Array;\n /** Returns true if the given schema is TUnknown */\n function TUnknown(schema) {\n // prettier-ignore\n return (TKindOf(schema, 'Unknown') &&\n IsOptionalString(schema.$id));\n }\n TypeGuard.TUnknown = TUnknown;\n /** Returns true if the given schema is a raw TUnsafe */\n function TUnsafe(schema) {\n return TKindOf(schema, 'Unsafe');\n }\n TypeGuard.TUnsafe = TUnsafe;\n /** Returns true if the given schema is TVoid */\n function TVoid(schema) {\n // prettier-ignore\n return (TKindOf(schema, 'Void') &&\n schema.type === 'void' &&\n IsOptionalString(schema.$id));\n }\n TypeGuard.TVoid = TVoid;\n /** Returns true if this schema has the Readonly modifier */\n function TReadonly(schema) {\n return ValueGuard.IsObject(schema) && schema[exports.Readonly] === 'Readonly';\n }\n TypeGuard.TReadonly = TReadonly;\n /** Returns true if this schema has the Optional modifier */\n function TOptional(schema) {\n return ValueGuard.IsObject(schema) && schema[exports.Optional] === 'Optional';\n }\n TypeGuard.TOptional = TOptional;\n /** Returns true if the given schema is TSchema */\n function TSchema(schema) {\n return (ValueGuard.IsObject(schema) &&\n (TAny(schema) ||\n TArray(schema) ||\n TBoolean(schema) ||\n TBigInt(schema) ||\n TAsyncIterator(schema) ||\n TConstructor(schema) ||\n TDate(schema) ||\n TFunction(schema) ||\n TInteger(schema) ||\n TIntersect(schema) ||\n TIterator(schema) ||\n TLiteral(schema) ||\n TNever(schema) ||\n TNot(schema) ||\n TNull(schema) ||\n TNumber(schema) ||\n TObject(schema) ||\n TPromise(schema) ||\n TRecord(schema) ||\n TRef(schema) ||\n TString(schema) ||\n TSymbol(schema) ||\n TTemplateLiteral(schema) ||\n TThis(schema) ||\n TTuple(schema) ||\n TUndefined(schema) ||\n TUnion(schema) ||\n TUint8Array(schema) ||\n TUnknown(schema) ||\n TUnsafe(schema) ||\n TVoid(schema) ||\n (TKind(schema) && TypeRegistry.Has(schema[exports.Kind]))));\n }\n TypeGuard.TSchema = TSchema;\n})(TypeGuard || (exports.TypeGuard = TypeGuard = {}));\n// --------------------------------------------------------------------------\n// ExtendsUndefined\n// --------------------------------------------------------------------------\n/** Fast undefined check used for properties of type undefined */\nvar ExtendsUndefined;\n(function (ExtendsUndefined) {\n function Check(schema) {\n if (schema[exports.Kind] === 'Undefined')\n return true;\n if (schema[exports.Kind] === 'Not') {\n return !Check(schema.not);\n }\n if (schema[exports.Kind] === 'Intersect') {\n const intersect = schema;\n return intersect.allOf.every((schema) => Check(schema));\n }\n if (schema[exports.Kind] === 'Union') {\n const union = schema;\n return union.anyOf.some((schema) => Check(schema));\n }\n return false;\n }\n ExtendsUndefined.Check = Check;\n})(ExtendsUndefined || (exports.ExtendsUndefined = ExtendsUndefined = {}));\n// --------------------------------------------------------------------------\n// TypeExtends\n// --------------------------------------------------------------------------\nvar TypeExtendsResult;\n(function (TypeExtendsResult) {\n TypeExtendsResult[TypeExtendsResult[\"Union\"] = 0] = \"Union\";\n TypeExtendsResult[TypeExtendsResult[\"True\"] = 1] = \"True\";\n TypeExtendsResult[TypeExtendsResult[\"False\"] = 2] = \"False\";\n})(TypeExtendsResult || (exports.TypeExtendsResult = TypeExtendsResult = {}));\nvar TypeExtends;\n(function (TypeExtends) {\n // --------------------------------------------------------------------------\n // IntoBooleanResult\n // --------------------------------------------------------------------------\n function IntoBooleanResult(result) {\n return result === TypeExtendsResult.False ? TypeExtendsResult.False : TypeExtendsResult.True;\n }\n // --------------------------------------------------------------------------\n // StructuralRight\n // --------------------------------------------------------------------------\n function IsStructuralRight(right) {\n // prettier-ignore\n return (TypeGuard.TNever(right) ||\n TypeGuard.TIntersect(right) ||\n TypeGuard.TUnion(right) ||\n TypeGuard.TUnknown(right) ||\n TypeGuard.TAny(right));\n }\n function StructuralRight(left, right) {\n if (TypeGuard.TNever(right))\n return TNeverRight(left, right);\n if (TypeGuard.TIntersect(right))\n return TIntersectRight(left, right);\n if (TypeGuard.TUnion(right))\n return TUnionRight(left, right);\n if (TypeGuard.TUnknown(right))\n return TUnknownRight(left, right);\n if (TypeGuard.TAny(right))\n return TAnyRight(left, right);\n throw Error('TypeExtends: StructuralRight');\n }\n // --------------------------------------------------------------------------\n // Any\n // --------------------------------------------------------------------------\n function TAnyRight(left, right) {\n return TypeExtendsResult.True;\n }\n function TAny(left, right) {\n if (TypeGuard.TIntersect(right))\n return TIntersectRight(left, right);\n if (TypeGuard.TUnion(right) && right.anyOf.some((schema) => TypeGuard.TAny(schema) || TypeGuard.TUnknown(schema)))\n return TypeExtendsResult.True;\n if (TypeGuard.TUnion(right))\n return TypeExtendsResult.Union;\n if (TypeGuard.TUnknown(right))\n return TypeExtendsResult.True;\n if (TypeGuard.TAny(right))\n return TypeExtendsResult.True;\n return TypeExtendsResult.Union;\n }\n // --------------------------------------------------------------------------\n // Array\n // --------------------------------------------------------------------------\n function TArrayRight(left, right) {\n if (TypeGuard.TUnknown(left))\n return TypeExtendsResult.False;\n if (TypeGuard.TAny(left))\n return TypeExtendsResult.Union;\n if (TypeGuard.TNever(left))\n return TypeExtendsResult.True;\n return TypeExtendsResult.False;\n }\n function TArray(left, right) {\n if (IsStructuralRight(right))\n return StructuralRight(left, right);\n if (TypeGuard.TObject(right) && IsObjectArrayLike(right))\n return TypeExtendsResult.True;\n if (!TypeGuard.TArray(right))\n return TypeExtendsResult.False;\n return IntoBooleanResult(Visit(left.items, right.items));\n }\n // --------------------------------------------------------------------------\n // AsyncIterator\n // --------------------------------------------------------------------------\n function TAsyncIterator(left, right) {\n if (IsStructuralRight(right))\n return StructuralRight(left, right);\n if (!TypeGuard.TAsyncIterator(right))\n return TypeExtendsResult.False;\n return IntoBooleanResult(Visit(left.items, right.items));\n }\n // --------------------------------------------------------------------------\n // BigInt\n // --------------------------------------------------------------------------\n function TBigInt(left, right) {\n if (IsStructuralRight(right))\n return StructuralRight(left, right);\n if (TypeGuard.TObject(right))\n return TObjectRight(left, right);\n if (TypeGuard.TRecord(right))\n return TRecordRight(left, right);\n return TypeGuard.TBigInt(right) ? TypeExtendsResult.True : TypeExtendsResult.False;\n }\n // --------------------------------------------------------------------------\n // Boolean\n // --------------------------------------------------------------------------\n function TBooleanRight(left, right) {\n if (TypeGuard.TLiteral(left) && ValueGuard.IsBoolean(left.const))\n return TypeExtendsResult.True;\n return TypeGuard.TBoolean(left) ? TypeExtendsResult.True : TypeExtendsResult.False;\n }\n function TBoolean(left, right) {\n if (IsStructuralRight(right))\n return StructuralRight(left, right);\n if (TypeGuard.TObject(right))\n return TObjectRight(left, right);\n if (TypeGuard.TRecord(right))\n return TRecordRight(left, right);\n return TypeGuard.TBoolean(right) ? TypeExtendsResult.True : TypeExtendsResult.False;\n }\n // --------------------------------------------------------------------------\n // Constructor\n // --------------------------------------------------------------------------\n function TConstructor(left, right) {\n if (IsStructuralRight(right))\n return StructuralRight(left, right);\n if (TypeGuard.TObject(right))\n return TObjectRight(left, right);\n if (!TypeGuard.TConstructor(right))\n return TypeExtendsResult.False;\n if (left.parameters.length > right.parameters.length)\n return TypeExtendsResult.False;\n if (!left.parameters.every((schema, index) => IntoBooleanResult(Visit(right.parameters[index], schema)) === TypeExtendsResult.True)) {\n return TypeExtendsResult.False;\n }\n return IntoBooleanResult(Visit(left.returns, right.returns));\n }\n // --------------------------------------------------------------------------\n // Date\n // --------------------------------------------------------------------------\n function TDate(left, right) {\n if (IsStructuralRight(right))\n return StructuralRight(left, right);\n if (TypeGuard.TObject(right))\n return TObjectRight(left, right);\n if (TypeGuard.TRecord(right))\n return TRecordRight(left, right);\n return TypeGuard.TDate(right) ? TypeExtendsResult.True : TypeExtendsResult.False;\n }\n // --------------------------------------------------------------------------\n // Function\n // --------------------------------------------------------------------------\n function TFunction(left, right) {\n if (IsStructuralRight(right))\n return StructuralRight(left, right);\n if (TypeGuard.TObject(right))\n return TObjectRight(left, right);\n if (!TypeGuard.TFunction(right))\n return TypeExtendsResult.False;\n if (left.parameters.length > right.parameters.length)\n return TypeExtendsResult.False;\n if (!left.parameters.every((schema, index) => IntoBooleanResult(Visit(right.parameters[index], schema)) === TypeExtendsResult.True)) {\n return TypeExtendsResult.False;\n }\n return IntoBooleanResult(Visit(left.returns, right.returns));\n }\n // --------------------------------------------------------------------------\n // Integer\n // --------------------------------------------------------------------------\n function TIntegerRight(left, right) {\n if (TypeGuard.TLiteral(left) && ValueGuard.IsNumber(left.const))\n return TypeExtendsResult.True;\n return TypeGuard.TNumber(left) || TypeGuard.TInteger(left) ? TypeExtendsResult.True : TypeExtendsResult.False;\n }\n function TInteger(left, right) {\n if (IsStructuralRight(right))\n return StructuralRight(left, right);\n if (TypeGuard.TObject(right))\n return TObjectRight(left, right);\n if (TypeGuard.TRecord(right))\n return TRecordRight(left, right);\n return TypeGuard.TInteger(right) || TypeGuard.TNumber(right) ? TypeExtendsResult.True : TypeExtendsResult.False;\n }\n // --------------------------------------------------------------------------\n // Intersect\n // --------------------------------------------------------------------------\n function TIntersectRight(left, right) {\n return right.allOf.every((schema) => Visit(left, schema) === TypeExtendsResult.True) ? TypeExtendsResult.True : TypeExtendsResult.False;\n }\n function TIntersect(left, right) {\n return left.allOf.some((schema) => Visit(schema, right) === TypeExtendsResult.True) ? TypeExtendsResult.True : TypeExtendsResult.False;\n }\n // --------------------------------------------------------------------------\n // Iterator\n // --------------------------------------------------------------------------\n function TIterator(left, right) {\n if (IsStructuralRight(right))\n return StructuralRight(left, right);\n if (!TypeGuard.TIterator(right))\n return TypeExtendsResult.False;\n return IntoBooleanResult(Visit(left.items, right.items));\n }\n // --------------------------------------------------------------------------\n // Literal\n // --------------------------------------------------------------------------\n function TLiteral(left, right) {\n if (IsStructuralRight(right))\n return StructuralRight(left, right);\n if (TypeGuard.TObject(right))\n return TObjectRight(left, right);\n if (TypeGuard.TRecord(right))\n return TRecordRight(left, right);\n if (TypeGuard.TString(right))\n return TStringRight(left, right);\n if (TypeGuard.TNumber(right))\n return TNumberRight(left, right);\n if (TypeGuard.TInteger(right))\n return TIntegerRight(left, right);\n if (TypeGuard.TBoolean(right))\n return TBooleanRight(left, right);\n return TypeGuard.TLiteral(right) && right.const === left.const ? TypeExtendsResult.True : TypeExtendsResult.False;\n }\n // --------------------------------------------------------------------------\n // Never\n // --------------------------------------------------------------------------\n function TNeverRight(left, right) {\n return TypeExtendsResult.False;\n }\n function TNever(left, right) {\n return TypeExtendsResult.True;\n }\n // --------------------------------------------------------------------------\n // Not\n // --------------------------------------------------------------------------\n function UnwrapTNot(schema) {\n let [current, depth] = [schema, 0];\n while (true) {\n if (!TypeGuard.TNot(current))\n break;\n current = current.not;\n depth += 1;\n }\n return depth % 2 === 0 ? current : exports.Type.Unknown();\n }\n function TNot(left, right) {\n // TypeScript has no concept of negated types, and attempts to correctly check the negated\n // type at runtime would put TypeBox at odds with TypeScripts ability to statically infer\n // the type. Instead we unwrap to either unknown or T and continue evaluating.\n if (TypeGuard.TNot(left))\n return Visit(UnwrapTNot(left), right);\n if (TypeGuard.TNot(right))\n return Visit(left, UnwrapTNot(right));\n throw new Error(`TypeExtends: Invalid fallthrough for Not`);\n }\n // --------------------------------------------------------------------------\n // Null\n // --------------------------------------------------------------------------\n function TNull(left, right) {\n if (IsStructuralRight(right))\n return StructuralRight(left, right);\n if (TypeGuard.TObject(right))\n return TObjectRight(left, right);\n if (TypeGuard.TRecord(right))\n return TRecordRight(left, right);\n return TypeGuard.TNull(right) ? TypeExtendsResult.True : TypeExtendsResult.False;\n }\n // --------------------------------------------------------------------------\n // Number\n // --------------------------------------------------------------------------\n function TNumberRight(left, right) {\n if (TypeGuard.TLiteralNumber(left))\n return TypeExtendsResult.True;\n return TypeGuard.TNumber(left) || TypeGuard.TInteger(left) ? TypeExtendsResult.True : TypeExtendsResult.False;\n }\n function TNumber(left, right) {\n if (IsStructuralRight(right))\n return StructuralRight(left, right);\n if (TypeGuard.TObject(right))\n return TObjectRight(left, right);\n if (TypeGuard.TRecord(right))\n return TRecordRight(left, right);\n return TypeGuard.TInteger(right) || TypeGuard.TNumber(right) ? TypeExtendsResult.True : TypeExtendsResult.False;\n }\n // --------------------------------------------------------------------------\n // Object\n // --------------------------------------------------------------------------\n function IsObjectPropertyCount(schema, count) {\n return Object.getOwnPropertyNames(schema.properties).length === count;\n }\n function IsObjectStringLike(schema) {\n return IsObjectArrayLike(schema);\n }\n function IsObjectSymbolLike(schema) {\n // prettier-ignore\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'description' in schema.properties && TypeGuard.TUnion(schema.properties.description) && schema.properties.description.anyOf.length === 2 && ((TypeGuard.TString(schema.properties.description.anyOf[0]) &&\n TypeGuard.TUndefined(schema.properties.description.anyOf[1])) || (TypeGuard.TString(schema.properties.description.anyOf[1]) &&\n TypeGuard.TUndefined(schema.properties.description.anyOf[0]))));\n }\n function IsObjectNumberLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n }\n function IsObjectBooleanLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n }\n function IsObjectBigIntLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n }\n function IsObjectDateLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n }\n function IsObjectUint8ArrayLike(schema) {\n return IsObjectArrayLike(schema);\n }\n function IsObjectFunctionLike(schema) {\n const length = exports.Type.Number();\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'length' in schema.properties && IntoBooleanResult(Visit(schema.properties['length'], length)) === TypeExtendsResult.True);\n }\n function IsObjectConstructorLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n }\n function IsObjectArrayLike(schema) {\n const length = exports.Type.Number();\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'length' in schema.properties && IntoBooleanResult(Visit(schema.properties['length'], length)) === TypeExtendsResult.True);\n }\n function IsObjectPromiseLike(schema) {\n const then = exports.Type.Function([exports.Type.Any()], exports.Type.Any());\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'then' in schema.properties && IntoBooleanResult(Visit(schema.properties['then'], then)) === TypeExtendsResult.True);\n }\n // --------------------------------------------------------------------------\n // Property\n // --------------------------------------------------------------------------\n function Property(left, right) {\n if (Visit(left, right) === TypeExtendsResult.False)\n return TypeExtendsResult.False;\n if (TypeGuard.TOptional(left) && !TypeGuard.TOptional(right))\n return TypeExtendsResult.False;\n return TypeExtendsResult.True;\n }\n function TObjectRight(left, right) {\n if (TypeGuard.TUnknown(left))\n return TypeExtendsResult.False;\n if (TypeGuard.TAny(left))\n return TypeExtendsResult.Union;\n if (TypeGuard.TNever(left))\n return TypeExtendsResult.True;\n if (TypeGuard.TLiteralString(left) && IsObjectStringLike(right))\n return TypeExtendsResult.True;\n if (TypeGuard.TLiteralNumber(left) && IsObjectNumberLike(right))\n return TypeExtendsResult.True;\n if (TypeGuard.TLiteralBoolean(left) && IsObjectBooleanLike(right))\n return TypeExtendsResult.True;\n if (TypeGuard.TSymbol(left) && IsObjectSymbolLike(right))\n return TypeExtendsResult.True;\n if (TypeGuard.TBigInt(left) && IsObjectBigIntLike(right))\n return TypeExtendsResult.True;\n if (TypeGuard.TString(left) && IsObjectStringLike(right))\n return TypeExtendsResult.True;\n if (TypeGuard.TSymbol(left) && IsObjectSymbolLike(right))\n return TypeExtendsResult.True;\n if (TypeGuard.TNumber(left) && IsObjectNumberLike(right))\n return TypeExtendsResult.True;\n if (TypeGuard.TInteger(left) && IsObjectNumberLike(right))\n return TypeExtendsResult.True;\n if (TypeGuard.TBoolean(left) && IsObjectBooleanLike(right))\n return TypeExtendsResult.True;\n if (TypeGuard.TUint8Array(left) && IsObjectUint8ArrayLike(right))\n return TypeExtendsResult.True;\n if (TypeGuard.TDate(left) && IsObjectDateLike(right))\n return TypeExtendsResult.True;\n if (TypeGuard.TConstructor(left) && IsObjectConstructorLike(right))\n return TypeExtendsResult.True;\n if (TypeGuard.TFunction(left) && IsObjectFunctionLike(right))\n return TypeExtendsResult.True;\n if (TypeGuard.TRecord(left) && TypeGuard.TString(RecordKey(left))) {\n // When expressing a Record with literal key values, the Record is converted into a Object with\n // the Hint assigned as `Record`. This is used to invert the extends logic.\n return right[exports.Hint] === 'Record' ? TypeExtendsResult.True : TypeExtendsResult.False;\n }\n if (TypeGuard.TRecord(left) && TypeGuard.TNumber(RecordKey(left))) {\n return IsObjectPropertyCount(right, 0) ? TypeExtendsResult.True : TypeExtendsResult.False;\n }\n return TypeExtendsResult.False;\n }\n function TObject(left, right) {\n if (IsStructuralRight(right))\n return StructuralRight(left, right);\n if (TypeGuard.TRecord(right))\n return TRecordRight(left, right);\n if (!TypeGuard.TObject(right))\n return TypeExtendsResult.False;\n for (const key of Object.getOwnPropertyNames(right.properties)) {\n if (!(key in left.properties))\n return TypeExtendsResult.False;\n if (Property(left.properties[key], right.properties[key]) === TypeExtendsResult.False) {\n return TypeExtendsResult.False;\n }\n }\n return TypeExtendsResult.True;\n }\n // --------------------------------------------------------------------------\n // Promise\n // --------------------------------------------------------------------------\n function TPromise(left, right) {\n if (IsStructuralRight(right))\n return StructuralRight(left, right);\n if (TypeGuard.TObject(right) && IsObjectPromiseLike(right))\n return TypeExtendsResult.True;\n if (!TypeGuard.TPromise(right))\n return TypeExtendsResult.False;\n return IntoBooleanResult(Visit(left.item, right.item));\n }\n // --------------------------------------------------------------------------\n // Record\n // --------------------------------------------------------------------------\n function RecordKey(schema) {\n if (exports.PatternNumberExact in schema.patternProperties)\n return exports.Type.Number();\n if (exports.PatternStringExact in schema.patternProperties)\n return exports.Type.String();\n throw Error('TypeExtends: Cannot get record key');\n }\n function RecordValue(schema) {\n if (exports.PatternNumberExact in schema.patternProperties)\n return schema.patternProperties[exports.PatternNumberExact];\n if (exports.PatternStringExact in schema.patternProperties)\n return schema.patternProperties[exports.PatternStringExact];\n throw Error('TypeExtends: Cannot get record value');\n }\n function TRecordRight(left, right) {\n const Key = RecordKey(right);\n const Value = RecordValue(right);\n if (TypeGuard.TLiteralString(left) && TypeGuard.TNumber(Key) && IntoBooleanResult(Visit(left, Value)) === TypeExtendsResult.True)\n return TypeExtendsResult.True;\n if (TypeGuard.TUint8Array(left) && TypeGuard.TNumber(Key))\n return Visit(left, Value);\n if (TypeGuard.TString(left) && TypeGuard.TNumber(Key))\n return Visit(left, Value);\n if (TypeGuard.TArray(left) && TypeGuard.TNumber(Key))\n return Visit(left, Value);\n if (TypeGuard.TObject(left)) {\n for (const key of Object.getOwnPropertyNames(left.properties)) {\n if (Property(Value, left.properties[key]) === TypeExtendsResult.False) {\n return TypeExtendsResult.False;\n }\n }\n return TypeExtendsResult.True;\n }\n return TypeExtendsResult.False;\n }\n function TRecord(left, right) {\n const Value = RecordValue(left);\n if (IsStructuralRight(right))\n return StructuralRight(left, right);\n if (TypeGuard.TObject(right))\n return TObjectRight(left, right);\n if (!TypeGuard.TRecord(right))\n return TypeExtendsResult.False;\n return Visit(Value, RecordValue(right));\n }\n // --------------------------------------------------------------------------\n // String\n // --------------------------------------------------------------------------\n function TStringRight(left, right) {\n if (TypeGuard.TLiteral(left) && ValueGuard.IsString(left.const))\n return TypeExtendsResult.True;\n return TypeGuard.TString(left) ? TypeExtendsResult.True : TypeExtendsResult.False;\n }\n function TString(left, right) {\n if (IsStructuralRight(right))\n return StructuralRight(left, right);\n if (TypeGuard.TObject(right))\n return TObjectRight(left, right);\n if (TypeGuard.TRecord(right))\n return TRecordRight(left, right);\n return TypeGuard.TString(right) ? TypeExtendsResult.True : TypeExtendsResult.False;\n }\n // --------------------------------------------------------------------------\n // Symbol\n // --------------------------------------------------------------------------\n function TSymbol(left, right) {\n if (IsStructuralRight(right))\n return StructuralRight(left, right);\n if (TypeGuard.TObject(right))\n return TObjectRight(left, right);\n if (TypeGuard.TRecord(right))\n return TRecordRight(left, right);\n return TypeGuard.TSymbol(right) ? TypeExtendsResult.True : TypeExtendsResult.False;\n }\n // --------------------------------------------------------------------------\n // TemplateLiteral\n // --------------------------------------------------------------------------\n function TTemplateLiteral(left, right) {\n // TemplateLiteral types are resolved to either unions for finite expressions or string\n // for infinite expressions. Here we call to TemplateLiteralResolver to resolve for\n // either type and continue evaluating.\n if (TypeGuard.TTemplateLiteral(left))\n return Visit(TemplateLiteralResolver.Resolve(left), right);\n if (TypeGuard.TTemplateLiteral(right))\n return Visit(left, TemplateLiteralResolver.Resolve(right));\n throw new Error(`TypeExtends: Invalid fallthrough for TemplateLiteral`);\n }\n // --------------------------------------------------------------------------\n // Tuple\n // --------------------------------------------------------------------------\n function IsArrayOfTuple(left, right) {\n // prettier-ignore\n return (TypeGuard.TArray(right) &&\n left.items !== undefined &&\n left.items.every((schema) => Visit(schema, right.items) === TypeExtendsResult.True));\n }\n function TTupleRight(left, right) {\n if (TypeGuard.TNever(left))\n return TypeExtendsResult.True;\n if (TypeGuard.TUnknown(left))\n return TypeExtendsResult.False;\n if (TypeGuard.TAny(left))\n return TypeExtendsResult.Union;\n return TypeExtendsResult.False;\n }\n function TTuple(left, right) {\n if (IsStructuralRight(right))\n return StructuralRight(left, right);\n if (TypeGuard.TObject(right) && IsObjectArrayLike(right))\n return TypeExtendsResult.True;\n if (TypeGuard.TArray(right) && IsArrayOfTuple(left, right))\n return TypeExtendsResult.True;\n if (!TypeGuard.TTuple(right))\n return TypeExtendsResult.False;\n if ((ValueGuard.IsUndefined(left.items) && !ValueGuard.IsUndefined(right.items)) || (!ValueGuard.IsUndefined(left.items) && ValueGuard.IsUndefined(right.items)))\n return TypeExtendsResult.False;\n if (ValueGuard.IsUndefined(left.items) && !ValueGuard.IsUndefined(right.items))\n return TypeExtendsResult.True;\n return left.items.every((schema, index) => Visit(schema, right.items[index]) === TypeExtendsResult.True) ? TypeExtendsResult.True : TypeExtendsResult.False;\n }\n // --------------------------------------------------------------------------\n // Uint8Array\n // --------------------------------------------------------------------------\n function TUint8Array(left, right) {\n if (IsStructuralRight(right))\n return StructuralRight(left, right);\n if (TypeGuard.TObject(right))\n return TObjectRight(left, right);\n if (TypeGuard.TRecord(right))\n return TRecordRight(left, right);\n return TypeGuard.TUint8Array(right) ? TypeExtendsResult.True : TypeExtendsResult.False;\n }\n // --------------------------------------------------------------------------\n // Undefined\n // --------------------------------------------------------------------------\n function TUndefined(left, right) {\n if (IsStructuralRight(right))\n return StructuralRight(left, right);\n if (TypeGuard.TObject(right))\n return TObjectRight(left, right);\n if (TypeGuard.TRecord(right))\n return TRecordRight(left, right);\n if (TypeGuard.TVoid(right))\n return VoidRight(left, right);\n return TypeGuard.TUndefined(right) ? TypeExtendsResult.True : TypeExtendsResult.False;\n }\n // --------------------------------------------------------------------------\n // Union\n // --------------------------------------------------------------------------\n function TUnionRight(left, right) {\n return right.anyOf.some((schema) => Visit(left, schema) === TypeExtendsResult.True) ? TypeExtendsResult.True : TypeExtendsResult.False;\n }\n function TUnion(left, right) {\n return left.anyOf.every((schema) => Visit(schema, right) === TypeExtendsResult.True) ? TypeExtendsResult.True : TypeExtendsResult.False;\n }\n // --------------------------------------------------------------------------\n // Unknown\n // --------------------------------------------------------------------------\n function TUnknownRight(left, right) {\n return TypeExtendsResult.True;\n }\n function TUnknown(left, right) {\n if (TypeGuard.TNever(right))\n return TNeverRight(left, right);\n if (TypeGuard.TIntersect(right))\n return TIntersectRight(left, right);\n if (TypeGuard.TUnion(right))\n return TUnionRight(left, right);\n if (TypeGuard.TAny(right))\n return TAnyRight(left, right);\n if (TypeGuard.TString(right))\n return TStringRight(left, right);\n if (TypeGuard.TNumber(right))\n return TNumberRight(left, right);\n if (TypeGuard.TInteger(right))\n return TIntegerRight(left, right);\n if (TypeGuard.TBoolean(right))\n return TBooleanRight(left, right);\n if (TypeGuard.TArray(right))\n return TArrayRight(left, right);\n if (TypeGuard.TTuple(right))\n return TTupleRight(left, right);\n if (TypeGuard.TObject(right))\n return TObjectRight(left, right);\n return TypeGuard.TUnknown(right) ? TypeExtendsResult.True : TypeExtendsResult.False;\n }\n // --------------------------------------------------------------------------\n // Void\n // --------------------------------------------------------------------------\n function VoidRight(left, right) {\n if (TypeGuard.TUndefined(left))\n return TypeExtendsResult.True;\n return TypeGuard.TUndefined(left) ? TypeExtendsResult.True : TypeExtendsResult.False;\n }\n function TVoid(left, right) {\n if (TypeGuard.TIntersect(right))\n return TIntersectRight(left, right);\n if (TypeGuard.TUnion(right))\n return TUnionRight(left, right);\n if (TypeGuard.TUnknown(right))\n return TUnknownRight(left, right);\n if (TypeGuard.TAny(right))\n return TAnyRight(left, right);\n if (TypeGuard.TObject(right))\n return TObjectRight(left, right);\n return TypeGuard.TVoid(right) ? TypeExtendsResult.True : TypeExtendsResult.False;\n }\n function Visit(left, right) {\n // Resolvable Types\n if (TypeGuard.TTemplateLiteral(left) || TypeGuard.TTemplateLiteral(right))\n return TTemplateLiteral(left, right);\n if (TypeGuard.TNot(left) || TypeGuard.TNot(right))\n return TNot(left, right);\n // Standard Types\n if (TypeGuard.TAny(left))\n return TAny(left, right);\n if (TypeGuard.TArray(left))\n return TArray(left, right);\n if (TypeGuard.TBigInt(left))\n return TBigInt(left, right);\n if (TypeGuard.TBoolean(left))\n return TBoolean(left, right);\n if (TypeGuard.TAsyncIterator(left))\n return TAsyncIterator(left, right);\n if (TypeGuard.TConstructor(left))\n return TConstructor(left, right);\n if (TypeGuard.TDate(left))\n return TDate(left, right);\n if (TypeGuard.TFunction(left))\n return TFunction(left, right);\n if (TypeGuard.TInteger(left))\n return TInteger(left, right);\n if (TypeGuard.TIntersect(left))\n return TIntersect(left, right);\n if (TypeGuard.TIterator(left))\n return TIterator(left, right);\n if (TypeGuard.TLiteral(left))\n return TLiteral(left, right);\n if (TypeGuard.TNever(left))\n return TNever(left, right);\n if (TypeGuard.TNull(left))\n return TNull(left, right);\n if (TypeGuard.TNumber(left))\n return TNumber(left, right);\n if (TypeGuard.TObject(left))\n return TObject(left, right);\n if (TypeGuard.TRecord(left))\n return TRecord(left, right);\n if (TypeGuard.TString(left))\n return TString(left, right);\n if (TypeGuard.TSymbol(left))\n return TSymbol(left, right);\n if (TypeGuard.TTuple(left))\n return TTuple(left, right);\n if (TypeGuard.TPromise(left))\n return TPromise(left, right);\n if (TypeGuard.TUint8Array(left))\n return TUint8Array(left, right);\n if (TypeGuard.TUndefined(left))\n return TUndefined(left, right);\n if (TypeGuard.TUnion(left))\n return TUnion(left, right);\n if (TypeGuard.TUnknown(left))\n return TUnknown(left, right);\n if (TypeGuard.TVoid(left))\n return TVoid(left, right);\n throw Error(`TypeExtends: Unknown left type operand '${left[exports.Kind]}'`);\n }\n function Extends(left, right) {\n return Visit(left, right);\n }\n TypeExtends.Extends = Extends;\n})(TypeExtends || (exports.TypeExtends = TypeExtends = {}));\n// --------------------------------------------------------------------------\n// TypeClone\n// --------------------------------------------------------------------------\n/** Specialized Clone for Types */\nvar TypeClone;\n(function (TypeClone) {\n function ObjectType(value) {\n const clonedProperties = Object.getOwnPropertyNames(value).reduce((acc, key) => ({ ...acc, [key]: Visit(value[key]) }), {});\n const clonedSymbols = Object.getOwnPropertySymbols(value).reduce((acc, key) => ({ ...acc, [key]: Visit(value[key]) }), {});\n return { ...clonedProperties, ...clonedSymbols };\n }\n function ArrayType(value) {\n return value.map((value) => Visit(value));\n }\n function Visit(value) {\n if (ValueGuard.IsArray(value))\n return ArrayType(value);\n if (ValueGuard.IsObject(value))\n return ObjectType(value);\n return value;\n }\n /** Clones a type. */\n function Clone(schema, options = {}) {\n return { ...Visit(schema), ...options };\n }\n TypeClone.Clone = Clone;\n})(TypeClone || (exports.TypeClone = TypeClone = {}));\n// --------------------------------------------------------------------------\n// IndexedAccessor\n// --------------------------------------------------------------------------\nvar IndexedAccessor;\n(function (IndexedAccessor) {\n function OptionalUnwrap(schema) {\n return schema.map((schema) => {\n const { [exports.Optional]: _, ...clone } = TypeClone.Clone(schema);\n return clone;\n });\n }\n function IsIntersectOptional(schema) {\n return schema.every((schema) => TypeGuard.TOptional(schema));\n }\n function IsUnionOptional(schema) {\n return schema.some((schema) => TypeGuard.TOptional(schema));\n }\n function ResolveIntersect(schema) {\n const optional = IsIntersectOptional(schema.allOf);\n return optional ? exports.Type.Optional(exports.Type.Intersect(OptionalUnwrap(schema.allOf))) : schema;\n }\n function ResolveUnion(schema) {\n const optional = IsUnionOptional(schema.anyOf);\n return optional ? exports.Type.Optional(exports.Type.Union(OptionalUnwrap(schema.anyOf))) : schema;\n }\n function ResolveOptional(schema) {\n if (schema[exports.Kind] === 'Intersect')\n return ResolveIntersect(schema);\n if (schema[exports.Kind] === 'Union')\n return ResolveUnion(schema);\n return schema;\n }\n function TIntersect(schema, key) {\n const resolved = schema.allOf.reduce((acc, schema) => {\n const indexed = Visit(schema, key);\n return indexed[exports.Kind] === 'Never' ? acc : [...acc, indexed];\n }, []);\n return ResolveOptional(exports.Type.Intersect(resolved));\n }\n function TUnion(schema, key) {\n const resolved = schema.anyOf.map((schema) => Visit(schema, key));\n return ResolveOptional(exports.Type.Union(resolved));\n }\n function TObject(schema, key) {\n const property = schema.properties[key];\n return ValueGuard.IsUndefined(property) ? exports.Type.Never() : exports.Type.Union([property]);\n }\n function TTuple(schema, key) {\n const items = schema.items;\n if (ValueGuard.IsUndefined(items))\n return exports.Type.Never();\n const element = items[key]; //\n if (ValueGuard.IsUndefined(element))\n return exports.Type.Never();\n return element;\n }\n function Visit(schema, key) {\n if (schema[exports.Kind] === 'Intersect')\n return TIntersect(schema, key);\n if (schema[exports.Kind] === 'Union')\n return TUnion(schema, key);\n if (schema[exports.Kind] === 'Object')\n return TObject(schema, key);\n if (schema[exports.Kind] === 'Tuple')\n return TTuple(schema, key);\n return exports.Type.Never();\n }\n function Resolve(schema, keys, options = {}) {\n const resolved = keys.map((key) => Visit(schema, key.toString()));\n return ResolveOptional(exports.Type.Union(resolved, options));\n }\n IndexedAccessor.Resolve = Resolve;\n})(IndexedAccessor || (exports.IndexedAccessor = IndexedAccessor = {}));\n// --------------------------------------------------------------------------\n// Intrinsic\n// --------------------------------------------------------------------------\nvar Intrinsic;\n(function (Intrinsic) {\n function Uncapitalize(value) {\n const [first, rest] = [value.slice(0, 1), value.slice(1)];\n return `${first.toLowerCase()}${rest}`;\n }\n function Capitalize(value) {\n const [first, rest] = [value.slice(0, 1), value.slice(1)];\n return `${first.toUpperCase()}${rest}`;\n }\n function Uppercase(value) {\n return value.toUpperCase();\n }\n function Lowercase(value) {\n return value.toLowerCase();\n }\n function IntrinsicTemplateLiteral(schema, mode) {\n // note: template literals require special runtime handling as they are encoded in string patterns.\n // This diverges from the mapped type which would otherwise map on the template literal kind.\n const expression = TemplateLiteralParser.ParseExact(schema.pattern);\n const finite = TemplateLiteralFinite.Check(expression);\n if (!finite)\n return { ...schema, pattern: IntrinsicLiteral(schema.pattern, mode) };\n const strings = [...TemplateLiteralGenerator.Generate(expression)];\n const literals = strings.map((value) => exports.Type.Literal(value));\n const mapped = IntrinsicRest(literals, mode);\n const union = exports.Type.Union(mapped);\n return exports.Type.TemplateLiteral([union]);\n }\n function IntrinsicLiteral(value, mode) {\n // prettier-ignore\n return typeof value === 'string' ? (mode === 'Uncapitalize' ? Uncapitalize(value) :\n mode === 'Capitalize' ? Capitalize(value) :\n mode === 'Uppercase' ? Uppercase(value) :\n mode === 'Lowercase' ? Lowercase(value) :\n value) : value.toString();\n }\n function IntrinsicRest(schema, mode) {\n if (schema.length === 0)\n return [];\n const [L, ...R] = schema;\n return [Map(L, mode), ...IntrinsicRest(R, mode)];\n }\n function Visit(schema, mode) {\n if (TypeGuard.TTemplateLiteral(schema))\n return IntrinsicTemplateLiteral(schema, mode);\n if (TypeGuard.TUnion(schema))\n return exports.Type.Union(IntrinsicRest(schema.anyOf, mode));\n if (TypeGuard.TLiteral(schema))\n return exports.Type.Literal(IntrinsicLiteral(schema.const, mode));\n return schema;\n }\n /** Applies an intrinsic string manipulation to the given type. */\n function Map(schema, mode) {\n return Visit(schema, mode);\n }\n Intrinsic.Map = Map;\n})(Intrinsic || (exports.Intrinsic = Intrinsic = {}));\n// --------------------------------------------------------------------------\n// ObjectMap\n// --------------------------------------------------------------------------\nvar ObjectMap;\n(function (ObjectMap) {\n function TIntersect(schema, callback) {\n // prettier-ignore\n return exports.Type.Intersect(schema.allOf.map((inner) => Visit(inner, callback)), { ...schema });\n }\n function TUnion(schema, callback) {\n // prettier-ignore\n return exports.Type.Union(schema.anyOf.map((inner) => Visit(inner, callback)), { ...schema });\n }\n function TObject(schema, callback) {\n return callback(schema);\n }\n function Visit(schema, callback) {\n // There are cases where users need to map objects with unregistered kinds. Using a TypeGuard here would\n // prevent sub schema mapping as unregistered kinds will not pass TSchema checks. This is notable in the\n // case of TObject where unregistered property kinds cause the TObject check to fail. As mapping is only\n // used for composition, we use explicit checks instead.\n if (schema[exports.Kind] === 'Intersect')\n return TIntersect(schema, callback);\n if (schema[exports.Kind] === 'Union')\n return TUnion(schema, callback);\n if (schema[exports.Kind] === 'Object')\n return TObject(schema, callback);\n return schema;\n }\n function Map(schema, callback, options) {\n return { ...Visit(TypeClone.Clone(schema), callback), ...options };\n }\n ObjectMap.Map = Map;\n})(ObjectMap || (exports.ObjectMap = ObjectMap = {}));\nvar KeyResolver;\n(function (KeyResolver) {\n function UnwrapPattern(key) {\n return key[0] === '^' && key[key.length - 1] === '$' ? key.slice(1, key.length - 1) : key;\n }\n function TIntersect(schema, options) {\n return schema.allOf.reduce((acc, schema) => [...acc, ...Visit(schema, options)], []);\n }\n function TUnion(schema, options) {\n const sets = schema.anyOf.map((inner) => Visit(inner, options));\n return [...sets.reduce((set, outer) => outer.map((key) => (sets.every((inner) => inner.includes(key)) ? set.add(key) : set))[0], new Set())];\n }\n function TObject(schema, options) {\n return Object.getOwnPropertyNames(schema.properties);\n }\n function TRecord(schema, options) {\n return options.includePatterns ? Object.getOwnPropertyNames(schema.patternProperties) : [];\n }\n function Visit(schema, options) {\n if (TypeGuard.TIntersect(schema))\n return TIntersect(schema, options);\n if (TypeGuard.TUnion(schema))\n return TUnion(schema, options);\n if (TypeGuard.TObject(schema))\n return TObject(schema, options);\n if (TypeGuard.TRecord(schema))\n return TRecord(schema, options);\n return [];\n }\n /** Resolves an array of keys in this schema */\n function ResolveKeys(schema, options) {\n return [...new Set(Visit(schema, options))];\n }\n KeyResolver.ResolveKeys = ResolveKeys;\n /** Resolves a regular expression pattern matching all keys in this schema */\n function ResolvePattern(schema) {\n const keys = ResolveKeys(schema, { includePatterns: true });\n const pattern = keys.map((key) => `(${UnwrapPattern(key)})`);\n return `^(${pattern.join('|')})$`;\n }\n KeyResolver.ResolvePattern = ResolvePattern;\n})(KeyResolver || (exports.KeyResolver = KeyResolver = {}));\n// --------------------------------------------------------------------------\n// KeyArrayResolver\n// --------------------------------------------------------------------------\nvar KeyArrayResolver;\n(function (KeyArrayResolver) {\n /** Resolves an array of string[] keys from the given schema or array type. */\n function Resolve(schema) {\n if (Array.isArray(schema))\n return schema;\n if (TypeGuard.TUnionLiteral(schema))\n return schema.anyOf.map((schema) => schema.const.toString());\n if (TypeGuard.TLiteral(schema))\n return [schema.const];\n if (TypeGuard.TTemplateLiteral(schema)) {\n const expression = TemplateLiteralParser.ParseExact(schema.pattern);\n if (!TemplateLiteralFinite.Check(expression))\n throw Error('KeyArrayResolver: Cannot resolve keys from infinite template expression');\n return [...TemplateLiteralGenerator.Generate(expression)];\n }\n return [];\n }\n KeyArrayResolver.Resolve = Resolve;\n})(KeyArrayResolver || (exports.KeyArrayResolver = KeyArrayResolver = {}));\n// --------------------------------------------------------------------------\n// UnionResolver\n// --------------------------------------------------------------------------\nvar UnionResolver;\n(function (UnionResolver) {\n function* TUnion(union) {\n for (const schema of union.anyOf) {\n if (schema[exports.Kind] === 'Union') {\n yield* TUnion(schema);\n }\n else {\n yield schema;\n }\n }\n }\n /** Returns a resolved union with interior unions flattened */\n function Resolve(union) {\n return exports.Type.Union([...TUnion(union)], { ...union });\n }\n UnionResolver.Resolve = Resolve;\n})(UnionResolver || (exports.UnionResolver = UnionResolver = {}));\n// --------------------------------------------------------------------------\n// TemplateLiteralPattern\n// --------------------------------------------------------------------------\nvar TemplateLiteralPattern;\n(function (TemplateLiteralPattern) {\n function Escape(value) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n function Visit(schema, acc) {\n if (TypeGuard.TTemplateLiteral(schema)) {\n return schema.pattern.slice(1, schema.pattern.length - 1);\n }\n else if (TypeGuard.TUnion(schema)) {\n return `(${schema.anyOf.map((schema) => Visit(schema, acc)).join('|')})`;\n }\n else if (TypeGuard.TNumber(schema)) {\n return `${acc}${exports.PatternNumber}`;\n }\n else if (TypeGuard.TInteger(schema)) {\n return `${acc}${exports.PatternNumber}`;\n }\n else if (TypeGuard.TBigInt(schema)) {\n return `${acc}${exports.PatternNumber}`;\n }\n else if (TypeGuard.TString(schema)) {\n return `${acc}${exports.PatternString}`;\n }\n else if (TypeGuard.TLiteral(schema)) {\n return `${acc}${Escape(schema.const.toString())}`;\n }\n else if (TypeGuard.TBoolean(schema)) {\n return `${acc}${exports.PatternBoolean}`;\n }\n else if (TypeGuard.TNever(schema)) {\n throw Error('TemplateLiteralPattern: TemplateLiteral cannot operate on types of TNever');\n }\n else {\n throw Error(`TemplateLiteralPattern: Unexpected Kind '${schema[exports.Kind]}'`);\n }\n }\n function Create(kinds) {\n return `^${kinds.map((schema) => Visit(schema, '')).join('')}\\$`;\n }\n TemplateLiteralPattern.Create = Create;\n})(TemplateLiteralPattern || (exports.TemplateLiteralPattern = TemplateLiteralPattern = {}));\n// --------------------------------------------------------------------------------------\n// TemplateLiteralResolver\n// --------------------------------------------------------------------------------------\nvar TemplateLiteralResolver;\n(function (TemplateLiteralResolver) {\n /** Resolves a template literal as a TUnion */\n function Resolve(template) {\n const expression = TemplateLiteralParser.ParseExact(template.pattern);\n if (!TemplateLiteralFinite.Check(expression))\n return exports.Type.String();\n const literals = [...TemplateLiteralGenerator.Generate(expression)].map((value) => exports.Type.Literal(value));\n return exports.Type.Union(literals);\n }\n TemplateLiteralResolver.Resolve = Resolve;\n})(TemplateLiteralResolver || (exports.TemplateLiteralResolver = TemplateLiteralResolver = {}));\n// --------------------------------------------------------------------------------------\n// TemplateLiteralParser\n// --------------------------------------------------------------------------------------\nclass TemplateLiteralParserError extends Error {\n constructor(message) {\n super(message);\n }\n}\nexports.TemplateLiteralParserError = TemplateLiteralParserError;\nvar TemplateLiteralParser;\n(function (TemplateLiteralParser) {\n function IsNonEscaped(pattern, index, char) {\n return pattern[index] === char && pattern.charCodeAt(index - 1) !== 92;\n }\n function IsOpenParen(pattern, index) {\n return IsNonEscaped(pattern, index, '(');\n }\n function IsCloseParen(pattern, index) {\n return IsNonEscaped(pattern, index, ')');\n }\n function IsSeparator(pattern, index) {\n return IsNonEscaped(pattern, index, '|');\n }\n function IsGroup(pattern) {\n if (!(IsOpenParen(pattern, 0) && IsCloseParen(pattern, pattern.length - 1)))\n return false;\n let count = 0;\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n count += 1;\n if (IsCloseParen(pattern, index))\n count -= 1;\n if (count === 0 && index !== pattern.length - 1)\n return false;\n }\n return true;\n }\n function InGroup(pattern) {\n return pattern.slice(1, pattern.length - 1);\n }\n function IsPrecedenceOr(pattern) {\n let count = 0;\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n count += 1;\n if (IsCloseParen(pattern, index))\n count -= 1;\n if (IsSeparator(pattern, index) && count === 0)\n return true;\n }\n return false;\n }\n function IsPrecedenceAnd(pattern) {\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n return true;\n }\n return false;\n }\n function Or(pattern) {\n let [count, start] = [0, 0];\n const expressions = [];\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n count += 1;\n if (IsCloseParen(pattern, index))\n count -= 1;\n if (IsSeparator(pattern, index) && count === 0) {\n const range = pattern.slice(start, index);\n if (range.length > 0)\n expressions.push(Parse(range));\n start = index + 1;\n }\n }\n const range = pattern.slice(start);\n if (range.length > 0)\n expressions.push(Parse(range));\n if (expressions.length === 0)\n return { type: 'const', const: '' };\n if (expressions.length === 1)\n return expressions[0];\n return { type: 'or', expr: expressions };\n }\n function And(pattern) {\n function Group(value, index) {\n if (!IsOpenParen(value, index))\n throw new TemplateLiteralParserError(`TemplateLiteralParser: Index must point to open parens`);\n let count = 0;\n for (let scan = index; scan < value.length; scan++) {\n if (IsOpenParen(value, scan))\n count += 1;\n if (IsCloseParen(value, scan))\n count -= 1;\n if (count === 0)\n return [index, scan];\n }\n throw new TemplateLiteralParserError(`TemplateLiteralParser: Unclosed group parens in expression`);\n }\n function Range(pattern, index) {\n for (let scan = index; scan < pattern.length; scan++) {\n if (IsOpenParen(pattern, scan))\n return [index, scan];\n }\n return [index, pattern.length];\n }\n const expressions = [];\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index)) {\n const [start, end] = Group(pattern, index);\n const range = pattern.slice(start, end + 1);\n expressions.push(Parse(range));\n index = end;\n }\n else {\n const [start, end] = Range(pattern, index);\n const range = pattern.slice(start, end);\n if (range.length > 0)\n expressions.push(Parse(range));\n index = end - 1;\n }\n }\n if (expressions.length === 0)\n return { type: 'const', const: '' };\n if (expressions.length === 1)\n return expressions[0];\n return { type: 'and', expr: expressions };\n }\n /** Parses a pattern and returns an expression tree */\n function Parse(pattern) {\n if (IsGroup(pattern))\n return Parse(InGroup(pattern));\n if (IsPrecedenceOr(pattern))\n return Or(pattern);\n if (IsPrecedenceAnd(pattern))\n return And(pattern);\n return { type: 'const', const: pattern };\n }\n TemplateLiteralParser.Parse = Parse;\n /** Parses a pattern and strips forward and trailing ^ and $ */\n function ParseExact(pattern) {\n return Parse(pattern.slice(1, pattern.length - 1));\n }\n TemplateLiteralParser.ParseExact = ParseExact;\n})(TemplateLiteralParser || (exports.TemplateLiteralParser = TemplateLiteralParser = {}));\n// --------------------------------------------------------------------------------------\n// TemplateLiteralFinite\n// --------------------------------------------------------------------------------------\nvar TemplateLiteralFinite;\n(function (TemplateLiteralFinite) {\n function IsNumber(expression) {\n // prettier-ignore\n return (expression.type === 'or' &&\n expression.expr.length === 2 &&\n expression.expr[0].type === 'const' &&\n expression.expr[0].const === '0' &&\n expression.expr[1].type === 'const' &&\n expression.expr[1].const === '[1-9][0-9]*');\n }\n function IsBoolean(expression) {\n // prettier-ignore\n return (expression.type === 'or' &&\n expression.expr.length === 2 &&\n expression.expr[0].type === 'const' &&\n expression.expr[0].const === 'true' &&\n expression.expr[1].type === 'const' &&\n expression.expr[1].const === 'false');\n }\n function IsString(expression) {\n return expression.type === 'const' && expression.const === '.*';\n }\n function Check(expression) {\n if (IsBoolean(expression))\n return true;\n if (IsNumber(expression) || IsString(expression))\n return false;\n if (expression.type === 'and')\n return expression.expr.every((expr) => Check(expr));\n if (expression.type === 'or')\n return expression.expr.every((expr) => Check(expr));\n if (expression.type === 'const')\n return true;\n throw Error(`TemplateLiteralFinite: Unknown expression type`);\n }\n TemplateLiteralFinite.Check = Check;\n})(TemplateLiteralFinite || (exports.TemplateLiteralFinite = TemplateLiteralFinite = {}));\n// --------------------------------------------------------------------------------------\n// TemplateLiteralGenerator\n// --------------------------------------------------------------------------------------\nvar TemplateLiteralGenerator;\n(function (TemplateLiteralGenerator) {\n function* Reduce(buffer) {\n if (buffer.length === 1)\n return yield* buffer[0];\n for (const left of buffer[0]) {\n for (const right of Reduce(buffer.slice(1))) {\n yield `${left}${right}`;\n }\n }\n }\n function* And(expression) {\n return yield* Reduce(expression.expr.map((expr) => [...Generate(expr)]));\n }\n function* Or(expression) {\n for (const expr of expression.expr)\n yield* Generate(expr);\n }\n function* Const(expression) {\n return yield expression.const;\n }\n function* Generate(expression) {\n if (expression.type === 'and')\n return yield* And(expression);\n if (expression.type === 'or')\n return yield* Or(expression);\n if (expression.type === 'const')\n return yield* Const(expression);\n throw Error('TemplateLiteralGenerator: Unknown expression');\n }\n TemplateLiteralGenerator.Generate = Generate;\n})(TemplateLiteralGenerator || (exports.TemplateLiteralGenerator = TemplateLiteralGenerator = {}));\n// ---------------------------------------------------------------------\n// TemplateLiteralDslParser\n// ---------------------------------------------------------------------\nvar TemplateLiteralDslParser;\n(function (TemplateLiteralDslParser) {\n function* ParseUnion(template) {\n const trim = template.trim().replace(/\"|'/g, '');\n if (trim === 'boolean')\n return yield exports.Type.Boolean();\n if (trim === 'number')\n return yield exports.Type.Number();\n if (trim === 'bigint')\n return yield exports.Type.BigInt();\n if (trim === 'string')\n return yield exports.Type.String();\n const literals = trim.split('|').map((literal) => exports.Type.Literal(literal.trim()));\n return yield literals.length === 0 ? exports.Type.Never() : literals.length === 1 ? literals[0] : exports.Type.Union(literals);\n }\n function* ParseTerminal(template) {\n if (template[1] !== '{') {\n const L = exports.Type.Literal('$');\n const R = ParseLiteral(template.slice(1));\n return yield* [L, ...R];\n }\n for (let i = 2; i < template.length; i++) {\n if (template[i] === '}') {\n const L = ParseUnion(template.slice(2, i));\n const R = ParseLiteral(template.slice(i + 1));\n return yield* [...L, ...R];\n }\n }\n yield exports.Type.Literal(template);\n }\n function* ParseLiteral(template) {\n for (let i = 0; i < template.length; i++) {\n if (template[i] === '$') {\n const L = exports.Type.Literal(template.slice(0, i));\n const R = ParseTerminal(template.slice(i));\n return yield* [L, ...R];\n }\n }\n yield exports.Type.Literal(template);\n }\n function Parse(template_dsl) {\n return [...ParseLiteral(template_dsl)];\n }\n TemplateLiteralDslParser.Parse = Parse;\n})(TemplateLiteralDslParser || (exports.TemplateLiteralDslParser = TemplateLiteralDslParser = {}));\n// --------------------------------------------------------------------------\n// TypeOrdinal: Used for auto $id generation\n// --------------------------------------------------------------------------\nlet TypeOrdinal = 0;\n// --------------------------------------------------------------------------\n// TypeBuilder\n// --------------------------------------------------------------------------\nclass TypeBuilder {\n /** `[Utility]` Creates a schema without `static` and `params` types */\n Create(schema) {\n return schema;\n }\n /** `[Utility]` Discards a property key from the given schema */\n Discard(schema, key) {\n const { [key]: _, ...rest } = schema;\n return rest;\n }\n /** `[Standard]` Omits compositing symbols from this schema */\n Strict(schema) {\n return JSON.parse(JSON.stringify(schema));\n }\n}\nexports.TypeBuilder = TypeBuilder;\n// --------------------------------------------------------------------------\n// StandardTypeBuilder\n// --------------------------------------------------------------------------\nclass StandardTypeBuilder extends TypeBuilder {\n // ------------------------------------------------------------------------\n // Modifiers\n // ------------------------------------------------------------------------\n /** `[Standard]` Creates a Readonly and Optional property */\n ReadonlyOptional(schema) {\n return this.Readonly(this.Optional(schema));\n }\n /** `[Standard]` Creates a Readonly property */\n Readonly(schema) {\n return { ...TypeClone.Clone(schema), [exports.Readonly]: 'Readonly' };\n }\n /** `[Standard]` Creates an Optional property */\n Optional(schema) {\n return { ...TypeClone.Clone(schema), [exports.Optional]: 'Optional' };\n }\n // ------------------------------------------------------------------------\n // Types\n // ------------------------------------------------------------------------\n /** `[Standard]` Creates an Any type */\n Any(options = {}) {\n return this.Create({ ...options, [exports.Kind]: 'Any' });\n }\n /** `[Standard]` Creates an Array type */\n Array(schema, options = {}) {\n return this.Create({ ...options, [exports.Kind]: 'Array', type: 'array', items: TypeClone.Clone(schema) });\n }\n /** `[Standard]` Creates a Boolean type */\n Boolean(options = {}) {\n return this.Create({ ...options, [exports.Kind]: 'Boolean', type: 'boolean' });\n }\n /** `[Standard]` Intrinsic function to Capitalize LiteralString types */\n Capitalize(schema, options = {}) {\n return { ...Intrinsic.Map(TypeClone.Clone(schema), 'Capitalize'), ...options };\n }\n /** `[Standard]` Creates a Composite object type */\n Composite(objects, options) {\n const intersect = exports.Type.Intersect(objects, {});\n const keys = KeyResolver.ResolveKeys(intersect, { includePatterns: false });\n const properties = keys.reduce((acc, key) => ({ ...acc, [key]: exports.Type.Index(intersect, [key]) }), {});\n return exports.Type.Object(properties, options);\n }\n /** `[Standard]` Creates a Enum type */\n Enum(item, options = {}) {\n // prettier-ignore\n const values = Object.getOwnPropertyNames(item).filter((key) => isNaN(key)).map((key) => item[key]);\n const anyOf = values.map((value) => (ValueGuard.IsString(value) ? { [exports.Kind]: 'Literal', type: 'string', const: value } : { [exports.Kind]: 'Literal', type: 'number', const: value }));\n return this.Create({ ...options, [exports.Kind]: 'Union', anyOf });\n }\n /** `[Standard]` Creates a Conditional type */\n Extends(left, right, trueType, falseType, options = {}) {\n switch (TypeExtends.Extends(left, right)) {\n case TypeExtendsResult.Union:\n return this.Union([TypeClone.Clone(trueType, options), TypeClone.Clone(falseType, options)]);\n case TypeExtendsResult.True:\n return TypeClone.Clone(trueType, options);\n case TypeExtendsResult.False:\n return TypeClone.Clone(falseType, options);\n }\n }\n /** `[Standard]` Constructs a type by excluding from unionType all union members that are assignable to excludedMembers */\n Exclude(unionType, excludedMembers, options = {}) {\n if (TypeGuard.TTemplateLiteral(unionType))\n return this.Exclude(TemplateLiteralResolver.Resolve(unionType), excludedMembers, options);\n if (TypeGuard.TTemplateLiteral(excludedMembers))\n return this.Exclude(unionType, TemplateLiteralResolver.Resolve(excludedMembers), options);\n if (TypeGuard.TUnion(unionType)) {\n const narrowed = unionType.anyOf.filter((inner) => TypeExtends.Extends(inner, excludedMembers) === TypeExtendsResult.False);\n return (narrowed.length === 1 ? TypeClone.Clone(narrowed[0], options) : this.Union(narrowed, options));\n }\n else {\n return (TypeExtends.Extends(unionType, excludedMembers) !== TypeExtendsResult.False ? this.Never(options) : TypeClone.Clone(unionType, options));\n }\n }\n /** `[Standard]` Constructs a type by extracting from type all union members that are assignable to union */\n Extract(type, union, options = {}) {\n if (TypeGuard.TTemplateLiteral(type))\n return this.Extract(TemplateLiteralResolver.Resolve(type), union, options);\n if (TypeGuard.TTemplateLiteral(union))\n return this.Extract(type, TemplateLiteralResolver.Resolve(union), options);\n if (TypeGuard.TUnion(type)) {\n const narrowed = type.anyOf.filter((inner) => TypeExtends.Extends(inner, union) !== TypeExtendsResult.False);\n return (narrowed.length === 1 ? TypeClone.Clone(narrowed[0], options) : this.Union(narrowed, options));\n }\n else {\n return (TypeExtends.Extends(type, union) !== TypeExtendsResult.False ? TypeClone.Clone(type, options) : this.Never(options));\n }\n }\n /** `[Standard]` Returns an Indexed property type for the given keys */\n Index(schema, unresolved, options = {}) {\n if (TypeGuard.TArray(schema) && TypeGuard.TNumber(unresolved)) {\n return TypeClone.Clone(schema.items, options);\n }\n else if (TypeGuard.TTuple(schema) && TypeGuard.TNumber(unresolved)) {\n const items = ValueGuard.IsUndefined(schema.items) ? [] : schema.items;\n const cloned = items.map((schema) => TypeClone.Clone(schema));\n return this.Union(cloned, options);\n }\n else {\n const keys = KeyArrayResolver.Resolve(unresolved);\n const clone = TypeClone.Clone(schema);\n return IndexedAccessor.Resolve(clone, keys, options);\n }\n }\n /** `[Standard]` Creates an Integer type */\n Integer(options = {}) {\n return this.Create({ ...options, [exports.Kind]: 'Integer', type: 'integer' });\n }\n /** `[Standard]` Creates an Intersect type */\n Intersect(allOf, options = {}) {\n if (allOf.length === 0)\n return exports.Type.Never();\n if (allOf.length === 1)\n return TypeClone.Clone(allOf[0], options);\n const objects = allOf.every((schema) => TypeGuard.TObject(schema));\n const cloned = allOf.map((schema) => TypeClone.Clone(schema));\n const clonedUnevaluatedProperties = TypeGuard.TSchema(options.unevaluatedProperties) ? { unevaluatedProperties: TypeClone.Clone(options.unevaluatedProperties) } : {};\n if (options.unevaluatedProperties === false || TypeGuard.TSchema(options.unevaluatedProperties) || objects) {\n return this.Create({ ...options, ...clonedUnevaluatedProperties, [exports.Kind]: 'Intersect', type: 'object', allOf: cloned });\n }\n else {\n return this.Create({ ...options, ...clonedUnevaluatedProperties, [exports.Kind]: 'Intersect', allOf: cloned });\n }\n }\n /** `[Standard]` Creates a KeyOf type */\n KeyOf(schema, options = {}) {\n if (TypeGuard.TRecord(schema)) {\n const pattern = Object.getOwnPropertyNames(schema.patternProperties)[0];\n if (pattern === exports.PatternNumberExact)\n return this.Number(options);\n if (pattern === exports.PatternStringExact)\n return this.String(options);\n throw Error('StandardTypeBuilder: Unable to resolve key type from Record key pattern');\n }\n else if (TypeGuard.TTuple(schema)) {\n const items = ValueGuard.IsUndefined(schema.items) ? [] : schema.items;\n const literals = items.map((_, index) => exports.Type.Literal(index));\n return this.Union(literals, options);\n }\n else if (TypeGuard.TArray(schema)) {\n return this.Number(options);\n }\n else {\n const keys = KeyResolver.ResolveKeys(schema, { includePatterns: false });\n if (keys.length === 0)\n return this.Never(options);\n const literals = keys.map((key) => this.Literal(key));\n return this.Union(literals, options);\n }\n }\n /** `[Standard]` Creates a Literal type */\n Literal(value, options = {}) {\n return this.Create({ ...options, [exports.Kind]: 'Literal', const: value, type: typeof value });\n }\n /** `[Standard]` Intrinsic function to Lowercase LiteralString types */\n Lowercase(schema, options = {}) {\n return { ...Intrinsic.Map(TypeClone.Clone(schema), 'Lowercase'), ...options };\n }\n /** `[Standard]` Creates a Never type */\n Never(options = {}) {\n return this.Create({ ...options, [exports.Kind]: 'Never', not: {} });\n }\n /** `[Standard]` Creates a Not type */\n Not(schema, options) {\n return this.Create({ ...options, [exports.Kind]: 'Not', not: TypeClone.Clone(schema) });\n }\n /** `[Standard]` Creates a Null type */\n Null(options = {}) {\n return this.Create({ ...options, [exports.Kind]: 'Null', type: 'null' });\n }\n /** `[Standard]` Creates a Number type */\n Number(options = {}) {\n return this.Create({ ...options, [exports.Kind]: 'Number', type: 'number' });\n }\n /** `[Standard]` Creates an Object type */\n Object(properties, options = {}) {\n const propertyKeys = Object.getOwnPropertyNames(properties);\n const optionalKeys = propertyKeys.filter((key) => TypeGuard.TOptional(properties[key]));\n const requiredKeys = propertyKeys.filter((name) => !optionalKeys.includes(name));\n const clonedAdditionalProperties = TypeGuard.TSchema(options.additionalProperties) ? { additionalProperties: TypeClone.Clone(options.additionalProperties) } : {};\n const clonedProperties = propertyKeys.reduce((acc, key) => ({ ...acc, [key]: TypeClone.Clone(properties[key]) }), {});\n if (requiredKeys.length > 0) {\n return this.Create({ ...options, ...clonedAdditionalProperties, [exports.Kind]: 'Object', type: 'object', properties: clonedProperties, required: requiredKeys });\n }\n else {\n return this.Create({ ...options, ...clonedAdditionalProperties, [exports.Kind]: 'Object', type: 'object', properties: clonedProperties });\n }\n }\n /** `[Standard]` Constructs a type whose keys are omitted from the given type */\n Omit(schema, unresolved, options = {}) {\n const keys = KeyArrayResolver.Resolve(unresolved);\n // prettier-ignore\n return ObjectMap.Map(TypeClone.Clone(schema), (object) => {\n if (ValueGuard.IsArray(object.required)) {\n object.required = object.required.filter((key) => !keys.includes(key));\n if (object.required.length === 0)\n delete object.required;\n }\n for (const key of Object.getOwnPropertyNames(object.properties)) {\n if (keys.includes(key))\n delete object.properties[key];\n }\n return this.Create(object);\n }, options);\n }\n /** `[Standard]` Constructs a type where all properties are optional */\n Partial(schema, options = {}) {\n // prettier-ignore\n return ObjectMap.Map(schema, (object) => {\n const properties = Object.getOwnPropertyNames(object.properties).reduce((acc, key) => {\n return { ...acc, [key]: this.Optional(object.properties[key]) };\n }, {});\n return this.Object(properties, this.Discard(object, 'required') /* object used as options to retain other constraints */);\n }, options);\n }\n /** `[Standard]` Constructs a type whose keys are picked from the given type */\n Pick(schema, unresolved, options = {}) {\n const keys = KeyArrayResolver.Resolve(unresolved);\n // prettier-ignore\n return ObjectMap.Map(TypeClone.Clone(schema), (object) => {\n if (ValueGuard.IsArray(object.required)) {\n object.required = object.required.filter((key) => keys.includes(key));\n if (object.required.length === 0)\n delete object.required;\n }\n for (const key of Object.getOwnPropertyNames(object.properties)) {\n if (!keys.includes(key))\n delete object.properties[key];\n }\n return this.Create(object);\n }, options);\n }\n /** `[Standard]` Creates a Record type */\n Record(key, schema, options = {}) {\n if (TypeGuard.TTemplateLiteral(key)) {\n const expression = TemplateLiteralParser.ParseExact(key.pattern);\n // prettier-ignore\n return TemplateLiteralFinite.Check(expression)\n ? (this.Object([...TemplateLiteralGenerator.Generate(expression)].reduce((acc, key) => ({ ...acc, [key]: TypeClone.Clone(schema) }), {}), options))\n : this.Create({ ...options, [exports.Kind]: 'Record', type: 'object', patternProperties: { [key.pattern]: TypeClone.Clone(schema) } });\n }\n else if (TypeGuard.TUnion(key)) {\n const union = UnionResolver.Resolve(key);\n if (TypeGuard.TUnionLiteral(union)) {\n const properties = union.anyOf.reduce((acc, literal) => ({ ...acc, [literal.const]: TypeClone.Clone(schema) }), {});\n return this.Object(properties, { ...options, [exports.Hint]: 'Record' });\n }\n else\n throw Error('StandardTypeBuilder: Record key of type union contains non-literal types');\n }\n else if (TypeGuard.TLiteral(key)) {\n if (ValueGuard.IsString(key.const) || ValueGuard.IsNumber(key.const)) {\n return this.Object({ [key.const]: TypeClone.Clone(schema) }, options);\n }\n else\n throw Error('StandardTypeBuilder: Record key of type literal is not of type string or number');\n }\n else if (TypeGuard.TInteger(key) || TypeGuard.TNumber(key)) {\n return this.Create({ ...options, [exports.Kind]: 'Record', type: 'object', patternProperties: { [exports.PatternNumberExact]: TypeClone.Clone(schema) } });\n }\n else if (TypeGuard.TString(key)) {\n const pattern = ValueGuard.IsUndefined(key.pattern) ? exports.PatternStringExact : key.pattern;\n return this.Create({ ...options, [exports.Kind]: 'Record', type: 'object', patternProperties: { [pattern]: TypeClone.Clone(schema) } });\n }\n else {\n throw Error(`StandardTypeBuilder: Record key is an invalid type`);\n }\n }\n /** `[Standard]` Creates a Recursive type */\n Recursive(callback, options = {}) {\n if (ValueGuard.IsUndefined(options.$id))\n options.$id = `T${TypeOrdinal++}`;\n const thisType = callback({ [exports.Kind]: 'This', $ref: `${options.$id}` });\n thisType.$id = options.$id;\n return this.Create({ ...options, [exports.Hint]: 'Recursive', ...thisType });\n }\n /** `[Standard]` Creates a Ref type. */\n Ref(unresolved, options = {}) {\n if (ValueGuard.IsString(unresolved))\n return this.Create({ ...options, [exports.Kind]: 'Ref', $ref: unresolved });\n if (ValueGuard.IsUndefined(unresolved.$id))\n throw Error('StandardTypeBuilder.Ref: Target type must specify an $id');\n return this.Create({ ...options, [exports.Kind]: 'Ref', $ref: unresolved.$id });\n }\n /** `[Standard]` Constructs a type where all properties are required */\n Required(schema, options = {}) {\n // prettier-ignore\n return ObjectMap.Map(schema, (object) => {\n const properties = Object.getOwnPropertyNames(object.properties).reduce((acc, key) => {\n return { ...acc, [key]: this.Discard(object.properties[key], exports.Optional) };\n }, {});\n return this.Object(properties, object /* object used as options to retain other constraints */);\n }, options);\n }\n /** `[Standard]` Extracts the rest array from a Tuple */\n Rest(schema) {\n if (TypeGuard.TTuple(schema)) {\n if (ValueGuard.IsUndefined(schema.items))\n return [];\n return schema.items.map((schema) => TypeClone.Clone(schema));\n }\n else {\n return [TypeClone.Clone(schema)];\n }\n }\n /** `[Standard]` Creates a String type */\n String(options = {}) {\n return this.Create({ ...options, [exports.Kind]: 'String', type: 'string' });\n }\n /** `[Standard]` Creates a TemplateLiteral type */\n TemplateLiteral(unresolved, options = {}) {\n // prettier-ignore\n const pattern = (ValueGuard.IsString(unresolved))\n ? TemplateLiteralPattern.Create(TemplateLiteralDslParser.Parse(unresolved))\n : TemplateLiteralPattern.Create(unresolved);\n return this.Create({ ...options, [exports.Kind]: 'TemplateLiteral', type: 'string', pattern });\n }\n /** `[Standard]` Creates a Tuple type */\n Tuple(items, options = {}) {\n const [additionalItems, minItems, maxItems] = [false, items.length, items.length];\n const clonedItems = items.map((item) => TypeClone.Clone(item));\n // prettier-ignore\n const schema = (items.length > 0 ?\n { ...options, [exports.Kind]: 'Tuple', type: 'array', items: clonedItems, additionalItems, minItems, maxItems } :\n { ...options, [exports.Kind]: 'Tuple', type: 'array', minItems, maxItems });\n return this.Create(schema);\n }\n /** `[Standard]` Intrinsic function to Uncapitalize LiteralString types */\n Uncapitalize(schema, options = {}) {\n return { ...Intrinsic.Map(TypeClone.Clone(schema), 'Uncapitalize'), ...options };\n }\n /** `[Standard]` Creates a Union type */\n Union(union, options = {}) {\n if (TypeGuard.TTemplateLiteral(union)) {\n return TemplateLiteralResolver.Resolve(union);\n }\n else {\n const anyOf = union;\n if (anyOf.length === 0)\n return this.Never(options);\n if (anyOf.length === 1)\n return this.Create(TypeClone.Clone(anyOf[0], options));\n const clonedAnyOf = anyOf.map((schema) => TypeClone.Clone(schema));\n return this.Create({ ...options, [exports.Kind]: 'Union', anyOf: clonedAnyOf });\n }\n }\n /** `[Standard]` Creates an Unknown type */\n Unknown(options = {}) {\n return this.Create({ ...options, [exports.Kind]: 'Unknown' });\n }\n /** `[Standard]` Creates a Unsafe type that will infers as the generic argument T */\n Unsafe(options = {}) {\n return this.Create({ ...options, [exports.Kind]: options[exports.Kind] || 'Unsafe' });\n }\n /** `[Standard]` Intrinsic function to Uppercase LiteralString types */\n Uppercase(schema, options = {}) {\n return { ...Intrinsic.Map(TypeClone.Clone(schema), 'Uppercase'), ...options };\n }\n}\nexports.StandardTypeBuilder = StandardTypeBuilder;\n// --------------------------------------------------------------------------\n// ExtendedTypeBuilder\n// --------------------------------------------------------------------------\nclass ExtendedTypeBuilder extends StandardTypeBuilder {\n /** `[Extended]` Creates a AsyncIterator type */\n AsyncIterator(items, options = {}) {\n return this.Create({ ...options, [exports.Kind]: 'AsyncIterator', type: 'AsyncIterator', items: TypeClone.Clone(items) });\n }\n /** `[Extended]` Constructs a type by recursively unwrapping Promise types */\n Awaited(schema, options = {}) {\n const AwaitedRest = (rest) => {\n if (rest.length === 0)\n return rest;\n const [L, ...R] = rest;\n return [this.Awaited(L), ...AwaitedRest(R)];\n };\n // prettier-ignore\n return (TypeGuard.TIntersect(schema) ? exports.Type.Intersect(AwaitedRest(schema.allOf)) :\n TypeGuard.TUnion(schema) ? exports.Type.Union(AwaitedRest(schema.anyOf)) :\n TypeGuard.TPromise(schema) ? this.Awaited(schema.item) :\n TypeClone.Clone(schema, options));\n }\n /** `[Extended]` Creates a BigInt type */\n BigInt(options = {}) {\n return this.Create({ ...options, [exports.Kind]: 'BigInt', type: 'bigint' });\n }\n /** `[Extended]` Extracts the ConstructorParameters from the given Constructor type */\n ConstructorParameters(schema, options = {}) {\n return this.Tuple([...schema.parameters], { ...options });\n }\n /** `[Extended]` Creates a Constructor type */\n Constructor(parameters, returns, options) {\n const clonedReturns = TypeClone.Clone(returns);\n const clonedParameters = parameters.map((parameter) => TypeClone.Clone(parameter));\n return this.Create({ ...options, [exports.Kind]: 'Constructor', type: 'constructor', parameters: clonedParameters, returns: clonedReturns });\n }\n /** `[Extended]` Creates a Date type */\n Date(options = {}) {\n return this.Create({ ...options, [exports.Kind]: 'Date', type: 'Date' });\n }\n /** `[Extended]` Creates a Function type */\n Function(parameters, returns, options) {\n const clonedReturns = TypeClone.Clone(returns, {});\n const clonedParameters = parameters.map((parameter) => TypeClone.Clone(parameter));\n return this.Create({ ...options, [exports.Kind]: 'Function', type: 'function', parameters: clonedParameters, returns: clonedReturns });\n }\n /** `[Extended]` Extracts the InstanceType from the given Constructor type */\n InstanceType(schema, options = {}) {\n return TypeClone.Clone(schema.returns, options);\n }\n /** `[Extended]` Creates an Iterator type */\n Iterator(items, options = {}) {\n return this.Create({ ...options, [exports.Kind]: 'Iterator', type: 'Iterator', items: TypeClone.Clone(items) });\n }\n /** `[Extended]` Extracts the Parameters from the given Function type */\n Parameters(schema, options = {}) {\n return this.Tuple(schema.parameters, { ...options });\n }\n /** `[Extended]` Creates a Promise type */\n Promise(item, options = {}) {\n return this.Create({ ...options, [exports.Kind]: 'Promise', type: 'Promise', item: TypeClone.Clone(item) });\n }\n /** `[Extended]` Creates a String type */\n RegExp(unresolved, options = {}) {\n const pattern = ValueGuard.IsString(unresolved) ? unresolved : unresolved.source;\n return this.Create({ ...options, [exports.Kind]: 'String', type: 'string', pattern });\n }\n /**\n * @deprecated Use `Type.RegExp`\n */\n RegEx(regex, options = {}) {\n return this.RegExp(regex, options);\n }\n /** `[Extended]` Extracts the ReturnType from the given Function type */\n ReturnType(schema, options = {}) {\n return TypeClone.Clone(schema.returns, options);\n }\n /** `[Extended]` Creates a Symbol type */\n Symbol(options) {\n return this.Create({ ...options, [exports.Kind]: 'Symbol', type: 'symbol' });\n }\n /** `[Extended]` Creates a Undefined type */\n Undefined(options = {}) {\n return this.Create({ ...options, [exports.Kind]: 'Undefined', type: 'undefined' });\n }\n /** `[Extended]` Creates a Uint8Array type */\n Uint8Array(options = {}) {\n return this.Create({ ...options, [exports.Kind]: 'Uint8Array', type: 'Uint8Array' });\n }\n /** `[Extended]` Creates a Void type */\n Void(options = {}) {\n return this.Create({ ...options, [exports.Kind]: 'Void', type: 'void' });\n }\n}\nexports.ExtendedTypeBuilder = ExtendedTypeBuilder;\n/** JSON Schema Type Builder with Static Resolution for TypeScript */\nexports.StandardType = new StandardTypeBuilder();\n/** JSON Schema Type Builder with Static Resolution for TypeScript */\nexports.Type = new ExtendedTypeBuilder();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsZ0JBQWdCLGlCQUFpQixpQkFBaUI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsdUJBQXVCLHdCQUF3Qix3QkFBd0I7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsd0JBQXdCLHlCQUF5Qix5QkFBeUI7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUFDQTtBQUNBLDZCQUE2QixzREFBc0Q7QUFDbkY7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQiw2QkFBNkIsNERBQTREO0FBQ3pGO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0IsNkJBQTZCLDhEQUE4RDtBQUMzRjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLDZCQUE2QixrREFBa0Q7QUFDL0U7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBLFlBQVkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZXhwY2x1c3Rlci9wZXJtaXNzaW9uLWdyb3Vwcy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHNpbmNsYWlyK3R5cGVib3hAMC4zMC40L25vZGVfbW9kdWxlcy9Ac2luY2xhaXIvdHlwZWJveC90eXBlYm94LmpzPzhkZTIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbkBzaW5jbGFpci90eXBlYm94XG5cblRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG5Db3B5cmlnaHQgKGMpIDIwMTctMjAyMyBIYXlkbiBQYXRlcnNvbiAoc2luY2xhaXIpIDxoYXlkbi5kZXZlbG9wZXJAZ21haWwuY29tPlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG5hbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG5USEUgU09GVFdBUkUuXG5cbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlR5cGUgPSBleHBvcnRzLlN0YW5kYXJkVHlwZSA9IGV4cG9ydHMuRXh0ZW5kZWRUeXBlQnVpbGRlciA9IGV4cG9ydHMuU3RhbmRhcmRUeXBlQnVpbGRlciA9IGV4cG9ydHMuVHlwZUJ1aWxkZXIgPSBleHBvcnRzLlRlbXBsYXRlTGl0ZXJhbERzbFBhcnNlciA9IGV4cG9ydHMuVGVtcGxhdGVMaXRlcmFsR2VuZXJhdG9yID0gZXhwb3J0cy5UZW1wbGF0ZUxpdGVyYWxGaW5pdGUgPSBleHBvcnRzLlRlbXBsYXRlTGl0ZXJhbFBhcnNlciA9IGV4cG9ydHMuVGVtcGxhdGVMaXRlcmFsUGFyc2VyRXJyb3IgPSBleHBvcnRzLlRlbXBsYXRlTGl0ZXJhbFJlc29sdmVyID0gZXhwb3J0cy5UZW1wbGF0ZUxpdGVyYWxQYXR0ZXJuID0gZXhwb3J0cy5VbmlvblJlc29sdmVyID0gZXhwb3J0cy5LZXlBcnJheVJlc29sdmVyID0gZXhwb3J0cy5LZXlSZXNvbHZlciA9IGV4cG9ydHMuT2JqZWN0TWFwID0gZXhwb3J0cy5JbnRyaW5zaWMgPSBleHBvcnRzLkluZGV4ZWRBY2Nlc3NvciA9IGV4cG9ydHMuVHlwZUNsb25lID0gZXhwb3J0cy5UeXBlRXh0ZW5kcyA9IGV4cG9ydHMuVHlwZUV4dGVuZHNSZXN1bHQgPSBleHBvcnRzLkV4dGVuZHNVbmRlZmluZWQgPSBleHBvcnRzLlR5cGVHdWFyZCA9IGV4cG9ydHMuVHlwZUd1YXJkVW5rbm93blR5cGVFcnJvciA9IGV4cG9ydHMuVmFsdWVHdWFyZCA9IGV4cG9ydHMuRm9ybWF0UmVnaXN0cnkgPSBleHBvcnRzLlR5cGVSZWdpc3RyeSA9IGV4cG9ydHMuUGF0dGVyblN0cmluZ0V4YWN0ID0gZXhwb3J0cy5QYXR0ZXJuTnVtYmVyRXhhY3QgPSBleHBvcnRzLlBhdHRlcm5Cb29sZWFuRXhhY3QgPSBleHBvcnRzLlBhdHRlcm5TdHJpbmcgPSBleHBvcnRzLlBhdHRlcm5OdW1iZXIgPSBleHBvcnRzLlBhdHRlcm5Cb29sZWFuID0gZXhwb3J0cy5LaW5kID0gZXhwb3J0cy5IaW50ID0gZXhwb3J0cy5PcHRpb25hbCA9IGV4cG9ydHMuUmVhZG9ubHkgPSB2b2lkIDA7XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3ltYm9sc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydHMuUmVhZG9ubHkgPSBTeW1ib2wuZm9yKCdUeXBlQm94LlJlYWRvbmx5Jyk7XG5leHBvcnRzLk9wdGlvbmFsID0gU3ltYm9sLmZvcignVHlwZUJveC5PcHRpb25hbCcpO1xuZXhwb3J0cy5IaW50ID0gU3ltYm9sLmZvcignVHlwZUJveC5IaW50Jyk7XG5leHBvcnRzLktpbmQgPSBTeW1ib2wuZm9yKCdUeXBlQm94LktpbmQnKTtcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQYXR0ZXJuc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydHMuUGF0dGVybkJvb2xlYW4gPSAnKHRydWV8ZmFsc2UpJztcbmV4cG9ydHMuUGF0dGVybk51bWJlciA9ICcoMHxbMS05XVswLTldKiknO1xuZXhwb3J0cy5QYXR0ZXJuU3RyaW5nID0gJyguKiknO1xuZXhwb3J0cy5QYXR0ZXJuQm9vbGVhbkV4YWN0ID0gYF4ke2V4cG9ydHMuUGF0dGVybkJvb2xlYW59JGA7XG5leHBvcnRzLlBhdHRlcm5OdW1iZXJFeGFjdCA9IGBeJHtleHBvcnRzLlBhdHRlcm5OdW1iZXJ9JGA7XG5leHBvcnRzLlBhdHRlcm5TdHJpbmdFeGFjdCA9IGBeJHtleHBvcnRzLlBhdHRlcm5TdHJpbmd9JGA7XG4vKiogQSByZWdpc3RyeSBmb3IgdXNlciBkZWZpbmVkIHR5cGVzICovXG52YXIgVHlwZVJlZ2lzdHJ5O1xuKGZ1bmN0aW9uIChUeXBlUmVnaXN0cnkpIHtcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwKCk7XG4gICAgLyoqIFJldHVybnMgdGhlIGVudHJpZXMgaW4gdGhpcyByZWdpc3RyeSAqL1xuICAgIGZ1bmN0aW9uIEVudHJpZXMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWFwKG1hcCk7XG4gICAgfVxuICAgIFR5cGVSZWdpc3RyeS5FbnRyaWVzID0gRW50cmllcztcbiAgICAvKiogQ2xlYXJzIGFsbCB1c2VyIGRlZmluZWQgdHlwZXMgKi9cbiAgICBmdW5jdGlvbiBDbGVhcigpIHtcbiAgICAgICAgcmV0dXJuIG1hcC5jbGVhcigpO1xuICAgIH1cbiAgICBUeXBlUmVnaXN0cnkuQ2xlYXIgPSBDbGVhcjtcbiAgICAvKiogRGVsZXRlcyBhIHJlZ2lzdGVyZWQgdHlwZSAqL1xuICAgIGZ1bmN0aW9uIERlbGV0ZShraW5kKSB7XG4gICAgICAgIHJldHVybiBtYXAuZGVsZXRlKGtpbmQpO1xuICAgIH1cbiAgICBUeXBlUmVnaXN0cnkuRGVsZXRlID0gRGVsZXRlO1xuICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhpcyByZWdpc3RyeSBjb250YWlucyB0aGlzIGtpbmQgKi9cbiAgICBmdW5jdGlvbiBIYXMoa2luZCkge1xuICAgICAgICByZXR1cm4gbWFwLmhhcyhraW5kKTtcbiAgICB9XG4gICAgVHlwZVJlZ2lzdHJ5LkhhcyA9IEhhcztcbiAgICAvKiogU2V0cyBhIHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIGEgdXNlciBkZWZpbmVkIHR5cGUgKi9cbiAgICBmdW5jdGlvbiBTZXQoa2luZCwgZnVuYykge1xuICAgICAgICBtYXAuc2V0KGtpbmQsIGZ1bmMpO1xuICAgIH1cbiAgICBUeXBlUmVnaXN0cnkuU2V0ID0gU2V0O1xuICAgIC8qKiBHZXRzIGEgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIGEgdXNlciBkZWZpbmVkIHR5cGUgKi9cbiAgICBmdW5jdGlvbiBHZXQoa2luZCkge1xuICAgICAgICByZXR1cm4gbWFwLmdldChraW5kKTtcbiAgICB9XG4gICAgVHlwZVJlZ2lzdHJ5LkdldCA9IEdldDtcbn0pKFR5cGVSZWdpc3RyeSB8fCAoZXhwb3J0cy5UeXBlUmVnaXN0cnkgPSBUeXBlUmVnaXN0cnkgPSB7fSkpO1xuLyoqIEEgcmVnaXN0cnkgZm9yIHVzZXIgZGVmaW5lZCBzdHJpbmcgZm9ybWF0cyAqL1xudmFyIEZvcm1hdFJlZ2lzdHJ5O1xuKGZ1bmN0aW9uIChGb3JtYXRSZWdpc3RyeSkge1xuICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcbiAgICAvKiogUmV0dXJucyB0aGUgZW50cmllcyBpbiB0aGlzIHJlZ2lzdHJ5ICovXG4gICAgZnVuY3Rpb24gRW50cmllcygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXAobWFwKTtcbiAgICB9XG4gICAgRm9ybWF0UmVnaXN0cnkuRW50cmllcyA9IEVudHJpZXM7XG4gICAgLyoqIENsZWFycyBhbGwgdXNlciBkZWZpbmVkIHN0cmluZyBmb3JtYXRzICovXG4gICAgZnVuY3Rpb24gQ2xlYXIoKSB7XG4gICAgICAgIHJldHVybiBtYXAuY2xlYXIoKTtcbiAgICB9XG4gICAgRm9ybWF0UmVnaXN0cnkuQ2xlYXIgPSBDbGVhcjtcbiAgICAvKiogRGVsZXRlcyBhIHJlZ2lzdGVyZWQgZm9ybWF0ICovXG4gICAgZnVuY3Rpb24gRGVsZXRlKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gbWFwLmRlbGV0ZShmb3JtYXQpO1xuICAgIH1cbiAgICBGb3JtYXRSZWdpc3RyeS5EZWxldGUgPSBEZWxldGU7XG4gICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdXNlciBkZWZpbmVkIHN0cmluZyBmb3JtYXQgZXhpc3RzICovXG4gICAgZnVuY3Rpb24gSGFzKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gbWFwLmhhcyhmb3JtYXQpO1xuICAgIH1cbiAgICBGb3JtYXRSZWdpc3RyeS5IYXMgPSBIYXM7XG4gICAgLyoqIFNldHMgYSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBhIHVzZXIgZGVmaW5lZCBzdHJpbmcgZm9ybWF0ICovXG4gICAgZnVuY3Rpb24gU2V0KGZvcm1hdCwgZnVuYykge1xuICAgICAgICBtYXAuc2V0KGZvcm1hdCwgZnVuYyk7XG4gICAgfVxuICAgIEZvcm1hdFJlZ2lzdHJ5LlNldCA9IFNldDtcbiAgICAvKiogR2V0cyBhIHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIGEgdXNlciBkZWZpbmVkIHN0cmluZyBmb3JtYXQgKi9cbiAgICBmdW5jdGlvbiBHZXQoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiBtYXAuZ2V0KGZvcm1hdCk7XG4gICAgfVxuICAgIEZvcm1hdFJlZ2lzdHJ5LkdldCA9IEdldDtcbn0pKEZvcm1hdFJlZ2lzdHJ5IHx8IChleHBvcnRzLkZvcm1hdFJlZ2lzdHJ5ID0gRm9ybWF0UmVnaXN0cnkgPSB7fSkpO1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFZhbHVlR3VhcmRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgVmFsdWVHdWFyZDtcbihmdW5jdGlvbiAoVmFsdWVHdWFyZCkge1xuICAgIGZ1bmN0aW9uIElzT2JqZWN0KHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsO1xuICAgIH1cbiAgICBWYWx1ZUd1YXJkLklzT2JqZWN0ID0gSXNPYmplY3Q7XG4gICAgZnVuY3Rpb24gSXNBcnJheSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gICAgfVxuICAgIFZhbHVlR3VhcmQuSXNBcnJheSA9IElzQXJyYXk7XG4gICAgZnVuY3Rpb24gSXNCb29sZWFuKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJztcbiAgICB9XG4gICAgVmFsdWVHdWFyZC5Jc0Jvb2xlYW4gPSBJc0Jvb2xlYW47XG4gICAgZnVuY3Rpb24gSXNOdWxsKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcbiAgICB9XG4gICAgVmFsdWVHdWFyZC5Jc051bGwgPSBJc051bGw7XG4gICAgZnVuY3Rpb24gSXNVbmRlZmluZWQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIFZhbHVlR3VhcmQuSXNVbmRlZmluZWQgPSBJc1VuZGVmaW5lZDtcbiAgICBmdW5jdGlvbiBJc0JpZ0ludCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnYmlnaW50JztcbiAgICB9XG4gICAgVmFsdWVHdWFyZC5Jc0JpZ0ludCA9IElzQmlnSW50O1xuICAgIGZ1bmN0aW9uIElzTnVtYmVyKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInO1xuICAgIH1cbiAgICBWYWx1ZUd1YXJkLklzTnVtYmVyID0gSXNOdW1iZXI7XG4gICAgZnVuY3Rpb24gSXNTdHJpbmcodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG4gICAgfVxuICAgIFZhbHVlR3VhcmQuSXNTdHJpbmcgPSBJc1N0cmluZztcbn0pKFZhbHVlR3VhcmQgfHwgKGV4cG9ydHMuVmFsdWVHdWFyZCA9IFZhbHVlR3VhcmQgPSB7fSkpO1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFR5cGVHdWFyZFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmNsYXNzIFR5cGVHdWFyZFVua25vd25UeXBlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3Ioc2NoZW1hKSB7XG4gICAgICAgIHN1cGVyKCdUeXBlR3VhcmQ6IFVua25vd24gdHlwZScpO1xuICAgICAgICB0aGlzLnNjaGVtYSA9IHNjaGVtYTtcbiAgICB9XG59XG5leHBvcnRzLlR5cGVHdWFyZFVua25vd25UeXBlRXJyb3IgPSBUeXBlR3VhcmRVbmtub3duVHlwZUVycm9yO1xuLyoqIFByb3ZpZGVzIGZ1bmN0aW9ucyB0byB0ZXN0IGlmIEphdmFTY3JpcHQgdmFsdWVzIGFyZSBUeXBlQm94IHR5cGVzICovXG52YXIgVHlwZUd1YXJkO1xuKGZ1bmN0aW9uIChUeXBlR3VhcmQpIHtcbiAgICBmdW5jdGlvbiBJc1BhdHRlcm4odmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5ldyBSZWdFeHAodmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIElzQ29udHJvbENoYXJhY3RlckZyZWUodmFsdWUpIHtcbiAgICAgICAgaWYgKCFWYWx1ZUd1YXJkLklzU3RyaW5nKHZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY29kZSA9IHZhbHVlLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgICAgICBpZiAoKGNvZGUgPj0gNyAmJiBjb2RlIDw9IDEzKSB8fCBjb2RlID09PSAyNyB8fCBjb2RlID09PSAxMjcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIElzQWRkaXRpb25hbFByb3BlcnRpZXModmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIElzT3B0aW9uYWxCb29sZWFuKHZhbHVlKSB8fCBUU2NoZW1hKHZhbHVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gSXNPcHRpb25hbEJpZ0ludCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gVmFsdWVHdWFyZC5Jc1VuZGVmaW5lZCh2YWx1ZSkgfHwgVmFsdWVHdWFyZC5Jc0JpZ0ludCh2YWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIElzT3B0aW9uYWxOdW1iZXIodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFZhbHVlR3VhcmQuSXNVbmRlZmluZWQodmFsdWUpIHx8IFZhbHVlR3VhcmQuSXNOdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBJc09wdGlvbmFsQm9vbGVhbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gVmFsdWVHdWFyZC5Jc1VuZGVmaW5lZCh2YWx1ZSkgfHwgVmFsdWVHdWFyZC5Jc0Jvb2xlYW4odmFsdWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBJc09wdGlvbmFsU3RyaW5nKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBWYWx1ZUd1YXJkLklzVW5kZWZpbmVkKHZhbHVlKSB8fCBWYWx1ZUd1YXJkLklzU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gSXNPcHRpb25hbFBhdHRlcm4odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFZhbHVlR3VhcmQuSXNVbmRlZmluZWQodmFsdWUpIHx8IChWYWx1ZUd1YXJkLklzU3RyaW5nKHZhbHVlKSAmJiBJc0NvbnRyb2xDaGFyYWN0ZXJGcmVlKHZhbHVlKSAmJiBJc1BhdHRlcm4odmFsdWUpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gSXNPcHRpb25hbEZvcm1hdCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gVmFsdWVHdWFyZC5Jc1VuZGVmaW5lZCh2YWx1ZSkgfHwgKFZhbHVlR3VhcmQuSXNTdHJpbmcodmFsdWUpICYmIElzQ29udHJvbENoYXJhY3RlckZyZWUodmFsdWUpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gSXNPcHRpb25hbFNjaGVtYSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gVmFsdWVHdWFyZC5Jc1VuZGVmaW5lZCh2YWx1ZSkgfHwgVFNjaGVtYSh2YWx1ZSk7XG4gICAgfVxuICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHNjaGVtYSBpcyBUQW55ICovXG4gICAgZnVuY3Rpb24gVEFueShzY2hlbWEpIHtcbiAgICAgICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgICAgIHJldHVybiAoVEtpbmRPZihzY2hlbWEsICdBbnknKSAmJlxuICAgICAgICAgICAgSXNPcHRpb25hbFN0cmluZyhzY2hlbWEuJGlkKSk7XG4gICAgfVxuICAgIFR5cGVHdWFyZC5UQW55ID0gVEFueTtcbiAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzY2hlbWEgaXMgVEFycmF5ICovXG4gICAgZnVuY3Rpb24gVEFycmF5KHNjaGVtYSkge1xuICAgICAgICByZXR1cm4gKFRLaW5kT2Yoc2NoZW1hLCAnQXJyYXknKSAmJlxuICAgICAgICAgICAgc2NoZW1hLnR5cGUgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgIElzT3B0aW9uYWxTdHJpbmcoc2NoZW1hLiRpZCkgJiZcbiAgICAgICAgICAgIFRTY2hlbWEoc2NoZW1hLml0ZW1zKSAmJlxuICAgICAgICAgICAgSXNPcHRpb25hbE51bWJlcihzY2hlbWEubWluSXRlbXMpICYmXG4gICAgICAgICAgICBJc09wdGlvbmFsTnVtYmVyKHNjaGVtYS5tYXhJdGVtcykgJiZcbiAgICAgICAgICAgIElzT3B0aW9uYWxCb29sZWFuKHNjaGVtYS51bmlxdWVJdGVtcykgJiZcbiAgICAgICAgICAgIElzT3B0aW9uYWxTY2hlbWEoc2NoZW1hLmNvbnRhaW5zKSAmJlxuICAgICAgICAgICAgSXNPcHRpb25hbE51bWJlcihzY2hlbWEubWluQ29udGFpbnMpICYmXG4gICAgICAgICAgICBJc09wdGlvbmFsTnVtYmVyKHNjaGVtYS5tYXhDb250YWlucykpO1xuICAgIH1cbiAgICBUeXBlR3VhcmQuVEFycmF5ID0gVEFycmF5O1xuICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHNjaGVtYSBpcyBUQXN5bmNJdGVyYXRvciAqL1xuICAgIGZ1bmN0aW9uIFRBc3luY0l0ZXJhdG9yKHNjaGVtYSkge1xuICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgcmV0dXJuIChUS2luZE9mKHNjaGVtYSwgJ0FzeW5jSXRlcmF0b3InKSAmJlxuICAgICAgICAgICAgc2NoZW1hLnR5cGUgPT09ICdBc3luY0l0ZXJhdG9yJyAmJlxuICAgICAgICAgICAgSXNPcHRpb25hbFN0cmluZyhzY2hlbWEuJGlkKSAmJlxuICAgICAgICAgICAgVFNjaGVtYShzY2hlbWEuaXRlbXMpKTtcbiAgICB9XG4gICAgVHlwZUd1YXJkLlRBc3luY0l0ZXJhdG9yID0gVEFzeW5jSXRlcmF0b3I7XG4gICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc2NoZW1hIGlzIFRCaWdJbnQgKi9cbiAgICBmdW5jdGlvbiBUQmlnSW50KHNjaGVtYSkge1xuICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgcmV0dXJuIChUS2luZE9mKHNjaGVtYSwgJ0JpZ0ludCcpICYmXG4gICAgICAgICAgICBzY2hlbWEudHlwZSA9PT0gJ2JpZ2ludCcgJiZcbiAgICAgICAgICAgIElzT3B0aW9uYWxTdHJpbmcoc2NoZW1hLiRpZCkgJiZcbiAgICAgICAgICAgIElzT3B0aW9uYWxCaWdJbnQoc2NoZW1hLm11bHRpcGxlT2YpICYmXG4gICAgICAgICAgICBJc09wdGlvbmFsQmlnSW50KHNjaGVtYS5taW5pbXVtKSAmJlxuICAgICAgICAgICAgSXNPcHRpb25hbEJpZ0ludChzY2hlbWEubWF4aW11bSkgJiZcbiAgICAgICAgICAgIElzT3B0aW9uYWxCaWdJbnQoc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0pICYmXG4gICAgICAgICAgICBJc09wdGlvbmFsQmlnSW50KHNjaGVtYS5leGNsdXNpdmVNYXhpbXVtKSk7XG4gICAgfVxuICAgIFR5cGVHdWFyZC5UQmlnSW50ID0gVEJpZ0ludDtcbiAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzY2hlbWEgaXMgVEJvb2xlYW4gKi9cbiAgICBmdW5jdGlvbiBUQm9vbGVhbihzY2hlbWEpIHtcbiAgICAgICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgICAgIHJldHVybiAoVEtpbmRPZihzY2hlbWEsICdCb29sZWFuJykgJiZcbiAgICAgICAgICAgIHNjaGVtYS50eXBlID09PSAnYm9vbGVhbicgJiZcbiAgICAgICAgICAgIElzT3B0aW9uYWxTdHJpbmcoc2NoZW1hLiRpZCkpO1xuICAgIH1cbiAgICBUeXBlR3VhcmQuVEJvb2xlYW4gPSBUQm9vbGVhbjtcbiAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzY2hlbWEgaXMgVENvbnN0cnVjdG9yICovXG4gICAgZnVuY3Rpb24gVENvbnN0cnVjdG9yKHNjaGVtYSkge1xuICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgaWYgKCEoVEtpbmRPZihzY2hlbWEsICdDb25zdHJ1Y3RvcicpICYmXG4gICAgICAgICAgICBzY2hlbWEudHlwZSA9PT0gJ2NvbnN0cnVjdG9yJyAmJlxuICAgICAgICAgICAgSXNPcHRpb25hbFN0cmluZyhzY2hlbWEuJGlkKSAmJlxuICAgICAgICAgICAgVmFsdWVHdWFyZC5Jc0FycmF5KHNjaGVtYS5wYXJhbWV0ZXJzKSAmJlxuICAgICAgICAgICAgVFNjaGVtYShzY2hlbWEucmV0dXJucykpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2Ygc2NoZW1hLnBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgIGlmICghVFNjaGVtYShwYXJhbWV0ZXIpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgVHlwZUd1YXJkLlRDb25zdHJ1Y3RvciA9IFRDb25zdHJ1Y3RvcjtcbiAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzY2hlbWEgaXMgVERhdGUgKi9cbiAgICBmdW5jdGlvbiBURGF0ZShzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIChUS2luZE9mKHNjaGVtYSwgJ0RhdGUnKSAmJlxuICAgICAgICAgICAgc2NoZW1hLnR5cGUgPT09ICdEYXRlJyAmJlxuICAgICAgICAgICAgSXNPcHRpb25hbFN0cmluZyhzY2hlbWEuJGlkKSAmJlxuICAgICAgICAgICAgSXNPcHRpb25hbE51bWJlcihzY2hlbWEubWluaW11bVRpbWVzdGFtcCkgJiZcbiAgICAgICAgICAgIElzT3B0aW9uYWxOdW1iZXIoc2NoZW1hLm1heGltdW1UaW1lc3RhbXApICYmXG4gICAgICAgICAgICBJc09wdGlvbmFsTnVtYmVyKHNjaGVtYS5leGNsdXNpdmVNaW5pbXVtVGltZXN0YW1wKSAmJlxuICAgICAgICAgICAgSXNPcHRpb25hbE51bWJlcihzY2hlbWEuZXhjbHVzaXZlTWF4aW11bVRpbWVzdGFtcCkpO1xuICAgIH1cbiAgICBUeXBlR3VhcmQuVERhdGUgPSBURGF0ZTtcbiAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzY2hlbWEgaXMgVEZ1bmN0aW9uICovXG4gICAgZnVuY3Rpb24gVEZ1bmN0aW9uKHNjaGVtYSkge1xuICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgaWYgKCEoVEtpbmRPZihzY2hlbWEsICdGdW5jdGlvbicpICYmXG4gICAgICAgICAgICBzY2hlbWEudHlwZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgICAgSXNPcHRpb25hbFN0cmluZyhzY2hlbWEuJGlkKSAmJlxuICAgICAgICAgICAgVmFsdWVHdWFyZC5Jc0FycmF5KHNjaGVtYS5wYXJhbWV0ZXJzKSAmJlxuICAgICAgICAgICAgVFNjaGVtYShzY2hlbWEucmV0dXJucykpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2Ygc2NoZW1hLnBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgIGlmICghVFNjaGVtYShwYXJhbWV0ZXIpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgVHlwZUd1YXJkLlRGdW5jdGlvbiA9IFRGdW5jdGlvbjtcbiAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzY2hlbWEgaXMgVEludGVnZXIgKi9cbiAgICBmdW5jdGlvbiBUSW50ZWdlcihzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIChUS2luZE9mKHNjaGVtYSwgJ0ludGVnZXInKSAmJlxuICAgICAgICAgICAgc2NoZW1hLnR5cGUgPT09ICdpbnRlZ2VyJyAmJlxuICAgICAgICAgICAgSXNPcHRpb25hbFN0cmluZyhzY2hlbWEuJGlkKSAmJlxuICAgICAgICAgICAgSXNPcHRpb25hbE51bWJlcihzY2hlbWEubXVsdGlwbGVPZikgJiZcbiAgICAgICAgICAgIElzT3B0aW9uYWxOdW1iZXIoc2NoZW1hLm1pbmltdW0pICYmXG4gICAgICAgICAgICBJc09wdGlvbmFsTnVtYmVyKHNjaGVtYS5tYXhpbXVtKSAmJlxuICAgICAgICAgICAgSXNPcHRpb25hbE51bWJlcihzY2hlbWEuZXhjbHVzaXZlTWluaW11bSkgJiZcbiAgICAgICAgICAgIElzT3B0aW9uYWxOdW1iZXIoc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0pKTtcbiAgICB9XG4gICAgVHlwZUd1YXJkLlRJbnRlZ2VyID0gVEludGVnZXI7XG4gICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc2NoZW1hIGlzIFRJbnRlcnNlY3QgKi9cbiAgICBmdW5jdGlvbiBUSW50ZXJzZWN0KHNjaGVtYSkge1xuICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgaWYgKCEoVEtpbmRPZihzY2hlbWEsICdJbnRlcnNlY3QnKSAmJlxuICAgICAgICAgICAgVmFsdWVHdWFyZC5Jc0FycmF5KHNjaGVtYS5hbGxPZikgJiZcbiAgICAgICAgICAgIElzT3B0aW9uYWxTdHJpbmcoc2NoZW1hLnR5cGUpICYmXG4gICAgICAgICAgICAoSXNPcHRpb25hbEJvb2xlYW4oc2NoZW1hLnVuZXZhbHVhdGVkUHJvcGVydGllcykgfHwgSXNPcHRpb25hbFNjaGVtYShzY2hlbWEudW5ldmFsdWF0ZWRQcm9wZXJ0aWVzKSkgJiZcbiAgICAgICAgICAgIElzT3B0aW9uYWxTdHJpbmcoc2NoZW1hLiRpZCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCd0eXBlJyBpbiBzY2hlbWEgJiYgc2NoZW1hLnR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBpbm5lciBvZiBzY2hlbWEuYWxsT2YpIHtcbiAgICAgICAgICAgIGlmICghVFNjaGVtYShpbm5lcikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBUeXBlR3VhcmQuVEludGVyc2VjdCA9IFRJbnRlcnNlY3Q7XG4gICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc2NoZW1hIGlzIFRJdGVyYXRvciAqL1xuICAgIGZ1bmN0aW9uIFRJdGVyYXRvcihzY2hlbWEpIHtcbiAgICAgICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgICAgIHJldHVybiAoVEtpbmRPZihzY2hlbWEsICdJdGVyYXRvcicpICYmXG4gICAgICAgICAgICBzY2hlbWEudHlwZSA9PT0gJ0l0ZXJhdG9yJyAmJlxuICAgICAgICAgICAgSXNPcHRpb25hbFN0cmluZyhzY2hlbWEuJGlkKSAmJlxuICAgICAgICAgICAgVFNjaGVtYShzY2hlbWEuaXRlbXMpKTtcbiAgICB9XG4gICAgVHlwZUd1YXJkLlRJdGVyYXRvciA9IFRJdGVyYXRvcjtcbiAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzY2hlbWEgaXMgYSBUS2luZCB3aXRoIHRoZSBnaXZlbiBuYW1lLiAqL1xuICAgIGZ1bmN0aW9uIFRLaW5kT2Yoc2NoZW1hLCBraW5kKSB7XG4gICAgICAgIHJldHVybiBUS2luZChzY2hlbWEpICYmIHNjaGVtYVtleHBvcnRzLktpbmRdID09PSBraW5kO1xuICAgIH1cbiAgICBUeXBlR3VhcmQuVEtpbmRPZiA9IFRLaW5kT2Y7XG4gICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc2NoZW1hIGlzIFRLaW5kICovXG4gICAgZnVuY3Rpb24gVEtpbmQoc2NoZW1hKSB7XG4gICAgICAgIHJldHVybiBWYWx1ZUd1YXJkLklzT2JqZWN0KHNjaGVtYSkgJiYgZXhwb3J0cy5LaW5kIGluIHNjaGVtYSAmJiBWYWx1ZUd1YXJkLklzU3RyaW5nKHNjaGVtYVtleHBvcnRzLktpbmRdKTtcbiAgICB9XG4gICAgVHlwZUd1YXJkLlRLaW5kID0gVEtpbmQ7XG4gICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc2NoZW1hIGlzIFRMaXRlcmFsPHN0cmluZz4gKi9cbiAgICBmdW5jdGlvbiBUTGl0ZXJhbFN0cmluZyhzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIFRMaXRlcmFsKHNjaGVtYSkgJiYgVmFsdWVHdWFyZC5Jc1N0cmluZyhzY2hlbWEuY29uc3QpO1xuICAgIH1cbiAgICBUeXBlR3VhcmQuVExpdGVyYWxTdHJpbmcgPSBUTGl0ZXJhbFN0cmluZztcbiAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzY2hlbWEgaXMgVExpdGVyYWw8bnVtYmVyPiAqL1xuICAgIGZ1bmN0aW9uIFRMaXRlcmFsTnVtYmVyKHNjaGVtYSkge1xuICAgICAgICByZXR1cm4gVExpdGVyYWwoc2NoZW1hKSAmJiBWYWx1ZUd1YXJkLklzTnVtYmVyKHNjaGVtYS5jb25zdCk7XG4gICAgfVxuICAgIFR5cGVHdWFyZC5UTGl0ZXJhbE51bWJlciA9IFRMaXRlcmFsTnVtYmVyO1xuICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHNjaGVtYSBpcyBUTGl0ZXJhbDxib29sZWFuPiAqL1xuICAgIGZ1bmN0aW9uIFRMaXRlcmFsQm9vbGVhbihzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIFRMaXRlcmFsKHNjaGVtYSkgJiYgVmFsdWVHdWFyZC5Jc0Jvb2xlYW4oc2NoZW1hLmNvbnN0KTtcbiAgICB9XG4gICAgVHlwZUd1YXJkLlRMaXRlcmFsQm9vbGVhbiA9IFRMaXRlcmFsQm9vbGVhbjtcbiAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzY2hlbWEgaXMgVExpdGVyYWwgKi9cbiAgICBmdW5jdGlvbiBUTGl0ZXJhbChzY2hlbWEpIHtcbiAgICAgICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgICAgIHJldHVybiAoVEtpbmRPZihzY2hlbWEsICdMaXRlcmFsJykgJiZcbiAgICAgICAgICAgIElzT3B0aW9uYWxTdHJpbmcoc2NoZW1hLiRpZCkgJiYgKFZhbHVlR3VhcmQuSXNCb29sZWFuKHNjaGVtYS5jb25zdCkgfHxcbiAgICAgICAgICAgIFZhbHVlR3VhcmQuSXNOdW1iZXIoc2NoZW1hLmNvbnN0KSB8fFxuICAgICAgICAgICAgVmFsdWVHdWFyZC5Jc1N0cmluZyhzY2hlbWEuY29uc3QpKSk7XG4gICAgfVxuICAgIFR5cGVHdWFyZC5UTGl0ZXJhbCA9IFRMaXRlcmFsO1xuICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHNjaGVtYSBpcyBUTmV2ZXIgKi9cbiAgICBmdW5jdGlvbiBUTmV2ZXIoc2NoZW1hKSB7XG4gICAgICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgICAgICByZXR1cm4gKFRLaW5kT2Yoc2NoZW1hLCAnTmV2ZXInKSAmJlxuICAgICAgICAgICAgVmFsdWVHdWFyZC5Jc09iamVjdChzY2hlbWEubm90KSAmJlxuICAgICAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc2NoZW1hLm5vdCkubGVuZ3RoID09PSAwKTtcbiAgICB9XG4gICAgVHlwZUd1YXJkLlROZXZlciA9IFROZXZlcjtcbiAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzY2hlbWEgaXMgVE5vdCAqL1xuICAgIGZ1bmN0aW9uIFROb3Qoc2NoZW1hKSB7XG4gICAgICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgICAgICByZXR1cm4gKFRLaW5kT2Yoc2NoZW1hLCAnTm90JykgJiZcbiAgICAgICAgICAgIFRTY2hlbWEoc2NoZW1hLm5vdCkpO1xuICAgIH1cbiAgICBUeXBlR3VhcmQuVE5vdCA9IFROb3Q7XG4gICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc2NoZW1hIGlzIFROdWxsICovXG4gICAgZnVuY3Rpb24gVE51bGwoc2NoZW1hKSB7XG4gICAgICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgICAgICByZXR1cm4gKFRLaW5kT2Yoc2NoZW1hLCAnTnVsbCcpICYmXG4gICAgICAgICAgICBzY2hlbWEudHlwZSA9PT0gJ251bGwnICYmXG4gICAgICAgICAgICBJc09wdGlvbmFsU3RyaW5nKHNjaGVtYS4kaWQpKTtcbiAgICB9XG4gICAgVHlwZUd1YXJkLlROdWxsID0gVE51bGw7XG4gICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc2NoZW1hIGlzIFROdW1iZXIgKi9cbiAgICBmdW5jdGlvbiBUTnVtYmVyKHNjaGVtYSkge1xuICAgICAgICByZXR1cm4gKFRLaW5kT2Yoc2NoZW1hLCAnTnVtYmVyJykgJiZcbiAgICAgICAgICAgIHNjaGVtYS50eXBlID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgSXNPcHRpb25hbFN0cmluZyhzY2hlbWEuJGlkKSAmJlxuICAgICAgICAgICAgSXNPcHRpb25hbE51bWJlcihzY2hlbWEubXVsdGlwbGVPZikgJiZcbiAgICAgICAgICAgIElzT3B0aW9uYWxOdW1iZXIoc2NoZW1hLm1pbmltdW0pICYmXG4gICAgICAgICAgICBJc09wdGlvbmFsTnVtYmVyKHNjaGVtYS5tYXhpbXVtKSAmJlxuICAgICAgICAgICAgSXNPcHRpb25hbE51bWJlcihzY2hlbWEuZXhjbHVzaXZlTWluaW11bSkgJiZcbiAgICAgICAgICAgIElzT3B0aW9uYWxOdW1iZXIoc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0pKTtcbiAgICB9XG4gICAgVHlwZUd1YXJkLlROdW1iZXIgPSBUTnVtYmVyO1xuICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHNjaGVtYSBpcyBUT2JqZWN0ICovXG4gICAgZnVuY3Rpb24gVE9iamVjdChzY2hlbWEpIHtcbiAgICAgICAgaWYgKCEoVEtpbmRPZihzY2hlbWEsICdPYmplY3QnKSAmJlxuICAgICAgICAgICAgc2NoZW1hLnR5cGUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICBJc09wdGlvbmFsU3RyaW5nKHNjaGVtYS4kaWQpICYmXG4gICAgICAgICAgICBWYWx1ZUd1YXJkLklzT2JqZWN0KHNjaGVtYS5wcm9wZXJ0aWVzKSAmJlxuICAgICAgICAgICAgSXNBZGRpdGlvbmFsUHJvcGVydGllcyhzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMpICYmXG4gICAgICAgICAgICBJc09wdGlvbmFsTnVtYmVyKHNjaGVtYS5taW5Qcm9wZXJ0aWVzKSAmJlxuICAgICAgICAgICAgSXNPcHRpb25hbE51bWJlcihzY2hlbWEubWF4UHJvcGVydGllcykpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hLnByb3BlcnRpZXMpKSB7XG4gICAgICAgICAgICBpZiAoIUlzQ29udHJvbENoYXJhY3RlckZyZWUoa2V5KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIVRTY2hlbWEodmFsdWUpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgVHlwZUd1YXJkLlRPYmplY3QgPSBUT2JqZWN0O1xuICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHNjaGVtYSBpcyBUUHJvbWlzZSAqL1xuICAgIGZ1bmN0aW9uIFRQcm9taXNlKHNjaGVtYSkge1xuICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgcmV0dXJuIChUS2luZE9mKHNjaGVtYSwgJ1Byb21pc2UnKSAmJlxuICAgICAgICAgICAgc2NoZW1hLnR5cGUgPT09ICdQcm9taXNlJyAmJlxuICAgICAgICAgICAgSXNPcHRpb25hbFN0cmluZyhzY2hlbWEuJGlkKSAmJlxuICAgICAgICAgICAgVFNjaGVtYShzY2hlbWEuaXRlbSkpO1xuICAgIH1cbiAgICBUeXBlR3VhcmQuVFByb21pc2UgPSBUUHJvbWlzZTtcbiAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzY2hlbWEgaXMgVFJlY29yZCAqL1xuICAgIGZ1bmN0aW9uIFRSZWNvcmQoc2NoZW1hKSB7XG4gICAgICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgICAgICBpZiAoIShUS2luZE9mKHNjaGVtYSwgJ1JlY29yZCcpICYmXG4gICAgICAgICAgICBzY2hlbWEudHlwZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgIElzT3B0aW9uYWxTdHJpbmcoc2NoZW1hLiRpZCkgJiZcbiAgICAgICAgICAgIElzQWRkaXRpb25hbFByb3BlcnRpZXMoc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKSAmJlxuICAgICAgICAgICAgVmFsdWVHdWFyZC5Jc09iamVjdChzY2hlbWEucGF0dGVyblByb3BlcnRpZXMpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzY2hlbWEucGF0dGVyblByb3BlcnRpZXMpO1xuICAgICAgICBpZiAoa2V5cy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUlzUGF0dGVybihrZXlzWzBdKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghVFNjaGVtYShzY2hlbWEucGF0dGVyblByb3BlcnRpZXNba2V5c1swXV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIFR5cGVHdWFyZC5UUmVjb3JkID0gVFJlY29yZDtcbiAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzY2hlbWEgaXMgVFJlZiAqL1xuICAgIGZ1bmN0aW9uIFRSZWYoc2NoZW1hKSB7XG4gICAgICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgICAgICByZXR1cm4gKFRLaW5kT2Yoc2NoZW1hLCAnUmVmJykgJiZcbiAgICAgICAgICAgIElzT3B0aW9uYWxTdHJpbmcoc2NoZW1hLiRpZCkgJiZcbiAgICAgICAgICAgIFZhbHVlR3VhcmQuSXNTdHJpbmcoc2NoZW1hLiRyZWYpKTtcbiAgICB9XG4gICAgVHlwZUd1YXJkLlRSZWYgPSBUUmVmO1xuICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHNjaGVtYSBpcyBUU3RyaW5nICovXG4gICAgZnVuY3Rpb24gVFN0cmluZyhzY2hlbWEpIHtcbiAgICAgICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgICAgIHJldHVybiAoVEtpbmRPZihzY2hlbWEsICdTdHJpbmcnKSAmJlxuICAgICAgICAgICAgc2NoZW1hLnR5cGUgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICBJc09wdGlvbmFsU3RyaW5nKHNjaGVtYS4kaWQpICYmXG4gICAgICAgICAgICBJc09wdGlvbmFsTnVtYmVyKHNjaGVtYS5taW5MZW5ndGgpICYmXG4gICAgICAgICAgICBJc09wdGlvbmFsTnVtYmVyKHNjaGVtYS5tYXhMZW5ndGgpICYmXG4gICAgICAgICAgICBJc09wdGlvbmFsUGF0dGVybihzY2hlbWEucGF0dGVybikgJiZcbiAgICAgICAgICAgIElzT3B0aW9uYWxGb3JtYXQoc2NoZW1hLmZvcm1hdCkpO1xuICAgIH1cbiAgICBUeXBlR3VhcmQuVFN0cmluZyA9IFRTdHJpbmc7XG4gICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc2NoZW1hIGlzIFRTeW1ib2wgKi9cbiAgICBmdW5jdGlvbiBUU3ltYm9sKHNjaGVtYSkge1xuICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgcmV0dXJuIChUS2luZE9mKHNjaGVtYSwgJ1N5bWJvbCcpICYmXG4gICAgICAgICAgICBzY2hlbWEudHlwZSA9PT0gJ3N5bWJvbCcgJiZcbiAgICAgICAgICAgIElzT3B0aW9uYWxTdHJpbmcoc2NoZW1hLiRpZCkpO1xuICAgIH1cbiAgICBUeXBlR3VhcmQuVFN5bWJvbCA9IFRTeW1ib2w7XG4gICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc2NoZW1hIGlzIFRUZW1wbGF0ZUxpdGVyYWwgKi9cbiAgICBmdW5jdGlvbiBUVGVtcGxhdGVMaXRlcmFsKHNjaGVtYSkge1xuICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgcmV0dXJuIChUS2luZE9mKHNjaGVtYSwgJ1RlbXBsYXRlTGl0ZXJhbCcpICYmXG4gICAgICAgICAgICBzY2hlbWEudHlwZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgIFZhbHVlR3VhcmQuSXNTdHJpbmcoc2NoZW1hLnBhdHRlcm4pICYmXG4gICAgICAgICAgICBzY2hlbWEucGF0dGVyblswXSA9PT0gJ14nICYmXG4gICAgICAgICAgICBzY2hlbWEucGF0dGVybltzY2hlbWEucGF0dGVybi5sZW5ndGggLSAxXSA9PT0gJyQnKTtcbiAgICB9XG4gICAgVHlwZUd1YXJkLlRUZW1wbGF0ZUxpdGVyYWwgPSBUVGVtcGxhdGVMaXRlcmFsO1xuICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHNjaGVtYSBpcyBUVGhpcyAqL1xuICAgIGZ1bmN0aW9uIFRUaGlzKHNjaGVtYSkge1xuICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgcmV0dXJuIChUS2luZE9mKHNjaGVtYSwgJ1RoaXMnKSAmJlxuICAgICAgICAgICAgSXNPcHRpb25hbFN0cmluZyhzY2hlbWEuJGlkKSAmJlxuICAgICAgICAgICAgVmFsdWVHdWFyZC5Jc1N0cmluZyhzY2hlbWEuJHJlZikpO1xuICAgIH1cbiAgICBUeXBlR3VhcmQuVFRoaXMgPSBUVGhpcztcbiAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzY2hlbWEgaXMgVFR1cGxlICovXG4gICAgZnVuY3Rpb24gVFR1cGxlKHNjaGVtYSkge1xuICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgaWYgKCEoVEtpbmRPZihzY2hlbWEsICdUdXBsZScpICYmXG4gICAgICAgICAgICBzY2hlbWEudHlwZSA9PT0gJ2FycmF5JyAmJlxuICAgICAgICAgICAgSXNPcHRpb25hbFN0cmluZyhzY2hlbWEuJGlkKSAmJlxuICAgICAgICAgICAgVmFsdWVHdWFyZC5Jc051bWJlcihzY2hlbWEubWluSXRlbXMpICYmXG4gICAgICAgICAgICBWYWx1ZUd1YXJkLklzTnVtYmVyKHNjaGVtYS5tYXhJdGVtcykgJiZcbiAgICAgICAgICAgIHNjaGVtYS5taW5JdGVtcyA9PT0gc2NoZW1hLm1heEl0ZW1zKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChWYWx1ZUd1YXJkLklzVW5kZWZpbmVkKHNjaGVtYS5pdGVtcykgJiYgVmFsdWVHdWFyZC5Jc1VuZGVmaW5lZChzY2hlbWEuYWRkaXRpb25hbEl0ZW1zKSAmJiBzY2hlbWEubWluSXRlbXMgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghVmFsdWVHdWFyZC5Jc0FycmF5KHNjaGVtYS5pdGVtcykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGlubmVyIG9mIHNjaGVtYS5pdGVtcykge1xuICAgICAgICAgICAgaWYgKCFUU2NoZW1hKGlubmVyKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIFR5cGVHdWFyZC5UVHVwbGUgPSBUVHVwbGU7XG4gICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc2NoZW1hIGlzIFRVbmRlZmluZWQgKi9cbiAgICBmdW5jdGlvbiBUVW5kZWZpbmVkKHNjaGVtYSkge1xuICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgcmV0dXJuIChUS2luZE9mKHNjaGVtYSwgJ1VuZGVmaW5lZCcpICYmXG4gICAgICAgICAgICBzY2hlbWEudHlwZSA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIElzT3B0aW9uYWxTdHJpbmcoc2NoZW1hLiRpZCkpO1xuICAgIH1cbiAgICBUeXBlR3VhcmQuVFVuZGVmaW5lZCA9IFRVbmRlZmluZWQ7XG4gICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc2NoZW1hIGlzIFRVbmlvbjxMaXRlcmFsPHN0cmluZyB8IG51bWJlcj5bXT4gKi9cbiAgICBmdW5jdGlvbiBUVW5pb25MaXRlcmFsKHNjaGVtYSkge1xuICAgICAgICByZXR1cm4gVFVuaW9uKHNjaGVtYSkgJiYgc2NoZW1hLmFueU9mLmV2ZXJ5KChzY2hlbWEpID0+IFRMaXRlcmFsU3RyaW5nKHNjaGVtYSkgfHwgVExpdGVyYWxOdW1iZXIoc2NoZW1hKSk7XG4gICAgfVxuICAgIFR5cGVHdWFyZC5UVW5pb25MaXRlcmFsID0gVFVuaW9uTGl0ZXJhbDtcbiAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzY2hlbWEgaXMgVFVuaW9uICovXG4gICAgZnVuY3Rpb24gVFVuaW9uKHNjaGVtYSkge1xuICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgaWYgKCEoVEtpbmRPZihzY2hlbWEsICdVbmlvbicpICYmXG4gICAgICAgICAgICBWYWx1ZUd1YXJkLklzQXJyYXkoc2NoZW1hLmFueU9mKSAmJlxuICAgICAgICAgICAgSXNPcHRpb25hbFN0cmluZyhzY2hlbWEuJGlkKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGlubmVyIG9mIHNjaGVtYS5hbnlPZikge1xuICAgICAgICAgICAgaWYgKCFUU2NoZW1hKGlubmVyKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIFR5cGVHdWFyZC5UVW5pb24gPSBUVW5pb247XG4gICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc2NoZW1hIGlzIFRVaW50OEFycmF5ICovXG4gICAgZnVuY3Rpb24gVFVpbnQ4QXJyYXkoc2NoZW1hKSB7XG4gICAgICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgICAgICByZXR1cm4gKFRLaW5kT2Yoc2NoZW1hLCAnVWludDhBcnJheScpICYmXG4gICAgICAgICAgICBzY2hlbWEudHlwZSA9PT0gJ1VpbnQ4QXJyYXknICYmXG4gICAgICAgICAgICBJc09wdGlvbmFsU3RyaW5nKHNjaGVtYS4kaWQpICYmXG4gICAgICAgICAgICBJc09wdGlvbmFsTnVtYmVyKHNjaGVtYS5taW5CeXRlTGVuZ3RoKSAmJlxuICAgICAgICAgICAgSXNPcHRpb25hbE51bWJlcihzY2hlbWEubWF4Qnl0ZUxlbmd0aCkpO1xuICAgIH1cbiAgICBUeXBlR3VhcmQuVFVpbnQ4QXJyYXkgPSBUVWludDhBcnJheTtcbiAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzY2hlbWEgaXMgVFVua25vd24gKi9cbiAgICBmdW5jdGlvbiBUVW5rbm93bihzY2hlbWEpIHtcbiAgICAgICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgICAgIHJldHVybiAoVEtpbmRPZihzY2hlbWEsICdVbmtub3duJykgJiZcbiAgICAgICAgICAgIElzT3B0aW9uYWxTdHJpbmcoc2NoZW1hLiRpZCkpO1xuICAgIH1cbiAgICBUeXBlR3VhcmQuVFVua25vd24gPSBUVW5rbm93bjtcbiAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzY2hlbWEgaXMgYSByYXcgVFVuc2FmZSAqL1xuICAgIGZ1bmN0aW9uIFRVbnNhZmUoc2NoZW1hKSB7XG4gICAgICAgIHJldHVybiBUS2luZE9mKHNjaGVtYSwgJ1Vuc2FmZScpO1xuICAgIH1cbiAgICBUeXBlR3VhcmQuVFVuc2FmZSA9IFRVbnNhZmU7XG4gICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc2NoZW1hIGlzIFRWb2lkICovXG4gICAgZnVuY3Rpb24gVFZvaWQoc2NoZW1hKSB7XG4gICAgICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgICAgICByZXR1cm4gKFRLaW5kT2Yoc2NoZW1hLCAnVm9pZCcpICYmXG4gICAgICAgICAgICBzY2hlbWEudHlwZSA9PT0gJ3ZvaWQnICYmXG4gICAgICAgICAgICBJc09wdGlvbmFsU3RyaW5nKHNjaGVtYS4kaWQpKTtcbiAgICB9XG4gICAgVHlwZUd1YXJkLlRWb2lkID0gVFZvaWQ7XG4gICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHNjaGVtYSBoYXMgdGhlIFJlYWRvbmx5IG1vZGlmaWVyICovXG4gICAgZnVuY3Rpb24gVFJlYWRvbmx5KHNjaGVtYSkge1xuICAgICAgICByZXR1cm4gVmFsdWVHdWFyZC5Jc09iamVjdChzY2hlbWEpICYmIHNjaGVtYVtleHBvcnRzLlJlYWRvbmx5XSA9PT0gJ1JlYWRvbmx5JztcbiAgICB9XG4gICAgVHlwZUd1YXJkLlRSZWFkb25seSA9IFRSZWFkb25seTtcbiAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoaXMgc2NoZW1hIGhhcyB0aGUgT3B0aW9uYWwgbW9kaWZpZXIgKi9cbiAgICBmdW5jdGlvbiBUT3B0aW9uYWwoc2NoZW1hKSB7XG4gICAgICAgIHJldHVybiBWYWx1ZUd1YXJkLklzT2JqZWN0KHNjaGVtYSkgJiYgc2NoZW1hW2V4cG9ydHMuT3B0aW9uYWxdID09PSAnT3B0aW9uYWwnO1xuICAgIH1cbiAgICBUeXBlR3VhcmQuVE9wdGlvbmFsID0gVE9wdGlvbmFsO1xuICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHNjaGVtYSBpcyBUU2NoZW1hICovXG4gICAgZnVuY3Rpb24gVFNjaGVtYShzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIChWYWx1ZUd1YXJkLklzT2JqZWN0KHNjaGVtYSkgJiZcbiAgICAgICAgICAgIChUQW55KHNjaGVtYSkgfHxcbiAgICAgICAgICAgICAgICBUQXJyYXkoc2NoZW1hKSB8fFxuICAgICAgICAgICAgICAgIFRCb29sZWFuKHNjaGVtYSkgfHxcbiAgICAgICAgICAgICAgICBUQmlnSW50KHNjaGVtYSkgfHxcbiAgICAgICAgICAgICAgICBUQXN5bmNJdGVyYXRvcihzY2hlbWEpIHx8XG4gICAgICAgICAgICAgICAgVENvbnN0cnVjdG9yKHNjaGVtYSkgfHxcbiAgICAgICAgICAgICAgICBURGF0ZShzY2hlbWEpIHx8XG4gICAgICAgICAgICAgICAgVEZ1bmN0aW9uKHNjaGVtYSkgfHxcbiAgICAgICAgICAgICAgICBUSW50ZWdlcihzY2hlbWEpIHx8XG4gICAgICAgICAgICAgICAgVEludGVyc2VjdChzY2hlbWEpIHx8XG4gICAgICAgICAgICAgICAgVEl0ZXJhdG9yKHNjaGVtYSkgfHxcbiAgICAgICAgICAgICAgICBUTGl0ZXJhbChzY2hlbWEpIHx8XG4gICAgICAgICAgICAgICAgVE5ldmVyKHNjaGVtYSkgfHxcbiAgICAgICAgICAgICAgICBUTm90KHNjaGVtYSkgfHxcbiAgICAgICAgICAgICAgICBUTnVsbChzY2hlbWEpIHx8XG4gICAgICAgICAgICAgICAgVE51bWJlcihzY2hlbWEpIHx8XG4gICAgICAgICAgICAgICAgVE9iamVjdChzY2hlbWEpIHx8XG4gICAgICAgICAgICAgICAgVFByb21pc2Uoc2NoZW1hKSB8fFxuICAgICAgICAgICAgICAgIFRSZWNvcmQoc2NoZW1hKSB8fFxuICAgICAgICAgICAgICAgIFRSZWYoc2NoZW1hKSB8fFxuICAgICAgICAgICAgICAgIFRTdHJpbmcoc2NoZW1hKSB8fFxuICAgICAgICAgICAgICAgIFRTeW1ib2woc2NoZW1hKSB8fFxuICAgICAgICAgICAgICAgIFRUZW1wbGF0ZUxpdGVyYWwoc2NoZW1hKSB8fFxuICAgICAgICAgICAgICAgIFRUaGlzKHNjaGVtYSkgfHxcbiAgICAgICAgICAgICAgICBUVHVwbGUoc2NoZW1hKSB8fFxuICAgICAgICAgICAgICAgIFRVbmRlZmluZWQoc2NoZW1hKSB8fFxuICAgICAgICAgICAgICAgIFRVbmlvbihzY2hlbWEpIHx8XG4gICAgICAgICAgICAgICAgVFVpbnQ4QXJyYXkoc2NoZW1hKSB8fFxuICAgICAgICAgICAgICAgIFRVbmtub3duKHNjaGVtYSkgfHxcbiAgICAgICAgICAgICAgICBUVW5zYWZlKHNjaGVtYSkgfHxcbiAgICAgICAgICAgICAgICBUVm9pZChzY2hlbWEpIHx8XG4gICAgICAgICAgICAgICAgKFRLaW5kKHNjaGVtYSkgJiYgVHlwZVJlZ2lzdHJ5LkhhcyhzY2hlbWFbZXhwb3J0cy5LaW5kXSkpKSk7XG4gICAgfVxuICAgIFR5cGVHdWFyZC5UU2NoZW1hID0gVFNjaGVtYTtcbn0pKFR5cGVHdWFyZCB8fCAoZXhwb3J0cy5UeXBlR3VhcmQgPSBUeXBlR3VhcmQgPSB7fSkpO1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEV4dGVuZHNVbmRlZmluZWRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKiogRmFzdCB1bmRlZmluZWQgY2hlY2sgdXNlZCBmb3IgcHJvcGVydGllcyBvZiB0eXBlIHVuZGVmaW5lZCAqL1xudmFyIEV4dGVuZHNVbmRlZmluZWQ7XG4oZnVuY3Rpb24gKEV4dGVuZHNVbmRlZmluZWQpIHtcbiAgICBmdW5jdGlvbiBDaGVjayhzY2hlbWEpIHtcbiAgICAgICAgaWYgKHNjaGVtYVtleHBvcnRzLktpbmRdID09PSAnVW5kZWZpbmVkJylcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoc2NoZW1hW2V4cG9ydHMuS2luZF0gPT09ICdOb3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gIUNoZWNrKHNjaGVtYS5ub3QpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY2hlbWFbZXhwb3J0cy5LaW5kXSA9PT0gJ0ludGVyc2VjdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVyc2VjdCA9IHNjaGVtYTtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcnNlY3QuYWxsT2YuZXZlcnkoKHNjaGVtYSkgPT4gQ2hlY2soc2NoZW1hKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjaGVtYVtleHBvcnRzLktpbmRdID09PSAnVW5pb24nKSB7XG4gICAgICAgICAgICBjb25zdCB1bmlvbiA9IHNjaGVtYTtcbiAgICAgICAgICAgIHJldHVybiB1bmlvbi5hbnlPZi5zb21lKChzY2hlbWEpID0+IENoZWNrKHNjaGVtYSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgRXh0ZW5kc1VuZGVmaW5lZC5DaGVjayA9IENoZWNrO1xufSkoRXh0ZW5kc1VuZGVmaW5lZCB8fCAoZXhwb3J0cy5FeHRlbmRzVW5kZWZpbmVkID0gRXh0ZW5kc1VuZGVmaW5lZCA9IHt9KSk7XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVHlwZUV4dGVuZHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgVHlwZUV4dGVuZHNSZXN1bHQ7XG4oZnVuY3Rpb24gKFR5cGVFeHRlbmRzUmVzdWx0KSB7XG4gICAgVHlwZUV4dGVuZHNSZXN1bHRbVHlwZUV4dGVuZHNSZXN1bHRbXCJVbmlvblwiXSA9IDBdID0gXCJVbmlvblwiO1xuICAgIFR5cGVFeHRlbmRzUmVzdWx0W1R5cGVFeHRlbmRzUmVzdWx0W1wiVHJ1ZVwiXSA9IDFdID0gXCJUcnVlXCI7XG4gICAgVHlwZUV4dGVuZHNSZXN1bHRbVHlwZUV4dGVuZHNSZXN1bHRbXCJGYWxzZVwiXSA9IDJdID0gXCJGYWxzZVwiO1xufSkoVHlwZUV4dGVuZHNSZXN1bHQgfHwgKGV4cG9ydHMuVHlwZUV4dGVuZHNSZXN1bHQgPSBUeXBlRXh0ZW5kc1Jlc3VsdCA9IHt9KSk7XG52YXIgVHlwZUV4dGVuZHM7XG4oZnVuY3Rpb24gKFR5cGVFeHRlbmRzKSB7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBJbnRvQm9vbGVhblJlc3VsdFxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgZnVuY3Rpb24gSW50b0Jvb2xlYW5SZXN1bHQocmVzdWx0KSB7XG4gICAgICAgIHJldHVybiByZXN1bHQgPT09IFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlID8gVHlwZUV4dGVuZHNSZXN1bHQuRmFsc2UgOiBUeXBlRXh0ZW5kc1Jlc3VsdC5UcnVlO1xuICAgIH1cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFN0cnVjdHVyYWxSaWdodFxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgZnVuY3Rpb24gSXNTdHJ1Y3R1cmFsUmlnaHQocmlnaHQpIHtcbiAgICAgICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgICAgIHJldHVybiAoVHlwZUd1YXJkLlROZXZlcihyaWdodCkgfHxcbiAgICAgICAgICAgIFR5cGVHdWFyZC5USW50ZXJzZWN0KHJpZ2h0KSB8fFxuICAgICAgICAgICAgVHlwZUd1YXJkLlRVbmlvbihyaWdodCkgfHxcbiAgICAgICAgICAgIFR5cGVHdWFyZC5UVW5rbm93bihyaWdodCkgfHxcbiAgICAgICAgICAgIFR5cGVHdWFyZC5UQW55KHJpZ2h0KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFN0cnVjdHVyYWxSaWdodChsZWZ0LCByaWdodCkge1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlROZXZlcihyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVE5ldmVyUmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRJbnRlcnNlY3QocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFRJbnRlcnNlY3RSaWdodChsZWZ0LCByaWdodCk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVFVuaW9uKHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUVW5pb25SaWdodChsZWZ0LCByaWdodCk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVFVua25vd24ocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFRVbmtub3duUmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRBbnkocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFRBbnlSaWdodChsZWZ0LCByaWdodCk7XG4gICAgICAgIHRocm93IEVycm9yKCdUeXBlRXh0ZW5kczogU3RydWN0dXJhbFJpZ2h0Jyk7XG4gICAgfVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQW55XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBmdW5jdGlvbiBUQW55UmlnaHQobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LlRydWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFRBbnkobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5USW50ZXJzZWN0KHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUSW50ZXJzZWN0UmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRVbmlvbihyaWdodCkgJiYgcmlnaHQuYW55T2Yuc29tZSgoc2NoZW1hKSA9PiBUeXBlR3VhcmQuVEFueShzY2hlbWEpIHx8IFR5cGVHdWFyZC5UVW5rbm93bihzY2hlbWEpKSlcbiAgICAgICAgICAgIHJldHVybiBUeXBlRXh0ZW5kc1Jlc3VsdC5UcnVlO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRVbmlvbihyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVHlwZUV4dGVuZHNSZXN1bHQuVW5pb247XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVFVua25vd24ocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LlRydWU7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVEFueShyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVHlwZUV4dGVuZHNSZXN1bHQuVHJ1ZTtcbiAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LlVuaW9uO1xuICAgIH1cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEFycmF5XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBmdW5jdGlvbiBUQXJyYXlSaWdodChsZWZ0LCByaWdodCkge1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRVbmtub3duKGxlZnQpKVxuICAgICAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRBbnkobGVmdCkpXG4gICAgICAgICAgICByZXR1cm4gVHlwZUV4dGVuZHNSZXN1bHQuVW5pb247XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVE5ldmVyKGxlZnQpKVxuICAgICAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LlRydWU7XG4gICAgICAgIHJldHVybiBUeXBlRXh0ZW5kc1Jlc3VsdC5GYWxzZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gVEFycmF5KGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIGlmIChJc1N0cnVjdHVyYWxSaWdodChyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJhbFJpZ2h0KGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UT2JqZWN0KHJpZ2h0KSAmJiBJc09iamVjdEFycmF5TGlrZShyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVHlwZUV4dGVuZHNSZXN1bHQuVHJ1ZTtcbiAgICAgICAgaWYgKCFUeXBlR3VhcmQuVEFycmF5KHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUeXBlRXh0ZW5kc1Jlc3VsdC5GYWxzZTtcbiAgICAgICAgcmV0dXJuIEludG9Cb29sZWFuUmVzdWx0KFZpc2l0KGxlZnQuaXRlbXMsIHJpZ2h0Lml0ZW1zKSk7XG4gICAgfVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQXN5bmNJdGVyYXRvclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgZnVuY3Rpb24gVEFzeW5jSXRlcmF0b3IobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgaWYgKElzU3RydWN0dXJhbFJpZ2h0KHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmFsUmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoIVR5cGVHdWFyZC5UQXN5bmNJdGVyYXRvcihyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVHlwZUV4dGVuZHNSZXN1bHQuRmFsc2U7XG4gICAgICAgIHJldHVybiBJbnRvQm9vbGVhblJlc3VsdChWaXNpdChsZWZ0Lml0ZW1zLCByaWdodC5pdGVtcykpO1xuICAgIH1cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEJpZ0ludFxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgZnVuY3Rpb24gVEJpZ0ludChsZWZ0LCByaWdodCkge1xuICAgICAgICBpZiAoSXNTdHJ1Y3R1cmFsUmlnaHQocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyYWxSaWdodChsZWZ0LCByaWdodCk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVE9iamVjdChyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVE9iamVjdFJpZ2h0KGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UUmVjb3JkKHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUUmVjb3JkUmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICByZXR1cm4gVHlwZUd1YXJkLlRCaWdJbnQocmlnaHQpID8gVHlwZUV4dGVuZHNSZXN1bHQuVHJ1ZSA6IFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlO1xuICAgIH1cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEJvb2xlYW5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGZ1bmN0aW9uIFRCb29sZWFuUmlnaHQobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UTGl0ZXJhbChsZWZ0KSAmJiBWYWx1ZUd1YXJkLklzQm9vbGVhbihsZWZ0LmNvbnN0KSlcbiAgICAgICAgICAgIHJldHVybiBUeXBlRXh0ZW5kc1Jlc3VsdC5UcnVlO1xuICAgICAgICByZXR1cm4gVHlwZUd1YXJkLlRCb29sZWFuKGxlZnQpID8gVHlwZUV4dGVuZHNSZXN1bHQuVHJ1ZSA6IFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBUQm9vbGVhbihsZWZ0LCByaWdodCkge1xuICAgICAgICBpZiAoSXNTdHJ1Y3R1cmFsUmlnaHQocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyYWxSaWdodChsZWZ0LCByaWdodCk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVE9iamVjdChyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVE9iamVjdFJpZ2h0KGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UUmVjb3JkKHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUUmVjb3JkUmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICByZXR1cm4gVHlwZUd1YXJkLlRCb29sZWFuKHJpZ2h0KSA/IFR5cGVFeHRlbmRzUmVzdWx0LlRydWUgOiBUeXBlRXh0ZW5kc1Jlc3VsdC5GYWxzZTtcbiAgICB9XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBDb25zdHJ1Y3RvclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgZnVuY3Rpb24gVENvbnN0cnVjdG9yKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIGlmIChJc1N0cnVjdHVyYWxSaWdodChyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJhbFJpZ2h0KGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UT2JqZWN0KHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUT2JqZWN0UmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoIVR5cGVHdWFyZC5UQ29uc3RydWN0b3IocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlO1xuICAgICAgICBpZiAobGVmdC5wYXJhbWV0ZXJzLmxlbmd0aCA+IHJpZ2h0LnBhcmFtZXRlcnMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlO1xuICAgICAgICBpZiAoIWxlZnQucGFyYW1ldGVycy5ldmVyeSgoc2NoZW1hLCBpbmRleCkgPT4gSW50b0Jvb2xlYW5SZXN1bHQoVmlzaXQocmlnaHQucGFyYW1ldGVyc1tpbmRleF0sIHNjaGVtYSkpID09PSBUeXBlRXh0ZW5kc1Jlc3VsdC5UcnVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBJbnRvQm9vbGVhblJlc3VsdChWaXNpdChsZWZ0LnJldHVybnMsIHJpZ2h0LnJldHVybnMpKTtcbiAgICB9XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBEYXRlXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBmdW5jdGlvbiBURGF0ZShsZWZ0LCByaWdodCkge1xuICAgICAgICBpZiAoSXNTdHJ1Y3R1cmFsUmlnaHQocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyYWxSaWdodChsZWZ0LCByaWdodCk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVE9iamVjdChyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVE9iamVjdFJpZ2h0KGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UUmVjb3JkKHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUUmVjb3JkUmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICByZXR1cm4gVHlwZUd1YXJkLlREYXRlKHJpZ2h0KSA/IFR5cGVFeHRlbmRzUmVzdWx0LlRydWUgOiBUeXBlRXh0ZW5kc1Jlc3VsdC5GYWxzZTtcbiAgICB9XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBGdW5jdGlvblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgZnVuY3Rpb24gVEZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIGlmIChJc1N0cnVjdHVyYWxSaWdodChyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJhbFJpZ2h0KGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UT2JqZWN0KHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUT2JqZWN0UmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoIVR5cGVHdWFyZC5URnVuY3Rpb24ocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlO1xuICAgICAgICBpZiAobGVmdC5wYXJhbWV0ZXJzLmxlbmd0aCA+IHJpZ2h0LnBhcmFtZXRlcnMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlO1xuICAgICAgICBpZiAoIWxlZnQucGFyYW1ldGVycy5ldmVyeSgoc2NoZW1hLCBpbmRleCkgPT4gSW50b0Jvb2xlYW5SZXN1bHQoVmlzaXQocmlnaHQucGFyYW1ldGVyc1tpbmRleF0sIHNjaGVtYSkpID09PSBUeXBlRXh0ZW5kc1Jlc3VsdC5UcnVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBJbnRvQm9vbGVhblJlc3VsdChWaXNpdChsZWZ0LnJldHVybnMsIHJpZ2h0LnJldHVybnMpKTtcbiAgICB9XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBJbnRlZ2VyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBmdW5jdGlvbiBUSW50ZWdlclJpZ2h0KGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVExpdGVyYWwobGVmdCkgJiYgVmFsdWVHdWFyZC5Jc051bWJlcihsZWZ0LmNvbnN0KSlcbiAgICAgICAgICAgIHJldHVybiBUeXBlRXh0ZW5kc1Jlc3VsdC5UcnVlO1xuICAgICAgICByZXR1cm4gVHlwZUd1YXJkLlROdW1iZXIobGVmdCkgfHwgVHlwZUd1YXJkLlRJbnRlZ2VyKGxlZnQpID8gVHlwZUV4dGVuZHNSZXN1bHQuVHJ1ZSA6IFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBUSW50ZWdlcihsZWZ0LCByaWdodCkge1xuICAgICAgICBpZiAoSXNTdHJ1Y3R1cmFsUmlnaHQocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyYWxSaWdodChsZWZ0LCByaWdodCk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVE9iamVjdChyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVE9iamVjdFJpZ2h0KGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UUmVjb3JkKHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUUmVjb3JkUmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICByZXR1cm4gVHlwZUd1YXJkLlRJbnRlZ2VyKHJpZ2h0KSB8fCBUeXBlR3VhcmQuVE51bWJlcihyaWdodCkgPyBUeXBlRXh0ZW5kc1Jlc3VsdC5UcnVlIDogVHlwZUV4dGVuZHNSZXN1bHQuRmFsc2U7XG4gICAgfVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gSW50ZXJzZWN0XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBmdW5jdGlvbiBUSW50ZXJzZWN0UmlnaHQobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHJpZ2h0LmFsbE9mLmV2ZXJ5KChzY2hlbWEpID0+IFZpc2l0KGxlZnQsIHNjaGVtYSkgPT09IFR5cGVFeHRlbmRzUmVzdWx0LlRydWUpID8gVHlwZUV4dGVuZHNSZXN1bHQuVHJ1ZSA6IFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBUSW50ZXJzZWN0KGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIHJldHVybiBsZWZ0LmFsbE9mLnNvbWUoKHNjaGVtYSkgPT4gVmlzaXQoc2NoZW1hLCByaWdodCkgPT09IFR5cGVFeHRlbmRzUmVzdWx0LlRydWUpID8gVHlwZUV4dGVuZHNSZXN1bHQuVHJ1ZSA6IFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlO1xuICAgIH1cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEl0ZXJhdG9yXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBmdW5jdGlvbiBUSXRlcmF0b3IobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgaWYgKElzU3RydWN0dXJhbFJpZ2h0KHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmFsUmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoIVR5cGVHdWFyZC5USXRlcmF0b3IocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlO1xuICAgICAgICByZXR1cm4gSW50b0Jvb2xlYW5SZXN1bHQoVmlzaXQobGVmdC5pdGVtcywgcmlnaHQuaXRlbXMpKTtcbiAgICB9XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBMaXRlcmFsXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBmdW5jdGlvbiBUTGl0ZXJhbChsZWZ0LCByaWdodCkge1xuICAgICAgICBpZiAoSXNTdHJ1Y3R1cmFsUmlnaHQocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyYWxSaWdodChsZWZ0LCByaWdodCk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVE9iamVjdChyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVE9iamVjdFJpZ2h0KGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UUmVjb3JkKHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUUmVjb3JkUmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRTdHJpbmcocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFRTdHJpbmdSaWdodChsZWZ0LCByaWdodCk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVE51bWJlcihyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVE51bWJlclJpZ2h0KGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5USW50ZWdlcihyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVEludGVnZXJSaWdodChsZWZ0LCByaWdodCk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVEJvb2xlYW4ocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFRCb29sZWFuUmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICByZXR1cm4gVHlwZUd1YXJkLlRMaXRlcmFsKHJpZ2h0KSAmJiByaWdodC5jb25zdCA9PT0gbGVmdC5jb25zdCA/IFR5cGVFeHRlbmRzUmVzdWx0LlRydWUgOiBUeXBlRXh0ZW5kc1Jlc3VsdC5GYWxzZTtcbiAgICB9XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBOZXZlclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgZnVuY3Rpb24gVE5ldmVyUmlnaHQobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBUTmV2ZXIobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LlRydWU7XG4gICAgfVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gTm90XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBmdW5jdGlvbiBVbndyYXBUTm90KHNjaGVtYSkge1xuICAgICAgICBsZXQgW2N1cnJlbnQsIGRlcHRoXSA9IFtzY2hlbWEsIDBdO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgaWYgKCFUeXBlR3VhcmQuVE5vdChjdXJyZW50KSlcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5vdDtcbiAgICAgICAgICAgIGRlcHRoICs9IDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlcHRoICUgMiA9PT0gMCA/IGN1cnJlbnQgOiBleHBvcnRzLlR5cGUuVW5rbm93bigpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBUTm90KGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIC8vIFR5cGVTY3JpcHQgaGFzIG5vIGNvbmNlcHQgb2YgbmVnYXRlZCB0eXBlcywgYW5kIGF0dGVtcHRzIHRvIGNvcnJlY3RseSBjaGVjayB0aGUgbmVnYXRlZFxuICAgICAgICAvLyB0eXBlIGF0IHJ1bnRpbWUgd291bGQgcHV0IFR5cGVCb3ggYXQgb2RkcyB3aXRoIFR5cGVTY3JpcHRzIGFiaWxpdHkgdG8gc3RhdGljYWxseSBpbmZlclxuICAgICAgICAvLyB0aGUgdHlwZS4gSW5zdGVhZCB3ZSB1bndyYXAgdG8gZWl0aGVyIHVua25vd24gb3IgVCBhbmQgY29udGludWUgZXZhbHVhdGluZy5cbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UTm90KGxlZnQpKVxuICAgICAgICAgICAgcmV0dXJuIFZpc2l0KFVud3JhcFROb3QobGVmdCksIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UTm90KHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBWaXNpdChsZWZ0LCBVbndyYXBUTm90KHJpZ2h0KSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVHlwZUV4dGVuZHM6IEludmFsaWQgZmFsbHRocm91Z2ggZm9yIE5vdGApO1xuICAgIH1cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIE51bGxcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGZ1bmN0aW9uIFROdWxsKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIGlmIChJc1N0cnVjdHVyYWxSaWdodChyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJhbFJpZ2h0KGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UT2JqZWN0KHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUT2JqZWN0UmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRSZWNvcmQocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFRSZWNvcmRSaWdodChsZWZ0LCByaWdodCk7XG4gICAgICAgIHJldHVybiBUeXBlR3VhcmQuVE51bGwocmlnaHQpID8gVHlwZUV4dGVuZHNSZXN1bHQuVHJ1ZSA6IFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlO1xuICAgIH1cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIE51bWJlclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgZnVuY3Rpb24gVE51bWJlclJpZ2h0KGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVExpdGVyYWxOdW1iZXIobGVmdCkpXG4gICAgICAgICAgICByZXR1cm4gVHlwZUV4dGVuZHNSZXN1bHQuVHJ1ZTtcbiAgICAgICAgcmV0dXJuIFR5cGVHdWFyZC5UTnVtYmVyKGxlZnQpIHx8IFR5cGVHdWFyZC5USW50ZWdlcihsZWZ0KSA/IFR5cGVFeHRlbmRzUmVzdWx0LlRydWUgOiBUeXBlRXh0ZW5kc1Jlc3VsdC5GYWxzZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gVE51bWJlcihsZWZ0LCByaWdodCkge1xuICAgICAgICBpZiAoSXNTdHJ1Y3R1cmFsUmlnaHQocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyYWxSaWdodChsZWZ0LCByaWdodCk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVE9iamVjdChyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVE9iamVjdFJpZ2h0KGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UUmVjb3JkKHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUUmVjb3JkUmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICByZXR1cm4gVHlwZUd1YXJkLlRJbnRlZ2VyKHJpZ2h0KSB8fCBUeXBlR3VhcmQuVE51bWJlcihyaWdodCkgPyBUeXBlRXh0ZW5kc1Jlc3VsdC5UcnVlIDogVHlwZUV4dGVuZHNSZXN1bHQuRmFsc2U7XG4gICAgfVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gT2JqZWN0XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBmdW5jdGlvbiBJc09iamVjdFByb3BlcnR5Q291bnQoc2NoZW1hLCBjb3VudCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc2NoZW1hLnByb3BlcnRpZXMpLmxlbmd0aCA9PT0gY291bnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIElzT2JqZWN0U3RyaW5nTGlrZShzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIElzT2JqZWN0QXJyYXlMaWtlKHNjaGVtYSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIElzT2JqZWN0U3ltYm9sTGlrZShzY2hlbWEpIHtcbiAgICAgICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgICAgIHJldHVybiBJc09iamVjdFByb3BlcnR5Q291bnQoc2NoZW1hLCAwKSB8fCAoSXNPYmplY3RQcm9wZXJ0eUNvdW50KHNjaGVtYSwgMSkgJiYgJ2Rlc2NyaXB0aW9uJyBpbiBzY2hlbWEucHJvcGVydGllcyAmJiBUeXBlR3VhcmQuVFVuaW9uKHNjaGVtYS5wcm9wZXJ0aWVzLmRlc2NyaXB0aW9uKSAmJiBzY2hlbWEucHJvcGVydGllcy5kZXNjcmlwdGlvbi5hbnlPZi5sZW5ndGggPT09IDIgJiYgKChUeXBlR3VhcmQuVFN0cmluZyhzY2hlbWEucHJvcGVydGllcy5kZXNjcmlwdGlvbi5hbnlPZlswXSkgJiZcbiAgICAgICAgICAgIFR5cGVHdWFyZC5UVW5kZWZpbmVkKHNjaGVtYS5wcm9wZXJ0aWVzLmRlc2NyaXB0aW9uLmFueU9mWzFdKSkgfHwgKFR5cGVHdWFyZC5UU3RyaW5nKHNjaGVtYS5wcm9wZXJ0aWVzLmRlc2NyaXB0aW9uLmFueU9mWzFdKSAmJlxuICAgICAgICAgICAgVHlwZUd1YXJkLlRVbmRlZmluZWQoc2NoZW1hLnByb3BlcnRpZXMuZGVzY3JpcHRpb24uYW55T2ZbMF0pKSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBJc09iamVjdE51bWJlckxpa2Uoc2NoZW1hKSB7XG4gICAgICAgIHJldHVybiBJc09iamVjdFByb3BlcnR5Q291bnQoc2NoZW1hLCAwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gSXNPYmplY3RCb29sZWFuTGlrZShzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIElzT2JqZWN0UHJvcGVydHlDb3VudChzY2hlbWEsIDApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBJc09iamVjdEJpZ0ludExpa2Uoc2NoZW1hKSB7XG4gICAgICAgIHJldHVybiBJc09iamVjdFByb3BlcnR5Q291bnQoc2NoZW1hLCAwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gSXNPYmplY3REYXRlTGlrZShzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIElzT2JqZWN0UHJvcGVydHlDb3VudChzY2hlbWEsIDApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBJc09iamVjdFVpbnQ4QXJyYXlMaWtlKHNjaGVtYSkge1xuICAgICAgICByZXR1cm4gSXNPYmplY3RBcnJheUxpa2Uoc2NoZW1hKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gSXNPYmplY3RGdW5jdGlvbkxpa2Uoc2NoZW1hKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGV4cG9ydHMuVHlwZS5OdW1iZXIoKTtcbiAgICAgICAgcmV0dXJuIElzT2JqZWN0UHJvcGVydHlDb3VudChzY2hlbWEsIDApIHx8IChJc09iamVjdFByb3BlcnR5Q291bnQoc2NoZW1hLCAxKSAmJiAnbGVuZ3RoJyBpbiBzY2hlbWEucHJvcGVydGllcyAmJiBJbnRvQm9vbGVhblJlc3VsdChWaXNpdChzY2hlbWEucHJvcGVydGllc1snbGVuZ3RoJ10sIGxlbmd0aCkpID09PSBUeXBlRXh0ZW5kc1Jlc3VsdC5UcnVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gSXNPYmplY3RDb25zdHJ1Y3Rvckxpa2Uoc2NoZW1hKSB7XG4gICAgICAgIHJldHVybiBJc09iamVjdFByb3BlcnR5Q291bnQoc2NoZW1hLCAwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gSXNPYmplY3RBcnJheUxpa2Uoc2NoZW1hKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGV4cG9ydHMuVHlwZS5OdW1iZXIoKTtcbiAgICAgICAgcmV0dXJuIElzT2JqZWN0UHJvcGVydHlDb3VudChzY2hlbWEsIDApIHx8IChJc09iamVjdFByb3BlcnR5Q291bnQoc2NoZW1hLCAxKSAmJiAnbGVuZ3RoJyBpbiBzY2hlbWEucHJvcGVydGllcyAmJiBJbnRvQm9vbGVhblJlc3VsdChWaXNpdChzY2hlbWEucHJvcGVydGllc1snbGVuZ3RoJ10sIGxlbmd0aCkpID09PSBUeXBlRXh0ZW5kc1Jlc3VsdC5UcnVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gSXNPYmplY3RQcm9taXNlTGlrZShzY2hlbWEpIHtcbiAgICAgICAgY29uc3QgdGhlbiA9IGV4cG9ydHMuVHlwZS5GdW5jdGlvbihbZXhwb3J0cy5UeXBlLkFueSgpXSwgZXhwb3J0cy5UeXBlLkFueSgpKTtcbiAgICAgICAgcmV0dXJuIElzT2JqZWN0UHJvcGVydHlDb3VudChzY2hlbWEsIDApIHx8IChJc09iamVjdFByb3BlcnR5Q291bnQoc2NoZW1hLCAxKSAmJiAndGhlbicgaW4gc2NoZW1hLnByb3BlcnRpZXMgJiYgSW50b0Jvb2xlYW5SZXN1bHQoVmlzaXQoc2NoZW1hLnByb3BlcnRpZXNbJ3RoZW4nXSwgdGhlbikpID09PSBUeXBlRXh0ZW5kc1Jlc3VsdC5UcnVlKTtcbiAgICB9XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBQcm9wZXJ0eVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgZnVuY3Rpb24gUHJvcGVydHkobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgaWYgKFZpc2l0KGxlZnQsIHJpZ2h0KSA9PT0gVHlwZUV4dGVuZHNSZXN1bHQuRmFsc2UpXG4gICAgICAgICAgICByZXR1cm4gVHlwZUV4dGVuZHNSZXN1bHQuRmFsc2U7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVE9wdGlvbmFsKGxlZnQpICYmICFUeXBlR3VhcmQuVE9wdGlvbmFsKHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUeXBlRXh0ZW5kc1Jlc3VsdC5GYWxzZTtcbiAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LlRydWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFRPYmplY3RSaWdodChsZWZ0LCByaWdodCkge1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRVbmtub3duKGxlZnQpKVxuICAgICAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRBbnkobGVmdCkpXG4gICAgICAgICAgICByZXR1cm4gVHlwZUV4dGVuZHNSZXN1bHQuVW5pb247XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVE5ldmVyKGxlZnQpKVxuICAgICAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LlRydWU7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVExpdGVyYWxTdHJpbmcobGVmdCkgJiYgSXNPYmplY3RTdHJpbmdMaWtlKHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUeXBlRXh0ZW5kc1Jlc3VsdC5UcnVlO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRMaXRlcmFsTnVtYmVyKGxlZnQpICYmIElzT2JqZWN0TnVtYmVyTGlrZShyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVHlwZUV4dGVuZHNSZXN1bHQuVHJ1ZTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UTGl0ZXJhbEJvb2xlYW4obGVmdCkgJiYgSXNPYmplY3RCb29sZWFuTGlrZShyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVHlwZUV4dGVuZHNSZXN1bHQuVHJ1ZTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UU3ltYm9sKGxlZnQpICYmIElzT2JqZWN0U3ltYm9sTGlrZShyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVHlwZUV4dGVuZHNSZXN1bHQuVHJ1ZTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UQmlnSW50KGxlZnQpICYmIElzT2JqZWN0QmlnSW50TGlrZShyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVHlwZUV4dGVuZHNSZXN1bHQuVHJ1ZTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UU3RyaW5nKGxlZnQpICYmIElzT2JqZWN0U3RyaW5nTGlrZShyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVHlwZUV4dGVuZHNSZXN1bHQuVHJ1ZTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UU3ltYm9sKGxlZnQpICYmIElzT2JqZWN0U3ltYm9sTGlrZShyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVHlwZUV4dGVuZHNSZXN1bHQuVHJ1ZTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UTnVtYmVyKGxlZnQpICYmIElzT2JqZWN0TnVtYmVyTGlrZShyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVHlwZUV4dGVuZHNSZXN1bHQuVHJ1ZTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5USW50ZWdlcihsZWZ0KSAmJiBJc09iamVjdE51bWJlckxpa2UocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LlRydWU7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVEJvb2xlYW4obGVmdCkgJiYgSXNPYmplY3RCb29sZWFuTGlrZShyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVHlwZUV4dGVuZHNSZXN1bHQuVHJ1ZTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UVWludDhBcnJheShsZWZ0KSAmJiBJc09iamVjdFVpbnQ4QXJyYXlMaWtlKHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUeXBlRXh0ZW5kc1Jlc3VsdC5UcnVlO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlREYXRlKGxlZnQpICYmIElzT2JqZWN0RGF0ZUxpa2UocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LlRydWU7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVENvbnN0cnVjdG9yKGxlZnQpICYmIElzT2JqZWN0Q29uc3RydWN0b3JMaWtlKHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUeXBlRXh0ZW5kc1Jlc3VsdC5UcnVlO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRGdW5jdGlvbihsZWZ0KSAmJiBJc09iamVjdEZ1bmN0aW9uTGlrZShyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVHlwZUV4dGVuZHNSZXN1bHQuVHJ1ZTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UUmVjb3JkKGxlZnQpICYmIFR5cGVHdWFyZC5UU3RyaW5nKFJlY29yZEtleShsZWZ0KSkpIHtcbiAgICAgICAgICAgIC8vIFdoZW4gZXhwcmVzc2luZyBhIFJlY29yZCB3aXRoIGxpdGVyYWwga2V5IHZhbHVlcywgdGhlIFJlY29yZCBpcyBjb252ZXJ0ZWQgaW50byBhIE9iamVjdCB3aXRoXG4gICAgICAgICAgICAvLyB0aGUgSGludCBhc3NpZ25lZCBhcyBgUmVjb3JkYC4gVGhpcyBpcyB1c2VkIHRvIGludmVydCB0aGUgZXh0ZW5kcyBsb2dpYy5cbiAgICAgICAgICAgIHJldHVybiByaWdodFtleHBvcnRzLkhpbnRdID09PSAnUmVjb3JkJyA/IFR5cGVFeHRlbmRzUmVzdWx0LlRydWUgOiBUeXBlRXh0ZW5kc1Jlc3VsdC5GYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVHlwZUd1YXJkLlRSZWNvcmQobGVmdCkgJiYgVHlwZUd1YXJkLlROdW1iZXIoUmVjb3JkS2V5KGxlZnQpKSkge1xuICAgICAgICAgICAgcmV0dXJuIElzT2JqZWN0UHJvcGVydHlDb3VudChyaWdodCwgMCkgPyBUeXBlRXh0ZW5kc1Jlc3VsdC5UcnVlIDogVHlwZUV4dGVuZHNSZXN1bHQuRmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBUT2JqZWN0KGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIGlmIChJc1N0cnVjdHVyYWxSaWdodChyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJhbFJpZ2h0KGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UUmVjb3JkKHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUUmVjb3JkUmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoIVR5cGVHdWFyZC5UT2JqZWN0KHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUeXBlRXh0ZW5kc1Jlc3VsdC5GYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocmlnaHQucHJvcGVydGllcykpIHtcbiAgICAgICAgICAgIGlmICghKGtleSBpbiBsZWZ0LnByb3BlcnRpZXMpKVxuICAgICAgICAgICAgICAgIHJldHVybiBUeXBlRXh0ZW5kc1Jlc3VsdC5GYWxzZTtcbiAgICAgICAgICAgIGlmIChQcm9wZXJ0eShsZWZ0LnByb3BlcnRpZXNba2V5XSwgcmlnaHQucHJvcGVydGllc1trZXldKSA9PT0gVHlwZUV4dGVuZHNSZXN1bHQuRmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gVHlwZUV4dGVuZHNSZXN1bHQuRmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LlRydWU7XG4gICAgfVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gUHJvbWlzZVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgZnVuY3Rpb24gVFByb21pc2UobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgaWYgKElzU3RydWN0dXJhbFJpZ2h0KHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmFsUmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRPYmplY3QocmlnaHQpICYmIElzT2JqZWN0UHJvbWlzZUxpa2UocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LlRydWU7XG4gICAgICAgIGlmICghVHlwZUd1YXJkLlRQcm9taXNlKHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUeXBlRXh0ZW5kc1Jlc3VsdC5GYWxzZTtcbiAgICAgICAgcmV0dXJuIEludG9Cb29sZWFuUmVzdWx0KFZpc2l0KGxlZnQuaXRlbSwgcmlnaHQuaXRlbSkpO1xuICAgIH1cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFJlY29yZFxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgZnVuY3Rpb24gUmVjb3JkS2V5KHNjaGVtYSkge1xuICAgICAgICBpZiAoZXhwb3J0cy5QYXR0ZXJuTnVtYmVyRXhhY3QgaW4gc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzKVxuICAgICAgICAgICAgcmV0dXJuIGV4cG9ydHMuVHlwZS5OdW1iZXIoKTtcbiAgICAgICAgaWYgKGV4cG9ydHMuUGF0dGVyblN0cmluZ0V4YWN0IGluIHNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcylcbiAgICAgICAgICAgIHJldHVybiBleHBvcnRzLlR5cGUuU3RyaW5nKCk7XG4gICAgICAgIHRocm93IEVycm9yKCdUeXBlRXh0ZW5kczogQ2Fubm90IGdldCByZWNvcmQga2V5Jyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFJlY29yZFZhbHVlKHNjaGVtYSkge1xuICAgICAgICBpZiAoZXhwb3J0cy5QYXR0ZXJuTnVtYmVyRXhhY3QgaW4gc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzKVxuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYS5wYXR0ZXJuUHJvcGVydGllc1tleHBvcnRzLlBhdHRlcm5OdW1iZXJFeGFjdF07XG4gICAgICAgIGlmIChleHBvcnRzLlBhdHRlcm5TdHJpbmdFeGFjdCBpbiBzY2hlbWEucGF0dGVyblByb3BlcnRpZXMpXG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzW2V4cG9ydHMuUGF0dGVyblN0cmluZ0V4YWN0XTtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ1R5cGVFeHRlbmRzOiBDYW5ub3QgZ2V0IHJlY29yZCB2YWx1ZScpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBUUmVjb3JkUmlnaHQobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgY29uc3QgS2V5ID0gUmVjb3JkS2V5KHJpZ2h0KTtcbiAgICAgICAgY29uc3QgVmFsdWUgPSBSZWNvcmRWYWx1ZShyaWdodCk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVExpdGVyYWxTdHJpbmcobGVmdCkgJiYgVHlwZUd1YXJkLlROdW1iZXIoS2V5KSAmJiBJbnRvQm9vbGVhblJlc3VsdChWaXNpdChsZWZ0LCBWYWx1ZSkpID09PSBUeXBlRXh0ZW5kc1Jlc3VsdC5UcnVlKVxuICAgICAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LlRydWU7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVFVpbnQ4QXJyYXkobGVmdCkgJiYgVHlwZUd1YXJkLlROdW1iZXIoS2V5KSlcbiAgICAgICAgICAgIHJldHVybiBWaXNpdChsZWZ0LCBWYWx1ZSk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVFN0cmluZyhsZWZ0KSAmJiBUeXBlR3VhcmQuVE51bWJlcihLZXkpKVxuICAgICAgICAgICAgcmV0dXJuIFZpc2l0KGxlZnQsIFZhbHVlKTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UQXJyYXkobGVmdCkgJiYgVHlwZUd1YXJkLlROdW1iZXIoS2V5KSlcbiAgICAgICAgICAgIHJldHVybiBWaXNpdChsZWZ0LCBWYWx1ZSk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVE9iamVjdChsZWZ0KSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobGVmdC5wcm9wZXJ0aWVzKSkge1xuICAgICAgICAgICAgICAgIGlmIChQcm9wZXJ0eShWYWx1ZSwgbGVmdC5wcm9wZXJ0aWVzW2tleV0pID09PSBUeXBlRXh0ZW5kc1Jlc3VsdC5GYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZUV4dGVuZHNSZXN1bHQuRmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LlRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBUUmVjb3JkKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIGNvbnN0IFZhbHVlID0gUmVjb3JkVmFsdWUobGVmdCk7XG4gICAgICAgIGlmIChJc1N0cnVjdHVyYWxSaWdodChyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJhbFJpZ2h0KGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UT2JqZWN0KHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUT2JqZWN0UmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoIVR5cGVHdWFyZC5UUmVjb3JkKHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUeXBlRXh0ZW5kc1Jlc3VsdC5GYWxzZTtcbiAgICAgICAgcmV0dXJuIFZpc2l0KFZhbHVlLCBSZWNvcmRWYWx1ZShyaWdodCkpO1xuICAgIH1cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFN0cmluZ1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgZnVuY3Rpb24gVFN0cmluZ1JpZ2h0KGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVExpdGVyYWwobGVmdCkgJiYgVmFsdWVHdWFyZC5Jc1N0cmluZyhsZWZ0LmNvbnN0KSlcbiAgICAgICAgICAgIHJldHVybiBUeXBlRXh0ZW5kc1Jlc3VsdC5UcnVlO1xuICAgICAgICByZXR1cm4gVHlwZUd1YXJkLlRTdHJpbmcobGVmdCkgPyBUeXBlRXh0ZW5kc1Jlc3VsdC5UcnVlIDogVHlwZUV4dGVuZHNSZXN1bHQuRmFsc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFRTdHJpbmcobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgaWYgKElzU3RydWN0dXJhbFJpZ2h0KHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmFsUmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRPYmplY3QocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFRPYmplY3RSaWdodChsZWZ0LCByaWdodCk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVFJlY29yZChyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVFJlY29yZFJpZ2h0KGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgcmV0dXJuIFR5cGVHdWFyZC5UU3RyaW5nKHJpZ2h0KSA/IFR5cGVFeHRlbmRzUmVzdWx0LlRydWUgOiBUeXBlRXh0ZW5kc1Jlc3VsdC5GYWxzZTtcbiAgICB9XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBTeW1ib2xcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGZ1bmN0aW9uIFRTeW1ib2wobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgaWYgKElzU3RydWN0dXJhbFJpZ2h0KHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmFsUmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRPYmplY3QocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFRPYmplY3RSaWdodChsZWZ0LCByaWdodCk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVFJlY29yZChyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVFJlY29yZFJpZ2h0KGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgcmV0dXJuIFR5cGVHdWFyZC5UU3ltYm9sKHJpZ2h0KSA/IFR5cGVFeHRlbmRzUmVzdWx0LlRydWUgOiBUeXBlRXh0ZW5kc1Jlc3VsdC5GYWxzZTtcbiAgICB9XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBUZW1wbGF0ZUxpdGVyYWxcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGZ1bmN0aW9uIFRUZW1wbGF0ZUxpdGVyYWwobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgLy8gVGVtcGxhdGVMaXRlcmFsIHR5cGVzIGFyZSByZXNvbHZlZCB0byBlaXRoZXIgdW5pb25zIGZvciBmaW5pdGUgZXhwcmVzc2lvbnMgb3Igc3RyaW5nXG4gICAgICAgIC8vIGZvciBpbmZpbml0ZSBleHByZXNzaW9ucy4gSGVyZSB3ZSBjYWxsIHRvIFRlbXBsYXRlTGl0ZXJhbFJlc29sdmVyIHRvIHJlc29sdmUgZm9yXG4gICAgICAgIC8vIGVpdGhlciB0eXBlIGFuZCBjb250aW51ZSBldmFsdWF0aW5nLlxuICAgICAgICBpZiAoVHlwZUd1YXJkLlRUZW1wbGF0ZUxpdGVyYWwobGVmdCkpXG4gICAgICAgICAgICByZXR1cm4gVmlzaXQoVGVtcGxhdGVMaXRlcmFsUmVzb2x2ZXIuUmVzb2x2ZShsZWZ0KSwgcmlnaHQpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRUZW1wbGF0ZUxpdGVyYWwocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFZpc2l0KGxlZnQsIFRlbXBsYXRlTGl0ZXJhbFJlc29sdmVyLlJlc29sdmUocmlnaHQpKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUeXBlRXh0ZW5kczogSW52YWxpZCBmYWxsdGhyb3VnaCBmb3IgVGVtcGxhdGVMaXRlcmFsYCk7XG4gICAgfVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gVHVwbGVcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGZ1bmN0aW9uIElzQXJyYXlPZlR1cGxlKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgICAgICByZXR1cm4gKFR5cGVHdWFyZC5UQXJyYXkocmlnaHQpICYmXG4gICAgICAgICAgICBsZWZ0Lml0ZW1zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIGxlZnQuaXRlbXMuZXZlcnkoKHNjaGVtYSkgPT4gVmlzaXQoc2NoZW1hLCByaWdodC5pdGVtcykgPT09IFR5cGVFeHRlbmRzUmVzdWx0LlRydWUpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gVFR1cGxlUmlnaHQobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UTmV2ZXIobGVmdCkpXG4gICAgICAgICAgICByZXR1cm4gVHlwZUV4dGVuZHNSZXN1bHQuVHJ1ZTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UVW5rbm93bihsZWZ0KSlcbiAgICAgICAgICAgIHJldHVybiBUeXBlRXh0ZW5kc1Jlc3VsdC5GYWxzZTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UQW55KGxlZnQpKVxuICAgICAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LlVuaW9uO1xuICAgICAgICByZXR1cm4gVHlwZUV4dGVuZHNSZXN1bHQuRmFsc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFRUdXBsZShsZWZ0LCByaWdodCkge1xuICAgICAgICBpZiAoSXNTdHJ1Y3R1cmFsUmlnaHQocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyYWxSaWdodChsZWZ0LCByaWdodCk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVE9iamVjdChyaWdodCkgJiYgSXNPYmplY3RBcnJheUxpa2UocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LlRydWU7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVEFycmF5KHJpZ2h0KSAmJiBJc0FycmF5T2ZUdXBsZShsZWZ0LCByaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVHlwZUV4dGVuZHNSZXN1bHQuVHJ1ZTtcbiAgICAgICAgaWYgKCFUeXBlR3VhcmQuVFR1cGxlKHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUeXBlRXh0ZW5kc1Jlc3VsdC5GYWxzZTtcbiAgICAgICAgaWYgKChWYWx1ZUd1YXJkLklzVW5kZWZpbmVkKGxlZnQuaXRlbXMpICYmICFWYWx1ZUd1YXJkLklzVW5kZWZpbmVkKHJpZ2h0Lml0ZW1zKSkgfHwgKCFWYWx1ZUd1YXJkLklzVW5kZWZpbmVkKGxlZnQuaXRlbXMpICYmIFZhbHVlR3VhcmQuSXNVbmRlZmluZWQocmlnaHQuaXRlbXMpKSlcbiAgICAgICAgICAgIHJldHVybiBUeXBlRXh0ZW5kc1Jlc3VsdC5GYWxzZTtcbiAgICAgICAgaWYgKFZhbHVlR3VhcmQuSXNVbmRlZmluZWQobGVmdC5pdGVtcykgJiYgIVZhbHVlR3VhcmQuSXNVbmRlZmluZWQocmlnaHQuaXRlbXMpKVxuICAgICAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LlRydWU7XG4gICAgICAgIHJldHVybiBsZWZ0Lml0ZW1zLmV2ZXJ5KChzY2hlbWEsIGluZGV4KSA9PiBWaXNpdChzY2hlbWEsIHJpZ2h0Lml0ZW1zW2luZGV4XSkgPT09IFR5cGVFeHRlbmRzUmVzdWx0LlRydWUpID8gVHlwZUV4dGVuZHNSZXN1bHQuVHJ1ZSA6IFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlO1xuICAgIH1cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFVpbnQ4QXJyYXlcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGZ1bmN0aW9uIFRVaW50OEFycmF5KGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIGlmIChJc1N0cnVjdHVyYWxSaWdodChyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJhbFJpZ2h0KGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UT2JqZWN0KHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUT2JqZWN0UmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRSZWNvcmQocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFRSZWNvcmRSaWdodChsZWZ0LCByaWdodCk7XG4gICAgICAgIHJldHVybiBUeXBlR3VhcmQuVFVpbnQ4QXJyYXkocmlnaHQpID8gVHlwZUV4dGVuZHNSZXN1bHQuVHJ1ZSA6IFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlO1xuICAgIH1cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFVuZGVmaW5lZFxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgZnVuY3Rpb24gVFVuZGVmaW5lZChsZWZ0LCByaWdodCkge1xuICAgICAgICBpZiAoSXNTdHJ1Y3R1cmFsUmlnaHQocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyYWxSaWdodChsZWZ0LCByaWdodCk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVE9iamVjdChyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVE9iamVjdFJpZ2h0KGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UUmVjb3JkKHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUUmVjb3JkUmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRWb2lkKHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBWb2lkUmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICByZXR1cm4gVHlwZUd1YXJkLlRVbmRlZmluZWQocmlnaHQpID8gVHlwZUV4dGVuZHNSZXN1bHQuVHJ1ZSA6IFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlO1xuICAgIH1cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFVuaW9uXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBmdW5jdGlvbiBUVW5pb25SaWdodChsZWZ0LCByaWdodCkge1xuICAgICAgICByZXR1cm4gcmlnaHQuYW55T2Yuc29tZSgoc2NoZW1hKSA9PiBWaXNpdChsZWZ0LCBzY2hlbWEpID09PSBUeXBlRXh0ZW5kc1Jlc3VsdC5UcnVlKSA/IFR5cGVFeHRlbmRzUmVzdWx0LlRydWUgOiBUeXBlRXh0ZW5kc1Jlc3VsdC5GYWxzZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gVFVuaW9uKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIHJldHVybiBsZWZ0LmFueU9mLmV2ZXJ5KChzY2hlbWEpID0+IFZpc2l0KHNjaGVtYSwgcmlnaHQpID09PSBUeXBlRXh0ZW5kc1Jlc3VsdC5UcnVlKSA/IFR5cGVFeHRlbmRzUmVzdWx0LlRydWUgOiBUeXBlRXh0ZW5kc1Jlc3VsdC5GYWxzZTtcbiAgICB9XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBVbmtub3duXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBmdW5jdGlvbiBUVW5rbm93blJpZ2h0KGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIHJldHVybiBUeXBlRXh0ZW5kc1Jlc3VsdC5UcnVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBUVW5rbm93bihsZWZ0LCByaWdodCkge1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlROZXZlcihyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVE5ldmVyUmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRJbnRlcnNlY3QocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFRJbnRlcnNlY3RSaWdodChsZWZ0LCByaWdodCk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVFVuaW9uKHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUVW5pb25SaWdodChsZWZ0LCByaWdodCk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVEFueShyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVEFueVJpZ2h0KGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UU3RyaW5nKHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUU3RyaW5nUmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlROdW1iZXIocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFROdW1iZXJSaWdodChsZWZ0LCByaWdodCk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVEludGVnZXIocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFRJbnRlZ2VyUmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRCb29sZWFuKHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUQm9vbGVhblJpZ2h0KGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UQXJyYXkocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFRBcnJheVJpZ2h0KGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UVHVwbGUocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFRUdXBsZVJpZ2h0KGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UT2JqZWN0KHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUT2JqZWN0UmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICByZXR1cm4gVHlwZUd1YXJkLlRVbmtub3duKHJpZ2h0KSA/IFR5cGVFeHRlbmRzUmVzdWx0LlRydWUgOiBUeXBlRXh0ZW5kc1Jlc3VsdC5GYWxzZTtcbiAgICB9XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBWb2lkXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBmdW5jdGlvbiBWb2lkUmlnaHQobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UVW5kZWZpbmVkKGxlZnQpKVxuICAgICAgICAgICAgcmV0dXJuIFR5cGVFeHRlbmRzUmVzdWx0LlRydWU7XG4gICAgICAgIHJldHVybiBUeXBlR3VhcmQuVFVuZGVmaW5lZChsZWZ0KSA/IFR5cGVFeHRlbmRzUmVzdWx0LlRydWUgOiBUeXBlRXh0ZW5kc1Jlc3VsdC5GYWxzZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gVFZvaWQobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5USW50ZXJzZWN0KHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUSW50ZXJzZWN0UmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRVbmlvbihyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVFVuaW9uUmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRVbmtub3duKHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUVW5rbm93blJpZ2h0KGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UQW55KHJpZ2h0KSlcbiAgICAgICAgICAgIHJldHVybiBUQW55UmlnaHQobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRPYmplY3QocmlnaHQpKVxuICAgICAgICAgICAgcmV0dXJuIFRPYmplY3RSaWdodChsZWZ0LCByaWdodCk7XG4gICAgICAgIHJldHVybiBUeXBlR3VhcmQuVFZvaWQocmlnaHQpID8gVHlwZUV4dGVuZHNSZXN1bHQuVHJ1ZSA6IFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBWaXNpdChsZWZ0LCByaWdodCkge1xuICAgICAgICAvLyBSZXNvbHZhYmxlIFR5cGVzXG4gICAgICAgIGlmIChUeXBlR3VhcmQuVFRlbXBsYXRlTGl0ZXJhbChsZWZ0KSB8fCBUeXBlR3VhcmQuVFRlbXBsYXRlTGl0ZXJhbChyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVFRlbXBsYXRlTGl0ZXJhbChsZWZ0LCByaWdodCk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVE5vdChsZWZ0KSB8fCBUeXBlR3VhcmQuVE5vdChyaWdodCkpXG4gICAgICAgICAgICByZXR1cm4gVE5vdChsZWZ0LCByaWdodCk7XG4gICAgICAgIC8vIFN0YW5kYXJkIFR5cGVzXG4gICAgICAgIGlmIChUeXBlR3VhcmQuVEFueShsZWZ0KSlcbiAgICAgICAgICAgIHJldHVybiBUQW55KGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UQXJyYXkobGVmdCkpXG4gICAgICAgICAgICByZXR1cm4gVEFycmF5KGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UQmlnSW50KGxlZnQpKVxuICAgICAgICAgICAgcmV0dXJuIFRCaWdJbnQobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRCb29sZWFuKGxlZnQpKVxuICAgICAgICAgICAgcmV0dXJuIFRCb29sZWFuKGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UQXN5bmNJdGVyYXRvcihsZWZ0KSlcbiAgICAgICAgICAgIHJldHVybiBUQXN5bmNJdGVyYXRvcihsZWZ0LCByaWdodCk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVENvbnN0cnVjdG9yKGxlZnQpKVxuICAgICAgICAgICAgcmV0dXJuIFRDb25zdHJ1Y3RvcihsZWZ0LCByaWdodCk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVERhdGUobGVmdCkpXG4gICAgICAgICAgICByZXR1cm4gVERhdGUobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRGdW5jdGlvbihsZWZ0KSlcbiAgICAgICAgICAgIHJldHVybiBURnVuY3Rpb24obGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRJbnRlZ2VyKGxlZnQpKVxuICAgICAgICAgICAgcmV0dXJuIFRJbnRlZ2VyKGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5USW50ZXJzZWN0KGxlZnQpKVxuICAgICAgICAgICAgcmV0dXJuIFRJbnRlcnNlY3QobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRJdGVyYXRvcihsZWZ0KSlcbiAgICAgICAgICAgIHJldHVybiBUSXRlcmF0b3IobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRMaXRlcmFsKGxlZnQpKVxuICAgICAgICAgICAgcmV0dXJuIFRMaXRlcmFsKGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UTmV2ZXIobGVmdCkpXG4gICAgICAgICAgICByZXR1cm4gVE5ldmVyKGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UTnVsbChsZWZ0KSlcbiAgICAgICAgICAgIHJldHVybiBUTnVsbChsZWZ0LCByaWdodCk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVE51bWJlcihsZWZ0KSlcbiAgICAgICAgICAgIHJldHVybiBUTnVtYmVyKGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UT2JqZWN0KGxlZnQpKVxuICAgICAgICAgICAgcmV0dXJuIFRPYmplY3QobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRSZWNvcmQobGVmdCkpXG4gICAgICAgICAgICByZXR1cm4gVFJlY29yZChsZWZ0LCByaWdodCk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVFN0cmluZyhsZWZ0KSlcbiAgICAgICAgICAgIHJldHVybiBUU3RyaW5nKGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UU3ltYm9sKGxlZnQpKVxuICAgICAgICAgICAgcmV0dXJuIFRTeW1ib2wobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRUdXBsZShsZWZ0KSlcbiAgICAgICAgICAgIHJldHVybiBUVHVwbGUobGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRQcm9taXNlKGxlZnQpKVxuICAgICAgICAgICAgcmV0dXJuIFRQcm9taXNlKGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UVWludDhBcnJheShsZWZ0KSlcbiAgICAgICAgICAgIHJldHVybiBUVWludDhBcnJheShsZWZ0LCByaWdodCk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVFVuZGVmaW5lZChsZWZ0KSlcbiAgICAgICAgICAgIHJldHVybiBUVW5kZWZpbmVkKGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UVW5pb24obGVmdCkpXG4gICAgICAgICAgICByZXR1cm4gVFVuaW9uKGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UVW5rbm93bihsZWZ0KSlcbiAgICAgICAgICAgIHJldHVybiBUVW5rbm93bihsZWZ0LCByaWdodCk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVFZvaWQobGVmdCkpXG4gICAgICAgICAgICByZXR1cm4gVFZvaWQobGVmdCwgcmlnaHQpO1xuICAgICAgICB0aHJvdyBFcnJvcihgVHlwZUV4dGVuZHM6IFVua25vd24gbGVmdCB0eXBlIG9wZXJhbmQgJyR7bGVmdFtleHBvcnRzLktpbmRdfSdgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gRXh0ZW5kcyhsZWZ0LCByaWdodCkge1xuICAgICAgICByZXR1cm4gVmlzaXQobGVmdCwgcmlnaHQpO1xuICAgIH1cbiAgICBUeXBlRXh0ZW5kcy5FeHRlbmRzID0gRXh0ZW5kcztcbn0pKFR5cGVFeHRlbmRzIHx8IChleHBvcnRzLlR5cGVFeHRlbmRzID0gVHlwZUV4dGVuZHMgPSB7fSkpO1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFR5cGVDbG9uZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8qKiBTcGVjaWFsaXplZCBDbG9uZSBmb3IgVHlwZXMgKi9cbnZhciBUeXBlQ2xvbmU7XG4oZnVuY3Rpb24gKFR5cGVDbG9uZSkge1xuICAgIGZ1bmN0aW9uIE9iamVjdFR5cGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgY2xvbmVkUHJvcGVydGllcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKS5yZWR1Y2UoKGFjYywga2V5KSA9PiAoeyAuLi5hY2MsIFtrZXldOiBWaXNpdCh2YWx1ZVtrZXldKSB9KSwge30pO1xuICAgICAgICBjb25zdCBjbG9uZWRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh2YWx1ZSkucmVkdWNlKChhY2MsIGtleSkgPT4gKHsgLi4uYWNjLCBba2V5XTogVmlzaXQodmFsdWVba2V5XSkgfSksIHt9KTtcbiAgICAgICAgcmV0dXJuIHsgLi4uY2xvbmVkUHJvcGVydGllcywgLi4uY2xvbmVkU3ltYm9scyB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBBcnJheVR5cGUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLm1hcCgodmFsdWUpID0+IFZpc2l0KHZhbHVlKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFZpc2l0KHZhbHVlKSB7XG4gICAgICAgIGlmIChWYWx1ZUd1YXJkLklzQXJyYXkodmFsdWUpKVxuICAgICAgICAgICAgcmV0dXJuIEFycmF5VHlwZSh2YWx1ZSk7XG4gICAgICAgIGlmIChWYWx1ZUd1YXJkLklzT2JqZWN0KHZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybiBPYmplY3RUeXBlKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICAvKiogQ2xvbmVzIGEgdHlwZS4gKi9cbiAgICBmdW5jdGlvbiBDbG9uZShzY2hlbWEsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4geyAuLi5WaXNpdChzY2hlbWEpLCAuLi5vcHRpb25zIH07XG4gICAgfVxuICAgIFR5cGVDbG9uZS5DbG9uZSA9IENsb25lO1xufSkoVHlwZUNsb25lIHx8IChleHBvcnRzLlR5cGVDbG9uZSA9IFR5cGVDbG9uZSA9IHt9KSk7XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gSW5kZXhlZEFjY2Vzc29yXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIEluZGV4ZWRBY2Nlc3NvcjtcbihmdW5jdGlvbiAoSW5kZXhlZEFjY2Vzc29yKSB7XG4gICAgZnVuY3Rpb24gT3B0aW9uYWxVbndyYXAoc2NoZW1hKSB7XG4gICAgICAgIHJldHVybiBzY2hlbWEubWFwKChzY2hlbWEpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgW2V4cG9ydHMuT3B0aW9uYWxdOiBfLCAuLi5jbG9uZSB9ID0gVHlwZUNsb25lLkNsb25lKHNjaGVtYSk7XG4gICAgICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBJc0ludGVyc2VjdE9wdGlvbmFsKHNjaGVtYSkge1xuICAgICAgICByZXR1cm4gc2NoZW1hLmV2ZXJ5KChzY2hlbWEpID0+IFR5cGVHdWFyZC5UT3B0aW9uYWwoc2NoZW1hKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIElzVW5pb25PcHRpb25hbChzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVtYS5zb21lKChzY2hlbWEpID0+IFR5cGVHdWFyZC5UT3B0aW9uYWwoc2NoZW1hKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFJlc29sdmVJbnRlcnNlY3Qoc2NoZW1hKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbmFsID0gSXNJbnRlcnNlY3RPcHRpb25hbChzY2hlbWEuYWxsT2YpO1xuICAgICAgICByZXR1cm4gb3B0aW9uYWwgPyBleHBvcnRzLlR5cGUuT3B0aW9uYWwoZXhwb3J0cy5UeXBlLkludGVyc2VjdChPcHRpb25hbFVud3JhcChzY2hlbWEuYWxsT2YpKSkgOiBzY2hlbWE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFJlc29sdmVVbmlvbihzY2hlbWEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uYWwgPSBJc1VuaW9uT3B0aW9uYWwoc2NoZW1hLmFueU9mKTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbmFsID8gZXhwb3J0cy5UeXBlLk9wdGlvbmFsKGV4cG9ydHMuVHlwZS5VbmlvbihPcHRpb25hbFVud3JhcChzY2hlbWEuYW55T2YpKSkgOiBzY2hlbWE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFJlc29sdmVPcHRpb25hbChzY2hlbWEpIHtcbiAgICAgICAgaWYgKHNjaGVtYVtleHBvcnRzLktpbmRdID09PSAnSW50ZXJzZWN0JylcbiAgICAgICAgICAgIHJldHVybiBSZXNvbHZlSW50ZXJzZWN0KHNjaGVtYSk7XG4gICAgICAgIGlmIChzY2hlbWFbZXhwb3J0cy5LaW5kXSA9PT0gJ1VuaW9uJylcbiAgICAgICAgICAgIHJldHVybiBSZXNvbHZlVW5pb24oc2NoZW1hKTtcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICB9XG4gICAgZnVuY3Rpb24gVEludGVyc2VjdChzY2hlbWEsIGtleSkge1xuICAgICAgICBjb25zdCByZXNvbHZlZCA9IHNjaGVtYS5hbGxPZi5yZWR1Y2UoKGFjYywgc2NoZW1hKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleGVkID0gVmlzaXQoc2NoZW1hLCBrZXkpO1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4ZWRbZXhwb3J0cy5LaW5kXSA9PT0gJ05ldmVyJyA/IGFjYyA6IFsuLi5hY2MsIGluZGV4ZWRdO1xuICAgICAgICB9LCBbXSk7XG4gICAgICAgIHJldHVybiBSZXNvbHZlT3B0aW9uYWwoZXhwb3J0cy5UeXBlLkludGVyc2VjdChyZXNvbHZlZCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBUVW5pb24oc2NoZW1hLCBrZXkpIHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSBzY2hlbWEuYW55T2YubWFwKChzY2hlbWEpID0+IFZpc2l0KHNjaGVtYSwga2V5KSk7XG4gICAgICAgIHJldHVybiBSZXNvbHZlT3B0aW9uYWwoZXhwb3J0cy5UeXBlLlVuaW9uKHJlc29sdmVkKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFRPYmplY3Qoc2NoZW1hLCBrZXkpIHtcbiAgICAgICAgY29uc3QgcHJvcGVydHkgPSBzY2hlbWEucHJvcGVydGllc1trZXldO1xuICAgICAgICByZXR1cm4gVmFsdWVHdWFyZC5Jc1VuZGVmaW5lZChwcm9wZXJ0eSkgPyBleHBvcnRzLlR5cGUuTmV2ZXIoKSA6IGV4cG9ydHMuVHlwZS5VbmlvbihbcHJvcGVydHldKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gVFR1cGxlKHNjaGVtYSwga2V5KSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gc2NoZW1hLml0ZW1zO1xuICAgICAgICBpZiAoVmFsdWVHdWFyZC5Jc1VuZGVmaW5lZChpdGVtcykpXG4gICAgICAgICAgICByZXR1cm4gZXhwb3J0cy5UeXBlLk5ldmVyKCk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBpdGVtc1trZXldOyAvL1xuICAgICAgICBpZiAoVmFsdWVHdWFyZC5Jc1VuZGVmaW5lZChlbGVtZW50KSlcbiAgICAgICAgICAgIHJldHVybiBleHBvcnRzLlR5cGUuTmV2ZXIoKTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFZpc2l0KHNjaGVtYSwga2V5KSB7XG4gICAgICAgIGlmIChzY2hlbWFbZXhwb3J0cy5LaW5kXSA9PT0gJ0ludGVyc2VjdCcpXG4gICAgICAgICAgICByZXR1cm4gVEludGVyc2VjdChzY2hlbWEsIGtleSk7XG4gICAgICAgIGlmIChzY2hlbWFbZXhwb3J0cy5LaW5kXSA9PT0gJ1VuaW9uJylcbiAgICAgICAgICAgIHJldHVybiBUVW5pb24oc2NoZW1hLCBrZXkpO1xuICAgICAgICBpZiAoc2NoZW1hW2V4cG9ydHMuS2luZF0gPT09ICdPYmplY3QnKVxuICAgICAgICAgICAgcmV0dXJuIFRPYmplY3Qoc2NoZW1hLCBrZXkpO1xuICAgICAgICBpZiAoc2NoZW1hW2V4cG9ydHMuS2luZF0gPT09ICdUdXBsZScpXG4gICAgICAgICAgICByZXR1cm4gVFR1cGxlKHNjaGVtYSwga2V5KTtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuVHlwZS5OZXZlcigpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBSZXNvbHZlKHNjaGVtYSwga2V5cywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0ga2V5cy5tYXAoKGtleSkgPT4gVmlzaXQoc2NoZW1hLCBrZXkudG9TdHJpbmcoKSkpO1xuICAgICAgICByZXR1cm4gUmVzb2x2ZU9wdGlvbmFsKGV4cG9ydHMuVHlwZS5VbmlvbihyZXNvbHZlZCwgb3B0aW9ucykpO1xuICAgIH1cbiAgICBJbmRleGVkQWNjZXNzb3IuUmVzb2x2ZSA9IFJlc29sdmU7XG59KShJbmRleGVkQWNjZXNzb3IgfHwgKGV4cG9ydHMuSW5kZXhlZEFjY2Vzc29yID0gSW5kZXhlZEFjY2Vzc29yID0ge30pKTtcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBJbnRyaW5zaWNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgSW50cmluc2ljO1xuKGZ1bmN0aW9uIChJbnRyaW5zaWMpIHtcbiAgICBmdW5jdGlvbiBVbmNhcGl0YWxpemUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgW2ZpcnN0LCByZXN0XSA9IFt2YWx1ZS5zbGljZSgwLCAxKSwgdmFsdWUuc2xpY2UoMSldO1xuICAgICAgICByZXR1cm4gYCR7Zmlyc3QudG9Mb3dlckNhc2UoKX0ke3Jlc3R9YDtcbiAgICB9XG4gICAgZnVuY3Rpb24gQ2FwaXRhbGl6ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBbZmlyc3QsIHJlc3RdID0gW3ZhbHVlLnNsaWNlKDAsIDEpLCB2YWx1ZS5zbGljZSgxKV07XG4gICAgICAgIHJldHVybiBgJHtmaXJzdC50b1VwcGVyQ2FzZSgpfSR7cmVzdH1gO1xuICAgIH1cbiAgICBmdW5jdGlvbiBVcHBlcmNhc2UodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnRvVXBwZXJDYXNlKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIExvd2VyY2FzZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gSW50cmluc2ljVGVtcGxhdGVMaXRlcmFsKHNjaGVtYSwgbW9kZSkge1xuICAgICAgICAvLyBub3RlOiB0ZW1wbGF0ZSBsaXRlcmFscyByZXF1aXJlIHNwZWNpYWwgcnVudGltZSBoYW5kbGluZyBhcyB0aGV5IGFyZSBlbmNvZGVkIGluIHN0cmluZyBwYXR0ZXJucy5cbiAgICAgICAgLy8gVGhpcyBkaXZlcmdlcyBmcm9tIHRoZSBtYXBwZWQgdHlwZSB3aGljaCB3b3VsZCBvdGhlcndpc2UgbWFwIG9uIHRoZSB0ZW1wbGF0ZSBsaXRlcmFsIGtpbmQuXG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBUZW1wbGF0ZUxpdGVyYWxQYXJzZXIuUGFyc2VFeGFjdChzY2hlbWEucGF0dGVybik7XG4gICAgICAgIGNvbnN0IGZpbml0ZSA9IFRlbXBsYXRlTGl0ZXJhbEZpbml0ZS5DaGVjayhleHByZXNzaW9uKTtcbiAgICAgICAgaWYgKCFmaW5pdGUpXG4gICAgICAgICAgICByZXR1cm4geyAuLi5zY2hlbWEsIHBhdHRlcm46IEludHJpbnNpY0xpdGVyYWwoc2NoZW1hLnBhdHRlcm4sIG1vZGUpIH07XG4gICAgICAgIGNvbnN0IHN0cmluZ3MgPSBbLi4uVGVtcGxhdGVMaXRlcmFsR2VuZXJhdG9yLkdlbmVyYXRlKGV4cHJlc3Npb24pXTtcbiAgICAgICAgY29uc3QgbGl0ZXJhbHMgPSBzdHJpbmdzLm1hcCgodmFsdWUpID0+IGV4cG9ydHMuVHlwZS5MaXRlcmFsKHZhbHVlKSk7XG4gICAgICAgIGNvbnN0IG1hcHBlZCA9IEludHJpbnNpY1Jlc3QobGl0ZXJhbHMsIG1vZGUpO1xuICAgICAgICBjb25zdCB1bmlvbiA9IGV4cG9ydHMuVHlwZS5VbmlvbihtYXBwZWQpO1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5UeXBlLlRlbXBsYXRlTGl0ZXJhbChbdW5pb25dKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gSW50cmluc2ljTGl0ZXJhbCh2YWx1ZSwgbW9kZSkge1xuICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyAobW9kZSA9PT0gJ1VuY2FwaXRhbGl6ZScgPyBVbmNhcGl0YWxpemUodmFsdWUpIDpcbiAgICAgICAgICAgIG1vZGUgPT09ICdDYXBpdGFsaXplJyA/IENhcGl0YWxpemUodmFsdWUpIDpcbiAgICAgICAgICAgICAgICBtb2RlID09PSAnVXBwZXJjYXNlJyA/IFVwcGVyY2FzZSh2YWx1ZSkgOlxuICAgICAgICAgICAgICAgICAgICBtb2RlID09PSAnTG93ZXJjYXNlJyA/IExvd2VyY2FzZSh2YWx1ZSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUpIDogdmFsdWUudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gSW50cmluc2ljUmVzdChzY2hlbWEsIG1vZGUpIHtcbiAgICAgICAgaWYgKHNjaGVtYS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIGNvbnN0IFtMLCAuLi5SXSA9IHNjaGVtYTtcbiAgICAgICAgcmV0dXJuIFtNYXAoTCwgbW9kZSksIC4uLkludHJpbnNpY1Jlc3QoUiwgbW9kZSldO1xuICAgIH1cbiAgICBmdW5jdGlvbiBWaXNpdChzY2hlbWEsIG1vZGUpIHtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UVGVtcGxhdGVMaXRlcmFsKHNjaGVtYSkpXG4gICAgICAgICAgICByZXR1cm4gSW50cmluc2ljVGVtcGxhdGVMaXRlcmFsKHNjaGVtYSwgbW9kZSk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVFVuaW9uKHNjaGVtYSkpXG4gICAgICAgICAgICByZXR1cm4gZXhwb3J0cy5UeXBlLlVuaW9uKEludHJpbnNpY1Jlc3Qoc2NoZW1hLmFueU9mLCBtb2RlKSk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVExpdGVyYWwoc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybiBleHBvcnRzLlR5cGUuTGl0ZXJhbChJbnRyaW5zaWNMaXRlcmFsKHNjaGVtYS5jb25zdCwgbW9kZSkpO1xuICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgIH1cbiAgICAvKiogQXBwbGllcyBhbiBpbnRyaW5zaWMgc3RyaW5nIG1hbmlwdWxhdGlvbiB0byB0aGUgZ2l2ZW4gdHlwZS4gKi9cbiAgICBmdW5jdGlvbiBNYXAoc2NoZW1hLCBtb2RlKSB7XG4gICAgICAgIHJldHVybiBWaXNpdChzY2hlbWEsIG1vZGUpO1xuICAgIH1cbiAgICBJbnRyaW5zaWMuTWFwID0gTWFwO1xufSkoSW50cmluc2ljIHx8IChleHBvcnRzLkludHJpbnNpYyA9IEludHJpbnNpYyA9IHt9KSk7XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gT2JqZWN0TWFwXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIE9iamVjdE1hcDtcbihmdW5jdGlvbiAoT2JqZWN0TWFwKSB7XG4gICAgZnVuY3Rpb24gVEludGVyc2VjdChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gICAgICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgICAgICByZXR1cm4gZXhwb3J0cy5UeXBlLkludGVyc2VjdChzY2hlbWEuYWxsT2YubWFwKChpbm5lcikgPT4gVmlzaXQoaW5uZXIsIGNhbGxiYWNrKSksIHsgLi4uc2NoZW1hIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBUVW5pb24oc2NoZW1hLCBjYWxsYmFjaykge1xuICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuVHlwZS5VbmlvbihzY2hlbWEuYW55T2YubWFwKChpbm5lcikgPT4gVmlzaXQoaW5uZXIsIGNhbGxiYWNrKSksIHsgLi4uc2NoZW1hIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBUT2JqZWN0KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHNjaGVtYSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFZpc2l0KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgICAgICAgLy8gVGhlcmUgYXJlIGNhc2VzIHdoZXJlIHVzZXJzIG5lZWQgdG8gbWFwIG9iamVjdHMgd2l0aCB1bnJlZ2lzdGVyZWQga2luZHMuIFVzaW5nIGEgVHlwZUd1YXJkIGhlcmUgd291bGRcbiAgICAgICAgLy8gcHJldmVudCBzdWIgc2NoZW1hIG1hcHBpbmcgYXMgdW5yZWdpc3RlcmVkIGtpbmRzIHdpbGwgbm90IHBhc3MgVFNjaGVtYSBjaGVja3MuIFRoaXMgaXMgbm90YWJsZSBpbiB0aGVcbiAgICAgICAgLy8gY2FzZSBvZiBUT2JqZWN0IHdoZXJlIHVucmVnaXN0ZXJlZCBwcm9wZXJ0eSBraW5kcyBjYXVzZSB0aGUgVE9iamVjdCBjaGVjayB0byBmYWlsLiBBcyBtYXBwaW5nIGlzIG9ubHlcbiAgICAgICAgLy8gdXNlZCBmb3IgY29tcG9zaXRpb24sIHdlIHVzZSBleHBsaWNpdCBjaGVja3MgaW5zdGVhZC5cbiAgICAgICAgaWYgKHNjaGVtYVtleHBvcnRzLktpbmRdID09PSAnSW50ZXJzZWN0JylcbiAgICAgICAgICAgIHJldHVybiBUSW50ZXJzZWN0KHNjaGVtYSwgY2FsbGJhY2spO1xuICAgICAgICBpZiAoc2NoZW1hW2V4cG9ydHMuS2luZF0gPT09ICdVbmlvbicpXG4gICAgICAgICAgICByZXR1cm4gVFVuaW9uKHNjaGVtYSwgY2FsbGJhY2spO1xuICAgICAgICBpZiAoc2NoZW1hW2V4cG9ydHMuS2luZF0gPT09ICdPYmplY3QnKVxuICAgICAgICAgICAgcmV0dXJuIFRPYmplY3Qoc2NoZW1hLCBjYWxsYmFjayk7XG4gICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIE1hcChzY2hlbWEsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB7IC4uLlZpc2l0KFR5cGVDbG9uZS5DbG9uZShzY2hlbWEpLCBjYWxsYmFjayksIC4uLm9wdGlvbnMgfTtcbiAgICB9XG4gICAgT2JqZWN0TWFwLk1hcCA9IE1hcDtcbn0pKE9iamVjdE1hcCB8fCAoZXhwb3J0cy5PYmplY3RNYXAgPSBPYmplY3RNYXAgPSB7fSkpO1xudmFyIEtleVJlc29sdmVyO1xuKGZ1bmN0aW9uIChLZXlSZXNvbHZlcikge1xuICAgIGZ1bmN0aW9uIFVud3JhcFBhdHRlcm4oa2V5KSB7XG4gICAgICAgIHJldHVybiBrZXlbMF0gPT09ICdeJyAmJiBrZXlba2V5Lmxlbmd0aCAtIDFdID09PSAnJCcgPyBrZXkuc2xpY2UoMSwga2V5Lmxlbmd0aCAtIDEpIDoga2V5O1xuICAgIH1cbiAgICBmdW5jdGlvbiBUSW50ZXJzZWN0KHNjaGVtYSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gc2NoZW1hLmFsbE9mLnJlZHVjZSgoYWNjLCBzY2hlbWEpID0+IFsuLi5hY2MsIC4uLlZpc2l0KHNjaGVtYSwgb3B0aW9ucyldLCBbXSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFRVbmlvbihzY2hlbWEsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgc2V0cyA9IHNjaGVtYS5hbnlPZi5tYXAoKGlubmVyKSA9PiBWaXNpdChpbm5lciwgb3B0aW9ucykpO1xuICAgICAgICByZXR1cm4gWy4uLnNldHMucmVkdWNlKChzZXQsIG91dGVyKSA9PiBvdXRlci5tYXAoKGtleSkgPT4gKHNldHMuZXZlcnkoKGlubmVyKSA9PiBpbm5lci5pbmNsdWRlcyhrZXkpKSA/IHNldC5hZGQoa2V5KSA6IHNldCkpWzBdLCBuZXcgU2V0KCkpXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gVE9iamVjdChzY2hlbWEsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNjaGVtYS5wcm9wZXJ0aWVzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gVFJlY29yZChzY2hlbWEsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuaW5jbHVkZVBhdHRlcm5zID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzKSA6IFtdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBWaXNpdChzY2hlbWEsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5USW50ZXJzZWN0KHNjaGVtYSkpXG4gICAgICAgICAgICByZXR1cm4gVEludGVyc2VjdChzY2hlbWEsIG9wdGlvbnMpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRVbmlvbihzY2hlbWEpKVxuICAgICAgICAgICAgcmV0dXJuIFRVbmlvbihzY2hlbWEsIG9wdGlvbnMpO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRPYmplY3Qoc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybiBUT2JqZWN0KHNjaGVtYSwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVFJlY29yZChzY2hlbWEpKVxuICAgICAgICAgICAgcmV0dXJuIFRSZWNvcmQoc2NoZW1hLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICAvKiogUmVzb2x2ZXMgYW4gYXJyYXkgb2Yga2V5cyBpbiB0aGlzIHNjaGVtYSAqL1xuICAgIGZ1bmN0aW9uIFJlc29sdmVLZXlzKHNjaGVtYSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gWy4uLm5ldyBTZXQoVmlzaXQoc2NoZW1hLCBvcHRpb25zKSldO1xuICAgIH1cbiAgICBLZXlSZXNvbHZlci5SZXNvbHZlS2V5cyA9IFJlc29sdmVLZXlzO1xuICAgIC8qKiBSZXNvbHZlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIG1hdGNoaW5nIGFsbCBrZXlzIGluIHRoaXMgc2NoZW1hICovXG4gICAgZnVuY3Rpb24gUmVzb2x2ZVBhdHRlcm4oc2NoZW1hKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBSZXNvbHZlS2V5cyhzY2hlbWEsIHsgaW5jbHVkZVBhdHRlcm5zOiB0cnVlIH0pO1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0ga2V5cy5tYXAoKGtleSkgPT4gYCgke1Vud3JhcFBhdHRlcm4oa2V5KX0pYCk7XG4gICAgICAgIHJldHVybiBgXigke3BhdHRlcm4uam9pbignfCcpfSkkYDtcbiAgICB9XG4gICAgS2V5UmVzb2x2ZXIuUmVzb2x2ZVBhdHRlcm4gPSBSZXNvbHZlUGF0dGVybjtcbn0pKEtleVJlc29sdmVyIHx8IChleHBvcnRzLktleVJlc29sdmVyID0gS2V5UmVzb2x2ZXIgPSB7fSkpO1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEtleUFycmF5UmVzb2x2ZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgS2V5QXJyYXlSZXNvbHZlcjtcbihmdW5jdGlvbiAoS2V5QXJyYXlSZXNvbHZlcikge1xuICAgIC8qKiBSZXNvbHZlcyBhbiBhcnJheSBvZiBzdHJpbmdbXSBrZXlzIGZyb20gdGhlIGdpdmVuIHNjaGVtYSBvciBhcnJheSB0eXBlLiAqL1xuICAgIGZ1bmN0aW9uIFJlc29sdmUoc2NoZW1hKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpXG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRVbmlvbkxpdGVyYWwoc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybiBzY2hlbWEuYW55T2YubWFwKChzY2hlbWEpID0+IHNjaGVtYS5jb25zdC50b1N0cmluZygpKTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UTGl0ZXJhbChzY2hlbWEpKVxuICAgICAgICAgICAgcmV0dXJuIFtzY2hlbWEuY29uc3RdO1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRUZW1wbGF0ZUxpdGVyYWwoc2NoZW1hKSkge1xuICAgICAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IFRlbXBsYXRlTGl0ZXJhbFBhcnNlci5QYXJzZUV4YWN0KHNjaGVtYS5wYXR0ZXJuKTtcbiAgICAgICAgICAgIGlmICghVGVtcGxhdGVMaXRlcmFsRmluaXRlLkNoZWNrKGV4cHJlc3Npb24pKVxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdLZXlBcnJheVJlc29sdmVyOiBDYW5ub3QgcmVzb2x2ZSBrZXlzIGZyb20gaW5maW5pdGUgdGVtcGxhdGUgZXhwcmVzc2lvbicpO1xuICAgICAgICAgICAgcmV0dXJuIFsuLi5UZW1wbGF0ZUxpdGVyYWxHZW5lcmF0b3IuR2VuZXJhdGUoZXhwcmVzc2lvbildO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgS2V5QXJyYXlSZXNvbHZlci5SZXNvbHZlID0gUmVzb2x2ZTtcbn0pKEtleUFycmF5UmVzb2x2ZXIgfHwgKGV4cG9ydHMuS2V5QXJyYXlSZXNvbHZlciA9IEtleUFycmF5UmVzb2x2ZXIgPSB7fSkpO1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFVuaW9uUmVzb2x2ZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgVW5pb25SZXNvbHZlcjtcbihmdW5jdGlvbiAoVW5pb25SZXNvbHZlcikge1xuICAgIGZ1bmN0aW9uKiBUVW5pb24odW5pb24pIHtcbiAgICAgICAgZm9yIChjb25zdCBzY2hlbWEgb2YgdW5pb24uYW55T2YpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWFbZXhwb3J0cy5LaW5kXSA9PT0gJ1VuaW9uJykge1xuICAgICAgICAgICAgICAgIHlpZWxkKiBUVW5pb24oc2NoZW1hKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHlpZWxkIHNjaGVtYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiogUmV0dXJucyBhIHJlc29sdmVkIHVuaW9uIHdpdGggaW50ZXJpb3IgdW5pb25zIGZsYXR0ZW5lZCAqL1xuICAgIGZ1bmN0aW9uIFJlc29sdmUodW5pb24pIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuVHlwZS5VbmlvbihbLi4uVFVuaW9uKHVuaW9uKV0sIHsgLi4udW5pb24gfSk7XG4gICAgfVxuICAgIFVuaW9uUmVzb2x2ZXIuUmVzb2x2ZSA9IFJlc29sdmU7XG59KShVbmlvblJlc29sdmVyIHx8IChleHBvcnRzLlVuaW9uUmVzb2x2ZXIgPSBVbmlvblJlc29sdmVyID0ge30pKTtcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUZW1wbGF0ZUxpdGVyYWxQYXR0ZXJuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIFRlbXBsYXRlTGl0ZXJhbFBhdHRlcm47XG4oZnVuY3Rpb24gKFRlbXBsYXRlTGl0ZXJhbFBhdHRlcm4pIHtcbiAgICBmdW5jdGlvbiBFc2NhcGUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFZpc2l0KHNjaGVtYSwgYWNjKSB7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVFRlbXBsYXRlTGl0ZXJhbChzY2hlbWEpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hLnBhdHRlcm4uc2xpY2UoMSwgc2NoZW1hLnBhdHRlcm4ubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoVHlwZUd1YXJkLlRVbmlvbihzY2hlbWEpKSB7XG4gICAgICAgICAgICByZXR1cm4gYCgke3NjaGVtYS5hbnlPZi5tYXAoKHNjaGVtYSkgPT4gVmlzaXQoc2NoZW1hLCBhY2MpKS5qb2luKCd8Jyl9KWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoVHlwZUd1YXJkLlROdW1iZXIoc2NoZW1hKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke2FjY30ke2V4cG9ydHMuUGF0dGVybk51bWJlcn1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKFR5cGVHdWFyZC5USW50ZWdlcihzY2hlbWEpKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7YWNjfSR7ZXhwb3J0cy5QYXR0ZXJuTnVtYmVyfWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoVHlwZUd1YXJkLlRCaWdJbnQoc2NoZW1hKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke2FjY30ke2V4cG9ydHMuUGF0dGVybk51bWJlcn1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKFR5cGVHdWFyZC5UU3RyaW5nKHNjaGVtYSkpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHthY2N9JHtleHBvcnRzLlBhdHRlcm5TdHJpbmd9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChUeXBlR3VhcmQuVExpdGVyYWwoc2NoZW1hKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke2FjY30ke0VzY2FwZShzY2hlbWEuY29uc3QudG9TdHJpbmcoKSl9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChUeXBlR3VhcmQuVEJvb2xlYW4oc2NoZW1hKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke2FjY30ke2V4cG9ydHMuUGF0dGVybkJvb2xlYW59YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChUeXBlR3VhcmQuVE5ldmVyKHNjaGVtYSkpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdUZW1wbGF0ZUxpdGVyYWxQYXR0ZXJuOiBUZW1wbGF0ZUxpdGVyYWwgY2Fubm90IG9wZXJhdGUgb24gdHlwZXMgb2YgVE5ldmVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgVGVtcGxhdGVMaXRlcmFsUGF0dGVybjogVW5leHBlY3RlZCBLaW5kICcke3NjaGVtYVtleHBvcnRzLktpbmRdfSdgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBDcmVhdGUoa2luZHMpIHtcbiAgICAgICAgcmV0dXJuIGBeJHtraW5kcy5tYXAoKHNjaGVtYSkgPT4gVmlzaXQoc2NoZW1hLCAnJykpLmpvaW4oJycpfVxcJGA7XG4gICAgfVxuICAgIFRlbXBsYXRlTGl0ZXJhbFBhdHRlcm4uQ3JlYXRlID0gQ3JlYXRlO1xufSkoVGVtcGxhdGVMaXRlcmFsUGF0dGVybiB8fCAoZXhwb3J0cy5UZW1wbGF0ZUxpdGVyYWxQYXR0ZXJuID0gVGVtcGxhdGVMaXRlcmFsUGF0dGVybiA9IHt9KSk7XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGVtcGxhdGVMaXRlcmFsUmVzb2x2ZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgVGVtcGxhdGVMaXRlcmFsUmVzb2x2ZXI7XG4oZnVuY3Rpb24gKFRlbXBsYXRlTGl0ZXJhbFJlc29sdmVyKSB7XG4gICAgLyoqIFJlc29sdmVzIGEgdGVtcGxhdGUgbGl0ZXJhbCBhcyBhIFRVbmlvbiAqL1xuICAgIGZ1bmN0aW9uIFJlc29sdmUodGVtcGxhdGUpIHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IFRlbXBsYXRlTGl0ZXJhbFBhcnNlci5QYXJzZUV4YWN0KHRlbXBsYXRlLnBhdHRlcm4pO1xuICAgICAgICBpZiAoIVRlbXBsYXRlTGl0ZXJhbEZpbml0ZS5DaGVjayhleHByZXNzaW9uKSlcbiAgICAgICAgICAgIHJldHVybiBleHBvcnRzLlR5cGUuU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGxpdGVyYWxzID0gWy4uLlRlbXBsYXRlTGl0ZXJhbEdlbmVyYXRvci5HZW5lcmF0ZShleHByZXNzaW9uKV0ubWFwKCh2YWx1ZSkgPT4gZXhwb3J0cy5UeXBlLkxpdGVyYWwodmFsdWUpKTtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuVHlwZS5VbmlvbihsaXRlcmFscyk7XG4gICAgfVxuICAgIFRlbXBsYXRlTGl0ZXJhbFJlc29sdmVyLlJlc29sdmUgPSBSZXNvbHZlO1xufSkoVGVtcGxhdGVMaXRlcmFsUmVzb2x2ZXIgfHwgKGV4cG9ydHMuVGVtcGxhdGVMaXRlcmFsUmVzb2x2ZXIgPSBUZW1wbGF0ZUxpdGVyYWxSZXNvbHZlciA9IHt9KSk7XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGVtcGxhdGVMaXRlcmFsUGFyc2VyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuY2xhc3MgVGVtcGxhdGVMaXRlcmFsUGFyc2VyRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB9XG59XG5leHBvcnRzLlRlbXBsYXRlTGl0ZXJhbFBhcnNlckVycm9yID0gVGVtcGxhdGVMaXRlcmFsUGFyc2VyRXJyb3I7XG52YXIgVGVtcGxhdGVMaXRlcmFsUGFyc2VyO1xuKGZ1bmN0aW9uIChUZW1wbGF0ZUxpdGVyYWxQYXJzZXIpIHtcbiAgICBmdW5jdGlvbiBJc05vbkVzY2FwZWQocGF0dGVybiwgaW5kZXgsIGNoYXIpIHtcbiAgICAgICAgcmV0dXJuIHBhdHRlcm5baW5kZXhdID09PSBjaGFyICYmIHBhdHRlcm4uY2hhckNvZGVBdChpbmRleCAtIDEpICE9PSA5MjtcbiAgICB9XG4gICAgZnVuY3Rpb24gSXNPcGVuUGFyZW4ocGF0dGVybiwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIElzTm9uRXNjYXBlZChwYXR0ZXJuLCBpbmRleCwgJygnKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gSXNDbG9zZVBhcmVuKHBhdHRlcm4sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBJc05vbkVzY2FwZWQocGF0dGVybiwgaW5kZXgsICcpJyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIElzU2VwYXJhdG9yKHBhdHRlcm4sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBJc05vbkVzY2FwZWQocGF0dGVybiwgaW5kZXgsICd8Jyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIElzR3JvdXAocGF0dGVybikge1xuICAgICAgICBpZiAoIShJc09wZW5QYXJlbihwYXR0ZXJuLCAwKSAmJiBJc0Nsb3NlUGFyZW4ocGF0dGVybiwgcGF0dGVybi5sZW5ndGggLSAxKSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwYXR0ZXJuLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgaWYgKElzT3BlblBhcmVuKHBhdHRlcm4sIGluZGV4KSlcbiAgICAgICAgICAgICAgICBjb3VudCArPSAxO1xuICAgICAgICAgICAgaWYgKElzQ2xvc2VQYXJlbihwYXR0ZXJuLCBpbmRleCkpXG4gICAgICAgICAgICAgICAgY291bnQgLT0gMTtcbiAgICAgICAgICAgIGlmIChjb3VudCA9PT0gMCAmJiBpbmRleCAhPT0gcGF0dGVybi5sZW5ndGggLSAxKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gSW5Hcm91cChwYXR0ZXJuKSB7XG4gICAgICAgIHJldHVybiBwYXR0ZXJuLnNsaWNlKDEsIHBhdHRlcm4ubGVuZ3RoIC0gMSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIElzUHJlY2VkZW5jZU9yKHBhdHRlcm4pIHtcbiAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHBhdHRlcm4ubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBpZiAoSXNPcGVuUGFyZW4ocGF0dGVybiwgaW5kZXgpKVxuICAgICAgICAgICAgICAgIGNvdW50ICs9IDE7XG4gICAgICAgICAgICBpZiAoSXNDbG9zZVBhcmVuKHBhdHRlcm4sIGluZGV4KSlcbiAgICAgICAgICAgICAgICBjb3VudCAtPSAxO1xuICAgICAgICAgICAgaWYgKElzU2VwYXJhdG9yKHBhdHRlcm4sIGluZGV4KSAmJiBjb3VudCA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIElzUHJlY2VkZW5jZUFuZChwYXR0ZXJuKSB7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwYXR0ZXJuLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgaWYgKElzT3BlblBhcmVuKHBhdHRlcm4sIGluZGV4KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIE9yKHBhdHRlcm4pIHtcbiAgICAgICAgbGV0IFtjb3VudCwgc3RhcnRdID0gWzAsIDBdO1xuICAgICAgICBjb25zdCBleHByZXNzaW9ucyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcGF0dGVybi5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGlmIChJc09wZW5QYXJlbihwYXR0ZXJuLCBpbmRleCkpXG4gICAgICAgICAgICAgICAgY291bnQgKz0gMTtcbiAgICAgICAgICAgIGlmIChJc0Nsb3NlUGFyZW4ocGF0dGVybiwgaW5kZXgpKVxuICAgICAgICAgICAgICAgIGNvdW50IC09IDE7XG4gICAgICAgICAgICBpZiAoSXNTZXBhcmF0b3IocGF0dGVybiwgaW5kZXgpICYmIGNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBwYXR0ZXJuLnNsaWNlKHN0YXJ0LCBpbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKHJhbmdlLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2goUGFyc2UocmFuZ2UpKTtcbiAgICAgICAgICAgICAgICBzdGFydCA9IGluZGV4ICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByYW5nZSA9IHBhdHRlcm4uc2xpY2Uoc3RhcnQpO1xuICAgICAgICBpZiAocmFuZ2UubGVuZ3RoID4gMClcbiAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2goUGFyc2UocmFuZ2UpKTtcbiAgICAgICAgaWYgKGV4cHJlc3Npb25zLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICdjb25zdCcsIGNvbnN0OiAnJyB9O1xuICAgICAgICBpZiAoZXhwcmVzc2lvbnMubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgcmV0dXJuIGV4cHJlc3Npb25zWzBdO1xuICAgICAgICByZXR1cm4geyB0eXBlOiAnb3InLCBleHByOiBleHByZXNzaW9ucyB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBBbmQocGF0dGVybikge1xuICAgICAgICBmdW5jdGlvbiBHcm91cCh2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgICAgIGlmICghSXNPcGVuUGFyZW4odmFsdWUsIGluZGV4KSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVGVtcGxhdGVMaXRlcmFsUGFyc2VyRXJyb3IoYFRlbXBsYXRlTGl0ZXJhbFBhcnNlcjogSW5kZXggbXVzdCBwb2ludCB0byBvcGVuIHBhcmVuc2ApO1xuICAgICAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IHNjYW4gPSBpbmRleDsgc2NhbiA8IHZhbHVlLmxlbmd0aDsgc2NhbisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKElzT3BlblBhcmVuKHZhbHVlLCBzY2FuKSlcbiAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gMTtcbiAgICAgICAgICAgICAgICBpZiAoSXNDbG9zZVBhcmVuKHZhbHVlLCBzY2FuKSlcbiAgICAgICAgICAgICAgICAgICAgY291bnQgLT0gMTtcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPT09IDApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbaW5kZXgsIHNjYW5dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IFRlbXBsYXRlTGl0ZXJhbFBhcnNlckVycm9yKGBUZW1wbGF0ZUxpdGVyYWxQYXJzZXI6IFVuY2xvc2VkIGdyb3VwIHBhcmVucyBpbiBleHByZXNzaW9uYCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gUmFuZ2UocGF0dGVybiwgaW5kZXgpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHNjYW4gPSBpbmRleDsgc2NhbiA8IHBhdHRlcm4ubGVuZ3RoOyBzY2FuKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoSXNPcGVuUGFyZW4ocGF0dGVybiwgc2NhbikpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbaW5kZXgsIHNjYW5dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtpbmRleCwgcGF0dGVybi5sZW5ndGhdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb25zID0gW107XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwYXR0ZXJuLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgaWYgKElzT3BlblBhcmVuKHBhdHRlcm4sIGluZGV4KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtzdGFydCwgZW5kXSA9IEdyb3VwKHBhdHRlcm4sIGluZGV4KTtcbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IHBhdHRlcm4uc2xpY2Uoc3RhcnQsIGVuZCArIDEpO1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2goUGFyc2UocmFuZ2UpKTtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtzdGFydCwgZW5kXSA9IFJhbmdlKHBhdHRlcm4sIGluZGV4KTtcbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IHBhdHRlcm4uc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICAgICAgaWYgKHJhbmdlLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2goUGFyc2UocmFuZ2UpKTtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGVuZCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4cHJlc3Npb25zLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICdjb25zdCcsIGNvbnN0OiAnJyB9O1xuICAgICAgICBpZiAoZXhwcmVzc2lvbnMubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgcmV0dXJuIGV4cHJlc3Npb25zWzBdO1xuICAgICAgICByZXR1cm4geyB0eXBlOiAnYW5kJywgZXhwcjogZXhwcmVzc2lvbnMgfTtcbiAgICB9XG4gICAgLyoqIFBhcnNlcyBhIHBhdHRlcm4gYW5kIHJldHVybnMgYW4gZXhwcmVzc2lvbiB0cmVlICovXG4gICAgZnVuY3Rpb24gUGFyc2UocGF0dGVybikge1xuICAgICAgICBpZiAoSXNHcm91cChwYXR0ZXJuKSlcbiAgICAgICAgICAgIHJldHVybiBQYXJzZShJbkdyb3VwKHBhdHRlcm4pKTtcbiAgICAgICAgaWYgKElzUHJlY2VkZW5jZU9yKHBhdHRlcm4pKVxuICAgICAgICAgICAgcmV0dXJuIE9yKHBhdHRlcm4pO1xuICAgICAgICBpZiAoSXNQcmVjZWRlbmNlQW5kKHBhdHRlcm4pKVxuICAgICAgICAgICAgcmV0dXJuIEFuZChwYXR0ZXJuKTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogJ2NvbnN0JywgY29uc3Q6IHBhdHRlcm4gfTtcbiAgICB9XG4gICAgVGVtcGxhdGVMaXRlcmFsUGFyc2VyLlBhcnNlID0gUGFyc2U7XG4gICAgLyoqIFBhcnNlcyBhIHBhdHRlcm4gYW5kIHN0cmlwcyBmb3J3YXJkIGFuZCB0cmFpbGluZyBeIGFuZCAkICovXG4gICAgZnVuY3Rpb24gUGFyc2VFeGFjdChwYXR0ZXJuKSB7XG4gICAgICAgIHJldHVybiBQYXJzZShwYXR0ZXJuLnNsaWNlKDEsIHBhdHRlcm4ubGVuZ3RoIC0gMSkpO1xuICAgIH1cbiAgICBUZW1wbGF0ZUxpdGVyYWxQYXJzZXIuUGFyc2VFeGFjdCA9IFBhcnNlRXhhY3Q7XG59KShUZW1wbGF0ZUxpdGVyYWxQYXJzZXIgfHwgKGV4cG9ydHMuVGVtcGxhdGVMaXRlcmFsUGFyc2VyID0gVGVtcGxhdGVMaXRlcmFsUGFyc2VyID0ge30pKTtcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUZW1wbGF0ZUxpdGVyYWxGaW5pdGVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgVGVtcGxhdGVMaXRlcmFsRmluaXRlO1xuKGZ1bmN0aW9uIChUZW1wbGF0ZUxpdGVyYWxGaW5pdGUpIHtcbiAgICBmdW5jdGlvbiBJc051bWJlcihleHByZXNzaW9uKSB7XG4gICAgICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgICAgICByZXR1cm4gKGV4cHJlc3Npb24udHlwZSA9PT0gJ29yJyAmJlxuICAgICAgICAgICAgZXhwcmVzc2lvbi5leHByLmxlbmd0aCA9PT0gMiAmJlxuICAgICAgICAgICAgZXhwcmVzc2lvbi5leHByWzBdLnR5cGUgPT09ICdjb25zdCcgJiZcbiAgICAgICAgICAgIGV4cHJlc3Npb24uZXhwclswXS5jb25zdCA9PT0gJzAnICYmXG4gICAgICAgICAgICBleHByZXNzaW9uLmV4cHJbMV0udHlwZSA9PT0gJ2NvbnN0JyAmJlxuICAgICAgICAgICAgZXhwcmVzc2lvbi5leHByWzFdLmNvbnN0ID09PSAnWzEtOV1bMC05XSonKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gSXNCb29sZWFuKGV4cHJlc3Npb24pIHtcbiAgICAgICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgICAgIHJldHVybiAoZXhwcmVzc2lvbi50eXBlID09PSAnb3InICYmXG4gICAgICAgICAgICBleHByZXNzaW9uLmV4cHIubGVuZ3RoID09PSAyICYmXG4gICAgICAgICAgICBleHByZXNzaW9uLmV4cHJbMF0udHlwZSA9PT0gJ2NvbnN0JyAmJlxuICAgICAgICAgICAgZXhwcmVzc2lvbi5leHByWzBdLmNvbnN0ID09PSAndHJ1ZScgJiZcbiAgICAgICAgICAgIGV4cHJlc3Npb24uZXhwclsxXS50eXBlID09PSAnY29uc3QnICYmXG4gICAgICAgICAgICBleHByZXNzaW9uLmV4cHJbMV0uY29uc3QgPT09ICdmYWxzZScpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBJc1N0cmluZyhleHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiBleHByZXNzaW9uLnR5cGUgPT09ICdjb25zdCcgJiYgZXhwcmVzc2lvbi5jb25zdCA9PT0gJy4qJztcbiAgICB9XG4gICAgZnVuY3Rpb24gQ2hlY2soZXhwcmVzc2lvbikge1xuICAgICAgICBpZiAoSXNCb29sZWFuKGV4cHJlc3Npb24pKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChJc051bWJlcihleHByZXNzaW9uKSB8fCBJc1N0cmluZyhleHByZXNzaW9uKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGV4cHJlc3Npb24udHlwZSA9PT0gJ2FuZCcpXG4gICAgICAgICAgICByZXR1cm4gZXhwcmVzc2lvbi5leHByLmV2ZXJ5KChleHByKSA9PiBDaGVjayhleHByKSk7XG4gICAgICAgIGlmIChleHByZXNzaW9uLnR5cGUgPT09ICdvcicpXG4gICAgICAgICAgICByZXR1cm4gZXhwcmVzc2lvbi5leHByLmV2ZXJ5KChleHByKSA9PiBDaGVjayhleHByKSk7XG4gICAgICAgIGlmIChleHByZXNzaW9uLnR5cGUgPT09ICdjb25zdCcpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgdGhyb3cgRXJyb3IoYFRlbXBsYXRlTGl0ZXJhbEZpbml0ZTogVW5rbm93biBleHByZXNzaW9uIHR5cGVgKTtcbiAgICB9XG4gICAgVGVtcGxhdGVMaXRlcmFsRmluaXRlLkNoZWNrID0gQ2hlY2s7XG59KShUZW1wbGF0ZUxpdGVyYWxGaW5pdGUgfHwgKGV4cG9ydHMuVGVtcGxhdGVMaXRlcmFsRmluaXRlID0gVGVtcGxhdGVMaXRlcmFsRmluaXRlID0ge30pKTtcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUZW1wbGF0ZUxpdGVyYWxHZW5lcmF0b3Jcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgVGVtcGxhdGVMaXRlcmFsR2VuZXJhdG9yO1xuKGZ1bmN0aW9uIChUZW1wbGF0ZUxpdGVyYWxHZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiogUmVkdWNlKGJ1ZmZlcikge1xuICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgIHJldHVybiB5aWVsZCogYnVmZmVyWzBdO1xuICAgICAgICBmb3IgKGNvbnN0IGxlZnQgb2YgYnVmZmVyWzBdKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJpZ2h0IG9mIFJlZHVjZShidWZmZXIuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgYCR7bGVmdH0ke3JpZ2h0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24qIEFuZChleHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCogUmVkdWNlKGV4cHJlc3Npb24uZXhwci5tYXAoKGV4cHIpID0+IFsuLi5HZW5lcmF0ZShleHByKV0pKTtcbiAgICB9XG4gICAgZnVuY3Rpb24qIE9yKGV4cHJlc3Npb24pIHtcbiAgICAgICAgZm9yIChjb25zdCBleHByIG9mIGV4cHJlc3Npb24uZXhwcilcbiAgICAgICAgICAgIHlpZWxkKiBHZW5lcmF0ZShleHByKTtcbiAgICB9XG4gICAgZnVuY3Rpb24qIENvbnN0KGV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIHlpZWxkIGV4cHJlc3Npb24uY29uc3Q7XG4gICAgfVxuICAgIGZ1bmN0aW9uKiBHZW5lcmF0ZShleHByZXNzaW9uKSB7XG4gICAgICAgIGlmIChleHByZXNzaW9uLnR5cGUgPT09ICdhbmQnKVxuICAgICAgICAgICAgcmV0dXJuIHlpZWxkKiBBbmQoZXhwcmVzc2lvbik7XG4gICAgICAgIGlmIChleHByZXNzaW9uLnR5cGUgPT09ICdvcicpXG4gICAgICAgICAgICByZXR1cm4geWllbGQqIE9yKGV4cHJlc3Npb24pO1xuICAgICAgICBpZiAoZXhwcmVzc2lvbi50eXBlID09PSAnY29uc3QnKVxuICAgICAgICAgICAgcmV0dXJuIHlpZWxkKiBDb25zdChleHByZXNzaW9uKTtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ1RlbXBsYXRlTGl0ZXJhbEdlbmVyYXRvcjogVW5rbm93biBleHByZXNzaW9uJyk7XG4gICAgfVxuICAgIFRlbXBsYXRlTGl0ZXJhbEdlbmVyYXRvci5HZW5lcmF0ZSA9IEdlbmVyYXRlO1xufSkoVGVtcGxhdGVMaXRlcmFsR2VuZXJhdG9yIHx8IChleHBvcnRzLlRlbXBsYXRlTGl0ZXJhbEdlbmVyYXRvciA9IFRlbXBsYXRlTGl0ZXJhbEdlbmVyYXRvciA9IHt9KSk7XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRlbXBsYXRlTGl0ZXJhbERzbFBhcnNlclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgVGVtcGxhdGVMaXRlcmFsRHNsUGFyc2VyO1xuKGZ1bmN0aW9uIChUZW1wbGF0ZUxpdGVyYWxEc2xQYXJzZXIpIHtcbiAgICBmdW5jdGlvbiogUGFyc2VVbmlvbih0ZW1wbGF0ZSkge1xuICAgICAgICBjb25zdCB0cmltID0gdGVtcGxhdGUudHJpbSgpLnJlcGxhY2UoL1wifCcvZywgJycpO1xuICAgICAgICBpZiAodHJpbSA9PT0gJ2Jvb2xlYW4nKVxuICAgICAgICAgICAgcmV0dXJuIHlpZWxkIGV4cG9ydHMuVHlwZS5Cb29sZWFuKCk7XG4gICAgICAgIGlmICh0cmltID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIHJldHVybiB5aWVsZCBleHBvcnRzLlR5cGUuTnVtYmVyKCk7XG4gICAgICAgIGlmICh0cmltID09PSAnYmlnaW50JylcbiAgICAgICAgICAgIHJldHVybiB5aWVsZCBleHBvcnRzLlR5cGUuQmlnSW50KCk7XG4gICAgICAgIGlmICh0cmltID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJldHVybiB5aWVsZCBleHBvcnRzLlR5cGUuU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGxpdGVyYWxzID0gdHJpbS5zcGxpdCgnfCcpLm1hcCgobGl0ZXJhbCkgPT4gZXhwb3J0cy5UeXBlLkxpdGVyYWwobGl0ZXJhbC50cmltKCkpKTtcbiAgICAgICAgcmV0dXJuIHlpZWxkIGxpdGVyYWxzLmxlbmd0aCA9PT0gMCA/IGV4cG9ydHMuVHlwZS5OZXZlcigpIDogbGl0ZXJhbHMubGVuZ3RoID09PSAxID8gbGl0ZXJhbHNbMF0gOiBleHBvcnRzLlR5cGUuVW5pb24obGl0ZXJhbHMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiogUGFyc2VUZXJtaW5hbCh0ZW1wbGF0ZSkge1xuICAgICAgICBpZiAodGVtcGxhdGVbMV0gIT09ICd7Jykge1xuICAgICAgICAgICAgY29uc3QgTCA9IGV4cG9ydHMuVHlwZS5MaXRlcmFsKCckJyk7XG4gICAgICAgICAgICBjb25zdCBSID0gUGFyc2VMaXRlcmFsKHRlbXBsYXRlLnNsaWNlKDEpKTtcbiAgICAgICAgICAgIHJldHVybiB5aWVsZCogW0wsIC4uLlJdO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAyOyBpIDwgdGVtcGxhdGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0ZW1wbGF0ZVtpXSA9PT0gJ30nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgTCA9IFBhcnNlVW5pb24odGVtcGxhdGUuc2xpY2UoMiwgaSkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IFIgPSBQYXJzZUxpdGVyYWwodGVtcGxhdGUuc2xpY2UoaSArIDEpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQqIFsuLi5MLCAuLi5SXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB5aWVsZCBleHBvcnRzLlR5cGUuTGl0ZXJhbCh0ZW1wbGF0ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uKiBQYXJzZUxpdGVyYWwodGVtcGxhdGUpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZW1wbGF0ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRlbXBsYXRlW2ldID09PSAnJCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBMID0gZXhwb3J0cy5UeXBlLkxpdGVyYWwodGVtcGxhdGUuc2xpY2UoMCwgaSkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IFIgPSBQYXJzZVRlcm1pbmFsKHRlbXBsYXRlLnNsaWNlKGkpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQqIFtMLCAuLi5SXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB5aWVsZCBleHBvcnRzLlR5cGUuTGl0ZXJhbCh0ZW1wbGF0ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFBhcnNlKHRlbXBsYXRlX2RzbCkge1xuICAgICAgICByZXR1cm4gWy4uLlBhcnNlTGl0ZXJhbCh0ZW1wbGF0ZV9kc2wpXTtcbiAgICB9XG4gICAgVGVtcGxhdGVMaXRlcmFsRHNsUGFyc2VyLlBhcnNlID0gUGFyc2U7XG59KShUZW1wbGF0ZUxpdGVyYWxEc2xQYXJzZXIgfHwgKGV4cG9ydHMuVGVtcGxhdGVMaXRlcmFsRHNsUGFyc2VyID0gVGVtcGxhdGVMaXRlcmFsRHNsUGFyc2VyID0ge30pKTtcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUeXBlT3JkaW5hbDogVXNlZCBmb3IgYXV0byAkaWQgZ2VuZXJhdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmxldCBUeXBlT3JkaW5hbCA9IDA7XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVHlwZUJ1aWxkZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5jbGFzcyBUeXBlQnVpbGRlciB7XG4gICAgLyoqIGBbVXRpbGl0eV1gIENyZWF0ZXMgYSBzY2hlbWEgd2l0aG91dCBgc3RhdGljYCBhbmQgYHBhcmFtc2AgdHlwZXMgKi9cbiAgICBDcmVhdGUoc2NoZW1hKSB7XG4gICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgfVxuICAgIC8qKiBgW1V0aWxpdHldYCBEaXNjYXJkcyBhIHByb3BlcnR5IGtleSBmcm9tIHRoZSBnaXZlbiBzY2hlbWEgKi9cbiAgICBEaXNjYXJkKHNjaGVtYSwga2V5KSB7XG4gICAgICAgIGNvbnN0IHsgW2tleV06IF8sIC4uLnJlc3QgfSA9IHNjaGVtYTtcbiAgICAgICAgcmV0dXJuIHJlc3Q7XG4gICAgfVxuICAgIC8qKiBgW1N0YW5kYXJkXWAgT21pdHMgY29tcG9zaXRpbmcgc3ltYm9scyBmcm9tIHRoaXMgc2NoZW1hICovXG4gICAgU3RyaWN0KHNjaGVtYSkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzY2hlbWEpKTtcbiAgICB9XG59XG5leHBvcnRzLlR5cGVCdWlsZGVyID0gVHlwZUJ1aWxkZXI7XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3RhbmRhcmRUeXBlQnVpbGRlclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmNsYXNzIFN0YW5kYXJkVHlwZUJ1aWxkZXIgZXh0ZW5kcyBUeXBlQnVpbGRlciB7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gTW9kaWZpZXJzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLyoqIGBbU3RhbmRhcmRdYCBDcmVhdGVzIGEgUmVhZG9ubHkgYW5kIE9wdGlvbmFsIHByb3BlcnR5ICovXG4gICAgUmVhZG9ubHlPcHRpb25hbChzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuUmVhZG9ubHkodGhpcy5PcHRpb25hbChzY2hlbWEpKTtcbiAgICB9XG4gICAgLyoqIGBbU3RhbmRhcmRdYCBDcmVhdGVzIGEgUmVhZG9ubHkgcHJvcGVydHkgKi9cbiAgICBSZWFkb25seShzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIHsgLi4uVHlwZUNsb25lLkNsb25lKHNjaGVtYSksIFtleHBvcnRzLlJlYWRvbmx5XTogJ1JlYWRvbmx5JyB9O1xuICAgIH1cbiAgICAvKiogYFtTdGFuZGFyZF1gIENyZWF0ZXMgYW4gT3B0aW9uYWwgcHJvcGVydHkgKi9cbiAgICBPcHRpb25hbChzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIHsgLi4uVHlwZUNsb25lLkNsb25lKHNjaGVtYSksIFtleHBvcnRzLk9wdGlvbmFsXTogJ09wdGlvbmFsJyB9O1xuICAgIH1cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBUeXBlc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8qKiBgW1N0YW5kYXJkXWAgQ3JlYXRlcyBhbiBBbnkgdHlwZSAqL1xuICAgIEFueShvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlKHsgLi4ub3B0aW9ucywgW2V4cG9ydHMuS2luZF06ICdBbnknIH0pO1xuICAgIH1cbiAgICAvKiogYFtTdGFuZGFyZF1gIENyZWF0ZXMgYW4gQXJyYXkgdHlwZSAqL1xuICAgIEFycmF5KHNjaGVtYSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZSh7IC4uLm9wdGlvbnMsIFtleHBvcnRzLktpbmRdOiAnQXJyYXknLCB0eXBlOiAnYXJyYXknLCBpdGVtczogVHlwZUNsb25lLkNsb25lKHNjaGVtYSkgfSk7XG4gICAgfVxuICAgIC8qKiBgW1N0YW5kYXJkXWAgQ3JlYXRlcyBhIEJvb2xlYW4gdHlwZSAqL1xuICAgIEJvb2xlYW4ob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZSh7IC4uLm9wdGlvbnMsIFtleHBvcnRzLktpbmRdOiAnQm9vbGVhbicsIHR5cGU6ICdib29sZWFuJyB9KTtcbiAgICB9XG4gICAgLyoqIGBbU3RhbmRhcmRdYCBJbnRyaW5zaWMgZnVuY3Rpb24gdG8gQ2FwaXRhbGl6ZSBMaXRlcmFsU3RyaW5nIHR5cGVzICovXG4gICAgQ2FwaXRhbGl6ZShzY2hlbWEsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4geyAuLi5JbnRyaW5zaWMuTWFwKFR5cGVDbG9uZS5DbG9uZShzY2hlbWEpLCAnQ2FwaXRhbGl6ZScpLCAuLi5vcHRpb25zIH07XG4gICAgfVxuICAgIC8qKiBgW1N0YW5kYXJkXWAgQ3JlYXRlcyBhIENvbXBvc2l0ZSBvYmplY3QgdHlwZSAqL1xuICAgIENvbXBvc2l0ZShvYmplY3RzLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGludGVyc2VjdCA9IGV4cG9ydHMuVHlwZS5JbnRlcnNlY3Qob2JqZWN0cywge30pO1xuICAgICAgICBjb25zdCBrZXlzID0gS2V5UmVzb2x2ZXIuUmVzb2x2ZUtleXMoaW50ZXJzZWN0LCB7IGluY2x1ZGVQYXR0ZXJuczogZmFsc2UgfSk7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBrZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+ICh7IC4uLmFjYywgW2tleV06IGV4cG9ydHMuVHlwZS5JbmRleChpbnRlcnNlY3QsIFtrZXldKSB9KSwge30pO1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5UeXBlLk9iamVjdChwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqIGBbU3RhbmRhcmRdYCBDcmVhdGVzIGEgRW51bSB0eXBlICovXG4gICAgRW51bShpdGVtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGl0ZW0pLmZpbHRlcigoa2V5KSA9PiBpc05hTihrZXkpKS5tYXAoKGtleSkgPT4gaXRlbVtrZXldKTtcbiAgICAgICAgY29uc3QgYW55T2YgPSB2YWx1ZXMubWFwKCh2YWx1ZSkgPT4gKFZhbHVlR3VhcmQuSXNTdHJpbmcodmFsdWUpID8geyBbZXhwb3J0cy5LaW5kXTogJ0xpdGVyYWwnLCB0eXBlOiAnc3RyaW5nJywgY29uc3Q6IHZhbHVlIH0gOiB7IFtleHBvcnRzLktpbmRdOiAnTGl0ZXJhbCcsIHR5cGU6ICdudW1iZXInLCBjb25zdDogdmFsdWUgfSkpO1xuICAgICAgICByZXR1cm4gdGhpcy5DcmVhdGUoeyAuLi5vcHRpb25zLCBbZXhwb3J0cy5LaW5kXTogJ1VuaW9uJywgYW55T2YgfSk7XG4gICAgfVxuICAgIC8qKiBgW1N0YW5kYXJkXWAgQ3JlYXRlcyBhIENvbmRpdGlvbmFsIHR5cGUgKi9cbiAgICBFeHRlbmRzKGxlZnQsIHJpZ2h0LCB0cnVlVHlwZSwgZmFsc2VUeXBlLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgc3dpdGNoIChUeXBlRXh0ZW5kcy5FeHRlbmRzKGxlZnQsIHJpZ2h0KSkge1xuICAgICAgICAgICAgY2FzZSBUeXBlRXh0ZW5kc1Jlc3VsdC5VbmlvbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5VbmlvbihbVHlwZUNsb25lLkNsb25lKHRydWVUeXBlLCBvcHRpb25zKSwgVHlwZUNsb25lLkNsb25lKGZhbHNlVHlwZSwgb3B0aW9ucyldKTtcbiAgICAgICAgICAgIGNhc2UgVHlwZUV4dGVuZHNSZXN1bHQuVHJ1ZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gVHlwZUNsb25lLkNsb25lKHRydWVUeXBlLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNhc2UgVHlwZUV4dGVuZHNSZXN1bHQuRmFsc2U6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVDbG9uZS5DbG9uZShmYWxzZVR5cGUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKiBgW1N0YW5kYXJkXWAgQ29uc3RydWN0cyBhIHR5cGUgYnkgZXhjbHVkaW5nIGZyb20gdW5pb25UeXBlIGFsbCB1bmlvbiBtZW1iZXJzIHRoYXQgYXJlIGFzc2lnbmFibGUgdG8gZXhjbHVkZWRNZW1iZXJzICovXG4gICAgRXhjbHVkZSh1bmlvblR5cGUsIGV4Y2x1ZGVkTWVtYmVycywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVFRlbXBsYXRlTGl0ZXJhbCh1bmlvblR5cGUpKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuRXhjbHVkZShUZW1wbGF0ZUxpdGVyYWxSZXNvbHZlci5SZXNvbHZlKHVuaW9uVHlwZSksIGV4Y2x1ZGVkTWVtYmVycywgb3B0aW9ucyk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVFRlbXBsYXRlTGl0ZXJhbChleGNsdWRlZE1lbWJlcnMpKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuRXhjbHVkZSh1bmlvblR5cGUsIFRlbXBsYXRlTGl0ZXJhbFJlc29sdmVyLlJlc29sdmUoZXhjbHVkZWRNZW1iZXJzKSwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVFVuaW9uKHVuaW9uVHlwZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5hcnJvd2VkID0gdW5pb25UeXBlLmFueU9mLmZpbHRlcigoaW5uZXIpID0+IFR5cGVFeHRlbmRzLkV4dGVuZHMoaW5uZXIsIGV4Y2x1ZGVkTWVtYmVycykgPT09IFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiAobmFycm93ZWQubGVuZ3RoID09PSAxID8gVHlwZUNsb25lLkNsb25lKG5hcnJvd2VkWzBdLCBvcHRpb25zKSA6IHRoaXMuVW5pb24obmFycm93ZWQsIG9wdGlvbnMpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAoVHlwZUV4dGVuZHMuRXh0ZW5kcyh1bmlvblR5cGUsIGV4Y2x1ZGVkTWVtYmVycykgIT09IFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlID8gdGhpcy5OZXZlcihvcHRpb25zKSA6IFR5cGVDbG9uZS5DbG9uZSh1bmlvblR5cGUsIG9wdGlvbnMpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiogYFtTdGFuZGFyZF1gIENvbnN0cnVjdHMgYSB0eXBlIGJ5IGV4dHJhY3RpbmcgZnJvbSB0eXBlIGFsbCB1bmlvbiBtZW1iZXJzIHRoYXQgYXJlIGFzc2lnbmFibGUgdG8gdW5pb24gKi9cbiAgICBFeHRyYWN0KHR5cGUsIHVuaW9uLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UVGVtcGxhdGVMaXRlcmFsKHR5cGUpKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuRXh0cmFjdChUZW1wbGF0ZUxpdGVyYWxSZXNvbHZlci5SZXNvbHZlKHR5cGUpLCB1bmlvbiwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVFRlbXBsYXRlTGl0ZXJhbCh1bmlvbikpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5FeHRyYWN0KHR5cGUsIFRlbXBsYXRlTGl0ZXJhbFJlc29sdmVyLlJlc29sdmUodW5pb24pLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKFR5cGVHdWFyZC5UVW5pb24odHlwZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5hcnJvd2VkID0gdHlwZS5hbnlPZi5maWx0ZXIoKGlubmVyKSA9PiBUeXBlRXh0ZW5kcy5FeHRlbmRzKGlubmVyLCB1bmlvbikgIT09IFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiAobmFycm93ZWQubGVuZ3RoID09PSAxID8gVHlwZUNsb25lLkNsb25lKG5hcnJvd2VkWzBdLCBvcHRpb25zKSA6IHRoaXMuVW5pb24obmFycm93ZWQsIG9wdGlvbnMpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAoVHlwZUV4dGVuZHMuRXh0ZW5kcyh0eXBlLCB1bmlvbikgIT09IFR5cGVFeHRlbmRzUmVzdWx0LkZhbHNlID8gVHlwZUNsb25lLkNsb25lKHR5cGUsIG9wdGlvbnMpIDogdGhpcy5OZXZlcihvcHRpb25zKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqIGBbU3RhbmRhcmRdYCBSZXR1cm5zIGFuIEluZGV4ZWQgcHJvcGVydHkgdHlwZSBmb3IgdGhlIGdpdmVuIGtleXMgKi9cbiAgICBJbmRleChzY2hlbWEsIHVucmVzb2x2ZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRBcnJheShzY2hlbWEpICYmIFR5cGVHdWFyZC5UTnVtYmVyKHVucmVzb2x2ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gVHlwZUNsb25lLkNsb25lKHNjaGVtYS5pdGVtcywgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoVHlwZUd1YXJkLlRUdXBsZShzY2hlbWEpICYmIFR5cGVHdWFyZC5UTnVtYmVyKHVucmVzb2x2ZWQpKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtcyA9IFZhbHVlR3VhcmQuSXNVbmRlZmluZWQoc2NoZW1hLml0ZW1zKSA/IFtdIDogc2NoZW1hLml0ZW1zO1xuICAgICAgICAgICAgY29uc3QgY2xvbmVkID0gaXRlbXMubWFwKChzY2hlbWEpID0+IFR5cGVDbG9uZS5DbG9uZShzY2hlbWEpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLlVuaW9uKGNsb25lZCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gS2V5QXJyYXlSZXNvbHZlci5SZXNvbHZlKHVucmVzb2x2ZWQpO1xuICAgICAgICAgICAgY29uc3QgY2xvbmUgPSBUeXBlQ2xvbmUuQ2xvbmUoc2NoZW1hKTtcbiAgICAgICAgICAgIHJldHVybiBJbmRleGVkQWNjZXNzb3IuUmVzb2x2ZShjbG9uZSwga2V5cywgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqIGBbU3RhbmRhcmRdYCBDcmVhdGVzIGFuIEludGVnZXIgdHlwZSAqL1xuICAgIEludGVnZXIob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZSh7IC4uLm9wdGlvbnMsIFtleHBvcnRzLktpbmRdOiAnSW50ZWdlcicsIHR5cGU6ICdpbnRlZ2VyJyB9KTtcbiAgICB9XG4gICAgLyoqIGBbU3RhbmRhcmRdYCBDcmVhdGVzIGFuIEludGVyc2VjdCB0eXBlICovXG4gICAgSW50ZXJzZWN0KGFsbE9mLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKGFsbE9mLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiBleHBvcnRzLlR5cGUuTmV2ZXIoKTtcbiAgICAgICAgaWYgKGFsbE9mLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgIHJldHVybiBUeXBlQ2xvbmUuQ2xvbmUoYWxsT2ZbMF0sIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBvYmplY3RzID0gYWxsT2YuZXZlcnkoKHNjaGVtYSkgPT4gVHlwZUd1YXJkLlRPYmplY3Qoc2NoZW1hKSk7XG4gICAgICAgIGNvbnN0IGNsb25lZCA9IGFsbE9mLm1hcCgoc2NoZW1hKSA9PiBUeXBlQ2xvbmUuQ2xvbmUoc2NoZW1hKSk7XG4gICAgICAgIGNvbnN0IGNsb25lZFVuZXZhbHVhdGVkUHJvcGVydGllcyA9IFR5cGVHdWFyZC5UU2NoZW1hKG9wdGlvbnMudW5ldmFsdWF0ZWRQcm9wZXJ0aWVzKSA/IHsgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBUeXBlQ2xvbmUuQ2xvbmUob3B0aW9ucy51bmV2YWx1YXRlZFByb3BlcnRpZXMpIH0gOiB7fTtcbiAgICAgICAgaWYgKG9wdGlvbnMudW5ldmFsdWF0ZWRQcm9wZXJ0aWVzID09PSBmYWxzZSB8fCBUeXBlR3VhcmQuVFNjaGVtYShvcHRpb25zLnVuZXZhbHVhdGVkUHJvcGVydGllcykgfHwgb2JqZWN0cykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlKHsgLi4ub3B0aW9ucywgLi4uY2xvbmVkVW5ldmFsdWF0ZWRQcm9wZXJ0aWVzLCBbZXhwb3J0cy5LaW5kXTogJ0ludGVyc2VjdCcsIHR5cGU6ICdvYmplY3QnLCBhbGxPZjogY2xvbmVkIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlKHsgLi4ub3B0aW9ucywgLi4uY2xvbmVkVW5ldmFsdWF0ZWRQcm9wZXJ0aWVzLCBbZXhwb3J0cy5LaW5kXTogJ0ludGVyc2VjdCcsIGFsbE9mOiBjbG9uZWQgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqIGBbU3RhbmRhcmRdYCBDcmVhdGVzIGEgS2V5T2YgdHlwZSAqL1xuICAgIEtleU9mKHNjaGVtYSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVFJlY29yZChzY2hlbWEpKSB7XG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzKVswXTtcbiAgICAgICAgICAgIGlmIChwYXR0ZXJuID09PSBleHBvcnRzLlBhdHRlcm5OdW1iZXJFeGFjdClcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5OdW1iZXIob3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAocGF0dGVybiA9PT0gZXhwb3J0cy5QYXR0ZXJuU3RyaW5nRXhhY3QpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuU3RyaW5nKG9wdGlvbnMpO1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1N0YW5kYXJkVHlwZUJ1aWxkZXI6IFVuYWJsZSB0byByZXNvbHZlIGtleSB0eXBlIGZyb20gUmVjb3JkIGtleSBwYXR0ZXJuJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoVHlwZUd1YXJkLlRUdXBsZShzY2hlbWEpKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtcyA9IFZhbHVlR3VhcmQuSXNVbmRlZmluZWQoc2NoZW1hLml0ZW1zKSA/IFtdIDogc2NoZW1hLml0ZW1zO1xuICAgICAgICAgICAgY29uc3QgbGl0ZXJhbHMgPSBpdGVtcy5tYXAoKF8sIGluZGV4KSA9PiBleHBvcnRzLlR5cGUuTGl0ZXJhbChpbmRleCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuVW5pb24obGl0ZXJhbHMsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKFR5cGVHdWFyZC5UQXJyYXkoc2NoZW1hKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuTnVtYmVyKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IEtleVJlc29sdmVyLlJlc29sdmVLZXlzKHNjaGVtYSwgeyBpbmNsdWRlUGF0dGVybnM6IGZhbHNlIH0pO1xuICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLk5ldmVyKG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgbGl0ZXJhbHMgPSBrZXlzLm1hcCgoa2V5KSA9PiB0aGlzLkxpdGVyYWwoa2V5KSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5VbmlvbihsaXRlcmFscywgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqIGBbU3RhbmRhcmRdYCBDcmVhdGVzIGEgTGl0ZXJhbCB0eXBlICovXG4gICAgTGl0ZXJhbCh2YWx1ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZSh7IC4uLm9wdGlvbnMsIFtleHBvcnRzLktpbmRdOiAnTGl0ZXJhbCcsIGNvbnN0OiB2YWx1ZSwgdHlwZTogdHlwZW9mIHZhbHVlIH0pO1xuICAgIH1cbiAgICAvKiogYFtTdGFuZGFyZF1gIEludHJpbnNpYyBmdW5jdGlvbiB0byBMb3dlcmNhc2UgTGl0ZXJhbFN0cmluZyB0eXBlcyAqL1xuICAgIExvd2VyY2FzZShzY2hlbWEsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4geyAuLi5JbnRyaW5zaWMuTWFwKFR5cGVDbG9uZS5DbG9uZShzY2hlbWEpLCAnTG93ZXJjYXNlJyksIC4uLm9wdGlvbnMgfTtcbiAgICB9XG4gICAgLyoqIGBbU3RhbmRhcmRdYCBDcmVhdGVzIGEgTmV2ZXIgdHlwZSAqL1xuICAgIE5ldmVyKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5DcmVhdGUoeyAuLi5vcHRpb25zLCBbZXhwb3J0cy5LaW5kXTogJ05ldmVyJywgbm90OiB7fSB9KTtcbiAgICB9XG4gICAgLyoqIGBbU3RhbmRhcmRdYCBDcmVhdGVzIGEgTm90IHR5cGUgKi9cbiAgICBOb3Qoc2NoZW1hLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZSh7IC4uLm9wdGlvbnMsIFtleHBvcnRzLktpbmRdOiAnTm90Jywgbm90OiBUeXBlQ2xvbmUuQ2xvbmUoc2NoZW1hKSB9KTtcbiAgICB9XG4gICAgLyoqIGBbU3RhbmRhcmRdYCBDcmVhdGVzIGEgTnVsbCB0eXBlICovXG4gICAgTnVsbChvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlKHsgLi4ub3B0aW9ucywgW2V4cG9ydHMuS2luZF06ICdOdWxsJywgdHlwZTogJ251bGwnIH0pO1xuICAgIH1cbiAgICAvKiogYFtTdGFuZGFyZF1gIENyZWF0ZXMgYSBOdW1iZXIgdHlwZSAqL1xuICAgIE51bWJlcihvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlKHsgLi4ub3B0aW9ucywgW2V4cG9ydHMuS2luZF06ICdOdW1iZXInLCB0eXBlOiAnbnVtYmVyJyB9KTtcbiAgICB9XG4gICAgLyoqIGBbU3RhbmRhcmRdYCBDcmVhdGVzIGFuIE9iamVjdCB0eXBlICovXG4gICAgT2JqZWN0KHByb3BlcnRpZXMsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eUtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgY29uc3Qgb3B0aW9uYWxLZXlzID0gcHJvcGVydHlLZXlzLmZpbHRlcigoa2V5KSA9PiBUeXBlR3VhcmQuVE9wdGlvbmFsKHByb3BlcnRpZXNba2V5XSkpO1xuICAgICAgICBjb25zdCByZXF1aXJlZEtleXMgPSBwcm9wZXJ0eUtleXMuZmlsdGVyKChuYW1lKSA9PiAhb3B0aW9uYWxLZXlzLmluY2x1ZGVzKG5hbWUpKTtcbiAgICAgICAgY29uc3QgY2xvbmVkQWRkaXRpb25hbFByb3BlcnRpZXMgPSBUeXBlR3VhcmQuVFNjaGVtYShvcHRpb25zLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKSA/IHsgYWRkaXRpb25hbFByb3BlcnRpZXM6IFR5cGVDbG9uZS5DbG9uZShvcHRpb25zLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKSB9IDoge307XG4gICAgICAgIGNvbnN0IGNsb25lZFByb3BlcnRpZXMgPSBwcm9wZXJ0eUtleXMucmVkdWNlKChhY2MsIGtleSkgPT4gKHsgLi4uYWNjLCBba2V5XTogVHlwZUNsb25lLkNsb25lKHByb3BlcnRpZXNba2V5XSkgfSksIHt9KTtcbiAgICAgICAgaWYgKHJlcXVpcmVkS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5DcmVhdGUoeyAuLi5vcHRpb25zLCAuLi5jbG9uZWRBZGRpdGlvbmFsUHJvcGVydGllcywgW2V4cG9ydHMuS2luZF06ICdPYmplY3QnLCB0eXBlOiAnb2JqZWN0JywgcHJvcGVydGllczogY2xvbmVkUHJvcGVydGllcywgcmVxdWlyZWQ6IHJlcXVpcmVkS2V5cyB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZSh7IC4uLm9wdGlvbnMsIC4uLmNsb25lZEFkZGl0aW9uYWxQcm9wZXJ0aWVzLCBbZXhwb3J0cy5LaW5kXTogJ09iamVjdCcsIHR5cGU6ICdvYmplY3QnLCBwcm9wZXJ0aWVzOiBjbG9uZWRQcm9wZXJ0aWVzIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKiBgW1N0YW5kYXJkXWAgQ29uc3RydWN0cyBhIHR5cGUgd2hvc2Uga2V5cyBhcmUgb21pdHRlZCBmcm9tIHRoZSBnaXZlbiB0eXBlICovXG4gICAgT21pdChzY2hlbWEsIHVucmVzb2x2ZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBrZXlzID0gS2V5QXJyYXlSZXNvbHZlci5SZXNvbHZlKHVucmVzb2x2ZWQpO1xuICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgcmV0dXJuIE9iamVjdE1hcC5NYXAoVHlwZUNsb25lLkNsb25lKHNjaGVtYSksIChvYmplY3QpID0+IHtcbiAgICAgICAgICAgIGlmIChWYWx1ZUd1YXJkLklzQXJyYXkob2JqZWN0LnJlcXVpcmVkKSkge1xuICAgICAgICAgICAgICAgIG9iamVjdC5yZXF1aXJlZCA9IG9iamVjdC5yZXF1aXJlZC5maWx0ZXIoKGtleSkgPT4gIWtleXMuaW5jbHVkZXMoa2V5KSk7XG4gICAgICAgICAgICAgICAgaWYgKG9iamVjdC5yZXF1aXJlZC5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBvYmplY3QucmVxdWlyZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QucHJvcGVydGllcykpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5cy5pbmNsdWRlcyhrZXkpKVxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgb2JqZWN0LnByb3BlcnRpZXNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZShvYmplY3QpO1xuICAgICAgICB9LCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqIGBbU3RhbmRhcmRdYCBDb25zdHJ1Y3RzIGEgdHlwZSB3aGVyZSBhbGwgcHJvcGVydGllcyBhcmUgb3B0aW9uYWwgKi9cbiAgICBQYXJ0aWFsKHNjaGVtYSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgICAgICByZXR1cm4gT2JqZWN0TWFwLk1hcChzY2hlbWEsIChvYmplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QucHJvcGVydGllcykucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmFjYywgW2tleV06IHRoaXMuT3B0aW9uYWwob2JqZWN0LnByb3BlcnRpZXNba2V5XSkgfTtcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLk9iamVjdChwcm9wZXJ0aWVzLCB0aGlzLkRpc2NhcmQob2JqZWN0LCAncmVxdWlyZWQnKSAvKiBvYmplY3QgdXNlZCBhcyBvcHRpb25zIHRvIHJldGFpbiBvdGhlciBjb25zdHJhaW50cyAqLyk7XG4gICAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKiogYFtTdGFuZGFyZF1gIENvbnN0cnVjdHMgYSB0eXBlIHdob3NlIGtleXMgYXJlIHBpY2tlZCBmcm9tIHRoZSBnaXZlbiB0eXBlICovXG4gICAgUGljayhzY2hlbWEsIHVucmVzb2x2ZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBrZXlzID0gS2V5QXJyYXlSZXNvbHZlci5SZXNvbHZlKHVucmVzb2x2ZWQpO1xuICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgcmV0dXJuIE9iamVjdE1hcC5NYXAoVHlwZUNsb25lLkNsb25lKHNjaGVtYSksIChvYmplY3QpID0+IHtcbiAgICAgICAgICAgIGlmIChWYWx1ZUd1YXJkLklzQXJyYXkob2JqZWN0LnJlcXVpcmVkKSkge1xuICAgICAgICAgICAgICAgIG9iamVjdC5yZXF1aXJlZCA9IG9iamVjdC5yZXF1aXJlZC5maWx0ZXIoKGtleSkgPT4ga2V5cy5pbmNsdWRlcyhrZXkpKTtcbiAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnJlcXVpcmVkLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG9iamVjdC5yZXF1aXJlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdC5wcm9wZXJ0aWVzKSkge1xuICAgICAgICAgICAgICAgIGlmICgha2V5cy5pbmNsdWRlcyhrZXkpKVxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgb2JqZWN0LnByb3BlcnRpZXNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZShvYmplY3QpO1xuICAgICAgICB9LCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqIGBbU3RhbmRhcmRdYCBDcmVhdGVzIGEgUmVjb3JkIHR5cGUgKi9cbiAgICBSZWNvcmQoa2V5LCBzY2hlbWEsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRUZW1wbGF0ZUxpdGVyYWwoa2V5KSkge1xuICAgICAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IFRlbXBsYXRlTGl0ZXJhbFBhcnNlci5QYXJzZUV4YWN0KGtleS5wYXR0ZXJuKTtcbiAgICAgICAgICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgICAgICAgICAgcmV0dXJuIFRlbXBsYXRlTGl0ZXJhbEZpbml0ZS5DaGVjayhleHByZXNzaW9uKVxuICAgICAgICAgICAgICAgID8gKHRoaXMuT2JqZWN0KFsuLi5UZW1wbGF0ZUxpdGVyYWxHZW5lcmF0b3IuR2VuZXJhdGUoZXhwcmVzc2lvbildLnJlZHVjZSgoYWNjLCBrZXkpID0+ICh7IC4uLmFjYywgW2tleV06IFR5cGVDbG9uZS5DbG9uZShzY2hlbWEpIH0pLCB7fSksIG9wdGlvbnMpKVxuICAgICAgICAgICAgICAgIDogdGhpcy5DcmVhdGUoeyAuLi5vcHRpb25zLCBbZXhwb3J0cy5LaW5kXTogJ1JlY29yZCcsIHR5cGU6ICdvYmplY3QnLCBwYXR0ZXJuUHJvcGVydGllczogeyBba2V5LnBhdHRlcm5dOiBUeXBlQ2xvbmUuQ2xvbmUoc2NoZW1hKSB9IH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKFR5cGVHdWFyZC5UVW5pb24oa2V5KSkge1xuICAgICAgICAgICAgY29uc3QgdW5pb24gPSBVbmlvblJlc29sdmVyLlJlc29sdmUoa2V5KTtcbiAgICAgICAgICAgIGlmIChUeXBlR3VhcmQuVFVuaW9uTGl0ZXJhbCh1bmlvbikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdW5pb24uYW55T2YucmVkdWNlKChhY2MsIGxpdGVyYWwpID0+ICh7IC4uLmFjYywgW2xpdGVyYWwuY29uc3RdOiBUeXBlQ2xvbmUuQ2xvbmUoc2NoZW1hKSB9KSwge30pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLk9iamVjdChwcm9wZXJ0aWVzLCB7IC4uLm9wdGlvbnMsIFtleHBvcnRzLkhpbnRdOiAnUmVjb3JkJyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignU3RhbmRhcmRUeXBlQnVpbGRlcjogUmVjb3JkIGtleSBvZiB0eXBlIHVuaW9uIGNvbnRhaW5zIG5vbi1saXRlcmFsIHR5cGVzJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoVHlwZUd1YXJkLlRMaXRlcmFsKGtleSkpIHtcbiAgICAgICAgICAgIGlmIChWYWx1ZUd1YXJkLklzU3RyaW5nKGtleS5jb25zdCkgfHwgVmFsdWVHdWFyZC5Jc051bWJlcihrZXkuY29uc3QpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuT2JqZWN0KHsgW2tleS5jb25zdF06IFR5cGVDbG9uZS5DbG9uZShzY2hlbWEpIH0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdTdGFuZGFyZFR5cGVCdWlsZGVyOiBSZWNvcmQga2V5IG9mIHR5cGUgbGl0ZXJhbCBpcyBub3Qgb2YgdHlwZSBzdHJpbmcgb3IgbnVtYmVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoVHlwZUd1YXJkLlRJbnRlZ2VyKGtleSkgfHwgVHlwZUd1YXJkLlROdW1iZXIoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlKHsgLi4ub3B0aW9ucywgW2V4cG9ydHMuS2luZF06ICdSZWNvcmQnLCB0eXBlOiAnb2JqZWN0JywgcGF0dGVyblByb3BlcnRpZXM6IHsgW2V4cG9ydHMuUGF0dGVybk51bWJlckV4YWN0XTogVHlwZUNsb25lLkNsb25lKHNjaGVtYSkgfSB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChUeXBlR3VhcmQuVFN0cmluZyhrZXkpKSB7XG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gVmFsdWVHdWFyZC5Jc1VuZGVmaW5lZChrZXkucGF0dGVybikgPyBleHBvcnRzLlBhdHRlcm5TdHJpbmdFeGFjdCA6IGtleS5wYXR0ZXJuO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlKHsgLi4ub3B0aW9ucywgW2V4cG9ydHMuS2luZF06ICdSZWNvcmQnLCB0eXBlOiAnb2JqZWN0JywgcGF0dGVyblByb3BlcnRpZXM6IHsgW3BhdHRlcm5dOiBUeXBlQ2xvbmUuQ2xvbmUoc2NoZW1hKSB9IH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYFN0YW5kYXJkVHlwZUJ1aWxkZXI6IFJlY29yZCBrZXkgaXMgYW4gaW52YWxpZCB0eXBlYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqIGBbU3RhbmRhcmRdYCBDcmVhdGVzIGEgUmVjdXJzaXZlIHR5cGUgKi9cbiAgICBSZWN1cnNpdmUoY2FsbGJhY2ssIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoVmFsdWVHdWFyZC5Jc1VuZGVmaW5lZChvcHRpb25zLiRpZCkpXG4gICAgICAgICAgICBvcHRpb25zLiRpZCA9IGBUJHtUeXBlT3JkaW5hbCsrfWA7XG4gICAgICAgIGNvbnN0IHRoaXNUeXBlID0gY2FsbGJhY2soeyBbZXhwb3J0cy5LaW5kXTogJ1RoaXMnLCAkcmVmOiBgJHtvcHRpb25zLiRpZH1gIH0pO1xuICAgICAgICB0aGlzVHlwZS4kaWQgPSBvcHRpb25zLiRpZDtcbiAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlKHsgLi4ub3B0aW9ucywgW2V4cG9ydHMuSGludF06ICdSZWN1cnNpdmUnLCAuLi50aGlzVHlwZSB9KTtcbiAgICB9XG4gICAgLyoqIGBbU3RhbmRhcmRdYCBDcmVhdGVzIGEgUmVmIHR5cGUuICovXG4gICAgUmVmKHVucmVzb2x2ZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoVmFsdWVHdWFyZC5Jc1N0cmluZyh1bnJlc29sdmVkKSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZSh7IC4uLm9wdGlvbnMsIFtleHBvcnRzLktpbmRdOiAnUmVmJywgJHJlZjogdW5yZXNvbHZlZCB9KTtcbiAgICAgICAgaWYgKFZhbHVlR3VhcmQuSXNVbmRlZmluZWQodW5yZXNvbHZlZC4kaWQpKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1N0YW5kYXJkVHlwZUJ1aWxkZXIuUmVmOiBUYXJnZXQgdHlwZSBtdXN0IHNwZWNpZnkgYW4gJGlkJyk7XG4gICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZSh7IC4uLm9wdGlvbnMsIFtleHBvcnRzLktpbmRdOiAnUmVmJywgJHJlZjogdW5yZXNvbHZlZC4kaWQgfSk7XG4gICAgfVxuICAgIC8qKiBgW1N0YW5kYXJkXWAgQ29uc3RydWN0cyBhIHR5cGUgd2hlcmUgYWxsIHByb3BlcnRpZXMgYXJlIHJlcXVpcmVkICovXG4gICAgUmVxdWlyZWQoc2NoZW1hLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgICAgIHJldHVybiBPYmplY3RNYXAuTWFwKHNjaGVtYSwgKG9iamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdC5wcm9wZXJ0aWVzKS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYWNjLCBba2V5XTogdGhpcy5EaXNjYXJkKG9iamVjdC5wcm9wZXJ0aWVzW2tleV0sIGV4cG9ydHMuT3B0aW9uYWwpIH07XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5PYmplY3QocHJvcGVydGllcywgb2JqZWN0IC8qIG9iamVjdCB1c2VkIGFzIG9wdGlvbnMgdG8gcmV0YWluIG90aGVyIGNvbnN0cmFpbnRzICAqLyk7XG4gICAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKiogYFtTdGFuZGFyZF1gIEV4dHJhY3RzIHRoZSByZXN0IGFycmF5IGZyb20gYSBUdXBsZSAqL1xuICAgIFJlc3Qoc2NoZW1hKSB7XG4gICAgICAgIGlmIChUeXBlR3VhcmQuVFR1cGxlKHNjaGVtYSkpIHtcbiAgICAgICAgICAgIGlmIChWYWx1ZUd1YXJkLklzVW5kZWZpbmVkKHNjaGVtYS5pdGVtcykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYS5pdGVtcy5tYXAoKHNjaGVtYSkgPT4gVHlwZUNsb25lLkNsb25lKHNjaGVtYSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtUeXBlQ2xvbmUuQ2xvbmUoc2NoZW1hKV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqIGBbU3RhbmRhcmRdYCBDcmVhdGVzIGEgU3RyaW5nIHR5cGUgKi9cbiAgICBTdHJpbmcob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZSh7IC4uLm9wdGlvbnMsIFtleHBvcnRzLktpbmRdOiAnU3RyaW5nJywgdHlwZTogJ3N0cmluZycgfSk7XG4gICAgfVxuICAgIC8qKiBgW1N0YW5kYXJkXWAgQ3JlYXRlcyBhIFRlbXBsYXRlTGl0ZXJhbCB0eXBlICovXG4gICAgVGVtcGxhdGVMaXRlcmFsKHVucmVzb2x2ZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IChWYWx1ZUd1YXJkLklzU3RyaW5nKHVucmVzb2x2ZWQpKVxuICAgICAgICAgICAgPyBUZW1wbGF0ZUxpdGVyYWxQYXR0ZXJuLkNyZWF0ZShUZW1wbGF0ZUxpdGVyYWxEc2xQYXJzZXIuUGFyc2UodW5yZXNvbHZlZCkpXG4gICAgICAgICAgICA6IFRlbXBsYXRlTGl0ZXJhbFBhdHRlcm4uQ3JlYXRlKHVucmVzb2x2ZWQpO1xuICAgICAgICByZXR1cm4gdGhpcy5DcmVhdGUoeyAuLi5vcHRpb25zLCBbZXhwb3J0cy5LaW5kXTogJ1RlbXBsYXRlTGl0ZXJhbCcsIHR5cGU6ICdzdHJpbmcnLCBwYXR0ZXJuIH0pO1xuICAgIH1cbiAgICAvKiogYFtTdGFuZGFyZF1gIENyZWF0ZXMgYSBUdXBsZSB0eXBlICovXG4gICAgVHVwbGUoaXRlbXMsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBbYWRkaXRpb25hbEl0ZW1zLCBtaW5JdGVtcywgbWF4SXRlbXNdID0gW2ZhbHNlLCBpdGVtcy5sZW5ndGgsIGl0ZW1zLmxlbmd0aF07XG4gICAgICAgIGNvbnN0IGNsb25lZEl0ZW1zID0gaXRlbXMubWFwKChpdGVtKSA9PiBUeXBlQ2xvbmUuQ2xvbmUoaXRlbSkpO1xuICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gKGl0ZW1zLmxlbmd0aCA+IDAgP1xuICAgICAgICAgICAgeyAuLi5vcHRpb25zLCBbZXhwb3J0cy5LaW5kXTogJ1R1cGxlJywgdHlwZTogJ2FycmF5JywgaXRlbXM6IGNsb25lZEl0ZW1zLCBhZGRpdGlvbmFsSXRlbXMsIG1pbkl0ZW1zLCBtYXhJdGVtcyB9IDpcbiAgICAgICAgICAgIHsgLi4ub3B0aW9ucywgW2V4cG9ydHMuS2luZF06ICdUdXBsZScsIHR5cGU6ICdhcnJheScsIG1pbkl0ZW1zLCBtYXhJdGVtcyB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlKHNjaGVtYSk7XG4gICAgfVxuICAgIC8qKiBgW1N0YW5kYXJkXWAgSW50cmluc2ljIGZ1bmN0aW9uIHRvIFVuY2FwaXRhbGl6ZSBMaXRlcmFsU3RyaW5nIHR5cGVzICovXG4gICAgVW5jYXBpdGFsaXplKHNjaGVtYSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB7IC4uLkludHJpbnNpYy5NYXAoVHlwZUNsb25lLkNsb25lKHNjaGVtYSksICdVbmNhcGl0YWxpemUnKSwgLi4ub3B0aW9ucyB9O1xuICAgIH1cbiAgICAvKiogYFtTdGFuZGFyZF1gIENyZWF0ZXMgYSBVbmlvbiB0eXBlICovXG4gICAgVW5pb24odW5pb24sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoVHlwZUd1YXJkLlRUZW1wbGF0ZUxpdGVyYWwodW5pb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gVGVtcGxhdGVMaXRlcmFsUmVzb2x2ZXIuUmVzb2x2ZSh1bmlvbik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhbnlPZiA9IHVuaW9uO1xuICAgICAgICAgICAgaWYgKGFueU9mLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5OZXZlcihvcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChhbnlPZi5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlKFR5cGVDbG9uZS5DbG9uZShhbnlPZlswXSwgb3B0aW9ucykpO1xuICAgICAgICAgICAgY29uc3QgY2xvbmVkQW55T2YgPSBhbnlPZi5tYXAoKHNjaGVtYSkgPT4gVHlwZUNsb25lLkNsb25lKHNjaGVtYSkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlKHsgLi4ub3B0aW9ucywgW2V4cG9ydHMuS2luZF06ICdVbmlvbicsIGFueU9mOiBjbG9uZWRBbnlPZiB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiogYFtTdGFuZGFyZF1gIENyZWF0ZXMgYW4gVW5rbm93biB0eXBlICovXG4gICAgVW5rbm93bihvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlKHsgLi4ub3B0aW9ucywgW2V4cG9ydHMuS2luZF06ICdVbmtub3duJyB9KTtcbiAgICB9XG4gICAgLyoqIGBbU3RhbmRhcmRdYCBDcmVhdGVzIGEgVW5zYWZlIHR5cGUgdGhhdCB3aWxsIGluZmVycyBhcyB0aGUgZ2VuZXJpYyBhcmd1bWVudCBUICovXG4gICAgVW5zYWZlKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5DcmVhdGUoeyAuLi5vcHRpb25zLCBbZXhwb3J0cy5LaW5kXTogb3B0aW9uc1tleHBvcnRzLktpbmRdIHx8ICdVbnNhZmUnIH0pO1xuICAgIH1cbiAgICAvKiogYFtTdGFuZGFyZF1gIEludHJpbnNpYyBmdW5jdGlvbiB0byBVcHBlcmNhc2UgTGl0ZXJhbFN0cmluZyB0eXBlcyAqL1xuICAgIFVwcGVyY2FzZShzY2hlbWEsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4geyAuLi5JbnRyaW5zaWMuTWFwKFR5cGVDbG9uZS5DbG9uZShzY2hlbWEpLCAnVXBwZXJjYXNlJyksIC4uLm9wdGlvbnMgfTtcbiAgICB9XG59XG5leHBvcnRzLlN0YW5kYXJkVHlwZUJ1aWxkZXIgPSBTdGFuZGFyZFR5cGVCdWlsZGVyO1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEV4dGVuZGVkVHlwZUJ1aWxkZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5jbGFzcyBFeHRlbmRlZFR5cGVCdWlsZGVyIGV4dGVuZHMgU3RhbmRhcmRUeXBlQnVpbGRlciB7XG4gICAgLyoqIGBbRXh0ZW5kZWRdYCBDcmVhdGVzIGEgQXN5bmNJdGVyYXRvciB0eXBlICovXG4gICAgQXN5bmNJdGVyYXRvcihpdGVtcywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZSh7IC4uLm9wdGlvbnMsIFtleHBvcnRzLktpbmRdOiAnQXN5bmNJdGVyYXRvcicsIHR5cGU6ICdBc3luY0l0ZXJhdG9yJywgaXRlbXM6IFR5cGVDbG9uZS5DbG9uZShpdGVtcykgfSk7XG4gICAgfVxuICAgIC8qKiBgW0V4dGVuZGVkXWAgQ29uc3RydWN0cyBhIHR5cGUgYnkgcmVjdXJzaXZlbHkgdW53cmFwcGluZyBQcm9taXNlIHR5cGVzICovXG4gICAgQXdhaXRlZChzY2hlbWEsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBBd2FpdGVkUmVzdCA9IChyZXN0KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzdC5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Q7XG4gICAgICAgICAgICBjb25zdCBbTCwgLi4uUl0gPSByZXN0O1xuICAgICAgICAgICAgcmV0dXJuIFt0aGlzLkF3YWl0ZWQoTCksIC4uLkF3YWl0ZWRSZXN0KFIpXTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgICAgIHJldHVybiAoVHlwZUd1YXJkLlRJbnRlcnNlY3Qoc2NoZW1hKSA/IGV4cG9ydHMuVHlwZS5JbnRlcnNlY3QoQXdhaXRlZFJlc3Qoc2NoZW1hLmFsbE9mKSkgOlxuICAgICAgICAgICAgVHlwZUd1YXJkLlRVbmlvbihzY2hlbWEpID8gZXhwb3J0cy5UeXBlLlVuaW9uKEF3YWl0ZWRSZXN0KHNjaGVtYS5hbnlPZikpIDpcbiAgICAgICAgICAgICAgICBUeXBlR3VhcmQuVFByb21pc2Uoc2NoZW1hKSA/IHRoaXMuQXdhaXRlZChzY2hlbWEuaXRlbSkgOlxuICAgICAgICAgICAgICAgICAgICBUeXBlQ2xvbmUuQ2xvbmUoc2NoZW1hLCBvcHRpb25zKSk7XG4gICAgfVxuICAgIC8qKiBgW0V4dGVuZGVkXWAgQ3JlYXRlcyBhIEJpZ0ludCB0eXBlICovXG4gICAgQmlnSW50KG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5DcmVhdGUoeyAuLi5vcHRpb25zLCBbZXhwb3J0cy5LaW5kXTogJ0JpZ0ludCcsIHR5cGU6ICdiaWdpbnQnIH0pO1xuICAgIH1cbiAgICAvKiogYFtFeHRlbmRlZF1gIEV4dHJhY3RzIHRoZSBDb25zdHJ1Y3RvclBhcmFtZXRlcnMgZnJvbSB0aGUgZ2l2ZW4gQ29uc3RydWN0b3IgdHlwZSAqL1xuICAgIENvbnN0cnVjdG9yUGFyYW1ldGVycyhzY2hlbWEsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5UdXBsZShbLi4uc2NoZW1hLnBhcmFtZXRlcnNdLCB7IC4uLm9wdGlvbnMgfSk7XG4gICAgfVxuICAgIC8qKiBgW0V4dGVuZGVkXWAgQ3JlYXRlcyBhIENvbnN0cnVjdG9yIHR5cGUgKi9cbiAgICBDb25zdHJ1Y3RvcihwYXJhbWV0ZXJzLCByZXR1cm5zLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGNsb25lZFJldHVybnMgPSBUeXBlQ2xvbmUuQ2xvbmUocmV0dXJucyk7XG4gICAgICAgIGNvbnN0IGNsb25lZFBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBUeXBlQ2xvbmUuQ2xvbmUocGFyYW1ldGVyKSk7XG4gICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZSh7IC4uLm9wdGlvbnMsIFtleHBvcnRzLktpbmRdOiAnQ29uc3RydWN0b3InLCB0eXBlOiAnY29uc3RydWN0b3InLCBwYXJhbWV0ZXJzOiBjbG9uZWRQYXJhbWV0ZXJzLCByZXR1cm5zOiBjbG9uZWRSZXR1cm5zIH0pO1xuICAgIH1cbiAgICAvKiogYFtFeHRlbmRlZF1gIENyZWF0ZXMgYSBEYXRlIHR5cGUgKi9cbiAgICBEYXRlKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5DcmVhdGUoeyAuLi5vcHRpb25zLCBbZXhwb3J0cy5LaW5kXTogJ0RhdGUnLCB0eXBlOiAnRGF0ZScgfSk7XG4gICAgfVxuICAgIC8qKiBgW0V4dGVuZGVkXWAgQ3JlYXRlcyBhIEZ1bmN0aW9uIHR5cGUgKi9cbiAgICBGdW5jdGlvbihwYXJhbWV0ZXJzLCByZXR1cm5zLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGNsb25lZFJldHVybnMgPSBUeXBlQ2xvbmUuQ2xvbmUocmV0dXJucywge30pO1xuICAgICAgICBjb25zdCBjbG9uZWRQYXJhbWV0ZXJzID0gcGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4gVHlwZUNsb25lLkNsb25lKHBhcmFtZXRlcikpO1xuICAgICAgICByZXR1cm4gdGhpcy5DcmVhdGUoeyAuLi5vcHRpb25zLCBbZXhwb3J0cy5LaW5kXTogJ0Z1bmN0aW9uJywgdHlwZTogJ2Z1bmN0aW9uJywgcGFyYW1ldGVyczogY2xvbmVkUGFyYW1ldGVycywgcmV0dXJuczogY2xvbmVkUmV0dXJucyB9KTtcbiAgICB9XG4gICAgLyoqIGBbRXh0ZW5kZWRdYCBFeHRyYWN0cyB0aGUgSW5zdGFuY2VUeXBlIGZyb20gdGhlIGdpdmVuIENvbnN0cnVjdG9yIHR5cGUgKi9cbiAgICBJbnN0YW5jZVR5cGUoc2NoZW1hLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIFR5cGVDbG9uZS5DbG9uZShzY2hlbWEucmV0dXJucywgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKiBgW0V4dGVuZGVkXWAgQ3JlYXRlcyBhbiBJdGVyYXRvciB0eXBlICovXG4gICAgSXRlcmF0b3IoaXRlbXMsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5DcmVhdGUoeyAuLi5vcHRpb25zLCBbZXhwb3J0cy5LaW5kXTogJ0l0ZXJhdG9yJywgdHlwZTogJ0l0ZXJhdG9yJywgaXRlbXM6IFR5cGVDbG9uZS5DbG9uZShpdGVtcykgfSk7XG4gICAgfVxuICAgIC8qKiBgW0V4dGVuZGVkXWAgRXh0cmFjdHMgdGhlIFBhcmFtZXRlcnMgZnJvbSB0aGUgZ2l2ZW4gRnVuY3Rpb24gdHlwZSAqL1xuICAgIFBhcmFtZXRlcnMoc2NoZW1hLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuVHVwbGUoc2NoZW1hLnBhcmFtZXRlcnMsIHsgLi4ub3B0aW9ucyB9KTtcbiAgICB9XG4gICAgLyoqIGBbRXh0ZW5kZWRdYCBDcmVhdGVzIGEgUHJvbWlzZSB0eXBlICovXG4gICAgUHJvbWlzZShpdGVtLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlKHsgLi4ub3B0aW9ucywgW2V4cG9ydHMuS2luZF06ICdQcm9taXNlJywgdHlwZTogJ1Byb21pc2UnLCBpdGVtOiBUeXBlQ2xvbmUuQ2xvbmUoaXRlbSkgfSk7XG4gICAgfVxuICAgIC8qKiBgW0V4dGVuZGVkXWAgQ3JlYXRlcyBhIFN0cmluZyB0eXBlICovXG4gICAgUmVnRXhwKHVucmVzb2x2ZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gVmFsdWVHdWFyZC5Jc1N0cmluZyh1bnJlc29sdmVkKSA/IHVucmVzb2x2ZWQgOiB1bnJlc29sdmVkLnNvdXJjZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlKHsgLi4ub3B0aW9ucywgW2V4cG9ydHMuS2luZF06ICdTdHJpbmcnLCB0eXBlOiAnc3RyaW5nJywgcGF0dGVybiB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIGBUeXBlLlJlZ0V4cGBcbiAgICAgKi9cbiAgICBSZWdFeChyZWdleCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLlJlZ0V4cChyZWdleCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKiBgW0V4dGVuZGVkXWAgRXh0cmFjdHMgdGhlIFJldHVyblR5cGUgZnJvbSB0aGUgZ2l2ZW4gRnVuY3Rpb24gdHlwZSAqL1xuICAgIFJldHVyblR5cGUoc2NoZW1hLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIFR5cGVDbG9uZS5DbG9uZShzY2hlbWEucmV0dXJucywgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKiBgW0V4dGVuZGVkXWAgQ3JlYXRlcyBhIFN5bWJvbCB0eXBlICovXG4gICAgU3ltYm9sKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlKHsgLi4ub3B0aW9ucywgW2V4cG9ydHMuS2luZF06ICdTeW1ib2wnLCB0eXBlOiAnc3ltYm9sJyB9KTtcbiAgICB9XG4gICAgLyoqIGBbRXh0ZW5kZWRdYCBDcmVhdGVzIGEgVW5kZWZpbmVkIHR5cGUgKi9cbiAgICBVbmRlZmluZWQob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZSh7IC4uLm9wdGlvbnMsIFtleHBvcnRzLktpbmRdOiAnVW5kZWZpbmVkJywgdHlwZTogJ3VuZGVmaW5lZCcgfSk7XG4gICAgfVxuICAgIC8qKiBgW0V4dGVuZGVkXWAgQ3JlYXRlcyBhIFVpbnQ4QXJyYXkgdHlwZSAqL1xuICAgIFVpbnQ4QXJyYXkob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZSh7IC4uLm9wdGlvbnMsIFtleHBvcnRzLktpbmRdOiAnVWludDhBcnJheScsIHR5cGU6ICdVaW50OEFycmF5JyB9KTtcbiAgICB9XG4gICAgLyoqIGBbRXh0ZW5kZWRdYCBDcmVhdGVzIGEgVm9pZCB0eXBlICovXG4gICAgVm9pZChvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlKHsgLi4ub3B0aW9ucywgW2V4cG9ydHMuS2luZF06ICdWb2lkJywgdHlwZTogJ3ZvaWQnIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuRXh0ZW5kZWRUeXBlQnVpbGRlciA9IEV4dGVuZGVkVHlwZUJ1aWxkZXI7XG4vKiogSlNPTiBTY2hlbWEgVHlwZSBCdWlsZGVyIHdpdGggU3RhdGljIFJlc29sdXRpb24gZm9yIFR5cGVTY3JpcHQgKi9cbmV4cG9ydHMuU3RhbmRhcmRUeXBlID0gbmV3IFN0YW5kYXJkVHlwZUJ1aWxkZXIoKTtcbi8qKiBKU09OIFNjaGVtYSBUeXBlIEJ1aWxkZXIgd2l0aCBTdGF0aWMgUmVzb2x1dGlvbiBmb3IgVHlwZVNjcmlwdCAqL1xuZXhwb3J0cy5UeXBlID0gbmV3IEV4dGVuZGVkVHlwZUJ1aWxkZXIoKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///213\n\n}");
251
+
252
+ /***/ },
253
+
254
+ /***/ 758
255
+ /*!************************************************************************************************************!*\
256
+ !*** ../../../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-dev-runtime.development.js ***!
257
+ \************************************************************************************************************/
258
+ (__unused_webpack_module, exports, __webpack_require__) {
259
+
260
+ eval("{/**\n * @license React\n * react-jsx-dev-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n (function() {\n'use strict';\n\nvar React = __webpack_require__(/*! react */ 27);\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var displayName = outerType.displayName;\n\n if (displayName) {\n return displayName;\n }\n\n var functionName = innerType.displayName || innerType.name || '';\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\n\nfunction getComponentNameFromType(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n var context = type;\n return getContextName(context) + '.Consumer';\n\n case REACT_PROVIDER_TYPE:\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n var outerName = type.displayName || null;\n\n if (outerName !== null) {\n return outerName;\n }\n\n return getComponentNameFromType(type.type) || 'Memo';\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentNameFromType(init(payload));\n } catch (x) {\n return null;\n }\n }\n\n // eslint-disable-next-line no-fallthrough\n }\n }\n\n return null;\n}\n\nvar assign = Object.assign;\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: assign({}, props, {\n value: prevLog\n }),\n info: assign({}, props, {\n value: prevInfo\n }),\n warn: assign({}, props, {\n value: prevWarn\n }),\n error: assign({}, props, {\n value: prevError\n }),\n group: assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if ( !fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n var control;\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n }\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n }\n\n fn();\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sample.stack.split('\\n');\n var controlLines = control.stack.split('\\n');\n var s = sampleLines.length - 1;\n var c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n // but we have a user-provided \"displayName\"\n // splice it in to make the stack more readable.\n\n\n if (fn.displayName && _frame.includes('<anonymous>')) {\n _frame = _frame.replace('<anonymous>', fn.displayName);\n }\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n {\n // $FlowFixMe This is okay but Flow doesn't know it.\n var has = Function.call.bind(hasOwnProperty);\n\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n // eslint-disable-next-line react-internal/prod-error-codes\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n } catch (ex) {\n error$1 = ex;\n }\n\n if (error$1 && !(error$1 instanceof Error)) {\n setCurrentlyValidatingElement(element);\n\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n setCurrentlyValidatingElement(null);\n }\n\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error$1.message] = true;\n setCurrentlyValidatingElement(element);\n\n error('Failed %s type: %s', location, error$1.message);\n\n setCurrentlyValidatingElement(null);\n }\n }\n }\n }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe only called in DEV, so void return is not possible.\nfunction typeName(value) {\n {\n // toStringTag is needed for namespaced types like Temporal.Instant\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\n return type;\n }\n} // $FlowFixMe only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n {\n try {\n testStringCoercion(value);\n return false;\n } catch (e) {\n return true;\n }\n }\n}\n\nfunction testStringCoercion(value) {\n // If you ended up here by following an exception call stack, here's what's\n // happened: you supplied an object or symbol value to React (as a prop, key,\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\n // coerce it to a string using `'' + value`, an exception was thrown.\n //\n // The most common types that will cause this exception are `Symbol` instances\n // and Temporal objects like `Temporal.Instant`. But any object that has a\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n // exception. (Library authors do this to prevent users from using built-in\n // numeric operators like `+` or comparison operators like `>=` because custom\n // methods are needed to perform accurate arithmetic or comparison.)\n //\n // To fix the problem, coerce this object or symbol value to a string before\n // passing it to React. The most reliable way is usually `String(value)`.\n //\n // To find which value is throwing, check the browser or debugger console.\n // Before this exception was thrown, there should be `console.error` output\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n // problem and how that type was used: key, atrribute, input value prop, etc.\n // In most cases, this console output also shows the component and its\n // ancestor components where the exception happened.\n //\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV(type, config, maybeKey, source, self) {\n {\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n\n if (maybeKey !== undefined) {\n {\n checkKeyStringCoercion(maybeKey);\n }\n\n key = '' + maybeKey;\n }\n\n if (hasValidKey(config)) {\n {\n checkKeyStringCoercion(config.key);\n }\n\n key = '' + config.key;\n }\n\n if (hasValidRef(config)) {\n ref = config.ref;\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n }\n }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }\n}\n\nfunction getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner$1.current) {\n var name = getComponentNameFromType(ReactCurrentOwner$1.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n\n return '';\n }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement$1(element);\n\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n setCurrentlyValidatingElement$1(null);\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n {\n if (typeof node !== 'object') {\n return;\n }\n\n if (isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n {\n var type = element.type;\n\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n\n var propTypes;\n\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n\n if (propTypes) {\n // Intentionally inside to avoid triggering lazy initializers:\n var name = getComponentNameFromType(type);\n checkPropTypes(propTypes, element.props, 'prop', name, element);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n var _name = getComponentNameFromType(type);\n\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n }\n\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement$1(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement$1(null);\n }\n }\n}\n\nvar didWarnAboutKeySpread = {};\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n\n if (!validType) {\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendum(source);\n\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n\n var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n\n\n if (validType) {\n var children = props.children;\n\n if (children !== undefined) {\n if (isStaticChildren) {\n if (isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n validateChildKeys(children[i], type);\n }\n\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n }\n\n {\n if (hasOwnProperty.call(props, 'key')) {\n var componentName = getComponentNameFromType(type);\n var keys = Object.keys(props).filter(function (k) {\n return k !== 'key';\n });\n var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\n\n if (!didWarnAboutKeySpread[componentName + beforeExample]) {\n var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\n\n error('A props object containing a \"key\" prop is being spread into JSX:\\n' + ' let props = %s;\\n' + ' <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + ' let props = %s;\\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\n\n didWarnAboutKeySpread[componentName + beforeExample] = true;\n }\n }\n }\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n }\n} // These two functions exist to still get child warnings in dev\n\nvar jsxDEV$1 = jsxWithValidation ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsxDEV = jsxDEV$1;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzU4LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7QUFFYixJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLGVBQU87O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUdBQWlHLGVBQWU7QUFDaEg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBLEtBQUssR0FBRzs7QUFFUixrREFBa0Q7QUFDbEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsNEJBQTRCO0FBQzVCO0FBQ0EscUNBQXFDOztBQUVyQyxnQ0FBZ0M7QUFDaEM7QUFDQTs7QUFFQSxnQ0FBZ0M7O0FBRWhDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1Qzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0EsU0FBUztBQUNULHVCQUF1QjtBQUN2QjtBQUNBLFNBQVM7QUFDVCx1QkFBdUI7QUFDdkI7QUFDQSxTQUFTO0FBQ1Qsd0JBQXdCO0FBQ3hCO0FBQ0EsU0FBUztBQUNULHdCQUF3QjtBQUN4QjtBQUNBLFNBQVM7QUFDVCxpQ0FBaUM7QUFDakM7QUFDQSxTQUFTO0FBQ1QsMkJBQTJCO0FBQzNCO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNB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QVU7QUFDbkM7QUFDQSxhQUFhLFVBQVU7QUFDdkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQixZQUFZLFNBQVM7QUFDckI7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QixXQUFXLEdBQUc7QUFDZDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw2REFBNkQ7QUFDN0Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFdBQVc7QUFDdEIsV0FBVyxHQUFHO0FBQ2Q7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0IsaUJBQWlCO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sNENBQTRDOztBQUU1Qzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLGlCQUFpQjtBQUNyQzs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsOENBQThDO0FBQzlDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDBEQUEwRDtBQUMxRDs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixxQkFBcUI7QUFDakQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULGdEQUFnRCxnREFBZ0QsTUFBTSxhQUFhOztBQUVuSDtBQUNBLGlEQUFpRCxrQ0FBa0MsT0FBTzs7QUFFMUYseUdBQXlHLGNBQWMsVUFBVSxnR0FBZ0csa0JBQWtCLFVBQVUsVUFBVTs7QUFFdlE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGOztBQUVBLGdCQUFnQjtBQUNoQixjQUFjO0FBQ2QsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGV4cGNsdXN0ZXIvcGVybWlzc2lvbi1ncm91cHMvLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0QDE4LjMuMS9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcz8xZTk1Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbi8vIEFUVEVOVElPTlxuLy8gV2hlbiBhZGRpbmcgbmV3IHN5bWJvbHMgdG8gdGhpcyBmaWxlLFxuLy8gUGxlYXNlIGNvbnNpZGVyIGFsc28gYWRkaW5nIHRvICdyZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvUmVhY3RTeW1ib2xzJ1xuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpO1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucG9ydGFsJyk7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmZyYWdtZW50Jyk7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuY29udGV4dCcpO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJyk7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubGF6eScpO1xudmFyIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Qub2Zmc2NyZWVuJyk7XG52YXIgTUFZQkVfSVRFUkFUT1JfU1lNQk9MID0gU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gIGlmIChtYXliZUl0ZXJhYmxlID09PSBudWxsIHx8IHR5cGVvZiBtYXliZUl0ZXJhYmxlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1heWJlSXRlcmF0b3IgPSBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuXG4gIGlmICh0eXBlb2YgbWF5YmVJdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXliZUl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBSZWFjdFNoYXJlZEludGVybmFscyA9IFJlYWN0Ll9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEO1xuXG5mdW5jdGlvbiBlcnJvcihmb3JtYXQpIHtcbiAge1xuICAgIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG5cbiAgICAgIHByaW50V2FybmluZygnZXJyb3InLCBmb3JtYXQsIGFyZ3MpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludFdhcm5pbmcobGV2ZWwsIGZvcm1hdCwgYXJncykge1xuICAvLyBXaGVuIGNoYW5naW5nIHRoaXMgbG9naWMsIHlvdSBtaWdodCB3YW50IHRvIGFsc29cbiAgLy8gdXBkYXRlIGNvbnNvbGVXaXRoU3RhY2tEZXYud3d3LmpzIGFzIHdlbGwuXG4gIHtcbiAgICB2YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG4gICAgdmFyIHN0YWNrID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtKCk7XG5cbiAgICBpZiAoc3RhY2sgIT09ICcnKSB7XG4gICAgICBmb3JtYXQgKz0gJyVzJztcbiAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChbc3RhY2tdKTtcbiAgICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9zYWZlLXN0cmluZy1jb2VyY2lvblxuXG5cbiAgICB2YXIgYXJnc1dpdGhGb3JtYXQgPSBhcmdzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIFN0cmluZyhpdGVtKTtcbiAgICB9KTsgLy8gQ2FyZWZ1bDogUk4gY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcmVmaXhcblxuICAgIGFyZ3NXaXRoRm9ybWF0LnVuc2hpZnQoJ1dhcm5pbmc6ICcgKyBmb3JtYXQpOyAvLyBXZSBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBzcHJlYWQgKG9yIC5hcHBseSkgZGlyZWN0bHkgYmVjYXVzZSBpdFxuICAgIC8vIGJyZWFrcyBJRTk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2MTBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nXG5cbiAgICBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlW2xldmVsXSwgY29uc29sZSwgYXJnc1dpdGhGb3JtYXQpO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBlbmFibGVTY29wZUFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgQ3JlYXRlIEV2ZW50IEhhbmRsZSBBUEkuXG52YXIgZW5hYmxlQ2FjaGVFbGVtZW50ID0gZmFsc2U7XG52YXIgZW5hYmxlVHJhbnNpdGlvblRyYWNpbmcgPSBmYWxzZTsgLy8gTm8ga25vd24gYnVncywgYnV0IG5lZWRzIHBlcmZvcm1hbmNlIHRlc3RpbmdcblxudmFyIGVuYWJsZUxlZ2FjeUhpZGRlbiA9IGZhbHNlOyAvLyBFbmFibGVzIHVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrIGZlYXR1cmUgaW4gRmliZXJcbi8vIHN0dWZmLiBJbnRlbmRlZCB0byBlbmFibGUgUmVhY3QgY29yZSBtZW1iZXJzIHRvIG1vcmUgZWFzaWx5IGRlYnVnIHNjaGVkdWxpbmdcbi8vIGlzc3VlcyBpbiBERVYgYnVpbGRzLlxuXG52YXIgZW5hYmxlRGVidWdUcmFjaW5nID0gZmFsc2U7IC8vIFRyYWNrIHdoaWNoIEZpYmVyKHMpIHNjaGVkdWxlIHJlbmRlciB3b3JrLlxuXG52YXIgUkVBQ1RfTU9EVUxFX1JFRkVSRU5DRTtcblxue1xuICBSRUFDVF9NT0RVTEVfUkVGRVJFTkNFID0gU3ltYm9sLmZvcigncmVhY3QubW9kdWxlLnJlZmVyZW5jZScpO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gTm90ZTogdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgKGUuZy4gaWYgaXQncyBhIHBvbHlmaWxsKS5cblxuXG4gIGlmICh0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgZW5hYmxlRGVidWdUcmFjaW5nICB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IGVuYWJsZUxlZ2FjeUhpZGRlbiAgfHwgdHlwZSA9PT0gUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgfHwgZW5hYmxlU2NvcGVBUEkgIHx8IGVuYWJsZUNhY2hlRWxlbWVudCAgfHwgZW5hYmxlVHJhbnNpdGlvblRyYWNpbmcgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IC8vIFRoaXMgbmVlZHMgdG8gaW5jbHVkZSBhbGwgcG9zc2libGUgbW9kdWxlIHJlZmVyZW5jZSBvYmplY3RcbiAgICAvLyB0eXBlcyBzdXBwb3J0ZWQgYnkgYW55IEZsaWdodCBjb25maWd1cmF0aW9uIGFueXdoZXJlIHNpbmNlXG4gICAgLy8gd2UgZG9uJ3Qga25vdyB3aGljaCBGbGlnaHQgYnVpbGQgdGhpcyB3aWxsIGVuZCB1cCBiZWluZyB1c2VkXG4gICAgLy8gd2l0aC5cbiAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NT0RVTEVfUkVGRVJFTkNFIHx8IHR5cGUuZ2V0TW9kdWxlSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRXcmFwcGVkTmFtZShvdXRlclR5cGUsIGlubmVyVHlwZSwgd3JhcHBlck5hbWUpIHtcbiAgdmFyIGRpc3BsYXlOYW1lID0gb3V0ZXJUeXBlLmRpc3BsYXlOYW1lO1xuXG4gIGlmIChkaXNwbGF5TmFtZSkge1xuICAgIHJldHVybiBkaXNwbGF5TmFtZTtcbiAgfVxuXG4gIHZhciBmdW5jdGlvbk5hbWUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgJyc7XG4gIHJldHVybiBmdW5jdGlvbk5hbWUgIT09ICcnID8gd3JhcHBlck5hbWUgKyBcIihcIiArIGZ1bmN0aW9uTmFtZSArIFwiKVwiIDogd3JhcHBlck5hbWU7XG59IC8vIEtlZXAgaW4gc3luYyB3aXRoIHJlYWN0LXJlY29uY2lsZXIvZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlclxuXG5cbmZ1bmN0aW9uIGdldENvbnRleHROYW1lKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgJ0NvbnRleHQnO1xufSAvLyBOb3RlIHRoYXQgdGhlIHJlY29uY2lsZXIgcGFja2FnZSBzaG91bGQgZ2VuZXJhbGx5IHByZWZlciB0byB1c2UgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcigpIGluc3RlYWQuXG5cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIC8vIEhvc3Qgcm9vdCwgdGV4dCBub2RlIG9yIGp1c3QgaW52YWxpZCB0eXBlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAge1xuICAgIGlmICh0eXBlb2YgdHlwZS50YWcgPT09ICdudW1iZXInKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKCkuICcgKyAnVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgcmV0dXJuICdGcmFnbWVudCc7XG5cbiAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgcmV0dXJuICdQb3J0YWwnO1xuXG4gICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgcmV0dXJuICdQcm9maWxlcic7XG5cbiAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcblxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgIHZhciBjb250ZXh0ID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKGNvbnRleHQpICsgJy5Db25zdW1lcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgdmFyIHByb3ZpZGVyID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKHByb3ZpZGVyLl9jb250ZXh0KSArICcuUHJvdmlkZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRXcmFwcGVkTmFtZSh0eXBlLCB0eXBlLnJlbmRlciwgJ0ZvcndhcmRSZWYnKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIHZhciBvdXRlck5hbWUgPSB0eXBlLmRpc3BsYXlOYW1lIHx8IG51bGw7XG5cbiAgICAgICAgaWYgKG91dGVyTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBvdXRlck5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgJ01lbW8nO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoaW5pdChwYXlsb2FkKSk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLy8gSGVscGVycyB0byBwYXRjaCBjb25zb2xlLmxvZ3MgdG8gYXZvaWQgbG9nZ2luZyBkdXJpbmcgc2lkZS1lZmZlY3QgZnJlZVxuLy8gcmVwbGF5aW5nIG9uIHJlbmRlciBmdW5jdGlvbi4gVGhpcyBjdXJyZW50bHkgb25seSBwYXRjaGVzIHRoZSBvYmplY3Rcbi8vIGxhemlseSB3aGljaCB3b24ndCBjb3ZlciBpZiB0aGUgbG9nIGZ1bmN0aW9uIHdhcyBleHRyYWN0ZWQgZWFnZXJseS5cbi8vIFdlIGNvdWxkIGFsc28gZWFnZXJseSBwYXRjaCB0aGUgbWV0aG9kLlxudmFyIGRpc2FibGVkRGVwdGggPSAwO1xudmFyIHByZXZMb2c7XG52YXIgcHJldkluZm87XG52YXIgcHJldldhcm47XG52YXIgcHJldkVycm9yO1xudmFyIHByZXZHcm91cDtcbnZhciBwcmV2R3JvdXBDb2xsYXBzZWQ7XG52YXIgcHJldkdyb3VwRW5kO1xuXG5mdW5jdGlvbiBkaXNhYmxlZExvZygpIHt9XG5cbmRpc2FibGVkTG9nLl9fcmVhY3REaXNhYmxlZExvZyA9IHRydWU7XG5mdW5jdGlvbiBkaXNhYmxlTG9ncygpIHtcbiAge1xuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHByZXZMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgIHByZXZJbmZvID0gY29uc29sZS5pbmZvO1xuICAgICAgcHJldldhcm4gPSBjb25zb2xlLndhcm47XG4gICAgICBwcmV2RXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgICAgcHJldkdyb3VwID0gY29uc29sZS5ncm91cDtcbiAgICAgIHByZXZHcm91cENvbGxhcHNlZCA9IGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ7XG4gICAgICBwcmV2R3JvdXBFbmQgPSBjb25zb2xlLmdyb3VwRW5kOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE5MDk5XG5cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogZGlzYWJsZWRMb2csXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGluZm86IHByb3BzLFxuICAgICAgICBsb2c6IHByb3BzLFxuICAgICAgICB3YXJuOiBwcm9wcyxcbiAgICAgICAgZXJyb3I6IHByb3BzLFxuICAgICAgICBncm91cDogcHJvcHMsXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBFbmQ6IHByb3BzXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgZGlzYWJsZWREZXB0aCsrO1xuICB9XG59XG5mdW5jdGlvbiByZWVuYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBkaXNhYmxlZERlcHRoLS07XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgbG9nOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZMb2dcbiAgICAgICAgfSksXG4gICAgICAgIGluZm86IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkluZm9cbiAgICAgICAgfSksXG4gICAgICAgIHdhcm46IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldldhcm5cbiAgICAgICAgfSksXG4gICAgICAgIGVycm9yOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZFcnJvclxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXA6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cENvbGxhcHNlZDogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBDb2xsYXBzZWRcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwRW5kOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cEVuZFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGlmIChkaXNhYmxlZERlcHRoIDwgMCkge1xuICAgICAgZXJyb3IoJ2Rpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG52YXIgcHJlZml4O1xuZnVuY3Rpb24gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICBpZiAocHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEV4dHJhY3QgdGhlIFZNIHNwZWNpZmljIHByZWZpeCB1c2VkIGJ5IGVhY2ggbGluZS5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHguc3RhY2sudHJpbSgpLm1hdGNoKC9cXG4oICooYXQgKT8pLyk7XG4gICAgICAgIHByZWZpeCA9IG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xuICAgICAgfVxuICAgIH0gLy8gV2UgdXNlIHRoZSBwcmVmaXggdG8gZW5zdXJlIG91ciBzdGFja3MgbGluZSB1cCB3aXRoIG5hdGl2ZSBzdGFjayBmcmFtZXMuXG5cblxuICAgIHJldHVybiAnXFxuJyArIHByZWZpeCArIG5hbWU7XG4gIH1cbn1cbnZhciByZWVudHJ5ID0gZmFsc2U7XG52YXIgY29tcG9uZW50RnJhbWVDYWNoZTtcblxue1xuICB2YXIgUG9zc2libHlXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgPyBXZWFrTWFwIDogTWFwO1xuICBjb21wb25lbnRGcmFtZUNhY2hlID0gbmV3IFBvc3NpYmx5V2Vha01hcCgpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBjb25zdHJ1Y3QpIHtcbiAgLy8gSWYgc29tZXRoaW5nIGFza2VkIGZvciBhIHN0YWNrIGluc2lkZSBhIGZha2UgcmVuZGVyLCBpdCBzaG91bGQgZ2V0IGlnbm9yZWQuXG4gIGlmICggIWZuIHx8IHJlZW50cnkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB7XG4gICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xuXG4gICAgaWYgKGZyYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmcmFtZTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29udHJvbDtcbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWUgSXQgZG9lcyBhY2NlcHQgdW5kZWZpbmVkLlxuXG4gIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdW5kZWZpbmVkO1xuICB2YXIgcHJldmlvdXNEaXNwYXRjaGVyO1xuXG4gIHtcbiAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQ7IC8vIFNldCB0aGUgZGlzcGF0Y2hlciBpbiBERVYgYmVjYXVzZSB0aGlzIG1pZ2h0IGJlIGNhbGwgaW4gdGhlIHJlbmRlciBmdW5jdGlvblxuICAgIC8vIGZvciB3YXJuaW5ncy5cblxuICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudCA9IG51bGw7XG4gICAgZGlzYWJsZUxvZ3MoKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gVGhpcyBzaG91bGQgdGhyb3cuXG4gICAgaWYgKGNvbnN0cnVjdCkge1xuICAgICAgLy8gU29tZXRoaW5nIHNob3VsZCBiZSBzZXR0aW5nIHRoZSBwcm9wcyBpbiB0aGUgY29uc3RydWN0b3IuXG4gICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH07IC8vICRGbG93Rml4TWVcblxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmFrZS5wcm90b3R5cGUsICdwcm9wcycsIHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gV2UgdXNlIGEgdGhyb3dpbmcgc2V0dGVyIGluc3RlYWQgb2YgZnJvemVuIG9yIG5vbi13cml0YWJsZSBwcm9wc1xuICAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCB3b24ndCB0aHJvdyBpbiBhIG5vbi1zdHJpY3QgbW9kZSBmdW5jdGlvbi5cbiAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAvLyBXZSBjb25zdHJ1Y3QgYSBkaWZmZXJlbnQgY29udHJvbCBmb3IgdGhpcyBjYXNlIHRvIGluY2x1ZGUgYW55IGV4dHJhXG4gICAgICAgIC8vIGZyYW1lcyBhZGRlZCBieSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoRmFrZSwgW10pO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChmbiwgW10sIEZha2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBGYWtlLmNhbGwoKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgZm4uY2FsbChGYWtlLnByb3RvdHlwZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgfVxuXG4gICAgICBmbigpO1xuICAgIH1cbiAgfSBjYXRjaCAoc2FtcGxlKSB7XG4gICAgLy8gVGhpcyBpcyBpbmxpbmVkIG1hbnVhbGx5IGJlY2F1c2UgY2xvc3VyZSBkb2Vzbid0IGRvIGl0IGZvciB1cy5cbiAgICBpZiAoc2FtcGxlICYmIGNvbnRyb2wgJiYgdHlwZW9mIHNhbXBsZS5zdGFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFRoaXMgZXh0cmFjdHMgdGhlIGZpcnN0IGZyYW1lIGZyb20gdGhlIHNhbXBsZSB0aGF0IGlzbid0IGFsc28gaW4gdGhlIGNvbnRyb2wuXG4gICAgICAvLyBTa2lwcGluZyBvbmUgZnJhbWUgdGhhdCB3ZSBhc3N1bWUgaXMgdGhlIGZyYW1lIHRoYXQgY2FsbHMgdGhlIHR3by5cbiAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZS5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgY29udHJvbExpbmVzID0gY29udHJvbC5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgcyA9IHNhbXBsZUxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgYyA9IGNvbnRyb2xMaW5lcy5sZW5ndGggLSAxO1xuXG4gICAgICB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCAmJiBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgIC8vIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgc3RhY2sgZnJhbWUgdG8gYmUgc2hhcmVkLlxuICAgICAgICAvLyBUeXBpY2FsbHkgdGhpcyB3aWxsIGJlIHRoZSByb290IG1vc3Qgb25lLiBIb3dldmVyLCBzdGFjayBmcmFtZXMgbWF5IGJlXG4gICAgICAgIC8vIGN1dCBvZmYgZHVlIHRvIG1heGltdW0gc3RhY2sgbGltaXRzLiBJbiB0aGlzIGNhc2UsIG9uZSBtYXliZSBjdXQgb2ZmXG4gICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGUgb3RoZXIuIFdlIGFzc3VtZSB0aGF0IHRoZSBzYW1wbGUgaXMgbG9uZ2VyIG9yIHRoZSBzYW1lXG4gICAgICAgIC8vIGFuZCB0aGVyZSBmb3IgY3V0IG9mZiBlYXJsaWVyLiBTbyB3ZSBzaG91bGQgZmluZCB0aGUgcm9vdCBtb3N0IGZyYW1lIGluXG4gICAgICAgIC8vIHRoZSBzYW1wbGUgc29tZXdoZXJlIGluIHRoZSBjb250cm9sLlxuICAgICAgICBjLS07XG4gICAgICB9XG5cbiAgICAgIGZvciAoOyBzID49IDEgJiYgYyA+PSAwOyBzLS0sIGMtLSkge1xuICAgICAgICAvLyBOZXh0IHdlIGZpbmQgdGhlIGZpcnN0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHdoaWNoIHNob3VsZCBiZSB0aGVcbiAgICAgICAgLy8gZnJhbWUgdGhhdCBjYWxsZWQgb3VyIHNhbXBsZSBmdW5jdGlvbiBhbmQgdGhlIGNvbnRyb2wuXG4gICAgICAgIGlmIChzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgLy8gSW4gVjgsIHRoZSBmaXJzdCBsaW5lIGlzIGRlc2NyaWJpbmcgdGhlIG1lc3NhZ2UgYnV0IG90aGVyIFZNcyBkb24ndC5cbiAgICAgICAgICAvLyBJZiB3ZSdyZSBhYm91dCB0byByZXR1cm4gdGhlIGZpcnN0IGxpbmUsIGFuZCB0aGUgY29udHJvbCBpcyBhbHNvIG9uIHRoZSBzYW1lXG4gICAgICAgICAgLy8gbGluZSwgdGhhdCdzIGEgcHJldHR5IGdvb2QgaW5kaWNhdG9yIHRoYXQgb3VyIHNhbXBsZSB0aHJldyBhdCBzYW1lIGxpbmUgYXNcbiAgICAgICAgICAvLyB0aGUgY29udHJvbC4gSS5lLiBiZWZvcmUgd2UgZW50ZXJlZCB0aGUgc2FtcGxlIGZyYW1lLiBTbyB3ZSBpZ25vcmUgdGhpcyByZXN1bHQuXG4gICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHlvdSBwYXNzZWQgYSBjbGFzcyB0byBmdW5jdGlvbiBjb21wb25lbnQsIG9yIG5vbi1mdW5jdGlvbi5cbiAgICAgICAgICBpZiAocyAhPT0gMSB8fCBjICE9PSAxKSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIHMtLTtcbiAgICAgICAgICAgICAgYy0tOyAvLyBXZSBtYXkgc3RpbGwgaGF2ZSBzaW1pbGFyIGludGVybWVkaWF0ZSBmcmFtZXMgZnJvbSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgICAgICAgIC8vIFRoZSBuZXh0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHNob3VsZCBiZSBvdXIgbWF0Y2ggdGhvdWdoLlxuXG4gICAgICAgICAgICAgIGlmIChjIDwgMCB8fCBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgICAgICAgLy8gVjggYWRkcyBhIFwibmV3XCIgcHJlZml4IGZvciBuYXRpdmUgY2xhc3Nlcy4gTGV0J3MgcmVtb3ZlIGl0IHRvIG1ha2UgaXQgcHJldHRpZXIuXG4gICAgICAgICAgICAgICAgdmFyIF9mcmFtZSA9ICdcXG4nICsgc2FtcGxlTGluZXNbc10ucmVwbGFjZSgnIGF0IG5ldyAnLCAnIGF0ICcpOyAvLyBJZiBvdXIgY29tcG9uZW50IGZyYW1lIGlzIGxhYmVsZWQgXCI8YW5vbnltb3VzPlwiXG4gICAgICAgICAgICAgICAgLy8gYnV0IHdlIGhhdmUgYSB1c2VyLXByb3ZpZGVkIFwiZGlzcGxheU5hbWVcIlxuICAgICAgICAgICAgICAgIC8vIHNwbGljZSBpdCBpbiB0byBtYWtlIHRoZSBzdGFjayBtb3JlIHJlYWRhYmxlLlxuXG5cbiAgICAgICAgICAgICAgICBpZiAoZm4uZGlzcGxheU5hbWUgJiYgX2ZyYW1lLmluY2x1ZGVzKCc8YW5vbnltb3VzPicpKSB7XG4gICAgICAgICAgICAgICAgICBfZnJhbWUgPSBfZnJhbWUucmVwbGFjZSgnPGFub255bW91cz4nLCBmbi5kaXNwbGF5TmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgX2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IC8vIFJldHVybiB0aGUgbGluZSB3ZSBmb3VuZC5cblxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcmVlbnRyeSA9IGZhbHNlO1xuXG4gICAge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZSwgc291cmNlLCBvd25lckZuKSB7XG5cbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKHR5cGUsIHNob3VsZENvbnN0cnVjdCh0eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLnJlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUudHlwZSwgc291cmNlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBMYXp5IG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihpbml0KHBheWxvYWQpLCBzb3VyY2UsIG93bmVyRm4pO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5zZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZWxlbWVudCkge1xuICB7XG4gICAgLy8gJEZsb3dGaXhNZSBUaGlzIGlzIG9rYXkgYnV0IEZsb3cgZG9lc24ndCBrbm93IGl0LlxuICAgIHZhciBoYXMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoaGFzT3duUHJvcGVydHkpO1xuXG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yJDEgPSB2b2lkIDA7IC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9wcm9kLWVycm9yLWNvZGVzXG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICsgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJyArICdUaGlzIG9mdGVuIGhhcHBlbnMgYmVjYXVzZSBvZiB0eXBvcyBzdWNoIGFzIGBQcm9wVHlwZXMuZnVuY3Rpb25gIGluc3RlYWQgb2YgYFByb3BUeXBlcy5mdW5jYC4nKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVycm9yJDEgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCcpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yJDEgPSBleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxICYmICEoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJyVzOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJXMnICsgJyBgJXNgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAlcy4gJyArICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICsgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBsb2NhdGlvbiwgdHlwZVNwZWNOYW1lLCB0eXBlb2YgZXJyb3IkMSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvciQxLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yJDEubWVzc2FnZV0gPSB0cnVlO1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJ0ZhaWxlZCAlcyB0eXBlOiAlcycsIGxvY2F0aW9uLCBlcnJvciQxLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGlzQXJyYXlJbXBsID0gQXJyYXkuaXNBcnJheTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlZGVjbGFyZVxuXG5mdW5jdGlvbiBpc0FycmF5KGEpIHtcbiAgcmV0dXJuIGlzQXJyYXlJbXBsKGEpO1xufVxuXG4vKlxuICogVGhlIGAnJyArIHZhbHVlYCBwYXR0ZXJuICh1c2VkIGluIGluIHBlcmYtc2Vuc2l0aXZlIGNvZGUpIHRocm93cyBmb3IgU3ltYm9sXG4gKiBhbmQgVGVtcG9yYWwuKiB0eXBlcy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzIyMDY0LlxuICpcbiAqIFRoZSBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUgd2lsbCB0aHJvdyBhbiBlYXNpZXItdG8tdW5kZXJzdGFuZCxcbiAqIGVhc2llci10by1kZWJ1ZyBleGNlcHRpb24gd2l0aCBhIGNsZWFyIGVycm9ycyBtZXNzYWdlIG1lc3NhZ2UgZXhwbGFpbmluZyB0aGVcbiAqIHByb2JsZW0uIChJbnN0ZWFkIG9mIGEgY29uZnVzaW5nIGV4Y2VwdGlvbiB0aHJvd24gaW5zaWRlIHRoZSBpbXBsZW1lbnRhdGlvblxuICogb2YgdGhlIGB2YWx1ZWAgb2JqZWN0KS5cbiAqL1xuLy8gJEZsb3dGaXhNZSBvbmx5IGNhbGxlZCBpbiBERVYsIHNvIHZvaWQgcmV0dXJuIGlzIG5vdCBwb3NzaWJsZS5cbmZ1bmN0aW9uIHR5cGVOYW1lKHZhbHVlKSB7XG4gIHtcbiAgICAvLyB0b1N0cmluZ1RhZyBpcyBuZWVkZWQgZm9yIG5hbWVzcGFjZWQgdHlwZXMgbGlrZSBUZW1wb3JhbC5JbnN0YW50XG4gICAgdmFyIGhhc1RvU3RyaW5nVGFnID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wudG9TdHJpbmdUYWc7XG4gICAgdmFyIHR5cGUgPSBoYXNUb1N0cmluZ1RhZyAmJiB2YWx1ZVtTeW1ib2wudG9TdHJpbmdUYWddIHx8IHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgfHwgJ09iamVjdCc7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cbn0gLy8gJEZsb3dGaXhNZSBvbmx5IGNhbGxlZCBpbiBERVYsIHNvIHZvaWQgcmV0dXJuIGlzIG5vdCBwb3NzaWJsZS5cblxuXG5mdW5jdGlvbiB3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkge1xuICB7XG4gICAgdHJ5IHtcbiAgICAgIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICAvLyBJZiB5b3UgZW5kZWQgdXAgaGVyZSBieSBmb2xsb3dpbmcgYW4gZXhjZXB0aW9uIGNhbGwgc3RhY2ssIGhlcmUncyB3aGF0J3NcbiAgLy8gaGFwcGVuZWQ6IHlvdSBzdXBwbGllZCBhbiBvYmplY3Qgb3Igc3ltYm9sIHZhbHVlIHRvIFJlYWN0IChhcyBhIHByb3AsIGtleSxcbiAgLy8gRE9NIGF0dHJpYnV0ZSwgQ1NTIHByb3BlcnR5LCBzdHJpbmcgcmVmLCBldGMuKSBhbmQgd2hlbiBSZWFjdCB0cmllZCB0b1xuICAvLyBjb2VyY2UgaXQgdG8gYSBzdHJpbmcgdXNpbmcgYCcnICsgdmFsdWVgLCBhbiBleGNlcHRpb24gd2FzIHRocm93bi5cbiAgLy9cbiAgLy8gVGhlIG1vc3QgY29tbW9uIHR5cGVzIHRoYXQgd2lsbCBjYXVzZSB0aGlzIGV4Y2VwdGlvbiBhcmUgYFN5bWJvbGAgaW5zdGFuY2VzXG4gIC8vIGFuZCBUZW1wb3JhbCBvYmplY3RzIGxpa2UgYFRlbXBvcmFsLkluc3RhbnRgLiBCdXQgYW55IG9iamVjdCB0aGF0IGhhcyBhXG4gIC8vIGB2YWx1ZU9mYCBvciBgW1N5bWJvbC50b1ByaW1pdGl2ZV1gIG1ldGhvZCB0aGF0IHRocm93cyB3aWxsIGFsc28gY2F1c2UgdGhpc1xuICAvLyBleGNlcHRpb24uIChMaWJyYXJ5IGF1dGhvcnMgZG8gdGhpcyB0byBwcmV2ZW50IHVzZXJzIGZyb20gdXNpbmcgYnVpbHQtaW5cbiAgLy8gbnVtZXJpYyBvcGVyYXRvcnMgbGlrZSBgK2Agb3IgY29tcGFyaXNvbiBvcGVyYXRvcnMgbGlrZSBgPj1gIGJlY2F1c2UgY3VzdG9tXG4gIC8vIG1ldGhvZHMgYXJlIG5lZWRlZCB0byBwZXJmb3JtIGFjY3VyYXRlIGFyaXRobWV0aWMgb3IgY29tcGFyaXNvbi4pXG4gIC8vXG4gIC8vIFRvIGZpeCB0aGUgcHJvYmxlbSwgY29lcmNlIHRoaXMgb2JqZWN0IG9yIHN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZyBiZWZvcmVcbiAgLy8gcGFzc2luZyBpdCB0byBSZWFjdC4gVGhlIG1vc3QgcmVsaWFibGUgd2F5IGlzIHVzdWFsbHkgYFN0cmluZyh2YWx1ZSlgLlxuICAvL1xuICAvLyBUbyBmaW5kIHdoaWNoIHZhbHVlIGlzIHRocm93aW5nLCBjaGVjayB0aGUgYnJvd3NlciBvciBkZWJ1Z2dlciBjb25zb2xlLlxuICAvLyBCZWZvcmUgdGhpcyBleGNlcHRpb24gd2FzIHRocm93biwgdGhlcmUgc2hvdWxkIGJlIGBjb25zb2xlLmVycm9yYCBvdXRwdXRcbiAgLy8gdGhhdCBzaG93cyB0aGUgdHlwZSAoU3ltYm9sLCBUZW1wb3JhbC5QbGFpbkRhdGUsIGV0Yy4pIHRoYXQgY2F1c2VkIHRoZVxuICAvLyBwcm9ibGVtIGFuZCBob3cgdGhhdCB0eXBlIHdhcyB1c2VkOiBrZXksIGF0cnJpYnV0ZSwgaW5wdXQgdmFsdWUgcHJvcCwgZXRjLlxuICAvLyBJbiBtb3N0IGNhc2VzLCB0aGlzIGNvbnNvbGUgb3V0cHV0IGFsc28gc2hvd3MgdGhlIGNvbXBvbmVudCBhbmQgaXRzXG4gIC8vIGFuY2VzdG9yIGNvbXBvbmVudHMgd2hlcmUgdGhlIGV4Y2VwdGlvbiBoYXBwZW5lZC5cbiAgLy9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uXG4gIHJldHVybiAnJyArIHZhbHVlO1xufVxuZnVuY3Rpb24gY2hlY2tLZXlTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICB7XG4gICAgaWYgKHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSkge1xuICAgICAgZXJyb3IoJ1RoZSBwcm92aWRlZCBrZXkgaXMgYW4gdW5zdXBwb3J0ZWQgdHlwZSAlcy4nICsgJyBUaGlzIHZhbHVlIG11c3QgYmUgY29lcmNlZCB0byBhIHN0cmluZyBiZWZvcmUgYmVmb3JlIHVzaW5nIGl0IGhlcmUuJywgdHlwZU5hbWUodmFsdWUpKTtcblxuICAgICAgcmV0dXJuIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7IC8vIHRocm93ICh0byBoZWxwIGNhbGxlcnMgZmluZCB0cm91Ymxlc2hvb3RpbmcgY29tbWVudHMpXG4gICAgfVxuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xudmFyIFJFU0VSVkVEX1BST1BTID0ge1xuICBrZXk6IHRydWUsXG4gIHJlZjogdHJ1ZSxcbiAgX19zZWxmOiB0cnVlLFxuICBfX3NvdXJjZTogdHJ1ZVxufTtcbnZhciBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bjtcbnZhciBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bjtcbnZhciBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzO1xuXG57XG4gIGRpZFdhcm5BYm91dFN0cmluZ1JlZnMgPSB7fTtcbn1cblxuZnVuY3Rpb24gaGFzVmFsaWRSZWYoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdyZWYnKSkge1xuICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAncmVmJykuZ2V0O1xuXG4gICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbmZpZy5yZWYgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaGFzVmFsaWRLZXkoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdrZXknKSkge1xuICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAna2V5JykuZ2V0O1xuXG4gICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbmZpZy5rZXkgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gd2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkKGNvbmZpZywgc2VsZikge1xuICB7XG4gICAgaWYgKHR5cGVvZiBjb25maWcucmVmID09PSAnc3RyaW5nJyAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ICYmIHNlbGYgJiYgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC5zdGF0ZU5vZGUgIT09IHNlbGYpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcignQ29tcG9uZW50IFwiJXNcIiBjb250YWlucyB0aGUgc3RyaW5nIHJlZiBcIiVzXCIuICcgKyAnU3VwcG9ydCBmb3Igc3RyaW5nIHJlZnMgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuICcgKyAnVGhpcyBjYXNlIGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhbiBhcnJvdyBmdW5jdGlvbi4gJyArICdXZSBhc2sgeW91IHRvIG1hbnVhbGx5IGZpeCB0aGlzIGNhc2UgYnkgdXNpbmcgdXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnLCBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKSwgY29uZmlnLnJlZik7XG5cbiAgICAgICAgZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB7XG4gICAgdmFyIHdhcm5BYm91dEFjY2Vzc2luZ0tleSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24pIHtcbiAgICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgd2FybkFib3V0QWNjZXNzaW5nS2V5LmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdrZXknLCB7XG4gICAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ0tleSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB7XG4gICAgdmFyIHdhcm5BYm91dEFjY2Vzc2luZ1JlZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24pIHtcbiAgICAgICAgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclczogYHJlZmAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgd2FybkFib3V0QWNjZXNzaW5nUmVmLmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdyZWYnLCB7XG4gICAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ1JlZixcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9XG59XG4vKipcbiAqIEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSBhIG5ldyBSZWFjdCBlbGVtZW50LiBUaGlzIG5vIGxvbmdlciBhZGhlcmVzIHRvXG4gKiB0aGUgY2xhc3MgcGF0dGVybiwgc28gZG8gbm90IHVzZSBuZXcgdG8gY2FsbCBpdC4gQWxzbywgaW5zdGFuY2VvZiBjaGVja1xuICogd2lsbCBub3Qgd29yay4gSW5zdGVhZCB0ZXN0ICQkdHlwZW9mIGZpZWxkIGFnYWluc3QgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIHRvIGNoZWNrXG4gKiBpZiBzb21ldGhpbmcgaXMgYSBSZWFjdCBFbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7Kn0gdHlwZVxuICogQHBhcmFtIHsqfSBwcm9wc1xuICogQHBhcmFtIHsqfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gcmVmXG4gKiBAcGFyYW0geyp9IG93bmVyXG4gKiBAcGFyYW0geyp9IHNlbGYgQSAqdGVtcG9yYXJ5KiBoZWxwZXIgdG8gZGV0ZWN0IHBsYWNlcyB3aGVyZSBgdGhpc2AgaXNcbiAqIGRpZmZlcmVudCBmcm9tIHRoZSBgb3duZXJgIHdoZW4gUmVhY3QuY3JlYXRlRWxlbWVudCBpcyBjYWxsZWQsIHNvIHRoYXQgd2VcbiAqIGNhbiB3YXJuLiBXZSB3YW50IHRvIGdldCByaWQgb2Ygb3duZXIgYW5kIHJlcGxhY2Ugc3RyaW5nIGByZWZgcyB3aXRoIGFycm93XG4gKiBmdW5jdGlvbnMsIGFuZCBhcyBsb25nIGFzIGB0aGlzYCBhbmQgb3duZXIgYXJlIHRoZSBzYW1lLCB0aGVyZSB3aWxsIGJlIG5vXG4gKiBjaGFuZ2UgaW4gYmVoYXZpb3IuXG4gKiBAcGFyYW0geyp9IHNvdXJjZSBBbiBhbm5vdGF0aW9uIG9iamVjdCAoYWRkZWQgYnkgYSB0cmFuc3BpbGVyIG9yIG90aGVyd2lzZSlcbiAqIGluZGljYXRpbmcgZmlsZW5hbWUsIGxpbmUgbnVtYmVyLCBhbmQvb3Igb3RoZXIgaW5mb3JtYXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuXG5cbnZhciBSZWFjdEVsZW1lbnQgPSBmdW5jdGlvbiAodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKSB7XG4gIHZhciBlbGVtZW50ID0ge1xuICAgIC8vIFRoaXMgdGFnIGFsbG93cyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgRWxlbWVudFxuICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5UX1RZUEUsXG4gICAgLy8gQnVpbHQtaW4gcHJvcGVydGllcyB0aGF0IGJlbG9uZyBvbiB0aGUgZWxlbWVudFxuICAgIHR5cGU6IHR5cGUsXG4gICAga2V5OiBrZXksXG4gICAgcmVmOiByZWYsXG4gICAgcHJvcHM6IHByb3BzLFxuICAgIC8vIFJlY29yZCB0aGUgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGlzIGVsZW1lbnQuXG4gICAgX293bmVyOiBvd25lclxuICB9O1xuXG4gIHtcbiAgICAvLyBUaGUgdmFsaWRhdGlvbiBmbGFnIGlzIGN1cnJlbnRseSBtdXRhdGl2ZS4gV2UgcHV0IGl0IG9uXG4gICAgLy8gYW4gZXh0ZXJuYWwgYmFja2luZyBzdG9yZSBzbyB0aGF0IHdlIGNhbiBmcmVlemUgdGhlIHdob2xlIG9iamVjdC5cbiAgICAvLyBUaGlzIGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgV2Vha01hcCBvbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkIGluXG4gICAgLy8gY29tbW9ubHkgdXNlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMuXG4gICAgZWxlbWVudC5fc3RvcmUgPSB7fTsgLy8gVG8gbWFrZSBjb21wYXJpbmcgUmVhY3RFbGVtZW50cyBlYXNpZXIgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHdlIG1ha2VcbiAgICAvLyB0aGUgdmFsaWRhdGlvbiBmbGFnIG5vbi1lbnVtZXJhYmxlICh3aGVyZSBwb3NzaWJsZSwgd2hpY2ggc2hvdWxkXG4gICAgLy8gaW5jbHVkZSBldmVyeSBlbnZpcm9ubWVudCB3ZSBydW4gdGVzdHMgaW4pLCBzbyB0aGUgdGVzdCBmcmFtZXdvcmtcbiAgICAvLyBpZ25vcmVzIGl0LlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQuX3N0b3JlLCAndmFsaWRhdGVkJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogZmFsc2VcbiAgICB9KTsgLy8gc2VsZiBhbmQgc291cmNlIGFyZSBERVYgb25seSBwcm9wZXJ0aWVzLlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc2VsZicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzZWxmXG4gICAgfSk7IC8vIFR3byBlbGVtZW50cyBjcmVhdGVkIGluIHR3byBkaWZmZXJlbnQgcGxhY2VzIHNob3VsZCBiZSBjb25zaWRlcmVkXG4gICAgLy8gZXF1YWwgZm9yIHRlc3RpbmcgcHVycG9zZXMgYW5kIHRoZXJlZm9yZSB3ZSBoaWRlIGl0IGZyb20gZW51bWVyYXRpb24uXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zb3VyY2UnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogc291cmNlXG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50LnByb3BzKTtcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuLyoqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZmNzL3B1bGwvMTA3XG4gKiBAcGFyYW0geyp9IHR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICovXG5cbmZ1bmN0aW9uIGpzeERFVih0eXBlLCBjb25maWcsIG1heWJlS2V5LCBzb3VyY2UsIHNlbGYpIHtcbiAge1xuICAgIHZhciBwcm9wTmFtZTsgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZFxuXG4gICAgdmFyIHByb3BzID0ge307XG4gICAgdmFyIGtleSA9IG51bGw7XG4gICAgdmFyIHJlZiA9IG51bGw7IC8vIEN1cnJlbnRseSwga2V5IGNhbiBiZSBzcHJlYWQgaW4gYXMgYSBwcm9wLiBUaGlzIGNhdXNlcyBhIHBvdGVudGlhbFxuICAgIC8vIGlzc3VlIGlmIGtleSBpcyBhbHNvIGV4cGxpY2l0bHkgZGVjbGFyZWQgKGllLiA8ZGl2IHsuLi5wcm9wc30ga2V5PVwiSGlcIiAvPlxuICAgIC8vIG9yIDxkaXYga2V5PVwiSGlcIiB7Li4ucHJvcHN9IC8+ICkuIFdlIHdhbnQgdG8gZGVwcmVjYXRlIGtleSBzcHJlYWQsXG4gICAgLy8gYnV0IGFzIGFuIGludGVybWVkaWFyeSBzdGVwLCB3ZSB3aWxsIHVzZSBqc3hERVYgZm9yIGV2ZXJ5dGhpbmcgZXhjZXB0XG4gICAgLy8gPGRpdiB7Li4ucHJvcHN9IGtleT1cIkhpXCIgLz4sIGJlY2F1c2Ugd2UgYXJlbid0IGN1cnJlbnRseSBhYmxlIHRvIHRlbGwgaWZcbiAgICAvLyBrZXkgaXMgZXhwbGljaXRseSBkZWNsYXJlZCB0byBiZSB1bmRlZmluZWQgb3Igbm90LlxuXG4gICAgaWYgKG1heWJlS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHtcbiAgICAgICAgY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihtYXliZUtleSk7XG4gICAgICB9XG5cbiAgICAgIGtleSA9ICcnICsgbWF5YmVLZXk7XG4gICAgfVxuXG4gICAgaWYgKGhhc1ZhbGlkS2V5KGNvbmZpZykpIHtcbiAgICAgIHtcbiAgICAgICAgY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihjb25maWcua2V5KTtcbiAgICAgIH1cblxuICAgICAga2V5ID0gJycgKyBjb25maWcua2V5O1xuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZFJlZihjb25maWcpKSB7XG4gICAgICByZWYgPSBjb25maWcucmVmO1xuICAgICAgd2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkKGNvbmZpZywgc2VsZik7XG4gICAgfSAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBhcmUgYWRkZWQgdG8gYSBuZXcgcHJvcHMgb2JqZWN0XG5cblxuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfSAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHNcblxuXG4gICAgaWYgKHR5cGUgJiYgdHlwZS5kZWZhdWx0UHJvcHMpIHtcbiAgICAgIHZhciBkZWZhdWx0UHJvcHMgPSB0eXBlLmRlZmF1bHRQcm9wcztcblxuICAgICAgZm9yIChwcm9wTmFtZSBpbiBkZWZhdWx0UHJvcHMpIHtcbiAgICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXkgfHwgcmVmKSB7XG4gICAgICB2YXIgZGlzcGxheU5hbWUgPSB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyA/IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8ICdVbmtub3duJyA6IHR5cGU7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlZikge1xuICAgICAgICBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCwgcHJvcHMpO1xuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShzdGFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbnZhciBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bjtcblxue1xuICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IGZhbHNlO1xufVxuLyoqXG4gKiBWZXJpZmllcyB0aGUgb2JqZWN0IGlzIGEgUmVhY3RFbGVtZW50LlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNpc3ZhbGlkZWxlbWVudFxuICogQHBhcmFtIHs/b2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYG9iamVjdGAgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBAZmluYWxcbiAqL1xuXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50KG9iamVjdCkge1xuICB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gIHtcbiAgICBpZiAoUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50KSB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQudHlwZSk7XG5cbiAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBuYW1lICsgJ2AuJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oc291cmNlKSB7XG4gIHtcbiAgICBpZiAoc291cmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBmaWxlTmFtZSA9IHNvdXJjZS5maWxlTmFtZS5yZXBsYWNlKC9eLipbXFxcXFxcL10vLCAnJyk7XG4gICAgICB2YXIgbGluZU51bWJlciA9IHNvdXJjZS5saW5lTnVtYmVyO1xuICAgICAgcmV0dXJuICdcXG5cXG5DaGVjayB5b3VyIGNvZGUgYXQgJyArIGZpbGVOYW1lICsgJzonICsgbGluZU51bWJlciArICcuJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cbi8qKlxuICogV2FybiBpZiB0aGVyZSdzIG5vIGtleSBleHBsaWNpdGx5IHNldCBvbiBkeW5hbWljIGFycmF5cyBvZiBjaGlsZHJlbiBvclxuICogb2JqZWN0IGtleXMgYXJlIG5vdCB2YWxpZC4gVGhpcyBhbGxvd3MgdXMgdG8ga2VlcCB0cmFjayBvZiBjaGlsZHJlbiBiZXR3ZWVuXG4gKiB1cGRhdGVzLlxuICovXG5cblxudmFyIG93bmVySGFzS2V5VXNlV2FybmluZyA9IHt9O1xuXG5mdW5jdGlvbiBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpIHtcbiAge1xuICAgIHZhciBpbmZvID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG5cbiAgICBpZiAoIWluZm8pIHtcbiAgICAgIHZhciBwYXJlbnROYW1lID0gdHlwZW9mIHBhcmVudFR5cGUgPT09ICdzdHJpbmcnID8gcGFyZW50VHlwZSA6IHBhcmVudFR5cGUuZGlzcGxheU5hbWUgfHwgcGFyZW50VHlwZS5uYW1lO1xuXG4gICAgICBpZiAocGFyZW50TmFtZSkge1xuICAgICAgICBpbmZvID0gXCJcXG5cXG5DaGVjayB0aGUgdG9wLWxldmVsIHJlbmRlciBjYWxsIHVzaW5nIDxcIiArIHBhcmVudE5hbWUgKyBcIj4uXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZm87XG4gIH1cbn1cbi8qKlxuICogV2FybiBpZiB0aGUgZWxlbWVudCBkb2Vzbid0IGhhdmUgYW4gZXhwbGljaXQga2V5IGFzc2lnbmVkIHRvIGl0LlxuICogVGhpcyBlbGVtZW50IGlzIGluIGFuIGFycmF5LiBUaGUgYXJyYXkgY291bGQgZ3JvdyBhbmQgc2hyaW5rIG9yIGJlXG4gKiByZW9yZGVyZWQuIEFsbCBjaGlsZHJlbiB0aGF0IGhhdmVuJ3QgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBhcmUgcmVxdWlyZWQgdG9cbiAqIGhhdmUgYSBcImtleVwiIHByb3BlcnR5IGFzc2lnbmVkIHRvIGl0LiBFcnJvciBzdGF0dXNlcyBhcmUgY2FjaGVkIHNvIGEgd2FybmluZ1xuICogd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudCBFbGVtZW50IHRoYXQgcmVxdWlyZXMgYSBrZXkuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgZWxlbWVudCdzIHBhcmVudCdzIHR5cGUuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUV4cGxpY2l0S2V5KGVsZW1lbnQsIHBhcmVudFR5cGUpIHtcbiAge1xuICAgIGlmICghZWxlbWVudC5fc3RvcmUgfHwgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkIHx8IGVsZW1lbnQua2V5ICE9IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgIHZhciBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvID0gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKTtcblxuICAgIGlmIChvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10gPSB0cnVlOyAvLyBVc3VhbGx5IHRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBvZmZlbmRlciwgYnV0IGlmIGl0IGFjY2VwdHMgY2hpbGRyZW4gYXMgYVxuICAgIC8vIHByb3BlcnR5LCBpdCBtYXkgYmUgdGhlIGNyZWF0b3Igb2YgdGhlIGNoaWxkIHRoYXQncyByZXNwb25zaWJsZSBmb3JcbiAgICAvLyBhc3NpZ25pbmcgaXQgYSBrZXkuXG5cbiAgICB2YXIgY2hpbGRPd25lciA9ICcnO1xuXG4gICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5fb3duZXIgJiYgZWxlbWVudC5fb3duZXIgIT09IFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCkge1xuICAgICAgLy8gR2l2ZSB0aGUgY29tcG9uZW50IHRoYXQgb3JpZ2luYWxseSBjcmVhdGVkIHRoaXMgY2hpbGQuXG4gICAgICBjaGlsZE93bmVyID0gXCIgSXQgd2FzIHBhc3NlZCBhIGNoaWxkIGZyb20gXCIgKyBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoZWxlbWVudC5fb3duZXIudHlwZSkgKyBcIi5cIjtcbiAgICB9XG5cbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpO1xuXG4gICAgZXJyb3IoJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlIFwia2V5XCIgcHJvcC4nICsgJyVzJXMgU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93YXJuaW5nLWtleXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uJywgY3VycmVudENvbXBvbmVudEVycm9ySW5mbywgY2hpbGRPd25lcik7XG5cbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICB9XG59XG4vKipcbiAqIEVuc3VyZSB0aGF0IGV2ZXJ5IGVsZW1lbnQgZWl0aGVyIGlzIHBhc3NlZCBpbiBhIHN0YXRpYyBsb2NhdGlvbiwgaW4gYW5cbiAqIGFycmF5IHdpdGggYW4gZXhwbGljaXQga2V5cyBwcm9wZXJ0eSBkZWZpbmVkLCBvciBpbiBhbiBvYmplY3QgbGl0ZXJhbFxuICogd2l0aCB2YWxpZCBrZXkgcHJvcGVydHkuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge1JlYWN0Tm9kZX0gbm9kZSBTdGF0aWNhbGx5IHBhc3NlZCBjaGlsZCBvZiBhbnkgdHlwZS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBub2RlJ3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2hpbGRLZXlzKG5vZGUsIHBhcmVudFR5cGUpIHtcbiAge1xuICAgIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNBcnJheShub2RlKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG5cbiAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1ZhbGlkRWxlbWVudChub2RlKSkge1xuICAgICAgLy8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi5cbiAgICAgIGlmIChub2RlLl9zdG9yZSkge1xuICAgICAgICBub2RlLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZSkge1xuICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG5vZGUpO1xuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gRW50cnkgaXRlcmF0b3JzIHVzZWQgdG8gcHJvdmlkZSBpbXBsaWNpdCBrZXlzLFxuICAgICAgICAvLyBidXQgbm93IHdlIHByaW50IGEgc2VwYXJhdGUgd2FybmluZyBmb3IgdGhlbSBsYXRlci5cbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IG5vZGUuZW50cmllcykge1xuICAgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChub2RlKTtcbiAgICAgICAgICB2YXIgc3RlcDtcblxuICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KHN0ZXAudmFsdWUsIHBhcmVudFR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhbiBlbGVtZW50LCB2YWxpZGF0ZSB0aGF0IGl0cyBwcm9wcyBmb2xsb3cgdGhlIHByb3BUeXBlcyBkZWZpbml0aW9uLFxuICogcHJvdmlkZWQgYnkgdGhlIHR5cGUuXG4gKlxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpIHtcbiAge1xuICAgIHZhciB0eXBlID0gZWxlbWVudC50eXBlO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwgfHwgdHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwcm9wVHlwZXM7XG5cbiAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IC8vIE5vdGU6IE1lbW8gb25seSBjaGVja3Mgb3V0ZXIgcHJvcHMgaGVyZS5cbiAgICAvLyBJbm5lciBwcm9wcyBhcmUgY2hlY2tlZCBpbiB0aGUgcmVjb25jaWxlci5cbiAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUpKSB7XG4gICAgICBwcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwcm9wVHlwZXMpIHtcbiAgICAgIC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKTtcbiAgICAgIGNoZWNrUHJvcFR5cGVzKHByb3BUeXBlcywgZWxlbWVudC5wcm9wcywgJ3Byb3AnLCBuYW1lLCBlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGUuUHJvcFR5cGVzICE9PSB1bmRlZmluZWQgJiYgIXByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duKSB7XG4gICAgICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IHRydWU7IC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG5cbiAgICAgIHZhciBfbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKTtcblxuICAgICAgZXJyb3IoJ0NvbXBvbmVudCAlcyBkZWNsYXJlZCBgUHJvcFR5cGVzYCBpbnN0ZWFkIG9mIGBwcm9wVHlwZXNgLiBEaWQgeW91IG1pc3NwZWxsIHRoZSBwcm9wZXJ0eSBhc3NpZ25tZW50PycsIF9uYW1lIHx8ICdVbmtub3duJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0eXBlLmdldERlZmF1bHRQcm9wcyA9PT0gJ2Z1bmN0aW9uJyAmJiAhdHlwZS5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92ZWQpIHtcbiAgICAgIGVycm9yKCdnZXREZWZhdWx0UHJvcHMgaXMgb25seSB1c2VkIG9uIGNsYXNzaWMgUmVhY3QuY3JlYXRlQ2xhc3MgJyArICdkZWZpbml0aW9ucy4gVXNlIGEgc3RhdGljIHByb3BlcnR5IG5hbWVkIGBkZWZhdWx0UHJvcHNgIGluc3RlYWQuJyk7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdpdmVuIGEgZnJhZ21lbnQsIHZhbGlkYXRlIHRoYXQgaXQgY2FuIG9ubHkgYmUgcHJvdmlkZWQgd2l0aCBmcmFnbWVudCBwcm9wc1xuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGZyYWdtZW50XG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZnJhZ21lbnQpIHtcbiAge1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZnJhZ21lbnQucHJvcHMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKGtleSAhPT0gJ2NoaWxkcmVuJyAmJiBrZXkgIT09ICdrZXknKSB7XG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZnJhZ21lbnQpO1xuXG4gICAgICAgIGVycm9yKCdJbnZhbGlkIHByb3AgYCVzYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLiAnICsgJ1JlYWN0LkZyYWdtZW50IGNhbiBvbmx5IGhhdmUgYGtleWAgYW5kIGBjaGlsZHJlbmAgcHJvcHMuJywga2V5KTtcblxuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZnJhZ21lbnQucmVmICE9PSBudWxsKSB7XG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGZyYWdtZW50KTtcblxuICAgICAgZXJyb3IoJ0ludmFsaWQgYXR0cmlidXRlIGByZWZgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuJyk7XG5cbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbnZhciBkaWRXYXJuQWJvdXRLZXlTcHJlYWQgPSB7fTtcbmZ1bmN0aW9uIGpzeFdpdGhWYWxpZGF0aW9uKHR5cGUsIHByb3BzLCBrZXksIGlzU3RhdGljQ2hpbGRyZW4sIHNvdXJjZSwgc2VsZikge1xuICB7XG4gICAgdmFyIHZhbGlkVHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKTsgLy8gV2Ugd2FybiBpbiB0aGlzIGNhc2UgYnV0IGRvbid0IHRocm93LiBXZSBleHBlY3QgdGhlIGVsZW1lbnQgY3JlYXRpb24gdG9cbiAgICAvLyBzdWNjZWVkIGFuZCB0aGVyZSB3aWxsIGxpa2VseSBiZSBlcnJvcnMgaW4gcmVuZGVyLlxuXG4gICAgaWYgKCF2YWxpZFR5cGUpIHtcbiAgICAgIHZhciBpbmZvID0gJyc7XG5cbiAgICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGluZm8gKz0gJyBZb3UgbGlrZWx5IGZvcmdvdCB0byBleHBvcnQgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgZmlsZSAnICsgXCJpdCdzIGRlZmluZWQgaW4sIG9yIHlvdSBtaWdodCBoYXZlIG1peGVkIHVwIGRlZmF1bHQgYW5kIG5hbWVkIGltcG9ydHMuXCI7XG4gICAgICB9XG5cbiAgICAgIHZhciBzb3VyY2VJbmZvID0gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oc291cmNlKTtcblxuICAgICAgaWYgKHNvdXJjZUluZm8pIHtcbiAgICAgICAgaW5mbyArPSBzb3VyY2VJbmZvO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5mbyArPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHR5cGVTdHJpbmc7XG5cbiAgICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICAgIHR5cGVTdHJpbmcgPSAnbnVsbCc7XG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkodHlwZSkpIHtcbiAgICAgICAgdHlwZVN0cmluZyA9ICdhcnJheSc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHtcbiAgICAgICAgdHlwZVN0cmluZyA9IFwiPFwiICsgKGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8ICdVbmtub3duJykgKyBcIiAvPlwiO1xuICAgICAgICBpbmZvID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBleHBvcnQgYSBKU1ggbGl0ZXJhbCBpbnN0ZWFkIG9mIGEgY29tcG9uZW50Pyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0eXBlU3RyaW5nID0gdHlwZW9mIHR5cGU7XG4gICAgICB9XG5cbiAgICAgIGVycm9yKCdSZWFjdC5qc3g6IHR5cGUgaXMgaW52YWxpZCAtLSBleHBlY3RlZCBhIHN0cmluZyAoZm9yICcgKyAnYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSAnICsgJ2NvbXBvbmVudHMpIGJ1dCBnb3Q6ICVzLiVzJywgdHlwZVN0cmluZywgaW5mbyk7XG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnQgPSBqc3hERVYodHlwZSwgcHJvcHMsIGtleSwgc291cmNlLCBzZWxmKTsgLy8gVGhlIHJlc3VsdCBjYW4gYmUgbnVsbGlzaCBpZiBhIG1vY2sgb3IgYSBjdXN0b20gZnVuY3Rpb24gaXMgdXNlZC5cbiAgICAvLyBUT0RPOiBEcm9wIHRoaXMgd2hlbiB0aGVzZSBhcmUgbm8gbG9uZ2VyIGFsbG93ZWQgYXMgdGhlIHR5cGUgYXJndW1lbnQuXG5cbiAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9IC8vIFNraXAga2V5IHdhcm5pbmcgaWYgdGhlIHR5cGUgaXNuJ3QgdmFsaWQgc2luY2Ugb3VyIGtleSB2YWxpZGF0aW9uIGxvZ2ljXG4gICAgLy8gZG9lc24ndCBleHBlY3QgYSBub24tc3RyaW5nL2Z1bmN0aW9uIHR5cGUgYW5kIGNhbiB0aHJvdyBjb25mdXNpbmcgZXJyb3JzLlxuICAgIC8vIFdlIGRvbid0IHdhbnQgZXhjZXB0aW9uIGJlaGF2aW9yIHRvIGRpZmZlciBiZXR3ZWVuIGRldiBhbmQgcHJvZC5cbiAgICAvLyAoUmVuZGVyaW5nIHdpbGwgdGhyb3cgd2l0aCBhIGhlbHBmdWwgbWVzc2FnZSBhbmQgYXMgc29vbiBhcyB0aGUgdHlwZSBpc1xuICAgIC8vIGZpeGVkLCB0aGUga2V5IHdhcm5pbmdzIHdpbGwgYXBwZWFyLilcblxuXG4gICAgaWYgKHZhbGlkVHlwZSkge1xuICAgICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW47XG5cbiAgICAgIGlmIChjaGlsZHJlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChpc1N0YXRpY0NoaWxkcmVuKSB7XG4gICAgICAgICAgaWYgKGlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGNoaWxkcmVuW2ldLCB0eXBlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKE9iamVjdC5mcmVlemUpIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmZyZWV6ZShjaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVycm9yKCdSZWFjdC5qc3g6IFN0YXRpYyBjaGlsZHJlbiBzaG91bGQgYWx3YXlzIGJlIGFuIGFycmF5LiAnICsgJ1lvdSBhcmUgbGlrZWx5IGV4cGxpY2l0bHkgY2FsbGluZyBSZWFjdC5qc3hzIG9yIFJlYWN0LmpzeERFVi4gJyArICdVc2UgdGhlIEJhYmVsIHRyYW5zZm9ybSBpbnN0ZWFkLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhjaGlsZHJlbiwgdHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChwcm9wcywgJ2tleScpKSB7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BzKS5maWx0ZXIoZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICByZXR1cm4gayAhPT0gJ2tleSc7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgYmVmb3JlRXhhbXBsZSA9IGtleXMubGVuZ3RoID4gMCA/ICd7a2V5OiBzb21lS2V5LCAnICsga2V5cy5qb2luKCc6IC4uLiwgJykgKyAnOiAuLi59JyA6ICd7a2V5OiBzb21lS2V5fSc7XG5cbiAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRLZXlTcHJlYWRbY29tcG9uZW50TmFtZSArIGJlZm9yZUV4YW1wbGVdKSB7XG4gICAgICAgICAgdmFyIGFmdGVyRXhhbXBsZSA9IGtleXMubGVuZ3RoID4gMCA/ICd7JyArIGtleXMuam9pbignOiAuLi4sICcpICsgJzogLi4ufScgOiAne30nO1xuXG4gICAgICAgICAgZXJyb3IoJ0EgcHJvcHMgb2JqZWN0IGNvbnRhaW5pbmcgYSBcImtleVwiIHByb3AgaXMgYmVpbmcgc3ByZWFkIGludG8gSlNYOlxcbicgKyAnICBsZXQgcHJvcHMgPSAlcztcXG4nICsgJyAgPCVzIHsuLi5wcm9wc30gLz5cXG4nICsgJ1JlYWN0IGtleXMgbXVzdCBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gSlNYIHdpdGhvdXQgdXNpbmcgc3ByZWFkOlxcbicgKyAnICBsZXQgcHJvcHMgPSAlcztcXG4nICsgJyAgPCVzIGtleT17c29tZUtleX0gey4uLnByb3BzfSAvPicsIGJlZm9yZUV4YW1wbGUsIGNvbXBvbmVudE5hbWUsIGFmdGVyRXhhbXBsZSwgY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgICBkaWRXYXJuQWJvdXRLZXlTcHJlYWRbY29tcG9uZW50TmFtZSArIGJlZm9yZUV4YW1wbGVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59IC8vIFRoZXNlIHR3byBmdW5jdGlvbnMgZXhpc3QgdG8gc3RpbGwgZ2V0IGNoaWxkIHdhcm5pbmdzIGluIGRldlxuXG52YXIganN4REVWJDEgPSAganN4V2l0aFZhbGlkYXRpb24gO1xuXG5leHBvcnRzLkZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbmV4cG9ydHMuanN4REVWID0ganN4REVWJDE7XG4gIH0pKCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///758\n\n}");
261
+
262
+ /***/ },
263
+
264
+ /***/ 878
265
+ /*!**************************************************************************************!*\
266
+ !*** ../../../node_modules/.pnpm/react@18.3.1/node_modules/react/jsx-dev-runtime.js ***!
267
+ \**************************************************************************************/
268
+ (module, __unused_webpack_exports, __webpack_require__) {
269
+
270
+ eval("{\n\nif (false) // removed by dead control flow\n{} else {\n module.exports = __webpack_require__(/*! ./cjs/react-jsx-dev-runtime.development.js */ 758);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODc4LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksS0FBcUMsRUFBRTtBQUFBLEVBRTFDLENBQUM7QUFDRixFQUFFLDJGQUFzRTtBQUN4RSIsInNvdXJjZXMiOlsid2VicGFjazovL0BleHBjbHVzdGVyL3Blcm1pc3Npb24tZ3JvdXBzLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdEAxOC4zLjEvbm9kZV9tb2R1bGVzL3JlYWN0L2pzeC1kZXYtcnVudGltZS5qcz9kNzEzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1qc3gtZGV2LXJ1bnRpbWUucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LWRldi1ydW50aW1lLmRldmVsb3BtZW50LmpzJyk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///878\n\n}");
271
+
272
+ /***/ },
273
+
274
+ /***/ 40
275
+ /*!*********************!*\
276
+ !*** ./messages.ts ***!
277
+ \*********************/
278
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
279
+
280
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AssignmentCreateRequest: () => (/* binding */ AssignmentCreateRequest),\n/* harmony export */ AssignmentDeleteRequest: () => (/* binding */ AssignmentDeleteRequest),\n/* harmony export */ AssignmentGetRequest: () => (/* binding */ AssignmentGetRequest),\n/* harmony export */ AssignmentListRequest: () => (/* binding */ AssignmentListRequest),\n/* harmony export */ AssignmentRecord: () => (/* binding */ AssignmentRecord),\n/* harmony export */ AssignmentUpdateRequest: () => (/* binding */ AssignmentUpdateRequest),\n/* harmony export */ GroupCreateRequest: () => (/* binding */ GroupCreateRequest),\n/* harmony export */ GroupDeleteRequest: () => (/* binding */ GroupDeleteRequest),\n/* harmony export */ GroupGetRequest: () => (/* binding */ GroupGetRequest),\n/* harmony export */ GroupListRequest: () => (/* binding */ GroupListRequest),\n/* harmony export */ GroupPermissions: () => (/* binding */ GroupPermissions),\n/* harmony export */ GroupRecord: () => (/* binding */ GroupRecord),\n/* harmony export */ GroupUpdateRequest: () => (/* binding */ GroupUpdateRequest),\n/* harmony export */ GroupUpdatedEvent: () => (/* binding */ GroupUpdatedEvent),\n/* harmony export */ ManualAssignmentUpdatedEvent: () => (/* binding */ ManualAssignmentUpdatedEvent),\n/* harmony export */ ResolvedAssignmentUpdatedEvent: () => (/* binding */ ResolvedAssignmentUpdatedEvent),\n/* harmony export */ RoleMappingCreateRequest: () => (/* binding */ RoleMappingCreateRequest),\n/* harmony export */ RoleMappingDeleteRequest: () => (/* binding */ RoleMappingDeleteRequest),\n/* harmony export */ RoleMappingGetRequest: () => (/* binding */ RoleMappingGetRequest),\n/* harmony export */ RoleMappingListRequest: () => (/* binding */ RoleMappingListRequest),\n/* harmony export */ RoleMappingRecord: () => (/* binding */ RoleMappingRecord),\n/* harmony export */ RoleMappingUpdateRequest: () => (/* binding */ RoleMappingUpdateRequest),\n/* harmony export */ RoleMappingUpdatedEvent: () => (/* binding */ RoleMappingUpdatedEvent)\n/* harmony export */ });\n/* harmony import */ var _clusterio_lib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @clusterio/lib */ 194);\n/* harmony import */ var _clusterio_lib__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_clusterio_lib__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sinclair/typebox */ 213);\n\n\n/*\r\n Data records\r\n*/ class GroupPermissions {\n isBlacklist;\n permissions;\n constructor(isBlacklist, permissions){\n this.isBlacklist = isBlacklist;\n this.permissions = permissions;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n is_blacklist: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Boolean(),\n permissions: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Array(_sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.String())\n });\n toJSON() {\n return {\n is_blacklist: this.isBlacklist,\n permissions: this.permissions\n };\n }\n static fromJSON(json) {\n return new this(json.is_blacklist, json.permissions);\n }\n}\nclass GroupRecord {\n id;\n name;\n permissions;\n updatedAtMs;\n isDeleted;\n constructor(id, name, permissions, updatedAtMs = 0, isDeleted = false){\n this.id = id;\n this.name = name;\n this.permissions = permissions;\n this.updatedAtMs = updatedAtMs;\n this.isDeleted = isDeleted;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n id: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Integer(),\n name: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.String(),\n permissions: GroupPermissions.jsonSchema,\n updated_at_ms: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Optional(_sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Number()),\n is_deleted: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Optional(_sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Boolean())\n });\n toJSON() {\n let json = {\n id: this.id,\n name: this.name,\n permissions: this.permissions.toJSON()\n };\n if (this.updatedAtMs) {\n json.updated_at_ms = this.updatedAtMs;\n }\n if (this.isDeleted) {\n json.is_deleted = true;\n }\n return json;\n }\n static fromJSON(json) {\n return new this(json.id, json.name, GroupPermissions.fromJSON(json.permissions), json.updated_at_ms ?? 0, json.is_deleted ?? false);\n }\n}\nclass AssignmentRecord {\n name;\n groupId;\n updatedAtMs;\n isDeleted;\n constructor(name, groupId, updatedAtMs = 0, isDeleted = false){\n this.name = name;\n this.groupId = groupId;\n this.updatedAtMs = updatedAtMs;\n this.isDeleted = isDeleted;\n }\n get id() {\n return this.name;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n name: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.String(),\n group_id: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Integer(),\n updated_at_ms: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Optional(_sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Number()),\n is_deleted: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Optional(_sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Boolean())\n });\n toJSON() {\n let json = {\n name: this.name,\n group_id: this.groupId\n };\n if (this.updatedAtMs) {\n json.updated_at_ms = this.updatedAtMs;\n }\n if (this.isDeleted) {\n json.is_deleted = true;\n }\n return json;\n }\n static fromJSON(json) {\n return new this(json.name, json.group_id, json.updated_at_ms ?? 0, json.is_deleted ?? false);\n }\n}\nclass RoleMappingRecord {\n id;\n roleIds;\n groupId;\n priority;\n enabled;\n updatedAtMs;\n isDeleted;\n constructor(id, roleIds, groupId, priority, enabled, updatedAtMs = 0, isDeleted = false){\n this.id = id;\n this.roleIds = roleIds;\n this.groupId = groupId;\n this.priority = priority;\n this.enabled = enabled;\n this.updatedAtMs = updatedAtMs;\n this.isDeleted = isDeleted;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n id: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Integer(),\n role_ids: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Array(_sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Integer()),\n group_id: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Integer(),\n priority: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Number(),\n enabled: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Boolean(),\n updated_at_ms: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Optional(_sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Number()),\n is_deleted: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Optional(_sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Boolean())\n });\n toJSON() {\n let json = {\n id: this.id,\n role_ids: [\n ...this.roleIds\n ],\n group_id: this.groupId,\n priority: this.priority,\n enabled: this.enabled\n };\n if (this.updatedAtMs) {\n json.updated_at_ms = this.updatedAtMs;\n }\n if (this.isDeleted) {\n json.is_deleted = true;\n }\n return json;\n }\n static fromJSON(json) {\n return new this(json.id, new Set(json.role_ids), json.group_id, json.priority, json.enabled, json.updated_at_ms ?? 0, json.is_deleted ?? false);\n }\n}\n/*\r\n Update events\r\n*/ class GroupUpdatedEvent {\n updates;\n static plugin = \"exp_groups\";\n static type = \"event\";\n static src = \"controller\";\n static dst = [\n \"control\",\n \"instance\"\n ];\n static permission = \"exp_groups.group.subscribe\";\n constructor(updates){\n this.updates = updates;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n updates: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Array(GroupRecord.jsonSchema)\n });\n toJSON() {\n return {\n updates: this.updates.map((group)=>group.toJSON())\n };\n }\n static fromJSON(json) {\n return new this(json.updates.map((group)=>GroupRecord.fromJSON(group)));\n }\n}\nclass ManualAssignmentUpdatedEvent {\n updates;\n static plugin = \"exp_groups\";\n static type = \"event\";\n static src = \"controller\";\n static dst = [\n \"control\",\n \"instance\"\n ];\n static permission = \"exp_groups.assignment.subscribe\";\n constructor(updates){\n this.updates = updates;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n updates: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Array(AssignmentRecord.jsonSchema)\n });\n toJSON() {\n return {\n updates: this.updates.map((assignment)=>assignment.toJSON())\n };\n }\n static fromJSON(json) {\n return new this(json.updates.map((assignment)=>AssignmentRecord.fromJSON(assignment)));\n }\n}\nclass ResolvedAssignmentUpdatedEvent {\n updates;\n static plugin = \"exp_groups\";\n static type = \"event\";\n static src = \"controller\";\n static dst = [\n \"control\",\n \"instance\"\n ];\n static permission = \"exp_groups.assignment.subscribe\";\n constructor(updates){\n this.updates = updates;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n updates: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Array(AssignmentRecord.jsonSchema)\n });\n toJSON() {\n return {\n updates: this.updates.map((assignment)=>assignment.toJSON())\n };\n }\n static fromJSON(json) {\n return new this(json.updates.map((assignment)=>AssignmentRecord.fromJSON(assignment)));\n }\n}\nclass RoleMappingUpdatedEvent {\n updates;\n static plugin = \"exp_groups\";\n static type = \"event\";\n static src = \"controller\";\n static dst = \"control\";\n static permission = \"exp_groups.role_mapping.subscribe\";\n constructor(updates){\n this.updates = updates;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n updates: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Array(RoleMappingRecord.jsonSchema)\n });\n toJSON() {\n return {\n updates: this.updates.map((roleMapping)=>roleMapping.toJSON())\n };\n }\n static fromJSON(json) {\n return new this(json.updates.map((roleMapping)=>RoleMappingRecord.fromJSON(roleMapping)));\n }\n}\n/*\r\n Group requests\r\n*/ class GroupCreateRequest {\n name;\n permissions;\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.group.create\";\n static Response = GroupRecord;\n constructor(name, permissions){\n this.name = name;\n this.permissions = permissions;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n name: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.String(),\n permissions: GroupPermissions.jsonSchema\n });\n toJSON() {\n return {\n name: this.name,\n permissions: this.permissions.toJSON()\n };\n }\n static fromJSON(json) {\n return new this(json.name, GroupPermissions.fromJSON(json.permissions));\n }\n}\nclass GroupUpdateRequest {\n group;\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.group.update\";\n constructor(group){\n this.group = group;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n group: GroupRecord.jsonSchema\n });\n toJSON() {\n return {\n group: this.group.toJSON()\n };\n }\n static fromJSON(json) {\n return new this(GroupRecord.fromJSON(json.group));\n }\n}\nclass GroupDeleteRequest {\n groupId;\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.group.delete\";\n constructor(groupId){\n this.groupId = groupId;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n group_id: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Integer()\n });\n toJSON() {\n return {\n group_id: this.groupId\n };\n }\n static fromJSON(json) {\n return new this(json.group_id);\n }\n}\nclass GroupGetRequest {\n groupId;\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.group.get\";\n static Response = GroupRecord;\n constructor(groupId){\n this.groupId = groupId;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n group_id: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Integer()\n });\n toJSON() {\n return {\n group_id: this.groupId\n };\n }\n static fromJSON(json) {\n return new this(json.group_id);\n }\n}\nclass GroupListRequest {\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.group.list\";\n static Response = _clusterio_lib__WEBPACK_IMPORTED_MODULE_0__.jsonArray(GroupRecord);\n constructor(){}\n}\n/*\r\n Assignment requests\r\n*/ class AssignmentCreateRequest {\n name;\n groupId;\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.assignment.create\";\n static Response = AssignmentRecord;\n constructor(name, groupId){\n this.name = name;\n this.groupId = groupId;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n name: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.String(),\n group_id: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Integer()\n });\n toJSON() {\n return {\n name: this.name,\n group_id: this.groupId\n };\n }\n static fromJSON(json) {\n return new this(json.name, json.group_id);\n }\n}\nclass AssignmentUpdateRequest {\n assignment;\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.assignment.update\";\n constructor(assignment){\n this.assignment = assignment;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n assignment: AssignmentRecord.jsonSchema\n });\n toJSON() {\n return {\n assignment: this.assignment.toJSON()\n };\n }\n static fromJSON(json) {\n return new this(AssignmentRecord.fromJSON(json.assignment));\n }\n}\nclass AssignmentDeleteRequest {\n name;\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.assignment.delete\";\n constructor(name){\n this.name = name;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n name: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.String()\n });\n toJSON() {\n return {\n name: this.name\n };\n }\n static fromJSON(json) {\n return new this(json.name);\n }\n}\nclass AssignmentGetRequest {\n name;\n resolve;\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.assignment.get\";\n static Response = AssignmentRecord;\n constructor(name, resolve = false){\n this.name = name;\n this.resolve = resolve;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n name: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.String(),\n resolve: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Boolean()\n });\n toJSON() {\n return {\n name: this.name,\n resolve: this.resolve\n };\n }\n static fromJSON(json) {\n return new this(json.name, json.resolve);\n }\n}\nclass AssignmentListRequest {\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.assignment.list\";\n static Response = _clusterio_lib__WEBPACK_IMPORTED_MODULE_0__.jsonArray(AssignmentRecord);\n constructor(){}\n}\n/*\r\n Role mapping requests\r\n*/ class RoleMappingCreateRequest {\n roleIds;\n groupId;\n priority;\n enabled;\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.role_mapping.create\";\n static Response = RoleMappingRecord;\n constructor(roleIds, groupId, priority, enabled){\n this.roleIds = roleIds;\n this.groupId = groupId;\n this.priority = priority;\n this.enabled = enabled;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n role_ids: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Array(_sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Integer()),\n group_id: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Integer(),\n priority: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Number(),\n enabled: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Boolean()\n });\n toJSON() {\n return {\n role_ids: this.roleIds,\n group_id: this.groupId,\n priority: this.priority,\n enabled: this.enabled\n };\n }\n static fromJSON(json) {\n return new this(json.role_ids, json.group_id, json.priority, json.enabled);\n }\n}\nclass RoleMappingUpdateRequest {\n roleMapping;\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.role_mapping.update\";\n constructor(roleMapping){\n this.roleMapping = roleMapping;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n role_mapping: RoleMappingRecord.jsonSchema\n });\n toJSON() {\n return {\n role_mapping: this.roleMapping.toJSON()\n };\n }\n static fromJSON(json) {\n return new this(RoleMappingRecord.fromJSON(json.role_mapping));\n }\n}\nclass RoleMappingDeleteRequest {\n id;\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.role_mapping.delete\";\n constructor(id){\n this.id = id;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n id: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Integer()\n });\n toJSON() {\n return {\n id: this.id\n };\n }\n static fromJSON(json) {\n return new this(json.id);\n }\n}\nclass RoleMappingGetRequest {\n id;\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.role_mapping.get\";\n static Response = RoleMappingRecord;\n constructor(id){\n this.id = id;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n id: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Integer()\n });\n toJSON() {\n return {\n id: this.id\n };\n }\n static fromJSON(json) {\n return new this(json.id);\n }\n}\nclass RoleMappingListRequest {\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.role_mapping.list\";\n static Response = _clusterio_lib__WEBPACK_IMPORTED_MODULE_0__.jsonArray(RoleMappingRecord);\n constructor(){}\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBQztBQUNuQiIsInNvdXJjZXMiOlsid2VicGFjazovL0BleHBjbHVzdGVyL3Blcm1pc3Npb24tZ3JvdXBzLy4vbWVzc2FnZXMudHM/YzVmMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBsaWIgZnJvbSBcIkBjbHVzdGVyaW8vbGliXCI7XHJcbmltcG9ydCB7IFR5cGUsIFN0YXRpYyB9IGZyb20gXCJAc2luY2xhaXIvdHlwZWJveFwiO1xyXG5cclxuLypcclxuICAgIERhdGEgcmVjb3Jkc1xyXG4qL1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwUGVybWlzc2lvbnMge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIGlzQmxhY2tsaXN0OiBib29sZWFuLFxyXG4gICAgICAgIHB1YmxpYyBwZXJtaXNzaW9uczogc3RyaW5nW10sXHJcbiAgICApIHt9XHJcblxyXG4gICAgc3RhdGljIGpzb25TY2hlbWEgPSBUeXBlLk9iamVjdCh7XHJcbiAgICAgICAgaXNfYmxhY2tsaXN0OiBUeXBlLkJvb2xlYW4oKSxcclxuICAgICAgICBwZXJtaXNzaW9uczogVHlwZS5BcnJheShUeXBlLlN0cmluZygpKSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRvSlNPTigpOiBTdGF0aWM8dHlwZW9mIEdyb3VwUGVybWlzc2lvbnMuanNvblNjaGVtYT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGlzX2JsYWNrbGlzdDogdGhpcy5pc0JsYWNrbGlzdCxcclxuICAgICAgICAgICAgcGVybWlzc2lvbnM6IHRoaXMucGVybWlzc2lvbnMsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbUpTT04oanNvbjogU3RhdGljPHR5cGVvZiB0aGlzLmpzb25TY2hlbWE+KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzKFxyXG4gICAgICAgICAgICBqc29uLmlzX2JsYWNrbGlzdCxcclxuICAgICAgICAgICAganNvbi5wZXJtaXNzaW9ucyxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgR3JvdXBSZWNvcmQge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIGlkOiBudW1iZXIsXHJcbiAgICAgICAgcHVibGljIG5hbWU6IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgcGVybWlzc2lvbnM6IEdyb3VwUGVybWlzc2lvbnMsXHJcbiAgICAgICAgcHVibGljIHVwZGF0ZWRBdE1zOiBudW1iZXIgPSAwLFxyXG4gICAgICAgIHB1YmxpYyBpc0RlbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZSxcclxuICAgICkge31cclxuXHJcbiAgICBzdGF0aWMganNvblNjaGVtYSA9IFR5cGUuT2JqZWN0KHtcclxuICAgICAgICBpZDogVHlwZS5JbnRlZ2VyKCksXHJcbiAgICAgICAgbmFtZTogVHlwZS5TdHJpbmcoKSxcclxuICAgICAgICBwZXJtaXNzaW9uczogR3JvdXBQZXJtaXNzaW9ucy5qc29uU2NoZW1hLFxyXG4gICAgICAgIHVwZGF0ZWRfYXRfbXM6IFR5cGUuT3B0aW9uYWwoVHlwZS5OdW1iZXIoKSksXHJcbiAgICAgICAgaXNfZGVsZXRlZDogVHlwZS5PcHRpb25hbChUeXBlLkJvb2xlYW4oKSksXHJcbiAgICB9KTtcclxuXHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgbGV0IGpzb246IFN0YXRpYzx0eXBlb2YgR3JvdXBSZWNvcmQuanNvblNjaGVtYT4gPSB7XHJcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXHJcbiAgICAgICAgICAgIHBlcm1pc3Npb25zOiB0aGlzLnBlcm1pc3Npb25zLnRvSlNPTigpLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnVwZGF0ZWRBdE1zKSB7XHJcbiAgICAgICAgICAgIGpzb24udXBkYXRlZF9hdF9tcyA9IHRoaXMudXBkYXRlZEF0TXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pc0RlbGV0ZWQpIHtcclxuICAgICAgICAgICAganNvbi5pc19kZWxldGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBqc29uO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBmcm9tSlNPTihqc29uOiBTdGF0aWM8dHlwZW9mIHRoaXMuanNvblNjaGVtYT4pIHtcclxuICAgICAgICByZXR1cm4gbmV3IHRoaXMoXHJcbiAgICAgICAgICAgIGpzb24uaWQsXHJcbiAgICAgICAgICAgIGpzb24ubmFtZSxcclxuICAgICAgICAgICAgR3JvdXBQZXJtaXNzaW9ucy5mcm9tSlNPTihqc29uLnBlcm1pc3Npb25zKSxcclxuICAgICAgICAgICAganNvbi51cGRhdGVkX2F0X21zID8/IDAsXHJcbiAgICAgICAgICAgIGpzb24uaXNfZGVsZXRlZCA/PyBmYWxzZSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQXNzaWdubWVudFJlY29yZCB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgbmFtZTogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBncm91cElkOiBudW1iZXIsXHJcbiAgICAgICAgcHVibGljIHVwZGF0ZWRBdE1zOiBudW1iZXIgPSAwLFxyXG4gICAgICAgIHB1YmxpYyBpc0RlbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZSxcclxuICAgICkge31cclxuXHJcbiAgICBnZXQgaWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMganNvblNjaGVtYSA9IFR5cGUuT2JqZWN0KHtcclxuICAgICAgICBuYW1lOiBUeXBlLlN0cmluZygpLFxyXG4gICAgICAgIGdyb3VwX2lkOiBUeXBlLkludGVnZXIoKSxcclxuICAgICAgICB1cGRhdGVkX2F0X21zOiBUeXBlLk9wdGlvbmFsKFR5cGUuTnVtYmVyKCkpLFxyXG4gICAgICAgIGlzX2RlbGV0ZWQ6IFR5cGUuT3B0aW9uYWwoVHlwZS5Cb29sZWFuKCkpLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdG9KU09OKCk6IFN0YXRpYzx0eXBlb2YgQXNzaWdubWVudFJlY29yZC5qc29uU2NoZW1hPiB7XHJcbiAgICAgICAgbGV0IGpzb246IFN0YXRpYzx0eXBlb2YgQXNzaWdubWVudFJlY29yZC5qc29uU2NoZW1hPiA9IHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxyXG4gICAgICAgICAgICBncm91cF9pZDogdGhpcy5ncm91cElkLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnVwZGF0ZWRBdE1zKSB7XHJcbiAgICAgICAgICAgIGpzb24udXBkYXRlZF9hdF9tcyA9IHRoaXMudXBkYXRlZEF0TXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pc0RlbGV0ZWQpIHtcclxuICAgICAgICAgICAganNvbi5pc19kZWxldGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBqc29uO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBmcm9tSlNPTihqc29uOiBTdGF0aWM8dHlwZW9mIHRoaXMuanNvblNjaGVtYT4pIHtcclxuICAgICAgICByZXR1cm4gbmV3IHRoaXMoXHJcbiAgICAgICAgICAgIGpzb24ubmFtZSxcclxuICAgICAgICAgICAganNvbi5ncm91cF9pZCxcclxuICAgICAgICAgICAganNvbi51cGRhdGVkX2F0X21zID8/IDAsXHJcbiAgICAgICAgICAgIGpzb24uaXNfZGVsZXRlZCA/PyBmYWxzZSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUm9sZU1hcHBpbmdSZWNvcmQge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIGlkOiBudW1iZXIsXHJcbiAgICAgICAgcHVibGljIHJvbGVJZHM6IFNldDxudW1iZXI+LFxyXG4gICAgICAgIHB1YmxpYyBncm91cElkOiBudW1iZXIsXHJcbiAgICAgICAgcHVibGljIHByaW9yaXR5OiBudW1iZXIsXHJcbiAgICAgICAgcHVibGljIGVuYWJsZWQ6IGJvb2xlYW4sXHJcbiAgICAgICAgcHVibGljIHVwZGF0ZWRBdE1zOiBudW1iZXIgPSAwLFxyXG4gICAgICAgIHB1YmxpYyBpc0RlbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZSxcclxuICAgICkge31cclxuXHJcbiAgICBzdGF0aWMganNvblNjaGVtYSA9IFR5cGUuT2JqZWN0KHtcclxuICAgICAgICBpZDogVHlwZS5JbnRlZ2VyKCksXHJcbiAgICAgICAgcm9sZV9pZHM6IFR5cGUuQXJyYXkoVHlwZS5JbnRlZ2VyKCkpLFxyXG4gICAgICAgIGdyb3VwX2lkOiBUeXBlLkludGVnZXIoKSxcclxuICAgICAgICBwcmlvcml0eTogVHlwZS5OdW1iZXIoKSxcclxuICAgICAgICBlbmFibGVkOiBUeXBlLkJvb2xlYW4oKSxcclxuICAgICAgICB1cGRhdGVkX2F0X21zOiBUeXBlLk9wdGlvbmFsKFR5cGUuTnVtYmVyKCkpLFxyXG4gICAgICAgIGlzX2RlbGV0ZWQ6IFR5cGUuT3B0aW9uYWwoVHlwZS5Cb29sZWFuKCkpLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdG9KU09OKCk6IFN0YXRpYzx0eXBlb2YgUm9sZU1hcHBpbmdSZWNvcmQuanNvblNjaGVtYT4ge1xyXG4gICAgICAgIGxldCBqc29uOiBTdGF0aWM8dHlwZW9mIFJvbGVNYXBwaW5nUmVjb3JkLmpzb25TY2hlbWE+ID0ge1xyXG4gICAgICAgICAgICBpZDogdGhpcy5pZCxcclxuICAgICAgICAgICAgcm9sZV9pZHM6IFsuLi50aGlzLnJvbGVJZHNdLFxyXG4gICAgICAgICAgICBncm91cF9pZDogdGhpcy5ncm91cElkLFxyXG4gICAgICAgICAgICBwcmlvcml0eTogdGhpcy5wcmlvcml0eSxcclxuICAgICAgICAgICAgZW5hYmxlZDogdGhpcy5lbmFibGVkLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnVwZGF0ZWRBdE1zKSB7XHJcbiAgICAgICAgICAgIGpzb24udXBkYXRlZF9hdF9tcyA9IHRoaXMudXBkYXRlZEF0TXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pc0RlbGV0ZWQpIHtcclxuICAgICAgICAgICAganNvbi5pc19kZWxldGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBqc29uO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBmcm9tSlNPTihqc29uOiBTdGF0aWM8dHlwZW9mIHRoaXMuanNvblNjaGVtYT4pIHtcclxuICAgICAgICByZXR1cm4gbmV3IHRoaXMoXHJcbiAgICAgICAgICAgIGpzb24uaWQsXHJcbiAgICAgICAgICAgIG5ldyBTZXQoanNvbi5yb2xlX2lkcyksXHJcbiAgICAgICAgICAgIGpzb24uZ3JvdXBfaWQsXHJcbiAgICAgICAgICAgIGpzb24ucHJpb3JpdHksXHJcbiAgICAgICAgICAgIGpzb24uZW5hYmxlZCxcclxuICAgICAgICAgICAganNvbi51cGRhdGVkX2F0X21zID8/IDAsXHJcbiAgICAgICAgICAgIGpzb24uaXNfZGVsZXRlZCA/PyBmYWxzZSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKlxyXG4gICAgVXBkYXRlIGV2ZW50c1xyXG4qL1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwVXBkYXRlZEV2ZW50IHtcclxuICAgIGRlY2xhcmUgW1wiY29uc3RydWN0b3JcIl06IHR5cGVvZiBHcm91cFVwZGF0ZWRFdmVudDtcclxuICAgIHN0YXRpYyBwbHVnaW4gPSBcImV4cF9ncm91cHNcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyB0eXBlID0gXCJldmVudFwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHNyYyA9IFwiY29udHJvbGxlclwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIGRzdCA9IFtcImNvbnRyb2xcIiwgXCJpbnN0YW5jZVwiXSBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBwZXJtaXNzaW9uID0gXCJleHBfZ3JvdXBzLmdyb3VwLnN1YnNjcmliZVwiIGFzIGNvbnN0O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyB1cGRhdGVzOiBHcm91cFJlY29yZFtdLFxyXG4gICAgKSB7fVxyXG5cclxuICAgIHN0YXRpYyBqc29uU2NoZW1hID0gVHlwZS5PYmplY3Qoe1xyXG4gICAgICAgIHVwZGF0ZXM6IFR5cGUuQXJyYXkoR3JvdXBSZWNvcmQuanNvblNjaGVtYSksXHJcbiAgICB9KTtcclxuXHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgdXBkYXRlczogdGhpcy51cGRhdGVzLm1hcChncm91cCA9PiBncm91cC50b0pTT04oKSkgfTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbUpTT04oanNvbjogU3RhdGljPHR5cGVvZiB0aGlzLmpzb25TY2hlbWE+KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzKGpzb24udXBkYXRlcy5tYXAoZ3JvdXAgPT4gR3JvdXBSZWNvcmQuZnJvbUpTT04oZ3JvdXApKSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBNYW51YWxBc3NpZ25tZW50VXBkYXRlZEV2ZW50IHtcclxuICAgIGRlY2xhcmUgW1wiY29uc3RydWN0b3JcIl06IHR5cGVvZiBNYW51YWxBc3NpZ25tZW50VXBkYXRlZEV2ZW50O1xyXG4gICAgc3RhdGljIHBsdWdpbiA9IFwiZXhwX2dyb3Vwc1wiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHR5cGUgPSBcImV2ZW50XCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgc3JjID0gXCJjb250cm9sbGVyXCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgZHN0ID0gW1wiY29udHJvbFwiLCBcImluc3RhbmNlXCJdIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHBlcm1pc3Npb24gPSBcImV4cF9ncm91cHMuYXNzaWdubWVudC5zdWJzY3JpYmVcIiBhcyBjb25zdDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgdXBkYXRlczogQXNzaWdubWVudFJlY29yZFtdLFxyXG4gICAgKSB7fVxyXG5cclxuICAgIHN0YXRpYyBqc29uU2NoZW1hID0gVHlwZS5PYmplY3Qoe1xyXG4gICAgICAgIHVwZGF0ZXM6IFR5cGUuQXJyYXkoQXNzaWdubWVudFJlY29yZC5qc29uU2NoZW1hKSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4geyB1cGRhdGVzOiB0aGlzLnVwZGF0ZXMubWFwKGFzc2lnbm1lbnQgPT4gYXNzaWdubWVudC50b0pTT04oKSkgfTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbUpTT04oanNvbjogU3RhdGljPHR5cGVvZiB0aGlzLmpzb25TY2hlbWE+KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzKGpzb24udXBkYXRlcy5tYXAoYXNzaWdubWVudCA9PiBBc3NpZ25tZW50UmVjb3JkLmZyb21KU09OKGFzc2lnbm1lbnQpKSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSZXNvbHZlZEFzc2lnbm1lbnRVcGRhdGVkRXZlbnQge1xyXG4gICAgZGVjbGFyZSBbXCJjb25zdHJ1Y3RvclwiXTogdHlwZW9mIFJlc29sdmVkQXNzaWdubWVudFVwZGF0ZWRFdmVudDtcclxuICAgIHN0YXRpYyBwbHVnaW4gPSBcImV4cF9ncm91cHNcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyB0eXBlID0gXCJldmVudFwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHNyYyA9IFwiY29udHJvbGxlclwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIGRzdCA9IFtcImNvbnRyb2xcIiwgXCJpbnN0YW5jZVwiXSBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBwZXJtaXNzaW9uID0gXCJleHBfZ3JvdXBzLmFzc2lnbm1lbnQuc3Vic2NyaWJlXCIgYXMgY29uc3Q7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIHVwZGF0ZXM6IEFzc2lnbm1lbnRSZWNvcmRbXSxcclxuICAgICkge31cclxuXHJcbiAgICBzdGF0aWMganNvblNjaGVtYSA9IFR5cGUuT2JqZWN0KHtcclxuICAgICAgICB1cGRhdGVzOiBUeXBlLkFycmF5KEFzc2lnbm1lbnRSZWNvcmQuanNvblNjaGVtYSksXHJcbiAgICB9KTtcclxuXHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgdXBkYXRlczogdGhpcy51cGRhdGVzLm1hcChhc3NpZ25tZW50ID0+IGFzc2lnbm1lbnQudG9KU09OKCkpIH07XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21KU09OKGpzb246IFN0YXRpYzx0eXBlb2YgdGhpcy5qc29uU2NoZW1hPikge1xyXG4gICAgICAgIHJldHVybiBuZXcgdGhpcyhqc29uLnVwZGF0ZXMubWFwKGFzc2lnbm1lbnQgPT4gQXNzaWdubWVudFJlY29yZC5mcm9tSlNPTihhc3NpZ25tZW50KSkpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUm9sZU1hcHBpbmdVcGRhdGVkRXZlbnQge1xyXG4gICAgZGVjbGFyZSBbXCJjb25zdHJ1Y3RvclwiXTogdHlwZW9mIFJvbGVNYXBwaW5nVXBkYXRlZEV2ZW50O1xyXG4gICAgc3RhdGljIHBsdWdpbiA9IFwiZXhwX2dyb3Vwc1wiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHR5cGUgPSBcImV2ZW50XCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgc3JjID0gXCJjb250cm9sbGVyXCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgZHN0ID0gXCJjb250cm9sXCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgcGVybWlzc2lvbiA9IFwiZXhwX2dyb3Vwcy5yb2xlX21hcHBpbmcuc3Vic2NyaWJlXCIgYXMgY29uc3Q7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIHVwZGF0ZXM6IFJvbGVNYXBwaW5nUmVjb3JkW10sXHJcbiAgICApIHt9XHJcblxyXG4gICAgc3RhdGljIGpzb25TY2hlbWEgPSBUeXBlLk9iamVjdCh7XHJcbiAgICAgICAgdXBkYXRlczogVHlwZS5BcnJheShSb2xlTWFwcGluZ1JlY29yZC5qc29uU2NoZW1hKSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4geyB1cGRhdGVzOiB0aGlzLnVwZGF0ZXMubWFwKHJvbGVNYXBwaW5nID0+IHJvbGVNYXBwaW5nLnRvSlNPTigpKSB9O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBmcm9tSlNPTihqc29uOiBTdGF0aWM8dHlwZW9mIHRoaXMuanNvblNjaGVtYT4pIHtcclxuICAgICAgICByZXR1cm4gbmV3IHRoaXMoanNvbi51cGRhdGVzLm1hcChyb2xlTWFwcGluZyA9PiBSb2xlTWFwcGluZ1JlY29yZC5mcm9tSlNPTihyb2xlTWFwcGluZykpKTtcclxuICAgIH1cclxufVxyXG5cclxuLypcclxuICAgIEdyb3VwIHJlcXVlc3RzXHJcbiovXHJcblxyXG5leHBvcnQgY2xhc3MgR3JvdXBDcmVhdGVSZXF1ZXN0IHtcclxuICAgIGRlY2xhcmUgW1wiY29uc3RydWN0b3JcIl06IHR5cGVvZiBHcm91cENyZWF0ZVJlcXVlc3Q7XHJcbiAgICBzdGF0aWMgcGx1Z2luID0gXCJleHBfZ3JvdXBzXCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgdHlwZSA9IFwicmVxdWVzdFwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHNyYyA9IFtcImNvbnRyb2xcIiwgXCJpbnN0YW5jZVwiXSBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBkc3QgPSBcImNvbnRyb2xsZXJcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBwZXJtaXNzaW9uID0gXCJleHBfZ3JvdXBzLmdyb3VwLmNyZWF0ZVwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIFJlc3BvbnNlID0gR3JvdXBSZWNvcmQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIG5hbWU6IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgcGVybWlzc2lvbnM6IEdyb3VwUGVybWlzc2lvbnMsXHJcbiAgICApIHt9XHJcblxyXG4gICAgc3RhdGljIGpzb25TY2hlbWEgPSBUeXBlLk9iamVjdCh7XHJcbiAgICAgICAgbmFtZTogVHlwZS5TdHJpbmcoKSxcclxuICAgICAgICBwZXJtaXNzaW9uczogR3JvdXBQZXJtaXNzaW9ucy5qc29uU2NoZW1hLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcclxuICAgICAgICAgICAgcGVybWlzc2lvbnM6IHRoaXMucGVybWlzc2lvbnMudG9KU09OKCksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbUpTT04oanNvbjogU3RhdGljPHR5cGVvZiB0aGlzLmpzb25TY2hlbWE+KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzKFxyXG4gICAgICAgICAgICBqc29uLm5hbWUsXHJcbiAgICAgICAgICAgIEdyb3VwUGVybWlzc2lvbnMuZnJvbUpTT04oanNvbi5wZXJtaXNzaW9ucyksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwVXBkYXRlUmVxdWVzdCB7XHJcbiAgICBkZWNsYXJlIFtcImNvbnN0cnVjdG9yXCJdOiB0eXBlb2YgR3JvdXBVcGRhdGVSZXF1ZXN0O1xyXG4gICAgc3RhdGljIHBsdWdpbiA9IFwiZXhwX2dyb3Vwc1wiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHR5cGUgPSBcInJlcXVlc3RcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBzcmMgPSBbXCJjb250cm9sXCIsIFwiaW5zdGFuY2VcIl0gYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgZHN0ID0gXCJjb250cm9sbGVyXCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgcGVybWlzc2lvbiA9IFwiZXhwX2dyb3Vwcy5ncm91cC51cGRhdGVcIiBhcyBjb25zdDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgZ3JvdXA6IEdyb3VwUmVjb3JkLFxyXG4gICAgKSB7fVxyXG5cclxuICAgIHN0YXRpYyBqc29uU2NoZW1hID0gVHlwZS5PYmplY3Qoe1xyXG4gICAgICAgIGdyb3VwOiBHcm91cFJlY29yZC5qc29uU2NoZW1hLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGdyb3VwOiB0aGlzLmdyb3VwLnRvSlNPTigpLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21KU09OKGpzb246IFN0YXRpYzx0eXBlb2YgdGhpcy5qc29uU2NoZW1hPikge1xyXG4gICAgICAgIHJldHVybiBuZXcgdGhpcyhcclxuICAgICAgICAgICAgR3JvdXBSZWNvcmQuZnJvbUpTT04oanNvbi5ncm91cCksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwRGVsZXRlUmVxdWVzdCB7XHJcbiAgICBkZWNsYXJlIFtcImNvbnN0cnVjdG9yXCJdOiB0eXBlb2YgR3JvdXBEZWxldGVSZXF1ZXN0O1xyXG4gICAgc3RhdGljIHBsdWdpbiA9IFwiZXhwX2dyb3Vwc1wiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHR5cGUgPSBcInJlcXVlc3RcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBzcmMgPSBbXCJjb250cm9sXCIsIFwiaW5zdGFuY2VcIl0gYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgZHN0ID0gXCJjb250cm9sbGVyXCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgcGVybWlzc2lvbiA9IFwiZXhwX2dyb3Vwcy5ncm91cC5kZWxldGVcIiBhcyBjb25zdDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgZ3JvdXBJZDogbnVtYmVyLFxyXG4gICAgKSB7fVxyXG5cclxuICAgIHN0YXRpYyBqc29uU2NoZW1hID0gVHlwZS5PYmplY3Qoe1xyXG4gICAgICAgIGdyb3VwX2lkOiBUeXBlLkludGVnZXIoKSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBncm91cF9pZDogdGhpcy5ncm91cElkLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21KU09OKGpzb246IFN0YXRpYzx0eXBlb2YgdGhpcy5qc29uU2NoZW1hPikge1xyXG4gICAgICAgIHJldHVybiBuZXcgdGhpcyhqc29uLmdyb3VwX2lkKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwR2V0UmVxdWVzdCB7XHJcbiAgICBkZWNsYXJlIFtcImNvbnN0cnVjdG9yXCJdOiB0eXBlb2YgR3JvdXBHZXRSZXF1ZXN0O1xyXG4gICAgc3RhdGljIHBsdWdpbiA9IFwiZXhwX2dyb3Vwc1wiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHR5cGUgPSBcInJlcXVlc3RcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBzcmMgPSBbXCJjb250cm9sXCIsIFwiaW5zdGFuY2VcIl0gYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgZHN0ID0gXCJjb250cm9sbGVyXCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgcGVybWlzc2lvbiA9IFwiZXhwX2dyb3Vwcy5ncm91cC5nZXRcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBSZXNwb25zZSA9IEdyb3VwUmVjb3JkO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBncm91cElkOiBudW1iZXIsXHJcbiAgICApIHt9XHJcblxyXG4gICAgc3RhdGljIGpzb25TY2hlbWEgPSBUeXBlLk9iamVjdCh7XHJcbiAgICAgICAgZ3JvdXBfaWQ6IFR5cGUuSW50ZWdlcigpLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGdyb3VwX2lkOiB0aGlzLmdyb3VwSWQsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbUpTT04oanNvbjogU3RhdGljPHR5cGVvZiB0aGlzLmpzb25TY2hlbWE+KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzKGpzb24uZ3JvdXBfaWQpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgR3JvdXBMaXN0UmVxdWVzdCB7XHJcbiAgICBkZWNsYXJlIFtcImNvbnN0cnVjdG9yXCJdOiB0eXBlb2YgR3JvdXBMaXN0UmVxdWVzdDtcclxuICAgIHN0YXRpYyBwbHVnaW4gPSBcImV4cF9ncm91cHNcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyB0eXBlID0gXCJyZXF1ZXN0XCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgc3JjID0gW1wiY29udHJvbFwiLCBcImluc3RhbmNlXCJdIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIGRzdCA9IFwiY29udHJvbGxlclwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHBlcm1pc3Npb24gPSBcImV4cF9ncm91cHMuZ3JvdXAubGlzdFwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIFJlc3BvbnNlID0gbGliLmpzb25BcnJheShHcm91cFJlY29yZCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7fVxyXG59XHJcblxyXG4vKlxyXG4gICAgQXNzaWdubWVudCByZXF1ZXN0c1xyXG4qL1xyXG5cclxuZXhwb3J0IGNsYXNzIEFzc2lnbm1lbnRDcmVhdGVSZXF1ZXN0IHtcclxuICAgIGRlY2xhcmUgW1wiY29uc3RydWN0b3JcIl06IHR5cGVvZiBBc3NpZ25tZW50Q3JlYXRlUmVxdWVzdDtcclxuICAgIHN0YXRpYyBwbHVnaW4gPSBcImV4cF9ncm91cHNcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyB0eXBlID0gXCJyZXF1ZXN0XCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgc3JjID0gW1wiY29udHJvbFwiLCBcImluc3RhbmNlXCJdIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIGRzdCA9IFwiY29udHJvbGxlclwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHBlcm1pc3Npb24gPSBcImV4cF9ncm91cHMuYXNzaWdubWVudC5jcmVhdGVcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBSZXNwb25zZSA9IEFzc2lnbm1lbnRSZWNvcmQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIG5hbWU6IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgZ3JvdXBJZDogbnVtYmVyLFxyXG4gICAgKSB7fVxyXG5cclxuICAgIHN0YXRpYyBqc29uU2NoZW1hID0gVHlwZS5PYmplY3Qoe1xyXG4gICAgICAgIG5hbWU6IFR5cGUuU3RyaW5nKCksXHJcbiAgICAgICAgZ3JvdXBfaWQ6IFR5cGUuSW50ZWdlcigpLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcclxuICAgICAgICAgICAgZ3JvdXBfaWQ6IHRoaXMuZ3JvdXBJZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBmcm9tSlNPTihqc29uOiBTdGF0aWM8dHlwZW9mIHRoaXMuanNvblNjaGVtYT4pIHtcclxuICAgICAgICByZXR1cm4gbmV3IHRoaXMoanNvbi5uYW1lLCBqc29uLmdyb3VwX2lkKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEFzc2lnbm1lbnRVcGRhdGVSZXF1ZXN0IHtcclxuICAgIGRlY2xhcmUgW1wiY29uc3RydWN0b3JcIl06IHR5cGVvZiBBc3NpZ25tZW50VXBkYXRlUmVxdWVzdDtcclxuICAgIHN0YXRpYyBwbHVnaW4gPSBcImV4cF9ncm91cHNcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyB0eXBlID0gXCJyZXF1ZXN0XCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgc3JjID0gW1wiY29udHJvbFwiLCBcImluc3RhbmNlXCJdIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIGRzdCA9IFwiY29udHJvbGxlclwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHBlcm1pc3Npb24gPSBcImV4cF9ncm91cHMuYXNzaWdubWVudC51cGRhdGVcIiBhcyBjb25zdDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgYXNzaWdubWVudDogQXNzaWdubWVudFJlY29yZCxcclxuICAgICkge31cclxuXHJcbiAgICBzdGF0aWMganNvblNjaGVtYSA9IFR5cGUuT2JqZWN0KHtcclxuICAgICAgICBhc3NpZ25tZW50OiBBc3NpZ25tZW50UmVjb3JkLmpzb25TY2hlbWEsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYXNzaWdubWVudDogdGhpcy5hc3NpZ25tZW50LnRvSlNPTigpLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21KU09OKGpzb246IFN0YXRpYzx0eXBlb2YgdGhpcy5qc29uU2NoZW1hPikge1xyXG4gICAgICAgIHJldHVybiBuZXcgdGhpcyhcclxuICAgICAgICAgICAgQXNzaWdubWVudFJlY29yZC5mcm9tSlNPTihqc29uLmFzc2lnbm1lbnQpLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBc3NpZ25tZW50RGVsZXRlUmVxdWVzdCB7XHJcbiAgICBkZWNsYXJlIFtcImNvbnN0cnVjdG9yXCJdOiB0eXBlb2YgQXNzaWdubWVudERlbGV0ZVJlcXVlc3Q7XHJcbiAgICBzdGF0aWMgcGx1Z2luID0gXCJleHBfZ3JvdXBzXCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgdHlwZSA9IFwicmVxdWVzdFwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHNyYyA9IFtcImNvbnRyb2xcIiwgXCJpbnN0YW5jZVwiXSBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBkc3QgPSBcImNvbnRyb2xsZXJcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBwZXJtaXNzaW9uID0gXCJleHBfZ3JvdXBzLmFzc2lnbm1lbnQuZGVsZXRlXCIgYXMgY29uc3Q7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIG5hbWU6IHN0cmluZyxcclxuICAgICkge31cclxuXHJcbiAgICBzdGF0aWMganNvblNjaGVtYSA9IFR5cGUuT2JqZWN0KHtcclxuICAgICAgICBuYW1lOiBUeXBlLlN0cmluZygpLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBmcm9tSlNPTihqc29uOiBTdGF0aWM8dHlwZW9mIHRoaXMuanNvblNjaGVtYT4pIHtcclxuICAgICAgICByZXR1cm4gbmV3IHRoaXMoanNvbi5uYW1lKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEFzc2lnbm1lbnRHZXRSZXF1ZXN0IHtcclxuICAgIGRlY2xhcmUgW1wiY29uc3RydWN0b3JcIl06IHR5cGVvZiBBc3NpZ25tZW50R2V0UmVxdWVzdDtcclxuICAgIHN0YXRpYyBwbHVnaW4gPSBcImV4cF9ncm91cHNcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyB0eXBlID0gXCJyZXF1ZXN0XCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgc3JjID0gW1wiY29udHJvbFwiLCBcImluc3RhbmNlXCJdIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIGRzdCA9IFwiY29udHJvbGxlclwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHBlcm1pc3Npb24gPSBcImV4cF9ncm91cHMuYXNzaWdubWVudC5nZXRcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBSZXNwb25zZSA9IEFzc2lnbm1lbnRSZWNvcmQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIG5hbWU6IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgcmVzb2x2ZTogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgKSB7fVxyXG5cclxuICAgIHN0YXRpYyBqc29uU2NoZW1hID0gVHlwZS5PYmplY3Qoe1xyXG4gICAgICAgIG5hbWU6IFR5cGUuU3RyaW5nKCksXHJcbiAgICAgICAgcmVzb2x2ZTogVHlwZS5Cb29sZWFuKCksXHJcbiAgICB9KTtcclxuXHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxyXG4gICAgICAgICAgICByZXNvbHZlOiB0aGlzLnJlc29sdmUsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbUpTT04oanNvbjogU3RhdGljPHR5cGVvZiB0aGlzLmpzb25TY2hlbWE+KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzKGpzb24ubmFtZSwganNvbi5yZXNvbHZlKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEFzc2lnbm1lbnRMaXN0UmVxdWVzdCB7XHJcbiAgICBkZWNsYXJlIFtcImNvbnN0cnVjdG9yXCJdOiB0eXBlb2YgQXNzaWdubWVudExpc3RSZXF1ZXN0O1xyXG4gICAgc3RhdGljIHBsdWdpbiA9IFwiZXhwX2dyb3Vwc1wiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHR5cGUgPSBcInJlcXVlc3RcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBzcmMgPSBbXCJjb250cm9sXCIsIFwiaW5zdGFuY2VcIl0gYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgZHN0ID0gXCJjb250cm9sbGVyXCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgcGVybWlzc2lvbiA9IFwiZXhwX2dyb3Vwcy5hc3NpZ25tZW50Lmxpc3RcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBSZXNwb25zZSA9IGxpYi5qc29uQXJyYXkoQXNzaWdubWVudFJlY29yZCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7fVxyXG59XHJcblxyXG4vKlxyXG4gICAgUm9sZSBtYXBwaW5nIHJlcXVlc3RzXHJcbiovXHJcblxyXG5leHBvcnQgY2xhc3MgUm9sZU1hcHBpbmdDcmVhdGVSZXF1ZXN0IHtcclxuICAgIGRlY2xhcmUgW1wiY29uc3RydWN0b3JcIl06IHR5cGVvZiBSb2xlTWFwcGluZ0NyZWF0ZVJlcXVlc3Q7XHJcbiAgICBzdGF0aWMgcGx1Z2luID0gXCJleHBfZ3JvdXBzXCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgdHlwZSA9IFwicmVxdWVzdFwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHNyYyA9IFtcImNvbnRyb2xcIiwgXCJpbnN0YW5jZVwiXSBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBkc3QgPSBcImNvbnRyb2xsZXJcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBwZXJtaXNzaW9uID0gXCJleHBfZ3JvdXBzLnJvbGVfbWFwcGluZy5jcmVhdGVcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBSZXNwb25zZSA9IFJvbGVNYXBwaW5nUmVjb3JkO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyByb2xlSWRzOiBudW1iZXJbXSxcclxuICAgICAgICBwdWJsaWMgZ3JvdXBJZDogbnVtYmVyLFxyXG4gICAgICAgIHB1YmxpYyBwcmlvcml0eTogbnVtYmVyLFxyXG4gICAgICAgIHB1YmxpYyBlbmFibGVkOiBib29sZWFuLFxyXG4gICAgKSB7fVxyXG5cclxuICAgIHN0YXRpYyBqc29uU2NoZW1hID0gVHlwZS5PYmplY3Qoe1xyXG4gICAgICAgIHJvbGVfaWRzOiBUeXBlLkFycmF5KFR5cGUuSW50ZWdlcigpKSxcclxuICAgICAgICBncm91cF9pZDogVHlwZS5JbnRlZ2VyKCksXHJcbiAgICAgICAgcHJpb3JpdHk6IFR5cGUuTnVtYmVyKCksXHJcbiAgICAgICAgZW5hYmxlZDogVHlwZS5Cb29sZWFuKCksXHJcbiAgICB9KTtcclxuXHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcm9sZV9pZHM6IHRoaXMucm9sZUlkcyxcclxuICAgICAgICAgICAgZ3JvdXBfaWQ6IHRoaXMuZ3JvdXBJZCxcclxuICAgICAgICAgICAgcHJpb3JpdHk6IHRoaXMucHJpb3JpdHksXHJcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRoaXMuZW5hYmxlZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBmcm9tSlNPTihqc29uOiBTdGF0aWM8dHlwZW9mIHRoaXMuanNvblNjaGVtYT4pIHtcclxuICAgICAgICByZXR1cm4gbmV3IHRoaXMoXHJcbiAgICAgICAgICAgIGpzb24ucm9sZV9pZHMsXHJcbiAgICAgICAgICAgIGpzb24uZ3JvdXBfaWQsXHJcbiAgICAgICAgICAgIGpzb24ucHJpb3JpdHksXHJcbiAgICAgICAgICAgIGpzb24uZW5hYmxlZCxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUm9sZU1hcHBpbmdVcGRhdGVSZXF1ZXN0IHtcclxuICAgIGRlY2xhcmUgW1wiY29uc3RydWN0b3JcIl06IHR5cGVvZiBSb2xlTWFwcGluZ1VwZGF0ZVJlcXVlc3Q7XHJcbiAgICBzdGF0aWMgcGx1Z2luID0gXCJleHBfZ3JvdXBzXCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgdHlwZSA9IFwicmVxdWVzdFwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHNyYyA9IFtcImNvbnRyb2xcIiwgXCJpbnN0YW5jZVwiXSBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBkc3QgPSBcImNvbnRyb2xsZXJcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBwZXJtaXNzaW9uID0gXCJleHBfZ3JvdXBzLnJvbGVfbWFwcGluZy51cGRhdGVcIiBhcyBjb25zdDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgcm9sZU1hcHBpbmc6IFJvbGVNYXBwaW5nUmVjb3JkLFxyXG4gICAgKSB7fVxyXG5cclxuICAgIHN0YXRpYyBqc29uU2NoZW1hID0gVHlwZS5PYmplY3Qoe1xyXG4gICAgICAgIHJvbGVfbWFwcGluZzogUm9sZU1hcHBpbmdSZWNvcmQuanNvblNjaGVtYSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICByb2xlX21hcHBpbmc6IHRoaXMucm9sZU1hcHBpbmcudG9KU09OKCksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbUpTT04oanNvbjogU3RhdGljPHR5cGVvZiB0aGlzLmpzb25TY2hlbWE+KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzKFxyXG4gICAgICAgICAgICBSb2xlTWFwcGluZ1JlY29yZC5mcm9tSlNPTihqc29uLnJvbGVfbWFwcGluZyksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJvbGVNYXBwaW5nRGVsZXRlUmVxdWVzdCB7XHJcbiAgICBkZWNsYXJlIFtcImNvbnN0cnVjdG9yXCJdOiB0eXBlb2YgUm9sZU1hcHBpbmdEZWxldGVSZXF1ZXN0O1xyXG4gICAgc3RhdGljIHBsdWdpbiA9IFwiZXhwX2dyb3Vwc1wiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHR5cGUgPSBcInJlcXVlc3RcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBzcmMgPSBbXCJjb250cm9sXCIsIFwiaW5zdGFuY2VcIl0gYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgZHN0ID0gXCJjb250cm9sbGVyXCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgcGVybWlzc2lvbiA9IFwiZXhwX2dyb3Vwcy5yb2xlX21hcHBpbmcuZGVsZXRlXCIgYXMgY29uc3Q7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIGlkOiBudW1iZXIsXHJcbiAgICApIHt9XHJcblxyXG4gICAgc3RhdGljIGpzb25TY2hlbWEgPSBUeXBlLk9iamVjdCh7XHJcbiAgICAgICAgaWQ6IFR5cGUuSW50ZWdlcigpLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21KU09OKGpzb246IFN0YXRpYzx0eXBlb2YgdGhpcy5qc29uU2NoZW1hPikge1xyXG4gICAgICAgIHJldHVybiBuZXcgdGhpcyhqc29uLmlkKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJvbGVNYXBwaW5nR2V0UmVxdWVzdCB7XHJcbiAgICBkZWNsYXJlIFtcImNvbnN0cnVjdG9yXCJdOiB0eXBlb2YgUm9sZU1hcHBpbmdHZXRSZXF1ZXN0O1xyXG4gICAgc3RhdGljIHBsdWdpbiA9IFwiZXhwX2dyb3Vwc1wiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHR5cGUgPSBcInJlcXVlc3RcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBzcmMgPSBbXCJjb250cm9sXCIsIFwiaW5zdGFuY2VcIl0gYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgZHN0ID0gXCJjb250cm9sbGVyXCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgcGVybWlzc2lvbiA9IFwiZXhwX2dyb3Vwcy5yb2xlX21hcHBpbmcuZ2V0XCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgUmVzcG9uc2UgPSBSb2xlTWFwcGluZ1JlY29yZDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgaWQ6IG51bWJlcixcclxuICAgICkge31cclxuXHJcbiAgICBzdGF0aWMganNvblNjaGVtYSA9IFR5cGUuT2JqZWN0KHtcclxuICAgICAgICBpZDogVHlwZS5JbnRlZ2VyKCksXHJcbiAgICB9KTtcclxuXHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbUpTT04oanNvbjogU3RhdGljPHR5cGVvZiB0aGlzLmpzb25TY2hlbWE+KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzKGpzb24uaWQpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUm9sZU1hcHBpbmdMaXN0UmVxdWVzdCB7XHJcbiAgICBkZWNsYXJlIFtcImNvbnN0cnVjdG9yXCJdOiB0eXBlb2YgUm9sZU1hcHBpbmdMaXN0UmVxdWVzdDtcclxuICAgIHN0YXRpYyBwbHVnaW4gPSBcImV4cF9ncm91cHNcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyB0eXBlID0gXCJyZXF1ZXN0XCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgc3JjID0gW1wiY29udHJvbFwiLCBcImluc3RhbmNlXCJdIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIGRzdCA9IFwiY29udHJvbGxlclwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHBlcm1pc3Npb24gPSBcImV4cF9ncm91cHMucm9sZV9tYXBwaW5nLmxpc3RcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBSZXNwb25zZSA9IGxpYi5qc29uQXJyYXkoUm9sZU1hcHBpbmdSZWNvcmQpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge31cclxufVxyXG4iXSwibmFtZXMiOlsibGliIiwiVHlwZSIsIkdyb3VwUGVybWlzc2lvbnMiLCJpc0JsYWNrbGlzdCIsInBlcm1pc3Npb25zIiwianNvblNjaGVtYSIsIk9iamVjdCIsImlzX2JsYWNrbGlzdCIsIkJvb2xlYW4iLCJBcnJheSIsIlN0cmluZyIsInRvSlNPTiIsImZyb21KU09OIiwianNvbiIsIkdyb3VwUmVjb3JkIiwiaWQiLCJuYW1lIiwidXBkYXRlZEF0TXMiLCJpc0RlbGV0ZWQiLCJJbnRlZ2VyIiwidXBkYXRlZF9hdF9tcyIsIk9wdGlvbmFsIiwiTnVtYmVyIiwiaXNfZGVsZXRlZCIsIkFzc2lnbm1lbnRSZWNvcmQiLCJncm91cElkIiwiZ3JvdXBfaWQiLCJSb2xlTWFwcGluZ1JlY29yZCIsInJvbGVJZHMiLCJwcmlvcml0eSIsImVuYWJsZWQiLCJyb2xlX2lkcyIsIlNldCIsIkdyb3VwVXBkYXRlZEV2ZW50IiwicGx1Z2luIiwidHlwZSIsInNyYyIsImRzdCIsInBlcm1pc3Npb24iLCJ1cGRhdGVzIiwibWFwIiwiZ3JvdXAiLCJNYW51YWxBc3NpZ25tZW50VXBkYXRlZEV2ZW50IiwiYXNzaWdubWVudCIsIlJlc29sdmVkQXNzaWdubWVudFVwZGF0ZWRFdmVudCIsIlJvbGVNYXBwaW5nVXBkYXRlZEV2ZW50Iiwicm9sZU1hcHBpbmciLCJHcm91cENyZWF0ZVJlcXVlc3QiLCJSZXNwb25zZSIsIkdyb3VwVXBkYXRlUmVxdWVzdCIsIkdyb3VwRGVsZXRlUmVxdWVzdCIsIkdyb3VwR2V0UmVxdWVzdCIsIkdyb3VwTGlzdFJlcXVlc3QiLCJqc29uQXJyYXkiLCJBc3NpZ25tZW50Q3JlYXRlUmVxdWVzdCIsIkFzc2lnbm1lbnRVcGRhdGVSZXF1ZXN0IiwiQXNzaWdubWVudERlbGV0ZVJlcXVlc3QiLCJBc3NpZ25tZW50R2V0UmVxdWVzdCIsInJlc29sdmUiLCJBc3NpZ25tZW50TGlzdFJlcXVlc3QiLCJSb2xlTWFwcGluZ0NyZWF0ZVJlcXVlc3QiLCJSb2xlTWFwcGluZ1VwZGF0ZVJlcXVlc3QiLCJyb2xlX21hcHBpbmciLCJSb2xlTWFwcGluZ0RlbGV0ZVJlcXVlc3QiLCJSb2xlTWFwcGluZ0dldFJlcXVlc3QiLCJSb2xlTWFwcGluZ0xpc3RSZXF1ZXN0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///40\n\n}");
281
+
282
+ /***/ },
283
+
284
+ /***/ 275
285
+ /*!*******************************************!*\
286
+ !*** ./web/components/AssignmentForm.tsx ***!
287
+ \*******************************************/
288
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
289
+
290
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ AssignmentForm)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ 878);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ 27);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! antd */ 537);\n/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(antd__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _clusterio_web_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @clusterio/web_ui */ 388);\n/* harmony import */ var _clusterio_web_ui__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../messages */ 40);\n\n\n\n\n\nfunction AssignmentForm({ open, setOpen, initial }) {\n const control = (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_3__.ControlContext);\n const plugin = control.plugins.get(\"exp_groups\");\n const [groups] = plugin.useGroups();\n const [users] = (0,_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_3__.useUsers)();\n const [form] = antd__WEBPACK_IMPORTED_MODULE_2__.Form.useForm();\n function submit(values) {\n if (initial) {\n control.send(new _messages__WEBPACK_IMPORTED_MODULE_4__.AssignmentUpdateRequest(new _messages__WEBPACK_IMPORTED_MODULE_4__.AssignmentRecord(values.name, values.groupId)));\n } else {\n control.send(new _messages__WEBPACK_IMPORTED_MODULE_4__.AssignmentCreateRequest(values.name, values.groupId));\n }\n setOpen(false);\n }\n ;(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (open) {\n form.resetFields();\n form.setFieldsValue(initial);\n }\n }, [\n open,\n initial\n ]);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Modal, {\n title: initial ? \"Edit Assignment\" : \"Create Assignment\",\n open: open,\n onCancel: ()=>setOpen(false),\n onOk: ()=>form.submit(),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Form, {\n form: form,\n onFinish: submit,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Form.Item, {\n name: \"name\",\n label: \"Player\",\n rules: [\n {\n required: true\n }\n ],\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Select, {\n disabled: Boolean(initial),\n showSearch: true,\n children: [\n ...users.values()\n ].map((u)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Select.Option, {\n value: u.name,\n children: u.name\n }, u.name, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\AssignmentForm.tsx\",\n lineNumber: 56,\n columnNumber: 7\n }, this))\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\AssignmentForm.tsx\",\n lineNumber: 54,\n columnNumber: 5\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\AssignmentForm.tsx\",\n lineNumber: 53,\n columnNumber: 4\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Form.Item, {\n name: \"groupId\",\n label: \"Group\",\n rules: [\n {\n required: true\n }\n ],\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Select, {\n children: [\n ...groups.values()\n ].map((g)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Select.Option, {\n value: g.id,\n children: g.name\n }, g.id, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\AssignmentForm.tsx\",\n lineNumber: 66,\n columnNumber: 7\n }, this))\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\AssignmentForm.tsx\",\n lineNumber: 64,\n columnNumber: 5\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\AssignmentForm.tsx\",\n lineNumber: 63,\n columnNumber: 4\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\AssignmentForm.tsx\",\n lineNumber: 52,\n columnNumber: 3\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\AssignmentForm.tsx\",\n lineNumber: 46,\n columnNumber: 9\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBcUQ7QUFDVjtBQUVrQjtBQUNsQjtBQUc1QixTQUFTUyxlQUFlLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxPQUFPLEVBSTlEO0lBQ0EsTUFBTUMsVUFBVVosaURBQVVBLENBQUNLLDZEQUFjQTtJQUN6QyxNQUFNUSxTQUFTRCxRQUFRRSxPQUFPLENBQUNDLEdBQUcsQ0FBQztJQUVuQyxNQUFNLENBQUNDLE9BQU8sR0FBR0gsT0FBT0ksU0FBUztJQUNqQyxNQUFNLENBQUNDLE1BQU0sR0FBR1osMkRBQVFBO0lBRXhCLE1BQU0sQ0FBQ2EsS0FBSyxHQUFHaEIsc0NBQUlBLENBQUNpQixPQUFPO0lBRTNCLFNBQVNDLE9BQU9DLE1BQVc7UUFDMUIsSUFBSVgsU0FBUztZQUNaQyxRQUFRVyxJQUFJLENBQUMsSUFBSWhCLDhEQUFnQyxDQUNoRCxJQUFJQSx1REFBeUIsQ0FDNUJlLE9BQU9JLElBQUksRUFDWEosT0FBT0ssT0FBTztRQUdqQixPQUFPO1lBQ05mLFFBQVFXLElBQUksQ0FBQyxJQUFJaEIsOERBQWdDLENBQ2hEZSxPQUFPSSxJQUFJLEVBQ1hKLE9BQU9LLE9BQU87UUFFaEI7UUFFQWpCLFFBQVE7SUFDVDtJQUVBVCxpREFBU0EsQ0FBQztRQUNULElBQUlRLE1BQU07WUFDVFUsS0FBS1UsV0FBVztZQUNoQlYsS0FBS1csY0FBYyxDQUFDbkI7UUFDckI7SUFDRCxHQUFHO1FBQUNGO1FBQU1FO0tBQVE7SUFFbEIscUJBQU8sOERBQUNULHVDQUFLQTtRQUNaNkIsT0FBT3BCLFVBQVUsb0JBQW9CO1FBQ3JDRixNQUFNQTtRQUNOdUIsVUFBVSxJQUFNdEIsUUFBUTtRQUN4QnVCLE1BQU0sSUFBTWQsS0FBS0UsTUFBTTtrQkFFdkIsNEVBQUNsQixzQ0FBSUE7WUFBQ2dCLE1BQU1BO1lBQU1lLFVBQVViOzs4QkFDM0IsOERBQUNsQixzQ0FBSUEsQ0FBQ2dDLElBQUk7b0JBQUNULE1BQUs7b0JBQU9VLE9BQU07b0JBQVNDLE9BQU87d0JBQUM7NEJBQUVDLFVBQVU7d0JBQUs7cUJBQUU7OEJBQ2hFLDRFQUFDbEMsd0NBQU1BO3dCQUFDbUMsVUFBVUMsUUFBUTdCO3dCQUFVOEIsVUFBVTtrQ0FDNUM7K0JBQUl2QixNQUFNSSxNQUFNO3lCQUFHLENBQUNvQixHQUFHLENBQUNDLENBQUFBLGtCQUN4Qiw4REFBQ3ZDLHdDQUFNQSxDQUFDd0MsTUFBTTtnQ0FBY0MsT0FBT0YsRUFBRWpCLElBQUk7MENBQ3ZDaUIsRUFBRWpCLElBQUk7K0JBRFlpQixFQUFFakIsSUFBSTs7Ozs7Ozs7Ozs7Ozs7OzhCQU83Qiw4REFBQ3ZCLHNDQUFJQSxDQUFDZ0MsSUFBSTtvQkFBQ1QsTUFBSztvQkFBVVUsT0FBTTtvQkFBUUMsT0FBTzt3QkFBQzs0QkFBRUMsVUFBVTt3QkFBSztxQkFBRTs4QkFDbEUsNEVBQUNsQyx3Q0FBTUE7a0NBQ0w7K0JBQUlZLE9BQU9NLE1BQU07eUJBQUcsQ0FBQ29CLEdBQUcsQ0FBQ0ksQ0FBQUEsa0JBQ3pCLDhEQUFDMUMsd0NBQU1BLENBQUN3QyxNQUFNO2dDQUFZQyxPQUFPQyxFQUFFQyxFQUFFOzBDQUNuQ0QsRUFBRXBCLElBQUk7K0JBRFlvQixFQUFFQyxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVE5QiIsInNvdXJjZXMiOlsid2VicGFjazovL0BleHBjbHVzdGVyL3Blcm1pc3Npb24tZ3JvdXBzLy4vd2ViL2NvbXBvbmVudHMvQXNzaWdubWVudEZvcm0udHN4PzI2NjIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBNb2RhbCwgRm9ybSwgU2VsZWN0IH0gZnJvbSBcImFudGRcIjtcclxuXHJcbmltcG9ydCB7IENvbnRyb2xDb250ZXh0LCB1c2VVc2VycyB9IGZyb20gXCJAY2x1c3RlcmlvL3dlYl91aVwiO1xyXG5pbXBvcnQgKiBhcyBtZXNzYWdlcyBmcm9tIFwiLi4vLi4vbWVzc2FnZXNcIjtcclxuaW1wb3J0IHR5cGUgeyBXZWJQbHVnaW4gfSBmcm9tIFwiLi5cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEFzc2lnbm1lbnRGb3JtKHsgb3Blbiwgc2V0T3BlbiwgaW5pdGlhbCB9OiB7XHJcblx0b3BlbjogYm9vbGVhbixcclxuXHRzZXRPcGVuOiAob3BlbjogYm9vbGVhbikgPT4gdm9pZCxcclxuXHRpbml0aWFsPzogbWVzc2FnZXMuQXNzaWdubWVudFJlY29yZCxcclxufSkge1xyXG5cdGNvbnN0IGNvbnRyb2wgPSB1c2VDb250ZXh0KENvbnRyb2xDb250ZXh0KTtcclxuXHRjb25zdCBwbHVnaW4gPSBjb250cm9sLnBsdWdpbnMuZ2V0KFwiZXhwX2dyb3Vwc1wiKSBhcyBXZWJQbHVnaW47XHJcblxyXG5cdGNvbnN0IFtncm91cHNdID0gcGx1Z2luLnVzZUdyb3VwcygpO1xyXG5cdGNvbnN0IFt1c2Vyc10gPSB1c2VVc2VycygpO1xyXG5cclxuXHRjb25zdCBbZm9ybV0gPSBGb3JtLnVzZUZvcm0oKTtcclxuXHJcblx0ZnVuY3Rpb24gc3VibWl0KHZhbHVlczogYW55KSB7XHJcblx0XHRpZiAoaW5pdGlhbCkge1xyXG5cdFx0XHRjb250cm9sLnNlbmQobmV3IG1lc3NhZ2VzLkFzc2lnbm1lbnRVcGRhdGVSZXF1ZXN0KFxyXG5cdFx0XHRcdG5ldyBtZXNzYWdlcy5Bc3NpZ25tZW50UmVjb3JkKFxyXG5cdFx0XHRcdFx0dmFsdWVzLm5hbWUsXHJcblx0XHRcdFx0XHR2YWx1ZXMuZ3JvdXBJZCxcclxuXHRcdFx0XHQpXHJcblx0XHRcdCkpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29udHJvbC5zZW5kKG5ldyBtZXNzYWdlcy5Bc3NpZ25tZW50Q3JlYXRlUmVxdWVzdChcclxuXHRcdFx0XHR2YWx1ZXMubmFtZSxcclxuXHRcdFx0XHR2YWx1ZXMuZ3JvdXBJZCxcclxuXHRcdFx0KSk7XHJcblx0XHR9XHJcblxyXG5cdFx0c2V0T3BlbihmYWxzZSk7XHJcblx0fVxyXG5cclxuXHR1c2VFZmZlY3QoKCkgPT4ge1xyXG5cdFx0aWYgKG9wZW4pIHtcclxuXHRcdFx0Zm9ybS5yZXNldEZpZWxkcygpO1xyXG5cdFx0XHRmb3JtLnNldEZpZWxkc1ZhbHVlKGluaXRpYWwpO1xyXG5cdFx0fVxyXG5cdH0sIFtvcGVuLCBpbml0aWFsXSk7XHJcblxyXG5cdHJldHVybiA8TW9kYWxcclxuXHRcdHRpdGxlPXtpbml0aWFsID8gXCJFZGl0IEFzc2lnbm1lbnRcIiA6IFwiQ3JlYXRlIEFzc2lnbm1lbnRcIn1cclxuXHRcdG9wZW49e29wZW59XHJcblx0XHRvbkNhbmNlbD17KCkgPT4gc2V0T3BlbihmYWxzZSl9XHJcblx0XHRvbk9rPXsoKSA9PiBmb3JtLnN1Ym1pdCgpfVxyXG5cdD5cclxuXHRcdDxGb3JtIGZvcm09e2Zvcm19IG9uRmluaXNoPXtzdWJtaXR9PlxyXG5cdFx0XHQ8Rm9ybS5JdGVtIG5hbWU9XCJuYW1lXCIgbGFiZWw9XCJQbGF5ZXJcIiBydWxlcz17W3sgcmVxdWlyZWQ6IHRydWUgfV19PlxyXG5cdFx0XHRcdDxTZWxlY3QgZGlzYWJsZWQ9e0Jvb2xlYW4oaW5pdGlhbCl9IHNob3dTZWFyY2g+XHJcblx0XHRcdFx0XHR7Wy4uLnVzZXJzLnZhbHVlcygpXS5tYXAodSA9PiAoXHJcblx0XHRcdFx0XHRcdDxTZWxlY3QuT3B0aW9uIGtleT17dS5uYW1lfSB2YWx1ZT17dS5uYW1lfT5cclxuXHRcdFx0XHRcdFx0XHR7dS5uYW1lfVxyXG5cdFx0XHRcdFx0XHQ8L1NlbGVjdC5PcHRpb24+XHJcblx0XHRcdFx0XHQpKX1cclxuXHRcdFx0XHQ8L1NlbGVjdD5cclxuXHRcdFx0PC9Gb3JtLkl0ZW0+XHJcblxyXG5cdFx0XHQ8Rm9ybS5JdGVtIG5hbWU9XCJncm91cElkXCIgbGFiZWw9XCJHcm91cFwiIHJ1bGVzPXtbeyByZXF1aXJlZDogdHJ1ZSB9XX0+XHJcblx0XHRcdFx0PFNlbGVjdD5cclxuXHRcdFx0XHRcdHtbLi4uZ3JvdXBzLnZhbHVlcygpXS5tYXAoZyA9PiAoXHJcblx0XHRcdFx0XHRcdDxTZWxlY3QuT3B0aW9uIGtleT17Zy5pZH0gdmFsdWU9e2cuaWR9PlxyXG5cdFx0XHRcdFx0XHRcdHtnLm5hbWV9XHJcblx0XHRcdFx0XHRcdDwvU2VsZWN0Lk9wdGlvbj5cclxuXHRcdFx0XHRcdCkpfVxyXG5cdFx0XHRcdDwvU2VsZWN0PlxyXG5cdFx0XHQ8L0Zvcm0uSXRlbT5cclxuXHRcdDwvRm9ybT5cclxuXHQ8L01vZGFsPjtcclxufVxyXG4iXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VDb250ZXh0IiwidXNlRWZmZWN0IiwiTW9kYWwiLCJGb3JtIiwiU2VsZWN0IiwiQ29udHJvbENvbnRleHQiLCJ1c2VVc2VycyIsIm1lc3NhZ2VzIiwiQXNzaWdubWVudEZvcm0iLCJvcGVuIiwic2V0T3BlbiIsImluaXRpYWwiLCJjb250cm9sIiwicGx1Z2luIiwicGx1Z2lucyIsImdldCIsImdyb3VwcyIsInVzZUdyb3VwcyIsInVzZXJzIiwiZm9ybSIsInVzZUZvcm0iLCJzdWJtaXQiLCJ2YWx1ZXMiLCJzZW5kIiwiQXNzaWdubWVudFVwZGF0ZVJlcXVlc3QiLCJBc3NpZ25tZW50UmVjb3JkIiwibmFtZSIsImdyb3VwSWQiLCJBc3NpZ25tZW50Q3JlYXRlUmVxdWVzdCIsInJlc2V0RmllbGRzIiwic2V0RmllbGRzVmFsdWUiLCJ0aXRsZSIsIm9uQ2FuY2VsIiwib25PayIsIm9uRmluaXNoIiwiSXRlbSIsImxhYmVsIiwicnVsZXMiLCJyZXF1aXJlZCIsImRpc2FibGVkIiwiQm9vbGVhbiIsInNob3dTZWFyY2giLCJtYXAiLCJ1IiwiT3B0aW9uIiwidmFsdWUiLCJnIiwiaWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///275\n\n}");
291
+
292
+ /***/ },
293
+
294
+ /***/ 560
295
+ /*!*********************************************!*\
296
+ !*** ./web/components/AssignmentsTable.tsx ***!
297
+ \*********************************************/
298
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
299
+
300
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ AssignmentsTable)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ 878);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ 27);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! antd */ 537);\n/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(antd__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _ant_design_icons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ant-design/icons */ 893);\n/* harmony import */ var _ant_design_icons__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ant-design/icons */ 317);\n/* harmony import */ var _clusterio_web_ui__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @clusterio/web_ui */ 388);\n/* harmony import */ var _clusterio_web_ui__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../messages */ 40);\n/* harmony import */ var _AssignmentForm__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./AssignmentForm */ 275);\n/* harmony import */ var _DeleteConfirm__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./DeleteConfirm */ 844);\n\n\n\n\n\n\n\n\nconst strcmp = new Intl.Collator(undefined, {\n numeric: true,\n sensitivity: \"base\"\n}).compare;\nfunction AssignmentsTable() {\n const control = (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_5__.ControlContext);\n const plugin = control.plugins.get(\"exp_groups\");\n const account = (0,_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_5__.useAccount)();\n const searchInput = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const [assignments, assignmentsSynced] = plugin.useAssignments();\n const [groups, groupsSynced] = plugin.useGroups();\n const [editing, setEditing] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)();\n const [open, setOpen] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const assignmentsArray = [\n ...assignments.values()\n ];\n const groupFilters = [\n ...groups.values()\n ].filter((group)=>assignmentsArray.some((assignment)=>assignment.groupId === group.id)).map((group)=>({\n text: group.name,\n value: group.id\n }));\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Table, {\n columns: [\n {\n title: \"Player\",\n dataIndex: \"name\",\n sorter: (a, b)=>strcmp(a.name, b.name),\n filterIcon: (filtered)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_ant_design_icons__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n style: {\n color: filtered ? \"#1677ff\" : undefined\n }\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\AssignmentsTable.tsx\",\n lineNumber: 41,\n columnNumber: 7\n }, this),\n onFilter: (value, record)=>record.name.toLowerCase().includes(String(value).toLowerCase()),\n filterDropdownProps: {\n onOpenChange: (open)=>open && setTimeout(()=>searchInput.current?.select(), 100)\n },\n filterDropdown: ({ selectedKeys, setSelectedKeys, confirm, clearFilters })=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n style: {\n padding: 4\n },\n onKeyDown: (e)=>e.stopPropagation(),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Input.Search, {\n allowClear: true,\n ref: searchInput,\n placeholder: \"Search username\",\n value: selectedKeys[0],\n onChange: (e)=>setSelectedKeys([\n e.target.value\n ]),\n onSearch: ()=>confirm({\n closeDropdown: false\n }),\n onClear: ()=>{\n clearFilters?.({\n closeDropdown: false\n });\n confirm({\n closeDropdown: true\n });\n }\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\AssignmentsTable.tsx\",\n lineNumber: 51,\n columnNumber: 8\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\AssignmentsTable.tsx\",\n lineNumber: 50,\n columnNumber: 7\n }, this)\n },\n {\n title: \"Group\",\n width: \"40%\",\n filters: groupFilters,\n onFilter: (value, record)=>record.groupId === value,\n render: (_, a)=>groups.get(a.groupId)?.name ?? a.groupId\n },\n ...account.hasAnyPermission(\"exp_groups.assignment.update\", \"exp_groups.assignment.delete\") ? [\n {\n title: \"Actions\",\n width: \"10%\",\n render: (_, record)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Space, {\n children: [\n account.hasPermission(\"exp_groups.assignment.update\") && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Button, {\n icon: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_ant_design_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {}, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\AssignmentsTable.tsx\",\n lineNumber: 86,\n columnNumber: 23\n }, this),\n onClick: ()=>{\n setEditing(record);\n setOpen(true);\n }\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\AssignmentsTable.tsx\",\n lineNumber: 86,\n columnNumber: 9\n }, this),\n account.hasPermission(\"exp_groups.assignment.delete\") && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_DeleteConfirm__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n onConfirm: ()=>control.send(new _messages__WEBPACK_IMPORTED_MODULE_6__.AssignmentDeleteRequest(record.name))\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\AssignmentsTable.tsx\",\n lineNumber: 91,\n columnNumber: 66\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\AssignmentsTable.tsx\",\n lineNumber: 84,\n columnNumber: 7\n }, this)\n }\n ] : []\n ],\n dataSource: assignmentsArray,\n loading: !assignmentsSynced || !groupsSynced,\n rowKey: (a)=>a.name,\n pagination: {\n defaultPageSize: 50,\n showSizeChanger: true,\n pageSizeOptions: [\n \"10\",\n \"20\",\n \"50\",\n \"100\",\n \"200\"\n ],\n showTotal: (total)=>`${total} Assignments`\n }\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\AssignmentsTable.tsx\",\n lineNumber: 34,\n columnNumber: 3\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_AssignmentForm__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n open: open,\n setOpen: setOpen,\n initial: editing\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\AssignmentsTable.tsx\",\n lineNumber: 109,\n columnNumber: 3\n }, this)\n ]\n }, void 0, true);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYwLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQTREO0FBQ0M7QUFDSTtBQUVGO0FBQ1k7QUFHN0I7QUFDRDtBQUU3QyxNQUFNZSxTQUFTLElBQUlDLEtBQUtDLFFBQVEsQ0FBQ0MsV0FBVztJQUFFQyxTQUFTO0lBQU1DLGFBQWE7QUFBTyxHQUFHQyxPQUFPO0FBRTVFLFNBQVNDO0lBQ3ZCLE1BQU1DLFVBQVV0QixpREFBVUEsQ0FBQ1MsNkRBQWNBO0lBQ3pDLE1BQU1jLFNBQVNELFFBQVFFLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDO0lBQ25DLE1BQU1DLFVBQVVoQiw2REFBVUE7SUFFMUIsTUFBTWlCLGNBQWN6Qiw2Q0FBTUEsQ0FBVztJQUVyQyxNQUFNLENBQUMwQixhQUFhQyxrQkFBa0IsR0FBR04sT0FBT08sY0FBYztJQUM5RCxNQUFNLENBQUNDLFFBQVFDLGFBQWEsR0FBR1QsT0FBT1UsU0FBUztJQUUvQyxNQUFNLENBQUNDLFNBQVNDLFdBQVcsR0FBR2xDLCtDQUFRQTtJQUN0QyxNQUFNLENBQUNtQyxNQUFNQyxRQUFRLEdBQUdwQywrQ0FBUUEsQ0FBQztJQUVqQyxNQUFNcUMsbUJBQW1CO1dBQUlWLFlBQVlXLE1BQU07S0FBRztJQUVsRCxNQUFNQyxlQUFlO1dBQUlULE9BQU9RLE1BQU07S0FBRyxDQUN2Q0UsTUFBTSxDQUFDQyxDQUFBQSxRQUFTSixpQkFBaUJLLElBQUksQ0FBQ0MsQ0FBQUEsYUFBY0EsV0FBV0MsT0FBTyxLQUFLSCxNQUFNSSxFQUFFLEdBQ25GQyxHQUFHLENBQUNMLENBQUFBLFFBQVU7WUFBRU0sTUFBTU4sTUFBTU8sSUFBSTtZQUFFQyxPQUFPUixNQUFNSSxFQUFFO1FBQUM7SUFFcEQscUJBQU87OzBCQUNOLDhEQUFDM0MsdUNBQUtBO2dCQUNMZ0QsU0FBUztvQkFDUjt3QkFDQ0MsT0FBTzt3QkFDUEMsV0FBVzt3QkFDWEMsUUFBUSxDQUFDQyxHQUFxQkMsSUFBd0IxQyxPQUFPeUMsRUFBRU4sSUFBSSxFQUFFTyxFQUFFUCxJQUFJO3dCQUMzRVEsWUFBWSxDQUFDQyx5QkFDWiw4REFBQ2xELHlEQUFjQTtnQ0FBQ21ELE9BQU87b0NBQUVDLE9BQU9GLFdBQVcsWUFBWXpDO2dDQUFVOzs7Ozs7d0JBRWxFNEMsVUFBVSxDQUFDWCxPQUFPWSxTQUNqQkEsT0FBT2IsSUFBSSxDQUFDYyxXQUFXLEdBQUdDLFFBQVEsQ0FBQ0MsT0FBT2YsT0FBT2EsV0FBVzt3QkFFN0RHLHFCQUFxQjs0QkFDcEJDLGNBQWMsQ0FBQy9CLE9BQWtCQSxRQUFRZ0MsV0FBVyxJQUFNekMsWUFBWTBDLE9BQU8sRUFBRUMsVUFBVTt3QkFDMUY7d0JBQ0FDLGdCQUFnQixDQUFDLEVBQUVDLFlBQVksRUFBRUMsZUFBZSxFQUFFQyxPQUFPLEVBQUVDLFlBQVksRUFBRSxpQkFDeEUsOERBQUNDO2dDQUFJakIsT0FBTztvQ0FBRWtCLFNBQVM7Z0NBQUU7Z0NBQUdDLFdBQVcsQ0FBQ0MsSUFBTUEsRUFBRUMsZUFBZTswQ0FDOUQsNEVBQUMxRSx1Q0FBS0EsQ0FBQzJFLE1BQU07b0NBQ1pDLFVBQVU7b0NBQ1ZDLEtBQUt4RDtvQ0FDTHlELGFBQWE7b0NBQ2JsQyxPQUFPc0IsWUFBWSxDQUFDLEVBQUU7b0NBQ3RCYSxVQUFVLENBQUNOLElBQU1OLGdCQUFnQjs0Q0FBQ00sRUFBRU8sTUFBTSxDQUFDcEMsS0FBSzt5Q0FBQztvQ0FDakRxQyxVQUFVLElBQU1iLFFBQVE7NENBQUVjLGVBQWU7d0NBQU07b0NBQy9DQyxTQUFTO3dDQUNSZCxlQUFlOzRDQUFFYSxlQUFlO3dDQUFNO3dDQUN0Q2QsUUFBUTs0Q0FBRWMsZUFBZTt3Q0FBSztvQ0FDL0I7Ozs7Ozs7Ozs7O29CQUlKO29CQUNBO3dCQUNDcEMsT0FBTzt3QkFDUHNDLE9BQU87d0JBQ1BDLFNBQVNuRDt3QkFDVHFCLFVBQVUsQ0FBQ1gsT0FBT1ksU0FDakJBLE9BQU9qQixPQUFPLEtBQUtLO3dCQUVwQjBDLFFBQVEsQ0FBQ0MsR0FBUXRDLElBQ2hCeEIsT0FBT04sR0FBRyxDQUFDOEIsRUFBRVYsT0FBTyxHQUFHSSxRQUFRTSxFQUFFVixPQUFPO29CQUUxQzt1QkFDSW5CLFFBQVFvRSxnQkFBZ0IsQ0FDM0IsZ0NBQ0Esa0NBQ0c7d0JBQUM7NEJBQ0oxQyxPQUFPOzRCQUNQc0MsT0FBTzs0QkFDUEUsUUFBUSxDQUFDQyxHQUFRL0IsdUJBQ2hCLDhEQUFDekQsdUNBQUtBOzt3Q0FDSnFCLFFBQVFxRSxhQUFhLENBQUMsaURBQ3RCLDhEQUFDM0Ysd0NBQU1BOzRDQUFDNEYsb0JBQU0sOERBQUN6Rix5REFBWUE7Ozs7OzRDQUFLMEYsU0FBUztnREFDeEM5RCxXQUFXMkI7Z0RBQ1h6QixRQUFROzRDQUNUOzs7Ozs7d0NBRUFYLFFBQVFxRSxhQUFhLENBQUMsaURBQW1DLDhEQUFDbEYsc0RBQWNBOzRDQUN4RXFGLFdBQVcsSUFBTTVFLFFBQVE2RSxJQUFJLENBQUMsSUFBSXhGLDhEQUF1QkEsQ0FBQ21ELE9BQU9iLElBQUk7Ozs7Ozs7Ozs7Ozt3QkFJekU7cUJBQUUsR0FBRyxFQUFFO2lCQUNQO2dCQUNEbUQsWUFBWTlEO2dCQUNaK0QsU0FBUyxDQUFDeEUscUJBQXFCLENBQUNHO2dCQUNoQ3NFLFFBQVEsQ0FBQy9DLElBQU1BLEVBQUVOLElBQUk7Z0JBQ3JCc0QsWUFBWTtvQkFDWEMsaUJBQWlCO29CQUNqQkMsaUJBQWlCO29CQUNqQkMsaUJBQWlCO3dCQUFDO3dCQUFNO3dCQUFNO3dCQUFNO3dCQUFPO3FCQUFNO29CQUNqREMsV0FBVyxDQUFDQyxRQUFrQixHQUFHQSxNQUFNLFlBQVksQ0FBQztnQkFDckQ7Ozs7OzswQkFHRCw4REFBQ2hHLHVEQUFjQTtnQkFBQ3dCLE1BQU1BO2dCQUFNQyxTQUFTQTtnQkFBU3dFLFNBQVMzRTs7Ozs7Ozs7QUFFekQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZXhwY2x1c3Rlci9wZXJtaXNzaW9uLWdyb3Vwcy8uL3dlYi9jb21wb25lbnRzL0Fzc2lnbm1lbnRzVGFibGUudHN4P2Q0MWEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgVGFibGUsIEJ1dHRvbiwgU3BhY2UsIElucHV0LCBJbnB1dFJlZiB9IGZyb20gXCJhbnRkXCI7XHJcbmltcG9ydCB7IEVkaXRPdXRsaW5lZCwgU2VhcmNoT3V0bGluZWQgfSBmcm9tIFwiQGFudC1kZXNpZ24vaWNvbnNcIjtcclxuXHJcbmltcG9ydCB7IENvbnRyb2xDb250ZXh0LCB1c2VBY2NvdW50IH0gZnJvbSBcIkBjbHVzdGVyaW8vd2ViX3VpXCI7XHJcbmltcG9ydCB7IEFzc2lnbm1lbnREZWxldGVSZXF1ZXN0LCBBc3NpZ25tZW50UmVjb3JkIH0gZnJvbSBcIi4uLy4uL21lc3NhZ2VzXCI7XHJcbmltcG9ydCB0eXBlIHsgV2ViUGx1Z2luIH0gZnJvbSBcIi4uXCI7XHJcblxyXG5pbXBvcnQgQXNzaWdubWVudEZvcm0gZnJvbSBcIi4vQXNzaWdubWVudEZvcm1cIjtcclxuaW1wb3J0IERlbGV0ZWRDb25maXJtIGZyb20gXCIuL0RlbGV0ZUNvbmZpcm1cIjtcclxuXHJcbmNvbnN0IHN0cmNtcCA9IG5ldyBJbnRsLkNvbGxhdG9yKHVuZGVmaW5lZCwgeyBudW1lcmljOiB0cnVlLCBzZW5zaXRpdml0eTogXCJiYXNlXCIgfSkuY29tcGFyZTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEFzc2lnbm1lbnRzVGFibGUoKSB7XHJcblx0Y29uc3QgY29udHJvbCA9IHVzZUNvbnRleHQoQ29udHJvbENvbnRleHQpO1xyXG5cdGNvbnN0IHBsdWdpbiA9IGNvbnRyb2wucGx1Z2lucy5nZXQoXCJleHBfZ3JvdXBzXCIpIGFzIFdlYlBsdWdpbjtcclxuXHRjb25zdCBhY2NvdW50ID0gdXNlQWNjb3VudCgpO1xyXG5cclxuXHRjb25zdCBzZWFyY2hJbnB1dCA9IHVzZVJlZjxJbnB1dFJlZj4obnVsbCk7XHJcblxyXG5cdGNvbnN0IFthc3NpZ25tZW50cywgYXNzaWdubWVudHNTeW5jZWRdID0gcGx1Z2luLnVzZUFzc2lnbm1lbnRzKCk7XHJcblx0Y29uc3QgW2dyb3VwcywgZ3JvdXBzU3luY2VkXSA9IHBsdWdpbi51c2VHcm91cHMoKTtcclxuXHJcblx0Y29uc3QgW2VkaXRpbmcsIHNldEVkaXRpbmddID0gdXNlU3RhdGU8QXNzaWdubWVudFJlY29yZCB8IHVuZGVmaW5lZD4oKTtcclxuXHRjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcblxyXG5cdGNvbnN0IGFzc2lnbm1lbnRzQXJyYXkgPSBbLi4uYXNzaWdubWVudHMudmFsdWVzKCldO1xyXG5cclxuXHRjb25zdCBncm91cEZpbHRlcnMgPSBbLi4uZ3JvdXBzLnZhbHVlcygpXVxyXG5cdFx0LmZpbHRlcihncm91cCA9PiBhc3NpZ25tZW50c0FycmF5LnNvbWUoYXNzaWdubWVudCA9PiBhc3NpZ25tZW50Lmdyb3VwSWQgPT09IGdyb3VwLmlkKSlcclxuXHRcdC5tYXAoZ3JvdXAgPT4gKHsgdGV4dDogZ3JvdXAubmFtZSwgdmFsdWU6IGdyb3VwLmlkIH0pKVxyXG5cclxuXHRyZXR1cm4gPD5cclxuXHRcdDxUYWJsZVxyXG5cdFx0XHRjb2x1bW5zPXtbXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0dGl0bGU6IFwiUGxheWVyXCIsXHJcblx0XHRcdFx0XHRkYXRhSW5kZXg6IFwibmFtZVwiLFxyXG5cdFx0XHRcdFx0c29ydGVyOiAoYTogQXNzaWdubWVudFJlY29yZCwgYjogQXNzaWdubWVudFJlY29yZCkgPT4gc3RyY21wKGEubmFtZSwgYi5uYW1lKSxcclxuXHRcdFx0XHRcdGZpbHRlckljb246IChmaWx0ZXJlZDogYm9vbGVhbikgPT4gKFxyXG5cdFx0XHRcdFx0XHQ8U2VhcmNoT3V0bGluZWQgc3R5bGU9e3sgY29sb3I6IGZpbHRlcmVkID8gXCIjMTY3N2ZmXCIgOiB1bmRlZmluZWQgfX0gLz5cclxuXHRcdFx0XHRcdCksXHJcblx0XHRcdFx0XHRvbkZpbHRlcjogKHZhbHVlLCByZWNvcmQ6IEFzc2lnbm1lbnRSZWNvcmQpID0+IChcclxuXHRcdFx0XHRcdFx0cmVjb3JkLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCkpXHJcblx0XHRcdFx0XHQpLFxyXG5cdFx0XHRcdFx0ZmlsdGVyRHJvcGRvd25Qcm9wczoge1xyXG5cdFx0XHRcdFx0XHRvbk9wZW5DaGFuZ2U6IChvcGVuOiBib29sZWFuKSA9PiBvcGVuICYmIHNldFRpbWVvdXQoKCkgPT4gc2VhcmNoSW5wdXQuY3VycmVudD8uc2VsZWN0KCksIDEwMCksXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmlsdGVyRHJvcGRvd246ICh7IHNlbGVjdGVkS2V5cywgc2V0U2VsZWN0ZWRLZXlzLCBjb25maXJtLCBjbGVhckZpbHRlcnMgfSkgPT4gKFxyXG5cdFx0XHRcdFx0XHQ8ZGl2IHN0eWxlPXt7IHBhZGRpbmc6IDQgfX0gb25LZXlEb3duPXsoZSkgPT4gZS5zdG9wUHJvcGFnYXRpb24oKX0+XHJcblx0XHRcdFx0XHRcdFx0PElucHV0LlNlYXJjaFxyXG5cdFx0XHRcdFx0XHRcdFx0YWxsb3dDbGVhclxyXG5cdFx0XHRcdFx0XHRcdFx0cmVmPXtzZWFyY2hJbnB1dH1cclxuXHRcdFx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyPXtcIlNlYXJjaCB1c2VybmFtZVwifVxyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU9e3NlbGVjdGVkS2V5c1swXX1cclxuXHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZSkgPT4gc2V0U2VsZWN0ZWRLZXlzKFtlLnRhcmdldC52YWx1ZV0pfVxyXG5cdFx0XHRcdFx0XHRcdFx0b25TZWFyY2g9eygpID0+IGNvbmZpcm0oeyBjbG9zZURyb3Bkb3duOiBmYWxzZSB9KX1cclxuXHRcdFx0XHRcdFx0XHRcdG9uQ2xlYXI9eygpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xlYXJGaWx0ZXJzPy4oeyBjbG9zZURyb3Bkb3duOiBmYWxzZSB9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uZmlybSh7IGNsb3NlRHJvcGRvd246IHRydWUgfSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9fVxyXG5cdFx0XHRcdFx0XHRcdC8+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0KSxcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdHRpdGxlOiBcIkdyb3VwXCIsXHJcblx0XHRcdFx0XHR3aWR0aDogXCI0MCVcIixcclxuXHRcdFx0XHRcdGZpbHRlcnM6IGdyb3VwRmlsdGVycyxcclxuXHRcdFx0XHRcdG9uRmlsdGVyOiAodmFsdWUsIHJlY29yZDogQXNzaWdubWVudFJlY29yZCkgPT4gKFxyXG5cdFx0XHRcdFx0XHRyZWNvcmQuZ3JvdXBJZCA9PT0gdmFsdWVcclxuXHRcdFx0XHRcdCksXHJcblx0XHRcdFx0XHRyZW5kZXI6IChfOiBhbnksIGE6IGFueSkgPT4gKFxyXG5cdFx0XHRcdFx0XHRncm91cHMuZ2V0KGEuZ3JvdXBJZCk/Lm5hbWUgPz8gYS5ncm91cElkXHJcblx0XHRcdFx0XHQpLFxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0Li4uKGFjY291bnQuaGFzQW55UGVybWlzc2lvbihcclxuXHRcdFx0XHRcdFwiZXhwX2dyb3Vwcy5hc3NpZ25tZW50LnVwZGF0ZVwiLFxyXG5cdFx0XHRcdFx0XCJleHBfZ3JvdXBzLmFzc2lnbm1lbnQuZGVsZXRlXCIsXHJcblx0XHRcdFx0KSA/IFt7XHJcblx0XHRcdFx0XHR0aXRsZTogXCJBY3Rpb25zXCIsXHJcblx0XHRcdFx0XHR3aWR0aDogXCIxMCVcIixcclxuXHRcdFx0XHRcdHJlbmRlcjogKF86IGFueSwgcmVjb3JkOiBBc3NpZ25tZW50UmVjb3JkKSA9PiAoXHJcblx0XHRcdFx0XHRcdDxTcGFjZT5cclxuXHRcdFx0XHRcdFx0XHR7YWNjb3VudC5oYXNQZXJtaXNzaW9uKFwiZXhwX2dyb3Vwcy5hc3NpZ25tZW50LnVwZGF0ZVwiKSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0PEJ1dHRvbiBpY29uPXs8RWRpdE91dGxpbmVkIC8+fSBvbkNsaWNrPXsoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHNldEVkaXRpbmcocmVjb3JkKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2V0T3Blbih0cnVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdH19IC8+XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHthY2NvdW50Lmhhc1Blcm1pc3Npb24oXCJleHBfZ3JvdXBzLmFzc2lnbm1lbnQuZGVsZXRlXCIpICYmIDxEZWxldGVkQ29uZmlybVxyXG5cdFx0XHRcdFx0XHRcdFx0b25Db25maXJtPXsoKSA9PiBjb250cm9sLnNlbmQobmV3IEFzc2lnbm1lbnREZWxldGVSZXF1ZXN0KHJlY29yZC5uYW1lKSl9XHJcblx0XHRcdFx0XHRcdFx0Lz59XHJcblx0XHRcdFx0XHRcdDwvU3BhY2U+XHJcblx0XHRcdFx0XHQpLFxyXG5cdFx0XHRcdH1dIDogW10pLFxyXG5cdFx0XHRdfVxyXG5cdFx0XHRkYXRhU291cmNlPXthc3NpZ25tZW50c0FycmF5fVxyXG5cdFx0XHRsb2FkaW5nPXshYXNzaWdubWVudHNTeW5jZWQgfHwgIWdyb3Vwc1N5bmNlZH1cclxuXHRcdFx0cm93S2V5PXsoYSkgPT4gYS5uYW1lfVxyXG5cdFx0XHRwYWdpbmF0aW9uPXt7XHJcblx0XHRcdFx0ZGVmYXVsdFBhZ2VTaXplOiA1MCxcclxuXHRcdFx0XHRzaG93U2l6ZUNoYW5nZXI6IHRydWUsXHJcblx0XHRcdFx0cGFnZVNpemVPcHRpb25zOiBbXCIxMFwiLCBcIjIwXCIsIFwiNTBcIiwgXCIxMDBcIiwgXCIyMDBcIl0sXHJcblx0XHRcdFx0c2hvd1RvdGFsOiAodG90YWw6IG51bWJlcikgPT4gYCR7dG90YWx9IEFzc2lnbm1lbnRzYCxcclxuXHRcdFx0fX1cclxuXHRcdC8+XHJcblxyXG5cdFx0PEFzc2lnbm1lbnRGb3JtIG9wZW49e29wZW59IHNldE9wZW49e3NldE9wZW59IGluaXRpYWw9e2VkaXRpbmd9IC8+XHJcblx0PC8+O1xyXG59XHJcbiJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNvbnRleHQiLCJ1c2VTdGF0ZSIsInVzZVJlZiIsIlRhYmxlIiwiQnV0dG9uIiwiU3BhY2UiLCJJbnB1dCIsIkVkaXRPdXRsaW5lZCIsIlNlYXJjaE91dGxpbmVkIiwiQ29udHJvbENvbnRleHQiLCJ1c2VBY2NvdW50IiwiQXNzaWdubWVudERlbGV0ZVJlcXVlc3QiLCJBc3NpZ25tZW50Rm9ybSIsIkRlbGV0ZWRDb25maXJtIiwic3RyY21wIiwiSW50bCIsIkNvbGxhdG9yIiwidW5kZWZpbmVkIiwibnVtZXJpYyIsInNlbnNpdGl2aXR5IiwiY29tcGFyZSIsIkFzc2lnbm1lbnRzVGFibGUiLCJjb250cm9sIiwicGx1Z2luIiwicGx1Z2lucyIsImdldCIsImFjY291bnQiLCJzZWFyY2hJbnB1dCIsImFzc2lnbm1lbnRzIiwiYXNzaWdubWVudHNTeW5jZWQiLCJ1c2VBc3NpZ25tZW50cyIsImdyb3VwcyIsImdyb3Vwc1N5bmNlZCIsInVzZUdyb3VwcyIsImVkaXRpbmciLCJzZXRFZGl0aW5nIiwib3BlbiIsInNldE9wZW4iLCJhc3NpZ25tZW50c0FycmF5IiwidmFsdWVzIiwiZ3JvdXBGaWx0ZXJzIiwiZmlsdGVyIiwiZ3JvdXAiLCJzb21lIiwiYXNzaWdubWVudCIsImdyb3VwSWQiLCJpZCIsIm1hcCIsInRleHQiLCJuYW1lIiwidmFsdWUiLCJjb2x1bW5zIiwidGl0bGUiLCJkYXRhSW5kZXgiLCJzb3J0ZXIiLCJhIiwiYiIsImZpbHRlckljb24iLCJmaWx0ZXJlZCIsInN0eWxlIiwiY29sb3IiLCJvbkZpbHRlciIsInJlY29yZCIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJTdHJpbmciLCJmaWx0ZXJEcm9wZG93blByb3BzIiwib25PcGVuQ2hhbmdlIiwic2V0VGltZW91dCIsImN1cnJlbnQiLCJzZWxlY3QiLCJmaWx0ZXJEcm9wZG93biIsInNlbGVjdGVkS2V5cyIsInNldFNlbGVjdGVkS2V5cyIsImNvbmZpcm0iLCJjbGVhckZpbHRlcnMiLCJkaXYiLCJwYWRkaW5nIiwib25LZXlEb3duIiwiZSIsInN0b3BQcm9wYWdhdGlvbiIsIlNlYXJjaCIsImFsbG93Q2xlYXIiLCJyZWYiLCJwbGFjZWhvbGRlciIsIm9uQ2hhbmdlIiwidGFyZ2V0Iiwib25TZWFyY2giLCJjbG9zZURyb3Bkb3duIiwib25DbGVhciIsIndpZHRoIiwiZmlsdGVycyIsInJlbmRlciIsIl8iLCJoYXNBbnlQZXJtaXNzaW9uIiwiaGFzUGVybWlzc2lvbiIsImljb24iLCJvbkNsaWNrIiwib25Db25maXJtIiwic2VuZCIsImRhdGFTb3VyY2UiLCJsb2FkaW5nIiwicm93S2V5IiwicGFnaW5hdGlvbiIsImRlZmF1bHRQYWdlU2l6ZSIsInNob3dTaXplQ2hhbmdlciIsInBhZ2VTaXplT3B0aW9ucyIsInNob3dUb3RhbCIsInRvdGFsIiwiaW5pdGlhbCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///560\n\n}");
301
+
302
+ /***/ },
303
+
304
+ /***/ 844
305
+ /*!******************************************!*\
306
+ !*** ./web/components/DeleteConfirm.tsx ***!
307
+ \******************************************/
308
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
309
+
310
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DeletedConfirm)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ 878);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ 27);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! antd */ 537);\n/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(antd__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _ant_design_icons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ant-design/icons */ 370);\n\n\n\n\nfunction DeletedConfirm(props) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Popconfirm, {\n title: \"Delete?\",\n okText: \"Delete\",\n okButtonProps: {\n danger: true\n },\n onConfirm: props.onConfirm,\n placement: props.placement,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Button, {\n danger: true,\n icon: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_ant_design_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {}, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\DeleteConfirm.tsx\",\n lineNumber: 14,\n columnNumber: 30\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\DeleteConfirm.tsx\",\n lineNumber: 14,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\DeleteConfirm.tsx\",\n lineNumber: 7,\n columnNumber: 12\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQ0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQTBCO0FBQ2dCO0FBQ1M7QUFHcEMsU0FBU0ksZUFBZUMsS0FBOEQ7SUFDakcscUJBQU8sOERBQUNILDRDQUFVQTtRQUNkSSxPQUFNO1FBQ05DLFFBQU87UUFDYkMsZUFBZTtZQUFFQyxRQUFRO1FBQUs7UUFDeEJDLFdBQVdMLE1BQU1LLFNBQVM7UUFDMUJDLFdBQVdOLE1BQU1NLFNBQVM7a0JBRTFCLDRFQUFDVix3Q0FBTUE7WUFBQ1EsTUFBTTtZQUFDRyxvQkFBTSw4REFBQ1QseURBQWNBOzs7Ozs7Ozs7Ozs7Ozs7QUFFNUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZXhwY2x1c3Rlci9wZXJtaXNzaW9uLWdyb3Vwcy8uL3dlYi9jb21wb25lbnRzL0RlbGV0ZUNvbmZpcm0udHN4P2ZiNDkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBCdXR0b24sIFBvcGNvbmZpcm0gfSBmcm9tIFwiYW50ZFwiO1xyXG5pbXBvcnQgeyBEZWxldGVPdXRsaW5lZCB9IGZyb20gXCJAYW50LWRlc2lnbi9pY29uc1wiO1xyXG5pbXBvcnQgeyBUb29sdGlwUGxhY2VtZW50IH0gZnJvbSBcImFudGQvZXMvdG9vbHRpcFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGVsZXRlZENvbmZpcm0ocHJvcHM6IHsgb25Db25maXJtOiAoKSA9PiB2b2lkLCBwbGFjZW1lbnQ/OiBUb29sdGlwUGxhY2VtZW50IH0pIHtcclxuICAgIHJldHVybiA8UG9wY29uZmlybVxyXG4gICAgICAgIHRpdGxlPVwiRGVsZXRlP1wiXHJcbiAgICAgICAgb2tUZXh0PVwiRGVsZXRlXCJcclxuXHRcdG9rQnV0dG9uUHJvcHM9e3sgZGFuZ2VyOiB0cnVlIH19XHJcbiAgICAgICAgb25Db25maXJtPXtwcm9wcy5vbkNvbmZpcm19XHJcbiAgICAgICAgcGxhY2VtZW50PXtwcm9wcy5wbGFjZW1lbnR9XHJcbiAgICA+XHJcbiAgICAgICAgPEJ1dHRvbiBkYW5nZXIgaWNvbj17PERlbGV0ZU91dGxpbmVkIC8+fSAvPlxyXG4gICAgPC9Qb3Bjb25maXJtPlxyXG59XHJcbiJdLCJuYW1lcyI6WyJSZWFjdCIsIkJ1dHRvbiIsIlBvcGNvbmZpcm0iLCJEZWxldGVPdXRsaW5lZCIsIkRlbGV0ZWRDb25maXJtIiwicHJvcHMiLCJ0aXRsZSIsIm9rVGV4dCIsIm9rQnV0dG9uUHJvcHMiLCJkYW5nZXIiLCJvbkNvbmZpcm0iLCJwbGFjZW1lbnQiLCJpY29uIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///844\n\n}");
311
+
312
+ /***/ },
313
+
314
+ /***/ 587
315
+ /*!**************************************!*\
316
+ !*** ./web/components/GroupForm.tsx ***!
317
+ \**************************************/
318
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
319
+
320
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ GroupForm)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ 878);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ 27);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! antd */ 537);\n/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(antd__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-router-dom */ 226);\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_router_dom__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @clusterio/web_ui */ 388);\n/* harmony import */ var _clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../messages */ 40);\n\n\n\n\n\n\nfunction GroupForm({ open, setOpen }) {\n const control = (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4__.ControlContext);\n const navigate = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_3__.useNavigate)();\n const [form] = antd__WEBPACK_IMPORTED_MODULE_2__.Form.useForm();\n async function submit(values) {\n const group = await control.send(new _messages__WEBPACK_IMPORTED_MODULE_5__.GroupCreateRequest(values.name, new _messages__WEBPACK_IMPORTED_MODULE_5__.GroupPermissions(Boolean(values.isBlacklist), [])));\n navigate(`/permission_groups/${group.id}/view`);\n setOpen(false);\n }\n ;(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (open) form.resetFields();\n }, [\n open\n ]);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Modal, {\n title: \"Create Group\",\n open: open,\n onCancel: ()=>setOpen(false),\n onOk: ()=>form.submit(),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Form, {\n form: form,\n onFinish: submit,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Form.Item, {\n name: \"name\",\n label: \"Name\",\n rules: [\n {\n required: true\n }\n ],\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Input, {}, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupForm.tsx\",\n lineNumber: 37,\n columnNumber: 5\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupForm.tsx\",\n lineNumber: 36,\n columnNumber: 4\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Form.Item, {\n name: \"isBlacklist\",\n label: \"Grant all by default\",\n valuePropName: \"checked\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Switch, {}, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupForm.tsx\",\n lineNumber: 41,\n columnNumber: 5\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupForm.tsx\",\n lineNumber: 40,\n columnNumber: 4\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupForm.tsx\",\n lineNumber: 35,\n columnNumber: 3\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupForm.tsx\",\n lineNumber: 29,\n columnNumber: 9\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTg3LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFxRDtBQUNIO0FBQ0g7QUFFSTtBQUNSO0FBRTVCLFNBQVNVLFVBQVUsRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBR2hEO0lBQ0EsTUFBTUMsVUFBVVosaURBQVVBLENBQUNPLDZEQUFjQTtJQUN6QyxNQUFNTSxXQUFXUCw2REFBV0E7SUFFNUIsTUFBTSxDQUFDUSxLQUFLLEdBQUdYLHNDQUFJQSxDQUFDWSxPQUFPO0lBRTNCLGVBQWVDLE9BQU9DLE1BQVc7UUFDaEMsTUFBTUMsUUFBUSxNQUFNTixRQUFRTyxJQUFJLENBQUMsSUFBSVgseURBQTJCLENBQy9EUyxPQUFPSSxJQUFJLEVBQUUsSUFBSWIsdURBQXlCLENBQUNlLFFBQVFOLE9BQU9PLFdBQVcsR0FBRyxFQUFFO1FBRTNFWCxTQUFTLENBQUMsbUJBQW1CLEVBQUVLLE1BQU1PLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDOUNkLFFBQVE7SUFDVDtJQUVBVixpREFBU0EsQ0FBQztRQUNULElBQUlTLE1BQU1JLEtBQUtZLFdBQVc7SUFDM0IsR0FBRztRQUFDaEI7S0FBSztJQUVULHFCQUFPLDhEQUFDUix1Q0FBS0E7UUFDWnlCLE9BQU07UUFDTmpCLE1BQU1BO1FBQ05rQixVQUFVLElBQU1qQixRQUFRO1FBQ3hCa0IsTUFBTSxJQUFNZixLQUFLRSxNQUFNO2tCQUV2Qiw0RUFBQ2Isc0NBQUlBO1lBQUNXLE1BQU1BO1lBQU1nQixVQUFVZDs7OEJBQzNCLDhEQUFDYixzQ0FBSUEsQ0FBQzRCLElBQUk7b0JBQUNWLE1BQUs7b0JBQU9XLE9BQU07b0JBQU9DLE9BQU87d0JBQUM7NEJBQUVDLFVBQVU7d0JBQUs7cUJBQUU7OEJBQzlELDRFQUFDOUIsdUNBQUtBOzs7Ozs7Ozs7OzhCQUdQLDhEQUFDRCxzQ0FBSUEsQ0FBQzRCLElBQUk7b0JBQUNWLE1BQUs7b0JBQWNXLE9BQU07b0JBQXVCRyxlQUFjOzhCQUN4RSw0RUFBQzlCLHdDQUFNQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSVgiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZXhwY2x1c3Rlci9wZXJtaXNzaW9uLWdyb3Vwcy8uL3dlYi9jb21wb25lbnRzL0dyb3VwRm9ybS50c3g/NDg2MSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IE1vZGFsLCBGb3JtLCBJbnB1dCwgU3dpdGNoIH0gZnJvbSBcImFudGRcIjtcclxuaW1wb3J0IHsgdXNlTmF2aWdhdGUgfSBmcm9tIFwicmVhY3Qtcm91dGVyLWRvbVwiO1xyXG5cclxuaW1wb3J0IHsgQ29udHJvbENvbnRleHQgfSBmcm9tIFwiQGNsdXN0ZXJpby93ZWJfdWlcIjtcclxuaW1wb3J0ICogYXMgbWVzc2FnZXMgZnJvbSBcIi4uLy4uL21lc3NhZ2VzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBHcm91cEZvcm0oeyBvcGVuLCBzZXRPcGVuIH06IHtcclxuXHRvcGVuOiBib29sZWFuLFxyXG5cdHNldE9wZW46IChvcGVuOiBib29sZWFuKSA9PiB2b2lkLFxyXG59KSB7XHJcblx0Y29uc3QgY29udHJvbCA9IHVzZUNvbnRleHQoQ29udHJvbENvbnRleHQpO1xyXG5cdGNvbnN0IG5hdmlnYXRlID0gdXNlTmF2aWdhdGUoKTtcclxuXHJcblx0Y29uc3QgW2Zvcm1dID0gRm9ybS51c2VGb3JtKCk7XHJcblxyXG5cdGFzeW5jIGZ1bmN0aW9uIHN1Ym1pdCh2YWx1ZXM6IGFueSkge1xyXG5cdFx0Y29uc3QgZ3JvdXAgPSBhd2FpdCBjb250cm9sLnNlbmQobmV3IG1lc3NhZ2VzLkdyb3VwQ3JlYXRlUmVxdWVzdChcclxuXHRcdFx0dmFsdWVzLm5hbWUsIG5ldyBtZXNzYWdlcy5Hcm91cFBlcm1pc3Npb25zKEJvb2xlYW4odmFsdWVzLmlzQmxhY2tsaXN0KSwgW10pXHJcblx0XHQpKTtcclxuXHRcdG5hdmlnYXRlKGAvcGVybWlzc2lvbl9ncm91cHMvJHtncm91cC5pZH0vdmlld2ApO1xyXG5cdFx0c2V0T3BlbihmYWxzZSk7XHJcblx0fVxyXG5cclxuXHR1c2VFZmZlY3QoKCkgPT4ge1xyXG5cdFx0aWYgKG9wZW4pIGZvcm0ucmVzZXRGaWVsZHMoKTtcclxuXHR9LCBbb3Blbl0pO1xyXG5cclxuXHRyZXR1cm4gPE1vZGFsXHJcblx0XHR0aXRsZT1cIkNyZWF0ZSBHcm91cFwiXHJcblx0XHRvcGVuPXtvcGVufVxyXG5cdFx0b25DYW5jZWw9eygpID0+IHNldE9wZW4oZmFsc2UpfVxyXG5cdFx0b25Paz17KCkgPT4gZm9ybS5zdWJtaXQoKX1cclxuXHQ+XHJcblx0XHQ8Rm9ybSBmb3JtPXtmb3JtfSBvbkZpbmlzaD17c3VibWl0fT5cclxuXHRcdFx0PEZvcm0uSXRlbSBuYW1lPVwibmFtZVwiIGxhYmVsPVwiTmFtZVwiIHJ1bGVzPXtbeyByZXF1aXJlZDogdHJ1ZSB9XX0+XHJcblx0XHRcdFx0PElucHV0IC8+XHJcblx0XHRcdDwvRm9ybS5JdGVtPlxyXG5cclxuXHRcdFx0PEZvcm0uSXRlbSBuYW1lPVwiaXNCbGFja2xpc3RcIiBsYWJlbD1cIkdyYW50IGFsbCBieSBkZWZhdWx0XCIgdmFsdWVQcm9wTmFtZT1cImNoZWNrZWRcIj5cclxuXHRcdFx0XHQ8U3dpdGNoIC8+XHJcblx0XHRcdDwvRm9ybS5JdGVtPlxyXG5cdFx0PC9Gb3JtPlxyXG5cdDwvTW9kYWw+O1xyXG59XHJcbiJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNvbnRleHQiLCJ1c2VFZmZlY3QiLCJNb2RhbCIsIkZvcm0iLCJJbnB1dCIsIlN3aXRjaCIsInVzZU5hdmlnYXRlIiwiQ29udHJvbENvbnRleHQiLCJtZXNzYWdlcyIsIkdyb3VwRm9ybSIsIm9wZW4iLCJzZXRPcGVuIiwiY29udHJvbCIsIm5hdmlnYXRlIiwiZm9ybSIsInVzZUZvcm0iLCJzdWJtaXQiLCJ2YWx1ZXMiLCJncm91cCIsInNlbmQiLCJHcm91cENyZWF0ZVJlcXVlc3QiLCJuYW1lIiwiR3JvdXBQZXJtaXNzaW9ucyIsIkJvb2xlYW4iLCJpc0JsYWNrbGlzdCIsImlkIiwicmVzZXRGaWVsZHMiLCJ0aXRsZSIsIm9uQ2FuY2VsIiwib25PayIsIm9uRmluaXNoIiwiSXRlbSIsImxhYmVsIiwicnVsZXMiLCJyZXF1aXJlZCIsInZhbHVlUHJvcE5hbWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///587\n\n}");
321
+
322
+ /***/ },
323
+
324
+ /***/ 639
325
+ /*!******************************************!*\
326
+ !*** ./web/components/GroupViewPage.tsx ***!
327
+ \******************************************/
328
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
329
+
330
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ GroupViewPage)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ 878);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ 27);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router-dom */ 226);\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_router_dom__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! antd */ 537);\n/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(antd__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @clusterio/web_ui */ 388);\n/* harmony import */ var _clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _DeleteConfirm__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./DeleteConfirm */ 844);\n/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../messages */ 40);\n\n\n\n\n\n\n\nconst DOMAIN_MAPPING = {\n \"Admin\": [\n \"admin\",\n \"cheat\",\n \"permission\",\n \"infinity\",\n \"editor\",\n \"spawn\"\n ],\n \"Building & Crafting\": [\n \"mining\",\n \"build\",\n \"craft\",\n \"deconstruct\",\n \"rotate\",\n \"entity\"\n ],\n \"Inventory\": [\n \"inventory\",\n \"stack\",\n \"cursor\",\n \"slot\",\n \"quick_bar\",\n \"item\",\n \"equipment\"\n ],\n \"Blueprints\": [\n \"blueprint\",\n \"copy\",\n \"paste\",\n \"undo\",\n \"redo\",\n \"upgrade\"\n ],\n \"Trains\": [\n \"train\",\n \"station\",\n \"schedule\",\n \"interrupt\",\n \"rolling_stock\"\n ],\n \"Circuit Network\": [\n \"combinator\",\n \"circuit\",\n \"signal\",\n \"wire\",\n \"cable\",\n \"speaker\",\n \"display_panel\"\n ],\n \"GUI\": [\n \"gui\",\n \"open\"\n ],\n \"Pins & Alerts\": [\n \"pin\",\n \"alert\",\n \"tag\"\n ],\n \"Logistics\": [\n \"logistic\",\n \"filter\",\n \"request\"\n ],\n \"Space\": [\n \"space\",\n \"surface\",\n \"planet\",\n \"rocket\"\n ],\n \"Toggles\": [\n \"toggle\",\n \"switch\",\n \"swap\",\n \"set\"\n ]\n};\nfunction getDomain(name) {\n const n = name.toLowerCase();\n for (const [domain, keywords] of Object.entries(DOMAIN_MAPPING)){\n if (keywords.some((k)=>n.includes(k))) return domain;\n }\n return \"Other\";\n}\nfunction GroupViewPage() {\n const control = (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4__.ControlContext);\n const plugin = control.plugins.get(\"exp_groups\");\n const navigate = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_2__.useNavigate)();\n const account = (0,_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4__.useAccount)();\n const { id } = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_2__.useParams)();\n const groupId = Number(id);\n const [groups, synced] = plugin.useGroups();\n const group = groups.get(groupId);\n const [name, setName] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const defaultModPack = (0,_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4__.useDefaultModPack)();\n const [definesJson, setDefinesJson] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [permissionState, setPermissionState] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({});\n const [baselineState, setBaselineState] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({});\n const [search, setSearch] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const canUpdate = Boolean(account.hasPermission(\"exp_groups.group.update\"));\n const canDelete = Boolean(account.hasPermission(\"exp_groups.group.delete\"));\n // fetch defines\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!defaultModPack?.exportManifest?.assets?.defines) return;\n if (definesJson) return;\n const assetName = defaultModPack.exportManifest.assets.defines;\n (async ()=>{\n const response = await fetch(`${staticRoot}${assetName}`);\n const json = await response.json();\n setDefinesJson(json.input_action ?? {});\n })().catch((0,_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4__.notifyErrorHandler)(\"Failed to load permissions\"));\n }, [\n defaultModPack\n ]);\n // initialise permissions\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!group || !definesJson) return;\n if (Object.keys(permissionState).length) return;\n const { isBlacklist, permissions } = group.permissions;\n const base = Object.fromEntries(Object.keys(definesJson).map((p)=>[\n p,\n isBlacklist !== permissions.includes(p)\n ]));\n setPermissionState(base);\n setBaselineState(base);\n }, [\n group,\n definesJson\n ]);\n // sync name\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (group) setName(group.name);\n }, [\n group\n ]);\n // derived data\n const allPermissions = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>Object.keys(definesJson ?? {}), [\n definesJson\n ]);\n const filtered = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>allPermissions.filter((p)=>p.toLowerCase().includes(search.toLowerCase())), [\n allPermissions,\n search\n ]);\n const grouped = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const map = new Map();\n for (const p of filtered){\n const domain = getDomain(p);\n if (!map.has(domain)) map.set(domain, []);\n map.get(domain).push(p);\n }\n const sorted = [\n ...map.entries()\n ].sort(([a], [b])=>a.localeCompare(b));\n for (const [, perms] of sorted){\n perms.sort((a, b)=>a.localeCompare(b));\n }\n return sorted;\n }, [\n filtered\n ]);\n const permissionChanged = Object.keys(permissionState).some((k)=>permissionState[k] !== baselineState[k]);\n const metaChanged = group ? name !== group.name : false;\n const edited = permissionChanged || metaChanged;\n function applyChanges() {\n if (!group) return;\n const whitelist = [];\n const blacklist = [];\n for (const [perm, enabled] of Object.entries(permissionState)){\n if (enabled) whitelist.push(perm);\n else blacklist.push(perm);\n }\n const isBlacklist = blacklist.length < whitelist.length;\n const permissions = isBlacklist ? blacklist : whitelist;\n control.send(new _messages__WEBPACK_IMPORTED_MODULE_6__.GroupUpdateRequest(new _messages__WEBPACK_IMPORTED_MODULE_6__.GroupRecord(group.id, name, new _messages__WEBPACK_IMPORTED_MODULE_6__.GroupPermissions(isBlacklist, permissions)))).then(()=>setBaselineState(permissionState)).catch((0,_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4__.notifyErrorHandler)(\"Error applying changes\"));\n }\n function revertChanges() {\n if (!group) return;\n setPermissionState(baselineState);\n setName(group.name);\n }\n if (!synced) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4__.PageLayout, {\n nav: [\n {\n name: \"exp_groups\"\n },\n {\n name: String(groupId)\n }\n ],\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_3__.Spin, {}, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 157,\n columnNumber: 4\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 156,\n columnNumber: 10\n }, this);\n }\n if (!group) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4__.PageLayout, {\n nav: [\n {\n name: \"exp_groups\"\n },\n {\n name: String(groupId)\n }\n ],\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4__.PageHeader, {\n title: \"Group not found\"\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 163,\n columnNumber: 4\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 162,\n columnNumber: 10\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4__.PageLayout, {\n nav: [\n {\n name: \"Permission Groups\",\n path: \"/permission_groups\"\n },\n {\n name: group.name\n }\n ],\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4__.PageHeader, {\n title: group.name,\n extra: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_3__.Space, {\n wrap: true,\n children: canDelete && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_DeleteConfirm__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n placement: \"bottomRight\",\n onConfirm: async ()=>{\n control.send(new _messages__WEBPACK_IMPORTED_MODULE_6__.GroupDeleteRequest(group.id));\n navigate(`/permission_groups`);\n }\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 171,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 170,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 168,\n columnNumber: 3\n }, this),\n edited && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n style: {\n position: \"fixed\",\n bottom: 24,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n background: \"#2a1912\",\n borderRadius: 8,\n padding: \"10px 14px\",\n display: \"flex\",\n gap: 12,\n zIndex: 1000\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"You have unsaved changes\"\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 191,\n columnNumber: 5\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_3__.Space, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_3__.Button, {\n onClick: revertChanges,\n children: \"Revert\"\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 193,\n columnNumber: 6\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_3__.Button, {\n type: \"primary\",\n onClick: applyChanges,\n children: \"Apply\"\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 194,\n columnNumber: 6\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 192,\n columnNumber: 5\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 179,\n columnNumber: 4\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n style: {\n marginBottom: 16,\n display: \"flex\",\n gap: 12\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n style: {\n width: 110\n },\n children: \"Name\"\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 200,\n columnNumber: 4\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_3__.Input, {\n value: name,\n disabled: !canUpdate,\n onChange: (e)=>setName(e.target.value)\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 201,\n columnNumber: 4\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 199,\n columnNumber: 3\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n children: \"Permissions\"\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 204,\n columnNumber: 3\n }, this),\n !defaultModPack?.exportManifest?.assets?.defines && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_3__.Alert, {\n type: \"warning\",\n message: \"Missing export\",\n description: \"An export of the default mod pack is required to modify permissions.\",\n style: {\n marginBottom: 16\n },\n showIcon: true\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 207,\n columnNumber: 4\n }, this),\n defaultModPack?.exportManifest?.assets?.defines && !definesJson && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_3__.Spin, {}, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 216,\n columnNumber: 71\n }, this),\n definesJson && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_3__.Input.Search, {\n placeholder: \"Search permissions\",\n allowClear: true,\n onChange: (e)=>setSearch(e.target.value),\n style: {\n marginBottom: 16\n }\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 219,\n columnNumber: 4\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_3__.Space, {\n direction: \"vertical\",\n style: {\n width: \"100%\"\n },\n children: grouped.map(([groupName, permissions])=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n style: {\n border: \"1px solid #424242\",\n padding: 12,\n borderRadius: 6\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_3__.Space, {\n style: {\n width: \"100%\",\n justifyContent: \"space-between\"\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"strong\", {\n children: groupName\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 231,\n columnNumber: 8\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_3__.Space, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_3__.Button, {\n size: \"small\",\n disabled: !canUpdate,\n onClick: ()=>{\n setPermissionState((prev)=>{\n const next = {\n ...prev\n };\n for (const p of permissions)next[p] = true;\n return next;\n });\n },\n children: \"Select all\"\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 233,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_3__.Button, {\n size: \"small\",\n disabled: !canUpdate,\n onClick: ()=>{\n setPermissionState((prev)=>{\n const next = {\n ...prev\n };\n for (const p of permissions)next[p] = false;\n return next;\n });\n },\n children: \"Clear\"\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 247,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 232,\n columnNumber: 8\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 230,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n style: {\n marginTop: 12,\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(250px, 1fr))\",\n gap: 8\n },\n children: permissions.map((p)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_3__.Checkbox, {\n checked: permissionState[p],\n disabled: !canUpdate,\n onChange: (e)=>setPermissionState((prev)=>({\n ...prev,\n [p]: e.target.checked\n })),\n children: p\n }, p, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 270,\n columnNumber: 9\n }, this))\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 263,\n columnNumber: 7\n }, this)\n ]\n }, groupName, true, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 228,\n columnNumber: 6\n }, this))\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 226,\n columnNumber: 4\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupViewPage.tsx\",\n lineNumber: 167,\n columnNumber: 9\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O2dEQUMzQnlELFVBQVUsQ0FBQzlFO2dEQUNYK0UsVUFBVUMsQ0FBQUEsSUFDVHJGLG1CQUFtQm9HLENBQUFBLE9BQVM7NERBQUUsR0FBR0EsSUFBSTs0REFBRSxDQUFDMUUsRUFBRSxFQUFFMkQsRUFBRUMsTUFBTSxDQUFDa0IsT0FBTzt3REFBQzswREFHN0Q5RTsrQ0FQSUE7Ozs7Ozs7Ozs7OytCQTNDQ3FFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEyRGYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZXhwY2x1c3Rlci9wZXJtaXNzaW9uLWdyb3Vwcy8uL3dlYi9jb21wb25lbnRzL0dyb3VwVmlld1BhZ2UudHN4Pzk5YzUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgdXNlTmF2aWdhdGUsIHVzZVBhcmFtcyB9IGZyb20gXCJyZWFjdC1yb3V0ZXItZG9tXCI7XHJcbmltcG9ydCB7IEJ1dHRvbiwgQ2hlY2tib3gsIElucHV0LCBTcGFjZSwgU3BpbiwgQWxlcnQgfSBmcm9tIFwiYW50ZFwiO1xyXG5cclxuaW1wb3J0IHsgQ29udHJvbENvbnRleHQsIHVzZUFjY291bnQsIHVzZURlZmF1bHRNb2RQYWNrLCBQYWdlTGF5b3V0LCBQYWdlSGVhZGVyLCBub3RpZnlFcnJvckhhbmRsZXIgfSBmcm9tIFwiQGNsdXN0ZXJpby93ZWJfdWlcIjtcclxuaW1wb3J0IERlbGV0ZWRDb25maXJtIGZyb20gXCIuL0RlbGV0ZUNvbmZpcm1cIjtcclxuXHJcbmltcG9ydCAqIGFzIG1lc3NhZ2VzIGZyb20gXCIuLi8uLi9tZXNzYWdlc1wiO1xyXG5pbXBvcnQgdHlwZSB7IFdlYlBsdWdpbiB9IGZyb20gXCIuLlwiO1xyXG5cclxuY29uc3QgRE9NQUlOX01BUFBJTkcgPSB7XHJcblx0XCJBZG1pblwiOiBbXCJhZG1pblwiLCBcImNoZWF0XCIsIFwicGVybWlzc2lvblwiLCBcImluZmluaXR5XCIsIFwiZWRpdG9yXCIsIFwic3Bhd25cIl0sXHJcblx0XCJCdWlsZGluZyAmIENyYWZ0aW5nXCI6IFtcIm1pbmluZ1wiLCBcImJ1aWxkXCIsIFwiY3JhZnRcIiwgXCJkZWNvbnN0cnVjdFwiLCBcInJvdGF0ZVwiLCBcImVudGl0eVwiXSxcclxuXHRcIkludmVudG9yeVwiOiBbXCJpbnZlbnRvcnlcIiwgXCJzdGFja1wiLCBcImN1cnNvclwiLCBcInNsb3RcIiwgXCJxdWlja19iYXJcIiwgXCJpdGVtXCIsIFwiZXF1aXBtZW50XCJdLFxyXG5cdFwiQmx1ZXByaW50c1wiOiBbXCJibHVlcHJpbnRcIiwgXCJjb3B5XCIsIFwicGFzdGVcIiwgXCJ1bmRvXCIsIFwicmVkb1wiLCBcInVwZ3JhZGVcIl0sXHJcblx0XCJUcmFpbnNcIjogW1widHJhaW5cIiwgXCJzdGF0aW9uXCIsIFwic2NoZWR1bGVcIiwgXCJpbnRlcnJ1cHRcIiwgXCJyb2xsaW5nX3N0b2NrXCJdLFxyXG5cdFwiQ2lyY3VpdCBOZXR3b3JrXCI6IFtcImNvbWJpbmF0b3JcIiwgXCJjaXJjdWl0XCIsIFwic2lnbmFsXCIsIFwid2lyZVwiLCBcImNhYmxlXCIsIFwic3BlYWtlclwiLCBcImRpc3BsYXlfcGFuZWxcIl0sXHJcblx0XCJHVUlcIjogW1wiZ3VpXCIsIFwib3BlblwiXSxcclxuXHRcIlBpbnMgJiBBbGVydHNcIjogW1wicGluXCIsIFwiYWxlcnRcIiwgXCJ0YWdcIl0sXHJcblx0XCJMb2dpc3RpY3NcIjogW1wibG9naXN0aWNcIiwgXCJmaWx0ZXJcIiwgXCJyZXF1ZXN0XCJdLFxyXG5cdFwiU3BhY2VcIjogW1wic3BhY2VcIiwgXCJzdXJmYWNlXCIsIFwicGxhbmV0XCIsIFwicm9ja2V0XCJdLFxyXG5cdFwiVG9nZ2xlc1wiOiBbXCJ0b2dnbGVcIiwgXCJzd2l0Y2hcIiwgXCJzd2FwXCIsIFwic2V0XCJdLFxyXG59O1xyXG5cclxuZnVuY3Rpb24gZ2V0RG9tYWluKG5hbWU6IHN0cmluZykge1xyXG5cdGNvbnN0IG4gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XHJcblxyXG5cdGZvciAoY29uc3QgW2RvbWFpbiwga2V5d29yZHNdIG9mIE9iamVjdC5lbnRyaWVzKERPTUFJTl9NQVBQSU5HKSkge1xyXG5cdFx0aWYgKGtleXdvcmRzLnNvbWUoayA9PiBuLmluY2x1ZGVzKGspKSkgcmV0dXJuIGRvbWFpbjtcclxuXHR9XHJcblxyXG5cdHJldHVybiBcIk90aGVyXCI7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEdyb3VwVmlld1BhZ2UoKSB7XHJcblx0Y29uc3QgY29udHJvbCA9IHVzZUNvbnRleHQoQ29udHJvbENvbnRleHQpO1xyXG5cdGNvbnN0IHBsdWdpbiA9IGNvbnRyb2wucGx1Z2lucy5nZXQoXCJleHBfZ3JvdXBzXCIpIGFzIFdlYlBsdWdpbjtcclxuXHRjb25zdCBuYXZpZ2F0ZSA9IHVzZU5hdmlnYXRlKCk7XHJcblx0Y29uc3QgYWNjb3VudCA9IHVzZUFjY291bnQoKTtcclxuXHJcblx0Y29uc3QgeyBpZCB9ID0gdXNlUGFyYW1zKCk7XHJcblx0Y29uc3QgZ3JvdXBJZCA9IE51bWJlcihpZCk7XHJcblxyXG5cdGNvbnN0IFtncm91cHMsIHN5bmNlZF0gPSBwbHVnaW4udXNlR3JvdXBzKCk7XHJcblx0Y29uc3QgZ3JvdXAgPSBncm91cHMuZ2V0KGdyb3VwSWQpO1xyXG5cclxuXHRjb25zdCBbbmFtZSwgc2V0TmFtZV0gPSB1c2VTdGF0ZShcIlwiKTtcclxuXHJcblx0Y29uc3QgZGVmYXVsdE1vZFBhY2sgPSB1c2VEZWZhdWx0TW9kUGFjaygpO1xyXG5cdGNvbnN0IFtkZWZpbmVzSnNvbiwgc2V0RGVmaW5lc0pzb25dID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgbnVtYmVyPiB8IG51bGw+KG51bGwpO1xyXG5cclxuXHRjb25zdCBbcGVybWlzc2lvblN0YXRlLCBzZXRQZXJtaXNzaW9uU3RhdGVdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KHt9KTtcclxuXHRjb25zdCBbYmFzZWxpbmVTdGF0ZSwgc2V0QmFzZWxpbmVTdGF0ZV0gPSB1c2VTdGF0ZTxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4oe30pO1xyXG5cdGNvbnN0IFtzZWFyY2gsIHNldFNlYXJjaF0gPSB1c2VTdGF0ZShcIlwiKTtcclxuXHJcblx0Y29uc3QgY2FuVXBkYXRlID0gQm9vbGVhbihhY2NvdW50Lmhhc1Blcm1pc3Npb24oXCJleHBfZ3JvdXBzLmdyb3VwLnVwZGF0ZVwiKSk7XHJcblx0Y29uc3QgY2FuRGVsZXRlID0gQm9vbGVhbihhY2NvdW50Lmhhc1Blcm1pc3Npb24oXCJleHBfZ3JvdXBzLmdyb3VwLmRlbGV0ZVwiKSk7XHJcblxyXG5cdC8vIGZldGNoIGRlZmluZXNcclxuXHR1c2VFZmZlY3QoKCkgPT4ge1xyXG5cdFx0aWYgKCFkZWZhdWx0TW9kUGFjaz8uZXhwb3J0TWFuaWZlc3Q/LmFzc2V0cz8uZGVmaW5lcykgcmV0dXJuO1xyXG5cdFx0aWYgKGRlZmluZXNKc29uKSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3QgYXNzZXROYW1lID0gZGVmYXVsdE1vZFBhY2suZXhwb3J0TWFuaWZlc3QuYXNzZXRzLmRlZmluZXM7XHJcblx0XHRcclxuXHRcdChhc3luYyAoKSA9PiB7XHJcblx0XHRcdGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7c3RhdGljUm9vdH0ke2Fzc2V0TmFtZX1gKTtcclxuXHRcdFx0Y29uc3QganNvbiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuXHRcdFx0c2V0RGVmaW5lc0pzb24oanNvbi5pbnB1dF9hY3Rpb24gPz8ge30pO1xyXG5cdFx0fSkoKS5jYXRjaChub3RpZnlFcnJvckhhbmRsZXIoXCJGYWlsZWQgdG8gbG9hZCBwZXJtaXNzaW9uc1wiKSk7XHJcblx0fSwgW2RlZmF1bHRNb2RQYWNrXSk7XHJcblxyXG5cdC8vIGluaXRpYWxpc2UgcGVybWlzc2lvbnNcclxuXHR1c2VFZmZlY3QoKCkgPT4ge1xyXG5cdFx0aWYgKCFncm91cCB8fCAhZGVmaW5lc0pzb24pIHJldHVybjtcclxuXHRcdGlmIChPYmplY3Qua2V5cyhwZXJtaXNzaW9uU3RhdGUpLmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuXHRcdGNvbnN0IHsgaXNCbGFja2xpc3QsIHBlcm1pc3Npb25zIH0gPSBncm91cC5wZXJtaXNzaW9ucztcclxuXHJcblx0XHRjb25zdCBiYXNlID0gT2JqZWN0LmZyb21FbnRyaWVzKFxyXG5cdFx0XHRPYmplY3Qua2V5cyhkZWZpbmVzSnNvbikubWFwKHAgPT4gW1xyXG5cdFx0XHRcdHAsIGlzQmxhY2tsaXN0ICE9PSBwZXJtaXNzaW9ucy5pbmNsdWRlcyhwKVxyXG5cdFx0XHRdKVxyXG5cdFx0KTtcclxuXHJcblx0XHRzZXRQZXJtaXNzaW9uU3RhdGUoYmFzZSk7XHJcblx0XHRzZXRCYXNlbGluZVN0YXRlKGJhc2UpO1xyXG5cdH0sIFtncm91cCwgZGVmaW5lc0pzb25dKTtcclxuXHJcblx0Ly8gc3luYyBuYW1lXHJcblx0dXNlRWZmZWN0KCgpID0+IHtcclxuXHRcdGlmIChncm91cCkgc2V0TmFtZShncm91cC5uYW1lKTtcclxuXHR9LCBbZ3JvdXBdKTtcclxuXHJcblx0Ly8gZGVyaXZlZCBkYXRhXHJcblx0Y29uc3QgYWxsUGVybWlzc2lvbnMgPSB1c2VNZW1vKCgpID0+IChcclxuXHRcdE9iamVjdC5rZXlzKGRlZmluZXNKc29uID8/IHt9KVxyXG5cdCksIFtkZWZpbmVzSnNvbl0pO1xyXG5cclxuXHRjb25zdCBmaWx0ZXJlZCA9IHVzZU1lbW8oKCkgPT4gYWxsUGVybWlzc2lvbnMuZmlsdGVyKHAgPT5cclxuXHRcdHAudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb3dlckNhc2UoKSlcclxuXHQpLCBbYWxsUGVybWlzc2lvbnMsIHNlYXJjaF0pO1xyXG5cclxuXHRjb25zdCBncm91cGVkID0gdXNlTWVtbygoKSA9PiB7XHJcblx0XHRjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwIG9mIGZpbHRlcmVkKSB7XHJcblx0XHRcdGNvbnN0IGRvbWFpbiA9IGdldERvbWFpbihwKTtcclxuXHRcdFx0aWYgKCFtYXAuaGFzKGRvbWFpbikpIG1hcC5zZXQoZG9tYWluLCBbXSk7XHJcblx0XHRcdG1hcC5nZXQoZG9tYWluKSEucHVzaChwKTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBzb3J0ZWQgPSBbLi4ubWFwLmVudHJpZXMoKV0uc29ydCgoW2FdLCBbYl0pID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBbLCBwZXJtc10gb2Ygc29ydGVkKSB7XHJcblx0XHRcdHBlcm1zLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHNvcnRlZDtcclxuXHR9LCBbZmlsdGVyZWRdKTtcclxuXHJcblx0Y29uc3QgcGVybWlzc2lvbkNoYW5nZWQgPSBPYmplY3Qua2V5cyhwZXJtaXNzaW9uU3RhdGUpLnNvbWUoXHJcblx0XHRrID0+IHBlcm1pc3Npb25TdGF0ZVtrXSAhPT0gYmFzZWxpbmVTdGF0ZVtrXVxyXG5cdCk7XHJcblx0Y29uc3QgbWV0YUNoYW5nZWQgPSBncm91cCA/IG5hbWUgIT09IGdyb3VwLm5hbWUgOiBmYWxzZTtcclxuXHRjb25zdCBlZGl0ZWQgPSBwZXJtaXNzaW9uQ2hhbmdlZCB8fCBtZXRhQ2hhbmdlZDtcclxuXHJcblx0ZnVuY3Rpb24gYXBwbHlDaGFuZ2VzKCkge1xyXG5cdFx0aWYgKCFncm91cCkgcmV0dXJuO1xyXG5cclxuXHRcdGNvbnN0IHdoaXRlbGlzdDogc3RyaW5nW10gPSBbXTtcclxuXHRcdGNvbnN0IGJsYWNrbGlzdDogc3RyaW5nW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IFtwZXJtLCBlbmFibGVkXSBvZiBPYmplY3QuZW50cmllcyhwZXJtaXNzaW9uU3RhdGUpKSB7XHJcblx0XHRcdGlmIChlbmFibGVkKSB3aGl0ZWxpc3QucHVzaChwZXJtKTtcclxuXHRcdFx0ZWxzZSBibGFja2xpc3QucHVzaChwZXJtKTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBpc0JsYWNrbGlzdCA9IGJsYWNrbGlzdC5sZW5ndGggPCB3aGl0ZWxpc3QubGVuZ3RoO1xyXG5cdFx0Y29uc3QgcGVybWlzc2lvbnMgPSBpc0JsYWNrbGlzdCA/IGJsYWNrbGlzdCA6IHdoaXRlbGlzdDtcclxuXHJcblx0XHRjb250cm9sLnNlbmQobmV3IG1lc3NhZ2VzLkdyb3VwVXBkYXRlUmVxdWVzdChcclxuXHRcdFx0bmV3IG1lc3NhZ2VzLkdyb3VwUmVjb3JkKGdyb3VwLmlkLCBuYW1lLCBuZXcgbWVzc2FnZXMuR3JvdXBQZXJtaXNzaW9ucyhpc0JsYWNrbGlzdCwgcGVybWlzc2lvbnMpKVxyXG5cdFx0KSlcclxuXHRcdC50aGVuKCgpID0+IHNldEJhc2VsaW5lU3RhdGUocGVybWlzc2lvblN0YXRlKSlcclxuXHRcdC5jYXRjaChub3RpZnlFcnJvckhhbmRsZXIoXCJFcnJvciBhcHBseWluZyBjaGFuZ2VzXCIpKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHJldmVydENoYW5nZXMoKSB7XHJcblx0XHRpZiAoIWdyb3VwKSByZXR1cm47XHJcblx0XHRzZXRQZXJtaXNzaW9uU3RhdGUoYmFzZWxpbmVTdGF0ZSk7XHJcblx0XHRzZXROYW1lKGdyb3VwLm5hbWUpO1xyXG5cdH1cclxuXHJcblx0aWYgKCFzeW5jZWQpIHtcclxuXHRcdHJldHVybiA8UGFnZUxheW91dCBuYXY9e1t7IG5hbWU6IFwiZXhwX2dyb3Vwc1wiIH0sIHsgbmFtZTogU3RyaW5nKGdyb3VwSWQpIH1dfT5cclxuXHRcdFx0PFNwaW4gLz5cclxuXHRcdDwvUGFnZUxheW91dD47XHJcblx0fVxyXG5cclxuXHRpZiAoIWdyb3VwKSB7XHJcblx0XHRyZXR1cm4gPFBhZ2VMYXlvdXQgbmF2PXtbeyBuYW1lOiBcImV4cF9ncm91cHNcIiB9LCB7IG5hbWU6IFN0cmluZyhncm91cElkKSB9XX0+XHJcblx0XHRcdDxQYWdlSGVhZGVyIHRpdGxlPVwiR3JvdXAgbm90IGZvdW5kXCIgLz5cclxuXHRcdDwvUGFnZUxheW91dD47XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gPFBhZ2VMYXlvdXQgbmF2PXtbeyBuYW1lOiBcIlBlcm1pc3Npb24gR3JvdXBzXCIsIHBhdGg6IFwiL3Blcm1pc3Npb25fZ3JvdXBzXCIgfSwgeyBuYW1lOiBncm91cC5uYW1lIH1dfT5cclxuXHRcdDxQYWdlSGVhZGVyXHJcblx0XHRcdHRpdGxlPXtncm91cC5uYW1lfVxyXG5cdFx0XHRleHRyYT17PFNwYWNlIHdyYXA+XHJcblx0XHRcdFx0e2NhbkRlbGV0ZSAmJiA8RGVsZXRlZENvbmZpcm0gcGxhY2VtZW50PVwiYm90dG9tUmlnaHRcIiBvbkNvbmZpcm09e2FzeW5jICgpID0+IHtcclxuXHRcdFx0XHRcdGNvbnRyb2wuc2VuZChuZXcgbWVzc2FnZXMuR3JvdXBEZWxldGVSZXF1ZXN0KGdyb3VwLmlkKSk7XHJcblx0XHRcdFx0XHRuYXZpZ2F0ZShgL3Blcm1pc3Npb25fZ3JvdXBzYCk7XHJcblx0XHRcdFx0fX0vPn1cclxuXHRcdFx0PC9TcGFjZT59XHJcblx0XHQvPlxyXG5cclxuXHRcdHtlZGl0ZWQgJiYgKFxyXG5cdFx0XHQ8ZGl2IHN0eWxlPXt7XHJcblx0XHRcdFx0cG9zaXRpb246IFwiZml4ZWRcIixcclxuXHRcdFx0XHRib3R0b206IDI0LFxyXG5cdFx0XHRcdGxlZnQ6IFwiNTAlXCIsXHJcblx0XHRcdFx0dHJhbnNmb3JtOiBcInRyYW5zbGF0ZVgoLTUwJSlcIixcclxuXHRcdFx0XHRiYWNrZ3JvdW5kOiBcIiMyYTE5MTJcIixcclxuXHRcdFx0XHRib3JkZXJSYWRpdXM6IDgsXHJcblx0XHRcdFx0cGFkZGluZzogXCIxMHB4IDE0cHhcIixcclxuXHRcdFx0XHRkaXNwbGF5OiBcImZsZXhcIixcclxuXHRcdFx0XHRnYXA6IDEyLFxyXG5cdFx0XHRcdHpJbmRleDogMTAwMCxcclxuXHRcdFx0fX0+XHJcblx0XHRcdFx0PHNwYW4+WW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzPC9zcGFuPlxyXG5cdFx0XHRcdDxTcGFjZT5cclxuXHRcdFx0XHRcdDxCdXR0b24gb25DbGljaz17cmV2ZXJ0Q2hhbmdlc30+UmV2ZXJ0PC9CdXR0b24+XHJcblx0XHRcdFx0XHQ8QnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgb25DbGljaz17YXBwbHlDaGFuZ2VzfT5BcHBseTwvQnV0dG9uPlxyXG5cdFx0XHRcdDwvU3BhY2U+XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0KX1cclxuXHJcblx0XHQ8ZGl2IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogMTYsIGRpc3BsYXk6IFwiZmxleFwiLCBnYXA6IDEyIH19PlxyXG5cdFx0XHQ8bGFiZWwgc3R5bGU9e3sgd2lkdGg6IDExMCB9fT5OYW1lPC9sYWJlbD5cclxuXHRcdFx0PElucHV0IHZhbHVlPXtuYW1lfSBkaXNhYmxlZD17IWNhblVwZGF0ZX0gb25DaGFuZ2U9e2UgPT4gc2V0TmFtZShlLnRhcmdldC52YWx1ZSl9IC8+XHJcblx0XHQ8L2Rpdj5cclxuXHJcblx0XHQ8aDM+UGVybWlzc2lvbnM8L2gzPlxyXG5cclxuXHRcdHshZGVmYXVsdE1vZFBhY2s/LmV4cG9ydE1hbmlmZXN0Py5hc3NldHM/LmRlZmluZXMgJiYgKFxyXG5cdFx0XHQ8QWxlcnRcclxuXHRcdFx0XHR0eXBlPVwid2FybmluZ1wiXHJcblx0XHRcdFx0bWVzc2FnZT1cIk1pc3NpbmcgZXhwb3J0XCJcclxuXHRcdFx0XHRkZXNjcmlwdGlvbj1cIkFuIGV4cG9ydCBvZiB0aGUgZGVmYXVsdCBtb2QgcGFjayBpcyByZXF1aXJlZCB0byBtb2RpZnkgcGVybWlzc2lvbnMuXCJcclxuXHRcdFx0XHRzdHlsZT17eyBtYXJnaW5Cb3R0b206IDE2IH19XHJcblx0XHRcdFx0c2hvd0ljb25cclxuXHRcdFx0Lz5cclxuXHRcdCl9XHJcblxyXG5cdFx0e2RlZmF1bHRNb2RQYWNrPy5leHBvcnRNYW5pZmVzdD8uYXNzZXRzPy5kZWZpbmVzICYmICFkZWZpbmVzSnNvbiAmJiA8U3BpbiAvPn1cclxuXHJcblx0XHR7ZGVmaW5lc0pzb24gJiYgPD5cclxuXHRcdFx0PElucHV0LlNlYXJjaFxyXG5cdFx0XHRcdHBsYWNlaG9sZGVyPVwiU2VhcmNoIHBlcm1pc3Npb25zXCJcclxuXHRcdFx0XHRhbGxvd0NsZWFyXHJcblx0XHRcdFx0b25DaGFuZ2U9e2UgPT4gc2V0U2VhcmNoKGUudGFyZ2V0LnZhbHVlKX1cclxuXHRcdFx0XHRzdHlsZT17eyBtYXJnaW5Cb3R0b206IDE2IH19XHJcblx0XHRcdC8+XHJcblxyXG5cdFx0XHQ8U3BhY2UgZGlyZWN0aW9uPVwidmVydGljYWxcIiBzdHlsZT17eyB3aWR0aDogXCIxMDAlXCIgfX0+XHJcblx0XHRcdFx0e2dyb3VwZWQubWFwKChbZ3JvdXBOYW1lLCBwZXJtaXNzaW9uc10pID0+IChcclxuXHRcdFx0XHRcdDxkaXYga2V5PXtncm91cE5hbWV9IHN0eWxlPXt7IGJvcmRlcjogXCIxcHggc29saWQgIzQyNDI0MlwiLCBwYWRkaW5nOiAxMiwgYm9yZGVyUmFkaXVzOiA2IH19PlxyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0PFNwYWNlIHN0eWxlPXt7IHdpZHRoOiBcIjEwMCVcIiwganVzdGlmeUNvbnRlbnQ6IFwic3BhY2UtYmV0d2VlblwiIH19PlxyXG5cdFx0XHRcdFx0XHRcdDxzdHJvbmc+e2dyb3VwTmFtZX08L3N0cm9uZz5cclxuXHRcdFx0XHRcdFx0XHQ8U3BhY2U+XHJcblx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uXHJcblx0XHRcdFx0XHRcdFx0XHRcdHNpemU9XCJzbWFsbFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkPXshY2FuVXBkYXRlfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2V0UGVybWlzc2lvblN0YXRlKHByZXYgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgbmV4dCA9IHsgLi4ucHJldiB9O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBwIG9mIHBlcm1pc3Npb25zKSBuZXh0W3BdID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBuZXh0O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9fVxyXG5cdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRTZWxlY3QgYWxsXHJcblx0XHRcdFx0XHRcdFx0XHQ8L0J1dHRvbj5cclxuXHJcblx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uXHJcblx0XHRcdFx0XHRcdFx0XHRcdHNpemU9XCJzbWFsbFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkPXshY2FuVXBkYXRlfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2V0UGVybWlzc2lvblN0YXRlKHByZXYgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgbmV4dCA9IHsgLi4ucHJldiB9O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBwIG9mIHBlcm1pc3Npb25zKSBuZXh0W3BdID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gbmV4dDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fX1cclxuXHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0Q2xlYXJcclxuXHRcdFx0XHRcdFx0XHRcdDwvQnV0dG9uPlxyXG5cdFx0XHRcdFx0XHRcdDwvU3BhY2U+XHJcblx0XHRcdFx0XHRcdDwvU3BhY2U+XHJcblxyXG5cdFx0XHRcdFx0XHQ8ZGl2IHN0eWxlPXt7XHJcblx0XHRcdFx0XHRcdFx0bWFyZ2luVG9wOiAxMixcclxuXHRcdFx0XHRcdFx0XHRkaXNwbGF5OiBcImdyaWRcIixcclxuXHRcdFx0XHRcdFx0XHRncmlkVGVtcGxhdGVDb2x1bW5zOiBcInJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgyNTBweCwgMWZyKSlcIixcclxuXHRcdFx0XHRcdFx0XHRnYXA6IDgsXHJcblx0XHRcdFx0XHRcdH19PlxyXG5cdFx0XHRcdFx0XHRcdHtwZXJtaXNzaW9ucy5tYXAocCA9PiAoXHJcblx0XHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcclxuXHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtwfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjaGVja2VkPXtwZXJtaXNzaW9uU3RhdGVbcF19XHJcblx0XHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkPXshY2FuVXBkYXRlfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17ZSA9PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNldFBlcm1pc3Npb25TdGF0ZShwcmV2ID0+ICh7IC4uLnByZXYsIFtwXTogZS50YXJnZXQuY2hlY2tlZCB9KSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR7cH1cclxuXHRcdFx0XHRcdFx0XHRcdDwvQ2hlY2tib3g+XHJcblx0XHRcdFx0XHRcdFx0KSl9XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0KSl9XHJcblx0XHRcdDwvU3BhY2U+XHJcblx0XHQ8Lz59XHJcblx0PC9QYWdlTGF5b3V0PjtcclxufVxyXG4iXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VDb250ZXh0IiwidXNlRWZmZWN0IiwidXNlTWVtbyIsInVzZVN0YXRlIiwidXNlTmF2aWdhdGUiLCJ1c2VQYXJhbXMiLCJCdXR0b24iLCJDaGVja2JveCIsIklucHV0IiwiU3BhY2UiLCJTcGluIiwiQWxlcnQiLCJDb250cm9sQ29udGV4dCIsInVzZUFjY291bnQiLCJ1c2VEZWZhdWx0TW9kUGFjayIsIlBhZ2VMYXlvdXQiLCJQYWdlSGVhZGVyIiwibm90aWZ5RXJyb3JIYW5kbGVyIiwiRGVsZXRlZENvbmZpcm0iLCJtZXNzYWdlcyIsIkRPTUFJTl9NQVBQSU5HIiwiZ2V0RG9tYWluIiwibmFtZSIsIm4iLCJ0b0xvd2VyQ2FzZSIsImRvbWFpbiIsImtleXdvcmRzIiwiT2JqZWN0IiwiZW50cmllcyIsInNvbWUiLCJrIiwiaW5jbHVkZXMiLCJHcm91cFZpZXdQYWdlIiwiY29udHJvbCIsInBsdWdpbiIsInBsdWdpbnMiLCJnZXQiLCJuYXZpZ2F0ZSIsImFjY291bnQiLCJpZCIsImdyb3VwSWQiLCJOdW1iZXIiLCJncm91cHMiLCJzeW5jZWQiLCJ1c2VHcm91cHMiLCJncm91cCIsInNldE5hbWUiLCJkZWZhdWx0TW9kUGFjayIsImRlZmluZXNKc29uIiwic2V0RGVmaW5lc0pzb24iLCJwZXJtaXNzaW9uU3RhdGUiLCJzZXRQZXJtaXNzaW9uU3RhdGUiLCJiYXNlbGluZVN0YXRlIiwic2V0QmFzZWxpbmVTdGF0ZSIsInNlYXJjaCIsInNldFNlYXJjaCIsImNhblVwZGF0ZSIsIkJvb2xlYW4iLCJoYXNQZXJtaXNzaW9uIiwiY2FuRGVsZXRlIiwiZXhwb3J0TWFuaWZlc3QiLCJhc3NldHMiLCJkZWZpbmVzIiwiYXNzZXROYW1lIiwicmVzcG9uc2UiLCJmZXRjaCIsInN0YXRpY1Jvb3QiLCJqc29uIiwiaW5wdXRfYWN0aW9uIiwiY2F0Y2giLCJrZXlzIiwibGVuZ3RoIiwiaXNCbGFja2xpc3QiLCJwZXJtaXNzaW9ucyIsImJhc2UiLCJmcm9tRW50cmllcyIsIm1hcCIsInAiLCJhbGxQZXJtaXNzaW9ucyIsImZpbHRlcmVkIiwiZmlsdGVyIiwiZ3JvdXBlZCIsIk1hcCIsImhhcyIsInNldCIsInB1c2giLCJzb3J0ZWQiLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwicGVybXMiLCJwZXJtaXNzaW9uQ2hhbmdlZCIsIm1ldGFDaGFuZ2VkIiwiZWRpdGVkIiwiYXBwbHlDaGFuZ2VzIiwid2hpdGVsaXN0IiwiYmxhY2tsaXN0IiwicGVybSIsImVuYWJsZWQiLCJzZW5kIiwiR3JvdXBVcGRhdGVSZXF1ZXN0IiwiR3JvdXBSZWNvcmQiLCJHcm91cFBlcm1pc3Npb25zIiwidGhlbiIsInJldmVydENoYW5nZXMiLCJuYXYiLCJTdHJpbmciLCJ0aXRsZSIsInBhdGgiLCJleHRyYSIsIndyYXAiLCJwbGFjZW1lbnQiLCJvbkNvbmZpcm0iLCJHcm91cERlbGV0ZVJlcXVlc3QiLCJkaXYiLCJzdHlsZSIsInBvc2l0aW9uIiwiYm90dG9tIiwibGVmdCIsInRyYW5zZm9ybSIsImJhY2tncm91bmQiLCJib3JkZXJSYWRpdXMiLCJwYWRkaW5nIiwiZGlzcGxheSIsImdhcCIsInpJbmRleCIsInNwYW4iLCJvbkNsaWNrIiwidHlwZSIsIm1hcmdpbkJvdHRvbSIsImxhYmVsIiwid2lkdGgiLCJ2YWx1ZSIsImRpc2FibGVkIiwib25DaGFuZ2UiLCJlIiwidGFyZ2V0IiwiaDMiLCJtZXNzYWdlIiwiZGVzY3JpcHRpb24iLCJzaG93SWNvbiIsIlNlYXJjaCIsInBsYWNlaG9sZGVyIiwiYWxsb3dDbGVhciIsImRpcmVjdGlvbiIsImdyb3VwTmFtZSIsImJvcmRlciIsImp1c3RpZnlDb250ZW50Iiwic3Ryb25nIiwic2l6ZSIsInByZXYiLCJuZXh0IiwibWFyZ2luVG9wIiwiZ3JpZFRlbXBsYXRlQ29sdW1ucyIsImNoZWNrZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///639\n\n}");
331
+
332
+ /***/ },
333
+
334
+ /***/ 520
335
+ /*!****************************************!*\
336
+ !*** ./web/components/GroupsTable.tsx ***!
337
+ \****************************************/
338
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
339
+
340
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ GroupsTable)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ 878);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ 27);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! antd */ 537);\n/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(antd__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-router-dom */ 226);\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_router_dom__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @clusterio/web_ui */ 388);\n/* harmony import */ var _clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _GroupForm__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./GroupForm */ 587);\n\n\n\n\n\n\nconst strcmp = new Intl.Collator(undefined, {\n numeric: true,\n sensitivity: \"base\"\n}).compare;\nfunction GroupsTable() {\n const control = (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4__.ControlContext);\n const plugin = control.plugins.get(\"exp_groups\");\n const navigate = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_3__.useNavigate)();\n const [groups, synced] = plugin.useGroups();\n const [open, setOpen] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Table, {\n columns: [\n {\n title: \"Name\",\n dataIndex: \"name\",\n sorter: (a, b)=>strcmp(a.name, b.name)\n },\n {\n title: \"Permissions\",\n width: \"50%\",\n render: (_, g)=>`${g.permissions.permissions.length} ${g.permissions.isBlacklist ? \"Disallowed\" : \"Allowed\"}`\n }\n ],\n dataSource: [\n ...groups.values()\n ],\n loading: !synced,\n rowKey: (g)=>g.id,\n pagination: false,\n onRow: (g)=>({\n onClick: ()=>navigate(`/permission_groups/${g.id}/view`)\n })\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupsTable.tsx\",\n lineNumber: 23,\n columnNumber: 3\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_GroupForm__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n open: open,\n setOpen: setOpen\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\GroupsTable.tsx\",\n lineNumber: 47,\n columnNumber: 3\n }, this)\n ]\n }, void 0, true);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTIwLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFvRDtBQUN2QjtBQUNrQjtBQUVJO0FBSWY7QUFFcEMsTUFBTU8sU0FBUyxJQUFJQyxLQUFLQyxRQUFRLENBQUNDLFdBQVc7SUFBRUMsU0FBUztJQUFNQyxhQUFhO0FBQU8sR0FBR0MsT0FBTztBQUU1RSxTQUFTQztJQUN2QixNQUFNQyxVQUFVZCxpREFBVUEsQ0FBQ0ksNkRBQWNBO0lBQ3pDLE1BQU1XLFNBQVNELFFBQVFFLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDO0lBQ25DLE1BQU1DLFdBQVdmLDZEQUFXQTtJQUU1QixNQUFNLENBQUNnQixRQUFRQyxPQUFPLEdBQUdMLE9BQU9NLFNBQVM7SUFFekMsTUFBTSxDQUFDQyxNQUFNQyxRQUFRLEdBQUd0QiwrQ0FBUUEsQ0FBQztJQUVqQyxxQkFBTzs7MEJBQ04sOERBQUNDLHVDQUFLQTtnQkFDTHNCLFNBQVM7b0JBQ1I7d0JBQ0NDLE9BQU87d0JBQ1BDLFdBQVc7d0JBQ1hDLFFBQVEsQ0FBQ0MsR0FBUUMsSUFBbUJ2QixPQUFPc0IsRUFBRUUsSUFBSSxFQUFFRCxFQUFFQyxJQUFJO29CQUMxRDtvQkFDQTt3QkFDQ0wsT0FBTzt3QkFDUE0sT0FBTzt3QkFDUEMsUUFBUSxDQUFDQyxHQUFRQyxJQUNoQixHQUFHQSxFQUFFQyxXQUFXLENBQUNBLFdBQVcsQ0FBQ0MsTUFBTSxDQUFDLENBQUMsRUFBRUYsRUFBRUMsV0FBVyxDQUFDRSxXQUFXLEdBQUcsZUFBZSxXQUFXO29CQUUvRjtpQkFDQTtnQkFDREMsWUFBWTt1QkFBSW5CLE9BQU9vQixNQUFNO2lCQUFHO2dCQUNoQ0MsU0FBUyxDQUFDcEI7Z0JBQ1ZxQixRQUFRLENBQUNQLElBQU1BLEVBQUVRLEVBQUU7Z0JBQ25CQyxZQUFZO2dCQUNaQyxPQUFPLENBQUNWLElBQU87d0JBQ2RXLFNBQVMsSUFBTTNCLFNBQVMsQ0FBQyxtQkFBbUIsRUFBRWdCLEVBQUVRLEVBQUUsQ0FBQyxLQUFLLENBQUM7b0JBQzFEOzs7Ozs7MEJBR0QsOERBQUNyQyxrREFBU0E7Z0JBQUNpQixNQUFNQTtnQkFBTUMsU0FBU0E7Ozs7Ozs7O0FBRWxDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGV4cGNsdXN0ZXIvcGVybWlzc2lvbi1ncm91cHMvLi93ZWIvY29tcG9uZW50cy9Hcm91cHNUYWJsZS50c3g/ZTkxMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgVGFibGUgfSBmcm9tIFwiYW50ZFwiO1xyXG5pbXBvcnQgeyB1c2VOYXZpZ2F0ZSB9IGZyb20gXCJyZWFjdC1yb3V0ZXItZG9tXCI7XHJcblxyXG5pbXBvcnQgeyBDb250cm9sQ29udGV4dCB9IGZyb20gXCJAY2x1c3RlcmlvL3dlYl91aVwiO1xyXG5pbXBvcnQgeyBHcm91cFJlY29yZCB9IGZyb20gXCIuLi8uLi9tZXNzYWdlc1wiO1xyXG5pbXBvcnQgdHlwZSB7IFdlYlBsdWdpbiB9IGZyb20gXCIuLlwiO1xyXG5cclxuaW1wb3J0IEdyb3VwRm9ybSBmcm9tIFwiLi9Hcm91cEZvcm1cIjtcclxuXHJcbmNvbnN0IHN0cmNtcCA9IG5ldyBJbnRsLkNvbGxhdG9yKHVuZGVmaW5lZCwgeyBudW1lcmljOiB0cnVlLCBzZW5zaXRpdml0eTogXCJiYXNlXCIgfSkuY29tcGFyZTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEdyb3Vwc1RhYmxlKCkge1xyXG5cdGNvbnN0IGNvbnRyb2wgPSB1c2VDb250ZXh0KENvbnRyb2xDb250ZXh0KTtcclxuXHRjb25zdCBwbHVnaW4gPSBjb250cm9sLnBsdWdpbnMuZ2V0KFwiZXhwX2dyb3Vwc1wiKSBhcyBXZWJQbHVnaW47XHJcblx0Y29uc3QgbmF2aWdhdGUgPSB1c2VOYXZpZ2F0ZSgpO1xyXG5cclxuXHRjb25zdCBbZ3JvdXBzLCBzeW5jZWRdID0gcGx1Z2luLnVzZUdyb3VwcygpO1xyXG5cclxuXHRjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcblxyXG5cdHJldHVybiA8PlxyXG5cdFx0PFRhYmxlXHJcblx0XHRcdGNvbHVtbnM9e1tcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHR0aXRsZTogXCJOYW1lXCIsXHJcblx0XHRcdFx0XHRkYXRhSW5kZXg6IFwibmFtZVwiLFxyXG5cdFx0XHRcdFx0c29ydGVyOiAoYTogYW55LCBiOiBHcm91cFJlY29yZCkgPT4gc3RyY21wKGEubmFtZSwgYi5uYW1lKSxcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdHRpdGxlOiBcIlBlcm1pc3Npb25zXCIsXHJcblx0XHRcdFx0XHR3aWR0aDogXCI1MCVcIixcclxuXHRcdFx0XHRcdHJlbmRlcjogKF86IGFueSwgZzogR3JvdXBSZWNvcmQpID0+IChcclxuXHRcdFx0XHRcdFx0YCR7Zy5wZXJtaXNzaW9ucy5wZXJtaXNzaW9ucy5sZW5ndGh9ICR7Zy5wZXJtaXNzaW9ucy5pc0JsYWNrbGlzdCA/IFwiRGlzYWxsb3dlZFwiIDogXCJBbGxvd2VkXCJ9YFxyXG5cdFx0XHRcdFx0KSxcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRdfVxyXG5cdFx0XHRkYXRhU291cmNlPXtbLi4uZ3JvdXBzLnZhbHVlcygpXX1cclxuXHRcdFx0bG9hZGluZz17IXN5bmNlZH1cclxuXHRcdFx0cm93S2V5PXsoZykgPT4gZy5pZH1cclxuXHRcdFx0cGFnaW5hdGlvbj17ZmFsc2V9XHJcblx0XHRcdG9uUm93PXsoZykgPT4gKHtcclxuXHRcdFx0XHRvbkNsaWNrOiAoKSA9PiBuYXZpZ2F0ZShgL3Blcm1pc3Npb25fZ3JvdXBzLyR7Zy5pZH0vdmlld2ApLFxyXG5cdFx0XHR9KX1cclxuXHRcdC8+XHJcblxyXG5cdFx0PEdyb3VwRm9ybSBvcGVuPXtvcGVufSBzZXRPcGVuPXtzZXRPcGVufSAvPlxyXG5cdDwvPjtcclxufSJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNvbnRleHQiLCJ1c2VTdGF0ZSIsIlRhYmxlIiwidXNlTmF2aWdhdGUiLCJDb250cm9sQ29udGV4dCIsIkdyb3VwRm9ybSIsInN0cmNtcCIsIkludGwiLCJDb2xsYXRvciIsInVuZGVmaW5lZCIsIm51bWVyaWMiLCJzZW5zaXRpdml0eSIsImNvbXBhcmUiLCJHcm91cHNUYWJsZSIsImNvbnRyb2wiLCJwbHVnaW4iLCJwbHVnaW5zIiwiZ2V0IiwibmF2aWdhdGUiLCJncm91cHMiLCJzeW5jZWQiLCJ1c2VHcm91cHMiLCJvcGVuIiwic2V0T3BlbiIsImNvbHVtbnMiLCJ0aXRsZSIsImRhdGFJbmRleCIsInNvcnRlciIsImEiLCJiIiwibmFtZSIsIndpZHRoIiwicmVuZGVyIiwiXyIsImciLCJwZXJtaXNzaW9ucyIsImxlbmd0aCIsImlzQmxhY2tsaXN0IiwiZGF0YVNvdXJjZSIsInZhbHVlcyIsImxvYWRpbmciLCJyb3dLZXkiLCJpZCIsInBhZ2luYXRpb24iLCJvblJvdyIsIm9uQ2xpY2siXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///520\n\n}");
341
+
342
+ /***/ },
343
+
344
+ /***/ 124
345
+ /*!********************************************!*\
346
+ !*** ./web/components/RoleMappingForm.tsx ***!
347
+ \********************************************/
348
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
349
+
350
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RoleMappingForm)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ 878);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ 27);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! antd */ 537);\n/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(antd__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _clusterio_web_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @clusterio/web_ui */ 388);\n/* harmony import */ var _clusterio_web_ui__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../messages */ 40);\n\n\n\n\n\nfunction RoleMappingForm({ open, setOpen, initial }) {\n const control = (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_3__.ControlContext);\n const plugin = control.plugins.get(\"exp_groups\");\n const [groups] = plugin.useGroups();\n const [roles] = (0,_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_3__.useRoles)();\n const [form] = antd__WEBPACK_IMPORTED_MODULE_2__.Form.useForm();\n function submit(values) {\n if (initial) {\n control.send(new _messages__WEBPACK_IMPORTED_MODULE_4__.RoleMappingUpdateRequest(new _messages__WEBPACK_IMPORTED_MODULE_4__.RoleMappingRecord(initial.id, new Set(values.roleIds), values.groupId, values.priority, values.enabled)));\n } else {\n control.send(new _messages__WEBPACK_IMPORTED_MODULE_4__.RoleMappingCreateRequest(values.roleIds, values.groupId, values.priority, values.enabled));\n }\n setOpen(false);\n }\n ;(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (open) {\n form.resetFields();\n form.setFieldsValue({\n ...initial,\n roleIds: initial ? [\n ...initial.roleIds\n ] : []\n });\n }\n }, [\n open,\n initial\n ]);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Modal, {\n title: initial ? \"Edit Role Mapping\" : \"Create Role Mapping\",\n open: open,\n onCancel: ()=>setOpen(false),\n onOk: ()=>form.submit(),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Alert, {\n type: \"info\",\n showIcon: true,\n message: \"How role mappings work\",\n style: {\n marginBottom: 16\n },\n description: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n style: {\n paddingLeft: 16,\n margin: 0\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"Manual assignments always take priority.\"\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingForm.tsx\",\n lineNumber: 67,\n columnNumber: 6\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"Mappings are checked in priority order (highest first).\"\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingForm.tsx\",\n lineNumber: 68,\n columnNumber: 6\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n \"A mapping applies only if the user has \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"b\", {\n children: \"all listed roles\"\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingForm.tsx\",\n lineNumber: 69,\n columnNumber: 49\n }, this),\n \".\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingForm.tsx\",\n lineNumber: 69,\n columnNumber: 6\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"The first matching mapping assigns the group.\"\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingForm.tsx\",\n lineNumber: 70,\n columnNumber: 6\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"If none match, the player is given all permissions.\"\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingForm.tsx\",\n lineNumber: 71,\n columnNumber: 6\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingForm.tsx\",\n lineNumber: 66,\n columnNumber: 5\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingForm.tsx\",\n lineNumber: 60,\n columnNumber: 3\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Form, {\n form: form,\n onFinish: submit,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Form.Item, {\n name: \"groupId\",\n label: \"Group\",\n rules: [\n {\n required: true\n }\n ],\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Select, {\n children: [\n ...groups.values()\n ].map((g)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Select.Option, {\n value: g.id,\n children: g.name\n }, g.id, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingForm.tsx\",\n lineNumber: 80,\n columnNumber: 7\n }, this))\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingForm.tsx\",\n lineNumber: 78,\n columnNumber: 5\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingForm.tsx\",\n lineNumber: 77,\n columnNumber: 4\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Form.Item, {\n name: \"roleIds\",\n label: \"Roles\",\n rules: [\n {\n required: true\n }\n ],\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Select, {\n mode: \"multiple\",\n children: [\n ...roles.values()\n ].map((r)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Select.Option, {\n value: r.id,\n children: r.name\n }, r.id, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingForm.tsx\",\n lineNumber: 90,\n columnNumber: 7\n }, this))\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingForm.tsx\",\n lineNumber: 88,\n columnNumber: 5\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingForm.tsx\",\n lineNumber: 87,\n columnNumber: 4\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Form.Item, {\n name: \"priority\",\n label: \"Priority\",\n initialValue: 100,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.InputNumber, {\n style: {\n width: \"100%\"\n }\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingForm.tsx\",\n lineNumber: 98,\n columnNumber: 5\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingForm.tsx\",\n lineNumber: 97,\n columnNumber: 4\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Form.Item, {\n name: \"enabled\",\n label: \"Enabled\",\n valuePropName: \"checked\",\n initialValue: true,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Switch, {}, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingForm.tsx\",\n lineNumber: 102,\n columnNumber: 5\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingForm.tsx\",\n lineNumber: 101,\n columnNumber: 4\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingForm.tsx\",\n lineNumber: 76,\n columnNumber: 3\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingForm.tsx\",\n lineNumber: 54,\n columnNumber: 9\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTI0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBcUQ7QUFDa0I7QUFFVjtBQUMwQztBQUd4RixTQUFTYyxnQkFBZ0IsRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLE9BQU8sRUFJL0Q7SUFDQSxNQUFNQyxVQUFVakIsaURBQVVBLENBQUNRLDZEQUFjQTtJQUN6QyxNQUFNVSxTQUFTRCxRQUFRRSxPQUFPLENBQUNDLEdBQUcsQ0FBQztJQUVuQyxNQUFNLENBQUNDLE9BQU8sR0FBR0gsT0FBT0ksU0FBUztJQUNqQyxNQUFNLENBQUNDLE1BQU0sR0FBR2QsMkRBQVFBO0lBRXhCLE1BQU0sQ0FBQ2UsS0FBSyxHQUFHckIsc0NBQUlBLENBQUNzQixPQUFPO0lBRTNCLFNBQVNDLE9BQU9DLE1BQVc7UUFDMUIsSUFBSVgsU0FBUztZQUNaQyxRQUFRVyxJQUFJLENBQUMsSUFBSWhCLCtEQUF3QkEsQ0FDeEMsSUFBSUYsd0RBQWlCQSxDQUNwQk0sUUFBUWEsRUFBRSxFQUNWLElBQUlDLElBQUlILE9BQU9JLE9BQU8sR0FDdEJKLE9BQU9LLE9BQU8sRUFDZEwsT0FBT00sUUFBUSxFQUNmTixPQUFPTyxPQUFPO1FBR2pCLE9BQU87WUFDTmpCLFFBQVFXLElBQUksQ0FBQyxJQUFJakIsK0RBQXdCQSxDQUN4Q2dCLE9BQU9JLE9BQU8sRUFDZEosT0FBT0ssT0FBTyxFQUNkTCxPQUFPTSxRQUFRLEVBQ2ZOLE9BQU9PLE9BQU87UUFFaEI7UUFFQW5CLFFBQVE7SUFDVDtJQUVBZCxpREFBU0EsQ0FBQztRQUNULElBQUlhLE1BQU07WUFDVFUsS0FBS1csV0FBVztZQUNoQlgsS0FBS1ksY0FBYyxDQUFDO2dCQUNuQixHQUFHcEIsT0FBTztnQkFDVmUsU0FBU2YsVUFBVTt1QkFBSUEsUUFBUWUsT0FBTztpQkFBQyxHQUFHLEVBQUU7WUFDN0M7UUFDRDtJQUNELEdBQUc7UUFBQ2pCO1FBQU1FO0tBQVE7SUFFbEIscUJBQU8sOERBQUNkLHVDQUFLQTtRQUNabUMsT0FBT3JCLFVBQVUsc0JBQXNCO1FBQ3ZDRixNQUFNQTtRQUNOd0IsVUFBVSxJQUFNdkIsUUFBUTtRQUN4QndCLE1BQU0sSUFBTWYsS0FBS0UsTUFBTTs7MEJBRXZCLDhEQUFDbkIsdUNBQUtBO2dCQUNMaUMsTUFBSztnQkFDTEMsUUFBUTtnQkFDUkMsU0FBUTtnQkFDUkMsT0FBTztvQkFBRUMsY0FBYztnQkFBRztnQkFDMUJDLDJCQUNDLDhEQUFDQztvQkFBR0gsT0FBTzt3QkFBRUksYUFBYTt3QkFBSUMsUUFBUTtvQkFBRTs7c0NBQ3ZDLDhEQUFDQztzQ0FBRzs7Ozs7O3NDQUNKLDhEQUFDQTtzQ0FBRzs7Ozs7O3NDQUNKLDhEQUFDQTs7Z0NBQUc7OENBQXVDLDhEQUFDQzs4Q0FBRTs7Ozs7O2dDQUFvQjs7Ozs7OztzQ0FDbEUsOERBQUNEO3NDQUFHOzs7Ozs7c0NBQ0osOERBQUNBO3NDQUFHOzs7Ozs7Ozs7Ozs7Ozs7OzswQkFLUCw4REFBQzlDLHNDQUFJQTtnQkFBQ3FCLE1BQU1BO2dCQUFNMkIsVUFBVXpCOztrQ0FDM0IsOERBQUN2QixzQ0FBSUEsQ0FBQ2lELElBQUk7d0JBQUNDLE1BQUs7d0JBQVVDLE9BQU07d0JBQVFDLE9BQU87NEJBQUM7Z0NBQUVDLFVBQVU7NEJBQUs7eUJBQUU7a0NBQ2xFLDRFQUFDcEQsd0NBQU1BO3NDQUNMO21DQUFJaUIsT0FBT00sTUFBTTs2QkFBRyxDQUFDOEIsR0FBRyxDQUFDQyxDQUFBQSxrQkFDekIsOERBQUN0RCx3Q0FBTUEsQ0FBQ3VELE1BQU07b0NBQVlDLE9BQU9GLEVBQUU3QixFQUFFOzhDQUNuQzZCLEVBQUVMLElBQUk7bUNBRFlLLEVBQUU3QixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7a0NBTzNCLDhEQUFDMUIsc0NBQUlBLENBQUNpRCxJQUFJO3dCQUFDQyxNQUFLO3dCQUFVQyxPQUFNO3dCQUFRQyxPQUFPOzRCQUFDO2dDQUFFQyxVQUFVOzRCQUFLO3lCQUFFO2tDQUNsRSw0RUFBQ3BELHdDQUFNQTs0QkFBQ3lELE1BQUs7c0NBQ1g7bUNBQUl0QyxNQUFNSSxNQUFNOzZCQUFHLENBQUM4QixHQUFHLENBQUNLLENBQUFBLGtCQUN4Qiw4REFBQzFELHdDQUFNQSxDQUFDdUQsTUFBTTtvQ0FBWUMsT0FBT0UsRUFBRWpDLEVBQUU7OENBQ25DaUMsRUFBRVQsSUFBSTttQ0FEWVMsRUFBRWpDLEVBQUU7Ozs7Ozs7Ozs7Ozs7OztrQ0FPM0IsOERBQUMxQixzQ0FBSUEsQ0FBQ2lELElBQUk7d0JBQUNDLE1BQUs7d0JBQVdDLE9BQU07d0JBQVdTLGNBQWM7a0NBQ3pELDRFQUFDMUQsNkNBQVdBOzRCQUFDc0MsT0FBTztnQ0FBRXFCLE9BQU87NEJBQU87Ozs7Ozs7Ozs7O2tDQUdyQyw4REFBQzdELHNDQUFJQSxDQUFDaUQsSUFBSTt3QkFBQ0MsTUFBSzt3QkFBVUMsT0FBTTt3QkFBVVcsZUFBYzt3QkFBVUYsY0FBYztrQ0FDL0UsNEVBQUN6RCx3Q0FBTUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJWCIsInNvdXJjZXMiOlsid2VicGFjazovL0BleHBjbHVzdGVyL3Blcm1pc3Npb24tZ3JvdXBzLy4vd2ViL2NvbXBvbmVudHMvUm9sZU1hcHBpbmdGb3JtLnRzeD82NWMzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0LCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgTW9kYWwsIEZvcm0sIFNlbGVjdCwgSW5wdXROdW1iZXIsIFN3aXRjaCwgQWxlcnQgfSBmcm9tIFwiYW50ZFwiO1xyXG5cclxuaW1wb3J0IHsgQ29udHJvbENvbnRleHQsIHVzZVJvbGVzIH0gZnJvbSBcIkBjbHVzdGVyaW8vd2ViX3VpXCI7XHJcbmltcG9ydCB7IFJvbGVNYXBwaW5nUmVjb3JkLCBSb2xlTWFwcGluZ0NyZWF0ZVJlcXVlc3QsIFJvbGVNYXBwaW5nVXBkYXRlUmVxdWVzdCB9IGZyb20gXCIuLi8uLi9tZXNzYWdlc1wiO1xyXG5pbXBvcnQgdHlwZSB7IFdlYlBsdWdpbiB9IGZyb20gXCIuLlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUm9sZU1hcHBpbmdGb3JtKHsgb3Blbiwgc2V0T3BlbiwgaW5pdGlhbCB9OiB7XHJcblx0b3BlbjogYm9vbGVhbixcclxuXHRzZXRPcGVuOiAob3BlbjogYm9vbGVhbikgPT4gdm9pZCxcclxuXHRpbml0aWFsPzogUm9sZU1hcHBpbmdSZWNvcmQsXHJcbn0pIHtcclxuXHRjb25zdCBjb250cm9sID0gdXNlQ29udGV4dChDb250cm9sQ29udGV4dCk7XHJcblx0Y29uc3QgcGx1Z2luID0gY29udHJvbC5wbHVnaW5zLmdldChcImV4cF9ncm91cHNcIikgYXMgV2ViUGx1Z2luO1xyXG5cclxuXHRjb25zdCBbZ3JvdXBzXSA9IHBsdWdpbi51c2VHcm91cHMoKTtcclxuXHRjb25zdCBbcm9sZXNdID0gdXNlUm9sZXMoKTtcclxuXHJcblx0Y29uc3QgW2Zvcm1dID0gRm9ybS51c2VGb3JtKCk7XHJcblxyXG5cdGZ1bmN0aW9uIHN1Ym1pdCh2YWx1ZXM6IGFueSkge1xyXG5cdFx0aWYgKGluaXRpYWwpIHtcclxuXHRcdFx0Y29udHJvbC5zZW5kKG5ldyBSb2xlTWFwcGluZ1VwZGF0ZVJlcXVlc3QoXHJcblx0XHRcdFx0bmV3IFJvbGVNYXBwaW5nUmVjb3JkKFxyXG5cdFx0XHRcdFx0aW5pdGlhbC5pZCxcclxuXHRcdFx0XHRcdG5ldyBTZXQodmFsdWVzLnJvbGVJZHMpLFxyXG5cdFx0XHRcdFx0dmFsdWVzLmdyb3VwSWQsXHJcblx0XHRcdFx0XHR2YWx1ZXMucHJpb3JpdHksXHJcblx0XHRcdFx0XHR2YWx1ZXMuZW5hYmxlZCxcclxuXHRcdFx0XHQpXHJcblx0XHRcdCkpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29udHJvbC5zZW5kKG5ldyBSb2xlTWFwcGluZ0NyZWF0ZVJlcXVlc3QoXHJcblx0XHRcdFx0dmFsdWVzLnJvbGVJZHMsXHJcblx0XHRcdFx0dmFsdWVzLmdyb3VwSWQsXHJcblx0XHRcdFx0dmFsdWVzLnByaW9yaXR5LFxyXG5cdFx0XHRcdHZhbHVlcy5lbmFibGVkLFxyXG5cdFx0XHQpKTtcclxuXHRcdH1cclxuXHJcblx0XHRzZXRPcGVuKGZhbHNlKTtcclxuXHR9XHJcblxyXG5cdHVzZUVmZmVjdCgoKSA9PiB7XHJcblx0XHRpZiAob3Blbikge1xyXG5cdFx0XHRmb3JtLnJlc2V0RmllbGRzKCk7XHJcblx0XHRcdGZvcm0uc2V0RmllbGRzVmFsdWUoe1xyXG5cdFx0XHRcdC4uLmluaXRpYWwsXHJcblx0XHRcdFx0cm9sZUlkczogaW5pdGlhbCA/IFsuLi5pbml0aWFsLnJvbGVJZHNdIDogW10sXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH0sIFtvcGVuLCBpbml0aWFsXSk7XHJcblxyXG5cdHJldHVybiA8TW9kYWxcclxuXHRcdHRpdGxlPXtpbml0aWFsID8gXCJFZGl0IFJvbGUgTWFwcGluZ1wiIDogXCJDcmVhdGUgUm9sZSBNYXBwaW5nXCJ9XHJcblx0XHRvcGVuPXtvcGVufVxyXG5cdFx0b25DYW5jZWw9eygpID0+IHNldE9wZW4oZmFsc2UpfVxyXG5cdFx0b25Paz17KCkgPT4gZm9ybS5zdWJtaXQoKX1cclxuXHQ+XHJcblx0XHQ8QWxlcnRcclxuXHRcdFx0dHlwZT1cImluZm9cIlxyXG5cdFx0XHRzaG93SWNvblxyXG5cdFx0XHRtZXNzYWdlPVwiSG93IHJvbGUgbWFwcGluZ3Mgd29ya1wiXHJcblx0XHRcdHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogMTYgfX1cclxuXHRcdFx0ZGVzY3JpcHRpb249e1xyXG5cdFx0XHRcdDx1bCBzdHlsZT17eyBwYWRkaW5nTGVmdDogMTYsIG1hcmdpbjogMCB9fT5cclxuXHRcdFx0XHRcdDxsaT5NYW51YWwgYXNzaWdubWVudHMgYWx3YXlzIHRha2UgcHJpb3JpdHkuPC9saT5cclxuXHRcdFx0XHRcdDxsaT5NYXBwaW5ncyBhcmUgY2hlY2tlZCBpbiBwcmlvcml0eSBvcmRlciAoaGlnaGVzdCBmaXJzdCkuPC9saT5cclxuXHRcdFx0XHRcdDxsaT5BIG1hcHBpbmcgYXBwbGllcyBvbmx5IGlmIHRoZSB1c2VyIGhhcyA8Yj5hbGwgbGlzdGVkIHJvbGVzPC9iPi48L2xpPlxyXG5cdFx0XHRcdFx0PGxpPlRoZSBmaXJzdCBtYXRjaGluZyBtYXBwaW5nIGFzc2lnbnMgdGhlIGdyb3VwLjwvbGk+XHJcblx0XHRcdFx0XHQ8bGk+SWYgbm9uZSBtYXRjaCwgdGhlIHBsYXllciBpcyBnaXZlbiBhbGwgcGVybWlzc2lvbnMuPC9saT5cclxuXHRcdFx0XHQ8L3VsPlxyXG5cdFx0XHR9XHJcblx0XHQvPlxyXG5cclxuXHRcdDxGb3JtIGZvcm09e2Zvcm19IG9uRmluaXNoPXtzdWJtaXR9PlxyXG5cdFx0XHQ8Rm9ybS5JdGVtIG5hbWU9XCJncm91cElkXCIgbGFiZWw9XCJHcm91cFwiIHJ1bGVzPXtbeyByZXF1aXJlZDogdHJ1ZSB9XX0+XHJcblx0XHRcdFx0PFNlbGVjdD5cclxuXHRcdFx0XHRcdHtbLi4uZ3JvdXBzLnZhbHVlcygpXS5tYXAoZyA9PiAoXHJcblx0XHRcdFx0XHRcdDxTZWxlY3QuT3B0aW9uIGtleT17Zy5pZH0gdmFsdWU9e2cuaWR9PlxyXG5cdFx0XHRcdFx0XHRcdHtnLm5hbWV9XHJcblx0XHRcdFx0XHRcdDwvU2VsZWN0Lk9wdGlvbj5cclxuXHRcdFx0XHRcdCkpfVxyXG5cdFx0XHRcdDwvU2VsZWN0PlxyXG5cdFx0XHQ8L0Zvcm0uSXRlbT5cclxuXHJcblx0XHRcdDxGb3JtLkl0ZW0gbmFtZT1cInJvbGVJZHNcIiBsYWJlbD1cIlJvbGVzXCIgcnVsZXM9e1t7IHJlcXVpcmVkOiB0cnVlIH1dfT5cclxuXHRcdFx0XHQ8U2VsZWN0IG1vZGU9XCJtdWx0aXBsZVwiPlxyXG5cdFx0XHRcdFx0e1suLi5yb2xlcy52YWx1ZXMoKV0ubWFwKHIgPT4gKFxyXG5cdFx0XHRcdFx0XHQ8U2VsZWN0Lk9wdGlvbiBrZXk9e3IuaWR9IHZhbHVlPXtyLmlkfT5cclxuXHRcdFx0XHRcdFx0XHR7ci5uYW1lfVxyXG5cdFx0XHRcdFx0XHQ8L1NlbGVjdC5PcHRpb24+XHJcblx0XHRcdFx0XHQpKX1cclxuXHRcdFx0XHQ8L1NlbGVjdD5cclxuXHRcdFx0PC9Gb3JtLkl0ZW0+XHJcblxyXG5cdFx0XHQ8Rm9ybS5JdGVtIG5hbWU9XCJwcmlvcml0eVwiIGxhYmVsPVwiUHJpb3JpdHlcIiBpbml0aWFsVmFsdWU9ezEwMH0+XHJcblx0XHRcdFx0PElucHV0TnVtYmVyIHN0eWxlPXt7IHdpZHRoOiBcIjEwMCVcIiB9fSAvPlxyXG5cdFx0XHQ8L0Zvcm0uSXRlbT5cclxuXHJcblx0XHRcdDxGb3JtLkl0ZW0gbmFtZT1cImVuYWJsZWRcIiBsYWJlbD1cIkVuYWJsZWRcIiB2YWx1ZVByb3BOYW1lPVwiY2hlY2tlZFwiIGluaXRpYWxWYWx1ZT17dHJ1ZX0+XHJcblx0XHRcdFx0PFN3aXRjaCAvPlxyXG5cdFx0XHQ8L0Zvcm0uSXRlbT5cclxuXHRcdDwvRm9ybT5cclxuXHQ8L01vZGFsPjtcclxufVxyXG4iXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VDb250ZXh0IiwidXNlRWZmZWN0IiwiTW9kYWwiLCJGb3JtIiwiU2VsZWN0IiwiSW5wdXROdW1iZXIiLCJTd2l0Y2giLCJBbGVydCIsIkNvbnRyb2xDb250ZXh0IiwidXNlUm9sZXMiLCJSb2xlTWFwcGluZ1JlY29yZCIsIlJvbGVNYXBwaW5nQ3JlYXRlUmVxdWVzdCIsIlJvbGVNYXBwaW5nVXBkYXRlUmVxdWVzdCIsIlJvbGVNYXBwaW5nRm9ybSIsIm9wZW4iLCJzZXRPcGVuIiwiaW5pdGlhbCIsImNvbnRyb2wiLCJwbHVnaW4iLCJwbHVnaW5zIiwiZ2V0IiwiZ3JvdXBzIiwidXNlR3JvdXBzIiwicm9sZXMiLCJmb3JtIiwidXNlRm9ybSIsInN1Ym1pdCIsInZhbHVlcyIsInNlbmQiLCJpZCIsIlNldCIsInJvbGVJZHMiLCJncm91cElkIiwicHJpb3JpdHkiLCJlbmFibGVkIiwicmVzZXRGaWVsZHMiLCJzZXRGaWVsZHNWYWx1ZSIsInRpdGxlIiwib25DYW5jZWwiLCJvbk9rIiwidHlwZSIsInNob3dJY29uIiwibWVzc2FnZSIsInN0eWxlIiwibWFyZ2luQm90dG9tIiwiZGVzY3JpcHRpb24iLCJ1bCIsInBhZGRpbmdMZWZ0IiwibWFyZ2luIiwibGkiLCJiIiwib25GaW5pc2giLCJJdGVtIiwibmFtZSIsImxhYmVsIiwicnVsZXMiLCJyZXF1aXJlZCIsIm1hcCIsImciLCJPcHRpb24iLCJ2YWx1ZSIsIm1vZGUiLCJyIiwiaW5pdGlhbFZhbHVlIiwid2lkdGgiLCJ2YWx1ZVByb3BOYW1lIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///124\n\n}");
351
+
352
+ /***/ },
353
+
354
+ /***/ 715
355
+ /*!**********************************************!*\
356
+ !*** ./web/components/RoleMappingsTable.tsx ***!
357
+ \**********************************************/
358
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
359
+
360
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RoleMappingsTable)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ 878);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ 27);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! antd */ 537);\n/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(antd__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _ant_design_icons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ant-design/icons */ 893);\n/* harmony import */ var _clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @clusterio/web_ui */ 388);\n/* harmony import */ var _clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../messages */ 40);\n/* harmony import */ var _RoleMappingForm__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./RoleMappingForm */ 124);\n/* harmony import */ var _DeleteConfirm__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./DeleteConfirm */ 844);\n\n\n\n\n\n\n\n\nfunction RoleMappingsTable() {\n const control = (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4__.ControlContext);\n const plugin = control.plugins.get(\"exp_groups\");\n const account = (0,_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4__.useAccount)();\n const [roleMappings, roleMappingsSynced] = plugin.useRoleMappings();\n const [groups, groupsSynced] = plugin.useGroups();\n const [roles, rolesSynced] = (0,_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_4__.useRoles)();\n const [editing, setEditing] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)();\n const [open, setOpen] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const roleMappingArray = [\n ...roleMappings.values()\n ];\n const roleFilters = [\n ...roles.values()\n ].filter((role)=>roleMappingArray.some((mapping)=>mapping.roleIds.has(role.id))).map((role)=>({\n text: role.name,\n value: role.id\n }));\n const groupFilters = [\n ...groups.values()\n ].filter((group)=>roleMappingArray.some((mapping)=>mapping.groupId === group.id)).map((group)=>({\n text: group.name,\n value: group.id\n }));\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Table, {\n columns: [\n {\n title: \"Priority\",\n dataIndex: \"priority\",\n width: \"10%\"\n },\n {\n title: \"Roles\",\n filters: roleFilters,\n onFilter: (value, record)=>record.roleIds.has(value),\n render: (_, record)=>[\n ...record.roleIds\n ].map((id)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Tag, {\n children: roles.get(id)?.name ?? id\n }, id, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingsTable.tsx\",\n lineNumber: 49,\n columnNumber: 37\n }, this))\n },\n {\n title: \"Group\",\n width: \"30%\",\n filters: groupFilters,\n onFilter: (value, record)=>record.groupId === value,\n render: (_, record)=>groups.get(record.groupId)?.name ?? record.groupId\n },\n {\n title: \"Enabled\",\n width: \"10%\",\n filters: [\n {\n text: \"Enabled\",\n value: true\n },\n {\n text: \"Disabled\",\n value: false\n }\n ],\n onFilter: (value, record)=>record.enabled === value,\n render: (_, record)=>record.enabled ? \"Yes\" : \"No\"\n },\n ...account.hasAnyPermission(\"exp_groups.role_mapping.update\", \"exp_groups.role_mapping.delete\") ? [\n {\n title: \"Actions\",\n width: \"10%\",\n render: (_, record)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Space, {\n children: [\n account.hasPermission(\"exp_groups.role_mapping.update\") && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_2__.Button, {\n icon: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_ant_design_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {}, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingsTable.tsx\",\n lineNumber: 86,\n columnNumber: 15\n }, this),\n onClick: ()=>{\n setEditing(record);\n setOpen(true);\n }\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingsTable.tsx\",\n lineNumber: 85,\n columnNumber: 68\n }, this),\n account.hasPermission(\"exp_groups.role_mapping.delete\") && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_DeleteConfirm__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n onConfirm: ()=>control.send(new _messages__WEBPACK_IMPORTED_MODULE_5__.RoleMappingDeleteRequest(record.id))\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingsTable.tsx\",\n lineNumber: 92,\n columnNumber: 68\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingsTable.tsx\",\n lineNumber: 84,\n columnNumber: 7\n }, this)\n }\n ] : []\n ],\n dataSource: roleMappingArray.sort((a, b)=>b.priority - a.priority),\n loading: !roleMappingsSynced || !groupsSynced || !rolesSynced,\n rowKey: (m)=>m.id,\n pagination: false\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingsTable.tsx\",\n lineNumber: 35,\n columnNumber: 3\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_RoleMappingForm__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n open: open,\n setOpen: setOpen,\n initial: editing\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\components\\\\RoleMappingsTable.tsx\",\n lineNumber: 105,\n columnNumber: 3\n }, this)\n ]\n }, void 0, true);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFhLENBQUMsbURBQXFDLDhEQUFDeEQsd0NBQU1BOzRDQUNsRXlELG9CQUFNLDhEQUFDdEQseURBQVlBOzs7Ozs0Q0FDbkJ1RCxTQUFTO2dEQUNSakMsV0FBVzBCO2dEQUNYeEIsUUFBUTs0Q0FDVDs7Ozs7O3dDQUVBWixRQUFReUMsYUFBYSxDQUFDLG1EQUFxQyw4REFBQy9DLHNEQUFjQTs0Q0FDMUVrRCxXQUFXLElBQU1oRCxRQUFRaUQsSUFBSSxDQUFDLElBQUlyRCwrREFBd0JBLENBQUM0QyxPQUFPZCxFQUFFOzs7Ozs7Ozs7Ozs7d0JBSXhFO3FCQUFFLEdBQUcsRUFBRTtpQkFDUDtnQkFDRHdCLFlBQVlqQyxpQkFBaUJrQyxJQUFJLENBQUMsQ0FBQ0MsR0FBR0MsSUFBTUEsRUFBRUMsUUFBUSxHQUFHRixFQUFFRSxRQUFRO2dCQUNuRUMsU0FBUyxDQUFDakQsc0JBQXNCLENBQUNHLGdCQUFnQixDQUFDRztnQkFDbEQ0QyxRQUFRLENBQUNDLElBQU1BLEVBQUUvQixFQUFFO2dCQUNuQmdDLFlBQVk7Ozs7OzswQkFHYiw4REFBQzdELHdEQUFlQTtnQkFBQ2tCLE1BQU1BO2dCQUFNQyxTQUFTQTtnQkFBUzJDLFNBQVM5Qzs7Ozs7Ozs7QUFFMUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZXhwY2x1c3Rlci9wZXJtaXNzaW9uLWdyb3Vwcy8uL3dlYi9jb21wb25lbnRzL1JvbGVNYXBwaW5nc1RhYmxlLnRzeD9kNGEyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBUYWJsZSwgQnV0dG9uLCBTcGFjZSwgVGFnIH0gZnJvbSBcImFudGRcIjtcclxuaW1wb3J0IHsgRWRpdE91dGxpbmVkIH0gZnJvbSBcIkBhbnQtZGVzaWduL2ljb25zXCI7XHJcblxyXG5pbXBvcnQgeyBDb250cm9sQ29udGV4dCwgdXNlQWNjb3VudCwgdXNlUm9sZXMgfSBmcm9tIFwiQGNsdXN0ZXJpby93ZWJfdWlcIjtcclxuaW1wb3J0IHsgUm9sZU1hcHBpbmdSZWNvcmQsIFJvbGVNYXBwaW5nRGVsZXRlUmVxdWVzdCB9IGZyb20gXCIuLi8uLi9tZXNzYWdlc1wiO1xyXG5pbXBvcnQgdHlwZSB7IFdlYlBsdWdpbiB9IGZyb20gXCIuLlwiO1xyXG5cclxuaW1wb3J0IFJvbGVNYXBwaW5nRm9ybSBmcm9tIFwiLi9Sb2xlTWFwcGluZ0Zvcm1cIjtcclxuaW1wb3J0IERlbGV0ZWRDb25maXJtIGZyb20gXCIuL0RlbGV0ZUNvbmZpcm1cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJvbGVNYXBwaW5nc1RhYmxlKCkge1xyXG5cdGNvbnN0IGNvbnRyb2wgPSB1c2VDb250ZXh0KENvbnRyb2xDb250ZXh0KTtcclxuXHRjb25zdCBwbHVnaW4gPSBjb250cm9sLnBsdWdpbnMuZ2V0KFwiZXhwX2dyb3Vwc1wiKSBhcyBXZWJQbHVnaW47XHJcblx0Y29uc3QgYWNjb3VudCA9IHVzZUFjY291bnQoKTtcclxuXHJcblx0Y29uc3QgW3JvbGVNYXBwaW5ncywgcm9sZU1hcHBpbmdzU3luY2VkXSA9IHBsdWdpbi51c2VSb2xlTWFwcGluZ3MoKTtcclxuXHRjb25zdCBbZ3JvdXBzLCBncm91cHNTeW5jZWRdID0gcGx1Z2luLnVzZUdyb3VwcygpO1xyXG5cdGNvbnN0IFtyb2xlcywgcm9sZXNTeW5jZWRdID0gdXNlUm9sZXMoKTtcclxuXHJcblx0Y29uc3QgW2VkaXRpbmcsIHNldEVkaXRpbmddID0gdXNlU3RhdGU8Um9sZU1hcHBpbmdSZWNvcmQgfCB1bmRlZmluZWQ+KCk7XHJcblx0Y29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xyXG5cclxuXHRjb25zdCByb2xlTWFwcGluZ0FycmF5ID0gWy4uLnJvbGVNYXBwaW5ncy52YWx1ZXMoKV07XHJcblxyXG5cdGNvbnN0IHJvbGVGaWx0ZXJzID0gWy4uLnJvbGVzLnZhbHVlcygpXVxyXG5cdFx0LmZpbHRlcihyb2xlID0+IHJvbGVNYXBwaW5nQXJyYXkuc29tZShtYXBwaW5nID0+IG1hcHBpbmcucm9sZUlkcy5oYXMocm9sZS5pZCkpKVxyXG5cdFx0Lm1hcChyb2xlID0+ICh7IHRleHQ6IHJvbGUubmFtZSwgdmFsdWU6IHJvbGUuaWQgfSkpO1xyXG5cclxuXHRjb25zdCBncm91cEZpbHRlcnMgPSBbLi4uZ3JvdXBzLnZhbHVlcygpXVxyXG5cdFx0LmZpbHRlcihncm91cCA9PiByb2xlTWFwcGluZ0FycmF5LnNvbWUobWFwcGluZyA9PiBtYXBwaW5nLmdyb3VwSWQgPT09IGdyb3VwLmlkKSlcclxuXHRcdC5tYXAoZ3JvdXAgPT4gKHsgdGV4dDogZ3JvdXAubmFtZSwgdmFsdWU6IGdyb3VwLmlkIH0pKVxyXG5cclxuXHRyZXR1cm4gPD5cclxuXHRcdDxUYWJsZVxyXG5cdFx0XHRjb2x1bW5zPXtbXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0dGl0bGU6IFwiUHJpb3JpdHlcIixcclxuXHRcdFx0XHRcdGRhdGFJbmRleDogXCJwcmlvcml0eVwiLFxyXG5cdFx0XHRcdFx0d2lkdGg6IFwiMTAlXCIsXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHR0aXRsZTogXCJSb2xlc1wiLFxyXG5cdFx0XHRcdFx0ZmlsdGVyczogcm9sZUZpbHRlcnMsXHJcblx0XHRcdFx0XHRvbkZpbHRlcjogKHZhbHVlLCByZWNvcmQ6IFJvbGVNYXBwaW5nUmVjb3JkKSA9PiAoXHJcblx0XHRcdFx0XHRcdHJlY29yZC5yb2xlSWRzLmhhcyh2YWx1ZSBhcyBudW1iZXIpXHJcblx0XHRcdFx0XHQpLFxyXG5cdFx0XHRcdFx0cmVuZGVyOiAoXzogYW55LCByZWNvcmQ6IFJvbGVNYXBwaW5nUmVjb3JkKSA9PiAoXHJcblx0XHRcdFx0XHRcdFsuLi5yZWNvcmQucm9sZUlkc10ubWFwKGlkID0+IDxUYWcga2V5PXtpZH0+e3JvbGVzLmdldChpZCk/Lm5hbWUgPz8gaWR9PC9UYWc+KVxyXG5cdFx0XHRcdFx0KSxcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdHRpdGxlOiBcIkdyb3VwXCIsXHJcblx0XHRcdFx0XHR3aWR0aDogXCIzMCVcIixcclxuXHRcdFx0XHRcdGZpbHRlcnM6IGdyb3VwRmlsdGVycyxcclxuXHRcdFx0XHRcdG9uRmlsdGVyOiAodmFsdWUsIHJlY29yZDogUm9sZU1hcHBpbmdSZWNvcmQpID0+IChcclxuXHRcdFx0XHRcdFx0cmVjb3JkLmdyb3VwSWQgPT09IHZhbHVlXHJcblx0XHRcdFx0XHQpLFxyXG5cdFx0XHRcdFx0cmVuZGVyOiAoXzogYW55LCByZWNvcmQ6IFJvbGVNYXBwaW5nUmVjb3JkKSA9PiAoXHJcblx0XHRcdFx0XHRcdGdyb3Vwcy5nZXQocmVjb3JkLmdyb3VwSWQpPy5uYW1lID8/IHJlY29yZC5ncm91cElkXHJcblx0XHRcdFx0XHQpLFxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0dGl0bGU6IFwiRW5hYmxlZFwiLFxyXG5cdFx0XHRcdFx0d2lkdGg6IFwiMTAlXCIsXHJcblx0XHRcdFx0XHRmaWx0ZXJzOiBbXHJcblx0XHRcdFx0XHRcdHsgdGV4dDogXCJFbmFibGVkXCIsIHZhbHVlOiB0cnVlIH0sXHJcblx0XHRcdFx0XHRcdHsgdGV4dDogXCJEaXNhYmxlZFwiLCB2YWx1ZTogZmFsc2UgfSxcclxuXHRcdFx0XHRcdF0sXHJcblx0XHRcdFx0XHRvbkZpbHRlcjogKHZhbHVlLCByZWNvcmQ6IFJvbGVNYXBwaW5nUmVjb3JkKSA9PiAoXHJcblx0XHRcdFx0XHRcdHJlY29yZC5lbmFibGVkID09PSB2YWx1ZVxyXG5cdFx0XHRcdFx0KSxcclxuXHRcdFx0XHRcdHJlbmRlcjogKF86IGFueSwgcmVjb3JkOiBSb2xlTWFwcGluZ1JlY29yZCkgPT4gKFxyXG5cdFx0XHRcdFx0XHRyZWNvcmQuZW5hYmxlZCA/IFwiWWVzXCIgOiBcIk5vXCJcclxuXHRcdFx0XHRcdCksXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQuLi4oYWNjb3VudC5oYXNBbnlQZXJtaXNzaW9uKFxyXG5cdFx0XHRcdFx0XCJleHBfZ3JvdXBzLnJvbGVfbWFwcGluZy51cGRhdGVcIixcclxuXHRcdFx0XHRcdFwiZXhwX2dyb3Vwcy5yb2xlX21hcHBpbmcuZGVsZXRlXCIsXHJcblx0XHRcdFx0KSA/IFt7XHJcblx0XHRcdFx0XHR0aXRsZTogXCJBY3Rpb25zXCIsXHJcblx0XHRcdFx0XHR3aWR0aDogXCIxMCVcIixcclxuXHRcdFx0XHRcdHJlbmRlcjogKF86IGFueSwgcmVjb3JkOiBhbnkpID0+IChcclxuXHRcdFx0XHRcdFx0PFNwYWNlPlxyXG5cdFx0XHRcdFx0XHRcdHthY2NvdW50Lmhhc1Blcm1pc3Npb24oXCJleHBfZ3JvdXBzLnJvbGVfbWFwcGluZy51cGRhdGVcIikgJiYgPEJ1dHRvblxyXG5cdFx0XHRcdFx0XHRcdFx0aWNvbj17PEVkaXRPdXRsaW5lZCAvPn1cclxuXHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2V0RWRpdGluZyhyZWNvcmQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRzZXRPcGVuKHRydWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fX1cclxuXHRcdFx0XHRcdFx0XHQvPn1cclxuXHRcdFx0XHRcdFx0XHR7YWNjb3VudC5oYXNQZXJtaXNzaW9uKFwiZXhwX2dyb3Vwcy5yb2xlX21hcHBpbmcuZGVsZXRlXCIpICYmIDxEZWxldGVkQ29uZmlybVxyXG5cdFx0XHRcdFx0XHRcdFx0b25Db25maXJtPXsoKSA9PiBjb250cm9sLnNlbmQobmV3IFJvbGVNYXBwaW5nRGVsZXRlUmVxdWVzdChyZWNvcmQuaWQpKX1cclxuXHRcdFx0XHRcdFx0XHQvPn1cclxuXHRcdFx0XHRcdFx0PC9TcGFjZT5cclxuXHRcdFx0XHRcdCksXHJcblx0XHRcdFx0fV0gOiBbXSksXHJcblx0XHRcdF19XHJcblx0XHRcdGRhdGFTb3VyY2U9e3JvbGVNYXBwaW5nQXJyYXkuc29ydCgoYSwgYikgPT4gYi5wcmlvcml0eSAtIGEucHJpb3JpdHkpfVxyXG5cdFx0XHRsb2FkaW5nPXshcm9sZU1hcHBpbmdzU3luY2VkIHx8ICFncm91cHNTeW5jZWQgfHwgIXJvbGVzU3luY2VkfVxyXG5cdFx0XHRyb3dLZXk9eyhtKSA9PiBtLmlkfVxyXG5cdFx0XHRwYWdpbmF0aW9uPXtmYWxzZX1cclxuXHRcdC8+XHJcblxyXG5cdFx0PFJvbGVNYXBwaW5nRm9ybSBvcGVuPXtvcGVufSBzZXRPcGVuPXtzZXRPcGVufSBpbml0aWFsPXtlZGl0aW5nfSAvPlxyXG5cdDwvPjtcclxufVxyXG4iXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VDb250ZXh0IiwidXNlU3RhdGUiLCJUYWJsZSIsIkJ1dHRvbiIsIlNwYWNlIiwiVGFnIiwiRWRpdE91dGxpbmVkIiwiQ29udHJvbENvbnRleHQiLCJ1c2VBY2NvdW50IiwidXNlUm9sZXMiLCJSb2xlTWFwcGluZ0RlbGV0ZVJlcXVlc3QiLCJSb2xlTWFwcGluZ0Zvcm0iLCJEZWxldGVkQ29uZmlybSIsIlJvbGVNYXBwaW5nc1RhYmxlIiwiY29udHJvbCIsInBsdWdpbiIsInBsdWdpbnMiLCJnZXQiLCJhY2NvdW50Iiwicm9sZU1hcHBpbmdzIiwicm9sZU1hcHBpbmdzU3luY2VkIiwidXNlUm9sZU1hcHBpbmdzIiwiZ3JvdXBzIiwiZ3JvdXBzU3luY2VkIiwidXNlR3JvdXBzIiwicm9sZXMiLCJyb2xlc1N5bmNlZCIsImVkaXRpbmciLCJzZXRFZGl0aW5nIiwib3BlbiIsInNldE9wZW4iLCJyb2xlTWFwcGluZ0FycmF5IiwidmFsdWVzIiwicm9sZUZpbHRlcnMiLCJmaWx0ZXIiLCJyb2xlIiwic29tZSIsIm1hcHBpbmciLCJyb2xlSWRzIiwiaGFzIiwiaWQiLCJtYXAiLCJ0ZXh0IiwibmFtZSIsInZhbHVlIiwiZ3JvdXBGaWx0ZXJzIiwiZ3JvdXAiLCJncm91cElkIiwiY29sdW1ucyIsInRpdGxlIiwiZGF0YUluZGV4Iiwid2lkdGgiLCJmaWx0ZXJzIiwib25GaWx0ZXIiLCJyZWNvcmQiLCJyZW5kZXIiLCJfIiwiZW5hYmxlZCIsImhhc0FueVBlcm1pc3Npb24iLCJoYXNQZXJtaXNzaW9uIiwiaWNvbiIsIm9uQ2xpY2siLCJvbkNvbmZpcm0iLCJzZW5kIiwiZGF0YVNvdXJjZSIsInNvcnQiLCJhIiwiYiIsInByaW9yaXR5IiwibG9hZGluZyIsInJvd0tleSIsIm0iLCJwYWdpbmF0aW9uIiwiaW5pdGlhbCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///715\n\n}");
361
+
362
+ /***/ },
363
+
364
+ /***/ 769
365
+ /*!***********************!*\
366
+ !*** ./web/index.tsx ***!
367
+ \***********************/
368
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
369
+
370
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ WebPlugin: () => (/* binding */ WebPlugin)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ 878);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ 27);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _clusterio_web_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @clusterio/web_ui */ 388);\n/* harmony import */ var _clusterio_web_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! antd */ 537);\n/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(antd__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../messages */ 40);\n/* harmony import */ var _clusterio_lib__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @clusterio/lib */ 194);\n/* harmony import */ var _clusterio_lib__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_clusterio_lib__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _components_GroupsTable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/GroupsTable */ 520);\n/* harmony import */ var _components_AssignmentsTable__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/AssignmentsTable */ 560);\n/* harmony import */ var _components_RoleMappingsTable__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./components/RoleMappingsTable */ 715);\n/* harmony import */ var _components_GroupViewPage__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./components/GroupViewPage */ 639);\n/* harmony import */ var _components_GroupForm__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./components/GroupForm */ 587);\n/* harmony import */ var _components_RoleMappingForm__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./components/RoleMappingForm */ 124);\n/* harmony import */ var _components_AssignmentForm__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./components/AssignmentForm */ 275);\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction ExpGroupsPage() {\n const account = (0,_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_2__.useAccount)();\n const [groupOpen, setGroupOpen] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [assignmentOpen, setAssignmentOpen] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [roleMappingOpen, setRoleMappingOpen] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_2__.PageLayout, {\n nav: [\n {\n name: \"Permission Groups\"\n }\n ],\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_2__.PageHeader, {\n title: \"Permission Groups\"\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\index.tsx\",\n lineNumber: 25,\n columnNumber: 3\n }, this),\n account.hasPermission(\"exp_groups.group.list\") && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_2__.SectionHeader, {\n title: \"Groups\",\n extra: account.hasPermission(\"exp_groups.group.create\") ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_3__.Button, {\n type: \"primary\",\n onClick: ()=>setGroupOpen(true),\n children: \"Create\"\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\index.tsx\",\n lineNumber: 32,\n columnNumber: 9\n }, this) : undefined\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\index.tsx\",\n lineNumber: 28,\n columnNumber: 4\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_GroupsTable__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {}, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\index.tsx\",\n lineNumber: 36,\n columnNumber: 4\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_GroupForm__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n open: groupOpen,\n setOpen: setGroupOpen\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\index.tsx\",\n lineNumber: 37,\n columnNumber: 4\n }, this)\n ]\n }, void 0, true),\n account.hasPermission(\"exp_groups.role_mapping.list\") && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_2__.SectionHeader, {\n title: \"Role Mappings\",\n extra: account.hasPermission(\"exp_groups.role_mapping.create\") ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_3__.Button, {\n type: \"primary\",\n onClick: ()=>setRoleMappingOpen(true),\n children: \"Create\"\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\index.tsx\",\n lineNumber: 45,\n columnNumber: 9\n }, this) : undefined\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\index.tsx\",\n lineNumber: 41,\n columnNumber: 4\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_RoleMappingsTable__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {}, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\index.tsx\",\n lineNumber: 49,\n columnNumber: 4\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_RoleMappingForm__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n open: roleMappingOpen,\n setOpen: setRoleMappingOpen\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\index.tsx\",\n lineNumber: 50,\n columnNumber: 4\n }, this)\n ]\n }, void 0, true),\n account.hasPermission(\"exp_groups.assignment.list\") && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_clusterio_web_ui__WEBPACK_IMPORTED_MODULE_2__.SectionHeader, {\n title: \"Assignments\",\n extra: account.hasPermission(\"exp_groups.assignment.create\") ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(antd__WEBPACK_IMPORTED_MODULE_3__.Button, {\n type: \"primary\",\n onClick: ()=>setAssignmentOpen(true),\n children: \"Create\"\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\index.tsx\",\n lineNumber: 58,\n columnNumber: 9\n }, this) : undefined\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\index.tsx\",\n lineNumber: 54,\n columnNumber: 4\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_AssignmentsTable__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {}, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\index.tsx\",\n lineNumber: 62,\n columnNumber: 4\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_AssignmentForm__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n open: assignmentOpen,\n setOpen: setAssignmentOpen\n }, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\index.tsx\",\n lineNumber: 63,\n columnNumber: 4\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\index.tsx\",\n lineNumber: 24,\n columnNumber: 9\n }, this);\n}\nclass WebPlugin extends _clusterio_web_ui__WEBPACK_IMPORTED_MODULE_2__.BaseWebPlugin {\n groups = new _clusterio_lib__WEBPACK_IMPORTED_MODULE_5__.MapSubscriber(_messages__WEBPACK_IMPORTED_MODULE_4__.GroupUpdatedEvent, this.control);\n assignments = new _clusterio_lib__WEBPACK_IMPORTED_MODULE_5__.MapSubscriber(_messages__WEBPACK_IMPORTED_MODULE_4__.ManualAssignmentUpdatedEvent, this.control);\n roleMappings = new _clusterio_lib__WEBPACK_IMPORTED_MODULE_5__.MapSubscriber(_messages__WEBPACK_IMPORTED_MODULE_4__.RoleMappingUpdatedEvent, this.control);\n async init() {\n this.pages = [\n {\n path: \"/permission_groups\",\n sidebarName: \"Permission Groups\",\n permission: (account)=>account.hasAnyPermission(\"exp_groups.group.list\", \"exp_groups.assignment.list\", \"exp_groups.role_mapping.list\"),\n content: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(ExpGroupsPage, {}, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\index.tsx\",\n lineNumber: 83,\n columnNumber: 14\n }, this)\n },\n {\n path: \"/permission_groups/:id/view\",\n sidebarPath: \"/permission_groups\",\n permission: \"exp_groups.group.get\",\n content: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_GroupViewPage__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {}, void 0, false, {\n fileName: \"C:\\\\Development\\\\Clusterio-dev\\\\external_plugins\\\\ExpCluster\\\\exp_groups\\\\web\\\\index.tsx\",\n lineNumber: 89,\n columnNumber: 14\n }, this)\n }\n ];\n }\n useGroups() {\n const subscribe = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((cb)=>this.groups.subscribe(cb), []);\n return (0,react__WEBPACK_IMPORTED_MODULE_1__.useSyncExternalStore)(subscribe, ()=>this.groups.getSnapshot());\n }\n useAssignments() {\n const subscribe = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((cb)=>this.assignments.subscribe(cb), []);\n return (0,react__WEBPACK_IMPORTED_MODULE_1__.useSyncExternalStore)(subscribe, ()=>this.assignments.getSnapshot());\n }\n useRoleMappings() {\n const subscribe = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((cb)=>this.roleMappings.subscribe(cb), []);\n return (0,react__WEBPACK_IMPORTED_MODULE_1__.useSyncExternalStore)(subscribe, ()=>this.roleMappings.getSnapshot());\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFvQkEsQ0FBQ29ELFdBQVcsSUFBTSxJQUFJLENBQUNqQixNQUFNLENBQUNtQixXQUFXO0lBQ3JFO0lBRUFDLGlCQUFpQjtRQUNoQixNQUFNSCxZQUFZckQsa0RBQVdBLENBQUMsQ0FBQ3NELEtBQW1CLElBQUksQ0FBQ2QsV0FBVyxDQUFDYSxTQUFTLENBQUNDLEtBQUssRUFBRTtRQUNwRixPQUFPckQsMkRBQW9CQSxDQUFDb0QsV0FBVyxJQUFNLElBQUksQ0FBQ2IsV0FBVyxDQUFDZSxXQUFXO0lBQzFFO0lBRUFFLGtCQUFrQjtRQUNqQixNQUFNSixZQUFZckQsa0RBQVdBLENBQUMsQ0FBQ3NELEtBQW1CLElBQUksQ0FBQ1osWUFBWSxDQUFDVyxTQUFTLENBQUNDLEtBQUssRUFBRTtRQUNyRixPQUFPckQsMkRBQW9CQSxDQUFDb0QsV0FBVyxJQUFNLElBQUksQ0FBQ1gsWUFBWSxDQUFDYSxXQUFXO0lBQzNFO0FBQ0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZXhwY2x1c3Rlci9wZXJtaXNzaW9uLWdyb3Vwcy8uL3dlYi9pbmRleC50c3g/ZTRjYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VTeW5jRXh0ZXJuYWxTdG9yZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBCYXNlV2ViUGx1Z2luLCBQYWdlTGF5b3V0LCBQYWdlSGVhZGVyLCB1c2VBY2NvdW50LCBTZWN0aW9uSGVhZGVyIH0gZnJvbSBcIkBjbHVzdGVyaW8vd2ViX3VpXCI7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCJhbnRkXCI7XHJcblxyXG5pbXBvcnQgKiBhcyBtZXNzYWdlcyBmcm9tIFwiLi4vbWVzc2FnZXNcIjtcclxuaW1wb3J0ICogYXMgbGliIGZyb20gXCJAY2x1c3RlcmlvL2xpYlwiO1xyXG5cclxuaW1wb3J0IEdyb3Vwc1RhYmxlIGZyb20gXCIuL2NvbXBvbmVudHMvR3JvdXBzVGFibGVcIjtcclxuaW1wb3J0IEFzc2lnbm1lbnRzVGFibGUgZnJvbSBcIi4vY29tcG9uZW50cy9Bc3NpZ25tZW50c1RhYmxlXCI7XHJcbmltcG9ydCBSb2xlTWFwcGluZ3NUYWJsZSBmcm9tIFwiLi9jb21wb25lbnRzL1JvbGVNYXBwaW5nc1RhYmxlXCI7XHJcbmltcG9ydCBHcm91cFZpZXdQYWdlIGZyb20gXCIuL2NvbXBvbmVudHMvR3JvdXBWaWV3UGFnZVwiO1xyXG5pbXBvcnQgR3JvdXBGb3JtIGZyb20gXCIuL2NvbXBvbmVudHMvR3JvdXBGb3JtXCI7XHJcbmltcG9ydCBSb2xlTWFwcGluZ0Zvcm0gZnJvbSBcIi4vY29tcG9uZW50cy9Sb2xlTWFwcGluZ0Zvcm1cIjtcclxuaW1wb3J0IEFzc2lnbm1lbnRGb3JtIGZyb20gXCIuL2NvbXBvbmVudHMvQXNzaWdubWVudEZvcm1cIjtcclxuXHJcblxyXG5mdW5jdGlvbiBFeHBHcm91cHNQYWdlKCkge1xyXG5cdGNvbnN0IGFjY291bnQgPSB1c2VBY2NvdW50KCk7XHJcblxyXG5cdGNvbnN0IFtncm91cE9wZW4sIHNldEdyb3VwT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcblx0Y29uc3QgW2Fzc2lnbm1lbnRPcGVuLCBzZXRBc3NpZ25tZW50T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcblx0Y29uc3QgW3JvbGVNYXBwaW5nT3Blbiwgc2V0Um9sZU1hcHBpbmdPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuXHJcblx0cmV0dXJuIDxQYWdlTGF5b3V0IG5hdj17W3sgbmFtZTogXCJQZXJtaXNzaW9uIEdyb3Vwc1wiIH1dfT5cclxuXHRcdDxQYWdlSGVhZGVyIHRpdGxlPVwiUGVybWlzc2lvbiBHcm91cHNcIiAvPlxyXG5cclxuXHRcdHthY2NvdW50Lmhhc1Blcm1pc3Npb24oXCJleHBfZ3JvdXBzLmdyb3VwLmxpc3RcIikgJiYgPD5cclxuXHRcdFx0PFNlY3Rpb25IZWFkZXJcclxuXHRcdFx0XHR0aXRsZT1cIkdyb3Vwc1wiXHJcblx0XHRcdFx0ZXh0cmE9e1xyXG5cdFx0XHRcdFx0YWNjb3VudC5oYXNQZXJtaXNzaW9uKFwiZXhwX2dyb3Vwcy5ncm91cC5jcmVhdGVcIilcclxuXHRcdFx0XHRcdFx0PyA8QnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgb25DbGljaz17KCkgPT4gc2V0R3JvdXBPcGVuKHRydWUpfT5DcmVhdGU8L0J1dHRvbj5cclxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWRcclxuXHRcdFx0XHR9XHJcblx0XHRcdC8+XHJcblx0XHRcdDxHcm91cHNUYWJsZSAvPlxyXG5cdFx0XHQ8R3JvdXBGb3JtIG9wZW49e2dyb3VwT3Blbn0gc2V0T3Blbj17c2V0R3JvdXBPcGVufSAvPlxyXG5cdFx0PC8+fVxyXG5cclxuXHRcdHthY2NvdW50Lmhhc1Blcm1pc3Npb24oXCJleHBfZ3JvdXBzLnJvbGVfbWFwcGluZy5saXN0XCIpICYmIDw+XHJcblx0XHRcdDxTZWN0aW9uSGVhZGVyXHJcblx0XHRcdFx0dGl0bGU9XCJSb2xlIE1hcHBpbmdzXCJcclxuXHRcdFx0XHRleHRyYT17XHJcblx0XHRcdFx0XHRhY2NvdW50Lmhhc1Blcm1pc3Npb24oXCJleHBfZ3JvdXBzLnJvbGVfbWFwcGluZy5jcmVhdGVcIilcclxuXHRcdFx0XHRcdFx0PyA8QnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgb25DbGljaz17KCkgPT4gc2V0Um9sZU1hcHBpbmdPcGVuKHRydWUpfT5DcmVhdGU8L0J1dHRvbj5cclxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWRcclxuXHRcdFx0XHR9XHJcblx0XHRcdC8+XHJcblx0XHRcdDxSb2xlTWFwcGluZ3NUYWJsZSAvPlxyXG5cdFx0XHQ8Um9sZU1hcHBpbmdGb3JtIG9wZW49e3JvbGVNYXBwaW5nT3Blbn0gc2V0T3Blbj17c2V0Um9sZU1hcHBpbmdPcGVufSAvPlxyXG5cdFx0PC8+fVxyXG5cclxuXHRcdHthY2NvdW50Lmhhc1Blcm1pc3Npb24oXCJleHBfZ3JvdXBzLmFzc2lnbm1lbnQubGlzdFwiKSAmJiA8PlxyXG5cdFx0XHQ8U2VjdGlvbkhlYWRlclxyXG5cdFx0XHRcdHRpdGxlPVwiQXNzaWdubWVudHNcIlxyXG5cdFx0XHRcdGV4dHJhPXtcclxuXHRcdFx0XHRcdGFjY291bnQuaGFzUGVybWlzc2lvbihcImV4cF9ncm91cHMuYXNzaWdubWVudC5jcmVhdGVcIilcclxuXHRcdFx0XHRcdFx0PyA8QnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgb25DbGljaz17KCkgPT4gc2V0QXNzaWdubWVudE9wZW4odHJ1ZSl9PkNyZWF0ZTwvQnV0dG9uPlxyXG5cdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZFxyXG5cdFx0XHRcdH1cclxuXHRcdFx0Lz5cclxuXHRcdFx0PEFzc2lnbm1lbnRzVGFibGUgLz5cclxuXHRcdFx0PEFzc2lnbm1lbnRGb3JtIG9wZW49e2Fzc2lnbm1lbnRPcGVufSBzZXRPcGVuPXtzZXRBc3NpZ25tZW50T3Blbn0gLz5cclxuXHRcdDwvPn1cclxuXHQ8L1BhZ2VMYXlvdXQ+O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgV2ViUGx1Z2luIGV4dGVuZHMgQmFzZVdlYlBsdWdpbiB7XHJcblx0Z3JvdXBzID0gbmV3IGxpYi5NYXBTdWJzY3JpYmVyKG1lc3NhZ2VzLkdyb3VwVXBkYXRlZEV2ZW50LCB0aGlzLmNvbnRyb2wpO1xyXG5cdGFzc2lnbm1lbnRzID0gbmV3IGxpYi5NYXBTdWJzY3JpYmVyKG1lc3NhZ2VzLk1hbnVhbEFzc2lnbm1lbnRVcGRhdGVkRXZlbnQsIHRoaXMuY29udHJvbCk7XHJcblx0cm9sZU1hcHBpbmdzID0gbmV3IGxpYi5NYXBTdWJzY3JpYmVyKG1lc3NhZ2VzLlJvbGVNYXBwaW5nVXBkYXRlZEV2ZW50LCB0aGlzLmNvbnRyb2wpO1xyXG5cclxuXHRhc3luYyBpbml0KCkge1xyXG5cdFx0dGhpcy5wYWdlcyA9IFtcclxuXHRcdFx0e1xyXG5cdFx0XHRcdHBhdGg6IFwiL3Blcm1pc3Npb25fZ3JvdXBzXCIsXHJcblx0XHRcdFx0c2lkZWJhck5hbWU6IFwiUGVybWlzc2lvbiBHcm91cHNcIixcclxuXHRcdFx0XHRwZXJtaXNzaW9uOiAoYWNjb3VudCA9PiBhY2NvdW50Lmhhc0FueVBlcm1pc3Npb24oXHJcbiAgICAgICAgICAgICAgICAgICAgXCJleHBfZ3JvdXBzLmdyb3VwLmxpc3RcIixcclxuICAgICAgICAgICAgICAgICAgICBcImV4cF9ncm91cHMuYXNzaWdubWVudC5saXN0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJleHBfZ3JvdXBzLnJvbGVfbWFwcGluZy5saXN0XCIsXHJcbiAgICAgICAgICAgICAgICApKSxcclxuXHRcdFx0XHRjb250ZW50OiA8RXhwR3JvdXBzUGFnZSAvPixcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdHBhdGg6IFwiL3Blcm1pc3Npb25fZ3JvdXBzLzppZC92aWV3XCIsXHJcblx0XHRcdFx0c2lkZWJhclBhdGg6IFwiL3Blcm1pc3Npb25fZ3JvdXBzXCIsXHJcblx0XHRcdFx0cGVybWlzc2lvbjogXCJleHBfZ3JvdXBzLmdyb3VwLmdldFwiLFxyXG5cdFx0XHRcdGNvbnRlbnQ6IDxHcm91cFZpZXdQYWdlIC8+LFxyXG5cdFx0XHR9LFxyXG5cdFx0XTtcclxuXHR9XHJcblxyXG5cdHVzZUdyb3VwcygpIHtcclxuXHRcdGNvbnN0IHN1YnNjcmliZSA9IHVzZUNhbGxiYWNrKChjYjogKCkgPT4gdm9pZCkgPT4gdGhpcy5ncm91cHMuc3Vic2NyaWJlKGNiKSwgW10pO1xyXG5cdFx0cmV0dXJuIHVzZVN5bmNFeHRlcm5hbFN0b3JlKHN1YnNjcmliZSwgKCkgPT4gdGhpcy5ncm91cHMuZ2V0U25hcHNob3QoKSk7XHJcblx0fVxyXG5cclxuXHR1c2VBc3NpZ25tZW50cygpIHtcclxuXHRcdGNvbnN0IHN1YnNjcmliZSA9IHVzZUNhbGxiYWNrKChjYjogKCkgPT4gdm9pZCkgPT4gdGhpcy5hc3NpZ25tZW50cy5zdWJzY3JpYmUoY2IpLCBbXSk7XHJcblx0XHRyZXR1cm4gdXNlU3luY0V4dGVybmFsU3RvcmUoc3Vic2NyaWJlLCAoKSA9PiB0aGlzLmFzc2lnbm1lbnRzLmdldFNuYXBzaG90KCkpO1xyXG5cdH1cclxuXHJcblx0dXNlUm9sZU1hcHBpbmdzKCkge1xyXG5cdFx0Y29uc3Qgc3Vic2NyaWJlID0gdXNlQ2FsbGJhY2soKGNiOiAoKSA9PiB2b2lkKSA9PiB0aGlzLnJvbGVNYXBwaW5ncy5zdWJzY3JpYmUoY2IpLCBbXSk7XHJcblx0XHRyZXR1cm4gdXNlU3luY0V4dGVybmFsU3RvcmUoc3Vic2NyaWJlLCAoKSA9PiB0aGlzLnJvbGVNYXBwaW5ncy5nZXRTbmFwc2hvdCgpKTtcclxuXHR9XHJcbn1cclxuIl0sIm5hbWVzIjpbIlJlYWN0IiwidXNlU3RhdGUiLCJ1c2VDYWxsYmFjayIsInVzZVN5bmNFeHRlcm5hbFN0b3JlIiwiQmFzZVdlYlBsdWdpbiIsIlBhZ2VMYXlvdXQiLCJQYWdlSGVhZGVyIiwidXNlQWNjb3VudCIsIlNlY3Rpb25IZWFkZXIiLCJCdXR0b24iLCJtZXNzYWdlcyIsImxpYiIsIkdyb3Vwc1RhYmxlIiwiQXNzaWdubWVudHNUYWJsZSIsIlJvbGVNYXBwaW5nc1RhYmxlIiwiR3JvdXBWaWV3UGFnZSIsIkdyb3VwRm9ybSIsIlJvbGVNYXBwaW5nRm9ybSIsIkFzc2lnbm1lbnRGb3JtIiwiRXhwR3JvdXBzUGFnZSIsImFjY291bnQiLCJncm91cE9wZW4iLCJzZXRHcm91cE9wZW4iLCJhc3NpZ25tZW50T3BlbiIsInNldEFzc2lnbm1lbnRPcGVuIiwicm9sZU1hcHBpbmdPcGVuIiwic2V0Um9sZU1hcHBpbmdPcGVuIiwibmF2IiwibmFtZSIsInRpdGxlIiwiaGFzUGVybWlzc2lvbiIsImV4dHJhIiwidHlwZSIsIm9uQ2xpY2siLCJ1bmRlZmluZWQiLCJvcGVuIiwic2V0T3BlbiIsIldlYlBsdWdpbiIsImdyb3VwcyIsIk1hcFN1YnNjcmliZXIiLCJHcm91cFVwZGF0ZWRFdmVudCIsImNvbnRyb2wiLCJhc3NpZ25tZW50cyIsIk1hbnVhbEFzc2lnbm1lbnRVcGRhdGVkRXZlbnQiLCJyb2xlTWFwcGluZ3MiLCJSb2xlTWFwcGluZ1VwZGF0ZWRFdmVudCIsImluaXQiLCJwYWdlcyIsInBhdGgiLCJzaWRlYmFyTmFtZSIsInBlcm1pc3Npb24iLCJoYXNBbnlQZXJtaXNzaW9uIiwiY29udGVudCIsInNpZGViYXJQYXRoIiwidXNlR3JvdXBzIiwic3Vic2NyaWJlIiwiY2IiLCJnZXRTbmFwc2hvdCIsInVzZUFzc2lnbm1lbnRzIiwidXNlUm9sZU1hcHBpbmdzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///769\n\n}");
371
+
372
+ /***/ },
373
+
374
+ /***/ 882
375
+ /*!******************************************************************************!*\
376
+ !*** ../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs ***!
377
+ \******************************************************************************/
378
+ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
379
+
380
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ clsx: () => (/* binding */ clsx),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (clsx);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODgyLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsY0FBYyxhQUFhLCtDQUErQyxnREFBZ0QsZUFBZSxRQUFRLElBQUksMENBQTBDLHlDQUF5QyxTQUFnQixnQkFBZ0Isd0NBQXdDLElBQUksbURBQW1ELFNBQVMsaUVBQWUsSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovL0BleHBjbHVzdGVyL3Blcm1pc3Npb24tZ3JvdXBzLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jbHN4QDIuMS4xL25vZGVfbW9kdWxlcy9jbHN4L2Rpc3QvY2xzeC5tanM/MzZiYSJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiByKGUpe3ZhciB0LGYsbj1cIlwiO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlfHxcIm51bWJlclwiPT10eXBlb2YgZSluKz1lO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIGUpaWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIG89ZS5sZW5ndGg7Zm9yKHQ9MDt0PG87dCsrKWVbdF0mJihmPXIoZVt0XSkpJiYobiYmKG4rPVwiIFwiKSxuKz1mKX1lbHNlIGZvcihmIGluIGUpZVtmXSYmKG4mJihuKz1cIiBcIiksbis9Zik7cmV0dXJuIG59ZXhwb3J0IGZ1bmN0aW9uIGNsc3goKXtmb3IodmFyIGUsdCxmPTAsbj1cIlwiLG89YXJndW1lbnRzLmxlbmd0aDtmPG87ZisrKShlPWFyZ3VtZW50c1tmXSkmJih0PXIoZSkpJiYobiYmKG4rPVwiIFwiKSxuKz10KTtyZXR1cm4gbn1leHBvcnQgZGVmYXVsdCBjbHN4OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///882\n\n}");
381
+
382
+ /***/ }
383
+
384
+ /******/ });
385
+ /************************************************************************/
386
+ /******/ // The module cache
387
+ /******/ const __webpack_module_cache__ = {};
388
+ /******/
389
+ /******/ // The require function
390
+ /******/ function __webpack_require__(moduleId) {
391
+ /******/ // Check if module is in cache
392
+ /******/ const cachedModule = __webpack_module_cache__[moduleId];
393
+ /******/ if (cachedModule !== undefined) {
394
+ /******/ return cachedModule.exports;
395
+ /******/ }
396
+ /******/ // Create a new module (and put it into the cache)
397
+ /******/ const module = __webpack_module_cache__[moduleId] = {
398
+ /******/ // no module.id needed
399
+ /******/ // no module.loaded needed
400
+ /******/ exports: {}
401
+ /******/ };
402
+ /******/
403
+ /******/ // Execute the module function
404
+ /******/ if (!(moduleId in __webpack_modules__)) {
405
+ /******/ delete __webpack_module_cache__[moduleId];
406
+ /******/ const e = new Error("Cannot find module '" + moduleId + "'");
407
+ /******/ e.code = 'MODULE_NOT_FOUND';
408
+ /******/ throw e;
409
+ /******/ }
410
+ /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
411
+ /******/
412
+ /******/ // Return the exports of the module
413
+ /******/ return module.exports;
414
+ /******/ }
415
+ /******/
416
+ /******/ // expose the modules object (__webpack_modules__)
417
+ /******/ __webpack_require__.m = __webpack_modules__;
418
+ /******/
419
+ /******/ // expose the module cache
420
+ /******/ __webpack_require__.c = __webpack_module_cache__;
421
+ /******/
422
+ /************************************************************************/
423
+ /******/ /* webpack/runtime/compat get default export */
424
+ /******/ // getDefaultExport function for compatibility with non-harmony modules
425
+ /******/ __webpack_require__.n = (module) => {
426
+ /******/ const getter = module && module.__esModule ?
427
+ /******/ () => (module['default']) :
428
+ /******/ () => (module);
429
+ /******/ __webpack_require__.d(getter, { a: getter });
430
+ /******/ return getter;
431
+ /******/ };
432
+ /******/
433
+ /******/ /* webpack/runtime/define property getters */
434
+ /******/ // define getter/value functions for harmony exports
435
+ /******/ __webpack_require__.d = (exports, definition) => {
436
+ /******/ for(var key in definition) {
437
+ /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
438
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
439
+ /******/ }
440
+ /******/ }
441
+ /******/ };
442
+ /******/
443
+ /******/ /* webpack/runtime/hasOwnProperty shorthand */
444
+ /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop));
445
+ /******/
446
+ /******/ /* webpack/runtime/make namespace object */
447
+ /******/ // define __esModule on exports
448
+ /******/ __webpack_require__.r = (exports) => {
449
+ /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
450
+ /******/ Object.defineProperty(exports, '__esModule', { value: true });
451
+ /******/ };
452
+ /******/
453
+ /******/ /* webpack/runtime/sharing */
454
+ /******/ (() => {
455
+ /******/ __webpack_require__.S = {};
456
+ /******/ const initPromises = {};
457
+ /******/ const initTokens = {};
458
+ /******/ __webpack_require__.I = (name, initScope) => {
459
+ /******/ if(!initScope) initScope = [];
460
+ /******/ // handling circular init calls
461
+ /******/ let initToken = initTokens[name];
462
+ /******/ if(!initToken) initToken = initTokens[name] = {};
463
+ /******/ if(initScope.indexOf(initToken) >= 0) return;
464
+ /******/ initScope.push(initToken);
465
+ /******/ // only runs once
466
+ /******/ if(initPromises[name]) return initPromises[name];
467
+ /******/ // creates a new share scope if needed
468
+ /******/ if(!__webpack_require__.o(__webpack_require__.S, name)) __webpack_require__.S[name] = {};
469
+ /******/ // runs all init snippets from all modules reachable
470
+ /******/ const scope = __webpack_require__.S[name];
471
+ /******/ const warn = (msg) => {
472
+ /******/ if (typeof console !== "undefined" && console.warn) console.warn(msg);
473
+ /******/ };
474
+ /******/ const uniqueName = "@expcluster/permission-groups";
475
+ /******/ const register = (name, version, factory, eager) => {
476
+ /******/ const versions = scope[name] = scope[name] || {};
477
+ /******/ const activeVersion = versions[version];
478
+ /******/ if(!activeVersion || (!activeVersion.loaded && (!eager != !activeVersion.eager ? eager : uniqueName > activeVersion.from))) versions[version] = { get: factory, from: uniqueName, eager: !!eager };
479
+ /******/ };
480
+ /******/ const initExternal = (id) => {
481
+ /******/ const handleError = (err) => (warn("Initialization of sharing external failed: " + err));
482
+ /******/ try {
483
+ /******/ const module = __webpack_require__(id);
484
+ /******/ if(!module) return;
485
+ /******/ const initFn = (module) => (module && module.init && module.init(__webpack_require__.S[name], initScope))
486
+ /******/ if(module.then) return promises.push(module.then(initFn, handleError));
487
+ /******/ const initResult = initFn(module);
488
+ /******/ if(initResult?.then) return promises.push(initResult['catch'](handleError));
489
+ /******/ } catch(err) { handleError(err); }
490
+ /******/ }
491
+ /******/ const promises = [];
492
+ /******/ switch(name) {
493
+ /******/ }
494
+ /******/ if(!promises.length) return initPromises[name] = 1;
495
+ /******/ return initPromises[name] = Promise.all(promises).then(() => (initPromises[name] = 1));
496
+ /******/ };
497
+ /******/ })();
498
+ /******/
499
+ /******/ /* webpack/runtime/consumes */
500
+ /******/ (() => {
501
+ /******/ var parseVersion = (str) => {
502
+ /******/ // see webpack/lib/util/semver.js for original code
503
+ /******/ var p=p=>{return p.split(".").map(p=>{return+p==p?+p:p})},n=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(str),r=n[1]?p(n[1]):[];return n[2]&&(r.length++,r.push.apply(r,p(n[2]))),n[3]&&(r.push([]),r.push.apply(r,p(n[3]))),r;
504
+ /******/ }
505
+ /******/ var versionLt = (a, b) => {
506
+ /******/ // see webpack/lib/util/semver.js for original code
507
+ /******/ a=parseVersion(a),b=parseVersion(b);for(var r=0;;){if(r>=a.length)return r<b.length&&"u"!=(typeof b[r])[0];var e=a[r],n=(typeof e)[0];if(r>=b.length)return"u"==n;var t=b[r],f=(typeof t)[0];if(n!=f)return"o"==n&&"n"==f||("s"==f||"u"==n);if("o"!=n&&"u"!=n&&e!=t)return e<t;r++}
508
+ /******/ }
509
+ /******/ var rangeToString = (range) => {
510
+ /******/ // see webpack/lib/util/semver.js for original code
511
+ /******/ var r=range[0],n="";if(1===range.length)return"*";if(r+.5){n+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var e=1,a=1;a<range.length;a++){e--,n+="u"==(typeof(t=range[a]))[0]?"-":(e>0?".":"")+(e=2,t)}return n}var g=[];for(a=1;a<range.length;a++){var t=range[a];g.push(0===t?"not("+o()+")":1===t?"("+o()+" || "+o()+")":2===t?g.pop()+" "+g.pop():rangeToString(t))}return o();function o(){return g.pop().replace(/^\((.+)\)$/,"$1")}
512
+ /******/ }
513
+ /******/ var satisfy = (range, version) => {
514
+ /******/ // see webpack/lib/util/semver.js for original code
515
+ /******/ if(0 in range){version=parseVersion(version);var e=range[0],r=e<0;r&&(e=-e-1);for(var n=0,i=1,a=!0;;i++,n++){var f,s,g=i<range.length?(typeof range[i])[0]:"";if(n>=version.length||"o"==(s=(typeof(f=version[n]))[0]))return!a||("u"==g?i>e&&!r:""==g!=r);if("u"==s){if(!a||"u"!=g)return!1}else if(a)if(g==s)if(i<=e){if(f!=range[i])return!1}else{if(r?f>range[i]:f<range[i])return!1;f!=range[i]&&(a=!1)}else if("s"!=g&&"n"!=g){if(r||i<=e)return!1;a=!1,i--}else{if(i<=e||s<g!=r)return!1;a=!1}else"s"!=g&&"n"!=g&&(a=!1,i--)}}var t=[],o=t.pop.bind(t);for(n=1;n<range.length;n++){var u=range[n];t.push(1==u?o()|o():2==u?o()&o():u?satisfy(u,version):!o())}return!!o();
516
+ /******/ }
517
+ /******/ const exists = (scope, key) => {
518
+ /******/ return scope && __webpack_require__.o(scope, key);
519
+ /******/ }
520
+ /******/ const get = (entry) => {
521
+ /******/ entry.loaded = 1;
522
+ /******/ return entry.get()
523
+ /******/ };
524
+ /******/ const eagerOnly = (versions) => {
525
+ /******/ return Object.keys(versions).reduce((filtered, version) => {
526
+ /******/ if (versions[version].eager) {
527
+ /******/ filtered[version] = versions[version];
528
+ /******/ }
529
+ /******/ return filtered;
530
+ /******/ }, {});
531
+ /******/ };
532
+ /******/ const findLatestVersion = (scope, key, eager) => {
533
+ /******/ const versions = eager ? eagerOnly(scope[key]) : scope[key];
534
+ /******/ var key = Object.keys(versions).reduce((a, b) => {
535
+ /******/ return !a || versionLt(a, b) ? b : a;
536
+ /******/ }, 0);
537
+ /******/ return key && versions[key];
538
+ /******/ };
539
+ /******/ const findSatisfyingVersion = (scope, key, requiredVersion, eager) => {
540
+ /******/ const versions = eager ? eagerOnly(scope[key]) : scope[key];
541
+ /******/ var key = Object.keys(versions).reduce((a, b) => {
542
+ /******/ if (!satisfy(requiredVersion, b)) return a;
543
+ /******/ return !a || versionLt(a, b) ? b : a;
544
+ /******/ }, 0);
545
+ /******/ return key && versions[key]
546
+ /******/ };
547
+ /******/ const findSingletonVersionKey = (scope, key, eager) => {
548
+ /******/ const versions = eager ? eagerOnly(scope[key]) : scope[key];
549
+ /******/ return Object.keys(versions).reduce((a, b) => {
550
+ /******/ return !a || (!versions[a].loaded && versionLt(a, b)) ? b : a;
551
+ /******/ }, 0);
552
+ /******/ };
553
+ /******/ const getInvalidSingletonVersionMessage = (scope, key, version, requiredVersion) => {
554
+ /******/ return "Unsatisfied version " + version + " from " + (version && scope[key][version].from) + " of shared singleton module " + key + " (required " + rangeToString(requiredVersion) + ")"
555
+ /******/ };
556
+ /******/ const getInvalidVersionMessage = (scope, scopeName, key, requiredVersion, eager) => {
557
+ /******/ const versions = scope[key];
558
+ /******/ return "No satisfying version (" + rangeToString(requiredVersion) + ")" + (eager ? " for eager consumption" : "") + " of shared module " + key + " found in shared scope " + scopeName + ".\n" +
559
+ /******/ "Available versions: " + Object.keys(versions).map((key) => {
560
+ /******/ return key + " from " + versions[key].from;
561
+ /******/ }).join(", ");
562
+ /******/ };
563
+ /******/ const fail = (msg) => {
564
+ /******/ throw new Error(msg);
565
+ /******/ }
566
+ /******/ const failAsNotExist = (scopeName, key) => {
567
+ /******/ return fail("Shared module " + key + " doesn't exist in shared scope " + scopeName);
568
+ /******/ }
569
+ /******/ const warn = /*#__PURE__*/ (msg) => {
570
+ /******/ if (typeof console !== "undefined" && console.warn) console.warn(msg);
571
+ /******/ };
572
+ /******/ const init = (fn) => (function(scopeName, key, eager, c, d) {
573
+ /******/ const promise = __webpack_require__.I(scopeName);
574
+ /******/ if (promise?.then && !eager) {
575
+ /******/ return promise.then(fn.bind(fn, scopeName, __webpack_require__.S[scopeName], key, false, c, d));
576
+ /******/ }
577
+ /******/ return fn(scopeName, __webpack_require__.S[scopeName], key, eager, c, d);
578
+ /******/ });
579
+ /******/
580
+ /******/ const useFallback = (scopeName, key, fallback) => {
581
+ /******/ return fallback ? fallback() : failAsNotExist(scopeName, key);
582
+ /******/ }
583
+ /******/ const load = /*#__PURE__*/ init((scopeName, scope, key, eager, fallback) => {
584
+ /******/ if (!exists(scope, key)) return useFallback(scopeName, key, fallback);
585
+ /******/ return get(findLatestVersion(scope, key, eager));
586
+ /******/ });
587
+ /******/ const loadVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => {
588
+ /******/ if (!exists(scope, key)) return useFallback(scopeName, key, fallback);
589
+ /******/ const satisfyingVersion = findSatisfyingVersion(scope, key, requiredVersion, eager);
590
+ /******/ if (satisfyingVersion) return get(satisfyingVersion);
591
+ /******/ warn(getInvalidVersionMessage(scope, scopeName, key, requiredVersion, eager))
592
+ /******/ return get(findLatestVersion(scope, key, eager));
593
+ /******/ });
594
+ /******/ const loadStrictVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => {
595
+ /******/ if (!exists(scope, key)) return useFallback(scopeName, key, fallback);
596
+ /******/ const satisfyingVersion = findSatisfyingVersion(scope, key, requiredVersion, eager);
597
+ /******/ if (satisfyingVersion) return get(satisfyingVersion);
598
+ /******/ if (fallback) return fallback();
599
+ /******/ fail(getInvalidVersionMessage(scope, scopeName, key, requiredVersion, eager));
600
+ /******/ });
601
+ /******/ const loadSingleton = /*#__PURE__*/ init((scopeName, scope, key, eager, fallback) => {
602
+ /******/ if (!exists(scope, key)) return useFallback(scopeName, key, fallback);
603
+ /******/ const version = findSingletonVersionKey(scope, key, eager);
604
+ /******/ return get(scope[key][version]);
605
+ /******/ });
606
+ /******/ const loadSingletonVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => {
607
+ /******/ if (!exists(scope, key)) return useFallback(scopeName, key, fallback);
608
+ /******/ const version = findSingletonVersionKey(scope, key, eager);
609
+ /******/ if (!satisfy(requiredVersion, version)) {
610
+ /******/ warn(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));
611
+ /******/ }
612
+ /******/ return get(scope[key][version]);
613
+ /******/ });
614
+ /******/ const loadStrictSingletonVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => {
615
+ /******/ if (!exists(scope, key)) return useFallback(scopeName, key, fallback);
616
+ /******/ const version = findSingletonVersionKey(scope, key, eager);
617
+ /******/ if (!satisfy(requiredVersion, version)) {
618
+ /******/ fail(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));
619
+ /******/ }
620
+ /******/ return get(scope[key][version]);
621
+ /******/ });
622
+ /******/ const installedModules = {};
623
+ /******/ const moduleToHandlerMapping = {
624
+ /******/ 27: () => (load("default", "react", false)),
625
+ /******/ 194: () => (load("default", "@clusterio/lib", false)),
626
+ /******/ 226: () => (load("default", "react-router-dom", false)),
627
+ /******/ 388: () => (load("default", "@clusterio/web_ui", false)),
628
+ /******/ 533: () => (loadVersion("default", "react", false, [0,16,0,0])),
629
+ /******/ 537: () => (load("default", "antd", false))
630
+ /******/ };
631
+ /******/ const initialConsumes = [27,194,226,388,533,537];
632
+ /******/ initialConsumes.forEach((id) => {
633
+ /******/ __webpack_require__.m[id] = (module) => {
634
+ /******/ // Handle case when module is used sync
635
+ /******/ installedModules[id] = 0;
636
+ /******/ delete __webpack_require__.c[id];
637
+ /******/ const factory = moduleToHandlerMapping[id]();
638
+ /******/ if(typeof factory !== "function") throw new Error("Shared module is not available for eager consumption: " + id);
639
+ /******/ module.exports = factory();
640
+ /******/ }
641
+ /******/ });
642
+ /******/ // no chunk loading of consumes
643
+ /******/ })();
644
+ /******/
645
+ /************************************************************************/
646
+ /******/
647
+ /******/ // module cache are used so entry inlining is disabled
648
+ /******/ // startup
649
+ /******/ // Load entry module and return exports
650
+ /******/ let __webpack_exports__ = __webpack_require__(769);
651
+ /******/
652
+ /******/ })()
653
+ ;