@projectcor/maia-components 2.35.2 → 2.35.3-0

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 (58) hide show
  1. package/CHANGELOG.md +718 -0
  2. package/lib/components/atoms/ApprovalBox/ApprovalBox.js +59 -4
  3. package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +16 -4
  4. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +12 -1
  5. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +127 -5
  6. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +2 -29
  7. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +24 -33
  8. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +2 -19
  9. package/lib/components/atoms/MAIAInput/MAIAInput.js +192 -17
  10. package/lib/components/atoms/MAIAInput/styles.js +15 -11
  11. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.js +208 -0
  12. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.styles.js +77 -0
  13. package/lib/components/atoms/SkillsDropdown/index.js +2 -0
  14. package/lib/components/atoms/icons/PlusIcon.js +29 -0
  15. package/lib/components/atoms/icons/SkillCreatedByIcon.js +20 -0
  16. package/lib/components/atoms/icons/SkillVisibilityEveryoneIcon.js +23 -0
  17. package/lib/components/atoms/icons/SkillVisibilityOnlyMeIcon.js +23 -0
  18. package/lib/components/atoms/icons/SkillsNavIcon.js +4 -7
  19. package/lib/components/atoms/icons/index.js +5 -1
  20. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +34 -11
  21. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +5 -3
  22. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +3 -3
  23. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +59 -20
  24. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +10 -5
  25. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +315 -239
  26. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +131 -104
  27. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +1 -3
  28. package/lib/components/molecules/Sidebar/Sidebar.js +5 -4
  29. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +2 -2
  30. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +10 -6
  31. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +8 -1
  32. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +367 -180
  33. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +132 -72
  34. package/lib/constants/config.js +1 -4
  35. package/lib/constants/permissions/utils.js +3 -3
  36. package/lib/hooks/useAgentModel/useCreateAgent.js +6 -6
  37. package/lib/hooks/useAgentModel/useUpdateAgent.js +6 -6
  38. package/lib/hooks/useChatManager/useChatManager.js +5 -4
  39. package/lib/hooks/useContextMentions.js +96 -56
  40. package/lib/hooks/useEntitySearch.js +92 -278
  41. package/lib/hooks/useMentionAllowedTypes.js +9 -25
  42. package/lib/hooks/useMentionPopover.js +9 -33
  43. package/lib/hooks/useSkillsCatalog.js +66 -0
  44. package/lib/lang/br/index.js +39 -9
  45. package/lib/lang/en/index.js +39 -9
  46. package/lib/lang/es/index.js +40 -10
  47. package/lib/lang/fr/index.js +39 -9
  48. package/lib/services/maia/Agents/setAgentToolGroups.js +2 -2
  49. package/lib/services/maia/Orchestrator/orchestrator.js +6 -3
  50. package/lib/services/maia/Skills/createSkill.js +1 -1
  51. package/lib/services/maia/Skills/getSkills.js +70 -40
  52. package/lib/services/maia/Skills/updateSkill.js +1 -1
  53. package/lib/types/agentModal.js +1 -1
  54. package/lib/types/skill.js +1 -1
  55. package/lib/utils/contextMentionTriggers.js +2 -5
  56. package/lib/utils/normalizeAgentConnectors.js +44 -16
  57. package/lib/utils/renderContextMentions.js +39 -18
  58. package/package.json +1 -1
@@ -8,31 +8,48 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
8
8
  import { useCallback, useEffect, useMemo, 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';
11
12
  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';
15
16
  import { SECTIONS } from '../../../constants/config';
16
- import { useUser } from '../../../context/cor-user';
17
+ import { useUser, isCollaboratorRole } from '../../../context/cor-user';
17
18
  import { useSnackBarManager } from '../../../hooks/useSnackBarManager/useSnackBarManager';
19
+ import { formatDate } from '../../../lang/utils';
18
20
  import { createSkill } from '../../../services/maia/Skills/createSkill';
19
21
  import { updateSkill } from '../../../services/maia/Skills/updateSkill';
20
22
  import { deleteSkill } from '../../../services/maia/Skills/deleteSkill';
21
23
  import { getUnitFileSize } from '../../../utils/getUnitFileSize';
22
24
  import { getSkillContentByteLength, isSkillContentOverLimit, SKILL_CONTENT_MAX_BYTES } from '../../../utils/skillContentSize';
23
25
  import { DeleteQuestionModal } from '../DeleteQuestionModal/DeleteQuestionModal';
24
- import { SCASMByteCounter, SCASMCancelButton, SCASMCloseButton, SCASMContent, SCASMDeleteSlot, SCASMField, SCASMFieldHeader, SCASMFooter, SCASMHeader, SCASMHeaderActions, SCASMHeaderTitle, SCASMHiddenFileInput, SCASMInput, SCASMLabel, SCASMPreview, SCASMPreviewEmpty, SCASMSaveButton, SCASMTextarea, SCASMToggleButton, SCASMToggleGroup, SCASMUploadButton, SCASMWrapper } from './AbmSkillModal.styles';
25
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
26
+ import { SCASMByteCounter, 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';
27
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
28
+ export var SKILL_USE_AFTER_SAVE_EVENT = 'maia-use-skill-after-save';
26
29
  var initialValues = {
27
30
  isEditing: false,
28
31
  general: {
29
32
  id: undefined,
30
33
  name: '',
31
- content: ''
34
+ description: '',
35
+ content: '',
36
+ access_type: 'only_me'
32
37
  }
33
38
  };
39
+ var emptyBaseline = {
40
+ name: '',
41
+ description: '',
42
+ content: '',
43
+ access_type: 'only_me'
44
+ };
45
+ var parseDescriptionFromContent = function parseDescriptionFromContent(content) {
46
+ var frontmatterMatch = content.match(/^---\s*\n([\s\S]*?)\n---/);
47
+ if (!frontmatterMatch) return '';
48
+ var descriptionMatch = frontmatterMatch[1].match(/^description:\s*(.+)$/m);
49
+ return descriptionMatch ? descriptionMatch[1].trim() : '';
50
+ };
34
51
  export var AbmSkillModal = function AbmSkillModal(_ref) {
35
- var _user$permissions, _values$general, _values$general2, _values$general3;
52
+ var _values$general, _values$general2, _values$general3, _values$general4, _values$general5, _values$general7, _values$general0, _values$general1;
36
53
  var addSkill = _ref.addSkill,
37
54
  updateSkillInList = _ref.updateSkillInList,
38
55
  removeSkill = _ref.removeSkill;
@@ -56,42 +73,49 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
56
73
  setShowDelete = _useState6[1];
57
74
  var _useState7 = useState(false),
58
75
  _useState8 = _slicedToArray(_useState7, 2),
59
- showPreview = _useState8[0],
60
- setShowPreview = _useState8[1];
61
- var _useState9 = useState(false),
76
+ pendingUpload = _useState8[0],
77
+ setPendingUpload = _useState8[1];
78
+ var _useState9 = useState(initialValues),
62
79
  _useState0 = _slicedToArray(_useState9, 2),
63
- pendingUpload = _useState0[0],
64
- setPendingUpload = _useState0[1];
65
- var _useState1 = useState(initialValues),
66
- _useState10 = _slicedToArray(_useState1, 2),
67
- values = _useState10[0],
68
- setValues = _useState10[1];
80
+ values = _useState0[0],
81
+ setValues = _useState0[1];
69
82
  var fileInputRef = useRef(null);
70
- // Baseline to detect changes: the loaded values when editing, empty when creating
71
- // (a new/generated/uploaded skill always counts as a change).
72
- var initialRef = useRef({
73
- name: '',
74
- content: ''
75
- });
76
- var userPermissions = user === null || user === void 0 || (_user$permissions = user.permissions) === null || _user$permissions === void 0 ? void 0 : _user$permissions.ai_agents;
77
- var canCreate = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.create);
78
- var canEdit = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.edit);
79
- var canDelete = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions["delete"]);
83
+ var initialRef = useRef(emptyBaseline);
84
+ var isReadOnly = !!values.isReadOnly;
85
+ var isSharedSkill = !!values.isShared;
86
+ var canShareWithCompany = !isCollaboratorRole(user.role_id) && !isReadOnly;
80
87
  var name = ((_values$general = values.general) === null || _values$general === void 0 ? void 0 : _values$general.name) || '';
81
- var content = ((_values$general2 = values.general) === null || _values$general2 === void 0 ? void 0 : _values$general2.content) || '';
82
- var skillId = (_values$general3 = values.general) === null || _values$general3 === void 0 ? void 0 : _values$general3.id;
88
+ var description = ((_values$general2 = values.general) === null || _values$general2 === void 0 ? void 0 : _values$general2.description) || '';
89
+ var content = ((_values$general3 = values.general) === null || _values$general3 === void 0 ? void 0 : _values$general3.content) || '';
90
+ var accessType = ((_values$general4 = values.general) === null || _values$general4 === void 0 ? void 0 : _values$general4.access_type) || 'only_me';
91
+ var effectiveAccessType = canShareWithCompany ? accessType : 'only_me';
92
+ var skillId = (_values$general5 = values.general) === null || _values$general5 === void 0 ? void 0 : _values$general5.id;
83
93
  var contentBytes = useMemo(function () {
84
94
  return getSkillContentByteLength(content);
85
95
  }, [content]);
86
96
  var isOverLimit = contentBytes > SKILL_CONTENT_MAX_BYTES;
87
97
  var isValid = !!name.trim() && !!content.trim() && !isOverLimit;
88
- var hasChanges = name.trim() !== initialRef.current.name || content.trim() !== initialRef.current.content;
98
+ var hasChanges = name.trim() !== initialRef.current.name || description.trim() !== initialRef.current.description || content.trim() !== initialRef.current.content || canShareWithCompany && effectiveAccessType !== initialRef.current.access_type;
99
+ var createdByLabel = useMemo(function () {
100
+ var _values$general6;
101
+ 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();
102
+ if (createdBy) return createdBy;
103
+ return isSharedSkill ? '' : "".concat(user.firstName, " ").concat(user.lastName).trim();
104
+ }, [(_values$general7 = values.general) === null || _values$general7 === void 0 ? void 0 : _values$general7.created_by_name, user.firstName, user.lastName, isSharedSkill]);
105
+ var lastUpdatedLabel = useMemo(function () {
106
+ var _values$general8, _values$general9;
107
+ 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);
108
+ if (!updatedAt) return '';
109
+ var parsed = new Date(updatedAt);
110
+ if (Number.isNaN(parsed.getTime())) return '';
111
+ return formatDate(parsed);
112
+ }, [(_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]);
89
113
  var handleClose = useCallback(function () {
90
114
  setIsOpen(false);
91
115
  setShowDelete(false);
92
- setShowPreview(false);
93
116
  setPendingUpload(false);
94
117
  setValues(initialValues);
118
+ initialRef.current = emptyBaseline;
95
119
  }, []);
96
120
  var handleBackdropClick = useCallback(function (event) {
97
121
  if (event.target === event.currentTarget) {
@@ -100,37 +124,37 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
100
124
  }, [handleClose]);
101
125
  useEffect(function () {
102
126
  var handleSetSkillValues = function handleSetSkillValues(event) {
103
- var _skillValues$values, _skillValues$values2, _skillValues$values3, _skillValues$values4, _skillValues$values5, _skillValues$values6;
127
+ var _skillValues$values, _skillValues$values2, _skillValues$values3;
104
128
  var _ref2 = event.detail || {},
105
129
  skillValues = _ref2.skillValues;
106
130
  if (!skillValues) return;
107
- 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();
108
- 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();
109
- // Editing an existing skill -> baseline is its values; creating -> empty baseline.
110
- initialRef.current = (_skillValues$values3 = skillValues.values) !== null && _skillValues$values3 !== void 0 && _skillValues$values3.isEditing ? {
131
+ var incomingGeneral = _objectSpread(_objectSpread({}, initialValues.general), (_skillValues$values = skillValues.values) === null || _skillValues$values === void 0 ? void 0 : _skillValues$values.general);
132
+ var incomingName = (incomingGeneral.name || '').trim();
133
+ var incomingDescription = (incomingGeneral.description || '').trim();
134
+ var incomingContent = (incomingGeneral.content || '').trim();
135
+ var incomingAccessType = isCollaboratorRole(user.role_id) ? 'only_me' : incomingGeneral.access_type || 'only_me';
136
+ var parsedDescription = incomingDescription || (incomingContent ? parseDescriptionFromContent(incomingContent) : '');
137
+ var editingBaseline = {
111
138
  name: incomingName,
112
- content: incomingContent
113
- } : {
114
- name: '',
115
- content: ''
139
+ description: parsedDescription,
140
+ content: incomingContent,
141
+ access_type: incomingAccessType
116
142
  };
143
+ initialRef.current = (_skillValues$values2 = skillValues.values) !== null && _skillValues$values2 !== void 0 && _skillValues$values2.isEditing ? editingBaseline : emptyBaseline;
117
144
  setValues(_objectSpread(_objectSpread(_objectSpread({}, initialValues), skillValues.values), {}, {
118
- general: _objectSpread(_objectSpread({}, initialValues.general), (_skillValues$values4 = skillValues.values) === null || _skillValues$values4 === void 0 ? void 0 : _skillValues$values4.general)
145
+ general: _objectSpread(_objectSpread({}, incomingGeneral), {}, {
146
+ description: parsedDescription,
147
+ access_type: incomingAccessType
148
+ })
119
149
  }));
120
- // Con contenido (edición o skill ya generada) arrancamos en "Vista previa"; vacía, en "Editar".
121
- 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());
122
- setShowPreview(hasContent);
123
- // Si vino con intent "upload", abrimos el selector de archivos al montar.
124
- setPendingUpload(((_skillValues$values6 = skillValues.values) === null || _skillValues$values6 === void 0 ? void 0 : _skillValues$values6.intent) === 'upload');
150
+ setPendingUpload(((_skillValues$values3 = skillValues.values) === null || _skillValues$values3 === void 0 ? void 0 : _skillValues$values3.intent) === 'upload');
125
151
  setIsOpen(!!skillValues.isOpen);
126
152
  };
127
153
  document.addEventListener('abm-skill-modal-set-values', handleSetSkillValues);
128
154
  return function () {
129
155
  document.removeEventListener('abm-skill-modal-set-values', handleSetSkillValues);
130
156
  };
131
- }, []);
132
-
133
- // When opened with the "upload" intent, open the OS file picker once mounted.
157
+ }, [user.role_id]);
134
158
  useEffect(function () {
135
159
  if (isOpen && pendingUpload) {
136
160
  var _fileInputRef$current;
@@ -151,6 +175,16 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
151
175
  });
152
176
  });
153
177
  };
