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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/lib/App.js +44 -19
  2. package/lib/components/atoms/ApprovalBox/ApprovalBox.js +4 -63
  3. package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +3 -31
  4. package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +4 -16
  5. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +1 -12
  6. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +5 -127
  7. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +29 -2
  8. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +33 -24
  9. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +19 -2
  10. package/lib/components/atoms/MAIAInput/MAIAInput.js +17 -234
  11. package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +2 -84
  12. package/lib/components/atoms/MAIAInput/styles.js +11 -15
  13. package/lib/components/atoms/icons/SkillsNavIcon.js +7 -4
  14. package/lib/components/atoms/icons/index.js +1 -5
  15. package/lib/components/index.js +2 -1
  16. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +11 -34
  17. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +9 -7
  18. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +8 -4
  19. package/lib/components/molecules/ChatAIMessages/newStyles.js +29 -26
  20. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +23 -60
  21. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +69 -70
  22. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +242 -333
  23. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +104 -131
  24. package/lib/components/molecules/ChatFooter/ChatFooter.js +5 -15
  25. package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +8 -1
  26. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +3 -1
  27. package/lib/components/molecules/Sidebar/Sidebar.js +32 -34
  28. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +2 -2
  29. package/lib/components/molecules/Sidebar/Sidebar.spec.js +22 -2
  30. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +12 -21
  31. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +1 -8
  32. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +184 -430
  33. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +22 -78
  34. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +72 -132
  35. package/lib/components/organisms/ChatAIPage/ChatAIPage.js +486 -0
  36. package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +231 -0
  37. package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +16 -0
  38. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +253 -0
  39. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +139 -0
  40. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +13 -0
  41. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +229 -0
  42. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +142 -0
  43. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +144 -0
  44. package/lib/components/organisms/ChatAIPage/getDaypart.js +9 -0
  45. package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +19 -0
  46. package/lib/components/organisms/ChatAIPage/index.js +3 -0
  47. package/lib/components/organisms/ChatAIPage/pageHomeMockCards.js +17 -0
  48. package/lib/constants/config.js +4 -1
  49. package/lib/constants/permissions/index.js +2 -2
  50. package/lib/constants/permissions/utils.js +6 -3
  51. package/lib/dev/DevMaiaPage.js +30 -0
  52. package/lib/hooks/useAgentModel/useCreateAgent.js +6 -6
  53. package/lib/hooks/useAgentModel/useUpdateAgent.js +6 -6
  54. package/lib/hooks/useChatManager/useChatManager.js +4 -5
  55. package/lib/hooks/useContextMentions.js +56 -96
  56. package/lib/hooks/useEntitySearch.js +278 -92
  57. package/lib/hooks/useEvent.js +2 -15
  58. package/lib/hooks/useEvent.spec.js +2 -7
  59. package/lib/hooks/useIsMaiaPageRoute.js +26 -0
  60. package/lib/hooks/useIsMaiaPageRoute.spec.js +26 -0
  61. package/lib/hooks/useMentionAllowedTypes.js +25 -9
  62. package/lib/hooks/useMentionAllowedTypes.spec.js +15 -4
  63. package/lib/hooks/useMentionPopover.js +33 -9
  64. package/lib/index.js +5 -2
  65. package/lib/lang/br/index.js +32 -39
  66. package/lib/lang/en/index.js +32 -39
  67. package/lib/lang/es/index.js +33 -40
  68. package/lib/lang/fr/index.js +32 -39
  69. package/lib/services/maia/Agents/setAgentToolGroups.js +2 -2
  70. package/lib/services/maia/Agents/setAgentToolGroups.spec.js +3 -3
  71. package/lib/services/maia/Orchestrator/orchestrator.js +3 -6
  72. package/lib/services/maia/Skills/createSkill.js +1 -1
  73. package/lib/services/maia/Skills/createSkill.spec.js +5 -14
  74. package/lib/services/maia/Skills/getSkills.js +40 -70
  75. package/lib/services/maia/Skills/updateSkill.js +1 -1
  76. package/lib/services/maia/Skills/updateSkill.spec.js +4 -11
  77. package/lib/styles/cascade.js +29 -3
  78. package/lib/styles/transitions.js +3 -1
  79. package/lib/types/agentModal.js +1 -1
  80. package/lib/types/global.d.js +1 -1
  81. package/lib/types/skill.js +1 -1
  82. package/lib/utils/contextMentionTriggers.js +5 -2
  83. package/lib/utils/contextMentionTriggers.spec.js +6 -8
  84. package/lib/utils/maiaPageRoute.js +24 -0
  85. package/lib/utils/maiaPageRoute.spec.js +23 -0
  86. package/lib/utils/normalizeAgentConnectors.js +16 -44
  87. package/lib/utils/normalizeAgentConnectors.spec.js +13 -43
  88. package/lib/utils/renderContextMentions.js +18 -39
  89. package/package.json +1 -1
  90. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.js +0 -208
  91. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +0 -107
  92. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.styles.js +0 -77
  93. package/lib/components/atoms/SkillsDropdown/index.js +0 -2
  94. package/lib/components/atoms/icons/PlusIcon.js +0 -29
  95. package/lib/components/atoms/icons/SkillCreatedByIcon.js +0 -20
  96. package/lib/components/atoms/icons/SkillVisibilityEveryoneIcon.js +0 -23
  97. package/lib/components/atoms/icons/SkillVisibilityOnlyMeIcon.js +0 -23
  98. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +0 -77
  99. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +0 -128
  100. package/lib/hooks/useAgentModel/useCreateAgent.spec.js +0 -95
  101. package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +0 -96
  102. package/lib/hooks/useSkillsCatalog.js +0 -66
  103. package/lib/hooks/useSkillsCatalog.spec.js +0 -88
  104. package/lib/services/maia/Orchestrator/orchestrator.spec.js +0 -72
  105. package/lib/services/maia/Skills/getSkills.spec.js +0 -152
@@ -8,61 +8,37 @@ 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';
12
11
  import { useTranslation } from 'react-i18next';
12
+ import { MaiaStreamdown } from '../../atoms/MaiaStreamdown';
13
13
  import { Backdrop } from '../../atoms/Backdrop';
14
14
  import { Loader } from '../../atoms/Loader';
15
- import { Switch } from '../../atoms/Switch';
16
15
  import { SECTIONS } from '../../../constants/config';
17
- import { useUser, isCollaboratorRole } from '../../../context/cor-user';
18
- import { EVENTS, useEvent } from '../../../hooks/useEvent';
16
+ import { useUser } from '../../../context/cor-user';
19
17
  import { useSnackBarManager } from '../../../hooks/useSnackBarManager/useSnackBarManager';
20
- import { formatDate } from '../../../lang/utils';
21
18
  import { createSkill } from '../../../services/maia/Skills/createSkill';
22
19
  import { updateSkill } from '../../../services/maia/Skills/updateSkill';
23
20
  import { deleteSkill } from '../../../services/maia/Skills/deleteSkill';
24
21
  import { getUnitFileSize } from '../../../utils/getUnitFileSize';
25
22
  import { getSkillContentByteLength, isSkillContentOverLimit, SKILL_CONTENT_MAX_BYTES } from '../../../utils/skillContentSize';
26
23
  import { DeleteQuestionModal } from '../DeleteQuestionModal/DeleteQuestionModal';
27
- 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';
28
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
29
- export var SKILL_USE_AFTER_SAVE_EVENT = 'maia-use-skill-after-save';
30
- var resolveSkillAbmOption = function resolveSkillAbmOption(skillValues) {
31
- if (skillValues.isReadOnly) return 'view';
32
- if (skillValues.isEditing) return 'edit';
33
- return 'create';
34
- };
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";
35
26
  var initialValues = {
36
27
  isEditing: false,
37
28
  general: {
38
29
  id: undefined,
39
30
  name: '',
40
- description: '',
41
- content: '',
42
- access_type: 'only_me'
31
+ content: ''
43
32
  }
44
33
  };
45
- var emptyBaseline = {
46
- name: '',
47
- description: '',
48
- content: '',
49
- access_type: 'only_me'
50
- };
51
- var parseDescriptionFromContent = function parseDescriptionFromContent(content) {
52
- var frontmatterMatch = content.match(/^---\s*\n([\s\S]*?)\n---/);
53
- if (!frontmatterMatch) return '';
54
- var descriptionMatch = frontmatterMatch[1].match(/^description:\s*(.+)$/m);
55
- return descriptionMatch ? descriptionMatch[1].trim() : '';
56
- };
57
34
  export var AbmSkillModal = function AbmSkillModal(_ref) {
58
- var _values$general, _values$general2, _values$general3, _values$general4, _values$general5, _values$general7, _values$general0, _values$general1;
35
+ var _user$permissions, _values$general, _values$general2, _values$general3;
59
36
  var addSkill = _ref.addSkill,
60
37
  updateSkillInList = _ref.updateSkillInList,
61
38
  removeSkill = _ref.removeSkill;
62
39
  var _useTranslation = useTranslation([SECTIONS.chatAI]),
63
40
  t = _useTranslation.t;
64
41
  var user = useUser();
65
- var eventAmplitude = useEvent();
66
42
  var _useSnackBarManager = useSnackBarManager(),
67
43
  handleSnackbarSuccess = _useSnackBarManager.handleSnackbarSuccess,
68
44
  handleSnackbarError = _useSnackBarManager.handleSnackbarError;
@@ -80,103 +56,81 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
80
56
  setShowDelete = _useState6[1];
81
57
  var _useState7 = useState(false),
82
58
  _useState8 = _slicedToArray(_useState7, 2),
83
- pendingUpload = _useState8[0],
84
- setPendingUpload = _useState8[1];
85
- var _useState9 = useState(initialValues),
59
+ showPreview = _useState8[0],
60
+ setShowPreview = _useState8[1];
61
+ var _useState9 = useState(false),
86
62
  _useState0 = _slicedToArray(_useState9, 2),
87
- values = _useState0[0],
88
- setValues = _useState0[1];
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];
89
69
  var fileInputRef = useRef(null);
90
- var initialRef = useRef(emptyBaseline);
91
- var isReadOnly = !!values.isReadOnly;
92
- var isSharedSkill = !!values.isShared;
93
- var canShareWithCompany = !isCollaboratorRole(user.role_id) && !isReadOnly;
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"]);
94
80
  var name = ((_values$general = values.general) === null || _values$general === void 0 ? void 0 : _values$general.name) || '';
95
- var description = ((_values$general2 = values.general) === null || _values$general2 === void 0 ? void 0 : _values$general2.description) || '';
96
- var content = ((_values$general3 = values.general) === null || _values$general3 === void 0 ? void 0 : _values$general3.content) || '';
97
- var accessType = ((_values$general4 = values.general) === null || _values$general4 === void 0 ? void 0 : _values$general4.access_type) || 'only_me';
98
- var effectiveAccessType = canShareWithCompany ? accessType : 'only_me';
99
- var skillId = (_values$general5 = values.general) === null || _values$general5 === void 0 ? void 0 : _values$general5.id;
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;
100
83
  var contentBytes = useMemo(function () {
101
84
  return getSkillContentByteLength(content);
102
85
  }, [content]);
103
86
  var isOverLimit = contentBytes > SKILL_CONTENT_MAX_BYTES;
104
87
  var isValid = !!name.trim() && !!content.trim() && !isOverLimit;
105
- var hasChanges = name.trim() !== initialRef.current.name || description.trim() !== initialRef.current.description || content.trim() !== initialRef.current.content || canShareWithCompany && effectiveAccessType !== initialRef.current.access_type;
106
- var createdByLabel = useMemo(function () {
107
- var _values$general6;
108
- 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();
109
- if (createdBy) return createdBy;
110
- return isSharedSkill ? '' : "".concat(user.firstName, " ").concat(user.lastName).trim();
111
- }, [(_values$general7 = values.general) === null || _values$general7 === void 0 ? void 0 : _values$general7.created_by_name, user.firstName, user.lastName, isSharedSkill]);
112
- var lastUpdatedLabel = useMemo(function () {
113
- var _values$general8, _values$general9;
114
- 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);
115
- if (!updatedAt) return '';
116
- var parsed = new Date(updatedAt);
117
- if (Number.isNaN(parsed.getTime())) return '';
118
- return formatDate(parsed);
119
- }, [(_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]);
88
+ var hasChanges = name.trim() !== initialRef.current.name || content.trim() !== initialRef.current.content;
120
89
  var handleClose = useCallback(function () {
121
90
  setIsOpen(false);
122
91
  setShowDelete(false);
92
+ setShowPreview(false);
123
93
  setPendingUpload(false);
124
94
  setValues(initialValues);
125
- initialRef.current = emptyBaseline;
126
95
  }, []);
127
- var handleCancel = useCallback(function () {
128
- eventAmplitude(EVENTS.aiChatSkillAbmCancel, {
129
- option: resolveSkillAbmOption(values)
130
- });
131
- handleClose();
132
- }, [eventAmplitude, handleClose, values]);
133
96
  var handleBackdropClick = useCallback(function (event) {
134
97
  if (event.target === event.currentTarget) {
135
- handleCancel();
98
+ handleClose();
136
99
  }
137
- }, [handleCancel]);
100
+ }, [handleClose]);
138
101
  useEffect(function () {
139
102
  var handleSetSkillValues = function handleSetSkillValues(event) {
140
- var _skillValues$values, _skillValues$values2, _skillValues$values3;
103
+ var _skillValues$values, _skillValues$values2, _skillValues$values3, _skillValues$values4, _skillValues$values5, _skillValues$values6;
141
104
  var _ref2 = event.detail || {},
142
- skillValues = _ref2.skillValues,
143
- analyticsSource = _ref2.analyticsSource;
105
+ skillValues = _ref2.skillValues;
144
106
  if (!skillValues) return;
145
- var incomingGeneral = _objectSpread(_objectSpread({}, initialValues.general), (_skillValues$values = skillValues.values) === null || _skillValues$values === void 0 ? void 0 : _skillValues$values.general);
146
- var incomingName = (incomingGeneral.name || '').trim();
147
- var incomingDescription = (incomingGeneral.description || '').trim();
148
- var incomingContent = (incomingGeneral.content || '').trim();
149
- var incomingAccessType = isCollaboratorRole(user.role_id) ? 'only_me' : incomingGeneral.access_type || 'only_me';
150
- var parsedDescription = incomingDescription || (incomingContent ? parseDescriptionFromContent(incomingContent) : '');
151
- var editingBaseline = {
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 ? {
152
111
  name: incomingName,
153
- description: parsedDescription,
154
- content: incomingContent,
155
- access_type: incomingAccessType
112
+ content: incomingContent
113
+ } : {
114
+ name: '',
115
+ content: ''
156
116
  };
157
- initialRef.current = (_skillValues$values2 = skillValues.values) !== null && _skillValues$values2 !== void 0 && _skillValues$values2.isEditing ? editingBaseline : emptyBaseline;
158
117
  setValues(_objectSpread(_objectSpread(_objectSpread({}, initialValues), skillValues.values), {}, {
159
- general: _objectSpread(_objectSpread({}, incomingGeneral), {}, {
160
- description: parsedDescription,
161
- access_type: incomingAccessType
162
- })
118
+ general: _objectSpread(_objectSpread({}, initialValues.general), (_skillValues$values4 = skillValues.values) === null || _skillValues$values4 === void 0 ? void 0 : _skillValues$values4.general)
163
119
  }));
164
- setPendingUpload(((_skillValues$values3 = skillValues.values) === null || _skillValues$values3 === void 0 ? void 0 : _skillValues$values3.intent) === 'upload');
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');
165
125
  setIsOpen(!!skillValues.isOpen);
166
- if (skillValues.isOpen) {
167
- var incomingValues = _objectSpread(_objectSpread({}, initialValues), skillValues.values);
168
- var source = analyticsSource === 'dropdown' || analyticsSource === 'empty' || analyticsSource === 'catalog' ? analyticsSource : 'catalog';
169
- eventAmplitude(EVENTS.aiChatSkillAbmAccess, {
170
- option: resolveSkillAbmOption(incomingValues),
171
- source: source
172
- });
173
- }
174
126
  };
175
127
  document.addEventListener('abm-skill-modal-set-values', handleSetSkillValues);
176
128
  return function () {
177
129
  document.removeEventListener('abm-skill-modal-set-values', handleSetSkillValues);
178
130
  };
179
- }, [eventAmplitude, user.role_id]);
131
+ }, []);
132
+
133
+ // When opened with the "upload" intent, open the OS file picker once mounted.
180
134
  useEffect(function () {
181
135
  if (isOpen && pendingUpload) {
182
136
  var _fileInputRef$current;
@@ -197,16 +151,6 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
197
151
  });
198
152
  });
199
153
  };
200
- var handleAccessTypeChange = function handleAccessTypeChange(checked) {
201
- if (!canShareWithCompany) return;
202
- setValues(function (prev) {
203
- return _objectSpread(_objectSpread({}, prev), {}, {
204
- general: _objectSpread(_objectSpread({}, prev.general), {}, {
205
- access_type: checked ? 'company' : 'only_me'
206
- })
207
- });
208
- });
209
- };
210
154
  var handleUploadClick = function handleUploadClick() {
211
155
  var _fileInputRef$current2;
212
156
  (_fileInputRef$current2 = fileInputRef.current) === null || _fileInputRef$current2 === void 0 || _fileInputRef$current2.click();
@@ -214,11 +158,11 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
214
158
  var handleFileChange = /*#__PURE__*/function () {
215
159
  var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(event) {
216
160
  var _event$target$files;
217
- var file, isMarkdown, text, baseName, parsedDescription, _t;
161
+ var file, isMarkdown, text, baseName, _t;
218
162
  return _regeneratorRuntime.wrap(function (_context) {
219
163
  while (1) switch (_context.prev = _context.next) {
220
164
  case 0:
221
- file = (_event$target$files = event.target.files) === null || _event$target$files === void 0 ? void 0 : _event$target$files[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.
222
166
  if (fileInputRef.current) {
223
167
  fileInputRef.current.value = '';
224
168
  }
@@ -233,9 +177,6 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
233
177
  _context.next = 2;
234
178
  break;
235
179
  }
236
- eventAmplitude(EVENTS.aiChatSkillUpload, {
237
- result: 'type_error'
238
- });
239
180
  handleSnackbarError(t('mySkills.uploadError'));
240
181
  return _context.abrupt("return");
241
182
  case 2:
@@ -243,9 +184,6 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
243
184
  _context.next = 3;
244
185
  break;
245
186
  }
246
- eventAmplitude(EVENTS.aiChatSkillUpload, {
247
- result: 'size_error'
248
- });
249
187
  handleSnackbarError(t('mySkills.uploadSizeError'));
250
188
  return _context.abrupt("return");
251
189
  case 3:
@@ -258,27 +196,22 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
258
196
  _context.next = 5;
259
197
  break;
260
198
  }
261
- eventAmplitude(EVENTS.aiChatSkillUpload, {
262
- result: 'size_error'
263
- });
264
199
  handleSnackbarError(t('mySkills.uploadSizeError'));
265
200
  return _context.abrupt("return");
266
201
  case 5:
267
202
  baseName = file.name.replace(/\.(md|markdown)$/i, '');
268
- parsedDescription = parseDescriptionFromContent(text);
269
203
  setValues(function (prev) {
270
- var _prev$general, _prev$general2, _prev$general3;
204
+ var _prev$general;
271
205
  return _objectSpread(_objectSpread({}, prev), {}, {
272
206
  general: _objectSpread(_objectSpread({}, prev.general), {}, {
273
207
  content: text,
274
- 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) || '',
275
- 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
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
276
210
  })
277
211
  });
278
212
  });
279
- eventAmplitude(EVENTS.aiChatSkillUpload, {
280
- result: 'success'
281
- });
213
+ // Tras subir un .md mostramos el resultado renderizado por defecto.
214
+ setShowPreview(true);
282
215
  _context.next = 7;
283
216
  break;
284
217
  case 6:
@@ -295,257 +228,106 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
295
228
  return _ref3.apply(this, arguments);
296
229
  };
297
230
  }();
298
- var persistSkill = /*#__PURE__*/function () {
231
+ var handleSave = /*#__PURE__*/function () {
299
232
  var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
300
- var payload, updated, created;
233
+ var updated, created, _t2;
301
234
  return _regeneratorRuntime.wrap(function (_context2) {
302
235
  while (1) switch (_context2.prev = _context2.next) {
303
236
  case 0:
304
- payload = {
305
- name: name.trim(),
306
- description: description.trim(),
307
- content: content.trim(),
308
- access_type: effectiveAccessType
309
- };
310
- if (!(values.isEditing && skillId)) {
311
- _context2.next = 2;
237
+ if (!(!isValid || isSubmitting)) {
238
+ _context2.next = 1;
312
239
  break;
313
240
  }
314
- _context2.next = 1;
315
- return updateSkill(skillId, payload);
241
+ return _context2.abrupt("return");
316
242
  case 1:
317
- updated = _context2.sent;
318
- updateSkillInList === null || updateSkillInList === void 0 || updateSkillInList(updated);
319
- handleSnackbarSuccess(t('mySkills.updateSuccess'));
320
- return _context2.abrupt("return", updated);
321
- case 2:
322
- _context2.next = 3;
323
- return createSkill(payload);
324
- case 3:
325
- created = _context2.sent;
326
- addSkill === null || addSkill === void 0 || addSkill(created);
327
- handleSnackbarSuccess(t('mySkills.createSuccess'));
328
- return _context2.abrupt("return", created);
329
- case 4:
330
- case "end":
331
- return _context2.stop();
332
- }
333
- }, _callee2);
334
- }));
335
- return function persistSkill() {
336
- return _ref4.apply(this, arguments);
337
- };
338
- }();
339
- var handleSave = /*#__PURE__*/function () {
340
- var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
341
- var savedSkill, _t2;
342
- return _regeneratorRuntime.wrap(function (_context3) {
343
- while (1) switch (_context3.prev = _context3.next) {
344
- case 0:
345
- if (!(!isValid || isSubmitting || !hasChanges)) {
346
- _context3.next = 1;
243
+ setIsSubmitting(true);
244
+ _context2.prev = 2;
245
+ if (!(values.isEditing && skillId)) {
246
+ _context2.next = 4;
347
247
  break;
348
248
  }
349
- return _context3.abrupt("return");
350
- case 1:
351
- setIsSubmitting(true);
352
- _context3.prev = 2;
353
- _context3.next = 3;
354
- return persistSkill();
249
+ _context2.next = 3;
250
+ return updateSkill(skillId, {
251
+ name: name.trim(),
252
+ content: content.trim()
253
+ });
355
254
  case 3:
356
- savedSkill = _context3.sent;
357
- if (savedSkill) {
358
- eventAmplitude(EVENTS.aiChatSkillAbmConfirm, {
359
- option: values.isEditing ? 'edit' : 'create',
360
- action: 'save',
361
- access_type: effectiveAccessType,
362
- skill_id: savedSkill.id
363
- });
364
- }
365
- handleClose();
366
- _context3.next = 5;
255
+ updated = _context2.sent;
256
+ updateSkillInList === null || updateSkillInList === void 0 || updateSkillInList(updated);
257
+ handleSnackbarSuccess(t('mySkills.updateSuccess'));
258
+ _context2.next = 6;
367
259
  break;
368
260
  case 4:
369
- _context3.prev = 4;
370
- _t2 = _context3["catch"](2);
371
- handleSnackbarError(values.isEditing ? t('mySkills.updateError') : t('mySkills.createError'));
261
+ _context2.next = 5;
262
+ return createSkill({
263
+ name: name.trim(),
264
+ content: content.trim()
265
+ });
372
266
  case 5:
373
- _context3.prev = 5;
374
- setIsSubmitting(false);
375
- return _context3.finish(5);
267
+ created = _context2.sent;
268
+ addSkill === null || addSkill === void 0 || addSkill(created);
269
+ handleSnackbarSuccess(t('mySkills.createSuccess'));
376
270
  case 6:
377
- case "end":
378
- return _context3.stop();
379
- }
380
- }, _callee3, null, [[2, 4, 5, 6]]);
381
- }));
382
- return function handleSave() {
383
- return _ref5.apply(this, arguments);
384
- };
385
- }();
386
- var handleSaveAndUse = /*#__PURE__*/function () {
387
- var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
388
- var savedSkill, _t3;
389
- return _regeneratorRuntime.wrap(function (_context4) {
390
- while (1) switch (_context4.prev = _context4.next) {
391
- case 0:
392
- if (!(!isValid || isSubmitting)) {
393
- _context4.next = 1;
394
- break;
395
- }
396
- return _context4.abrupt("return");
397
- case 1:
398
- setIsSubmitting(true);
399
- _context4.prev = 2;
400
- _context4.next = 3;
401
- return persistSkill();
402
- case 3:
403
- savedSkill = _context4.sent;
404
- if (savedSkill) {
405
- eventAmplitude(EVENTS.aiChatSkillAbmConfirm, {
406
- option: values.isEditing ? 'edit' : 'create',
407
- action: 'save_and_use',
408
- access_type: effectiveAccessType,
409
- skill_id: savedSkill.id
410
- });
411
- document.dispatchEvent(new CustomEvent(SKILL_USE_AFTER_SAVE_EVENT, {
412
- detail: {
413
- skill: savedSkill
414
- }
415
- }));
416
- }
417
271
  handleClose();
418
- _context4.next = 5;
272
+ _context2.next = 8;
419
273
  break;
420
- case 4:
421
- _context4.prev = 4;
422
- _t3 = _context4["catch"](2);
274
+ case 7:
275
+ _context2.prev = 7;
276
+ _t2 = _context2["catch"](2);
423
277
  handleSnackbarError(values.isEditing ? t('mySkills.updateError') : t('mySkills.createError'));
424
- case 5:
425
- _context4.prev = 5;
278
+ case 8:
279
+ _context2.prev = 8;
426
280
  setIsSubmitting(false);
427
- return _context4.finish(5);
428
- case 6:
281
+ return _context2.finish(8);
282
+ case 9:
429
283
  case "end":
430
- return _context4.stop();
284
+ return _context2.stop();
431
285
  }
432
- }, _callee4, null, [[2, 4, 5, 6]]);
286
+ }, _callee2, null, [[2, 7, 8, 9]]);
433
287
  }));
