@projectcor/maia-components 2.34.3-2 → 2.35.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 (79) hide show
  1. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +1 -12
  2. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +5 -127
  3. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +29 -2
  4. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +33 -24
  5. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +19 -2
  6. package/lib/components/atoms/MAIAInput/MAIAInput.js +21 -193
  7. package/lib/components/atoms/MAIAInput/styles.js +43 -40
  8. package/lib/components/atoms/icons/SkillsNavIcon.js +7 -4
  9. package/lib/components/atoms/icons/index.js +1 -5
  10. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +3 -5
  11. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +14 -23
  12. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +20 -59
  13. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
  14. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +11 -2
  15. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +5 -10
  16. package/lib/components/molecules/ChatAIModal/layout.js +2 -2
  17. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +239 -315
  18. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +104 -131
  19. package/lib/components/molecules/ChatFooter/ChatFooter.js +46 -34
  20. package/lib/components/molecules/ChatFooter/styles.js +12 -6
  21. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +3 -1
  22. package/lib/components/molecules/Sidebar/Sidebar.js +4 -5
  23. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +3 -3
  24. package/lib/components/molecules/UsageBlockedBanner/UsageBlockedBanner.js +26 -0
  25. package/lib/components/molecules/UsageBlockedBanner/UsageBlockedBanner.styles.js +24 -0
  26. package/lib/components/molecules/UsageBlockedBanner/index.js +2 -0
  27. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +1 -8
  28. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +182 -369
  29. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +66 -126
  30. package/lib/components/organisms/ChatAI/ChatAI.js +6 -1
  31. package/lib/constants/config.js +4 -1
  32. package/lib/constants/formatExtensions.js +7 -8
  33. package/lib/constants/permissions/utils.js +3 -3
  34. package/lib/dev/DevReasoningTimeline.js +8 -50
  35. package/lib/hooks/useChatManager/useChatManager.js +23 -30
  36. package/lib/hooks/useContextMentions.js +56 -96
  37. package/lib/hooks/useEntitySearch.js +278 -92
  38. package/lib/hooks/useMentionAllowedTypes.js +25 -9
  39. package/lib/hooks/useMentionPopover.js +33 -9
  40. package/lib/hooks/useReasoningTrace/reasoningStore.js +8 -39
  41. package/lib/lang/br/index.js +12 -41
  42. package/lib/lang/en/index.js +12 -41
  43. package/lib/lang/es/index.js +13 -42
  44. package/lib/lang/fr/index.js +13 -42
  45. package/lib/services/maia/Skills/createSkill.js +1 -1
  46. package/lib/services/maia/Skills/getSkills.js +40 -70
  47. package/lib/services/maia/Skills/updateSkill.js +1 -1
  48. package/lib/services/maia/Usage/getUsage.js +45 -0
  49. package/lib/services/maia/Usage/index.js +6 -0
  50. package/lib/services/maia/index.js +4 -2
  51. package/lib/services/utils/MaiaApiError.js +34 -0
  52. package/lib/services/utils/fetchCOR.js +106 -57
  53. package/lib/services/utils/index.js +2 -1
  54. package/lib/services/utils/mapChatMessages.js +7 -12
  55. package/lib/store/index.js +2 -1
  56. package/lib/store/sessions/sessionStreamManager.js +67 -53
  57. package/lib/store/useUsageStore.js +108 -0
  58. package/lib/types/Chat.js +1 -1
  59. package/lib/types/reasoning.js +1 -1
  60. package/lib/types/skill.js +1 -1
  61. package/lib/types/usage.js +9 -0
  62. package/lib/utils/contextMentionTriggers.js +5 -2
  63. package/lib/utils/renderContextMentions.js +18 -39
  64. package/package.json +2 -3
  65. package/CHANGELOG.md +0 -691
  66. package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.js +0 -53
  67. package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.spec.js +0 -107
  68. package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.styles.js +0 -8
  69. package/lib/components/atoms/ContextCompactedNotice/index.js +0 -2
  70. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.js +0 -208
  71. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.styles.js +0 -77
  72. package/lib/components/atoms/SkillsDropdown/index.js +0 -2
  73. package/lib/components/atoms/icons/PlusIcon.js +0 -29
  74. package/lib/components/atoms/icons/SkillCreatedByIcon.js +0 -20
  75. package/lib/components/atoms/icons/SkillVisibilityEveryoneIcon.js +0 -23
  76. package/lib/components/atoms/icons/SkillVisibilityOnlyMeIcon.js +0 -23
  77. package/lib/hooks/useSkillsCatalog.js +0 -66
  78. package/lib/types/contextCompaction.js +0 -48
  79. package/lib/types/jest-dom.d.js +0 -2
@@ -5,49 +5,32 @@ import _regeneratorRuntime from "@babel/runtime/regenerator";
5
5
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
6
6
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7
7
  /* eslint-disable @typescript-eslint/no-explicit-any */
8
- import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
8
+ import { useCallback, useEffect, useRef, useState } from 'react';
9
9
  import { createPortal } from 'react-dom';
10
10
  import { Cross } from '@projectcor/icons/lib/components/Cross';
11
- import { FileUpload } from '@projectcor/icons/lib/components/FileUpload';
12
11
  import { useTranslation } from 'react-i18next';
12
+ import { MaiaStreamdown } from '../../atoms/MaiaStreamdown';
13
13
  import { Backdrop } from '../../atoms/Backdrop';
14
14
  import { Loader } from '../../atoms/Loader';
15
- import { Switch } from '../../atoms/Switch';
16
15
  import { SECTIONS } from '../../../constants/config';
17
- import { useUser, isCollaboratorRole } from '../../../context/cor-user';
16
+ import { useUser } from '../../../context/cor-user';
18
17
  import { useSnackBarManager } from '../../../hooks/useSnackBarManager/useSnackBarManager';
19
- import { formatDate } from '../../../lang/utils';
20
18
  import { createSkill } from '../../../services/maia/Skills/createSkill';
21
19
  import { updateSkill } from '../../../services/maia/Skills/updateSkill';
22
20
  import { deleteSkill } from '../../../services/maia/Skills/deleteSkill';
23
21
  import { DeleteQuestionModal } from '../DeleteQuestionModal/DeleteQuestionModal';
24
- import { SCASMCancelButton, SCASMCloseButton, SCASMBody, SCASMDeleteOutlinedButton, SCASMDeleteSlot, SCASMFieldBox, SCASMFieldInput, SCASMFieldLabel, SCASMFieldTextarea, SCASMFooter, SCASMHeader, SCASMHeaderTitle, SCASMHiddenFileInput, SCASMInstructionsField, SCASMInstructionsHeader, SCASMInstructionsPanel, SCASMInstructionsTextarea, SCASMInstructionsTitle, SCASMMetadataItem, SCASMPreviewBody, SCASMPreviewContentBox, SCASMPreviewContentPanel, SCASMPreviewDescription, SCASMPreviewHeadingBlock, SCASMPreviewMetadataLabel, SCASMPreviewMetadataRow, SCASMPreviewMetadataValue, SCASMPreviewName, SCASMSaveOutlinedButton, SCASMSavePrimaryButton, SCASMSwitchLabel, SCASMSwitchRow, SCASMUploadButton, SCASMUseSkillButton, SCASMWrapper } from './AbmSkillModal.styles';
25
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
26
- export var SKILL_USE_AFTER_SAVE_EVENT = 'maia-use-skill-after-save';
22
+ import { SCASMCancelButton, SCASMCloseButton, SCASMContent, SCASMDeleteSlot, SCASMField, SCASMFieldHeader, SCASMFooter, SCASMHeader, SCASMHeaderActions, SCASMHeaderTitle, SCASMHiddenFileInput, SCASMInput, SCASMLabel, SCASMPreview, SCASMPreviewEmpty, SCASMSaveButton, SCASMTextarea, SCASMToggleButton, SCASMToggleGroup, SCASMUploadButton, SCASMWrapper } from './AbmSkillModal.styles';
23
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
27
24
  var initialValues = {
28
25
  isEditing: false,
29
26
  general: {
30
27
  id: undefined,
31
28
  name: '',
32
- description: '',
33
- content: '',
34
- access_type: 'only_me'
29
+ content: ''
35
30
  }
36
31
  };
37
- var emptyBaseline = {
38
- name: '',
39
- description: '',
40
- content: '',
41
- access_type: 'only_me'
42
- };
43
- var parseDescriptionFromContent = function parseDescriptionFromContent(content) {
44
- var frontmatterMatch = content.match(/^---\s*\n([\s\S]*?)\n---/);
45
- if (!frontmatterMatch) return '';
46
- var descriptionMatch = frontmatterMatch[1].match(/^description:\s*(.+)$/m);
47
- return descriptionMatch ? descriptionMatch[1].trim() : '';
48
- };
49
32
  export var AbmSkillModal = function AbmSkillModal(_ref) {
50
- var _values$general, _values$general2, _values$general3, _values$general4, _values$general5, _values$general7, _values$general0, _values$general1;
33
+ var _user$permissions, _values$general, _values$general2, _values$general3;
51
34
  var addSkill = _ref.addSkill,
52
35
  updateSkillInList = _ref.updateSkillInList,
53
36
  removeSkill = _ref.removeSkill;
@@ -71,45 +54,38 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
71
54
  setShowDelete = _useState6[1];
72
55
  var _useState7 = useState(false),
73
56
  _useState8 = _slicedToArray(_useState7, 2),
74
- pendingUpload = _useState8[0],
75
- setPendingUpload = _useState8[1];
76
- var _useState9 = useState(initialValues),
57
+ showPreview = _useState8[0],
58
+ setShowPreview = _useState8[1];
59
+ var _useState9 = useState(false),
77
60
  _useState0 = _slicedToArray(_useState9, 2),
78
- values = _useState0[0],
79
- setValues = _useState0[1];
61
+ pendingUpload = _useState0[0],
62
+ setPendingUpload = _useState0[1];
63
+ var _useState1 = useState(initialValues),
64
+ _useState10 = _slicedToArray(_useState1, 2),
65
+ values = _useState10[0],
66
+ setValues = _useState10[1];
80
67
  var fileInputRef = useRef(null);
81
- var initialRef = useRef(emptyBaseline);
82
- var isReadOnly = !!values.isReadOnly;
83
- var isSharedSkill = !!values.isShared;
84
- var canShareWithCompany = !isCollaboratorRole(user.role_id) && !isReadOnly;
68
+ // Baseline to detect changes: the loaded values when editing, empty when creating
69
+ // (a new/generated/uploaded skill always counts as a change).
70
+ var initialRef = useRef({
71
+ name: '',
72
+ content: ''
73
+ });
74
+ var userPermissions = user === null || user === void 0 || (_user$permissions = user.permissions) === null || _user$permissions === void 0 ? void 0 : _user$permissions.ai_agents;
75
+ var canCreate = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.create);
76
+ var canEdit = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.edit);
77
+ var canDelete = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions["delete"]);
85
78
  var name = ((_values$general = values.general) === null || _values$general === void 0 ? void 0 : _values$general.name) || '';
86
- var description = ((_values$general2 = values.general) === null || _values$general2 === void 0 ? void 0 : _values$general2.description) || '';
87
- var content = ((_values$general3 = values.general) === null || _values$general3 === void 0 ? void 0 : _values$general3.content) || '';
88
- var accessType = ((_values$general4 = values.general) === null || _values$general4 === void 0 ? void 0 : _values$general4.access_type) || 'only_me';
89
- var effectiveAccessType = canShareWithCompany ? accessType : 'only_me';
90
- var skillId = (_values$general5 = values.general) === null || _values$general5 === void 0 ? void 0 : _values$general5.id;
79
+ var content = ((_values$general2 = values.general) === null || _values$general2 === void 0 ? void 0 : _values$general2.content) || '';
80
+ var skillId = (_values$general3 = values.general) === null || _values$general3 === void 0 ? void 0 : _values$general3.id;
91
81
  var isValid = !!name.trim() && !!content.trim();
92
- var hasChanges = name.trim() !== initialRef.current.name || description.trim() !== initialRef.current.description || content.trim() !== initialRef.current.content || canShareWithCompany && effectiveAccessType !== initialRef.current.access_type;
93
- var createdByLabel = useMemo(function () {
94
- var _values$general6;
95
- var createdBy = (_values$general6 = values.general) === null || _values$general6 === void 0 || (_values$general6 = _values$general6.created_by_name) === null || _values$general6 === void 0 ? void 0 : _values$general6.trim();
96
- if (createdBy) return createdBy;
97
- return isSharedSkill ? '' : "".concat(user.firstName, " ").concat(user.lastName).trim();
98
- }, [(_values$general7 = values.general) === null || _values$general7 === void 0 ? void 0 : _values$general7.created_by_name, user.firstName, user.lastName, isSharedSkill]);
99
- var lastUpdatedLabel = useMemo(function () {
100
- var _values$general8, _values$general9;
101
- var updatedAt = ((_values$general8 = values.general) === null || _values$general8 === void 0 ? void 0 : _values$general8.updated_at) || ((_values$general9 = values.general) === null || _values$general9 === void 0 ? void 0 : _values$general9.created_at);
102
- if (!updatedAt) return '';
103
- var parsed = new Date(updatedAt);
104
- if (Number.isNaN(parsed.getTime())) return '';
105
- return formatDate(parsed);
106
- }, [(_values$general0 = values.general) === null || _values$general0 === void 0 ? void 0 : _values$general0.updated_at, (_values$general1 = values.general) === null || _values$general1 === void 0 ? void 0 : _values$general1.created_at]);
82
+ var hasChanges = name.trim() !== initialRef.current.name || content.trim() !== initialRef.current.content;
107
83
  var handleClose = useCallback(function () {
108
84
  setIsOpen(false);
109
85
  setShowDelete(false);
86
+ setShowPreview(false);
110
87
  setPendingUpload(false);
111
88
  setValues(initialValues);
112
- initialRef.current = emptyBaseline;
113
89
  }, []);
114
90
  var handleBackdropClick = useCallback(function (event) {
115
91
  if (event.target === event.currentTarget) {
@@ -118,37 +94,37 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
118
94
  }, [handleClose]);
119
95
  useEffect(function () {
120
96
  var handleSetSkillValues = function handleSetSkillValues(event) {
121
- var _skillValues$values, _skillValues$values2, _skillValues$values3;
97
+ var _skillValues$values, _skillValues$values2, _skillValues$values3, _skillValues$values4, _skillValues$values5, _skillValues$values6;
122
98
  var _ref2 = event.detail || {},
123
99
  skillValues = _ref2.skillValues;
124
100
  if (!skillValues) return;
125
- var incomingGeneral = _objectSpread(_objectSpread({}, initialValues.general), (_skillValues$values = skillValues.values) === null || _skillValues$values === void 0 ? void 0 : _skillValues$values.general);
126
- var incomingName = (incomingGeneral.name || '').trim();
127
- var incomingDescription = (incomingGeneral.description || '').trim();
128
- var incomingContent = (incomingGeneral.content || '').trim();
129
- var incomingAccessType = isCollaboratorRole(user.role_id) ? 'only_me' : incomingGeneral.access_type || 'only_me';
130
- var parsedDescription = incomingDescription || (incomingContent ? parseDescriptionFromContent(incomingContent) : '');
131
- var editingBaseline = {
101
+ var incomingName = (((_skillValues$values = skillValues.values) === null || _skillValues$values === void 0 || (_skillValues$values = _skillValues$values.general) === null || _skillValues$values === void 0 ? void 0 : _skillValues$values.name) || '').trim();
102
+ var incomingContent = (((_skillValues$values2 = skillValues.values) === null || _skillValues$values2 === void 0 || (_skillValues$values2 = _skillValues$values2.general) === null || _skillValues$values2 === void 0 ? void 0 : _skillValues$values2.content) || '').trim();
103
+ // Editing an existing skill -> baseline is its values; creating -> empty baseline.
104
+ initialRef.current = (_skillValues$values3 = skillValues.values) !== null && _skillValues$values3 !== void 0 && _skillValues$values3.isEditing ? {
132
105
  name: incomingName,
133
- description: parsedDescription,
134
- content: incomingContent,
135
- access_type: incomingAccessType
106
+ content: incomingContent
107
+ } : {
108
+ name: '',
109
+ content: ''
136
110
  };
137
- initialRef.current = (_skillValues$values2 = skillValues.values) !== null && _skillValues$values2 !== void 0 && _skillValues$values2.isEditing ? editingBaseline : emptyBaseline;
138
111
  setValues(_objectSpread(_objectSpread(_objectSpread({}, initialValues), skillValues.values), {}, {
139
- general: _objectSpread(_objectSpread({}, incomingGeneral), {}, {
140
- description: parsedDescription,
141
- access_type: incomingAccessType
142
- })
112
+ general: _objectSpread(_objectSpread({}, initialValues.general), (_skillValues$values4 = skillValues.values) === null || _skillValues$values4 === void 0 ? void 0 : _skillValues$values4.general)
143
113
  }));
144
- setPendingUpload(((_skillValues$values3 = skillValues.values) === null || _skillValues$values3 === void 0 ? void 0 : _skillValues$values3.intent) === 'upload');
114
+ // Con contenido (edición o skill ya generada) arrancamos en "Vista previa"; vacía, en "Editar".
115
+ var hasContent = !!((_skillValues$values5 = skillValues.values) !== null && _skillValues$values5 !== void 0 && (_skillValues$values5 = _skillValues$values5.general) !== null && _skillValues$values5 !== void 0 && (_skillValues$values5 = _skillValues$values5.content) !== null && _skillValues$values5 !== void 0 && _skillValues$values5.trim());
116
+ setShowPreview(hasContent);
117
+ // Si vino con intent "upload", abrimos el selector de archivos al montar.
118
+ setPendingUpload(((_skillValues$values6 = skillValues.values) === null || _skillValues$values6 === void 0 ? void 0 : _skillValues$values6.intent) === 'upload');
145
119
  setIsOpen(!!skillValues.isOpen);
146
120
  };
147
121
  document.addEventListener('abm-skill-modal-set-values', handleSetSkillValues);
148
122
  return function () {
149
123
  document.removeEventListener('abm-skill-modal-set-values', handleSetSkillValues);
150
124
  };
151
- }, [user.role_id]);
125
+ }, []);
126
+
127
+ // When opened with the "upload" intent, open the OS file picker once mounted.
152
128
  useEffect(function () {
153
129
  if (isOpen && pendingUpload) {
154
130
  var _fileInputRef$current;
@@ -163,16 +139,6 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
163
139
  });
164
140
  });