178
+ var handleAccessTypeChange = function handleAccessTypeChange(checked) {
179
+ if (!canShareWithCompany) return;
180
+ setValues(function (prev) {
181
+ return _objectSpread(_objectSpread({}, prev), {}, {
182
+ general: _objectSpread(_objectSpread({}, prev.general), {}, {
183
+ access_type: checked ? 'company' : 'only_me'
184
+ })
185
+ });
186
+ });
187
+ };
154
188
  var handleUploadClick = function handleUploadClick() {
155
189
  var _fileInputRef$current2;
156
190
  (_fileInputRef$current2 = fileInputRef.current) === null || _fileInputRef$current2 === void 0 || _fileInputRef$current2.click();
@@ -158,11 +192,11 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
158
192
  var handleFileChange = /*#__PURE__*/function () {
159
193
  var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(event) {
160
194
  var _event$target$files;
161
- var file, isMarkdown, text, baseName, _t;
195
+ var file, isMarkdown, text, baseName, parsedDescription, _t;
162
196
  return _regeneratorRuntime.wrap(function (_context) {
163
197
  while (1) switch (_context.prev = _context.next) {
164
198
  case 0:
165
- 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.
199
+ file = (_event$target$files = event.target.files) === null || _event$target$files === void 0 ? void 0 : _event$target$files[0];
166
200
  if (fileInputRef.current) {
167
201
  fileInputRef.current.value = '';
168
202
  }
@@ -200,18 +234,17 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
200
234
  return _context.abrupt("return");
201
235
  case 5:
202
236
  baseName = file.name.replace(/\.(md|markdown)$/i, '');
237
+ parsedDescription = parseDescriptionFromContent(text);
203
238
  setValues(function (prev) {
204
- var _prev$general;
239
+ var _prev$general, _prev$general2, _prev$general3;
205
240
  return _objectSpread(_objectSpread({}, prev), {}, {
206
241
  general: _objectSpread(_objectSpread({}, prev.general), {}, {
207
242
  content: text,
208
- // Only fill the name from the filename when it's still empty.
209
- 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
243
+ 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) || '',
244
+ 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
210
245
  })
211
246
  });
212
247
  });
213
- // Tras subir un .md mostramos el resultado renderizado por defecto.
214
- setShowPreview(true);
215
248
  _context.next = 7;
216
249
  break;
217
250
  case 6:
@@ -228,106 +261,232 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
228
261
  return _ref3.apply(this, arguments);
229
262
  };
230
263
  }();
231
- var handleSave = /*#__PURE__*/function () {
264
+ var persistSkill = /*#__PURE__*/function () {
232
265
  var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
233
- var updated, created, _t2;
266
+ var payload, updated, created;
234
267
  return _regeneratorRuntime.wrap(function (_context2) {
235
268
  while (1) switch (_context2.prev = _context2.next) {
236
269
  case 0:
237
- if (!(!isValid || isSubmitting)) {
238
- _context2.next = 1;
239
- break;
240
- }
241
- return _context2.abrupt("return");
242
- case 1:
243
- setIsSubmitting(true);
244
- _context2.prev = 2;
270
+ payload = {
271
+ name: name.trim(),
272
+ description: description.trim(),
273
+ content: content.trim(),
274
+ access_type: effectiveAccessType
275
+ };
245
276
  if (!(values.isEditing && skillId)) {
246
- _context2.next = 4;
277
+ _context2.next = 2;
247
278
  break;
248
279
  }
249
- _context2.next = 3;
250
- return updateSkill(skillId, {
251
- name: name.trim(),
252
- content: content.trim()
253
- });
254
- case 3:
280
+ _context2.next = 1;
281
+ return updateSkill(skillId, payload);
282
+ case 1:
255
283
  updated = _context2.sent;
256
284
  updateSkillInList === null || updateSkillInList === void 0 || updateSkillInList(updated);
257
285
  handleSnackbarSuccess(t('mySkills.updateSuccess'));
258
- _context2.next = 6;
259
- break;
260
- case 4:
261
- _context2.next = 5;
262
- return createSkill({
263
- name: name.trim(),
264
- content: content.trim()
265
- });
266
- case 5:
286
+ return _context2.abrupt("return", updated);
287
+ case 2:
288
+ _context2.next = 3;
289
+ return createSkill(payload);
290
+ case 3:
267
291
  created = _context2.sent;
268
292
  addSkill === null || addSkill === void 0 || addSkill(created);
269
293
  handleSnackbarSuccess(t('mySkills.createSuccess'));
270
- case 6:
271
- handleClose();
272
- _context2.next = 8;
273
- break;
274
- case 7:
275
- _context2.prev = 7;
276
- _t2 = _context2["catch"](2);
277
- handleSnackbarError(values.isEditing ? t('mySkills.updateError') : t('mySkills.createError'));
278
- case 8:
279
- _context2.prev = 8;
280
- setIsSubmitting(false);
281
- return _context2.finish(8);
282
- case 9:
294
+ return _context2.abrupt("return", created);
295
+ case 4:
283
296
  case "end":
284
297
  return _context2.stop();
285
298
  }
286
- }, _callee2, null, [[2, 7, 8, 9]]);
299
+ }, _callee2);
287
300
  }));
288
- return function handleSave() {
301
+ return function persistSkill() {
289
302
  return _ref4.apply(this, arguments);
290
303
  };
291
304
  }();
292
- var handleConfirmDelete = /*#__PURE__*/function () {
305
+ var handleSave = /*#__PURE__*/function () {
293
306
  var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
294
- var _t3;
307
+ var _t2;
295
308
  return _regeneratorRuntime.wrap(function (_context3) {
296
309
  while (1) switch (_context3.prev = _context3.next) {
297
310
  case 0:
298
- if (skillId) {
311
+ if (!(!isValid || isSubmitting || !hasChanges)) {
299
312
  _context3.next = 1;
300
313
  break;
301
314
  }
302
315
  return _context3.abrupt("return");
303
316
  case 1:
304
- _context3.prev = 1;
305
- _context3.next = 2;
317
+ setIsSubmitting(true);
318
+ _context3.prev = 2;
319
+ _context3.next = 3;
320
+ return persistSkill();
321
+ case 3:
322
+ handleClose();
323
+ _context3.next = 5;
324
+ break;
325
+ case 4:
326
+ _context3.prev = 4;
327
+ _t2 = _context3["catch"](2);
328
+ handleSnackbarError(values.isEditing ? t('mySkills.updateError') : t('mySkills.createError'));
329
+ case 5:
330
+ _context3.prev = 5;
331
+ setIsSubmitting(false);
332
+ return _context3.finish(5);
333
+ case 6:
334
+ case "end":
335
+ return _context3.stop();
336
+ }
337
+ }, _callee3, null, [[2, 4, 5, 6]]);
338
+ }));
339
+ return function handleSave() {
340
+ return _ref5.apply(this, arguments);
341
+ };
342
+ }();
343
+ var handleSaveAndUse = /*#__PURE__*/function () {
344
+ var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
345
+ var savedSkill, _t3;
346
+ return _regeneratorRuntime.wrap(function (_context4) {
347
+ while (1) switch (_context4.prev = _context4.next) {
348
+ case 0:
349
+ if (!(!isValid || isSubmitting)) {
350
+ _context4.next = 1;
351
+ break;
352
+ }
353
+ return _context4.abrupt("return");
354
+ case 1:
355
+ setIsSubmitting(true);
356
+ _context4.prev = 2;
357
+ _context4.next = 3;
358
+ return persistSkill();
359
+ case 3:
360
+ savedSkill = _context4.sent;
361
+ if (savedSkill) {
362
+ document.dispatchEvent(new CustomEvent(SKILL_USE_AFTER_SAVE_EVENT, {
363
+ detail: {
364
+ skill: savedSkill
365
+ }
366
+ }));
367
+ }
368
+ handleClose();
369
+ _context4.next = 5;
370
+ break;
371
+ case 4:
372
+ _context4.prev = 4;
373
+ _t3 = _context4["catch"](2);
374
+ handleSnackbarError(values.isEditing ? t('mySkills.updateError') : t('mySkills.createError'));
375
+ case 5:
376
+ _context4.prev = 5;
377
+ setIsSubmitting(false);
378
+ return _context4.finish(5);
379
+ case 6:
380
+ case "end":
381
+ return _context4.stop();
382
+ }
383
+ }, _callee4, null, [[2, 4, 5, 6]]);
384
+ }));
385
+ return function handleSaveAndUse() {
386
+ return _ref6.apply(this, arguments);
387
+ };
388
+ }();
389
+ var handleConfirmDelete = /*#__PURE__*/function () {
390
+ var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
391
+ var _t4;
392
+ return _regeneratorRuntime.wrap(function (_context5) {
393
+ while (1) switch (_context5.prev = _context5.next) {
394
+ case 0:
395
+ if (skillId) {
396
+ _context5.next = 1;
397
+ break;
398
+ }
399
+ return _context5.abrupt("return");
400
+ case 1:
401
+ _context5.prev = 1;
402
+ _context5.next = 2;
306
403
  return deleteSkill(skillId);
307
404
  case 2:
308
405
  removeSkill === null || removeSkill === void 0 || removeSkill(skillId);
309
406
  handleSnackbarSuccess(t('mySkills.deleteSuccess'));
310
407
  handleClose();
311
- _context3.next = 4;
408
+ _context5.next = 4;
312
409
  break;
313
410
  case 3:
314
- _context3.prev = 3;
315
- _t3 = _context3["catch"](1);
411
+ _context5.prev = 3;
412
+ _t4 = _context5["catch"](1);
316
413
  handleSnackbarError(t('mySkills.deleteError'));
317
414
  case 4:
318
415
  case "end":
319
- return _context3.stop();
416
+ return _context5.stop();
320
417
  }
321
- }, _callee3, null, [[1, 3]]);
418
+ }, _callee5, null, [[1, 3]]);
322
419
  }));
323
420
  return function handleConfirmDelete() {
324
- return _ref5.apply(this, arguments);
421
+ return _ref7.apply(this, arguments);
325
422
  };
326
423
  }();
424
+ var handleEditFromView = function handleEditFromView() {
425
+ setValues(function (prev) {
426
+ return _objectSpread(_objectSpread({}, prev), {}, {
427
+ isReadOnly: false
428
+ });
429
+ });
430
+ };
431
+
432
+ /** Skill ajena en modo lectura: abre un chat nuevo con el primer agente y la mención ya puesta. */
433
+ var handleUseSkill = function handleUseSkill() {
434
+ if (!skillId) return;
435
+ document.dispatchEvent(new CustomEvent(SKILL_USE_AFTER_SAVE_EVENT, {
436
+ detail: {
437
+ skill: {
438
+ id: skillId,
439
+ name: name,
440
+ description: description,
441
+ content: content,
442
+ access_type: accessType
443
+ },
444
+ useFirstAgent: true
445
+ }
446
+ }));
447
+ handleClose();
448
+ };
327
449
  if (!isOpen) return null;
328
- if (!canCreate && !canEdit && !canDelete) return null;
329
450
  var container = document.getElementById('modal-root-actions');
330
451
  if (!container) return null;