434
- return function handleSaveAndUse() {
435
- return _ref6.apply(this, arguments);
288
+ return function handleSave() {
289
+ return _ref4.apply(this, arguments);
436
290
  };
437
291
  }();
438
292
  var handleConfirmDelete = /*#__PURE__*/function () {
439
- var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
440
- var _t4;
441
- return _regeneratorRuntime.wrap(function (_context5) {
442
- while (1) switch (_context5.prev = _context5.next) {
293
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
294
+ var _t3;
295
+ return _regeneratorRuntime.wrap(function (_context3) {
296
+ while (1) switch (_context3.prev = _context3.next) {
443
297
  case 0:
444
298
  if (skillId) {
445
- _context5.next = 1;
299
+ _context3.next = 1;
446
300
  break;
447
301
  }
448
- return _context5.abrupt("return");
302
+ return _context3.abrupt("return");
449
303
  case 1:
450
- _context5.prev = 1;
451
- _context5.next = 2;
304
+ _context3.prev = 1;
305
+ _context3.next = 2;
452
306
  return deleteSkill(skillId);
453
307
  case 2:
454
- eventAmplitude(EVENTS.aiChatSkillAbmDelete, {
455
- skill_id: skillId,
456
- source: 'modal'
457
- });
458
308
  removeSkill === null || removeSkill === void 0 || removeSkill(skillId);
459
309
  handleSnackbarSuccess(t('mySkills.deleteSuccess'));
460
310
  handleClose();
461
- _context5.next = 4;
311
+ _context3.next = 4;
462
312
  break;
463
313
  case 3:
464
- _context5.prev = 3;
465
- _t4 = _context5["catch"](1);
314
+ _context3.prev = 3;
315
+ _t3 = _context3["catch"](1);
466
316
  handleSnackbarError(t('mySkills.deleteError'));
467
317
  case 4:
468
318
  case "end":
469
- return _context5.stop();
319
+ return _context3.stop();
470
320
  }
471
- }, _callee5, null, [[1, 3]]);
321
+ }, _callee3, null, [[1, 3]]);
472
322
  }));
473
323
  return function handleConfirmDelete() {
474
- return _ref7.apply(this, arguments);
324
+ return _ref5.apply(this, arguments);
475
325
  };
476
326
  }();
477
- var handleEditFromView = function handleEditFromView() {
478
- setValues(function (prev) {
479
- return _objectSpread(_objectSpread({}, prev), {}, {
480
- isReadOnly: false
481
- });
482
- });
483
- };
484
-
485
- /** Skill ajena en modo lectura: abre un chat nuevo con el primer agente y la mención ya puesta. */
486
- var handleUseSkill = function handleUseSkill() {
487
- if (!skillId) return;
488
- eventAmplitude(EVENTS.aiChatSkillUse, {
489
- skill_id: skillId,
490
- access_type: accessType,
491
- source: 'view_modal',
492
- is_shared: isSharedSkill
493
- });
494
- document.dispatchEvent(new CustomEvent(SKILL_USE_AFTER_SAVE_EVENT, {
495
- detail: {
496
- skill: {
497
- id: skillId,
498
- name: name,
499
- description: description,
500
- content: content,
501
- access_type: accessType
502
- },
503
- useFirstAgent: true
504
- }
505
- }));
506
- handleClose();
507
- };
508
327
  if (!isOpen) return null;
328
+ if (!canCreate && !canEdit && !canDelete) return null;
509
329
  var container = document.getElementById('modal-root-actions');
510
330
  if (!container) return null;
