raise-common-lib 0.0.249 → 0.0.251

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 (61) hide show
  1. package/README.md +57 -57
  2. package/bundles/raise-common-lib.umd.js +197 -788
  3. package/bundles/raise-common-lib.umd.js.map +1 -1
  4. package/bundles/raise-common-lib.umd.min.js +1 -1
  5. package/bundles/raise-common-lib.umd.min.js.map +1 -1
  6. package/esm2015/lib/dialog/common-dialog/index.component.js +1 -1
  7. package/esm2015/lib/form/richtexteditor/data-config.js +68 -1
  8. package/esm2015/lib/form/richtexteditor/index.component.js +130 -470
  9. package/esm5/lib/dialog/common-dialog/index.component.js +1 -1
  10. package/esm5/lib/form/richtexteditor/data-config.js +68 -1
  11. package/esm5/lib/form/richtexteditor/index.component.js +132 -519
  12. package/fesm2015/raise-common-lib.js +196 -704
  13. package/fesm2015/raise-common-lib.js.map +1 -1
  14. package/fesm5/raise-common-lib.js +198 -789
  15. package/fesm5/raise-common-lib.js.map +1 -1
  16. package/lib/form/richtexteditor/data-config.d.ts +8 -0
  17. package/lib/form/richtexteditor/index.component.d.ts +41 -64
  18. package/package.json +1 -1
  19. package/raise-common-lib.metadata.json +1 -1
  20. package/src/assets/img/arrow_right.svg +4 -4
  21. package/src/assets/img/bullet-dash.svg +3 -0
  22. package/src/assets/img/calendar-disabled.svg +6 -6
  23. package/src/assets/img/calendar.svg +6 -6
  24. package/src/assets/img/calendar_arrow_left.svg +3 -3
  25. package/src/assets/img/calendar_arrow_right.svg +3 -3
  26. package/src/assets/img/checked-vector.svg +3 -3
  27. package/src/assets/img/dialog-close.svg +4 -4
  28. package/src/assets/img/dialog-grow.svg +6 -6
  29. package/src/assets/img/dialog-shrink.svg +6 -6
  30. package/src/assets/img/plus.svg +4 -4
  31. package/src/assets/img/search.svg +4 -4
  32. package/src/assets/img/shrink-icon.svg +6 -6
  33. package/src/assets/img/time-disabled.svg +4 -4
  34. package/src/assets/img/time.svg +4 -4
  35. package/src/assets/img/toolbar-action-addFolder.svg +17 -17
  36. package/src/assets/img/toolbar-action-calculator.svg +11 -11
  37. package/src/assets/img/toolbar-action-collapse.svg +7 -7
  38. package/src/assets/img/toolbar-action-combine.svg +4 -4
  39. package/src/assets/img/toolbar-action-edit.svg +4 -4
  40. package/src/assets/img/toolbar-action-expand.svg +7 -7
  41. package/src/assets/img/toolbar-action-folderMove.svg +8 -8
  42. package/src/assets/img/toolbar-action-lock.svg +6 -6
  43. package/src/assets/img/toolbar-action-preview.svg +7 -7
  44. package/src/assets/img/toolbar-action-publish.svg +5 -5
  45. package/src/assets/img/toolbar-action-reminders.svg +10 -10
  46. package/src/assets/img/toolbar-action-rename.svg +7 -7
  47. package/src/assets/img/toolbar-action-saveSequence.svg +5 -5
  48. package/src/assets/img/toolbar-action-send-file.svg +5 -5
  49. package/src/assets/img/toolbar-action-settle.svg +7 -7
  50. package/src/assets/img/toolbar-action-share.svg +5 -5
  51. package/src/assets/img/toolbar-action-submitForApproval.svg +4 -4
  52. package/src/assets/img/toolbar-action-sync.svg +4 -4
  53. package/src/assets/img/toolbar-action-template.svg +6 -6
  54. package/src/assets/img/toolbar-action-workflow.svg +9 -9
  55. package/src/assets/style/reset/button.scss +5 -1
  56. package/esm2015/lib/form/richtexteditor/ai-config.js +0 -70
  57. package/esm2015/lib/form/richtexteditor/openapi.js +0 -175
  58. package/esm5/lib/form/richtexteditor/ai-config.js +0 -73
  59. package/esm5/lib/form/richtexteditor/openapi.js +0 -208
  60. package/lib/form/richtexteditor/ai-config.d.ts +0 -10
  61. package/lib/form/richtexteditor/openapi.d.ts +0 -3
@@ -3,85 +3,34 @@
3
3
  * Generated from: lib/form/richtexteditor/index.component.ts
4
4
  * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
5
  */
6
- import * as tslib_1 from "tslib";
7
- import { Component, Input, Output, ViewChild, ChangeDetectorRef, EventEmitter, } from "@angular/core";
8
- import { DropDownListComponent, } from "@syncfusion/ej2-angular-dropdowns";
6
+ import { Component, Input, Output, EventEmitter, ViewChild, } from "@angular/core";
9
7
  import { RichTextEditorComponent, } from "@syncfusion/ej2-angular-richtexteditor";