452
+ var editOrCreateTitle = values.isEditing ? t('mySkills.editTitle') : t('mySkills.createTitle');
453
+ var viewTitle = isSharedSkill ? t('mySkills.viewTitle') : t('mySkills.viewOwnTitle');
454
+ var modalTitle = isReadOnly ? viewTitle : editOrCreateTitle;
455
+ var previewBody = /*#__PURE__*/_jsxs(SCASMPreviewBody, {
456
+ children: [/*#__PURE__*/_jsxs(SCASMPreviewHeadingBlock, {
457
+ children: [/*#__PURE__*/_jsx(SCASMPreviewName, {
458
+ children: name
459
+ }), description ? /*#__PURE__*/_jsx(SCASMPreviewDescription, {
460
+ children: description
461
+ }) : null]
462
+ }), /*#__PURE__*/_jsxs(SCASMPreviewMetadataRow, {
463
+ children: [createdByLabel ? /*#__PURE__*/_jsxs(SCASMMetadataItem, {
464
+ children: [/*#__PURE__*/_jsx(SCASMPreviewMetadataLabel, {
465
+ children: t('mySkills.createdBy')
466
+ }), /*#__PURE__*/_jsx(SCASMPreviewMetadataValue, {
467
+ children: createdByLabel
468
+ })]
469
+ }) : null, lastUpdatedLabel ? /*#__PURE__*/_jsxs(SCASMMetadataItem, {
470
+ children: [/*#__PURE__*/_jsx(SCASMPreviewMetadataLabel, {
471
+ children: t('mySkills.lastUpdated')
472
+ }), /*#__PURE__*/_jsx(SCASMPreviewMetadataValue, {
473
+ children: lastUpdatedLabel
474
+ })]
475
+ }) : null, !isSharedSkill ? /*#__PURE__*/_jsxs(SCASMMetadataItem, {
476
+ children: [/*#__PURE__*/_jsx(SCASMPreviewMetadataLabel, {
477
+ children: t('mySkills.enabledLabel')
478
+ }), /*#__PURE__*/_jsx(SCASMPreviewMetadataValue, {
479
+ children: accessType === 'company' ? t('mySkills.visibilityEveryone') : t('mySkills.visibilityOnlyMe')
480
+ })]
481
+ }) : null]
482
+ }), /*#__PURE__*/_jsxs(SCASMPreviewContentPanel, {
483
+ children: [/*#__PURE__*/_jsx(SCASMInstructionsTitle, {
484
+ children: t('mySkills.instructionsLabel')
485
+ }), /*#__PURE__*/_jsx(SCASMPreviewContentBox, {
486
+ children: content
487
+ })]
488
+ })]
489
+ });
331
490
  return /*#__PURE__*/createPortal(/*#__PURE__*/_jsxs(Backdrop, {
332
491
  zIndex: 1112,
333
492
  onClick: handleBackdropClick,
@@ -337,7 +496,7 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
337
496
  },
338
497
  children: [/*#__PURE__*/_jsxs(SCASMHeader, {
339
498
  children: [/*#__PURE__*/_jsx(SCASMHeaderTitle, {
340
- children: values.isEditing ? t('mySkills.editTitle') : t('mySkills.createTitle')
499
+ children: modalTitle
341
500
  }), /*#__PURE__*/_jsx(SCASMCloseButton, {
342
501
  type: "button",
343
502
  onClick: handleClose,
@@ -348,12 +507,13 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
348
507
  height: 18
349
508
  })
350
509
  })]
351
- }), /*#__PURE__*/_jsxs(SCASMContent, {
352
- children: [/*#__PURE__*/_jsxs(SCASMField, {
353
- children: [/*#__PURE__*/_jsx(SCASMLabel, {
510
+ }), isReadOnly ? previewBody : /*#__PURE__*/_jsxs(SCASMBody, {
511
+ children: [/*#__PURE__*/_jsxs(SCASMFieldBox, {
512
+ $height: 50,
513
+ children: [/*#__PURE__*/_jsx(SCASMFieldLabel, {
354
514
  htmlFor: "skill-name-input",
355
515
  children: t('mySkills.nameLabel')
356
- }), /*#__PURE__*/_jsx(SCASMInput, {
516
+ }), /*#__PURE__*/_jsx(SCASMFieldInput, {
357
517
  id: "skill-name-input",
358
518
  type: "text",
359
519
  maxLength: 150,
@@ -364,55 +524,60 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
364
524
  return handleChangeField('name', event.target.value);
365
525
  }
366
526
  })]
367
- }), /*#__PURE__*/_jsxs(SCASMField, {
368
- children: [/*#__PURE__*/_jsxs(SCASMFieldHeader, {
369
- children: [/*#__PURE__*/_jsx(SCASMLabel, {
370
- htmlFor: "skill-content-input",
371
- children: t('mySkills.contentLabel')
372
- }), /*#__PURE__*/_jsxs(SCASMHeaderActions, {
373
- children: [/*#__PURE__*/_jsx(SCASMUploadButton, {
374
- type: "button",
375
- onClick: handleUploadClick,
376
- disabled: isSubmitting,
377
- children: t('mySkills.uploadMd')
378
- }), /*#__PURE__*/_jsx(SCASMHiddenFileInput, {
379
- ref: fileInputRef,
380
- type: "file",
381
- accept: ".md,.markdown,text/markdown",
382
- onChange: handleFileChange
383
- }), /*#__PURE__*/_jsxs(SCASMToggleGroup, {
384
- children: [/*#__PURE__*/_jsx(SCASMToggleButton, {
385
- type: "button",
386
- $active: !showPreview,
387
- onClick: function onClick() {
388
- return setShowPreview(false);
389
- },
390
- children: t('mySkills.edit')
391
- }), /*#__PURE__*/_jsx(SCASMToggleButton, {
392
- type: "button",
393
- $active: showPreview,
394
- onClick: function onClick() {
395
- return setShowPreview(true);
396
- },
397
- children: t('mySkills.preview')
398
- })]
399
- })]
400
- })]
401
- }), showPreview ? /*#__PURE__*/_jsx(SCASMPreview, {
402
- children: content.trim() ? /*#__PURE__*/_jsx(MaiaStreamdown, {
403
- variant: "preview",
404
- children: content
405
- }) : /*#__PURE__*/_jsx(SCASMPreviewEmpty, {
406
- children: t('mySkills.previewEmpty')
407
- })
408
- }) : /*#__PURE__*/_jsx(SCASMTextarea, {
409
- id: "skill-content-input",
410
- placeholder: t('mySkills.contentPlaceholder'),
411
- value: content,
527
+ }), /*#__PURE__*/_jsxs(SCASMFieldBox, {
528
+ $height: 120,
529
+ $clipOverflow: true,
530
+ children: [/*#__PURE__*/_jsx(SCASMFieldLabel, {
531
+ htmlFor: "skill-description-input",
532
+ children: t('mySkills.descriptionLabel')
533
+ }), /*#__PURE__*/_jsx(SCASMFieldTextarea, {
534
+ id: "skill-description-input",
535
+ maxLength: 500,
536
+ placeholder: t('mySkills.descriptionPlaceholder'),
537
+ value: description,
412
538
  disabled: isSubmitting,
413
539
  onChange: function onChange(event) {
414
- return handleChangeField('content', event.target.value);
540
+ return handleChangeField('description', event.target.value);
415
541
  }
542
+ })]
543
+ }), canShareWithCompany ? /*#__PURE__*/_jsxs(SCASMSwitchRow, {
544
+ children: [/*#__PURE__*/_jsx(Switch, {
545
+ checked: accessType === 'company',
546
+ onChange: handleAccessTypeChange,
547
+ disabled: isSubmitting,
548
+ "aria-label": t('mySkills.shareWithCompany')
549
+ }), /*#__PURE__*/_jsx(SCASMSwitchLabel, {
550
+ children: t('mySkills.shareWithCompany')
551
+ })]
552
+ }) : null, /*#__PURE__*/_jsxs(SCASMInstructionsPanel, {
553
+ children: [/*#__PURE__*/_jsxs(SCASMInstructionsHeader, {
554
+ children: [/*#__PURE__*/_jsx(SCASMInstructionsTitle, {
555
+ children: t('mySkills.instructionsLabel')
556
+ }), /*#__PURE__*/_jsxs(SCASMUploadButton, {
557
+ type: "button",
558
+ onClick: handleUploadClick,
559
+ disabled: isSubmitting,
560
+ children: [/*#__PURE__*/_jsx(FileUpload, {
561
+ width: 18,
562
+ height: 18,
563
+ color: "#08C"
564
+ }), t('mySkills.uploadMd')]
565
+ }), /*#__PURE__*/_jsx(SCASMHiddenFileInput, {
566
+ ref: fileInputRef,
567
+ type: "file",
568
+ accept: ".md,.markdown,text/markdown",
569
+ onChange: handleFileChange
570
+ })]
571
+ }), /*#__PURE__*/_jsx(SCASMInstructionsField, {
572
+ children: /*#__PURE__*/_jsx(SCASMInstructionsTextarea, {
573
+ id: "skill-content-input",
574
+ placeholder: t('mySkills.contentPlaceholder'),
575
+ value: content,
576
+ disabled: isSubmitting,
577
+ onChange: function onChange(event) {
578
+ return handleChangeField('content', event.target.value);
579
+ }
580
+ })
416
581
  }), /*#__PURE__*/_jsx(SCASMByteCounter, {
417
582
  $overLimit: isOverLimit,
418
583
  "aria-live": "polite",
@@ -423,28 +588,50 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
423
588
  })]
424
589
  })]
425
590
  }), /*#__PURE__*/_jsxs(SCASMFooter, {
426
- children: [values.isEditing && canDelete ? /*#__PURE__*/_jsx(SCASMDeleteSlot, {
427
- children: /*#__PURE__*/_jsx(SCASMCancelButton, {
428
- type: "button",
429
- onClick: function onClick() {
430
- return setShowDelete(true);
431
- },
432
- disabled: isSubmitting,
433
- children: t('mySkills.delete')
434
- })
435
- }) : null, /*#__PURE__*/_jsx(SCASMCancelButton, {
436
- type: "button",
437
- onClick: handleClose,
438
- disabled: isSubmitting,
439
- children: t('mySkills.cancel')
440
- }), /*#__PURE__*/_jsx(SCASMSaveButton, {
591
+ children: [isReadOnly && isSharedSkill ? /*#__PURE__*/_jsx(SCASMUseSkillButton, {
441
592
  type: "button",
442
- onClick: handleSave,
443
- disabled: !isValid || isSubmitting || !hasChanges,
444
- children: isSubmitting ? /*#__PURE__*/_jsx(Loader, {
445
- size: "small"
446
- }) : t('mySkills.save')
447
- })]
593
+ onClick: handleUseSkill,
594
+ children: t('mySkills.useSkill')
595
+ }) : null, isReadOnly && !isSharedSkill ? /*#__PURE__*/_jsxs(_Fragment, {
596
+ children: [/*#__PURE__*/_jsx(SCASMDeleteSlot, {
597
+ children: /*#__PURE__*/_jsx(SCASMDeleteOutlinedButton, {
598
+ type: "button",
599
+ onClick: function onClick() {
600
+ return setShowDelete(true);
601
+ },
602
+ children: t('mySkills.delete')
603
+ })
604
+ }), /*#__PURE__*/_jsx(SCASMSavePrimaryButton, {
605
+ type: "button",
606
+ onClick: handleEditFromView,
607
+ children: t('mySkills.edit')
608
+ })]
609
+ }) : null, !isReadOnly ? /*#__PURE__*/_jsxs(_Fragment, {
610
+ children: [values.isEditing ? /*#__PURE__*/_jsx(SCASMDeleteSlot, {
611
+ children: /*#__PURE__*/_jsx(SCASMCancelButton, {
612
+ type: "button",
613
+ onClick: function onClick() {
614
+ return setShowDelete(true);
615
+ },
616
+ disabled: isSubmitting,
617
+ children: t('mySkills.delete')
618
+ })
619
+ }) : null, /*#__PURE__*/_jsx(SCASMSaveOutlinedButton, {
620
+ type: "button",
621
+ onClick: handleSaveAndUse,
622
+ disabled: !isValid || isSubmitting,
623
+ children: isSubmitting ? /*#__PURE__*/_jsx(Loader, {
624
+ size: "small"
625
+ }) : t('mySkills.saveAndUse')
626
+ }), /*#__PURE__*/_jsx(SCASMSavePrimaryButton, {
627
+ type: "button",
628
+ onClick: handleSave,
629
+ disabled: !isValid || isSubmitting || !hasChanges,
630
+ children: isSubmitting ? /*#__PURE__*/_jsx(Loader, {
631
+ size: "small"
632
+ }) : t('mySkills.save')
633
+ })]
634
+ }) : null]
448
635
  })]
449
636
  }), showDelete && skillId ? /*#__PURE__*/_jsx(DeleteQuestionModal, {
450
637
  onClose: function onClose() {
@@ -461,4 +648,4 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
461
648
  }) : null]
462
649
  }), container);
463
650
  };
464
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImNyZWF0ZVBvcnRhbCIsIkNyb3NzIiwidXNlVHJhbnNsYXRpb24iLCJNYWlhU3RyZWFtZG93biIsIkJhY2tkcm9wIiwiTG9hZGVyIiwiU0VDVElPTlMiLCJ1c2VVc2VyIiwidXNlU25hY2tCYXJNYW5hZ2VyIiwiY3JlYXRlU2tpbGwiLCJ1cGRhdGVTa2lsbCIsImRlbGV0ZVNraWxsIiwiZ2V0VW5pdEZpbGVTaXplIiwiZ2V0U2tpbGxDb250ZW50Qnl0ZUxlbmd0aCIsImlzU2tpbGxDb250ZW50T3ZlckxpbWl0IiwiU0tJTExfQ09OVEVOVF9NQVhfQllURVMiLCJEZWxldGVRdWVzdGlvbk1vZGFsIiwiU0NBU01CeXRlQ291bnRlciIsIlNDQVNNQ2FuY2VsQnV0dG9uIiwiU0NBU01DbG9zZUJ1dHRvbiIsIlNDQVNNQ29udGVudCIsIlNDQVNNRGVsZXRlU2xvdCIsIlNDQVNNRmllbGQiLCJTQ0FTTUZpZWxkSGVhZGVyIiwiU0NBU01Gb290ZXIiLCJTQ0FTTUhlYWRlciIsIlNDQVNNSGVhZGVyQWN0aW9ucyIsIlNDQVNNSGVhZGVyVGl0bGUiLCJTQ0FTTUhpZGRlbkZpbGVJbnB1dCIsIlNDQVNNSW5wdXQiLCJTQ0FTTUxhYmVsIiwiU0NBU01QcmV2aWV3IiwiU0NBU01QcmV2aWV3RW1wdHkiLCJTQ0FTTVNhdmVCdXR0b24iLCJTQ0FTTVRleHRhcmVhIiwiU0NBU01Ub2dnbGVCdXR0b24iLCJTQ0FTTVRvZ2dsZUdyb3VwIiwiU0NBU01VcGxvYWRCdXR0b24iLCJTQ0FTTVdyYXBwZXIiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiaW5pdGlhbFZhbHVlcyIsImlzRWRpdGluZyIsImdlbmVyYWwiLCJpZCIsInVuZGVmaW5lZCIsIm5hbWUiLCJjb250ZW50IiwiQWJtU2tpbGxNb2RhbCIsIl9yZWYiLCJfdXNlciRwZXJtaXNzaW9ucyIsIl92YWx1ZXMkZ2VuZXJhbCIsIl92YWx1ZXMkZ2VuZXJhbDIiLCJfdmFsdWVzJGdlbmVyYWwzIiwiYWRkU2tpbGwiLCJ1cGRhdGVTa2lsbEluTGlzdCIsInJlbW92ZVNraWxsIiwiX3VzZVRyYW5zbGF0aW9uIiwiY2hhdEFJIiwidCIsInVzZXIiLCJfdXNlU25hY2tCYXJNYW5hZ2VyIiwiaGFuZGxlU25hY2tiYXJTdWNjZXNzIiwiaGFuZGxlU25hY2tiYXJFcnJvciIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImlzT3BlbiIsInNldElzT3BlbiIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiaXNTdWJtaXR0aW5nIiwic2V0SXNTdWJtaXR0aW5nIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJzaG93RGVsZXRlIiwic2V0U2hvd0RlbGV0ZSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4Iiwic2hvd1ByZXZpZXciLCJzZXRTaG93UHJldmlldyIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwicGVuZGluZ1VwbG9hZCIsInNldFBlbmRpbmdVcGxvYWQiLCJfdXNlU3RhdGUxIiwiX3VzZVN0YXRlMTAiLCJ2YWx1ZXMiLCJzZXRWYWx1ZXMiLCJmaWxlSW5wdXRSZWYiLCJpbml0aWFsUmVmIiwidXNlclBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJhaV9hZ2VudHMiLCJjYW5DcmVhdGUiLCJjcmVhdGUiLCJjYW5FZGl0IiwiZWRpdCIsImNhbkRlbGV0ZSIsInNraWxsSWQiLCJjb250ZW50Qnl0ZXMiLCJpc092ZXJMaW1pdCIsImlzVmFsaWQiLCJ0cmltIiwiaGFzQ2hhbmdlcyIsImN1cnJlbnQiLCJoYW5kbGVDbG9zZSIsImhhbmRsZUJhY2tkcm9wQ2xpY2siLCJldmVudCIsInRhcmdldCIsImN1cnJlbnRUYXJnZXQiLCJoYW5kbGVTZXRTa2lsbFZhbHVlcyIsIl9za2lsbFZhbHVlcyR2YWx1ZXMiLCJfc2tpbGxWYWx1ZXMkdmFsdWVzMiIsIl9za2lsbFZhbHVlcyR2YWx1ZXMzIiwiX3NraWxsVmFsdWVzJHZhbHVlczQiLCJfc2tpbGxWYWx1ZXMkdmFsdWVzNSIsIl9za2lsbFZhbHVlcyR2YWx1ZXM2IiwiX3JlZjIiLCJkZXRhaWwiLCJza2lsbFZhbHVlcyIsImluY29taW5nTmFtZSIsImluY29taW5nQ29udGVudCIsIl9vYmplY3RTcHJlYWQiLCJoYXNDb250ZW50IiwiaW50ZW50IiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIl9maWxlSW5wdXRSZWYkY3VycmVudCIsImNsaWNrIiwiaGFuZGxlQ2hhbmdlRmllbGQiLCJmaWVsZCIsInZhbHVlIiwibGVuZ3RoIiwicHJldiIsIl9kZWZpbmVQcm9wZXJ0eSIsImhhbmRsZVVwbG9hZENsaWNrIiwiX2ZpbGVJbnB1dFJlZiRjdXJyZW50MiIsImhhbmRsZUZpbGVDaGFuZ2UiLCJfcmVmMyIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiX2V2ZW50JHRhcmdldCRmaWxlcyIsImZpbGUiLCJpc01hcmtkb3duIiwidGV4dCIsImJhc2VOYW1lIiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJuZXh0IiwiZmlsZXMiLCJhYnJ1cHQiLCJ0ZXN0Iiwic2l6ZSIsInNlbnQiLCJyZXBsYWNlIiwiX3ByZXYkZ2VuZXJhbCIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFuZGxlU2F2ZSIsIl9yZWY0IiwiX2NhbGxlZTIiLCJ1cGRhdGVkIiwiY3JlYXRlZCIsIl90MiIsIl9jb250ZXh0MiIsImZpbmlzaCIsImhhbmRsZUNvbmZpcm1EZWxldGUiLCJfcmVmNSIsIl9jYWxsZWUzIiwiX3QzIiwiX2NvbnRleHQzIiwiY29udGFpbmVyIiwiZ2V0RWxlbWVudEJ5SWQiLCJ6SW5kZXgiLCJvbkNsaWNrIiwiY2hpbGRyZW4iLCJzdG9wUHJvcGFnYXRpb24iLCJ0eXBlIiwiY29sb3IiLCJ3aWR0aCIsImhlaWdodCIsImh0bWxGb3IiLCJtYXhMZW5ndGgiLCJwbGFjZWhvbGRlciIsImRpc2FibGVkIiwib25DaGFuZ2UiLCJyZWYiLCJhY2NlcHQiLCIkYWN0aXZlIiwidmFyaWFudCIsIiRvdmVyTGltaXQiLCJ1c2VkIiwibWF4Iiwib25DbG9zZSIsImhhbmRsZXJzIiwiaGFuZGxlQ29uZmlybUFjdGlvbiIsImNoYXQiLCJ0aXRsZSIsImFjdGlvbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL29yZ2FuaXNtcy9BYm1Ta2lsbE1vZGFsL0FibVNraWxsTW9kYWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IENoYW5nZUV2ZW50LCBNb3VzZUV2ZW50LCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyBDcm9zcyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0Nyb3NzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuaW1wb3J0IHsgTWFpYVN0cmVhbWRvd24gfSBmcm9tICcuLi8uLi9hdG9tcy9NYWlhU3RyZWFtZG93bidcbmltcG9ydCB7IEJhY2tkcm9wIH0gZnJvbSAnLi4vLi4vYXRvbXMvQmFja2Ryb3AnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQgeyBTRUNUSU9OUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IHVzZVNuYWNrQmFyTWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVNuYWNrQmFyTWFuYWdlci91c2VTbmFja0Jhck1hbmFnZXInXG5pbXBvcnQgeyBjcmVhdGVTa2lsbCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvU2tpbGxzL2NyZWF0ZVNraWxsJ1xuaW1wb3J0IHsgdXBkYXRlU2tpbGwgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL1NraWxscy91cGRhdGVTa2lsbCdcbmltcG9ydCB7IGRlbGV0ZVNraWxsIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9Ta2lsbHMvZGVsZXRlU2tpbGwnXG5pbXBvcnQgeyBTa2lsbCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL3NraWxsJ1xuaW1wb3J0IHsgZ2V0VW5pdEZpbGVTaXplIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZ2V0VW5pdEZpbGVTaXplJ1xuaW1wb3J0IHtcbiAgZ2V0U2tpbGxDb250ZW50Qnl0ZUxlbmd0aCxcbiAgaXNTa2lsbENvbnRlbnRPdmVyTGltaXQsXG4gIFNLSUxMX0NPTlRFTlRfTUFYX0JZVEVTLFxufSBmcm9tICcuLi8uLi8uLi91dGlscy9za2lsbENvbnRlbnRTaXplJ1xuaW1wb3J0IHsgRGVsZXRlUXVlc3Rpb25Nb2RhbCB9IGZyb20gJy4uL0RlbGV0ZVF1ZXN0aW9uTW9kYWwvRGVsZXRlUXVlc3Rpb25Nb2RhbCdcbmltcG9ydCB7XG4gIFNDQVNNQnl0ZUNvdW50ZXIsXG4gIFNDQVNNQ2FuY2VsQnV0dG9uLFxuICBTQ0FTTUNsb3NlQnV0dG9uLFxuICBTQ0FTTUNvbnRlbnQsXG4gIFNDQVNNRGVsZXRlU2xvdCxcbiAgU0NBU01GaWVsZCxcbiAgU0NBU01GaWVsZEhlYWRlcixcbiAgU0NBU01Gb290ZXIsXG4gIFNDQVNNSGVhZGVyLFxuICBTQ0FTTUhlYWRlckFjdGlvbnMsXG4gIFNDQVNNSGVhZGVyVGl0bGUsXG4gIFNDQVNNSGlkZGVuRmlsZUlucHV0LFxuICBTQ0FTTUlucHV0LFxuICBTQ0FTTUxhYmVsLFxuICBTQ0FTTVByZXZpZXcsXG4gIFNDQVNNUHJldmlld0VtcHR5LFxuICBTQ0FTTVNhdmVCdXR0b24sXG4gIFNDQVNNVGV4dGFyZWEsXG4gIFNDQVNNVG9nZ2xlQnV0dG9uLFxuICBTQ0FTTVRvZ2dsZUdyb3VwLFxuICBTQ0FTTVVwbG9hZEJ1dHRvbixcbiAgU0NBU01XcmFwcGVyLFxufSBmcm9tICcuL0FibVNraWxsTW9kYWwuc3R5bGVzJ1xuXG50eXBlIFNraWxsTW9kYWxWYWx1ZXMgPSB7XG4gIGlzRWRpdGluZzogYm9vbGVhblxuICBnZW5lcmFsPzoge1xuICAgIGlkPzogc3RyaW5nXG4gICAgbmFtZT86IHN0cmluZ1xuICAgIGNvbnRlbnQ/OiBzdHJpbmdcbiAgfVxufVxuXG50eXBlIEFibVNraWxsTW9kYWxQcm9wcyA9IHtcbiAgYWRkU2tpbGw/OiAoc2tpbGw6IFNraWxsKSA9PiB2b2lkXG4gIHVwZGF0ZVNraWxsSW5MaXN0PzogKHNraWxsOiBTa2lsbCkgPT4gdm9pZFxuICByZW1vdmVTa2lsbD86IChza2lsbElkOiBzdHJpbmcpID0+IHZvaWRcbn1cblxuY29uc3QgaW5pdGlhbFZhbHVlczogU2tpbGxNb2RhbFZhbHVlcyA9IHtcbiAgaXNFZGl0aW5nOiBmYWxzZSxcbiAgZ2VuZXJhbDogeyBpZDogdW5kZWZpbmVkLCBuYW1lOiAnJywgY29udGVudDogJycgfSxcbn1cblxuZXhwb3J0IGNvbnN0IEFibVNraWxsTW9kYWwgPSAoeyBhZGRTa2lsbCwgdXBkYXRlU2tpbGxJbkxpc3QsIHJlbW92ZVNraWxsIH06IEFibVNraWxsTW9kYWxQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKFtTRUNUSU9OUy5jaGF0QUldKVxuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHsgaGFuZGxlU25hY2tiYXJTdWNjZXNzLCBoYW5kbGVTbmFja2JhckVycm9yIH0gPSB1c2VTbmFja0Jhck1hbmFnZXIoKVxuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc1N1Ym1pdHRpbmcsIHNldElzU3VibWl0dGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Nob3dEZWxldGUsIHNldFNob3dEZWxldGVdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93UHJldmlldywgc2V0U2hvd1ByZXZpZXddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtwZW5kaW5nVXBsb2FkLCBzZXRQZW5kaW5nVXBsb2FkXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbdmFsdWVzLCBzZXRWYWx1ZXNdID0gdXNlU3RhdGU8U2tpbGxNb2RhbFZhbHVlcz4oaW5pdGlhbFZhbHVlcylcbiAgY29uc3QgZmlsZUlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpXG4gIC8vIEJhc2VsaW5lIHRvIGRldGVjdCBjaGFuZ2VzOiB0aGUgbG9hZGVkIHZhbHVlcyB3aGVuIGVkaXRpbmcsIGVtcHR5IHdoZW4gY3JlYXRpbmdcbiAgLy8gKGEgbmV3L2dlbmVyYXRlZC91cGxvYWRlZCBza2lsbCBhbHdheXMgY291bnRzIGFzIGEgY2hhbmdlKS5cbiAgY29uc3QgaW5pdGlhbFJlZiA9IHVzZVJlZjx7IG5hbWU6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0+KHsgbmFtZTogJycsIGNvbnRlbnQ6ICcnIH0pXG5cbiAgY29uc3QgdXNlclBlcm1pc3Npb25zID0gdXNlcj8ucGVybWlzc2lvbnM/LmFpX2FnZW50c1xuICBjb25zdCBjYW5DcmVhdGUgPSAhIXVzZXJQZXJtaXNzaW9ucz8uY3JlYXRlXG4gIGNvbnN0IGNhbkVkaXQgPSAhIXVzZXJQZXJtaXNzaW9ucz8uZWRpdFxuICBjb25zdCBjYW5EZWxldGUgPSAhIXVzZXJQZXJtaXNzaW9ucz8uZGVsZXRlXG5cbiAgY29uc3QgbmFtZSA9IHZhbHVlcy5nZW5lcmFsPy5uYW1lIHx8ICcnXG4gIGNvbnN0IGNvbnRlbnQgPSB2YWx1ZXMuZ2VuZXJhbD8uY29udGVudCB8fCAnJ1xuICBjb25zdCBza2lsbElkID0gdmFsdWVzLmdlbmVyYWw/LmlkXG4gIGNvbnN0IGNvbnRlbnRCeXRlcyA9IHVzZU1lbW8oKCkgPT4gZ2V0U2tpbGxDb250ZW50Qnl0ZUxlbmd0aChjb250ZW50KSwgW2NvbnRlbnRdKVxuICBjb25zdCBpc092ZXJMaW1pdCA9IGNvbnRlbnRCeXRlcyA+IFNLSUxMX0NPTlRFTlRfTUFYX0JZVEVTXG4gIGNvbnN0IGlzVmFsaWQgPSAhIW5hbWUudHJpbSgpICYmICEhY29udGVudC50cmltKCkgJiYgIWlzT3ZlckxpbWl0XG4gIGNvbnN0IGhhc0NoYW5nZXMgPSBuYW1lLnRyaW0oKSAhPT0gaW5pdGlhbFJlZi5jdXJyZW50Lm5hbWUgfHwgY29udGVudC50cmltKCkgIT09IGluaXRpYWxSZWYuY3VycmVudC5jb250ZW50XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SXNPcGVuKGZhbHNlKVxuICAgIHNldFNob3dEZWxldGUoZmFsc2UpXG4gICAgc2V0U2hvd1ByZXZpZXcoZmFsc2UpXG4gICAgc2V0UGVuZGluZ1VwbG9hZChmYWxzZSlcbiAgICBzZXRWYWx1ZXMoaW5pdGlhbFZhbHVlcylcbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlQmFja2Ryb3BDbGljayA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCkge1xuICAgICAgICBoYW5kbGVDbG9zZSgpXG4gICAgICB9XG4gICAgfSxcbiAgICBbaGFuZGxlQ2xvc2VdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVNldFNraWxsVmFsdWVzID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHsgc2tpbGxWYWx1ZXMgfSA9IGV2ZW50LmRldGFpbCB8fCB7fVxuICAgICAgaWYgKCFza2lsbFZhbHVlcykgcmV0dXJuXG4gICAgICBjb25zdCBpbmNvbWluZ05hbWUgPSAoc2tpbGxWYWx1ZXMudmFsdWVzPy5nZW5lcmFsPy5uYW1lIHx8ICcnKS50cmltKClcbiAgICAgIGNvbnN0IGluY29taW5nQ29udGVudCA9IChza2lsbFZhbHVlcy52YWx1ZXM/LmdlbmVyYWw/LmNvbnRlbnQgfHwgJycpLnRyaW0oKVxuICAgICAgLy8gRWRpdGluZyBhbiBleGlzdGluZyBza2lsbCAtPiBiYXNlbGluZSBpcyBpdHMgdmFsdWVzOyBjcmVhdGluZyAtPiBlbXB0eSBiYXNlbGluZS5cbiAgICAgIGluaXRpYWxSZWYuY3VycmVudCA9IHNraWxsVmFsdWVzLnZhbHVlcz8uaXNFZGl0aW5nXG4gICAgICAgID8geyBuYW1lOiBpbmNvbWluZ05hbWUsIGNvbnRlbnQ6IGluY29taW5nQ29udGVudCB9XG4gICAgICAgIDogeyBuYW1lOiAnJywgY29udGVudDogJycgfVxuXG4gICAgICBzZXRWYWx1ZXMoe1xuICAgICAgICAuLi5pbml0aWFsVmFsdWVzLFxuICAgICAgICAuLi5za2lsbFZhbHVlcy52YWx1ZXMsXG4gICAgICAgIGdlbmVyYWw6IHsgLi4uaW5pdGlhbFZhbHVlcy5nZW5lcmFsLCAuLi5za2lsbFZhbHVlcy52YWx1ZXM/LmdlbmVyYWwgfSxcbiAgICAgIH0pXG4gICAgICAvLyBDb24gY29udGVuaWRvIChlZGljacOzbiBvIHNraWxsIHlhIGdlbmVyYWRhKSBhcnJhbmNhbW9zIGVuIFwiVmlzdGEgcHJldmlhXCI7IHZhY8OtYSwgZW4gXCJFZGl0YXJcIi5cbiAgICAgIGNvbnN0IGhhc0NvbnRlbnQgPSAhIXNraWxsVmFsdWVzLnZhbHVlcz8uZ2VuZXJhbD8uY29udGVudD8udHJpbSgpXG4gICAgICBzZXRTaG93UHJldmlldyhoYXNDb250ZW50KVxuICAgICAgLy8gU2kgdmlubyBjb24gaW50ZW50IFwidXBsb2FkXCIsIGFicmltb3MgZWwgc2VsZWN0b3IgZGUgYXJjaGl2b3MgYWwgbW9udGFyLlxuICAgICAgc2V0UGVuZGluZ1VwbG9hZChza2lsbFZhbHVlcy52YWx1ZXM/LmludGVudCA9PT0gJ3VwbG9hZCcpXG4gICAgICBzZXRJc09wZW4oISFza2lsbFZhbHVlcy5pc09wZW4pXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYWJtLXNraWxsLW1vZGFsLXNldC12YWx1ZXMnLCBoYW5kbGVTZXRTa2lsbFZhbHVlcylcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJtLXNraWxsLW1vZGFsLXNldC12YWx1ZXMnLCBoYW5kbGVTZXRTa2lsbFZhbHVlcylcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8vIFdoZW4gb3BlbmVkIHdpdGggdGhlIFwidXBsb2FkXCIgaW50ZW50LCBvcGVuIHRoZSBPUyBmaWxlIHBpY2tlciBvbmNlIG1vdW50ZWQuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzT3BlbiAmJiBwZW5kaW5nVXBsb2FkKSB7XG4gICAgICBzZXRQZW5kaW5nVXBsb2FkKGZhbHNlKVxuICAgICAgZmlsZUlucHV0UmVmLmN1cnJlbnQ/LmNsaWNrKClcbiAgICB9XG4gIH0sIFtpc09wZW4sIHBlbmRpbmdVcGxvYWRdKVxuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZUZpZWxkID0gKGZpZWxkOiAnbmFtZScgfCAnY29udGVudCcsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBpZiAoZmllbGQgPT09ICdjb250ZW50JyAmJiBpc1NraWxsQ29udGVudE92ZXJMaW1pdCh2YWx1ZSkpIHtcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggLSBjb250ZW50Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdteVNraWxscy5jb250ZW50U2l6ZUVycm9yJykpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgc2V0VmFsdWVzKHByZXYgPT4gKHtcbiAgICAgIC4uLnByZXYsXG4gICAgICBnZW5lcmFsOiB7IC4uLnByZXYuZ2VuZXJhbCwgW2ZpZWxkXTogdmFsdWUgfSxcbiAgICB9KSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVVwbG9hZENsaWNrID0gKCkgPT4ge1xuICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpXG4gIH1cblxuICBjb25zdCBoYW5kbGVGaWxlQ2hhbmdlID0gYXN5bmMgKGV2ZW50OiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXM/LlswXVxuICAgIC8vIFJlc2V0IHRoZSBpbnB1dCAodmlhIHJlZikgc28gc2VsZWN0aW5nIHRoZSBzYW1lIGZpbGUgYWdhaW4gc3RpbGwgZmlyZXMgb25DaGFuZ2UuXG4gICAgaWYgKGZpbGVJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBmaWxlSW5wdXRSZWYuY3VycmVudC52YWx1ZSA9ICcnXG4gICAgfVxuICAgIGlmICghZmlsZSkgcmV0dXJuXG5cbiAgICBjb25zdCBpc01hcmtkb3duID0gL1xcLihtZHxtYXJrZG93bikkL2kudGVzdChmaWxlLm5hbWUpXG4gICAgaWYgKCFpc01hcmtkb3duKSB7XG4gICAgICBoYW5kbGVTbmFja2JhckVycm9yKHQoJ215U2tpbGxzLnVwbG9hZEVycm9yJykpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoZmlsZS5zaXplID4gU0tJTExfQ09OVEVOVF9NQVhfQllURVMpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnbXlTa2lsbHMudXBsb2FkU2l6ZUVycm9yJykpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IGZpbGUudGV4dCgpXG4gICAgICBpZiAoaXNTa2lsbENvbnRlbnRPdmVyTGltaXQodGV4dCkpIHtcbiAgICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdteVNraWxscy51cGxvYWRTaXplRXJyb3InKSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCBiYXNlTmFtZSA9IGZpbGUubmFtZS5yZXBsYWNlKC9cXC4obWR8bWFya2Rvd24pJC9pLCAnJylcbiAgICAgIHNldFZhbHVlcyhwcmV2ID0+ICh7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIGdlbmVyYWw6IHtcbiAgICAgICAgICAuLi5wcmV2LmdlbmVyYWwsXG4gICAgICAgICAgY29udGVudDogdGV4dCxcbiAgICAgICAgICAvLyBPbmx5IGZpbGwgdGhlIG5hbWUgZnJvbSB0aGUgZmlsZW5hbWUgd2hlbiBpdCdzIHN0aWxsIGVtcHR5LlxuICAgICAgICAgIG5hbWU6IHByZXYuZ2VuZXJhbD8ubmFtZT8udHJpbSgpID8gcHJldi5nZW5lcmFsLm5hbWUgOiBiYXNlTmFtZSxcbiAgICAgICAgfSxcbiAgICAgIH0pKVxuICAgICAgLy8gVHJhcyBzdWJpciB1biAubWQgbW9zdHJhbW9zIGVsIHJlc3VsdGFkbyByZW5kZXJpemFkbyBwb3IgZGVmZWN0by5cbiAgICAgIHNldFNob3dQcmV2aWV3KHRydWUpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnbXlTa2lsbHMudXBsb2FkRXJyb3InKSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVTYXZlID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghaXNWYWxpZCB8fCBpc1N1Ym1pdHRpbmcpIHJldHVyblxuICAgIHNldElzU3VibWl0dGluZyh0cnVlKVxuICAgIHRyeSB7XG4gICAgICBpZiAodmFsdWVzLmlzRWRpdGluZyAmJiBza2lsbElkKSB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWQgPSBhd2FpdCB1cGRhdGVTa2lsbChza2lsbElkLCB7IG5hbWU6IG5hbWUudHJpbSgpLCBjb250ZW50OiBjb250ZW50LnRyaW0oKSB9KVxuICAgICAgICB1cGRhdGVTa2lsbEluTGlzdD8uKHVwZGF0ZWQpXG4gICAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdteVNraWxscy51cGRhdGVTdWNjZXNzJykpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjcmVhdGVkID0gYXdhaXQgY3JlYXRlU2tpbGwoeyBuYW1lOiBuYW1lLnRyaW0oKSwgY29udGVudDogY29udGVudC50cmltKCkgfSlcbiAgICAgICAgYWRkU2tpbGw/LihjcmVhdGVkKVxuICAgICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnbXlTa2lsbHMuY3JlYXRlU3VjY2VzcycpKVxuICAgICAgfVxuICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBoYW5kbGVTbmFja2JhckVycm9yKHZhbHVlcy5pc0VkaXRpbmcgPyB0KCdteVNraWxscy51cGRhdGVFcnJvcicpIDogdCgnbXlTa2lsbHMuY3JlYXRlRXJyb3InKSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNTdWJtaXR0aW5nKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNvbmZpcm1EZWxldGUgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFza2lsbElkKSByZXR1cm5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZGVsZXRlU2tpbGwoc2tpbGxJZClcbiAgICAgIHJlbW92ZVNraWxsPy4oc2tpbGxJZClcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdteVNraWxscy5kZWxldGVTdWNjZXNzJykpXG4gICAgICBoYW5kbGVDbG9zZSgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnbXlTa2lsbHMuZGVsZXRlRXJyb3InKSlcbiAgICB9XG4gIH1cblxuICBpZiAoIWlzT3BlbikgcmV0dXJuIG51bGxcbiAgaWYgKCFjYW5DcmVhdGUgJiYgIWNhbkVkaXQgJiYgIWNhbkRlbGV0ZSkgcmV0dXJuIG51bGxcblxuICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWwtcm9vdC1hY3Rpb25zJylcbiAgaWYgKCFjb250YWluZXIpIHJldHVybiBudWxsXG5cbiAgcmV0dXJuIGNyZWF0ZVBvcnRhbChcbiAgICA8QmFja2Ryb3AgekluZGV4PXsxMTEyfSBvbkNsaWNrPXtoYW5kbGVCYWNrZHJvcENsaWNrfT5cbiAgICAgIDxTQ0FTTVdyYXBwZXIgb25DbGljaz17ZXZlbnQgPT4gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9PlxuICAgICAgICA8U0NBU01IZWFkZXI+XG4gICAgICAgICAgPFNDQVNNSGVhZGVyVGl0bGU+e3ZhbHVlcy5pc0VkaXRpbmcgPyB0KCdteVNraWxscy5lZGl0VGl0bGUnKSA6IHQoJ215U2tpbGxzLmNyZWF0ZVRpdGxlJyl9PC9TQ0FTTUhlYWRlclRpdGxlPlxuICAgICAgICAgIDxTQ0FTTUNsb3NlQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVDbG9zZX0gYXJpYS1sYWJlbD17dCgnbXlTa2lsbHMuY2xvc2UnKX0+XG4gICAgICAgICAgICA8Q3Jvc3MgY29sb3I9XCIjYTZhNmE2XCIgd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICAgICAgICAgIDwvU0NBU01DbG9zZUJ1dHRvbj5cbiAgICAgICAgPC9TQ0FTTUhlYWRlcj5cblxuICAgICAgICA8U0NBU01Db250ZW50PlxuICAgICAgICAgIDxTQ0FTTUZpZWxkPlxuICAgICAgICAgICAgPFNDQVNNTGFiZWwgaHRtbEZvcj1cInNraWxsLW5hbWUtaW5wdXRcIj57dCgnbXlTa2lsbHMubmFtZUxhYmVsJyl9PC9TQ0FTTUxhYmVsPlxuICAgICAgICAgICAgPFNDQVNNSW5wdXRcbiAgICAgICAgICAgICAgaWQ9XCJza2lsbC1uYW1lLWlucHV0XCJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBtYXhMZW5ndGg9ezE1MH1cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3QoJ215U2tpbGxzLm5hbWVQbGFjZWhvbGRlcicpfVxuICAgICAgICAgICAgICB2YWx1ZT17bmFtZX1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzU3VibWl0dGluZ31cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e2V2ZW50ID0+IGhhbmRsZUNoYW5nZUZpZWxkKCduYW1lJywgZXZlbnQudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9TQ0FTTUZpZWxkPlxuXG4gICAgICAgICAgPFNDQVNNRmllbGQ+XG4gICAgICAgICAgICA8U0NBU01GaWVsZEhlYWRlcj5cbiAgICAgICAgICAgICAgPFNDQVNNTGFiZWwgaHRtbEZvcj1cInNraWxsLWNvbnRlbnQtaW5wdXRcIj57dCgnbXlTa2lsbHMuY29udGVudExhYmVsJyl9PC9TQ0FTTUxhYmVsPlxuICAgICAgICAgICAgICA8U0NBU01IZWFkZXJBY3Rpb25zPlxuICAgICAgICAgICAgICAgIDxTQ0FTTVVwbG9hZEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlVXBsb2FkQ2xpY2t9IGRpc2FibGVkPXtpc1N1Ym1pdHRpbmd9PlxuICAgICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLnVwbG9hZE1kJyl9XG4gICAgICAgICAgICAgICAgPC9TQ0FTTVVwbG9hZEJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8U0NBU01IaWRkZW5GaWxlSW5wdXRcbiAgICAgICAgICAgICAgICAgIHJlZj17ZmlsZUlucHV0UmVmfVxuICAgICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgICAgYWNjZXB0PVwiLm1kLC5tYXJrZG93bix0ZXh0L21hcmtkb3duXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPFNDQVNNVG9nZ2xlR3JvdXA+XG4gICAgICAgICAgICAgICAgICA8U0NBU01Ub2dnbGVCdXR0b24gdHlwZT1cImJ1dHRvblwiICRhY3RpdmU9eyFzaG93UHJldmlld30gb25DbGljaz17KCkgPT4gc2V0U2hvd1ByZXZpZXcoZmFsc2UpfT5cbiAgICAgICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLmVkaXQnKX1cbiAgICAgICAgICAgICAgICAgIDwvU0NBU01Ub2dnbGVCdXR0b24+XG4gICAgICAgICAgICAgICAgICA8U0NBU01Ub2dnbGVCdXR0b24gdHlwZT1cImJ1dHRvblwiICRhY3RpdmU9e3Nob3dQcmV2aWV3fSBvbkNsaWNrPXsoKSA9PiBzZXRTaG93UHJldmlldyh0cnVlKX0+XG4gICAgICAgICAgICAgICAgICAgIHt0KCdteVNraWxscy5wcmV2aWV3Jyl9XG4gICAgICAgICAgICAgICAgICA8L1NDQVNNVG9nZ2xlQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvU0NBU01Ub2dnbGVHcm91cD5cbiAgICAgICAgICAgICAgPC9TQ0FTTUhlYWRlckFjdGlvbnM+XG4gICAgICAgICAgICA8L1NDQVNNRmllbGRIZWFkZXI+XG4gICAgICAgICAgICB7c2hvd1ByZXZpZXcgPyAoXG4gICAgICAgICAgICAgIDxTQ0FTTVByZXZpZXc+XG4gICAgICAgICAgICAgICAge2NvbnRlbnQudHJpbSgpID8gKFxuICAgICAgICAgICAgICAgICAgPE1haWFTdHJlYW1kb3duIHZhcmlhbnQ9XCJwcmV2aWV3XCI+e2NvbnRlbnR9PC9NYWlhU3RyZWFtZG93bj5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPFNDQVNNUHJldmlld0VtcHR5Pnt0KCdteVNraWxscy5wcmV2aWV3RW1wdHknKX08L1NDQVNNUHJldmlld0VtcHR5PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvU0NBU01QcmV2aWV3PlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPFNDQVNNVGV4dGFyZWFcbiAgICAgICAgICAgICAgICBpZD1cInNraWxsLWNvbnRlbnQtaW5wdXRcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0KCdteVNraWxscy5jb250ZW50UGxhY2Vob2xkZXInKX1cbiAgICAgICAgICAgICAgICB2YWx1ZT17Y29udGVudH1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNTdWJtaXR0aW5nfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtldmVudCA9PiBoYW5kbGVDaGFuZ2VGaWVsZCgnY29udGVudCcsIGV2ZW50LnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPFNDQVNNQnl0ZUNvdW50ZXIgJG92ZXJMaW1pdD17aXNPdmVyTGltaXR9IGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICAgICAgICB7dCgnbXlTa2lsbHMuYnl0ZXNDb3VudGVyJywge1xuICAgICAgICAgICAgICAgIHVzZWQ6IGdldFVuaXRGaWxlU2l6ZShjb250ZW50Qnl0ZXMpLFxuICAgICAgICAgICAgICAgIG1heDogZ2V0VW5pdEZpbGVTaXplKFNLSUxMX0NPTlRFTlRfTUFYX0JZVEVTKSxcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L1NDQVNNQnl0ZUNvdW50ZXI+XG4gICAgICAgICAgPC9TQ0FTTUZpZWxkPlxuICAgICAgICA8L1NDQVNNQ29udGVudD5cblxuICAgICAgICA8U0NBU01Gb290ZXI+XG4gICAgICAgICAge3ZhbHVlcy5pc0VkaXRpbmcgJiYgY2FuRGVsZXRlID8gKFxuICAgICAgICAgICAgPFNDQVNNRGVsZXRlU2xvdD5cbiAgICAgICAgICAgICAgPFNDQVNNQ2FuY2VsQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBzZXRTaG93RGVsZXRlKHRydWUpfSBkaXNhYmxlZD17aXNTdWJtaXR0aW5nfT5cbiAgICAgICAgICAgICAgICB7dCgnbXlTa2lsbHMuZGVsZXRlJyl9XG4gICAgICAgICAgICAgIDwvU0NBU01DYW5jZWxCdXR0b24+XG4gICAgICAgICAgICA8L1NDQVNNRGVsZXRlU2xvdD5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8U0NBU01DYW5jZWxCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZUNsb3NlfSBkaXNhYmxlZD17aXNTdWJtaXR0aW5nfT5cbiAgICAgICAgICAgIHt0KCdteVNraWxscy5jYW5jZWwnKX1cbiAgICAgICAgICA8L1NDQVNNQ2FuY2VsQnV0dG9uPlxuICAgICAgICAgIDxTQ0FTTVNhdmVCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZVNhdmV9IGRpc2FibGVkPXshaXNWYWxpZCB8fCBpc1N1Ym1pdHRpbmcgfHwgIWhhc0NoYW5nZXN9PlxuICAgICAgICAgICAge2lzU3VibWl0dGluZyA/IDxMb2FkZXIgc2l6ZT1cInNtYWxsXCIgLz4gOiB0KCdteVNraWxscy5zYXZlJyl9XG4gICAgICAgICAgPC9TQ0FTTVNhdmVCdXR0b24+XG4gICAgICAgIDwvU0NBU01Gb290ZXI+XG4gICAgICA8L1NDQVNNV3JhcHBlcj5cblxuICAgICAge3Nob3dEZWxldGUgJiYgc2tpbGxJZCA/IChcbiAgICAgICAgPERlbGV0ZVF1ZXN0aW9uTW9kYWxcbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93RGVsZXRlKGZhbHNlKX1cbiAgICAgICAgICBoYW5kbGVycz17e1xuICAgICAgICAgICAgaGFuZGxlQ29uZmlybUFjdGlvbjogaGFuZGxlQ29uZmlybURlbGV0ZSxcbiAgICAgICAgICB9fVxuICAgICAgICAgIGNoYXQ9e3sgdGl0bGU6IG5hbWUsIGlkOiBza2lsbElkIH19XG4gICAgICAgICAgYWN0aW9uPVwic2tpbGxcIlxuICAgICAgICAvPlxuICAgICAgKSA6IG51bGx9XG4gICAgPC9CYWNrZHJvcD4sXG4gICAgY29udGFpbmVyXG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQSxTQUFrQ0EsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNsRyxTQUFTQyxZQUFZLFFBQVEsV0FBVztBQUN4QyxTQUFTQyxLQUFLLFFBQVEsd0NBQXdD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
651
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImNyZWF0ZVBvcnRhbCIsIkNyb3NzIiwiRmlsZVVwbG9hZCIsInVzZVRyYW5zbGF0aW9uIiwiQmFja2Ryb3AiLCJMb2FkZXIiLCJTd2l0Y2giLCJTRUNUSU9OUyIsInVzZVVzZXIiLCJpc0NvbGxhYm9yYXRvclJvbGUiLCJ1c2VTbmFja0Jhck1hbmFnZXIiLCJmb3JtYXREYXRlIiwiY3JlYXRlU2tpbGwiLCJ1cGRhdGVTa2lsbCIsImRlbGV0ZVNraWxsIiwiZ2V0VW5pdEZpbGVTaXplIiwiZ2V0U2tpbGxDb250ZW50Qnl0ZUxlbmd0aCIsImlzU2tpbGxDb250ZW50T3ZlckxpbWl0IiwiU0tJTExfQ09OVEVOVF9NQVhfQllURVMiLCJEZWxldGVRdWVzdGlvbk1vZGFsIiwiU0NBU01CeXRlQ291bnRlciIsIlNDQVNNQ2FuY2VsQnV0dG9uIiwiU0NBU01DbG9zZUJ1dHRvbiIsIlNDQVNNQm9keSIsIlNDQVNNRGVsZXRlT3V0bGluZWRCdXR0b24iLCJTQ0FTTURlbGV0ZVNsb3QiLCJTQ0FTTUZpZWxkQm94IiwiU0NBU01GaWVsZElucHV0IiwiU0NBU01GaWVsZExhYmVsIiwiU0NBU01GaWVsZFRleHRhcmVhIiwiU0NBU01Gb290ZXIiLCJTQ0FTTUhlYWRlciIsIlNDQVNNSGVhZGVyVGl0bGUiLCJTQ0FTTUhpZGRlbkZpbGVJbnB1dCIsIlNDQVNNSW5zdHJ1Y3Rpb25zRmllbGQiLCJTQ0FTTUluc3RydWN0aW9uc0hlYWRlciIsIlNDQVNNSW5zdHJ1Y3Rpb25zUGFuZWwiLCJTQ0FTTUluc3RydWN0aW9uc1RleHRhcmVhIiwiU0NBU01JbnN0cnVjdGlvbnNUaXRsZSIsIlNDQVNNTWV0YWRhdGFJdGVtIiwiU0NBU01QcmV2aWV3Qm9keSIsIlNDQVNNUHJldmlld0NvbnRlbnRCb3giLCJTQ0FTTVByZXZpZXdDb250ZW50UGFuZWwiLCJTQ0FTTVByZXZpZXdEZXNjcmlwdGlvbiIsIlNDQVNNUHJldmlld0hlYWRpbmdCbG9jayIsIlNDQVNNUHJldmlld01ldGFkYXRhTGFiZWwiLCJTQ0FTTVByZXZpZXdNZXRhZGF0YVJvdyIsIlNDQVNNUHJldmlld01ldGFkYXRhVmFsdWUiLCJTQ0FTTVByZXZpZXdOYW1lIiwiU0NBU01TYXZlT3V0bGluZWRCdXR0b24iLCJTQ0FTTVNhdmVQcmltYXJ5QnV0dG9uIiwiU0NBU01Td2l0Y2hMYWJlbCIsIlNDQVNNU3dpdGNoUm93IiwiU0NBU01VcGxvYWRCdXR0b24iLCJTQ0FTTVVzZVNraWxsQnV0dG9uIiwiU0NBU01XcmFwcGVyIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiU0tJTExfVVNFX0FGVEVSX1NBVkVfRVZFTlQiLCJpbml0aWFsVmFsdWVzIiwiaXNFZGl0aW5nIiwiZ2VuZXJhbCIsImlkIiwidW5kZWZpbmVkIiwibmFtZSIsImRlc2NyaXB0aW9uIiwiY29udGVudCIsImFjY2Vzc190eXBlIiwiZW1wdHlCYXNlbGluZSIsInBhcnNlRGVzY3JpcHRpb25Gcm9tQ29udGVudCIsImZyb250bWF0dGVyTWF0Y2giLCJtYXRjaCIsImRlc2NyaXB0aW9uTWF0Y2giLCJ0cmltIiwiQWJtU2tpbGxNb2RhbCIsIl9yZWYiLCJfdmFsdWVzJGdlbmVyYWwiLCJfdmFsdWVzJGdlbmVyYWwyIiwiX3ZhbHVlcyRnZW5lcmFsMyIsIl92YWx1ZXMkZ2VuZXJhbDQiLCJfdmFsdWVzJGdlbmVyYWw1IiwiX3ZhbHVlcyRnZW5lcmFsNyIsIl92YWx1ZXMkZ2VuZXJhbDAiLCJfdmFsdWVzJGdlbmVyYWwxIiwiYWRkU2tpbGwiLCJ1cGRhdGVTa2lsbEluTGlzdCIsInJlbW92ZVNraWxsIiwiX3VzZVRyYW5zbGF0aW9uIiwiY2hhdEFJIiwidCIsInVzZXIiLCJfdXNlU25hY2tCYXJNYW5hZ2VyIiwiaGFuZGxlU25hY2tiYXJTdWNjZXNzIiwiaGFuZGxlU25hY2tiYXJFcnJvciIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImlzT3BlbiIsInNldElzT3BlbiIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiaXNTdWJtaXR0aW5nIiwic2V0SXNTdWJtaXR0aW5nIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJzaG93RGVsZXRlIiwic2V0U2hvd0RlbGV0ZSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwicGVuZGluZ1VwbG9hZCIsInNldFBlbmRpbmdVcGxvYWQiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsInZhbHVlcyIsInNldFZhbHVlcyIsImZpbGVJbnB1dFJlZiIsImluaXRpYWxSZWYiLCJpc1JlYWRPbmx5IiwiaXNTaGFyZWRTa2lsbCIsImlzU2hhcmVkIiwiY2FuU2hhcmVXaXRoQ29tcGFueSIsInJvbGVfaWQiLCJhY2Nlc3NUeXBlIiwiZWZmZWN0aXZlQWNjZXNzVHlwZSIsInNraWxsSWQiLCJjb250ZW50Qnl0ZXMiLCJpc092ZXJMaW1pdCIsImlzVmFsaWQiLCJoYXNDaGFuZ2VzIiwiY3VycmVudCIsImNyZWF0ZWRCeUxhYmVsIiwiX3ZhbHVlcyRnZW5lcmFsNiIsImNyZWF0ZWRCeSIsImNyZWF0ZWRfYnlfbmFtZSIsImNvbmNhdCIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwibGFzdFVwZGF0ZWRMYWJlbCIsIl92YWx1ZXMkZ2VuZXJhbDgiLCJfdmFsdWVzJGdlbmVyYWw5IiwidXBkYXRlZEF0IiwidXBkYXRlZF9hdCIsImNyZWF0ZWRfYXQiLCJwYXJzZWQiLCJEYXRlIiwiTnVtYmVyIiwiaXNOYU4iLCJnZXRUaW1lIiwiaGFuZGxlQ2xvc2UiLCJoYW5kbGVCYWNrZHJvcENsaWNrIiwiZXZlbnQiLCJ0YXJnZXQiLCJjdXJyZW50VGFyZ2V0IiwiaGFuZGxlU2V0U2tpbGxWYWx1ZXMiLCJfc2tpbGxWYWx1ZXMkdmFsdWVzIiwiX3NraWxsVmFsdWVzJHZhbHVlczIiLCJfc2tpbGxWYWx1ZXMkdmFsdWVzMyIsIl9yZWYyIiwiZGV0YWlsIiwic2tpbGxWYWx1ZXMiLCJpbmNvbWluZ0dlbmVyYWwiLCJfb2JqZWN0U3ByZWFkIiwiaW5jb21pbmdOYW1lIiwiaW5jb21pbmdEZXNjcmlwdGlvbiIsImluY29taW5nQ29udGVudCIsImluY29taW5nQWNjZXNzVHlwZSIsInBhcnNlZERlc2NyaXB0aW9uIiwiZWRpdGluZ0Jhc2VsaW5lIiwiaW50ZW50IiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIl9maWxlSW5wdXRSZWYkY3VycmVudCIsImNsaWNrIiwiaGFuZGxlQ2hhbmdlRmllbGQiLCJmaWVsZCIsInZhbHVlIiwibGVuZ3RoIiwicHJldiIsIl9kZWZpbmVQcm9wZXJ0eSIsImhhbmRsZUFjY2Vzc1R5cGVDaGFuZ2UiLCJjaGVja2VkIiwiaGFuZGxlVXBsb2FkQ2xpY2siLCJfZmlsZUlucHV0UmVmJGN1cnJlbnQyIiwiaGFuZGxlRmlsZUNoYW5nZSIsIl9yZWYzIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJfZXZlbnQkdGFyZ2V0JGZpbGVzIiwiZmlsZSIsImlzTWFya2Rvd24iLCJ0ZXh0IiwiYmFzZU5hbWUiLCJfdCIsIndyYXAiLCJfY29udGV4dCIsIm5leHQiLCJmaWxlcyIsImFicnVwdCIsInRlc3QiLCJzaXplIiwic2VudCIsInJlcGxhY2UiLCJfcHJldiRnZW5lcmFsIiwiX3ByZXYkZ2VuZXJhbDIiLCJfcHJldiRnZW5lcmFsMyIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwicGVyc2lzdFNraWxsIiwiX3JlZjQiLCJfY2FsbGVlMiIsInBheWxvYWQiLCJ1cGRhdGVkIiwiY3JlYXRlZCIsIl9jb250ZXh0MiIsImhhbmRsZVNhdmUiLCJfcmVmNSIsIl9jYWxsZWUzIiwiX3QyIiwiX2NvbnRleHQzIiwiZmluaXNoIiwiaGFuZGxlU2F2ZUFuZFVzZSIsIl9yZWY2IiwiX2NhbGxlZTQiLCJzYXZlZFNraWxsIiwiX3QzIiwiX2NvbnRleHQ0IiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50Iiwic2tpbGwiLCJoYW5kbGVDb25maXJtRGVsZXRlIiwiX3JlZjciLCJfY2FsbGVlNSIsIl90NCIsIl9jb250ZXh0NSIsImhhbmRsZUVkaXRGcm9tVmlldyIsImhhbmRsZVVzZVNraWxsIiwidXNlRmlyc3RBZ2VudCIsImNvbnRhaW5lciIsImdldEVsZW1lbnRCeUlkIiwiZWRpdE9yQ3JlYXRlVGl0bGUiLCJ2aWV3VGl0bGUiLCJtb2RhbFRpdGxlIiwicHJldmlld0JvZHkiLCJjaGlsZHJlbiIsInpJbmRleCIsIm9uQ2xpY2siLCJzdG9wUHJvcGFnYXRpb24iLCJ0eXBlIiwiY29sb3IiLCJ3aWR0aCIsImhlaWdodCIsIiRoZWlnaHQiLCJodG1sRm9yIiwibWF4TGVuZ3RoIiwicGxhY2Vob2xkZXIiLCJkaXNhYmxlZCIsIm9uQ2hhbmdlIiwiJGNsaXBPdmVyZmxvdyIsInJlZiIsImFjY2VwdCIsIiRvdmVyTGltaXQiLCJ1c2VkIiwibWF4Iiwib25DbG9zZSIsImhhbmRsZXJzIiwiaGFuZGxlQ29uZmlybUFjdGlvbiIsImNoYXQiLCJ0aXRsZSIsImFjdGlvbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL29yZ2FuaXNtcy9BYm1Ta2lsbE1vZGFsL0FibVNraWxsTW9kYWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IENoYW5nZUV2ZW50LCBNb3VzZUV2ZW50LCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyBDcm9zcyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0Nyb3NzJ1xuaW1wb3J0IHsgRmlsZVVwbG9hZCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0ZpbGVVcGxvYWQnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyBCYWNrZHJvcCB9IGZyb20gJy4uLy4uL2F0b21zL0JhY2tkcm9wJ1xuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGVyJ1xuaW1wb3J0IHsgU3dpdGNoIH0gZnJvbSAnLi4vLi4vYXRvbXMvU3dpdGNoJ1xuaW1wb3J0IHsgU0VDVElPTlMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvY29uZmlnJ1xuaW1wb3J0IHsgdXNlVXNlciwgaXNDb2xsYWJvcmF0b3JSb2xlIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IHVzZVNuYWNrQmFyTWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVNuYWNrQmFyTWFuYWdlci91c2VTbmFja0Jhck1hbmFnZXInXG5pbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnLi4vLi4vLi4vbGFuZy91dGlscydcbmltcG9ydCB7IGNyZWF0ZVNraWxsIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9Ta2lsbHMvY3JlYXRlU2tpbGwnXG5pbXBvcnQgeyB1cGRhdGVTa2lsbCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvU2tpbGxzL3VwZGF0ZVNraWxsJ1xuaW1wb3J0IHsgZGVsZXRlU2tpbGwgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL1NraWxscy9kZWxldGVTa2lsbCdcbmltcG9ydCB7IFNraWxsLCBTa2lsbEFjY2Vzc1R5cGUgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9za2lsbCdcbmltcG9ydCB7IGdldFVuaXRGaWxlU2l6ZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2dldFVuaXRGaWxlU2l6ZSdcbmltcG9ydCB7XG4gIGdldFNraWxsQ29udGVudEJ5dGVMZW5ndGgsXG4gIGlzU2tpbGxDb250ZW50T3ZlckxpbWl0LFxuICBTS0lMTF9DT05URU5UX01BWF9CWVRFUyxcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvc2tpbGxDb250ZW50U2l6ZSdcbmltcG9ydCB7IERlbGV0ZVF1ZXN0aW9uTW9kYWwgfSBmcm9tICcuLi9EZWxldGVRdWVzdGlvbk1vZGFsL0RlbGV0ZVF1ZXN0aW9uTW9kYWwnXG5pbXBvcnQge1xuICBTQ0FTTUJ5dGVDb3VudGVyLFxuICBTQ0FTTUNhbmNlbEJ1dHRvbixcbiAgU0NBU01DbG9zZUJ1dHRvbixcbiAgU0NBU01Cb2R5LFxuICBTQ0FTTURlbGV0ZU91dGxpbmVkQnV0dG9uLFxuICBTQ0FTTURlbGV0ZVNsb3QsXG4gIFNDQVNNRmllbGRCb3gsXG4gIFNDQVNNRmllbGRJbnB1dCxcbiAgU0NBU01GaWVsZExhYmVsLFxuICBTQ0FTTUZpZWxkVGV4dGFyZWEsXG4gIFNDQVNNRm9vdGVyLFxuICBTQ0FTTUhlYWRlcixcbiAgU0NBU01IZWFkZXJUaXRsZSxcbiAgU0NBU01IaWRkZW5GaWxlSW5wdXQsXG4gIFNDQVNNSW5zdHJ1Y3Rpb25zRmllbGQsXG4gIFNDQVNNSW5zdHJ1Y3Rpb25zSGVhZGVyLFxuICBTQ0FTTUluc3RydWN0aW9uc1BhbmVsLFxuICBTQ0FTTUluc3RydWN0aW9uc1RleHRhcmVhLFxuICBTQ0FTTUluc3RydWN0aW9uc1RpdGxlLFxuICBTQ0FTTU1ldGFkYXRhSXRlbSxcbiAgU0NBU01QcmV2aWV3Qm9keSxcbiAgU0NBU01QcmV2aWV3Q29udGVudEJveCxcbiAgU0NBU01QcmV2aWV3Q29udGVudFBhbmVsLFxuICBTQ0FTTVByZXZpZXdEZXNjcmlwdGlvbixcbiAgU0NBU01QcmV2aWV3SGVhZGluZ0Jsb2NrLFxuICBTQ0FTTVByZXZpZXdNZXRhZGF0YUxhYmVsLFxuICBTQ0FTTVByZXZpZXdNZXRhZGF0YVJvdyxcbiAgU0NBU01QcmV2aWV3TWV0YWRhdGFWYWx1ZSxcbiAgU0NBU01QcmV2aWV3TmFtZSxcbiAgU0NBU01TYXZlT3V0bGluZWRCdXR0b24sXG4gIFNDQVNNU2F2ZVByaW1hcnlCdXR0b24sXG4gIFNDQVNNU3dpdGNoTGFiZWwsXG4gIFNDQVNNU3dpdGNoUm93LFxuICBTQ0FTTVVwbG9hZEJ1dHRvbixcbiAgU0NBU01Vc2VTa2lsbEJ1dHRvbixcbiAgU0NBU01XcmFwcGVyLFxufSBmcm9tICcuL0FibVNraWxsTW9kYWwuc3R5bGVzJ1xuXG5leHBvcnQgY29uc3QgU0tJTExfVVNFX0FGVEVSX1NBVkVfRVZFTlQgPSAnbWFpYS11c2Utc2tpbGwtYWZ0ZXItc2F2ZSdcblxudHlwZSBTa2lsbE1vZGFsR2VuZXJhbCA9IHtcbiAgaWQ/OiBzdHJpbmdcbiAgbmFtZT86IHN0cmluZ1xuICBkZXNjcmlwdGlvbj86IHN0cmluZ1xuICBjb250ZW50Pzogc3RyaW5nXG4gIGFjY2Vzc190eXBlPzogU2tpbGxBY2Nlc3NUeXBlXG4gIGNyZWF0ZWRfYnlfbmFtZT86IHN0cmluZ1xuICBjcmVhdGVkX2F0Pzogc3RyaW5nXG4gIHVwZGF0ZWRfYXQ/OiBzdHJpbmdcbn1cblxudHlwZSBTa2lsbE1vZGFsVmFsdWVzID0ge1xuICBpc0VkaXRpbmc6IGJvb2xlYW5cbiAgaXNSZWFkT25seT86IGJvb2xlYW5cbiAgaXNTaGFyZWQ/OiBib29sZWFuXG4gIGludGVudD86ICdnZW5lcmF0ZScgfCAnd3JpdGUnIHwgJ3VwbG9hZCdcbiAgZ2VuZXJhbD86IFNraWxsTW9kYWxHZW5lcmFsXG59XG5cbnR5cGUgQWJtU2tpbGxNb2RhbFByb3BzID0ge1xuICBhZGRTa2lsbD86IChza2lsbDogU2tpbGwpID0+IHZvaWRcbiAgdXBkYXRlU2tpbGxJbkxpc3Q/OiAoc2tpbGw6IFNraWxsKSA9PiB2b2lkXG4gIHJlbW92ZVNraWxsPzogKHNraWxsSWQ6IHN0cmluZykgPT4gdm9pZFxufVxuXG5jb25zdCBpbml0aWFsVmFsdWVzOiBTa2lsbE1vZGFsVmFsdWVzID0ge1xuICBpc0VkaXRpbmc6IGZhbHNlLFxuICBnZW5lcmFsOiB7XG4gICAgaWQ6IHVuZGVmaW5lZCxcbiAgICBuYW1lOiAnJyxcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgY29udGVudDogJycsXG4gICAgYWNjZXNzX3R5cGU6ICdvbmx5X21lJyxcbiAgfSxcbn1cblxudHlwZSBTa2lsbEZvcm1CYXNlbGluZSA9IHtcbiAgbmFtZTogc3RyaW5nXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmdcbiAgY29udGVudDogc3RyaW5nXG4gIGFjY2Vzc190eXBlOiBTa2lsbEFjY2Vzc1R5cGVcbn1cblxuY29uc3QgZW1wdHlCYXNlbGluZTogU2tpbGxGb3JtQmFzZWxpbmUgPSB7XG4gIG5hbWU6ICcnLFxuICBkZXNjcmlwdGlvbjogJycsXG4gIGNvbnRlbnQ6ICcnLFxuICBhY2Nlc3NfdHlwZTogJ29ubHlfbWUnLFxufVxuXG5jb25zdCBwYXJzZURlc2NyaXB0aW9uRnJvbUNvbnRlbnQgPSAoY29udGVudDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgZnJvbnRtYXR0ZXJNYXRjaCA9IGNvbnRlbnQubWF0Y2goL14tLS1cXHMqXFxuKFtcXHNcXFNdKj8pXFxuLS0tLylcbiAgaWYgKCFmcm9udG1hdHRlck1hdGNoKSByZXR1cm4gJydcbiAgY29uc3QgZGVzY3JpcHRpb25NYXRjaCA9IGZyb250bWF0dGVyTWF0Y2hbMV0ubWF0Y2goL15kZXNjcmlwdGlvbjpcXHMqKC4rKSQvbSlcbiAgcmV0dXJuIGRlc2NyaXB0aW9uTWF0Y2ggPyBkZXNjcmlwdGlvbk1hdGNoWzFdLnRyaW0oKSA6ICcnXG59XG5cbmV4cG9ydCBjb25zdCBBYm1Ta2lsbE1vZGFsID0gKHsgYWRkU2tpbGwsIHVwZGF0ZVNraWxsSW5MaXN0LCByZW1vdmVTa2lsbCB9OiBBYm1Ta2lsbE1vZGFsUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbihbU0VDVElPTlMuY2hhdEFJXSlcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7IGhhbmRsZVNuYWNrYmFyU3VjY2VzcywgaGFuZGxlU25hY2tiYXJFcnJvciB9ID0gdXNlU25hY2tCYXJNYW5hZ2VyKClcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaXNTdWJtaXR0aW5nLCBzZXRJc1N1Ym1pdHRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93RGVsZXRlLCBzZXRTaG93RGVsZXRlXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbcGVuZGluZ1VwbG9hZCwgc2V0UGVuZGluZ1VwbG9hZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3ZhbHVlcywgc2V0VmFsdWVzXSA9IHVzZVN0YXRlPFNraWxsTW9kYWxWYWx1ZXM+KGluaXRpYWxWYWx1ZXMpXG4gIGNvbnN0IGZpbGVJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuICBjb25zdCBpbml0aWFsUmVmID0gdXNlUmVmPFNraWxsRm9ybUJhc2VsaW5lPihlbXB0eUJhc2VsaW5lKVxuXG4gIGNvbnN0IGlzUmVhZE9ubHkgPSAhIXZhbHVlcy5pc1JlYWRPbmx5XG4gIGNvbnN0IGlzU2hhcmVkU2tpbGwgPSAhIXZhbHVlcy5pc1NoYXJlZFxuICBjb25zdCBjYW5TaGFyZVdpdGhDb21wYW55ID0gIWlzQ29sbGFib3JhdG9yUm9sZSh1c2VyLnJvbGVfaWQpICYmICFpc1JlYWRPbmx5XG5cbiAgY29uc3QgbmFtZSA9IHZhbHVlcy5nZW5lcmFsPy5uYW1lIHx8ICcnXG4gIGNvbnN0IGRlc2NyaXB0aW9uID0gdmFsdWVzLmdlbmVyYWw/LmRlc2NyaXB0aW9uIHx8ICcnXG4gIGNvbnN0IGNvbnRlbnQgPSB2YWx1ZXMuZ2VuZXJhbD8uY29udGVudCB8fCAnJ1xuICBjb25zdCBhY2Nlc3NUeXBlOiBTa2lsbEFjY2Vzc1R5cGUgPSB2YWx1ZXMuZ2VuZXJhbD8uYWNjZXNzX3R5cGUgfHwgJ29ubHlfbWUnXG4gIGNvbnN0IGVmZmVjdGl2ZUFjY2Vzc1R5cGU6IFNraWxsQWNjZXNzVHlwZSA9IGNhblNoYXJlV2l0aENvbXBhbnkgPyBhY2Nlc3NUeXBlIDogJ29ubHlfbWUnXG4gIGNvbnN0IHNraWxsSWQgPSB2YWx1ZXMuZ2VuZXJhbD8uaWRcbiAgY29uc3QgY29udGVudEJ5dGVzID0gdXNlTWVtbygoKSA9PiBnZXRTa2lsbENvbnRlbnRCeXRlTGVuZ3RoKGNvbnRlbnQpLCBbY29udGVudF0pXG4gIGNvbnN0IGlzT3ZlckxpbWl0ID0gY29udGVudEJ5dGVzID4gU0tJTExfQ09OVEVOVF9NQVhfQllURVNcbiAgY29uc3QgaXNWYWxpZCA9ICEhbmFtZS50cmltKCkgJiYgISFjb250ZW50LnRyaW0oKSAmJiAhaXNPdmVyTGltaXRcbiAgY29uc3QgaGFzQ2hhbmdlcyA9XG4gICAgbmFtZS50cmltKCkgIT09IGluaXRpYWxSZWYuY3VycmVudC5uYW1lIHx8XG4gICAgZGVzY3JpcHRpb24udHJpbSgpICE9PSBpbml0aWFsUmVmLmN1cnJlbnQuZGVzY3JpcHRpb24gfHxcbiAgICBjb250ZW50LnRyaW0oKSAhPT0gaW5pdGlhbFJlZi5jdXJyZW50LmNvbnRlbnQgfHxcbiAgICAoY2FuU2hhcmVXaXRoQ29tcGFueSAmJiBlZmZlY3RpdmVBY2Nlc3NUeXBlICE9PSBpbml0aWFsUmVmLmN1cnJlbnQuYWNjZXNzX3R5cGUpXG5cbiAgY29uc3QgY3JlYXRlZEJ5TGFiZWwgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBjcmVhdGVkQnkgPSB2YWx1ZXMuZ2VuZXJhbD8uY3JlYXRlZF9ieV9uYW1lPy50cmltKClcbiAgICBpZiAoY3JlYXRlZEJ5KSByZXR1cm4gY3JlYXRlZEJ5XG4gICAgcmV0dXJuIGlzU2hhcmVkU2tpbGwgPyAnJyA6IGAke3VzZXIuZmlyc3ROYW1lfSAke3VzZXIubGFzdE5hbWV9YC50cmltKClcbiAgfSwgW3ZhbHVlcy5nZW5lcmFsPy5jcmVhdGVkX2J5X25hbWUsIHVzZXIuZmlyc3ROYW1lLCB1c2VyLmxhc3ROYW1lLCBpc1NoYXJlZFNraWxsXSlcblxuICBjb25zdCBsYXN0VXBkYXRlZExhYmVsID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgdXBkYXRlZEF0ID0gdmFsdWVzLmdlbmVyYWw/LnVwZGF0ZWRfYXQgfHwgdmFsdWVzLmdlbmVyYWw/LmNyZWF0ZWRfYXRcbiAgICBpZiAoIXVwZGF0ZWRBdCkgcmV0dXJuICcnXG4gICAgY29uc3QgcGFyc2VkID0gbmV3IERhdGUodXBkYXRlZEF0KVxuICAgIGlmIChOdW1iZXIuaXNOYU4ocGFyc2VkLmdldFRpbWUoKSkpIHJldHVybiAnJ1xuICAgIHJldHVybiBmb3JtYXREYXRlKHBhcnNlZClcbiAgfSwgW3ZhbHVlcy5nZW5lcmFsPy51cGRhdGVkX2F0LCB2YWx1ZXMuZ2VuZXJhbD8uY3JlYXRlZF9hdF0pXG5cbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SXNPcGVuKGZhbHNlKVxuICAgIHNldFNob3dEZWxldGUoZmFsc2UpXG4gICAgc2V0UGVuZGluZ1VwbG9hZChmYWxzZSlcbiAgICBzZXRWYWx1ZXMoaW5pdGlhbFZhbHVlcylcbiAgICBpbml0aWFsUmVmLmN1cnJlbnQgPSBlbXB0eUJhc2VsaW5lXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZUJhY2tkcm9wQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQpIHtcbiAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2hhbmRsZUNsb3NlXVxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVTZXRTa2lsbFZhbHVlcyA9IChldmVudDogYW55KSA9PiB7XG4gICAgICBjb25zdCB7IHNraWxsVmFsdWVzIH0gPSBldmVudC5kZXRhaWwgfHwge31cbiAgICAgIGlmICghc2tpbGxWYWx1ZXMpIHJldHVyblxuXG4gICAgICBjb25zdCBpbmNvbWluZ0dlbmVyYWwgPSB7XG4gICAgICAgIC4uLmluaXRpYWxWYWx1ZXMuZ2VuZXJhbCxcbiAgICAgICAgLi4uc2tpbGxWYWx1ZXMudmFsdWVzPy5nZW5lcmFsLFxuICAgICAgfVxuICAgICAgY29uc3QgaW5jb21pbmdOYW1lID0gKGluY29taW5nR2VuZXJhbC5uYW1lIHx8ICcnKS50cmltKClcbiAgICAgIGNvbnN0IGluY29taW5nRGVzY3JpcHRpb24gPSAoaW5jb21pbmdHZW5lcmFsLmRlc2NyaXB0aW9uIHx8ICcnKS50cmltKClcbiAgICAgIGNvbnN0IGluY29taW5nQ29udGVudCA9IChpbmNvbWluZ0dlbmVyYWwuY29udGVudCB8fCAnJykudHJpbSgpXG4gICAgICBjb25zdCBpbmNvbWluZ0FjY2Vzc1R5cGU6IFNraWxsQWNjZXNzVHlwZSA9IGlzQ29sbGFib3JhdG9yUm9sZSh1c2VyLnJvbGVfaWQpXG4gICAgICAgID8gJ29ubHlfbWUnXG4gICAgICAgIDogaW5jb21pbmdHZW5lcmFsLmFjY2Vzc190eXBlIHx8ICdvbmx5X21lJ1xuICAgICAgY29uc3QgcGFyc2VkRGVzY3JpcHRpb24gPVxuICAgICAgICBpbmNvbWluZ0Rlc2NyaXB0aW9uIHx8IChpbmNvbWluZ0NvbnRlbnQgPyBwYXJzZURlc2NyaXB0aW9uRnJvbUNvbnRlbnQoaW5jb21pbmdDb250ZW50KSA6ICcnKVxuXG4gICAgICBjb25zdCBlZGl0aW5nQmFzZWxpbmU6IFNraWxsRm9ybUJhc2VsaW5lID0ge1xuICAgICAgICBuYW1lOiBpbmNvbWluZ05hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBwYXJzZWREZXNjcmlwdGlvbixcbiAgICAgICAgY29udGVudDogaW5jb21pbmdDb250ZW50LFxuICAgICAgICBhY2Nlc3NfdHlwZTogaW5jb21pbmdBY2Nlc3NUeXBlLFxuICAgICAgfVxuICAgICAgaW5pdGlhbFJlZi5jdXJyZW50ID0gc2tpbGxWYWx1ZXMudmFsdWVzPy5pc0VkaXRpbmcgPyBlZGl0aW5nQmFzZWxpbmUgOiBlbXB0eUJhc2VsaW5lXG5cbiAgICAgIHNldFZhbHVlcyh7XG4gICAgICAgIC4uLmluaXRpYWxWYWx1ZXMsXG4gICAgICAgIC4uLnNraWxsVmFsdWVzLnZhbHVlcyxcbiAgICAgICAgZ2VuZXJhbDoge1xuICAgICAgICAgIC4uLmluY29taW5nR2VuZXJhbCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogcGFyc2VkRGVzY3JpcHRpb24sXG4gICAgICAgICAgYWNjZXNzX3R5cGU6IGluY29taW5nQWNjZXNzVHlwZSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICBzZXRQZW5kaW5nVXBsb2FkKHNraWxsVmFsdWVzLnZhbHVlcz8uaW50ZW50ID09PSAndXBsb2FkJylcbiAgICAgIHNldElzT3BlbighIXNraWxsVmFsdWVzLmlzT3BlbilcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdhYm0tc2tpbGwtbW9kYWwtc2V0LXZhbHVlcycsIGhhbmRsZVNldFNraWxsVmFsdWVzKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm0tc2tpbGwtbW9kYWwtc2V0LXZhbHVlcycsIGhhbmRsZVNldFNraWxsVmFsdWVzKVxuICAgIH1cbiAgfSwgW3VzZXIucm9sZV9pZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNPcGVuICYmIHBlbmRpbmdVcGxvYWQpIHtcbiAgICAgIHNldFBlbmRpbmdVcGxvYWQoZmFsc2UpXG4gICAgICBmaWxlSW5wdXRSZWYuY3VycmVudD8uY2xpY2soKVxuICAgIH1cbiAgfSwgW2lzT3BlbiwgcGVuZGluZ1VwbG9hZF0pXG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlRmllbGQgPSAoZmllbGQ6ICduYW1lJyB8ICdkZXNjcmlwdGlvbicgfCAnY29udGVudCcsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBpZiAoZmllbGQgPT09ICdjb250ZW50JyAmJiBpc1NraWxsQ29udGVudE92ZXJMaW1pdCh2YWx1ZSkpIHtcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggLSBjb250ZW50Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdteVNraWxscy5jb250ZW50U2l6ZUVycm9yJykpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgc2V0VmFsdWVzKHByZXYgPT4gKHtcbiAgICAgIC4uLnByZXYsXG4gICAgICBnZW5lcmFsOiB7IC4uLnByZXYuZ2VuZXJhbCwgW2ZpZWxkXTogdmFsdWUgfSxcbiAgICB9KSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUFjY2Vzc1R5cGVDaGFuZ2UgPSAoY2hlY2tlZDogYm9vbGVhbikgPT4ge1xuICAgIGlmICghY2FuU2hhcmVXaXRoQ29tcGFueSkgcmV0dXJuXG4gICAgc2V0VmFsdWVzKHByZXYgPT4gKHtcbiAgICAgIC4uLnByZXYsXG4gICAgICBnZW5lcmFsOiB7XG4gICAgICAgIC4uLnByZXYuZ2VuZXJhbCxcbiAgICAgICAgYWNjZXNzX3R5cGU6IGNoZWNrZWQgPyAnY29tcGFueScgOiAnb25seV9tZScsXG4gICAgICB9LFxuICAgIH0pKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlVXBsb2FkQ2xpY2sgPSAoKSA9PiB7XG4gICAgZmlsZUlucHV0UmVmLmN1cnJlbnQ/LmNsaWNrKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUZpbGVDaGFuZ2UgPSBhc3luYyAoZXZlbnQ6IENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgY29uc3QgZmlsZSA9IGV2ZW50LnRhcmdldC5maWxlcz8uWzBdXG4gICAgaWYgKGZpbGVJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBmaWxlSW5wdXRSZWYuY3VycmVudC52YWx1ZSA9ICcnXG4gICAgfVxuICAgIGlmICghZmlsZSkgcmV0dXJuXG5cbiAgICBjb25zdCBpc01hcmtkb3duID0gL1xcLihtZHxtYXJrZG93bikkL2kudGVzdChmaWxlLm5hbWUpXG4gICAgaWYgKCFpc01hcmtkb3duKSB7XG4gICAgICBoYW5kbGVTbmFja2JhckVycm9yKHQoJ215U2tpbGxzLnVwbG9hZEVycm9yJykpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoZmlsZS5zaXplID4gU0tJTExfQ09OVEVOVF9NQVhfQllURVMpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnbXlTa2lsbHMudXBsb2FkU2l6ZUVycm9yJykpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IGZpbGUudGV4dCgpXG4gICAgICBpZiAoaXNTa2lsbENvbnRlbnRPdmVyTGltaXQodGV4dCkpIHtcbiAgICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdteVNraWxscy51cGxvYWRTaXplRXJyb3InKSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCBiYXNlTmFtZSA9IGZpbGUubmFtZS5yZXBsYWNlKC9cXC4obWR8bWFya2Rvd24pJC9pLCAnJylcbiAgICAgIGNvbnN0IHBhcnNlZERlc2NyaXB0aW9uID0gcGFyc2VEZXNjcmlwdGlvbkZyb21Db250ZW50KHRleHQpXG4gICAgICBzZXRWYWx1ZXMocHJldiA9PiAoe1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgLi4ucHJldi5nZW5lcmFsLFxuICAgICAgICAgIGNvbnRlbnQ6IHRleHQsXG4gICAgICAgICAgZGVzY3JpcHRpb246IHByZXYuZ2VuZXJhbD8uZGVzY3JpcHRpb24/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+XG4gICAgICAgICAgICAgICAgPFNDQVNNSW5zdHJ1Y3Rpb25zVGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgIGlkPVwic2tpbGwtY29udGVudC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dCgnbXlTa2lsbHMuY29udGVudFBsYWNlaG9sZGVyJyl9XG4gICAgICAgICAgICAgICAgICB2YWx1ZT17Y29udGVudH1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc1N1Ym1pdHRpbmd9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17ZXZlbnQgPT4gaGFuZGxlQ2hhbmdlRmllbGQoJ2NvbnRlbnQnLCBldmVudC50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvU0NBU01JbnN0cnVjdGlvbnNGaWVsZD5cbiAgICAgICAgICAgICAgPFNDQVNNQnl0ZUNvdW50ZXIgJG92ZXJMaW1pdD17aXNPdmVyTGltaXR9IGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICAgICAgICAgIHt0KCdteVNraWxscy5ieXRlc0NvdW50ZXInLCB7XG4gICAgICAgICAgICAgICAgICB1c2VkOiBnZXRVbml0RmlsZVNpemUoY29udGVudEJ5dGVzKSxcbiAgICAgICAgICAgICAgICAgIG1heDogZ2V0VW5pdEZpbGVTaXplKFNLSUxMX0NPTlRFTlRfTUFYX0JZVEVTKSxcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC9TQ0FTTUJ5dGVDb3VudGVyPlxuICAgICAgICAgICAgPC9TQ0FTTUluc3RydWN0aW9uc1BhbmVsPlxuICAgICAgICAgIDwvU0NBU01Cb2R5PlxuICAgICAgICApfVxuXG4gICAgICAgIDxTQ0FTTUZvb3Rlcj5cbiAgICAgICAgICB7aXNSZWFkT25seSAmJiBpc1NoYXJlZFNraWxsID8gKFxuICAgICAgICAgICAgPFNDQVNNVXNlU2tpbGxCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZVVzZVNraWxsfT5cbiAgICAgICAgICAgICAge3QoJ215U2tpbGxzLnVzZVNraWxsJyl9XG4gICAgICAgICAgICA8L1NDQVNNVXNlU2tpbGxCdXR0b24+XG4gICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICB7aXNSZWFkT25seSAmJiAhaXNTaGFyZWRTa2lsbCA/IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxTQ0FTTURlbGV0ZVNsb3Q+XG4gICAgICAgICAgICAgICAgPFNDQVNNRGVsZXRlT3V0bGluZWRCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9eygpID0+IHNldFNob3dEZWxldGUodHJ1ZSl9PlxuICAgICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLmRlbGV0ZScpfVxuICAgICAgICAgICAgICAgIDwvU0NBU01EZWxldGVPdXRsaW5lZEJ1dHRvbj5cbiAgICAgICAgICAgICAgPC9TQ0FTTURlbGV0ZVNsb3Q+XG4gICAgICAgICAgICAgIDxTQ0FTTVNhdmVQcmltYXJ5QnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVFZGl0RnJvbVZpZXd9PlxuICAgICAgICAgICAgICAgIHt0KCdteVNraWxscy5lZGl0Jyl9XG4gICAgICAgICAgICAgIDwvU0NBU01TYXZlUHJpbWFyeUJ1dHRvbj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgeyFpc1JlYWRPbmx5ID8gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAge3ZhbHVlcy5pc0VkaXRpbmcgPyAoXG4gICAgICAgICAgICAgICAgPFNDQVNNRGVsZXRlU2xvdD5cbiAgICAgICAgICAgICAgICAgIDxTQ0FTTUNhbmNlbEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17KCkgPT4gc2V0U2hvd0RlbGV0ZSh0cnVlKX0gZGlzYWJsZWQ9e2lzU3VibWl0dGluZ30+XG4gICAgICAgICAgICAgICAgICAgIHt0KCdteVNraWxscy5kZWxldGUnKX1cbiAgICAgICAgICAgICAgICAgIDwvU0NBU01DYW5jZWxCdXR0b24+XG4gICAgICAgICAgICAgICAgPC9TQ0FTTURlbGV0ZVNsb3Q+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICA8U0NBU01TYXZlT3V0bGluZWRCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZVNhdmVBbmRVc2V9IGRpc2FibGVkPXshaXNWYWxpZCB8fCBpc1N1Ym1pdHRpbmd9PlxuICAgICAgICAgICAgICAgIHtpc1N1Ym1pdHRpbmcgPyA8TG9hZGVyIHNpemU9XCJzbWFsbFwiIC8+IDogdCgnbXlTa2lsbHMuc2F2ZUFuZFVzZScpfVxuICAgICAgICAgICAgICA8L1NDQVNNU2F2ZU91dGxpbmVkQnV0dG9uPlxuICAgICAgICAgICAgICA8U0NBU01TYXZlUHJpbWFyeUJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNhdmV9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFpc1ZhbGlkIHx8IGlzU3VibWl0dGluZyB8fCAhaGFzQ2hhbmdlc31cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtpc1N1Ym1pdHRpbmcgPyA8TG9hZGVyIHNpemU9XCJzbWFsbFwiIC8+IDogdCgnbXlTa2lsbHMuc2F2ZScpfVxuICAgICAgICAgICAgICA8L1NDQVNNU2F2ZVByaW1hcnlCdXR0b24+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9TQ0FTTUZvb3Rlcj5cbiAgICAgIDwvU0NBU01XcmFwcGVyPlxuXG4gICAgICB7c2hvd0RlbGV0ZSAmJiBza2lsbElkID8gKFxuICAgICAgICA8RGVsZXRlUXVlc3Rpb25Nb2RhbFxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dEZWxldGUoZmFsc2UpfVxuICAgICAgICAgIGhhbmRsZXJzPXt7XG4gICAgICAgICAgICBoYW5kbGVDb25maXJtQWN0aW9uOiBoYW5kbGVDb25maXJtRGVsZXRlLFxuICAgICAgICAgIH19XG4gICAgICAgICAgY2hhdD17eyB0aXRsZTogbmFtZSwgaWQ6IHNraWxsSWQgfX1cbiAgICAgICAgICBhY3Rpb249XCJza2lsbFwiXG4gICAgICAgIC8+XG4gICAgICApIDogbnVsbH1cbiAgICA8L0JhY2tkcm9wPixcbiAgICBjb250YWluZXJcbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBLFNBQWtDQSxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQ2xHLFNBQVNDLFlBQVksUUFBUSxXQUFXO0FBQ3hDLFNBQVNDLEtBQUssUUFBUSx3Q0FBd0M7QUFDOUQsU0FBU0MsVUFBVSxRQUFRLDZDQUE2QztBQUN4RSxTQUFTQyxjQUFjLFFBQVEsZUFBZTtBQUM5QyxTQUFTQyxRQUFRLFFBQVEsc0JBQXNCO0FBQy9DLFNBQVNDLE1BQU0sUUFBUSxvQkFBb0I7QUFDM0MsU0FBU0MsTUFBTSxRQUFRLG9CQUFvQjtBQUMzQyxTQUFTQyxRQUFRLFFBQVEsMkJBQTJCO0FBQ3BELFNBQVNDLE9BQU8sRUFBRUMsa0JBQWtCLFFBQVEsMkJBQTJCO0FBQ3ZFLFNBQVNDLGtCQUFrQixRQUFRLHNEQUFzRDtBQUN6RixTQUFTQyxVQUFVLFFBQVEscUJBQXFCO0FBQ2hELFNBQVNDLFdBQVcsUUFBUSwyQ0FBMkM7QUFDdkUsU0FBU0MsV0FBVyxRQUFRLDJDQUEyQztBQUN2RSxTQUFTQyxXQUFXLFFBQVEsMkNBQTJDO0FBRXZFLFNBQVNDLGVBQWUsUUFBUSxnQ0FBZ0M7QUFDaEUsU0FDRUMs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