511
- var editOrCreateTitle = values.isEditing ? t('mySkills.editTitle') : t('mySkills.createTitle');
512
- var viewTitle = isSharedSkill ? t('mySkills.viewTitle') : t('mySkills.viewOwnTitle');
513
- var modalTitle = isReadOnly ? viewTitle : editOrCreateTitle;
514
- var previewBody = /*#__PURE__*/_jsxs(SCASMPreviewBody, {
515
- children: [/*#__PURE__*/_jsxs(SCASMPreviewHeadingBlock, {
516
- children: [/*#__PURE__*/_jsx(SCASMPreviewName, {
517
- children: name
518
- }), description ? /*#__PURE__*/_jsx(SCASMPreviewDescription, {
519
- children: description
520
- }) : null]
521
- }), /*#__PURE__*/_jsxs(SCASMPreviewMetadataRow, {
522
- children: [createdByLabel ? /*#__PURE__*/_jsxs(SCASMMetadataItem, {
523
- children: [/*#__PURE__*/_jsx(SCASMPreviewMetadataLabel, {
524
- children: t('mySkills.createdBy')
525
- }), /*#__PURE__*/_jsx(SCASMPreviewMetadataValue, {
526
- children: createdByLabel
527
- })]
528
- }) : null, lastUpdatedLabel ? /*#__PURE__*/_jsxs(SCASMMetadataItem, {
529
- children: [/*#__PURE__*/_jsx(SCASMPreviewMetadataLabel, {
530
- children: t('mySkills.lastUpdated')
531
- }), /*#__PURE__*/_jsx(SCASMPreviewMetadataValue, {
532
- children: lastUpdatedLabel
533
- })]
534
- }) : null, !isSharedSkill ? /*#__PURE__*/_jsxs(SCASMMetadataItem, {
535
- children: [/*#__PURE__*/_jsx(SCASMPreviewMetadataLabel, {
536
- children: t('mySkills.enabledLabel')
537
- }), /*#__PURE__*/_jsx(SCASMPreviewMetadataValue, {
538
- children: accessType === 'company' ? t('mySkills.visibilityEveryone') : t('mySkills.visibilityOnlyMe')
539
- })]
540
- }) : null]
541
- }), /*#__PURE__*/_jsxs(SCASMPreviewContentPanel, {
542
- children: [/*#__PURE__*/_jsx(SCASMInstructionsTitle, {
543
- children: t('mySkills.instructionsLabel')
544
- }), /*#__PURE__*/_jsx(SCASMPreviewContentBox, {
545
- children: content
546
- })]
547
- })]
548
- });
549
331
  return /*#__PURE__*/createPortal(/*#__PURE__*/_jsxs(Backdrop, {
550
332
  zIndex: 1112,
551
333
  onClick: handleBackdropClick,
@@ -555,10 +337,10 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
555
337
  },
556
338
  children: [/*#__PURE__*/_jsxs(SCASMHeader, {
557
339
  children: [/*#__PURE__*/_jsx(SCASMHeaderTitle, {
558
- children: modalTitle
340
+ children: values.isEditing ? t('mySkills.editTitle') : t('mySkills.createTitle')
559
341
  }), /*#__PURE__*/_jsx(SCASMCloseButton, {
560
342
  type: "button",
561
- onClick: handleCancel,
343
+ onClick: handleClose,
562
344
  "aria-label": t('mySkills.close'),
563
345
  children: /*#__PURE__*/_jsx(Cross, {
564
346
  color: "#a6a6a6",
@@ -566,13 +348,12 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
566
348
  height: 18
567
349
  })
568
350
  })]
569
- }), isReadOnly ? previewBody : /*#__PURE__*/_jsxs(SCASMBody, {
570
- children: [/*#__PURE__*/_jsxs(SCASMFieldBox, {
571
- $height: 50,
572
- children: [/*#__PURE__*/_jsx(SCASMFieldLabel, {
351
+ }), /*#__PURE__*/_jsxs(SCASMContent, {
352
+ children: [/*#__PURE__*/_jsxs(SCASMField, {
353
+ children: [/*#__PURE__*/_jsx(SCASMLabel, {
573
354
  htmlFor: "skill-name-input",
574
355
  children: t('mySkills.nameLabel')
575
- }), /*#__PURE__*/_jsx(SCASMFieldInput, {
356
+ }), /*#__PURE__*/_jsx(SCASMInput, {
576
357
  id: "skill-name-input",
577
358
  type: "text",
578
359
  maxLength: 150,
@@ -583,60 +364,55 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
583
364
  return handleChangeField('name', event.target.value);
584
365
  }
585
366
  })]
586
- }), /*#__PURE__*/_jsxs(SCASMFieldBox, {
587
- $height: 120,
588
- $clipOverflow: true,
589
- children: [/*#__PURE__*/_jsx(SCASMFieldLabel, {
590
- htmlFor: "skill-description-input",
591
- children: t('mySkills.descriptionLabel')
592
- }), /*#__PURE__*/_jsx(SCASMFieldTextarea, {
593
- id: "skill-description-input",
594
- maxLength: 500,
595
- placeholder: t('mySkills.descriptionPlaceholder'),
596
- value: description,
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,
597
412
  disabled: isSubmitting,
598
413
  onChange: function onChange(event) {
599
- return handleChangeField('description', event.target.value);
414
+ return handleChangeField('content', event.target.value);
600
415
  }
601
- })]
602
- }), canShareWithCompany ? /*#__PURE__*/_jsxs(SCASMSwitchRow, {
603
- children: [/*#__PURE__*/_jsx(Switch, {
604
- checked: accessType === 'company',
605
- onChange: handleAccessTypeChange,
606
- disabled: isSubmitting,
607
- "aria-label": t('mySkills.shareWithCompany')
608
- }), /*#__PURE__*/_jsx(SCASMSwitchLabel, {
609
- children: t('mySkills.shareWithCompany')
610
- })]
611
- }) : null, /*#__PURE__*/_jsxs(SCASMInstructionsPanel, {
612
- children: [/*#__PURE__*/_jsxs(SCASMInstructionsHeader, {
613
- children: [/*#__PURE__*/_jsx(SCASMInstructionsTitle, {
614
- children: t('mySkills.instructionsLabel')
615
- }), /*#__PURE__*/_jsxs(SCASMUploadButton, {
616
- type: "button",
617
- onClick: handleUploadClick,
618
- disabled: isSubmitting,
619
- children: [/*#__PURE__*/_jsx(FileUpload, {
620
- width: 18,
621
- height: 18,
622
- color: "#08C"
623
- }), t('mySkills.uploadMd')]
624
- }), /*#__PURE__*/_jsx(SCASMHiddenFileInput, {
625
- ref: fileInputRef,
626
- type: "file",
627
- accept: ".md,.markdown,text/markdown",
628
- onChange: handleFileChange
629
- })]
630
- }), /*#__PURE__*/_jsx(SCASMInstructionsField, {
631
- children: /*#__PURE__*/_jsx(SCASMInstructionsTextarea, {
632
- id: "skill-content-input",
633
- placeholder: t('mySkills.contentPlaceholder'),
634
- value: content,
635
- disabled: isSubmitting,
636
- onChange: function onChange(event) {
637
- return handleChangeField('content', event.target.value);
638
- }
639
- })
640
416
  }), /*#__PURE__*/_jsx(SCASMByteCounter, {
641
417
  $overLimit: isOverLimit,
642
418
  "aria-live": "polite",
@@ -647,50 +423,28 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
647
423
  })]
648
424
  })]
649
425
  }), /*#__PURE__*/_jsxs(SCASMFooter, {
650
- children: [isReadOnly && isSharedSkill ? /*#__PURE__*/_jsx(SCASMUseSkillButton, {
651
- type: "button",
652
- onClick: handleUseSkill,
653
- children: t('mySkills.useSkill')
654
- }) : null, isReadOnly && !isSharedSkill ? /*#__PURE__*/_jsxs(_Fragment, {
655
- children: [/*#__PURE__*/_jsx(SCASMDeleteSlot, {
656
- children: /*#__PURE__*/_jsx(SCASMDeleteOutlinedButton, {
657
- type: "button",
658
- onClick: function onClick() {
659
- return setShowDelete(true);
660
- },
661
- children: t('mySkills.delete')
662
- })
663
- }), /*#__PURE__*/_jsx(SCASMSavePrimaryButton, {
664
- type: "button",
665
- onClick: handleEditFromView,
666
- children: t('mySkills.edit')
667
- })]
668
- }) : null, !isReadOnly ? /*#__PURE__*/_jsxs(_Fragment, {
669
- children: [values.isEditing ? /*#__PURE__*/_jsx(SCASMDeleteSlot, {
670
- children: /*#__PURE__*/_jsx(SCASMCancelButton, {
671
- type: "button",
672
- onClick: function onClick() {
673
- return setShowDelete(true);
674
- },
675
- disabled: isSubmitting,
676
- children: t('mySkills.delete')
677
- })
678
- }) : null, /*#__PURE__*/_jsx(SCASMSaveOutlinedButton, {
679
- type: "button",
680
- onClick: handleSaveAndUse,
681
- disabled: !isValid || isSubmitting,
682
- children: isSubmitting ? /*#__PURE__*/_jsx(Loader, {
683
- size: "small"
684
- }) : t('mySkills.saveAndUse')
685
- }), /*#__PURE__*/_jsx(SCASMSavePrimaryButton, {
426
+ children: [values.isEditing && canDelete ? /*#__PURE__*/_jsx(SCASMDeleteSlot, {
427
+ children: /*#__PURE__*/_jsx(SCASMCancelButton, {
686
428
  type: "button",
687
- onClick: handleSave,
688
- disabled: !isValid || isSubmitting || !hasChanges,
689
- children: isSubmitting ? /*#__PURE__*/_jsx(Loader, {
690
- size: "small"
691
- }) : t('mySkills.save')
692
- })]
693
- }) : null]
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, {
441
+ type: "button",
442
+ onClick: handleSave,
443
+ disabled: !isValid || isSubmitting || !hasChanges,
444
+ children: isSubmitting ? /*#__PURE__*/_jsx(Loader, {
445
+ size: "small"
446
+ }) : t('mySkills.save')
447
+ })]
694
448
  })]
695
449
  }), showDelete && skillId ? /*#__PURE__*/_jsx(DeleteQuestionModal, {
696
450
  onClose: function onClose() {
@@ -707,4 +461,4 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
707
461
  }) : null]
708
462
  }), container);
709
463
  };
710
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImNyZWF0ZVBvcnRhbCIsIkNyb3NzIiwiRmlsZVVwbG9hZCIsInVzZVRyYW5zbGF0aW9uIiwiQmFja2Ryb3AiLCJMb2FkZXIiLCJTd2l0Y2giLCJTRUNUSU9OUyIsInVzZVVzZXIiLCJpc0NvbGxhYm9yYXRvclJvbGUiLCJFVkVOVFMiLCJ1c2VFdmVudCIsInVzZVNuYWNrQmFyTWFuYWdlciIsImZvcm1hdERhdGUiLCJjcmVhdGVTa2lsbCIsInVwZGF0ZVNraWxsIiwiZGVsZXRlU2tpbGwiLCJnZXRVbml0RmlsZVNpemUiLCJnZXRTa2lsbENvbnRlbnRCeXRlTGVuZ3RoIiwiaXNTa2lsbENvbnRlbnRPdmVyTGltaXQiLCJTS0lMTF9DT05URU5UX01BWF9CWVRFUyIsIkRlbGV0ZVF1ZXN0aW9uTW9kYWwiLCJTQ0FTTUJ5dGVDb3VudGVyIiwiU0NBU01DYW5jZWxCdXR0b24iLCJTQ0FTTUNsb3NlQnV0dG9uIiwiU0NBU01Cb2R5IiwiU0NBU01EZWxldGVPdXRsaW5lZEJ1dHRvbiIsIlNDQVNNRGVsZXRlU2xvdCIsIlNDQVNNRmllbGRCb3giLCJTQ0FTTUZpZWxkSW5wdXQiLCJTQ0FTTUZpZWxkTGFiZWwiLCJTQ0FTTUZpZWxkVGV4dGFyZWEiLCJTQ0FTTUZvb3RlciIsIlNDQVNNSGVhZGVyIiwiU0NBU01IZWFkZXJUaXRsZSIsIlNDQVNNSGlkZGVuRmlsZUlucHV0IiwiU0NBU01JbnN0cnVjdGlvbnNGaWVsZCIsIlNDQVNNSW5zdHJ1Y3Rpb25zSGVhZGVyIiwiU0NBU01JbnN0cnVjdGlvbnNQYW5lbCIsIlNDQVNNSW5zdHJ1Y3Rpb25zVGV4dGFyZWEiLCJTQ0FTTUluc3RydWN0aW9uc1RpdGxlIiwiU0NBU01NZXRhZGF0YUl0ZW0iLCJTQ0FTTVByZXZpZXdCb2R5IiwiU0NBU01QcmV2aWV3Q29udGVudEJveCIsIlNDQVNNUHJldmlld0NvbnRlbnRQYW5lbCIsIlNDQVNNUHJldmlld0Rlc2NyaXB0aW9uIiwiU0NBU01QcmV2aWV3SGVhZGluZ0Jsb2NrIiwiU0NBU01QcmV2aWV3TWV0YWRhdGFMYWJlbCIsIlNDQVNNUHJldmlld01ldGFkYXRhUm93IiwiU0NBU01QcmV2aWV3TWV0YWRhdGFWYWx1ZSIsIlNDQVNNUHJldmlld05hbWUiLCJTQ0FTTVNhdmVPdXRsaW5lZEJ1dHRvbiIsIlNDQVNNU2F2ZVByaW1hcnlCdXR0b24iLCJTQ0FTTVN3aXRjaExhYmVsIiwiU0NBU01Td2l0Y2hSb3ciLCJTQ0FTTVVwbG9hZEJ1dHRvbiIsIlNDQVNNVXNlU2tpbGxCdXR0b24iLCJTQ0FTTVdyYXBwZXIiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJTS0lMTF9VU0VfQUZURVJfU0FWRV9FVkVOVCIsInJlc29sdmVTa2lsbEFibU9wdGlvbiIsInNraWxsVmFsdWVzIiwiaXNSZWFkT25seSIsImlzRWRpdGluZyIsImluaXRpYWxWYWx1ZXMiLCJnZW5lcmFsIiwiaWQiLCJ1bmRlZmluZWQiLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJjb250ZW50IiwiYWNjZXNzX3R5cGUiLCJlbXB0eUJhc2VsaW5lIiwicGFyc2VEZXNjcmlwdGlvbkZyb21Db250ZW50IiwiZnJvbnRtYXR0ZXJNYXRjaCIsIm1hdGNoIiwiZGVzY3JpcHRpb25NYXRjaCIsInRyaW0iLCJBYm1Ta2lsbE1vZGFsIiwiX3JlZiIsIl92YWx1ZXMkZ2VuZXJhbCIsIl92YWx1ZXMkZ2VuZXJhbDIiLCJfdmFsdWVzJGdlbmVyYWwzIiwiX3ZhbHVlcyRnZW5lcmFsNCIsIl92YWx1ZXMkZ2VuZXJhbDUiLCJfdmFsdWVzJGdlbmVyYWw3IiwiX3ZhbHVlcyRnZW5lcmFsMCIsIl92YWx1ZXMkZ2VuZXJhbDEiLCJhZGRTa2lsbCIsInVwZGF0ZVNraWxsSW5MaXN0IiwicmVtb3ZlU2tpbGwiLCJfdXNlVHJhbnNsYXRpb24iLCJjaGF0QUkiLCJ0IiwidXNlciIsImV2ZW50QW1wbGl0dWRlIiwiX3VzZVNuYWNrQmFyTWFuYWdlciIsImhhbmRsZVNuYWNrYmFyU3VjY2VzcyIsImhhbmRsZVNuYWNrYmFyRXJyb3IiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJpc09wZW4iLCJzZXRJc09wZW4iLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImlzU3VibWl0dGluZyIsInNldElzU3VibWl0dGluZyIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2hvd0RlbGV0ZSIsInNldFNob3dEZWxldGUiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsInBlbmRpbmdVcGxvYWQiLCJzZXRQZW5kaW5nVXBsb2FkIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJ2YWx1ZXMiLCJzZXRWYWx1ZXMiLCJmaWxlSW5wdXRSZWYiLCJpbml0aWFsUmVmIiwiaXNTaGFyZWRTa2lsbCIsImlzU2hhcmVkIiwiY2FuU2hhcmVXaXRoQ29tcGFueSIsInJvbGVfaWQiLCJhY2Nlc3NUeXBlIiwiZWZmZWN0aXZlQWNjZXNzVHlwZSIsInNraWxsSWQiLCJjb250ZW50Qnl0ZXMiLCJpc092ZXJMaW1pdCIsImlzVmFsaWQiLCJoYXNDaGFuZ2VzIiwiY3VycmVudCIsImNyZWF0ZWRCeUxhYmVsIiwiX3ZhbHVlcyRnZW5lcmFsNiIsImNyZWF0ZWRCeSIsImNyZWF0ZWRfYnlfbmFtZSIsImNvbmNhdCIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwibGFzdFVwZGF0ZWRMYWJlbCIsIl92YWx1ZXMkZ2VuZXJhbDgiLCJfdmFsdWVzJGdlbmVyYWw5IiwidXBkYXRlZEF0IiwidXBkYXRlZF9hdCIsImNyZWF0ZWRfYXQiLCJwYXJzZWQiLCJEYXRlIiwiTnVtYmVyIiwiaXNOYU4iLCJnZXRUaW1lIiwiaGFuZGxlQ2xvc2UiLCJoYW5kbGVDYW5jZWwiLCJhaUNoYXRTa2lsbEFibUNhbmNlbCIsIm9wdGlvbiIsImhhbmRsZUJhY2tkcm9wQ2xpY2siLCJldmVudCIsInRhcmdldCIsImN1cnJlbnRUYXJnZXQiLCJoYW5kbGVTZXRTa2lsbFZhbHVlcyIsIl9za2lsbFZhbHVlcyR2YWx1ZXMiLCJfc2tpbGxWYWx1ZXMkdmFsdWVzMiIsIl9za2lsbFZhbHVlcyR2YWx1ZXMzIiwiX3JlZjIiLCJkZXRhaWwiLCJhbmFseXRpY3NTb3VyY2UiLCJpbmNvbWluZ0dlbmVyYWwiLCJfb2JqZWN0U3ByZWFkIiwiaW5jb21pbmdOYW1lIiwiaW5jb21pbmdEZXNjcmlwdGlvbiIsImluY29taW5nQ29udGVudCIsImluY29taW5nQWNjZXNzVHlwZSIsInBhcnNlZERlc2NyaXB0aW9uIiwiZWRpdGluZ0Jhc2VsaW5lIiwiaW50ZW50IiwiaW5jb21pbmdWYWx1ZXMiLCJzb3VyY2UiLCJhaUNoYXRTa2lsbEFibUFjY2VzcyIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfZmlsZUlucHV0UmVmJGN1cnJlbnQiLCJjbGljayIsImhhbmRsZUNoYW5nZUZpZWxkIiwiZmllbGQiLCJ2YWx1ZSIsImxlbmd0aCIsInByZXYiLCJfZGVmaW5lUHJvcGVydHkiLCJoYW5kbGVBY2Nlc3NUeXBlQ2hhbmdlIiwiY2hlY2tlZCIsImhhbmRsZVVwbG9hZENsaWNrIiwiX2ZpbGVJbnB1dFJlZiRjdXJyZW50MiIsImhhbmRsZUZpbGVDaGFuZ2UiLCJfcmVmMyIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiX2V2ZW50JHRhcmdldCRmaWxlcyIsImZpbGUiLCJpc01hcmtkb3duIiwidGV4dCIsImJhc2VOYW1lIiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJuZXh0IiwiZmlsZXMiLCJhYnJ1cHQiLCJ0ZXN0IiwiYWlDaGF0U2tpbGxVcGxvYWQiLCJyZXN1bHQiLCJzaXplIiwic2VudCIsInJlcGxhY2UiLCJfcHJldiRnZW5lcmFsIiwiX3ByZXYkZ2VuZXJhbDIiLCJfcHJldiRnZW5lcmFsMyIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwicGVyc2lzdFNraWxsIiwiX3JlZjQiLCJfY2FsbGVlMiIsInBheWxvYWQiLCJ1cGRhdGVkIiwiY3JlYXRlZCIsIl9jb250ZXh0MiIsImhhbmRsZVNhdmUiLCJfcmVmNSIsIl9jYWxsZWUzIiwic2F2ZWRTa2lsbCIsIl90MiIsIl9jb250ZXh0MyIsImFpQ2hhdFNraWxsQWJtQ29uZmlybSIsImFjdGlvbiIsInNraWxsX2lkIiwiZmluaXNoIiwiaGFuZGxlU2F2ZUFuZFVzZSIsIl9yZWY2IiwiX2NhbGxlZTQiLCJfdDMiLCJfY29udGV4dDQiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJza2lsbCIsImhhbmRsZUNvbmZpcm1EZWxldGUiLCJfcmVmNyIsIl9jYWxsZWU1IiwiX3Q0IiwiX2NvbnRleHQ1IiwiYWlDaGF0U2tpbGxBYm1EZWxldGUiLCJoYW5kbGVFZGl0RnJvbVZpZXciLCJoYW5kbGVVc2VTa2lsbCIsImFpQ2hhdFNraWxsVXNlIiwiaXNfc2hhcmVkIiwidXNlRmlyc3RBZ2VudCIsImNvbnRhaW5lciIsImdldEVsZW1lbnRCeUlkIiwiZWRpdE9yQ3JlYXRlVGl0bGUiLCJ2aWV3VGl0bGUiLCJtb2RhbFRpdGxlIiwicHJldmlld0JvZHkiLCJjaGlsZHJlbiIsInpJbmRleCIsIm9uQ2xpY2siLCJzdG9wUHJvcGFnYXRpb24iLCJ0eXBlIiwiY29sb3IiLCJ3aWR0aCIsImhlaWdodCIsIiRoZWlnaHQiLCJodG1sRm9yIiwibWF4TGVuZ3RoIiwicGxhY2Vob2xkZXIiLCJkaXNhYmxlZCIsIm9uQ2hhbmdlIiwiJGNsaXBPdmVyZmxvdyIsInJlZiIsImFjY2VwdCIsIiRvdmVyTGltaXQiLCJ1c2VkIiwibWF4Iiwib25DbG9zZSIsImhhbmRsZXJzIiwiaGFuZGxlQ29uZmlybUFjdGlvbiIsImNoYXQiLCJ0aXRsZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL29yZ2FuaXNtcy9BYm1Ta2lsbE1vZGFsL0FibVNraWxsTW9kYWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IENoYW5nZUV2ZW50LCBNb3VzZUV2ZW50LCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyBDcm9zcyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0Nyb3NzJ1xuaW1wb3J0IHsgRmlsZVVwbG9hZCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0ZpbGVVcGxvYWQnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyBCYWNrZHJvcCB9IGZyb20gJy4uLy4uL2F0b21zL0JhY2tkcm9wJ1xuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGVyJ1xuaW1wb3J0IHsgU3dpdGNoIH0gZnJvbSAnLi4vLi4vYXRvbXMvU3dpdGNoJ1xuaW1wb3J0IHsgU0VDVElPTlMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvY29uZmlnJ1xuaW1wb3J0IHsgdXNlVXNlciwgaXNDb2xsYWJvcmF0b3JSb2xlIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IHVzZVNuYWNrQmFyTWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVNuYWNrQmFyTWFuYWdlci91c2VTbmFja0Jhck1hbmFnZXInXG5pbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnLi4vLi4vLi4vbGFuZy91dGlscydcbmltcG9ydCB7IGNyZWF0ZVNraWxsIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9Ta2lsbHMvY3JlYXRlU2tpbGwnXG5pbXBvcnQgeyB1cGRhdGVTa2lsbCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvU2tpbGxzL3VwZGF0ZVNraWxsJ1xuaW1wb3J0IHsgZGVsZXRlU2tpbGwgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL1NraWxscy9kZWxldGVTa2lsbCdcbmltcG9ydCB7IFNraWxsLCBTa2lsbEFjY2Vzc1R5cGUgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9za2lsbCdcbmltcG9ydCB7IGdldFVuaXRGaWxlU2l6ZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2dldFVuaXRGaWxlU2l6ZSdcbmltcG9ydCB7XG4gIGdldFNraWxsQ29udGVudEJ5dGVMZW5ndGgsXG4gIGlzU2tpbGxDb250ZW50T3ZlckxpbWl0LFxuICBTS0lMTF9DT05URU5UX01BWF9CWVRFUyxcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvc2tpbGxDb250ZW50U2l6ZSdcbmltcG9ydCB7IERlbGV0ZVF1ZXN0aW9uTW9kYWwgfSBmcm9tICcuLi9EZWxldGVRdWVzdGlvbk1vZGFsL0RlbGV0ZVF1ZXN0aW9uTW9kYWwnXG5pbXBvcnQge1xuICBTQ0FTTUJ5dGVDb3VudGVyLFxuICBTQ0FTTUNhbmNlbEJ1dHRvbixcbiAgU0NBU01DbG9zZUJ1dHRvbixcbiAgU0NBU01Cb2R5LFxuICBTQ0FTTURlbGV0ZU91dGxpbmVkQnV0dG9uLFxuICBTQ0FTTURlbGV0ZVNsb3QsXG4gIFNDQVNNRmllbGRCb3gsXG4gIFNDQVNNRmllbGRJbnB1dCxcbiAgU0NBU01GaWVsZExhYmVsLFxuICBTQ0FTTUZpZWxkVGV4dGFyZWEsXG4gIFNDQVNNRm9vdGVyLFxuICBTQ0FTTUhlYWRlcixcbiAgU0NBU01IZWFkZXJUaXRsZSxcbiAgU0NBU01IaWRkZW5GaWxlSW5wdXQsXG4gIFNDQVNNSW5zdHJ1Y3Rpb25zRmllbGQsXG4gIFNDQVNNSW5zdHJ1Y3Rpb25zSGVhZGVyLFxuICBTQ0FTTUluc3RydWN0aW9uc1BhbmVsLFxuICBTQ0FTTUluc3RydWN0aW9uc1RleHRhcmVhLFxuICBTQ0FTTUluc3RydWN0aW9uc1RpdGxlLFxuICBTQ0FTTU1ldGFkYXRhSXRlbSxcbiAgU0NBU01QcmV2aWV3Qm9keSxcbiAgU0NBU01QcmV2aWV3Q29udGVudEJveCxcbiAgU0NBU01QcmV2aWV3Q29udGVudFBhbmVsLFxuICBTQ0FTTVByZXZpZXdEZXNjcmlwdGlvbixcbiAgU0NBU01QcmV2aWV3SGVhZGluZ0Jsb2NrLFxuICBTQ0FTTVByZXZpZXdNZXRhZGF0YUxhYmVsLFxuICBTQ0FTTVByZXZpZXdNZXRhZGF0YVJvdyxcbiAgU0NBU01QcmV2aWV3TWV0YWRhdGFWYWx1ZSxcbiAgU0NBU01QcmV2aWV3TmFtZSxcbiAgU0NBU01TYXZlT3V0bGluZWRCdXR0b24sXG4gIFNDQVNNU2F2ZVByaW1hcnlCdXR0b24sXG4gIFNDQVNNU3dpdGNoTGFiZWwsXG4gIFNDQVNNU3dpdGNoUm93LFxuICBTQ0FTTVVwbG9hZEJ1dHRvbixcbiAgU0NBU01Vc2VTa2lsbEJ1dHRvbixcbiAgU0NBU01XcmFwcGVyLFxufSBmcm9tICcuL0FibVNraWxsTW9kYWwuc3R5bGVzJ1xuXG5leHBvcnQgY29uc3QgU0tJTExfVVNFX0FGVEVSX1NBVkVfRVZFTlQgPSAnbWFpYS11c2Utc2tpbGwtYWZ0ZXItc2F2ZSdcblxudHlwZSBTa2lsbE1vZGFsR2VuZXJhbCA9IHtcbiAgaWQ/OiBzdHJpbmdcbiAgbmFtZT86IHN0cmluZ1xuICBkZXNjcmlwdGlvbj86IHN0cmluZ1xuICBjb250ZW50Pzogc3RyaW5nXG4gIGFjY2Vzc190eXBlPzogU2tpbGxBY2Nlc3NUeXBlXG4gIGNyZWF0ZWRfYnlfbmFtZT86IHN0cmluZ1xuICBjcmVhdGVkX2F0Pzogc3RyaW5nXG4gIHVwZGF0ZWRfYXQ/OiBzdHJpbmdcbn1cblxudHlwZSBTa2lsbE1vZGFsVmFsdWVzID0ge1xuICBpc0VkaXRpbmc6IGJvb2xlYW5cbiAgaXNSZWFkT25seT86IGJvb2xlYW5cbiAgaXNTaGFyZWQ/OiBib29sZWFuXG4gIGludGVudD86ICdnZW5lcmF0ZScgfCAnd3JpdGUnIHwgJ3VwbG9hZCdcbiAgZ2VuZXJhbD86IFNraWxsTW9kYWxHZW5lcmFsXG59XG5cbnR5cGUgU2tpbGxBYm1PcHRpb24gPSAnY3JlYXRlJyB8ICdlZGl0JyB8ICd2aWV3J1xudHlwZSBTa2lsbEFibUFjY2Vzc1NvdXJjZSA9ICdjYXRhbG9nJyB8ICdkcm9wZG93bicgfCAnZW1wdHknXG5cbmNvbnN0IHJlc29sdmVTa2lsbEFibU9wdGlvbiA9IChza2lsbFZhbHVlczogU2tpbGxNb2RhbFZhbHVlcyk6IFNraWxsQWJtT3B0aW9uID0+IHtcbiAgaWYgKHNraWxsVmFsdWVzLmlzUmVhZE9ubHkpIHJldHVybiAndmlldydcbiAgaWYgKHNraWxsVmFsdWVzLmlzRWRpdGluZykgcmV0dXJuICdlZGl0J1xuICByZXR1cm4gJ2NyZWF0ZSdcbn1cblxudHlwZSBBYm1Ta2lsbE1vZGFsUHJvcHMgPSB7XG4gIGFkZFNraWxsPzogKHNraWxsOiBTa2lsbCkgPT4gdm9pZFxuICB1cGRhdGVTa2lsbEluTGlzdD86IChza2lsbDogU2tpbGwpID0+IHZvaWRcbiAgcmVtb3ZlU2tpbGw/OiAoc2tpbGxJZDogc3RyaW5nKSA9PiB2b2lkXG59XG5cbmNvbnN0IGluaXRpYWxWYWx1ZXM6IFNraWxsTW9kYWxWYWx1ZXMgPSB7XG4gIGlzRWRpdGluZzogZmFsc2UsXG4gIGdlbmVyYWw6IHtcbiAgICBpZDogdW5kZWZpbmVkLFxuICAgIG5hbWU6ICcnLFxuICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICBjb250ZW50OiAnJyxcbiAgICBhY2Nlc3NfdHlwZTogJ29ubHlfbWUnLFxuICB9LFxufVxuXG50eXBlIFNraWxsRm9ybUJhc2VsaW5lID0ge1xuICBuYW1lOiBzdHJpbmdcbiAgZGVzY3JpcHRpb246IHN0cmluZ1xuICBjb250ZW50OiBzdHJpbmdcbiAgYWNjZXNzX3R5cGU6IFNraWxsQWNjZXNzVHlwZVxufVxuXG5jb25zdCBlbXB0eUJhc2VsaW5lOiBTa2lsbEZvcm1CYXNlbGluZSA9IHtcbiAgbmFtZTogJycsXG4gIGRlc2NyaXB0aW9uOiAnJyxcbiAgY29udGVudDogJycsXG4gIGFjY2Vzc190eXBlOiAnb25seV9tZScsXG59XG5cbmNvbnN0IHBhcnNlRGVzY3JpcHRpb25Gcm9tQ29udGVudCA9IChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBmcm9udG1hdHRlck1hdGNoID0gY29udGVudC5tYXRjaCgvXi0tLVxccypcXG4oW1xcc1xcU10qPylcXG4tLS0vKVxuICBpZiAoIWZyb250bWF0dGVyTWF0Y2gpIHJldHVybiAnJ1xuICBjb25zdCBkZXNjcmlwdGlvbk1hdGNoID0gZnJvbnRtYXR0ZXJNYXRjaFsxXS5tYXRjaCgvXmRlc2NyaXB0aW9uOlxccyooLispJC9tKVxuICByZXR1cm4gZGVzY3JpcHRpb25NYXRjaCA/IGRlc2NyaXB0aW9uTWF0Y2hbMV0udHJpbSgpIDogJydcbn1cblxuZXhwb3J0IGNvbnN0IEFibVNraWxsTW9kYWwgPSAoeyBhZGRTa2lsbCwgdXBkYXRlU2tpbGxJbkxpc3QsIHJlbW92ZVNraWxsIH06IEFibVNraWxsTW9kYWxQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKFtTRUNUSU9OUy5jaGF0QUldKVxuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IGV2ZW50QW1wbGl0dWRlID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IGhhbmRsZVNuYWNrYmFyU3VjY2VzcywgaGFuZGxlU25hY2tiYXJFcnJvciB9ID0gdXNlU25hY2tCYXJNYW5hZ2VyKClcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaXNTdWJtaXR0aW5nLCBzZXRJc1N1Ym1pdHRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93RGVsZXRlLCBzZXRTaG93RGVsZXRlXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbcGVuZGluZ1VwbG9hZCwgc2V0UGVuZGluZ1VwbG9hZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3ZhbHVlcywgc2V0VmFsdWVzXSA9IHVzZVN0YXRlPFNraWxsTW9kYWxWYWx1ZXM+KGluaXRpYWxWYWx1ZXMpXG4gIGNvbnN0IGZpbGVJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuICBjb25zdCBpbml0aWFsUmVmID0gdXNlUmVmPFNraWxsRm9ybUJhc2VsaW5lPihlbXB0eUJhc2VsaW5lKVxuXG4gIGNvbnN0IGlzUmVhZE9ubHkgPSAhIXZhbHVlcy5pc1JlYWRPbmx5XG4gIGNvbnN0IGlzU2hhcmVkU2tpbGwgPSAhIXZhbHVlcy5pc1NoYXJlZFxuICBjb25zdCBjYW5TaGFyZVdpdGhDb21wYW55ID0gIWlzQ29sbGFib3JhdG9yUm9sZSh1c2VyLnJvbGVfaWQpICYmICFpc1JlYWRPbmx5XG5cbiAgY29uc3QgbmFtZSA9IHZhbHVlcy5nZW5lcmFsPy5uYW1lIHx8ICcnXG4gIGNvbnN0IGRlc2NyaXB0aW9uID0gdmFsdWVzLmdlbmVyYWw/LmRlc2NyaXB0aW9uIHx8ICcnXG4gIGNvbnN0IGNvbnRlbnQgPSB2YWx1ZXMuZ2VuZXJhbD8uY29udGVudCB8fCAnJ1xuICBjb25zdCBhY2Nlc3NUeXBlOiBTa2lsbEFjY2Vzc1R5cGUgPSB2YWx1ZXMuZ2VuZXJhbD8uYWNjZXNzX3R5cGUgfHwgJ29ubHlfbWUnXG4gIGNvbnN0IGVmZmVjdGl2ZUFjY2Vzc1R5cGU6IFNraWxsQWNjZXNzVHlwZSA9IGNhblNoYXJlV2l0aENvbXBhbnkgPyBhY2Nlc3NUeXBlIDogJ29ubHlfbWUnXG4gIGNvbnN0IHNraWxsSWQgPSB2YWx1ZXMuZ2VuZXJhbD8uaWRcbiAgY29uc3QgY29udGVudEJ5dGVzID0gdXNlTWVtbygoKSA9PiBnZXRTa2lsbENvbnRlbnRCeXRlTGVuZ3RoKGNvbnRlbnQpLCBbY29udGVudF0pXG4gIGNvbnN0IGlzT3ZlckxpbWl0ID0gY29udGVudEJ5dGVzID4gU0tJTExfQ09OVEVOVF9NQVhfQllURVNcbiAgY29uc3QgaXNWYWxpZCA9ICEhbmFtZS50cmltKCkgJiYgISFjb250ZW50LnRyaW0oKSAmJiAhaXNPdmVyTGltaXRcbiAgY29uc3QgaGFzQ2hhbmdlcyA9XG4gICAgbmFtZS50cmltKCkgIT09IGluaXRpYWxSZWYuY3VycmVudC5uYW1lIHx8XG4gICAgZGVzY3JpcHRpb24udHJpbSgpICE9PSBpbml0aWFsUmVmLmN1cnJlbnQuZGVzY3JpcHRpb24gfHxcbiAgICBjb250ZW50LnRyaW0oKSAhPT0gaW5pdGlhbFJlZi5jdXJyZW50LmNvbnRlbnQgfHxcbiAgICAoY2FuU2hhcmVXaXRoQ29tcGFueSAmJiBlZmZlY3RpdmVBY2Nlc3NUeXBlICE9PSBpbml0aWFsUmVmLmN1cnJlbnQuYWNjZXNzX3R5cGUpXG5cbiAgY29uc3QgY3JlYXRlZEJ5TGFiZWwgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBjcmVhdGVkQnkgPSB2YWx1ZXMuZ2VuZXJhbD8uY3JlYXRlZF9ieV9uYW1lPy50cmltKClcbiAgICBpZiAoY3JlYXRlZEJ5KSByZXR1cm4gY3JlYXRlZEJ5XG4gICAgcmV0dXJuIGlzU2hhcmVkU2tpbGwgPyAnJyA6IGAke3VzZXIuZmlyc3ROYW1lfSAke3VzZXIubGFzdE5hbWV9YC50cmltKClcbiAgfSwgW3ZhbHVlcy5nZW5lcmFsPy5jcmVhdGVkX2J5X25hbWUsIHVzZXIuZmlyc3ROYW1lLCB1c2VyLmxhc3ROYW1lLCBpc1NoYXJlZFNraWxsXSlcblxuICBjb25zdCBsYXN0VXBkYXRlZExhYmVsID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgdXBkYXRlZEF0ID0gdmFsdWVzLmdlbmVyYWw/LnVwZGF0ZWRfYXQgfHwgdmFsdWVzLmdlbmVyYWw/LmNyZWF0ZWRfYXRcbiAgICBpZiAoIXVwZGF0ZWRBdCkgcmV0dXJuICcnXG4gICAgY29uc3QgcGFyc2VkID0gbmV3IERhdGUodXBkYXRlZEF0KVxuICAgIGlmIChOdW1iZXIuaXNOYU4ocGFyc2VkLmdldFRpbWUoKSkpIHJldHVybiAnJ1xuICAgIHJldHVybiBmb3JtYXREYXRlKHBhcnNlZClcbiAgfSwgW3ZhbHVlcy5nZW5lcmFsPy51cGRhdGVkX2F0LCB2YWx1ZXMuZ2VuZXJhbD8uY3JlYXRlZF9hdF0pXG5cbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SXNPcGVuKGZhbHNlKVxuICAgIHNldFNob3dEZWxldGUoZmFsc2UpXG4gICAgc2V0UGVuZGluZ1VwbG9hZChmYWxzZSlcbiAgICBzZXRWYWx1ZXMoaW5pdGlhbFZhbHVlcylcbiAgICBpbml0aWFsUmVmLmN1cnJlbnQgPSBlbXB0eUJhc2VsaW5lXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZUNhbmNlbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0U2tpbGxBYm1DYW5jZWwsIHsgb3B0aW9uOiByZXNvbHZlU2tpbGxBYm1PcHRpb24odmFsdWVzKSB9KVxuICAgIGhhbmRsZUNsb3NlKClcbiAgfSwgW2V2ZW50QW1wbGl0dWRlLCBoYW5kbGVDbG9zZSwgdmFsdWVzXSlcblxuICBjb25zdCBoYW5kbGVCYWNrZHJvcENsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0KSB7XG4gICAgICAgIGhhbmRsZUNhbmNlbCgpXG4gICAgICB9XG4gICAgfSxcbiAgICBbaGFuZGxlQ2FuY2VsXVxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVTZXRTa2lsbFZhbHVlcyA9IChldmVudDogYW55KSA9PiB7XG4gICAgICBjb25zdCB7IHNraWxsVmFsdWVzLCBhbmFseXRpY3NTb3VyY2UgfSA9IGV2ZW50LmRldGFpbCB8fCB7fVxuICAgICAgaWYgKCFza2lsbFZhbHVlcykgcmV0dXJuXG5cbiAgICAgIGNvbnN0IGluY29taW5nR2VuZXJhbCA9IHtcbiAgICAgICAgLi4uaW5pdGlhbFZhbHVlcy5nZW5lcmFsLFxuICAgICAgICAuLi5za2lsbFZhbHVlcy52YWx1ZXM/LmdlbmVyYWwsXG4gICAgICB9XG4gICAgICBjb25zdCBpbmNvbWluZ05hbWUgPSAoaW5jb21pbmdHZW5lcmFsLm5hbWUgfHwgJycpLnRyaW0oKVxuICAgICAgY29uc3QgaW5jb21pbmdEZXNjcmlwdGlvbiA9IChpbmNvbWluZ0dlbmVyYWwuZGVzY3JpcHRpb24gfHwgJycpLnRyaW0oKVxuICAgICAgY29uc3QgaW5jb21pbmdDb250ZW50ID0gKGluY29taW5nR2VuZXJhbC5jb250ZW50IHx8ICcnKS50cmltKClcbiAgICAgIGNvbnN0IGluY29taW5nQWNjZXNzVHlwZTogU2tpbGxBY2Nlc3NUeXBlID0gaXNDb2xsYWJvcmF0b3JSb2xlKHVzZXIucm9sZV9pZClcbiAgICAgICAgPyAnb25seV9tZSdcbiAgICAgICAgOiBpbmNvbWluZ0dlbmVyYWwuYWNjZXNzX3R5cGUgfHwgJ29ubHlfbWUnXG4gICAgICBjb25zdCBwYXJzZWREZXNjcmlwdGlvbiA9XG4gICAgICAgIGluY29taW5nRGVzY3JpcHRpb24gfHwgKGluY29taW5nQ29udGVudCA/IHBhcnNlRGVzY3JpcHRpb25Gcm9tQ29udGVudChpbmNvbWluZ0NvbnRlbnQpIDogJycpXG5cbiAgICAgIGNvbnN0IGVkaXRpbmdCYXNlbGluZTogU2tpbGxGb3JtQmFzZWxpbmUgPSB7XG4gICAgICAgIG5hbWU6IGluY29taW5nTmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHBhcnNlZERlc2NyaXB0aW9uLFxuICAgICAgICBjb250ZW50OiBpbmNvbWluZ0NvbnRlbnQsXG4gICAgICAgIGFjY2Vzc190eXBlOiBpbmNvbWluZ0FjY2Vzc1R5cGUsXG4gICAgICB9XG4gICAgICBpbml0aWFsUmVmLmN1cnJlbnQgPSBza2lsbFZhbHVlcy52YWx1ZXM/LmlzRWRpdGluZyA/IGVkaXRpbmdCYXNlbGluZSA6IGVtcHR5QmFzZWxpbmVcblxuICAgICAgc2V0VmFsdWVzKHtcbiAgICAgICAgLi4uaW5pdGlhbFZhbHVlcyxcbiAgICAgICAgLi4uc2tpbGxWYWx1ZXMudmFsdWVzLFxuICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgLi4uaW5jb21pbmdHZW5lcmFsLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBwYXJzZWREZXNjcmlwdGlvbixcbiAgICAgICAgICBhY2Nlc3NfdHlwZTogaW5jb21pbmdBY2Nlc3NUeXBlLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIHNldFBlbmRpbmdVcGxvYWQoc2tpbGxWYWx1ZXMudmFsdWVzPy5pbnRlbnQgPT09ICd1cGxvYWQnKVxuICAgICAgc2V0SXNPcGVuKCEhc2tpbGxWYWx1ZXMuaXNPcGVuKVxuXG4gICAgICBpZiAoc2tpbGxWYWx1ZXMuaXNPcGVuKSB7XG4gICAgICAgIGNvbnN0IGluY29taW5nVmFsdWVzID0geyAuLi5pbml0aWFsVmFsdWVzLCAuLi5za2lsbFZhbHVlcy52YWx1ZXMgfVxuICAgICAgICBjb25zdCBzb3VyY2U6IFNraWxsQWJtQWNjZXNzU291cmNlID1cbiAgICAgICAgICBhbmFseXRpY3NTb3VyY2UgPT09ICdkcm9wZG93bicgfHwgYW5hbHl0aWNzU291cmNlID09PSAnZW1wdHknIHx8IGFuYWx5dGljc1NvdXJjZSA9PT0gJ2NhdGFsb2cnXG4gICAgICAgICAgICA/IGFuYWx5dGljc1NvdXJjZVxuICAgICAgICAgICAgOiAnY2F0YWxvZydcbiAgICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFNraWxsQWJtQWNjZXNzLCB7XG4gICAgICAgICAgb3B0aW9uOiByZXNvbHZlU2tpbGxBYm1PcHRpb24oaW5jb21pbmdWYWx1ZXMpLFxuICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdhYm0tc2tpbGwtbW9kYWwtc2V0LXZhbHVlcycsIGhhbmRsZVNldFNraWxsVmFsdWVzKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm0tc2tpbGwtbW9kYWwtc2V0LXZhbHVlcycsIGhhbmRsZVNldFNraWxsVmFsdWVzKVxuICAgIH1cbiAgfSwgW2V2ZW50QW1wbGl0dWRlLCB1c2VyLnJvbGVfaWRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzT3BlbiAmJiBwZW5kaW5nVXBsb2FkKSB7XG4gICAgICBzZXRQZW5kaW5nVXBsb2FkKGZhbHNlKVxuICAgICAgZmlsZUlucHV0UmVmLmN1cnJlbnQ/LmNsaWNrKClcbiAgICB9XG4gIH0sIFtpc09wZW4sIHBlbmRpbmdVcGxvYWRdKVxuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZUZpZWxkID0gKGZpZWxkOiAnbmFtZScgfCAnZGVzY3JpcHRpb24nIHwgJ2NvbnRlbnQnLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGZpZWxkID09PSAnY29udGVudCcgJiYgaXNTa2lsbENvbnRlbnRPdmVyTGltaXQodmFsdWUpKSB7XG4gICAgICBpZiAodmFsdWUubGVuZ3RoIC0gY29udGVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnbXlTa2lsbHMuY29udGVudFNpemVFcnJvcicpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNldFZhbHVlcyhwcmV2ID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgZ2VuZXJhbDogeyAuLi5wcmV2LmdlbmVyYWwsIFtmaWVsZF06IHZhbHVlIH0sXG4gICAgfSkpXG4gIH1cblxuICBjb25zdCBoYW5kbGVBY2Nlc3NUeXBlQ2hhbmdlID0gKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHtcbiAgICBpZiAoIWNhblNoYXJlV2l0aENvbXBhbnkpIHJldHVyblxuICAgIHNldFZhbHVlcyhwcmV2ID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgZ2VuZXJhbDoge1xuICAgICAgICAuLi5wcmV2LmdlbmVyYWwsXG4gICAgICAgIGFjY2Vzc190eXBlOiBjaGVja2VkID8gJ2NvbXBhbnknIDogJ29ubHlfbWUnLFxuICAgICAgfSxcbiAgICB9KSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVVwbG9hZENsaWNrID0gKCkgPT4ge1xuICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpXG4gIH1cblxuICBjb25zdCBoYW5kbGVGaWxlQ2hhbmdlID0gYXN5bmMgKGV2ZW50OiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXM/LlswXVxuICAgIGlmIChmaWxlSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgZmlsZUlucHV0UmVmLmN1cnJlbnQudmFsdWUgPSAnJ1xuICAgIH1cbiAgICBpZiAoIWZpbGUpIHJldHVyblxuXG4gICAgY29uc3QgaXNNYXJrZG93biA9IC9cXC4obWR8bWFya2Rvd24pJC9pLnRlc3QoZmlsZS5uYW1lKVxuICAgIGlmICghaXNNYXJrZG93bikge1xuICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFNraWxsVXBsb2FkLCB7IHJlc3VsdDogJ3R5cGVfZXJyb3InIH0pXG4gICAgICBoYW5kbGVTbmFja2JhckVycm9yKHQoJ215U2tpbGxzLnVwbG9hZEVycm9yJykpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoZmlsZS5zaXplID4gU0tJTExfQ09OVEVOVF9NQVhfQllURVMpIHtcbiAgICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRTa2lsbFVwbG9hZCwgeyByZXN1bHQ6ICdzaXplX2Vycm9yJyB9KVxuICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdteVNraWxscy51cGxvYWRTaXplRXJyb3InKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgZmlsZS50ZXh0KClcbiAgICAgIGlmIChpc1NraWxsQ29udGVudE92ZXJMaW1pdCh0ZXh0KSkge1xuICAgICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0U2tpbGxVcGxvYWQsIHsgcmVzdWx0OiAnc2l6ZV9lcnJvcicgfSlcbiAgICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdteVNraWxscy51cGxvYWRTaXplRXJyb3InKSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCBiYXNlTmFtZSA9IGZpbGUubmFtZS5yZXBsYWNlKC9cXC4obWR8bWFya2Rvd24pJC9pLCAnJylcbiAgICAgIGNvbnN0IHBhcnNlZERlc2NyaXB0aW9uID0gcGFyc2VEZXNjcmlwdGlvbkZyb21Db250ZW50KHRleHQpXG4gICAgICBzZXRWYWx1ZXMocHJldiA9PiAoe1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgLi4ucHJldi5nZW5lcmFsLFxuICAgICAgICAgIGNvbnRlbnQ6IHRleHQsXG4gICAgICAgICAgZGVzY3JpcHRpb246IHByZXYuZ2VuZXJhbD8uZGVzY3JpcHRpb24/LnRyaW0oKVxuICAgICAgICAgICAgPyBwcmV2LmdlbmVyYWwuZGVzY3JpcHRpb25cbiAgICAgICAgICAgIDogcGFyc2VkRGVzY3JpcHRpb24gfHwgcHJldi5nZW5lcmFsPy5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgICBuYW1lOiBwcmV2LmdlbmVyYWw/Lm5hbWU/LnRyaW0oKSA/IHByZXYuZ2VuZXJhbC5uYW1lIDogYmFzZU5hbWUsXG4gICAgICAgIH0sXG4gICAgICB9KSlcbiAgICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRTa2lsbFVwbG9hZCwgeyByZXN1bHQ6ICdzdWNjZXNzJyB9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBoYW5kbGVTbmFja2JhckVycm9yKHQoJ215U2tpbGxzLnVwbG9hZEVycm9yJykpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgcGVyc2lzdFNraWxsID0gYXN5bmMgKCk6IFByb21pc2U8U2tpbGwgfCBudWxsPiA9PiB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIG5hbWU6IG5hbWUudHJpbSgpLFxuICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLnRyaW0oKSxcbiAgICAgIGNvbnRlbnQ6IGNvbnRlbnQudHJpbSgpLFxuICAgICAgYWNjZXNzX3R5cGU6IGVmZmVjdGl2ZUFjY2Vzc1R5cGUsXG4gICAgfVxuXG4gICAgaWYgKHZhbHVlcy5pc0VkaXRpbmcgJiYgc2tpbGxJZCkge1xuICAgICAgY29uc3QgdXBkYXRlZCA9IGF3YWl0IHVwZGF0ZVNraWxsKHNraWxsSWQsIHBheWxvYWQpXG4gICAgICB1cGRhdGVTa2lsbEluTGlzdD8uKHVwZGF0ZWQpXG4gICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnbXlTa2lsbHMudXBkYXRlU3VjY2VzcycpKVxuICAgICAgcmV0dXJuIHVwZGF0ZWRcbiAgICB9XG5cbiAgICBjb25zdCBjcmVhdGVkID0gYXdhaXQgY3JlYXRlU2tpbGwocGF5bG9hZClcbiAgICBhZGRTa2lsbD8uKGNyZWF0ZWQpXG4gICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ215U2tpbGxzLmNyZWF0ZVN1Y2Nlc3MnKSlcbiAgICByZXR1cm4gY3JlYXRlZFxuICB9XG5cbiAgY29uc3QgaGFuZGxlU2F2ZSA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWlzVmFsaWQgfHwgaXNTdWJtaXR0aW5nIHx8ICFoYXNDaGFuZ2VzKSByZXR1cm5cbiAgICBzZXRJc1N1Ym1pdHRpbmcodHJ1ZSlcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2F2ZWRTa2lsbCA9IGF3YWl0IHBlcnNpc3RTa2lsbCgpXG4gICAgICBpZiAoc2F2ZWRTa2lsbCkge1xuICAgICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0U2tpbGxBYm1Db25maXJtLCB7XG4gICAgICAgICAgb3B0aW9uOiB2YWx1ZXMuaXNFZGl0aW5nID8gJ2VkaXQnIDogJ2NyZWF0ZScsXG4gICAgICAgICAgYWN0aW9uOiAnc2F2ZScsXG4gICAgICAgICAgYWNjZXNzX3R5cGU6IGVmZmVjdGl2ZUFjY2Vzc1R5cGUsXG4gICAgICAgICAgc2tpbGxfaWQ6IHNhdmVkU2tpbGwuaWQsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBoYW5kbGVDbG9zZSgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodmFsdWVzLmlzRWRpdGluZyA/IHQoJ215U2tpbGxzLnVwZGF0ZUVycm9yJykgOiB0KCdteVNraWxscy5jcmVhdGVFcnJvcicpKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJc1N1Ym1pdHRpbmcoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlU2F2ZUFuZFVzZSA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWlzVmFsaWQgfHwgaXNTdWJtaXR0aW5nKSByZXR1cm5cbiAgICBzZXRJc1N1Ym1pdHRpbmcodHJ1ZSlcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2F2ZWRTa2lsbCA9IGF3YWl0IHBlcnNpc3RTa2lsbCgpXG4gICAgICBpZiAoc2F2ZWRTa2lsbCkge1xuICAgICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0U2tpbGxBYm1Db25maXJtLCB7XG4gICAgICAgICAgb3B0aW9uOiB2YWx1ZXMuaXNFZGl0aW5nID8gJ2VkaXQnIDogJ2NyZWF0ZScsXG4gICAgICAgICAgYWN0aW9uOiAnc2F2ZV9hbmRfdXNlJyxcbiAgICAgICAgICBhY2Nlc3NfdHlwZTogZWZmZWN0aXZlQWNjZXNzVHlwZSxcbiAgICAgICAgICBza2lsbF9pZDogc2F2ZWRTa2lsbC5pZCxcbiAgICAgICAgfSlcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoU0tJTExfVVNFX0FGVEVSX1NBVkVfRVZFTlQsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBza2lsbDogc2F2ZWRTa2lsbCB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih2YWx1ZXMuaXNFZGl0aW5nID8gdCgnbXlTa2lsbHMudXBkYXRlRXJyb3InKSA6IHQoJ215U2tpbGxzLmNyZWF0ZUVycm9yJykpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzU3VibWl0dGluZyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVDb25maXJtRGVsZXRlID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghc2tpbGxJZCkgcmV0dXJuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRlbGV0ZVNraWxsKHNraWxsSWQpXG4gICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0U2tpbGxBYm1EZWxldGUsIHsgc2tpbGxfaWQ6IHNraWxsSWQsIHNvdXJjZTogJ21vZGFsJyB9KVxuICAgICAgcmVtb3ZlU2tpbGw/Lihza2lsbElkKVxuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ215U2tpbGxzLmRlbGV0ZVN1Y2Nlc3MnKSlcbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdteVNraWxscy5kZWxldGVFcnJvcicpKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUVkaXRGcm9tVmlldyA9ICgpID0+IHtcbiAgICBzZXRWYWx1ZXMocHJldiA9PiAoeyAuLi5wcmV2LCBpc1JlYWRPbmx5OiBmYWxzZSB9KSlcbiAgfVxuXG4gIC8qKiBTa2lsbCBhamVuYSBlbiBtb2RvIGxlY3R1cmE6IGFicmUgdW4gY2hhdCBudWV2byBjb24gZWwgcHJpbWVyIGFnZW50ZSB5IGxhIG1lbmNpw7NuIHlhIHB1ZXN0YS4gKi9cbiAgY29uc3QgaGFuZGxlVXNlU2tpbGwgPSAoKSA9PiB7XG4gICAgaWYgKCFza2lsbElkKSByZXR1cm5cbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0U2tpbGxVc2UsIHtcbiAgICAgIHNraWxsX2lkOiBza2lsbElkLFxuICAgICAgYWNjZXNzX3R5cGU6IGFjY2Vzc1R5cGUsXG4gICAgICBzb3VyY2U6ICd2aWV3X21vZGFsJyxcbiAgICAgIGlzX3NoYXJlZDogaXNTaGFyZWRTa2lsbCxcbiAgICB9KVxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoU0tJTExfVVNFX0FGVEVSX1NBVkVfRVZFTlQsIHtcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgc2tpbGw6IHsgaWQ6IHNraWxsSWQsIG5hbWUsIGRlc2NyaXB0aW9uLCBjb250ZW50LCBhY2Nlc3NfdHlwZTogYWNjZXNzVHlwZSB9LFxuICAgICAgICAgIHVzZUZpcnN0QWdlbnQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIClcbiAgICBoYW5kbGVDbG9zZSgpXG4gIH1cblxuICBpZiAoIWlzT3BlbikgcmV0dXJuIG51bGxcblxuICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWwtcm9vdC1hY3Rpb25zJylcbiAgaWYgKCFjb250YWluZXIpIHJldHVybiBudWxsXG5cbiAgY29uc3QgZWRpdE9yQ3JlYXRlVGl0bGUgPSB2YWx1ZXMuaXNFZGl0aW5nID8gdCgnbXlTa2lsbHMuZWRpdFRpdGxlJykgOiB0KCdteVNraWxscy5jcmVhdGVUaXRsZScpXG4gIGNvbnN0IHZpZXdUaXRsZSA9IGlzU2hhcmVkU2tpbGwgPyB0KCdteVNraWxscy52aWV3VGl0bGUnKSA6IHQoJ215U2tpbGxzLnZpZXdPd25UaXRsZScpXG4gIGNvbnN0IG1vZGFsVGl0bGUgPSBpc1JlYWRPbmx5ID8gdmlld1RpdGxlIDogZWRpdE9yQ3JlYXRlVGl0bGVcblxuICBjb25zdCBwcmV2aWV3Qm9keSA9IChcbiAgICA8U0NBU01QcmV2aWV3Qm9keT5cbiAgICAgIDxTQ0FTTVByZXZpZXdIZWFkaW5nQmxvY2s+XG4gICAgICAgIDxTQ0FTTVByZXZpZXdOYW1lPntuYW1lfTwvU0NBU01QcmV2aWV3TmFtZT5cbiAgICAgICAge2Rlc2NyaXB0aW9uID8gPFNDQVNNUHJldmlld0Rlc2NyaXB0aW9uPntkZXNjcmlwdGlvbn08L1NDQVNNUHJldmlld0Rlc2NyaXB0aW9uPiA6IG51bGx9XG4gICAgICA8L1NDQVNNUHJldmlld0hlYWRpbmdCbG9jaz5cblxuICAgICAgPFNDQVNNUHJldmlld01ldGFkYXRhUm93PlxuICAgICAgICB7Y3JlYXRlZEJ5TGFiZWwgPyAoXG4gICAgICAgICAgPFNDQVNNTWV0YWRhdGFJdGVtPlxuICAgICAgICAgICAgPFNDQVNNUHJldmlld01ldGFkYXRhTGFiZWw+e3QoJ215U2tpbGxzLmNyZWF0ZWRCeScpfTwvU0NBU01QcmV2aWV3TWV0YWRhdGFMYWJlbD5cbiAgICAgICAgICAgIDxTQ0FTTVByZXZpZXdNZXRhZGF0YVZhbHVlPntjcmVhdGVkQnlMYWJlbH08L1NDQVNNUHJldmlld01ldGFkYXRhVmFsdWU+XG4gICAgICAgICAgPC9TQ0FTTU1ldGFkYXRhSXRlbT5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIHtsYXN0VXBkYXRlZExhYmVsID8gKFxuICAgICAgICAgIDxTQ0FTTU1ldGFkYXRhSXRlbT5cbiAgICAgICAgICAgIDxTQ0FTTVByZXZpZXdNZXRhZGF0YUxhYmVsPnt0KCdteVNraWxscy5sYXN0VXBkYXRlZCcpfTwvU0NBU01QcmV2aWV3TWV0YWRhdGFMYWJlbD5cbiAgICAgICAgICAgIDxTQ0FTTVByZXZpZXdNZXRhZGF0YVZhbHVlPntsYXN0VXBkYXRlZExhYmVsfTwvU0NBU01QcmV2aWV3TWV0YWRhdGFWYWx1ZT5cbiAgICAgICAgICA8L1NDQVNNTWV0YWRhdGFJdGVtPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAgeyFpc1NoYXJlZFNraWxsID8gKFxuICAgICAgICAgIDxTQ0FTTU1ldGFkYXRhSXRlbT5cbiAgICAgICAgICAgIDxTQ0FTTVByZXZpZXdNZXRhZGF0YUxhYmVsPnt0KCdteVNraWxscy5lbmFibGVkTGFiZWwnKX08L1NDQVNNUHJldmlld01ldGFkYXRhTGFiZWw+XG4gICAgICAgICAgICA8U0NBU01QcmV2aWV3TWV0YWRhdGFWYWx1ZT5cbiAgICAgICAgICAgICAge2FjY2Vzc1R5cGUgPT09ICdjb21wYW55JyA/IHQoJ215U2tpbGxzLnZpc2liaWxpdHlFdmVyeW9uZScpIDogdCgnbXlTa2lsbHMudmlzaWJpbGl0eU9ubHlNZScpfVxuICAgICAgICAgICAgPC9TQ0FTTVByZXZpZXdNZXRhZGF0YVZhbHVlPlxuICAgICAgICAgIDwvU0NBU01NZXRhZGF0YUl0ZW0+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9TQ0FTTVByZXZpZXdNZXRhZGF0YVJvdz5cblxuICAgICAgPFNDQVNNUHJldmlld0NvbnRlbnRQYW5lbD5cbiAgICAgICAgPFNDQVNNSW5zdHJ1Y3Rpb25zVGl0bGU+e3QoJ215U2tpbGxzLmluc3RydWN0aW9uc0xhYmVsJyl9PC9TQ0FTTUluc3RydWN0aW9uc1RpdGxlPlxuICAgICAgICA8U0NBU01QcmV2aWV3Q29udGVudEJveD57Y29udGVudH08L1NDQVNNUHJldmlld0NvbnRlbnRCb3g+XG4gICAgICA8L1NDQVNNUHJldmlld0NvbnRlbnRQYW5lbD5cbiAgICA8L1NDQVNNUHJldmlld0JvZHk+XG4gIClcblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKFxuICAgIDxCYWNrZHJvcCB6SW5kZXg9ezExMTJ9IG9uQ2xpY2s9e2hhbmRsZUJhY2tkcm9wQ2xpY2t9PlxuICAgICAgPFNDQVNNV3JhcHBlciBvbkNsaWNrPXtldmVudCA9PiBldmVudC5zdG9wUHJvcGFnYXRpb24oKX0+XG4gICAgICAgIDxTQ0FTTUhlYWRlcj5cbiAgICAgICAgICA8U0NBU01IZWFkZXJUaXRsZT57bW9kYWxUaXRsZX08L1NDQVNNSGVhZGVyVGl0bGU+XG4gICAgICAgICAgPFNDQVNNQ2xvc2VCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZUNhbmNlbH0gYXJpYS1sYWJlbD17dCgnbXlTa2lsbHMuY2xvc2UnKX0+XG4gICAgICAgICAgICA8Q3Jvc3MgY29sb3I9XCIjYTZhNmE2XCIgd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICAgICAgICAgIDwvU0NBU01DbG9zZUJ1dHRvbj5cbiAgICAgICAgPC9TQ0FTTUhlYWRlcj5cblxuICAgICAgICB7aXNSZWFkT25seSA/IChcbiAgICAgICAgICBwcmV2aWV3Qm9keVxuICAgICAgICApIDogKFxuICAgICAgICAgIDxTQ0FTTUJvZHk+XG4gICAgICAgICAgICA8U0NBU01GaWVsZEJveCAkaGVpZ2h0PXs1MH0+XG4gICAgICAgICAgICAgIDxTQ0FTTUZpZWxkTGFiZWwgaHRtbEZvcj1cInNraWxsLW5hbWUtaW5wdXRcIj57dCgnbXlTa2lsbHMubmFtZUxhYmVsJyl9PC9TQ0FTTUZpZWxkTGFiZWw+XG4gICAgICAgICAgICAgIDxTQ0FTTUZpZWxkSW5wdXRcbiAgICAgICAgICAgICAgICBpZD1cInNraWxsLW5hbWUtaW5wdXRcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBtYXhMZW5ndGg9ezE1MH1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dCgnbXlTa2lsbHMubmFtZVBsYWNlaG9sZGVyJyl9XG4gICAgICAgICAgICAgICAgdmFsdWU9e25hbWV9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzU3VibWl0dGluZ31cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17ZXZlbnQgPT4gaGFuZGxlQ2hhbmdlRmllbGQoJ25hbWUnLCBldmVudC50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9TQ0FTTUZpZWxkQm94PlxuXG4gICAgICAgICAgICA8U0NBU01GaWVsZEJveCAkaGVpZ2h0PXsxMjB9ICRjbGlwT3ZlcmZsb3c+XG4gICAgICAgICAgICAgIDxTQ0FTTUZpZWxkTGFiZWwgaHRtbEZvcj1cInNraWxsLWRlc2NyaXB0aW9uLWlucHV0XCI+e3QoJ215U2tpbGxzLmRlc2NyaXB0aW9uTGFiZWwnKX08L1NDQVNNRmllbGRMYWJlbD5cbiAgICAgICAgICAgICAgPFNDQVNNRmllbGRUZXh0YXJlYVxuICAgICAgICAgICAgICAgIGlkPVwic2tpbGwtZGVzY3JpcHRpb24taW5wdXRcIlxuICAgICAgICAgICAgICAgIG1heExlbmd0aD17NTAwfVxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0KCdteVNraWxscy5kZXNjcmlwdGlvblBsYWNlaG9sZGVyJyl9XG4gICAgICAgICAgICAgICAgdmFsdWU9e2Rlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc1N1Ym1pdHRpbmd9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e2V2ZW50ID0+IGhhbmRsZUNoYW5nZUZpZWxkKCdkZXNjcmlwdGlvbicsIGV2ZW50LnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1NDQVNNRmllbGRCb3g+XG5cbiAgICAgICAgICAgIHtjYW5TaGFyZVdpdGhDb21wYW55ID8gKFxuICAgICAgICAgICAgICA8U0NBU01Td2l0Y2hSb3c+XG4gICAgICAgICAgICAgICAgPFN3aXRjaFxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17YWNjZXNzVHlwZSA9PT0gJ2NvbXBhbnknfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUFjY2Vzc1R5cGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNTdWJtaXR0aW5nfVxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnbXlTa2lsbHMuc2hhcmVXaXRoQ29tcGFueScpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPFNDQVNNU3dpdGNoTGFiZWw+e3QoJ215U2tpbGxzLnNoYXJlV2l0aENvbXBhbnknKX08L1NDQVNNU3dpdGNoTGFiZWw+XG4gICAgICAgICAgICAgIDwvU0NBU01Td2l0Y2hSb3c+XG4gICAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgICAgPFNDQVNNSW5zdHJ1Y3Rpb25zUGFuZWw+XG4gICAgICAgICAgICAgIDxTQ0FTTUluc3RydWN0aW9uc0hlYWRlcj5cbiAgICAgICAgICAgICAgICA8U0NBU01JbnN0cnVjdGlvbnNUaXRsZT57dCgnbXlTa2lsbHMuaW5zdHJ1Y3Rpb25zTGFiZWwnKX08L1NDQVNNSW5zdHJ1Y3Rpb25zVGl0bGU+XG4gICAgICAgICAgICAgICAgPFNDQVNNVXBsb2FkQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVVcGxvYWRDbGlja30gZGlzYWJsZWQ9e2lzU3VibWl0dGluZ30+XG4gICAgICAgICAgICAgICAgICA8RmlsZVVwbG9hZCB3aWR0aD17MTh9IGhlaWdodD17MTh9IGNvbG9yPVwiIzA4Q1wiIC8+XG4gICAgICAgICAgICAgICAgICB7dCgnbXlTa2lsbHMudXBsb2FkTWQnKX1cbiAgICAgICAgICAgICAgICA8L1NDQVNNVXBsb2FkQnV0dG9uPlxuICAgICAgICAgICAgICAgIDxTQ0FTTUhpZGRlbkZpbGVJbnB1dFxuICAgICAgICAgICAgICAgICAgcmVmPXtmaWxlSW5wdXRSZWZ9XG4gICAgICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgICAgICBhY2NlcHQ9XCIubWQsLm1hcmtkb3duLHRleHQvbWFya2Rvd25cIlxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUZpbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9TQ0FTTUluc3RydWN0aW9uc0hlYWRlcj5cblxuICAgICAgICAgICAgICA8U0NBU01JbnN0cnVjdGlvbnNGaWVsZD5cbiAgICAgICAgICAgICAgICA8U0NBU01JbnN0cnVjdGlvbnNUZXh0YXJlYVxuICAgICAgICAgICAgICAgICAgaWQ9XCJza2lsbC1jb250ZW50LWlucHV0XCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0KCdteVNraWxscy5jb250ZW50UGxhY2Vob2xkZXInKX1cbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb250ZW50fVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzU3VibWl0dGluZ31cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtldmVudCA9PiBoYW5kbGVDaGFuZ2VGaWVsZCgnY29udGVudCcsIGV2ZW50LnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9TQ0FTTUluc3RydWN0aW9uc0ZpZWxkPlxuICAgICAgICAgICAgICA8U0NBU01CeXRlQ291bnRlciAkb3ZlckxpbWl0PXtpc092ZXJMaW1pdH0gYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLmJ5dGVzQ291bnRlcicsIHtcbiAgICAgICAgICAgICAgICAgIHVzZWQ6IGdldFVuaXRGaWxlU2l6ZShjb250ZW50Qnl0ZXMpLFxuICAgICAgICAgICAgICAgICAgbWF4OiBnZXRVbml0RmlsZVNpemUoU0tJTExfQ09OVEVOVF9NQVhfQllURVMpLFxuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA8L1NDQVNNQnl0ZUNvdW50ZXI+XG4gICAgICAgICAgICA8L1NDQVNNSW5zdHJ1Y3Rpb25zUGFuZWw+XG4gICAgICAgICAgPC9TQ0FTTUJvZHk+XG4gICAgICAgICl9XG5cbiAgICAgICAgPFNDQVNNRm9vdGVyPlxuICAgICAgICAgIHtpc1JlYWRPbmx5ICYmIGlzU2hhcmVkU2tpbGwgPyAoXG4gICAgICAgICAgICA8U0NBU01Vc2VTa2lsbEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlVXNlU2tpbGx9PlxuICAgICAgICAgICAgICB7dCgnbXlTa2lsbHMudXNlU2tpbGwnKX1cbiAgICAgICAgICAgIDwvU0NBU01Vc2VTa2lsbEJ1dHRvbj5cbiAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgIHtpc1JlYWRPbmx5ICYmICFpc1NoYXJlZFNraWxsID8gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPFNDQVNNRGVsZXRlU2xvdD5cbiAgICAgICAgICAgICAgICA8U0NBU01EZWxldGVPdXRsaW5lZEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17KCkgPT4gc2V0U2hvd0RlbGV0ZSh0cnVlKX0+XG4gICAgICAgICAgICAgICAgICB7dCgnbXlTa2lsbHMuZGVsZXRlJyl9XG4gICAgICAgICAgICAgICAgPC9TQ0FTTURlbGV0ZU91dGxpbmVkQnV0dG9uPlxuICAgICAgICAgICAgICA8L1NDQVNNRGVsZXRlU2xvdD5cbiAgICAgICAgICAgICAgPFNDQVNNU2F2ZVByaW1hcnlCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZUVkaXRGcm9tVmlld30+XG4gICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLmVkaXQnKX1cbiAgICAgICAgICAgICAgPC9TQ0FTTVNhdmVQcmltYXJ5QnV0dG9uPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICB7IWlzUmVhZE9ubHkgPyAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICB7dmFsdWVzLmlzRWRpdGluZyA/IChcbiAgICAgICAgICAgICAgICA8U0NBU01EZWxldGVTbG90PlxuICAgICAgICAgICAgICAgICAgPFNDQVNNQ2FuY2VsQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBzZXRTaG93RGVsZXRlKHRydWUpfSBkaXNhYmxlZD17aXNTdWJtaXR0aW5nfT5cbiAgICAgICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLmRlbGV0ZScpfVxuICAgICAgICAgICAgICAgICAgPC9TQ0FTTUNhbmNlbEJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L1NDQVNNRGVsZXRlU2xvdD5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDxTQ0FTTVNhdmVPdXRsaW5lZEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlU2F2ZUFuZFVzZX0gZGlzYWJsZWQ9eyFpc1ZhbGlkIHx8IGlzU3VibWl0dGluZ30+XG4gICAgICAgICAgICAgICAge2lzU3VibWl0dGluZyA/IDxMb2FkZXIgc2l6ZT1cInNtYWxsXCIgLz4gOiB0KCdteVNraWxscy5zYXZlQW5kVXNlJyl9XG4gICAgICAgICAgICAgIDwvU0NBU01TYXZlT3V0bGluZWRCdXR0b24+XG4gICAgICAgICAgICAgIDxTQ0FTTVNhdmVQcmltYXJ5QnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2F2ZX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWlzVmFsaWQgfHwgaXNTdWJtaXR0aW5nIHx8ICFoYXNDaGFuZ2VzfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2lzU3VibWl0dGluZyA/IDxMb2FkZXIgc2l6ZT1cInNtYWxsXCIgLz4gOiB0KCdteVNraWxscy5zYXZlJyl9XG4gICAgICAgICAgICAgIDwvU0NBU01TYXZlUHJpbWFyeUJ1dHRvbj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L1NDQVNNRm9vdGVyPlxuICAgICAgPC9TQ0FTTVdyYXBwZXI+XG5cbiAgICAgIHtzaG93RGVsZXRlICYmIHNraWxsSWQgPyAoXG4gICAgICAgIDxEZWxldGVRdWVzdGlvbk1vZGFsXG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd0RlbGV0ZShmYWxzZSl9XG4gICAgICAgICAgaGFuZGxlcnM9e3tcbiAgICAgICAgICAgIGhhbmRsZUNvbmZpcm1BY3Rpb246IGhhbmRsZUNvbmZpcm1EZWxldGUsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBjaGF0PXt7IHRpdGxlOiBuYW1lLCBpZDogc2tpbGxJZCB9fVxuICAgICAgICAgIGFjdGlvbj1cInNraWxsXCJcbiAgICAgICAgLz5cbiAgICAgICkgOiBudWxsfVxuICAgIDwvQmFja2Ryb3A+LFxuICAgIGNvbnRhaW5lclxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0EsU0FBa0NBLFdBQVcsRUFBRUMsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDbEcsU0FBU0MsWUFBWSxRQUFRLFdBQVc7QUFDeEMsU0FBU0MsS0FBSyxRQUFRLHdDQUF3QztBQUM5RCxTQUFTQyxVQUFVLFFBQVEsNkNBQTZDO0FBQ3hFLFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBQzlDLFNBQVNDLFFBQVEsUUFBUSxzQkFBc0I7QUFDL0MsU0FBU0MsTUFBTSxRQUFRLG9CQUFvQjtBQUMzQyxTQUFTQyxNQUFNLFFBQVEsb0JBQW9CO0FBQzNDLFNBQVNDLFFBQVEsUUFBUSwyQkFBMkI7QUFDcEQsU0FBU0MsT0FBTyxFQUFFQyxrQkFBa0IsUUFBUSwyQkFBMkI7QUFDdkUsU0FBU0MsTUFBTSxFQUFFQyxRQUFRLFFBQVEseUJBQXlCO0FBQzFELFNBQVNDLGtCQUFrQixRQUFRLHNEQUFzRDtBQUN6RixTQUFTQyxVQUFVLFFBQVEscUJBQXFCO0FBQ2hELFNBQVNDLFdBQVcsUUFBUSwyQ0FBMkM7QUFDdkUsU0FBU0MsV0FBVyxRQUFRLDJDQUEyQztBQUN2RSxTQUFTQyxXQUFXLFFBQVEsMkNBQTJDO0FBRXZFLFNBQVNDLGVBQWUsUUFBUSxnQ0FBZ0M7QUFDaEUsU0FDRUMseUJBQXlCLEVBQ3pCQyx1QkFBdUIsRUFDdkJDLHVCQUF1QixRQUNsQixpQ0FBaUM7QUFDeEMsU0FBU0MsbUJBQW1CLFFBQVEsNENBQTRDO0FBQ2hGLFNBQ0VDLGdCQUFnQixFQUNoQkMsaUJBQWlCLEVBQ2pCQyxnQkFBZ0IsRUFDaEJDLFNBQVMsRUFDVEMseUJBQXlCLEVBQ3pCQyxlQUFlLEVBQ2ZDLGFBQWEsRUFDYkMsZUFBZSxFQUNmQyxlQUFlLEVBQ2ZDLGtCQUFrQixFQUNsQkMsV0FBVyxFQUNYQyxXQUFXLEVBQ1hDLGdCQUFnQixFQUNoQkMsb0JBQW9CLEVBQ3BCQyxzQkFBc0IsRUFDdEJDLHVCQUF1QixFQUN2QkMsc0JBQXNCLEVBQ3RCQyx5QkFBeUIsRUFDekJDLHNCQUFzQixFQUN0QkMsaUJBQWlCLEVBQ2pCQyxnQkFBZ0IsRUFDaEJDLHNCQUFzQixFQUN0QkMsd0JBQXdCLEVBQ3hCQyx1QkFBdUIsRUFDdkJDLHdCQUF3QixFQUN4QkMseUJBQXlCLEVBQ3pCQyx1QkFBdUIsRUFDdkJDLHlCQUF5QixFQUN6QkMsZ0JBQWdCLEVBQ2hCQyx1QkFBdUIsRUFDdkJDLHNCQUFzQixFQUN0QkMsZ0JBQWdCLEVBQ2hCQyxjQUFjLEVBQ2RDLGlCQUFpQixFQUNqQkMsbUJBQW1CLEVBQ25CQyxZQUFZLFFBQ1Asd0JBQXdCO0FBQUEsU0FBQUMsR0FBQSxJQUFBQyxJQUFBLEVBQUFDLElBQUEsSUFBQUMsS0FBQSxFQUFBQyxRQUFBLElBQUFDLFNBQUE7QUFFL0IsT0FBTyxJQUFNQywwQkFBMEIsR0FBRywyQkFBMkI7QUF3QnJFLElBQU1DLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBcUJBLENBQUlDLFdBQTZCLEVBQXFCO0VBQy9FLElBQUlBLFdBQVcsQ0FBQ0MsVUFBVSxFQUFFLE9BQU8sTUFBTTtFQUN6QyxJQUFJRCxXQUFXLENBQUNFLFNBQVMsRUFBRSxPQUFPLE1BQU07RUFDeEMsT0FBTyxRQUFRO0FBQ2pCLENBQUM7QUFRRCxJQUFNQyxhQUErQixHQUFHO0VBQ3RDRCxTQUFTLEVBQUUsS0FBSztFQUNoQkUsT0FBTyxFQUFFO0lBQ1BDLEVBQUUsRUFBRUMsU0FBUztJQUNiQyxJQUFJLEVBQUUsRUFBRTtJQUNSQyxXQUFXLEVBQUUsRUFBRTtJQUNmQyxPQUFPLEVBQUUsRUFBRTtJQUNYQyxXQUFXLEVBQUU7RUFDZjtBQUNGLENBQUM7QUFTRCxJQUFNQyxhQUFnQyxHQUFHO0VBQ3ZDSixJQUFJLEVBQUUsRUFBRTtFQUNSQyxXQUFXLEVBQUUsRUFBRTtFQUNmQyxPQUFPLEVBQUUsRUFBRTtFQUNYQyxXQUFXLEVBQUU7QUFDZixDQUFDO0FBRUQsSUFBTUUsMkJBQTJCLEdBQUcsU0FBOUJBLDJCQUEyQkEsQ0FBSUgsT0FBZSxFQUFhO0VBQy9ELElBQU1JLGdCQUFnQixHQUFHSixPQUFPLENBQUNLLEtBQUssQ0FBQywwQkFBMEIsQ0FBQztFQUNsRSxJQUFJLENBQUNELGdCQUFnQixFQUFFLE9BQU8sRUFBRTtFQUNoQyxJQUFNRSxnQkFBZ0IsR0FBR0YsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUNDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQztFQUM1RSxPQUFPQyxnQkFBZ0IsR0FBR0EsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRTtBQUMzRCxDQUFDO0FBRUQsT0FBTyxJQUFNQyxhQUFhLEdBQUcsU0FBaEJBLGFBQWFBLENBQUFDLElBQUEsRUFBeUU7RUFBQSxJQUFBQyxlQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBO0VBQUEsSUFBbkVDLFFBQVEsR0FBQVQsSUFBQSxDQUFSUyxRQUFRO0lBQUVDLGlCQUFpQixHQUFBVixJQUFBLENBQWpCVSxpQkFBaUI7SUFBRUMsV0FBVyxHQUFBWCxJQUFBLENBQVhXLFdBQVc7RUFDdEUsSUFBQUMsZUFBQSxHQUFjN0YsY0FBYyxDQUFDLENBQUNJLFFBQVEsQ0FBQzBGLE1BQU0sQ0FBQyxDQUFDO0lBQXZDQyxDQUFDLEdBQUFGLGVBQUEsQ0FBREUsQ0FBQztFQUNULElBQU1DLElBQUksR0FBRzNGLE9BQU8sQ0FBQyxDQUFDO0VBQ3RCLElBQU00RixjQUFjLEdBQUd6RixRQUFRLENBQUMsQ0FBQztFQUNqQyxJQUFBMEYsbUJBQUEsR0FBdUR6RixrQkFBa0IsQ0FBQyxDQUFDO0lBQW5FMEYscUJBQXFCLEdBQUFELG1CQUFBLENBQXJCQyxxQkFBcUI7SUFBRUMsbUJBQW1CLEdBQUFGLG1CQUFBLENBQW5CRSxtQkFBbUI7RUFDbEQsSUFBQUMsU0FBQSxHQUE0QnpHLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFBQTBHLFVBQUEsR0FBQUMsY0FBQSxDQUFBRixTQUFBO0lBQXBDRyxNQUFNLEdBQUFGLFVBQUE7SUFBRUcsU0FBUyxHQUFBSCxVQUFBO0VBQ3hCLElBQUFJLFVBQUEsR0FBd0M5RyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQUErRyxVQUFBLEdBQUFKLGNBQUEsQ0FBQUcsVUFBQTtJQUFoREUsWUFBWSxHQUFBRCxVQUFBO0lBQUVFLGVBQWUsR0FBQUYsVUFBQTtFQUNwQyxJQUFBRyxVQUFBLEdBQW9DbEgsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUFBbUgsVUFBQSxHQUFBUixjQUFBLENBQUFPLFVBQUE7SUFBNUNFLFVBQVUsR0FBQUQsVUFBQTtJQUFFRSxhQUFhLEdBQUFGLFVBQUE7RUFDaEMsSUFBQUcsVUFBQSxHQUEwQ3RILFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFBQXVILFVBQUEsR0FBQVosY0FBQSxDQUFBVyxVQUFBO0lBQWxERSxhQUFhLEdBQUFELFVBQUE7SUFBRUUsZ0JBQWdCLEdBQUFGLFVBQUE7RUFDdEMsSUFBQUcsVUFBQSxHQUE0QjFILFFBQVEsQ0FBbUJzRSxhQUFhLENBQUM7SUFBQXFELFVBQUEsR0FBQWhCLGNBQUEsQ0FBQWUsVUFBQTtJQUE5REUsTUFBTSxHQUFBRCxVQUFBO0lBQUVFLFNBQVMsR0FBQUYsVUFBQTtFQUN4QixJQUFNRyxZQUFZLEdBQUcvSCxNQUFNLENBQW1CLElBQUksQ0FBQztFQUNuRCxJQUFNZ0ksVUFBVSxHQUFHaEksTUFBTSxDQUFvQitFLGFBQWEsQ0FBQztFQUUzRCxJQUFNVixVQUFVLEdBQUcsQ0FBQyxDQUFDd0QsTUFBTSxDQUFDeEQsVUFBVTtFQUN0QyxJQUFNNEQsYUFBYSxHQUFHLENBQUMsQ0FBQ0osTUFBTSxDQUFDSyxRQUFRO0VBQ3ZDLElBQU1DLG1CQUFtQixHQUFHLENBQUN4SCxrQkFBa0IsQ0FBQzBGLElBQUksQ0FBQytCLE9BQU8sQ0FBQyxJQUFJLENBQUMvRCxVQUFVO0VBRTVFLElBQU1NLElBQUksR0FBRyxFQUFBWSxlQUFBLEdBQUFzQyxNQUFNLENBQUNyRCxPQUFPLGNBQUFlLGVBQUEsdUJBQWRBLGVBQUEsQ0FBZ0JaLElBQUksS0FBSSxFQUFFO0VBQ3ZDLElBQU1DLFdBQVcsR0FBRyxFQUFBWSxnQkFBQSxHQUFBcUMsTUFBTSxDQUFDckQsT0FBTyxjQUFBZ0IsZ0JBQUEsdUJBQWRBLGdCQUFBLENBQWdCWixXQUFXLEtBQUksRUFBRTtFQUNyRCxJQUFNQyxPQUFPLEdBQUcsRUFBQVksZ0JBQUEsR0FBQW9DLE1BQU0sQ0FBQ3JELE9BQU8sY0FBQWlCLGdCQUFBLHVCQUFkQSxnQkFBQSxDQUFnQlosT0FBTyxLQUFJLEVBQUU7RUFDN0MsSUFBTXdELFVBQTJCLEdBQUcsRUFBQTNDLGdCQUFBLEdBQUFtQyxNQUFNLENBQUNyRCxPQUFPLGNBQUFrQixnQkFBQSx1QkFBZEEsZ0JBQUEsQ0FBZ0JaLFdBQVcsS0FBSSxTQUFTO0VBQzVFLElBQU13RCxtQkFBb0MsR0FBR0gsbUJBQW1CLEdBQUdFLFVBQVUsR0FBRyxTQUFTO0VBQ3pGLElBQU1FLE9BQU8sSUFBQTVDLGdCQUFBLEdBQUdrQyxNQUFNLENBQUNyRCxPQUFPLGNBQUFtQixnQkFBQSx1QkFBZEEsZ0JBQUEsQ0FBZ0JsQixFQUFFO0VBQ2xDLElBQU0rRCxZQUFZLEdBQUd6SSxPQUFPLENBQUM7SUFBQSxPQUFNcUIseUJBQXlCLENBQUN5RCxPQUFPLENBQUM7RUFBQSxHQUFFLENBQUNBLE9BQU8sQ0FBQyxDQUFDO0VBQ2pGLElBQU00RCxXQUFXLEdBQUdELFlBQVksR0FBR2xILHVCQUF1QjtFQUMxRCxJQUFNb0gsT0FBTyxHQUFHLENBQUMsQ0FBQy9ELElBQUksQ0FBQ1MsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNQLE9BQU8sQ0FBQ08sSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDcUQsV0FBVztFQUNqRSxJQUFNRSxVQUFVLEdBQ2RoRSxJQUFJLENBQUNTLElBQUksQ0FBQyxDQUFDLEtBQUs0QyxVQUFVLENBQUNZLE9BQU8sQ0FBQ2pFLElBQUksSUFDdkNDLFdBQVcsQ0FBQ1EsSUFBSSxDQUFDLENBQUMsS0FBSzRDLFVBQVUsQ0FBQ1ksT0FBTyxDQUFDaEUsV0FBVyxJQUNyREMsT0FBTyxDQUFDTyxJQUFJLENBQUMsQ0FBQyxLQUFLNEMsVUFBVSxDQUFDWSxPQUFPLENBQUMvRCxPQUFPLElBQzVDc0QsbUJBQW1CLElBQUlHLG1CQUFtQixLQUFLTixVQUFVLENBQUNZLE9BQU8sQ0FBQzlELFdBQVk7RUFFakYsSUFBTStELGNBQWMsR0FBRzlJLE9BQU8sQ0FBQyxZQUFNO0lBQUEsSUFBQStJLGdCQUFBO0lBQ25DLElBQU1DLFNBQVMsSUFBQUQsZ0JBQUEsR0FBR2pCLE1BQU0sQ0FBQ3JELE9BQU8sY0FBQXNFLGdCQUFBLGdCQUFBQSxnQkFBQSxHQUFkQSxnQkFBQSxDQUFnQkUsZUFBZSxjQUFBRixnQkFBQSx1QkFBL0JBLGdCQUFBLENBQWlDMUQsSUFBSSxDQUFDLENBQUM7SUFDekQsSUFBSTJELFNBQVMsRUFBRSxPQUFPQSxTQUFTO0lBQy9CLE9BQU9kLGFBQWEsR0FBRyxFQUFFLEdBQUcsR0FBQWdCLE1BQUEsQ0FBRzVDLElBQUksQ0FBQzZDLFNBQVMsT0FBQUQsTUFBQSxDQUFJNUMsSUFBSSxDQUFDOEMsUUFBUSxFQUFHL0QsSUFBSSxDQUFDLENBQUM7RUFDekUsQ0FBQyxFQUFFLEVBQUFRLGdCQUFBLEdBQUNpQyxNQUFNLENBQUNyRCxPQUFPLGNBQUFvQixnQkFBQSx1QkFBZEEsZ0JBQUEsQ0FBZ0JvRCxlQUFlLEVBQUUzQyxJQUFJLENBQUM2QyxTQUFTLEVBQUU3QyxJQUFJLENBQUM4QyxRQUFRLEVBQUVsQixhQUFhLENBQUMsQ0FBQztFQUVuRixJQUFNbUIsZ0JBQWdCLEdBQUdySixPQUFPLENBQUMsWUFBTTtJQUFBLElBQUFzSixnQkFBQSxFQUFBQyxnQkFBQTtJQUNyQyxJQUFNQyxTQUFTLEdBQUcsRUFBQUYsZ0JBQUEsR0FBQXhCLE1BQU0sQ0FBQ3JELE9BQU8sY0FBQTZFLGdCQUFBLHVCQUFkQSxnQkFBQSxDQUFnQkcsVUFBVSxPQUFBRixnQkFBQSxHQUFJekIsTUFBTSxDQUFDckQsT0FBTyxjQUFBOEUsZ0JBQUEsdUJBQWRBLGdCQUFBLENBQWdCRyxVQUFVO0lBQzFFLElBQUksQ0FBQ0YsU0FBUyxFQUFFLE9BQU8sRUFBRTtJQUN6QixJQUFNRyxNQUFNLEdBQUcsSUFBSUMsSUFBSSxDQUFDSixTQUFTLENBQUM7SUFDbEMsSUFBSUssTUFBTSxDQUFDQyxLQUFLLENBQUNILE1BQU0sQ0FBQ0ksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRTtJQUM3QyxPQUFPL0ksVUFBVSxDQUFDMkksTUFBTSxDQUFDO0VBQzNCLENBQUMsRUFBRSxFQUFBN0QsZ0JBQUEsR0FBQ2dDLE1BQU0sQ0FBQ3JELE9BQU8sY0FBQXFCLGdCQUFBLHVCQUFkQSxnQkFBQSxDQUFnQjJELFVBQVUsR0FBQTFELGdCQUFBLEdBQUUrQixNQUFNLENBQUNyRCxPQUFPLGNBQUFzQixnQkFBQSx1QkFBZEEsZ0JBQUEsQ0FBZ0IyRCxVQUFVLENBQUMsQ0FBQztFQUU1RCxJQUFNTSxXQUFXLEdBQUdsSyxXQUFXLENBQUMsWUFBTTtJQUNwQ2lILFNBQVMsQ0FBQyxLQUFLLENBQUM7SUFDaEJRLGFBQWEsQ0FBQyxLQUFLLENBQUM7SUFDcEJJLGdCQUFnQixDQUFDLEtBQUssQ0FBQztJQUN2QkksU0FBUyxDQUFDdkQsYUFBYSxDQUFDO0lBQ3hCeUQsVUFBVSxDQUFDWSxPQUFPLEdBQUc3RCxhQUFhO0VBQ3BDLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTixJQUFNaUYsWUFBWSxHQUFHbkssV0FBVyxDQUFDLFlBQU07SUFDckN5RyxjQUFjLENBQUMxRixNQUFNLENBQUNxSixvQkFBb0IsRUFBRTtNQUFFQyxNQUFNLEVBQUUvRixxQkFBcUIsQ0FBQzBELE1BQU07SUFBRSxDQUFDLENBQUM7SUFDdEZrQyxXQUFXLENBQUMsQ0FBQztFQUNmLENBQUMsRUFBRSxDQUFDekQsY0FBYyxFQUFFeUQsV0FBVyxFQUFFbEMsTUFBTSxDQUFDLENBQUM7RUFFekMsSUFBTXNDLG1CQUFtQixHQUFHdEssV0FBVyxDQUNyQyxVQUFDdUssS0FBaUIsRUFBSztJQUNyQixJQUFJQSxLQUFLLENBQUNDLE1BQU0sS0FBS0QsS0FBSyxDQUFDRSxhQUFhLEVBQUU7TUFDeENOLFlBQVksQ0FBQyxDQUFDO0lBQ2hCO0VBQ0YsQ0FBQyxFQUNELENBQUNBLFlBQVksQ0FDZixDQUFDO0VBRURsSyxTQUFTLENBQUMsWUFBTTtJQUNkLElBQU15SyxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUFJSCxLQUFVLEVBQUs7TUFBQSxJQUFBSSxtQkFBQSxFQUFBQyxvQkFBQSxFQUFBQyxvQkFBQTtNQUMzQyxJQUFBQyxLQUFBLEdBQXlDUCxLQUFLLENBQUNRLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFBbkR4RyxXQUFXLEdBQUF1RyxLQUFBLENBQVh2RyxXQUFXO1FBQUV5RyxlQUFlLEdBQUFGLEtBQUEsQ0FBZkUsZUFBZTtNQUNwQyxJQUFJLENBQUN6RyxXQUFXLEVBQUU7TUFFbEIsSUFBTTBHLGVBQWUsR0FBQUMsYUFBQSxDQUFBQSxhQUFBLEtBQ2hCeEcsYUFBYSxDQUFDQyxPQUFPLElBQUFnRyxtQkFBQSxHQUNyQnBHLFdBQVcsQ0FBQ3lELE1BQU0sY0FBQTJDLG1CQUFBLHVCQUFsQkEsbUJBQUEsQ0FBb0JoRyxPQUFPLENBQy9CO01BQ0QsSUFBTXdHLFlBQVksR0FBRyxDQUFDRixlQUFlLENBQUNuRyxJQUFJLElBQUksRUFBRSxFQUFFUyxJQUFJLENBQUMsQ0FBQztNQUN4RCxJQUFNNkYsbUJBQW1CLEdBQUcsQ0FBQ0gsZUFBZSxDQUFDbEcsV0FBVyxJQUFJLEVBQUUsRUFBRVEsSUFBSSxDQUFDLENBQUM7TUFDdEUsSUFBTThGLGVBQWUsR0FBRyxDQUFDSixlQUFlLENBQUNqRyxPQUFPLElBQUksRUFBRSxFQUFFTyxJQUFJLENBQUMsQ0FBQztNQUM5RCxJQUFNK0Ysa0JBQW1DLEdBQUd4SyxrQkFBa0IsQ0FBQzBGLElBQUksQ0FBQytCLE9BQU8sQ0FBQyxHQUN4RSxTQUFTLEdBQ1QwQyxlQUFlLENBQUNoRyxXQUFXLElBQUksU0FBUztNQUM1QyxJQUFNc0csaUJBQWlCLEdBQ3JCSCxtQkFBbUIsS0FBS0MsZUFBZSxHQUFHbEcsMkJBQTJCLENBQUNrRyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUM7TUFFOUYsSUFBTUcsZUFBa0MsR0FBRztRQUN6QzFHLElBQUksRUFBRXFHLFlBQVk7UUFDbEJwRyxXQUFXLEVBQUV3RyxpQkFBaUI7UUFDOUJ2RyxPQUFPLEVBQUVxRyxlQUFlO1FBQ3hCcEcsV0FBVyxFQUFFcUc7TUFDZixDQUFDO01BQ0RuRCxVQUFVLENBQUNZLE9BQU8sR0FBRyxDQUFBNkIsb0JBQUEsR0FBQXJHLFdBQVcsQ0FBQ3lELE1BQU0sY0FBQTRDLG9CQUFBLGVBQWxCQSxvQkFBQSxDQUFvQm5HLFNBQVMsR0FBRytHLGVBQWUsR0FBR3RHLGFBQWE7TUFFcEYrQyxTQUFTLENBQUFpRCxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxLQUNKeEcsYUFBYSxHQUNiSCxXQUFXLENBQUN5RCxNQUFNO1FBQ3JCckQsT0FBTyxFQUFBdUcsYUFBQSxDQUFBQSxhQUFBLEtBQ0ZELGVBQWU7VUFDbEJsRyxXQUFXLEVBQUV3RyxpQkFBaUI7VUFDOUJ0RyxXQUFXLEVBQUVxRztRQUFrQjtNQUNoQyxFQUNGLENBQUM7TUFDRnpELGdCQUFnQixDQUFDLEVBQUFnRCxvQkFBQSxHQUFBdEcsV0FBVyxDQUFDeUQsTUFBTSxjQUFBNkMsb0JBQUEsdUJBQWxCQSxvQkFBQSxDQUFvQlksTUFBTSxNQUFLLFFBQVEsQ0FBQztNQUN6RHhFLFNBQVMsQ0FBQyxDQUFDLENBQUMxQyxXQUFXLENBQUN5QyxNQUFNLENBQUM7TUFFL0IsSUFBSXpDLFdBQVcsQ0FBQ3lDLE1BQU0sRUFBRTtRQUN0QixJQUFNMEUsY0FBYyxHQUFBUixhQUFBLENBQUFBLGFBQUEsS0FBUXhHLGFBQWEsR0FBS0gsV0FBVyxDQUFDeUQsTUFBTSxDQUFFO1FBQ2xFLElBQU0yRCxNQUE0QixHQUNoQ1gsZUFBZSxLQUFLLFVBQVUsSUFBSUEsZUFBZSxLQUFLLE9BQU8sSUFBSUEsZUFBZSxLQUFLLFNBQVMsR0FDMUZBLGVBQWUsR0FDZixTQUFTO1FBQ2Z2RSxjQUFjLENBQUMxRixNQUFNLENBQUM2SyxvQkFBb0IsRUFBRTtVQUMxQ3ZCLE1BQU0sRUFBRS9GLHFCQUFxQixDQUFDb0gsY0FBYyxDQUFDO1VBQzdDQyxNQUFNLEVBQU5BO1FBQ0YsQ0FBQyxDQUFDO01BQ0o7SUFDRixDQUFDO0lBRURFLFFBQVEsQ0FBQ0MsZ0JBQWdCLENBQUMsNEJBQTRCLEVBQUVwQixvQkFBb0IsQ0FBQztJQUM3RSxPQUFPLFlBQU07TUFDWG1CLFFBQVEsQ0FBQ0UsbUJBQW1CLENBQUMsNEJBQTRCLEVBQUVyQixvQkFBb0IsQ0FBQztJQUNsRixDQUFDO0VBQ0gsQ0FBQyxFQUFFLENBQUNqRSxjQUFjLEVBQUVELElBQUksQ0FBQytCLE9BQU8sQ0FBQyxDQUFDO0VBRWxDdEksU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFJK0csTUFBTSxJQUFJWSxhQUFhLEVBQUU7TUFBQSxJQUFBb0UscUJBQUE7TUFDM0JuRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7TUFDdkIsQ0FBQW1FLHFCQUFBLEdBQUE5RCxZQUFZLENBQUNhLE9BQU8sY0FBQWlELHFCQUFBLGVBQXBCQSxxQkFBQSxDQUFzQkMsS0FBSyxDQUFDLENBQUM7SUFDL0I7RUFDRixDQUFDLEVBQUUsQ0FBQ2pGLE1BQU0sRUFBRVksYUFBYSxDQUFDLENBQUM7RUFFM0IsSUFBTXNFLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQUlDLEtBQXlDLEVBQUVDLEtBQWEsRUFBSztJQUN0RixJQUFJRCxLQUFLLEtBQUssU0FBUyxJQUFJM0ssdUJBQXVCLENBQUM0SyxLQUFLLENBQUMsRUFBRTtNQUN6RCxJQUFJQSxLQUFLLENBQUNDLE1BQU0sR0FBR3JILE9BQU8sQ0FBQ3FILE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDckN6RixtQkFBbUIsQ0FBQ0wsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLENBQUM7TUFDckQ7TUFDQTtJQUNGO0lBQ0EwQixTQUFTLENBQUMsVUFBQXFFLElBQUk7TUFBQSxPQUFBcEIsYUFBQSxDQUFBQSxhQUFBLEtBQ1RvQixJQUFJO1FBQ1AzSCxPQUFPLEVBQUF1RyxhQUFBLENBQUFBLGFBQUEsS0FBT29CLElBQUksQ0FBQzNILE9BQU8sT0FBQTRILGVBQUEsS0FBR0osS0FBSyxFQUFHQyxLQUFLO01BQUU7SUFBQSxDQUM1QyxDQUFDO0VBQ0wsQ0FBQztFQUVELElBQU1JLHNCQUFzQixHQUFHLFNBQXpCQSxzQkFBc0JBLENBQUlDLE9BQWdCLEVBQUs7SUFDbkQsSUFBSSxDQUFDbkUsbUJBQW1CLEVBQUU7SUFDMUJMLFNBQVMsQ0FBQyxVQUFBcUUsSUFBSTtNQUFBLE9BQUFwQixhQUFBLENBQUFBLGFBQUEsS0FDVG9CLElBQUk7UUFDUDNILE9BQU8sRUFBQXVHLGFBQUEsQ0FBQUEsYUFBQSxLQUNGb0IsSUFBSSxDQUFDM0gsT0FBTztVQUNmTSxXQUFXLEVBQUV3SCxPQUFPLEdBQUcsU0FBUyxHQUFHO1FBQVM7TUFDN0M7SUFBQSxDQUNELENBQUM7RUFDTCxDQUFDO0VBRUQsSUFBTUMsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FBQSxFQUFTO0lBQUEsSUFBQUMsc0JBQUE7SUFDOUIsQ0FBQUEsc0JBQUEsR0FBQXpFLFlBQVksQ0FBQ2EsT0FBTyxjQUFBNEQsc0JBQUEsZUFBcEJBLHNCQUFBLENBQXNCVixLQUFLLENBQUMsQ0FBQztFQUMvQixDQUFDO0VBRUQsSUFBTVcsZ0JBQWdCO0lBQUEsSUFBQUMsS0FBQSxHQUFBQyxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQUcsU0FBQUMsUUFBTzFDLEtBQW9DO01BQUEsSUFBQTJDLG1CQUFBO01BQUEsSUFBQUMsSUFBQSxFQUFBQyxVQUFBLEVBQUFDLElBQUEsRUFBQUMsUUFBQSxFQUFBL0IsaUJBQUEsRUFBQWdDLEVBQUE7TUFBQSxPQUFBUixtQkFBQSxDQUFBUyxJQUFBLFdBQUFDLFFBQUE7UUFBQSxrQkFBQUEsUUFBQSxDQUFBbkIsSUFBQSxHQUFBbUIsUUFBQSxDQUFBQyxJQUFBO1VBQUE7WUFDNURQLElBQUksSUFBQUQsbUJBQUEsR0FBRzNDLEtBQUssQ0FBQ0MsTUFBTSxDQUFDbUQsS0FBSyxjQUFBVCxtQkFBQSx1QkFBbEJBLG1CQUFBLENBQXFCLENBQUMsQ0FBQztZQUNwQyxJQUFJaEYsWUFBWSxDQUFDYSxPQUFPLEVBQUU7Y0FDeEJiLFlBQVksQ0FBQ2EsT0FBTyxDQUFDcUQsS0FBSyxHQUFHLEVBQUU7WUFDakM7WUFBQyxJQUNJZSxJQUFJO2NBQUFNLFFBQUEsQ0FBQUMsSUFBQTtjQUFBO1lBQUE7WUFBQSxPQUFBRCxRQUFBLENBQUFHLE1BQUE7VUFBQTtZQUVIUixVQUFVLEdBQUcsbUJBQW1CLENBQUNTLElBQUksQ0FBQ1YsSUFBSSxDQUFDckksSUFBSSxDQUFDO1lBQUEsSUFDakRzSSxVQUFVO2NBQUFLLFFBQUEsQ0FBQUMsSUFBQTtjQUFBO1lBQUE7WUFDYmpILGNBQWMsQ0FBQzFGLE1BQU0sQ0FBQytNLGlCQUFpQixFQUFFO2NBQUVDLE1BQU0sRUFBRTtZQUFhLENBQUMsQ0FBQztZQUNsRW5ILG1CQUFtQixDQUFDTCxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUFBLE9BQUFrSCxRQUFBLENBQUFHLE1BQUE7VUFBQTtZQUFBLE1BSTVDVCxJQUFJLENBQUNhLElBQUksR0FBR3ZNLHVCQUF1QjtjQUFBZ00sUUFBQSxDQUFBQyxJQUFBO2NBQUE7WUFBQTtZQUNyQ2pILGNBQWMsQ0FBQzFGLE1BQU0sQ0FBQytNLGlCQUFpQixFQUFFO2NBQUVDLE1BQU0sRUFBRTtZQUFhLENBQUMsQ0FBQztZQUNsRW5ILG1CQUFtQixDQUFDTCxDQUFDLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUFBLE9BQUFrSCxRQUFBLENBQUFHLE1BQUE7VUFBQTtZQUFBSCxRQUFBLENBQUFuQixJQUFBO1lBQUFtQixRQUFBLENBQUFDLElBQUE7WUFBQSxPQUsvQlAsSUFBSSxDQUFDRSxJQUFJLENBQUMsQ0FBQztVQUFBO1lBQXhCQSxJQUFJLEdBQUFJLFFBQUEsQ0FBQVEsSUFBQTtZQUFBLEtBQ056TSx1QkFBdUIsQ0FBQzZMLElBQUksQ0FBQztjQUFBSSxRQUFBLENBQUFDLElBQUE7Y0FBQTtZQUFBO1lBQy9CakgsY0FBYyxDQUFDMUYsTUFBTSxDQUFDK00saUJBQWlCLEVBQUU7Y0FBRUMsTUFBTSxFQUFFO1lBQWEsQ0FBQyxDQUFDO1lBQ2xFbkgsbUJBQW1CLENBQUNMLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQUEsT0FBQWtILFFBQUEsQ0FBQUcsTUFBQTtVQUFBO1lBRzlDTixRQUFRLEdBQUdILElBQUksQ0FBQ3JJLElBQUksQ0FBQ29KLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUM7WUFDckQzQyxpQkFBaUIsR0FBR3BHLDJCQUEyQixDQUFDa0ksSUFBSSxDQUFDO1lBQzNEcEYsU0FBUyxDQUFDLFVBQUFxRSxJQUFJO2NBQUEsSUFBQTZCLGFBQUEsRUFBQUMsY0FBQSxFQUFBQyxjQUFBO2NBQUEsT0FBQW5ELGFBQUEsQ0FBQUEsYUFBQSxLQUNUb0IsSUFBSTtnQkFDUDNILE9BQU8sRUFBQXVHLGFBQUEsQ0FBQUEsYUFBQSxLQUNGb0IsSUFBSSxDQUFDM0gsT0FBTztrQkFDZkssT0FBTyxFQUFFcUksSUFBSTtrQkFDYnRJLFdBQVcsRUFBRSxDQUFBb0osYUFBQSxHQUFBN0IsSUFBSSxDQUFDM0gsT0FBTyxjQUFBd0osYUFBQSxnQkFBQUEsYUFBQSxHQUFaQSxhQUFBLENBQWNwSixXQUFXLGNBQUFvSixhQUFBLGVBQXpCQSxhQUFBLENBQTJCNUksSUFBSSxDQUFDLENBQUMsR0FDMUMrRyxJQUFJLENBQUMzSCxPQUFPLENBQUNJLFdBQVcsR0FDeEJ3RyxpQkFBaUIsTUFBQTZDLGNBQUEsR0FBSTlCLElBQUksQ0FBQzNILE9BQU8sY0FBQXlKLGNBQUEsdUJBQVpBLGNBQUEsQ0FBY3JKLFdBQVcsS0FBSSxFQUFFO2tCQUN4REQsSUFBSSxFQUFFLENBQUF1SixjQUFBLEdBQUEvQixJQUFJLENBQUMzSCxPQUFPLGNBQUEwSixjQUFBLGdCQUFBQSxjQUFBLEdBQVpBLGNBQUEsQ0FBY3ZKLElBQUksY0FBQXVKLGNBQUEsZUFBbEJBLGNBQUEsQ0FBb0I5SSxJQUFJLENBQUMsQ0FBQyxHQUFHK0csSUFBSSxDQUFDM0gsT0FBTyxDQUFDRyxJQUFJLEdBQUd3STtnQkFBUTtjQUNoRTtZQUFBLENBQ0QsQ0FBQztZQUNIN0csY0FBYyxDQUFDMUYsTUFBTSxDQUFDK00saUJBQWlCLEVBQUU7Y0FBRUMsTUFBTSxFQUFFO1lBQVUsQ0FBQyxDQUFDO1lBQUFOLFFBQUEsQ0FBQUMsSUFBQTtZQUFBO1VBQUE7WUFBQUQsUUFBQSxDQUFBbkIsSUFBQTtZQUFBaUIsRUFBQSxHQUFBRSxRQUFBO1lBRS9EN0csbUJBQW1CLENBQUNMLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1VBQUE7VUFBQTtZQUFBLE9BQUFrSCxRQUFBLENBQUFhLElBQUE7UUFBQTtNQUFBLEdBQUFyQixPQUFBO0lBQUEsQ0FFakQ7SUFBQSxnQkE1Q0tMLGdCQUFnQkEsQ0FBQTJCLEVBQUE7TUFBQSxPQUFBMUIsS0FBQSxDQUFBMkIsS0FBQSxPQUFBQyxTQUFBO0lBQUE7RUFBQSxHQTRDckI7RUFFRCxJQUFNQyxZQUFZO0lBQUEsSUFBQUMsS0FBQSxHQUFBN0IsaUJBQUEsY0FBQUMsbUJBQUEsQ0FBQUMsSUFBQSxDQUFHLFNBQUE0QixTQUFBO01BQUEsSUFBQUMsT0FBQSxFQUFBQyxPQUFBLEVBQUFDLE9BQUE7TUFBQSxPQUFBaEMsbUJBQUEsQ0FBQVMsSUFBQSxXQUFBd0IsU0FBQTtRQUFBLGtCQUFBQSxTQUFBLENBQUExQyxJQUFBLEdBQUEwQyxTQUFBLENBQUF0QixJQUFBO1VBQUE7WUFDYm1CLE9BQU8sR0FBRztjQUNkL0osSUFBSSxFQUFFQSxJQUFJLENBQUNTLElBQUksQ0FBQyxDQUFDO2NBQ2pCUixXQUFXLEVBQUVBLFdBQVcsQ0FBQ1EsSUFBSSxDQUFDLENBQUM7Y0FDL0JQLE9BQU8sRUFBRUEsT0FBTyxDQUFDTyxJQUFJLENBQUMsQ0FBQztjQUN2Qk4sV0FBVyxFQUFFd0Q7WUFDZixDQUFDO1lBQUEsTUFFR1QsTUFBTSxDQUFDdkQsU0FBUyxJQUFJaUUsT0FBTztjQUFBc0csU0FBQSxDQUFBdEIsSUFBQTtjQUFBO1lBQUE7WUFBQXNCLFNBQUEsQ0FBQXRCLElBQUE7WUFBQSxPQUNQdE0sV0FBVyxDQUFDc0gsT0FBTyxFQUFFbUcsT0FBTyxDQUFDO1VBQUE7WUFBN0NDLE9BQU8sR0FBQUUsU0FBQSxDQUFBZixJQUFBO1lBQ2I5SCxpQkFBaUIsYUFBakJBLGlCQUFpQixlQUFqQkEsaUJBQWlCLENBQUcySSxPQUFPLENBQUM7WUFDNUJuSSxxQkFBcUIsQ0FBQ0osQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFBQSxPQUFBeUksU0FBQSxDQUFBcEIsTUFBQSxXQUMzQ2tCLE9BQU87VUFBQTtZQUFBRSxTQUFBLENBQUF0QixJQUFBO1lBQUEsT0FHTXZNLFdBQVcsQ0FBQzBOLE9BQU8sQ0FBQztVQUFBO1lBQXBDRSxPQUFPLEdBQUFDLFNBQUEsQ0FBQWYsSUFBQTtZQUNiL0gsUUFBUSxhQUFSQSxRQUFRLGVBQVJBLFFBQVEsQ0FBRzZJLE9BQU8sQ0FBQztZQUNuQnBJLHFCQUFxQixDQUFDSixDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUFBLE9BQUF5SSxTQUFBLENBQUFwQixNQUFBLFdBQzNDbUIsT0FBTztVQUFBO1VBQUE7WUFBQSxPQUFBQyxTQUFBLENBQUFWLElBQUE7UUFBQTtNQUFBLEdBQUFNLFFBQUE7SUFBQSxDQUNmO0lBQUEsZ0JBbkJLRixZQUFZQSxDQUFBO01BQUEsT0FBQUMsS0FBQSxDQUFBSCxLQUFBLE9BQUFDLFNBQUE7SUFBQTtFQUFBLEdBbUJqQjtFQUVELElBQU1RLFVBQVU7SUFBQSxJQUFBQyxLQUFBLEdBQUFwQyxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQUcsU0FBQW1DLFNBQUE7TUFBQSxJQUFBQyxVQUFBLEVBQUFDLEdBQUE7TUFBQSxPQUFBdEMsbUJBQUEsQ0FBQVMsSUFBQSxXQUFBOEIsU0FBQTtRQUFBLGtCQUFBQSxTQUFBLENBQUFoRCxJQUFBLEdBQUFnRCxTQUFBLENBQUE1QixJQUFBO1VBQUE7WUFBQSxNQUNiLENBQUM3RSxPQUFPLElBQUl6QixZQUFZLElBQUksQ0FBQzBCLFVBQVU7Y0FBQXdHLFNBQUEsQ0FBQTVCLElBQUE7Y0FBQTtZQUFBO1lBQUEsT0FBQTRCLFNBQUEsQ0FBQTFCLE1BQUE7VUFBQTtZQUMzQ3ZHLGVBQWUsQ0FBQyxJQUFJLENBQUM7WUFBQWlJLFNBQUEsQ0FBQWhELElBQUE7WUFBQWdELFNBQUEsQ0FBQTVCLElBQUE7WUFBQSxPQUVNZ0IsWUFBWSxDQUFDLENBQUM7VUFBQTtZQUFqQ1UsVUFBVSxHQUFBRSxTQUFBLENBQUFyQixJQUFBO1lBQ2hCLElBQUltQixVQUFVLEVBQUU7Y0FDZDNJLGNBQWMsQ0FBQzFGLE1BQU0sQ0FBQ3dPLHFCQUFxQixFQUFFO2dCQUMzQ2xGLE1BQU0sRUFBRXJDLE1BQU0sQ0FBQ3ZELFNBQVMsR0FBRyxNQUFNLEdBQUcsUUFBUTtnQkFDNUMrSyxNQUFNLEVBQUUsTUFBTTtnQkFDZHZLLFdBQVcsRUFBRXdELG1CQUFtQjtnQkFDaENnSCxRQUFRLEVBQUVMLFVBQVUsQ0FBQ3hLO2NBQ3ZCLENBQUMsQ0FBQztZQUNKO1lBQ0FzRixXQUFXLENBQUMsQ0FBQztZQUFBb0YsU0FBQSxDQUFBNUIsSUFBQTtZQUFBO1VBQUE7WUFBQTRCLFNBQUEsQ0FBQWhELElBQUE7WUFBQStDLEdBQUEsR0FBQUMsU0FBQTtZQUViMUksbUJBQW1CLENBQUNvQixNQUFNLENBQUN2RCxTQUFTLEdBQUc4QixDQUFDLENBQUMsc0JBQXNCLENBQUMsR0FBR0EsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUM7VUFBQTtZQUFBK0ksU0FBQSxDQUFBaEQsSUFBQTtZQUU3RmpGLGVBQWUsQ0FBQyxLQUFLLENBQUM7WUFBQSxPQUFBaUksU0FBQSxDQUFBSSxNQUFBO1VBQUE7VUFBQTtZQUFBLE9BQUFKLFNBQUEsQ0FBQWhCLElBQUE7UUFBQTtNQUFBLEdBQUFhLFFBQUE7SUFBQSxDQUV6QjtJQUFBLGdCQW5CS0YsVUFBVUEsQ0FBQTtNQUFBLE9BQUFDLEtBQUEsQ0FBQVYsS0FBQSxPQUFBQyxTQUFBO0lBQUE7RUFBQSxHQW1CZjtFQUVELElBQU1rQixnQkFBZ0I7SUFBQSxJQUFBQyxLQUFBLEdBQUE5QyxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQUcsU0FBQTZDLFNBQUE7TUFBQSxJQUFBVCxVQUFBLEVBQUFVLEdBQUE7TUFBQSxPQUFBL0MsbUJBQUEsQ0FBQVMsSUFBQSxXQUFBdUMsU0FBQTtRQUFBLGtCQUFBQSxTQUFBLENBQUF6RCxJQUFBLEdBQUF5RCxTQUFBLENBQUFyQyxJQUFBO1VBQUE7WUFBQSxNQUNuQixDQUFDN0UsT0FBTyxJQUFJekIsWUFBWTtjQUFBMkksU0FBQSxDQUFBckMsSUFBQTtjQUFBO1lBQUE7WUFBQSxPQUFBcUMsU0FBQSxDQUFBbkMsTUFBQTtVQUFBO1lBQzVCdkcsZUFBZSxDQUFDLElBQUksQ0FBQztZQUFBMEksU0FBQSxDQUFBekQsSUFBQTtZQUFBeUQsU0FBQSxDQUFBckMsSUFBQTtZQUFBLE9BRU1nQixZQUFZLENBQUMsQ0FBQztVQUFBO1lBQWpDVSxVQUFVLEdBQUFXLFNBQUEsQ0FBQTlCLElBQUE7WUFDaEIsSUFBSW1CLFVBQVUsRUFBRTtjQUNkM0ksY0FBYyxDQUFDMUYsTUFBTSxDQUFDd08scUJBQXFCLEVBQUU7Z0JBQzNDbEYsTUFBTSxFQUFFckMsTUFBTSxDQUFDdkQsU0FBUyxHQUFHLE1BQU0sR0FBRyxRQUFRO2dCQUM1QytLLE1BQU0sRUFBRSxjQUFjO2dCQUN0QnZLLFdBQVcsRUFBRXdELG1CQUFtQjtnQkFDaENnSCxRQUFRLEVBQUVMLFVBQVUsQ0FBQ3hLO2NBQ3ZCLENBQUMsQ0FBQztjQUNGaUgsUUFBUSxDQUFDbUUsYUFBYSxDQUNwQixJQUFJQyxXQUFXLENBQUM1TCwwQkFBMEIsRUFBRTtnQkFDMUMwRyxNQUFNLEVBQUU7a0JBQUVtRixLQUFLLEVBQUVkO2dCQUFXO2NBQzlCLENBQUMsQ0FDSCxDQUFDO1lBQ0g7WUFDQWxGLFdBQVcsQ0FBQyxDQUFDO1lBQUE2RixTQUFBLENBQUFyQyxJQUFBO1lBQUE7VUFBQTtZQUFBcUMsU0FBQSxDQUFBekQsSUFBQTtZQUFBd0QsR0FBQSxHQUFBQyxTQUFBO1lBRWJuSixtQkFBbUIsQ0FBQ29CLE1BQU0sQ0FBQ3ZELFNBQVMsR0FBRzhCLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHQSxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQztVQUFBO1lBQUF3SixTQUFBLENBQUF6RCxJQUFBO1lBRTdGakYsZUFBZSxDQUFDLEtBQUssQ0FBQztZQUFBLE9BQUEwSSxTQUFBLENBQUFMLE1BQUE7VUFBQTtVQUFBO1lBQUEsT0FBQUssU0FBQSxDQUFBekIsSUFBQTtRQUFBO01BQUEsR0FBQXVCLFFBQUE7SUFBQSxDQUV6QjtJQUFBLGdCQXhCS0YsZ0JBQWdCQSxDQUFBO01BQUEsT0FBQUMsS0FBQSxDQUFBcEIsS0FBQSxPQUFBQyxTQUFBO0lBQUE7RUFBQSxHQXdCckI7RUFFRCxJQUFNMEIsbUJBQW1CO0lBQUEsSUFBQUMsS0FBQSxHQUFBdEQsaUJBQUEsY0FBQUMsbUJBQUEsQ0FBQUMsSUFBQSxDQUFHLFNBQUFxRCxTQUFBO01BQUEsSUFBQUMsR0FBQTtNQUFBLE9BQUF2RCxtQkFBQSxDQUFBUyxJQUFBLFdBQUErQyxTQUFBO1FBQUEsa0JBQUFBLFNBQUEsQ0FBQWpFLElBQUEsR0FBQWlFLFNBQUEsQ0FBQTdDLElBQUE7VUFBQTtZQUFBLElBQ3JCaEYsT0FBTztjQUFBNkgsU0FBQSxDQUFBN0MsSUFBQTtjQUFBO1lBQUE7WUFBQSxPQUFBNkMsU0FBQSxDQUFBM0MsTUFBQTtVQUFBO1lBQUEyQyxTQUFBLENBQUFqRSxJQUFBO1lBQUFpRSxTQUFBLENBQUE3QyxJQUFBO1lBQUEsT0FFSnJNLFdBQVcsQ0FBQ3FILE9BQU8sQ0FBQztVQUFBO1lBQzFCakMsY0FBYyxDQUFDMUYsTUFBTSxDQUFDeVAsb0JBQW9CLEVBQUU7Y0FBRWYsUUFBUSxFQUFFL0csT0FBTztjQUFFaUQsTUFBTSxFQUFFO1lBQVEsQ0FBQyxDQUFDO1lBQ25GdkYsV0FBVyxhQUFYQSxXQUFXLGVBQVhBLFdBQVcsQ0FBR3NDLE9BQU8sQ0FBQztZQUN0Qi9CLHFCQUFxQixDQUFDSixDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUNsRDJELFdBQVcsQ0FBQyxDQUFDO1lBQUFxRyxTQUFBLENBQUE3QyxJQUFBO1lBQUE7VUFBQTtZQUFBNkMsU0FBQSxDQUFBakUsSUFBQTtZQUFBZ0UsR0FBQSxHQUFBQyxTQUFBO1lBRWIzSixtQkFBbUIsQ0FBQ0wsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUM7VUFBQTtVQUFBO1lBQUEsT0FBQWdLLFNBQUEsQ0FBQWpDLElBQUE7UUFBQTtNQUFBLEdBQUErQixRQUFBO0lBQUEsQ0FFakQ7SUFBQSxnQkFYS0YsbUJBQW1CQSxDQUFBO01BQUEsT0FBQUMsS0FBQSxDQUFBNUIsS0FBQSxPQUFBQyxTQUFBO0lBQUE7RUFBQSxHQVd4QjtFQUVELElBQU1nQyxrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQWtCQSxDQUFBLEVBQVM7SUFDL0J4SSxTQUFTLENBQUMsVUFBQXFFLElBQUk7TUFBQSxPQUFBcEIsYUFBQSxDQUFBQSxhQUFBLEtBQVVvQixJQUFJO1FBQUU5SCxVQUFVLEVBQUU7TUFBSztJQUFBLENBQUcsQ0FBQztFQUNyRCxDQUFDOztFQUVEO0VBQ0EsSUFBTWtNLGNBQWMsR0FBRyxTQUFqQkEsY0FBY0EsQ0FBQSxFQUFTO0lBQzNCLElBQUksQ0FBQ2hJLE9BQU8sRUFBRTtJQUNkakMsY0FBYyxDQUFDMUYsTUFBTSxDQUFDNFAsY0FBYyxFQUFFO01BQ3BDbEIsUUFBUSxFQUFFL0csT0FBTztNQUNqQnpELFdBQVcsRUFBRXVELFVBQVU7TUFDdkJtRCxNQUFNLEVBQUUsWUFBWTtNQUNwQmlGLFNBQVMsRUFBRXhJO0lBQ2IsQ0FBQyxDQUFDO0lBQ0Z5RCxRQUFRLENBQUNtRSxhQUFhLENBQ3BCLElBQUlDLFdBQVcsQ0FBQzVMLDBCQUEwQixFQUFFO01BQzFDMEcsTUFBTSxFQUFFO1FBQ05tRixLQUFLLEVBQUU7VUFBRXRMLEVBQUUsRUFBRThELE9BQU87VUFBRTVELElBQUksRUFBSkEsSUFBSTtVQUFFQyxXQUFXLEVBQVhBLFdBQVc7VUFBRUMsT0FBTyxFQUFQQSxPQUFPO1VBQUVDLFdBQVcsRUFBRXVEO1FBQVcsQ0FBQztRQUMzRXFJLGFBQWEsRUFBRTtNQUNqQjtJQUNGLENBQUMsQ0FDSCxDQUFDO0lBQ0QzRyxXQUFXLENBQUMsQ0FBQztFQUNmLENBQUM7RUFFRCxJQUFJLENBQUNsRCxNQUFNLEVBQUUsT0FBTyxJQUFJO0VBRXhCLElBQU04SixTQUFTLEdBQUdqRixRQUFRLENBQUNrRixjQUFjLENBQUMsb0JBQW9CLENBQUM7RUFDL0QsSUFBSSxDQUFDRCxTQUFTLEVBQUUsT0FBTyxJQUFJO0VBRTNCLElBQU1FLGlCQUFpQixHQUFHaEosTUFBTSxDQUFDdkQsU0FBUyxHQUFHOEIsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEdBQUdBLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQztFQUNoRyxJQUFNMEssU0FBUyxHQUFHN0ksYUFBYSxHQUFHN0IsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEdBQUdBLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQztFQUN0RixJQUFNMkssVUFBVSxHQUFHMU0sVUFBVSxHQUFHeU0sU0FBUyxHQUFHRCxpQkFBaUI7RUFFN0QsSUFBTUcsV0FBVyxnQkFDZmpOLEtBQUEsQ0FBQ25CLGdCQUFnQjtJQUFBcU8sUUFBQSxnQkFDZmxOLEtBQUEsQ0FBQ2Ysd0JBQXdCO01BQUFpTyxRQUFBLGdCQUN2QnBOLElBQUEsQ0FBQ1QsZ0JBQWdCO1FBQUE2TixRQUFBLEVBQUV0TTtNQUFJLENBQW1CLENBQUMsRUFDMUNDLFdBQVcsZ0JBQUdmLElBQUEsQ0FBQ2QsdUJBQXVCO1FBQUFrTyxRQUFBLEVBQUVyTTtNQUFXLENBQTBCLENBQUMsR0FBRyxJQUFJO0lBQUEsQ0FDOUQsQ0FBQyxlQUUzQmIsS0FBQSxDQUFDYix1QkFBdUI7TUFBQStOLFFBQUEsR0FDckJwSSxjQUFjLGdCQUNiOUUsS0FBQSxDQUFDcEIsaUJBQWlCO1FBQUFzTyxRQUFBLGdCQUNoQnBOLElBQUEsQ0FBQ1oseUJBQXlCO1VBQUFnTyxRQUFBLEVBQUU3SyxDQUFDLENBQUMsb0JBQW9CO1FBQUMsQ0FBNEIsQ0FBQyxlQUNoRnZDLElBQUEsQ0FBQ1YseUJBQXlCO1VBQUE4TixRQUFBLEVBQUVwSTtRQUFjLENBQTRCLENBQUM7TUFBQSxDQUN0RCxDQUFDLEdBQ2xCLElBQUksRUFDUE8sZ0JBQWdCLGdCQUNmckYsS0FBQSxDQUFDcEIsaUJBQWlCO1FBQUFzTyxRQUFBLGdCQUNoQnBOLElBQUEsQ0FBQ1oseUJBQXlCO1VBQUFnTyxRQUFBLEVBQUU3SyxDQUFDLENBQUMsc0JBQXNCO1FBQUMsQ0FBNEIsQ0FBQyxlQUNsRnZDLElBQUEsQ0FBQ1YseUJBQXlCO1VBQUE4TixRQUFBLEVBQUU3SDtRQUFnQixDQUE0QixDQUFDO01BQUEsQ0FDeEQsQ0FBQyxHQUNsQixJQUFJLEVBQ1AsQ0FBQ25CLGFBQWEsZ0JBQ2JsRSxLQUFBLENBQUNwQixpQkFBaUI7UUFBQXNPLFFBQUEsZ0JBQ2hCcE4sSUFBQSxDQUFDWix5QkFBeUI7VUFBQWdPLFFBQUEsRUFBRTdLLENBQUMsQ0FBQyx1QkFBdUI7UUFBQyxDQUE0QixDQUFDLGVBQ25GdkMsSUFBQSxDQUFDVix5QkFBeUI7VUFBQThOLFFBQUEsRUFDdkI1SSxVQUFVLEtBQUssU0FBUyxHQUFHakMsQ0FBQyxDQUFDLDZCQUE2QixDQUFDLEdBQUdBLENBQUMsQ0FBQywyQkFBMkI7UUFBQyxDQUNwRSxDQUFDO01BQUEsQ0FDWCxDQUFDLEdBQ2xCLElBQUk7SUFBQSxDQUNlLENBQUMsZUFFMUJyQyxLQUFBLENBQUNqQix3QkFBd0I7TUFBQW1PLFFBQUEsZ0JBQ3ZCcE4sSUFBQSxDQUFDbkIsc0JBQXNCO1FBQUF1TyxRQUFBLEVBQUU3SyxDQUFDLENBQUMsNEJBQTRCO01BQUMsQ0FBeUIsQ0FBQyxlQUNsRnZDLElBQUEsQ0FBQ2hCLHNCQUFzQjtRQUFBb08sUUFBQSxFQUFFcE07TUFBTyxDQUF5QixDQUFDO0lBQUEsQ0FDbEMsQ0FBQztFQUFBLENBQ1gsQ0FDbkI7RUFFRCxvQkFBTzNFLFlBQVksY0FDakI2RCxLQUFBLENBQUN6RCxRQUFRO0lBQUM0USxNQUFNLEVBQUUsSUFBSztJQUFDQyxPQUFPLEVBQUVoSCxtQkFBb0I7SUFBQThHLFFBQUEsZ0JBQ25EbE4sS0FBQSxDQUFDSixZQUFZO01BQUN3TixPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBRS9HLEtBQUs7UUFBQSxPQUFJQSxLQUFLLENBQUNnSCxlQUFlLENBQUMsQ0FBQztNQUFBLENBQUM7TUFBQUgsUUFBQSxnQkFDdERsTixLQUFBLENBQUM1QixXQUFXO1FBQUE4TyxRQUFBLGdCQUNWcE4sSUFBQSxDQUFDekIsZ0JBQWdCO1VBQUE2TyxRQUFBLEVBQUVGO1FBQVUsQ0FBbUIsQ0FBQyxlQUNqRGxOLElBQUEsQ0FBQ25DLGdCQUFnQjtVQUFDMlAsSUFBSSxFQUFDLFFBQVE7VUFBQ0YsT0FBTyxFQUFFbkgsWUFBYTtVQUFDLGNBQVk1RCxDQUFDLENBQUMsZ0JBQWdCLENBQUU7VUFBQTZLLFFBQUEsZUFDckZwTixJQUFBLENBQUMxRCxLQUFLO1lBQUNtUixLQUFLLEVBQUMsU0FBUztZQUFDQyxLQUFLLEVBQUUsRUFBRztZQUFDQyxNQUFNLEVBQUU7VUFBRyxDQUFFO1FBQUMsQ0FDaEMsQ0FBQztNQUFBLENBQ1IsQ0FBQyxFQUVibk4sVUFBVSxHQUNUMk0sV0FBVyxnQkFFWGpOLEtBQUEsQ0FBQ3BDLFNBQVM7UUFBQXNQLFFBQUEsZ0JBQ1JsTixLQUFBLENBQUNqQyxhQUFhO1VBQUMyUCxPQUFPLEVBQUUsRUFBRztVQUFBUixRQUFBLGdCQUN6QnBOLElBQUEsQ0FBQzdCLGVBQWU7WUFBQzBQLE9BQU8sRUFBQyxrQkFBa0I7WUFBQVQsUUFBQSxFQUFFN0ssQ0FBQyxDQUFDLG9CQUFvQjtVQUFDLENBQWtCLENBQUMsZUFDdkZ2QyxJQUFBLENBQUM5QixlQUFlO1lBQ2QwQyxFQUFFLEVBQUMsa0JBQWtCO1lBQ3JCNE0sSUFBSSxFQUFDLE1BQU07WUFDWE0sU0FBUyxFQUFFLEdBQUk7WUFDZkMsV0FBVyxFQUFFeEwsQ0FBQyxDQUFDLDBCQUEwQixDQUFFO1lBQzNDNkYsS0FBSyxFQUFFdEgsSUFBSztZQUNaa04sUUFBUSxFQUFFNUssWUFBYTtZQUN2QjZLLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFFMUgsS0FBSztjQUFBLE9BQUkyQixpQkFBaUIsQ0FBQyxNQUFNLEVBQUUzQixLQUFLLENBQUNDLE1BQU0sQ0FBQzRCLEtBQUssQ0FBQztZQUFBO1VBQUMsQ0FDbEUsQ0FBQztRQUFBLENBQ1csQ0FBQyxlQUVoQmxJLEtBQUEsQ0FBQ2pDLGFBQWE7VUFBQzJQLE9BQU8sRUFBRSxHQUFJO1VBQUNNLGFBQWE7VUFBQWQsUUFBQSxnQkFDeENwTixJQUFBLENBQUM3QixlQUFlO1lBQUMwUCxPQUFPLEVBQUMseUJBQXlCO1lBQUFULFFBQUEsRUFBRTdLLENBQUMsQ0FBQywyQkFBMkI7VUFBQyxDQUFrQixDQUFDLGVBQ3JHdkMsSUFBQSxDQUFDNUIsa0JBQWtCO1lBQ2pCd0MsRUFBRSxFQUFDLHlCQUF5QjtZQUM1QmtOLFNBQVMsRUFBRSxHQUFJO1lBQ2ZDLFdBQVcsRUFBRXhMLENBQUMsQ0FBQyxpQ0FBaUMsQ0FBRTtZQUNsRDZGLEtBQUssRUFBRXJILFdBQVk7WUFDbkJpTixRQUFRLEVBQUU1SyxZQUFhO1lBQ3ZCNkssUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUUxSCxLQUFLO2NBQUEsT0FBSTJCLGlCQUFpQixDQUFDLGFBQWEsRUFBRTNCLEtBQUssQ0FBQ0MsTUFBTSxDQUFDNEIsS0FBSyxDQUFDO1lBQUE7VUFBQyxDQUN6RSxDQUFDO1FBQUEsQ0FDVyxDQUFDLEVBRWY5RCxtQkFBbUIsZ0JBQ2xCcEUsS0FBQSxDQUFDUCxjQUFjO1VBQUF5TixRQUFBLGdCQUNicE4sSUFBQSxDQUFDckQsTUFBTTtZQUNMOEwsT0FBTyxFQUFFakUsVUFBVSxLQUFLLFNBQVU7WUFDbEN5SixRQUFRLEVBQUV6RixzQkFBdUI7WUFDakN3RixRQUFRLEVBQUU1SyxZQUFhO1lBQ3ZCLGNBQVliLENBQUMsQ0FBQywyQkFBMkI7VUFBRSxDQUM1QyxDQUFDLGVBQ0Z2QyxJQUFBLENBQUNOLGdCQUFnQjtZQUFBME4sUUFBQSxFQUFFN0ssQ0FBQyxDQUFDLDJCQUEyQjtVQUFDLENBQW1CLENBQUM7UUFBQSxDQUN2RCxDQUFDLEdBQ2YsSUFBSSxlQUVSckMsS0FBQSxDQUFDdkIsc0JBQXNCO1VBQUF5TyxRQUFBLGdCQUNyQmxOLEtBQUEsQ0FBQ3hCLHVCQUF1QjtZQUFBME8sUUFBQSxnQkFDdEJwTixJQUFBLENBQUNuQixzQkFBc0I7Y0FBQXVPLFFBQUEsRUFBRTdLLENBQUMsQ0FBQyw0QkFBNEI7WUFBQyxDQUF5QixDQUFDLGVBQ2xGckMsS0FBQSxDQUFDTixpQkFBaUI7Y0FBQzROLElBQUksRUFBQyxRQUFRO2NBQUNGLE9BQU8sRUFBRTVFLGlCQUFrQjtjQUFDc0YsUUFBUSxFQUFFNUssWUFBYTtjQUFBZ0ssUUFBQSxnQkFDbEZwTixJQUFBLENBQUN6RCxVQUFVO2dCQUFDbVIsS0FBSyxFQUFFLEVBQUc7Z0JBQUNDLE1BQU0sRUFBRSxFQUFHO2dCQUFDRixLQUFLLEVBQUM7Y0FBTSxDQUFFLENBQUMsRUFDakRsTCxDQUFDLENBQUMsbUJBQW1CLENBQUM7WUFBQSxDQUNOLENBQUMsZUFDcEJ2QyxJQUFBLENBQUN4QixvQkFBb0I7Y0FDbkIyUCxHQUFHLEVBQUVqSyxZQUFhO2NBQ2xCc0osSUFBSSxFQUFDLE1BQU07Y0FDWFksTUFBTSxFQUFDLDZCQUE2QjtjQUNwQ0gsUUFBUSxFQUFFckY7WUFBaUIsQ0FDNUIsQ0FBQztVQUFBLENBQ3FCLENBQUMsZUFFMUI1SSxJQUFBLENBQUN2QixzQkFBc0I7WUFBQTJPLFFBQUEsZUFDckJwTixJQUFBLENBQUNwQix5QkFBeUI7Y0FDeEJnQyxFQUFFLEVBQUMscUJBQXFCO2NBQ3hCbU4sV0FBVyxFQUFFeEwsQ0FBQyxDQUFDLDZCQUE2QixDQUFFO2NBQzlDNkYsS0FBSyxFQUFFcEgsT0FBUTtjQUNmZ04sUUFBUSxFQUFFNUssWUFBYTtjQUN2QjZLLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFFMUgsS0FBSztnQkFBQSxPQUFJMkIsaUJBQWlCLENBQUMsU0FBUyxFQUFFM0IsS0FBSyxDQUFDQyxNQUFNLENBQUM0QixLQUFLLENBQUM7Y0FBQTtZQUFDLENBQ3JFO1VBQUMsQ0FDb0IsQ0FBQyxlQUN6QnBJLElBQUEsQ0FBQ3JDLGdCQUFnQjtZQUFDMFEsVUFBVSxFQUFFekosV0FBWTtZQUFDLGFBQVUsUUFBUTtZQUFBd0ksUUFBQSxFQUMxRDdLLENBQUMsQ0FBQyx1QkFBdUIsRUFBRTtjQUMxQitMLElBQUksRUFBRWhSLGVBQWUsQ0FBQ3FILFlBQVksQ0FBQztjQUNuQzRKLEdBQUcsRUFBRWpSLGVBQWUsQ0FBQ0csdUJBQXVCO1lBQzlDLENBQUM7VUFBQyxDQUNjLENBQUM7UUFBQSxDQUNHLENBQUM7TUFBQSxDQUNoQixDQUNaLGVBRUR5QyxLQUFBLENBQUM3QixXQUFXO1FBQUErTyxRQUFBLEdBQ1Q1TSxVQUFVLElBQUk0RCxhQUFhLGdCQUMxQnBFLElBQUEsQ0FBQ0gsbUJBQW1CO1VBQUMyTixJQUFJLEVBQUMsUUFBUTtVQUFDRixPQUFPLEVBQUVaLGNBQWU7VUFBQVUsUUFBQSxFQUN4RDdLLENBQUMsQ0FBQyxtQkFBbUI7UUFBQyxDQUNKLENBQUMsR0FDcEIsSUFBSSxFQUVQL0IsVUFBVSxJQUFJLENBQUM0RCxhQUFhLGdCQUMzQmxFLEtBQUEsQ0FBQUUsU0FBQTtVQUFBZ04sUUFBQSxnQkFDRXBOLElBQUEsQ0FBQ2hDLGVBQWU7WUFBQW9QLFFBQUEsZUFDZHBOLElBQUEsQ0FBQ2pDLHlCQUF5QjtjQUFDeVAsSUFBSSxFQUFDLFFBQVE7Y0FBQ0YsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7Z0JBQUEsT0FBUTdKLGFBQWEsQ0FBQyxJQUFJLENBQUM7Y0FBQSxDQUFDO2NBQUEySixRQUFBLEVBQ3pFN0ssQ0FBQyxDQUFDLGlCQUFpQjtZQUFDLENBQ0k7VUFBQyxDQUNiLENBQUMsZUFDbEJ2QyxJQUFBLENBQUNQLHNCQUFzQjtZQUFDK04sSUFBSSxFQUFDLFFBQVE7WUFBQ0YsT0FBTyxFQUFFYixrQkFBbUI7WUFBQVcsUUFBQSxFQUMvRDdLLENBQUMsQ0FBQyxlQUFlO1VBQUMsQ0FDRyxDQUFDO1FBQUEsQ0FDekIsQ0FBQyxHQUNELElBQUksRUFFUCxDQUFDL0IsVUFBVSxnQkFDVk4sS0FBQSxDQUFBRSxTQUFBO1VBQUFnTixRQUFBLEdBQ0dwSixNQUFNLENBQUN2RCxTQUFTLGdCQUNmVCxJQUFBLENBQUNoQyxlQUFlO1lBQUFvUCxRQUFBLGVBQ2RwTixJQUFBLENBQUNwQyxpQkFBaUI7Y0FBQzRQLElBQUksRUFBQyxRQUFRO2NBQUNGLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO2dCQUFBLE9BQVE3SixhQUFhLENBQUMsSUFBSSxDQUFDO2NBQUEsQ0FBQztjQUFDdUssUUFBUSxFQUFFNUssWUFBYTtjQUFBZ0ssUUFBQSxFQUN6RjdLLENBQUMsQ0FBQyxpQkFBaUI7WUFBQyxDQUNKO1VBQUMsQ0FDTCxDQUFDLEdBQ2hCLElBQUksZUFDUnZDLElBQUEsQ0FBQ1IsdUJBQXVCO1lBQUNnTyxJQUFJLEVBQUMsUUFBUTtZQUFDRixPQUFPLEVBQUUzQixnQkFBaUI7WUFBQ3FDLFFBQVEsRUFBRSxDQUFDbkosT0FBTyxJQUFJekIsWUFBYTtZQUFBZ0ssUUFBQSxFQUNsR2hLLFlBQVksZ0JBQUdwRCxJQUFBLENBQUN0RCxNQUFNO2NBQUNzTixJQUFJLEVBQUM7WUFBTyxDQUFFLENBQUMsR0FBR3pILENBQUMsQ0FBQyxxQkFBcUI7VUFBQyxDQUMzQyxDQUFDLGVBQzFCdkMsSUFBQSxDQUFDUCxzQkFBc0I7WUFDckIrTixJQUFJLEVBQUMsUUFBUTtZQUNiRixPQUFPLEVBQUVyQyxVQUFXO1lBQ3BCK0MsUUFBUSxFQUFFLENBQUNuSixPQUFPLElBQUl6QixZQUFZLElBQUksQ0FBQzBCLFVBQVc7WUFBQXNJLFFBQUEsRUFFakRoSyxZQUFZLGdCQUFHcEQsSUFBQSxDQUFDdEQsTUFBTTtjQUFDc04sSUFBSSxFQUFDO1lBQU8sQ0FBRSxDQUFDLEdBQUd6SCxDQUFDLENBQUMsZUFBZTtVQUFDLENBQ3RDLENBQUM7UUFBQSxDQUN6QixDQUFDLEdBQ0QsSUFBSTtNQUFBLENBQ0csQ0FBQztJQUFBLENBQ0YsQ0FBQyxFQUVkaUIsVUFBVSxJQUFJa0IsT0FBTyxnQkFDcEIxRSxJQUFBLENBQUN0QyxtQkFBbUI7TUFDbEI4USxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtRQUFBLE9BQVEvSyxhQUFhLENBQUMsS0FBSyxDQUFDO01BQUEsQ0FBQztNQUNwQ2dMLFFBQVEsRUFBRTtRQUNSQyxtQkFBbUIsRUFBRXZDO01BQ3ZCLENBQUU7TUFDRndDLElBQUksRUFBRTtRQUFFQyxLQUFLLEVBQUU5TixJQUFJO1FBQUVGLEVBQUUsRUFBRThEO01BQVEsQ0FBRTtNQUNuQzhHLE1BQU0sRUFBQztJQUFPLENBQ2YsQ0FBQyxHQUNBLElBQUk7RUFBQSxDQUNBLENBQUMsRUFDWHNCLFNBQ0YsQ0FBQztBQUNILENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
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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