raise-common-lib-new 0.0.57 → 0.0.59

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.
@@ -1,19 +1,22 @@
1
1
  import { Component, Input, Output, ViewChild, EventEmitter, } from "@angular/core";
2
+ import { DropDownButton } from "@syncfusion/ej2-angular-splitbuttons";
2
3
  import { fontFamily, size } from "./data-config";
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "@angular/common/http";
5
6
  import * as i2 from "../../service/dialog.service";
6
- import * as i3 from "@angular/common";
7
- import * as i4 from "@angular/forms";
8
- import * as i5 from "@syncfusion/ej2-angular-buttons";
9
- import * as i6 from "@syncfusion/ej2-angular-popups";
10
- import * as i7 from "@syncfusion/ej2-angular-dropdowns";
11
- import * as i8 from "@syncfusion/ej2-angular-notifications";
12
- import * as i9 from "@syncfusion/ej2-angular-richtexteditor";
7
+ import * as i3 from "@angular/material/snack-bar";
8
+ import * as i4 from "@angular/common";
9
+ import * as i5 from "@angular/forms";
10
+ import * as i6 from "@syncfusion/ej2-angular-buttons";
11
+ import * as i7 from "@syncfusion/ej2-angular-popups";
12
+ import * as i8 from "@syncfusion/ej2-angular-dropdowns";
13
+ import * as i9 from "@syncfusion/ej2-angular-notifications";
14
+ import * as i10 from "@syncfusion/ej2-angular-richtexteditor";
13
15
  export class RichtexteditorComponent {
14
16
  ref;
15
17
  http;
16
18
  dialog;
19
+ snackBar;
17
20
  rteObj;
18
21
  queryCategory;
19
22
  leftRte;
@@ -46,6 +49,7 @@ export class RichtexteditorComponent {
46
49
  focus = new EventEmitter();
47
50
  blur = new EventEmitter();
48
51
  actionComplete = new EventEmitter();
52
+ afterPasteCleanup = new EventEmitter();
49
53
  family = fontFamily;
50
54
  fontSize = size;
51
55
  dialogWidth = "800px";
@@ -56,36 +60,9 @@ export class RichtexteditorComponent {
56
60
  size = "";
57
61
  selectedQuery;
58
62
  dropValIndex = 0;
59
- queryList = [
60
- { id: "Rephrase", text: "Rephrase" },
61
- { id: "Grammar", text: "Correct Grammar" },
62
- { id: "Summarize", text: "Summarize" },
63
- { id: "Elaborate", text: "Elaborate" },
64
- { id: "Translate", text: "Translate" },
65
- { id: "SentimentAnalysis", text: "Sentiment Analysis" },
66
- ];
67
- rephraseTyleList = [
68
- { text: "Standard", id: "Standard" },
69
- { text: "Fluent", id: "Fluent" },
70
- { text: "Professional", id: "Professional" },
71
- ];
72
- languageList = [
73
- { id: "EN", text: "English" },
74
- { id: "ZH", text: "Chinese (Simplified)" },
75
- { id: "ES", text: "Spanish" },
76
- { id: "ZHT", text: "Chinese (Traditional)" },
77
- { id: "HI", text: "Hindi" },
78
- { id: "AR", text: "Arabic" },
79
- { id: "BN", text: "Bengali" },
80
- { id: "PT", text: "Portuguese" },
81
- { id: "RU", text: "Russian" },
82
- { id: "JA", text: "Japanese" },
83
- { id: "DE", text: "German" },
84
- { id: "KO", text: "Korean" },
85
- { id: "FR", text: "French" },
86
- { id: "IT", text: "Italian" },
87
- { id: "TR", text: "Turkish" },
88
- ];
63
+ queryList = [];
64
+ rephraseTyleList = [];
65
+ languageList = [];
89
66
  promptQuery = "";
90
67
  isSentimentCheck = false;
91
68
  subQuery = "";
@@ -93,54 +70,8 @@ export class RichtexteditorComponent {
93
70
  chipValue = "Standard";
94
71
  apiResultData;
95
72
  AIResult;
96
- tools = {
97
- enableFloating: false,
98
- items: [
99
- // {
100
- // tooltipText: "AI Assist",
101
- // template:
102
- // '<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>',
103
- // },
104
- "Bold",
105
- "Italic",
106
- "Underline",
107
- "StrikeThrough",
108
- "FontName",
109
- "FontSize",
110
- "FontColor",
111
- "BackgroundColor",
112
- "LowerCase",
113
- "UpperCase",
114
- "|",
115
- "CreateTable",
116
- "Formats",
117
- "Alignments",
118
- // {
119
- // tooltipText: "Line Height",
120
- // template:
121
- // '<button class="e-tbar-btn e-btn" tabindex="-1" id="lineheight_tbar" style="width:100%"></button>',
122
- // },
123
- "bulletFormatList",
124
- "NumberFormatList",
125
- "Outdent",
126
- "Indent",
127
- "|",
128
- "CreateLink",
129
- // {
130
- // tooltipText: "",
131
- // template:
132
- // '<button class="e-tbar-btn e-btn" tabindex="-1" id="custom_tbar" style="width:100%">' +
133
- // '<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>',
134
- // },
135
- "|",
136
- "FormatPainter",
137
- "ClearFormat",
138
- "|",
139
- "Undo",
140
- "Redo",
141
- //'SourceCode',
142
- ],
143
- };
73
+ tools;
74
+ isDialogVisible = false;
144
75
  bulletFormatList = {
145
76
  types: [
146
77
  { text: "None", value: "none" },
@@ -182,12 +113,99 @@ export class RichtexteditorComponent {
182
113
  },
183
114
  ],
184
115
  };
185
- constructor(ref, http, dialog) {
116
+ translation;
117
+ constructor(ref, http, dialog, snackBar) {
186
118
  this.ref = ref;
187
119
  this.http = http;
188
120
  this.dialog = dialog;
121
+ this.snackBar = snackBar;
189
122
  }
190
123
  ngOnInit() {
124
+ this.translation = JSON.parse(localStorage.getItem("translation")) || {};
125
+ this.queryList = [
126
+ { id: "Rephrase", text: this.translation.REPHRASE || ".Rephrase" },
127
+ {
128
+ id: "Grammar",
129
+ text: this.translation.CORRECT_GRAMMAR || ".Correct Grammar",
130
+ },
131
+ { id: "Summarize", text: this.translation.SUMMARIZE || ".Summarize" },
132
+ { id: "Elaborate", text: this.translation.ELABORATE || ".Elaborate" },
133
+ { id: "Translate", text: this.translation.TRANSLATE || ".Translate" },
134
+ {
135
+ id: "SentimentAnalysis",
136
+ text: this.translation.SENTIMENT_ANALYSIS || ".Sentiment Analysis",
137
+ },
138
+ ];
139
+ this.rephraseTyleList = [
140
+ { id: "Standard", text: this.translation.STANDARD || ".Standard" },
141
+ { id: "Fluent", text: this.translation.FLUENT || ".Fluent" },
142
+ {
143
+ id: "Professional",
144
+ text: this.translation.PROFESSIONAL || ".Professional",
145
+ },
146
+ ];
147
+ this.languageList = [
148
+ { id: "EN", text: this.translation.ENGLISH || ".English" },
149
+ {
150
+ id: "ZH",
151
+ text: this.translation.CHINESE_SIMPLIFIED || ".Chinese (Simplified)",
152
+ },
153
+ { id: "ES", text: this.translation.SPANISH || ".Spanish" },
154
+ {
155
+ id: "ZHT",
156
+ text: this.translation.CHINESE_TRADITIONAL || ".Chinese (Traditional)",
157
+ },
158
+ { id: "HI", text: this.translation.HINDI || ".Hindi" },
159
+ { id: "AR", text: this.translation.ARABIC || ".Arabic" },
160
+ { id: "BN", text: this.translation.BENGALI || ".Bengali" },
161
+ { id: "PT", text: this.translation.PORTUGUESE || ".Portuguese" },
162
+ { id: "RU", text: this.translation.RUSSIAN || ".Russian" },
163
+ { id: "JA", text: this.translation.JAPANESE || ".Japanese" },
164
+ { id: "DE", text: this.translation.GERMAN || ".German" },
165
+ { id: "KO", text: this.translation.KOREAN || ".Korean" },
166
+ { id: "FR", text: this.translation.FRENCH || ".French" },
167
+ { id: "IT", text: this.translation.ITALIAN || ".Italian" },
168
+ { id: "TR", text: this.translation.TURKISH || ".Turkish" },
169
+ ];
170
+ const dynamicAiButtonId = `ai_assistant_button_tbar_${this.editorId}`;
171
+ this.tools = {
172
+ enableFloating: false,
173
+ items: [
174
+ {
175
+ tooltipText: this.translation.AI_ASSIST || ".AI Assist",
176
+ template: `<button class="e-tbar-btn e-btn" tabindex="-1" id="${dynamicAiButtonId}" style="width:100%">
177
+ <div class="e-rte-dropdown-btn-text">${this.translation.AI_ASSIST || ".AI Assist"}</div>
178
+ </button>`,
179
+ },
180
+ "Bold",
181
+ "Italic",
182
+ "Underline",
183
+ "StrikeThrough",
184
+ "FontName",
185
+ "FontSize",
186
+ "FontColor",
187
+ "BackgroundColor",
188
+ "LowerCase",
189
+ "UpperCase",
190
+ "|",
191
+ "CreateTable",
192
+ "Formats",
193
+ "Alignments",
194
+ "bulletFormatList",
195
+ "NumberFormatList",
196
+ "Outdent",
197
+ "Indent",
198
+ "|",
199
+ "CreateLink",
200
+ "|",
201
+ "FormatPainter",
202
+ "ClearFormat",
203
+ "|",
204
+ "Undo",
205
+ "Redo",
206
+ //'SourceCode',
207
+ ],
208
+ };
191
209
  if (this.showTicketAttachment) {
192
210
  const item = {
193
211
  tooltipText: "",
@@ -225,12 +243,12 @@ export class RichtexteditorComponent {
225
243
  // });
226
244
  // splitButton.appendTo("#lineheight_tbar");
227
245
  // // ai assist
228
- // let aiassistantButton = new DropDownButton({
229
- // items: this.queryList,
230
- // // iconCss: "e-btn-icon e-icons e-assistview-icon e-icon-left",
231
- // select: (args) => this.aiQuerySelectedMenu(args),
232
- // });
233
- // aiassistantButton.appendTo("#ai_assistant_button_tbar");
246
+ let aiassistantButton = new DropDownButton({
247
+ items: this.queryList,
248
+ // iconCss: "e-btn-icon e-icons e-assistview-icon e-icon-left",
249
+ select: (args) => this.aiQuerySelectedMenu(args),
250
+ });
251
+ aiassistantButton.appendTo("#ai_assistant_button_tbar_" + this.editorId);
234
252
  this.created.emit();
235
253
  }
236
254
  onSelect(args) {
@@ -245,7 +263,7 @@ export class RichtexteditorComponent {
245
263
  this.rteObj.formatter.enableUndo(this.rteObj);
246
264
  }
247
265
  aiQuerySelectedMenu(args) {
248
- this.dialogueOpen(args.item.text);
266
+ this.dialogueOpen(args.item.id);
249
267
  }
250
268
  dialogueOpen(selectedQuery) {
251
269
  var selectionText = this.rteObj.getSelectedHtml();
@@ -261,11 +279,14 @@ export class RichtexteditorComponent {
261
279
  this.updateAISugesstionsData(selectedQuery);
262
280
  }
263
281
  else {
264
- this.showMsg = true;
265
- setTimeout(() => {
266
- this.showMsg = false;
267
- }, 3000);
268
- console.log("Please select the content to perform the AI operation.");
282
+ // this.showMsg = true;
283
+ // setTimeout(() => {
284
+ // this.showMsg = false;
285
+ // }, 3000);
286
+ // console.log("Please select the content to perform the AI operation.");
287
+ this.dialog.showNotification(this.translation.FIRST_SELECT_SOME_TEXT || "First, Select some text", {
288
+ status: "Warning",
289
+ });
269
290
  }
270
291
  }
271
292
  updateAISugesstionsData(selectedQuery) {
@@ -280,14 +301,14 @@ export class RichtexteditorComponent {
280
301
  case "Rephrase":
281
302
  this.subQuery = this.chipValue + " rephrase the upcoming sentence.";
282
303
  break;
283
- case "Correct Grammar":
304
+ case "Grammar":
284
305
  this.subQuery = "Correct the grammar of the upcoming sentence.";
285
306
  break;
286
307
  case "Translate":
287
308
  this.subQuery =
288
309
  "Translate the upcoming sentence to " + this.translatelanguage + ".";
289
310
  break;
290
- case "Sentiment Analysis":
311
+ case "SentimentAnalysis":
291
312
  this.isSentimentCheck = true;
292
313
  this.subQuery =
293
314
  '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:';
@@ -306,6 +327,9 @@ export class RichtexteditorComponent {
306
327
  this.regenerateButton.disabled = true;
307
328
  this.copyButton.disabled = true;
308
329
  this.replaceButton.disabled = true;
330
+ if (this.isDialogVisible) {
331
+ this.promptQuery = this.leftRte.getHtml();
332
+ }
309
333
  this.apiResultData = this.getResponseFromOpenAI(this.subQuery, this.promptQuery);
310
334
  this.apiResultData.then((result) => {
311
335
  this.AIResult = this.isSentimentCheck ? this.promptQuery : result;
@@ -325,12 +349,7 @@ export class RichtexteditorComponent {
325
349
  this.regenerateButton.disabled = noResultsFound;
326
350
  this.copyButton.disabled = noResultsFound;
327
351
  this.replaceButton.disabled = noResultsFound;
328
- document.getElementById("skeletonId").style.display =
329
- "none";
330
- document.getElementById("rightRte").style.display =
331
- noResultsFound ? "none" : "";
332
- console.log(noResultsFound, document.getElementById("rightRte").style);
333
- // this.ref.markForCheck();
352
+ this.ref.markForCheck();
334
353
  });
335
354
  }
336
355
  }
@@ -338,6 +357,7 @@ export class RichtexteditorComponent {
338
357
  // this.toastObj.show();
339
358
  }
340
359
  }
360
+ fullResponse = "";
341
361
  async getResponseFromOpenAI(subQuery, promptQuery) {
342
362
  const messages = [
343
363
  {
@@ -359,33 +379,77 @@ export class RichtexteditorComponent {
359
379
  frequency_penalty: 0,
360
380
  presence_penalty: 0,
361
381
  };
362
- return new Promise((resolve) => {
363
- this.http.post("api/ai/chat", param).subscribe((res) => {
364
- if (!res["choices"] ||
365
- !res["choices"][0] ||
366
- !res["choices"][0].message) {
367
- resolve("request error!");
368
- throw new Error("Invalid response format from AI service");
369
- }
370
- resolve(res["choices"][0].message.content);
382
+ try {
383
+ const response = await fetch("api/ai/chat-stream", {
384
+ method: "POST",
385
+ headers: { "Content-Type": "application/json" },
386
+ body: JSON.stringify(param),
371
387
  });
372
- });
388
+ if (!response.ok) {
389
+ throw new Error(`HTTP error! status: ${response.status}`);
390
+ }
391
+ document.getElementById("skeletonId").style.display =
392
+ "none";
393
+ document.getElementById("rightRte").style.display = "";
394
+ this.ref.detectChanges();
395
+ this.fullResponse = "";
396
+ this.rightRte.value = "";
397
+ const reader = response.body.getReader();
398
+ const decoder = new TextDecoder();
399
+ while (true) {
400
+ const { done, value } = await reader.read();
401
+ if (done) {
402
+ break;
403
+ }
404
+ const chunk = decoder.decode(value, { stream: true });
405
+ const lines = chunk.split("\n");
406
+ for (const line of lines) {
407
+ if (line.startsWith("data: ")) {
408
+ const data = line.substring(6).trim();
409
+ if (data === "[DONE]") {
410
+ //this.showDialog();
411
+ return this.fullResponse;
412
+ }
413
+ try {
414
+ const parsed = JSON.parse(data);
415
+ const content = parsed.choices?.[0]?.delta?.content;
416
+ if (content) {
417
+ this.fullResponse += content;
418
+ setTimeout(() => this.scrollToBottom(content));
419
+ }
420
+ }
421
+ catch (e) {
422
+ console.error("Parse error:", e, "Data:", data);
423
+ }
424
+ }
425
+ }
426
+ }
427
+ return this.fullResponse;
428
+ }
429
+ catch (error) {
430
+ console.error("Stream error:", error);
431
+ throw error;
432
+ }
373
433
  }
374
434
  dialogShow() {
375
- this.regenerateButton.element.addEventListener("click", () => {
376
- this.updateAISugesstions();
377
- });
378
- this.copyButton.element.addEventListener("click", () => {
379
- this.copyTextToClipboard(this.AIResult);
380
- });
381
- this.replaceButton.element.addEventListener("click", () => {
382
- let range = this.rteObj.formatter.editorManager.nodeSelection.getRange(this.rteObj.contentModule.getDocument());
383
- this.rteObj.formatter.editorManager.nodeSelection.restore(range);
384
- this.rteObj.executeCommand("insertHTML", this.AIResult, {
385
- undo: true,
386
- });
387
- this.closeDialog();
388
- });
435
+ // this.regenerateButton!.element.addEventListener("click", () => {
436
+ // this.updateAISugesstions();
437
+ // });
438
+ // this.copyButton!.element.addEventListener("click", () => {
439
+ // this.copyTextToClipboard(this.AIResult);
440
+ // });
441
+ // this.replaceButton!.element.addEventListener("click", () => {
442
+ // let range: Range = (
443
+ // this.rteObj as any
444
+ // ).formatter.editorManager.nodeSelection.getRange(
445
+ // (this.rteObj as any).contentModule.getDocument()
446
+ // );
447
+ // (this.rteObj as any).formatter.editorManager.nodeSelection.restore(range);
448
+ // (this.rteObj as any).executeCommand("insertHTML", this.AIResult, {
449
+ // undo: true,
450
+ // });
451
+ // this.closeDialog();
452
+ // });
389
453
  this.AIdialog.element.style.display = "";
390
454
  }
391
455
  closeDialog() {
@@ -401,33 +465,54 @@ export class RichtexteditorComponent {
401
465
  this.size = "";
402
466
  }
403
467
  copyTextToClipboard(text) {
404
- if (navigator.clipboard) {
405
- navigator.clipboard
406
- .writeText(text)
407
- .then(() => {
408
- console.log("Text copied to clipboard successfully!");
409
- })
410
- .catch((err) => {
411
- console.error("Failed to copy text: ", err);
412
- });
468
+ if (!this.rightRte) {
469
+ return;
413
470
  }
414
- else {
415
- // Fallback for browsers that do not support the Clipboard API
416
- const textarea = document.createElement("textarea");
417
- textarea.value = text;
418
- document.body.appendChild(textarea);
419
- textarea.select();
420
- try {
421
- document.execCommand("copy");
422
- console.log("Text copied to clipboard using execCommand");
423
- }
424
- catch (err) {
425
- console.error("Failed to copy text: ", err);
471
+ this.rightRte.selectAll();
472
+ const selection = window.getSelection();
473
+ if (!selection || selection.rangeCount === 0) {
474
+ console.error("No selected content");
475
+ return;
476
+ }
477
+ try {
478
+ const range = selection.getRangeAt(0);
479
+ selection.removeAllRanges();
480
+ selection.addRange(range);
481
+ const success = document.execCommand("copy");
482
+ if (success) {
483
+ console.log("Text copied to clipboard successfully!");
426
484
  }
427
- finally {
428
- document.body.removeChild(textarea);
485
+ else {
486
+ console.error("Failed to copy text");
429
487
  }
430
488
  }
489
+ catch (err) {
490
+ console.error("Failed to copy text: ", err);
491
+ }
492
+ // if (navigator.clipboard) {
493
+ // navigator.clipboard
494
+ // .writeText(text)
495
+ // .then(() => {
496
+ // console.log("Text copied to clipboard successfully!");
497
+ // })
498
+ // .catch((err) => {
499
+ // console.error("Failed to copy text: ", err);
500
+ // });
501
+ // } else {
502
+ // // Fallback for browsers that do not support the Clipboard API
503
+ // const textarea = document.createElement("textarea");
504
+ // textarea.value = text;
505
+ // document.body.appendChild(textarea);
506
+ // textarea.select();
507
+ // try {
508
+ // document.execCommand("copy");
509
+ // console.log("Text copied to clipboard using execCommand");
510
+ // } catch (err) {
511
+ // console.error("Failed to copy text: ", err);
512
+ // } finally {
513
+ // document.body.removeChild(textarea);
514
+ // }
515
+ // }
431
516
  }
432
517
  onOverlayClick() {
433
518
  let activeEle = this.AIdialog.element.querySelector(".char_block.e-active");
@@ -439,8 +524,8 @@ export class RichtexteditorComponent {
439
524
  onQuerySelect(args) {
440
525
  // this.chipList.selectedChips = 0;
441
526
  this.translatelanguage = "EN";
442
- this.selectedQuery = args.itemData.text;
443
- this.updateAISugesstionsData(args.itemData.text);
527
+ this.selectedQuery = args.itemData.id;
528
+ this.updateAISugesstionsData(args.itemData.id);
444
529
  }
445
530
  onLanguageSelect(args) {
446
531
  this.translatelanguage = args.itemData.id;
@@ -462,7 +547,6 @@ export class RichtexteditorComponent {
462
547
  this.input.emit(args);
463
548
  }
464
549
  _actionComplete(args) {
465
- console.log(args);
466
550
  if (args.requestType == "UL") {
467
551
  if (args.elements[0].parentElement.style.listStyleType == "dash") {
468
552
  // Apply custom styling for dash bullets
@@ -512,6 +596,17 @@ export class RichtexteditorComponent {
512
596
  });
513
597
  }
514
598
  }
599
+ _afterPasteCleanup(args) {
600
+ args.value = this.unescapeHtml(args.value);
601
+ }
602
+ unescapeHtml(escapedHtml) {
603
+ return escapedHtml
604
+ .replace(/&lt;/g, "<")
605
+ .replace(/&gt;/g, ">")
606
+ .replace(/&amp;/g, "&")
607
+ .replace(/&quot;/g, '"')
608
+ .replace(/&apos;/g, "'");
609
+ }
515
610
  hideToast() {
516
611
  this.showMsg = false;
517
612
  }
@@ -523,13 +618,51 @@ export class RichtexteditorComponent {
523
618
  this.size = "largest"; // 设置为最大化
524
619
  }
525
620
  }
526
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RichtexteditorComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.HttpClient }, { token: i2.DialogService }], target: i0.ɵɵFactoryTarget.Component });
527
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RichtexteditorComponent, selector: "rs-richtext-editor", inputs: { placeholder: "placeholder", value: "value", editorId: "editorId", saveInterval: "saveInterval", height: "height", autoSaveOnIdle: "autoSaveOnIdle", disabled: "disabled", target: "target", insertImageSettings: "insertImageSettings", showTicketAttachment: "showTicketAttachment" }, outputs: { toolbarClick: "toolbarClick", change: "change", created: "created", actionBegin: "actionBegin", input: "input", focus: "focus", blur: "blur", actionComplete: "actionComplete" }, viewQueries: [{ propertyName: "rteObj", first: true, predicate: ["editor"], descendants: true }, { propertyName: "queryCategory", first: true, predicate: ["queryCategory"], descendants: true }, { propertyName: "leftRte", first: true, predicate: ["leftRte"], descendants: true }, { propertyName: "rightRte", first: true, predicate: ["rightRte"], descendants: true }, { propertyName: "AIdialog", first: true, predicate: ["AIdialog"], descendants: true, static: true }, { propertyName: "sentimentButton", first: true, predicate: ["sentimentButton"], descendants: true }, { propertyName: "regenerateButton", first: true, predicate: ["regenerateButton"], descendants: true }, { propertyName: "copyButton", first: true, predicate: ["copyButton"], descendants: true }, { propertyName: "replaceButton", first: true, predicate: ["replaceButton"], descendants: true }], ngImport: i0, 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 [bulletFormatList]=\"bulletFormatList\"\r\n [numberFormatList]=\"numberFormatList\"\r\n [fontFamily]=\"family\"\r\n [fontSize]=\"fontSize\"\r\n [disabled]=\"disabled\"\r\n [insertImageSettings]=\"insertImageSettings\"\r\n [(ngModel)]=\"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 (dialogOpen)=\"_dialogOpen($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\">\r\n <ejs-skeleton\r\n #skeletonId1\r\n shape=\"Rectangle\"\r\n height=\"16px\"\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=\"16px\"\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=\"16px\"\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=\"16px\"\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=\"16px\"\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=\"16px\"\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", styles: ["@charset \"UTF-8\";.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(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2217%22 viewBox%3D%220 0 16 17%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Ccircle cx%3D%228%22 cy%3D%228.5%22 r%3D%226.5%22 stroke%3D%22%236B6B6B%22%2F%3E%0D%3Cpath d%3D%22M8 8.5V11.5%22 stroke%3D%22%236B6B6B%22 stroke-width%3D%222%22 stroke-linecap%3D%22round%22%2F%3E%0D%3Ccircle cx%3D%228%22 cy%3D%225.5%22 r%3D%221%22 fill%3D%22%236B6B6B%22%2F%3E%0D%3C%2Fsvg%3E%0D\");display:inline-block;width:16px;height:16px;vertical-align:bottom;margin-right:8px}.editor_box .toast .close_icon{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cpath d%3D%22M3.50021 12.9999L12.5001 4.00007%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3Cpath d%3D%22M12.4999 12.9999L3.50007 4.00007%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3C%2Fsvg%3E%0D\");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:0px solid #dee2e6!important}.custom-dialog-rte .dialog-content .custom-row-0{border-top:0px 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(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Crect width%3D%2216%22 height%3D%2216%22 fill%3D%22white%22%2F%3E%0D%3Crect x%3D%224.5%22 y%3D%224.5%22 width%3D%229%22 height%3D%229%22 rx%3D%221.5%22 stroke%3D%22%236C7C90%22%2F%3E%0D%3Cpath d%3D%22M11.5 2.5H4.5C3.39543 2.5 2.5 3.39543 2.5 4.5V11.5%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3C%2Fsvg%3E%0D\");vertical-align:middle;margin-right:6px}.custom-dialog-rte .e-footer-content .e-control.e-btn.e-primary{color:#fff;background:#1364b3}.e-dialog.largest{width:96vw!important;height:88vh!important;max-height:88vh;max-width:2100px}::ng-deep ol.custom-list{list-style:none!important;counter-reset:list-counter}::ng-deep ol.custom-list li{counter-increment:list-counter}::ng-deep ol.parentheses li::marker{content:\"(\" counter(list-counter) \") \"}::ng-deep .e-tiempos-headline{font-family:Tiempos Headline Semibold!important}::ng-deep .e-avenir-lt-pro-black{font-family:\"Avenir LT Pro 65 Medium\"!important}::ng-deep .e-avenir-lt-pro-black-oblique{font-family:Avenir LT Pro-Black Oblique!important}::ng-deep .e-avenir-lt-pro-heavy{font-family:\"Avenir LT Pro 55 Roman\"!important}::ng-deep .e-avenir-lt-pro-heavy-oblique{font-family:Avenir LT Pro-Heavy Oblique!important}::ng-deep .e-avenir-lt-pro-light{font-family:\"Avenir LT Pro 35 Light\"!important}::ng-deep .e-avenir-lt-pro-light-oblique{font-family:Avenir LT Pro-Light Oblique!important}::ng-deep .e-avenir-lt-pro-medium{font-family:Avenir LT Pro-Medium!important}::ng-deep .e-avenir-lt-pro-medium-oblique{font-family:Avenir LT Pro-Medium Oblique!important}::ng-deep .e-avenir-next-lt-pro-bold{font-family:AvenirNext LT Pro Bold!important}::ng-deep .e-avenir-next-lt-pro-demi{font-family:AvenirNext LT Pro Regular!important}::ng-deep .e-avenir-next-lt-pro-demilt{font-family:Avenir Next LT Pro-Demilt!important}::ng-deep .e-avenir-next-lt-pro-heavy{font-family:AvenirNext LT Pro Heavy!important}::ng-deep .e-avenir-next-lt-pro-heavylt{font-family:AvenirNext LT Pro Heavylt!important}::ng-deep .e-avenir-next-lt-pro-it{font-family:Avenir Next LT Pro-It!important}::ng-deep .e-avenir-next-lt-pro-light{font-family:Avenir Next LT Pro Light!important}::ng-deep .e-avenir-next-lt-pro-mediumlt{font-family:AvenirNext LT Pro Medium!important}::ng-deep .e-avenir-next-lt-pro-regular{font-family:Avenir Next LT Pro-Regular!important}::ng-deep .e-avenir-next-lt-pro-ultlt{font-family:AvenirNext LT Pro UltLight!important}::ng-deep .e-avenir-next-lt-pro-ultltlt{font-family:AvenirNext LT Pro UltLightlt!important}::ng-deep .e-source-han-sans-cn-extralight{font-family:\\601d\\6e90\\9ed1\\4f53 CN ExtraLight!important}::ng-deep .e-source-han-sans-cn-regular{font-family:Source Han Sans CN!important}::ng-deep .e-source-han-sans-cn-medium{font-family:\\601d\\6e90\\9ed1\\4f53 CN Medium!important}::ng-deep .e-source-han-sans-cn-bold{font-family:\\601d\\6e90\\9ed1\\4f53 CN!important}::ng-deep .e-ping-fang-sc-light{font-family:\\82f9\\65b9-\\7b80!important}::ng-deep .e-ping-fang-sc-medium{font-family:Ping Fang SC-Medium!important}::ng-deep .e-ping-fang-sc-regular{font-family:Ping Fang SC-Regular!important}::ng-deep .e-ping-fang-sc-semibold{font-family:Ping Fang SC-Semibold!important}.e-color-palette{width:270px!important}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.ButtonComponent, selector: "[ejs-button]", inputs: ["content", "cssClass", "disabled", "enableHtmlSanitizer", "enablePersistence", "enableRtl", "iconCss", "iconPosition", "isPrimary", "isToggle", "locale"], outputs: ["created"] }, { kind: "component", type: i6.DialogComponent, selector: "ejs-dialog", inputs: ["allowDragging", "animationSettings", "buttons", "closeOnEscape", "content", "cssClass", "enableHtmlSanitizer", "enablePersistence", "enableResize", "enableRtl", "footerTemplate", "header", "height", "isModal", "locale", "minHeight", "position", "resizeHandles", "showCloseIcon", "target", "visible", "width", "zIndex"], outputs: ["beforeClose", "beforeOpen", "beforeSanitizeHtml", "close", "created", "destroyed", "drag", "dragStart", "dragStop", "open", "overlayClick", "resizeStart", "resizeStop", "resizing", "visibleChange"] }, { kind: "component", type: i7.DropDownListComponent, selector: "ejs-dropdownlist", inputs: ["actionFailureTemplate", "allowFiltering", "allowObjectBinding", "cssClass", "dataSource", "enablePersistence", "enableRtl", "enableVirtualization", "enabled", "fields", "filterBarPlaceholder", "filterType", "floatLabelType", "footerTemplate", "groupTemplate", "headerTemplate", "htmlAttributes", "ignoreAccent", "ignoreCase", "index", "isDeviceFullScreen", "itemTemplate", "locale", "noRecordsTemplate", "placeholder", "popupHeight", "popupWidth", "query", "readonly", "showClearButton", "sortOrder", "text", "value", "valueTemplate", "width", "zIndex"], outputs: ["actionBegin", "actionComplete", "actionFailure", "beforeOpen", "blur", "change", "close", "created", "dataBound", "destroyed", "filtering", "focus", "open", "select", "valueChange"] }, { kind: "component", type: i8.SkeletonComponent, selector: "ejs-skeleton", inputs: ["cssClass", "enablePersistence", "enableRtl", "height", "label", "locale", "shape", "shimmerEffect", "visible", "width"] }, { kind: "component", type: i9.RichTextEditorComponent, selector: "ejs-richtexteditor", inputs: ["autoSaveOnIdle", "backgroundColor", "bulletFormatList", "cssClass", "editorMode", "emojiPickerSettings", "enableAutoUrl", "enableHtmlEncode", "enableHtmlSanitizer", "enablePersistence", "enableResize", "enableRtl", "enableTabKey", "enableXhtml", "enabled", "enterKey", "exportPdf", "exportWord", "fileManagerSettings", "floatingToolbarOffset", "fontColor", "fontFamily", "fontSize", "format", "formatPainterSettings", "formatter", "height", "htmlAttributes", "iframeSettings", "importWord", "inlineMode", "insertAudioSettings", "insertImageSettings", "insertVideoSettings", "keyConfig", "locale", "maxLength", "numberFormatList", "pasteCleanupSettings", "placeholder", "quickToolbarSettings", "readonly", "saveInterval", "shiftEnterKey", "showCharCount", "showTooltip", "slashMenuSettings", "tableSettings", "toolbarSettings", "undoRedoSteps", "undoRedoTimer", "value", "valueTemplate", "width"], outputs: ["actionBegin", "actionComplete", "afterImageDelete", "afterMediaDelete", "afterPasteCleanup", "beforeDialogClose", "beforeDialogOpen", "beforeFileUpload", "beforeImageDrop", "beforeImageUpload", "beforePasteCleanup", "beforeQuickToolbarOpen", "beforeSanitizeHtml", "blur", "change", "created", "destroyed", "dialogClose", "dialogOpen", "fileRemoving", "fileSelected", "fileUploadFailed", "fileUploadSuccess", "fileUploading", "focus", "imageRemoving", "imageSelected", "imageUploadFailed", "imageUploadSuccess", "imageUploading", "quickToolbarClose", "quickToolbarOpen", "resizeStart", "resizeStop", "resizing", "slashMenuItemSelect", "toolbarClick", "toolbarStatusUpdate", "updatedToolbarStatus", "valueChange"] }] });
621
+ regenerateClick() {
622
+ this.updateAISugesstions();
623
+ }
624
+ copyClick() {
625
+ this.copyTextToClipboard(this.AIResult);
626
+ }
627
+ replaceClick() {
628
+ let range = this.rteObj.formatter.editorManager.nodeSelection.getRange(this.rteObj.contentModule.getDocument());
629
+ this.rteObj.formatter.editorManager.nodeSelection.restore(range);
630
+ this.rteObj.executeCommand("insertHTML", this.AIResult, {
631
+ undo: true,
632
+ });
633
+ this.closeDialog();
634
+ }
635
+ scrollToBottom(content) {
636
+ this.insertHtmlToEditor(content);
637
+ const rteContainer = document.getElementById("rightRte");
638
+ const scrollableElement = rteContainer?.querySelector(".e-rte-content");
639
+ if (scrollableElement) {
640
+ scrollableElement.scrollTop =
641
+ scrollableElement.scrollHeight - scrollableElement.clientHeight;
642
+ this.ref.detectChanges();
643
+ }
644
+ }
645
+ onMinimize() {
646
+ this.AIdialog.element.style.display = "none";
647
+ this.dialog.showLoadingNotification({
648
+ loadingCallback: (callback) => { },
649
+ message: this.translation.AI_IN_PROGRESS || "AI is in progress",
650
+ });
651
+ }
652
+ showDialog() {
653
+ this.AIdialog.element.style.display = "";
654
+ this.snackBar.dismiss();
655
+ }
656
+ insertHtmlToEditor(html) {
657
+ this.rightRte.executeCommand("insertText", html);
658
+ }
659
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RichtexteditorComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.HttpClient }, { token: i2.DialogService }, { token: i3.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component });
660
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RichtexteditorComponent, selector: "rs-richtext-editor", inputs: { placeholder: "placeholder", value: "value", editorId: "editorId", saveInterval: "saveInterval", height: "height", autoSaveOnIdle: "autoSaveOnIdle", disabled: "disabled", target: "target", insertImageSettings: "insertImageSettings", showTicketAttachment: "showTicketAttachment" }, outputs: { toolbarClick: "toolbarClick", change: "change", created: "created", actionBegin: "actionBegin", input: "input", focus: "focus", blur: "blur", actionComplete: "actionComplete", afterPasteCleanup: "afterPasteCleanup" }, viewQueries: [{ propertyName: "rteObj", first: true, predicate: ["editor"], descendants: true }, { propertyName: "queryCategory", first: true, predicate: ["queryCategory"], descendants: true }, { propertyName: "leftRte", first: true, predicate: ["leftRte"], descendants: true }, { propertyName: "rightRte", first: true, predicate: ["rightRte"], descendants: true }, { propertyName: "AIdialog", first: true, predicate: ["AIdialog"], descendants: true, static: true }, { propertyName: "sentimentButton", first: true, predicate: ["sentimentButton"], descendants: true }, { propertyName: "regenerateButton", first: true, predicate: ["regenerateButton"], descendants: true }, { propertyName: "copyButton", first: true, predicate: ["copyButton"], descendants: true }, { propertyName: "replaceButton", first: true, predicate: ["replaceButton"], descendants: true }], ngImport: i0, 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 [bulletFormatList]=\"bulletFormatList\"\r\n [numberFormatList]=\"numberFormatList\"\r\n [fontFamily]=\"family\"\r\n [fontSize]=\"fontSize\"\r\n [disabled]=\"disabled\"\r\n [insertImageSettings]=\"insertImageSettings\"\r\n [(ngModel)]=\"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 (dialogOpen)=\"_dialogOpen($event)\"\r\n (afterPasteCleanup)=\"_afterPasteCleanup($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\">\r\n {{ translation.AI_ASSIST || \".AI Assist\" }}\r\n </div>\r\n <div class=\"header-buttons\">\r\n <!-- <div class=\"header-btn\">\r\n <img\r\n src=\"/assets/img/dialog-narrow.svg\"\r\n class=\"header-icon\"\r\n (click)=\"onMinimize()\"\r\n />\r\n </div> -->\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 ' + (translation.NEUTRAL || '.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]=\"translation.COPY || '.Copy'\"\r\n disabled=\"false\"\r\n class=\"copy-btn\"\r\n (click)=\"copyClick()\"\r\n ></button>\r\n <button\r\n ejs-button\r\n #replaceButton\r\n [content]=\"translation.REPLACE || '.Replace'\"\r\n isPrimary=\"true\"\r\n disabled=\"false\"\r\n (click)=\"replaceClick()\"\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 {{ translation.REPHRASE || \".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]=\"translation.REGENERATE || '.Regenerate'\"\r\n isPrimary=\"true\"\r\n disabled=\"false\"\r\n (click)=\"regenerateClick()\"\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 flex: 1;\r\n height: 100%;\r\n align-items: center;\r\n justify-content: left;\r\n overflow: auto;\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]=\"\r\n translation.ANALYSIS_OF_AI_SUPPORT ||\r\n '.Analysis of AI Support'\r\n \"\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 flex: 1;\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n overflow: hidden;\r\n \"\r\n >\r\n <div style=\"flex: 1; min-height: 0; overflow: hidden\">\r\n <ejs-richtexteditor\r\n #rightRte\r\n id=\"rightRte\"\r\n height=\"100%\"\r\n width=\"100%\"\r\n [toolbarSettings]=\"{ enable: false }\"\r\n [placeholder]=\"\r\n translation.ANALYSIS_OF_AI_SUPPORT ||\r\n '.Analysis of AI Support'\r\n \"\r\n cssClass=\"e-outline\"\r\n >\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>\r\n {{ translation.NO_RESULTS_FOUND || \".No results found\" }}\r\n </div>\r\n </div>\r\n <div id=\"skeletonId\">\r\n <ejs-skeleton\r\n #skeletonId1\r\n shape=\"Rectangle\"\r\n height=\"16px\"\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=\"16px\"\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=\"16px\"\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=\"16px\"\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=\"16px\"\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=\"16px\"\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", styles: ["@charset \"UTF-8\";.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(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2217%22 viewBox%3D%220 0 16 17%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Ccircle cx%3D%228%22 cy%3D%228.5%22 r%3D%226.5%22 stroke%3D%22%236B6B6B%22%2F%3E%0D%3Cpath d%3D%22M8 8.5V11.5%22 stroke%3D%22%236B6B6B%22 stroke-width%3D%222%22 stroke-linecap%3D%22round%22%2F%3E%0D%3Ccircle cx%3D%228%22 cy%3D%225.5%22 r%3D%221%22 fill%3D%22%236B6B6B%22%2F%3E%0D%3C%2Fsvg%3E%0D\");display:inline-block;width:16px;height:16px;vertical-align:bottom;margin-right:8px}.editor_box .toast .close_icon{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cpath d%3D%22M3.50021 12.9999L12.5001 4.00007%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3Cpath d%3D%22M12.4999 12.9999L3.50007 4.00007%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3C%2Fsvg%3E%0D\");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:0px solid #dee2e6!important}.custom-dialog-rte .dialog-content .custom-row-0{border-top:0px 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(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Crect width%3D%2216%22 height%3D%2216%22 fill%3D%22white%22%2F%3E%0D%3Crect x%3D%224.5%22 y%3D%224.5%22 width%3D%229%22 height%3D%229%22 rx%3D%221.5%22 stroke%3D%22%236C7C90%22%2F%3E%0D%3Cpath d%3D%22M11.5 2.5H4.5C3.39543 2.5 2.5 3.39543 2.5 4.5V11.5%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3C%2Fsvg%3E%0D\");vertical-align:middle;margin-right:6px}.custom-dialog-rte .e-footer-content .e-control.e-btn.e-primary{color:#fff;background:#1364b3}.e-dialog.largest{width:96vw!important;height:88vh!important;max-height:88vh;max-width:2100px}::ng-deep ol.custom-list{list-style:none!important;counter-reset:list-counter}::ng-deep ol.custom-list li{counter-increment:list-counter}::ng-deep ol.parentheses li::marker{content:\"(\" counter(list-counter) \") \"}::ng-deep .e-tiempos-headline{font-family:Tiempos Headline Semibold!important}::ng-deep .e-avenir-lt-pro-black{font-family:\"Avenir LT Pro 65 Medium\"!important}::ng-deep .e-avenir-lt-pro-black-oblique{font-family:Avenir LT Pro-Black Oblique!important}::ng-deep .e-avenir-lt-pro-heavy{font-family:\"Avenir LT Pro 55 Roman\"!important}::ng-deep .e-avenir-lt-pro-heavy-oblique{font-family:Avenir LT Pro-Heavy Oblique!important}::ng-deep .e-avenir-lt-pro-light{font-family:\"Avenir LT Pro 35 Light\"!important}::ng-deep .e-avenir-lt-pro-light-oblique{font-family:Avenir LT Pro-Light Oblique!important}::ng-deep .e-avenir-lt-pro-medium{font-family:Avenir LT Pro-Medium!important}::ng-deep .e-avenir-lt-pro-medium-oblique{font-family:Avenir LT Pro-Medium Oblique!important}::ng-deep .e-avenir-next-lt-pro-bold{font-family:AvenirNext LT Pro Bold!important}::ng-deep .e-avenir-next-lt-pro-demi{font-family:AvenirNext LT Pro Regular!important}::ng-deep .e-avenir-next-lt-pro-demilt{font-family:Avenir Next LT Pro-Demilt!important}::ng-deep .e-avenir-next-lt-pro-heavy{font-family:AvenirNext LT Pro Heavy!important}::ng-deep .e-avenir-next-lt-pro-heavylt{font-family:AvenirNext LT Pro Heavylt!important}::ng-deep .e-avenir-next-lt-pro-it{font-family:Avenir Next LT Pro-It!important}::ng-deep .e-avenir-next-lt-pro-light{font-family:Avenir Next LT Pro Light!important}::ng-deep .e-avenir-next-lt-pro-mediumlt{font-family:AvenirNext LT Pro Medium!important}::ng-deep .e-avenir-next-lt-pro-regular{font-family:Avenir Next LT Pro-Regular!important}::ng-deep .e-avenir-next-lt-pro-ultlt{font-family:AvenirNext LT Pro UltLight!important}::ng-deep .e-avenir-next-lt-pro-ultltlt{font-family:AvenirNext LT Pro UltLightlt!important}::ng-deep .e-source-han-sans-cn-extralight{font-family:\\601d\\6e90\\9ed1\\4f53 CN ExtraLight!important}::ng-deep .e-source-han-sans-cn-regular{font-family:Source Han Sans CN!important}::ng-deep .e-source-han-sans-cn-medium{font-family:\\601d\\6e90\\9ed1\\4f53 CN Medium!important}::ng-deep .e-source-han-sans-cn-bold{font-family:\\601d\\6e90\\9ed1\\4f53 CN!important}::ng-deep .e-ping-fang-sc-light{font-family:\\82f9\\65b9-\\7b80!important}::ng-deep .e-ping-fang-sc-medium{font-family:Ping Fang SC-Medium!important}::ng-deep .e-ping-fang-sc-regular{font-family:Ping Fang SC-Regular!important}::ng-deep .e-ping-fang-sc-semibold{font-family:Ping Fang SC-Semibold!important}.e-color-palette{width:270px!important}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.ButtonComponent, selector: "[ejs-button]", inputs: ["content", "cssClass", "disabled", "enableHtmlSanitizer", "enablePersistence", "enableRtl", "iconCss", "iconPosition", "isPrimary", "isToggle", "locale"], outputs: ["created"] }, { kind: "component", type: i7.DialogComponent, selector: "ejs-dialog", inputs: ["allowDragging", "animationSettings", "buttons", "closeOnEscape", "content", "cssClass", "enableHtmlSanitizer", "enablePersistence", "enableResize", "enableRtl", "footerTemplate", "header", "height", "isModal", "locale", "minHeight", "position", "resizeHandles", "showCloseIcon", "target", "visible", "width", "zIndex"], outputs: ["beforeClose", "beforeOpen", "beforeSanitizeHtml", "close", "created", "destroyed", "drag", "dragStart", "dragStop", "open", "overlayClick", "resizeStart", "resizeStop", "resizing", "visibleChange"] }, { kind: "component", type: i8.DropDownListComponent, selector: "ejs-dropdownlist", inputs: ["actionFailureTemplate", "allowFiltering", "allowObjectBinding", "cssClass", "dataSource", "enablePersistence", "enableRtl", "enableVirtualization", "enabled", "fields", "filterBarPlaceholder", "filterType", "floatLabelType", "footerTemplate", "groupTemplate", "headerTemplate", "htmlAttributes", "ignoreAccent", "ignoreCase", "index", "isDeviceFullScreen", "itemTemplate", "locale", "noRecordsTemplate", "placeholder", "popupHeight", "popupWidth", "query", "readonly", "showClearButton", "sortOrder", "text", "value", "valueTemplate", "width", "zIndex"], outputs: ["actionBegin", "actionComplete", "actionFailure", "beforeOpen", "blur", "change", "close", "created", "dataBound", "destroyed", "filtering", "focus", "open", "select", "valueChange"] }, { kind: "component", type: i9.SkeletonComponent, selector: "ejs-skeleton", inputs: ["cssClass", "enablePersistence", "enableRtl", "height", "label", "locale", "shape", "shimmerEffect", "visible", "width"] }, { kind: "component", type: i10.RichTextEditorComponent, selector: "ejs-richtexteditor", inputs: ["autoSaveOnIdle", "backgroundColor", "bulletFormatList", "cssClass", "editorMode", "emojiPickerSettings", "enableAutoUrl", "enableHtmlEncode", "enableHtmlSanitizer", "enablePersistence", "enableResize", "enableRtl", "enableTabKey", "enableXhtml", "enabled", "enterKey", "exportPdf", "exportWord", "fileManagerSettings", "floatingToolbarOffset", "fontColor", "fontFamily", "fontSize", "format", "formatPainterSettings", "formatter", "height", "htmlAttributes", "iframeSettings", "importWord", "inlineMode", "insertAudioSettings", "insertImageSettings", "insertVideoSettings", "keyConfig", "locale", "maxLength", "numberFormatList", "pasteCleanupSettings", "placeholder", "quickToolbarSettings", "readonly", "saveInterval", "shiftEnterKey", "showCharCount", "showTooltip", "slashMenuSettings", "tableSettings", "toolbarSettings", "undoRedoSteps", "undoRedoTimer", "value", "valueTemplate", "width"], outputs: ["actionBegin", "actionComplete", "afterImageDelete", "afterMediaDelete", "afterPasteCleanup", "beforeDialogClose", "beforeDialogOpen", "beforeFileUpload", "beforeImageDrop", "beforeImageUpload", "beforePasteCleanup", "beforeQuickToolbarOpen", "beforeSanitizeHtml", "blur", "change", "created", "destroyed", "dialogClose", "dialogOpen", "fileRemoving", "fileSelected", "fileUploadFailed", "fileUploadSuccess", "fileUploading", "focus", "imageRemoving", "imageSelected", "imageUploadFailed", "imageUploadSuccess", "imageUploading", "quickToolbarClose", "quickToolbarOpen", "resizeStart", "resizeStop", "resizing", "slashMenuItemSelect", "toolbarClick", "toolbarStatusUpdate", "updatedToolbarStatus", "valueChange"] }] });
528
661
  }
529
662
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RichtexteditorComponent, decorators: [{
530
663
  type: Component,
531
- args: [{ selector: "rs-richtext-editor", 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 [bulletFormatList]=\"bulletFormatList\"\r\n [numberFormatList]=\"numberFormatList\"\r\n [fontFamily]=\"family\"\r\n [fontSize]=\"fontSize\"\r\n [disabled]=\"disabled\"\r\n [insertImageSettings]=\"insertImageSettings\"\r\n [(ngModel)]=\"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 (dialogOpen)=\"_dialogOpen($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\">\r\n <ejs-skeleton\r\n #skeletonId1\r\n shape=\"Rectangle\"\r\n height=\"16px\"\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=\"16px\"\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=\"16px\"\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=\"16px\"\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=\"16px\"\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=\"16px\"\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", styles: ["@charset \"UTF-8\";.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(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2217%22 viewBox%3D%220 0 16 17%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Ccircle cx%3D%228%22 cy%3D%228.5%22 r%3D%226.5%22 stroke%3D%22%236B6B6B%22%2F%3E%0D%3Cpath d%3D%22M8 8.5V11.5%22 stroke%3D%22%236B6B6B%22 stroke-width%3D%222%22 stroke-linecap%3D%22round%22%2F%3E%0D%3Ccircle cx%3D%228%22 cy%3D%225.5%22 r%3D%221%22 fill%3D%22%236B6B6B%22%2F%3E%0D%3C%2Fsvg%3E%0D\");display:inline-block;width:16px;height:16px;vertical-align:bottom;margin-right:8px}.editor_box .toast .close_icon{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cpath d%3D%22M3.50021 12.9999L12.5001 4.00007%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3Cpath d%3D%22M12.4999 12.9999L3.50007 4.00007%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3C%2Fsvg%3E%0D\");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:0px solid #dee2e6!important}.custom-dialog-rte .dialog-content .custom-row-0{border-top:0px 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(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Crect width%3D%2216%22 height%3D%2216%22 fill%3D%22white%22%2F%3E%0D%3Crect x%3D%224.5%22 y%3D%224.5%22 width%3D%229%22 height%3D%229%22 rx%3D%221.5%22 stroke%3D%22%236C7C90%22%2F%3E%0D%3Cpath d%3D%22M11.5 2.5H4.5C3.39543 2.5 2.5 3.39543 2.5 4.5V11.5%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3C%2Fsvg%3E%0D\");vertical-align:middle;margin-right:6px}.custom-dialog-rte .e-footer-content .e-control.e-btn.e-primary{color:#fff;background:#1364b3}.e-dialog.largest{width:96vw!important;height:88vh!important;max-height:88vh;max-width:2100px}::ng-deep ol.custom-list{list-style:none!important;counter-reset:list-counter}::ng-deep ol.custom-list li{counter-increment:list-counter}::ng-deep ol.parentheses li::marker{content:\"(\" counter(list-counter) \") \"}::ng-deep .e-tiempos-headline{font-family:Tiempos Headline Semibold!important}::ng-deep .e-avenir-lt-pro-black{font-family:\"Avenir LT Pro 65 Medium\"!important}::ng-deep .e-avenir-lt-pro-black-oblique{font-family:Avenir LT Pro-Black Oblique!important}::ng-deep .e-avenir-lt-pro-heavy{font-family:\"Avenir LT Pro 55 Roman\"!important}::ng-deep .e-avenir-lt-pro-heavy-oblique{font-family:Avenir LT Pro-Heavy Oblique!important}::ng-deep .e-avenir-lt-pro-light{font-family:\"Avenir LT Pro 35 Light\"!important}::ng-deep .e-avenir-lt-pro-light-oblique{font-family:Avenir LT Pro-Light Oblique!important}::ng-deep .e-avenir-lt-pro-medium{font-family:Avenir LT Pro-Medium!important}::ng-deep .e-avenir-lt-pro-medium-oblique{font-family:Avenir LT Pro-Medium Oblique!important}::ng-deep .e-avenir-next-lt-pro-bold{font-family:AvenirNext LT Pro Bold!important}::ng-deep .e-avenir-next-lt-pro-demi{font-family:AvenirNext LT Pro Regular!important}::ng-deep .e-avenir-next-lt-pro-demilt{font-family:Avenir Next LT Pro-Demilt!important}::ng-deep .e-avenir-next-lt-pro-heavy{font-family:AvenirNext LT Pro Heavy!important}::ng-deep .e-avenir-next-lt-pro-heavylt{font-family:AvenirNext LT Pro Heavylt!important}::ng-deep .e-avenir-next-lt-pro-it{font-family:Avenir Next LT Pro-It!important}::ng-deep .e-avenir-next-lt-pro-light{font-family:Avenir Next LT Pro Light!important}::ng-deep .e-avenir-next-lt-pro-mediumlt{font-family:AvenirNext LT Pro Medium!important}::ng-deep .e-avenir-next-lt-pro-regular{font-family:Avenir Next LT Pro-Regular!important}::ng-deep .e-avenir-next-lt-pro-ultlt{font-family:AvenirNext LT Pro UltLight!important}::ng-deep .e-avenir-next-lt-pro-ultltlt{font-family:AvenirNext LT Pro UltLightlt!important}::ng-deep .e-source-han-sans-cn-extralight{font-family:\\601d\\6e90\\9ed1\\4f53 CN ExtraLight!important}::ng-deep .e-source-han-sans-cn-regular{font-family:Source Han Sans CN!important}::ng-deep .e-source-han-sans-cn-medium{font-family:\\601d\\6e90\\9ed1\\4f53 CN Medium!important}::ng-deep .e-source-han-sans-cn-bold{font-family:\\601d\\6e90\\9ed1\\4f53 CN!important}::ng-deep .e-ping-fang-sc-light{font-family:\\82f9\\65b9-\\7b80!important}::ng-deep .e-ping-fang-sc-medium{font-family:Ping Fang SC-Medium!important}::ng-deep .e-ping-fang-sc-regular{font-family:Ping Fang SC-Regular!important}::ng-deep .e-ping-fang-sc-semibold{font-family:Ping Fang SC-Semibold!important}.e-color-palette{width:270px!important}\n"] }]
532
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.HttpClient }, { type: i2.DialogService }]; }, propDecorators: { rteObj: [{
664
+ args: [{ selector: "rs-richtext-editor", 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 [bulletFormatList]=\"bulletFormatList\"\r\n [numberFormatList]=\"numberFormatList\"\r\n [fontFamily]=\"family\"\r\n [fontSize]=\"fontSize\"\r\n [disabled]=\"disabled\"\r\n [insertImageSettings]=\"insertImageSettings\"\r\n [(ngModel)]=\"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 (dialogOpen)=\"_dialogOpen($event)\"\r\n (afterPasteCleanup)=\"_afterPasteCleanup($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\">\r\n {{ translation.AI_ASSIST || \".AI Assist\" }}\r\n </div>\r\n <div class=\"header-buttons\">\r\n <!-- <div class=\"header-btn\">\r\n <img\r\n src=\"/assets/img/dialog-narrow.svg\"\r\n class=\"header-icon\"\r\n (click)=\"onMinimize()\"\r\n />\r\n </div> -->\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 ' + (translation.NEUTRAL || '.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]=\"translation.COPY || '.Copy'\"\r\n disabled=\"false\"\r\n class=\"copy-btn\"\r\n (click)=\"copyClick()\"\r\n ></button>\r\n <button\r\n ejs-button\r\n #replaceButton\r\n [content]=\"translation.REPLACE || '.Replace'\"\r\n isPrimary=\"true\"\r\n disabled=\"false\"\r\n (click)=\"replaceClick()\"\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 {{ translation.REPHRASE || \".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]=\"translation.REGENERATE || '.Regenerate'\"\r\n isPrimary=\"true\"\r\n disabled=\"false\"\r\n (click)=\"regenerateClick()\"\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 flex: 1;\r\n height: 100%;\r\n align-items: center;\r\n justify-content: left;\r\n overflow: auto;\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]=\"\r\n translation.ANALYSIS_OF_AI_SUPPORT ||\r\n '.Analysis of AI Support'\r\n \"\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 flex: 1;\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n overflow: hidden;\r\n \"\r\n >\r\n <div style=\"flex: 1; min-height: 0; overflow: hidden\">\r\n <ejs-richtexteditor\r\n #rightRte\r\n id=\"rightRte\"\r\n height=\"100%\"\r\n width=\"100%\"\r\n [toolbarSettings]=\"{ enable: false }\"\r\n [placeholder]=\"\r\n translation.ANALYSIS_OF_AI_SUPPORT ||\r\n '.Analysis of AI Support'\r\n \"\r\n cssClass=\"e-outline\"\r\n >\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>\r\n {{ translation.NO_RESULTS_FOUND || \".No results found\" }}\r\n </div>\r\n </div>\r\n <div id=\"skeletonId\">\r\n <ejs-skeleton\r\n #skeletonId1\r\n shape=\"Rectangle\"\r\n height=\"16px\"\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=\"16px\"\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=\"16px\"\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=\"16px\"\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=\"16px\"\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=\"16px\"\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", styles: ["@charset \"UTF-8\";.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(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2217%22 viewBox%3D%220 0 16 17%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Ccircle cx%3D%228%22 cy%3D%228.5%22 r%3D%226.5%22 stroke%3D%22%236B6B6B%22%2F%3E%0D%3Cpath d%3D%22M8 8.5V11.5%22 stroke%3D%22%236B6B6B%22 stroke-width%3D%222%22 stroke-linecap%3D%22round%22%2F%3E%0D%3Ccircle cx%3D%228%22 cy%3D%225.5%22 r%3D%221%22 fill%3D%22%236B6B6B%22%2F%3E%0D%3C%2Fsvg%3E%0D\");display:inline-block;width:16px;height:16px;vertical-align:bottom;margin-right:8px}.editor_box .toast .close_icon{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cpath d%3D%22M3.50021 12.9999L12.5001 4.00007%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3Cpath d%3D%22M12.4999 12.9999L3.50007 4.00007%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3C%2Fsvg%3E%0D\");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:0px solid #dee2e6!important}.custom-dialog-rte .dialog-content .custom-row-0{border-top:0px 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(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Crect width%3D%2216%22 height%3D%2216%22 fill%3D%22white%22%2F%3E%0D%3Crect x%3D%224.5%22 y%3D%224.5%22 width%3D%229%22 height%3D%229%22 rx%3D%221.5%22 stroke%3D%22%236C7C90%22%2F%3E%0D%3Cpath d%3D%22M11.5 2.5H4.5C3.39543 2.5 2.5 3.39543 2.5 4.5V11.5%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3C%2Fsvg%3E%0D\");vertical-align:middle;margin-right:6px}.custom-dialog-rte .e-footer-content .e-control.e-btn.e-primary{color:#fff;background:#1364b3}.e-dialog.largest{width:96vw!important;height:88vh!important;max-height:88vh;max-width:2100px}::ng-deep ol.custom-list{list-style:none!important;counter-reset:list-counter}::ng-deep ol.custom-list li{counter-increment:list-counter}::ng-deep ol.parentheses li::marker{content:\"(\" counter(list-counter) \") \"}::ng-deep .e-tiempos-headline{font-family:Tiempos Headline Semibold!important}::ng-deep .e-avenir-lt-pro-black{font-family:\"Avenir LT Pro 65 Medium\"!important}::ng-deep .e-avenir-lt-pro-black-oblique{font-family:Avenir LT Pro-Black Oblique!important}::ng-deep .e-avenir-lt-pro-heavy{font-family:\"Avenir LT Pro 55 Roman\"!important}::ng-deep .e-avenir-lt-pro-heavy-oblique{font-family:Avenir LT Pro-Heavy Oblique!important}::ng-deep .e-avenir-lt-pro-light{font-family:\"Avenir LT Pro 35 Light\"!important}::ng-deep .e-avenir-lt-pro-light-oblique{font-family:Avenir LT Pro-Light Oblique!important}::ng-deep .e-avenir-lt-pro-medium{font-family:Avenir LT Pro-Medium!important}::ng-deep .e-avenir-lt-pro-medium-oblique{font-family:Avenir LT Pro-Medium Oblique!important}::ng-deep .e-avenir-next-lt-pro-bold{font-family:AvenirNext LT Pro Bold!important}::ng-deep .e-avenir-next-lt-pro-demi{font-family:AvenirNext LT Pro Regular!important}::ng-deep .e-avenir-next-lt-pro-demilt{font-family:Avenir Next LT Pro-Demilt!important}::ng-deep .e-avenir-next-lt-pro-heavy{font-family:AvenirNext LT Pro Heavy!important}::ng-deep .e-avenir-next-lt-pro-heavylt{font-family:AvenirNext LT Pro Heavylt!important}::ng-deep .e-avenir-next-lt-pro-it{font-family:Avenir Next LT Pro-It!important}::ng-deep .e-avenir-next-lt-pro-light{font-family:Avenir Next LT Pro Light!important}::ng-deep .e-avenir-next-lt-pro-mediumlt{font-family:AvenirNext LT Pro Medium!important}::ng-deep .e-avenir-next-lt-pro-regular{font-family:Avenir Next LT Pro-Regular!important}::ng-deep .e-avenir-next-lt-pro-ultlt{font-family:AvenirNext LT Pro UltLight!important}::ng-deep .e-avenir-next-lt-pro-ultltlt{font-family:AvenirNext LT Pro UltLightlt!important}::ng-deep .e-source-han-sans-cn-extralight{font-family:\\601d\\6e90\\9ed1\\4f53 CN ExtraLight!important}::ng-deep .e-source-han-sans-cn-regular{font-family:Source Han Sans CN!important}::ng-deep .e-source-han-sans-cn-medium{font-family:\\601d\\6e90\\9ed1\\4f53 CN Medium!important}::ng-deep .e-source-han-sans-cn-bold{font-family:\\601d\\6e90\\9ed1\\4f53 CN!important}::ng-deep .e-ping-fang-sc-light{font-family:\\82f9\\65b9-\\7b80!important}::ng-deep .e-ping-fang-sc-medium{font-family:Ping Fang SC-Medium!important}::ng-deep .e-ping-fang-sc-regular{font-family:Ping Fang SC-Regular!important}::ng-deep .e-ping-fang-sc-semibold{font-family:Ping Fang SC-Semibold!important}.e-color-palette{width:270px!important}\n"] }]
665
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.HttpClient }, { type: i2.DialogService }, { type: i3.MatSnackBar }]; }, propDecorators: { rteObj: [{
533
666
  type: ViewChild,
534
667
  args: ["editor", { static: false }]
535
668
  }], queryCategory: [{
@@ -592,5 +725,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
592
725
  type: Output
593
726
  }], actionComplete: [{
594
727
  type: Output
728
+ }], afterPasteCleanup: [{
729
+ type: Output
595
730
  }] } });
596
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFpc2UtY29tbW9uLWxpYi9zcmMvbGliL2Zvcm0vcmljaHRleHRlZGl0b3IvaW5kZXguY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFpc2UtY29tbW9uLWxpYi9zcmMvbGliL2Zvcm0vcmljaHRleHRlZGl0b3IvaW5kZXguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFFVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFldkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7O0FBV2pELE1BQU0sT0FBTyx1QkFBdUI7SUF1THhCO0lBQ0E7SUFDQTtJQXZMSCxNQUFNLENBQTBCO0lBRWhDLGFBQWEsQ0FBeUI7SUFFdEMsT0FBTyxDQUEyQjtJQUVsQyxRQUFRLENBQTJCO0lBQ00sUUFBUSxDQUFtQjtJQUVwRSxlQUFlLENBQW1CO0lBRWxDLGdCQUFnQixDQUFtQjtJQUVuQyxVQUFVLENBQW1CO0lBRTdCLGFBQWEsQ0FBbUI7SUFDdkMsaUZBQWlGO0lBRXhFLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDakIsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNYLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDdEIsWUFBWSxHQUFHLEdBQUcsQ0FBQztJQUNuQixNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ2hCLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDdEIsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixNQUFNLEdBQUcsV0FBVyxDQUFDLENBQUMsY0FBYztJQUNwQyxtQkFBbUIsR0FBRztRQUM3QixVQUFVLEVBQUUsTUFBTTtRQUNsQixZQUFZLEVBQUUs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LGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUtHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFFSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNO2dCQUNHLEtBQUs7c0JBQWQsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IERyb3BEb3duTGlzdENvbXBvbmVudCB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItYW5ndWxhci1kcm9wZG93bnNcIjtcclxuaW1wb3J0IHtcclxuICBSaWNoVGV4dEVkaXRvckNvbXBvbmVudCxcclxuICBUb29sYmFyU2V0dGluZ3NNb2RlbCxcclxufSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItcmljaHRleHRlZGl0b3JcIjtcclxuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLWJ1dHRvbnNcIjtcclxuaW1wb3J0IHsgRHJvcERvd25CdXR0b24gfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItc3BsaXRidXR0b25zXCI7XHJcbmltcG9ydCB7IERpYWxvZ0NvbXBvbmVudCB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItYW5ndWxhci1wb3B1cHNcIjtcclxuLy8gc2VydmljZVxyXG4vLyBpbXBvcnQgeyBQYkZ1blNlcnZpY2UgfSBmcm9tIFwiQGFwcC9zZXJ2aWNlcy9wYi1mdW4uc2VydmljZVwiO1xyXG4vLyBpbXBvcnQgeyBTaGFyZWRTeW5jZnVzaW9uTW9kdWxlIH0gZnJvbSBcIkBhcHAvbW9kdWxlL3N5bmNmdXNpb25Nb2R1bGVcIjtcclxuaW1wb3J0IHsgT3BlbkFpTW9kZWxSVEUgfSBmcm9tIFwiLi9vcGVuYXBpXCI7XHJcbmltcG9ydCB7IGxpbmVIZWlnaHRfaXRlbXMgfSBmcm9tIFwiLi9kYXRhLWNvbmZpZ1wiO1xyXG5pbXBvcnQgeyBmb250RmFtaWx5LCBzaXplIH0gZnJvbSBcIi4vZGF0YS1jb25maWdcIjtcclxuaW1wb3J0IHsgZ2V0QUlDb25maWcsIGlzQUlDb25maWdWYWxpZCwgQUlDb25maWcgfSBmcm9tIFwiLi9haS1jb25maWdcIjtcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlL2RpYWxvZy5zZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJycy1yaWNodGV4dC1lZGl0b3JcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2luZGV4LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2luZGV4LmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gIC8vIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgLy8gaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgU2hhcmVkU3luY2Z1c2lvbk1vZHVsZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSaWNodGV4dGVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZChcImVkaXRvclwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcnRlT2JqOiBSaWNoVGV4dEVkaXRvckNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwicXVlcnlDYXRlZ29yeVwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcXVlcnlDYXRlZ29yeSE6IERyb3BEb3duTGlzdENvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwibGVmdFJ0ZVwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgbGVmdFJ0ZSE6IFJpY2hUZXh0RWRpdG9yQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJyaWdodFJ0ZVwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcmlnaHRSdGUhOiBSaWNoVGV4dEVkaXRvckNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwiQUlkaWFsb2dcIiwgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIEFJZGlhbG9nITogRGlhbG9nQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJzZW50aW1lbnRCdXR0b25cIiwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgcHVibGljIHNlbnRpbWVudEJ1dHRvbiE6IEJ1dHRvbkNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwicmVnZW5lcmF0ZUJ1dHRvblwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcmVnZW5lcmF0ZUJ1dHRvbiE6IEJ1dHRvbkNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwiY29weUJ1dHRvblwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgY29weUJ1dHRvbiE6IEJ1dHRvbkNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwicmVwbGFjZUJ1dHRvblwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcmVwbGFjZUJ1dHRvbiE6IEJ1dHRvbkNvbXBvbmVudDtcclxuICAvLyBAVmlld0NoaWxkKFwiY2hpcExpc3RcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyBjaGlwTGlzdCE6IENoaXBMaXN0Q29tcG9uZW50O1xyXG5cclxuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgQElucHV0KCkgdmFsdWUgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIGVkaXRvcklkID0gXCJlZGl0b3JJZFwiO1xyXG4gIEBJbnB1dCgpIHNhdmVJbnRlcnZhbCA9IDUwMDtcclxuICBASW5wdXQoKSBoZWlnaHQgPSBcImF1dG9cIjtcclxuICBASW5wdXQoKSBhdXRvU2F2ZU9uSWRsZSA9IHRydWU7XHJcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSB0YXJnZXQgPSBcIiNtYWluUGFnZVwiOyAvLyBkaWFsb2cg5by556qX54i257qnXHJcbiAgQElucHV0KCkgaW5zZXJ0SW1hZ2VTZXR0aW5ncyA9IHtcclxuICAgIHNhdmVGb3JtYXQ6IFwiQmxvYlwiLFxyXG4gICAgYWxsb3dlZFR5cGVzOiBbXCIuc3ZnXCIsIFwiLnBuZ1wiXSxcclxuICAgIGRpc3BsYXk6IFwibm9uZVwiLFxyXG4gIH07XHJcbiAgQElucHV0KCkgc2hvd1RpY2tldEF0dGFjaG1lbnQgPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIHRvb2xiYXJDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjcmVhdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBhY3Rpb25CZWdpbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgaW5wdXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBibHVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBhY3Rpb25Db21wbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgZmFtaWx5ID0gZm9udEZhbWlseTtcclxuICBmb250U2l6ZSA9IHNpemU7XHJcbiAgZGlhbG9nV2lkdGggPSBcIjgwMHB4XCI7XHJcbiAgZGlhbG9nSGVpZ2h0ID0gXCI2NDJweFwiO1xyXG4gIHNob3dab29tQnRuID0gdHJ1ZTtcclxuICBzaG93TXNnID0gZmFsc2U7XHJcbiAgZWRpdG9yTWFuYWdlcjogYW55O1xyXG4gIHNpemUgPSBcIlwiO1xyXG4gIHNlbGVjdGVkUXVlcnk7XHJcbiAgcHVibGljIGRyb3BWYWxJbmRleCA9IDA7XHJcbiAgcHVibGljIHF1ZXJ5TGlzdDogeyBpZDogc3RyaW5nOyB0ZXh0OiBzdHJpbmcgfVtdID0gW1xyXG4gICAgeyBpZDogXCJSZXBocmFzZVwiLCB0ZXh0OiBcIlJlcGhyYXNlXCIgfSxcclxuICAgIHsgaWQ6IFwiR3JhbW1hclwiLCB0ZXh0OiBcIkNvcnJlY3QgR3JhbW1hclwiIH0sXHJcbiAgICB7IGlkOiBcIlN1bW1hcml6ZVwiLCB0ZXh0OiBcIlN1bW1hcml6ZVwiIH0sXHJcbiAgICB7IGlkOiBcIkVsYWJvcmF0ZVwiLCB0ZXh0OiBcIkVsYWJvcmF0ZVwiIH0sXHJcbiAgICB7IGlkOiBcIlRyYW5zbGF0ZVwiLCB0ZXh0OiBcIlRyYW5zbGF0ZVwiIH0sXHJcbiAgICB7IGlkOiBcIlNlbnRpbWVudEFuYWx5c2lzXCIsIHRleHQ6IFwiU2VudGltZW50IEFuYWx5c2lzXCIgfSxcclxuICBdO1xyXG4gIHB1YmxpYyByZXBocmFzZVR5bGVMaXN0ID0gW1xyXG4gICAgeyB0ZXh0OiBcIlN0YW5kYXJkXCIsIGlkOiBcIlN0YW5kYXJkXCIgfSxcclxuICAgIHsgdGV4dDogXCJGbHVlbnRcIiwgaWQ6IFwiRmx1ZW50XCIgfSxcclxuICAgIHsgdGV4dDogXCJQcm9mZXNzaW9uYWxcIiwgaWQ6IFwiUHJvZmVzc2lvbmFsXCIgfSxcclxuICBdO1xyXG4gIHB1YmxpYyBsYW5ndWFnZUxpc3Q6IHsgaWQ6IHN0cmluZzsgdGV4dDogc3RyaW5nIH1bXSA9IFtcclxuICAgIHsgaWQ6IFwiRU5cIiwgdGV4dDogXCJFbmdsaXNoXCIgfSxcclxuICAgIHsgaWQ6IFwiWkhcIiwgdGV4dDogXCJDaGluZXNlIChTaW1wbGlmaWVkKVwiIH0sXHJcbiAgICB7IGlkOiBcIkVTXCIsIHRleHQ6IFwiU3BhbmlzaFwiIH0sXHJcbiAgICB7IGlkOiBcIlpIVFwiLCB0ZXh0OiBcIkNoaW5lc2UgKFRyYWRpdGlvbmFsKVwiIH0sXHJcbiAgICB7IGlkOiBcIkhJXCIsIHRleHQ6IFwiSGluZGlcIiB9LFxyXG4gICAgeyBpZDogXCJBUlwiLCB0ZXh0OiBcIkFyYWJpY1wiIH0sXHJcbiAgICB7IGlkOiBcIkJOXCIsIHRleHQ6IFwiQmVuZ2FsaVwiIH0sXHJcbiAgICB7IGlkOiBcIlBUXCIsIHRleHQ6IFwiUG9ydHVndWVzZVwiIH0sXHJcbiAgICB7IGlkOiBcIlJVXCIsIHRleHQ6IFwiUnVzc2lhblwiIH0sXHJcbiAgICB7IGlkOiBcIkpBXCIsIHRleHQ6IFwiSmFwYW5lc2VcIiB9LFxyXG4gICAgeyBpZDogXCJERVwiLCB0ZXh0OiBcIkdlcm1hblwiIH0sXHJcbiAgICB7IGlkOiBcIktPXCIsIHRleHQ6IFwiS29yZWFuXCIgfSxcclxuICAgIHsgaWQ6IFwiRlJcIiwgdGV4dDogXCJGcmVuY2hcIiB9LFxyXG4gICAgeyBpZDogXCJJVFwiLCB0ZXh0OiBcIkl0YWxpYW5cIiB9LFxyXG4gICAgeyBpZDogXCJUUlwiLCB0ZXh0OiBcIlR1cmtpc2hcIiB9LFxyXG4gIF07XHJcbiAgcHVibGljIHByb21wdFF1ZXJ5ID0gXCJcIjtcclxuICBwdWJsaWMgaXNTZW50aW1lbnRDaGVjazogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzdWJRdWVyeSA9IFwiXCI7XHJcbiAgcHVibGljIHRyYW5zbGF0ZWxhbmd1YWdlITogc3RyaW5nO1xyXG4gIHB1YmxpYyBjaGlwVmFsdWUgPSBcIlN0YW5kYXJkXCI7XHJcbiAgcHVibGljIGFwaVJlc3VsdERhdGE6IGFueTtcclxuICBwdWJsaWMgQUlSZXN1bHQhOiBzdHJpbmc7XHJcbiAgdG9vbHM6IFRvb2xiYXJTZXR0aW5nc01vZGVsID0ge1xyXG4gICAgZW5hYmxlRmxvYXRpbmc6IGZhbHNlLFxyXG4gICAgaXRlbXM6IFtcclxuICAgICAgLy8ge1xyXG4gICAgICAvLyAgIHRvb2x0aXBUZXh0OiBcIkFJIEFzc2lzdFwiLFxyXG4gICAgICAvLyAgIHRlbXBsYXRlOlxyXG4gICAgICAvLyAgICAgJzxidXR0b24gY2xhc3M9XCJlLXRiYXItYnRuIGUtYnRuXCIgdGFiaW5kZXg9XCItMVwiIGlkPVwiYWlfYXNzaXN0YW50X2J1dHRvbl90YmFyXCIgc3R5bGU9XCJ3aWR0aDoxMDAlXCI+PGRpdiBjbGFzcz1cImUtcnRlLWRyb3Bkb3duLWJ0bi10ZXh0XCI+QUkgQXNzaXN0PC9kaXY+PC9idXR0b24+JyxcclxuICAgICAgLy8gfSxcclxuICAgICAgXCJCb2xkXCIsXHJcbiAgICAgIFwiSXRhbGljXCIsXHJcbiAgICAgIFwiVW5kZXJsaW5lXCIsXHJcbiAgICAgIFwiU3RyaWtlVGhyb3VnaFwiLFxyXG4gICAgICBcIkZvbnROYW1lXCIsXHJcbiAgICAgIFwiRm9udFNpemVcIixcclxuICAgICAgXCJGb250Q29sb3JcIixcclxuICAgICAgXCJCYWNrZ3JvdW5kQ29sb3JcIixcclxuICAgICAgXCJMb3dlckNhc2VcIixcclxuICAgICAgXCJVcHBlckNhc2VcIixcclxuICAgICAgXCJ8XCIsXHJcbiAgICAgIFwiQ3JlYXRlVGFibGVcIixcclxuICAgICAgXCJGb3JtYXRzXCIsXHJcbiAgICAgIFwiQWxpZ25tZW50c1wiLFxyXG4gICAgICAvLyB7XHJcbiAgICAgIC8vICAgdG9vbHRpcFRleHQ6IFwiTGluZSBIZWlnaHRcIixcclxuICAgICAgLy8gICB0ZW1wbGF0ZTpcclxuICAgICAgLy8gICAgICc8YnV0dG9uIGNsYXNzPVwiZS10YmFyLWJ0biBlLWJ0blwiIHRhYmluZGV4PVwiLTFcIiBpZD1cImxpbmVoZWlnaHRfdGJhclwiICBzdHlsZT1cIndpZHRoOjEwMCVcIj48L2J1dHRvbj4nLFxyXG4gICAgICAvLyB9LFxyXG4gICAgICBcImJ1bGxldEZvcm1hdExpc3RcIixcclxuICAgICAgXCJOdW1iZXJGb3JtYXRMaXN0XCIsXHJcbiAgICAgIFwiT3V0ZGVudFwiLFxyXG4gICAgICBcIkluZGVudFwiLFxyXG4gICAgICBcInxcIixcclxuICAgICAgXCJDcmVhdGVMaW5rXCIsXHJcbiAgICAgIC8vIHtcclxuICAgICAgLy8gICB0b29sdGlwVGV4dDogXCJcIixcclxuICAgICAgLy8gICB0ZW1wbGF0ZTpcclxuICAgICAgLy8gICAgICc8YnV0dG9uIGNsYXNzPVwiZS10YmFyLWJ0biBlLWJ0blwiIHRhYmluZGV4PVwiLTFcIiBpZD1cImN1c3RvbV90YmFyXCIgIHN0eWxlPVwid2lkdGg6MTAwJVwiPicgK1xyXG4gICAgICAvLyAgICAgJzxkaXYgY2xhc3M9XCJlLXRiYXItYnRuLXRleHRcIiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA1MDA7XCI+PGltZyBzcmM9XCIvYXNzZXRzL2ltZy9maWxlLWljb24uc3ZnXCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7dG9wOiAtMnB4O1wiLz48ZGl2IGNsYXNzPVwidXBsb2FkQWN0aW9uc1wiPjxkaXYgaWQ9XCJ1cGxvYWRGcm9tVXNlclwiPkNvbXB1dGVyIEZpbGU8L2Rpdj48ZGl2IGlkPVwicmVsYXRpb25Eb21cIj5UaWNrZXQgQXR0YWNobWVudDwvZGl2PjwvZGl2PjwvZGl2PjwvYnV0dG9uPicsXHJcbiAgICAgIC8vIH0sXHJcbiAgICAgIFwifFwiLFxyXG4gICAgICBcIkZvcm1hdFBhaW50ZXJcIixcclxuICAgICAgXCJDbGVhckZvcm1hdFwiLFxyXG4gICAgICBcInxcIixcclxuICAgICAgXCJVbmRvXCIsXHJcbiAgICAgIFwiUmVkb1wiLFxyXG4gICAgICAvLydTb3VyY2VDb2RlJyxcclxuICAgIF0sXHJcbiAgfTtcclxuXHJcbiAgcHVibGljIGJ1bGxldEZvcm1hdExpc3QgPSB7XHJcbiAgICB0eXBlczogW1xyXG4gICAgICB7IHRleHQ6IFwiTm9uZVwiLCB2YWx1ZTogXCJub25lXCIgfSxcclxuICAgICAgeyB0ZXh0OiBcIuKXj1wiLCB2YWx1ZTogXCJkaXNjXCIgfSxcclxuICAgICAgeyB0ZXh0OiBcIuKXi1wiLCB2YWx1ZTogXCJjaXJjbGVcIiB9LFxyXG4gICAgICB7IHRleHQ6IFwi4pagXCIsIHZhbHVlOiBcInNxdWFyZVwiIH0sXHJcbiAgICAgIC8vIEFkZCB5b3VyIGN1c3RvbSBidWxsZXQgc3R5bGUgaGVyZVxyXG4gICAgICB7IHRleHQ6IFwiLVwiLCB2YWx1ZTogXCJkYXNoXCIgfSxcclxuICAgIF0sXHJcbiAgfTtcclxuICBwdWJsaWMgbnVtYmVyRm9ybWF0TGlzdCA9IHtcclxuICAgIHR5cGVzOiBbXHJcbiAgICAgIHsgdGV4dDogXCJOb25lXCIsIHZhbHVlOiBcIm5vbmVcIiB9LFxyXG4gICAgICB7IHRleHQ6IFwiMSwgMiwgMywg4oCmXCIsIHZhbHVlOiBcImRlY2ltYWxcIiB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGV4dDogXCLOsSwgzrIsIM6zLCDigKZcIixcclxuICAgICAgICB2YWx1ZTogXCJsb3dlckdyZWVrXCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0ZXh0OiBcImksIGlpLCBpaWksIOKAplwiLFxyXG4gICAgICAgIHZhbHVlOiBcImxvd2VyUm9tYW5cIixcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRleHQ6IFwiQSwgQiwgQywg4oCmXCIsXHJcbiAgICAgICAgdmFsdWU6IFwidXBwZXJBbHBoYVwiLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGV4dDogXCJhLCBiLCBjLCDigKZcIixcclxuICAgICAgICB2YWx1ZTogXCJsb3dlckFscGhhXCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0ZXh0OiBcIkksIElJLCBJSUksIOKAplwiLFxyXG4gICAgICAgIHZhbHVlOiBcInVwcGVyUm9tYW5cIixcclxuICAgICAgfSxcclxuICAgICAgLy8gQWRkIHlvdXIgY3VzdG9tIGJ1bGxldCBzdHlsZSBoZXJlXHJcbiAgICAgIHtcclxuICAgICAgICB0ZXh0OiBcIigxKSwgKDIpLCAoMyksIOKAplwiLFxyXG4gICAgICAgIHZhbHVlOiBcInBhcmVudGhlc2VzXCIsXHJcbiAgICAgIH0sXHJcbiAgICBdLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IERpYWxvZ1NlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgaWYgKHRoaXMuc2hvd1RpY2tldEF0dGFjaG1lbnQpIHtcclxuICAgICAgY29uc3QgaXRlbSA9IHtcclxuICAgICAgICB0b29sdGlwVGV4dDogXCJcIixcclxuICAgICAgICB0ZW1wbGF0ZTpcclxuICAgICAgICAgICc8YnV0dG9uIGNsYXNzPVwiZS10YmFyLWJ0biBlLWJ0blwiIHRhYmluZGV4PVwiLTFcIiBpZD1cImN1c3RvbV90YmFyXCIgIHN0eWxlPVwid2lkdGg6MTAwJVwiPicgK1xyXG4gICAgICAgICAgJzxkaXYgY2xhc3M9XCJlLXRiYXItYnRuLXRleHRcIiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA1MDA7XCI+PGltZyBzcmM9XCIvYXNzZXRzL2ltZy9maWxlLWljb24uc3ZnXCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCIvPjxkaXYgY2xhc3M9XCJ1cGxvYWRBY3Rpb25zXCI+PGRpdiBpZD1cInVwbG9hZEZyb21Vc2VyXCI+Q29tcHV0ZXIgRmlsZTwvZGl2PjxkaXYgaWQ9XCJyZWxhdGlvbkRvbVwiPlRpY2tldCBBdHRhY2htZW50PC9kaXY+PC9kaXY+PC9kaXY+PC9idXR0b24+JyxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy50b29scy5pdGVtcy5zcGxpY2UoMjIsIDAsIGl0ZW0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Db250ZW50Q2hhbmdlKGFyZ3MpIHtcclxuICAgIC8vIGNvbnN0IHRhYmxlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ0YWJsZS5lLXJ0ZS10YWJsZVwiKTtcclxuICAgIC8vIHRhYmxlcy5mb3JFYWNoKCh0YWJsZSkgPT4ge1xyXG4gICAgLy8gICBjb25zdCBodG1sVGFibGUgPSB0YWJsZSBhcyBIVE1MVGFibGVFbGVtZW50O1xyXG4gICAgLy8gICBodG1sVGFibGUuc3R5bGUubWFyZ2luQm90dG9tID0gXCIxMHB4XCI7XHJcbiAgICAvLyAgIGh0bWxUYWJsZS5zdHlsZS5ib3JkZXJDb2xsYXBzZSA9IFwiY29sbGFwc2VcIjtcclxuICAgIC8vICAgaHRtbFRhYmxlLnN0eWxlLmVtcHR5Q2VsbHMgPSBcInNob3dcIjtcclxuICAgIC8vICAgY29uc3QgdGRFbGVtZW50cyA9IHRhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJ0ZFwiKTtcclxuICAgIC8vICAgdGRFbGVtZW50cy5mb3JFYWNoKCh0ZCkgPT4ge1xyXG4gICAgLy8gICAgIHRkLnN0eWxlLmJvcmRlciA9IFwiMXB4IHNvbGlkICNhZGI1YmRcIjtcclxuICAgIC8vICAgICB0ZC5zdHlsZS5oZWlnaHQgPSBcIjIwcHhcIjtcclxuICAgIC8vICAgICB0ZC5zdHlsZS5taW5XaWR0aCA9IFwiMjBweFwiO1xyXG4gICAgLy8gICAgIHRkLnN0eWxlLnBhZGRpbmcgPSBcIjJweCA1cHhcIjtcclxuICAgIC8vICAgICB0ZC5zdHlsZS5ib3hTaXppbmcgPSBcImJvcmRlci1ib3hcIjtcclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyB9KTtcclxuICAgIHRoaXMuY2hhbmdlLmVtaXQoYXJncyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DcmVhdGUoKTogdm9pZCB7XHJcbiAgICAvL2FkZCB0aGUgbGluZSBoZWlnaHRcclxuICAgIC8vIHRoaXMuZWRpdG9yTWFuYWdlciA9IHRoaXMucnRlT2JqLmZvcm1hdHRlci5lZGl0b3JNYW5hZ2VyO1xyXG4gICAgLy8gbGV0IHNwbGl0QnV0dG9uID0gbmV3IERyb3BEb3duQnV0dG9uKHtcclxuICAgIC8vICAgaXRlbXM6IGxpbmVIZWlnaHRfaXRlbXMsXHJcbiAgICAvLyAgIGljb25Dc3M6IFwiZS1pY29ucyBlLWxpbmUtc3BhY2luZ1wiLFxyXG4gICAgLy8gICBzZWxlY3Q6IHRoaXMub25TZWxlY3QuYmluZCh0aGlzKSxcclxuICAgIC8vIH0pO1xyXG4gICAgLy8gc3BsaXRCdXR0b24uYXBwZW5kVG8oXCIjbGluZWhlaWdodF90YmFyXCIpO1xyXG4gICAgLy8gLy8gYWkgYXNzaXN0XHJcbiAgICAvLyBsZXQgYWlhc3Npc3RhbnRCdXR0b24gPSBuZXcgRHJvcERvd25CdXR0b24oe1xyXG4gICAgLy8gICBpdGVtczogdGhpcy5xdWVyeUxpc3QsXHJcbiAgICAvLyAgIC8vIGljb25Dc3M6IFwiZS1idG4taWNvbiBlLWljb25zIGUtYXNzaXN0dmlldy1pY29uIGUtaWNvbi1sZWZ0XCIsXHJcbiAgICAvLyAgIHNlbGVjdDogKGFyZ3MpID0+IHRoaXMuYWlRdWVyeVNlbGVjdGVkTWVudShhcmdzKSxcclxuICAgIC8vIH0pO1xyXG4gICAgLy8gYWlhc3Npc3RhbnRCdXR0b24uYXBwZW5kVG8oXCIjYWlfYXNzaXN0YW50X2J1dHRvbl90YmFyXCIpO1xyXG4gICAgdGhpcy5jcmVhdGVkLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25TZWxlY3QoYXJncykge1xyXG4gICAgaWYgKHRoaXMucnRlT2JqLmZvcm1hdHRlci5nZXRVbmRvUmVkb1N0YWNrKCkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMucnRlT2JqLmZvcm1hdHRlci5zYXZlRGF0YSgpO1xyXG4gICAgfVxyXG4gICAgbGV0IG5vZGVzOiBOb2RlW10gPSB0aGlzLmVkaXRvck1hbmFnZXIuZG9tTm9kZS5ibG9ja05vZGVzKCk7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBub2Rlcy5sZW5ndGggPiBpOyBpKyspIHtcclxuICAgICAgKG5vZGVzW2ldIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5saW5lSGVpZ2h0ID0gYXJncy5pdGVtLnRleHQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJ0ZU9iai5mb3JtYXR0ZXIuc2F2ZURhdGEoKTtcclxuICAgIHRoaXMucnRlT2JqLmZvcm1hdHRlci5lbmFibGVVbmRvKHRoaXMucnRlT2JqKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWlRdWVyeVNlbGVjdGVkTWVudShhcmdzOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlhbG9ndWVPcGVuKGFyZ3MuaXRlbS50ZXh0KTtcclxuICB9XHJcblxyXG4gIGRpYWxvZ3VlT3BlbihzZWxlY3RlZFF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHZhciBzZWxlY3Rpb25UZXh0ID0gdGhpcy5ydGVPYmouZ2V0U2VsZWN0ZWRIdG1sKCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkUXVlcnkgPSBzZWxlY3RlZFF1ZXJ5O1xyXG4gICAgaWYgKHNlbGVjdGlvblRleHQpIHtcclxuICAgICAgbGV0IHJhbmdlOiBSYW5nZSA9IChcclxuICAgICAgICB0aGlzLnJ0ZU9iaiBhcyBhbnlcclxuICAgICAgKS5mb3JtYXR0ZXIuZWRpdG9yTWFuYWdlci5ub2RlU2VsZWN0aW9uLmdldFJhbmdlKFxyXG4gICAgICAgICh0aGlzLnJ0ZU9iaiBhcyBhbnkpLmNvbnRlbnRNb2R1bGUuZ2V0RG9jdW1lbnQoKVxyXG4gICAgICApO1xyXG4gICAgICAodGhpcy5ydGVPYmogYXMgYW55KS5mb3JtYXR0ZXIuZWRpdG9yTWFuYWdlci5ub2RlU2VsZWN0aW9uLnNhdmUoXHJcbiAgICAgICAgcmFuZ2UsXHJcbiAgICAgICAgKHRoaXMucnRlT2JqIGFzIGFueSkuY29udGVudE1vZHVsZS5nZXREb2N1bWVudCgpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZHJvcFZhbEluZGV4ID0gdGhpcy5xdWVyeUxpc3QuZmluZEluZGV4KFxyXG4gICAgICAgIChxKSA9PiBxLnRleHQudG9Mb3dlckNhc2UoKSA9PT0gc2VsZWN0ZWRRdWVyeS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMucXVlcnlDYXRlZ29yeS5pbmRleCA9IHRoaXMuZHJvcFZhbEluZGV4O1xyXG4gICAgICB0aGlzLmxlZnRSdGUudmFsdWUgPSB0aGlzLnByb21wdFF1ZXJ5ID0gc2VsZWN0aW9uVGV4dDtcclxuICAgICAgdGhpcy5sZWZ0UnRlLnJlZnJlc2hVSSgpO1xyXG4gICAgICB0aGlzLkFJZGlhbG9nLnNob3coKTtcclxuICAgICAgdGhpcy51cGRhdGVBSVN1Z2Vzc3Rpb25zRGF0YShzZWxlY3RlZFF1ZXJ5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvd01zZyA9IHRydWU7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2hvd01zZyA9IGZhbHNlO1xyXG4gICAgICB9LCAzMDAwKTtcclxuICAgICAgY29uc29sZS5sb2coXCJQbGVhc2Ugc2VsZWN0IHRoZSBjb250ZW50IHRvIHBlcmZvcm0gdGhlIEFJIG9wZXJhdGlvbi5cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVBSVN1Z2Vzc3Rpb25zRGF0YShzZWxlY3RlZFF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNTZW50aW1lbnRDaGVjayA9IGZhbHNlO1xyXG4gICAgc3dpdGNoIChzZWxlY3RlZFF1ZXJ5KSB7XHJcbiAgICAgIGNhc2UgXCJTdW1tYXJpemVcIjpcclxuICAgICAgICB0aGlzLnN1YlF1ZXJ5ID0gXCJTdW1tYXJpemUgdGhlIHVwY29taW5nIHNlbnRlbmNlIHNob3J0bHkuXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJFbGFib3JhdGVcIjpcclxuICAgICAgICB0aGlzLnN1YlF1ZXJ5ID0gXCJFbGFib3JhdGUgb24gdGhlIHVwY29taW5nIHNlbnRlbmNlLlwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiUmVwaHJhc2VcIjpcclxuICAgICAgICB0aGlzLnN1YlF1ZXJ5ID0gdGhpcy5jaGlwVmFsdWUgKyBcIiByZXBocmFzZSB0aGUgdXBjb21pbmcgc2VudGVuY2UuXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJDb3JyZWN0IEdyYW1tYXJcIjpcclxuICAgICAgICB0aGlzLnN1YlF1ZXJ5ID0gXCJDb3JyZWN0IHRoZSBncmFtbWFyIG9mIHRoZSB1cGNvbWluZyBzZW50ZW5jZS5cIjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlRyYW5zbGF0ZVwiOlxyXG4gICAgICAgIHRoaXMuc3ViUXVlcnkgPVxyXG4gICAgICAgICAgXCJUcmFuc2xhdGUgdGhlIHVwY29taW5nIHNlbnRlbmNlIHRvIFwiICsgdGhpcy50cmFuc2xhdGVsYW5ndWFnZSArIFwiLlwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiU2VudGltZW50IEFuYWx5c2lzXCI6XHJcbiAgICAgICAgdGhpcy5pc1NlbnRpbWVudENoZWNrID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN1YlF1ZXJ5ID1cclxuICAgICAgICAgICdBbmFseXplIHRoZSBzZW50aW1lbnQgYW5kIGdyYW1tYXIgb2YgdGhlIGZvbGxvd2luZyBwYXJhZ3JhcGhzIGFuZCBwcm92aWRlIHRoZSBleHByZXNzaW9uIHNjb3JlIHdpdGggYW4gZW1vamkgZm9sbG93ZWQgYnkgdGhlIHNlbnRpbWVudCBpbiB0aGUgZm9ybWF0OiBcIvCfmIogTmV1dHJhbFwiLiBcXG5cXG5OT1RFOiBBdm9pZCBhbnkgYWRkaXRpb25hbCB0ZXh0IG9yIGV4cGxhbmF0aW9uOic7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZUFJU3VnZXNzdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUFJU3VnZXNzdGlvbnMoKTogdm9pZCB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5wcm9tcHRRdWVyeSkge1xyXG4gICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNrZWxldG9uSWRcIikgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPVxyXG4gICAgICAgICAgXCJcIjtcclxuICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyaWdodFJ0ZVwiKSBhcyBIVE1MRWxlbWVudCkuc3R5bGUuZGlzcGxheSA9XHJcbiAgICAgICAgICBcIm5vbmVcIjtcclxuICAgICAgICB0aGlzLnNlbnRpbWVudEJ1dHRvbi5lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICB0aGlzLnJlZ2VuZXJhdGVCdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY29weUJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZXBsYWNlQnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmFwaVJlc3VsdERhdGEgPSB0aGlzLmdldFJlc3BvbnNlRnJvbU9wZW5BSShcclxuICAgICAgICAgIHRoaXMuc3ViUXVlcnksXHJcbiAgICAgICAgICB0aGlzLnByb21wdFF1ZXJ5XHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmFwaVJlc3VsdERhdGEudGhlbigocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuQUlSZXN1bHQgPSB0aGlzLmlzU2VudGltZW50Q2hlY2sgPyB0aGlzLnByb21wdFF1ZXJ5IDogcmVzdWx0O1xyXG4gICAgICAgICAgdGhpcy5zZW50aW1lbnRCdXR0b24uY29udGVudCA9IHJlc3VsdFxyXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAuaW5jbHVkZXMoXCJwb3NpdGl2ZVwiKVxyXG4gICAgICAgICAgICA/IFwi8J+YiiBQb3NpdGl2ZVwiXHJcbiAgICAgICAgICAgIDogcmVzdWx0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJuZWdhdGl2ZVwiKVxyXG4gICAgICAgICAgICA/IFwi8J+YniBOZWdhdGl2ZVwiXHJcbiAgICAgICAgICAgIDogXCLwn5iQIE5ldXRyYWxcIjtcclxuICAgICAgICAgIHRoaXMuc2VudGltZW50QnV0dG9uLmVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICF0aGlzLmlzU2VudGltZW50Q2hlY2tcclxuICAgICAgICAgICAgPyBcIm5vbmVcIlxyXG4gICAgICAgICAgICA6IFwiXCI7XHJcbiAgICAgICAgICB0aGlzLnJpZ2h0UnRlLnZhbHVlID0gdGhpcy5BSVJlc3VsdDtcclxuICAgICAgICAgIHZhciBub1Jlc3VsdHNGb3VuZCA9ICEodGhpcy5BSVJlc3VsdCB8fCB0aGlzLnByb21wdFF1ZXJ5KTtcclxuICAgICAgICAgIChcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJuby1yZXN1bHRzLWZvdW5kXCIpIGFzIEhUTUxFbGVtZW50XHJcbiAgICAgICAgICApLnN0eWxlLmRpc3BsYXkgPSBub1Jlc3VsdHNGb3VuZCA/IFwiXCIgOiBcIm5vbmVcIjtcclxuICAgICAgICAgIHRoaXMucmVnZW5lcmF0ZUJ1dHRvbi5kaXNhYmxlZCA9IG5vUmVzdWx0c0ZvdW5kO1xyXG4gICAgICAgICAgdGhpcy5jb3B5QnV0dG9uLmRpc2FibGVkID0gbm9SZXN1bHRzRm91bmQ7XHJcbiAgICAgICAgICB0aGlzLnJlcGxhY2VCdXR0b24uZGlzYWJsZWQgPSBub1Jlc3VsdHNGb3VuZDtcclxuICAgICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNrZWxldG9uSWRcIikgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPVxyXG4gICAgICAgICAgICBcIm5vbmVcIjtcclxuICAgICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJpZ2h0UnRlXCIpIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5kaXNwbGF5ID1cclxuICAgICAgICAgICAgbm9SZXN1bHRzRm91bmQgPyBcIm5vbmVcIiA6IFwiXCI7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgbm9SZXN1bHRzRm91bmQsXHJcbiAgICAgICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJpZ2h0UnRlXCIpIGFzIEhUTUxFbGVtZW50KS5zdHlsZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIC8vIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgLy8gdGhpcy50b2FzdE9iai5zaG93KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRSZXNwb25zZUZyb21PcGVuQUkoXHJcbiAgICBzdWJRdWVyeTogc3RyaW5nLFxyXG4gICAgcHJvbXB0UXVlcnk6IHN0cmluZ1xyXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBjb25zdCBtZXNzYWdlcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIHJvbGU6IFwic3lzdGVtXCIsXHJcbiAgICAgICAgY29udGVudDogc3ViUXVlcnkuaW5jbHVkZXMoXHJcbiAgICAgICAgICBcImVtb2ppIGZvbGxvd2VkIGJ5IHRoZSBzZW50aW1lbnQgaW4gdGhlIGZvcm1hdFwiXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgPyBcIllvdSBhcmUgYSBoZWxwZnVsIGFzc2lzdGFudC4gUGxlYXNlIHJlc3BvbmQgaW4gc3RyaW5nIGZvcm1hdC5cIlxyXG4gICAgICAgICAgOiBcIk5PVEU6IFJldHVybiBzYW1lIGh0bWwgZm9ybWF0IGp1c3QgZG8gY2hhbmdlcyBjb250ZW50IG9ubHkuIGRvbid0IGNoYW5nZSBodG1sIGZvcm1hdHMuXCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICByb2xlOiBcInVzZXJcIixcclxuICAgICAgICBjb250ZW50OiBgJHtzdWJRdWVyeX0gJHtwcm9tcHRRdWVyeX1gLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdCBwYXJhbSA9IHtcclxuICAgICAgbWVzc2FnZXM6IG1lc3NhZ2VzLFxyXG4gICAgICBtYXhfdG9rZW5zOiAxMDAwLFxyXG4gICAgICB0ZW1wZXJhdHVyZTogMC43LFxyXG4gICAgICB0b3BfcDogMSxcclxuICAgICAgZnJlcXVlbmN5X3BlbmFsdHk6IDAsXHJcbiAgICAgIHByZXNlbmNlX3BlbmFsdHk6IDAsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICB0aGlzLmh0dHAucG9zdChcImFwaS9haS9jaGF0XCIsIHBhcmFtKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICFyZXNbXCJjaG9pY2VzXCJdIHx8XHJcbiAgICAgICAgICAhcmVzW1wiY2hvaWNlc1wiXVswXSB8fFxyXG4gICAgICAgICAgIXJlc1tcImNob2ljZXNcIl1bMF0ubWVzc2FnZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgcmVzb2x2ZShcInJlcXVlc3QgZXJyb3IhXCIpO1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByZXNwb25zZSBmb3JtYXQgZnJvbSBBSSBzZXJ2aWNlXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXNvbHZlKHJlc1tcImNob2ljZXNcIl1bMF0ubWVzc2FnZS5jb250ZW50KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRpYWxvZ1Nob3coKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlZ2VuZXJhdGVCdXR0b24hLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgdGhpcy51cGRhdGVBSVN1Z2Vzc3Rpb25zKCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuY29weUJ1dHRvbiEuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICB0aGlzLmNvcHlUZXh0VG9DbGlwYm9hcmQodGhpcy5BSVJlc3VsdCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMucmVwbGFjZUJ1dHRvbiEuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICBsZXQgcmFuZ2U6IFJhbmdlID0gKFxyXG4gICAgICAgIHRoaXMucnRlT2JqIGFzIGFueVxyXG4gICAgICApLmZvcm1hdHRlci5lZGl0b3JNYW5hZ2VyLm5vZGVTZWxlY3Rpb24uZ2V0UmFuZ2UoXHJcbiAgICAgICAgKHRoaXMucnRlT2JqIGFzIGFueSkuY29udGVudE1vZHVsZS5nZXREb2N1bWVudCgpXHJcbiAgICAgICk7XHJcbiAgICAgICh0aGlzLnJ0ZU9iaiBhcyBhbnkpLmZvcm1hdHRlci5lZGl0b3JNYW5hZ2VyLm5vZGVTZWxlY3Rpb24ucmVzdG9yZShyYW5nZSk7XHJcbiAgICAgICh0aGlzLnJ0ZU9iaiBhcyBhbnkpLmV4ZWN1dGVDb21tYW5kKFwiaW5zZXJ0SFRNTFwiLCB0aGlzLkFJUmVzdWx0LCB7XHJcbiAgICAgICAgdW5kbzogdHJ1ZSxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuY2xvc2VEaWFsb2coKTtcclxuICAgIH0pO1xyXG4gICAgKHRoaXMuQUlkaWFsb2cgYXMgRGlhbG9nQ29tcG9uZW50KS5lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VEaWFsb2coKTogdm9pZCB7XHJcbiAgICB0aGlzLkFJZGlhbG9nLmhpZGUoKTtcclxuICAgIHRoaXMucmlnaHRSdGUudmFsdWUgPSBcIlwiO1xyXG4gICAgdGhpcy5sZWZ0UnRlLnZhbHVlID0gXCJcIjtcclxuICAgIHRoaXMucHJvbXB0UXVlcnkgPSBcIlwiO1xyXG4gICAgdGhpcy5jaGlwVmFsdWUgPSBcIlN0YW5kYXJkXCI7XHJcbiAgICB0aGlzLkFJUmVzdWx0ID0gXCJcIjtcclxuICAgIHRoaXMuZHJvcFZhbEluZGV4ID0gMDtcclxuICAgIHRoaXMuc2VsZWN0ZWRRdWVyeSA9IFwiUmVwaHJhc2VcIjtcclxuICAgIHRoaXMuc2VudGltZW50QnV0dG9uLmNvbnRlbnQgPSBcIvCfmIogTmV1dHJhbFwiO1xyXG4gICAgdGhpcy5zaXplID0gXCJcIjtcclxuICB9XHJcblxyXG4gIGNvcHlUZXh0VG9DbGlwYm9hcmQodGV4dDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCkge1xyXG4gICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkXHJcbiAgICAgICAgLndyaXRlVGV4dCh0ZXh0KVxyXG4gICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiVGV4dCBjb3BpZWQgdG8gY2xpcGJvYXJkIHN1Y2Nlc3NmdWxseSFcIik7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjb3B5IHRleHQ6IFwiLCBlcnIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gRmFsbGJhY2sgZm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgdGhlIENsaXBib2FyZCBBUElcclxuICAgICAgY29uc3QgdGV4dGFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGV4dGFyZWFcIik7XHJcbiAgICAgIHRleHRhcmVhLnZhbHVlID0gdGV4dDtcclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXh0YXJlYSk7XHJcbiAgICAgIHRleHRhcmVhLnNlbGVjdCgpO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiY29weVwiKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlRleHQgY29waWVkIHRvIGNsaXBib2FyZCB1c2luZyBleGVjQ29tbWFuZFwiKTtcclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjb3B5IHRleHQ6IFwiLCBlcnIpO1xyXG4gICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGV4dGFyZWEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk92ZXJsYXlDbGljaygpOiB2b2lkIHtcclxuICAgIGxldCBhY3RpdmVFbGU6IEhUTUxFbGVtZW50IHwgbnVsbCA9IHRoaXMuQUlkaWFsb2cuZWxlbWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICBcIi5jaGFyX2Jsb2NrLmUtYWN0aXZlXCJcclxuICAgICk7XHJcbiAgICBpZiAoYWN0aXZlRWxlKSB7XHJcbiAgICAgIGFjdGl2ZUVsZS5jbGFzc0xpc3QucmVtb3ZlKFwiZS1hY3RpdmVcIik7XHJcbiAgICB9XHJcbiAgICAvL3RoaXMuY2xvc2VEaWFsb2coKTtcclxuICB9XHJcblxyXG4gIG9uUXVlcnlTZWxlY3QoYXJncykge1xyXG4gICAgLy8gdGhpcy5jaGlwTGlzdC5zZWxlY3RlZENoaXBzID0gMDtcclxuICAgIHRoaXMudHJhbnNsYXRlbGFuZ3VhZ2UgPSBcIkVOXCI7XHJcbiAgICB0aGlzLnNlbGVjdGVkUXVlcnkgPSBhcmdzLml0ZW1EYXRhLnRleHQ7XHJcbiAgICB0aGlzLnVwZGF0ZUFJU3VnZXNzdGlvbnNEYXRhKGFyZ3MuaXRlbURhdGEudGV4dCk7XHJcbiAgfVxyXG5cclxuICBvbkxhbmd1YWdlU2VsZWN0KGFyZ3M6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy50cmFuc2xhdGVsYW5ndWFnZSA9IGFyZ3MuaXRlbURhdGEuaWQ7XHJcbiAgICB0aGlzLnVwZGF0ZUFJU3VnZXNzdGlvbnNEYXRhKFwiVHJhbnNsYXRlXCIpO1xyXG4gIH1cclxuXHJcbiAgb25DaGlwQ2xpY2soYXJnczogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmNoaXBWYWx1ZSA9IGFyZ3MuaXRlbURhdGEudGV4dDtcclxuICAgIC8vIOS6i+S7tuS8muinpuWPkeS4pOasoSDlv4XpobvliKTmlq1hcmdzLnRleHTmmK/lkKbmnInlgLxcclxuICAgIGlmIChhcmdzLml0ZW1EYXRhLnRleHQpIHRoaXMudXBkYXRlQUlTdWdlc3N0aW9uc0RhdGEoXCJSZXBocmFzZVwiKTtcclxuICB9XHJcblxyXG4gIF90b29sYmFyQ2xpY2soYXJncykge1xyXG4gICAgdGhpcy50b29sYmFyQ2xpY2suZW1pdChhcmdzKTtcclxuICB9XHJcblxyXG4gIF9hY3Rpb25CZWdpbihhcmdzKSB7XHJcbiAgICB0aGlzLmFjdGlvbkJlZ2luLmVtaXQoYXJncyk7XHJcbiAgfVxyXG4gIF9pbnB1dChhcmdzKSB7XHJcbiAgICB0aGlzLmlucHV0LmVtaXQoYXJncyk7XHJcbiAgfVxyXG4gIF9hY3Rpb25Db21wbGV0ZShhcmdzKSB7XHJcbiAgICBjb25zb2xlLmxvZyhhcmdzKTtcclxuICAgIGlmIChhcmdzLnJlcXVlc3RUeXBlID09IFwiVUxcIikge1xyXG4gICAgICBpZiAoYXJncy5lbGVtZW50c1swXS5wYXJlbnRFbGVtZW50LnN0eWxlLmxpc3RTdHlsZVR5cGUgPT0gXCJkYXNoXCIpIHtcclxuICAgICAgICAvLyBBcHBseSBjdXN0b20gc3R5bGluZyBmb3IgZGFzaCBidWxsZXRzXHJcbiAgICAgICAgYXJncy5lbGVtZW50c1swXS5wYXJlbnRFbGVtZW50LnN0eWxlLmxpc3RTdHlsZUltYWdlID1cclxuICAgICAgICAgIFwidXJsKCcuLi8uLi8uLi9hc3NldHMvaW1nL2J1bGxldC1kYXNoLnN2ZycpXCI7XHJcbiAgICAgICAgYXJncy5lbGVtZW50c1swXS5wYXJlbnRFbGVtZW50LnN0eWxlLmxpc3RTdHlsZVR5cGUgPSBcIm5vbmVcIjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChhcmdzLnJlcXVlc3RUeXBlID09IFwiT0xcIikge1xyXG4gICAgICBhcmdzLmVsZW1lbnRzWzBdLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcclxuICAgICAgICBcImN1c3RvbS1saXN0XCIsXHJcbiAgICAgICAgXCJwYXJlbnRoZXNlc1wiXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChhcmdzLmVsZW1lbnRzWzBdLnBhcmVudEVsZW1lbnQuc3R5bGUubGlzdFN0eWxlVHlwZSA9PSBcInBhcmVudGhlc2VzXCIpIHtcclxuICAgICAgICBhcmdzLmVsZW1lbnRzWzBdLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0ID0gXCJjdXN0b20tbGlzdFwiO1xyXG4gICAgICAgIGFyZ3MuZWxlbWVudHNbMF0ucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwicGFyZW50aGVzZXNcIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuYWN0aW9uQ29tcGxldGUuZW1pdChhcmdzKTtcclxuICB9XHJcblxyXG4gIF9mb2N1cyhhcmdzKSB7XHJcbiAgICB0aGlzLmZvY3VzLmVtaXQoYXJncyk7XHJcbiAgfVxyXG4gIF9ibHVyKGFyZ3MpIHtcclxuICAgIHRoaXMuYmx1ci5lbWl0KGFyZ3MpO1xyXG4gIH1cclxuICBfZGlhbG9nT3BlbihhcmdzKSB7XHJcbiAgICBpZiAoYXJncy5lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcImUtcnRlLWVkaXQtdGFibGVcIikpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdmFyIHJvd0JveCA9IChcclxuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZS10YWJsZS1yb3cuZS1udW1lcmljdGV4dGJveFwiKVswXSBhcyBhbnlcclxuICAgICAgICApLmVqMl9pbnN0YW5jZXNbMF07XHJcbiAgICAgICAgdmFyIGNvbHVtbkJveCA9IChcclxuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXHJcbiAgICAgICAgICAgIFwiLmUtdGFibGUtY29sdW1uLmUtbnVtZXJpY3RleHRib3hcIlxyXG4gICAgICAgICAgKVswXSBhcyBhbnlcclxuICAgICAgICApLmVqMl9pbnN0YW5jZXNbMF07XHJcbiAgICAgICAgcm93Qm94LmNoYW5nZSA9ICgpID0+IHtcclxuICAgICAgICAgIGlmIChyb3dCb3gudmFsdWUgPiA1MCkge1xyXG4gICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcclxuICAgICAgICAgICAgICAgIFwiLmUtcnRlLWVsZW1lbnRzLmUtaW5zZXJ0LXRhYmxlXCJcclxuICAgICAgICAgICAgICApWzBdIGFzIGFueVxyXG4gICAgICAgICAgICApLmVqMl9pbnN0YW5jZXNbMF0uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZy5zaG93Tm90aWZpY2F0aW9uKFxyXG4gICAgICAgICAgICAgIFwiVGhlIHJvdyBudW1iZXIgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDUwLlwiLFxyXG4gICAgICAgICAgICAgIHsgc3RhdHVzOiBcIldhcm5pbmdcIiB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcclxuICAgICAgICAgICAgICAgIFwiLmUtcnRlLWVsZW1lbnRzLmUtaW5zZXJ0LXRhYmxlXCJcclxuICAgICAgICAgICAgICApWzBdIGFzIGFueVxyXG4gICAgICAgICAgICApLmVqMl9pbnN0YW5jZXNbMF0uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbHVtbkJveC5jaGFuZ2UgPSAoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoY29sdW1uQm94LnZhbHVlID4gMjUpIHtcclxuICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXHJcbiAgICAgICAgICAgICAgICBcIi5lLXJ0ZS1lbGVtZW50cy5lLWluc2VydC10YWJsZVwiXHJcbiAgICAgICAgICAgICAgKVswXSBhcyBhbnlcclxuICAgICAgICAgICAgKS5lajJfaW5zdGFuY2VzWzBdLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2cuc2hvd05vdGlmaWNhdGlvbihcclxuICAgICAgICAgICAgICBcIlRoZSBjb2x1bW4gbnVtYmVyIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAyNS5cIixcclxuICAgICAgICAgICAgICB7IHN0YXR1czogXCJXYXJuaW5nXCIgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXHJcbiAgICAgICAgICAgICAgICBcIi5lLXJ0ZS1lbGVtZW50cy5lLWluc2VydC10YWJsZVwiXHJcbiAgICAgICAgICAgICAgKVswXSBhcyBhbnlcclxuICAgICAgICAgICAgKS5lajJfaW5zdGFuY2VzWzBdLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoaWRlVG9hc3QoKSB7XHJcbiAgICB0aGlzLnNob3dNc2cgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uWm9vbSgpIHtcclxuICAgIGlmICh0aGlzLnNpemUgPT09IFwibGFyZ2VzdFwiKSB7XHJcbiAgICAgIHRoaXMuc2l6ZSA9IFwiXCI7IC8vIOaBouWkjeWIsOWOn+Wni+Wkp+Wwj1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zaXplID0gXCJsYXJnZXN0XCI7IC8vIOiuvue9ruS4uuacgOWkp+WMllxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZWRpdG9yX2JveFwiIGlkPVwiY29udGFpbmVyXCI+XHJcbiAgPGVqcy1yaWNodGV4dGVkaXRvclxyXG4gICAgI2VkaXRvclxyXG4gICAgW2lkXT1cImVkaXRvcklkXCJcclxuICAgIFtoZWlnaHRdPVwiaGVpZ2h0XCJcclxuICAgIFtzYXZlSW50ZXJ2YWxdPVwiMFwiXHJcbiAgICBbYXV0b1NhdmVPbklkbGVdPVwiYXV0b1NhdmVPbklkbGVcIlxyXG4gICAgW3Rvb2xiYXJTZXR0aW5nc109XCJ0b29sc1wiXHJcbiAgICBbYnVsbGV0Rm9ybWF0TGlzdF09XCJidWxsZXRGb3JtYXRMaXN0XCJcclxuICAgIFtudW1iZXJGb3JtYXRMaXN0XT1cIm51bWJlckZvcm1hdExpc3RcIlxyXG4gICAgW2ZvbnRGYW1pbHldPVwiZmFtaWx5XCJcclxuICAgIFtmb250U2l6ZV09XCJmb250U2l6ZVwiXHJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgW2luc2VydEltYWdlU2V0dGluZ3NdPVwiaW5zZXJ0SW1hZ2VTZXR0aW5nc1wiXHJcbiAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcclxuICAgIChhY3Rpb25CZWdpbik9XCJfYWN0aW9uQmVnaW4oJGV2ZW50KVwiXHJcbiAgICAoY2hhbmdlKT1cIm9uQ29udGVudENoYW5nZSgkZXZlbnQpXCJcclxuICAgIChjcmVhdGVkKT1cIm9uQ3JlYXRlKClcIlxyXG4gICAgKHRvb2xiYXJDbGljayk9XCJfdG9vbGJhckNsaWNrKCRldmVudClcIlxyXG4gICAgKGlucHV0KT1cIl9pbnB1dCgkZXZlbnQpXCJcclxuICAgIChmb2N1cyk9XCJfZm9jdXMoJGV2ZW50KVwiXHJcbiAgICAoYmx1cik9XCJfYmx1cigkZXZlbnQpXCJcclxuICAgIChhY3Rpb25Db21wbGV0ZSk9XCJfYWN0aW9uQ29tcGxldGUoJGV2ZW50KVwiXHJcbiAgICAoZGlhbG9nT3Blbik9XCJfZGlhbG9nT3BlbigkZXZlbnQpXCJcclxuICA+XHJcbiAgPC9lanMtcmljaHRleHRlZGl0b3I+XHJcbiAgPGVqcy1kaWFsb2dcclxuICAgICNBSWRpYWxvZ1xyXG4gICAgaWQ9XCJBSWRpYWxvZ1wiXHJcbiAgICBbbmdDbGFzc109XCJzaXplXCJcclxuICAgIFt2aXNpYmxlXT1cImZhbHNlXCJcclxuICAgIFt0YXJnZXRdPVwidGFyZ2V0XCJcclxuICAgIFtpc01vZGFsXT1cInRydWVcIlxyXG4gICAgW2hlaWdodF09XCJkaWFsb2dIZWlnaHRcIlxyXG4gICAgW3dpZHRoXT1cImRpYWxvZ1dpZHRoXCJcclxuICAgIG1heEhlaWdodD1cIjgwJVwiXHJcbiAgICBjc3NDbGFzcz1cImUtcnRlLWVsZW1lbnRzIGN1c3RvbS1kaWFsb2ctcnRlXCJcclxuICAgIHpJbmRleD1cIjEwMDBcIlxyXG4gICAgKGNsb3NlKT1cImNsb3NlRGlhbG9nKClcIlxyXG4gICAgKG92ZXJsYXlDbGljayk9XCJvbk92ZXJsYXlDbGljaygpXCJcclxuICAgIChvcGVuKT1cImRpYWxvZ1Nob3coKVwiXHJcbiAgPlxyXG4gICAgPG5nLXRlbXBsYXRlICNoZWFkZXI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItdGl0bGVcIj5BSSBBc3Npc3Q8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1idXR0b25zXCI+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dab29tQnRuXCIgY2xhc3M9XCJoZWFkZXItem9vbVwiIChjbGljayk9XCJvblpvb20oKVwiPlxyXG4gICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICBjbGFzcz1cImhlYWRlci1pY29uXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJzaXplID09PSAnbGFyZ2VzdCdcIlxyXG4gICAgICAgICAgICBzcmM9XCIuLi8uLi8uLi9hc3NldHMvaW1nL2RpYWxvZy1zaHJpbmsuc3ZnXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLWljb25cIlxyXG4gICAgICAgICAgICAqbmdJZj1cInNpemUgIT09ICdsYXJnZXN0J1wiXHJcbiAgICAgICAgICAgIHNyYz1cIi4uLy4uLy4uL2Fzc2V0cy9pbWcvZGlhbG9nLWdyb3cuc3ZnXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1idG5cIiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiPlxyXG4gICAgICAgICAgPGltZyBjbGFzcz1cImhlYWRlci1pY29uXCIgc3JjPVwiLi4vLi4vLi4vYXNzZXRzL2ltZy9kaWFsb2ctY2xvc2Uuc3ZnXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNmb290ZXJUZW1wbGF0ZT5cclxuICAgICAgPGRpdiBpZD1cImRpYWxvZy1mb290ZXItY29udGVudFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tcm93LTBcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJjdXNjb2wtMFwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogbGVmdFwiXHJcbiAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiY3VzY29sLTFcIlxyXG4gICAgICAgICAgICBzdHlsZT1cIlxyXG4gICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHQ7IHdpZHRoOiAxMDAlXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgZWpzLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgI3NlbnRpbWVudEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY29udGVudD1cIvCfmIogTmV1dHJhbFwiXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIGNzc0NsYXNzPVwic2VudGltZW50XCJcclxuICAgICAgICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgZWpzLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgI2NvcHlCdXR0b25cclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ9XCJDb3B5XCJcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3B5LWJ0blwiXHJcbiAgICAgICAgICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGVqcy1idXR0b25cclxuICAgICAgICAgICAgICAgICNyZXBsYWNlQnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjb250ZW50PVwiUmVwbGFjZVwiXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNjb250ZW50PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWNvbnRlbnRcIiBzdHlsZT1cImhlaWdodDogMTAwJVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tcm93LTBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXNjb2wtMFwiIHN0eWxlPVwid2lkdGg6IDEwMCVcIj5cclxuICAgICAgICAgICAgPGVqcy1kcm9wZG93bmxpc3RcclxuICAgICAgICAgICAgICAjcXVlcnlDYXRlZ29yeVxyXG4gICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDIwMHB4XCJcclxuICAgICAgICAgICAgICBpZD1cInF1ZXJ5Q2F0ZWdvcnlcIlxyXG4gICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cInF1ZXJ5TGlzdFwiXHJcbiAgICAgICAgICAgICAgaW5kZXg9XCIwXCJcclxuICAgICAgICAgICAgICBbZmllbGRzXT1cInsgdGV4dDogJ3RleHQnLCB2YWx1ZTogJ2lkJyB9XCJcclxuICAgICAgICAgICAgICAoc2VsZWN0KT1cIm9uUXVlcnlTZWxlY3QoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICBSZXBocmFzZVxyXG4gICAgICAgICAgICA8L2Vqcy1kcm9wZG93bmxpc3Q+XHJcbiAgICAgICAgICAgIDxlanMtZHJvcGRvd25saXN0XHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZFF1ZXJ5ID09ICdSZXBocmFzZSdcIlxyXG4gICAgICAgICAgICAgIGlkPVwiY2hpcHMtY29udGFpbmVyXCJcclxuICAgICAgICAgICAgICAjY2hpcExpc3RcclxuICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxNjBweFwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjaGlwVmFsdWVcIlxyXG4gICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cInJlcGhyYXNlVHlsZUxpc3RcIlxyXG4gICAgICAgICAgICAgIFtmaWVsZHNdPVwieyB0ZXh0OiAndGV4dCcsIHZhbHVlOiAnaWQnIH1cIlxyXG4gICAgICAgICAgICAgIChzZWxlY3QpPVwib25DaGlwQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9lanMtZHJvcGRvd25saXN0PlxyXG4gICAgICAgICAgICA8ZWpzLWRyb3Bkb3dubGlzdFxyXG4gICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRRdWVyeSA9PSAnVHJhbnNsYXRlJ1wiXHJcbiAgICAgICAgICAgICAgI2xhbmd1YWdlQ2F0ZWdvcnlcclxuICAgICAgICAgICAgICBpbmRleD1cIjBcIlxyXG4gICAgICAgICAgICAgIGlkPVwibGFuZ3VhZ2UtQ2F0ZWdvcnlcIlxyXG4gICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cImxhbmd1YWdlTGlzdFwiXHJcbiAgICAgICAgICAgICAgW2ZpZWxkc109XCJ7IHRleHQ6ICd0ZXh0JywgdmFsdWU6ICdpZCcgfVwiXHJcbiAgICAgICAgICAgICAgKHNlbGVjdCk9XCJvbkxhbmd1YWdlU2VsZWN0KCRldmVudClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvZWpzLWRyb3Bkb3dubGlzdD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImN1c2NvbC0xXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJcclxuICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPCEtLSA8ZWpzLWNoaXBsaXN0XHJcbiAgICAgICAgICAgICAgaWQ9XCJjaGlwcy1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICNjaGlwTGlzdFxyXG4gICAgICAgICAgICAgIFtjaGlwc109XCJbJ1N0YW5kYXJkJywgJ0ZsdWVudCcsICdQcm9mZXNzaW9uYWwnXVwiXHJcbiAgICAgICAgICAgICAgc2VsZWN0aW9uPVwiU2luZ2xlXCJcclxuICAgICAgICAgICAgICBjc3NDbGFzcz1cImUtb3V0bGluZVwiXHJcbiAgICAgICAgICAgICAgW3NlbGVjdGVkQ2hpcHNdPVwiWzBdXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwib25DaGlwQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9lanMtY2hpcGxpc3Q+IC0tPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgZWpzLWJ1dHRvblxyXG4gICAgICAgICAgICAgICNyZWdlbmVyYXRlQnV0dG9uXHJcbiAgICAgICAgICAgICAgY29udGVudD1cIlJlZ2VuZXJhdGVcIlxyXG4gICAgICAgICAgICAgIGlzUHJpbWFyeT1cInRydWVcIlxyXG4gICAgICAgICAgICAgIGRpc2FibGVkPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXJvdy0xXCIgc3R5bGU9XCJoZWlnaHQ6IGNhbGMoMTAwJSAtIDQwcHgpXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiY3VzY29sLTBcIlxyXG4gICAgICAgICAgICBzdHlsZT1cIlxyXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogbGVmdDtcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246IGxlZnQ7IGhlaWdodDogMTAwJVwiPlxyXG4gICAgICAgICAgICAgIDxlanMtcmljaHRleHRlZGl0b3JcclxuICAgICAgICAgICAgICAgICNsZWZ0UnRlXHJcbiAgICAgICAgICAgICAgICBpZD1cImxlZnRSdGVcIlxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTAwJVwiXHJcbiAgICAgICAgICAgICAgICBbdG9vbGJhclNldHRpbmdzXT1cInsgZW5hYmxlOiBmYWxzZSB9XCJcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQW5hbHlzaXMgb2YgQUkgU3VwcG9ydFwiXHJcbiAgICAgICAgICAgICAgICBjc3NDbGFzcz1cImUtb3V0bGluZVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwvZWpzLXJpY2h0ZXh0ZWRpdG9yPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImN1c2NvbC0xXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJcclxuICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBsZWZ0OyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlXCI+XHJcbiAgICAgICAgICAgICAgPGVqcy1yaWNodGV4dGVkaXRvclxyXG4gICAgICAgICAgICAgICAgI3JpZ2h0UnRlXHJcbiAgICAgICAgICAgICAgICBpZD1cInJpZ2h0UnRlXCJcclxuICAgICAgICAgICAgICAgIGhlaWdodD1cIjEwMCVcIlxyXG4gICAgICAgICAgICAgICAgW3Rvb2xiYXJTZXR0aW5nc109XCJ7IGVuYWJsZTogZmFsc2UgfVwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkFuYWx5c2lzIG9mIEFJIFN1cHBvcnRcIlxyXG4gICAgICAgICAgICAgICAgY3NzQ2xhc3M9XCJlLW91dGxpbmVcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDwhLS0gc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgLS0+XHJcbiAgICAgICAgICAgICAgPC9lanMtcmljaHRleHRlZGl0b3I+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJuby1yZXN1bHRzLWZvdW5kXCJcclxuICAgICAgICAgICAgICAgIGlkPVwibm8tcmVzdWx0cy1mb3VuZFwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmU7IGhlaWdodDogMjQ0cHg7IGFsaWduLWNvbnRlbnQ6IGNlbnRlclwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9XCI1MFwiXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoPVwiNTBcIlxyXG4gICAgICAgICAgICAgICAgICBzcmM9XCJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vY2RuLWJvbGRkZXNrL2FnZW50LWFuZ3VsYXItYXBwL2ltYWdlcy9saWdodC9uby1yZWNvcmRzLXdhcm5pbmcuc3ZnXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8ZGl2Pk5vIHJlc3VsdHMgZm91bmQ8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGlkPVwic2tlbGV0b25JZFwiPlxyXG4gICAgICAgICAgICAgICAgPGVqcy1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgICAjc2tlbGV0b25JZDFcclxuICAgICAgICAgICAgICAgICAgc2hhcGU9XCJSZWN0YW5nbGVcIlxyXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxNnB4XCJcclxuICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcclxuICAgICAgICAgICAgICAgID48L2Vqcy1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgPGVqcy1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgICAjc2tlbGV0b25JZDJcclxuICAgICAgICAgICAgICAgICAgc2hhcGU9XCJSZWN0YW5nbGVcIlxyXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxNnB4XCJcclxuICAgICAgICAgICAgICAgICAgd2lkdGg9XCI5MCVcIlxyXG4gICAgICAgICAgICAgICAgPjwvZWpzLXNrZWxldG9uXHJcbiAgICAgICAgICAgICAgICA+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICA8ZWpzLXNrZWxldG9uXHJcbiAgICAgICAgICAgICAgICAgICNza2VsZXRvbklkM1xyXG4gICAgICAgICAgICAgICAgICBzaGFwZT1cIlJlY3RhbmdsZVwiXHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE2cHhcIlxyXG4gICAgICAgICAgICAgICAgICB3aWR0aD1cIjcwJVwiXHJcbiAgICAgICAgICAgICAgICA+PC9lanMtc2tlbGV0b25cclxuICAgICAgICAgICAgICAgID48YnIgLz5cclxuICAgICAgICAgICAgICAgIDxlanMtc2tlbGV0b25cclxuICAgICAgICAgICAgICAgICAgI3NrZWxldG9uSWQ0XHJcbiAgICAgICAgICAgICAgICAgIHNoYXBlPVwiUmVjdGFuZ2xlXCJcclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTZweFwiXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoPVwiNTAlXCJcclxuICAgICAgICAgICAgICAgID48L2Vqcy1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgPGVqcy1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgICAjc2tlbGV0b25JZDVcclxuICAgICAgICAgICAgICAgICAgc2hhcGU9XCJSZWN0YW5nbGVcIlxyXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxNnB4XCJcclxuICAgICAgICAgICAgICAgICAgd2lkdGg9XCIzMCVcIlxyXG4gICAgICAgICAgICAgICAgPjwvZWpzLXNrZWxldG9uXHJcbiAgICAgICAgICAgICAgICA+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICA8ZWpzLXNrZWxldG9uXHJcbiAgICAgICAgICAgICAgICAgICNza2VsZXRvbklkNlxyXG4gICAgICAgICAgICAgICAgICBzaGFwZT1cIlJlY3RhbmdsZVwiXHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE2cHhcIlxyXG4gICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwJVwiXHJcbiAgICAgICAgICAgICAgICA+PC9lanMtc2tlbGV0b25cclxuICAgICAgICAgICAgICAgID48YnIgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvZWpzLWRpYWxvZz5cclxuICA8ZGl2IGNsYXNzPVwidG9hc3RcIiAqbmdJZj1cInNob3dNc2dcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwidG9hc3RfdGV4dFwiPkZpcnN0LCBTZWxlY3Qgc29tZSB0ZXh0PC9zcGFuXHJcbiAgICA+PHNwYW4gY2xhc3M9XCJjbG9zZV9pY29uXCIgKGNsaWNrKT1cImhpZGVUb2FzdCgpXCI+PC9zcGFuPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
731
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFpc2UtY29tbW9uLWxpYi9zcmMvbGliL2Zvcm0vcmljaHRleHRlZGl0b3IvaW5kZXguY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFpc2UtY29tbW9uLWxpYi9zcmMvbGliL2Zvcm0vcmljaHRleHRlZGl0b3IvaW5kZXguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFFVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFRdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBT3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7QUFZakQsTUFBTSxPQUFPLHVCQUF1QjtJQWdIeEI7SUFDQTtJQUNBO0lBQ0E7SUFqSEgsTUFBTSxDQUEwQjtJQUVoQyxhQUFhLENBQXlCO0lBRXRDLE9BQU8sQ0FBMkI7SUFFbEMsUUFBUSxDQUEyQjtJQUNNLFFBQVEsQ0FBbUI7SUFFcEUsZUFBZSxDQUFtQjtJQUVsQyxnQkFBZ0IsQ0FBbUI7SUFFbkMsVUFBVSxDQUFtQjtJQUU3QixhQUFhLENBQW1CO0lBQ3ZDLGlGQUFpRjtJQUV4RSxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDWCxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQ3RCLFlBQVksR0FBRyxHQUFHLENBQUM7SUFDbkIsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUNoQixjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFDLGNBQWM7SUFDcEMsbUJBQW1CLEdBQUc7UUFDN0IsVUFBVSxFQUFFLE1BQU07UUFDbEIsWUFBWSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztRQUM5QixPQUFPLEVBQUUsTUFBTTtLQUNoQixDQUFDO0lBQ08sb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0lBRTVCLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ2xDLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzVCLE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzdCLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ2pDLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzNCLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzNCLElBQUksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzFCLGNBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ3BDLGlCQUFpQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFFakQsTUFBTSxHQUFHLFVBQVUsQ0FBQztJQUNwQixRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ2hCLFdBQVcsR0FBRyxPQUFPLENBQUM7SUFDdEIsWUFBWSxHQUFHLE9BQU8sQ0FBQztJQUN2QixXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQ25CLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDaEIsYUFBYSxDQUFNO0lBQ25CLElBQUksR0FBRyxFQUFFLENBQUM7SUFDVixhQUFhLENBQUM7SUFDUCxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLFNBQVMsR0FBbUMsRUFBRSxDQUFDO0lBQy9DLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztJQUN0QixZQUFZLEdBQW1DLEVBQUUsQ0FBQztJQUNsRCxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLGdCQUFnQixHQUFZLEtBQUssQ0FBQztJQUNsQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ2QsaUJBQWlCLENBQVU7SUFDM0IsU0FBUyxHQUFHLFVBQVUsQ0FBQztJQUN2QixhQUFhLENBQU07SUFDbkIsUUFBUSxDQUFVO0lBQ3pCLEtBQUssQ0FBdUI7SUFDckIsZUFBZSxHQUFZLEtBQUssQ0FBQztJQUVqQyxnQkFBZ0IsR0FBRztRQUN4QixLQUFLLEVBQUU7WUFDTCxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtZQUMvQixFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtZQUM1QixFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtZQUM5QixFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtZQUM5QixvQ0FBb0M7WUFDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7U0FDN0I7S0FDRixDQUFDO0lBQ0ssZ0JBQWdCLEdBQUc7UUFDeEIsS0FBSyxFQUFFO1lBQ0wsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7WUFDL0IsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7WUFDeEM7Z0JBQ0UsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLEtBQUssRUFBRSxZQUFZO2FBQ3BCO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLGVBQWU7Z0JBQ3JCLEtBQUssRUFBRSxZQUFZO2FBQ3BCO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLEtBQUssRUFBRSxZQUFZO2FBQ3BCO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLEtBQUssRUFBRSxZQUFZO2FBQ3BCO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLGVBQWU7Z0JBQ3JCLEtBQUssRUFBRSxZQUFZO2FBQ3BCO1lBQ0Qsb0NBQW9DO1lBQ3BDO2dCQUNFLElBQUksRUFBRSxrQkFBa0I7Z0JBQ3hCLEtBQUssRUFBRSxhQUFhO2FBQ3JCO1NBQ0Y7S0FDRixDQUFDO0lBQ0YsV0FBVyxDQUFNO0lBRWpCLFlBQ1UsR0FBc0IsRUFDdEIsSUFBZ0IsRUFDaEIsTUFBcUIsRUFDckIsUUFBcUI7UUFIckIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLGFBQVEsR0FBUixRQUFRLENBQWE7SUFDNUIsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6RSxJQUFJLENBQUMsU0FBUyxHQUFHO1lBQ2YsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxXQUFXLEVBQUU7WUFDbEU7Z0JBQ0UsRUFBRSxFQUFFLFNBQVM7Z0JBQ2IsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxJQUFJLGtCQUFrQjthQUM3RDtZQUNELEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLElBQUksWUFBWSxFQUFFO1lBQ3JFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLElBQUksWUFBWSxFQUFFO1lBQ3JFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLElBQUksWUFBWSxFQUFFO1lBQ3JFO2dCQUNFLEVBQUUsRUFBRSxtQkFBbUI7Z0JBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixJQUFJLHFCQUFxQjthQUNuRTtTQUNGLENBQUM7UUFDRixJQUFJLENBQUMsZ0JBQWdCLEdBQUc7WUFDdEIsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxXQUFXLEVBQUU7WUFDbEUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxTQUFTLEVBQUU7WUFDNUQ7Z0JBQ0UsRUFBRSxFQUFFLGNBQWM7Z0JBQ2xCLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksSUFBSSxlQUFlO2FBQ3ZEO1NBQ0YsQ0FBQztRQUNGLElBQUksQ0FBQyxZQUFZLEdBQUc7WUFDbEIsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sSUFBSSxVQUFVLEVBQUU7WUFDMUQ7Z0JBQ0UsRUFBRSxFQUFFLElBQUk7Z0JBQ1IsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLElBQUksdUJBQXVCO2FBQ3JFO1lBQ0QsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sSUFBSSxVQUFVLEVBQUU7WUFDMUQ7Z0JBQ0UsRUFBRSxFQUFFLEtBQUs7Z0JBQ1QsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLElBQUksd0JBQXdCO2FBQ3ZFO1lBQ0QsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxRQUFRLEVBQUU7WUFDdEQsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxTQUFTLEVBQUU7WUFDeEQsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sSUFBSSxVQUFVLEVBQUU7WUFDMUQsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsSUFBSSxhQUFhLEVBQUU7WUFDaEUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sSUFBSSxVQUFVLEVBQUU7WUFDMUQsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxXQUFXLEVBQUU7WUFDNUQsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxTQUFTLEVBQUU7WUFDeEQsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxTQUFTLEVBQUU7WUFDeEQsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxTQUFTLEVBQUU7WUFDeEQsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sSUFBSSxVQUFVLEVBQUU7WUFDMUQsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sSUFBSSxVQUFVLEVBQUU7U0FDM0QsQ0FBQztRQUNGLE1BQU0saUJBQWlCLEdBQUcsNEJBQTRCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN0RSxJQUFJLENBQUMsS0FBSyxHQUFHO1lBQ1gsY0FBYyxFQUFFLEtBQUs7WUFDckIsS0FBSyxFQUFFO2dCQUNMO29CQUNFLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsSUFBSSxZQUFZO29CQUN2RCxRQUFRLEVBQUUsc0RBQXNELGlCQUFpQjs0REFFcEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLElBQUksWUFDaEM7NkJBQ1E7aUJBQ3BCO2dCQUNELE1BQU07Z0JBQ04sUUFBUTtnQkFDUixXQUFXO2dCQUNYLGVBQWU7Z0JBQ2YsVUFBVTtnQkFDVixVQUFVO2dCQUNWLFdBQVc7Z0JBQ1gsaUJBQWlCO2dCQUNqQixXQUFXO2dCQUNYLFdBQVc7Z0JBQ1gsR0FBRztnQkFDSCxhQUFhO2dCQUNiLFNBQVM7Z0JBQ1QsWUFBWTtnQkFDWixrQkFBa0I7Z0JBQ2xCLGtCQUFrQjtnQkFDbEIsU0FBUztnQkFDVCxRQUFRO2dCQUNSLEdBQUc7Z0JBQ0gsWUFBWTtnQkFDWixHQUFHO2dCQUNILGVBQWU7Z0JBQ2YsYUFBYTtnQkFDYixHQUFHO2dCQUNILE1BQU07Z0JBQ04sTUFBTTtnQkFDTixlQUFlO2FBQ2hCO1NBQ0YsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzdCLE1BQU0sSUFBSSxHQUFHO2dCQUNYLFdBQVcsRUFBRSxFQUFFO2dCQUNmLFFBQVEsRUFDTixzRkFBc0Y7b0JBQ3RGLG9RQUFvUTthQUN2USxDQUFDO1lBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDdEM7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLElBQUk7UUFDbEIsaUVBQWlFO1FBQ2pFLDhCQUE4QjtRQUM5QixpREFBaUQ7UUFDakQsMkNBQTJDO1FBQzNDLGlEQUFpRDtRQUNqRCx5Q0FBeUM7UUFDekMscURBQXFEO1FBQ3JELGlDQUFpQztRQUNqQyw2Q0FBNkM7UUFDN0MsZ0NBQWdDO1FBQ2hDLGtDQUFrQztRQUNsQyxvQ0FBb0M7UUFDcEMseUNBQXlDO1FBQ3pDLFFBQVE7UUFDUixNQUFNO1FBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVNLFFBQVE7UUFDYixxQkFBcUI7UUFDckIsNERBQTREO1FBQzVELHlDQUF5QztRQUN6Qyw2QkFBNkI7UUFDN0IsdUNBQXVDO1FBQ3ZDLHNDQUFzQztRQUN0QyxNQUFNO1FBQ04sNENBQTRDO1FBQzVDLGVBQWU7UUFDZixJQUFJLGlCQUFpQixHQUFHLElBQUksY0FBYyxDQUFDO1lBQ3pDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUztZQUNyQiwrREFBK0Q7WUFDL0QsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO1NBQ2pELENBQUMsQ0FBQztRQUNILGlCQUFpQixDQUFDLFFBQVEsQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU8sUUFBUSxDQUFDLElBQUk7UUFDbkIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDbEM7UUFDRCxJQUFJLEtBQUssR0FBVyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM1RCxLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1QyxLQUFLLENBQUMsQ0FBQyxDQUFpQixDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDN0Q7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxJQUFTO1FBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsWUFBWSxDQUFDLGFBQXFCO1FBQ2hDLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDbkMsSUFBSSxhQUFhLEVBQUU7WUFDakIsSUFBSSxLQUFLLEdBQ1AsSUFBSSxDQUFDLE1BQ04sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQzdDLElBQUksQ0FBQyxNQUFjLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUNqRCxDQUFDO1lBQ0QsSUFBSSxDQUFDLE1BQWMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQzdELEtBQUssRUFDSixJQUFJLENBQUMsTUFBYyxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FDakQsQ0FBQztZQUNGLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQzFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FDNUQsQ0FBQztZQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUM7WUFDdEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUM3QzthQUFNO1lBQ0wsdUJBQXVCO1lBQ3ZCLHFCQUFxQjtZQUNyQiwwQkFBMEI7WUFDMUIsWUFBWTtZQUNaLHlFQUF5RTtZQUV6RSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixJQUFJLHlCQUF5QixFQUNwRTtnQkFDRSxNQUFNLEVBQUUsU0FBUzthQUNsQixDQUNGLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxhQUFxQjtRQUMzQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLFFBQVEsYUFBYSxFQUFFO1lBQ3JCLEtBQUssV0FBVztnQkFDZCxJQUFJLENBQUMsUUFBUSxHQUFHLDBDQUEwQyxDQUFDO2dCQUMzRCxNQUFNO1lBQ1IsS0FBSyxXQUFXO2dCQUNkLElBQUksQ0FBQyxRQUFRLEdBQUcscUNBQXFDLENBQUM7Z0JBQ3RELE1BQU07WUFDUixLQUFLLFVBQVU7Z0JBQ2IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLGtDQUFrQyxDQUFDO2dCQUNwRSxNQUFNO1lBQ1IsS0FBSyxTQUFTO2dCQUNaLElBQUksQ0FBQyxRQUFRLEdBQUcsK0NBQStDLENBQUM7Z0JBQ2hFLE1BQU07WUFDUixLQUFLLFdBQVc7Z0JBQ2QsSUFBSSxDQUFDLFFBQVE7b0JBQ1gscUNBQXFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztnQkFDdkUsTUFBTTtZQUNSLEtBQUssbUJBQW1CO2dCQUN0QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2dCQUM3QixJQUFJLENBQUMsUUFBUTtvQkFDWCx5TkFBeU4sQ0FBQztnQkFDNU4sTUFBTTtTQUNUO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixJQUFJO1lBQ0YsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNuQixRQUFRLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBaUIsQ0FBQyxLQUFLLENBQUMsT0FBTztvQkFDbEUsRUFBRSxDQUFDO2dCQUNKLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFpQixDQUFDLEtBQUssQ0FBQyxPQUFPO29CQUNoRSxNQUFNLENBQUM7Z0JBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDbkMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO29CQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQzNDO2dCQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUM3QyxJQUFJLENBQUMsUUFBUSxFQUNiLElBQUksQ0FBQyxXQUFXLENBQ2pCLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtvQkFDdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztvQkFDbEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEdBQUcsTUFBTTt5QkFDbEMsV0FBVyxFQUFFO3lCQUNiLFFBQVEsQ0FBQyxVQUFVLENBQUM7d0JBQ3JCLENBQUMsQ0FBQyxhQUFhO3dCQUNmLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQzs0QkFDM0MsQ0FBQyxDQUFDLGFBQWE7NEJBQ2YsQ0FBQyxDQUFDLFlBQVksQ0FBQztvQkFDakIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7d0JBQ2pFLENBQUMsQ0FBQyxNQUFNO3dCQUNSLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztvQkFDcEMsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUV4RCxRQUFRLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUMzQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztvQkFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUM7b0JBQ2hELElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQztvQkFDMUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDO29CQUM3QyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUMxQixDQUFDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFBQyxNQUFNO1lBQ04sd0JBQXdCO1NBQ3pCO0lBQ0gsQ0FBQztJQUVELFlBQVksR0FBRyxFQUFFLENBQUM7SUFDbEIsS0FBSyxDQUFDLHFCQUFxQixDQUN6QixRQUFnQixFQUNoQixXQUFtQjtRQUVuQixNQUFNLFFBQVEsR0FBRztZQUNmO2dCQUNFLElBQUksRUFBRSxRQUFRO2dCQUNkLE9BQU8sRUFBRSxRQUFRLENBQUMsUUFBUSxDQUN4QiwrQ0FBK0MsQ0FDaEQ7b0JBQ0MsQ0FBQyxDQUFDLCtEQUErRDtvQkFDakUsQ0FBQyxDQUFDLHdGQUF3RjthQUM3RjtZQUNEO2dCQUNFLElBQUksRUFBRSxNQUFNO2dCQUNaLE9BQU8sRUFBRSxHQUFHLFFBQVEsSUFBSSxXQUFXLEVBQUU7YUFDdEM7U0FDRixDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQUc7WUFDWixRQUFRLEVBQUUsUUFBUTtZQUNsQixVQUFVLEVBQUUsSUFBSTtZQUNoQixXQUFXLEVBQUUsR0FBRztZQUNoQixLQUFLLEVBQUUsQ0FBQztZQUNSLGlCQUFpQixFQUFFLENBQUM7WUFDcEIsZ0JBQWdCLEVBQUUsQ0FBQztTQUNwQixDQUFDO1FBRUYsSUFBSTtZQUNGLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLG9CQUFvQixFQUFFO2dCQUNqRCxNQUFNLEVBQUUsTUFBTTtnQkFDZCxPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUU7Z0JBQy9DLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQzthQUM1QixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRTtnQkFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7YUFDM0Q7WUFDQSxRQUFRLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBaUIsQ0FBQyxLQUFLLENBQUMsT0FBTztnQkFDbEUsTUFBTSxDQUFDO1lBQ1IsUUFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQWlCLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDeEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDekIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN6QyxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sSUFBSSxFQUFFO2dCQUNYLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzVDLElBQUksSUFBSSxFQUFFO29CQUNSLE1BQU07aUJBQ1A7Z0JBQ0QsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDdEQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7b0JBQ3hCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTt3QkFDN0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDdEMsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFOzRCQUNyQixvQkFBb0I7NEJBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQzt5QkFDMUI7d0JBQ0QsSUFBSTs0QkFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNoQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQzs0QkFDcEQsSUFBSSxPQUFPLEVBQUU7Z0NBQ1gsSUFBSSxDQUFDLFlBQVksSUFBSSxPQUFPLENBQUM7Z0NBQzdCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7NkJBQ2hEO3lCQUNGO3dCQUFDLE9BQU8sQ0FBQyxFQUFFOzRCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7eUJBQ2pEO3FCQUNGO2lCQUNGO2FBQ0Y7WUFDRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDMUI7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sS0FBSyxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBRUQsVUFBVTtRQUNSLG1FQUFtRTtRQUNuRSxnQ0FBZ0M7UUFDaEMsTUFBTTtRQUNOLDZEQUE2RDtRQUM3RCw2Q0FBNkM7UUFDN0MsTUFBTTtRQUNOLGdFQUFnRTtRQUNoRSx5QkFBeUI7UUFDekIseUJBQXlCO1FBQ3pCLHNEQUFzRDtRQUN0RCx1REFBdUQ7UUFDdkQsT0FBTztRQUNQLCtFQUErRTtRQUMvRSx1RUFBdUU7UUFDdkUsa0JBQWtCO1FBQ2xCLFFBQVE7UUFDUix3QkFBd0I7UUFDeEIsTUFBTTtRQUNMLElBQUksQ0FBQyxRQUE0QixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNoRSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQztRQUM1QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQztRQUNoQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUM7UUFDNUMsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELG1CQUFtQixDQUFDLElBQVk7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbEIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMxQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsVUFBVSxLQUFLLENBQUMsRUFBRTtZQUM1QyxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDckMsT0FBTztTQUNSO1FBQ0QsSUFBSTtZQUNGLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzVCLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QyxJQUFJLE9BQU8sRUFBRTtnQkFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7YUFDdkQ7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2FBQ3RDO1NBQ0Y7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDN0M7UUFFRCw2QkFBNkI7UUFDN0Isd0JBQXdCO1FBQ3hCLHVCQUF1QjtRQUN2QixvQkFBb0I7UUFDcEIsK0RBQStEO1FBQy9ELFNBQVM7UUFDVCx3QkFBd0I7UUFDeEIscURBQXFEO1FBQ3JELFVBQVU7UUFDVixXQUFXO1FBQ1gsbUVBQW1FO1FBQ25FLHlEQUF5RDtRQUN6RCwyQkFBMkI7UUFDM0IseUNBQXlDO1FBQ3pDLHVCQUF1QjtRQUN2QixVQUFVO1FBQ1Ysb0NBQW9DO1FBQ3BDLGlFQUFpRTtRQUNqRSxvQkFBb0I7UUFDcEIsbURBQW1EO1FBQ25ELGdCQUFnQjtRQUNoQiwyQ0FBMkM7UUFDM0MsTUFBTTtRQUNOLElBQUk7SUFDTixDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksU0FBUyxHQUF1QixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQ3JFLHNCQUFzQixDQUN2QixDQUFDO1FBQ0YsSUFBSSxTQUFTLEVBQUU7WUFDYixTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN4QztRQUNELHFCQUFxQjtJQUN2QixDQUFDO0lBRUQsYUFBYSxDQUFDLElBQUk7UUFDaEIsbUNBQW1DO1FBQ25DLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBUztRQUN4QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBUztRQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3BDLDRCQUE0QjtRQUM1QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSTtZQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQUk7UUFDaEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFJO1FBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUNELE1BQU0sQ0FBQyxJQUFJO1FBQ1QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUNELGVBQWUsQ0FBQyxJQUFJO1FBQ2xCLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLEVBQUU7WUFDNUIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLE1BQU0sRUFBRTtnQkFDaEUsd0NBQXdDO2dCQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsY0FBYztvQkFDakQsNENBQTRDLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO2FBQzdEO1NBQ0Y7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxFQUFFO1lBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQzdDLGFBQWEsRUFDYixhQUFhLENBQ2QsQ0FBQztZQUNGLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxhQUFhLEVBQUU7Z0JBQ3ZFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUM7Z0JBQ3pELElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDN0Q7U0FDRjtRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBSTtRQUNULElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxLQUFLLENBQUMsSUFBSTtRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxXQUFXLENBQUMsSUFBSTtRQUNkLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7WUFDdkQsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLE1BQU0sR0FDUixRQUFRLENBQUMsZ0JBQWdCLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDLENBQzdELENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuQixJQUFJLFNBQVMsR0FDWCxRQUFRLENBQUMsZ0JBQWdCLENBQ3ZCLGtDQUFrQyxDQUNuQyxDQUFDLENBQUMsQ0FDSixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbkIsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7b0JBQ25CLElBQUksTUFBTSxDQUFDLEtBQUssR0FBRyxFQUFFLEVBQUU7d0JBRW5CLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FDdkIsZ0NBQWdDLENBQ2pDLENBQUMsQ0FBQyxDQUNKLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7d0JBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQzFCLDBDQUEwQyxFQUMxQyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FDdEIsQ0FBQztxQkFDSDt5QkFBTTt3QkFFSCxRQUFRLENBQUMsZ0JBQWdCLENBQ3ZCLGdDQUFnQyxDQUNqQyxDQUFDLENBQUMsQ0FDSixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO3FCQUNyQztnQkFDSCxDQUFDLENBQUM7Z0JBQ0YsU0FBUyxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7b0JBQ3RCLElBQUksU0FBUyxDQUFDLEtBQUssR0FBRyxFQUFFLEVBQUU7d0JBRXRCLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FDdkIsZ0NBQWdDLENBQ2pDLENBQUMsQ0FBQyxDQUNKLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7d0JBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQzFCLDZDQUE2QyxFQUM3QyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FDdEIsQ0FBQztxQkFDSDt5QkFBTTt3QkFFSCxRQUFRLENBQUMsZ0JBQWdCLENBQ3ZCLGdDQUFnQyxDQUNqQyxDQUFDLENBQUMsQ0FDSixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO3FCQUNyQztnQkFDSCxDQUFDLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQUk7UUFDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsWUFBWSxDQUFDLFdBQW1CO1FBQzlCLE9BQU8sV0FBVzthQUNmLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDO2FBQ3JCLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDO2FBQ3JCLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDO2FBQ3RCLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDO2FBQ3ZCLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDM0IsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxVQUFVO1NBQzNCO2FBQU07WUFDTCxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxDQUFDLFNBQVM7U0FDakM7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksS0FBSyxHQUNQLElBQUksQ0FBQyxNQUNOLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUM3QyxJQUFJLENBQUMsTUFBYyxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FDakQsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFjLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxNQUFjLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQy9ELElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxjQUFjLENBQUMsT0FBTztRQUNwQixJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6RCxNQUFNLGlCQUFpQixHQUFHLFlBQVksRUFBRSxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN4RSxJQUFJLGlCQUFpQixFQUFFO1lBQ3JCLGlCQUFpQixDQUFDLFNBQVM7Z0JBQ3pCLGlCQUFpQixDQUFDLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxZQUFZLENBQUM7WUFDbEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFRCxVQUFVO1FBQ1AsSUFBSSxDQUFDLFFBQTRCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ2xFLElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQXVCLENBQUM7WUFDbEMsZUFBZSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRSxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsSUFBSSxtQkFBbUI7U0FDaEUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFVBQVU7UUFDUCxJQUFJLENBQUMsUUFBNEIsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDOUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBWTtRQUM1QixJQUFJLENBQUMsUUFBZ0IsQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVELENBQUM7d0dBanVCVSx1QkFBdUI7NEZBQXZCLHVCQUF1Qiw2NUNDbkNwQyxpaFZBOFNBOzs0RkQzUWEsdUJBQXVCO2tCQVBuQyxTQUFTOytCQUNFLG9CQUFvQjt1TEFRdkIsTUFBTTtzQkFEWixTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBRy9CLGFBQWE7c0JBRG5CLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFHdEMsT0FBTztzQkFEYixTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBR2hDLFFBQVE7c0JBRGQsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUVRLFFBQVE7c0JBQXZELFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFaEMsZUFBZTtzQkFEckIsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBR3hDLGdCQUFnQjtzQkFEdEIsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBR3pDLFVBQVU7c0JBRGhCLFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFHbkMsYUFBYTtzQkFEbkIsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUlwQyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUtHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFFSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNO2dCQUNHLEtBQUs7c0JBQWQsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBEcm9wRG93bkxpc3RDb21wb25lbnQgfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItZHJvcGRvd25zXCI7XHJcbmltcG9ydCB7XHJcbiAgUmljaFRleHRFZGl0b3JDb21wb25lbnQsXHJcbiAgVG9vbGJhclNldHRpbmdzTW9kZWwsXHJcbn0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLXJpY2h0ZXh0ZWRpdG9yXCI7XHJcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItYW5ndWxhci1idXR0b25zXCI7XHJcbmltcG9ydCB7IERyb3BEb3duQnV0dG9uIH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLXNwbGl0YnV0dG9uc1wiO1xyXG5pbXBvcnQgeyBEaWFsb2dDb21wb25lbnQgfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItcG9wdXBzXCI7XHJcbi8vIHNlcnZpY2VcclxuLy8gaW1wb3J0IHsgUGJGdW5TZXJ2aWNlIH0gZnJvbSBcIkBhcHAvc2VydmljZXMvcGItZnVuLnNlcnZpY2VcIjtcclxuLy8gaW1wb3J0IHsgU2hhcmVkU3luY2Z1c2lvbk1vZHVsZSB9IGZyb20gXCJAYXBwL21vZHVsZS9zeW5jZnVzaW9uTW9kdWxlXCI7XHJcbmltcG9ydCB7IE9wZW5BaU1vZGVsUlRFIH0gZnJvbSBcIi4vb3BlbmFwaVwiO1xyXG5pbXBvcnQgeyBsaW5lSGVpZ2h0X2l0ZW1zIH0gZnJvbSBcIi4vZGF0YS1jb25maWdcIjtcclxuaW1wb3J0IHsgZm9udEZhbWlseSwgc2l6ZSB9IGZyb20gXCIuL2RhdGEtY29uZmlnXCI7XHJcbmltcG9ydCB7IGdldEFJQ29uZmlnLCBpc0FJQ29uZmlnVmFsaWQsIEFJQ29uZmlnIH0gZnJvbSBcIi4vYWktY29uZmlnXCI7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZS9kaWFsb2cuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXJcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcInJzLXJpY2h0ZXh0LWVkaXRvclwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vaW5kZXguY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vaW5kZXguY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgLy8gc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAvLyBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBTaGFyZWRTeW5jZnVzaW9uTW9kdWxlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJpY2h0ZXh0ZWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKFwiZWRpdG9yXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHB1YmxpYyBydGVPYmo6IFJpY2hUZXh0RWRpdG9yQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJxdWVyeUNhdGVnb3J5XCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHB1YmxpYyBxdWVyeUNhdGVnb3J5ITogRHJvcERvd25MaXN0Q29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJsZWZ0UnRlXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHB1YmxpYyBsZWZ0UnRlITogUmljaFRleHRFZGl0b3JDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZChcInJpZ2h0UnRlXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHB1YmxpYyByaWdodFJ0ZSE6IFJpY2hUZXh0RWRpdG9yQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJBSWRpYWxvZ1wiLCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgQUlkaWFsb2chOiBEaWFsb2dDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZChcInNlbnRpbWVudEJ1dHRvblwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgc2VudGltZW50QnV0dG9uITogQnV0dG9uQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJyZWdlbmVyYXRlQnV0dG9uXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHB1YmxpYyByZWdlbmVyYXRlQnV0dG9uITogQnV0dG9uQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJjb3B5QnV0dG9uXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHB1YmxpYyBjb3B5QnV0dG9uITogQnV0dG9uQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJyZXBsYWNlQnV0dG9uXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHB1YmxpYyByZXBsYWNlQnV0dG9uITogQnV0dG9uQ29tcG9uZW50O1xyXG4gIC8vIEBWaWV3Q2hpbGQoXCJjaGlwTGlzdFwiLCB7IHN0YXRpYzogZmFsc2UgfSkgcHVibGljIGNoaXBMaXN0ITogQ2hpcExpc3RDb21wb25lbnQ7XHJcblxyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gXCJcIjtcclxuICBASW5wdXQoKSB2YWx1ZSA9IFwiXCI7XHJcbiAgQElucHV0KCkgZWRpdG9ySWQgPSBcImVkaXRvcklkXCI7XHJcbiAgQElucHV0KCkgc2F2ZUludGVydmFsID0gNTAwO1xyXG4gIEBJbnB1dCgpIGhlaWdodCA9IFwiYXV0b1wiO1xyXG4gIEBJbnB1dCgpIGF1dG9TYXZlT25JZGxlID0gdHJ1ZTtcclxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHRhcmdldCA9IFwiI21haW5QYWdlXCI7IC8vIGRpYWxvZyDlvLnnqpfniLbnuqdcclxuICBASW5wdXQoKSBpbnNlcnRJbWFnZVNldHRpbmdzID0ge1xyXG4gICAgc2F2ZUZvcm1hdDogXCJCbG9iXCIsXHJcbiAgICBhbGxvd2VkVHlwZXM6IFtcIi5zdmdcIiwgXCIucG5nXCJdLFxyXG4gICAgZGlzcGxheTogXCJub25lXCIsXHJcbiAgfTtcclxuICBASW5wdXQoKSBzaG93VGlja2V0QXR0YWNobWVudCA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgdG9vbGJhckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNyZWF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGFjdGlvbkJlZ2luID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBpbnB1dCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGFjdGlvbkNvbXBsZXRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBhZnRlclBhc3RlQ2xlYW51cCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgZmFtaWx5ID0gZm9udEZhbWlseTtcclxuICBmb250U2l6ZSA9IHNpemU7XHJcbiAgZGlhbG9nV2lkdGggPSBcIjgwMHB4XCI7XHJcbiAgZGlhbG9nSGVpZ2h0ID0gXCI2NDJweFwiO1xyXG4gIHNob3dab29tQnRuID0gdHJ1ZTtcclxuICBzaG93TXNnID0gZmFsc2U7XHJcbiAgZWRpdG9yTWFuYWdlcjogYW55O1xyXG4gIHNpemUgPSBcIlwiO1xyXG4gIHNlbGVjdGVkUXVlcnk7XHJcbiAgcHVibGljIGRyb3BWYWxJbmRleCA9IDA7XHJcbiAgcHVibGljIHF1ZXJ5TGlzdDogeyBpZDogc3RyaW5nOyB0ZXh0OiBzdHJpbmcgfVtdID0gW107XHJcbiAgcHVibGljIHJlcGhyYXNlVHlsZUxpc3QgPSBbXTtcclxuICBwdWJsaWMgbGFuZ3VhZ2VMaXN0OiB7IGlkOiBzdHJpbmc7IHRleHQ6IHN0cmluZyB9W10gPSBbXTtcclxuICBwdWJsaWMgcHJvbXB0UXVlcnkgPSBcIlwiO1xyXG4gIHB1YmxpYyBpc1NlbnRpbWVudENoZWNrOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHN1YlF1ZXJ5ID0gXCJcIjtcclxuICBwdWJsaWMgdHJhbnNsYXRlbGFuZ3VhZ2UhOiBzdHJpbmc7XHJcbiAgcHVibGljIGNoaXBWYWx1ZSA9IFwiU3RhbmRhcmRcIjtcclxuICBwdWJsaWMgYXBpUmVzdWx0RGF0YTogYW55O1xyXG4gIHB1YmxpYyBBSVJlc3VsdCE6IHN0cmluZztcclxuICB0b29sczogVG9vbGJhclNldHRpbmdzTW9kZWw7XHJcbiAgcHVibGljIGlzRGlhbG9nVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgYnVsbGV0Rm9ybWF0TGlzdCA9IHtcclxuICAgIHR5cGVzOiBbXHJcbiAgICAgIHsgdGV4dDogXCJOb25lXCIsIHZhbHVlOiBcIm5vbmVcIiB9LFxyXG4gICAgICB7IHRleHQ6IFwi4pePXCIsIHZhbHVlOiBcImRpc2NcIiB9LFxyXG4gICAgICB7IHRleHQ6IFwi4peLXCIsIHZhbHVlOiBcImNpcmNsZVwiIH0sXHJcbiAgICAgIHsgdGV4dDogXCLilqBcIiwgdmFsdWU6IFwic3F1YXJlXCIgfSxcclxuICAgICAgLy8gQWRkIHlvdXIgY3VzdG9tIGJ1bGxldCBzdHlsZSBoZXJlXHJcbiAgICAgIHsgdGV4dDogXCItXCIsIHZhbHVlOiBcImRhc2hcIiB9LFxyXG4gICAgXSxcclxuICB9O1xyXG4gIHB1YmxpYyBudW1iZXJGb3JtYXRMaXN0ID0ge1xyXG4gICAgdHlwZXM6IFtcclxuICAgICAgeyB0ZXh0OiBcIk5vbmVcIiwgdmFsdWU6IFwibm9uZVwiIH0sXHJcbiAgICAgIHsgdGV4dDogXCIxLCAyLCAzLCDigKZcIiwgdmFsdWU6IFwiZGVjaW1hbFwiIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0ZXh0OiBcIs6xLCDOsiwgzrMsIOKAplwiLFxyXG4gICAgICAgIHZhbHVlOiBcImxvd2VyR3JlZWtcIixcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRleHQ6IFwiaSwgaWksIGlpaSwg4oCmXCIsXHJcbiAgICAgICAgdmFsdWU6IFwibG93ZXJSb21hblwiLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGV4dDogXCJBLCBCLCBDLCDigKZcIixcclxuICAgICAgICB2YWx1ZTogXCJ1cHBlckFscGhhXCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0ZXh0OiBcImEsIGIsIGMsIOKAplwiLFxyXG4gICAgICAgIHZhbHVlOiBcImxvd2VyQWxwaGFcIixcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRleHQ6IFwiSSwgSUksIElJSSwg4oCmXCIsXHJcbiAgICAgICAgdmFsdWU6IFwidXBwZXJSb21hblwiLFxyXG4gICAgICB9LFxyXG4gICAgICAvLyBBZGQgeW91ciBjdXN0b20gYnVsbGV0IHN0eWxlIGhlcmVcclxuICAgICAge1xyXG4gICAgICAgIHRleHQ6IFwiKDEpLCAoMiksICgzKSwg4oCmXCIsXHJcbiAgICAgICAgdmFsdWU6IFwicGFyZW50aGVzZXNcIixcclxuICAgICAgfSxcclxuICAgIF0sXHJcbiAgfTtcclxuICB0cmFuc2xhdGlvbjogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgZGlhbG9nOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXJcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy50cmFuc2xhdGlvbiA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ0cmFuc2xhdGlvblwiKSkgfHwge307XHJcbiAgICB0aGlzLnF1ZXJ5TGlzdCA9IFtcclxuICAgICAgeyBpZDogXCJSZXBocmFzZVwiLCB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uLlJFUEhSQVNFIHx8IFwiLlJlcGhyYXNlXCIgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlkOiBcIkdyYW1tYXJcIixcclxuICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uLkNPUlJFQ1RfR1JBTU1BUiB8fCBcIi5Db3JyZWN0IEdyYW1tYXJcIixcclxuICAgICAgfSxcclxuICAgICAgeyBpZDogXCJTdW1tYXJpemVcIiwgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5TVU1NQVJJWkUgfHwgXCIuU3VtbWFyaXplXCIgfSxcclxuICAgICAgeyBpZDogXCJFbGFib3JhdGVcIiwgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5FTEFCT1JBVEUgfHwgXCIuRWxhYm9yYXRlXCIgfSxcclxuICAgICAgeyBpZDogXCJUcmFuc2xhdGVcIiwgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5UUkFOU0xBVEUgfHwgXCIuVHJhbnNsYXRlXCIgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlkOiBcIlNlbnRpbWVudEFuYWx5c2lzXCIsXHJcbiAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5TRU5USU1FTlRfQU5BTFlTSVMgfHwgXCIuU2VudGltZW50IEFuYWx5c2lzXCIsXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gICAgdGhpcy5yZXBocmFzZVR5bGVMaXN0ID0gW1xyXG4gICAgICB7IGlkOiBcIlN0YW5kYXJkXCIsIHRleHQ6IHRoaXMudHJhbnNsYXRpb24uU1RBTkRBUkQgfHwgXCIuU3RhbmRhcmRcIiB9LFxyXG4gICAgICB7IGlkOiBcIkZsdWVudFwiLCB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uLkZMVUVOVCB8fCBcIi5GbHVlbnRcIiB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaWQ6IFwiUHJvZmVzc2lvbmFsXCIsXHJcbiAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5QUk9GRVNTSU9OQUwgfHwgXCIuUHJvZmVzc2lvbmFsXCIsXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gICAgdGhpcy5sYW5ndWFnZUxpc3QgPSBbXHJcbiAgICAgIHsgaWQ6IFwiRU5cIiwgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5FTkdMSVNIIHx8IFwiLkVuZ2xpc2hcIiB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaWQ6IFwiWkhcIixcclxuICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uLkNISU5FU0VfU0lNUExJRklFRCB8fCBcIi5DaGluZXNlIChTaW1wbGlmaWVkKVwiLFxyXG4gICAgICB9LFxyXG4gICAgICB7IGlkOiBcIkVTXCIsIHRleHQ6IHRoaXMudHJhbnNsYXRpb24uU1BBTklTSCB8fCBcIi5TcGFuaXNoXCIgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlkOiBcIlpIVFwiLFxyXG4gICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRpb24uQ0hJTkVTRV9UUkFESVRJT05BTCB8fCBcIi5DaGluZXNlIChUcmFkaXRpb25hbClcIixcclxuICAgICAgfSxcclxuICAgICAgeyBpZDogXCJISVwiLCB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uLkhJTkRJIHx8IFwiLkhpbmRpXCIgfSxcclxuICAgICAgeyBpZDogXCJBUlwiLCB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uLkFSQUJJQyB8fCBcIi5BcmFiaWNcIiB9LFxyXG4gICAgICB7IGlkOiBcIkJOXCIsIHRleHQ6IHRoaXMudHJhbnNsYXRpb24uQkVOR0FMSSB8fCBcIi5CZW5nYWxpXCIgfSxcclxuICAgICAgeyBpZDogXCJQVFwiLCB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uLlBPUlRVR1VFU0UgfHwgXCIuUG9ydHVndWVzZVwiIH0sXHJcbiAgICAgIHsgaWQ6IFwiUlVcIiwgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5SVVNTSUFOIHx8IFwiLlJ1c3NpYW5cIiB9LFxyXG4gICAgICB7IGlkOiBcIkpBXCIsIHRleHQ6IHRoaXMudHJhbnNsYXRpb24uSkFQQU5FU0UgfHwgXCIuSmFwYW5lc2VcIiB9LFxyXG4gICAgICB7IGlkOiBcIkRFXCIsIHRleHQ6IHRoaXMudHJhbnNsYXRpb24uR0VSTUFOIHx8IFwiLkdlcm1hblwiIH0sXHJcbiAgICAgIHsgaWQ6IFwiS09cIiwgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5LT1JFQU4gfHwgXCIuS29yZWFuXCIgfSxcclxuICAgICAgeyBpZDogXCJGUlwiLCB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uLkZSRU5DSCB8fCBcIi5GcmVuY2hcIiB9LFxyXG4gICAgICB7IGlkOiBcIklUXCIsIHRleHQ6IHRoaXMudHJhbnNsYXRpb24uSVRBTElBTiB8fCBcIi5JdGFsaWFuXCIgfSxcclxuICAgICAgeyBpZDogXCJUUlwiLCB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uLlRVUktJU0ggfHwgXCIuVHVya2lzaFwiIH0sXHJcbiAgICBdO1xyXG4gICAgY29uc3QgZHluYW1pY0FpQnV0dG9uSWQgPSBgYWlfYXNzaXN0YW50X2J1dHRvbl90YmFyXyR7dGhpcy5lZGl0b3JJZH1gO1xyXG4gICAgdGhpcy50b29scyA9IHtcclxuICAgICAgZW5hYmxlRmxvYXRpbmc6IGZhbHNlLFxyXG4gICAgICBpdGVtczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRvb2x0aXBUZXh0OiB0aGlzLnRyYW5zbGF0aW9uLkFJX0FTU0lTVCB8fCBcIi5BSSBBc3Npc3RcIixcclxuICAgICAgICAgIHRlbXBsYXRlOiBgPGJ1dHRvbiBjbGFzcz1cImUtdGJhci1idG4gZS1idG5cIiB0YWJpbmRleD1cIi0xXCIgaWQ9XCIke2R5bmFtaWNBaUJ1dHRvbklkfVwiIHN0eWxlPVwid2lkdGg6MTAwJVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZS1ydGUtZHJvcGRvd24tYnRuLXRleHRcIj4ke1xyXG4gICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb24uQUlfQVNTSVNUIHx8IFwiLkFJIEFzc2lzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIH08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPmAsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcIkJvbGRcIixcclxuICAgICAgICBcIkl0YWxpY1wiLFxyXG4gICAgICAgIFwiVW5kZXJsaW5lXCIsXHJcbiAgICAgICAgXCJTdHJpa2VUaHJvdWdoXCIsXHJcbiAgICAgICAgXCJGb250TmFtZVwiLFxyXG4gICAgICAgIFwiRm9udFNpemVcIixcclxuICAgICAgICBcIkZvbnRDb2xvclwiLFxyXG4gICAgICAgIFwiQmFja2dyb3VuZENvbG9yXCIsXHJcbiAgICAgICAgXCJMb3dlckNhc2VcIixcclxuICAgICAgICBcIlVwcGVyQ2FzZVwiLFxyXG4gICAgICAgIFwifFwiLFxyXG4gICAgICAgIFwiQ3JlYXRlVGFibGVcIixcclxuICAgICAgICBcIkZvcm1hdHNcIixcclxuICAgICAgICBcIkFsaWdubWVudHNcIixcclxuICAgICAgICBcImJ1bGxldEZvcm1hdExpc3RcIixcclxuICAgICAgICBcIk51bWJlckZvcm1hdExpc3RcIixcclxuICAgICAgICBcIk91dGRlbnRcIixcclxuICAgICAgICBcIkluZGVudFwiLFxyXG4gICAgICAgIFwifFwiLFxyXG4gICAgICAgIFwiQ3JlYXRlTGlua1wiLFxyXG4gICAgICAgIFwifFwiLFxyXG4gICAgICAgIFwiRm9ybWF0UGFpbnRlclwiLFxyXG4gICAgICAgIFwiQ2xlYXJGb3JtYXRcIixcclxuICAgICAgICBcInxcIixcclxuICAgICAgICBcIlVuZG9cIixcclxuICAgICAgICBcIlJlZG9cIixcclxuICAgICAgICAvLydTb3VyY2VDb2RlJyxcclxuICAgICAgXSxcclxuICAgIH07XHJcbiAgICBpZiAodGhpcy5zaG93VGlja2V0QXR0YWNobWVudCkge1xyXG4gICAgICBjb25zdCBpdGVtID0ge1xyXG4gICAgICAgIHRvb2x0aXBUZXh0OiBcIlwiLFxyXG4gICAgICAgIHRlbXBsYXRlOlxyXG4gICAgICAgICAgJzxidXR0b24gY2xhc3M9XCJlLXRiYXItYnRuIGUtYnRuXCIgdGFiaW5kZXg9XCItMVwiIGlkPVwiY3VzdG9tX3RiYXJcIiAgc3R5bGU9XCJ3aWR0aDoxMDAlXCI+JyArXHJcbiAgICAgICAgICAnPGRpdiBjbGFzcz1cImUtdGJhci1idG4tdGV4dFwiIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDUwMDtcIj48aW1nIHNyYz1cIi9hc3NldHMvaW1nL2ZpbGUtaWNvbi5zdmdcIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIi8+PGRpdiBjbGFzcz1cInVwbG9hZEFjdGlvbnNcIj48ZGl2IGlkPVwidXBsb2FkRnJvbVVzZXJcIj5Db21wdXRlciBGaWxlPC9kaXY+PGRpdiBpZD1cInJlbGF0aW9uRG9tXCI+VGlja2V0IEF0dGFjaG1lbnQ8L2Rpdj48L2Rpdj48L2Rpdj48L2J1dHRvbj4nLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnRvb2xzLml0ZW1zLnNwbGljZSgyMiwgMCwgaXRlbSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNvbnRlbnRDaGFuZ2UoYXJncykge1xyXG4gICAgLy8gY29uc3QgdGFibGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInRhYmxlLmUtcnRlLXRhYmxlXCIpO1xyXG4gICAgLy8gdGFibGVzLmZvckVhY2goKHRhYmxlKSA9PiB7XHJcbiAgICAvLyAgIGNvbnN0IGh0bWxUYWJsZSA9IHRhYmxlIGFzIEhUTUxUYWJsZUVsZW1lbnQ7XHJcbiAgICAvLyAgIGh0bWxUYWJsZS5zdHlsZS5tYXJnaW5Cb3R0b20gPSBcIjEwcHhcIjtcclxuICAgIC8vICAgaHRtbFRhYmxlLnN0eWxlLmJvcmRlckNvbGxhcHNlID0gXCJjb2xsYXBzZVwiO1xyXG4gICAgLy8gICBodG1sVGFibGUuc3R5bGUuZW1wdHlDZWxscyA9IFwic2hvd1wiO1xyXG4gICAgLy8gICBjb25zdCB0ZEVsZW1lbnRzID0gdGFibGUucXVlcnlTZWxlY3RvckFsbChcInRkXCIpO1xyXG4gICAgLy8gICB0ZEVsZW1lbnRzLmZvckVhY2goKHRkKSA9PiB7XHJcbiAgICAvLyAgICAgdGQuc3R5bGUuYm9yZGVyID0gXCIxcHggc29saWQgI2FkYjViZFwiO1xyXG4gICAgLy8gICAgIHRkLnN0eWxlLmhlaWdodCA9IFwiMjBweFwiO1xyXG4gICAgLy8gICAgIHRkLnN0eWxlLm1pbldpZHRoID0gXCIyMHB4XCI7XHJcbiAgICAvLyAgICAgdGQuc3R5bGUucGFkZGluZyA9IFwiMnB4IDVweFwiO1xyXG4gICAgLy8gICAgIHRkLnN0eWxlLmJveFNpemluZyA9IFwiYm9yZGVyLWJveFwiO1xyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH0pO1xyXG4gICAgdGhpcy5jaGFuZ2UuZW1pdChhcmdzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNyZWF0ZSgpOiB2b2lkIHtcclxuICAgIC8vYWRkIHRoZSBsaW5lIGhlaWdodFxyXG4gICAgLy8gdGhpcy5lZGl0b3JNYW5hZ2VyID0gdGhpcy5ydGVPYmouZm9ybWF0dGVyLmVkaXRvck1hbmFnZXI7XHJcbiAgICAvLyBsZXQgc3BsaXRCdXR0b24gPSBuZXcgRHJvcERvd25CdXR0b24oe1xyXG4gICAgLy8gICBpdGVtczogbGluZUhlaWdodF9pdGVtcyxcclxuICAgIC8vICAgaWNvbkNzczogXCJlLWljb25zIGUtbGluZS1zcGFjaW5nXCIsXHJcbiAgICAvLyAgIHNlbGVjdDogdGhpcy5vblNlbGVjdC5iaW5kKHRoaXMpLFxyXG4gICAgLy8gfSk7XHJcbiAgICAvLyBzcGxpdEJ1dHRvbi5hcHBlbmRUbyhcIiNsaW5laGVpZ2h0X3RiYXJcIik7XHJcbiAgICAvLyAvLyBhaSBhc3Npc3RcclxuICAgIGxldCBhaWFzc2lzdGFudEJ1dHRvbiA9IG5ldyBEcm9wRG93bkJ1dHRvbih7XHJcbiAgICAgIGl0ZW1zOiB0aGlzLnF1ZXJ5TGlzdCxcclxuICAgICAgLy8gaWNvbkNzczogXCJlLWJ0bi1pY29uIGUtaWNvbnMgZS1hc3Npc3R2aWV3LWljb24gZS1pY29uLWxlZnRcIixcclxuICAgICAgc2VsZWN0OiAoYXJncykgPT4gdGhpcy5haVF1ZXJ5U2VsZWN0ZWRNZW51KGFyZ3MpLFxyXG4gICAgfSk7XHJcbiAgICBhaWFzc2lzdGFudEJ1dHRvbi5hcHBlbmRUbyhcIiNhaV9hc3Npc3RhbnRfYnV0dG9uX3RiYXJfXCIgKyB0aGlzLmVkaXRvcklkKTtcclxuICAgIHRoaXMuY3JlYXRlZC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uU2VsZWN0KGFyZ3MpIHtcclxuICAgIGlmICh0aGlzLnJ0ZU9iai5mb3JtYXR0ZXIuZ2V0VW5kb1JlZG9TdGFjaygpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnJ0ZU9iai5mb3JtYXR0ZXIuc2F2ZURhdGEoKTtcclxuICAgIH1cclxuICAgIGxldCBub2RlczogTm9kZVtdID0gdGhpcy5lZGl0b3JNYW5hZ2VyLmRvbU5vZGUuYmxvY2tOb2RlcygpO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgbm9kZXMubGVuZ3RoID4gaTsgaSsrKSB7XHJcbiAgICAgIChub2Rlc1tpXSBhcyBIVE1MRWxlbWVudCkuc3R5bGUubGluZUhlaWdodCA9IGFyZ3MuaXRlbS50ZXh0O1xyXG4gICAgfVxyXG4gICAgdGhpcy5ydGVPYmouZm9ybWF0dGVyLnNhdmVEYXRhKCk7XHJcbiAgICB0aGlzLnJ0ZU9iai5mb3JtYXR0ZXIuZW5hYmxlVW5kbyh0aGlzLnJ0ZU9iaik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFpUXVlcnlTZWxlY3RlZE1lbnUoYXJnczogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmRpYWxvZ3VlT3BlbihhcmdzLml0ZW0uaWQpO1xyXG4gIH1cclxuXHJcbiAgZGlhbG9ndWVPcGVuKHNlbGVjdGVkUXVlcnk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdmFyIHNlbGVjdGlvblRleHQgPSB0aGlzLnJ0ZU9iai5nZXRTZWxlY3RlZEh0bWwoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRRdWVyeSA9IHNlbGVjdGVkUXVlcnk7XHJcbiAgICBpZiAoc2VsZWN0aW9uVGV4dCkge1xyXG4gICAgICBsZXQgcmFuZ2U6IFJhbmdlID0gKFxyXG4gICAgICAgIHRoaXMucnRlT2JqIGFzIGFueVxyXG4gICAgICApLmZvcm1hdHRlci5lZGl0b3JNYW5hZ2VyLm5vZGVTZWxlY3Rpb24uZ2V0UmFuZ2UoXHJcbiAgICAgICAgKHRoaXMucnRlT2JqIGFzIGFueSkuY29udGVudE1vZHVsZS5nZXREb2N1bWVudCgpXHJcbiAgICAgICk7XHJcbiAgICAgICh0aGlzLnJ0ZU9iaiBhcyBhbnkpLmZvcm1hdHRlci5lZGl0b3JNYW5hZ2VyLm5vZGVTZWxlY3Rpb24uc2F2ZShcclxuICAgICAgICByYW5nZSxcclxuICAgICAgICAodGhpcy5ydGVPYmogYXMgYW55KS5jb250ZW50TW9kdWxlLmdldERvY3VtZW50KClcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5kcm9wVmFsSW5kZXggPSB0aGlzLnF1ZXJ5TGlzdC5maW5kSW5kZXgoXHJcbiAgICAgICAgKHEpID0+IHEudGV4dC50b0xvd2VyQ2FzZSgpID09PSBzZWxlY3RlZFF1ZXJ5LnRvTG93ZXJDYXNlKClcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5xdWVyeUNhdGVnb3J5LmluZGV4ID0gdGhpcy5kcm9wVmFsSW5kZXg7XHJcbiAgICAgIHRoaXMubGVmdFJ0ZS52YWx1ZSA9IHRoaXMucHJvbXB0UXVlcnkgPSBzZWxlY3Rpb25UZXh0O1xyXG4gICAgICB0aGlzLmxlZnRSdGUucmVmcmVzaFVJKCk7XHJcbiAgICAgIHRoaXMuQUlkaWFsb2cuc2hvdygpO1xyXG4gICAgICB0aGlzLnVwZGF0ZUFJU3VnZXNzdGlvbnNEYXRhKHNlbGVjdGVkUXVlcnkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gdGhpcy5zaG93TXNnID0gdHJ1ZTtcclxuICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIC8vICAgdGhpcy5zaG93TXNnID0gZmFsc2U7XHJcbiAgICAgIC8vIH0sIDMwMDApO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhcIlBsZWFzZSBzZWxlY3QgdGhlIGNvbnRlbnQgdG8gcGVyZm9ybSB0aGUgQUkgb3BlcmF0aW9uLlwiKTtcclxuXHJcbiAgICAgIHRoaXMuZGlhbG9nLnNob3dOb3RpZmljYXRpb24oXHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGlvbi5GSVJTVF9TRUxFQ1RfU09NRV9URVhUIHx8IFwiRmlyc3QsIFNlbGVjdCBzb21lIHRleHRcIixcclxuICAgICAgICB7XHJcbiAgICAgICAgICBzdGF0dXM6IFwiV2FybmluZ1wiLFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUFJU3VnZXNzdGlvbnNEYXRhKHNlbGVjdGVkUXVlcnk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1NlbnRpbWVudENoZWNrID0gZmFsc2U7XHJcbiAgICBzd2l0Y2ggKHNlbGVjdGVkUXVlcnkpIHtcclxuICAgICAgY2FzZSBcIlN1bW1hcml6ZVwiOlxyXG4gICAgICAgIHRoaXMuc3ViUXVlcnkgPSBcIlN1bW1hcml6ZSB0aGUgdXBjb21pbmcgc2VudGVuY2Ugc2hvcnRseS5cIjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIkVsYWJvcmF0ZVwiOlxyXG4gICAgICAgIHRoaXMuc3ViUXVlcnkgPSBcIkVsYWJvcmF0ZSBvbiB0aGUgdXBjb21pbmcgc2VudGVuY2UuXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJSZXBocmFzZVwiOlxyXG4gICAgICAgIHRoaXMuc3ViUXVlcnkgPSB0aGlzLmNoaXBWYWx1ZSArIFwiIHJlcGhyYXNlIHRoZSB1cGNvbWluZyBzZW50ZW5jZS5cIjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIkdyYW1tYXJcIjpcclxuICAgICAgICB0aGlzLnN1YlF1ZXJ5ID0gXCJDb3JyZWN0IHRoZSBncmFtbWFyIG9mIHRoZSB1cGNvbWluZyBzZW50ZW5jZS5cIjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlRyYW5zbGF0ZVwiOlxyXG4gICAgICAgIHRoaXMuc3ViUXVlcnkgPVxyXG4gICAgICAgICAgXCJUcmFuc2xhdGUgdGhlIHVwY29taW5nIHNlbnRlbmNlIHRvIFwiICsgdGhpcy50cmFuc2xhdGVsYW5ndWFnZSArIFwiLlwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiU2VudGltZW50QW5hbHlzaXNcIjpcclxuICAgICAgICB0aGlzLmlzU2VudGltZW50Q2hlY2sgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3ViUXVlcnkgPVxyXG4gICAgICAgICAgJ0FuYWx5emUgdGhlIHNlbnRpbWVudCBhbmQgZ3JhbW1hciBvZiB0aGUgZm9sbG93aW5nIHBhcmFncmFwaHMgYW5kIHByb3ZpZGUgdGhlIGV4cHJlc3Npb24gc2NvcmUgd2l0aCBhbiBlbW9qaSBmb2xsb3dlZCBieSB0aGUgc2VudGltZW50IGluIHRoZSBmb3JtYXQ6IFwi8J+YiiBOZXV0cmFsXCIuIFxcblxcbk5PVEU6IEF2b2lkIGFueSBhZGRpdGlvbmFsIHRleHQgb3IgZXhwbGFuYXRpb246JztcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlQUlTdWdlc3N0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQUlTdWdlc3N0aW9ucygpOiB2b2lkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLnByb21wdFF1ZXJ5KSB7XHJcbiAgICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2tlbGV0b25JZFwiKSBhcyBIVE1MRWxlbWVudCkuc3R5bGUuZGlzcGxheSA9XHJcbiAgICAgICAgICBcIlwiO1xyXG4gICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJpZ2h0UnRlXCIpIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5kaXNwbGF5ID1cclxuICAgICAgICAgIFwibm9uZVwiO1xyXG4gICAgICAgIHRoaXMuc2VudGltZW50QnV0dG9uLmVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgICAgIHRoaXMucmVnZW5lcmF0ZUJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb3B5QnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlcGxhY2VCdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRGlhbG9nVmlzaWJsZSkge1xyXG4gICAgICAgICAgdGhpcy5wcm9tcHRRdWVyeSA9IHRoaXMubGVmdFJ0ZS5nZXRIdG1sKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXBpUmVzdWx0RGF0YSA9IHRoaXMuZ2V0UmVzcG9uc2VGcm9tT3BlbkFJKFxyXG4gICAgICAgICAgdGhpcy5zdWJRdWVyeSxcclxuICAgICAgICAgIHRoaXMucHJvbXB0UXVlcnlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuYXBpUmVzdWx0RGF0YS50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5BSVJlc3VsdCA9IHRoaXMuaXNTZW50aW1lbnRDaGVjayA/IHRoaXMucHJvbXB0UXVlcnkgOiByZXN1bHQ7XHJcbiAgICAgICAgICB0aGlzLnNlbnRpbWVudEJ1dHRvbi5jb250ZW50ID0gcmVzdWx0XHJcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgIC5pbmNsdWRlcyhcInBvc2l0aXZlXCIpXHJcbiAgICAgICAgICAgID8gXCLwn5iKIFBvc2l0aXZlXCJcclxuICAgICAgICAgICAgOiByZXN1bHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcIm5lZ2F0aXZlXCIpXHJcbiAgICAgICAgICAgID8gXCLwn5ieIE5lZ2F0aXZlXCJcclxuICAgICAgICAgICAgOiBcIvCfmJAgTmV1dHJhbFwiO1xyXG4gICAgICAgICAgdGhpcy5zZW50aW1lbnRCdXR0b24uZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gIXRoaXMuaXNTZW50aW1lbnRDaGVja1xyXG4gICAgICAgICAgICA/IFwibm9uZVwiXHJcbiAgICAgICAgICAgIDogXCJcIjtcclxuICAgICAgICAgIHRoaXMucmlnaHRSdGUudmFsdWUgPSB0aGlzLkFJUmVzdWx0O1xyXG4gICAgICAgICAgdmFyIG5vUmVzdWx0c0ZvdW5kID0gISh0aGlzLkFJUmVzdWx0IHx8IHRoaXMucHJvbXB0UXVlcnkpO1xyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5vLXJlc3VsdHMtZm91bmRcIikgYXMgSFRNTEVsZW1lbnRcclxuICAgICAgICAgICkuc3R5bGUuZGlzcGxheSA9IG5vUmVzdWx0c0ZvdW5kID8gXCJcIiA6IFwibm9uZVwiO1xyXG4gICAgICAgICAgdGhpcy5yZWdlbmVyYXRlQnV0dG9uLmRpc2FibGVkID0gbm9SZXN1bHRzRm91bmQ7XHJcbiAgICAgICAgICB0aGlzLmNvcHlCdXR0b24uZGlzYWJsZWQgPSBub1Jlc3VsdHNGb3VuZDtcclxuICAgICAgICAgIHRoaXMucmVwbGFjZUJ1dHRvbi5kaXNhYmxlZCA9IG5vUmVzdWx0c0ZvdW5kO1xyXG4gICAgICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAvLyB0aGlzLnRvYXN0T2JqLnNob3coKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bGxSZXNwb25zZSA9IFwiXCI7XHJcbiAgYXN5bmMgZ2V0UmVzcG9uc2VGcm9tT3BlbkFJKFxyXG4gICAgc3ViUXVlcnk6IHN0cmluZyxcclxuICAgIHByb21wdFF1ZXJ5OiBzdHJpbmdcclxuICApOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgY29uc3QgbWVzc2FnZXMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICByb2xlOiBcInN5c3RlbVwiLFxyXG4gICAgICAgIGNvbnRlbnQ6IHN1YlF1ZXJ5LmluY2x1ZGVzKFxyXG4gICAgICAgICAgXCJlbW9qaSBmb2xsb3dlZCBieSB0aGUgc2VudGltZW50IGluIHRoZSBmb3JtYXRcIlxyXG4gICAgICAgIClcclxuICAgICAgICAgID8gXCJZb3UgYXJlIGEgaGVscGZ1bCBhc3Npc3RhbnQuIFBsZWFzZSByZXNwb25kIGluIHN0cmluZyBmb3JtYXQuXCJcclxuICAgICAgICAgIDogXCJOT1RFOiBSZXR1cm4gc2FtZSBodG1sIGZvcm1hdCBqdXN0IGRvIGNoYW5nZXMgY29udGVudCBvbmx5LiBkb24ndCBjaGFuZ2UgaHRtbCBmb3JtYXRzLlwiLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgcm9sZTogXCJ1c2VyXCIsXHJcbiAgICAgICAgY29udGVudDogYCR7c3ViUXVlcnl9ICR7cHJvbXB0UXVlcnl9YCxcclxuICAgICAgfSxcclxuICAgIF07XHJcblxyXG4gICAgY29uc3QgcGFyYW0gPSB7XHJcbiAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlcyxcclxuICAgICAgbWF4X3Rva2VuczogMTAwMCxcclxuICAgICAgdGVtcGVyYXR1cmU6IDAuNyxcclxuICAgICAgdG9wX3A6IDEsXHJcbiAgICAgIGZyZXF1ZW5jeV9wZW5hbHR5OiAwLFxyXG4gICAgICBwcmVzZW5jZV9wZW5hbHR5OiAwLFxyXG4gICAgfTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFwiYXBpL2FpL2NoYXQtc3RyZWFtXCIsIHtcclxuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcclxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShwYXJhbSksXHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQIGVycm9yISBzdGF0dXM6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xyXG4gICAgICB9XHJcbiAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNrZWxldG9uSWRcIikgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPVxyXG4gICAgICAgIFwibm9uZVwiO1xyXG4gICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyaWdodFJ0ZVwiKSBhcyBIVE1MRWxlbWVudCkuc3R5bGUuZGlzcGxheSA9IFwiXCI7XHJcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5mdWxsUmVzcG9uc2UgPSBcIlwiO1xyXG4gICAgICB0aGlzLnJpZ2h0UnRlLnZhbHVlID0gXCJcIjtcclxuICAgICAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keS5nZXRSZWFkZXIoKTtcclxuICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xyXG4gICAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XHJcbiAgICAgICAgaWYgKGRvbmUpIHtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjaHVuayA9IGRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KTtcclxuICAgICAgICBjb25zdCBsaW5lcyA9IGNodW5rLnNwbGl0KFwiXFxuXCIpO1xyXG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xyXG4gICAgICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aChcImRhdGE6IFwiKSkge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gbGluZS5zdWJzdHJpbmcoNikudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoZGF0YSA9PT0gXCJbRE9ORV1cIikge1xyXG4gICAgICAgICAgICAgIC8vdGhpcy5zaG93RGlhbG9nKCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnVsbFJlc3BvbnNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gcGFyc2VkLmNob2ljZXM/LlswXT8uZGVsdGE/LmNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgaWYgKGNvbnRlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnVsbFJlc3BvbnNlICs9IGNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2Nyb2xsVG9Cb3R0b20oY29udGVudCkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJQYXJzZSBlcnJvcjpcIiwgZSwgXCJEYXRhOlwiLCBkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5mdWxsUmVzcG9uc2U7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiU3RyZWFtIGVycm9yOlwiLCBlcnJvcik7XHJcbiAgICAgIHRocm93IGVycm9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGlhbG9nU2hvdygpOiB2b2lkIHtcclxuICAgIC8vIHRoaXMucmVnZW5lcmF0ZUJ1dHRvbiEuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgLy8gICB0aGlzLnVwZGF0ZUFJU3VnZXNzdGlvbnMoKTtcclxuICAgIC8vIH0pO1xyXG4gICAgLy8gdGhpcy5jb3B5QnV0dG9uIS5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAvLyAgIHRoaXMuY29weVRleHRUb0NsaXBib2FyZCh0aGlzLkFJUmVzdWx0KTtcclxuICAgIC8vIH0pO1xyXG4gICAgLy8gdGhpcy5yZXBsYWNlQnV0dG9uIS5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAvLyAgIGxldCByYW5nZTogUmFuZ2UgPSAoXHJcbiAgICAvLyAgICAgdGhpcy5ydGVPYmogYXMgYW55XHJcbiAgICAvLyAgICkuZm9ybWF0dGVyLmVkaXRvck1hbmFnZXIubm9kZVNlbGVjdGlvbi5nZXRSYW5nZShcclxuICAgIC8vICAgICAodGhpcy5ydGVPYmogYXMgYW55KS5jb250ZW50TW9kdWxlLmdldERvY3VtZW50KClcclxuICAgIC8vICAgKTtcclxuICAgIC8vICAgKHRoaXMucnRlT2JqIGFzIGFueSkuZm9ybWF0dGVyLmVkaXRvck1hbmFnZXIubm9kZVNlbGVjdGlvbi5yZXN0b3JlKHJhbmdlKTtcclxuICAgIC8vICAgKHRoaXMucnRlT2JqIGFzIGFueSkuZXhlY3V0ZUNvbW1hbmQoXCJpbnNlcnRIVE1MXCIsIHRoaXMuQUlSZXN1bHQsIHtcclxuICAgIC8vICAgICB1bmRvOiB0cnVlLFxyXG4gICAgLy8gICB9KTtcclxuICAgIC8vICAgdGhpcy5jbG9zZURpYWxvZygpO1xyXG4gICAgLy8gfSk7XHJcbiAgICAodGhpcy5BSWRpYWxvZyBhcyBEaWFsb2dDb21wb25lbnQpLmVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwiXCI7XHJcbiAgfVxyXG5cclxuICBjbG9zZURpYWxvZygpOiB2b2lkIHtcclxuICAgIHRoaXMuQUlkaWFsb2cuaGlkZSgpO1xyXG4gICAgdGhpcy5yaWdodFJ0ZS52YWx1ZSA9IFwiXCI7XHJcbiAgICB0aGlzLmxlZnRSdGUudmFsdWUgPSBcIlwiO1xyXG4gICAgdGhpcy5wcm9tcHRRdWVyeSA9IFwiXCI7XHJcbiAgICB0aGlzLmNoaXBWYWx1ZSA9IFwiU3RhbmRhcmRcIjtcclxuICAgIHRoaXMuQUlSZXN1bHQgPSBcIlwiO1xyXG4gICAgdGhpcy5kcm9wVmFsSW5kZXggPSAwO1xyXG4gICAgdGhpcy5zZWxlY3RlZFF1ZXJ5ID0gXCJSZXBocmFzZVwiO1xyXG4gICAgdGhpcy5zZW50aW1lbnRCdXR0b24uY29udGVudCA9IFwi8J+YiiBOZXV0cmFsXCI7XHJcbiAgICB0aGlzLnNpemUgPSBcIlwiO1xyXG4gIH1cclxuXHJcbiAgY29weVRleHRUb0NsaXBib2FyZCh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5yaWdodFJ0ZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnJpZ2h0UnRlLnNlbGVjdEFsbCgpO1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIk5vIHNlbGVjdGVkIGNvbnRlbnRcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XHJcbiAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcclxuICAgICAgY29uc3Qgc3VjY2VzcyA9IGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiY29weVwiKTtcclxuICAgICAgaWYgKHN1Y2Nlc3MpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlRleHQgY29waWVkIHRvIGNsaXBib2FyZCBzdWNjZXNzZnVsbHkhXCIpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gY29weSB0ZXh0XCIpO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjb3B5IHRleHQ6IFwiLCBlcnIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkKSB7XHJcbiAgICAvLyAgIG5hdmlnYXRvci5jbGlwYm9hcmRcclxuICAgIC8vICAgICAud3JpdGVUZXh0KHRleHQpXHJcbiAgICAvLyAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgLy8gICAgICAgY29uc29sZS5sb2coXCJUZXh0IGNvcGllZCB0byBjbGlwYm9hcmQgc3VjY2Vzc2Z1bGx5IVwiKTtcclxuICAgIC8vICAgICB9KVxyXG4gICAgLy8gICAgIC5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAvLyAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGNvcHkgdGV4dDogXCIsIGVycik7XHJcbiAgICAvLyAgICAgfSk7XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgLy8gICAvLyBGYWxsYmFjayBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB0aGUgQ2xpcGJvYXJkIEFQSVxyXG4gICAgLy8gICBjb25zdCB0ZXh0YXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiKTtcclxuICAgIC8vICAgdGV4dGFyZWEudmFsdWUgPSB0ZXh0O1xyXG4gICAgLy8gICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRleHRhcmVhKTtcclxuICAgIC8vICAgdGV4dGFyZWEuc2VsZWN0KCk7XHJcbiAgICAvLyAgIHRyeSB7XHJcbiAgICAvLyAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJjb3B5XCIpO1xyXG4gICAgLy8gICAgIGNvbnNvbGUubG9nKFwiVGV4dCBjb3BpZWQgdG8gY2xpcGJvYXJkIHVzaW5nIGV4ZWNDb21tYW5kXCIpO1xyXG4gICAgLy8gICB9IGNhdGNoIChlcnIpIHtcclxuICAgIC8vICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGNvcHkgdGV4dDogXCIsIGVycik7XHJcbiAgICAvLyAgIH0gZmluYWxseSB7XHJcbiAgICAvLyAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXh0YXJlYSk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIG9uT3ZlcmxheUNsaWNrKCk6IHZvaWQge1xyXG4gICAgbGV0IGFjdGl2ZUVsZTogSFRNTEVsZW1lbnQgfCBudWxsID0gdGhpcy5BSWRpYWxvZy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgIFwiLmNoYXJfYmxvY2suZS1hY3RpdmVcIlxyXG4gICAgKTtcclxuICAgIGlmIChhY3RpdmVFbGUpIHtcclxuICAgICAgYWN0aXZlRWxlLmNsYXNzTGlzdC5yZW1vdmUoXCJlLWFjdGl2ZVwiKTtcclxuICAgIH1cclxuICAgIC8vdGhpcy5jbG9zZURpYWxvZygpO1xyXG4gIH1cclxuXHJcbiAgb25RdWVyeVNlbGVjdChhcmdzKSB7XHJcbiAgICAvLyB0aGlzLmNoaXBMaXN0LnNlbGVjdGVkQ2hpcHMgPSAwO1xyXG4gICAgdGhpcy50cmFuc2xhdGVsYW5ndWFnZSA9IFwiRU5cIjtcclxuICAgIHRoaXMuc2VsZWN0ZWRRdWVyeSA9IGFyZ3MuaXRlbURhdGEuaWQ7XHJcbiAgICB0aGlzLnVwZGF0ZUFJU3VnZXNzdGlvbnNEYXRhKGFyZ3MuaXRlbURhdGEuaWQpO1xyXG4gIH1cclxuXHJcbiAgb25MYW5ndWFnZVNlbGVjdChhcmdzOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudHJhbnNsYXRlbGFuZ3VhZ2UgPSBhcmdzLml0ZW1EYXRhLmlkO1xyXG4gICAgdGhpcy51cGRhdGVBSVN1Z2Vzc3Rpb25zRGF0YShcIlRyYW5zbGF0ZVwiKTtcclxuICB9XHJcblxyXG4gIG9uQ2hpcENsaWNrKGFyZ3M6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5jaGlwVmFsdWUgPSBhcmdzLml0ZW1EYXRhLnRleHQ7XHJcbiAgICAvLyDkuovku7bkvJrop6blj5HkuKTmrKEg5b+F6aG75Yik5patYXJncy50ZXh05piv5ZCm5pyJ5YC8XHJcbiAgICBpZiAoYXJncy5pdGVtRGF0YS50ZXh0KSB0aGlzLnVwZGF0ZUFJU3VnZXNzdGlvbnNEYXRhKFwiUmVwaHJhc2VcIik7XHJcbiAgfVxyXG5cclxuICBfdG9vbGJhckNsaWNrKGFyZ3MpIHtcclxuICAgIHRoaXMudG9vbGJhckNsaWNrLmVtaXQoYXJncyk7XHJcbiAgfVxyXG5cclxuICBfYWN0aW9uQmVnaW4oYXJncykge1xyXG4gICAgdGhpcy5hY3Rpb25CZWdpbi5lbWl0KGFyZ3MpO1xyXG4gIH1cclxuICBfaW5wdXQoYXJncykge1xyXG4gICAgdGhpcy5pbnB1dC5lbWl0KGFyZ3MpO1xyXG4gIH1cclxuICBfYWN0aW9uQ29tcGxldGUoYXJncykge1xyXG4gICAgaWYgKGFyZ3MucmVxdWVzdFR5cGUgPT0gXCJVTFwiKSB7XHJcbiAgICAgIGlmIChhcmdzLmVsZW1lbnRzWzBdLnBhcmVudEVsZW1lbnQuc3R5bGUubGlzdFN0eWxlVHlwZSA9PSBcImRhc2hcIikge1xyXG4gICAgICAgIC8vIEFwcGx5IGN1c3RvbSBzdHlsaW5nIGZvciBkYXNoIGJ1bGxldHNcclxuICAgICAgICBhcmdzLmVsZW1lbnRzWzBdLnBhcmVudEVsZW1lbnQuc3R5bGUubGlzdFN0eWxlSW1hZ2UgPVxyXG4gICAgICAgICAgXCJ1cmwoJy4uLy4uLy4uL2Fzc2V0cy9pbWcvYnVsbGV0LWRhc2guc3ZnJylcIjtcclxuICAgICAgICBhcmdzLmVsZW1lbnRzWzBdLnBhcmVudEVsZW1lbnQuc3R5bGUubGlzdFN0eWxlVHlwZSA9IFwibm9uZVwiO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGFyZ3MucmVxdWVzdFR5cGUgPT0gXCJPTFwiKSB7XHJcbiAgICAgIGFyZ3MuZWxlbWVudHNbMF0ucGFyZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFxyXG4gICAgICAgIFwiY3VzdG9tLWxpc3RcIixcclxuICAgICAgICBcInBhcmVudGhlc2VzXCJcclxuICAgICAgKTtcclxuICAgICAgaWYgKGFyZ3MuZWxlbWVudHNbMF0ucGFyZW50RWxlbWVudC5zdHlsZS5saXN0U3R5bGVUeXBlID09IFwicGFyZW50aGVzZXNcIikge1xyXG4gICAgICAgIGFyZ3MuZWxlbWVudHNbMF0ucGFyZW50RWxlbWVudC5jbGFzc0xpc3QgPSBcImN1c3RvbS1saXN0XCI7XHJcbiAgICAgICAgYXJncy5lbGVtZW50c1swXS5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJwYXJlbnRoZXNlc1wiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5hY3Rpb25Db21wbGV0ZS5lbWl0KGFyZ3MpO1xyXG4gIH1cclxuXHJcbiAgX2ZvY3VzKGFyZ3MpIHtcclxuICAgIHRoaXMuZm9jdXMuZW1pdChhcmdzKTtcclxuICB9XHJcbiAgX2JsdXIoYXJncykge1xyXG4gICAgdGhpcy5ibHVyLmVtaXQoYXJncyk7XHJcbiAgfVxyXG4gIF9kaWFsb2dPcGVuKGFyZ3MpIHtcclxuICAgIGlmIChhcmdzLmVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiZS1ydGUtZWRpdC10YWJsZVwiKSkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB2YXIgcm93Qm94ID0gKFxyXG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5lLXRhYmxlLXJvdy5lLW51bWVyaWN0ZXh0Ym94XCIpWzBdIGFzIGFueVxyXG4gICAgICAgICkuZWoyX2luc3RhbmNlc1swXTtcclxuICAgICAgICB2YXIgY29sdW1uQm94ID0gKFxyXG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcclxuICAgICAgICAgICAgXCIuZS10YWJsZS1jb2x1bW4uZS1udW1lcmljdGV4dGJveFwiXHJcbiAgICAgICAgICApWzBdIGFzIGFueVxyXG4gICAgICAgICkuZWoyX2luc3RhbmNlc1swXTtcclxuICAgICAgICByb3dCb3guY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJvd0JveC52YWx1ZSA+IDUwKSB7XHJcbiAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICAgICAgICAgICAgXCIuZS1ydGUtZWxlbWVudHMuZS1pbnNlcnQtdGFibGVcIlxyXG4gICAgICAgICAgICAgIClbMF0gYXMgYW55XHJcbiAgICAgICAgICAgICkuZWoyX2luc3RhbmNlc1swXS5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nLnNob3dOb3RpZmljYXRpb24oXHJcbiAgICAgICAgICAgICAgXCJUaGUgcm93IG51bWJlciBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNTAuXCIsXHJcbiAgICAgICAgICAgICAgeyBzdGF0dXM6IFwiV2FybmluZ1wiIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICAgICAgICAgICAgXCIuZS1ydGUtZWxlbWVudHMuZS1pbnNlcnQtdGFibGVcIlxyXG4gICAgICAgICAgICAgIClbMF0gYXMgYW55XHJcbiAgICAgICAgICAgICkuZWoyX2luc3RhbmNlc1swXS5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sdW1uQm94LmNoYW5nZSA9ICgpID0+IHtcclxuICAgICAgICAgIGlmIChjb2x1bW5Cb3gudmFsdWUgPiAyNSkge1xyXG4gICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcclxuICAgICAgICAgICAgICAgIFwiLmUtcnRlLWVsZW1lbnRzLmUtaW5zZXJ0LXRhYmxlXCJcclxuICAgICAgICAgICAgICApWzBdIGFzIGFueVxyXG4gICAgICAgICAgICApLmVqMl9pbnN0YW5jZXNbMF0uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZy5zaG93Tm90aWZpY2F0aW9uKFxyXG4gICAgICAgICAgICAgIFwiVGhlIGNvbHVtbiBudW1iZXIgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDI1LlwiLFxyXG4gICAgICAgICAgICAgIHsgc3RhdHVzOiBcIldhcm5pbmdcIiB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcclxuICAgICAgICAgICAgICAgIFwiLmUtcnRlLWVsZW1lbnRzLmUtaW5zZXJ0LXRhYmxlXCJcclxuICAgICAgICAgICAgICApWzBdIGFzIGFueVxyXG4gICAgICAgICAgICApLmVqMl9pbnN0YW5jZXNbMF0uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9hZnRlclBhc3RlQ2xlYW51cChhcmdzKSB7XHJcbiAgICBhcmdzLnZhbHVlID0gdGhpcy51bmVzY2FwZUh0bWwoYXJncy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICB1bmVzY2FwZUh0bWwoZXNjYXBlZEh0bWw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gZXNjYXBlZEh0bWxcclxuICAgICAgLnJlcGxhY2UoLyZsdDsvZywgXCI8XCIpXHJcbiAgICAgIC5yZXBsYWNlKC8mZ3Q7L2csIFwiPlwiKVxyXG4gICAgICAucmVwbGFjZSgvJmFtcDsvZywgXCImXCIpXHJcbiAgICAgIC5yZXBsYWNlKC8mcXVvdDsvZywgJ1wiJylcclxuICAgICAgLnJlcGxhY2UoLyZhcG9zOy9nLCBcIidcIik7XHJcbiAgfVxyXG5cclxuICBoaWRlVG9hc3QoKSB7XHJcbiAgICB0aGlzLnNob3dNc2cgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uWm9vbSgpIHtcclxuICAgIGlmICh0aGlzLnNpemUgPT09IFwibGFyZ2VzdFwiKSB7XHJcbiAgICAgIHRoaXMuc2l6ZSA9IFwiXCI7IC8vIOaBouWkjeWIsOWOn+Wni+Wkp+Wwj1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zaXplID0gXCJsYXJnZXN0XCI7IC8vIOiuvue9ruS4uuacgOWkp+WMllxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVnZW5lcmF0ZUNsaWNrKCkge1xyXG4gICAgdGhpcy51cGRhdGVBSVN1Z2Vzc3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBjb3B5Q2xpY2soKSB7XHJcbiAgICB0aGlzLmNvcHlUZXh0VG9DbGlwYm9hcmQodGhpcy5BSVJlc3VsdCk7XHJcbiAgfVxyXG5cclxuICByZXBsYWNlQ2xpY2soKSB7XHJcbiAgICBsZXQgcmFuZ2U6IFJhbmdlID0gKFxyXG4gICAgICB0aGlzLnJ0ZU9iaiBhcyBhbnlcclxuICAgICkuZm9ybWF0dGVyLmVkaXRvck1hbmFnZXIubm9kZVNlbGVjdGlvbi5nZXRSYW5nZShcclxuICAgICAgKHRoaXMucnRlT2JqIGFzIGFueSkuY29udGVudE1vZHVsZS5nZXREb2N1bWVudCgpXHJcbiAgICApO1xyXG4gICAgKHRoaXMucnRlT2JqIGFzIGFueSkuZm9ybWF0dGVyLmVkaXRvck1hbmFnZXIubm9kZVNlbGVjdGlvbi5yZXN0b3JlKHJhbmdlKTtcclxuICAgICh0aGlzLnJ0ZU9iaiBhcyBhbnkpLmV4ZWN1dGVDb21tYW5kKFwiaW5zZXJ0SFRNTFwiLCB0aGlzLkFJUmVzdWx0LCB7XHJcbiAgICAgIHVuZG86IHRydWUsXHJcbiAgICB9KTtcclxuICAgIHRoaXMuY2xvc2VEaWFsb2coKTtcclxuICB9XHJcblxyXG4gIHNjcm9sbFRvQm90dG9tKGNvbnRlbnQpIHtcclxuICAgIHRoaXMuaW5zZXJ0SHRtbFRvRWRpdG9yKGNvbnRlbnQpO1xyXG4gICAgY29uc3QgcnRlQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyaWdodFJ0ZVwiKTtcclxuICAgIGNvbnN0IHNjcm9sbGFibGVFbGVtZW50ID0gcnRlQ29udGFpbmVyPy5xdWVyeVNlbGVjdG9yKFwiLmUtcnRlLWNvbnRlbnRcIik7XHJcbiAgICBpZiAoc2Nyb2xsYWJsZUVsZW1lbnQpIHtcclxuICAgICAgc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wID1cclxuICAgICAgICBzY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxIZWlnaHQgLSBzY3JvbGxhYmxlRWxlbWVudC5jbGllbnRIZWlnaHQ7XHJcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uTWluaW1pemUoKSB7XHJcbiAgICAodGhpcy5BSWRpYWxvZyBhcyBEaWFsb2dDb21wb25lbnQpLmVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgdGhpcy5kaWFsb2cuc2hvd0xvYWRpbmdOb3RpZmljYXRpb24oe1xyXG4gICAgICBsb2FkaW5nQ2FsbGJhY2s6IChjYWxsYmFjaykgPT4ge30sXHJcbiAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRpb24uQUlfSU5fUFJPR1JFU1MgfHwgXCJBSSBpcyBpbiBwcm9ncmVzc1wiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzaG93RGlhbG9nKCkge1xyXG4gICAgKHRoaXMuQUlkaWFsb2cgYXMgRGlhbG9nQ29tcG9uZW50KS5lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xyXG4gICAgdGhpcy5zbmFja0Jhci5kaXNtaXNzKCk7XHJcbiAgfVxyXG5cclxuICBpbnNlcnRIdG1sVG9FZGl0b3IoaHRtbDogc3RyaW5nKSB7XHJcbiAgICAodGhpcy5yaWdodFJ0ZSBhcyBhbnkpLmV4ZWN1dGVDb21tYW5kKFwiaW5zZXJ0VGV4dFwiLCBodG1sKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImVkaXRvcl9ib3hcIiBpZD1cImNvbnRhaW5lclwiPlxyXG4gIDxlanMtcmljaHRleHRlZGl0b3JcclxuICAgICNlZGl0b3JcclxuICAgIFtpZF09XCJlZGl0b3JJZFwiXHJcbiAgICBbaGVpZ2h0XT1cImhlaWdodFwiXHJcbiAgICBbc2F2ZUludGVydmFsXT1cIjBcIlxyXG4gICAgW2F1dG9TYXZlT25JZGxlXT1cImF1dG9TYXZlT25JZGxlXCJcclxuICAgIFt0b29sYmFyU2V0dGluZ3NdPVwidG9vbHNcIlxyXG4gICAgW2J1bGxldEZvcm1hdExpc3RdPVwiYnVsbGV0Rm9ybWF0TGlzdFwiXHJcbiAgICBbbnVtYmVyRm9ybWF0TGlzdF09XCJudW1iZXJGb3JtYXRMaXN0XCJcclxuICAgIFtmb250RmFtaWx5XT1cImZhbWlseVwiXHJcbiAgICBbZm9udFNpemVdPVwiZm9udFNpemVcIlxyXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgIFtpbnNlcnRJbWFnZVNldHRpbmdzXT1cImluc2VydEltYWdlU2V0dGluZ3NcIlxyXG4gICAgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiXHJcbiAgICAoYWN0aW9uQmVnaW4pPVwiX2FjdGlvbkJlZ2luKCRldmVudClcIlxyXG4gICAgKGNoYW5nZSk9XCJvbkNvbnRlbnRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAoY3JlYXRlZCk9XCJvbkNyZWF0ZSgpXCJcclxuICAgICh0b29sYmFyQ2xpY2spPVwiX3Rvb2xiYXJDbGljaygkZXZlbnQpXCJcclxuICAgIChpbnB1dCk9XCJfaW5wdXQoJGV2ZW50KVwiXHJcbiAgICAoZm9jdXMpPVwiX2ZvY3VzKCRldmVudClcIlxyXG4gICAgKGJsdXIpPVwiX2JsdXIoJGV2ZW50KVwiXHJcbiAgICAoYWN0aW9uQ29tcGxldGUpPVwiX2FjdGlvbkNvbXBsZXRlKCRldmVudClcIlxyXG4gICAgKGRpYWxvZ09wZW4pPVwiX2RpYWxvZ09wZW4oJGV2ZW50KVwiXHJcbiAgICAoYWZ0ZXJQYXN0ZUNsZWFudXApPVwiX2FmdGVyUGFzdGVDbGVhbnVwKCRldmVudClcIlxyXG4gID5cclxuICA8L2Vqcy1yaWNodGV4dGVkaXRvcj5cclxuICA8ZWpzLWRpYWxvZ1xyXG4gICAgI0FJZGlhbG9nXHJcbiAgICBpZD1cIkFJZGlhbG9nXCJcclxuICAgIFtuZ0NsYXNzXT1cInNpemVcIlxyXG4gICAgW3Zpc2libGVdPVwiZmFsc2VcIlxyXG4gICAgW3RhcmdldF09XCJ0YXJnZXRcIlxyXG4gICAgW2lzTW9kYWxdPVwidHJ1ZVwiXHJcbiAgICBbaGVpZ2h0XT1cImRpYWxvZ0hlaWdodFwiXHJcbiAgICBbd2lkdGhdPVwiZGlhbG9nV2lkdGhcIlxyXG4gICAgbWF4SGVpZ2h0PVwiODAlXCJcclxuICAgIGNzc0NsYXNzPVwiZS1ydGUtZWxlbWVudHMgY3VzdG9tLWRpYWxvZy1ydGVcIlxyXG4gICAgekluZGV4PVwiMTAwMFwiXHJcbiAgICAoY2xvc2UpPVwiY2xvc2VEaWFsb2coKVwiXHJcbiAgICAob3ZlcmxheUNsaWNrKT1cIm9uT3ZlcmxheUNsaWNrKClcIlxyXG4gICAgKG9wZW4pPVwiZGlhbG9nU2hvdygpXCJcclxuICA+XHJcbiAgICA8bmctdGVtcGxhdGUgI2hlYWRlcj5cclxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci10aXRsZVwiPlxyXG4gICAgICAgIHt7IHRyYW5zbGF0aW9uLkFJX0FTU0lTVCB8fCBcIi5BSSBBc3Npc3RcIiB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1idXR0b25zXCI+XHJcbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiaGVhZGVyLWJ0blwiPlxyXG4gICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICBzcmM9XCIvYXNzZXRzL2ltZy9kaWFsb2ctbmFycm93LnN2Z1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLWljb25cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25NaW5pbWl6ZSgpXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93Wm9vbUJ0blwiIGNsYXNzPVwiaGVhZGVyLXpvb21cIiAoY2xpY2spPVwib25ab29tKClcIj5cclxuICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgY2xhc3M9XCJoZWFkZXItaWNvblwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwic2l6ZSA9PT0gJ2xhcmdlc3QnXCJcclxuICAgICAgICAgICAgc3JjPVwiLi4vLi4vLi4vYXNzZXRzL2ltZy9kaWFsb2ctc2hyaW5rLnN2Z1wiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICBjbGFzcz1cImhlYWRlci1pY29uXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJzaXplICE9PSAnbGFyZ2VzdCdcIlxyXG4gICAgICAgICAgICBzcmM9XCIuLi8uLi8uLi9hc3NldHMvaW1nL2RpYWxvZy1ncm93LnN2Z1wiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItYnRuXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIj5cclxuICAgICAgICAgIDxpbWcgY2xhc3M9XCJoZWFkZXItaWNvblwiIHNyYz1cIi4uLy4uLy4uL2Fzc2V0cy9pbWcvZGlhbG9nLWNsb3NlLnN2Z1wiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjZm9vdGVyVGVtcGxhdGU+XHJcbiAgICAgIDxkaXYgaWQ9XCJkaWFsb2ctZm9vdGVyLWNvbnRlbnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXJvdy0wXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiY3VzY29sLTBcIlxyXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMDAlOyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGxlZnRcIlxyXG4gICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImN1c2NvbC0xXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJcclxuICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246IHJpZ2h0OyB3aWR0aDogMTAwJVwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGVqcy1idXR0b25cclxuICAgICAgICAgICAgICAgICNzZW50aW1lbnRCdXR0b25cclxuICAgICAgICAgICAgICAgIFtjb250ZW50XT1cIifwn5iKICcgKyAodHJhbnNsYXRpb24uTkVVVFJBTCB8fCAnLk5ldXRyYWwnKVwiXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIGNzc0NsYXNzPVwic2VudGltZW50XCJcclxuICAgICAgICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgZWpzLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgI2NvcHlCdXR0b25cclxuICAgICAgICAgICAgICAgIFtjb250ZW50XT1cInRyYW5zbGF0aW9uLkNPUFkgfHwgJy5Db3B5J1wiXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29weS1idG5cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvcHlDbGljaygpXCJcclxuICAgICAgICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgZWpzLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgI3JlcGxhY2VCdXR0b25cclxuICAgICAgICAgICAgICAgIFtjb250ZW50XT1cInRyYW5zbGF0aW9uLlJFUExBQ0UgfHwgJy5SZXBsYWNlJ1wiXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlcGxhY2VDbGljaygpXCJcclxuICAgICAgICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjY29udGVudD5cclxuICAgICAgPGRpdiBjbGFzcz1cImRpYWxvZy1jb250ZW50XCIgc3R5bGU9XCJoZWlnaHQ6IDEwMCVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXJvdy0wXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzY29sLTBcIiBzdHlsZT1cIndpZHRoOiAxMDAlXCI+XHJcbiAgICAgICAgICAgIDxlanMtZHJvcGRvd25saXN0XHJcbiAgICAgICAgICAgICAgI3F1ZXJ5Q2F0ZWdvcnlcclxuICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAyMDBweFwiXHJcbiAgICAgICAgICAgICAgaWQ9XCJxdWVyeUNhdGVnb3J5XCJcclxuICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJxdWVyeUxpc3RcIlxyXG4gICAgICAgICAgICAgIGluZGV4PVwiMFwiXHJcbiAgICAgICAgICAgICAgW2ZpZWxkc109XCJ7IHRleHQ6ICd0ZXh0JywgdmFsdWU6ICdpZCcgfVwiXHJcbiAgICAgICAgICAgICAgKHNlbGVjdCk9XCJvblF1ZXJ5U2VsZWN0KCRldmVudClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3sgdHJhbnNsYXRpb24uUkVQSFJBU0UgfHwgXCIuUmVwaHJhc2VcIiB9fVxyXG4gICAgICAgICAgICA8L2Vqcy1kcm9wZG93bmxpc3Q+XHJcbiAgICAgICAgICAgIDxlanMtZHJvcGRvd25saXN0XHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZFF1ZXJ5ID09ICdSZXBocmFzZSdcIlxyXG4gICAgICAgICAgICAgIGlkPVwiY2hpcHMtY29udGFpbmVyXCJcclxuICAgICAgICAgICAgICAjY2hpcExpc3RcclxuICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxNjBweFwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjaGlwVmFsdWVcIlxyXG4gICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cInJlcGhyYXNlVHlsZUxpc3RcIlxyXG4gICAgICAgICAgICAgIFtmaWVsZHNdPVwieyB0ZXh0OiAndGV4dCcsIHZhbHVlOiAnaWQnIH1cIlxyXG4gICAgICAgICAgICAgIChzZWxlY3QpPVwib25DaGlwQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9lanMtZHJvcGRvd25saXN0PlxyXG4gICAgICAgICAgICA8ZWpzLWRyb3Bkb3dubGlzdFxyXG4gICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRRdWVyeSA9PSAnVHJhbnNsYXRlJ1wiXHJcbiAgICAgICAgICAgICAgI2xhbmd1YWdlQ2F0ZWdvcnlcclxuICAgICAgICAgICAgICBpbmRleD1cIjBcIlxyXG4gICAgICAgICAgICAgIGlkPVwibGFuZ3VhZ2UtQ2F0ZWdvcnlcIlxyXG4gICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cImxhbmd1YWdlTGlzdFwiXHJcbiAgICAgICAgICAgICAgW2ZpZWxkc109XCJ7IHRleHQ6ICd0ZXh0JywgdmFsdWU6ICdpZCcgfVwiXHJcbiAgICAgICAgICAgICAgKHNlbGVjdCk9XCJvbkxhbmd1YWdlU2VsZWN0KCRldmVudClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvZWpzLWRyb3Bkb3dubGlzdD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImN1c2NvbC0xXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJcclxuICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPCEtLSA8ZWpzLWNoaXBsaXN0XHJcbiAgICAgICAgICAgICAgaWQ9XCJjaGlwcy1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICNjaGlwTGlzdFxyXG4gICAgICAgICAgICAgIFtjaGlwc109XCJbJ1N0YW5kYXJkJywgJ0ZsdWVudCcsICdQcm9mZXNzaW9uYWwnXVwiXHJcbiAgICAgICAgICAgICAgc2VsZWN0aW9uPVwiU2luZ2xlXCJcclxuICAgICAgICAgICAgICBjc3NDbGFzcz1cImUtb3V0bGluZVwiXHJcbiAgICAgICAgICAgICAgW3NlbGVjdGVkQ2hpcHNdPVwiWzBdXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwib25DaGlwQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9lanMtY2hpcGxpc3Q+IC0tPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgZWpzLWJ1dHRvblxyXG4gICAgICAgICAgICAgICNyZWdlbmVyYXRlQnV0dG9uXHJcbiAgICAgICAgICAgICAgW2NvbnRlbnRdPVwidHJhbnNsYXRpb24uUkVHRU5FUkFURSB8fCAnLlJlZ2VuZXJhdGUnXCJcclxuICAgICAgICAgICAgICBpc1ByaW1hcnk9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICBkaXNhYmxlZD1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVnZW5lcmF0ZUNsaWNrKClcIlxyXG4gICAgICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXJvdy0xXCIgc3R5bGU9XCJoZWlnaHQ6IGNhbGMoMTAwJSAtIDQwcHgpXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiY3VzY29sLTBcIlxyXG4gICAgICAgICAgICBzdHlsZT1cIlxyXG4gICAgICAgICAgICAgIGZsZXg6IDE7XHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBsZWZ0O1xyXG4gICAgICAgICAgICAgIG92ZXJmbG93OiBhdXRvO1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogbGVmdDsgaGVpZ2h0OiAxMDAlXCI+XHJcbiAgICAgICAgICAgICAgPGVqcy1yaWNodGV4dGVkaXRvclxyXG4gICAgICAgICAgICAgICAgI2xlZnRSdGVcclxuICAgICAgICAgICAgICAgIGlkPVwibGVmdFJ0ZVwiXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxMDAlXCJcclxuICAgICAgICAgICAgICAgIFt0b29sYmFyU2V0dGluZ3NdPVwieyBlbmFibGU6IGZhbHNlIH1cIlxyXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxyXG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbi5BTkFMWVNJU19PRl9BSV9TVVBQT1JUIHx8XHJcbiAgICAgICAgICAgICAgICAgICcuQW5hbHlzaXMgb2YgQUkgU3VwcG9ydCdcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICBjc3NDbGFzcz1cImUtb3V0bGluZVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwvZWpzLXJpY2h0ZXh0ZWRpdG9yPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImN1c2NvbC0xXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJcclxuICAgICAgICAgICAgICBmbGV4OiAxO1xyXG4gICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZsZXg6IDE7IG1pbi1oZWlnaHQ6IDA7IG92ZXJmbG93OiBoaWRkZW5cIj5cclxuICAgICAgICAgICAgICA8ZWpzLXJpY2h0ZXh0ZWRpdG9yXHJcbiAgICAgICAgICAgICAgICAjcmlnaHRSdGVcclxuICAgICAgICAgICAgICAgIGlkPVwicmlnaHRSdGVcIlxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTAwJVwiXHJcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxyXG4gICAgICAgICAgICAgICAgW3Rvb2xiYXJTZXR0aW5nc109XCJ7IGVuYWJsZTogZmFsc2UgfVwiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uLkFOQUxZU0lTX09GX0FJX1NVUFBPUlQgfHxcclxuICAgICAgICAgICAgICAgICAgJy5BbmFseXNpcyBvZiBBSSBTdXBwb3J0J1xyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIGNzc0NsYXNzPVwiZS1vdXRsaW5lXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPC9lanMtcmljaHRleHRlZGl0b3I+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJuby1yZXN1bHRzLWZvdW5kXCJcclxuICAgICAgICAgICAgICAgIGlkPVwibm8tcmVzdWx0cy1mb3VuZFwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmU7IGhlaWdodDogMjQ0cHg7IGFsaWduLWNvbnRlbnQ6IGNlbnRlclwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9XCI1MFwiXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoPVwiNTBcIlxyXG4gICAgICAgICAgICAgICAgICBzcmM9XCJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vY2RuLWJvbGRkZXNrL2FnZW50LWFuZ3VsYXItYXBwL2ltYWdlcy9saWdodC9uby1yZWNvcmRzLXdhcm5pbmcuc3ZnXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICB7eyB0cmFuc2xhdGlvbi5OT19SRVNVTFRTX0ZPVU5EIHx8IFwiLk5vIHJlc3VsdHMgZm91bmRcIiB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBpZD1cInNrZWxldG9uSWRcIj5cclxuICAgICAgICAgICAgICAgIDxlanMtc2tlbGV0b25cclxuICAgICAgICAgICAgICAgICAgI3NrZWxldG9uSWQxXHJcbiAgICAgICAgICAgICAgICAgIHNoYXBlPVwiUmVjdGFuZ2xlXCJcclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTZweFwiXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXHJcbiAgICAgICAgICAgICAgICA+PC9lanMtc2tlbGV0b25cclxuICAgICAgICAgICAgICAgID48YnIgLz5cclxuICAgICAgICAgICAgICAgIDxlanMtc2tlbGV0b25cclxuICAgICAgICAgICAgICAgICAgI3NrZWxldG9uSWQyXHJcbiAgICAgICAgICAgICAgICAgIHNoYXBlPVwiUmVjdGFuZ2xlXCJcclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTZweFwiXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoPVwiOTAlXCJcclxuICAgICAgICAgICAgICAgID48L2Vqcy1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgPGVqcy1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgICAjc2tlbGV0b25JZDNcclxuICAgICAgICAgICAgICAgICAgc2hhcGU9XCJSZWN0YW5nbGVcIlxyXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxNnB4XCJcclxuICAgICAgICAgICAgICAgICAgd2lkdGg9XCI3MCVcIlxyXG4gICAgICAgICAgICAgICAgPjwvZWpzLXNrZWxldG9uXHJcbiAgICAgICAgICAgICAgICA+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICA8ZWpzLXNrZWxldG9uXHJcbiAgICAgICAgICAgICAgICAgICNza2VsZXRvbklkNFxyXG4gICAgICAgICAgICAgICAgICBzaGFwZT1cIlJlY3RhbmdsZVwiXHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE2cHhcIlxyXG4gICAgICAgICAgICAgICAgICB3aWR0aD1cIjUwJVwiXHJcbiAgICAgICAgICAgICAgICA+PC9lanMtc2tlbGV0b25cclxuICAgICAgICAgICAgICAgID48YnIgLz5cclxuICAgICAgICAgICAgICAgIDxlanMtc2tlbGV0b25cclxuICAgICAgICAgICAgICAgICAgI3NrZWxldG9uSWQ1XHJcbiAgICAgICAgICAgICAgICAgIHNoYXBlPVwiUmVjdGFuZ2xlXCJcclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTZweFwiXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMzAlXCJcclxuICAgICAgICAgICAgICAgID48L2Vqcy1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgPGVqcy1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgICAjc2tlbGV0b25JZDZcclxuICAgICAgICAgICAgICAgICAgc2hhcGU9XCJSZWN0YW5nbGVcIlxyXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxNnB4XCJcclxuICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMCVcIlxyXG4gICAgICAgICAgICAgICAgPjwvZWpzLXNrZWxldG9uXHJcbiAgICAgICAgICAgICAgICA+PGJyIC8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L2Vqcy1kaWFsb2c+XHJcbiAgPCEtLSA8ZGl2IGNsYXNzPVwidG9hc3RcIiAqbmdJZj1cInNob3dNc2dcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwidG9hc3RfdGV4dFwiPkZpcnN0LCBTZWxlY3Qgc29tZSB0ZXh0PC9zcGFuXHJcbiAgICA+PHNwYW4gY2xhc3M9XCJjbG9zZV9pY29uXCIgKGNsaWNrKT1cImhpZGVUb2FzdCgpXCI+PC9zcGFuPlxyXG4gIDwvZGl2PiAtLT5cclxuPC9kaXY+XHJcbiJdfQ==