@projectcor/maia-components 2.11.90-0 → 2.11.90-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +28 -41
  2. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +128 -0
  3. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +7 -3
  4. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +4 -2
  5. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +29 -2
  6. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +33 -24
  7. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +23 -4
  8. package/lib/components/atoms/MAIAInput/MAIAInput.js +11 -4
  9. package/lib/components/atoms/icons/SkillIcon.js +30 -0
  10. package/lib/components/atoms/icons/SkillsNavIcon.js +27 -0
  11. package/lib/components/atoms/icons/index.js +3 -1
  12. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +14 -1
  13. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +34 -2
  14. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +5 -3
  15. package/lib/components/molecules/ChatAIModal/constants.js +6 -2
  16. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +357 -0
  17. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +145 -0
  18. package/lib/components/molecules/ChatAIMySkills/index.js +2 -0
  19. package/lib/components/molecules/ChatFooter/ChatFooter.js +18 -5
  20. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +3 -1
  21. package/lib/components/molecules/Sidebar/Sidebar.js +25 -4
  22. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +160 -0
  23. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.styles.js +34 -0
  24. package/lib/components/organisms/AbmSkillGenerateModal/index.js +2 -0
  25. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +446 -0
  26. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +98 -0
  27. package/lib/components/organisms/AbmSkillModal/index.js +2 -0
  28. package/lib/components/organisms/ChatAI/ChatAI.js +7 -3
  29. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +8 -1
  30. package/lib/constants/config.js +4 -1
  31. package/lib/constants/permissions/index.js +2 -2
  32. package/lib/constants/permissions/utils.js +4 -1
  33. package/lib/context/global-context.js +1 -1
  34. package/lib/hooks/useContextMentions.js +47 -9
  35. package/lib/hooks/useEntitySearch.js +277 -91
  36. package/lib/hooks/useMentionAllowedTypes.js +26 -8
  37. package/lib/hooks/useMentionPopover.js +42 -13
  38. package/lib/lang/br/index.js +58 -3
  39. package/lib/lang/en/index.js +58 -3
  40. package/lib/lang/es/index.js +58 -3
  41. package/lib/lang/fr/index.js +54 -3
  42. package/lib/services/maia/Skills/createSkill.js +39 -0
  43. package/lib/services/maia/Skills/deleteSkill.js +38 -0
  44. package/lib/services/maia/Skills/generateSkill.js +41 -0
  45. package/lib/services/maia/Skills/getSkills.js +90 -0
  46. package/lib/services/maia/Skills/updateSkill.js +39 -0
  47. package/lib/types/contextMention.js +1 -1
  48. package/lib/types/skill.js +2 -0
  49. package/lib/utils/contextMentionIcons.js +29 -1
  50. package/lib/utils/contextMentionTriggers.js +3 -1
  51. package/lib/utils/renderContextMentions.js +9 -4
  52. package/package.json +13 -8
@@ -1,8 +1,10 @@
1
1
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
2
  import { useMemo } from 'react';
3
3
  import { useGlobalContext } from '../context/global-context';
4
+ import { canAccessToSkills } from '../constants/permissions';
4
5
  import { getCustomAgentCorMentionTypes } from '../utils/corConnectorMentionTypes';
5
6
  var ALL_TYPES = ['client', 'project', 'task', 'user'];
7
+ var SKILL_TYPE = 'skill';
6
8
 