10
- import { ButtonComponent, } from "@syncfusion/ej2-angular-buttons";
11
- import { DropDownButton } from "@syncfusion/ej2-angular-splitbuttons";
12
- import { DialogComponent } from "@syncfusion/ej2-angular-popups";
13
- import { OpenAiModelRTE } from "./openapi";
14
- import { lineHeight_items } from "./data-config";
15
- import { fontFamily } from "./data-config";
8
+ import { fontFamily, size } from "./data-config";
16
9
  export class RichtexteditorComponent {
17
- /**
18
- * @param {?} ref
19
- */
20
- constructor(ref) {
21
- this.ref = ref;
22
- // @ViewChild("chipList", { static: false }) public chipList!: ChipListComponent;
23
- this.placeholder = "";
10
+ constructor() {
24
11
  this.value = "";
12
+ this.editorId = "editorId";
25
13
  this.height = 150;
26
14
  this.autoSaveOnIdle = true;
27
- this.target = "#container"; // dialog 弹窗父级
28
- // dialog 弹窗父级
29
- this.toolbarClick = new EventEmitter();
30
- this.change = new EventEmitter();
31
- // @Output() change = new EventEmitter();
32
- this.family = fontFamily;
33
- this.dialogWidth = "800px";
34
- this.dialogHeight = "642px";
35
- this.showZoomBtn = true;
36
- this.showMsg = false;
15
+ this.disabled = false;
37
16
  this.insertImageSettings = {
38
17
  saveFormat: "Blob",
39
18
  allowedTypes: [".svg", ".png"],
40
19
  display: "none",
41
20
  };
42
- this.size = "";
43
- this.dropValIndex = 0;
44
- this.queryList = [
45
- { id: "Rephrase", text: "Rephrase" },
46
- { id: "Grammar", text: "Correct Grammar" },
47
- { id: "Summarize", text: "Summarize" },
48
- { id: "Elaborate", text: "Elaborate" },
49
- { id: "Translate", text: "Translate" },
50
- { id: "SentimentAnalysis", text: "Sentiment Analysis" },
51
- ];
52
- this.rephraseTyleList = [
53
- { text: "Standard", id: "Standard" },
54
- { text: "Fluent", id: "Fluent" },
55
- { text: "Professional", id: "Professional" },
56
- ];
57
- this.languageList = [
58
- { id: "EN", text: "English" },
59
- { id: "ZH", text: "Chinese (Simplified)" },
60
- { id: "ES", text: "Spanish" },
61
- { id: "ZHT", text: "Chinese (Traditional)" },
62
- { id: "HI", text: "Hindi" },
63
- { id: "AR", text: "Arabic" },
64
- { id: "BN", text: "Bengali" },
65
- { id: "PT", text: "Portuguese" },
66
- { id: "RU", text: "Russian" },
67
- { id: "JA", text: "Japanese" },
68
- { id: "DE", text: "German" },
69
- { id: "KO", text: "Korean" },
70
- { id: "FR", text: "French" },
71
- { id: "IT", text: "Italian" },
72
- { id: "TR", text: "Turkish" },
73
- ];
74
- this.promptQuery = "";
75
- this.isSentimentCheck = false;
76
- this.subQuery = "";
77
- this.chipValue = "Standard";
21
+ this.toolbarClick = new EventEmitter();
22
+ this.change = new EventEmitter();
23
+ this.created = new EventEmitter();
24
+ this.actionBegin = new EventEmitter();
25
+ this.input = new EventEmitter();
26
+ this.focus = new EventEmitter();
27
+ this.blur = new EventEmitter();
28
+ this.actionComplete = new EventEmitter();
29
+ this.family = fontFamily;
30
+ this.fontSize = size;
78
31
  this.tools = {
79
32
  enableFloating: false,
80
33
  items: [
81
- {
82
- tooltipText: "AI Assist",
83
- template: '<button class="e-tbar-btn e-btn" tabindex="-1" id="ai_assistant_button_tbar" style="width:100%"><div class="e-rte-dropdown-btn-text">AI Assist</div></button>',
84
- },
85
34
  "Bold",
86
35
  "Italic",
87
36
  "Underline",
@@ -96,21 +45,12 @@ export class RichtexteditorComponent {
96
45
  "CreateTable",
97
46
  "Formats",
98
47
  "Alignments",
99
- {
100
- tooltipText: "Line Height",
101
- template: '<button class="e-tbar-btn e-btn" tabindex="-1" id="lineheight_tbar" style="width:100%"></button>',
102
- },
103
- "OrderedList",
104
- "UnorderedList",
48
+ "BulletFormatList",
49
+ "NumberFormatList",
105
50
  "Outdent",
106
51
  "Indent",
107
52
  "|",
108
53
  "CreateLink",
109
- {
110
- tooltipText: "",
111
- template: '<button class="e-tbar-btn e-btn" tabindex="-1" id="custom_tbar" style="width:100%">' +
112
- '<div class="e-tbar-btn-text" style="font-weight: 500;"><img src="/assets/img/file-icon.svg" style="position: relative;top: -2px;"/><div class="uploadActions"><div id="uploadFromUser">Computer File</div><div id="relationDom">Ticket Attachment</div></div></div></button>',
113
- },
114
54
  "|",
115
55
  "FormatPainter",
116
56
  "ClearFormat",
@@ -119,483 +59,203 @@ export class RichtexteditorComponent {
119
59
  "Redo",
120
60
  ],
121
61
  };
62
+ /**
63
+ * 表格快捷工具栏:含 TableCell(合并/拆分单元格)
64
+ */
65
+ this.quickToolbarSettings = {
66
+ table: [
67
+ "Tableheader",
68
+ "TableRemove",
69
+ "|",
70
+ "TableRows",
71
+ "TableColumns",
72
+ "TableCell",
73
+ "|",
74
+ "Styles",
75
+ "BackgroundColor",
76
+ "Alignments",
77
+ "TableCellVerticalAlign",
78
+ ],
79
+ };
80
+ this.bulletFormatList = {
81
+ types: [
82
+ { text: "None", value: "none" },
83
+ { text: "●", value: "disc" },
84
+ { text: "○", value: "circle" },
85
+ { text: "■", value: "square" },
86
+ { text: "-", value: "dash" },
87
+ ],
88
+ };
89
+ this.numberFormatList = {
90
+ types: [
91
+ { text: "None", value: "none" },
92
+ { text: "1, 2, 3, …", value: "decimal" },
93
+ {
94
+ text: "α, β, γ, …",
95
+ value: "lowerGreek",
96
+ },
97
+ {
98
+ text: "i, ii, iii, …",
99
+ value: "lowerRoman",
100
+ },
101
+ {
102
+ text: "A, B, C, …",
103
+ value: "upperAlpha",
104
+ },
105
+ {
106
+ text: "a, b, c, …",
107
+ value: "lowerAlpha",
108
+ },
109
+ {
110
+ text: "I, II, III, …",
111
+ value: "upperRoman",
112
+ },
113
+ {
114
+ text: "(1), (2), (3), …",
115
+ value: "parentheses",
116
+ },
117
+ ],
118
+ };
122
119
  }
123
- /**
124
- * @return {?}
125
- */
126
- ngOnInit() { }
127
120
  /**
128
121
  * @param {?} args
129
122
  * @return {?}
130
123
  */
131
124
  onContentChange(args) {
132
- /** @type {?} */
133
- const tables = document.querySelectorAll("table.e-rte-table");
134
- tables.forEach((/**
135
- * @param {?} table
136
- * @return {?}
137
- */
138
- (table) => {
139
- /** @type {?} */
140
- const htmlTable = (/** @type {?} */ (table));
141
- htmlTable.style.marginBottom = "10px";
142
- htmlTable.style.borderCollapse = "collapse";
143
- htmlTable.style.emptyCells = "show";
144
- /** @type {?} */
145
- const tdElements = table.querySelectorAll("td");
146
- tdElements.forEach((/**
147
- * @param {?} td
148
- * @return {?}
149
- */
150
- (td) => {
151
- td.style.border = "1px solid #adb5bd";
152
- td.style.height = "20px";
153
- td.style.minWidth = "20px";
154
- td.style.padding = "2px 5px";
155
- td.style.boxSizing = "border-box";
156
- }));
157
- }));
158
125
  this.change.emit(args);
159
126
  }
160
127
  /**
161
128
  * @return {?}
162
129
  */
163
130
  onCreate() {
164
- //bind the a click event
165
- // let editorContent = this.rteObj.contentModule.getEditPanel() as HTMLElement;
166
- // editorContent.addEventListener('click', this.OnClicked.bind(this));
167
- //add the line height
168
- this.editorManager = this.rteObj.formatter.editorManager;
169
- /** @type {?} */
170
- let splitButton = new DropDownButton({
171
- items: lineHeight_items,
172
- iconCss: "e-icons e-line-spacing",
173
- select: this.onSelect.bind(this),
174
- });
175
- splitButton.appendTo("#lineheight_tbar");
176
- // ai assist
177
- /** @type {?} */
178
- let aiassistantButton = new DropDownButton({
179
- items: this.queryList,
180
- // iconCss: "e-btn-icon e-icons e-assistview-icon e-icon-left",
181
- select: (/**
182
- * @param {?} args
183
- * @return {?}
184
- */
185
- (args) => this.aiQuerySelectedMenu(args)),
186
- });
187
- aiassistantButton.appendTo("#ai_assistant_button_tbar");
131
+ this.created.emit();
188
132
  }
189
133
  /**
190
- * @private
191
134
  * @param {?} args
192
135
  * @return {?}
193
136
  */
194
- onSelect(args) {
195
- if (this.rteObj.formatter.getUndoRedoStack().length === 0) {
196
- this.rteObj.formatter.saveData();
197
- }
198
- /** @type {?} */
199
- let nodes = this.editorManager.domNode.blockNodes();
200
- for (let i = 0; nodes.length > i; i++) {
201
- ((/** @type {?} */ (nodes[i]))).style.lineHeight = args.item.text;
202
- }
203
- this.rteObj.formatter.saveData();
204
- this.rteObj.formatter.enableUndo(this.rteObj);
137
+ _toolbarClick(args) {
138
+ this.toolbarClick.emit(args);
205
139
  }
206
140
  /**
207
- * @private
208
141
  * @param {?} args
209
142
  * @return {?}
210
143
  */
211
- aiQuerySelectedMenu(args) {
212
- this.dialogueOpen(args.item.text);
213
- }
214
- /**
215
- * @param {?} selectedQuery
216
- * @return {?}
217
- */
218
- dialogueOpen(selectedQuery) {
219
- /** @type {?} */
220
- var selectionText = this.rteObj.getSelectedHtml();
221
- this.selectedQuery = selectedQuery;
222
- if (selectionText) {
223
- /** @type {?} */
224
- let range = ((/** @type {?} */ (this.rteObj))).formatter.editorManager.nodeSelection.getRange(((/** @type {?} */ (this.rteObj))).contentModule.getDocument());
225
- ((/** @type {?} */ (this.rteObj))).formatter.editorManager.nodeSelection.save(range, ((/** @type {?} */ (this.rteObj))).contentModule.getDocument());
226
- this.dropValIndex = this.queryList.findIndex((/**
227
- * @param {?} q
228
- * @return {?}
229
- */
230
- (q) => q.text.toLowerCase() === selectedQuery.toLowerCase()));
231
- this.queryCategory.index = this.dropValIndex;
232
- this.leftRte.value = this.promptQuery = selectionText;
233
- this.leftRte.refreshUI();
234
- this.AIdialog.show();
235
- this.updateAISugesstionsData(selectedQuery);
236
- }
237
- else {
238
- this.showMsg = true;
239
- setTimeout((/**
240
- * @return {?}
241
- */
242
- () => {
243
- this.showMsg = false;
244
- }), 3000);
245
- console.log("Please select the content to perform the AI operation.");
246
- }
144
+ _actionBegin(args) {
145
+ this.actionBegin.emit(args);
247
146
  }
248
147
  /**
249
- * @param {?} selectedQuery
148
+ * @param {?} args
250
149
  * @return {?}
251
150
  */
252
- updateAISugesstionsData(selectedQuery) {
253
- this.isSentimentCheck = false;
254
- switch (selectedQuery) {
255
- case "Summarize":
256
- this.subQuery = "Summarize the upcoming sentence shortly.";
257
- break;
258
- case "Elaborate":
259
- this.subQuery = "Elaborate on the upcoming sentence.";
260
- break;
261
- case "Rephrase":
262
- this.subQuery = this.chipValue + " rephrase the upcoming sentence.";
263
- break;
264
- case "Correct Grammar":
265
- this.subQuery = "Correct the grammar of the upcoming sentence.";
266
- break;
267
- case "Translate":
268
- this.subQuery =
269
- "Translate the upcoming sentence to " + this.translatelanguage + ".";
270
- break;
271
- case "Sentiment Analysis":
272
- this.isSentimentCheck = true;
273
- this.subQuery =
274
- 'Analyze the sentiment and grammar of the following paragraphs and provide the expression score with an emoji followed by the sentiment in the format: "😊 Neutral". \n\nNOTE: Avoid any additional text or explanation:';
275
- break;
276
- }
277
- this.updateAISugesstions();
151
+ _input(args) {
152
+ this.input.emit(args);
278
153
  }
279
154
  /**
155
+ * @param {?} args
280
156
  * @return {?}
281
157
  */
282
- updateAISugesstions() {
283
- try {
284
- if (this.promptQuery) {
285
- ((/** @type {?} */ (document.getElementById("skeletonId")))).style.display =
286
- "";
287
- ((/** @type {?} */ (document.getElementById("rightRte")))).style.display =
288
- "none";
289
- this.sentimentButton.element.style.display = "none";
290
- this.regenerateButton.disabled = true;
291
- this.copyButton.disabled = true;
292
- this.replaceButton.disabled = true;
293
- this.apiResultData = this.getResponseFromOpenAI(this.subQuery, this.promptQuery);
294
- this.apiResultData.then((/**
295
- * @param {?} result
296
- * @return {?}
297
- */
298
- (result) => {
299
- this.AIResult = this.isSentimentCheck ? this.promptQuery : result;
300
- this.sentimentButton.content = result
301
- .toLowerCase()
302
- .includes("positive")
303
- ? "😊 Positive"
304
- : result.toLowerCase().includes("negative")
305
- ? "😞 Negative"
306
- : "😐 Neutral";
307
- this.sentimentButton.element.style.display = !this.isSentimentCheck
308
- ? "none"
309
- : "";
310
- this.rightRte.value = this.AIResult;
311
- /** @type {?} */
312
- var noResultsFound = !(this.AIResult || this.promptQuery);
313
- ((/** @type {?} */ (document.getElementById("no-results-found")))).style.display = noResultsFound ? "" : "none";
314
- this.regenerateButton.disabled = noResultsFound;
315
- this.copyButton.disabled = noResultsFound;
316
- this.replaceButton.disabled = noResultsFound;
317
- ((/** @type {?} */ (document.getElementById("skeletonId")))).style.display =
318
- "none";
319
- ((/** @type {?} */ (document.getElementById("rightRte")))).style.display =
320
- noResultsFound ? "none" : "";
321
- console.log(noResultsFound, ((/** @type {?} */ (document.getElementById("rightRte")))).style);
322
- // this.ref.markForCheck();
323
- }));
158
+ _actionComplete(args) {
159
+ if (args.requestType == "UL") {
160
+ if (args.elements[0].parentElement.style.listStyleType == "dash") {
161
+ args.elements[0].parentElement.style.listStyleImage =
162
+ "url('../../../assets/img/bullet-dash.svg')";
163
+ args.elements[0].parentElement.style.listStyleType = "none";
324
164
  }
325
165
  }
326
- catch (_a) {
327
- // this.toastObj.show();
328
- }
329
- }
330
- /**
331
- * @param {?} subQuery
332
- * @param {?} promptQuery
333
- * @return {?}
334
- */
335
- getResponseFromOpenAI(subQuery, promptQuery) {
336
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
337
- /** @type {?} */
338
- const content = yield OpenAiModelRTE(subQuery, promptQuery);
339
- return content ? ((/** @type {?} */ (content))) : "";
340
- });
341
- }
342
- /**
343
- * @return {?}
344
- */
345
- dialogShow() {
346
- (/** @type {?} */ (this.regenerateButton)).element.addEventListener("click", (/**
347
- * @return {?}
348
- */
349
- () => {
350
- this.updateAISugesstions();
351
- }));
352
- (/** @type {?} */ (this.copyButton)).element.addEventListener("click", (/**
353
- * @return {?}
354
- */
355
- () => {
356
- this.copyTextToClipboard(this.AIResult);
357
- }));
358
- (/** @type {?} */ (this.replaceButton)).element.addEventListener("click", (/**
359
- * @return {?}
360
- */
361
- () => {
362
- /** @type {?} */
363
- let range = ((/** @type {?} */ (this.rteObj))).formatter.editorManager.nodeSelection.getRange(((/** @type {?} */ (this.rteObj))).contentModule.getDocument());
364
- ((/** @type {?} */ (this.rteObj))).formatter.editorManager.nodeSelection.restore(range);
365
- ((/** @type {?} */ (this.rteObj))).executeCommand("insertHTML", this.AIResult, {
366
- undo: true,
367
- });
368
- this.closeDialog();
369
- }));
370
- ((/** @type {?} */ (this.AIdialog))).element.style.display = "";
371
- }
372
- /**
373
- * @return {?}
374
- */
375
- closeDialog() {
376
- this.AIdialog.hide();
377
- this.rightRte.value = "";
378
- this.leftRte.value = "";
379
- this.promptQuery = "";
380
- this.chipValue = "Standard";
381
- this.AIResult = "";
382
- this.dropValIndex = 0;
383
- this.selectedQuery = "Rephrase";
384
- this.sentimentButton.content = "😊 Neutral";
385
- }
386
- /**
387
- * @param {?} text
388
- * @return {?}
389
- */
390
- copyTextToClipboard(text) {
391
- if (navigator.clipboard) {
392
- navigator.clipboard
393
- .writeText(text)
394
- .then((/**
395
- * @return {?}
396
- */
397
- () => {
398
- console.log("Text copied to clipboard successfully!");
399
- }))
400
- .catch((/**
401
- * @param {?} err
402
- * @return {?}
403
- */
404
- (err) => {
405
- console.error("Failed to copy text: ", err);
406
- }));
407
- }
408
- else {
409
- // Fallback for browsers that do not support the Clipboard API
410
- /** @type {?} */
411
- const textarea = document.createElement("textarea");
412
- textarea.value = text;
413
- document.body.appendChild(textarea);
414
- textarea.select();
415
- try {
416
- document.execCommand("copy");
417
- console.log("Text copied to clipboard using execCommand");
418
- }
419
- catch (err) {
420
- console.error("Failed to copy text: ", err);
166
+ else if (args.requestType == "OL") {
167
+ args.elements[0].parentElement.classList.remove("custom-list", "parentheses");
168
+ if (args.elements[0].parentElement.style.listStyleType == "parentheses") {
169
+ args.elements[0].parentElement.classList = "custom-list";
170
+ args.elements[0].parentElement.classList.add("parentheses");
421
171
  }
422
- finally {
423
- document.body.removeChild(textarea);
424
- }
425
- }
426
- }
427
- /**
428
- * @return {?}
429
- */
430
- onOverlayClick() {
431
- /** @type {?} */
432
- let activeEle = this.AIdialog.element.querySelector(".char_block.e-active");
433
- if (activeEle) {
434
- activeEle.classList.remove("e-active");
435
172
  }
436
- this.closeDialog();
437
- }
438
- /**
439
- * @param {?} args
440
- * @return {?}
441
- */
442
- onQuerySelect(args) {
443
- // this.chipList.selectedChips = 0;
444
- this.translatelanguage = "EN";
445
- this.selectedQuery = args.itemData.text;
446
- this.updateAISugesstionsData(args.itemData.text);
173
+ this.actionComplete.emit(args);
447
174
  }
448
175
  /**
449
176
  * @param {?} args
450
177
  * @return {?}
451
178
  */
452
- onLanguageSelect(args) {
453
- this.translatelanguage = args.itemData.id;
454
- this.updateAISugesstionsData("Translate");
179
+ _focus(args) {
180
+ this.focus.emit(args);
455
181
  }
456
182
  /**
457
183
  * @param {?} args
458
184
  * @return {?}
459
185
  */
460
- onChipClick(args) {
461
- this.chipValue = args.itemData.text;
462
- // 事件会触发两次 必须判断args.text是否有值
463
- if (args.itemData.text)
464
- this.updateAISugesstionsData("Rephrase");
465
- }
466
- /**
467
- * @param {?} args
468
- * @return {?}
469
- */
470
- _toolbarClick(args) {
471
- this.toolbarClick.emit(args);
472
- }
473
- /**
474
- * @return {?}
475
- */
476
- hideToast() {
477
- this.showMsg = false;
478
- }
479
- /**
480
- * @return {?}
481
- */
482
- onZoom() {
483
- if (this.size === "largest") {
484
- this.size = ""; // 恢复到原始大小
485
- }
486
- else {
487
- this.size = "largest"; // 设置为最大化
488
- }
186
+ _blur(args) {
187
+ this.blur.emit(args);
489
188
  }
490
189
  }
491
190
  RichtexteditorComponent.decorators = [
492
191
  { type: Component, args: [{
493
192
  selector: "rs-richtext-editor",
494
- template: "<div class=\"editor_box\" id=\"container\">\r\n <ejs-richtexteditor\r\n #editor\r\n id=\"editor\"\r\n [height]=\"height\"\r\n [saveInterval]=\"0\"\r\n [autoSaveOnIdle]=\"autoSaveOnIdle\"\r\n [toolbarSettings]=\"tools\"\r\n [fontFamily]=\"family\"\r\n [insertImageSettings]=\"insertImageSettings\"\r\n [(value)]=\"value\"\r\n (change)=\"onContentChange($event)\"\r\n (created)=\"onCreate()\"\r\n (toolbarClick)=\"_toolbarClick($event)\"\r\n >\r\n </ejs-richtexteditor>\r\n <ejs-dialog\r\n #AIdialog\r\n id=\"AIdialog\"\r\n [ngClass]=\"size\"\r\n [visible]=\"false\"\r\n [target]=\"target\"\r\n [isModal]=\"true\"\r\n [height]=\"dialogHeight\"\r\n [width]=\"dialogWidth\"\r\n maxHeight=\"80%\"\r\n cssClass=\"e-rte-elements custom-dialog-rte\"\r\n zIndex=\"1000\"\r\n (close)=\"closeDialog()\"\r\n (overlayClick)=\"onOverlayClick()\"\r\n (open)=\"dialogShow()\"\r\n >\r\n <ng-template #header>\r\n <div class=\"header-title\">AI Assist</div>\r\n <div class=\"header-buttons\">\r\n <div *ngIf=\"showZoomBtn\" class=\"header-zoom\" (click)=\"onZoom()\">\r\n <img\r\n class=\"header-icon\"\r\n *ngIf=\"size === 'largest'\"\r\n src=\"../../../assets/img/dialog-shrink.svg\"\r\n />\r\n <img\r\n class=\"header-icon\"\r\n *ngIf=\"size !== 'largest'\"\r\n src=\"../../../assets/img/dialog-grow.svg\"\r\n />\r\n </div>\r\n <div class=\"header-btn\" (click)=\"closeDialog()\">\r\n <img class=\"header-icon\" src=\"../../../assets/img/dialog-close.svg\" />\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #footerTemplate>\r\n <div id=\"dialog-footer-content\">\r\n <div class=\"custom-row-0\">\r\n <div\r\n class=\"cuscol-0\"\r\n style=\"width: 100%; align-items: center; justify-content: left\"\r\n ></div>\r\n <div\r\n class=\"cuscol-1\"\r\n style=\"\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n width: 100%;\r\n \"\r\n >\r\n <div style=\"text-align: right; width: 100%\">\r\n <button\r\n ejs-button\r\n #sentimentButton\r\n content=\"\uD83D\uDE0A Neutral\"\r\n disabled=\"false\"\r\n cssClass=\"sentiment\"\r\n ></button>\r\n <button\r\n ejs-button\r\n #copyButton\r\n content=\"Copy\"\r\n disabled=\"false\"\r\n class=\"copy-btn\"\r\n ></button>\r\n <button\r\n ejs-button\r\n #replaceButton\r\n content=\"Replace\"\r\n isPrimary=\"true\"\r\n disabled=\"false\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #content>\r\n <div class=\"dialog-content\" style=\"height: 100%\">\r\n <div class=\"custom-row-0\">\r\n <div class=\"cuscol-0\" style=\"width: 100%\">\r\n <ejs-dropdownlist\r\n #queryCategory\r\n style=\"width: 200px\"\r\n id=\"queryCategory\"\r\n [dataSource]=\"queryList\"\r\n index=\"0\"\r\n [fields]=\"{ text: 'text', value: 'id' }\"\r\n (select)=\"onQuerySelect($event)\"\r\n >\r\n Rephrase\r\n </ejs-dropdownlist>\r\n <ejs-dropdownlist\r\n *ngIf=\"selectedQuery == 'Rephrase'\"\r\n id=\"chips-container\"\r\n #chipList\r\n style=\"width: 160px\"\r\n [(ngModel)]=\"chipValue\"\r\n [dataSource]=\"rephraseTyleList\"\r\n [fields]=\"{ text: 'text', value: 'id' }\"\r\n (select)=\"onChipClick($event)\"\r\n >\r\n </ejs-dropdownlist>\r\n <ejs-dropdownlist\r\n *ngIf=\"selectedQuery == 'Translate'\"\r\n #languageCategory\r\n index=\"0\"\r\n id=\"language-Category\"\r\n [dataSource]=\"languageList\"\r\n [fields]=\"{ text: 'text', value: 'id' }\"\r\n (select)=\"onLanguageSelect($event)\"\r\n >\r\n </ejs-dropdownlist>\r\n </div>\r\n <div\r\n class=\"cuscol-1\"\r\n style=\"\r\n justify-content: space-between;\r\n align-items: center;\r\n width: 100%;\r\n \"\r\n >\r\n <!-- <ejs-chiplist\r\n id=\"chips-container\"\r\n #chipList\r\n [chips]=\"['Standard', 'Fluent', 'Professional']\"\r\n selection=\"Single\"\r\n cssClass=\"e-outline\"\r\n [selectedChips]=\"[0]\"\r\n (click)=\"onChipClick($event)\"\r\n >\r\n </ejs-chiplist> -->\r\n <button\r\n ejs-button\r\n #regenerateButton\r\n content=\"Regenerate\"\r\n isPrimary=\"true\"\r\n disabled=\"false\"\r\n ></button>\r\n </div>\r\n </div>\r\n <div class=\"custom-row-1\" style=\"height: calc(100% - 40px)\">\r\n <div\r\n class=\"cuscol-0\"\r\n style=\"\r\n width: 100%;\r\n height: 100%;\r\n align-items: center;\r\n justify-content: left;\r\n \"\r\n >\r\n <div style=\"text-align: left; height: 100%\">\r\n <ejs-richtexteditor\r\n #leftRte\r\n id=\"leftRte\"\r\n height=\"100%\"\r\n [toolbarSettings]=\"{ enable: false }\"\r\n placeholder=\"Analysis of AI Support\"\r\n cssClass=\"e-outline\"\r\n >\r\n </ejs-richtexteditor>\r\n </div>\r\n </div>\r\n <div\r\n class=\"cuscol-1\"\r\n style=\"\r\n display: flex;\r\n justify-content: space-between;\r\n width: 100%;\r\n height: 100%;\r\n \"\r\n >\r\n <div style=\"text-align: left; width: 100%; height: 100%\">\r\n <ejs-richtexteditor\r\n #rightRte\r\n id=\"rightRte\"\r\n height=\"100%\"\r\n [toolbarSettings]=\"{ enable: false }\"\r\n placeholder=\"Analysis of AI Support\"\r\n cssClass=\"e-outline\"\r\n >\r\n <!-- style=\"display: none\" -->\r\n </ejs-richtexteditor>\r\n <div\r\n class=\"no-results-found\"\r\n id=\"no-results-found\"\r\n style=\"display: none; height: 244px; align-content: center\"\r\n >\r\n <img\r\n height=\"50\"\r\n width=\"50\"\r\n src=\"https://storage.googleapis.com/cdn-bolddesk/agent-angular-app/images/light/no-records-warning.svg\"\r\n />\r\n <div>No results found</div>\r\n </div>\r\n <div id=\"skeletonId\" style=\"display: none\">\r\n <ejs-skeleton\r\n #skeletonId1\r\n shape=\"Rectangle\"\r\n height=\"20px\"\r\n width=\"100%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId2\r\n shape=\"Rectangle\"\r\n height=\"20px\"\r\n width=\"90%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId3\r\n shape=\"Rectangle\"\r\n height=\"20px\"\r\n width=\"70%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId4\r\n shape=\"Rectangle\"\r\n height=\"20px\"\r\n width=\"50%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId5\r\n shape=\"Rectangle\"\r\n height=\"20px\"\r\n width=\"30%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId6\r\n shape=\"Rectangle\"\r\n height=\"20px\"\r\n width=\"10%\"\r\n ></ejs-skeleton\r\n ><br />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ejs-dialog>\r\n <div class=\"toast\" *ngIf=\"showMsg\">\r\n <span class=\"toast_text\">First, Select some text</span\r\n ><span class=\"close_icon\" (click)=\"hideToast()\"></span>\r\n </div>\r\n</div>\r\n",
193
+ template: "<div class=\"editor_box\" id=\"container\">\r\n <ejs-richtexteditor\r\n #editor\r\n [id]=\"editorId\"\r\n [height]=\"height\"\r\n [saveInterval]=\"0\"\r\n [autoSaveOnIdle]=\"autoSaveOnIdle\"\r\n [toolbarSettings]=\"tools\"\r\n [quickToolbarSettings]=\"quickToolbarSettings\"\r\n [bulletFormatList]=\"bulletFormatList\"\r\n [numberFormatList]=\"numberFormatList\"\r\n [fontFamily]=\"family\"\r\n [fontSize]=\"fontSize\"\r\n [disabled]=\"disabled\"\r\n [insertImageSettings]=\"insertImageSettings\"\r\n [(value)]=\"value\"\r\n (actionBegin)=\"_actionBegin($event)\"\r\n (change)=\"onContentChange($event)\"\r\n (created)=\"onCreate()\"\r\n (toolbarClick)=\"_toolbarClick($event)\"\r\n (input)=\"_input($event)\"\r\n (focus)=\"_focus($event)\"\r\n (blur)=\"_blur($event)\"\r\n (actionComplete)=\"_actionComplete($event)\"\r\n >\r\n </ejs-richtexteditor>\r\n</div>\r\n",
495
194
  styles: [".editor_box{position:relative;width:100%;height:100%}.editor_box .toast{position:absolute;left:35%;top:110px;z-index:1;width:400px;border-radius:4px;border:1px solid #e8f2ff;background:#f4f8ff;padding:4px 12px;color:#1f3f5c;font-size:12px;font-style:normal;font-weight:400;height:32px;font-family:Arial;display:flex;align-items:center;justify-content:space-between}.editor_box .toast .toast_text::before{content:url(../../assets/img/info.svg);display:inline-block;width:16px;height:16px;vertical-align:bottom;margin-right:8px}.editor_box .toast .close_icon{background-image:url(../../assets/img/notification-close.svg);cursor:pointer;display:inline-block;width:16px;height:16px}.custom-dialog-rte{padding:0 20px;border-radius:10px}.custom-row-0,.custom-row-1,.custom-row-2{display:flex;align-items:center;padding:12px 24px}.e-rte-dropdown-btn-text{padding-left:4px}.no-results-found{text-align:center}.no-results-found img{display:block;margin:0 auto}.e-custom{margin-right:.5rem;border-radius:25px!important}.custom-dialog-rte .skeleton-rectangle{border-radius:4px}@media (max-width:767px){.cuscol-0,.cuscol-1,.cuscol-2{justify-content:center!important}.custom-row-0,.custom-row-1,.custom-row-2{flex-direction:column!important}.cuscol-1{border-right:none!important}.cuscol-0{width:100%;align-items:center}::ng-deep:host .e-dialog{max-height:80%!important}.custom-dialog-rte .e-dialog .e-dlg-content{overflow-y:auto!important}.custom-dialog-rte .e-dialog .e-dlg-content .e-richtexteditor{height:100px!important}.cuscol-noresult{padding-bottom:20px!important}.e-chip-list{padding:5px!important}.cuscol{padding-right:.2rem!important;width:auto!important}.custom-row-1{height:auto!important}}.cuscol-1{display:flex;flex-direction:row!important}.cuscol-2{display:flex;flex-direction:column!important}.sentiment{color:#000!important}.custom-dialog-rte .e-dialog .e-dlg-content{padding:0!important;overflow-y:hidden}.custom-dialog-rte .e-dialog .e-dlg-header-content{padding:20px 0!important;border:0!important}.custom-dialog-rte .e-dialog .e-dlg-header-content .e-dlg-header{display:flex;align-items:center;line-height:18px;justify-content:space-between}.custom-dialog-rte .e-dialog .e-dlg-header-content .e-dlg-header .header-title{font-family:Arial;font-size:15px;font-weight:700;font-style:normal}.custom-dialog-rte .e-dialog .e-dlg-header-content .header-buttons{display:flex}.custom-dialog-rte .e-dialog .e-dlg-header-content .header-buttons img{width:16px;height:16px;cursor:pointer;padding:2px;margin-left:12px}.custom-dialog-rte .e-dialog .e-footer-content{padding:0!important}.custom-dialog-rte .e-dialog .e-dlg-content .e-richtexteditor.e-rte-tb-expand .e-rte-content,.e-richtexteditor.e-rte-tb-expand .e-source-content{border:0;border-bottom:1px solid #dee2e6;border-top:0 solid #dee2e6!important}.custom-dialog-rte .dialog-content .custom-row-0{border-top:0 solid #ddd!important;padding:0;margin-bottom:12px}.custom-dialog-rte .dialog-content .custom-row-0 .cuscol-0{justify-content:left;border-right:none!important;padding:0;display:flex;gap:12px}.custom-dialog-rte .dialog-content .custom-row-0 .cuscol-1{padding:0;margin-left:12px}.custom-dialog-rte .dialog-content .custom-row-0 .cuscol-1 .e-primary{color:#44566c;border-radius:4px;border:1px solid #dbe1e7;background:#fff;width:87px;margin:0;padding:2px 12px;font-family:Arial;font-size:12px;font-style:normal;font-weight:400;line-height:14px;height:28px}.custom-dialog-rte .dialog-content .custom-row-1{padding:0;height:calc(100% - 40px);gap:12px}.custom-dialog-rte .e-footer-content{border:0}.custom-dialog-rte .e-footer-content .custom-row-0{padding:20px 0}.custom-dialog-rte .e-footer-content .e-control.e-btn{font-family:Arial;font-size:12px;line-height:14px;padding:2px 12px;height:28px;background:#fff;color:#44566c}.custom-dialog-rte .e-footer-content .e-control.e-btn.copy-btn{border-color:#dbe1e7}.custom-dialog-rte .e-footer-content .e-control.e-btn.copy-btn::before{content:url(../../assets/img/editor-copy.svg);vertical-align:middle;margin-right:6px}.custom-dialog-rte .e-footer-content .e-control.e-btn.e-primary{color:#fff;background:#1364b3}.editor_box .e-dialog.largest{width:96vw!important;height:88vh!important;max-height:88vh;max-width:2100px}"]
496
195
  }] }
497
196
  ];
498
- /** @nocollapse */
499
- RichtexteditorComponent.ctorParameters = () => [
500
- { type: ChangeDetectorRef }
501
- ];
502
197
  RichtexteditorComponent.propDecorators = {
503
198
  rteObj: [{ type: ViewChild, args: ["editor", { static: false },] }],
504
- queryCategory: [{ type: ViewChild, args: ["queryCategory", { static: false },] }],
505
- leftRte: [{ type: ViewChild, args: ["leftRte", { static: false },] }],
506
- rightRte: [{ type: ViewChild, args: ["rightRte", { static: false },] }],
507
- AIdialog: [{ type: ViewChild, args: ["AIdialog", { static: true },] }],
508
- sentimentButton: [{ type: ViewChild, args: ["sentimentButton", { static: false },] }],
509
- regenerateButton: [{ type: ViewChild, args: ["regenerateButton", { static: false },] }],
510
- copyButton: [{ type: ViewChild, args: ["copyButton", { static: false },] }],
511
- replaceButton: [{ type: ViewChild, args: ["replaceButton", { static: false },] }],
512
- placeholder: [{ type: Input }],
513
199
  value: [{ type: Input }],
200
+ editorId: [{ type: Input }],
514
201
  height: [{ type: Input }],
515
202
  autoSaveOnIdle: [{ type: Input }],
516
- target: [{ type: Input }],
203
+ disabled: [{ type: Input }],
204
+ insertImageSettings: [{ type: Input }],
517
205
  toolbarClick: [{ type: Output }],
518
- change: [{ type: Output }]
206
+ change: [{ type: Output }],
207
+ created: [{ type: Output }],
208
+ actionBegin: [{ type: Output }],
209
+ input: [{ type: Output }],
210
+ focus: [{ type: Output }],
211
+ blur: [{ type: Output }],
212
+ actionComplete: [{ type: Output }]
519
213
  };
520
214
  if (false) {
521
215
  /** @type {?} */
522
216
  RichtexteditorComponent.prototype.rteObj;
523
217
  /** @type {?} */
524
- RichtexteditorComponent.prototype.queryCategory;
525
- /** @type {?} */
526
- RichtexteditorComponent.prototype.leftRte;
527
- /** @type {?} */
528
- RichtexteditorComponent.prototype.rightRte;
529
- /** @type {?} */
530
- RichtexteditorComponent.prototype.AIdialog;
531
- /** @type {?} */
532
- RichtexteditorComponent.prototype.sentimentButton;
533
- /** @type {?} */
534
- RichtexteditorComponent.prototype.regenerateButton;
535
- /** @type {?} */
536
- RichtexteditorComponent.prototype.copyButton;
537
- /** @type {?} */
538
- RichtexteditorComponent.prototype.replaceButton;
539
- /** @type {?} */
540
- RichtexteditorComponent.prototype.placeholder;
541
- /** @type {?} */
542
218
  RichtexteditorComponent.prototype.value;
543
219
  /** @type {?} */
220
+ RichtexteditorComponent.prototype.editorId;
221
+ /** @type {?} */
544
222
  RichtexteditorComponent.prototype.height;
545
223
  /** @type {?} */
546
224
  RichtexteditorComponent.prototype.autoSaveOnIdle;
547
225
  /** @type {?} */
548
- RichtexteditorComponent.prototype.target;
549
- /** @type {?} */
550
- RichtexteditorComponent.prototype.toolbarClick;
551
- /** @type {?} */
552
- RichtexteditorComponent.prototype.change;
553
- /** @type {?} */
554
- RichtexteditorComponent.prototype.family;
555
- /** @type {?} */
556
- RichtexteditorComponent.prototype.dialogWidth;
557
- /** @type {?} */
558
- RichtexteditorComponent.prototype.dialogHeight;
559
- /** @type {?} */
560
- RichtexteditorComponent.prototype.showZoomBtn;
561
- /** @type {?} */
562
- RichtexteditorComponent.prototype.showMsg;
226
+ RichtexteditorComponent.prototype.disabled;
563
227
  /** @type {?} */
564
228
  RichtexteditorComponent.prototype.insertImageSettings;
565
229
  /** @type {?} */
566
- RichtexteditorComponent.prototype.editorManager;
567
- /** @type {?} */
568
- RichtexteditorComponent.prototype.size;
569
- /** @type {?} */
570
- RichtexteditorComponent.prototype.selectedQuery;
571
- /** @type {?} */
572
- RichtexteditorComponent.prototype.dropValIndex;
573
- /** @type {?} */
574
- RichtexteditorComponent.prototype.queryList;
230
+ RichtexteditorComponent.prototype.toolbarClick;
575
231
  /** @type {?} */
576
- RichtexteditorComponent.prototype.rephraseTyleList;
232
+ RichtexteditorComponent.prototype.change;
577
233
  /** @type {?} */
578
- RichtexteditorComponent.prototype.languageList;
234
+ RichtexteditorComponent.prototype.created;
579
235
  /** @type {?} */
580
- RichtexteditorComponent.prototype.promptQuery;
236
+ RichtexteditorComponent.prototype.actionBegin;
581
237
  /** @type {?} */
582
- RichtexteditorComponent.prototype.isSentimentCheck;
238
+ RichtexteditorComponent.prototype.input;
583
239
  /** @type {?} */
584
- RichtexteditorComponent.prototype.subQuery;
240
+ RichtexteditorComponent.prototype.focus;
585
241
  /** @type {?} */
586
- RichtexteditorComponent.prototype.translatelanguage;
242
+ RichtexteditorComponent.prototype.blur;
587
243
  /** @type {?} */
588
- RichtexteditorComponent.prototype.chipValue;
244
+ RichtexteditorComponent.prototype.actionComplete;
589
245
  /** @type {?} */
590
- RichtexteditorComponent.prototype.apiResultData;
246
+ RichtexteditorComponent.prototype.family;
591
247
  /** @type {?} */
592
- RichtexteditorComponent.prototype.AIResult;
248
+ RichtexteditorComponent.prototype.fontSize;
593
249
  /** @type {?} */
594
250
  RichtexteditorComponent.prototype.tools;
595
251
  /**
252
+ * 表格快捷工具栏:含 TableCell(合并/拆分单元格)
596
253
  * @type {?}
597
- * @private
598
254
  */
599
- RichtexteditorComponent.prototype.ref;
255
+ RichtexteditorComponent.prototype.quickToolbarSettings;
256
+ /** @type {?} */
257
+ RichtexteditorComponent.prototype.bulletFormatList;
258
+ /** @type {?} */
259
+ RichtexteditorComponent.prototype.numberFormatList;
600
260
  }
601
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vcmFpc2UtY29tbW9uLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9mb3JtL3JpY2h0ZXh0ZWRpdG9yL2luZGV4LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUVULGlCQUFpQixFQUNqQixZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLHFCQUFxQixHQUN0QixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFLTCx1QkFBdUIsR0FFeEIsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRCxPQUFPLEVBQ0wsZUFBZSxHQUVoQixNQUFNLGlDQUFpQyxDQUFDO0FBRXpDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFLakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVMzQyxNQUFNLE9BQU8sdUJBQXVCOzs7O0lBa0lsQyxZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjs7UUE5R2pDLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLFVBQUssR0FBRyxFQUFFLENBQUM7UUFDWCxXQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ2IsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFDdEIsV0FBTSxHQUFHLFlBQVksQ0FBQyxDQUFDLGNBQWM7O1FBRXBDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsQyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQzs7UUFHdEMs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SUFDN0MsMENBQ3lDOztJQUN6QywyQ0FDMEM7O0lBQzFDLDJDQUEyRTs7SUFDM0Usa0RBQ3lDOztJQUN6QyxtREFDMEM7O0lBQzFDLDZDQUNvQzs7SUFDcEMsZ0RBQ3VDOztJQUd2Qyw4Q0FBMEI7O0lBQzFCLHdDQUFvQjs7SUFDcEIseUNBQXNCOztJQUN0QixpREFBK0I7O0lBQy9CLHlDQUErQjs7SUFFL0IsK0NBQTRDOztJQUM1Qyx5Q0FBc0M7O0lBR3RDLHlDQUFvQjs7SUFDcEIsOENBQXNCOztJQUN0QiwrQ0FBdUI7O0lBQ3ZCLDhDQUFtQjs7SUFDbkIsMENBQWdCOztJQUNoQixzREFJRTs7SUFDRixnREFBbUI7O0lBQ25CLHVDQUFVOztJQUNWLGdEQUFjOztJQUNkLCtDQUF3Qjs7SUFDeEIsNENBT0U7O0lBQ0YsbURBSUU7O0lBQ0YsK0NBZ0JFOztJQUNGLDhDQUF3Qjs7SUFDeEIsbURBQXlDOztJQUN6QywyQ0FBcUI7O0lBQ3JCLG9EQUFrQzs7SUFDbEMsNENBQThCOztJQUM5QixnREFBMEI7O0lBQzFCLDJDQUF5Qjs7SUFDekIsd0NBK0NFOzs7OztJQUVVLHNDQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgQXV0b0NvbXBsZXRlQ29tcG9uZW50LFxyXG4gIERyb3BEb3duTGlzdENvbXBvbmVudCxcclxufSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItZHJvcGRvd25zXCI7XHJcbmltcG9ydCB7XHJcbiAgVG9vbGJhclNlcnZpY2UsXHJcbiAgTGlua1NlcnZpY2UsXHJcbiAgSW1hZ2VTZXJ2aWNlLFxyXG4gIEh0bWxFZGl0b3JTZXJ2aWNlLFxyXG4gIFJpY2hUZXh0RWRpdG9yQ29tcG9uZW50LFxyXG4gIFRvb2xiYXJTZXR0aW5nc01vZGVsLFxyXG59IGZyb20gXCJAc3luY2Z1c2lvbi9lajItYW5ndWxhci1yaWNodGV4dGVkaXRvclwiO1xyXG5pbXBvcnQge1xyXG4gIEJ1dHRvbkNvbXBvbmVudCxcclxuICBDaGlwTGlzdENvbXBvbmVudCxcclxufSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItYnV0dG9uc1wiO1xyXG5pbXBvcnQgeyBFbWl0VHlwZSB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItYmFzZVwiO1xyXG5pbXBvcnQgeyBEcm9wRG93bkJ1dHRvbiB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItYW5ndWxhci1zcGxpdGJ1dHRvbnNcIjtcclxuaW1wb3J0IHsgRGlhbG9nQ29tcG9uZW50IH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLXBvcHVwc1wiO1xyXG4vLyBzZXJ2aWNlXHJcbi8vIGltcG9ydCB7IFBiRnVuU2VydmljZSB9IGZyb20gXCJAYXBwL3NlcnZpY2VzL3BiLWZ1bi5zZXJ2aWNlXCI7XHJcbi8vIGltcG9ydCB7IFNoYXJlZFN5bmNmdXNpb25Nb2R1bGUgfSBmcm9tIFwiQGFwcC9tb2R1bGUvc3luY2Z1c2lvbk1vZHVsZVwiO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IE9wZW5BaU1vZGVsUlRFIH0gZnJvbSBcIi4vb3BlbmFwaVwiO1xyXG5pbXBvcnQgeyBsaW5lSGVpZ2h0X2l0ZW1zIH0gZnJvbSBcIi4vZGF0YS1jb25maWdcIjtcclxuaW1wb3J0IHsgZm9udEZhbWlseSB9IGZyb20gXCIuL2RhdGEtY29uZmlnXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJycy1yaWNodGV4dC1lZGl0b3JcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2luZGV4LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2luZGV4LmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gIC8vIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgLy8gaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgU2hhcmVkU3luY2Z1c2lvbk1vZHVsZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSaWNodGV4dGVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZChcImVkaXRvclwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcnRlT2JqOiBSaWNoVGV4dEVkaXRvckNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwicXVlcnlDYXRlZ29yeVwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcXVlcnlDYXRlZ29yeSE6IERyb3BEb3duTGlzdENvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwibGVmdFJ0ZVwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgbGVmdFJ0ZSE6IFJpY2hUZXh0RWRpdG9yQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJyaWdodFJ0ZVwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcmlnaHRSdGUhOiBSaWNoVGV4dEVkaXRvckNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwiQUlkaWFsb2dcIiwgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIEFJZGlhbG9nITogRGlhbG9nQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJzZW50aW1lbnRCdXR0b25cIiwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgcHVibGljIHNlbnRpbWVudEJ1dHRvbiE6IEJ1dHRvbkNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwicmVnZW5lcmF0ZUJ1dHRvblwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcmVnZW5lcmF0ZUJ1dHRvbiE6IEJ1dHRvbkNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwiY29weUJ1dHRvblwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgY29weUJ1dHRvbiE6IEJ1dHRvbkNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwicmVwbGFjZUJ1dHRvblwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcmVwbGFjZUJ1dHRvbiE6IEJ1dHRvbkNvbXBvbmVudDtcclxuICAvLyBAVmlld0NoaWxkKFwiY2hpcExpc3RcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyBjaGlwTGlzdCE6IENoaXBMaXN0Q29tcG9uZW50O1xyXG5cclxuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgQElucHV0KCkgdmFsdWUgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIGhlaWdodCA9IDE1MDtcclxuICBASW5wdXQoKSBhdXRvU2F2ZU9uSWRsZSA9IHRydWU7XHJcbiAgQElucHV0KCkgdGFyZ2V0ID0gXCIjY29udGFpbmVyXCI7IC8vIGRpYWxvZyDlvLnnqpfniLbnuqdcclxuXHJcbiAgQE91dHB1dCgpIHRvb2xiYXJDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIC8vIEBPdXRwdXQoKSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGZhbWlseSA9IGZvbnRGYW1pbHk7XHJcbiAgZGlhbG9nV2lkdGggPSBcIjgwMHB4XCI7XHJcbiAgZGlhbG9nSGVpZ2h0ID0gXCI2NDJweFwiO1xyXG4gIHNob3dab29tQnRuID0gdHJ1ZTtcclxuICBzaG93TXNnID0gZmFsc2U7XHJcbiAgaW5zZXJ0SW1hZ2VTZXR0aW5ncyA9IHtcclxuICAgIHNhdmVGb3JtYXQ6IFwiQmxvYlwiLFxyXG4gICAgYWxsb3dlZFR5cGVzOiBbXCIuc3ZnXCIsIFwiLnBuZ1wiXSxcclxuICAgIGRpc3BsYXk6IFwibm9uZVwiLFxyXG4gIH07XHJcbiAgZWRpdG9yTWFuYWdlcjogYW55O1xyXG4gIHNpemUgPSBcIlwiO1xyXG4gIHNlbGVjdGVkUXVlcnk7XHJcbiAgcHVibGljIGRyb3BWYWxJbmRleCA9IDA7XHJcbiAgcHVibGljIHF1ZXJ5TGlzdDogeyBpZDogc3RyaW5nOyB0ZXh0OiBzdHJpbmcgfVtdID0gW1xyXG4gICAgeyBpZDogXCJSZXBocmFzZVwiLCB0ZXh0OiBcIlJlcGhyYXNlXCIgfSxcclxuICAgIHsgaWQ6IFwiR3JhbW1hclwiLCB0ZXh0OiBcIkNvcnJlY3QgR3JhbW1hclwiIH0sXHJcbiAgICB7IGlkOiBcIlN1bW1hcml6ZVwiLCB0ZXh0OiBcIlN1bW1hcml6ZVwiIH0sXHJcbiAgICB7IGlkOiBcIkVsYWJvcmF0ZVwiLCB0ZXh0OiBcIkVsYWJvcmF0ZVwiIH0sXHJcbiAgICB7IGlkOiBcIlRyYW5zbGF0ZVwiLCB0ZXh0OiBcIlRyYW5zbGF0ZVwiIH0sXHJcbiAgICB7IGlkOiBcIlNlbnRpbWVudEFuYWx5c2lzXCIsIHRleHQ6IFwiU2VudGltZW50IEFuYWx5c2lzXCIgfSxcclxuICBdO1xyXG4gIHB1YmxpYyByZXBocmFzZVR5bGVMaXN0ID0gW1xyXG4gICAgeyB0ZXh0OiBcIlN0YW5kYXJkXCIsIGlkOiBcIlN0YW5kYXJkXCIgfSxcclxuICAgIHsgdGV4dDogXCJGbHVlbnRcIiwgaWQ6IFwiRmx1ZW50XCIgfSxcclxuICAgIHsgdGV4dDogXCJQcm9mZXNzaW9uYWxcIiwgaWQ6IFwiUHJvZmVzc2lvbmFsXCIgfSxcclxuICBdO1xyXG4gIHB1YmxpYyBsYW5ndWFnZUxpc3Q6IHsgaWQ6IHN0cmluZzsgdGV4dDogc3RyaW5nIH1bXSA9IFtcclxuICAgIHsgaWQ6IFwiRU5cIiwgdGV4dDogXCJFbmdsaXNoXCIgfSxcclxuICAgIHsgaWQ6IFwiWkhcIiwgdGV4dDogXCJDaGluZXNlIChTaW1wbGlmaWVkKVwiIH0sXHJcbiAgICB7IGlkOiBcIkVTXCIsIHRleHQ6IFwiU3BhbmlzaFwiIH0sXHJcbiAgICB7IGlkOiBcIlpIVFwiLCB0ZXh0OiBcIkNoaW5lc2UgKFRyYWRpdGlvbmFsKVwiIH0sXHJcbiAgICB7IGlkOiBcIkhJXCIsIHRleHQ6IFwiSGluZGlcIiB9LFxyXG4gICAgeyBpZDogXCJBUlwiLCB0ZXh0OiBcIkFyYWJpY1wiIH0sXHJcbiAgICB7IGlkOiBcIkJOXCIsIHRleHQ6IFwiQmVuZ2FsaVwiIH0sXHJcbiAgICB7IGlkOiBcIlBUXCIsIHRleHQ6IFwiUG9ydHVndWVzZVwiIH0sXHJcbiAgICB7IGlkOiBcIlJVXCIsIHRleHQ6IFwiUnVzc2lhblwiIH0sXHJcbiAgICB7IGlkOiBcIkpBXCIsIHRleHQ6IFwiSmFwYW5lc2VcIiB9LFxyXG4gICAgeyBpZDogXCJERVwiLCB0ZXh0OiBcIkdlcm1hblwiIH0sXHJcbiAgICB7IGlkOiBcIktPXCIsIHRleHQ6IFwiS29yZWFuXCIgfSxcclxuICAgIHsgaWQ6IFwiRlJcIiwgdGV4dDogXCJGcmVuY2hcIiB9LFxyXG4gICAgeyBpZDogXCJJVFwiLCB0ZXh0OiBcIkl0YWxpYW5cIiB9LFxyXG4gICAgeyBpZDogXCJUUlwiLCB0ZXh0OiBcIlR1cmtpc2hcIiB9LFxyXG4gIF07XHJcbiAgcHVibGljIHByb21wdFF1ZXJ5ID0gXCJcIjtcclxuICBwdWJsaWMgaXNTZW50aW1lbnRDaGVjazogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzdWJRdWVyeSA9IFwiXCI7XHJcbiAgcHVibGljIHRyYW5zbGF0ZWxhbmd1YWdlITogc3RyaW5nO1xyXG4gIHB1YmxpYyBjaGlwVmFsdWUgPSBcIlN0YW5kYXJkXCI7XHJcbiAgcHVibGljIGFwaVJlc3VsdERhdGE6IGFueTtcclxuICBwdWJsaWMgQUlSZXN1bHQhOiBzdHJpbmc7XHJcbiAgdG9vbHM6IFRvb2xiYXJTZXR0aW5nc01vZGVsID0ge1xyXG4gICAgZW5hYmxlRmxvYXRpbmc6IGZhbHNlLFxyXG4gICAgaXRlbXM6IFtcclxuICAgICAge1xyXG4gICAgICAgIHRvb2x0aXBUZXh0OiBcIkFJIEFzc2lzdFwiLFxyXG4gICAgICAgIHRlbXBsYXRlOlxyXG4gICAgICAgICAgJzxidXR0b24gY2xhc3M9XCJlLXRiYXItYnRuIGUtYnRuXCIgdGFiaW5kZXg9XCItMVwiIGlkPVwiYWlfYXNzaXN0YW50X2J1dHRvbl90YmFyXCIgc3R5bGU9XCJ3aWR0aDoxMDAlXCI+PGRpdiBjbGFzcz1cImUtcnRlLWRyb3Bkb3duLWJ0bi10ZXh0XCI+QUkgQXNzaXN0PC9kaXY+PC9idXR0b24+JyxcclxuICAgICAgfSxcclxuICAgICAgXCJCb2xkXCIsXHJcbiAgICAgIFwiSXRhbGljXCIsXHJcbiAgICAgIFwiVW5kZXJsaW5lXCIsXHJcbiAgICAgIFwiU3RyaWtlVGhyb3VnaFwiLFxyXG4gICAgICBcIkZvbnROYW1lXCIsXHJcbiAgICAgIFwiRm9udFNpemVcIixcclxuICAgICAgXCJGb250Q29sb3JcIixcclxuICAgICAgXCJCYWNrZ3JvdW5kQ29sb3JcIixcclxuICAgICAgXCJMb3dlckNhc2VcIixcclxuICAgICAgXCJVcHBlckNhc2VcIixcclxuICAgICAgXCJ8XCIsXHJcbiAgICAgIFwiQ3JlYXRlVGFibGVcIixcclxuICAgICAgXCJGb3JtYXRzXCIsXHJcbiAgICAgIFwiQWxpZ25tZW50c1wiLFxyXG4gICAgICB7XHJcbiAgICAgICAgdG9vbHRpcFRleHQ6IFwiTGluZSBIZWlnaHRcIixcclxuICAgICAgICB0ZW1wbGF0ZTpcclxuICAgICAgICAgICc8YnV0dG9uIGNsYXNzPVwiZS10YmFyLWJ0biBlLWJ0blwiIHRhYmluZGV4PVwiLTFcIiBpZD1cImxpbmVoZWlnaHRfdGJhclwiICBzdHlsZT1cIndpZHRoOjEwMCVcIj48L2J1dHRvbj4nLFxyXG4gICAgICB9LFxyXG4gICAgICBcIk9yZGVyZWRMaXN0XCIsXHJcbiAgICAgIFwiVW5vcmRlcmVkTGlzdFwiLFxyXG4gICAgICBcIk91dGRlbnRcIixcclxuICAgICAgXCJJbmRlbnRcIixcclxuICAgICAgXCJ8XCIsXHJcbiAgICAgIFwiQ3JlYXRlTGlua1wiLFxyXG4gICAgICB7XHJcbiAgICAgICAgdG9vbHRpcFRleHQ6IFwiXCIsXHJcbiAgICAgICAgdGVtcGxhdGU6XHJcbiAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz1cImUtdGJhci1idG4gZS1idG5cIiB0YWJpbmRleD1cIi0xXCIgaWQ9XCJjdXN0b21fdGJhclwiICBzdHlsZT1cIndpZHRoOjEwMCVcIj4nICtcclxuICAgICAgICAgICc8ZGl2IGNsYXNzPVwiZS10YmFyLWJ0bi10ZXh0XCIgc3R5bGU9XCJmb250LXdlaWdodDogNTAwO1wiPjxpbWcgc3JjPVwiL2Fzc2V0cy9pbWcvZmlsZS1pY29uLnN2Z1wiIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO3RvcDogLTJweDtcIi8+PGRpdiBjbGFzcz1cInVwbG9hZEFjdGlvbnNcIj48ZGl2IGlkPVwidXBsb2FkRnJvbVVzZXJcIj5Db21wdXRlciBGaWxlPC9kaXY+PGRpdiBpZD1cInJlbGF0aW9uRG9tXCI+VGlja2V0IEF0dGFjaG1lbnQ8L2Rpdj48L2Rpdj48L2Rpdj48L2J1dHRvbj4nLFxyXG4gICAgICB9LFxyXG4gICAgICBcInxcIixcclxuICAgICAgXCJGb3JtYXRQYWludGVyXCIsXHJcbiAgICAgIFwiQ2xlYXJGb3JtYXRcIixcclxuICAgICAgXCJ8XCIsXHJcbiAgICAgIFwiVW5kb1wiLFxyXG4gICAgICBcIlJlZG9cIixcclxuICAgICAgLy8nU291cmNlQ29kZScsXHJcbiAgICBdLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge31cclxuXHJcbiAgbmdPbkluaXQoKSB7fVxyXG5cclxuICBvbkNvbnRlbnRDaGFuZ2UoYXJncykge1xyXG4gICAgY29uc3QgdGFibGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInRhYmxlLmUtcnRlLXRhYmxlXCIpO1xyXG4gICAgdGFibGVzLmZvckVhY2goKHRhYmxlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGh0bWxUYWJsZSA9IHRhYmxlIGFzIEhUTUxUYWJsZUVsZW1lbnQ7XHJcbiAgICAgIGh0bWxUYWJsZS5zdHlsZS5tYXJnaW5Cb3R0b20gPSBcIjEwcHhcIjtcclxuICAgICAgaHRtbFRhYmxlLnN0eWxlLmJvcmRlckNvbGxhcHNlID0gXCJjb2xsYXBzZVwiO1xyXG4gICAgICBodG1sVGFibGUuc3R5bGUuZW1wdHlDZWxscyA9IFwic2hvd1wiO1xyXG4gICAgICBjb25zdCB0ZEVsZW1lbnRzID0gdGFibGUucXVlcnlTZWxlY3RvckFsbChcInRkXCIpO1xyXG4gICAgICB0ZEVsZW1lbnRzLmZvckVhY2goKHRkKSA9PiB7XHJcbiAgICAgICAgdGQuc3R5bGUuYm9yZGVyID0gXCIxcHggc29saWQgI2FkYjViZFwiO1xyXG4gICAgICAgIHRkLnN0eWxlLmhlaWdodCA9IFwiMjBweFwiO1xyXG4gICAgICAgIHRkLnN0eWxlLm1pbldpZHRoID0gXCIyMHB4XCI7XHJcbiAgICAgICAgdGQuc3R5bGUucGFkZGluZyA9IFwiMnB4IDVweFwiO1xyXG4gICAgICAgIHRkLnN0eWxlLmJveFNpemluZyA9IFwiYm9yZGVyLWJveFwiO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jaGFuZ2UuZW1pdChhcmdzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNyZWF0ZSgpOiB2b2lkIHtcclxuICAgIC8vYmluZCB0aGUgYSBjbGljayBldmVudFxyXG4gICAgLy8gbGV0IGVkaXRvckNvbnRlbnQgPSB0aGlzLnJ0ZU9iai5jb250ZW50TW9kdWxlLmdldEVkaXRQYW5lbCgpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgLy8gZWRpdG9yQ29udGVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuT25DbGlja2VkLmJpbmQodGhpcykpO1xyXG4gICAgLy9hZGQgdGhlIGxpbmUgaGVpZ2h0XHJcbiAgICB0aGlzLmVkaXRvck1hbmFnZXIgPSB0aGlzLnJ0ZU9iai5mb3JtYXR0ZXIuZWRpdG9yTWFuYWdlcjtcclxuICAgIGxldCBzcGxpdEJ1dHRvbiA9IG5ldyBEcm9wRG93bkJ1dHRvbih7XHJcbiAgICAgIGl0ZW1zOiBsaW5lSGVpZ2h0X2l0ZW1zLFxyXG4gICAgICBpY29uQ3NzOiBcImUtaWNvbnMgZS1saW5lLXNwYWNpbmdcIixcclxuICAgICAgc2VsZWN0OiB0aGlzLm9uU2VsZWN0LmJpbmQodGhpcyksXHJcbiAgICB9KTtcclxuICAgIHNwbGl0QnV0dG9uLmFwcGVuZFRvKFwiI2xpbmVoZWlnaHRfdGJhclwiKTtcclxuICAgIC8vIGFpIGFzc2lzdFxyXG4gICAgbGV0IGFpYXNzaXN0YW50QnV0dG9uID0gbmV3IERyb3BEb3duQnV0dG9uKHtcclxuICAgICAgaXRlbXM6IHRoaXMucXVlcnlMaXN0LFxyXG4gICAgICAvLyBpY29uQ3NzOiBcImUtYnRuLWljb24gZS1pY29ucyBlLWFzc2lzdHZpZXctaWNvbiBlLWljb24tbGVmdFwiLFxyXG4gICAgICBzZWxlY3Q6IChhcmdzKSA9PiB0aGlzLmFpUXVlcnlTZWxlY3RlZE1lbnUoYXJncyksXHJcbiAgICB9KTtcclxuICAgIGFpYXNzaXN0YW50QnV0dG9uLmFwcGVuZFRvKFwiI2FpX2Fzc2lzdGFudF9idXR0b25fdGJhclwiKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25TZWxlY3QoYXJncykge1xyXG4gICAgaWYgKHRoaXMucnRlT2JqLmZvcm1hdHRlci5nZXRVbmRvUmVkb1N0YWNrKCkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMucnRlT2JqLmZvcm1hdHRlci5zYXZlRGF0YSgpO1xyXG4gICAgfVxyXG4gICAgbGV0IG5vZGVzOiBOb2RlW10gPSB0aGlzLmVkaXRvck1hbmFnZXIuZG9tTm9kZS5ibG9ja05vZGVzKCk7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBub2Rlcy5sZW5ndGggPiBpOyBpKyspIHtcclxuICAgICAgKG5vZGVzW2ldIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5saW5lSGVpZ2h0ID0gYXJncy5pdGVtLnRleHQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJ0ZU9iai5mb3JtYXR0ZXIuc2F2ZURhdGEoKTtcclxuICAgIHRoaXMucnRlT2JqLmZvcm1hdHRlci5lbmFibGVVbmRvKHRoaXMucnRlT2JqKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWlRdWVyeVNlbGVjdGVkTWVudShhcmdzOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlhbG9ndWVPcGVuKGFyZ3MuaXRlbS50ZXh0KTtcclxuICB9XHJcblxyXG4gIGRpYWxvZ3VlT3BlbihzZWxlY3RlZFF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHZhciBzZWxlY3Rpb25UZXh0ID0gdGhpcy5ydGVPYmouZ2V0U2VsZWN0ZWRIdG1sKCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkUXVlcnkgPSBzZWxlY3RlZFF1ZXJ5O1xyXG4gICAgaWYgKHNlbGVjdGlvblRleHQpIHtcclxuICAgICAgbGV0IHJhbmdlOiBSYW5nZSA9IChcclxuICAgICAgICB0aGlzLnJ0ZU9iaiBhcyBhbnlcclxuICAgICAgKS5mb3JtYXR0ZXIuZWRpdG9yTWFuYWdlci5ub2RlU2VsZWN0aW9uLmdldFJhbmdlKFxyXG4gICAgICAgICh0aGlzLnJ0ZU9iaiBhcyBhbnkpLmNvbnRlbnRNb2R1bGUuZ2V0RG9jdW1lbnQoKVxyXG4gICAgICApO1xyXG4gICAgICAodGhpcy5ydGVPYmogYXMgYW55KS5mb3JtYXR0ZXIuZWRpdG9yTWFuYWdlci5ub2RlU2VsZWN0aW9uLnNhdmUoXHJcbiAgICAgICAgcmFuZ2UsXHJcbiAgICAgICAgKHRoaXMucnRlT2JqIGFzIGFueSkuY29udGVudE1vZHVsZS5nZXREb2N1bWVudCgpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZHJvcFZhbEluZGV4ID0gdGhpcy5xdWVyeUxpc3QuZmluZEluZGV4KFxyXG4gICAgICAgIChxKSA9PiBxLnRleHQudG9Mb3dlckNhc2UoKSA9PT0gc2VsZWN0ZWRRdWVyeS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMucXVlcnlDYXRlZ29yeS5pbmRleCA9IHRoaXMuZHJvcFZhbEluZGV4O1xyXG4gICAgICB0aGlzLmxlZnRSdGUudmFsdWUgPSB0aGlzLnByb21wdFF1ZXJ5ID0gc2VsZWN0aW9uVGV4dDtcclxuICAgICAgdGhpcy5sZWZ0UnRlLnJlZnJlc2hVSSgpO1xyXG4gICAgICB0aGlzLkFJZGlhbG9nLnNob3coKTtcclxuICAgICAgdGhpcy51cGRhdGVBSVN1Z2Vzc3Rpb25zRGF0YShzZWxlY3RlZFF1ZXJ5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvd01zZyA9IHRydWU7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2hvd01zZyA9IGZhbHNlO1xyXG4gICAgICB9LCAzMDAwKTtcclxuICAgICAgY29uc29sZS5sb2coXCJQbGVhc2Ugc2VsZWN0IHRoZSBjb250ZW50IHRvIHBlcmZvcm0gdGhlIEFJIG9wZXJhdGlvbi5cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVBSVN1Z2Vzc3Rpb25zRGF0YShzZWxlY3RlZFF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNTZW50aW1lbnRDaGVjayA9IGZhbHNlO1xyXG4gICAgc3dpdGNoIChzZWxlY3RlZFF1ZXJ5KSB7XHJcbiAgICAgIGNhc2UgXCJTdW1tYXJpemVcIjpcclxuICAgICAgICB0aGlzLnN1YlF1ZXJ5ID0gXCJTdW1tYXJpemUgdGhlIHVwY29taW5nIHNlbnRlbmNlIHNob3J0bHkuXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJFbGFib3JhdGVcIjpcclxuICAgICAgICB0aGlzLnN1YlF1ZXJ5ID0gXCJFbGFib3JhdGUgb24gdGhlIHVwY29taW5nIHNlbnRlbmNlLlwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiUmVwaHJhc2VcIjpcclxuICAgICAgICB0aGlzLnN1YlF1ZXJ5ID0gdGhpcy5jaGlwVmFsdWUgKyBcIiByZXBocmFzZSB0aGUgdXBjb21pbmcgc2VudGVuY2UuXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJDb3JyZWN0IEdyYW1tYXJcIjpcclxuICAgICAgICB0aGlzLnN1YlF1ZXJ5ID0gXCJDb3JyZWN0IHRoZSBncmFtbWFyIG9mIHRoZSB1cGNvbWluZyBzZW50ZW5jZS5cIjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlRyYW5zbGF0ZVwiOlxyXG4gICAgICAgIHRoaXMuc3ViUXVlcnkgPVxyXG4gICAgICAgICAgXCJUcmFuc2xhdGUgdGhlIHVwY29taW5nIHNlbnRlbmNlIHRvIFwiICsgdGhpcy50cmFuc2xhdGVsYW5ndWFnZSArIFwiLlwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiU2VudGltZW50IEFuYWx5c2lzXCI6XHJcbiAgICAgICAgdGhpcy5pc1NlbnRpbWVudENoZWNrID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN1YlF1ZXJ5ID1cclxuICAgICAgICAgICdBbmFseXplIHRoZSBzZW50aW1lbnQgYW5kIGdyYW1tYXIgb2YgdGhlIGZvbGxvd2luZyBwYXJhZ3JhcGhzIGFuZCBwcm92aWRlIHRoZSBleHByZXNzaW9uIHNjb3JlIHdpdGggYW4gZW1vamkgZm9sbG93ZWQgYnkgdGhlIHNlbnRpbWVudCBpbiB0aGUgZm9ybWF0OiBcIvCfmIogTmV1dHJhbFwiLiBcXG5cXG5OT1RFOiBBdm9pZCBhbnkgYWRkaXRpb25hbCB0ZXh0IG9yIGV4cGxhbmF0aW9uOic7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZUFJU3VnZXNzdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUFJU3VnZXNzdGlvbnMoKTogdm9pZCB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5wcm9tcHRRdWVyeSkge1xyXG4gICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNrZWxldG9uSWRcIikgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPVxyXG4gICAgICAgICAgXCJcIjtcclxuICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyaWdodFJ0ZVwiKSBhcyBIVE1MRWxlbWVudCkuc3R5bGUuZGlzcGxheSA9XHJcbiAgICAgICAgICBcIm5vbmVcIjtcclxuICAgICAgICB0aGlzLnNlbnRpbWVudEJ1dHRvbi5lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICB0aGlzLnJlZ2VuZXJhdGVCdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY29weUJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZXBsYWNlQnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmFwaVJlc3VsdERhdGEgPSB0aGlzLmdldFJlc3BvbnNlRnJvbU9wZW5BSShcclxuICAgICAgICAgIHRoaXMuc3ViUXVlcnksXHJcbiAgICAgICAgICB0aGlzLnByb21wdFF1ZXJ5XHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmFwaVJlc3VsdERhdGEudGhlbigocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuQUlSZXN1bHQgPSB0aGlzLmlzU2VudGltZW50Q2hlY2sgPyB0aGlzLnByb21wdFF1ZXJ5IDogcmVzdWx0O1xyXG4gICAgICAgICAgdGhpcy5zZW50aW1lbnRCdXR0b24uY29udGVudCA9IHJlc3VsdFxyXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAuaW5jbHVkZXMoXCJwb3NpdGl2ZVwiKVxyXG4gICAgICAgICAgICA/IFwi8J+YiiBQb3NpdGl2ZVwiXHJcbiAgICAgICAgICAgIDogcmVzdWx0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJuZWdhdGl2ZVwiKVxyXG4gICAgICAgICAgICA/IFwi8J+YniBOZWdhdGl2ZVwiXHJcbiAgICAgICAgICAgIDogXCLwn5iQIE5ldXRyYWxcIjtcclxuICAgICAgICAgIHRoaXMuc2VudGltZW50QnV0dG9uLmVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICF0aGlzLmlzU2VudGltZW50Q2hlY2tcclxuICAgICAgICAgICAgPyBcIm5vbmVcIlxyXG4gICAgICAgICAgICA6IFwiXCI7XHJcbiAgICAgICAgICB0aGlzLnJpZ2h0UnRlLnZhbHVlID0gdGhpcy5BSVJlc3VsdDtcclxuICAgICAgICAgIHZhciBub1Jlc3VsdHNGb3VuZCA9ICEodGhpcy5BSVJlc3VsdCB8fCB0aGlzLnByb21wdFF1ZXJ5KTtcclxuICAgICAgICAgIChcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJuby1yZXN1bHRzLWZvdW5kXCIpIGFzIEhUTUxFbGVtZW50XHJcbiAgICAgICAgICApLnN0eWxlLmRpc3BsYXkgPSBub1Jlc3VsdHNGb3VuZCA/IFwiXCIgOiBcIm5vbmVcIjtcclxuICAgICAgICAgIHRoaXMucmVnZW5lcmF0ZUJ1dHRvbi5kaXNhYmxlZCA9IG5vUmVzdWx0c0ZvdW5kO1xyXG4gICAgICAgICAgdGhpcy5jb3B5QnV0dG9uLmRpc2FibGVkID0gbm9SZXN1bHRzRm91bmQ7XHJcbiAgICAgICAgICB0aGlzLnJlcGxhY2VCdXR0b24uZGlzYWJsZWQgPSBub1Jlc3VsdHNGb3VuZDtcclxuICAgICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNrZWxldG9uSWRcIikgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPVxyXG4gICAgICAgICAgICBcIm5vbmVcIjtcclxuICAgICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJpZ2h0UnRlXCIpIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5kaXNwbGF5ID1cclxuICAgICAgICAgICAgbm9SZXN1bHRzRm91bmQgPyBcIm5vbmVcIiA6IFwiXCI7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgbm9SZXN1bHRzRm91bmQsXHJcbiAgICAgICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJpZ2h0UnRlXCIpIGFzIEhUTUxFbGVtZW50KS5zdHlsZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIC8vIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgLy8gdGhpcy50b2FzdE9iai5zaG93KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRSZXNwb25zZUZyb21PcGVuQUkoXHJcbiAgICBzdWJRdWVyeTogc3RyaW5nLFxyXG4gICAgcHJvbXB0UXVlcnk6IHN0cmluZ1xyXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgT3BlbkFpTW9kZWxSVEUoc3ViUXVlcnksIHByb21wdFF1ZXJ5KTtcclxuICAgIHJldHVybiBjb250ZW50ID8gKGNvbnRlbnQgYXMgc3RyaW5nKSA6IFwiXCI7XHJcbiAgfVxyXG5cclxuICBkaWFsb2dTaG93KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZWdlbmVyYXRlQnV0dG9uIS5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMudXBkYXRlQUlTdWdlc3N0aW9ucygpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNvcHlCdXR0b24hLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgdGhpcy5jb3B5VGV4dFRvQ2xpcGJvYXJkKHRoaXMuQUlSZXN1bHQpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJlcGxhY2VCdXR0b24hLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgbGV0IHJhbmdlOiBSYW5nZSA9IChcclxuICAgICAgICB0aGlzLnJ0ZU9iaiBhcyBhbnlcclxuICAgICAgKS5mb3JtYXR0ZXIuZWRpdG9yTWFuYWdlci5ub2RlU2VsZWN0aW9uLmdldFJhbmdlKFxyXG4gICAgICAgICh0aGlzLnJ0ZU9iaiBhcyBhbnkpLmNvbnRlbnRNb2R1bGUuZ2V0RG9jdW1lbnQoKVxyXG4gICAgICApO1xyXG4gICAgICAodGhpcy5ydGVPYmogYXMgYW55KS5mb3JtYXR0ZXIuZWRpdG9yTWFuYWdlci5ub2RlU2VsZWN0aW9uLnJlc3RvcmUocmFuZ2UpO1xyXG4gICAgICAodGhpcy5ydGVPYmogYXMgYW55KS5leGVjdXRlQ29tbWFuZChcImluc2VydEhUTUxcIiwgdGhpcy5BSVJlc3VsdCwge1xyXG4gICAgICAgIHVuZG86IHRydWUsXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmNsb3NlRGlhbG9nKCk7XHJcbiAgICB9KTtcclxuICAgICh0aGlzLkFJZGlhbG9nIGFzIERpYWxvZ0NvbXBvbmVudCkuZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcclxuICB9XHJcblxyXG4gIGNsb3NlRGlhbG9nKCk6IHZvaWQge1xyXG4gICAgdGhpcy5BSWRpYWxvZy5oaWRlKCk7XHJcbiAgICB0aGlzLnJpZ2h0UnRlLnZhbHVlID0gXCJcIjtcclxuICAgIHRoaXMubGVmdFJ0ZS52YWx1ZSA9IFwiXCI7XHJcbiAgICB0aGlzLnByb21wdFF1ZXJ5ID0gXCJcIjtcclxuICAgIHRoaXMuY2hpcFZhbHVlID0gXCJTdGFuZGFyZFwiO1xyXG4gICAgdGhpcy5BSVJlc3VsdCA9IFwiXCI7XHJcbiAgICB0aGlzLmRyb3BWYWxJbmRleCA9IDA7XHJcbiAgICB0aGlzLnNlbGVjdGVkUXVlcnkgPSBcIlJlcGhyYXNlXCI7XHJcbiAgICB0aGlzLnNlbnRpbWVudEJ1dHRvbi5jb250ZW50ID0gXCLwn5iKIE5ldXRyYWxcIjtcclxuICB9XHJcblxyXG4gIGNvcHlUZXh0VG9DbGlwYm9hcmQodGV4dDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCkge1xyXG4gICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkXHJcbiAgICAgICAgLndyaXRlVGV4dCh0ZXh0KVxyXG4gICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiVGV4dCBjb3BpZWQgdG8gY2xpcGJvYXJkIHN1Y2Nlc3NmdWxseSFcIik7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjb3B5IHRleHQ6IFwiLCBlcnIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gRmFsbGJhY2sgZm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgdGhlIENsaXBib2FyZCBBUElcclxuICAgICAgY29uc3QgdGV4dGFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGV4dGFyZWFcIik7XHJcbiAgICAgIHRleHRhcmVhLnZhbHVlID0gdGV4dDtcclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXh0YXJlYSk7XHJcbiAgICAgIHRleHRhcmVhLnNlbGVjdCgpO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiY29weVwiKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlRleHQgY29waWVkIHRvIGNsaXBib2FyZCB1c2luZyBleGVjQ29tbWFuZFwiKTtcclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjb3B5IHRleHQ6IFwiLCBlcnIpO1xyXG4gICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGV4dGFyZWEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk92ZXJsYXlDbGljaygpOiB2b2lkIHtcclxuICAgIGxldCBhY3RpdmVFbGU6IEhUTUxFbGVtZW50IHwgbnVsbCA9IHRoaXMuQUlkaWFsb2cuZWxlbWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICBcIi5jaGFyX2Jsb2NrLmUtYWN0aXZlXCJcclxuICAgICk7XHJcbiAgICBpZiAoYWN0aXZlRWxlKSB7XHJcbiAgICAgIGFjdGl2ZUVsZS5jbGFzc0xpc3QucmVtb3ZlKFwiZS1hY3RpdmVcIik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNsb3NlRGlhbG9nKCk7XHJcbiAgfVxyXG5cclxuICBvblF1ZXJ5U2VsZWN0KGFyZ3MpIHtcclxuICAgIC8vIHRoaXMuY2hpcExpc3Quc2VsZWN0ZWRDaGlwcyA9IDA7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZWxhbmd1YWdlID0gXCJFTlwiO1xyXG4gICAgdGhpcy5zZWxlY3RlZFF1ZXJ5ID0gYXJncy5pdGVtRGF0YS50ZXh0O1xyXG4gICAgdGhpcy51cGRhdGVBSVN1Z2Vzc3Rpb25zRGF0YShhcmdzLml0ZW1EYXRhLnRleHQpO1xyXG4gIH1cclxuXHJcbiAgb25MYW5ndWFnZVNlbGVjdChhcmdzOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudHJhbnNsYXRlbGFuZ3VhZ2UgPSBhcmdzLml0ZW1EYXRhLmlkO1xyXG4gICAgdGhpcy51cGRhdGVBSVN1Z2Vzc3Rpb25zRGF0YShcIlRyYW5zbGF0ZVwiKTtcclxuICB9XHJcblxyXG4gIG9uQ2hpcENsaWNrKGFyZ3M6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5jaGlwVmFsdWUgPSBhcmdzLml0ZW1EYXRhLnRleHQ7XHJcbiAgICAvLyDkuovku7bkvJrop6blj5HkuKTmrKEg5b+F6aG75Yik5patYXJncy50ZXh05piv5ZCm5pyJ5YC8XHJcbiAgICBpZiAoYXJncy5pdGVtRGF0YS50ZXh0KSB0aGlzLnVwZGF0ZUFJU3VnZXNzdGlvbnNEYXRhKFwiUmVwaHJhc2VcIik7XHJcbiAgfVxyXG5cclxuICBfdG9vbGJhckNsaWNrKGFyZ3MpIHtcclxuICAgIHRoaXMudG9vbGJhckNsaWNrLmVtaXQoYXJncyk7XHJcbiAgfVxyXG5cclxuICBoaWRlVG9hc3QoKSB7XHJcbiAgICB0aGlzLnNob3dNc2cgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uWm9vbSgpIHtcclxuICAgIGlmICh0aGlzLnNpemUgPT09IFwibGFyZ2VzdFwiKSB7XHJcbiAgICAgIHRoaXMuc2l6ZSA9IFwiXCI7IC8vIOaBouWkjeWIsOWOn+Wni+Wkp+Wwj1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zaXplID0gXCJsYXJnZXN0XCI7IC8vIOiuvue9ruS4uuacgOWkp+WMllxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vcmFpc2UtY29tbW9uLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9mb3JtL3JpY2h0ZXh0ZWRpdG9yL2luZGV4LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCx1QkFBdUIsR0FHeEIsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRCxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU9qRCxNQUFNLE9BQU8sdUJBQXVCO0lBTHBDO1FBUVcsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNYLGFBQVEsR0FBRyxVQUFVLENBQUM7UUFDdEIsV0FBTSxHQUFHLEdBQUcsQ0FBQztRQUNiLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsd0JBQW1CLEdBQUc7WUFDN0IsVUFBVSxFQUFFLE1BQU07WUFDbEIsWUFBWSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztZQUM5QixPQUFPLEVBQUUsTUFBTTtTQUNoQixDQUFDO1FBRVEsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2xDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVCLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzdCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQyxVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMzQixVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMzQixTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMxQixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7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QUk7UUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QixDQUFDOzs7WUFuS0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxvQkFBb0I7Z0JBQzlCLGk3QkFBcUM7O2FBRXRDOzs7cUJBRUUsU0FBUyxTQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7b0JBRXJDLEtBQUs7dUJBQ0wsS0FBSztxQkFDTCxLQUFLOzZCQUNMLEtBQUs7dUJBQ0wsS0FBSztrQ0FDTCxLQUFLOzJCQU1MLE1BQU07cUJBQ04sTUFBTTtzQkFDTixNQUFNOzBCQUNOLE1BQU07b0JBQ04sTUFBTTtvQkFDTixNQUFNO21CQUNOLE1BQU07NkJBQ04sTUFBTTs7OztJQXBCUCx5Q0FDdUM7O0lBQ3ZDLHdDQUFvQjs7SUFDcEIsMkNBQStCOztJQUMvQix5Q0FBc0I7O0lBQ3RCLGlEQUErQjs7SUFDL0IsMkNBQTBCOztJQUMxQixzREFJRTs7SUFFRiwrQ0FBNEM7O0lBQzVDLHlDQUFzQzs7SUFDdEMsMENBQXVDOztJQUN2Qyw4Q0FBMkM7O0lBQzNDLHdDQUFxQzs7SUFDckMsd0NBQXFDOztJQUNyQyx1Q0FBb0M7O0lBQ3BDLGlEQUE4Qzs7SUFFOUMseUNBQW9COztJQUNwQiwyQ0FBZ0I7O0lBQ2hCLHdDQThCRTs7Ozs7SUFFRix1REFjRTs7SUFDRixtREFRRTs7SUFDRixtREE2QkUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1xyXG4gIFJpY2hUZXh0RWRpdG9yQ29tcG9uZW50LFxyXG4gIFRvb2xiYXJTZXR0aW5nc01vZGVsLFxyXG4gIFF1aWNrVG9vbGJhclNldHRpbmdzTW9kZWwsXHJcbn0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLXJpY2h0ZXh0ZWRpdG9yXCI7XHJcbmltcG9ydCB7IGZvbnRGYW1pbHksIHNpemUgfSBmcm9tIFwiLi9kYXRhLWNvbmZpZ1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwicnMtcmljaHRleHQtZWRpdG9yXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9pbmRleC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9pbmRleC5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJpY2h0ZXh0ZWRpdG9yQ29tcG9uZW50IHtcclxuICBAVmlld0NoaWxkKFwiZWRpdG9yXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHB1YmxpYyBydGVPYmo6IFJpY2hUZXh0RWRpdG9yQ29tcG9uZW50O1xyXG4gIEBJbnB1dCgpIHZhbHVlID0gXCJcIjtcclxuICBASW5wdXQoKSBlZGl0b3JJZCA9IFwiZWRpdG9ySWRcIjtcclxuICBASW5wdXQoKSBoZWlnaHQgPSAxNTA7XHJcbiAgQElucHV0KCkgYXV0b1NhdmVPbklkbGUgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaW5zZXJ0SW1hZ2VTZXR0aW5ncyA9IHtcclxuICAgIHNhdmVGb3JtYXQ6IFwiQmxvYlwiLFxyXG4gICAgYWxsb3dlZFR5cGVzOiBbXCIuc3ZnXCIsIFwiLnBuZ1wiXSxcclxuICAgIGRpc3BsYXk6IFwibm9uZVwiLFxyXG4gIH07XHJcblxyXG4gIEBPdXRwdXQoKSB0b29sYmFyQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY3JlYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgYWN0aW9uQmVnaW4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGlucHV0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBmb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgYmx1ciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgYWN0aW9uQ29tcGxldGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGZhbWlseSA9IGZvbnRGYW1pbHk7XHJcbiAgZm9udFNpemUgPSBzaXplO1xyXG4gIHRvb2xzOiBUb29sYmFyU2V0dGluZ3NNb2RlbCA9IHtcclxuICAgIGVuYWJsZUZsb2F0aW5nOiBmYWxzZSxcclxuICAgIGl0ZW1zOiBbXHJcbiAgICAgIFwiQm9sZFwiLFxyXG4gICAgICBcIkl0YWxpY1wiLFxyXG4gICAgICBcIlVuZGVybGluZVwiLFxyXG4gICAgICBcIlN0cmlrZVRocm91Z2hcIixcclxuICAgICAgXCJGb250TmFtZVwiLFxyXG4gICAgICBcIkZvbnRTaXplXCIsXHJcbiAgICAgIFwiRm9udENvbG9yXCIsXHJcbiAgICAgIFwiQmFja2dyb3VuZENvbG9yXCIsXHJcbiAgICAgIFwiTG93ZXJDYXNlXCIsXHJcbiAgICAgIFwiVXBwZXJDYXNlXCIsXHJcbiAgICAgIFwifFwiLFxyXG4gICAgICBcIkNyZWF0ZVRhYmxlXCIsXHJcbiAgICAgIFwiRm9ybWF0c1wiLFxyXG4gICAgICBcIkFsaWdubWVudHNcIixcclxuICAgICAgXCJCdWxsZXRGb3JtYXRMaXN0XCIsXHJcbiAgICAgIFwiTnVtYmVyRm9ybWF0TGlzdFwiLFxyXG4gICAgICBcIk91dGRlbnRcIixcclxuICAgICAgXCJJbmRlbnRcIixcclxuICAgICAgXCJ8XCIsXHJcbiAgICAgIFwiQ3JlYXRlTGlua1wiLFxyXG4gICAgICBcInxcIixcclxuICAgICAgXCJGb3JtYXRQYWludGVyXCIsXHJcbiAgICAgIFwiQ2xlYXJGb3JtYXRcIixcclxuICAgICAgXCJ8XCIsXHJcbiAgICAgIFwiVW5kb1wiLFxyXG4gICAgICBcIlJlZG9cIixcclxuICAgIF0sXHJcbiAgfTtcclxuICAvKiog6KGo5qC85b+r5o235bel5YW35qCP77ya5ZCrIFRhYmxlQ2VsbO+8iOWQiOW5ti/mi4bliIbljZXlhYPmoLzvvIkgKi9cclxuICBxdWlja1Rvb2xiYXJTZXR0aW5nczogUXVpY2tUb29sYmFyU2V0dGluZ3NNb2RlbCA9IHtcclxuICAgIHRhYmxlOiBbXHJcbiAgICAgIFwiVGFibGVoZWFkZXJcIixcclxuICAgICAgXCJUYWJsZVJlbW92ZVwiLFxyXG4gICAgICBcInxcIixcclxuICAgICAgXCJUYWJsZVJvd3NcIixcclxuICAgICAgXCJUYWJsZUNvbHVtbnNcIixcclxuICAgICAgXCJUYWJsZUNlbGxcIixcclxuICAgICAgXCJ8XCIsXHJcbiAgICAgIFwiU3R5bGVzXCIsXHJcbiAgICAgIFwiQmFja2dyb3VuZENvbG9yXCIsXHJcbiAgICAgIFwiQWxpZ25tZW50c1wiLFxyXG4gICAgICBcIlRhYmxlQ2VsbFZlcnRpY2FsQWxpZ25cIixcclxuICAgIF0sXHJcbiAgfTtcclxuICBwdWJsaWMgYnVsbGV0Rm9ybWF0TGlzdCA9IHtcclxuICAgIHR5cGVzOiBbXHJcbiAgICAgIHsgdGV4dDogXCJOb25lXCIsIHZhbHVlOiBcIm5vbmVcIiB9LFxyXG4gICAgICB7IHRleHQ6IFwi4pePXCIsIHZhbHVlOiBcImRpc2NcIiB9LFxyXG4gICAgICB7IHRleHQ6IFwi4peLXCIsIHZhbHVlOiBcImNpcmNsZVwiIH0sXHJcbiAgICAgIHsgdGV4dDogXCLilqBcIiwgdmFsdWU6IFwic3F1YXJlXCIgfSxcclxuICAgICAgeyB0ZXh0OiBcIi1cIiwgdmFsdWU6IFwiZGFzaFwiIH0sXHJcbiAgICBdLFxyXG4gIH07XHJcbiAgcHVibGljIG51bWJlckZvcm1hdExpc3QgPSB7XHJcbiAgICB0eXBlczogW1xyXG4gICAgICB7IHRleHQ6IFwiTm9uZVwiLCB2YWx1ZTogXCJub25lXCIgfSxcclxuICAgICAgeyB0ZXh0OiBcIjEsIDIsIDMsIOKAplwiLCB2YWx1ZTogXCJkZWNpbWFsXCIgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRleHQ6IFwizrEsIM6yLCDOsywg4oCmXCIsXHJcbiAgICAgICAgdmFsdWU6IFwibG93ZXJHcmVla1wiLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGV4dDogXCJpLCBpaSwgaWlpLCDigKZcIixcclxuICAgICAgICB2YWx1ZTogXCJsb3dlclJvbWFuXCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0ZXh0OiBcIkEsIEIsIEMsIOKAplwiLFxyXG4gICAgICAgIHZhbHVlOiBcInVwcGVyQWxwaGFcIixcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRleHQ6IFwiYSwgYiwgYywg4oCmXCIsXHJcbiAgICAgICAgdmFsdWU6IFwibG93ZXJBbHBoYVwiLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGV4dDogXCJJLCBJSSwgSUlJLCDigKZcIixcclxuICAgICAgICB2YWx1ZTogXCJ1cHBlclJvbWFuXCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0ZXh0OiBcIigxKSwgKDIpLCAoMyksIOKAplwiLFxyXG4gICAgICAgIHZhbHVlOiBcInBhcmVudGhlc2VzXCIsXHJcbiAgICAgIH0sXHJcbiAgICBdLFxyXG4gIH07XHJcblxyXG4gIG9uQ29udGVudENoYW5nZShhcmdzKSB7XHJcbiAgICB0aGlzLmNoYW5nZS5lbWl0KGFyZ3MpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ3JlYXRlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jcmVhdGVkLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIF90b29sYmFyQ2xpY2soYXJncykge1xyXG4gICAgdGhpcy50b29sYmFyQ2xpY2suZW1pdChhcmdzKTtcclxuICB9XHJcblxyXG4gIF9hY3Rpb25CZWdpbihhcmdzKSB7XHJcbiAgICB0aGlzLmFjdGlvbkJlZ2luLmVtaXQoYXJncyk7XHJcbiAgfVxyXG5cclxuICBfaW5wdXQoYXJncykge1xyXG4gICAgdGhpcy5pbnB1dC5lbWl0KGFyZ3MpO1xyXG4gIH1cclxuXHJcbiAgX2FjdGlvbkNvbXBsZXRlKGFyZ3MpIHtcclxuICAgIGlmIChhcmdzLnJlcXVlc3RUeXBlID09IFwiVUxcIikge1xyXG4gICAgICBpZiAoYXJncy5lbGVtZW50c1swXS5wYXJlbnRFbGVtZW50LnN0eWxlLmxpc3RTdHlsZVR5cGUgPT0gXCJkYXNoXCIpIHtcclxuICAgICAgICBhcmdzLmVsZW1lbnRzWzBdLnBhcmVudEVsZW1lbnQuc3R5bGUubGlzdFN0eWxlSW1hZ2UgPVxyXG4gICAgICAgICAgXCJ1cmwoJy4uLy4uLy4uL2Fzc2V0cy9pbWcvYnVsbGV0LWRhc2guc3ZnJylcIjtcclxuICAgICAgICBhcmdzLmVsZW1lbnRzWzBdLnBhcmVudEVsZW1lbnQuc3R5bGUubGlzdFN0eWxlVHlwZSA9IFwibm9uZVwiO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGFyZ3MucmVxdWVzdFR5cGUgPT0gXCJPTFwiKSB7XHJcbiAgICAgIGFyZ3MuZWxlbWVudHNbMF0ucGFyZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFxyXG4gICAgICAgIFwiY3VzdG9tLWxpc3RcIixcclxuICAgICAgICBcInBhcmVudGhlc2VzXCJcclxuICAgICAgKTtcclxuICAgICAgaWYgKGFyZ3MuZWxlbWVudHNbMF0ucGFyZW50RWxlbWVudC5zdHlsZS5saXN0U3R5bGVUeXBlID09IFwicGFyZW50aGVzZXNcIikge1xyXG4gICAgICAgIGFyZ3MuZWxlbWVudHNbMF0ucGFyZW50RWxlbWVudC5jbGFzc0xpc3QgPSBcImN1c3RvbS1saXN0XCI7XHJcbiAgICAgICAgYXJncy5lbGVtZW50c1swXS5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJwYXJlbnRoZXNlc1wiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5hY3Rpb25Db21wbGV0ZS5lbWl0KGFyZ3MpO1xyXG4gIH1cclxuXHJcbiAgX2ZvY3VzKGFyZ3MpIHtcclxuICAgIHRoaXMuZm9jdXMuZW1pdChhcmdzKTtcclxuICB9XHJcblxyXG4gIF9ibHVyKGFyZ3MpIHtcclxuICAgIHRoaXMuYmx1ci5lbWl0KGFyZ3MpO1xyXG4gIH1cclxufVxyXG4iXX0=