165
141
  };
166
- var handleAccessTypeChange = function handleAccessTypeChange(checked) {
167
- if (!canShareWithCompany) return;
168
- setValues(function (prev) {
169
- return _objectSpread(_objectSpread({}, prev), {}, {
170
- general: _objectSpread(_objectSpread({}, prev.general), {}, {
171
- access_type: checked ? 'company' : 'only_me'
172
- })
173
- });
174
- });
175
- };
176
142
  var handleUploadClick = function handleUploadClick() {
177
143
  var _fileInputRef$current2;
178
144
  (_fileInputRef$current2 = fileInputRef.current) === null || _fileInputRef$current2 === void 0 || _fileInputRef$current2.click();
@@ -180,11 +146,11 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
180
146
  var handleFileChange = /*#__PURE__*/function () {
181
147
  var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(event) {
182
148
  var _event$target$files;
183
- var file, isMarkdown, text, baseName, parsedDescription, _t;
149
+ var file, isMarkdown, text, baseName, _t;
184
150
  return _regeneratorRuntime.wrap(function (_context) {
185
151
  while (1) switch (_context.prev = _context.next) {
186
152
  case 0:
187
- file = (_event$target$files = event.target.files) === null || _event$target$files === void 0 ? void 0 : _event$target$files[0];
153
+ file = (_event$target$files = event.target.files) === null || _event$target$files === void 0 ? void 0 : _event$target$files[0]; // Reset the input (via ref) so selecting the same file again still fires onChange.
188
154
  if (fileInputRef.current) {
189
155
  fileInputRef.current.value = '';
190
156
  }
@@ -208,17 +174,18 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
208
174
  case 3:
209
175
  text = _context.sent;
210
176
  baseName = file.name.replace(/\.(md|markdown)$/i, '');
211
- parsedDescription = parseDescriptionFromContent(text);
212
177
  setValues(function (prev) {
213
- var _prev$general, _prev$general2, _prev$general3;
178
+ var _prev$general;
214
179
  return _objectSpread(_objectSpread({}, prev), {}, {
215
180
  general: _objectSpread(_objectSpread({}, prev.general), {}, {
216
181
  content: text,
217
- description: (_prev$general = prev.general) !== null && _prev$general !== void 0 && (_prev$general = _prev$general.description) !== null && _prev$general !== void 0 && _prev$general.trim() ? prev.general.description : parsedDescription || ((_prev$general2 = prev.general) === null || _prev$general2 === void 0 ? void 0 : _prev$general2.description) || '',
218
- name: (_prev$general3 = prev.general) !== null && _prev$general3 !== void 0 && (_prev$general3 = _prev$general3.name) !== null && _prev$general3 !== void 0 && _prev$general3.trim() ? prev.general.name : baseName
182
+ // Only fill the name from the filename when it's still empty.
183
+ name: (_prev$general = prev.general) !== null && _prev$general !== void 0 && (_prev$general = _prev$general.name) !== null && _prev$general !== void 0 && _prev$general.trim() ? prev.general.name : baseName
219
184
  })
220
185
  });
221
186
  });
187
+ // Tras subir un .md mostramos el resultado renderizado por defecto.
188
+ setShowPreview(true);
222
189
  _context.next = 5;
223
190
  break;
224
191
  case 4:
@@ -235,232 +202,106 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
235
202
  return _ref3.apply(this, arguments);
236
203
  };
237
204
  }();
238
- var persistSkill = /*#__PURE__*/function () {
205
+ var handleSave = /*#__PURE__*/function () {
239
206
  var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
240
- var payload, updated, created;
207
+ var updated, created, _t2;
241
208
  return _regeneratorRuntime.wrap(function (_context2) {
242
209
  while (1) switch (_context2.prev = _context2.next) {
243
210
  case 0:
244
- payload = {
245
- name: name.trim(),
246
- description: description.trim(),
247
- content: content.trim(),
248
- access_type: effectiveAccessType
249
- };
250
- if (!(values.isEditing && skillId)) {
251
- _context2.next = 2;
211
+ if (!(!isValid || isSubmitting)) {
212
+ _context2.next = 1;
252
213
  break;
253
214
  }
254
- _context2.next = 1;
255
- return updateSkill(skillId, payload);
215
+ return _context2.abrupt("return");
256
216
  case 1:
257
- updated = _context2.sent;
258
- updateSkillInList === null || updateSkillInList === void 0 || updateSkillInList(updated);
259
- handleSnackbarSuccess(t('mySkills.updateSuccess'));
260
- return _context2.abrupt("return", updated);
261
- case 2:
262
- _context2.next = 3;
263
- return createSkill(payload);
264
- case 3:
265
- created = _context2.sent;
266
- addSkill === null || addSkill === void 0 || addSkill(created);
267
- handleSnackbarSuccess(t('mySkills.createSuccess'));
268
- return _context2.abrupt("return", created);
269
- case 4:
270
- case "end":
271
- return _context2.stop();
272
- }
273
- }, _callee2);
274
- }));
275
- return function persistSkill() {
276
- return _ref4.apply(this, arguments);
277
- };
278
- }();
279
- var handleSave = /*#__PURE__*/function () {
280
- var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
281
- var _t2;
282
- return _regeneratorRuntime.wrap(function (_context3) {
283
- while (1) switch (_context3.prev = _context3.next) {
284
- case 0:
285
- if (!(!isValid || isSubmitting || !hasChanges)) {
286
- _context3.next = 1;
217
+ setIsSubmitting(true);
218
+ _context2.prev = 2;
219
+ if (!(values.isEditing && skillId)) {
220
+ _context2.next = 4;
287
221
  break;
288
222
  }
289
- return _context3.abrupt("return");
290
- case 1:
291
- setIsSubmitting(true);
292
- _context3.prev = 2;
293
- _context3.next = 3;
294
- return persistSkill();
223
+ _context2.next = 3;
224
+ return updateSkill(skillId, {
225
+ name: name.trim(),
226
+ content: content.trim()
227
+ });
295
228
  case 3:
296
- handleClose();
297
- _context3.next = 5;
229
+ updated = _context2.sent;
230
+ updateSkillInList === null || updateSkillInList === void 0 || updateSkillInList(updated);
231
+ handleSnackbarSuccess(t('mySkills.updateSuccess'));
232
+ _context2.next = 6;
298
233
  break;
299
234
  case 4:
300
- _context3.prev = 4;
301
- _t2 = _context3["catch"](2);
302
- handleSnackbarError(values.isEditing ? t('mySkills.updateError') : t('mySkills.createError'));
235
+ _context2.next = 5;
236
+ return createSkill({
237
+ name: name.trim(),
238
+ content: content.trim()
239
+ });
303
240
  case 5:
304
- _context3.prev = 5;
305
- setIsSubmitting(false);
306
- return _context3.finish(5);
241
+ created = _context2.sent;
242
+ addSkill === null || addSkill === void 0 || addSkill(created);
243
+ handleSnackbarSuccess(t('mySkills.createSuccess'));
307
244
  case 6:
308
- case "end":
309
- return _context3.stop();
310
- }
311
- }, _callee3, null, [[2, 4, 5, 6]]);
312
- }));
313
- return function handleSave() {
314
- return _ref5.apply(this, arguments);
315
- };
316
- }();
317
- var handleSaveAndUse = /*#__PURE__*/function () {
318
- var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
319
- var savedSkill, _t3;
320
- return _regeneratorRuntime.wrap(function (_context4) {
321
- while (1) switch (_context4.prev = _context4.next) {
322
- case 0:
323
- if (!(!isValid || isSubmitting)) {
324
- _context4.next = 1;
325
- break;
326
- }
327
- return _context4.abrupt("return");
328
- case 1:
329
- setIsSubmitting(true);
330
- _context4.prev = 2;
331
- _context4.next = 3;
332
- return persistSkill();
333
- case 3:
334
- savedSkill = _context4.sent;
335
- if (savedSkill) {
336
- document.dispatchEvent(new CustomEvent(SKILL_USE_AFTER_SAVE_EVENT, {
337
- detail: {
338
- skill: savedSkill
339
- }
340
- }));
341
- }
342
245
  handleClose();
343
- _context4.next = 5;
246
+ _context2.next = 8;
344
247
  break;
345
- case 4:
346
- _context4.prev = 4;
347
- _t3 = _context4["catch"](2);
248
+ case 7:
249
+ _context2.prev = 7;
250
+ _t2 = _context2["catch"](2);
348
251
  handleSnackbarError(values.isEditing ? t('mySkills.updateError') : t('mySkills.createError'));
349
- case 5:
350
- _context4.prev = 5;
252
+ case 8:
253
+ _context2.prev = 8;
351
254
  setIsSubmitting(false);
352
- return _context4.finish(5);
353
- case 6:
255
+ return _context2.finish(8);
256
+ case 9:
354
257
  case "end":
355
- return _context4.stop();
258
+ return _context2.stop();
356
259
  }
357
- }, _callee4, null, [[2, 4, 5, 6]]);
260
+ }, _callee2, null, [[2, 7, 8, 9]]);
358
261
  }));
359
- return function handleSaveAndUse() {
360
- return _ref6.apply(this, arguments);
262
+ return function handleSave() {
263
+ return _ref4.apply(this, arguments);
361
264
  };
362
265
  }();
363
266
  var handleConfirmDelete = /*#__PURE__*/function () {
364
- var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
365
- var _t4;
366
- return _regeneratorRuntime.wrap(function (_context5) {
367
- while (1) switch (_context5.prev = _context5.next) {
267
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
268
+ var _t3;
269
+ return _regeneratorRuntime.wrap(function (_context3) {
270
+ while (1) switch (_context3.prev = _context3.next) {
368
271
  case 0:
369
272
  if (skillId) {
370
- _context5.next = 1;
273
+ _context3.next = 1;
371
274
  break;
372
275
  }
373
- return _context5.abrupt("return");
276
+ return _context3.abrupt("return");
374
277
  case 1:
375
- _context5.prev = 1;
376
- _context5.next = 2;
278
+ _context3.prev = 1;
279
+ _context3.next = 2;
377
280
  return deleteSkill(skillId);
378
281
  case 2:
379
282
  removeSkill === null || removeSkill === void 0 || removeSkill(skillId);
380
283
  handleSnackbarSuccess(t('mySkills.deleteSuccess'));
381
284
  handleClose();
382
- _context5.next = 4;
285
+ _context3.next = 4;
383
286
  break;
384
287
  case 3:
385
- _context5.prev = 3;
386
- _t4 = _context5["catch"](1);
288
+ _context3.prev = 3;
289
+ _t3 = _context3["catch"](1);
387
290
  handleSnackbarError(t('mySkills.deleteError'));
388
291
  case 4:
389
292
  case "end":
390
- return _context5.stop();
293
+ return _context3.stop();
391
294
  }
392
- }, _callee5, null, [[1, 3]]);
295
+ }, _callee3, null, [[1, 3]]);
393
296
  }));
394
297
  return function handleConfirmDelete() {
395
- return _ref7.apply(this, arguments);
298
+ return _ref5.apply(this, arguments);
396
299
  };
397
300
  }();
398
- var handleEditFromView = function handleEditFromView() {
399
- setValues(function (prev) {
400
- return _objectSpread(_objectSpread({}, prev), {}, {
401
- isReadOnly: false
402
- });
403
- });
404
- };
405
-
406
- /** Skill ajena en modo lectura: abre un chat nuevo con el primer agente y la mención ya puesta. */
407
- var handleUseSkill = function handleUseSkill() {
408
- if (!skillId) return;
409
- document.dispatchEvent(new CustomEvent(SKILL_USE_AFTER_SAVE_EVENT, {
410
- detail: {
411
- skill: {
412
- id: skillId,
413
- name: name,
414
- description: description,
415
- content: content,
416
- access_type: accessType
417
- },
418
- useFirstAgent: true
419
- }
420
- }));
421
- handleClose();
422
- };
423
301
  if (!isOpen) return null;
302
+ if (!canCreate && !canEdit && !canDelete) return null;
424
303
  var container = document.getElementById('modal-root-actions');
425
304
  if (!container) return null;