7
9
  /**
8
10
  * Restricción temporal de producto: el popover de @-mentions (COR + MCP) solo aplica a
@@ -15,9 +17,9 @@ var TEMP_CONTEXT_MENTIONS_REQUIRE_PROJECT_OR_CLIENT_ENTITY = true;
15
17
  * Deriva del agent activo qué tabs del context mention deben estar disponibles.
16
18
  *
17
19
  * Reglas:
18
- * - agent.type === 'orchestrator' → todos los tipos COR (user, task, project, client)
19
- * - agent.type === 'custom' → según conectores COR/MCP del agente
20
- * - agent.entity === 'global' → ninguna (sin @-mentions)
20
+ * - agent.type === 'orchestrator' → tipos COR (user, task, project, client) + skill si hay acceso
21
+ * - agent.type === 'custom' → según conectores COR/MCP del agente + skill si hay acceso
22
+ * - agent.entity === 'global' → ninguna (sin @-mentions) / solo skill si hay acceso
21
23
  * - agent.entity === 'project' → [task, user]
22
24
  * - agent.entity === 'client' → [project, task, user]
23
25
  * - agent.entity === null/otro → todas si el flag temporal está en false (contexto amplio)
@@ -33,10 +35,13 @@ export var useMentionAllowedTypes = function useMentionAllowedTypes(override) {
33
35
  agent = _useGlobalContext.agent;
34
36
  return useMemo(function () {
35
37
  var _agent$connectors$fin3, _agent$connectors3, _allowedTypes$2;
38
+ var skillsEnabled = canAccessToSkills();
39
+
36
40
  // El orchestrator (MAIA) tiene @-mentions libres (todos los tipos COR).
37
41
  // Orden alineado con TYPE_TO_TRIGGER_SEQUENCE: @ user, @@ task, @@@ project, @@@@ client.
38
42
  if ((agent === null || agent === void 0 ? void 0 : agent.type) === 'orchestrator') {
39
43
  var types = ['user', 'task', 'project', 'client'];
44
+ if (skillsEnabled) types.push(SKILL_TYPE);
40
45
  return {
41
46
  allowedTypes: types,
42
47
  defaultType: types[0]
@@ -55,7 +60,8 @@ export var useMentionAllowedTypes = function useMentionAllowedTypes(override) {
55
60
  })) === null || _agent$connectors2 === void 0 || (_agent$connectors2 = _agent$connectors2.slugs) === null || _agent$connectors2 === void 0 ? void 0 : _agent$connectors2.filter(function (s) {
56
61
  return typeof s === 'string' && s.trim().length > 0;
57
62
  })) !== null && _agent$connectors$fin2 !== void 0 ? _agent$connectors$fin2 : [];
58
- var _allowedTypes = _mcpSlugs.length > 0 ? [].concat(_toConsumableArray(corTypes), ['mcp']) : corTypes;
63
+ var _allowedTypes = _mcpSlugs.length > 0 ? [].concat(_toConsumableArray(corTypes), ['mcp']) : _toConsumableArray(corTypes);
64
+ if (skillsEnabled) _allowedTypes.push(SKILL_TYPE);
59
65
  return {
60
66
  allowedTypes: _allowedTypes,
61
67
  defaultType: (_allowedTypes$ = _allowedTypes[0]) !== null && _allowedTypes$ !== void 0 ? _allowedTypes$ : 'user'
@@ -77,16 +83,25 @@ export var useMentionAllowedTypes = function useMentionAllowedTypes(override) {
77
83
  };
78
84
  }
79
85
  if (TEMP_CONTEXT_MENTIONS_REQUIRE_PROJECT_OR_CLIENT_ENTITY && (agent === null || agent === void 0 ? void 0 : agent.entity) !== 'project' && (agent === null || agent === void 0 ? void 0 : agent.entity) !== 'client') {
80
- return {
86
+ // Para agentes sin entidad de proyecto/cliente, solo se expone el tab de skills.
87
+ if (!skillsEnabled) return {
81
88
  allowedTypes: [],
82
89
  defaultType: 'user'
83
90
  };
91
+ return {
92
+ allowedTypes: [SKILL_TYPE],
93
+ defaultType: SKILL_TYPE
94
+ };
84
95
  }
85
96
  if ((agent === null || agent === void 0 ? void 0 : agent.entity) === 'global') {
86
- return {
97
+ if (!skillsEnabled) return {
87
98
  allowedTypes: [],
88
99
  defaultType: 'user'
89
100
  };
101
+ return {
102
+ allowedTypes: [SKILL_TYPE],
103
+ defaultType: SKILL_TYPE
104
+ };
90
105
  }
91
106
  var allowedTypes = ALL_TYPES;
92
107
  if ((agent === null || agent === void 0 ? void 0 : agent.entity) === 'project') {
@@ -109,10 +124,13 @@ export var useMentionAllowedTypes = function useMentionAllowedTypes(override) {
109
124
  if (mcpSlugs.length > 0) {
110
125
  allowedTypes = [].concat(_toConsumableArray(allowedTypes), ['mcp']);
111
126
  }
127
+ if (skillsEnabled) {
128
+ allowedTypes = [].concat(_toConsumableArray(allowedTypes), [SKILL_TYPE]);
129
+ }
112
130
  return {
113
131
  allowedTypes: allowedTypes,
114
- defaultType: (_allowedTypes$2 = allowedTypes[0]) !== null && _allowedTypes$2 !== void 0 ? _allowedTypes$2 : 'user'
132
+ defaultType: (_allowedTypes$2 = allowedTypes[0]) !== null && _allowedTypes$2 !== void 0 ? _allowedTypes$2 : SKILL_TYPE
115
133
  };
116
134
  }, [agent === null || agent === void 0 ? void 0 : agent.entity, agent === null || agent === void 0 ? void 0 : agent.type, agent === null || agent === void 0 ? void 0 : agent.connectors, override]);
117
135
  };
118
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VNZW1vIiwidXNlR2xvYmFsQ29udGV4dCIsImdldEN1c3RvbUFnZW50Q29yTWVudGlvblR5cGVzIiwiQUxMX1RZUEVTIiwiVEVNUF9DT05URVhUX01FTlRJT05TX1JFUVVJUkVfUFJPSkVDVF9PUl9DTElFTlRfRU5USVRZIiwidXNlTWVudGlvbkFsbG93ZWRUeXBlcyIsIm92ZXJyaWRlIiwiX3VzZUdsb2JhbENvbnRleHQiLCJhZ2VudCIsIl9hZ2VudCRjb25uZWN0b3JzJGZpbjMiLCJfYWdlbnQkY29ubmVjdG9yczMiLCJfYWxsb3dlZFR5cGVzJDIiLCJ0eXBlIiwidHlwZXMiLCJhbGxvd2VkVHlwZXMiLCJkZWZhdWx0VHlwZSIsIl9hZ2VudCRjb25uZWN0b3JzJGZpbiIsIl9hZ2VudCRjb25uZWN0b3JzIiwiX2FnZW50JGNvbm5lY3RvcnMkZmluMiIsIl9hZ2VudCRjb25uZWN0b3JzMiIsIl9hbGxvd2VkVHlwZXMkIiwiY29yU2x1Z3MiLCJjb25uZWN0b3JzIiwiZmluZCIsImMiLCJncm91cCIsInNsdWdzIiwiY29yVHlwZXMiLCJtY3BTbHVncyIsImZpbHRlciIsInMiLCJ0cmltIiwibGVuZ3RoIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiZW50aXR5IiwiaW5jbHVkZXMiLCJjb25uZWN0b3IiLCJzbHVnIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3VzZU1lbnRpb25BbGxvd2VkVHlwZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBDb250ZXh0RW50aXR5VHlwZSB9IGZyb20gJy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgZ2V0Q3VzdG9tQWdlbnRDb3JNZW50aW9uVHlwZXMgfSBmcm9tICcuLi91dGlscy9jb3JDb25uZWN0b3JNZW50aW9uVHlwZXMnXG5cbmNvbnN0IEFMTF9UWVBFUzogQ29udGV4dEVudGl0eVR5cGVbXSA9IFsnY2xpZW50JywgJ3Byb2plY3QnLCAndGFzaycsICd1c2VyJ11cblxuLyoqXG4gKiBSZXN0cmljY2nDs24gdGVtcG9yYWwgZGUgcHJvZHVjdG86IGVsIHBvcG92ZXIgZGUgQC1tZW50aW9ucyAoQ09SICsgTUNQKSBzb2xvIGFwbGljYSBhXG4gKiBhZ2VudGVzIGN1eW8gYGVudGl0eWAgZXMgcHJveWVjdG8gbyBjbGllbnRlICjigJxlc3BlY2lhbGlzdGFz4oCdIGFjb3RhZG9zKS4gRWwgcmVzdG8gbm8gdmUgdGFic1xuICogbmkgTUNQIGF1bnF1ZSB0ZW5nYSBjb25lY3RvcmVzIGFjdGl2b3MuIFBhc2FyIGEgYGZhbHNlYCBjdWFuZG8gc2UgaGFiaWxpdGUgZGUgbnVldm8gZWxcbiAqIGFsY2FuY2UgYW1wbGlvOyBubyBib3JyYXIgZWwgY3VlcnBvIGRlbCBob29rIHF1ZSBxdWVkYSBkZWJham8uXG4gKi9cbmNvbnN0IFRFTVBfQ09OVEVYVF9NRU5USU9OU19SRVFVSVJFX1BST0pFQ1RfT1JfQ0xJRU5UX0VOVElUWSA9IHRydWVcblxuZXhwb3J0IHR5cGUgVXNlTWVudGlvbkFsbG93ZWRUeXBlc1Jlc3VsdCA9IHtcbiAgYWxsb3dlZFR5cGVzOiBDb250ZXh0RW50aXR5VHlwZVtdXG4gIGRlZmF1bHRUeXBlOiBDb250ZXh0RW50aXR5VHlwZVxufVxuXG4vKipcbiAqIERlcml2YSBkZWwgYWdlbnQgYWN0aXZvIHF1w6kgdGFicyBkZWwgY29udGV4dCBtZW50aW9uIGRlYmVuIGVzdGFyIGRpc3BvbmlibGVzLlxuICpcbiAqIFJlZ2xhczpcbiAqICAgLSBhZ2VudC50eXBlID09PSAnb3JjaGVzdHJhdG9yJyDihpIgdG9kb3MgbG9zIHRpcG9zIENPUiAodXNlciwgdGFzaywgcHJvamVjdCwgY2xpZW50KVxuICogICAtIGFnZW50LnR5cGUgPT09ICdjdXN0b20nIOKGkiBzZWfDum4gY29uZWN0b3JlcyBDT1IvTUNQIGRlbCBhZ2VudGVcbiAqICAgLSBhZ2VudC5lbnRpdHkgPT09ICdnbG9iYWwnICDihpIgbmluZ3VuYSAoc2luIEAtbWVudGlvbnMpXG4gKiAgIC0gYWdlbnQuZW50aXR5ID09PSAncHJvamVjdCcg4oaSIFt0YXNrLCB1c2VyXVxuICogICAtIGFnZW50LmVudGl0eSA9PT0gJ2NsaWVudCcgIOKGkiBbcHJvamVjdCwgdGFzaywgdXNlcl1cbiAqICAgLSBhZ2VudC5lbnRpdHkgPT09IG51bGwvb3RybyAg4oaSIHRvZGFzIHNpIGVsIGZsYWcgdGVtcG9yYWwgZXN0w6EgZW4gZmFsc2UgKGNvbnRleHRvIGFtcGxpbylcbiAqICAgLSBhZ2VudC50eXBlICE9PSAnY2xvbmUnICAgICAg4oaSIG5pbmd1bmEgKHNpbiBALW1lbnRpb25zKVxuICpcbiAqIEVsIGBvdmVycmlkZWAgKHByb3AgYGVuYWJsZWRUeXBlc2AgZGVsIGNvbXBvbmVudGUgY29uc3VtaWRvcikgc2llbXByZSBnYW5hLlxuICpcbiAqIE1pZW50cmFzIGBURU1QX0NPTlRFWFRfTUVOVElPTlNfUkVRVUlSRV9QUk9KRUNUX09SX0NMSUVOVF9FTlRJVFlgIHNlYSB0cnVlLCB0cmFzIGVsIG92ZXJyaWRlXG4gKiBzb2xvIHNlIHBlcm1pdGUgY29udGludWFyIHNpIGBhZ2VudC5lbnRpdHlgIGVzIGBwcm9qZWN0YCBvIGBjbGllbnRgIChzaW4gQCBwYXJhIGdsb2JhbC9udWxsL290cm9zKS5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZU1lbnRpb25BbGxvd2VkVHlwZXMgPSAob3ZlcnJpZGU/OiBDb250ZXh0RW50aXR5VHlwZVtdKTogVXNlTWVudGlvbkFsbG93ZWRUeXBlc1Jlc3VsdCA9PiB7XG4gIGNvbnN0IHsgYWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuXG4gIHJldHVybiB1c2VNZW1vKCgpOiBVc2VNZW50aW9uQWxsb3dlZFR5cGVzUmVzdWx0ID0+IHtcbiAgICAvLyBFbCBvcmNoZXN0cmF0b3IgKE1BSUEpIHRpZW5lIEAtbWVudGlvbnMgbGlicmVzICh0b2RvcyBsb3MgdGlwb3MgQ09SKS5cbiAgICAvLyBPcmRlbiBhbGluZWFkbyBjb24gVFlQRV9UT19UUklHR0VSX1NFUVVFTkNFOiBAIHVzZXIsIEBAIHRhc2ssIEBAQCBwcm9qZWN0LCBAQEBAIGNsaWVudC5cbiAgICBpZiAoYWdlbnQ/LnR5cGUgPT09ICdvcmNoZXN0cmF0b3InKSB7XG4gICAgICBjb25zdCB0eXBlczogQ29udGV4dEVudGl0eVR5cGVbXSA9IFsndXNlcicsICd0YXNrJywgJ3Byb2plY3QnLCAnY2xpZW50J11cbiAgICAgIHJldHVybiB7IGFsbG93ZWRUeXBlczogdHlwZXMsIGRlZmF1bHRUeXBlOiB0eXBlc1swXSB9XG4gICAgfVxuXG4gICAgLy8gQWdlbnRlcyBjdXN0b206IHRhYnMgc2Vnw7puIGVudGlkYWRlcyBlbiBjb25uZWN0b3JzIENPUiAoYHRhc2tgLCBgcHJvamVjdGAsIGBjbGllbnRgKS5cbiAgICBpZiAoYWdlbnQ/LnR5cGUgPT09ICdjdXN0b20nKSB7XG4gICAgICBjb25zdCBjb3JTbHVncyA9IGFnZW50LmNvbm5lY3RvcnM/LmZpbmQoYyA9PiBjLmdyb3VwID09PSAnQ09SJyk/LnNsdWdzID8/IFtdXG4gICAgICBjb25zdCBjb3JUeXBlcyA9IGdldEN1c3RvbUFnZW50Q29yTWVudGlvblR5cGVzKGNvclNsdWdzKVxuXG4gICAgICBjb25zdCBtY3BTbHVncyA9XG4gICAgICAgIGFnZW50LmNvbm5lY3RvcnNcbiAgICAgICAgICA/LmZpbmQoYyA9PiBjLmdyb3VwID09PSAnTUNQJylcbiAgICAgICAgICA/LnNsdWdzPy5maWx0ZXIoKHMpOiBzIGlzIHN0cmluZyA9PiB0eXBlb2YgcyA9PT0gJ3N0cmluZycgJiYgcy50cmltKCkubGVuZ3RoID4gMCkgPz8gW11cbiAgICAgIGNvbnN0IGFsbG93ZWRUeXBlczogQ29udGV4dEVudGl0eVR5cGVbXSA9IG1jcFNsdWdzLmxlbmd0aCA+IDAgPyBbLi4uY29yVHlwZXMsICdtY3AnXSA6IGNvclR5cGVzXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFsbG93ZWRUeXBlcyxcbiAgICAgICAgZGVmYXVsdFR5cGU6IGFsbG93ZWRUeXBlc1swXSA/PyAndXNlcicsXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGFzIEAtbWVudGlvbnMgKHkgcG9yIGVuZGUgbG9zIGZldGNoIGRlIHJlY2VudHMpIHNvbG8gYXBsaWNhbiBhIGFnZW50ZXMgY2xvbmUuXG4gICAgaWYgKGFnZW50Py50eXBlICE9PSAnY2xvbmUnKSB7XG4gICAgICByZXR1cm4geyBhbGxvd2VkVHlwZXM6IFtdLCBkZWZhdWx0VHlwZTogJ3VzZXInIH1cbiAgICB9XG5cbiAgICBpZiAob3ZlcnJpZGUgJiYgb3ZlcnJpZGUubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZGVmYXVsdFR5cGUgPSBvdmVycmlkZVswXVxuICAgICAgcmV0dXJuIHsgYWxsb3dlZFR5cGVzOiBvdmVycmlkZSwgZGVmYXVsdFR5cGUgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFRFTVBfQ09OVEVYVF9NRU5USU9OU19SRVFVSVJFX1BST0pFQ1RfT1JfQ0xJRU5UX0VOVElUWSAmJlxuICAgICAgYWdlbnQ/LmVudGl0eSAhPT0gJ3Byb2plY3QnICYmXG4gICAgICBhZ2VudD8uZW50aXR5ICE9PSAnY2xpZW50J1xuICAgICkge1xuICAgICAgcmV0dXJuIHsgYWxsb3dlZFR5cGVzOiBbXSwgZGVmYXVsdFR5cGU6ICd1c2VyJyB9XG4gICAgfVxuXG4gICAgaWYgKGFnZW50Py5lbnRpdHkgPT09ICdnbG9iYWwnKSB7XG4gICAgICByZXR1cm4geyBhbGxvd2VkVHlwZXM6IFtdLCBkZWZhdWx0VHlwZTogJ3VzZXInIH1cbiAgICB9XG5cbiAgICBsZXQgYWxsb3dlZFR5cGVzOiBDb250ZXh0RW50aXR5VHlwZVtdID0gQUxMX1RZUEVTXG5cbiAgICBpZiAoYWdlbnQ/LmVudGl0eSA9PT0gJ3Byb2plY3QnKSB7XG4gICAgICBhbGxvd2VkVHlwZXMgPSBbJ3VzZXInLCAndGFzayddXG4gICAgfSBlbHNlIGlmIChhZ2VudD8uZW50aXR5ID09PSAnY2xpZW50Jykge1xuICAgICAgYWxsb3dlZFR5cGVzID0gWyd1c2VyJywgJ3Rhc2snLCAncHJvamVjdCddXG4gICAgfVxuXG4gICAgLy8gYHVzZXJgIHPDs2xvIHNlIGhhYmlsaXRhIGp1bnRvIGNvbiBgdGFza2AuXG4gICAgaWYgKCFhbGxvd2VkVHlwZXMuaW5jbHVkZXMoJ3Rhc2snKSkge1xuICAgICAgYWxsb3dlZFR5cGVzID0gYWxsb3dlZFR5cGVzLmZpbHRlcih0eXBlID0+IHR5cGUgIT09ICd1c2VyJylcbiAgICB9XG5cbiAgICBjb25zdCBtY3BTbHVncyA9XG4gICAgICBhZ2VudD8uY29ubmVjdG9yc1xuICAgICAgICA/LmZpbmQoY29ubmVjdG9yID0+IGNvbm5lY3Rvci5ncm91cCA9PT0gJ01DUCcpXG4gICAgICAgID8uc2x1Z3M/LmZpbHRlcigoc2x1Zyk6IHNsdWcgaXMgc3RyaW5nID0+IHR5cGVvZiBzbHVnID09PSAnc3RyaW5nJyAmJiBzbHVnLnRyaW0oKS5sZW5ndGggPiAwKSA/PyBbXVxuICAgIGlmIChtY3BTbHVncy5sZW5ndGggPiAwKSB7XG4gICAgICBhbGxvd2VkVHlwZXMgPSBbLi4uYWxsb3dlZFR5cGVzLCAnbWNwJ11cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWxsb3dlZFR5cGVzLFxuICAgICAgZGVmYXVsdFR5cGU6IGFsbG93ZWRUeXBlc1swXSA/PyAndXNlcicsXG4gICAgfVxuICB9LCBbYWdlbnQ/LmVudGl0eSwgYWdlbnQ/LnR5cGUsIGFnZW50Py5jb25uZWN0b3JzLCBvdmVycmlkZV0pXG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxTQUFTQSxPQUFPLFFBQVEsT0FBTztBQUMvQixTQUFTQyxnQkFBZ0IsUUFBUSwyQkFBMkI7QUFFNUQsU0FBU0MsNkJBQTZCLFFBQVEsbUNBQW1DO0FBRWpGLElBQU1DLFNBQThCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxN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
136
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VNZW1vIiwidXNlR2xvYmFsQ29udGV4dCIsImNhbkFjY2Vzc1RvU2tpbGxzIiwiZ2V0Q3VzdG9tQWdlbnRDb3JNZW50aW9uVHlwZXMiLCJBTExfVFlQRVMiLCJTS0lMTF9UWVBFIiwiVEVNUF9DT05URVhUX01FTlRJT05TX1JFUVVJUkVfUFJPSkVDVF9PUl9DTElFTlRfRU5USVRZIiwidXNlTWVudGlvbkFsbG93ZWRUeXBlcyIsIm92ZXJyaWRlIiwiX3VzZUdsb2JhbENvbnRleHQiLCJhZ2VudCIsIl9hZ2VudCRjb25uZWN0b3JzJGZpbjMiLCJfYWdlbnQkY29ubmVjdG9yczMiLCJfYWxsb3dlZFR5cGVzJDIiLCJza2lsbHNFbmFibGVkIiwidHlwZSIsInR5cGVzIiwicHVzaCIsImFsbG93ZWRUeXBlcyIsImRlZmF1bHRUeXBlIiwiX2FnZW50JGNvbm5lY3RvcnMkZmluIiwiX2FnZW50JGNvbm5lY3RvcnMiLCJfYWdlbnQkY29ubmVjdG9ycyRmaW4yIiwiX2FnZW50JGNvbm5lY3RvcnMyIiwiX2FsbG93ZWRUeXBlcyQiLCJjb3JTbHVncyIsImNvbm5lY3RvcnMiLCJmaW5kIiwiYyIsImdyb3VwIiwic2x1Z3MiLCJjb3JUeXBlcyIsIm1jcFNsdWdzIiwiZmlsdGVyIiwicyIsInRyaW0iLCJsZW5ndGgiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJlbnRpdHkiLCJpbmNsdWRlcyIsImNvbm5lY3RvciIsInNsdWciXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlTWVudGlvbkFsbG93ZWRUeXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IENvbnRleHRFbnRpdHlUeXBlIH0gZnJvbSAnLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBjYW5BY2Nlc3NUb1NraWxscyB9IGZyb20gJy4uL2NvbnN0YW50cy9wZXJtaXNzaW9ucydcbmltcG9ydCB7IGdldEN1c3RvbUFnZW50Q29yTWVudGlvblR5cGVzIH0gZnJvbSAnLi4vdXRpbHMvY29yQ29ubmVjdG9yTWVudGlvblR5cGVzJ1xuXG5jb25zdCBBTExfVFlQRVM6IENvbnRleHRFbnRpdHlUeXBlW10gPSBbJ2NsaWVudCcsICdwcm9qZWN0JywgJ3Rhc2snLCAndXNlciddXG5jb25zdCBTS0lMTF9UWVBFOiBDb250ZXh0RW50aXR5VHlwZSA9ICdza2lsbCdcblxuLyoqXG4gKiBSZXN0cmljY2nDs24gdGVtcG9yYWwgZGUgcHJvZHVjdG86IGVsIHBvcG92ZXIgZGUgQC1tZW50aW9ucyAoQ09SICsgTUNQKSBzb2xvIGFwbGljYSBhXG4gKiBhZ2VudGVzIGN1eW8gYGVudGl0eWAgZXMgcHJveWVjdG8gbyBjbGllbnRlICjigJxlc3BlY2lhbGlzdGFz4oCdIGFjb3RhZG9zKS4gRWwgcmVzdG8gbm8gdmUgdGFic1xuICogbmkgTUNQIGF1bnF1ZSB0ZW5nYSBjb25lY3RvcmVzIGFjdGl2b3MuIFBhc2FyIGEgYGZhbHNlYCBjdWFuZG8gc2UgaGFiaWxpdGUgZGUgbnVldm8gZWxcbiAqIGFsY2FuY2UgYW1wbGlvOyBubyBib3JyYXIgZWwgY3VlcnBvIGRlbCBob29rIHF1ZSBxdWVkYSBkZWJham8uXG4gKi9cbmNvbnN0IFRFTVBfQ09OVEVYVF9NRU5USU9OU19SRVFVSVJFX1BST0pFQ1RfT1JfQ0xJRU5UX0VOVElUWSA9IHRydWVcblxuZXhwb3J0IHR5cGUgVXNlTWVudGlvbkFsbG93ZWRUeXBlc1Jlc3VsdCA9IHtcbiAgYWxsb3dlZFR5cGVzOiBDb250ZXh0RW50aXR5VHlwZVtdXG4gIGRlZmF1bHRUeXBlOiBDb250ZXh0RW50aXR5VHlwZVxufVxuXG4vKipcbiAqIERlcml2YSBkZWwgYWdlbnQgYWN0aXZvIHF1w6kgdGFicyBkZWwgY29udGV4dCBtZW50aW9uIGRlYmVuIGVzdGFyIGRpc3BvbmlibGVzLlxuICpcbiAqIFJlZ2xhczpcbiAqICAgLSBhZ2VudC50eXBlID09PSAnb3JjaGVzdHJhdG9yJyDihpIgdGlwb3MgQ09SICh1c2VyLCB0YXNrLCBwcm9qZWN0LCBjbGllbnQpICsgc2tpbGwgc2kgaGF5IGFjY2Vzb1xuICogICAtIGFnZW50LnR5cGUgPT09ICdjdXN0b20nIOKGkiBzZWfDum4gY29uZWN0b3JlcyBDT1IvTUNQIGRlbCBhZ2VudGUgKyBza2lsbCBzaSBoYXkgYWNjZXNvXG4gKiAgIC0gYWdlbnQuZW50aXR5ID09PSAnZ2xvYmFsJyAg4oaSIG5pbmd1bmEgKHNpbiBALW1lbnRpb25zKSAvIHNvbG8gc2tpbGwgc2kgaGF5IGFjY2Vzb1xuICogICAtIGFnZW50LmVudGl0eSA9PT0gJ3Byb2plY3QnIOKGkiBbdGFzaywgdXNlcl1cbiAqICAgLSBhZ2VudC5lbnRpdHkgPT09ICdjbGllbnQnICDihpIgW3Byb2plY3QsIHRhc2ssIHVzZXJdXG4gKiAgIC0gYWdlbnQuZW50aXR5ID09PSBudWxsL290cm8gIOKGkiB0b2RhcyBzaSBlbCBmbGFnIHRlbXBvcmFsIGVzdMOhIGVuIGZhbHNlIChjb250ZXh0byBhbXBsaW8pXG4gKiAgIC0gYWdlbnQudHlwZSAhPT0gJ2Nsb25lJyAgICAgIOKGkiBuaW5ndW5hIChzaW4gQC1tZW50aW9ucylcbiAqXG4gKiBFbCBgb3ZlcnJpZGVgIChwcm9wIGBlbmFibGVkVHlwZXNgIGRlbCBjb21wb25lbnRlIGNvbnN1bWlkb3IpIHNpZW1wcmUgZ2FuYS5cbiAqXG4gKiBNaWVudHJhcyBgVEVNUF9DT05URVhUX01FTlRJT05TX1JFUVVJUkVfUFJPSkVDVF9PUl9DTElFTlRfRU5USVRZYCBzZWEgdHJ1ZSwgdHJhcyBlbCBvdmVycmlkZVxuICogc29sbyBzZSBwZXJtaXRlIGNvbnRpbnVhciBzaSBgYWdlbnQuZW50aXR5YCBlcyBgcHJvamVjdGAgbyBgY2xpZW50YCAoc2luIEAgcGFyYSBnbG9iYWwvbnVsbC9vdHJvcykuXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VNZW50aW9uQWxsb3dlZFR5cGVzID0gKG92ZXJyaWRlPzogQ29udGV4dEVudGl0eVR5cGVbXSk6IFVzZU1lbnRpb25BbGxvd2VkVHlwZXNSZXN1bHQgPT4ge1xuICBjb25zdCB7IGFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcblxuICByZXR1cm4gdXNlTWVtbygoKTogVXNlTWVudGlvbkFsbG93ZWRUeXBlc1Jlc3VsdCA9PiB7XG4gICAgY29uc3Qgc2tpbGxzRW5hYmxlZCA9IGNhbkFjY2Vzc1RvU2tpbGxzKClcblxuICAgIC8vIEVsIG9yY2hlc3RyYXRvciAoTUFJQSkgdGllbmUgQC1tZW50aW9ucyBsaWJyZXMgKHRvZG9zIGxvcyB0aXBvcyBDT1IpLlxuICAgIC8vIE9yZGVuIGFsaW5lYWRvIGNvbiBUWVBFX1RPX1RSSUdHRVJfU0VRVUVOQ0U6IEAgdXNlciwgQEAgdGFzaywgQEBAIHByb2plY3QsIEBAQEAgY2xpZW50LlxuICAgIGlmIChhZ2VudD8udHlwZSA9PT0gJ29yY2hlc3RyYXRvcicpIHtcbiAgICAgIGNvbnN0IHR5cGVzOiBDb250ZXh0RW50aXR5VHlwZVtdID0gWyd1c2VyJywgJ3Rhc2snLCAncHJvamVjdCcsICdjbGllbnQnXVxuICAgICAgaWYgKHNraWxsc0VuYWJsZWQpIHR5cGVzLnB1c2goU0tJTExfVFlQRSlcbiAgICAgIHJldHVybiB7IGFsbG93ZWRUeXBlczogdHlwZXMsIGRlZmF1bHRUeXBlOiB0eXBlc1swXSB9XG4gICAgfVxuXG4gICAgLy8gQWdlbnRlcyBjdXN0b206IHRhYnMgc2Vnw7puIGVudGlkYWRlcyBlbiBjb25uZWN0b3JzIENPUiAoYHRhc2tgLCBgcHJvamVjdGAsIGBjbGllbnRgKS5cbiAgICBpZiAoYWdlbnQ/LnR5cGUgPT09ICdjdXN0b20nKSB7XG4gICAgICBjb25zdCBjb3JTbHVncyA9IGFnZW50LmNvbm5lY3RvcnM/LmZpbmQoYyA9PiBjLmdyb3VwID09PSAnQ09SJyk/LnNsdWdzID8/IFtdXG4gICAgICBjb25zdCBjb3JUeXBlcyA9IGdldEN1c3RvbUFnZW50Q29yTWVudGlvblR5cGVzKGNvclNsdWdzKVxuXG4gICAgICBjb25zdCBtY3BTbHVncyA9XG4gICAgICAgIGFnZW50LmNvbm5lY3RvcnNcbiAgICAgICAgICA/LmZpbmQoYyA9PiBjLmdyb3VwID09PSAnTUNQJylcbiAgICAgICAgICA/LnNsdWdzPy5maWx0ZXIoKHMpOiBzIGlzIHN0cmluZyA9PiB0eXBlb2YgcyA9PT0gJ3N0cmluZycgJiYgcy50cmltKCkubGVuZ3RoID4gMCkgPz8gW11cbiAgICAgIGNvbnN0IGFsbG93ZWRUeXBlczogQ29udGV4dEVudGl0eVR5cGVbXSA9IG1jcFNsdWdzLmxlbmd0aCA+IDAgPyBbLi4uY29yVHlwZXMsICdtY3AnXSA6IFsuLi5jb3JUeXBlc11cbiAgICAgIGlmIChza2lsbHNFbmFibGVkKSBhbGxvd2VkVHlwZXMucHVzaChTS0lMTF9UWVBFKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbGxvd2VkVHlwZXMsXG4gICAgICAgIGRlZmF1bHRUeXBlOiBhbGxvd2VkVHlwZXNbMF0gPz8gJ3VzZXInLFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIExhcyBALW1lbnRpb25zICh5IHBvciBlbmRlIGxvcyBmZXRjaCBkZSByZWNlbnRzKSBzb2xvIGFwbGljYW4gYSBhZ2VudGVzIGNsb25lLlxuICAgIGlmIChhZ2VudD8udHlwZSAhPT0gJ2Nsb25lJykge1xuICAgICAgcmV0dXJuIHsgYWxsb3dlZFR5cGVzOiBbXSwgZGVmYXVsdFR5cGU6ICd1c2VyJyB9XG4gICAgfVxuXG4gICAgaWYgKG92ZXJyaWRlICYmIG92ZXJyaWRlLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRUeXBlID0gb3ZlcnJpZGVbMF1cbiAgICAgIHJldHVybiB7IGFsbG93ZWRUeXBlczogb3ZlcnJpZGUsIGRlZmF1bHRUeXBlIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBURU1QX0NPTlRFWFRfTUVOVElPTlNfUkVRVUlSRV9QUk9KRUNUX09SX0NMSUVOVF9FTlRJVFkgJiZcbiAgICAgIGFnZW50Py5lbnRpdHkgIT09ICdwcm9qZWN0JyAmJlxuICAgICAgYWdlbnQ/LmVudGl0eSAhPT0gJ2NsaWVudCdcbiAgICApIHtcbiAgICAgIC8vIFBhcmEgYWdlbnRlcyBzaW4gZW50aWRhZCBkZSBwcm95ZWN0by9jbGllbnRlLCBzb2xvIHNlIGV4cG9uZSBlbCB0YWIgZGUgc2tpbGxzLlxuICAgICAgaWYgKCFza2lsbHNFbmFibGVkKSByZXR1cm4geyBhbGxvd2VkVHlwZXM6IFtdLCBkZWZhdWx0VHlwZTogJ3VzZXInIH1cbiAgICAgIHJldHVybiB7IGFsbG93ZWRUeXBlczogW1NLSUxMX1RZUEVdLCBkZWZhdWx0VHlwZTogU0tJTExfVFlQRSB9XG4gICAgfVxuXG4gICAgaWYgKGFnZW50Py5lbnRpdHkgPT09ICdnbG9iYWwnKSB7XG4gICAgICBpZiAoIXNraWxsc0VuYWJsZWQpIHJldHVybiB7IGFsbG93ZWRUeXBlczogW10sIGRlZmF1bHRUeXBlOiAndXNlcicgfVxuICAgICAgcmV0dXJuIHsgYWxsb3dlZFR5cGVzOiBbU0tJTExfVFlQRV0sIGRlZmF1bHRUeXBlOiBTS0lMTF9UWVBFIH1cbiAgICB9XG5cbiAgICBsZXQgYWxsb3dlZFR5cGVzOiBDb250ZXh0RW50aXR5VHlwZVtdID0gQUxMX1RZUEVTXG5cbiAgICBpZiAoYWdlbnQ/LmVudGl0eSA9PT0gJ3Byb2plY3QnKSB7XG4gICAgICBhbGxvd2VkVHlwZXMgPSBbJ3VzZXInLCAndGFzayddXG4gICAgfSBlbHNlIGlmIChhZ2VudD8uZW50aXR5ID09PSAnY2xpZW50Jykge1xuICAgICAgYWxsb3dlZFR5cGVzID0gWyd1c2VyJywgJ3Rhc2snLCAncHJvamVjdCddXG4gICAgfVxuXG4gICAgLy8gYHVzZXJgIHPDs2xvIHNlIGhhYmlsaXRhIGp1bnRvIGNvbiBgdGFza2AuXG4gICAgaWYgKCFhbGxvd2VkVHlwZXMuaW5jbHVkZXMoJ3Rhc2snKSkge1xuICAgICAgYWxsb3dlZFR5cGVzID0gYWxsb3dlZFR5cGVzLmZpbHRlcih0eXBlID0+IHR5cGUgIT09ICd1c2VyJylcbiAgICB9XG5cbiAgICBjb25zdCBtY3BTbHVncyA9XG4gICAgICBhZ2VudD8uY29ubmVjdG9yc1xuICAgICAgICA/LmZpbmQoY29ubmVjdG9yID0+IGNvbm5lY3Rvci5ncm91cCA9PT0gJ01DUCcpXG4gICAgICAgID8uc2x1Z3M/LmZpbHRlcigoc2x1Zyk6IHNsdWcgaXMgc3RyaW5nID0+IHR5cGVvZiBzbHVnID09PSAnc3RyaW5nJyAmJiBzbHVnLnRyaW0oKS5sZW5ndGggPiAwKSA/PyBbXVxuICAgIGlmIChtY3BTbHVncy5sZW5ndGggPiAwKSB7XG4gICAgICBhbGxvd2VkVHlwZXMgPSBbLi4uYWxsb3dlZFR5cGVzLCAnbWNwJ11cbiAgICB9XG5cbiAgICBpZiAoc2tpbGxzRW5hYmxlZCkge1xuICAgICAgYWxsb3dlZFR5cGVzID0gWy4uLmFsbG93ZWRUeXBlcywgU0tJTExfVFlQRV1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWxsb3dlZFR5cGVzLFxuICAgICAgZGVmYXVsdFR5cGU6IGFsbG93ZWRUeXBlc1swXSA/PyBTS0lMTF9UWVBFLFxuICAgIH1cbiAgfSwgW2FnZW50Py5lbnRpdHksIGFnZW50Py50eXBlLCBhZ2VudD8uY29ubmVjdG9ycywgb3ZlcnJpZGVdKVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsU0FBU0EsT0FBTyxRQUFRLE9BQU87QUFDL0IsU0FBU0MsZ0JBQWdCLFFBQVEsMkJBQTJCO0FBRTVELFNBQVNDLGlCQUFpQixRQUFRLDBCQUEwQjtBQUM1RCxTQUFTQyw2QkFBNkIsUUFBUSxtQ0FBbUM7QUFFakYsSUFBTUMsU0FBOEIsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztBQUM1RSxJQUFNQyxVQUE2QixHQUFHLE9BQU87O0FBRTdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU1DLHNEQUFzRCxHQUFHLElBQUk7QUFPbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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
@@ -44,7 +44,8 @@ var useDerivedScope = function useDerivedScope() {
44
44
  mcpSlugs: mcpSlugs,
45
45
  agentEntity: agentEntity
46
46
  };
47
- }, [clientId, projectId, mcpSlugs, agentEntity]);
47
+ }, [clientId, projectId, mcpSlugs, agentEntity] // skills se inyecta en useMentionPopover
48
+ );
48
49
  };
49
50
 
50
51
  /**
@@ -57,6 +58,7 @@ export var useMentionPopover = function useMentionPopover(_ref4) {
57
58
  var editorRef = _ref4.editorRef,
58
59
  popoverAnchorRef = _ref4.popoverAnchorRef,
59
60
  enabledTypes = _ref4.enabledTypes,
61
+ skills = _ref4.skills,
60
62
  onMentionAdded = _ref4.onMentionAdded;
61
63
  var _useT = useT(),
62
64
  t = _useT.t;
@@ -92,7 +94,12 @@ export var useMentionPopover = function useMentionPopover(_ref4) {
92
94
  var hasEmittedOpen = useRef(false);
93
95
  var popoverRef = useRef(null);
94
96
  var getCaretRect = useCaretPosition();
95
- var scope = useDerivedScope();
97
+ var derivedScope = useDerivedScope();
98
+ var scope = useMemo(function () {
99
+ return skills ? _objectSpread(_objectSpread({}, derivedScope), {}, {
100
+ skills: skills
101
+ }) : derivedScope;
102
+ }, [derivedScope, skills]);
96
103
  var _useEntitySearch = useEntitySearch(activeType, scope),
97
104
  items = _useEntitySearch.items,
98
105
  loading = _useEntitySearch.loading,
@@ -102,7 +109,8 @@ export var useMentionPopover = function useMentionPopover(_ref4) {
102
109
  isLoadingMore = _useEntitySearch.isLoadingMore,
103
110
  loadMore = _useEntitySearch.loadMore,
104
111
  searchValue = _useEntitySearch.searchValue,
105
- updateSearchValue = _useEntitySearch.updateSearchValue;
112
+ updateSearchValue = _useEntitySearch.updateSearchValue,
113
+ skillsCatalogEmpty = _useEntitySearch.skillsCatalogEmpty;
106
114
  useEffect(function () {
107
115
  if (!allowedTypes.includes(activeType)) {
108
116
  setActiveType(defaultType);
@@ -151,13 +159,26 @@ export var useMentionPopover = function useMentionPopover(_ref4) {
151
159
  return;
152
160
  }
153
161
  if (trigger.active) {
162
+ var isSkillTrigger = allowedTypes.includes('skill') && trigger.atRunLength === 1 && trigger.query.startsWith('/');
154
163
  var atRunTabTypes = getAtRunTabTypes(allowedTypes);
155
- var atRunTypesOrAll = atRunTabTypes.length > 0 ? atRunTabTypes : allowedTypes;
164
+ var atRunTypesOrAll = atRunTabTypes.length > 0 ? atRunTabTypes : allowedTypes.filter(function (t) {
165
+ return t !== 'skill';
166
+ });
156
167
  var isSlashTrigger = trigger.atRunLength < 0;
157
- var overflowAtCount = isSlashTrigger ? 0 : Math.max(0, trigger.atRunLength - atRunTabTypes.length);
158
- var effectiveAtRunLength = isSlashTrigger ? trigger.atRunLength : Math.min(trigger.atRunLength, atRunTypesOrAll.length);
159
- var effectiveQuery = isSlashTrigger ? trigger.query : "".concat('@'.repeat(overflowAtCount)).concat(trigger.query);
160
- var typeFromAt = getTypeFromTriggerSequence(effectiveAtRunLength, atRunTypesOrAll, defaultType);
168
+ var typeFromAt;
169
+ var effectiveQuery;
170
+ if (isSkillTrigger) {
171
+ typeFromAt = 'skill';
172
+ effectiveQuery = trigger.query.slice(1);
173
+ } else if (isSlashTrigger) {
174
+ typeFromAt = getTypeFromTriggerSequence(trigger.atRunLength, allowedTypes, defaultType);
175
+ effectiveQuery = trigger.query;
176
+ } else {
177
+ var overflowAtCount = Math.max(0, trigger.atRunLength - atRunTabTypes.length);
178
+ var effectiveAtRunLength = Math.min(trigger.atRunLength, atRunTypesOrAll.length);
179
+ effectiveQuery = "".concat('@'.repeat(overflowAtCount)).concat(trigger.query);
180
+ typeFromAt = getTypeFromTriggerSequence(effectiveAtRunLength, atRunTypesOrAll, defaultType);
181
+ }
161
182
  if (!popoverOpen) {
162
183
  setPopoverOpen(true);
163
184
  setActiveType(typeFromAt);
@@ -206,10 +227,17 @@ export var useMentionPopover = function useMentionPopover(_ref4) {
206
227
  close();
207
228
  }, [editorRef, onMentionAdded, event, close]);
208
229
  var handleTypeChange = useCallback(function (type) {
209
- var _editorRef$current3;
210
230
  setActiveType(type);
211
- var nextRunLength = getTriggerSequenceFromType(type, allowedTypes);
212
- (_editorRef$current3 = editorRef.current) === null || _editorRef$current3 === void 0 || _editorRef$current3.syncTriggerAtRunLength(nextRunLength);
231
+ if (type === 'skill') {
232
+ var _editorRef$current3;
233
+ (_editorRef$current3 = editorRef.current) === null || _editorRef$current3 === void 0 || _editorRef$current3.syncSkillTrigger();
234
+ } else {
235
+ var _editorRef$current4;
236
+ var nextRunLength = getTriggerSequenceFromType(type, allowedTypes.filter(function (entityType) {
237
+ return entityType !== 'skill';
238
+ }));
239
+ (_editorRef$current4 = editorRef.current) === null || _editorRef$current4 === void 0 || _editorRef$current4.syncTriggerAtRunLength(nextRunLength);
240
+ }
213
241
  event(EVENTS.aiChatMentionTypeSwitch, {
214
242
  type: type
215
243
  });
@@ -310,6 +338,7 @@ export var useMentionPopover = function useMentionPopover(_ref4) {
310
338
  loading: loading,
311
339
  error: error,
312
340
  hideRecentsLabel: hideRecentsLabel,
341
+ skillsCatalogEmpty: skillsCatalogEmpty,
313
342
  hasMore: hasMore,
314
343
  isLoadingMore: isLoadingMore,
315
344
  onReachListEnd: loadMore,
@@ -326,7 +355,7 @@ export var useMentionPopover = function useMentionPopover(_ref4) {
326
355
  }
327
356
  })
328
357
  }));
329
- }, [popoverOpen, popoverPos, mentionPopoverZIndex, allowedTypes, activeType, handleTypeChange, items, loading, error, hideRecentsLabel, hasMore, isLoadingMore, loadMore, searchValue, insertSelectedItem, activeIndex, isKeyboardNavActive]);
358
+ }, [popoverOpen, popoverPos, mentionPopoverZIndex, allowedTypes, activeType, handleTypeChange, items, loading, error, hideRecentsLabel, skillsCatalogEmpty, hasMore, isLoadingMore, loadMore, searchValue, insertSelectedItem, activeIndex, isKeyboardNavActive]);
330
359
  return {
331
360
  popoverOpen: popoverOpen,
332
361
  resetMentionOpenTracking: resetMentionOpenTracking,
@@ -336,4 +365,4 @@ export var useMentionPopover = function useMentionPopover(_ref4) {
336
365
  close: close
337
366
  };
338
367
  };
339
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIkNvbnRleHRNZW50aW9uUG9wb3ZlciIsIk1BSUFfVEFTS19QQU5FTF9PVkVSTEFZX0FUVFIiLCJTQ01QQW5jaG9yIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsInVzZUdsb2JhbENvbnRleHQiLCJ1c2VUIiwidXNlRW50aXR5U2VhcmNoIiwidXNlTWVudGlvbkFsbG93ZWRUeXBlcyIsInVzZUNhcmV0UG9zaXRpb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsImdldEF0UnVuVGFiVHlwZXMiLCJnZXRUcmlnZ2VyU2VxdWVuY2VGcm9tVHlwZSIsImdldFR5cGVGcm9tVHJpZ2dlclNlcXVlbmNlIiwianN4IiwiX2pzeCIsInVzZURlcml2ZWRTY29wZSIsIl9yZWYiLCJfY3R4JGNsaWVudCRpZCIsIl9jdHgkY2xpZW50IiwiX2N0eCRlbnRpdHlWYWx1ZXMiLCJfcmVmMiIsIl9yZWYzIiwiX2N0eCRwcm9qZWN0JGlkIiwiX2N0eCRwcm9qZWN0IiwiX2N0eCRlbnRpdHlWYWx1ZXMyIiwiX2N0eCRjaGlwc1Byb2plY3QiLCJfY3R4JGFnZW50JGVudGl0eSIsIl9jdHgkYWdlbnQiLCJfY3R4JGFnZW50JGNvbm5lY3RvcnMiLCJfY3R4JGFnZW50MiIsImN0eCIsImNsaWVudElkIiwiY2xpZW50IiwiaWQiLCJlbnRpdHlWYWx1ZXMiLCJwcm9qZWN0SWQiLCJwcm9qZWN0IiwiY2hpcHNQcm9qZWN0IiwiYWdlbnRFbnRpdHkiLCJhZ2VudCIsImVudGl0eSIsIm1jcFNsdWdzS2V5IiwiY29ubmVjdG9ycyIsImZpbmQiLCJjIiwiZ3JvdXAiLCJzbHVncyIsImpvaW4iLCJtY3BTbHVncyIsIl9jdHgkYWdlbnQkY29ubmVjdG9yczIiLCJfY3R4JGFnZW50MyIsInJhdyIsIl90b0NvbnN1bWFibGVBcnJheSIsIlNldCIsImZpbHRlciIsInMiLCJ0cmltIiwibGVuZ3RoIiwic29ydCIsInVzZU1lbnRpb25Qb3BvdmVyIiwiX3JlZjQiLCJlZGl0b3JSZWYiLCJwb3BvdmVyQW5jaG9yUmVmIiwiZW5hYmxlZFR5cGVzIiwib25NZW50aW9uQWRkZWQiLCJfdXNlVCIsInQiLCJldmVudCIsIl91c2VNZW50aW9uQWxsb3dlZFR5cCIsImFsbG93ZWRUeXBlcyIsImRlZmF1bHRUeXBlIiwibWVudGlvblBvcG92ZXJaSW5kZXgiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJhY3RpdmVUeXBlIiwic2V0QWN0aXZlVHlwZSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwicG9wb3Zlck9wZW4iLCJzZXRQb3BvdmVyT3BlbiIsIl91c2VTdGF0ZTUiLCJib3R0b20iLCJsZWZ0Iiwid2lkdGgiLCJfdXNlU3RhdGU2IiwicG9wb3ZlclBvcyIsInNldFBvcG92ZXJQb3MiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImFjdGl2ZUluZGV4Iiwic2V0QWN0aXZlSW5kZXgiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsImlzS2V5Ym9hcmROYXZBY3RpdmUiLCJzZXRJc0tleWJvYXJkTmF2QWN0aXZlIiwiaGFzRW1pdHRlZE9wZW4iLCJwb3BvdmVyUmVmIiwiZ2V0Q2FyZXRSZWN0Iiwic2NvcGUiLCJfdXNlRW50aXR5U2VhcmNoIiwiaXRlbXMiLCJsb2FkaW5nIiwiZXJyb3IiLCJoaWRlUmVjZW50c0xhYmVsIiwiaGFzTW9yZSIsImlzTG9hZGluZ01vcmUiLCJsb2FkTW9yZSIsInNlYXJjaFZhbHVlIiwidXBkYXRlU2VhcmNoVmFsdWUiLCJpbmNsdWRlcyIsInBvc2l0aW9uUG9wb3ZlciIsIl9wb3BvdmVyQW5jaG9yUmVmJGN1ciIsIl9lZGl0b3JSZWYkY3VycmVudCRnZSIsIl9lZGl0b3JSZWYkY3VycmVudCIsIl9lZGl0b3JSZWYkY3VycmVudCRnZTIiLCJmcm9tQW5jaG9yIiwiY3VycmVudCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImZyb21FZGl0b3IiLCJnZXRFZGl0b3JDbGllbnRSZWN0IiwiY2FsbCIsInJlY3QiLCJjYXJldCIsInZpZXdwb3J0SCIsIndpbmRvdyIsImlubmVySGVpZ2h0Iiwidmlld3BvcnRXIiwiaW5uZXJXaWR0aCIsImZhbGxiYWNrVyIsIk1hdGgiLCJtYXgiLCJtaW4iLCJ0b3AiLCJyZXNldE1lbnRpb25PcGVuVHJhY2tpbmciLCJjbG9zZSIsImhhbmRsZVRyaWdnZXIiLCJ0cmlnZ2VyIiwiYWN0aXZlIiwiYXRSdW5UYWJUeXBlcyIsImF0UnVuVHlwZXNPckFsbCIsImlzU2xhc2hUcmlnZ2VyIiwiYXRSdW5MZW5ndGgiLCJvdmVyZmxvd0F0Q291bnQiLCJlZmZlY3RpdmVBdFJ1bkxlbmd0aCIsImVmZmVjdGl2ZVF1ZXJ5IiwicXVlcnkiLCJjb25jYXQiLCJyZXBlYXQiLCJ0eXBlRnJvbUF0IiwiYWlDaGF0TWVudGlvbk9wZW4iLCJ0eXBlIiwiaW5zZXJ0U2VsZWN0ZWRJdGVtIiwiaXRlbSIsIl9pdGVtJHJhdyRjbGllbnRJZCIsIl9pdGVtJHJhdyRjbGllbnROYW1lIiwiX2l0ZW0kcmF3JHByb2plY3ROYW1lIiwiX2l0ZW0kcmF3JGZlZUlkIiwiX2l0ZW0kcmF3JGZhdGhlcklkIiwiX2l0ZW0kcmF3JGZhdGhlclRpdGxlIiwiX2l0ZW0kcmF3JHRvdGFsUHJveWVjIiwiX2l0ZW0kcmF3JG5hbWUiLCJfaXRlbSRyYXckcGljdHVyZSIsIl9pdGVtJHJhdyRwb3NpdGlvbk5hbSIsIl9pdGVtJHJhdyRlbWFpbCIsIl9lZGl0b3JSZWYkY3VycmVudDIiLCJtZW50aW9uIiwibGFiZWwiLCJwcmltYXJ5IiwibWV0YWRhdGEiLCJjbGllbnROYW1lIiwicHJvamVjdE5hbWUiLCJmZWVJZCIsImZhdGhlcklkIiwiZmF0aGVyVGl0bGUiLCJ0b3RhbFByb3llY3RvcyIsIm5hbWUiLCJwaWN0dXJlIiwicG9zaXRpb25OYW1lIiwiZW1haWwiLCJpbnNlcnRNZW50aW9uIiwiYWlDaGF0TWVudGlvblNlbGVjdCIsIlN0cmluZyIsImhhbmRsZVR5cGVDaGFuZ2UiLCJfZWRpdG9yUmVmJGN1cnJlbnQzIiwibmV4dFJ1bkxlbmd0aCIsInN5bmNUcmlnZ2VyQXRSdW5MZW5ndGgiLCJhaUNoYXRNZW50aW9uVHlwZVN3aXRjaCIsImhhbmRsZUtleURvd24iLCJlIiwia2V5IiwicHJldmVudERlZmF1bHQiLCJtZXRhS2V5IiwiYWx0S2V5IiwiaWR4IiwiaW5kZXhPZiIsImRlbHRhIiwibmV4dElkeCIsInByZXYiLCJ1bmRlZmluZWQiLCJoYW5kbGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVQb2ludGVyRG93bk91dHNpZGUiLCJtb3VzZUV2ZW50IiwiX3BvcG92ZXJSZWYkY3VycmVudCIsIl9wb3BvdmVyQW5jaG9yUmVmJGN1cjIiLCJ0YXJnZXQiLCJjb250YWlucyIsImRvY3VtZW50IiwicHJldklzTG9hZGluZ01vcmVSZWYiLCJwb3BvdmVyTm9kZSIsIl9vYmplY3RTcHJlYWQiLCJyZWYiLCJfZGVmaW5lUHJvcGVydHkiLCIkYm90dG9tIiwiJGxlZnQiLCIkd2lkdGgiLCIkekluZGV4Iiwib25Nb3VzZURvd24iLCJzdG9wUHJvcGFnYXRpb24iLCJjaGlsZHJlbiIsIm9uVHlwZUNoYW5nZSIsIm9uUmVhY2hMaXN0RW5kIiwia2V5Ym9hcmRIaW50IiwiZGVmYXVsdFZhbHVlIiwib25JdGVtU2VsZWN0ZWQiLCJvbkFjdGl2ZUluZGV4Q2hhbmdlIiwib25Nb3VzZU1vdmVJbkxpc3QiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlTWVudGlvblBvcG92ZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEtleWJvYXJkRXZlbnQsIFJlYWN0Tm9kZSwgUmVmT2JqZWN0LCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbkVkaXRvckhhbmRsZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXRvbXMvQ29udGV4dE1lbnRpb25FZGl0b3InXG5pbXBvcnQge1xuICBDb250ZXh0TWVudGlvblBvcG92ZXIsXG4gIE1BSUFfVEFTS19QQU5FTF9PVkVSTEFZX0FUVFIsXG4gIFNDTVBBbmNob3IsXG59IGZyb20gJy4uL2NvbXBvbmVudHMvYXRvbXMvQ29udGV4dE1lbnRpb25Qb3BvdmVyJ1xuaW1wb3J0IHsgdXNlTWFpYVRhc2tQYW5lbFpJbmRleCB9IGZyb20gJy4vdXNlTWFpYVRhc2tQYW5lbFpJbmRleCdcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4vdXNlVCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tY3ljbGVcbmltcG9ydCB7IEVudGl0eVNlYXJjaFNjb3BlLCB1c2VFbnRpdHlTZWFyY2ggfSBmcm9tICcuL3VzZUVudGl0eVNlYXJjaCdcbmltcG9ydCB7IHVzZU1lbnRpb25BbGxvd2VkVHlwZXMgfSBmcm9tICcuL3VzZU1lbnRpb25BbGxvd2VkVHlwZXMnXG5pbXBvcnQgeyB1c2VDYXJldFBvc2l0aW9uIH0gZnJvbSAnLi91c2VDYXJldFBvc2l0aW9uJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4vdXNlRXZlbnQnXG5pbXBvcnQgeyBDb250ZXh0RW50aXR5VHlwZSwgQ29udGV4dE1lbnRpb24sIENvbnRleHRNZW50aW9uSXRlbSB9IGZyb20gJy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHtcbiAgZ2V0QXRSdW5UYWJUeXBlcyxcbiAgZ2V0VHJpZ2dlclNlcXVlbmNlRnJvbVR5cGUsXG4gIGdldFR5cGVGcm9tVHJpZ2dlclNlcXVlbmNlLFxufSBmcm9tICcuLi91dGlscy9jb250ZXh0TWVudGlvblRyaWdnZXJzJ1xuXG5leHBvcnQgdHlwZSBVc2VNZW50aW9uUG9wb3Zlck9wdGlvbnMgPSB7XG4gIGVkaXRvclJlZjogUmVmT2JqZWN0PENvbnRleHRNZW50aW9uRWRpdG9ySGFuZGxlPlxuICAvKipcbiAgICogTm9kbyBjdXlvIGFuY2hvIHkgYm9yZGUgc3VwZXJpb3IgZGVmaW5lbiBlbCBwb3BvdmVyIChwLiBlai4gd3JhcHBlciBkZWwgaW5wdXQgZW4gTUFJQSkuXG4gICAqIFNpIG5vIHNlIHBhc2EsIHNlIHVzYSBlbCByZWN0IGRlbCBjb250ZW50ZWRpdGFibGUgKGBnZXRFZGl0b3JDbGllbnRSZWN0YCkuXG4gICAqL1xuICBwb3BvdmVyQW5jaG9yUmVmPzogUmVmT2JqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD5cbiAgLyoqIE92ZXJyaWRlIGRlbCBzZXQgZGUgdGFicyBwZXJtaXRpZGFzOyBzaSBubyBzZSBwYXNhIHNlIGRlcml2YSBkZWwgYWdlbnQuICovXG4gIGVuYWJsZWRUeXBlcz86IENvbnRleHRFbnRpdHlUeXBlW11cbiAgLyoqIENhbGxiYWNrIGN1YW5kbyBlbCB1c3VhcmlvIGluc2VydGEgdW5hIG1lbnRpb24gdsOtYSBjbGljay90ZWNsYWRvLiAqL1xuICBvbk1lbnRpb25BZGRlZD86IChtZW50aW9uOiBDb250ZXh0TWVudGlvbikgPT4gdm9pZFxufVxuXG5leHBvcnQgdHlwZSBVc2VNZW50aW9uUG9wb3ZlclJldHVybiA9IHtcbiAgcG9wb3Zlck9wZW46IGJvb2xlYW5cbiAgLyoqXG4gICAqIFJlaW5pY2lhIGVsIHRyYWNraW5nIGRlIGBBSV9DSEFUX01FTlRJT05fT1BFTmAgKHByaW1lcmEgYXBlcnR1cmEgcG9yIG1lbnNhamUpLlxuICAgKiBMbGFtYXIgdHJhcyBlbnZpYXIgZWwgbWVuc2FqZSBvIGFsIGNhbWJpYXIgZGUgY29udmVyc2FjacOzbi5cbiAgICovXG4gIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZzogKCkgPT4gdm9pZFxuICAvKiogUHJvY2VzYSBlbCB0cmlnZ2VyIHByb3ZlbmllbnRlIGRlbCBgQ29udGV4dE1lbnRpb25FZGl0b3Iub25JbnB1dGAuICovXG4gIGhhbmRsZVRyaWdnZXI6ICh0cmlnZ2VyOiB7IGFjdGl2ZTogYm9vbGVhbjsgcXVlcnk6IHN0cmluZzsgYXRSdW5MZW5ndGg6IG51bWJlciB9KSA9PiB2b2lkXG4gIC8qKlxuICAgKiBNYW5lam8gZGUgdGVjbGFzIHJlbGF0aXZhcyBhbCBwb3BvdmVyIChuYXZlZ2FjacOzbiwgc2VsZWNjacOzbiwgY2FtYmlvIGRlXG4gICAqIHRhYiB5IGVzY2FwZSkuIERldnVlbHZlIGB0cnVlYCBzaSBjb25zdW1pw7MgbGEga2V5LCBwYXJhIHF1ZSBlbCBjb25zdW1lclxuICAgKiBwdWVkYSBkZWNpZGlyIHNpIHNlZ3VpciBwcm9jZXNhbmRvIG90cmFzIHRlY2xhcyAocC5lai4gRW50ZXIgcGFyYSBlbnZpYXIpLlxuICAgKi9cbiAgaGFuZGxlS2V5RG93bjogKGU6IEtleWJvYXJkRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiBib29sZWFuXG4gIC8qKiBOb2RvIGRlbCBwb3BvdmVyOyBlbCBjb25zdW1lciBkZWJlIHBvcnRhcmxvIGNvbiBgY3JlYXRlUG9ydGFsYC4gKi9cbiAgcG9wb3Zlck5vZGU6IFJlYWN0Tm9kZSB8IG51bGxcbiAgLyoqIENpZXJyYSBlbCBwb3BvdmVyIHkgbGltcGlhIGVsIHF1ZXJ5LiAqL1xuICBjbG9zZTogKCkgPT4gdm9pZFxufVxuXG4vKipcbiAqIERlcml2YSBjbGllbnRJZCwgcHJvamVjdElkLCBhZ2VudEVudGl0eSB5IE1DUCBkZXNkZSBlbCBjb250ZXh0byBnbG9iYWwgKGluY2wuXG4gKiBgZW50aXR5VmFsdWVzYCB5IGBjaGlwc1Byb2plY3RgKSBwYXJhIGZpbHRyYXIgcmVjZW50cyB5IGLDunNxdWVkYSBHcmFwaFFMLlxuICovXG5jb25zdCB1c2VEZXJpdmVkU2NvcGUgPSAoKTogRW50aXR5U2VhcmNoU2NvcGUgPT4ge1xuICBjb25zdCBjdHggPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgY2xpZW50SWQgPSBjdHguY2xpZW50Py5pZCA/PyBjdHguZW50aXR5VmFsdWVzPy5jbGllbnRJZCA/PyBudWxsXG4gIGNvbnN0IHByb2plY3RJZCA9IGN0eC5wcm9qZWN0Py5pZCA/PyBjdHguZW50aXR5VmFsdWVzPy5wcm9qZWN0SWQgPz8gY3R4LmNoaXBzUHJvamVjdD8ucHJvamVjdElkID8/IG51bGxcbiAgY29uc3QgYWdlbnRFbnRpdHkgPSBjdHguYWdlbnQ/LmVudGl0eSA/PyBudWxsXG4gIGNvbnN0IG1jcFNsdWdzS2V5ID0gKGN0eC5hZ2VudD8uY29ubmVjdG9ycz8uZmluZChjID0+IGMuZ3JvdXAgPT09ICdNQ1AnKT8uc2x1Z3MgPz8gW10pLmpvaW4oJ3wnKVxuXG4gIGNvbnN0IG1jcFNsdWdzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgcmF3ID0gY3R4LmFnZW50Py5jb25uZWN0b3JzPy5maW5kKGMgPT4gYy5ncm91cCA9PT0gJ01DUCcpPy5zbHVncyA/PyBbXVxuICAgIHJldHVybiBbLi4ubmV3IFNldChyYXcuZmlsdGVyKChzKTogcyBpcyBzdHJpbmcgPT4gdHlwZW9mIHMgPT09ICdzdHJpbmcnICYmIHMudHJpbSgpLmxlbmd0aCA+IDApKV0uc29ydCgpXG4gIH0sIFttY3BTbHVnc0tleV0pXG5cbiAgcmV0dXJuIHVzZU1lbW88RW50aXR5U2VhcmNoU2NvcGU+KFxuICAgICgpID0+ICh7IGNsaWVudElkLCBwcm9qZWN0SWQsIG1jcFNsdWdzLCBhZ2VudEVudGl0eSB9KSxcbiAgICBbY2xpZW50SWQsIHByb2plY3RJZCwgbWNwU2x1Z3MsIGFnZW50RW50aXR5XVxuICApXG59XG5cbi8qKlxuICogRW5jYXBzdWxhIGxhIGzDs2dpY2EgZGVsIHBvcG92ZXIgZGUgQC1tZW50aW9ucyAoZXN0YWRvLCBmZXRjaCBwb3IgdGFiLCBhbmFseXRpY3MsXG4gKiBwb3NpY2lvbmFtaWVudG8pLiBFbCBjb25zdW1lciBtYW50aWVuZSBlbCBlZGl0b3IgeSBlbCBlbnbDrW8gZGVsIG1lbnNhamUuXG4gKiBMb3MgZmlsdHJvcyBkZSBiw7pzcXVlZGEgdXNhbiBgdXNlRGVyaXZlZFNjb3BlYDogZXNwZWNpYWxpc3RhIHByb3llY3RvIGFjb3RhIHRhcmVhc1xuICogYWwgYHByb2plY3RJZGAgZGVsIGNvbnRleHRvOyBlc3BlY2lhbGlzdGEgY2xpZW50ZSwgcHJveWVjdG9zIGFsIGBjbGllbnRJZGAgKGVuIGBleHRyYWAgZGUgc2VhcmNoKS5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZU1lbnRpb25Qb3BvdmVyID0gKHtcbiAgZWRpdG9yUmVmLFxuICBwb3BvdmVyQW5jaG9yUmVmLFxuICBlbmFibGVkVHlwZXMsXG4gIG9uTWVudGlvbkFkZGVkLFxufTogVXNlTWVudGlvblBvcG92ZXJPcHRpb25zKTogVXNlTWVudGlvblBvcG92ZXJSZXR1cm4gPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBhbGxvd2VkVHlwZXMsIGRlZmF1bHRUeXBlIH0gPSB1c2VNZW50aW9uQWxsb3dlZFR5cGVzKGVuYWJsZWRUeXBlcylcbiAgY29uc3QgbWVudGlvblBvcG92ZXJaSW5kZXggPSB1c2VNYWlhVGFza1BhbmVsWkluZGV4KDEyMDAsICdvdmVybGF5JylcbiAgY29uc3QgW2FjdGl2ZVR5cGUsIHNldEFjdGl2ZVR5cGVdID0gdXNlU3RhdGU8Q29udGV4dEVudGl0eVR5cGU+KGRlZmF1bHRUeXBlKVxuICBjb25zdCBbcG9wb3Zlck9wZW4sIHNldFBvcG92ZXJPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbcG9wb3ZlclBvcywgc2V0UG9wb3ZlclBvc10gPSB1c2VTdGF0ZTx7IGJvdHRvbTogbnVtYmVyOyBsZWZ0OiBudW1iZXI7IHdpZHRoOiBudW1iZXIgfT4oe1xuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwLFxuICAgIHdpZHRoOiAwLFxuICB9KVxuICBjb25zdCBbYWN0aXZlSW5kZXgsIHNldEFjdGl2ZUluZGV4XSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFtpc0tleWJvYXJkTmF2QWN0aXZlLCBzZXRJc0tleWJvYXJkTmF2QWN0aXZlXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBoYXNFbWl0dGVkT3BlbiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgcG9wb3ZlclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGdldENhcmV0UmVjdCA9IHVzZUNhcmV0UG9zaXRpb24oKVxuXG4gIGNvbnN0IHNjb3BlID0gdXNlRGVyaXZlZFNjb3BlKClcbiAgY29uc3QgeyBpdGVtcywgbG9hZGluZywgZXJyb3IsIGhpZGVSZWNlbnRzTGFiZWwsIGhhc01vcmUsIGlzTG9hZGluZ01vcmUsIGxvYWRNb3JlLCBzZWFyY2hWYWx1ZSwgdXBkYXRlU2VhcmNoVmFsdWUgfSA9XG4gICAgdXNlRW50aXR5U2VhcmNoKGFjdGl2ZVR5cGUsIHNjb3BlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkVHlwZXMuaW5jbHVkZXMoYWN0aXZlVHlwZSkpIHtcbiAgICAgIHNldEFjdGl2ZVR5cGUoZGVmYXVsdFR5cGUpXG4gICAgfVxuICB9LCBbYWxsb3dlZFR5cGVzLCBhY3RpdmVUeXBlLCBkZWZhdWx0VHlwZV0pXG5cbiAgY29uc3QgcG9zaXRpb25Qb3BvdmVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGZyb21BbmNob3IgPSBwb3BvdmVyQW5jaG9yUmVmPy5jdXJyZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgIGNvbnN0IGZyb21FZGl0b3IgPSBlZGl0b3JSZWYuY3VycmVudD8uZ2V0RWRpdG9yQ2xpZW50UmVjdD8uKCkgPz8gbnVsbFxuICAgIGNvbnN0IHJlY3QgPSBmcm9tQW5jaG9yID8/IGZyb21FZGl0b3JcbiAgICBpZiAoIXJlY3QgfHwgcmVjdC53aWR0aCA8PSAwKSB7XG4gICAgICBjb25zdCBjYXJldCA9IGdldENhcmV0UmVjdCgpXG4gICAgICBpZiAoIWNhcmV0KSByZXR1cm5cbiAgICAgIGNvbnN0IHZpZXdwb3J0SCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgY29uc3Qgdmlld3BvcnRXID0gd2luZG93LmlubmVyV2lkdGhcbiAgICAgIGNvbnN0IGZhbGxiYWNrVyA9IDMyMFxuICAgICAgY29uc3QgbGVmdCA9IE1hdGgubWF4KDgsIE1hdGgubWluKHZpZXdwb3J0VyAtIGZhbGxiYWNrVyAtIDgsIGNhcmV0LmxlZnQpKVxuICAgICAgc2V0UG9wb3ZlclBvcyh7XG4gICAgICAgIHdpZHRoOiBmYWxsYmFja1csXG4gICAgICAgIGxlZnQsXG4gICAgICAgIGJvdHRvbTogdmlld3BvcnRIIC0gY2FyZXQudG9wICsgNCxcbiAgICAgIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB2aWV3cG9ydFcgPSB3aW5kb3cuaW5uZXJXaWR0aFxuICAgIGNvbnN0IHZpZXdwb3J0SCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgIGNvbnN0IHsgd2lkdGggfSA9IHJlY3RcbiAgICBjb25zdCBsZWZ0ID0gTWF0aC5tYXgoOCwgTWF0aC5taW4odmlld3BvcnRXIC0gd2lkdGggLSA4LCByZWN0LmxlZnQpKVxuICAgIC8qKiBQb3BvdmVyIHNpZW1wcmUgYXJyaWJhIGRlbCBpbnB1dDogYm9yZGUgaW5mZXJpb3IgZGVsIHBvcG92ZXIgfjRweCBzb2JyZSBlbCBib3JkZSBzdXBlcmlvciBkZWwgYW5jbGEuICovXG4gICAgc2V0UG9wb3ZlclBvcyh7XG4gICAgICB3aWR0aCxcbiAgICAgIGxlZnQsXG4gICAgICBib3R0b206IHZpZXdwb3J0SCAtIHJlY3QudG9wICsgNCxcbiAgICB9KVxuICB9LCBbcG9wb3ZlckFuY2hvclJlZiwgZWRpdG9yUmVmLCBnZXRDYXJldFJlY3RdKVxuXG4gIGNvbnN0IHJlc2V0TWVudGlvbk9wZW5UcmFja2luZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBoYXNFbWl0dGVkT3Blbi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW10pXG5cbiAgY29uc3QgY2xvc2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0UG9wb3Zlck9wZW4oZmFsc2UpXG4gICAgdXBkYXRlU2VhcmNoVmFsdWUoJycpXG4gIH0sIFt1cGRhdGVTZWFyY2hWYWx1ZV0pXG5cbiAgY29uc3QgaGFuZGxlVHJpZ2dlciA9IHVzZUNhbGxiYWNrKFxuICAgICh0cmlnZ2VyOiB7IGFjdGl2ZTogYm9vbGVhbjsgcXVlcnk6IHN0cmluZzsgYXRSdW5MZW5ndGg6IG51bWJlciB9KSA9PiB7XG4gICAgICBpZiAoYWxsb3dlZFR5cGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAocG9wb3Zlck9wZW4pIGNsb3NlKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0cmlnZ2VyLmFjdGl2ZSkge1xuICAgICAgICBjb25zdCBhdFJ1blRhYlR5cGVzID0gZ2V0QXRSdW5UYWJUeXBlcyhhbGxvd2VkVHlwZXMpXG4gICAgICAgIGNvbnN0IGF0UnVuVHlwZXNPckFsbCA9IGF0UnVuVGFiVHlwZXMubGVuZ3RoID4gMCA/IGF0UnVuVGFiVHlwZXMgOiBhbGxvd2VkVHlwZXNcbiAgICAgICAgY29uc3QgaXNTbGFzaFRyaWdnZXIgPSB0cmlnZ2VyLmF0UnVuTGVuZ3RoIDwgMFxuICAgICAgICBjb25zdCBvdmVyZmxvd0F0Q291bnQgPSBpc1NsYXNoVHJpZ2dlciA/IDAgOiBNYXRoLm1heCgwLCB0cmlnZ2VyLmF0UnVuTGVuZ3RoIC0gYXRSdW5UYWJUeXBlcy5sZW5ndGgpXG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZUF0UnVuTGVuZ3RoID0gaXNTbGFzaFRyaWdnZXJcbiAgICAgICAgICA/IHRyaWdnZXIuYXRSdW5MZW5ndGhcbiAgICAgICAgICA6IE1hdGgubWluKHRyaWdnZXIuYXRSdW5MZW5ndGgsIGF0UnVuVHlwZXNPckFsbC5sZW5ndGgpXG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZVF1ZXJ5ID0gaXNTbGFzaFRyaWdnZXIgPyB0cmlnZ2VyLnF1ZXJ5IDogYCR7J0AnLnJlcGVhdChvdmVyZmxvd0F0Q291bnQpfSR7dHJpZ2dlci5xdWVyeX1gXG4gICAgICAgIGNvbnN0IHR5cGVGcm9tQXQgPSBnZXRUeXBlRnJvbVRyaWdnZXJTZXF1ZW5jZShlZmZlY3RpdmVBdFJ1bkxlbmd0aCwgYXRSdW5UeXBlc09yQWxsLCBkZWZhdWx0VHlwZSlcblxuICAgICAgICBpZiAoIXBvcG92ZXJPcGVuKSB7XG4gICAgICAgICAgc2V0UG9wb3Zlck9wZW4odHJ1ZSlcbiAgICAgICAgICBzZXRBY3RpdmVUeXBlKHR5cGVGcm9tQXQpXG4gICAgICAgICAgcG9zaXRpb25Qb3BvdmVyKClcbiAgICAgICAgICBpZiAoIWhhc0VtaXR0ZWRPcGVuLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRNZW50aW9uT3BlbiwgeyB0eXBlOiB0eXBlRnJvbUF0IH0pXG4gICAgICAgICAgICBoYXNFbWl0dGVkT3Blbi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRBY3RpdmVUeXBlKHR5cGVGcm9tQXQpXG4gICAgICAgICAgcG9zaXRpb25Qb3BvdmVyKClcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVTZWFyY2hWYWx1ZShlZmZlY3RpdmVRdWVyeSlcbiAgICAgIH0gZWxzZSBpZiAocG9wb3Zlck9wZW4pIHtcbiAgICAgICAgY2xvc2UoKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FsbG93ZWRUeXBlcywgZGVmYXVsdFR5cGUsIHBvcG92ZXJPcGVuLCBwb3NpdGlvblBvcG92ZXIsIHVwZGF0ZVNlYXJjaFZhbHVlLCBldmVudCwgY2xvc2VdXG4gIClcblxuICBjb25zdCBpbnNlcnRTZWxlY3RlZEl0ZW0gPSB1c2VDYWxsYmFjayhcbiAgICAoaXRlbTogQ29udGV4dE1lbnRpb25JdGVtKSA9PiB7XG4gICAgICBjb25zdCBtZW50aW9uOiBDb250ZXh0TWVudGlvbiA9IHtcbiAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgIHR5cGU6IGl0ZW0udHlwZSxcbiAgICAgICAgbGFiZWw6IGl0ZW0ucHJpbWFyeSxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICBjbGllbnRJZDogaXRlbS5yYXcuY2xpZW50SWQgPz8gbnVsbCxcbiAgICAgICAgICBjbGllbnROYW1lOiBpdGVtLnJhdy5jbGllbnROYW1lID8/IG51bGwsXG4gICAgICAgICAgcHJvamVjdE5hbWU6IGl0ZW0ucmF3LnByb2plY3ROYW1lID8/IG51bGwsXG4gICAgICAgICAgZmVlSWQ6IGl0ZW0ucmF3LmZlZUlkID8/IG51bGwsXG4gICAgICAgICAgZmF0aGVySWQ6IGl0ZW0ucmF3LmZhdGhlcklkID8/IG51bGwsXG4gICAgICAgICAgZmF0aGVyVGl0bGU6IGl0ZW0ucmF3LmZhdGhlclRpdGxlID8/IG51bGwsXG4gICAgICAgICAgdG90YWxQcm95ZWN0b3M6IGl0ZW0ucmF3LnRvdGFsUHJveWVjdG9zID8/IG51bGwsXG4gICAgICAgICAgbmFtZTogaXRlbS5yYXcubmFtZSA/PyBudWxsLFxuICAgICAgICAgIHBpY3R1cmU6IGl0ZW0ucmF3LnBpY3R1cmUgPz8gbnVsbCxcbiAgICAgICAgICBwb3NpdGlvbk5hbWU6IGl0ZW0ucmF3LnBvc2l0aW9uTmFtZSA/PyBudWxsLFxuICAgICAgICAgIGVtYWlsOiBpdGVtLnJhdy5lbWFpbCA/PyBudWxsLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/Lmluc2VydE1lbnRpb24obWVudGlvbilcbiAgICAgIG9uTWVudGlvbkFkZGVkPy4obWVudGlvbilcbiAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRNZW50aW9uU2VsZWN0LCB7IHR5cGU6IG1lbnRpb24udHlwZSwgaWQ6IFN0cmluZyhtZW50aW9uLmlkKSB9KVxuICAgICAgY2xvc2UoKVxuICAgIH0sXG4gICAgW2VkaXRvclJlZiwgb25NZW50aW9uQWRkZWQsIGV2ZW50LCBjbG9zZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVR5cGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAodHlwZTogQ29udGV4dEVudGl0eVR5cGUpID0+IHtcbiAgICAgIHNldEFjdGl2ZVR5cGUodHlwZSlcbiAgICAgIGNvbnN0IG5leHRSdW5MZW5ndGggPSBnZXRUcmlnZ2VyU2VxdWVuY2VGcm9tVHlwZSh0eXBlLCBhbGxvd2VkVHlwZXMpXG4gICAgICBlZGl0b3JSZWYuY3VycmVudD8uc3luY1RyaWdnZXJBdFJ1bkxlbmd0aChuZXh0UnVuTGVuZ3RoKVxuICAgICAgZXZlbnQoRVZFTlRTLmFpQ2hhdE1lbnRpb25UeXBlU3dpdGNoLCB7IHR5cGUgfSlcbiAgICB9LFxuICAgIFthbGxvd2VkVHlwZXMsIGVkaXRvclJlZiwgZXZlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IEtleWJvYXJkRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KTogYm9vbGVhbiA9PiB7XG4gICAgICBpZiAoIXBvcG92ZXJPcGVuIHx8IGFsbG93ZWRUeXBlcy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZVxuXG4gICAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICBjbG9zZSgpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmICgoZS5rZXkgPT09ICdBcnJvd1JpZ2h0JyB8fCBlLmtleSA9PT0gJ0Fycm93TGVmdCcpICYmIChlLm1ldGFLZXkgfHwgZS5hbHRLZXkpKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICBjb25zdCBpZHggPSBhbGxvd2VkVHlwZXMuaW5kZXhPZihhY3RpdmVUeXBlKVxuICAgICAgICBjb25zdCBkZWx0YSA9IGUua2V5ID09PSAnQXJyb3dSaWdodCcgPyAxIDogLTFcbiAgICAgICAgY29uc3QgbmV4dElkeCA9IChpZHggKyBkZWx0YSArIGFsbG93ZWRUeXBlcy5sZW5ndGgpICUgYWxsb3dlZFR5cGVzLmxlbmd0aFxuICAgICAgICBoYW5kbGVUeXBlQ2hhbmdlKGFsbG93ZWRUeXBlc1tuZXh0SWR4XSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlXG5cbiAgICAgIGlmIChlLmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIHNldElzS2V5Ym9hcmROYXZBY3RpdmUodHJ1ZSlcbiAgICAgICAgc2V0QWN0aXZlSW5kZXgocHJldiA9PiAoaXRlbXMubGVuZ3RoID4gMCA/IE1hdGgubWluKHByZXYgKyAxLCBpdGVtcy5sZW5ndGggLSAxKSA6IDApKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKGUua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIHNldElzS2V5Ym9hcmROYXZBY3RpdmUodHJ1ZSlcbiAgICAgICAgc2V0QWN0aXZlSW5kZXgocHJldiA9PiBNYXRoLm1heChwcmV2IC0gMSwgMCkpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgfHwgZS5rZXkgPT09ICdUYWInKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICBpbnNlcnRTZWxlY3RlZEl0ZW0oaXRlbXNbYWN0aXZlSW5kZXhdKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcbiAgICBbcG9wb3Zlck9wZW4sIGl0ZW1zLCBhbGxvd2VkVHlwZXMsIGFjdGl2ZVR5cGUsIGFjdGl2ZUluZGV4LCBpbnNlcnRTZWxlY3RlZEl0ZW0sIGNsb3NlLCBoYW5kbGVUeXBlQ2hhbmdlXVxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXBvcG92ZXJPcGVuKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHBvc2l0aW9uUG9wb3ZlcigpXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZXIsIHRydWUpXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZXIpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVyLCB0cnVlKVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZXIpXG4gICAgfVxuICB9LCBbcG9wb3Zlck9wZW4sIHBvc2l0aW9uUG9wb3Zlcl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXBvcG92ZXJPcGVuKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBjb25zdCBoYW5kbGVQb2ludGVyRG93bk91dHNpZGUgPSAobW91c2VFdmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gbW91c2VFdmVudC50YXJnZXQgYXMgTm9kZSB8IG51bGxcbiAgICAgIGlmICghdGFyZ2V0KSByZXR1cm5cbiAgICAgIGlmIChwb3BvdmVyUmVmLmN1cnJlbnQ/LmNvbnRhaW5zKHRhcmdldCkpIHJldHVyblxuICAgICAgaWYgKHBvcG92ZXJBbmNob3JSZWY/LmN1cnJlbnQ/LmNvbnRhaW5zKHRhcmdldCkpIHJldHVyblxuICAgICAgY2xvc2UoKVxuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZVBvaW50ZXJEb3duT3V0c2lkZSlcbiAgICByZXR1cm4gKCkgPT4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlUG9pbnRlckRvd25PdXRzaWRlKVxuICB9LCBbcG9wb3Zlck9wZW4sIGNsb3NlLCBwb3BvdmVyQW5jaG9yUmVmXSlcblxuICBjb25zdCBwcmV2SXNMb2FkaW5nTW9yZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcHJldklzTG9hZGluZ01vcmVSZWYuY3VycmVudCA9IGlzTG9hZGluZ01vcmVcbiAgICB9XG4gIH0sIFtpc0xvYWRpbmdNb3JlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChwcmV2SXNMb2FkaW5nTW9yZVJlZi5jdXJyZW50KSByZXR1cm5cbiAgICBzZXRBY3RpdmVJbmRleCgwKVxuICB9LCBbaXRlbXMubGVuZ3RoLCBhY3RpdmVUeXBlXSlcblxuICBjb25zdCBwb3BvdmVyTm9kZSA9IHVzZU1lbW88UmVhY3ROb2RlIHwgbnVsbD4oKCkgPT4ge1xuICAgIGlmICghcG9wb3Zlck9wZW4pIHJldHVybiBudWxsXG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ01QQW5jaG9yXG4gICAgICAgIHJlZj17cG9wb3ZlclJlZn1cbiAgICAgICAgey4uLnsgW01BSUFfVEFTS19QQU5FTF9PVkVSTEFZX0FUVFJdOiAnJyB9fVxuICAgICAgICAkYm90dG9tPXtwb3BvdmVyUG9zLmJvdHRvbX1cbiAgICAgICAgJGxlZnQ9e3BvcG92ZXJQb3MubGVmdH1cbiAgICAgICAgJHdpZHRoPXtwb3BvdmVyUG9zLndpZHRofVxuICAgICAgICAkekluZGV4PXttZW50aW9uUG9wb3ZlclpJbmRleH1cbiAgICAgICAgb25Nb3VzZURvd249e2UgPT4gZS5zdG9wUHJvcGFnYXRpb24oKX1cbiAgICAgID5cbiAgICAgICAgPENvbnRleHRNZW50aW9uUG9wb3ZlclxuICAgICAgICAgIGFsbG93ZWRUeXBlcz17YWxsb3dlZFR5cGVzfVxuICAgICAgICAgIGFjdGl2ZVR5cGU9e2FjdGl2ZVR5cGV9XG4gICAgICAgICAgb25UeXBlQ2hhbmdlPXtoYW5kbGVUeXBlQ2hhbmdlfVxuICAgICAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgICAgICBsb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgICAgIGVycm9yPXtlcnJvcn1cbiAgICAgICAgICBoaWRlUmVjZW50c0xhYmVsPXtoaWRlUmVjZW50c0xhYmVsfVxuICAgICAgICAgIGhhc01vcmU9e2hhc01vcmV9XG4gICAgICAgICAgaXNMb2FkaW5nTW9yZT17aXNMb2FkaW5nTW9yZX1cbiAgICAgICAgICBvblJlYWNoTGlzdEVuZD17bG9hZE1vcmV9XG4gICAgICAgICAgc2VhcmNoVmFsdWU9e3NlYXJjaFZhbHVlfVxuICAgICAgICAgIGtleWJvYXJkSGludD17dCgnY29udGV4dE1lbnRpb24ua2V5Ym9hcmRIaW50Jywge1xuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiAnTmF2ZWdhY2nDs24gZW50cmUgcGVzdGHDsWFzOiBALCBAQCwgQEBA4oCmIGVuIG9yZGVuLiBUYW1iacOpbiBBbHQvQ21kICsg4oaQL+KGkicsXG4gICAgICAgICAgfSl9XG4gICAgICAgICAgb25JdGVtU2VsZWN0ZWQ9e2luc2VydFNlbGVjdGVkSXRlbX1cbiAgICAgICAgICBhY3RpdmVJbmRleD17YWN0aXZlSW5kZXh9XG4gICAgICAgICAgb25BY3RpdmVJbmRleENoYW5nZT17c2V0QWN0aXZlSW5kZXh9XG4gICAgICAgICAgaXNLZXlib2FyZE5hdkFjdGl2ZT17aXNLZXlib2FyZE5hdkFjdGl2ZX1cbiAgICAgICAgICBvbk1vdXNlTW92ZUluTGlzdD17KCkgPT4gc2V0SXNLZXlib2FyZE5hdkFjdGl2ZShmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICA8L1NDTVBBbmNob3I+XG4gICAgKVxuICB9LCBbXG4gICAgcG9wb3Zlck9wZW4sXG4gICAgcG9wb3ZlclBvcyxcbiAgICBtZW50aW9uUG9wb3ZlclpJbmRleCxcbiAgICBhbGxvd2VkVHlwZXMsXG4gICAgYWN0aXZlVHlwZSxcbiAgICBoYW5kbGVUeXBlQ2hhbmdlLFxuICAgIGl0ZW1zLFxuICAgIGxvYWRpbmcsXG4gICAgZXJyb3IsXG4gICAgaGlkZVJlY2VudHNMYWJlbCxcbiAgICBoYXNNb3JlLFxuICAgIGlzTG9hZGluZ01vcmUsXG4gICAgbG9hZE1vcmUsXG4gICAgc2VhcmNoVmFsdWUsXG4gICAgaW5zZXJ0U2VsZWN0ZWRJdGVtLFxuICAgIGFjdGl2ZUluZGV4LFxuICAgIGlzS2V5Ym9hcmROYXZBY3RpdmUsXG4gIF0pXG5cbiAgcmV0dXJuIHsgcG9wb3Zlck9wZW4sIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZywgaGFuZGxlVHJpZ2dlciwgaGFuZGxlS2V5RG93biwgcG9wb3Zlck5vZGUsIGNsb3NlIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxTQUE4Q0EsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUU5RyxTQUNFQyxxQkFBcUIsRUFDckJDLDRCQUE0QixFQUM1QkMsVUFBVSxRQUNMLDJDQUEyQztBQUNsRCxTQUFTQyxzQkFBc0IsUUFBUSwwQkFBMEI7QUFDakUsU0FBU0MsZ0JBQWdCLFFBQVEsMkJBQTJCO0FBQzVELFNBQVNDLElBQUksUUFBUSxRQUFRO0FBQzdCO0FBQ0EsU0FBNEJDLGVBQWUsUUFBUSxtQkFBbUI7QUFDdEUsU0FBU0Msc0JBQXNCLFFBQVEsMEJBQTBCO0FBQ2pFLFNBQVNDLGdCQUFnQixRQUFRLG9CQUFvQjtBQUNyRCxTQUFTQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxZQUFZO0FBRTdDLFNBQ0VDLGdCQUFnQixFQUNoQkMsMEJBQTBCLEVBQzFCQywwQkFBMEIsUUFDckIsaUNBQWlDO0FBQUEsU0FBQUMsR0FBQSxJQUFBQyxJQUFBO0FBb0N4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU1DLGVBQWUsR0FBRyxTQUFsQkEsZUFBZUEsQ0FBQSxFQUE0QjtFQUFBLElBQUFDLElBQUEsRUFBQUMsY0FBQSxFQUFBQyxXQUFBLEVBQUFDLGlCQUFBLEVBQUFDLEtBQUEsRUFBQUMsS0FBQSxFQUFBQyxlQUFBLEVBQUFDLFlBQUEsRUFBQUMsa0JBQUEsRUFBQUMsaUJBQUEsRUFBQUMsaUJBQUEsRUFBQUMsVUFBQSxFQUFBQyxxQkFBQSxFQUFBQyxXQUFBO0VBQy9DLElBQU1DLEdBQUcs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
368
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIkNvbnRleHRNZW50aW9uUG9wb3ZlciIsIk1BSUFfVEFTS19QQU5FTF9PVkVSTEFZX0FUVFIiLCJTQ01QQW5jaG9yIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsInVzZUdsb2JhbENvbnRleHQiLCJ1c2VUIiwidXNlRW50aXR5U2VhcmNoIiwidXNlTWVudGlvbkFsbG93ZWRUeXBlcyIsInVzZUNhcmV0UG9zaXRpb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsImdldEF0UnVuVGFiVHlwZXMiLCJnZXRUcmlnZ2VyU2VxdWVuY2VGcm9tVHlwZSIsImdldFR5cGVGcm9tVHJpZ2dlclNlcXVlbmNlIiwianN4IiwiX2pzeCIsInVzZURlcml2ZWRTY29wZSIsIl9yZWYiLCJfY3R4JGNsaWVudCRpZCIsIl9jdHgkY2xpZW50IiwiX2N0eCRlbnRpdHlWYWx1ZXMiLCJfcmVmMiIsIl9yZWYzIiwiX2N0eCRwcm9qZWN0JGlkIiwiX2N0eCRwcm9qZWN0IiwiX2N0eCRlbnRpdHlWYWx1ZXMyIiwiX2N0eCRjaGlwc1Byb2plY3QiLCJfY3R4JGFnZW50JGVudGl0eSIsIl9jdHgkYWdlbnQiLCJfY3R4JGFnZW50JGNvbm5lY3RvcnMiLCJfY3R4JGFnZW50MiIsImN0eCIsImNsaWVudElkIiwiY2xpZW50IiwiaWQiLCJlbnRpdHlWYWx1ZXMiLCJwcm9qZWN0SWQiLCJwcm9qZWN0IiwiY2hpcHNQcm9qZWN0IiwiYWdlbnRFbnRpdHkiLCJhZ2VudCIsImVudGl0eSIsIm1jcFNsdWdzS2V5IiwiY29ubmVjdG9ycyIsImZpbmQiLCJjIiwiZ3JvdXAiLCJzbHVncyIsImpvaW4iLCJtY3BTbHVncyIsIl9jdHgkYWdlbnQkY29ubmVjdG9yczIiLCJfY3R4JGFnZW50MyIsInJhdyIsIl90b0NvbnN1bWFibGVBcnJheSIsIlNldCIsImZpbHRlciIsInMiLCJ0cmltIiwibGVuZ3RoIiwic29ydCIsInVzZU1lbnRpb25Qb3BvdmVyIiwiX3JlZjQiLCJlZGl0b3JSZWYiLCJwb3BvdmVyQW5jaG9yUmVmIiwiZW5hYmxlZFR5cGVzIiwic2tpbGxzIiwib25NZW50aW9uQWRkZWQiLCJfdXNlVCIsInQiLCJldmVudCIsIl91c2VNZW50aW9uQWxsb3dlZFR5cCIsImFsbG93ZWRUeXBlcyIsImRlZmF1bHRUeXBlIiwibWVudGlvblBvcG92ZXJaSW5kZXgiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJhY3RpdmVUeXBlIiwic2V0QWN0aXZlVHlwZSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwicG9wb3Zlck9wZW4iLCJzZXRQb3BvdmVyT3BlbiIsIl91c2VTdGF0ZTUiLCJib3R0b20iLCJsZWZ0Iiwid2lkdGgiLCJfdXNlU3RhdGU2IiwicG9wb3ZlclBvcyIsInNldFBvcG92ZXJQb3MiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImFjdGl2ZUluZGV4Iiwic2V0QWN0aXZlSW5kZXgiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsImlzS2V5Ym9hcmROYXZBY3RpdmUiLCJzZXRJc0tleWJvYXJkTmF2QWN0aXZlIiwiaGFzRW1pdHRlZE9wZW4iLCJwb3BvdmVyUmVmIiwiZ2V0Q2FyZXRSZWN0IiwiZGVyaXZlZFNjb3BlIiwic2NvcGUiLCJfb2JqZWN0U3ByZWFkIiwiX3VzZUVudGl0eVNlYXJjaCIsIml0ZW1zIiwibG9hZGluZyIsImVycm9yIiwiaGlkZVJlY2VudHNMYWJlbCIsImhhc01vcmUiLCJpc0xvYWRpbmdNb3JlIiwibG9hZE1vcmUiLCJzZWFyY2hWYWx1ZSIsInVwZGF0ZVNlYXJjaFZhbHVlIiwic2tpbGxzQ2F0YWxvZ0VtcHR5IiwiaW5jbHVkZXMiLCJwb3NpdGlvblBvcG92ZXIiLCJfcG9wb3ZlckFuY2hvclJlZiRjdXIiLCJfZWRpdG9yUmVmJGN1cnJlbnQkZ2UiLCJfZWRpdG9yUmVmJGN1cnJlbnQiLCJfZWRpdG9yUmVmJGN1cnJlbnQkZ2UyIiwiZnJvbUFuY2hvciIsImN1cnJlbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJmcm9tRWRpdG9yIiwiZ2V0RWRpdG9yQ2xpZW50UmVjdCIsImNhbGwiLCJyZWN0IiwiY2FyZXQiLCJ2aWV3cG9ydEgiLCJ3aW5kb3ciLCJpbm5lckhlaWdodCIsInZpZXdwb3J0VyIsImlubmVyV2lkdGgiLCJmYWxsYmFja1ciLCJNYXRoIiwibWF4IiwibWluIiwidG9wIiwicmVzZXRNZW50aW9uT3BlblRyYWNraW5nIiwiY2xvc2UiLCJoYW5kbGVUcmlnZ2VyIiwidHJpZ2dlciIsImFjdGl2ZSIsImlzU2tpbGxUcmlnZ2VyIiwiYXRSdW5MZW5ndGgiLCJxdWVyeSIsInN0YXJ0c1dpdGgiLCJhdFJ1blRhYlR5cGVzIiwiYXRSdW5UeXBlc09yQWxsIiwiaXNTbGFzaFRyaWdnZXIiLCJ0eXBlRnJvbUF0IiwiZWZmZWN0aXZlUXVlcnkiLCJzbGljZSIsIm92ZXJmbG93QXRDb3VudCIsImVmZmVjdGl2ZUF0UnVuTGVuZ3RoIiwiY29uY2F0IiwicmVwZWF0IiwiYWlDaGF0TWVudGlvbk9wZW4iLCJ0eXBlIiwiaW5zZXJ0U2VsZWN0ZWRJdGVtIiwiaXRlbSIsIl9pdGVtJHJhdyRjbGllbnRJZCIsIl9pdGVtJHJhdyRjbGllbnROYW1lIiwiX2l0ZW0kcmF3JHByb2plY3ROYW1lIiwiX2l0ZW0kcmF3JGZlZUlkIiwiX2l0ZW0kcmF3JGZhdGhlcklkIiwiX2l0ZW0kcmF3JGZhdGhlclRpdGxlIiwiX2l0ZW0kcmF3JHRvdGFsUHJveWVjIiwiX2l0ZW0kcmF3JG5hbWUiLCJfaXRlbSRyYXckcGljdHVyZSIsIl9pdGVtJHJhdyRwb3NpdGlvbk5hbSIsIl9pdGVtJHJhdyRlbWFpbCIsIl9lZGl0b3JSZWYkY3VycmVudDIiLCJtZW50aW9uIiwibGFiZWwiLCJwcmltYXJ5IiwibWV0YWRhdGEiLCJjbGllbnROYW1lIiwicHJvamVjdE5hbWUiLCJmZWVJZCIsImZhdGhlcklkIiwiZmF0aGVyVGl0bGUiLCJ0b3RhbFByb3llY3RvcyIsIm5hbWUiLCJwaWN0dXJlIiwicG9zaXRpb25OYW1lIiwiZW1haWwiLCJpbnNlcnRNZW50aW9uIiwiYWlDaGF0TWVudGlvblNlbGVjdCIsIlN0cmluZyIsImhhbmRsZVR5cGVDaGFuZ2UiLCJfZWRpdG9yUmVmJGN1cnJlbnQzIiwic3luY1NraWxsVHJpZ2dlciIsIl9lZGl0b3JSZWYkY3VycmVudDQiLCJuZXh0UnVuTGVuZ3RoIiwiZW50aXR5VHlwZSIsInN5bmNUcmlnZ2VyQXRSdW5MZW5ndGgiLCJhaUNoYXRNZW50aW9uVHlwZVN3aXRjaCIsImhhbmRsZUtleURvd24iLCJlIiwia2V5IiwicHJldmVudERlZmF1bHQiLCJtZXRhS2V5IiwiYWx0S2V5IiwiaWR4IiwiaW5kZXhPZiIsImRlbHRhIiwibmV4dElkeCIsInByZXYiLCJ1bmRlZmluZWQiLCJoYW5kbGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVQb2ludGVyRG93bk91dHNpZGUiLCJtb3VzZUV2ZW50IiwiX3BvcG92ZXJSZWYkY3VycmVudCIsIl9wb3BvdmVyQW5jaG9yUmVmJGN1cjIiLCJ0YXJnZXQiLCJjb250YWlucyIsImRvY3VtZW50IiwicHJldklzTG9hZGluZ01vcmVSZWYiLCJwb3BvdmVyTm9kZSIsInJlZiIsIl9kZWZpbmVQcm9wZXJ0eSIsIiRib3R0b20iLCIkbGVmdCIsIiR3aWR0aCIsIiR6SW5kZXgiLCJvbk1vdXNlRG93biIsInN0b3BQcm9wYWdhdGlvbiIsImNoaWxkcmVuIiwib25UeXBlQ2hhbmdlIiwib25SZWFjaExpc3RFbmQiLCJrZXlib2FyZEhpbnQiLCJkZWZhdWx0VmFsdWUiLCJvbkl0ZW1TZWxlY3RlZCIsIm9uQWN0aXZlSW5kZXhDaGFuZ2UiLCJvbk1vdXNlTW92ZUluTGlzdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VNZW50aW9uUG9wb3Zlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgS2V5Ym9hcmRFdmVudCwgUmVhY3ROb2RlLCBSZWZPYmplY3QsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IENvbnRleHRNZW50aW9uRWRpdG9ySGFuZGxlIH0gZnJvbSAnLi4vY29tcG9uZW50cy9hdG9tcy9Db250ZXh0TWVudGlvbkVkaXRvcidcbmltcG9ydCB7XG4gIENvbnRleHRNZW50aW9uUG9wb3ZlcixcbiAgTUFJQV9UQVNLX1BBTkVMX09WRVJMQVlfQVRUUixcbiAgU0NNUEFuY2hvcixcbn0gZnJvbSAnLi4vY29tcG9uZW50cy9hdG9tcy9Db250ZXh0TWVudGlvblBvcG92ZXInXG5pbXBvcnQgeyB1c2VNYWlhVGFza1BhbmVsWkluZGV4IH0gZnJvbSAnLi91c2VNYWlhVGFza1BhbmVsWkluZGV4J1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi91c2VUJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1jeWNsZVxuaW1wb3J0IHsgRW50aXR5U2VhcmNoU2NvcGUsIHVzZUVudGl0eVNlYXJjaCB9IGZyb20gJy4vdXNlRW50aXR5U2VhcmNoJ1xuaW1wb3J0IHsgdXNlTWVudGlvbkFsbG93ZWRUeXBlcyB9IGZyb20gJy4vdXNlTWVudGlvbkFsbG93ZWRUeXBlcydcbmltcG9ydCB7IHVzZUNhcmV0UG9zaXRpb24gfSBmcm9tICcuL3VzZUNhcmV0UG9zaXRpb24nXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi91c2VFdmVudCdcbmltcG9ydCB7IENvbnRleHRFbnRpdHlUeXBlLCBDb250ZXh0TWVudGlvbiwgQ29udGV4dE1lbnRpb25JdGVtIH0gZnJvbSAnLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgdHlwZSB7IFNraWxsIH0gZnJvbSAnLi4vdHlwZXMvc2tpbGwnXG5pbXBvcnQge1xuICBnZXRBdFJ1blRhYlR5cGVzLFxuICBnZXRUcmlnZ2VyU2VxdWVuY2VGcm9tVHlwZSxcbiAgZ2V0VHlwZUZyb21UcmlnZ2VyU2VxdWVuY2UsXG59IGZyb20gJy4uL3V0aWxzL2NvbnRleHRNZW50aW9uVHJpZ2dlcnMnXG5cbmV4cG9ydCB0eXBlIFVzZU1lbnRpb25Qb3BvdmVyT3B0aW9ucyA9IHtcbiAgZWRpdG9yUmVmOiBSZWZPYmplY3Q8Q29udGV4dE1lbnRpb25FZGl0b3JIYW5kbGU+XG4gIC8qKlxuICAgKiBOb2RvIGN1eW8gYW5jaG8geSBib3JkZSBzdXBlcmlvciBkZWZpbmVuIGVsIHBvcG92ZXIgKHAuIGVqLiB3cmFwcGVyIGRlbCBpbnB1dCBlbiBNQUlBKS5cbiAgICogU2kgbm8gc2UgcGFzYSwgc2UgdXNhIGVsIHJlY3QgZGVsIGNvbnRlbnRlZGl0YWJsZSAoYGdldEVkaXRvckNsaWVudFJlY3RgKS5cbiAgICovXG4gIHBvcG92ZXJBbmNob3JSZWY/OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQgfCBudWxsPlxuICAvKiogT3ZlcnJpZGUgZGVsIHNldCBkZSB0YWJzIHBlcm1pdGlkYXM7IHNpIG5vIHNlIHBhc2Egc2UgZGVyaXZhIGRlbCBhZ2VudC4gKi9cbiAgZW5hYmxlZFR5cGVzPzogQ29udGV4dEVudGl0eVR5cGVbXVxuICAvKiogU2tpbGxzIGlueWVjdGFkYXMgZGlyZWN0YW1lbnRlIChkZXYvdGVzdGluZykuIFNpIHNlIHByb3ZlZW4sIHNlIG9taXRlIGVsIGZldGNoIFJFU1QuICovXG4gIHNraWxscz86IFNraWxsW11cbiAgLyoqIENhbGxiYWNrIGN1YW5kbyBlbCB1c3VhcmlvIGluc2VydGEgdW5hIG1lbnRpb24gdsOtYSBjbGljay90ZWNsYWRvLiAqL1xuICBvbk1lbnRpb25BZGRlZD86IChtZW50aW9uOiBDb250ZXh0TWVudGlvbikgPT4gdm9pZFxufVxuXG5leHBvcnQgdHlwZSBVc2VNZW50aW9uUG9wb3ZlclJldHVybiA9IHtcbiAgcG9wb3Zlck9wZW46IGJvb2xlYW5cbiAgLyoqXG4gICAqIFJlaW5pY2lhIGVsIHRyYWNraW5nIGRlIGBBSV9DSEFUX01FTlRJT05fT1BFTmAgKHByaW1lcmEgYXBlcnR1cmEgcG9yIG1lbnNhamUpLlxuICAgKiBMbGFtYXIgdHJhcyBlbnZpYXIgZWwgbWVuc2FqZSBvIGFsIGNhbWJpYXIgZGUgY29udmVyc2FjacOzbi5cbiAgICovXG4gIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZzogKCkgPT4gdm9pZFxuICAvKiogUHJvY2VzYSBlbCB0cmlnZ2VyIHByb3ZlbmllbnRlIGRlbCBgQ29udGV4dE1lbnRpb25FZGl0b3Iub25JbnB1dGAuICovXG4gIGhhbmRsZVRyaWdnZXI6ICh0cmlnZ2VyOiB7IGFjdGl2ZTogYm9vbGVhbjsgcXVlcnk6IHN0cmluZzsgYXRSdW5MZW5ndGg6IG51bWJlciB9KSA9PiB2b2lkXG4gIC8qKlxuICAgKiBNYW5lam8gZGUgdGVjbGFzIHJlbGF0aXZhcyBhbCBwb3BvdmVyIChuYXZlZ2FjacOzbiwgc2VsZWNjacOzbiwgY2FtYmlvIGRlXG4gICAqIHRhYiB5IGVzY2FwZSkuIERldnVlbHZlIGB0cnVlYCBzaSBjb25zdW1pw7MgbGEga2V5LCBwYXJhIHF1ZSBlbCBjb25zdW1lclxuICAgKiBwdWVkYSBkZWNpZGlyIHNpIHNlZ3VpciBwcm9jZXNhbmRvIG90cmFzIHRlY2xhcyAocC5lai4gRW50ZXIgcGFyYSBlbnZpYXIpLlxuICAgKi9cbiAgaGFuZGxlS2V5RG93bjogKGU6IEtleWJvYXJkRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiBib29sZWFuXG4gIC8qKiBOb2RvIGRlbCBwb3BvdmVyOyBlbCBjb25zdW1lciBkZWJlIHBvcnRhcmxvIGNvbiBgY3JlYXRlUG9ydGFsYC4gKi9cbiAgcG9wb3Zlck5vZGU6IFJlYWN0Tm9kZSB8IG51bGxcbiAgLyoqIENpZXJyYSBlbCBwb3BvdmVyIHkgbGltcGlhIGVsIHF1ZXJ5LiAqL1xuICBjbG9zZTogKCkgPT4gdm9pZFxufVxuXG4vKipcbiAqIERlcml2YSBjbGllbnRJZCwgcHJvamVjdElkLCBhZ2VudEVudGl0eSB5IE1DUCBkZXNkZSBlbCBjb250ZXh0byBnbG9iYWwgKGluY2wuXG4gKiBgZW50aXR5VmFsdWVzYCB5IGBjaGlwc1Byb2plY3RgKSBwYXJhIGZpbHRyYXIgcmVjZW50cyB5IGLDunNxdWVkYSBHcmFwaFFMLlxuICovXG5jb25zdCB1c2VEZXJpdmVkU2NvcGUgPSAoKTogRW50aXR5U2VhcmNoU2NvcGUgPT4ge1xuICBjb25zdCBjdHggPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgY2xpZW50SWQgPSBjdHguY2xpZW50Py5pZCA/PyBjdHguZW50aXR5VmFsdWVzPy5jbGllbnRJZCA/PyBudWxsXG4gIGNvbnN0IHByb2plY3RJZCA9IGN0eC5wcm9qZWN0Py5pZCA/PyBjdHguZW50aXR5VmFsdWVzPy5wcm9qZWN0SWQgPz8gY3R4LmNoaXBzUHJvamVjdD8ucHJvamVjdElkID8/IG51bGxcbiAgY29uc3QgYWdlbnRFbnRpdHkgPSBjdHguYWdlbnQ/LmVudGl0eSA/PyBudWxsXG4gIGNvbnN0IG1jcFNsdWdzS2V5ID0gKGN0eC5hZ2VudD8uY29ubmVjdG9ycz8uZmluZChjID0+IGMuZ3JvdXAgPT09ICdNQ1AnKT8uc2x1Z3MgPz8gW10pLmpvaW4oJ3wnKVxuXG4gIGNvbnN0IG1jcFNsdWdzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgcmF3ID0gY3R4LmFnZW50Py5jb25uZWN0b3JzPy5maW5kKGMgPT4gYy5ncm91cCA9PT0gJ01DUCcpPy5zbHVncyA/PyBbXVxuICAgIHJldHVybiBbLi4ubmV3IFNldChyYXcuZmlsdGVyKChzKTogcyBpcyBzdHJpbmcgPT4gdHlwZW9mIHMgPT09ICdzdHJpbmcnICYmIHMudHJpbSgpLmxlbmd0aCA+IDApKV0uc29ydCgpXG4gIH0sIFttY3BTbHVnc0tleV0pXG5cbiAgcmV0dXJuIHVzZU1lbW88RW50aXR5U2VhcmNoU2NvcGU+KFxuICAgICgpID0+ICh7IGNsaWVudElkLCBwcm9qZWN0SWQsIG1jcFNsdWdzLCBhZ2VudEVudGl0eSB9KSxcbiAgICBbY2xpZW50SWQsIHByb2plY3RJZCwgbWNwU2x1Z3MsIGFnZW50RW50aXR5XSAvLyBza2lsbHMgc2UgaW55ZWN0YSBlbiB1c2VNZW50aW9uUG9wb3ZlclxuICApXG59XG5cbi8qKlxuICogRW5jYXBzdWxhIGxhIGzDs2dpY2EgZGVsIHBvcG92ZXIgZGUgQC1tZW50aW9ucyAoZXN0YWRvLCBmZXRjaCBwb3IgdGFiLCBhbmFseXRpY3MsXG4gKiBwb3NpY2lvbmFtaWVudG8pLiBFbCBjb25zdW1lciBtYW50aWVuZSBlbCBlZGl0b3IgeSBlbCBlbnbDrW8gZGVsIG1lbnNhamUuXG4gKiBMb3MgZmlsdHJvcyBkZSBiw7pzcXVlZGEgdXNhbiBgdXNlRGVyaXZlZFNjb3BlYDogZXNwZWNpYWxpc3RhIHByb3llY3RvIGFjb3RhIHRhcmVhc1xuICogYWwgYHByb2plY3RJZGAgZGVsIGNvbnRleHRvOyBlc3BlY2lhbGlzdGEgY2xpZW50ZSwgcHJveWVjdG9zIGFsIGBjbGllbnRJZGAgKGVuIGBleHRyYWAgZGUgc2VhcmNoKS5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZU1lbnRpb25Qb3BvdmVyID0gKHtcbiAgZWRpdG9yUmVmLFxuICBwb3BvdmVyQW5jaG9yUmVmLFxuICBlbmFibGVkVHlwZXMsXG4gIHNraWxscyxcbiAgb25NZW50aW9uQWRkZWQsXG59OiBVc2VNZW50aW9uUG9wb3Zlck9wdGlvbnMpOiBVc2VNZW50aW9uUG9wb3ZlclJldHVybiA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IGV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IGFsbG93ZWRUeXBlcywgZGVmYXVsdFR5cGUgfSA9IHVzZU1lbnRpb25BbGxvd2VkVHlwZXMoZW5hYmxlZFR5cGVzKVxuICBjb25zdCBtZW50aW9uUG9wb3ZlclpJbmRleCA9IHVzZU1haWFUYXNrUGFuZWxaSW5kZXgoMTIwMCwgJ292ZXJsYXknKVxuICBjb25zdCBbYWN0aXZlVHlwZSwgc2V0QWN0aXZlVHlwZV0gPSB1c2VTdGF0ZTxDb250ZXh0RW50aXR5VHlwZT4oZGVmYXVsdFR5cGUpXG4gIGNvbnN0IFtwb3BvdmVyT3Blbiwgc2V0UG9wb3Zlck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtwb3BvdmVyUG9zLCBzZXRQb3BvdmVyUG9zXSA9IHVzZVN0YXRlPHsgYm90dG9tOiBudW1iZXI7IGxlZnQ6IG51bWJlcjsgd2lkdGg6IG51bWJlciB9Pih7XG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgd2lkdGg6IDAsXG4gIH0pXG4gIGNvbnN0IFthY3RpdmVJbmRleCwgc2V0QWN0aXZlSW5kZXhdID0gdXNlU3RhdGUoMClcbiAgY29uc3QgW2lzS2V5Ym9hcmROYXZBY3RpdmUsIHNldElzS2V5Ym9hcmROYXZBY3RpdmVdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IGhhc0VtaXR0ZWRPcGVuID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBwb3BvdmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3QgZ2V0Q2FyZXRSZWN0ID0gdXNlQ2FyZXRQb3NpdGlvbigpXG5cbiAgY29uc3QgZGVyaXZlZFNjb3BlID0gdXNlRGVyaXZlZFNjb3BlKClcbiAgY29uc3Qgc2NvcGUgPSB1c2VNZW1vPEVudGl0eVNlYXJjaFNjb3BlPihcbiAgICAoKSA9PiAoc2tpbGxzID8geyAuLi5kZXJpdmVkU2NvcGUsIHNraWxscyB9IDogZGVyaXZlZFNjb3BlKSxcbiAgICBbZGVyaXZlZFNjb3BlLCBza2lsbHNdXG4gIClcbiAgY29uc3Qge1xuICAgIGl0ZW1zLFxuICAgIGxvYWRpbmcsXG4gICAgZXJyb3IsXG4gICAgaGlkZVJlY2VudHNMYWJlbCxcbiAgICBoYXNNb3JlLFxuICAgIGlzTG9hZGluZ01vcmUsXG4gICAgbG9hZE1vcmUsXG4gICAgc2VhcmNoVmFsdWUsXG4gICAgdXBkYXRlU2VhcmNoVmFsdWUsXG4gICAgc2tpbGxzQ2F0YWxvZ0VtcHR5LFxuICB9ID0gdXNlRW50aXR5U2VhcmNoKGFjdGl2ZVR5cGUsIHNjb3BlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkVHlwZXMuaW5jbHVkZXMoYWN0aXZlVHlwZSkpIHtcbiAgICAgIHNldEFjdGl2ZVR5cGUoZGVmYXVsdFR5cGUpXG4gICAgfVxuICB9LCBbYWxsb3dlZFR5cGVzLCBhY3RpdmVUeXBlLCBkZWZhdWx0VHlwZV0pXG5cbiAgY29uc3QgcG9zaXRpb25Qb3BvdmVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGZyb21BbmNob3IgPSBwb3BvdmVyQW5jaG9yUmVmPy5jdXJyZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgIGNvbnN0IGZyb21FZGl0b3IgPSBlZGl0b3JSZWYuY3VycmVudD8uZ2V0RWRpdG9yQ2xpZW50UmVjdD8uKCkgPz8gbnVsbFxuICAgIGNvbnN0IHJlY3QgPSBmcm9tQW5jaG9yID8/IGZyb21FZGl0b3JcbiAgICBpZiAoIXJlY3QgfHwgcmVjdC53aWR0aCA8PSAwKSB7XG4gICAgICBjb25zdCBjYXJldCA9IGdldENhcmV0UmVjdCgpXG4gICAgICBpZiAoIWNhcmV0KSByZXR1cm5cbiAgICAgIGNvbnN0IHZpZXdwb3J0SCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgY29uc3Qgdmlld3BvcnRXID0gd2luZG93LmlubmVyV2lkdGhcbiAgICAgIGNvbnN0IGZhbGxiYWNrVyA9IDMyMFxuICAgICAgY29uc3QgbGVmdCA9IE1hdGgubWF4KDgsIE1hdGgubWluKHZpZXdwb3J0VyAtIGZhbGxiYWNrVyAtIDgsIGNhcmV0LmxlZnQpKVxuICAgICAgc2V0UG9wb3ZlclBvcyh7XG4gICAgICAgIHdpZHRoOiBmYWxsYmFja1csXG4gICAgICAgIGxlZnQsXG4gICAgICAgIGJvdHRvbTogdmlld3BvcnRIIC0gY2FyZXQudG9wICsgNCxcbiAgICAgIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB2aWV3cG9ydFcgPSB3aW5kb3cuaW5uZXJXaWR0aFxuICAgIGNvbnN0IHZpZXdwb3J0SCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgIGNvbnN0IHsgd2lkdGggfSA9IHJlY3RcbiAgICBjb25zdCBsZWZ0ID0gTWF0aC5tYXgoOCwgTWF0aC5taW4odmlld3BvcnRXIC0gd2lkdGggLSA4LCByZWN0LmxlZnQpKVxuICAgIC8qKiBQb3BvdmVyIHNpZW1wcmUgYXJyaWJhIGRlbCBpbnB1dDogYm9yZGUgaW5mZXJpb3IgZGVsIHBvcG92ZXIgfjRweCBzb2JyZSBlbCBib3JkZSBzdXBlcmlvciBkZWwgYW5jbGEuICovXG4gICAgc2V0UG9wb3ZlclBvcyh7XG4gICAgICB3aWR0aCxcbiAgICAgIGxlZnQsXG4gICAgICBib3R0b206IHZpZXdwb3J0SCAtIHJlY3QudG9wICsgNCxcbiAgICB9KVxuICB9LCBbcG9wb3ZlckFuY2hvclJlZiwgZWRpdG9yUmVmLCBnZXRDYXJldFJlY3RdKVxuXG4gIGNvbnN0IHJlc2V0TWVudGlvbk9wZW5UcmFja2luZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBoYXNFbWl0dGVkT3Blbi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW10pXG5cbiAgY29uc3QgY2xvc2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0UG9wb3Zlck9wZW4oZmFsc2UpXG4gICAgdXBkYXRlU2VhcmNoVmFsdWUoJycpXG4gIH0sIFt1cGRhdGVTZWFyY2hWYWx1ZV0pXG5cbiAgY29uc3QgaGFuZGxlVHJpZ2dlciA9IHVzZUNhbGxiYWNrKFxuICAgICh0cmlnZ2VyOiB7IGFjdGl2ZTogYm9vbGVhbjsgcXVlcnk6IHN0cmluZzsgYXRSdW5MZW5ndGg6IG51bWJlciB9KSA9PiB7XG4gICAgICBpZiAoYWxsb3dlZFR5cGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAocG9wb3Zlck9wZW4pIGNsb3NlKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0cmlnZ2VyLmFjdGl2ZSkge1xuICAgICAgICBjb25zdCBpc1NraWxsVHJpZ2dlciA9XG4gICAgICAgICAgYWxsb3dlZFR5cGVzLmluY2x1ZGVzKCdza2lsbCcpICYmIHRyaWdnZXIuYXRSdW5MZW5ndGggPT09IDEgJiYgdHJpZ2dlci5xdWVyeS5zdGFydHNXaXRoKCcvJylcbiAgICAgICAgY29uc3QgYXRSdW5UYWJUeXBlcyA9IGdldEF0UnVuVGFiVHlwZXMoYWxsb3dlZFR5cGVzKVxuICAgICAgICBjb25zdCBhdFJ1blR5cGVzT3JBbGwgPSBhdFJ1blRhYlR5cGVzLmxlbmd0aCA+IDAgPyBhdFJ1blRhYlR5cGVzIDogYWxsb3dlZFR5cGVzLmZpbHRlcih0ID0+IHQgIT09ICdza2lsbCcpXG4gICAgICAgIGNvbnN0IGlzU2xhc2hUcmlnZ2VyID0gdHJpZ2dlci5hdFJ1bkxlbmd0aCA8IDBcblxuICAgICAgICBsZXQgdHlwZUZyb21BdDogQ29udGV4dEVudGl0eVR5cGVcbiAgICAgICAgbGV0IGVmZmVjdGl2ZVF1ZXJ5OiBzdHJpbmdcblxuICAgICAgICBpZiAoaXNTa2lsbFRyaWdnZXIpIHtcbiAgICAgICAgICB0eXBlRnJvbUF0ID0gJ3NraWxsJ1xuICAgICAgICAgIGVmZmVjdGl2ZVF1ZXJ5ID0gdHJpZ2dlci5xdWVyeS5zbGljZSgxKVxuICAgICAgICB9IGVsc2UgaWYgKGlzU2xhc2hUcmlnZ2VyKSB7XG4gICAgICAgICAgdHlwZUZyb21BdCA9IGdldFR5cGVGcm9tVHJpZ2dlclNlcXVlbmNlKHRyaWdnZXIuYXRSdW5MZW5ndGgsIGFsbG93ZWRUeXBlcywgZGVmYXVsdFR5cGUpXG4gICAgICAgICAgZWZmZWN0aXZlUXVlcnkgPSB0cmlnZ2VyLnF1ZXJ5XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgb3ZlcmZsb3dBdENvdW50ID0gTWF0aC5tYXgoMCwgdHJpZ2dlci5hdFJ1bkxlbmd0aCAtIGF0UnVuVGFiVHlwZXMubGVuZ3RoKVxuICAgICAgICAgIGNvbnN0IGVmZmVjdGl2ZUF0UnVuTGVuZ3RoID0gTWF0aC5taW4odHJpZ2dlci5hdFJ1bkxlbmd0aCwgYXRSdW5UeXBlc09yQWxsLmxlbmd0aClcbiAgICAgICAgICBlZmZlY3RpdmVRdWVyeSA9IGAkeydAJy5yZXBlYXQob3ZlcmZsb3dBdENvdW50KX0ke3RyaWdnZXIucXVlcnl9YFxuICAgICAgICAgIHR5cGVGcm9tQXQgPSBnZXRUeXBlRnJvbVRyaWdnZXJTZXF1ZW5jZShlZmZlY3RpdmVBdFJ1bkxlbmd0aCwgYXRSdW5UeXBlc09yQWxsLCBkZWZhdWx0VHlwZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcG9wb3Zlck9wZW4pIHtcbiAgICAgICAgICBzZXRQb3BvdmVyT3Blbih0cnVlKVxuICAgICAgICAgIHNldEFjdGl2ZVR5cGUodHlwZUZyb21BdClcbiAgICAgICAgICBwb3NpdGlvblBvcG92ZXIoKVxuICAgICAgICAgIGlmICghaGFzRW1pdHRlZE9wZW4uY3VycmVudCkge1xuICAgICAgICAgICAgZXZlbnQoRVZFTlRTLmFpQ2hhdE1lbnRpb25PcGVuLCB7IHR5cGU6IHR5cGVGcm9tQXQgfSlcbiAgICAgICAgICAgIGhhc0VtaXR0ZWRPcGVuLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldEFjdGl2ZVR5cGUodHlwZUZyb21BdClcbiAgICAgICAgICBwb3NpdGlvblBvcG92ZXIoKVxuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVNlYXJjaFZhbHVlKGVmZmVjdGl2ZVF1ZXJ5KVxuICAgICAgfSBlbHNlIGlmIChwb3BvdmVyT3Blbikge1xuICAgICAgICBjbG9zZSgpXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWxsb3dlZFR5cGVzLCBkZWZhdWx0VHlwZSwgcG9wb3Zlck9wZW4sIHBvc2l0aW9uUG9wb3ZlciwgdXBkYXRlU2VhcmNoVmFsdWUsIGV2ZW50LCBjbG9zZV1cbiAgKVxuXG4gIGNvbnN0IGluc2VydFNlbGVjdGVkSXRlbSA9IHVzZUNhbGxiYWNrKFxuICAgIChpdGVtOiBDb250ZXh0TWVudGlvbkl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IG1lbnRpb246IENvbnRleHRNZW50aW9uID0ge1xuICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgdHlwZTogaXRlbS50eXBlLFxuICAgICAgICBsYWJlbDogaXRlbS5wcmltYXJ5LFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIGNsaWVudElkOiBpdGVtLnJhdy5jbGllbnRJZCA/PyBudWxsLFxuICAgICAgICAgIGNsaWVudE5hbWU6IGl0ZW0ucmF3LmNsaWVudE5hbWUgPz8gbnVsbCxcbiAgICAgICAgICBwcm9qZWN0TmFtZTogaXRlbS5yYXcucHJvamVjdE5hbWUgPz8gbnVsbCxcbiAgICAgICAgICBmZWVJZDogaXRlbS5yYXcuZmVlSWQgPz8gbnVsbCxcbiAgICAgICAgICBmYXRoZXJJZDogaXRlbS5yYXcuZmF0aGVySWQgPz8gbnVsbCxcbiAgICAgICAgICBmYXRoZXJUaXRsZTogaXRlbS5yYXcuZmF0aGVyVGl0bGUgPz8gbnVsbCxcbiAgICAgICAgICB0b3RhbFByb3llY3RvczogaXRlbS5yYXcudG90YWxQcm95ZWN0b3MgPz8gbnVsbCxcbiAgICAgICAgICBuYW1lOiBpdGVtLnJhdy5uYW1lID8/IG51bGwsXG4gICAgICAgICAgcGljdHVyZTogaXRlbS5yYXcucGljdHVyZSA/PyBudWxsLFxuICAgICAgICAgIHBvc2l0aW9uTmFtZTogaXRlbS5yYXcucG9zaXRpb25OYW1lID8/IG51bGwsXG4gICAgICAgICAgZW1haWw6IGl0ZW0ucmF3LmVtYWlsID8/IG51bGwsXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgICBlZGl0b3JSZWYuY3VycmVudD8uaW5zZXJ0TWVudGlvbihtZW50aW9uKVxuICAgICAgb25NZW50aW9uQWRkZWQ/LihtZW50aW9uKVxuICAgICAgZXZlbnQoRVZFTlRTLmFpQ2hhdE1lbnRpb25TZWxlY3QsIHsgdHlwZTogbWVudGlvbi50eXBlLCBpZDogU3RyaW5nKG1lbnRpb24uaWQpIH0pXG4gICAgICBjbG9zZSgpXG4gICAgfSxcbiAgICBbZWRpdG9yUmVmLCBvbk1lbnRpb25BZGRlZCwgZXZlbnQsIGNsb3NlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlVHlwZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgICh0eXBlOiBDb250ZXh0RW50aXR5VHlwZSkgPT4ge1xuICAgICAgc2V0QWN0aXZlVHlwZSh0eXBlKVxuICAgICAgaWYgKHR5cGUgPT09ICdza2lsbCcpIHtcbiAgICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LnN5bmNTa2lsbFRyaWdnZXIoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV4dFJ1bkxlbmd0aCA9IGdldFRyaWdnZXJTZXF1ZW5jZUZyb21UeXBlKFxuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgYWxsb3dlZFR5cGVzLmZpbHRlcihlbnRpdHlUeXBlID0+IGVudGl0eVR5cGUgIT09ICdza2lsbCcpXG4gICAgICAgIClcbiAgICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LnN5bmNUcmlnZ2VyQXRSdW5MZW5ndGgobmV4dFJ1bkxlbmd0aClcbiAgICAgIH1cbiAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRNZW50aW9uVHlwZVN3aXRjaCwgeyB0eXBlIH0pXG4gICAgfSxcbiAgICBbYWxsb3dlZFR5cGVzLCBlZGl0b3JSZWYsIGV2ZW50XVxuICApXG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBLZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50Pik6IGJvb2xlYW4gPT4ge1xuICAgICAgaWYgKCFwb3BvdmVyT3BlbiB8fCBhbGxvd2VkVHlwZXMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2VcblxuICAgICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgY2xvc2UoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoKGUua2V5ID09PSAnQXJyb3dSaWdodCcgfHwgZS5rZXkgPT09ICdBcnJvd0xlZnQnKSAmJiAoZS5tZXRhS2V5IHx8IGUuYWx0S2V5KSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgY29uc3QgaWR4ID0gYWxsb3dlZFR5cGVzLmluZGV4T2YoYWN0aXZlVHlwZSlcbiAgICAgICAgY29uc3QgZGVsdGEgPSBlLmtleSA9PT0gJ0Fycm93UmlnaHQnID8gMSA6IC0xXG4gICAgICAgIGNvbnN0IG5leHRJZHggPSAoaWR4ICsgZGVsdGEgKyBhbGxvd2VkVHlwZXMubGVuZ3RoKSAlIGFsbG93ZWRUeXBlcy5sZW5ndGhcbiAgICAgICAgaGFuZGxlVHlwZUNoYW5nZShhbGxvd2VkVHlwZXNbbmV4dElkeF0pXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZVxuXG4gICAgICBpZiAoZS5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICBzZXRJc0tleWJvYXJkTmF2QWN0aXZlKHRydWUpXG4gICAgICAgIHNldEFjdGl2ZUluZGV4KHByZXYgPT4gKGl0ZW1zLmxlbmd0aCA+IDAgPyBNYXRoLm1pbihwcmV2ICsgMSwgaXRlbXMubGVuZ3RoIC0gMSkgOiAwKSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChlLmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICBzZXRJc0tleWJvYXJkTmF2QWN0aXZlKHRydWUpXG4gICAgICAgIHNldEFjdGl2ZUluZGV4KHByZXYgPT4gTWF0aC5tYXgocHJldiAtIDEsIDApKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInIHx8IGUua2V5ID09PSAnVGFiJykge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgaW5zZXJ0U2VsZWN0ZWRJdGVtKGl0ZW1zW2FjdGl2ZUluZGV4XSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG4gICAgW3BvcG92ZXJPcGVuLCBpdGVtcywgYWxsb3dlZFR5cGVzLCBhY3RpdmVUeXBlLCBhY3RpdmVJbmRleCwgaW5zZXJ0U2VsZWN0ZWRJdGVtLCBjbG9zZSwgaGFuZGxlVHlwZUNoYW5nZV1cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFwb3BvdmVyT3BlbikgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiBwb3NpdGlvblBvcG92ZXIoKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVyLCB0cnVlKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVyKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlciwgdHJ1ZSlcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVyKVxuICAgIH1cbiAgfSwgW3BvcG92ZXJPcGVuLCBwb3NpdGlvblBvcG92ZXJdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFwb3BvdmVyT3BlbikgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgY29uc3QgaGFuZGxlUG9pbnRlckRvd25PdXRzaWRlID0gKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IG1vdXNlRXZlbnQudGFyZ2V0IGFzIE5vZGUgfCBudWxsXG4gICAgICBpZiAoIXRhcmdldCkgcmV0dXJuXG4gICAgICBpZiAocG9wb3ZlclJlZi5jdXJyZW50Py5jb250YWlucyh0YXJnZXQpKSByZXR1cm5cbiAgICAgIGlmIChwb3BvdmVyQW5jaG9yUmVmPy5jdXJyZW50Py5jb250YWlucyh0YXJnZXQpKSByZXR1cm5cbiAgICAgIGNsb3NlKClcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVQb2ludGVyRG93bk91dHNpZGUpXG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZVBvaW50ZXJEb3duT3V0c2lkZSlcbiAgfSwgW3BvcG92ZXJPcGVuLCBjbG9zZSwgcG9wb3ZlckFuY2hvclJlZl0pXG5cbiAgY29uc3QgcHJldklzTG9hZGluZ01vcmVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHByZXZJc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQgPSBpc0xvYWRpbmdNb3JlXG4gICAgfVxuICB9LCBbaXNMb2FkaW5nTW9yZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocHJldklzTG9hZGluZ01vcmVSZWYuY3VycmVudCkgcmV0dXJuXG4gICAgc2V0QWN0aXZlSW5kZXgoMClcbiAgfSwgW2l0ZW1zLmxlbmd0aCwgYWN0aXZlVHlwZV0pXG5cbiAgY29uc3QgcG9wb3Zlck5vZGUgPSB1c2VNZW1vPFJlYWN0Tm9kZSB8IG51bGw+KCgpID0+IHtcbiAgICBpZiAoIXBvcG92ZXJPcGVuKSByZXR1cm4gbnVsbFxuICAgIHJldHVybiAoXG4gICAgICA8U0NNUEFuY2hvclxuICAgICAgICByZWY9e3BvcG92ZXJSZWZ9XG4gICAgICAgIHsuLi57IFtNQUlBX1RBU0tfUEFORUxfT1ZFUkxBWV9BVFRSXTogJycgfX1cbiAgICAgICAgJGJvdHRvbT17cG9wb3ZlclBvcy5ib3R0b219XG4gICAgICAgICRsZWZ0PXtwb3BvdmVyUG9zLmxlZnR9XG4gICAgICAgICR3aWR0aD17cG9wb3ZlclBvcy53aWR0aH1cbiAgICAgICAgJHpJbmRleD17bWVudGlvblBvcG92ZXJaSW5kZXh9XG4gICAgICAgIG9uTW91c2VEb3duPXtlID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICA+XG4gICAgICAgIDxDb250ZXh0TWVudGlvblBvcG92ZXJcbiAgICAgICAgICBhbGxvd2VkVHlwZXM9e2FsbG93ZWRUeXBlc31cbiAgICAgICAgICBhY3RpdmVUeXBlPXthY3RpdmVUeXBlfVxuICAgICAgICAgIG9uVHlwZUNoYW5nZT17aGFuZGxlVHlwZUNoYW5nZX1cbiAgICAgICAgICBpdGVtcz17aXRlbXN9XG4gICAgICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgICAgICBlcnJvcj17ZXJyb3J9XG4gICAgICAgICAgaGlkZVJlY2VudHNMYWJlbD17aGlkZVJlY2VudHNMYWJlbH1cbiAgICAgICAgICBza2lsbHNDYXRhbG9nRW1wdHk9e3NraWxsc0NhdGFsb2dFbXB0eX1cbiAgICAgICAgICBoYXNNb3JlPXtoYXNNb3JlfVxuICAgICAgICAgIGlzTG9hZGluZ01vcmU9e2lzTG9hZGluZ01vcmV9XG4gICAgICAgICAgb25SZWFjaExpc3RFbmQ9e2xvYWRNb3JlfVxuICAgICAgICAgIHNlYXJjaFZhbHVlPXtzZWFyY2hWYWx1ZX1cbiAgICAgICAgICBrZXlib2FyZEhpbnQ9e3QoJ2NvbnRleHRNZW50aW9uLmtleWJvYXJkSGludCcsIHtcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogJ05hdmVnYWNpw7NuIGVudHJlIHBlc3Rhw7FhczogQCwgQEAsIEBAQOKApiBlbiBvcmRlbi4gVGFtYmnDqW4gQWx0L0NtZCArIOKGkC/ihpInLFxuICAgICAgICAgIH0pfVxuICAgICAgICAgIG9uSXRlbVNlbGVjdGVkPXtpbnNlcnRTZWxlY3RlZEl0ZW19XG4gICAgICAgICAgYWN0aXZlSW5kZXg9e2FjdGl2ZUluZGV4fVxuICAgICAgICAgIG9uQWN0aXZlSW5kZXhDaGFuZ2U9e3NldEFjdGl2ZUluZGV4fVxuICAgICAgICAgIGlzS2V5Ym9hcmROYXZBY3RpdmU9e2lzS2V5Ym9hcmROYXZBY3RpdmV9XG4gICAgICAgICAgb25Nb3VzZU1vdmVJbkxpc3Q9eygpID0+IHNldElzS2V5Ym9hcmROYXZBY3RpdmUoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgPC9TQ01QQW5jaG9yPlxuICAgIClcbiAgfSwgW1xuICAgIHBvcG92ZXJPcGVuLFxuICAgIHBvcG92ZXJQb3MsXG4gICAgbWVudGlvblBvcG92ZXJaSW5kZXgsXG4gICAgYWxsb3dlZFR5cGVzLFxuICAgIGFjdGl2ZVR5cGUsXG4gICAgaGFuZGxlVHlwZUNoYW5nZSxcbiAgICBpdGVtcyxcbiAgICBsb2FkaW5nLFxuICAgIGVycm9yLFxuICAgIGhpZGVSZWNlbnRzTGFiZWwsXG4gICAgc2tpbGxzQ2F0YWxvZ0VtcHR5LFxuICAgIGhhc01vcmUsXG4gICAgaXNMb2FkaW5nTW9yZSxcbiAgICBsb2FkTW9yZSxcbiAgICBzZWFyY2hWYWx1ZSxcbiAgICBpbnNlcnRTZWxlY3RlZEl0ZW0sXG4gICAgYWN0aXZlSW5kZXgsXG4gICAgaXNLZXlib2FyZE5hdkFjdGl2ZSxcbiAgXSlcblxuICByZXR1cm4geyBwb3BvdmVyT3BlbiwgcmVzZXRNZW50aW9uT3BlblRyYWNraW5nLCBoYW5kbGVUcmlnZ2VyLCBoYW5kbGVLZXlEb3duLCBwb3BvdmVyTm9kZSwgY2xvc2UgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBLFNBQThDQSxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBRTlHLFNBQ0VDLHFCQUFxQixFQUNyQkMsNEJBQTRCLEVBQzVCQyxVQUFVLFFBQ0wsMkNBQTJDO0FBQ2xELFNBQVNDLHNCQUFzQixRQUFRLDBCQUEwQjtBQUNqRSxTQUFTQyxnQkFBZ0IsUUFBUSwyQkFBMkI7QUFDNUQsU0FBU0MsSUFBSSxRQUFRLFFBQVE7QUFDN0I7QUFDQSxTQUE0QkMsZUFBZSxRQUFRLG1CQUFtQjtBQUN0RSxTQUFTQyxzQkFBc0IsUUFBUSwwQkFBMEI7QUFDakUsU0FBU0MsZ0JBQWdCLFFBQVEs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