myrta-ui 17.2.6 → 17.2.7

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.
@@ -79,6 +79,31 @@ export class EditorComponent {
79
79
  blur: () => {
80
80
  this.changeFocused(false);
81
81
  },
82
+ keydown: (event) => {
83
+ const editor = this.editorElementRef?.jodit;
84
+ if (!editor || this.maxLength <= 0)
85
+ return true;
86
+ // 1. Получаем текущую длину текста
87
+ const currentLength = editor.text.length;
88
+ // 2. Список системных клавиш, которые нельзя блокировать
89
+ const isNavigationKey = [
90
+ 'Backspace', 'Delete', 'ArrowLeft', 'ArrowRight',
91
+ 'ArrowUp', 'ArrowDown', 'End', 'Home', 'Tab', 'Enter'
92
+ ].includes(event.key);
93
+ // Разрешаем сочетания с Ctrl/Cmd (Copy, Paste, Select All)
94
+ const isModifier = event.ctrlKey || event.metaKey;
95
+ if (currentLength >= this.maxLength && !isNavigationKey && !isModifier) {
96
+ // 3. Самый надежный способ проверить, выделено ли что-то:
97
+ // Если метод sel.isCollapsed недоступен, проверяем длину выделения через строку
98
+ const selectedText = editor.s.sel ? editor.s.sel.toString() : '';
99
+ // Если ничего не выделено, блокируем ввод нового символа
100
+ if (!selectedText.length) {
101
+ event.preventDefault();
102
+ return false;
103
+ }
104
+ }
105
+ return true;
106
+ },
82
107
  paste: (event) => {
83
108
  this.handlePaste(event);
84
109
  },
@@ -189,22 +214,35 @@ export class EditorComponent {
189
214
  this.changeDetection.detectChanges();
190
215
  }
191
216
  handlePaste(event) {
192
- if (!event.clipboardData || this.hasImageButton()) {
217
+ const editor = this.editorElementRef?.jodit;
218
+ if (!event.clipboardData || !editor)
193
219
  return;
220
+ const textData = event.clipboardData.getData('text/plain');
221
+ const currentLength = editor.text.length;
222
+ // Если вставка превышает лимит
223
+ if (this.maxLength > 0 && (currentLength + textData.length) > this.maxLength) {
224
+ event.preventDefault();
225
+ const remainingSpace = this.maxLength - currentLength;
226
+ if (remainingSpace > 0) {
227
+ // Вставляем только разрешенный кусочек
228
+ const truncatedText = textData.substring(0, remainingSpace);
229
+ editor.s.insertHTML(truncatedText);
230
+ }
231
+ return; // Прекращаем выполнение, чтобы не сработала логика картинок ниже
194
232
  }
195
- const { clipboardData } = event;
196
- const htmlData = clipboardData.getData('text/html');
197
- const hasHtmlImage = htmlData?.includes('<img');
198
- const hasImage = Array.from(clipboardData.items).some(item => item.type.startsWith('image/'));
199
- if (!hasImage && !hasHtmlImage) {
233
+ // Ваша существующая логика защиты от картинок
234
+ if (this.hasImageButton())
200
235
  return;
201
- }
202
- event.preventDefault();
203
- const sanitizedHtml = this.removeImagesFromHtml(htmlData);
204
- const textData = clipboardData.getData('text/plain');
205
- const contentToInsert = sanitizedHtml || textData;
206
- if (contentToInsert) {
207
- this.editorElementRef.jodit.s.insertHTML(contentToInsert);
236
+ const htmlData = event.clipboardData.getData('text/html');
237
+ const hasHtmlImage = htmlData?.includes('<img');
238
+ const hasImage = Array.from(event.clipboardData.items).some(item => item.type.startsWith('image/'));
239
+ if (hasImage || hasHtmlImage) {
240
+ event.preventDefault();
241
+ const sanitizedHtml = this.removeImagesFromHtml(htmlData);
242
+ const contentToInsert = sanitizedHtml || textData;
243
+ if (contentToInsert) {
244
+ editor.s.insertHTML(contentToInsert);
245
+ }
208
246
  }
209
247
  }
210
248
  removeImagesFromHtml(html) {
@@ -250,6 +288,7 @@ export class EditorComponent {
250
288
  }
251
289
  }
252
290
  updateValue(insideValue) {
291
+ // Сначала считаем, потом проверяем инициализацию
253
292
  if (this.maxLength) {
254
293
  this._calculateChartsCount();
255
294
  }
@@ -265,7 +304,12 @@ export class EditorComponent {
265
304
  return value ? value.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '') : value;
266
305
  }
267
306
  _calculateChartsCount() {
268
- this.valueLength = this.editorElementRef.editor.text.replace(/\s+/g, '').length;
307
+ // В Jodit правильно считать длину через .text,
308
+ // но в ngx-jodit инстанс доступен через .jodit
309
+ if (this.editorElementRef?.jodit) {
310
+ this.valueLength = this.editorElementRef.jodit.text.length;
311
+ this.changeDetection.detectChanges(); // Форсируем обновление UI для счетчика
312
+ }
269
313
  }
270
314
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EditorComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
271
315
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: EditorComponent, selector: "mrx-editor", inputs: { fields: "fields", toolbar: "toolbar", maxLength: "maxLength", minHeight: "minHeight", customClasses: "customClasses", placeholder: "placeholder", disabled: "disabled", readonly: "readonly", iframe: "iframe", defaultInlineStyle: "defaultInlineStyle", config: "config", editHTMLDocumentMode: "editHTMLDocumentMode", defaultMode: "defaultMode", invalid: "invalid", invalidMessage: "invalidMessage", checkInvalid: "checkInvalid" }, outputs: { changed: "changed", modelChange: "modelChange" }, providers: [
@@ -325,4 +369,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
325
369
  }], modelChange: [{
326
370
  type: Output
327
371
  }] } });