426
- var editOrCreateTitle = values.isEditing ? t('mySkills.editTitle') : t('mySkills.createTitle');
427
- var viewTitle = isSharedSkill ? t('mySkills.viewTitle') : t('mySkills.viewOwnTitle');
428
- var modalTitle = isReadOnly ? viewTitle : editOrCreateTitle;
429
- var previewBody = /*#__PURE__*/_jsxs(SCASMPreviewBody, {
430
- children: [/*#__PURE__*/_jsxs(SCASMPreviewHeadingBlock, {
431
- children: [/*#__PURE__*/_jsx(SCASMPreviewName, {
432
- children: name
433
- }), description ? /*#__PURE__*/_jsx(SCASMPreviewDescription, {
434
- children: description
435
- }) : null]
436
- }), /*#__PURE__*/_jsxs(SCASMPreviewMetadataRow, {
437
- children: [createdByLabel ? /*#__PURE__*/_jsxs(SCASMMetadataItem, {
438
- children: [/*#__PURE__*/_jsx(SCASMPreviewMetadataLabel, {
439
- children: t('mySkills.createdBy')
440
- }), /*#__PURE__*/_jsx(SCASMPreviewMetadataValue, {
441
- children: createdByLabel
442
- })]
443
- }) : null, lastUpdatedLabel ? /*#__PURE__*/_jsxs(SCASMMetadataItem, {
444
- children: [/*#__PURE__*/_jsx(SCASMPreviewMetadataLabel, {
445
- children: t('mySkills.lastUpdated')
446
- }), /*#__PURE__*/_jsx(SCASMPreviewMetadataValue, {
447
- children: lastUpdatedLabel
448
- })]
449
- }) : null, !isSharedSkill ? /*#__PURE__*/_jsxs(SCASMMetadataItem, {
450
- children: [/*#__PURE__*/_jsx(SCASMPreviewMetadataLabel, {
451
- children: t('mySkills.enabledLabel')
452
- }), /*#__PURE__*/_jsx(SCASMPreviewMetadataValue, {
453
- children: accessType === 'company' ? t('mySkills.visibilityEveryone') : t('mySkills.visibilityOnlyMe')
454
- })]
455
- }) : null]
456
- }), /*#__PURE__*/_jsxs(SCASMPreviewContentPanel, {
457
- children: [/*#__PURE__*/_jsx(SCASMInstructionsTitle, {
458
- children: t('mySkills.instructionsLabel')
459
- }), /*#__PURE__*/_jsx(SCASMPreviewContentBox, {
460
- children: content
461
- })]
462
- })]
463
- });
464
305
  return /*#__PURE__*/createPortal(/*#__PURE__*/_jsxs(Backdrop, {
465
306
  zIndex: 1112,
466
307
  onClick: handleBackdropClick,
@@ -470,7 +311,7 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
470
311
  },
471
312
  children: [/*#__PURE__*/_jsxs(SCASMHeader, {
472
313
  children: [/*#__PURE__*/_jsx(SCASMHeaderTitle, {
473
- children: modalTitle
314
+ children: values.isEditing ? t('mySkills.editTitle') : t('mySkills.createTitle')
474
315
  }), /*#__PURE__*/_jsx(SCASMCloseButton, {
475
316
  type: "button",
476
317
  onClick: handleClose,
@@ -481,13 +322,12 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
481
322
  height: 18
482
323
  })
483
324
  })]
484
- }), isReadOnly ? previewBody : /*#__PURE__*/_jsxs(SCASMBody, {
485
- children: [/*#__PURE__*/_jsxs(SCASMFieldBox, {
486
- $height: 50,
487
- children: [/*#__PURE__*/_jsx(SCASMFieldLabel, {
325
+ }), /*#__PURE__*/_jsxs(SCASMContent, {
326
+ children: [/*#__PURE__*/_jsxs(SCASMField, {
327
+ children: [/*#__PURE__*/_jsx(SCASMLabel, {
488
328
  htmlFor: "skill-name-input",
489
329
  children: t('mySkills.nameLabel')
490
- }), /*#__PURE__*/_jsx(SCASMFieldInput, {
330
+ }), /*#__PURE__*/_jsx(SCASMInput, {
491
331
  id: "skill-name-input",
492
332
  type: "text",
493
333
  maxLength: 150,
@@ -498,108 +338,81 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
498
338
  return handleChangeField('name', event.target.value);
499
339
  }
500
340
  })]
501
- }), /*#__PURE__*/_jsxs(SCASMFieldBox, {
502
- $height: 120,
503
- $clipOverflow: true,
504
- children: [/*#__PURE__*/_jsx(SCASMFieldLabel, {
505
- htmlFor: "skill-description-input",
506
- children: t('mySkills.descriptionLabel')
507
- }), /*#__PURE__*/_jsx(SCASMFieldTextarea, {
508
- id: "skill-description-input",
509
- maxLength: 500,
510
- placeholder: t('mySkills.descriptionPlaceholder'),
511
- value: description,
341
+ }), /*#__PURE__*/_jsxs(SCASMField, {
342
+ children: [/*#__PURE__*/_jsxs(SCASMFieldHeader, {
343
+ children: [/*#__PURE__*/_jsx(SCASMLabel, {
344
+ htmlFor: "skill-content-input",
345
+ children: t('mySkills.contentLabel')
346
+ }), /*#__PURE__*/_jsxs(SCASMHeaderActions, {
347
+ children: [/*#__PURE__*/_jsx(SCASMUploadButton, {
348
+ type: "button",
349
+ onClick: handleUploadClick,
350
+ disabled: isSubmitting,
351
+ children: t('mySkills.uploadMd')
352
+ }), /*#__PURE__*/_jsx(SCASMHiddenFileInput, {
353
+ ref: fileInputRef,
354
+ type: "file",
355
+ accept: ".md,.markdown,text/markdown",
356
+ onChange: handleFileChange
357
+ }), /*#__PURE__*/_jsxs(SCASMToggleGroup, {
358
+ children: [/*#__PURE__*/_jsx(SCASMToggleButton, {
359
+ type: "button",
360
+ $active: !showPreview,
361
+ onClick: function onClick() {
362
+ return setShowPreview(false);
363
+ },
364
+ children: t('mySkills.edit')
365
+ }), /*#__PURE__*/_jsx(SCASMToggleButton, {
366
+ type: "button",
367
+ $active: showPreview,
368
+ onClick: function onClick() {
369
+ return setShowPreview(true);
370
+ },
371
+ children: t('mySkills.preview')
372
+ })]
373
+ })]
374
+ })]
375
+ }), showPreview ? /*#__PURE__*/_jsx(SCASMPreview, {
376
+ children: content.trim() ? /*#__PURE__*/_jsx(MaiaStreamdown, {
377
+ variant: "preview",
378
+ children: content
379
+ }) : /*#__PURE__*/_jsx(SCASMPreviewEmpty, {
380
+ children: t('mySkills.previewEmpty')
381
+ })
382
+ }) : /*#__PURE__*/_jsx(SCASMTextarea, {
383
+ id: "skill-content-input",
384
+ maxLength: 20000,
385
+ placeholder: t('mySkills.contentPlaceholder'),
386
+ value: content,
512
387
  disabled: isSubmitting,
513
388
  onChange: function onChange(event) {
514
- return handleChangeField('description', event.target.value);
389
+ return handleChangeField('content', event.target.value);
515
390
  }
516
391
  })]
517
- }), canShareWithCompany ? /*#__PURE__*/_jsxs(SCASMSwitchRow, {
518
- children: [/*#__PURE__*/_jsx(Switch, {
519
- checked: accessType === 'company',
520
- onChange: handleAccessTypeChange,
521
- disabled: isSubmitting,
522
- "aria-label": t('mySkills.shareWithCompany')
523
- }), /*#__PURE__*/_jsx(SCASMSwitchLabel, {
524
- children: t('mySkills.shareWithCompany')
525
- })]
526
- }) : null, /*#__PURE__*/_jsxs(SCASMInstructionsPanel, {
527
- children: [/*#__PURE__*/_jsxs(SCASMInstructionsHeader, {
528
- children: [/*#__PURE__*/_jsx(SCASMInstructionsTitle, {
529
- children: t('mySkills.instructionsLabel')
530
- }), /*#__PURE__*/_jsxs(SCASMUploadButton, {
531
- type: "button",
532
- onClick: handleUploadClick,
533
- disabled: isSubmitting,
534
- children: [/*#__PURE__*/_jsx(FileUpload, {
535
- width: 18,
536
- height: 18,
537
- color: "#08C"
538
- }), t('mySkills.uploadMd')]
539
- }), /*#__PURE__*/_jsx(SCASMHiddenFileInput, {
540
- ref: fileInputRef,
541
- type: "file",
542
- accept: ".md,.markdown,text/markdown",
543
- onChange: handleFileChange
544
- })]
545
- }), /*#__PURE__*/_jsx(SCASMInstructionsField, {
546
- children: /*#__PURE__*/_jsx(SCASMInstructionsTextarea, {
547
- id: "skill-content-input",
548
- maxLength: 100000,
549
- placeholder: t('mySkills.contentPlaceholder'),
550
- value: content,
551
- disabled: isSubmitting,
552
- onChange: function onChange(event) {
553
- return handleChangeField('content', event.target.value);
554
- }
555
- })
556
- })]
557
392
  })]
558
393
  }), /*#__PURE__*/_jsxs(SCASMFooter, {
559
- children: [isReadOnly && isSharedSkill ? /*#__PURE__*/_jsx(SCASMUseSkillButton, {
560
- type: "button",
561
- onClick: handleUseSkill,
562
- children: t('mySkills.useSkill')
563
- }) : null, isReadOnly && !isSharedSkill ? /*#__PURE__*/_jsxs(_Fragment, {
564
- children: [/*#__PURE__*/_jsx(SCASMDeleteSlot, {
565
- children: /*#__PURE__*/_jsx(SCASMDeleteOutlinedButton, {
566
- type: "button",
567
- onClick: function onClick() {
568
- return setShowDelete(true);
569
- },
570
- children: t('mySkills.delete')
571
- })
572
- }), /*#__PURE__*/_jsx(SCASMSavePrimaryButton, {
573
- type: "button",
574
- onClick: handleEditFromView,
575
- children: t('mySkills.edit')
576
- })]
577
- }) : null, !isReadOnly ? /*#__PURE__*/_jsxs(_Fragment, {
578
- children: [values.isEditing ? /*#__PURE__*/_jsx(SCASMDeleteSlot, {
579
- children: /*#__PURE__*/_jsx(SCASMCancelButton, {
580
- type: "button",
581
- onClick: function onClick() {
582
- return setShowDelete(true);
583
- },
584
- disabled: isSubmitting,
585
- children: t('mySkills.delete')
586
- })
587
- }) : null, /*#__PURE__*/_jsx(SCASMSaveOutlinedButton, {
588
- type: "button",
589
- onClick: handleSaveAndUse,
590
- disabled: !isValid || isSubmitting,
591
- children: isSubmitting ? /*#__PURE__*/_jsx(Loader, {
592
- size: "small"
593
- }) : t('mySkills.saveAndUse')
594
- }), /*#__PURE__*/_jsx(SCASMSavePrimaryButton, {
394
+ children: [values.isEditing && canDelete ? /*#__PURE__*/_jsx(SCASMDeleteSlot, {
395
+ children: /*#__PURE__*/_jsx(SCASMCancelButton, {
595
396
  type: "button",
596
- onClick: handleSave,
597
- disabled: !isValid || isSubmitting || !hasChanges,
598
- children: isSubmitting ? /*#__PURE__*/_jsx(Loader, {
599
- size: "small"
600
- }) : t('mySkills.save')
601
- })]
602
- }) : null]
397
+ onClick: function onClick() {
398
+ return setShowDelete(true);
399
+ },
400
+ disabled: isSubmitting,
401
+ children: t('mySkills.delete')
402
+ })
403
+ }) : null, /*#__PURE__*/_jsx(SCASMCancelButton, {
404
+ type: "button",
405
+ onClick: handleClose,
406
+ disabled: isSubmitting,
407
+ children: t('mySkills.cancel')
408
+ }), /*#__PURE__*/_jsx(SCASMSaveButton, {
409
+ type: "button",
410
+ onClick: handleSave,
411
+ disabled: !isValid || isSubmitting || !hasChanges,
412
+ children: isSubmitting ? /*#__PURE__*/_jsx(Loader, {
413
+ size: "small"
414
+ }) : t('mySkills.save')
415
+ })]
603
416
  })]
604
417
  }), showDelete && skillId ? /*#__PURE__*/_jsx(DeleteQuestionModal, {
605
418
  onClose: function onClose() {
@@ -616,4 +429,4 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
616
429
  }) : null]
617
430
  }), container);
618
431
  };
619
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImNyZWF0ZVBvcnRhbCIsIkNyb3NzIiwiRmlsZVVwbG9hZCIsInVzZVRyYW5zbGF0aW9uIiwiQmFja2Ryb3AiLCJMb2FkZXIiLCJTd2l0Y2giLCJTRUNUSU9OUyIsInVzZVVzZXIiLCJpc0NvbGxhYm9yYXRvclJvbGUiLCJ1c2VTbmFja0Jhck1hbmFnZXIiLCJmb3JtYXREYXRlIiwiY3JlYXRlU2tpbGwiLCJ1cGRhdGVTa2lsbCIsImRlbGV0ZVNraWxsIiwiRGVsZXRlUXVlc3Rpb25Nb2RhbCIsIlNDQVNNQ2FuY2VsQnV0dG9uIiwiU0NBU01DbG9zZUJ1dHRvbiIsIlNDQVNNQm9keSIsIlNDQVNNRGVsZXRlT3V0bGluZWRCdXR0b24iLCJTQ0FTTURlbGV0ZVNsb3QiLCJTQ0FTTUZpZWxkQm94IiwiU0NBU01GaWVsZElucHV0IiwiU0NBU01GaWVsZExhYmVsIiwiU0NBU01GaWVsZFRleHRhcmVhIiwiU0NBU01Gb290ZXIiLCJTQ0FTTUhlYWRlciIsIlNDQVNNSGVhZGVyVGl0bGUiLCJTQ0FTTUhpZGRlbkZpbGVJbnB1dCIsIlNDQVNNSW5zdHJ1Y3Rpb25zRmllbGQiLCJTQ0FTTUluc3RydWN0aW9uc0hlYWRlciIsIlNDQVNNSW5zdHJ1Y3Rpb25zUGFuZWwiLCJTQ0FTTUluc3RydWN0aW9uc1RleHRhcmVhIiwiU0NBU01JbnN0cnVjdGlvbnNUaXRsZSIsIlNDQVNNTWV0YWRhdGFJdGVtIiwiU0NBU01QcmV2aWV3Qm9keSIsIlNDQVNNUHJldmlld0NvbnRlbnRCb3giLCJTQ0FTTVByZXZpZXdDb250ZW50UGFuZWwiLCJTQ0FTTVByZXZpZXdEZXNjcmlwdGlvbiIsIlNDQVNNUHJldmlld0hlYWRpbmdCbG9jayIsIlNDQVNNUHJldmlld01ldGFkYXRhTGFiZWwiLCJTQ0FTTVByZXZpZXdNZXRhZGF0YVJvdyIsIlNDQVNNUHJldmlld01ldGFkYXRhVmFsdWUiLCJTQ0FTTVByZXZpZXdOYW1lIiwiU0NBU01TYXZlT3V0bGluZWRCdXR0b24iLCJTQ0FTTVNhdmVQcmltYXJ5QnV0dG9uIiwiU0NBU01Td2l0Y2hMYWJlbCIsIlNDQVNNU3dpdGNoUm93IiwiU0NBU01VcGxvYWRCdXR0b24iLCJTQ0FTTVVzZVNraWxsQnV0dG9uIiwiU0NBU01XcmFwcGVyIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiU0tJTExfVVNFX0FGVEVSX1NBVkVfRVZFTlQiLCJpbml0aWFsVmFsdWVzIiwiaXNFZGl0aW5nIiwiZ2VuZXJhbCIsImlkIiwidW5kZWZpbmVkIiwibmFtZSIsImRlc2NyaXB0aW9uIiwiY29udGVudCIsImFjY2Vzc190eXBlIiwiZW1wdHlCYXNlbGluZSIsInBhcnNlRGVzY3JpcHRpb25Gcm9tQ29udGVudCIsImZyb250bWF0dGVyTWF0Y2giLCJtYXRjaCIsImRlc2NyaXB0aW9uTWF0Y2giLCJ0cmltIiwiQWJtU2tpbGxNb2RhbCIsIl9yZWYiLCJfdmFsdWVzJGdlbmVyYWwiLCJfdmFsdWVzJGdlbmVyYWwyIiwiX3ZhbHVlcyRnZW5lcmFsMyIsIl92YWx1ZXMkZ2VuZXJhbDQiLCJfdmFsdWVzJGdlbmVyYWw1IiwiX3ZhbHVlcyRnZW5lcmFsNyIsIl92YWx1ZXMkZ2VuZXJhbDAiLCJfdmFsdWVzJGdlbmVyYWwxIiwiYWRkU2tpbGwiLCJ1cGRhdGVTa2lsbEluTGlzdCIsInJlbW92ZVNraWxsIiwiX3VzZVRyYW5zbGF0aW9uIiwiY2hhdEFJIiwidCIsInVzZXIiLCJfdXNlU25hY2tCYXJNYW5hZ2VyIiwiaGFuZGxlU25hY2tiYXJTdWNjZXNzIiwiaGFuZGxlU25hY2tiYXJFcnJvciIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImlzT3BlbiIsInNldElzT3BlbiIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiaXNTdWJtaXR0aW5nIiwic2V0SXNTdWJtaXR0aW5nIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJzaG93RGVsZXRlIiwic2V0U2hvd0RlbGV0ZSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwicGVuZGluZ1VwbG9hZCIsInNldFBlbmRpbmdVcGxvYWQiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsInZhbHVlcyIsInNldFZhbHVlcyIsImZpbGVJbnB1dFJlZiIsImluaXRpYWxSZWYiLCJpc1JlYWRPbmx5IiwiaXNTaGFyZWRTa2lsbCIsImlzU2hhcmVkIiwiY2FuU2hhcmVXaXRoQ29tcGFueSIsInJvbGVfaWQiLCJhY2Nlc3NUeXBlIiwiZWZmZWN0aXZlQWNjZXNzVHlwZSIsInNraWxsSWQiLCJpc1ZhbGlkIiwiaGFzQ2hhbmdlcyIsImN1cnJlbnQiLCJjcmVhdGVkQnlMYWJlbCIsIl92YWx1ZXMkZ2VuZXJhbDYiLCJjcmVhdGVkQnkiLCJjcmVhdGVkX2J5X25hbWUiLCJjb25jYXQiLCJmaXJzdE5hbWUiLCJsYXN0TmFtZSIsImxhc3RVcGRhdGVkTGFiZWwiLCJfdmFsdWVzJGdlbmVyYWw4IiwiX3ZhbHVlcyRnZW5lcmFsOSIsInVwZGF0ZWRBdCIsInVwZGF0ZWRfYXQiLCJjcmVhdGVkX2F0IiwicGFyc2VkIiwiRGF0ZSIsIk51bWJlciIsImlzTmFOIiwiZ2V0VGltZSIsImhhbmRsZUNsb3NlIiwiaGFuZGxlQmFja2Ryb3BDbGljayIsImV2ZW50IiwidGFyZ2V0IiwiY3VycmVudFRhcmdldCIsImhhbmRsZVNldFNraWxsVmFsdWVzIiwiX3NraWxsVmFsdWVzJHZhbHVlcyIsIl9za2lsbFZhbHVlcyR2YWx1ZXMyIiwiX3NraWxsVmFsdWVzJHZhbHVlczMiLCJfcmVmMiIsImRldGFpbCIsInNraWxsVmFsdWVzIiwiaW5jb21pbmdHZW5lcmFsIiwiX29iamVjdFNwcmVhZCIsImluY29taW5nTmFtZSIsImluY29taW5nRGVzY3JpcHRpb24iLCJpbmNvbWluZ0NvbnRlbnQiLCJpbmNvbWluZ0FjY2Vzc1R5cGUiLCJwYXJzZWREZXNjcmlwdGlvbiIsImVkaXRpbmdCYXNlbGluZSIsImludGVudCIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfZmlsZUlucHV0UmVmJGN1cnJlbnQiLCJjbGljayIsImhhbmRsZUNoYW5nZUZpZWxkIiwiZmllbGQiLCJ2YWx1ZSIsInByZXYiLCJfZGVmaW5lUHJvcGVydHkiLCJoYW5kbGVBY2Nlc3NUeXBlQ2hhbmdlIiwiY2hlY2tlZCIsImhhbmRsZVVwbG9hZENsaWNrIiwiX2ZpbGVJbnB1dFJlZiRjdXJyZW50MiIsImhhbmRsZUZpbGVDaGFuZ2UiLCJfcmVmMyIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiX2V2ZW50JHRhcmdldCRmaWxlcyIsImZpbGUiLCJpc01hcmtkb3duIiwidGV4dCIsImJhc2VOYW1lIiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJuZXh0IiwiZmlsZXMiLCJhYnJ1cHQiLCJ0ZXN0Iiwic2VudCIsInJlcGxhY2UiLCJfcHJldiRnZW5lcmFsIiwiX3ByZXYkZ2VuZXJhbDIiLCJfcHJldiRnZW5lcmFsMyIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwicGVyc2lzdFNraWxsIiwiX3JlZjQiLCJfY2FsbGVlMiIsInBheWxvYWQiLCJ1cGRhdGVkIiwiY3JlYXRlZCIsIl9jb250ZXh0MiIsImhhbmRsZVNhdmUiLCJfcmVmNSIsIl9jYWxsZWUzIiwiX3QyIiwiX2NvbnRleHQzIiwiZmluaXNoIiwiaGFuZGxlU2F2ZUFuZFVzZSIsIl9yZWY2IiwiX2NhbGxlZTQiLCJzYXZlZFNraWxsIiwiX3QzIiwiX2NvbnRleHQ0IiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50Iiwic2tpbGwiLCJoYW5kbGVDb25maXJtRGVsZXRlIiwiX3JlZjciLCJfY2FsbGVlNSIsIl90NCIsIl9jb250ZXh0NSIsImhhbmRsZUVkaXRGcm9tVmlldyIsImhhbmRsZVVzZVNraWxsIiwidXNlRmlyc3RBZ2VudCIsImNvbnRhaW5lciIsImdldEVsZW1lbnRCeUlkIiwiZWRpdE9yQ3JlYXRlVGl0bGUiLCJ2aWV3VGl0bGUiLCJtb2RhbFRpdGxlIiwicHJldmlld0JvZHkiLCJjaGlsZHJlbiIsInpJbmRleCIsIm9uQ2xpY2siLCJzdG9wUHJvcGFnYXRpb24iLCJ0eXBlIiwiY29sb3IiLCJ3aWR0aCIsImhlaWdodCIsIiRoZWlnaHQiLCJodG1sRm9yIiwibWF4TGVuZ3RoIiwicGxhY2Vob2xkZXIiLCJkaXNhYmxlZCIsIm9uQ2hhbmdlIiwiJGNsaXBPdmVyZmxvdyIsInJlZiIsImFjY2VwdCIsInNpemUiLCJvbkNsb3NlIiwiaGFuZGxlcnMiLCJoYW5kbGVDb25maXJtQWN0aW9uIiwiY2hhdCIsInRpdGxlIiwiYWN0aW9uIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvb3JnYW5pc21zL0FibVNraWxsTW9kYWwvQWJtU2tpbGxNb2RhbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgQ2hhbmdlRXZlbnQsIE1vdXNlRXZlbnQsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gJ3JlYWN0LWRvbSdcbmltcG9ydCB7IENyb3NzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ3Jvc3MnXG5pbXBvcnQgeyBGaWxlVXBsb2FkIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvRmlsZVVwbG9hZCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IEJhY2tkcm9wIH0gZnJvbSAnLi4vLi4vYXRvbXMvQmFja2Ryb3AnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQgeyBTd2l0Y2ggfSBmcm9tICcuLi8uLi9hdG9tcy9Td2l0Y2gnXG5pbXBvcnQgeyBTRUNUSU9OUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyB1c2VVc2VyLCBpc0NvbGxhYm9yYXRvclJvbGUgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgdXNlU25hY2tCYXJNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU25hY2tCYXJNYW5hZ2VyL3VzZVNuYWNrQmFyTWFuYWdlcidcbmltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICcuLi8uLi8uLi9sYW5nL3V0aWxzJ1xuaW1wb3J0IHsgY3JlYXRlU2tpbGwgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL1NraWxscy9jcmVhdGVTa2lsbCdcbmltcG9ydCB7IHVwZGF0ZVNraWxsIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9Ta2lsbHMvdXBkYXRlU2tpbGwnXG5pbXBvcnQgeyBkZWxldGVTa2lsbCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvU2tpbGxzL2RlbGV0ZVNraWxsJ1xuaW1wb3J0IHsgU2tpbGwsIFNraWxsQWNjZXNzVHlwZSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL3NraWxsJ1xuaW1wb3J0IHsgRGVsZXRlUXVlc3Rpb25Nb2RhbCB9IGZyb20gJy4uL0RlbGV0ZVF1ZXN0aW9uTW9kYWwvRGVsZXRlUXVlc3Rpb25Nb2RhbCdcbmltcG9ydCB7XG4gIFNDQVNNQ2FuY2VsQnV0dG9uLFxuICBTQ0FTTUNsb3NlQnV0dG9uLFxuICBTQ0FTTUJvZHksXG4gIFNDQVNNRGVsZXRlT3V0bGluZWRCdXR0b24sXG4gIFNDQVNNRGVsZXRlU2xvdCxcbiAgU0NBU01GaWVsZEJveCxcbiAgU0NBU01GaWVsZElucHV0LFxuICBTQ0FTTUZpZWxkTGFiZWwsXG4gIFNDQVNNRmllbGRUZXh0YXJlYSxcbiAgU0NBU01Gb290ZXIsXG4gIFNDQVNNSGVhZGVyLFxuICBTQ0FTTUhlYWRlclRpdGxlLFxuICBTQ0FTTUhpZGRlbkZpbGVJbnB1dCxcbiAgU0NBU01JbnN0cnVjdGlvbnNGaWVsZCxcbiAgU0NBU01JbnN0cnVjdGlvbnNIZWFkZXIsXG4gIFNDQVNNSW5zdHJ1Y3Rpb25zUGFuZWwsXG4gIFNDQVNNSW5zdHJ1Y3Rpb25zVGV4dGFyZWEsXG4gIFNDQVNNSW5zdHJ1Y3Rpb25zVGl0bGUsXG4gIFNDQVNNTWV0YWRhdGFJdGVtLFxuICBTQ0FTTVByZXZpZXdCb2R5LFxuICBTQ0FTTVByZXZpZXdDb250ZW50Qm94LFxuICBTQ0FTTVByZXZpZXdDb250ZW50UGFuZWwsXG4gIFNDQVNNUHJldmlld0Rlc2NyaXB0aW9uLFxuICBTQ0FTTVByZXZpZXdIZWFkaW5nQmxvY2ssXG4gIFNDQVNNUHJldmlld01ldGFkYXRhTGFiZWwsXG4gIFNDQVNNUHJldmlld01ldGFkYXRhUm93LFxuICBTQ0FTTVByZXZpZXdNZXRhZGF0YVZhbHVlLFxuICBTQ0FTTVByZXZpZXdOYW1lLFxuICBTQ0FTTVNhdmVPdXRsaW5lZEJ1dHRvbixcbiAgU0NBU01TYXZlUHJpbWFyeUJ1dHRvbixcbiAgU0NBU01Td2l0Y2hMYWJlbCxcbiAgU0NBU01Td2l0Y2hSb3csXG4gIFNDQVNNVXBsb2FkQnV0dG9uLFxuICBTQ0FTTVVzZVNraWxsQnV0dG9uLFxuICBTQ0FTTVdyYXBwZXIsXG59IGZyb20gJy4vQWJtU2tpbGxNb2RhbC5zdHlsZXMnXG5cbmV4cG9ydCBjb25zdCBTS0lMTF9VU0VfQUZURVJfU0FWRV9FVkVOVCA9ICdtYWlhLXVzZS1za2lsbC1hZnRlci1zYXZlJ1xuXG50eXBlIFNraWxsTW9kYWxHZW5lcmFsID0ge1xuICBpZD86IHN0cmluZ1xuICBuYW1lPzogc3RyaW5nXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nXG4gIGNvbnRlbnQ/OiBzdHJpbmdcbiAgYWNjZXNzX3R5cGU/OiBTa2lsbEFjY2Vzc1R5cGVcbiAgY3JlYXRlZF9ieV9uYW1lPzogc3RyaW5nXG4gIGNyZWF0ZWRfYXQ/OiBzdHJpbmdcbiAgdXBkYXRlZF9hdD86IHN0cmluZ1xufVxuXG50eXBlIFNraWxsTW9kYWxWYWx1ZXMgPSB7XG4gIGlzRWRpdGluZzogYm9vbGVhblxuICBpc1JlYWRPbmx5PzogYm9vbGVhblxuICBpc1NoYXJlZD86IGJvb2xlYW5cbiAgaW50ZW50PzogJ2dlbmVyYXRlJyB8ICd3cml0ZScgfCAndXBsb2FkJ1xuICBnZW5lcmFsPzogU2tpbGxNb2RhbEdlbmVyYWxcbn1cblxudHlwZSBBYm1Ta2lsbE1vZGFsUHJvcHMgPSB7XG4gIGFkZFNraWxsPzogKHNraWxsOiBTa2lsbCkgPT4gdm9pZFxuICB1cGRhdGVTa2lsbEluTGlzdD86IChza2lsbDogU2tpbGwpID0+IHZvaWRcbiAgcmVtb3ZlU2tpbGw/OiAoc2tpbGxJZDogc3RyaW5nKSA9PiB2b2lkXG59XG5cbmNvbnN0IGluaXRpYWxWYWx1ZXM6IFNraWxsTW9kYWxWYWx1ZXMgPSB7XG4gIGlzRWRpdGluZzogZmFsc2UsXG4gIGdlbmVyYWw6IHtcbiAgICBpZDogdW5kZWZpbmVkLFxuICAgIG5hbWU6ICcnLFxuICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICBjb250ZW50OiAnJyxcbiAgICBhY2Nlc3NfdHlwZTogJ29ubHlfbWUnLFxuICB9LFxufVxuXG50eXBlIFNraWxsRm9ybUJhc2VsaW5lID0ge1xuICBuYW1lOiBzdHJpbmdcbiAgZGVzY3JpcHRpb246IHN0cmluZ1xuICBjb250ZW50OiBzdHJpbmdcbiAgYWNjZXNzX3R5cGU6IFNraWxsQWNjZXNzVHlwZVxufVxuXG5jb25zdCBlbXB0eUJhc2VsaW5lOiBTa2lsbEZvcm1CYXNlbGluZSA9IHtcbiAgbmFtZTogJycsXG4gIGRlc2NyaXB0aW9uOiAnJyxcbiAgY29udGVudDogJycsXG4gIGFjY2Vzc190eXBlOiAnb25seV9tZScsXG59XG5cbmNvbnN0IHBhcnNlRGVzY3JpcHRpb25Gcm9tQ29udGVudCA9IChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBmcm9udG1hdHRlck1hdGNoID0gY29udGVudC5tYXRjaCgvXi0tLVxccypcXG4oW1xcc1xcU10qPylcXG4tLS0vKVxuICBpZiAoIWZyb250bWF0dGVyTWF0Y2gpIHJldHVybiAnJ1xuICBjb25zdCBkZXNjcmlwdGlvbk1hdGNoID0gZnJvbnRtYXR0ZXJNYXRjaFsxXS5tYXRjaCgvXmRlc2NyaXB0aW9uOlxccyooLispJC9tKVxuICByZXR1cm4gZGVzY3JpcHRpb25NYXRjaCA/IGRlc2NyaXB0aW9uTWF0Y2hbMV0udHJpbSgpIDogJydcbn1cblxuZXhwb3J0IGNvbnN0IEFibVNraWxsTW9kYWwgPSAoeyBhZGRTa2lsbCwgdXBkYXRlU2tpbGxJbkxpc3QsIHJlbW92ZVNraWxsIH06IEFibVNraWxsTW9kYWxQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKFtTRUNUSU9OUy5jaGF0QUldKVxuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHsgaGFuZGxlU25hY2tiYXJTdWNjZXNzLCBoYW5kbGVTbmFja2JhckVycm9yIH0gPSB1c2VTbmFja0Jhck1hbmFnZXIoKVxuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc1N1Ym1pdHRpbmcsIHNldElzU3VibWl0dGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Nob3dEZWxldGUsIHNldFNob3dEZWxldGVdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtwZW5kaW5nVXBsb2FkLCBzZXRQZW5kaW5nVXBsb2FkXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbdmFsdWVzLCBzZXRWYWx1ZXNdID0gdXNlU3RhdGU8U2tpbGxNb2RhbFZhbHVlcz4oaW5pdGlhbFZhbHVlcylcbiAgY29uc3QgZmlsZUlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGluaXRpYWxSZWYgPSB1c2VSZWY8U2tpbGxGb3JtQmFzZWxpbmU+KGVtcHR5QmFzZWxpbmUpXG5cbiAgY29uc3QgaXNSZWFkT25seSA9ICEhdmFsdWVzLmlzUmVhZE9ubHlcbiAgY29uc3QgaXNTaGFyZWRTa2lsbCA9ICEhdmFsdWVzLmlzU2hhcmVkXG4gIGNvbnN0IGNhblNoYXJlV2l0aENvbXBhbnkgPSAhaXNDb2xsYWJvcmF0b3JSb2xlKHVzZXIucm9sZV9pZCkgJiYgIWlzUmVhZE9ubHlcblxuICBjb25zdCBuYW1lID0gdmFsdWVzLmdlbmVyYWw/Lm5hbWUgfHwgJydcbiAgY29uc3QgZGVzY3JpcHRpb24gPSB2YWx1ZXMuZ2VuZXJhbD8uZGVzY3JpcHRpb24gfHwgJydcbiAgY29uc3QgY29udGVudCA9IHZhbHVlcy5nZW5lcmFsPy5jb250ZW50IHx8ICcnXG4gIGNvbnN0IGFjY2Vzc1R5cGU6IFNraWxsQWNjZXNzVHlwZSA9IHZhbHVlcy5nZW5lcmFsPy5hY2Nlc3NfdHlwZSB8fCAnb25seV9tZSdcbiAgY29uc3QgZWZmZWN0aXZlQWNjZXNzVHlwZTogU2tpbGxBY2Nlc3NUeXBlID0gY2FuU2hhcmVXaXRoQ29tcGFueSA/IGFjY2Vzc1R5cGUgOiAnb25seV9tZSdcbiAgY29uc3Qgc2tpbGxJZCA9IHZhbHVlcy5nZW5lcmFsPy5pZFxuICBjb25zdCBpc1ZhbGlkID0gISFuYW1lLnRyaW0oKSAmJiAhIWNvbnRlbnQudHJpbSgpXG4gIGNvbnN0IGhhc0NoYW5nZXMgPVxuICAgIG5hbWUudHJpbSgpICE9PSBpbml0aWFsUmVmLmN1cnJlbnQubmFtZSB8fFxuICAgIGRlc2NyaXB0aW9uLnRyaW0oKSAhPT0gaW5pdGlhbFJlZi5jdXJyZW50LmRlc2NyaXB0aW9uIHx8XG4gICAgY29udGVudC50cmltKCkgIT09IGluaXRpYWxSZWYuY3VycmVudC5jb250ZW50IHx8XG4gICAgKGNhblNoYXJlV2l0aENvbXBhbnkgJiYgZWZmZWN0aXZlQWNjZXNzVHlwZSAhPT0gaW5pdGlhbFJlZi5jdXJyZW50LmFjY2Vzc190eXBlKVxuXG4gIGNvbnN0IGNyZWF0ZWRCeUxhYmVsID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgY3JlYXRlZEJ5ID0gdmFsdWVzLmdlbmVyYWw/LmNyZWF0ZWRfYnlfbmFtZT8udHJpbSgpXG4gICAgaWYgKGNyZWF0ZWRCeSkgcmV0dXJuIGNyZWF0ZWRCeVxuICAgIHJldHVybiBpc1NoYXJlZFNraWxsID8gJycgOiBgJHt1c2VyLmZpcnN0TmFtZX0gJHt1c2VyLmxhc3ROYW1lfWAudHJpbSgpXG4gIH0sIFt2YWx1ZXMuZ2VuZXJhbD8uY3JlYXRlZF9ieV9uYW1lLCB1c2VyLmZpcnN0TmFtZSwgdXNlci5sYXN0TmFtZSwgaXNTaGFyZWRTa2lsbF0pXG5cbiAgY29uc3QgbGFzdFVwZGF0ZWRMYWJlbCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZWRBdCA9IHZhbHVlcy5nZW5lcmFsPy51cGRhdGVkX2F0IHx8IHZhbHVlcy5nZW5lcmFsPy5jcmVhdGVkX2F0XG4gICAgaWYgKCF1cGRhdGVkQXQpIHJldHVybiAnJ1xuICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBEYXRlKHVwZGF0ZWRBdClcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHBhcnNlZC5nZXRUaW1lKCkpKSByZXR1cm4gJydcbiAgICByZXR1cm4gZm9ybWF0RGF0ZShwYXJzZWQpXG4gIH0sIFt2YWx1ZXMuZ2VuZXJhbD8udXBkYXRlZF9hdCwgdmFsdWVzLmdlbmVyYWw/LmNyZWF0ZWRfYXRdKVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldElzT3BlbihmYWxzZSlcbiAgICBzZXRTaG93RGVsZXRlKGZhbHNlKVxuICAgIHNldFBlbmRpbmdVcGxvYWQoZmFsc2UpXG4gICAgc2V0VmFsdWVzKGluaXRpYWxWYWx1ZXMpXG4gICAgaW5pdGlhbFJlZi5jdXJyZW50ID0gZW1wdHlCYXNlbGluZVxuICB9LCBbXSlcblxuICBjb25zdCBoYW5kbGVCYWNrZHJvcENsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0KSB7XG4gICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtoYW5kbGVDbG9zZV1cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlU2V0U2tpbGxWYWx1ZXMgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgY29uc3QgeyBza2lsbFZhbHVlcyB9ID0gZXZlbnQuZGV0YWlsIHx8IHt9XG4gICAgICBpZiAoIXNraWxsVmFsdWVzKSByZXR1cm5cblxuICAgICAgY29uc3QgaW5jb21pbmdHZW5lcmFsID0ge1xuICAgICAgICAuLi5pbml0aWFsVmFsdWVzLmdlbmVyYWwsXG4gICAgICAgIC4uLnNraWxsVmFsdWVzLnZhbHVlcz8uZ2VuZXJhbCxcbiAgICAgIH1cbiAgICAgIGNvbnN0IGluY29taW5nTmFtZSA9IChpbmNvbWluZ0dlbmVyYWwubmFtZSB8fCAnJykudHJpbSgpXG4gICAgICBjb25zdCBpbmNvbWluZ0Rlc2NyaXB0aW9uID0gKGluY29taW5nR2VuZXJhbC5kZXNjcmlwdGlvbiB8fCAnJykudHJpbSgpXG4gICAgICBjb25zdCBpbmNvbWluZ0NvbnRlbnQgPSAoaW5jb21pbmdHZW5lcmFsLmNvbnRlbnQgfHwgJycpLnRyaW0oKVxuICAgICAgY29uc3QgaW5jb21pbmdBY2Nlc3NUeXBlOiBTa2lsbEFjY2Vzc1R5cGUgPSBpc0NvbGxhYm9yYXRvclJvbGUodXNlci5yb2xlX2lkKVxuICAgICAgICA/ICdvbmx5X21lJ1xuICAgICAgICA6IGluY29taW5nR2VuZXJhbC5hY2Nlc3NfdHlwZSB8fCAnb25seV9tZSdcbiAgICAgIGNvbnN0IHBhcnNlZERlc2NyaXB0aW9uID1cbiAgICAgICAgaW5jb21pbmdEZXNjcmlwdGlvbiB8fCAoaW5jb21pbmdDb250ZW50ID8gcGFyc2VEZXNjcmlwdGlvbkZyb21Db250ZW50KGluY29taW5nQ29udGVudCkgOiAnJylcblxuICAgICAgY29uc3QgZWRpdGluZ0Jhc2VsaW5lOiBTa2lsbEZvcm1CYXNlbGluZSA9IHtcbiAgICAgICAgbmFtZTogaW5jb21pbmdOYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogcGFyc2VkRGVzY3JpcHRpb24sXG4gICAgICAgIGNvbnRlbnQ6IGluY29taW5nQ29udGVudCxcbiAgICAgICAgYWNjZXNzX3R5cGU6IGluY29taW5nQWNjZXNzVHlwZSxcbiAgICAgIH1cbiAgICAgIGluaXRpYWxSZWYuY3VycmVudCA9IHNraWxsVmFsdWVzLnZhbHVlcz8uaXNFZGl0aW5nID8gZWRpdGluZ0Jhc2VsaW5lIDogZW1wdHlCYXNlbGluZVxuXG4gICAgICBzZXRWYWx1ZXMoe1xuICAgICAgICAuLi5pbml0aWFsVmFsdWVzLFxuICAgICAgICAuLi5za2lsbFZhbHVlcy52YWx1ZXMsXG4gICAgICAgIGdlbmVyYWw6IHtcbiAgICAgICAgICAuLi5pbmNvbWluZ0dlbmVyYWwsXG4gICAgICAgICAgZGVzY3JpcHRpb246IHBhcnNlZERlc2NyaXB0aW9uLFxuICAgICAgICAgIGFjY2Vzc190eXBlOiBpbmNvbWluZ0FjY2Vzc1R5cGUsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgc2V0UGVuZGluZ1VwbG9hZChza2lsbFZhbHVlcy52YWx1ZXM/LmludGVudCA9PT0gJ3VwbG9hZCcpXG4gICAgICBzZXRJc09wZW4oISFza2lsbFZhbHVlcy5pc09wZW4pXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYWJtLXNraWxsLW1vZGFsLXNldC12YWx1ZXMnLCBoYW5kbGVTZXRTa2lsbFZhbHVlcylcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJtLXNraWxsLW1vZGFsLXNldC12YWx1ZXMnLCBoYW5kbGVTZXRTa2lsbFZhbHVlcylcbiAgICB9XG4gIH0sIFt1c2VyLnJvbGVfaWRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzT3BlbiAmJiBwZW5kaW5nVXBsb2FkKSB7XG4gICAgICBzZXRQZW5kaW5nVXBsb2FkKGZhbHNlKVxuICAgICAgZmlsZUlucHV0UmVmLmN1cnJlbnQ/LmNsaWNrKClcbiAgICB9XG4gIH0sIFtpc09wZW4sIHBlbmRpbmdVcGxvYWRdKVxuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZUZpZWxkID0gKGZpZWxkOiAnbmFtZScgfCAnZGVzY3JpcHRpb24nIHwgJ2NvbnRlbnQnLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgc2V0VmFsdWVzKHByZXYgPT4gKHtcbiAgICAgIC4uLnByZXYsXG4gICAgICBnZW5lcmFsOiB7IC4uLnByZXYuZ2VuZXJhbCwgW2ZpZWxkXTogdmFsdWUgfSxcbiAgICB9KSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUFjY2Vzc1R5cGVDaGFuZ2UgPSAoY2hlY2tlZDogYm9vbGVhbikgPT4ge1xuICAgIGlmICghY2FuU2hhcmVXaXRoQ29tcGFueSkgcmV0dXJuXG4gICAgc2V0VmFsdWVzKHByZXYgPT4gKHtcbiAgICAgIC4uLnByZXYsXG4gICAgICBnZW5lcmFsOiB7XG4gICAgICAgIC4uLnByZXYuZ2VuZXJhbCxcbiAgICAgICAgYWNjZXNzX3R5cGU6IGNoZWNrZWQgPyAnY29tcGFueScgOiAnb25seV9tZScsXG4gICAgICB9LFxuICAgIH0pKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlVXBsb2FkQ2xpY2sgPSAoKSA9PiB7XG4gICAgZmlsZUlucHV0UmVmLmN1cnJlbnQ/LmNsaWNrKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUZpbGVDaGFuZ2UgPSBhc3luYyAoZXZlbnQ6IENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgY29uc3QgZmlsZSA9IGV2ZW50LnRhcmdldC5maWxlcz8uWzBdXG4gICAgaWYgKGZpbGVJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBmaWxlSW5wdXRSZWYuY3VycmVudC52YWx1ZSA9ICcnXG4gICAgfVxuICAgIGlmICghZmlsZSkgcmV0dXJuXG5cbiAgICBjb25zdCBpc01hcmtkb3duID0gL1xcLihtZHxtYXJrZG93bikkL2kudGVzdChmaWxlLm5hbWUpXG4gICAgaWYgKCFpc01hcmtkb3duKSB7XG4gICAgICBoYW5kbGVTbmFja2JhckVycm9yKHQoJ215U2tpbGxzLnVwbG9hZEVycm9yJykpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IGZpbGUudGV4dCgpXG4gICAgICBjb25zdCBiYXNlTmFtZSA9IGZpbGUubmFtZS5yZXBsYWNlKC9cXC4obWR8bWFya2Rvd24pJC9pLCAnJylcbiAgICAgIGNvbnN0IHBhcnNlZERlc2NyaXB0aW9uID0gcGFyc2VEZXNjcmlwdGlvbkZyb21Db250ZW50KHRleHQpXG4gICAgICBzZXRWYWx1ZXMocHJldiA9PiAoe1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgLi4ucHJldi5nZW5lcmFsLFxuICAgICAgICAgIGNvbnRlbnQ6IHRleHQsXG4gICAgICAgICAgZGVzY3JpcHRpb246IHByZXYuZ2VuZXJhbD8uZGVzY3JpcHRpb24/LnRyaW0oKVxuICAgICAgICAgICAgPyBwcmV2LmdlbmVyYWwuZGVzY3JpcHRpb25cbiAgICAgICAgICAgIDogcGFyc2VkRGVzY3JpcHRpb24gfHwgcHJldi5nZW5lcmFsPy5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgICBuYW1lOiBwcmV2LmdlbmVyYWw/Lm5hbWU/LnRyaW0oKSA/IHByZXYuZ2VuZXJhbC5uYW1lIDogYmFzZU5hbWUsXG4gICAgICAgIH0sXG4gICAgICB9KSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdteVNraWxscy51cGxvYWRFcnJvcicpKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHBlcnNpc3RTa2lsbCA9IGFzeW5jICgpOiBQcm9taXNlPFNraWxsIHwgbnVsbD4gPT4ge1xuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICBuYW1lOiBuYW1lLnRyaW0oKSxcbiAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbi50cmltKCksXG4gICAgICBjb250ZW50OiBjb250ZW50LnRyaW0oKSxcbiAgICAgIGFjY2Vzc190eXBlOiBlZmZlY3RpdmVBY2Nlc3NUeXBlLFxuICAgIH1cblxuICAgIGlmICh2YWx1ZXMuaXNFZGl0aW5nICYmIHNraWxsSWQpIHtcbiAgICAgIGNvbnN0IHVwZGF0ZWQgPSBhd2FpdCB1cGRhdGVTa2lsbChza2lsbElkLCBwYXlsb2FkKVxuICAgICAgdXBkYXRlU2tpbGxJbkxpc3Q/Lih1cGRhdGVkKVxuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ215U2tpbGxzLnVwZGF0ZVN1Y2Nlc3MnKSlcbiAgICAgIHJldHVybiB1cGRhdGVkXG4gICAgfVxuXG4gICAgY29uc3QgY3JlYXRlZCA9IGF3YWl0IGNyZWF0ZVNraWxsKHBheWxvYWQpXG4gICAgYWRkU2tpbGw/LihjcmVhdGVkKVxuICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdteVNraWxscy5jcmVhdGVTdWNjZXNzJykpXG4gICAgcmV0dXJuIGNyZWF0ZWRcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVNhdmUgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFpc1ZhbGlkIHx8IGlzU3VibWl0dGluZyB8fCAhaGFzQ2hhbmdlcykgcmV0dXJuXG4gICAgc2V0SXNTdWJtaXR0aW5nKHRydWUpXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHBlcnNpc3RTa2lsbCgpXG4gICAgICBoYW5kbGVDbG9zZSgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodmFsdWVzLmlzRWRpdGluZyA/IHQoJ215U2tpbGxzLnVwZGF0ZUVycm9yJykgOiB0KCdteVNraWxscy5jcmVhdGVFcnJvcicpKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJc1N1Ym1pdHRpbmcoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlU2F2ZUFuZFVzZSA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWlzVmFsaWQgfHwgaXNTdWJtaXR0aW5nKSByZXR1cm5cbiAgICBzZXRJc1N1Ym1pdHRpbmcodHJ1ZSlcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2F2ZWRTa2lsbCA9IGF3YWl0IHBlcnNpc3RTa2lsbCgpXG4gICAgICBpZiAoc2F2ZWRTa2lsbCkge1xuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChTS0lMTF9VU0VfQUZURVJfU0FWRV9FVkVOVCwge1xuICAgICAgICAgICAgZGV0YWlsOiB7IHNraWxsOiBzYXZlZFNraWxsIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBoYW5kbGVTbmFja2JhckVycm9yKHZhbHVlcy5pc0VkaXRpbmcgPyB0KCdteVNraWxscy51cGRhdGVFcnJvcicpIDogdCgnbXlTa2lsbHMuY3JlYXRlRXJyb3InKSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNTdWJtaXR0aW5nKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNvbmZpcm1EZWxldGUgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFza2lsbElkKSByZXR1cm5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZGVsZXRlU2tpbGwoc2tpbGxJZClcbiAgICAgIHJlbW92ZVNraWxsPy4oc2tpbGxJZClcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdteVNraWxscy5kZWxldGVTdWNjZXNzJykpXG4gICAgICBoYW5kbGVDbG9zZSgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnbXlTa2lsbHMuZGVsZXRlRXJyb3InKSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVFZGl0RnJvbVZpZXcgPSAoKSA9PiB7XG4gICAgc2V0VmFsdWVzKHByZXYgPT4gKHsgLi4ucHJldiwgaXNSZWFkT25seTogZmFsc2UgfSkpXG4gIH1cblxuICAvKiogU2tpbGwgYWplbmEgZW4gbW9kbyBsZWN0dXJhOiBhYnJlIHVuIGNoYXQgbnVldm8gY29uIGVsIHByaW1lciBhZ2VudGUgeSBsYSBtZW5jacOzbiB5YSBwdWVzdGEuICovXG4gIGNvbnN0IGhhbmRsZVVzZVNraWxsID0gKCkgPT4ge1xuICAgIGlmICghc2tpbGxJZCkgcmV0dXJuXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudChTS0lMTF9VU0VfQUZURVJfU0FWRV9FVkVOVCwge1xuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBza2lsbDogeyBpZDogc2tpbGxJZCwgbmFtZSwgZGVzY3JpcHRpb24sIGNvbnRlbnQsIGFjY2Vzc190eXBlOiBhY2Nlc3NUeXBlIH0sXG4gICAgICAgICAgdXNlRmlyc3RBZ2VudDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKVxuICAgIGhhbmRsZUNsb3NlKClcbiAgfVxuXG4gIGlmICghaXNPcGVuKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbC1yb290LWFjdGlvbnMnKVxuICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuIG51bGxcblxuICBjb25zdCBlZGl0T3JDcmVhdGVUaXRsZSA9IHZhbHVlcy5pc0VkaXRpbmcgPyB0KCdteVNraWxscy5lZGl0VGl0bGUnKSA6IHQoJ215U2tpbGxzLmNyZWF0ZVRpdGxlJylcbiAgY29uc3Qgdmlld1RpdGxlID0gaXNTaGFyZWRTa2lsbCA/IHQoJ215U2tpbGxzLnZpZXdUaXRsZScpIDogdCgnbXlTa2lsbHMudmlld093blRpdGxlJylcbiAgY29uc3QgbW9kYWxUaXRsZSA9IGlzUmVhZE9ubHkgPyB2aWV3VGl0bGUgOiBlZGl0T3JDcmVhdGVUaXRsZVxuXG4gIGNvbnN0IHByZXZpZXdCb2R5ID0gKFxuICAgIDxTQ0FTTVByZXZpZXdCb2R5PlxuICAgICAgPFNDQVNNUHJldmlld0hlYWRpbmdCbG9jaz5cbiAgICAgICAgPFNDQVNNUHJldmlld05hbWU+e25hbWV9PC9TQ0FTTVByZXZpZXdOYW1lPlxuICAgICAgICB7ZGVzY3JpcHRpb24gPyA8U0NBU01QcmV2aWV3RGVzY3JpcHRpb24+e2Rlc2NyaXB0aW9ufTwvU0NBU01QcmV2aWV3RGVzY3JpcHRpb24+IDogbnVsbH1cbiAgICAgIDwvU0NBU01QcmV2aWV3SGVhZGluZ0Jsb2NrPlxuXG4gICAgICA8U0NBU01QcmV2aWV3TWV0YWRhdGFSb3c+XG4gICAgICAgIHtjcmVhdGVkQnlMYWJlbCA/IChcbiAgICAgICAgICA8U0NBU01NZXRhZGF0YUl0ZW0+XG4gICAgICAgICAgICA8U0NBU01QcmV2aWV3TWV0YWRhdGFMYWJlbD57dCgnbXlTa2lsbHMuY3JlYXRlZEJ5Jyl9PC9TQ0FTTVByZXZpZXdNZXRhZGF0YUxhYmVsPlxuICAgICAgICAgICAgPFNDQVNNUHJldmlld01ldGFkYXRhVmFsdWU+e2NyZWF0ZWRCeUxhYmVsfTwvU0NBU01QcmV2aWV3TWV0YWRhdGFWYWx1ZT5cbiAgICAgICAgICA8L1NDQVNNTWV0YWRhdGFJdGVtPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAge2xhc3RVcGRhdGVkTGFiZWwgPyAoXG4gICAgICAgICAgPFNDQVNNTWV0YWRhdGFJdGVtPlxuICAgICAgICAgICAgPFNDQVNNUHJldmlld01ldGFkYXRhTGFiZWw+e3QoJ215U2tpbGxzLmxhc3RVcGRhdGVkJyl9PC9TQ0FTTVByZXZpZXdNZXRhZGF0YUxhYmVsPlxuICAgICAgICAgICAgPFNDQVNNUHJldmlld01ldGFkYXRhVmFsdWU+e2xhc3RVcGRhdGVkTGFiZWx9PC9TQ0FTTVByZXZpZXdNZXRhZGF0YVZhbHVlPlxuICAgICAgICAgIDwvU0NBU01NZXRhZGF0YUl0ZW0+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7IWlzU2hhcmVkU2tpbGwgPyAoXG4gICAgICAgICAgPFNDQVNNTWV0YWRhdGFJdGVtPlxuICAgICAgICAgICAgPFNDQVNNUHJldmlld01ldGFkYXRhTGFiZWw+e3QoJ215U2tpbGxzLmVuYWJsZWRMYWJlbCcpfTwvU0NBU01QcmV2aWV3TWV0YWRhdGFMYWJlbD5cbiAgICAgICAgICAgIDxTQ0FTTVByZXZpZXdNZXRhZGF0YVZhbHVlPlxuICAgICAgICAgICAgICB7YWNjZXNzVHlwZSA9PT0gJ2NvbXBhbnknID8gdCgnbXlTa2lsbHMudmlzaWJpbGl0eUV2ZXJ5b25lJykgOiB0KCdteVNraWxscy52aXNpYmlsaXR5T25seU1lJyl9XG4gICAgICAgICAgICA8L1NDQVNNUHJldmlld01ldGFkYXRhVmFsdWU+XG4gICAgICAgICAgPC9TQ0FTTU1ldGFkYXRhSXRlbT5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L1NDQVNNUHJldmlld01ldGFkYXRhUm93PlxuXG4gICAgICA8U0NBU01QcmV2aWV3Q29udGVudFBhbmVsPlxuICAgICAgICA8U0NBU01JbnN0cnVjdGlvbnNUaXRsZT57dCgnbXlTa2lsbHMuaW5zdHJ1Y3Rpb25zTGFiZWwnKX08L1NDQVNNSW5zdHJ1Y3Rpb25zVGl0bGU+XG4gICAgICAgIDxTQ0FTTVByZXZpZXdDb250ZW50Qm94Pntjb250ZW50fTwvU0NBU01QcmV2aWV3Q29udGVudEJveD5cbiAgICAgIDwvU0NBU01QcmV2aWV3Q29udGVudFBhbmVsPlxuICAgIDwvU0NBU01QcmV2aWV3Qm9keT5cbiAgKVxuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoXG4gICAgPEJhY2tkcm9wIHpJbmRleD17MTExMn0gb25DbGljaz17aGFuZGxlQmFja2Ryb3BDbGlja30+XG4gICAgICA8U0NBU01XcmFwcGVyIG9uQ2xpY2s9e2V2ZW50ID0+IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfT5cbiAgICAgICAgPFNDQVNNSGVhZGVyPlxuICAgICAgICAgIDxTQ0FTTUhlYWRlclRpdGxlPnttb2RhbFRpdGxlfTwvU0NBU01IZWFkZXJUaXRsZT5cbiAgICAgICAgICA8U0NBU01DbG9zZUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlQ2xvc2V9IGFyaWEtbGFiZWw9e3QoJ215U2tpbGxzLmNsb3NlJyl9PlxuICAgICAgICAgICAgPENyb3NzIGNvbG9yPVwiI2E2YTZhNlwiIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgICAgICAgICA8L1NDQVNNQ2xvc2VCdXR0b24+XG4gICAgICAgIDwvU0NBU01IZWFkZXI+XG5cbiAgICAgICAge2lzUmVhZE9ubHkgPyAoXG4gICAgICAgICAgcHJldmlld0JvZHlcbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8U0NBU01Cb2R5PlxuICAgICAgICAgICAgPFNDQVNNRmllbGRCb3ggJGhlaWdodD17NTB9PlxuICAgICAgICAgICAgICA8U0NBU01GaWVsZExhYmVsIGh0bWxGb3I9XCJza2lsbC1uYW1lLWlucHV0XCI+e3QoJ215U2tpbGxzLm5hbWVMYWJlbCcpfTwvU0NBU01GaWVsZExhYmVsPlxuICAgICAgICAgICAgICA8U0NBU01GaWVsZElucHV0XG4gICAgICAgICAgICAgICAgaWQ9XCJza2lsbC1uYW1lLWlucHV0XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgbWF4TGVuZ3RoPXsxNTB9XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3QoJ215U2tpbGxzLm5hbWVQbGFjZWhvbGRlcicpfVxuICAgICAgICAgICAgICAgIHZhbHVlPXtuYW1lfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc1N1Ym1pdHRpbmd9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e2V2ZW50ID0+IGhhbmRsZUNoYW5nZUZpZWxkKCduYW1lJywgZXZlbnQudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvU0NBU01GaWVsZEJveD5cblxuICAgICAgICAgICAgPFNDQVNNRmllbGRCb3ggJGhlaWdodD17MTIwfSAkY2xpcE92ZXJmbG93PlxuICAgICAgICAgICAgICA8U0NBU01GaWVsZExhYmVsIGh0bWxGb3I9XCJza2lsbC1kZXNjcmlwdGlvbi1pbnB1dFwiPnt0KCdteVNraWxscy5kZXNjcmlwdGlvbkxhYmVsJyl9PC9TQ0FTTUZpZWxkTGFiZWw+XG4gICAgICAgICAgICAgIDxTQ0FTTUZpZWxkVGV4dGFyZWFcbiAgICAgICAgICAgICAgICBpZD1cInNraWxsLWRlc2NyaXB0aW9uLWlucHV0XCJcbiAgICAgICAgICAgICAgICBtYXhMZW5ndGg9ezUwMH1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dCgnbXlTa2lsbHMuZGVzY3JpcHRpb25QbGFjZWhvbGRlcicpfVxuICAgICAgICAgICAgICAgIHZhbHVlPXtkZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNTdWJtaXR0aW5nfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtldmVudCA9PiBoYW5kbGVDaGFuZ2VGaWVsZCgnZGVzY3JpcHRpb24nLCBldmVudC50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9TQ0FTTUZpZWxkQm94PlxuXG4gICAgICAgICAgICB7Y2FuU2hhcmVXaXRoQ29tcGFueSA/IChcbiAgICAgICAgICAgICAgPFNDQVNNU3dpdGNoUm93PlxuICAgICAgICAgICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2FjY2Vzc1R5cGUgPT09ICdjb21wYW55J31cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVBY2Nlc3NUeXBlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzU3VibWl0dGluZ31cbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ215U2tpbGxzLnNoYXJlV2l0aENvbXBhbnknKX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxTQ0FTTVN3aXRjaExhYmVsPnt0KCdteVNraWxscy5zaGFyZVdpdGhDb21wYW55Jyl9PC9TQ0FTTVN3aXRjaExhYmVsPlxuICAgICAgICAgICAgICA8L1NDQVNNU3dpdGNoUm93PlxuICAgICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICAgIDxTQ0FTTUluc3RydWN0aW9uc1BhbmVsPlxuICAgICAgICAgICAgICA8U0NBU01JbnN0cnVjdGlvbnNIZWFkZXI+XG4gICAgICAgICAgICAgICAgPFNDQVNNSW5zdHJ1Y3Rpb25zVGl0bGU+e3QoJ215U2tpbGxzLmluc3RydWN0aW9uc0xhYmVsJyl9PC9TQ0FTTUluc3RydWN0aW9uc1RpdGxlPlxuICAgICAgICAgICAgICAgIDxTQ0FTTVVwbG9hZEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlVXBsb2FkQ2xpY2t9IGRpc2FibGVkPXtpc1N1Ym1pdHRpbmd9PlxuICAgICAgICAgICAgICAgICAgPEZpbGVVcGxvYWQgd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSBjb2xvcj1cIiMwOENcIiAvPlxuICAgICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLnVwbG9hZE1kJyl9XG4gICAgICAgICAgICAgICAgPC9TQ0FTTVVwbG9hZEJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8U0NBU01IaWRkZW5GaWxlSW5wdXRcbiAgICAgICAgICAgICAgICAgIHJlZj17ZmlsZUlucHV0UmVmfVxuICAgICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgICAgYWNjZXB0PVwiLm1kLC5tYXJrZG93bix0ZXh0L21hcmtkb3duXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvU0NBU01JbnN0cnVjdGlvbnNIZWFkZXI+XG5cbiAgICAgICAgICAgICAgPFNDQVNNSW5zdHJ1Y3Rpb25zRmllbGQ+XG4gICAgICAgICAgICAgICAgPFNDQVNNSW5zdHJ1Y3Rpb25zVGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgIGlkPVwic2tpbGwtY29udGVudC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICBtYXhMZW5ndGg9ezEwMDAwMH1cbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0KCdteVNraWxscy5jb250ZW50UGxhY2Vob2xkZXInKX1cbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb250ZW50fVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzU3VibWl0dGluZ31cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtldmVudCA9PiBoYW5kbGVDaGFuZ2VGaWVsZCgnY29udGVudCcsIGV2ZW50LnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9TQ0FTTUluc3RydWN0aW9uc0ZpZWxkPlxuICAgICAgICAgICAgPC9TQ0FTTUluc3RydWN0aW9uc1BhbmVsPlxuICAgICAgICAgIDwvU0NBU01Cb2R5PlxuICAgICAgICApfVxuXG4gICAgICAgIDxTQ0FTTUZvb3Rlcj5cbiAgICAgICAgICB7aXNSZWFkT25seSAmJiBpc1NoYXJlZFNraWxsID8gKFxuICAgICAgICAgICAgPFNDQVNNVXNlU2tpbGxCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZVVzZVNraWxsfT5cbiAgICAgICAgICAgICAge3QoJ215U2tpbGxzLnVzZVNraWxsJyl9XG4gICAgICAgICAgICA8L1NDQVNNVXNlU2tpbGxCdXR0b24+XG4gICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICB7aXNSZWFkT25seSAmJiAhaXNTaGFyZWRTa2lsbCA/IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxTQ0FTTURlbGV0ZVNsb3Q+XG4gICAgICAgICAgICAgICAgPFNDQVNNRGVsZXRlT3V0bGluZWRCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9eygpID0+IHNldFNob3dEZWxldGUodHJ1ZSl9PlxuICAgICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLmRlbGV0ZScpfVxuICAgICAgICAgICAgICAgIDwvU0NBU01EZWxldGVPdXRsaW5lZEJ1dHRvbj5cbiAgICAgICAgICAgICAgPC9TQ0FTTURlbGV0ZVNsb3Q+XG4gICAgICAgICAgICAgIDxTQ0FTTVNhdmVQcmltYXJ5QnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVFZGl0RnJvbVZpZXd9PlxuICAgICAgICAgICAgICAgIHt0KCdteVNraWxscy5lZGl0Jyl9XG4gICAgICAgICAgICAgIDwvU0NBU01TYXZlUHJpbWFyeUJ1dHRvbj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgeyFpc1JlYWRPbmx5ID8gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAge3ZhbHVlcy5pc0VkaXRpbmcgPyAoXG4gICAgICAgICAgICAgICAgPFNDQVNNRGVsZXRlU2xvdD5cbiAgICAgICAgICAgICAgICAgIDxTQ0FTTUNhbmNlbEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17KCkgPT4gc2V0U2hvd0RlbGV0ZSh0cnVlKX0gZGlzYWJsZWQ9e2lzU3VibWl0dGluZ30+XG4gICAgICAgICAgICAgICAgICAgIHt0KCdteVNraWxscy5kZWxldGUnKX1cbiAgICAgICAgICAgICAgICAgIDwvU0NBU01DYW5jZWxCdXR0b24+XG4gICAgICAgICAgICAgICAgPC9TQ0FTTURlbGV0ZVNsb3Q+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICA8U0NBU01TYXZlT3V0bGluZWRCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZVNhdmVBbmRVc2V9IGRpc2FibGVkPXshaXNWYWxpZCB8fCBpc1N1Ym1pdHRpbmd9PlxuICAgICAgICAgICAgICAgIHtpc1N1Ym1pdHRpbmcgPyA8TG9hZGVyIHNpemU9XCJzbWFsbFwiIC8+IDogdCgnbXlTa2lsbHMuc2F2ZUFuZFVzZScpfVxuICAgICAgICAgICAgICA8L1NDQVNNU2F2ZU91dGxpbmVkQnV0dG9uPlxuICAgICAgICAgICAgICA8U0NBU01TYXZlUHJpbWFyeUJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNhdmV9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFpc1ZhbGlkIHx8IGlzU3VibWl0dGluZyB8fCAhaGFzQ2hhbmdlc31cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtpc1N1Ym1pdHRpbmcgPyA8TG9hZGVyIHNpemU9XCJzbWFsbFwiIC8+IDogdCgnbXlTa2lsbHMuc2F2ZScpfVxuICAgICAgICAgICAgICA8L1NDQVNNU2F2ZVByaW1hcnlCdXR0b24+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9TQ0FTTUZvb3Rlcj5cbiAgICAgIDwvU0NBU01XcmFwcGVyPlxuXG4gICAgICB7c2hvd0RlbGV0ZSAmJiBza2lsbElkID8gKFxuICAgICAgICA8RGVsZXRlUXVlc3Rpb25Nb2RhbFxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dEZWxldGUoZmFsc2UpfVxuICAgICAgICAgIGhhbmRsZXJzPXt7XG4gICAgICAgICAgICBoYW5kbGVDb25maXJtQWN0aW9uOiBoYW5kbGVDb25maXJtRGVsZXRlLFxuICAgICAgICAgIH19XG4gICAgICAgICAgY2hhdD17eyB0aXRsZTogbmFtZSwgaWQ6IHNraWxsSWQgfX1cbiAgICAgICAgICBhY3Rpb249XCJza2lsbFwiXG4gICAgICAgIC8+XG4gICAgICApIDogbnVsbH1cbiAgICA8L0JhY2tkcm9wPixcbiAgICBjb250YWluZXJcbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBLFNBQWtDQSxXQUFXLEVBQUVDLFNBQVMs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
432
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlUG9ydGFsIiwiQ3Jvc3MiLCJ1c2VUcmFuc2xhdGlvbiIsIk1haWFTdHJlYW1kb3duIiwiQmFja2Ryb3AiLCJMb2FkZXIiLCJTRUNUSU9OUyIsInVzZVVzZXIiLCJ1c2VTbmFja0Jhck1hbmFnZXIiLCJjcmVhdGVTa2lsbCIsInVwZGF0ZVNraWxsIiwiZGVsZXRlU2tpbGwiLCJEZWxldGVRdWVzdGlvbk1vZGFsIiwiU0NBU01DYW5jZWxCdXR0b24iLCJTQ0FTTUNsb3NlQnV0dG9uIiwiU0NBU01Db250ZW50IiwiU0NBU01EZWxldGVTbG90IiwiU0NBU01GaWVsZCIsIlNDQVNNRmllbGRIZWFkZXIiLCJTQ0FTTUZvb3RlciIsIlNDQVNNSGVhZGVyIiwiU0NBU01IZWFkZXJBY3Rpb25zIiwiU0NBU01IZWFkZXJUaXRsZSIsIlNDQVNNSGlkZGVuRmlsZUlucHV0IiwiU0NBU01JbnB1dCIsIlNDQVNNTGFiZWwiLCJTQ0FTTVByZXZpZXciLCJTQ0FTTVByZXZpZXdFbXB0eSIsIlNDQVNNU2F2ZUJ1dHRvbiIsIlNDQVNNVGV4dGFyZWEiLCJTQ0FTTVRvZ2dsZUJ1dHRvbiIsIlNDQVNNVG9nZ2xlR3JvdXAiLCJTQ0FTTVVwbG9hZEJ1dHRvbiIsIlNDQVNNV3JhcHBlciIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJpbml0aWFsVmFsdWVzIiwiaXNFZGl0aW5nIiwiZ2VuZXJhbCIsImlkIiwidW5kZWZpbmVkIiwibmFtZSIsImNvbnRlbnQiLCJBYm1Ta2lsbE1vZGFsIiwiX3JlZiIsIl91c2VyJHBlcm1pc3Npb25zIiwiX3ZhbHVlcyRnZW5lcmFsIiwiX3ZhbHVlcyRnZW5lcmFsMiIsIl92YWx1ZXMkZ2VuZXJhbDMiLCJhZGRTa2lsbCIsInVwZGF0ZVNraWxsSW5MaXN0IiwicmVtb3ZlU2tpbGwiLCJfdXNlVHJhbnNsYXRpb24iLCJjaGF0QUkiLCJ0IiwidXNlciIsIl91c2VTbmFja0Jhck1hbmFnZXIiLCJoYW5kbGVTbmFja2JhclN1Y2Nlc3MiLCJoYW5kbGVTbmFja2JhckVycm9yIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiaXNPcGVuIiwic2V0SXNPcGVuIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJpc1N1Ym1pdHRpbmciLCJzZXRJc1N1Ym1pdHRpbmciLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInNob3dEZWxldGUiLCJzZXRTaG93RGVsZXRlIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJzaG93UHJldmlldyIsInNldFNob3dQcmV2aWV3IiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJwZW5kaW5nVXBsb2FkIiwic2V0UGVuZGluZ1VwbG9hZCIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsInZhbHVlcyIsInNldFZhbHVlcyIsImZpbGVJbnB1dFJlZiIsImluaXRpYWxSZWYiLCJ1c2VyUGVybWlzc2lvbnMiLCJwZXJtaXNzaW9ucyIsImFpX2FnZW50cyIsImNhbkNyZWF0ZSIsImNyZWF0ZSIsImNhbkVkaXQiLCJlZGl0IiwiY2FuRGVsZXRlIiwic2tpbGxJZCIsImlzVmFsaWQiLCJ0cmltIiwiaGFzQ2hhbmdlcyIsImN1cnJlbnQiLCJoYW5kbGVDbG9zZSIsImhhbmRsZUJhY2tkcm9wQ2xpY2siLCJldmVudCIsInRhcmdldCIsImN1cnJlbnRUYXJnZXQiLCJoYW5kbGVTZXRTa2lsbFZhbHVlcyIsIl9za2lsbFZhbHVlcyR2YWx1ZXMiLCJfc2tpbGxWYWx1ZXMkdmFsdWVzMiIsIl9za2lsbFZhbHVlcyR2YWx1ZXMzIiwiX3NraWxsVmFsdWVzJHZhbHVlczQiLCJfc2tpbGxWYWx1ZXMkdmFsdWVzNSIsIl9za2lsbFZhbHVlcyR2YWx1ZXM2IiwiX3JlZjIiLCJkZXRhaWwiLCJza2lsbFZhbHVlcyIsImluY29taW5nTmFtZSIsImluY29taW5nQ29udGVudCIsIl9vYmplY3RTcHJlYWQiLCJoYXNDb250ZW50IiwiaW50ZW50IiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIl9maWxlSW5wdXRSZWYkY3VycmVudCIsImNsaWNrIiwiaGFuZGxlQ2hhbmdlRmllbGQiLCJmaWVsZCIsInZhbHVlIiwicHJldiIsIl9kZWZpbmVQcm9wZXJ0eSIsImhhbmRsZVVwbG9hZENsaWNrIiwiX2ZpbGVJbnB1dFJlZiRjdXJyZW50MiIsImhhbmRsZUZpbGVDaGFuZ2UiLCJfcmVmMyIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiX2V2ZW50JHRhcmdldCRmaWxlcyIsImZpbGUiLCJpc01hcmtkb3duIiwidGV4dCIsImJhc2VOYW1lIiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJuZXh0IiwiZmlsZXMiLCJhYnJ1cHQiLCJ0ZXN0Iiwic2VudCIsInJlcGxhY2UiLCJfcHJldiRnZW5lcmFsIiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJoYW5kbGVTYXZlIiwiX3JlZjQiLCJfY2FsbGVlMiIsInVwZGF0ZWQiLCJjcmVhdGVkIiwiX3QyIiwiX2NvbnRleHQyIiwiZmluaXNoIiwiaGFuZGxlQ29uZmlybURlbGV0ZSIsIl9yZWY1IiwiX2NhbGxlZTMiLCJfdDMiLCJfY29udGV4dDMiLCJjb250YWluZXIiLCJnZXRFbGVtZW50QnlJZCIsInpJbmRleCIsIm9uQ2xpY2siLCJjaGlsZHJlbiIsInN0b3BQcm9wYWdhdGlvbiIsInR5cGUiLCJjb2xvciIsIndpZHRoIiwiaGVpZ2h0IiwiaHRtbEZvciIsIm1heExlbmd0aCIsInBsYWNlaG9sZGVyIiwiZGlzYWJsZWQiLCJvbkNoYW5nZSIsInJlZiIsImFjY2VwdCIsIiRhY3RpdmUiLCJ2YXJpYW50Iiwic2l6ZSIsIm9uQ2xvc2UiLCJoYW5kbGVycyIsImhhbmRsZUNvbmZpcm1BY3Rpb24iLCJjaGF0IiwidGl0bGUiLCJhY3Rpb24iXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9vcmdhbmlzbXMvQWJtU2tpbGxNb2RhbC9BYm1Ta2lsbE1vZGFsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBDaGFuZ2VFdmVudCwgTW91c2VFdmVudCwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IHsgQ3Jvc3MgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9Dcm9zcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IE1haWFTdHJlYW1kb3duIH0gZnJvbSAnLi4vLi4vYXRvbXMvTWFpYVN0cmVhbWRvd24nXG5pbXBvcnQgeyBCYWNrZHJvcCB9IGZyb20gJy4uLy4uL2F0b21zL0JhY2tkcm9wJ1xuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGVyJ1xuaW1wb3J0IHsgU0VDVElPTlMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvY29uZmlnJ1xuaW1wb3J0IHsgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyB1c2VTbmFja0Jhck1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbmFja0Jhck1hbmFnZXIvdXNlU25hY2tCYXJNYW5hZ2VyJ1xuaW1wb3J0IHsgY3JlYXRlU2tpbGwgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL1NraWxscy9jcmVhdGVTa2lsbCdcbmltcG9ydCB7IHVwZGF0ZVNraWxsIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9Ta2lsbHMvdXBkYXRlU2tpbGwnXG5pbXBvcnQgeyBkZWxldGVTa2lsbCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvU2tpbGxzL2RlbGV0ZVNraWxsJ1xuaW1wb3J0IHsgU2tpbGwgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9za2lsbCdcbmltcG9ydCB7IERlbGV0ZVF1ZXN0aW9uTW9kYWwgfSBmcm9tICcuLi9EZWxldGVRdWVzdGlvbk1vZGFsL0RlbGV0ZVF1ZXN0aW9uTW9kYWwnXG5pbXBvcnQge1xuICBTQ0FTTUNhbmNlbEJ1dHRvbixcbiAgU0NBU01DbG9zZUJ1dHRvbixcbiAgU0NBU01Db250ZW50LFxuICBTQ0FTTURlbGV0ZVNsb3QsXG4gIFNDQVNNRmllbGQsXG4gIFNDQVNNRmllbGRIZWFkZXIsXG4gIFNDQVNNRm9vdGVyLFxuICBTQ0FTTUhlYWRlcixcbiAgU0NBU01IZWFkZXJBY3Rpb25zLFxuICBTQ0FTTUhlYWRlclRpdGxlLFxuICBTQ0FTTUhpZGRlbkZpbGVJbnB1dCxcbiAgU0NBU01JbnB1dCxcbiAgU0NBU01MYWJlbCxcbiAgU0NBU01QcmV2aWV3LFxuICBTQ0FTTVByZXZpZXdFbXB0eSxcbiAgU0NBU01TYXZlQnV0dG9uLFxuICBTQ0FTTVRleHRhcmVhLFxuICBTQ0FTTVRvZ2dsZUJ1dHRvbixcbiAgU0NBU01Ub2dnbGVHcm91cCxcbiAgU0NBU01VcGxvYWRCdXR0b24sXG4gIFNDQVNNV3JhcHBlcixcbn0gZnJvbSAnLi9BYm1Ta2lsbE1vZGFsLnN0eWxlcydcblxudHlwZSBTa2lsbE1vZGFsVmFsdWVzID0ge1xuICBpc0VkaXRpbmc6IGJvb2xlYW5cbiAgZ2VuZXJhbD86IHtcbiAgICBpZD86IHN0cmluZ1xuICAgIG5hbWU/OiBzdHJpbmdcbiAgICBjb250ZW50Pzogc3RyaW5nXG4gIH1cbn1cblxudHlwZSBBYm1Ta2lsbE1vZGFsUHJvcHMgPSB7XG4gIGFkZFNraWxsPzogKHNraWxsOiBTa2lsbCkgPT4gdm9pZFxuICB1cGRhdGVTa2lsbEluTGlzdD86IChza2lsbDogU2tpbGwpID0+IHZvaWRcbiAgcmVtb3ZlU2tpbGw/OiAoc2tpbGxJZDogc3RyaW5nKSA9PiB2b2lkXG59XG5cbmNvbnN0IGluaXRpYWxWYWx1ZXM6IFNraWxsTW9kYWxWYWx1ZXMgPSB7XG4gIGlzRWRpdGluZzogZmFsc2UsXG4gIGdlbmVyYWw6IHsgaWQ6IHVuZGVmaW5lZCwgbmFtZTogJycsIGNvbnRlbnQ6ICcnIH0sXG59XG5cbmV4cG9ydCBjb25zdCBBYm1Ta2lsbE1vZGFsID0gKHsgYWRkU2tpbGwsIHVwZGF0ZVNraWxsSW5MaXN0LCByZW1vdmVTa2lsbCB9OiBBYm1Ta2lsbE1vZGFsUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbihbU0VDVElPTlMuY2hhdEFJXSlcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7IGhhbmRsZVNuYWNrYmFyU3VjY2VzcywgaGFuZGxlU25hY2tiYXJFcnJvciB9ID0gdXNlU25hY2tCYXJNYW5hZ2VyKClcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaXNTdWJtaXR0aW5nLCBzZXRJc1N1Ym1pdHRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93RGVsZXRlLCBzZXRTaG93RGVsZXRlXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2hvd1ByZXZpZXcsIHNldFNob3dQcmV2aWV3XSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbcGVuZGluZ1VwbG9hZCwgc2V0UGVuZGluZ1VwbG9hZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3ZhbHVlcywgc2V0VmFsdWVzXSA9IHVzZVN0YXRlPFNraWxsTW9kYWxWYWx1ZXM+KGluaXRpYWxWYWx1ZXMpXG4gIGNvbnN0IGZpbGVJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuICAvLyBCYXNlbGluZSB0byBkZXRlY3QgY2hhbmdlczogdGhlIGxvYWRlZCB2YWx1ZXMgd2hlbiBlZGl0aW5nLCBlbXB0eSB3aGVuIGNyZWF0aW5nXG4gIC8vIChhIG5ldy9nZW5lcmF0ZWQvdXBsb2FkZWQgc2tpbGwgYWx3YXlzIGNvdW50cyBhcyBhIGNoYW5nZSkuXG4gIGNvbnN0IGluaXRpYWxSZWYgPSB1c2VSZWY8eyBuYW1lOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB9Pih7IG5hbWU6ICcnLCBjb250ZW50OiAnJyB9KVxuXG4gIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IHVzZXI/LnBlcm1pc3Npb25zPy5haV9hZ2VudHNcbiAgY29uc3QgY2FuQ3JlYXRlID0gISF1c2VyUGVybWlzc2lvbnM/LmNyZWF0ZVxuICBjb25zdCBjYW5FZGl0ID0gISF1c2VyUGVybWlzc2lvbnM/LmVkaXRcbiAgY29uc3QgY2FuRGVsZXRlID0gISF1c2VyUGVybWlzc2lvbnM/LmRlbGV0ZVxuXG4gIGNvbnN0IG5hbWUgPSB2YWx1ZXMuZ2VuZXJhbD8ubmFtZSB8fCAnJ1xuICBjb25zdCBjb250ZW50ID0gdmFsdWVzLmdlbmVyYWw/LmNvbnRlbnQgfHwgJydcbiAgY29uc3Qgc2tpbGxJZCA9IHZhbHVlcy5nZW5lcmFsPy5pZFxuICBjb25zdCBpc1ZhbGlkID0gISFuYW1lLnRyaW0oKSAmJiAhIWNvbnRlbnQudHJpbSgpXG4gIGNvbnN0IGhhc0NoYW5nZXMgPSBuYW1lLnRyaW0oKSAhPT0gaW5pdGlhbFJlZi5jdXJyZW50Lm5hbWUgfHwgY29udGVudC50cmltKCkgIT09IGluaXRpYWxSZWYuY3VycmVudC5jb250ZW50XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SXNPcGVuKGZhbHNlKVxuICAgIHNldFNob3dEZWxldGUoZmFsc2UpXG4gICAgc2V0U2hvd1ByZXZpZXcoZmFsc2UpXG4gICAgc2V0UGVuZGluZ1VwbG9hZChmYWxzZSlcbiAgICBzZXRWYWx1ZXMoaW5pdGlhbFZhbHVlcylcbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlQmFja2Ryb3BDbGljayA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCkge1xuICAgICAgICBoYW5kbGVDbG9zZSgpXG4gICAgICB9XG4gICAgfSxcbiAgICBbaGFuZGxlQ2xvc2VdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVNldFNraWxsVmFsdWVzID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHsgc2tpbGxWYWx1ZXMgfSA9IGV2ZW50LmRldGFpbCB8fCB7fVxuICAgICAgaWYgKCFza2lsbFZhbHVlcykgcmV0dXJuXG4gICAgICBjb25zdCBpbmNvbWluZ05hbWUgPSAoc2tpbGxWYWx1ZXMudmFsdWVzPy5nZW5lcmFsPy5uYW1lIHx8ICcnKS50cmltKClcbiAgICAgIGNvbnN0IGluY29taW5nQ29udGVudCA9IChza2lsbFZhbHVlcy52YWx1ZXM/LmdlbmVyYWw/LmNvbnRlbnQgfHwgJycpLnRyaW0oKVxuICAgICAgLy8gRWRpdGluZyBhbiBleGlzdGluZyBza2lsbCAtPiBiYXNlbGluZSBpcyBpdHMgdmFsdWVzOyBjcmVhdGluZyAtPiBlbXB0eSBiYXNlbGluZS5cbiAgICAgIGluaXRpYWxSZWYuY3VycmVudCA9IHNraWxsVmFsdWVzLnZhbHVlcz8uaXNFZGl0aW5nXG4gICAgICAgID8geyBuYW1lOiBpbmNvbWluZ05hbWUsIGNvbnRlbnQ6IGluY29taW5nQ29udGVudCB9XG4gICAgICAgIDogeyBuYW1lOiAnJywgY29udGVudDogJycgfVxuXG4gICAgICBzZXRWYWx1ZXMoe1xuICAgICAgICAuLi5pbml0aWFsVmFsdWVzLFxuICAgICAgICAuLi5za2lsbFZhbHVlcy52YWx1ZXMsXG4gICAgICAgIGdlbmVyYWw6IHsgLi4uaW5pdGlhbFZhbHVlcy5nZW5lcmFsLCAuLi5za2lsbFZhbHVlcy52YWx1ZXM/LmdlbmVyYWwgfSxcbiAgICAgIH0pXG4gICAgICAvLyBDb24gY29udGVuaWRvIChlZGljacOzbiBvIHNraWxsIHlhIGdlbmVyYWRhKSBhcnJhbmNhbW9zIGVuIFwiVmlzdGEgcHJldmlhXCI7IHZhY8OtYSwgZW4gXCJFZGl0YXJcIi5cbiAgICAgIGNvbnN0IGhhc0NvbnRlbnQgPSAhIXNraWxsVmFsdWVzLnZhbHVlcz8uZ2VuZXJhbD8uY29udGVudD8udHJpbSgpXG4gICAgICBzZXRTaG93UHJldmlldyhoYXNDb250ZW50KVxuICAgICAgLy8gU2kgdmlubyBjb24gaW50ZW50IFwidXBsb2FkXCIsIGFicmltb3MgZWwgc2VsZWN0b3IgZGUgYXJjaGl2b3MgYWwgbW9udGFyLlxuICAgICAgc2V0UGVuZGluZ1VwbG9hZChza2lsbFZhbHVlcy52YWx1ZXM/LmludGVudCA9PT0gJ3VwbG9hZCcpXG4gICAgICBzZXRJc09wZW4oISFza2lsbFZhbHVlcy5pc09wZW4pXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYWJtLXNraWxsLW1vZGFsLXNldC12YWx1ZXMnLCBoYW5kbGVTZXRTa2lsbFZhbHVlcylcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJtLXNraWxsLW1vZGFsLXNldC12YWx1ZXMnLCBoYW5kbGVTZXRTa2lsbFZhbHVlcylcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8vIFdoZW4gb3BlbmVkIHdpdGggdGhlIFwidXBsb2FkXCIgaW50ZW50LCBvcGVuIHRoZSBPUyBmaWxlIHBpY2tlciBvbmNlIG1vdW50ZWQuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzT3BlbiAmJiBwZW5kaW5nVXBsb2FkKSB7XG4gICAgICBzZXRQZW5kaW5nVXBsb2FkKGZhbHNlKVxuICAgICAgZmlsZUlucHV0UmVmLmN1cnJlbnQ/LmNsaWNrKClcbiAgICB9XG4gIH0sIFtpc09wZW4sIHBlbmRpbmdVcGxvYWRdKVxuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZUZpZWxkID0gKGZpZWxkOiAnbmFtZScgfCAnY29udGVudCcsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXRWYWx1ZXMocHJldiA9PiAoe1xuICAgICAgLi4ucHJldixcbiAgICAgIGdlbmVyYWw6IHsgLi4ucHJldi5nZW5lcmFsLCBbZmllbGRdOiB2YWx1ZSB9LFxuICAgIH0pKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlVXBsb2FkQ2xpY2sgPSAoKSA9PiB7XG4gICAgZmlsZUlucHV0UmVmLmN1cnJlbnQ/LmNsaWNrKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUZpbGVDaGFuZ2UgPSBhc3luYyAoZXZlbnQ6IENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgY29uc3QgZmlsZSA9IGV2ZW50LnRhcmdldC5maWxlcz8uWzBdXG4gICAgLy8gUmVzZXQgdGhlIGlucHV0ICh2aWEgcmVmKSBzbyBzZWxlY3RpbmcgdGhlIHNhbWUgZmlsZSBhZ2FpbiBzdGlsbCBmaXJlcyBvbkNoYW5nZS5cbiAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gJydcbiAgICB9XG4gICAgaWYgKCFmaWxlKSByZXR1cm5cblxuICAgIGNvbnN0IGlzTWFya2Rvd24gPSAvXFwuKG1kfG1hcmtkb3duKSQvaS50ZXN0KGZpbGUubmFtZSlcbiAgICBpZiAoIWlzTWFya2Rvd24pIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnbXlTa2lsbHMudXBsb2FkRXJyb3InKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgZmlsZS50ZXh0KClcbiAgICAgIGNvbnN0IGJhc2VOYW1lID0gZmlsZS5uYW1lLnJlcGxhY2UoL1xcLihtZHxtYXJrZG93bikkL2ksICcnKVxuICAgICAgc2V0VmFsdWVzKHByZXYgPT4gKHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgZ2VuZXJhbDoge1xuICAgICAgICAgIC4uLnByZXYuZ2VuZXJhbCxcbiAgICAgICAgICBjb250ZW50OiB0ZXh0LFxuICAgICAgICAgIC8vIE9ubHkgZmlsbCB0aGUgbmFtZSBmcm9tIHRoZSBmaWxlbmFtZSB3aGVuIGl0J3Mgc3RpbGwgZW1wdHkuXG4gICAgICAgICAgbmFtZTogcHJldi5nZW5lcmFsPy5uYW1lPy50cmltKCkgPyBwcmV2LmdlbmVyYWwubmFtZSA6IGJhc2VOYW1lLFxuICAgICAgICB9LFxuICAgICAgfSkpXG4gICAgICAvLyBUcmFzIHN1YmlyIHVuIC5tZCBtb3N0cmFtb3MgZWwgcmVzdWx0YWRvIHJlbmRlcml6YWRvIHBvciBkZWZlY3RvLlxuICAgICAgc2V0U2hvd1ByZXZpZXcodHJ1ZSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdteVNraWxscy51cGxvYWRFcnJvcicpKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVNhdmUgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFpc1ZhbGlkIHx8IGlzU3VibWl0dGluZykgcmV0dXJuXG4gICAgc2V0SXNTdWJtaXR0aW5nKHRydWUpXG4gICAgdHJ5IHtcbiAgICAgIGlmICh2YWx1ZXMuaXNFZGl0aW5nICYmIHNraWxsSWQpIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZCA9IGF3YWl0IHVwZGF0ZVNraWxsKHNraWxsSWQsIHsgbmFtZTogbmFtZS50cmltKCksIGNvbnRlbnQ6IGNvbnRlbnQudHJpbSgpIH0pXG4gICAgICAgIHVwZGF0ZVNraWxsSW5MaXN0Py4odXBkYXRlZClcbiAgICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ215U2tpbGxzLnVwZGF0ZVN1Y2Nlc3MnKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZWQgPSBhd2FpdCBjcmVhdGVTa2lsbCh7IG5hbWU6IG5hbWUudHJpbSgpLCBjb250ZW50OiBjb250ZW50LnRyaW0oKSB9KVxuICAgICAgICBhZGRTa2lsbD8uKGNyZWF0ZWQpXG4gICAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdteVNraWxscy5jcmVhdGVTdWNjZXNzJykpXG4gICAgICB9XG4gICAgICBoYW5kbGVDbG9zZSgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodmFsdWVzLmlzRWRpdGluZyA/IHQoJ215U2tpbGxzLnVwZGF0ZUVycm9yJykgOiB0KCdteVNraWxscy5jcmVhdGVFcnJvcicpKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJc1N1Ym1pdHRpbmcoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ29uZmlybURlbGV0ZSA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoIXNraWxsSWQpIHJldHVyblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBkZWxldGVTa2lsbChza2lsbElkKVxuICAgICAgcmVtb3ZlU2tpbGw/Lihza2lsbElkKVxuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ215U2tpbGxzLmRlbGV0ZVN1Y2Nlc3MnKSlcbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdteVNraWxscy5kZWxldGVFcnJvcicpKVxuICAgIH1cbiAgfVxuXG4gIGlmICghaXNPcGVuKSByZXR1cm4gbnVsbFxuICBpZiAoIWNhbkNyZWF0ZSAmJiAhY2FuRWRpdCAmJiAhY2FuRGVsZXRlKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbC1yb290LWFjdGlvbnMnKVxuICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuIG51bGxcblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKFxuICAgIDxCYWNrZHJvcCB6SW5kZXg9ezExMTJ9IG9uQ2xpY2s9e2hhbmRsZUJhY2tkcm9wQ2xpY2t9PlxuICAgICAgPFNDQVNNV3JhcHBlciBvbkNsaWNrPXtldmVudCA9PiBldmVudC5zdG9wUHJvcGFnYXRpb24oKX0+XG4gICAgICAgIDxTQ0FTTUhlYWRlcj5cbiAgICAgICAgICA8U0NBU01IZWFkZXJUaXRsZT57dmFsdWVzLmlzRWRpdGluZyA/IHQoJ215U2tpbGxzLmVkaXRUaXRsZScpIDogdCgnbXlTa2lsbHMuY3JlYXRlVGl0bGUnKX08L1NDQVNNSGVhZGVyVGl0bGU+XG4gICAgICAgICAgPFNDQVNNQ2xvc2VCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZUNsb3NlfSBhcmlhLWxhYmVsPXt0KCdteVNraWxscy5jbG9zZScpfT5cbiAgICAgICAgICAgIDxDcm9zcyBjb2xvcj1cIiNhNmE2YTZcIiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gICAgICAgICAgPC9TQ0FTTUNsb3NlQnV0dG9uPlxuICAgICAgICA8L1NDQVNNSGVhZGVyPlxuXG4gICAgICAgIDxTQ0FTTUNvbnRlbnQ+XG4gICAgICAgICAgPFNDQVNNRmllbGQ+XG4gICAgICAgICAgICA8U0NBU01MYWJlbCBodG1sRm9yPVwic2tpbGwtbmFtZS1pbnB1dFwiPnt0KCdteVNraWxscy5uYW1lTGFiZWwnKX08L1NDQVNNTGFiZWw+XG4gICAgICAgICAgICA8U0NBU01JbnB1dFxuICAgICAgICAgICAgICBpZD1cInNraWxsLW5hbWUtaW5wdXRcIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIG1heExlbmd0aD17MTUwfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dCgnbXlTa2lsbHMubmFtZVBsYWNlaG9sZGVyJyl9XG4gICAgICAgICAgICAgIHZhbHVlPXtuYW1lfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17aXNTdWJtaXR0aW5nfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17ZXZlbnQgPT4gaGFuZGxlQ2hhbmdlRmllbGQoJ25hbWUnLCBldmVudC50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1NDQVNNRmllbGQ+XG5cbiAgICAgICAgICA8U0NBU01GaWVsZD5cbiAgICAgICAgICAgIDxTQ0FTTUZpZWxkSGVhZGVyPlxuICAgICAgICAgICAgICA8U0NBU01MYWJlbCBodG1sRm9yPVwic2tpbGwtY29udGVudC1pbnB1dFwiPnt0KCdteVNraWxscy5jb250ZW50TGFiZWwnKX08L1NDQVNNTGFiZWw+XG4gICAgICAgICAgICAgIDxTQ0FTTUhlYWRlckFjdGlvbnM+XG4gICAgICAgICAgICAgICAgPFNDQVNNVXBsb2FkQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVVcGxvYWRDbGlja30gZGlzYWJsZWQ9e2lzU3VibWl0dGluZ30+XG4gICAgICAgICAgICAgICAgICB7dCgnbXlTa2lsbHMudXBsb2FkTWQnKX1cbiAgICAgICAgICAgICAgICA8L1NDQVNNVXBsb2FkQnV0dG9uPlxuICAgICAgICAgICAgICAgIDxTQ0FTTUhpZGRlbkZpbGVJbnB1dFxuICAgICAgICAgICAgICAgICAgcmVmPXtmaWxlSW5wdXRSZWZ9XG4gICAgICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgICAgICBhY2NlcHQ9XCIubWQsLm1hcmtkb3duLHRleHQvbWFya2Rvd25cIlxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUZpbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8U0NBU01Ub2dnbGVHcm91cD5cbiAgICAgICAgICAgICAgICAgIDxTQ0FTTVRvZ2dsZUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgJGFjdGl2ZT17IXNob3dQcmV2aWV3fSBvbkNsaWNrPXsoKSA9PiBzZXRTaG93UHJldmlldyhmYWxzZSl9PlxuICAgICAgICAgICAgICAgICAgICB7dCgnbXlTa2lsbHMuZWRpdCcpfVxuICAgICAgICAgICAgICAgICAgPC9TQ0FTTVRvZ2dsZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxTQ0FTTVRvZ2dsZUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgJGFjdGl2ZT17c2hvd1ByZXZpZXd9IG9uQ2xpY2s9eygpID0+IHNldFNob3dQcmV2aWV3KHRydWUpfT5cbiAgICAgICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLnByZXZpZXcnKX1cbiAgICAgICAgICAgICAgICAgIDwvU0NBU01Ub2dnbGVCdXR0b24+XG4gICAgICAgICAgICAgICAgPC9TQ0FTTVRvZ2dsZUdyb3VwPlxuICAgICAgICAgICAgICA8L1NDQVNNSGVhZGVyQWN0aW9ucz5cbiAgICAgICAgICAgIDwvU0NBU01GaWVsZEhlYWRlcj5cbiAgICAgICAgICAgIHtzaG93UHJldmlldyA/IChcbiAgICAgICAgICAgICAgPFNDQVNNUHJldmlldz5cbiAgICAgICAgICAgICAgICB7Y29udGVudC50cmltKCkgPyAoXG4gICAgICAgICAgICAgICAgICA8TWFpYVN0cmVhbWRvd24gdmFyaWFudD1cInByZXZpZXdcIj57Y29udGVudH08L01haWFTdHJlYW1kb3duPlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8U0NBU01QcmV2aWV3RW1wdHk+e3QoJ215U2tpbGxzLnByZXZpZXdFbXB0eScpfTwvU0NBU01QcmV2aWV3RW1wdHk+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9TQ0FTTVByZXZpZXc+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8U0NBU01UZXh0YXJlYVxuICAgICAgICAgICAgICAgIGlkPVwic2tpbGwtY29udGVudC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgbWF4TGVuZ3RoPXsyMDAwMH1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dCgnbXlTa2lsbHMuY29udGVudFBsYWNlaG9sZGVyJyl9XG4gICAgICAgICAgICAgICAgdmFsdWU9e2NvbnRlbnR9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzU3VibWl0dGluZ31cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17ZXZlbnQgPT4gaGFuZGxlQ2hhbmdlRmllbGQoJ2NvbnRlbnQnLCBldmVudC50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1NDQVNNRmllbGQ+XG4gICAgICAgIDwvU0NBU01Db250ZW50PlxuXG4gICAgICAgIDxTQ0FTTUZvb3Rlcj5cbiAgICAgICAgICB7dmFsdWVzLmlzRWRpdGluZyAmJiBjYW5EZWxldGUgPyAoXG4gICAgICAgICAgICA8U0NBU01EZWxldGVTbG90PlxuICAgICAgICAgICAgICA8U0NBU01DYW5jZWxCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9eygpID0+IHNldFNob3dEZWxldGUodHJ1ZSl9IGRpc2FibGVkPXtpc1N1Ym1pdHRpbmd9PlxuICAgICAgICAgICAgICAgIHt0KCdteVNraWxscy5kZWxldGUnKX1cbiAgICAgICAgICAgICAgPC9TQ0FTTUNhbmNlbEJ1dHRvbj5cbiAgICAgICAgICAgIDwvU0NBU01EZWxldGVTbG90PlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDxTQ0FTTUNhbmNlbEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlQ2xvc2V9IGRpc2FibGVkPXtpc1N1Ym1pdHRpbmd9PlxuICAgICAgICAgICAge3QoJ215U2tpbGxzLmNhbmNlbCcpfVxuICAgICAgICAgIDwvU0NBU01DYW5jZWxCdXR0b24+XG4gICAgICAgICAgPFNDQVNNU2F2ZUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlU2F2ZX0gZGlzYWJsZWQ9eyFpc1ZhbGlkIHx8IGlzU3VibWl0dGluZyB8fCAhaGFzQ2hhbmdlc30+XG4gICAgICAgICAgICB7aXNTdWJtaXR0aW5nID8gPExvYWRlciBzaXplPVwic21hbGxcIiAvPiA6IHQoJ215U2tpbGxzLnNhdmUnKX1cbiAgICAgICAgICA8L1NDQVNNU2F2ZUJ1dHRvbj5cbiAgICAgICAgPC9TQ0FTTUZvb3Rlcj5cbiAgICAgIDwvU0NBU01XcmFwcGVyPlxuXG4gICAgICB7c2hvd0RlbGV0ZSAmJiBza2lsbElkID8gKFxuICAgICAgICA8RGVsZXRlUXVlc3Rpb25Nb2RhbFxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dEZWxldGUoZmFsc2UpfVxuICAgICAgICAgIGhhbmRsZXJzPXt7XG4gICAgICAgICAgICBoYW5kbGVDb25maXJtQWN0aW9uOiBoYW5kbGVDb25maXJtRGVsZXRlLFxuICAgICAgICAgIH19XG4gICAgICAgICAgY2hhdD17eyB0aXRsZTogbmFtZSwgaWQ6IHNraWxsSWQgfX1cbiAgICAgICAgICBhY3Rpb249XCJza2lsbFwiXG4gICAgICAgIC8+XG4gICAgICApIDogbnVsbH1cbiAgICA8L0JhY2tkcm9wPixcbiAgICBjb250YWluZXJcbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBLFNBQWtDQSxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUN6RixTQUFTQyxZQUFZLFFBQVEsV0FBVztBQUN4QyxTQUFTQyxLQUFLLFFBQVEsd0NBQXdDO0FBQzlELFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBQzlDLFNBQVNDLGNBQWMsUUFBUSw0QkFBNEI7QUFDM0QsU0FBU0MsUUFBUSxRQUFRLHNCQUFzQjtBQUMvQyxTQUFTQyxNQUFNLFFBQVEsb0JBQW9CO0FBQzNDLFNBQVNDLFFBQVEsUUFBUSwyQkFBMkI7QUFDcEQsU0FBU0MsT0FBTyxRQUFRLDJCQUEyQjtBQUNuRCxTQUFTQyxrQkFBa0IsUUFBUSxzREFBc0Q7QUFDekYsU0FBU0MsV0FBVyxRQUFRLDJDQUEyQztBQUN2RSxTQUFTQyxXQUFXLFFBQVEsMkNBQTJDO0FBQ3ZFLFNBQVNDLFdBQVcsUUFBUSwyQ0FBMkM7QUFFdkUsU0FBU0MsbUJBQW1CLFFBQVEsNENBQTRDO0FBQ2hGLFNBQ0VDLGlCQUFpQixFQUNqQkMsZ0JBQWdCLEVBQ2hCQyxZQUFZLEVBQ1pDLGVBQWUsRUFDZkMsVUFBVSxFQUNWQyxnQkFBZ0IsRUFDaEJDLFdBQVcsRUFDWEMs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