328
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRhLXVpL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2VkaXRvci9lZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGEtdWkvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vZWRpdG9yL2VkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxNQUFNLEVBRU4sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDMUMsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUUzRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRzlCLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXZDLE9BQU8sb0NBQW9DLENBQUM7QUFDNUMsT0FBTyw4Q0FBOEMsQ0FBQztBQUN0RCxPQUFPLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxvQ0FBb0MsQ0FBQztBQUM1QyxPQUFPLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxtQkFBbUIsRUFBMEIsTUFBTSxl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c0JBQTVCLEtBQUs7Z0JBQ1UsV0FBVztzQkFBMUIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsTUFBTTtzQkFBckIsS0FBSztnQkFDVSxrQkFBa0I7c0JBQWpDLEtBQUs7Z0JBQ1UsTUFBTTtzQkFBckIsS0FBSztnQkFFVSxvQkFBb0I7c0JBQW5DLEtBQUs7Z0JBQ1UsV0FBVztzQkFBMUIsS0FBSztnQkFFVSxPQUFPO3NCQUF0QixLQUFLO2dCQUNVLGNBQWM7c0JBQTdCLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSztnQkFFeUIsZ0JBQWdCO3NCQUE5QyxTQUFTO3VCQUFDLGtCQUFrQjtnQkFFWixPQUFPO3NCQUF2QixNQUFNO2dCQUNVLFdBQVc7c0JBQTNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgZm9yd2FyZFJlZixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGNoYW5nZUljb25zRnVuY3Rpb24gfSBmcm9tICcuL21vZHVsZXMvY2hhbmdlLWljb24tbW9kdWxlJztcclxuaW1wb3J0IHsgZGVmYXVsdFRvb2xiYXIgfSBmcm9tICcuL2NvbmZpZyc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgcG9wdXBUb29sYmFycyB9IGZyb20gJy4vY29uZmlnL3BvcHVwcy10b29sYmFyJztcclxuaW1wb3J0IHsgVG9vbGJhckNvbmZpZyB9IGZyb20gJy4vbW9kZWxzL3Rvb2xiYXIubW9kZWwnO1xyXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcclxuaW1wb3J0IHsgRmllbGQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zYXZlLXN0b3JlL21vZGVscyc7XHJcbmltcG9ydCB7IGRlZmF1bHRJbmxpbmVTdHlsZUNvbnN0YW50IH0gZnJvbSAnLi9jb25maWcvZGVmYXVsdC1pbmxpbmUtc3R5bGUnO1xyXG5cclxuaW1wb3J0IHsgSm9kaXQgfSBmcm9tICdqb2RpdCc7XHJcbmltcG9ydCB7IEpvZGl0Q29uZmlnIH0gZnJvbSAnbmd4LWpvZGl0JztcclxuXHJcbmltcG9ydCBydSBmcm9tICdqb2RpdC9lc20vbGFuZ3MvcnUuanMnO1xyXG5cclxuaW1wb3J0ICdqb2RpdC9lc20vcGx1Z2lucy9zb3VyY2Uvc291cmNlLmpzJztcclxuaW1wb3J0ICdqb2RpdC9lc20vcGx1Z2lucy9saW5lLWhlaWdodC9saW5lLWhlaWdodC5qcyc7XHJcbmltcG9ydCAnam9kaXQvZXNtL3BsdWdpbnMvaW5kZW50L2luZGVudC5qcyc7XHJcbmltcG9ydCAnam9kaXQvZXNtL3BsdWdpbnMvdmlkZW8vdmlkZW8uanMnO1xyXG5pbXBvcnQgJ2pvZGl0L2VzbS9wbHVnaW5zL3NlYXJjaC9zZWFyY2guanMnO1xyXG5pbXBvcnQgJ2pvZGl0L2VzbS9wbHVnaW5zL3Jlc2l6ZXIvcmVzaXplci5qcyc7XHJcbmltcG9ydCB7IElucHV0RWRpdG9yTW9kZUVudW0sIElucHV0RWRpdG9yVmFsdWVXaXRoSWQgfSBmcm9tICcuL2VkaXRvci5lbnVtJztcclxuXHJcbkpvZGl0LmxhbmcuZGUgPSBydTtcclxuXHJcbi8vIGV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tSm9kaXRDb25maWcgZXh0ZW5kcyBKb2RpdENvbmZpZyB7XHJcbi8vICAgZ2V0SWNvbjogKGE6IGFueSkgPT4gdm9pZCxcclxuLy8gICBsaW5rOiBhbnksXHJcbi8vICAgY2xlYW5IVE1MOiBhbnksXHJcbi8vIH1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbXJ4LWVkaXRvcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2VkaXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZWRpdG9yLmNvbXBvbmVudC5sZXNzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBFZGl0b3JDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uQ2hhbmdlcyB7XHJcbiAgcHJpdmF0ZSBfaXNJbml0ID0gZmFsc2U7XHJcbiAgcHVibGljIHZhbHVlID0gJyc7XHJcbiAgcHVibGljIHZhbHVlTGVuZ3RoID0gMDtcclxuICBwdWJsaWMgaXNGb2N1c2VkOiBib29sZWFuIHwgbnVsbCA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgb3B0aW9ucyA9IHtcclxuICAgIGxhbmd1YWdlOiAncnUnXHJcbiAgfTtcclxuXHJcbiAgcHVibGljIGRlZmF1bHRDb25maWc6IGFueSA9IHtcclxuICAgIC4uLmRlZmF1bHRUb29sYmFyLFxyXG4gICAgcG9wdXA6IHBvcHVwVG9vbGJhcnMsXHJcbiAgICBkZWZhdWx0TW9kZTogSW5wdXRFZGl0b3JNb2RlRW51bS5NT0RFX1dZU0lXWUcsXHJcbiAgICBsYW5ndWFnZTogJ3J1JyxcclxuICAgIHNob3dDaGFyc0NvdW50ZXI6IGZhbHNlLFxyXG4gICAgc2hvd1dvcmRzQ291bnRlcjogZmFsc2UsXHJcbiAgICBzaG93WFBhdGhJblN0YXR1c2JhcjogZmFsc2UsXHJcbiAgICBsaW5rOiB7XHJcbiAgICAgIG5vRm9sbG93Q2hlY2tib3g6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAgbWluSGVpZ2h0OiAxMTAsXHJcbiAgICBpZnJhbWU6IGZhbHNlLFxyXG4gICAgaW1hZ2VEZWZhdWx0V2lkdGg6IDIwMCxcclxuICAgIGVkaXRIVE1MRG9jdW1lbnRNb2RlOiB0cnVlLFxyXG4gICAgY2xlYW5IVE1MOiB7XHJcbiAgICAgIGZpbGxFbXB0eVBhcmFncmFwaDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHBsYWNlaG9sZGVyOiAnJyxcclxuICAgIHRvb2xiYXJBZGFwdGl2ZTogZmFsc2UsXHJcbiAgICB0b29sYmFySW5saW5lOiB0cnVlLFxyXG4gICAgdG9vbGJhcklubGluZUZvclNlbGVjdGlvbjogZmFsc2UsXHJcbiAgICB0b29sYmFySW5saW5lRGlzYWJsZUZvcjogW10sXHJcbiAgICB0b29sYmFySW5saW5lRGlzYWJsZWRCdXR0b25zOiBbJ3NvdXJjZSddLFxyXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgcmVhZG9ubHk6IGZhbHNlLFxyXG4gICAgYXNrQmVmb3JlUGFzdGVIVE1MOiBmYWxzZSxcclxuICAgIGRlZmF1bHRBY3Rpb25PblBhc3RlOiAnaW5zZXJ0X29ubHlfdGV4dCcsXHJcbiAgICBhc2tCZWZvcmVQYXN0ZUZyb21Xb3JkOiBmYWxzZSxcclxuICAgIGhpZGVQb3dlcmVkQnlKb2RpdDogdHJ1ZSxcclxuICAgIGJlYXV0aWZ5SFRNTDogdHJ1ZSxcclxuICAgIGFkZE5ld0xpbmU6IHRydWUsXHJcbiAgICBjcmVhdGVBdHRyaWJ1dGVzOiB7fSxcclxuICAgIGdldEljb246IChpY29uTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIHJldHVybiBjaGFuZ2VJY29uc0Z1bmN0aW9uKGljb25OYW1lKTtcclxuICAgIH0sXHJcbiAgICBldmVudHM6IHtcclxuICAgICAgZm9jdXM6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmNoYW5nZUZvY3VzZWQodHJ1ZSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGJsdXI6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmNoYW5nZUZvY3VzZWQoZmFsc2UpO1xyXG4gICAgICB9LFxyXG4gICAgICBwYXN0ZTogKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlUGFzdGUoZXZlbnQpO1xyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICAgIC8vIHVwbG9hZGVyOiB7XHJcbiAgICAvLyAgIGluc2VydEltYWdlQXNCYXNlNjRVUkk6IHRydWVcclxuICAgIC8vIH0sXHJcbiAgICBsaW1pdENoYXJzOiAxMCxcclxuICAgIC8vIGxpbWl0SFRNTDogMTcwLFxyXG4gIH07XHJcblxyXG4gIC8vIFNBVkUgU1RBVEVcclxuICBwdWJsaWMgdXVpZDogc3RyaW5nID0gdXVpZHY0KCk7XHJcbiAgQElucHV0KCkgcHVibGljIGZpZWxkczogRmllbGRbXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBwdWJsaWMgdG9vbGJhciE6IFRvb2xiYXJDb25maWc7XHJcbiAgQElucHV0KCkgcHVibGljIG1heExlbmd0aCA9IDA7XHJcbiAgQElucHV0KCkgcHVibGljIG1pbkhlaWdodCA9IDExMDtcclxuICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tQ2xhc3NlcyA9ICcnO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBwbGFjZWhvbGRlciA9ICcnO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyByZWFkb25seSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBpZnJhbWUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgZGVmYXVsdElubGluZVN0eWxlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIGNvbmZpZzogYW55ID0gdGhpcy5kZWZhdWx0Q29uZmlnO1xyXG5cclxuICBASW5wdXQoKSBwdWJsaWMgZWRpdEhUTUxEb2N1bWVudE1vZGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgZGVmYXVsdE1vZGU6IElucHV0RWRpdG9yTW9kZUVudW0gPSBJbnB1dEVkaXRvck1vZGVFbnVtLk1PREVfV1lTSVdZRztcclxuXHJcbiAgQElucHV0KCkgcHVibGljIGludmFsaWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgaW52YWxpZE1lc3NhZ2U6IHN0cmluZyB8IHN0cmluZ1tdID0gJyc7XHJcbiAgQElucHV0KCkgcHVibGljIGNoZWNrSW52YWxpZDogdHJ1ZSB8IGZhbHNlIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2VkaXRvckVsZW1lbnRSZWYnKSBlZGl0b3JFbGVtZW50UmVmITogYW55O1xyXG5cclxuICBAT3V0cHV0KCkgcHVibGljIGNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIHB1YmxpYyBtb2RlbENoYW5nZTogRXZlbnRFbWl0dGVyPElucHV0RWRpdG9yVmFsdWVXaXRoSWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJbnB1dEVkaXRvclZhbHVlV2l0aElkPigpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWyd0b29sYmFyJ10pIHtcclxuICAgICAgdGhpcy5kZWZhdWx0Q29uZmlnID0gey4uLnRoaXMuZGVmYXVsdENvbmZpZywgLi4uY2hhbmdlc1sndG9vbGJhciddLmN1cnJlbnRWYWx1ZX07XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snbWF4TGVuZ3RoJ10pIHtcclxuICAgICAgdGhpcy5kZWZhdWx0Q29uZmlnID0gey4uLnRoaXMuZGVmYXVsdENvbmZpZywgbGltaXRDaGFyczogY2hhbmdlc1snbWF4TGVuZ3RoJ10uY3VycmVudFZhbHVlfTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydwbGFjZWhvbGRlciddKSB7XHJcbiAgICAgIHRoaXMuZGVmYXVsdENvbmZpZyA9IHsuLi50aGlzLmRlZmF1bHRDb25maWcsIHBsYWNlaG9sZGVyOiBjaGFuZ2VzWydwbGFjZWhvbGRlciddLmN1cnJlbnRWYWx1ZX07XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snZGlzYWJsZWQnXSkge1xyXG4gICAgICB0aGlzLmRlZmF1bHRDb25maWcgPSB7Li4udGhpcy5kZWZhdWx0Q29uZmlnLCBkaXNhYmxlZDogY2hhbmdlc1snZGlzYWJsZWQnXS5jdXJyZW50VmFsdWV9O1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ3JlYWRvbmx5J10pIHtcclxuICAgICAgdGhpcy5kZWZhdWx0Q29uZmlnID0gey4uLnRoaXMuZGVmYXVsdENvbmZpZywgcmVhZG9ubHk6IGNoYW5nZXNbJ3JlYWRvbmx5J10uY3VycmVudFZhbHVlfTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydpZnJhbWUnXSkge1xyXG4gICAgICB0aGlzLmRlZmF1bHRDb25maWcgPSB7Li4udGhpcy5kZWZhdWx0Q29uZmlnLCBpZnJhbWU6IGNoYW5nZXNbJ2lmcmFtZSddLmN1cnJlbnRWYWx1ZX07XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snZGVmYXVsdElubGluZVN0eWxlJ10pIHtcclxuICAgICAgdGhpcy5kZWZhdWx0Q29uZmlnID0ge1xyXG4gICAgICAgIC4uLnRoaXMuZGVmYXVsdENvbmZpZyxcclxuICAgICAgICBjcmVhdGVBdHRyaWJ1dGVzOiB7Li4udGhpcy5kZWZhdWx0Q29uZmlnLmNyZWF0ZUF0dHJpYnV0ZXMsIC4uLmRlZmF1bHRJbmxpbmVTdHlsZUNvbnN0YW50fVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2VkaXRIVE1MRG9jdW1lbnRNb2RlJ10pIHtcclxuICAgICAgdGhpcy5kZWZhdWx0Q29uZmlnID0ge1xyXG4gICAgICAgIC4uLnRoaXMuZGVmYXVsdENvbmZpZyxcclxuICAgICAgICBlZGl0SFRNTERvY3VtZW50TW9kZTogY2hhbmdlc1snZWRpdEhUTUxEb2N1bWVudE1vZGUnXS5jdXJyZW50VmFsdWVcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydhc2tCZWZvcmVQYXN0ZUhUTUwnXSkge1xyXG4gICAgICB0aGlzLmRlZmF1bHRDb25maWcgPSB7Li4udGhpcy5kZWZhdWx0Q29uZmlnLCBhc2tCZWZvcmVQYXN0ZUhUTUw6IGNoYW5nZXNbJ2Fza0JlZm9yZVBhc3RlSFRNTCddLmN1cnJlbnRWYWx1ZX07XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snYXNrQmVmb3JlUGFzdGVGcm9tV29yZCddKSB7XHJcbiAgICAgIHRoaXMuZGVmYXVsdENvbmZpZyA9IHtcclxuICAgICAgICAuLi50aGlzLmRlZmF1bHRDb25maWcsXHJcbiAgICAgICAgYXNrQmVmb3JlUGFzdGVGcm9tV29yZDogY2hhbmdlc1snYXNrQmVmb3JlUGFzdGVGcm9tV29yZCddLmN1cnJlbnRWYWx1ZVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2RlZmF1bHRNb2RlJ10pIHtcclxuICAgICAgdGhpcy5kZWZhdWx0Q29uZmlnID0gey4uLnRoaXMuZGVmYXVsdENvbmZpZywgZGVmYXVsdE1vZGU6IGNoYW5nZXNbJ2RlZmF1bHRNb2RlJ10uY3VycmVudFZhbHVlfTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydkZWZhdWx0QWN0aW9uT25QYXN0ZSddKSB7XHJcbiAgICAgIHRoaXMuZGVmYXVsdENvbmZpZyA9IHtcclxuICAgICAgICAuLi50aGlzLmRlZmF1bHRDb25maWcsXHJcbiAgICAgICAgZGVmYXVsdEFjdGlvbk9uUGFzdGU6IGNoYW5nZXNbJ2RlZmF1bHRBY3Rpb25PblBhc3RlJ10uY3VycmVudFZhbHVlXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snbWluSGVpZ2h0J10pIHtcclxuICAgICAgdGhpcy5kZWZhdWx0Q29uZmlnID0gey4uLnRoaXMuZGVmYXVsdENvbmZpZywgbWluSGVpZ2h0OiBjaGFuZ2VzWydtaW5IZWlnaHQnXS5jdXJyZW50VmFsdWV9O1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2NvbmZpZyddKSB7XHJcbiAgICAgIHRoaXMuZGVmYXVsdENvbmZpZyA9IHsuLi50aGlzLmRlZmF1bHRDb25maWcsIC4uLmNoYW5nZXNbJ2NvbmZpZyddLmN1cnJlbnRWYWx1ZX07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzVmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaXNJbnZhbGlkTWVzc2FnZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIXRoaXMuaW52YWxpZE1lc3NhZ2UgfHwgISF0aGlzLmludmFsaWRNZXNzYWdlPy5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNoZWNrVmFsaWRDbGFzc2VzKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGVja0ludmFsaWQgPT09IGZhbHNlID8gJ21yeC1pbnB1dC1jaGVja2VkLXN1Y2Nlc3MnIDogdGhpcy5jaGVja0ludmFsaWQgPT09IHRydWUgPyAnbXJ4LWlucHV0LWNoZWNrZWQtZXJyb3InIDogJyc7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGdldENsYXNzZXMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgJHt0aGlzLmN1c3RvbUNsYXNzZXN9ICR7dGhpcy5jaGVja1ZhbGlkQ2xhc3Nlc31gO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGluc2VydFBvc2l0aW9uVGV4dCh0ZXh0OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZWRpdG9yRWxlbWVudFJlZi5qb2RpdC5zLmluc2VydEhUTUwodGV4dCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hhbmdlRm9jdXNlZCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5pc0ZvY3VzZWQgPSB2YWx1ZTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0aW9uLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVQYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghZXZlbnQuY2xpcGJvYXJkRGF0YSB8fCB0aGlzLmhhc0ltYWdlQnV0dG9uKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHtjbGlwYm9hcmREYXRhfSA9IGV2ZW50O1xyXG4gICAgY29uc3QgaHRtbERhdGEgPSBjbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQvaHRtbCcpO1xyXG4gICAgY29uc3QgaGFzSHRtbEltYWdlID0gaHRtbERhdGE/LmluY2x1ZGVzKCc8aW1nJyk7XHJcbiAgICBjb25zdCBoYXNJbWFnZSA9IEFycmF5LmZyb20oY2xpcGJvYXJkRGF0YS5pdGVtcykuc29tZShpdGVtID0+IGl0ZW0udHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSk7XHJcblxyXG4gICAgaWYgKCFoYXNJbWFnZSAmJiAhaGFzSHRtbEltYWdlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGNvbnN0IHNhbml0aXplZEh0bWwgPSB0aGlzLnJlbW92ZUltYWdlc0Zyb21IdG1sKGh0bWxEYXRhKTtcclxuICAgIGNvbnN0IHRleHREYXRhID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJyk7XHJcbiAgICBjb25zdCBjb250ZW50VG9JbnNlcnQgPSBzYW5pdGl6ZWRIdG1sIHx8IHRleHREYXRhO1xyXG5cclxuICAgIGlmIChjb250ZW50VG9JbnNlcnQpIHtcclxuICAgICAgdGhpcy5lZGl0b3JFbGVtZW50UmVmLmpvZGl0LnMuaW5zZXJ0SFRNTChjb250ZW50VG9JbnNlcnQpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVJbWFnZXNGcm9tSHRtbChodG1sOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICghaHRtbCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIGRpdi5pbm5lckhUTUwgPSBodG1sO1xyXG4gICAgZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJ2ltZycpLmZvckVhY2goaW1nID0+IGltZy5yZW1vdmUoKSk7XHJcblxyXG4gICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFzSW1hZ2VCdXR0b24oKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBidXR0b25zID0gdGhpcy5kZWZhdWx0Q29uZmlnPy5idXR0b25zO1xyXG5cclxuICAgIGlmICghYnV0dG9ucykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBidXR0b25zID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gYnV0dG9ucy5pbmNsdWRlcygnaW1hZ2UnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShidXR0b25zKSkge1xyXG4gICAgICByZXR1cm4gYnV0dG9ucy5zb21lKGl0ZW0gPT5cclxuICAgICAgICB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZydcclxuICAgICAgICAgID8gaXRlbSA9PT0gJ2ltYWdlJ1xyXG4gICAgICAgICAgOiBpdGVtPy5uYW1lID09PSAnaW1hZ2UnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkNoYW5nZSA9ICh2YWx1ZTogYW55KSA9PiB7XHJcbiAgfTtcclxuICBwcml2YXRlIG9uVG91Y2hlZCA9ICgpID0+IHtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHt9KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHdyaXRlVmFsdWUob3V0c2lkZVZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMudmFsdWUgPSB0aGlzLl9zYW5pdGl6ZVZhbHVlKG91dHNpZGVWYWx1ZSk7XHJcbiAgICBpZiAob3V0c2lkZVZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2lzSW5pdCA9IHRydWU7XHJcbiAgICAgIH0sIDEwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlVmFsdWUoaW5zaWRlVmFsdWU6IHN0cmluZykge1xyXG5cclxuICAgIGlmICh0aGlzLm1heExlbmd0aCkge1xyXG4gICAgICB0aGlzLl9jYWxjdWxhdGVDaGFydHNDb3VudCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX2lzSW5pdCkge1xyXG4gICAgICB0aGlzLnZhbHVlID0gaW5zaWRlVmFsdWU7XHJcbiAgICAgIHRoaXMuY2hhbmdlZC5lbWl0KGluc2lkZVZhbHVlKTtcclxuICAgICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHt2YWx1ZTogaW5zaWRlVmFsdWUsIGlkOiB0aGlzLnV1aWR9KTtcclxuICAgICAgdGhpcy5vbkNoYW5nZShpbnNpZGVWYWx1ZSk7XHJcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zYW5pdGl6ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHZhbHVlID8gdmFsdWUucmVwbGFjZSgvPHNjcmlwdFxcYltePF0qKD86KD8hPFxcL3NjcmlwdD4pPFtePF0qKSo8XFwvc2NyaXB0Pi9naSwgJycpIDogdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jYWxjdWxhdGVDaGFydHNDb3VudCgpIHtcclxuICAgIHRoaXMudmFsdWVMZW5ndGggPSB0aGlzLmVkaXRvckVsZW1lbnRSZWYuZWRpdG9yLnRleHQucmVwbGFjZSgvXFxzKy9nLCAnJykubGVuZ3RoO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2XHJcbiAgY2xhc3M9XCJtcngtZWRpdG9yXCJcclxuICBbY2xhc3MubXJ4LWlucHV0LWZvY3VzZWRdPVwiaXNGb2N1c2VkXCJcclxuICBbY2xhc3MubXJ4LWlucHV0LWVycm9yXT1cIiFpc1ZhbGlkIHx8IGludmFsaWRcIlxyXG4gIFtjbGFzc109XCJnZXRDbGFzc2VzXCJcclxuICBbY2xhc3MuLXJlYWRvbmx5XT1cInJlYWRvbmx5XCJcclxuPlxyXG4gIDxuZ3gtam9kaXRcclxuICAgICNlZGl0b3JFbGVtZW50UmVmXHJcbiAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcclxuICAgIFtvcHRpb25zXT1cImRlZmF1bHRDb25maWdcIlxyXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZVZhbHVlKCRldmVudClcIlxyXG4gID48L25neC1qb2RpdD5cclxuXHJcbiAgPG1yeC1lcnJvci1tZXNzYWdlXHJcbiAgICAqbmdJZj1cIighaXNWYWxpZCB8fCBpbnZhbGlkKSAmJiBpc0ludmFsaWRNZXNzYWdlXCJcclxuICAgIFtpbnZhbGlkTWVzc2FnZV09XCJpbnZhbGlkTWVzc2FnZVwiXHJcbiAgPjwvbXJ4LWVycm9yLW1lc3NhZ2U+XHJcblxyXG4gIDxtcngtY2hhcnMtbGVmdCBbbWF4bGVuZ3RoXT1cIm1heExlbmd0aFwiIFt2YWx1ZUxlbmd0aF09XCJ2YWx1ZUxlbmd0aFwiPjwvbXJ4LWNoYXJzLWxlZnQ+XHJcblxyXG4gIDxtcngtc2F2ZS1zdGF0ZSB0eXBlPVwiZWRpdG9yXCIgW2lkXT1cInV1aWRcIiBbZmllbGRzXT1cImZpZWxkc1wiPjwvbXJ4LXNhdmUtc3RhdGU+XHJcbjwvZGl2PlxyXG4iXX0=
372
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRhLXVpL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2VkaXRvci9lZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGEtdWkvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vZWRpdG9yL2VkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxNQUFNLEVBRU4sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDMUMsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUUzRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRzlCLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXZDLE9BQU8sb0NBQW9DLENBQUM7QUFDNUMsT0FBTyw4Q0FBOEMsQ0FBQztBQUN0RCxPQUFPLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxvQ0FBb0MsQ0FBQztBQUM1QyxPQUFPLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxtQkFBbUIsRUFBMEIsTUFBTSxl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Z0JBRVosT0FBTztzQkFBdkIsTUFBTTtnQkFDVSxXQUFXO3NCQUEzQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBjaGFuZ2VJY29uc0Z1bmN0aW9uIH0gZnJvbSAnLi9tb2R1bGVzL2NoYW5nZS1pY29uLW1vZHVsZSc7XHJcbmltcG9ydCB7IGRlZmF1bHRUb29sYmFyIH0gZnJvbSAnLi9jb25maWcnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IHBvcHVwVG9vbGJhcnMgfSBmcm9tICcuL2NvbmZpZy9wb3B1cHMtdG9vbGJhcic7XHJcbmltcG9ydCB7IFRvb2xiYXJDb25maWcgfSBmcm9tICcuL21vZGVscy90b29sYmFyLm1vZGVsJztcclxuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XHJcbmltcG9ydCB7IEZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc2F2ZS1zdG9yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBkZWZhdWx0SW5saW5lU3R5bGVDb25zdGFudCB9IGZyb20gJy4vY29uZmlnL2RlZmF1bHQtaW5saW5lLXN0eWxlJztcclxuXHJcbmltcG9ydCB7IEpvZGl0IH0gZnJvbSAnam9kaXQnO1xyXG5pbXBvcnQgeyBKb2RpdENvbmZpZyB9IGZyb20gJ25neC1qb2RpdCc7XHJcblxyXG5pbXBvcnQgcnUgZnJvbSAnam9kaXQvZXNtL2xhbmdzL3J1LmpzJztcclxuXHJcbmltcG9ydCAnam9kaXQvZXNtL3BsdWdpbnMvc291cmNlL3NvdXJjZS5qcyc7XHJcbmltcG9ydCAnam9kaXQvZXNtL3BsdWdpbnMvbGluZS1oZWlnaHQvbGluZS1oZWlnaHQuanMnO1xyXG5pbXBvcnQgJ2pvZGl0L2VzbS9wbHVnaW5zL2luZGVudC9pbmRlbnQuanMnO1xyXG5pbXBvcnQgJ2pvZGl0L2VzbS9wbHVnaW5zL3ZpZGVvL3ZpZGVvLmpzJztcclxuaW1wb3J0ICdqb2RpdC9lc20vcGx1Z2lucy9zZWFyY2gvc2VhcmNoLmpzJztcclxuaW1wb3J0ICdqb2RpdC9lc20vcGx1Z2lucy9yZXNpemVyL3Jlc2l6ZXIuanMnO1xyXG5pbXBvcnQgeyBJbnB1dEVkaXRvck1vZGVFbnVtLCBJbnB1dEVkaXRvclZhbHVlV2l0aElkIH0gZnJvbSAnLi9lZGl0b3IuZW51bSc7XHJcblxyXG5Kb2RpdC5sYW5nLmRlID0gcnU7XHJcblxyXG4vLyBleHBvcnQgaW50ZXJmYWNlIEN1c3RvbUpvZGl0Q29uZmlnIGV4dGVuZHMgSm9kaXRDb25maWcge1xyXG4vLyAgIGdldEljb246IChhOiBhbnkpID0+IHZvaWQsXHJcbi8vICAgbGluazogYW55LFxyXG4vLyAgIGNsZWFuSFRNTDogYW55LFxyXG4vLyB9XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ21yeC1lZGl0b3InLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VkaXRvci5jb21wb25lbnQubGVzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRWRpdG9yQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkNoYW5nZXMge1xyXG4gIHByaXZhdGUgX2lzSW5pdCA9IGZhbHNlO1xyXG4gIHB1YmxpYyB2YWx1ZSA9ICcnO1xyXG4gIHB1YmxpYyB2YWx1ZUxlbmd0aCA9IDA7XHJcbiAgcHVibGljIGlzRm9jdXNlZDogYm9vbGVhbiB8IG51bGwgPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIG9wdGlvbnMgPSB7XHJcbiAgICBsYW5ndWFnZTogJ3J1J1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBkZWZhdWx0Q29uZmlnOiBhbnkgPSB7XHJcbiAgICAuLi5kZWZhdWx0VG9vbGJhcixcclxuICAgIHBvcHVwOiBwb3B1cFRvb2xiYXJzLFxyXG4gICAgZGVmYXVsdE1vZGU6IElucHV0RWRpdG9yTW9kZUVudW0uTU9ERV9XWVNJV1lHLFxyXG4gICAgbGFuZ3VhZ2U6ICdydScsXHJcbiAgICBzaG93Q2hhcnNDb3VudGVyOiBmYWxzZSxcclxuICAgIHNob3dXb3Jkc0NvdW50ZXI6IGZhbHNlLFxyXG4gICAgc2hvd1hQYXRoSW5TdGF0dXNiYXI6IGZhbHNlLFxyXG4gICAgbGluazoge1xyXG4gICAgICBub0ZvbGxvd0NoZWNrYm94OiBmYWxzZVxyXG4gICAgfSxcclxuICAgIG1pbkhlaWdodDogMTEwLFxyXG4gICAgaWZyYW1lOiBmYWxzZSxcclxuICAgIGltYWdlRGVmYXVsdFdpZHRoOiAyMDAsXHJcbiAgICBlZGl0SFRNTERvY3VtZW50TW9kZTogdHJ1ZSxcclxuICAgIGNsZWFuSFRNTDoge1xyXG4gICAgICBmaWxsRW1wdHlQYXJhZ3JhcGg6IHRydWVcclxuICAgIH0sXHJcbiAgICBwbGFjZWhvbGRlcjogJycsXHJcbiAgICB0b29sYmFyQWRhcHRpdmU6IGZhbHNlLFxyXG4gICAgdG9vbGJhcklubGluZTogdHJ1ZSxcclxuICAgIHRvb2xiYXJJbmxpbmVGb3JTZWxlY3Rpb246IGZhbHNlLFxyXG4gICAgdG9vbGJhcklubGluZURpc2FibGVGb3I6IFtdLFxyXG4gICAgdG9vbGJhcklubGluZURpc2FibGVkQnV0dG9uczogWydzb3VyY2UnXSxcclxuICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgIHJlYWRvbmx5OiBmYWxzZSxcclxuICAgIGFza0JlZm9yZVBhc3RlSFRNTDogZmFsc2UsXHJcbiAgICBkZWZhdWx0QWN0aW9uT25QYXN0ZTogJ2luc2VydF9vbmx5X3RleHQnLFxyXG4gICAgYXNrQmVmb3JlUGFzdGVGcm9tV29yZDogZmFsc2UsXHJcbiAgICBoaWRlUG93ZXJlZEJ5Sm9kaXQ6IHRydWUsXHJcbiAgICBiZWF1dGlmeUhUTUw6IHRydWUsXHJcbiAgICBhZGROZXdMaW5lOiB0cnVlLFxyXG4gICAgY3JlYXRlQXR0cmlidXRlczoge30sXHJcbiAgICBnZXRJY29uOiAoaWNvbk5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICByZXR1cm4gY2hhbmdlSWNvbnNGdW5jdGlvbihpY29uTmFtZSk7XHJcbiAgICB9LFxyXG4gICAgZXZlbnRzOiB7XHJcbiAgICAgIGZvY3VzOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VGb2N1c2VkKHRydWUpO1xyXG4gICAgICB9LFxyXG4gICAgICBibHVyOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VGb2N1c2VkKGZhbHNlKTtcclxuICAgICAgfSxcclxuICAgICAga2V5ZG93bjogKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB8IHZvaWQgPT4ge1xyXG4gICAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yRWxlbWVudFJlZj8uam9kaXQ7XHJcbiAgICAgICAgaWYgKCFlZGl0b3IgfHwgdGhpcy5tYXhMZW5ndGggPD0gMCkgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgIC8vIDEuINCf0L7Qu9GD0YfQsNC10Lwg0YLQtdC60YPRidGD0Y4g0LTQu9C40L3RgyDRgtC10LrRgdGC0LBcclxuICAgICAgICBjb25zdCBjdXJyZW50TGVuZ3RoID0gZWRpdG9yLnRleHQubGVuZ3RoO1xyXG5cclxuICAgICAgICAvLyAyLiDQodC/0LjRgdC+0Log0YHQuNGB0YLQtdC80L3Ri9GFINC60LvQsNCy0LjRiCwg0LrQvtGC0L7RgNGL0LUg0L3QtdC70YzQt9GPINCx0LvQvtC60LjRgNC+0LLQsNGC0YxcclxuICAgICAgICBjb25zdCBpc05hdmlnYXRpb25LZXkgPSBbXHJcbiAgICAgICAgICAnQmFja3NwYWNlJywgJ0RlbGV0ZScsICdBcnJvd0xlZnQnLCAnQXJyb3dSaWdodCcsIFxyXG4gICAgICAgICAgJ0Fycm93VXAnLCAnQXJyb3dEb3duJywgJ0VuZCcsICdIb21lJywgJ1RhYicsICdFbnRlcidcclxuICAgICAgICBdLmluY2x1ZGVzKGV2ZW50LmtleSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8g0KDQsNC30YDQtdGI0LDQtdC8INGB0L7Rh9C10YLQsNC90LjRjyDRgSBDdHJsL0NtZCAoQ29weSwgUGFzdGUsIFNlbGVjdCBBbGwpXHJcbiAgICAgICAgY29uc3QgaXNNb2RpZmllciA9IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleTtcclxuXHJcbiAgICAgICAgaWYgKGN1cnJlbnRMZW5ndGggPj0gdGhpcy5tYXhMZW5ndGggJiYgIWlzTmF2aWdhdGlvbktleSAmJiAhaXNNb2RpZmllcikge1xyXG4gICAgICAgICAgLy8gMy4g0KHQsNC80YvQuSDQvdCw0LTQtdC20L3Ri9C5INGB0L/QvtGB0L7QsSDQv9GA0L7QstC10YDQuNGC0YwsINCy0YvQtNC10LvQtdC90L4g0LvQuCDRh9GC0L4t0YLQvjpcclxuICAgICAgICAgIC8vINCV0YHQu9C4INC80LXRgtC+0LQgc2VsLmlzQ29sbGFwc2VkINC90LXQtNC+0YHRgtGD0L/QtdC9LCDQv9GA0L7QstC10YDRj9C10Lwg0LTQu9C40L3RgyDQstGL0LTQtdC70LXQvdC40Y8g0YfQtdGA0LXQtyDRgdGC0YDQvtC60YNcclxuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVGV4dCA9IGVkaXRvci5zLnNlbCA/IGVkaXRvci5zLnNlbC50b1N0cmluZygpIDogJyc7XHJcblxyXG4gICAgICAgICAgLy8g0JXRgdC70Lgg0L3QuNGH0LXQs9C+INC90LUg0LLRi9C00LXQu9C10L3Qviwg0LHQu9C+0LrQuNGA0YPQtdC8INCy0LLQvtC0INC90L7QstC+0LPQviDRgdC40LzQstC+0LvQsFxyXG4gICAgICAgICAgaWYgKCFzZWxlY3RlZFRleHQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgcGFzdGU6IChldmVudDogQ2xpcGJvYXJkRXZlbnQpID0+IHtcclxuICAgICAgICB0aGlzLmhhbmRsZVBhc3RlKGV2ZW50KTtcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgICAvLyB1cGxvYWRlcjoge1xyXG4gICAgLy8gICBpbnNlcnRJbWFnZUFzQmFzZTY0VVJJOiB0cnVlXHJcbiAgICAvLyB9LFxyXG4gICAgbGltaXRDaGFyczogMTAsXHJcbiAgICAvLyBsaW1pdEhUTUw6IDE3MCxcclxuICB9O1xyXG5cclxuICAvLyBTQVZFIFNUQVRFXHJcbiAgcHVibGljIHV1aWQ6IHN0cmluZyA9IHV1aWR2NCgpO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBmaWVsZHM6IEZpZWxkW10gPSBbXTtcclxuXHJcbiAgQElucHV0KCkgcHVibGljIHRvb2xiYXIhOiBUb29sYmFyQ29uZmlnO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtYXhMZW5ndGggPSAwO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtaW5IZWlnaHQgPSAxMTA7XHJcbiAgQElucHV0KCkgcHVibGljIGN1c3RvbUNsYXNzZXMgPSAnJztcclxuICBASW5wdXQoKSBwdWJsaWMgcGxhY2Vob2xkZXIgPSAnJztcclxuICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgcmVhZG9ubHkgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgaWZyYW1lID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIGRlZmF1bHRJbmxpbmVTdHlsZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjb25maWc6IGFueSA9IHRoaXMuZGVmYXVsdENvbmZpZztcclxuXHJcbiAgQElucHV0KCkgcHVibGljIGVkaXRIVE1MRG9jdW1lbnRNb2RlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIGRlZmF1bHRNb2RlOiBJbnB1dEVkaXRvck1vZGVFbnVtID0gSW5wdXRFZGl0b3JNb2RlRW51bS5NT0RFX1dZU0lXWUc7XHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBpbnZhbGlkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIGludmFsaWRNZXNzYWdlOiBzdHJpbmcgfCBzdHJpbmdbXSA9ICcnO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjaGVja0ludmFsaWQ6IHRydWUgfCBmYWxzZSB8IG51bGwgPSBudWxsO1xyXG5cclxuICBAVmlld0NoaWxkKCdlZGl0b3JFbGVtZW50UmVmJykgZWRpdG9yRWxlbWVudFJlZiE6IGFueTtcclxuXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBjaGFuZ2VkOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgbW9kZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJbnB1dEVkaXRvclZhbHVlV2l0aElkPiA9IG5ldyBFdmVudEVtaXR0ZXI8SW5wdXRFZGl0b3JWYWx1ZVdpdGhJZD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1sndG9vbGJhciddKSB7XHJcbiAgICAgIHRoaXMuZGVmYXVsdENvbmZpZyA9IHsuLi50aGlzLmRlZmF1bHRDb25maWcsIC4uLmNoYW5nZXNbJ3Rvb2xiYXInXS5jdXJyZW50VmFsdWV9O1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ21heExlbmd0aCddKSB7XHJcbiAgICAgIHRoaXMuZGVmYXVsdENvbmZpZyA9IHsuLi50aGlzLmRlZmF1bHRDb25maWcsIGxpbWl0Q2hhcnM6IGNoYW5nZXNbJ21heExlbmd0aCddLmN1cnJlbnRWYWx1ZX07XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1sncGxhY2Vob2xkZXInXSkge1xyXG4gICAgICB0aGlzLmRlZmF1bHRDb25maWcgPSB7Li4udGhpcy5kZWZhdWx0Q29uZmlnLCBwbGFjZWhvbGRlcjogY2hhbmdlc1sncGxhY2Vob2xkZXInXS5jdXJyZW50VmFsdWV9O1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2Rpc2FibGVkJ10pIHtcclxuICAgICAgdGhpcy5kZWZhdWx0Q29uZmlnID0gey4uLnRoaXMuZGVmYXVsdENvbmZpZywgZGlzYWJsZWQ6IGNoYW5nZXNbJ2Rpc2FibGVkJ10uY3VycmVudFZhbHVlfTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydyZWFkb25seSddKSB7XHJcbiAgICAgIHRoaXMuZGVmYXVsdENvbmZpZyA9IHsuLi50aGlzLmRlZmF1bHRDb25maWcsIHJlYWRvbmx5OiBjaGFuZ2VzWydyZWFkb25seSddLmN1cnJlbnRWYWx1ZX07XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snaWZyYW1lJ10pIHtcclxuICAgICAgdGhpcy5kZWZhdWx0Q29uZmlnID0gey4uLnRoaXMuZGVmYXVsdENvbmZpZywgaWZyYW1lOiBjaGFuZ2VzWydpZnJhbWUnXS5jdXJyZW50VmFsdWV9O1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2RlZmF1bHRJbmxpbmVTdHlsZSddKSB7XHJcbiAgICAgIHRoaXMuZGVmYXVsdENvbmZpZyA9IHtcclxuICAgICAgICAuLi50aGlzLmRlZmF1bHRDb25maWcsXHJcbiAgICAgICAgY3JlYXRlQXR0cmlidXRlczogey4uLnRoaXMuZGVmYXVsdENvbmZpZy5jcmVhdGVBdHRyaWJ1dGVzLCAuLi5kZWZhdWx0SW5saW5lU3R5bGVDb25zdGFudH1cclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydlZGl0SFRNTERvY3VtZW50TW9kZSddKSB7XHJcbiAgICAgIHRoaXMuZGVmYXVsdENvbmZpZyA9IHtcclxuICAgICAgICAuLi50aGlzLmRlZmF1bHRDb25maWcsXHJcbiAgICAgICAgZWRpdEhUTUxEb2N1bWVudE1vZGU6IGNoYW5nZXNbJ2VkaXRIVE1MRG9jdW1lbnRNb2RlJ10uY3VycmVudFZhbHVlXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snYXNrQmVmb3JlUGFzdGVIVE1MJ10pIHtcclxuICAgICAgdGhpcy5kZWZhdWx0Q29uZmlnID0gey4uLnRoaXMuZGVmYXVsdENvbmZpZywgYXNrQmVmb3JlUGFzdGVIVE1MOiBjaGFuZ2VzWydhc2tCZWZvcmVQYXN0ZUhUTUwnXS5jdXJyZW50VmFsdWV9O1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2Fza0JlZm9yZVBhc3RlRnJvbVdvcmQnXSkge1xyXG4gICAgICB0aGlzLmRlZmF1bHRDb25maWcgPSB7XHJcbiAgICAgICAgLi4udGhpcy5kZWZhdWx0Q29uZmlnLFxyXG4gICAgICAgIGFza0JlZm9yZVBhc3RlRnJvbVdvcmQ6IGNoYW5nZXNbJ2Fza0JlZm9yZVBhc3RlRnJvbVdvcmQnXS5jdXJyZW50VmFsdWVcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydkZWZhdWx0TW9kZSddKSB7XHJcbiAgICAgIHRoaXMuZGVmYXVsdENvbmZpZyA9IHsuLi50aGlzLmRlZmF1bHRDb25maWcsIGRlZmF1bHRNb2RlOiBjaGFuZ2VzWydkZWZhdWx0TW9kZSddLmN1cnJlbnRWYWx1ZX07XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snZGVmYXVsdEFjdGlvbk9uUGFzdGUnXSkge1xyXG4gICAgICB0aGlzLmRlZmF1bHRDb25maWcgPSB7XHJcbiAgICAgICAgLi4udGhpcy5kZWZhdWx0Q29uZmlnLFxyXG4gICAgICAgIGRlZmF1bHRBY3Rpb25PblBhc3RlOiBjaGFuZ2VzWydkZWZhdWx0QWN0aW9uT25QYXN0ZSddLmN1cnJlbnRWYWx1ZVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ21pbkhlaWdodCddKSB7XHJcbiAgICAgIHRoaXMuZGVmYXVsdENvbmZpZyA9IHsuLi50aGlzLmRlZmF1bHRDb25maWcsIG1pbkhlaWdodDogY2hhbmdlc1snbWluSGVpZ2h0J10uY3VycmVudFZhbHVlfTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydjb25maWcnXSkge1xyXG4gICAgICB0aGlzLmRlZmF1bHRDb25maWcgPSB7Li4udGhpcy5kZWZhdWx0Q29uZmlnLCAuLi5jaGFuZ2VzWydjb25maWcnXS5jdXJyZW50VmFsdWV9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpc1ZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzSW52YWxpZE1lc3NhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLmludmFsaWRNZXNzYWdlIHx8ICEhdGhpcy5pbnZhbGlkTWVzc2FnZT8ubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjaGVja1ZhbGlkQ2xhc3NlcygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hlY2tJbnZhbGlkID09PSBmYWxzZSA/ICdtcngtaW5wdXQtY2hlY2tlZC1zdWNjZXNzJyA6IHRoaXMuY2hlY2tJbnZhbGlkID09PSB0cnVlID8gJ21yeC1pbnB1dC1jaGVja2VkLWVycm9yJyA6ICcnO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBnZXRDbGFzc2VzKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7dGhpcy5jdXN0b21DbGFzc2VzfSAke3RoaXMuY2hlY2tWYWxpZENsYXNzZXN9YDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbnNlcnRQb3NpdGlvblRleHQodGV4dDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmVkaXRvckVsZW1lbnRSZWYuam9kaXQucy5pbnNlcnRIVE1MKHRleHQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNoYW5nZUZvY3VzZWQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuaXNGb2N1c2VkID0gdmFsdWU7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdGlvbi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvckVsZW1lbnRSZWY/LmpvZGl0O1xyXG4gICAgaWYgKCFldmVudC5jbGlwYm9hcmREYXRhIHx8ICFlZGl0b3IpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCB0ZXh0RGF0YSA9IGV2ZW50LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9wbGFpbicpO1xyXG4gICAgY29uc3QgY3VycmVudExlbmd0aCA9IGVkaXRvci50ZXh0Lmxlbmd0aDtcclxuXHJcbiAgICAvLyDQldGB0LvQuCDQstGB0YLQsNCy0LrQsCDQv9GA0LXQstGL0YjQsNC10YIg0LvQuNC80LjRglxyXG4gICAgaWYgKHRoaXMubWF4TGVuZ3RoID4gMCAmJiAoY3VycmVudExlbmd0aCArIHRleHREYXRhLmxlbmd0aCkgPiB0aGlzLm1heExlbmd0aCkge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBjb25zdCByZW1haW5pbmdTcGFjZSA9IHRoaXMubWF4TGVuZ3RoIC0gY3VycmVudExlbmd0aDtcclxuXHJcbiAgICAgIGlmIChyZW1haW5pbmdTcGFjZSA+IDApIHtcclxuICAgICAgICAvLyDQktGB0YLQsNCy0LvRj9C10Lwg0YLQvtC70YzQutC+INGA0LDQt9GA0LXRiNC10L3QvdGL0Lkg0LrRg9GB0L7Rh9C10LpcclxuICAgICAgICBjb25zdCB0cnVuY2F0ZWRUZXh0ID0gdGV4dERhdGEuc3Vic3RyaW5nKDAsIHJlbWFpbmluZ1NwYWNlKTtcclxuICAgICAgICBlZGl0b3Iucy5pbnNlcnRIVE1MKHRydW5jYXRlZFRleHQpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjsgLy8g0J/RgNC10LrRgNCw0YnQsNC10Lwg0LLRi9C/0L7Qu9C90LXQvdC40LUsINGH0YLQvtCx0Ysg0L3QtSDRgdGA0LDQsdC+0YLQsNC70LAg0LvQvtCz0LjQutCwINC60LDRgNGC0LjQvdC+0Log0L3QuNC20LVcclxuICAgIH1cclxuXHJcbiAgICAvLyDQktCw0YjQsCDRgdGD0YnQtdGB0YLQstGD0Y7RidCw0Y8g0LvQvtCz0LjQutCwINC30LDRidC40YLRiyDQvtGCINC60LDRgNGC0LjQvdC+0LpcclxuICAgIGlmICh0aGlzLmhhc0ltYWdlQnV0dG9uKCkpIHJldHVybjtcclxuICAgIFxyXG4gICAgY29uc3QgaHRtbERhdGEgPSBldmVudC5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQvaHRtbCcpO1xyXG4gICAgY29uc3QgaGFzSHRtbEltYWdlID0gaHRtbERhdGE/LmluY2x1ZGVzKCc8aW1nJyk7XHJcbiAgICBjb25zdCBoYXNJbWFnZSA9IEFycmF5LmZyb20oZXZlbnQuY2xpcGJvYXJkRGF0YS5pdGVtcykuc29tZShpdGVtID0+IGl0ZW0udHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSk7XHJcblxyXG4gICAgaWYgKGhhc0ltYWdlIHx8IGhhc0h0bWxJbWFnZSkge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBjb25zdCBzYW5pdGl6ZWRIdG1sID0gdGhpcy5yZW1vdmVJbWFnZXNGcm9tSHRtbChodG1sRGF0YSk7XHJcbiAgICAgIGNvbnN0IGNvbnRlbnRUb0luc2VydCA9IHNhbml0aXplZEh0bWwgfHwgdGV4dERhdGE7XHJcbiAgICAgIGlmIChjb250ZW50VG9JbnNlcnQpIHtcclxuICAgICAgICBlZGl0b3Iucy5pbnNlcnRIVE1MKGNvbnRlbnRUb0luc2VydCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVJbWFnZXNGcm9tSHRtbChodG1sOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICghaHRtbCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIGRpdi5pbm5lckhUTUwgPSBodG1sO1xyXG4gICAgZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJ2ltZycpLmZvckVhY2goaW1nID0+IGltZy5yZW1vdmUoKSk7XHJcblxyXG4gICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFzSW1hZ2VCdXR0b24oKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBidXR0b25zID0gdGhpcy5kZWZhdWx0Q29uZmlnPy5idXR0b25zO1xyXG5cclxuICAgIGlmICghYnV0dG9ucykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBidXR0b25zID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gYnV0dG9ucy5pbmNsdWRlcygnaW1hZ2UnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShidXR0b25zKSkge1xyXG4gICAgICByZXR1cm4gYnV0dG9ucy5zb21lKGl0ZW0gPT5cclxuICAgICAgICB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZydcclxuICAgICAgICAgID8gaXRlbSA9PT0gJ2ltYWdlJ1xyXG4gICAgICAgICAgOiBpdGVtPy5uYW1lID09PSAnaW1hZ2UnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkNoYW5nZSA9ICh2YWx1ZTogYW55KSA9PiB7XHJcbiAgfTtcclxuICBwcml2YXRlIG9uVG91Y2hlZCA9ICgpID0+IHtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHt9KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHdyaXRlVmFsdWUob3V0c2lkZVZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMudmFsdWUgPSB0aGlzLl9zYW5pdGl6ZVZhbHVlKG91dHNpZGVWYWx1ZSk7XHJcbiAgICBpZiAob3V0c2lkZVZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2lzSW5pdCA9IHRydWU7XHJcbiAgICAgIH0sIDEwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlVmFsdWUoaW5zaWRlVmFsdWU6IHN0cmluZykge1xyXG4gICAgLy8g0KHQvdCw0YfQsNC70LAg0YHRh9C40YLQsNC10LwsINC/0L7RgtC+0Lwg0L/RgNC+0LLQtdGA0Y/QtdC8INC40L3QuNGG0LjQsNC70LjQt9Cw0YbQuNGOXHJcbiAgICBpZiAodGhpcy5tYXhMZW5ndGgpIHtcclxuICAgICAgdGhpcy5fY2FsY3VsYXRlQ2hhcnRzQ291bnQoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKHRoaXMuX2lzSW5pdCkge1xyXG4gICAgICB0aGlzLnZhbHVlID0gaW5zaWRlVmFsdWU7XHJcbiAgICAgIHRoaXMuY2hhbmdlZC5lbWl0KGluc2lkZVZhbHVlKTtcclxuICAgICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHt2YWx1ZTogaW5zaWRlVmFsdWUsIGlkOiB0aGlzLnV1aWR9KTtcclxuICAgICAgdGhpcy5vbkNoYW5nZShpbnNpZGVWYWx1ZSk7XHJcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zYW5pdGl6ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHZhbHVlID8gdmFsdWUucmVwbGFjZSgvPHNjcmlwdFxcYltePF0qKD86KD8hPFxcL3NjcmlwdD4pPFtePF0qKSo8XFwvc2NyaXB0Pi9naSwgJycpIDogdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jYWxjdWxhdGVDaGFydHNDb3VudCgpIHtcclxuICAgIC8vINCSIEpvZGl0INC/0YDQsNCy0LjQu9GM0L3QviDRgdGH0LjRgtCw0YLRjCDQtNC70LjQvdGDINGH0LXRgNC10LcgLnRleHQsIFxyXG4gICAgLy8g0L3QviDQsiBuZ3gtam9kaXQg0LjQvdGB0YLQsNC90YEg0LTQvtGB0YLRg9C/0LXQvSDRh9C10YDQtdC3IC5qb2RpdFxyXG4gICAgaWYgKHRoaXMuZWRpdG9yRWxlbWVudFJlZj8uam9kaXQpIHtcclxuICAgICAgdGhpcy52YWx1ZUxlbmd0aCA9IHRoaXMuZWRpdG9yRWxlbWVudFJlZi5qb2RpdC50ZXh0Lmxlbmd0aDtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rpb24uZGV0ZWN0Q2hhbmdlcygpOyAvLyDQpNC+0YDRgdC40YDRg9C10Lwg0L7QsdC90L7QstC70LXQvdC40LUgVUkg0LTQu9GPINGB0YfQtdGC0YfQuNC60LBcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gIGNsYXNzPVwibXJ4LWVkaXRvclwiXHJcbiAgW2NsYXNzLm1yeC1pbnB1dC1mb2N1c2VkXT1cImlzRm9jdXNlZFwiXHJcbiAgW2NsYXNzLm1yeC1pbnB1dC1lcnJvcl09XCIhaXNWYWxpZCB8fCBpbnZhbGlkXCJcclxuICBbY2xhc3NdPVwiZ2V0Q2xhc3Nlc1wiXHJcbiAgW2NsYXNzLi1yZWFkb25seV09XCJyZWFkb25seVwiXHJcbj5cclxuICA8bmd4LWpvZGl0XHJcbiAgICAjZWRpdG9yRWxlbWVudFJlZlxyXG4gICAgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiXHJcbiAgICBbb3B0aW9uc109XCJkZWZhdWx0Q29uZmlnXCJcclxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVWYWx1ZSgkZXZlbnQpXCJcclxuICA+PC9uZ3gtam9kaXQ+XHJcblxyXG4gIDxtcngtZXJyb3ItbWVzc2FnZVxyXG4gICAgKm5nSWY9XCIoIWlzVmFsaWQgfHwgaW52YWxpZCkgJiYgaXNJbnZhbGlkTWVzc2FnZVwiXHJcbiAgICBbaW52YWxpZE1lc3NhZ2VdPVwiaW52YWxpZE1lc3NhZ2VcIlxyXG4gID48L21yeC1lcnJvci1tZXNzYWdlPlxyXG5cclxuICA8bXJ4LWNoYXJzLWxlZnQgW21heGxlbmd0aF09XCJtYXhMZW5ndGhcIiBbdmFsdWVMZW5ndGhdPVwidmFsdWVMZW5ndGhcIj48L21yeC1jaGFycy1sZWZ0PlxyXG5cclxuICA8bXJ4LXNhdmUtc3RhdGUgdHlwZT1cImVkaXRvclwiIFtpZF09XCJ1dWlkXCIgW2ZpZWxkc109XCJmaWVsZHNcIj48L21yeC1zYXZlLXN0YXRlPlxyXG48L2Rpdj5cclxuIl19
@@ -11621,6 +11621,31 @@ class EditorComponent {
11621
11621
  blur: () => {
11622
11622
  this.changeFocused(false);
11623
11623
  },
11624
+ keydown: (event) => {
11625
+ const editor = this.editorElementRef?.jodit;
11626
+ if (!editor || this.maxLength <= 0)
11627
+ return true;
11628
+ // 1. Получаем текущую длину текста
11629
+ const currentLength = editor.text.length;
11630
+ // 2. Список системных клавиш, которые нельзя блокировать
11631
+ const isNavigationKey = [
11632
+ 'Backspace', 'Delete', 'ArrowLeft', 'ArrowRight',
11633
+ 'ArrowUp', 'ArrowDown', 'End', 'Home', 'Tab', 'Enter'
11634
+ ].includes(event.key);
11635
+ // Разрешаем сочетания с Ctrl/Cmd (Copy, Paste, Select All)
11636
+ const isModifier = event.ctrlKey || event.metaKey;
11637
+ if (currentLength >= this.maxLength && !isNavigationKey && !isModifier) {
11638
+ // 3. Самый надежный способ проверить, выделено ли что-то:
11639
+ // Если метод sel.isCollapsed недоступен, проверяем длину выделения через строку
11640
+ const selectedText = editor.s.sel ? editor.s.sel.toString() : '';
11641
+ // Если ничего не выделено, блокируем ввод нового символа
11642
+ if (!selectedText.length) {
11643
+ event.preventDefault();
11644
+ return false;
11645
+ }
11646
+ }
11647
+ return true;
11648
+ },
11624
11649
  paste: (event) => {
11625
11650
  this.handlePaste(event);
11626
11651
  },
@@ -11731,22 +11756,35 @@ class EditorComponent {
11731
11756
  this.changeDetection.detectChanges();
11732
11757
  }
11733
11758
  handlePaste(event) {
11734
- if (!event.clipboardData || this.hasImageButton()) {
11759
+ const editor = this.editorElementRef?.jodit;
11760
+ if (!event.clipboardData || !editor)
11735
11761
  return;
11762
+ const textData = event.clipboardData.getData('text/plain');
11763
+ const currentLength = editor.text.length;
11764
+ // Если вставка превышает лимит
11765
+ if (this.maxLength > 0 && (currentLength + textData.length) > this.maxLength) {
11766
+ event.preventDefault();
11767
+ const remainingSpace = this.maxLength - currentLength;
11768
+ if (remainingSpace > 0) {
11769
+ // Вставляем только разрешенный кусочек
11770
+ const truncatedText = textData.substring(0, remainingSpace);
11771
+ editor.s.insertHTML(truncatedText);
11772
+ }
11773
+ return; // Прекращаем выполнение, чтобы не сработала логика картинок ниже
11736
11774
  }
11737
- const { clipboardData } = event;
11738
- const htmlData = clipboardData.getData('text/html');
11739
- const hasHtmlImage = htmlData?.includes('<img');
11740
- const hasImage = Array.from(clipboardData.items).some(item => item.type.startsWith('image/'));
11741
- if (!hasImage && !hasHtmlImage) {
11775
+ // Ваша существующая логика защиты от картинок
11776
+ if (this.hasImageButton())
11742
11777
  return;
11743
- }
11744
- event.preventDefault();
11745
- const sanitizedHtml = this.removeImagesFromHtml(htmlData);
11746
- const textData = clipboardData.getData('text/plain');
11747
- const contentToInsert = sanitizedHtml || textData;
11748
- if (contentToInsert) {
11749
- this.editorElementRef.jodit.s.insertHTML(contentToInsert);
11778
+ const htmlData = event.clipboardData.getData('text/html');
11779
+ const hasHtmlImage = htmlData?.includes('<img');
11780
+ const hasImage = Array.from(event.clipboardData.items).some(item => item.type.startsWith('image/'));
11781
+ if (hasImage || hasHtmlImage) {
11782
+ event.preventDefault();
11783
+ const sanitizedHtml = this.removeImagesFromHtml(htmlData);
11784
+ const contentToInsert = sanitizedHtml || textData;
11785
+ if (contentToInsert) {
11786
+ editor.s.insertHTML(contentToInsert);
11787
+ }
11750
11788
  }
11751
11789
  }
11752
11790
  removeImagesFromHtml(html) {
@@ -11792,6 +11830,7 @@ class EditorComponent {
11792
11830
  }
11793
11831
  }
11794
11832
  updateValue(insideValue) {
11833
+ // Сначала считаем, потом проверяем инициализацию
11795
11834
  if (this.maxLength) {
11796
11835
  this._calculateChartsCount();
11797
11836
  }
@@ -11807,7 +11846,12 @@ class EditorComponent {
11807
11846
  return value ? value.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '') : value;
11808
11847
  }
11809
11848
  _calculateChartsCount() {
11810
- this.valueLength = this.editorElementRef.editor.text.replace(/\s+/g, '').length;
11849
+ // В Jodit правильно считать длину через .text,
11850
+ // но в ngx-jodit инстанс доступен через .jodit
11851
+ if (this.editorElementRef?.jodit) {
11852
+ this.valueLength = this.editorElementRef.jodit.text.length;
11853
+ this.changeDetection.detectChanges(); // Форсируем обновление UI для счетчика
11854
+ }
11811
11855
  }
11812
11856
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EditorComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
11813
11857
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: EditorComponent, selector: "mrx-editor", inputs: { fields: "fields", toolbar: "toolbar", maxLength: "maxLength", minHeight: "minHeight", customClasses: "customClasses", placeholder: "placeholder", disabled: "disabled", readonly: "readonly", iframe: "iframe", defaultInlineStyle: "defaultInlineStyle", config: "config", editHTMLDocumentMode: "editHTMLDocumentMode", defaultMode: "defaultMode", invalid: "invalid", invalidMessage: "invalidMessage", checkInvalid: "checkInvalid" }, outputs: { changed: "changed", modelChange: "modelChange" }, providers: [