@flogeez/angular-tiptap-editor 3.1.2 → 3.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +2 -2
  3. package/esm2022/flogeez-angular-tiptap-editor.mjs +5 -0
  4. package/esm2022/lib/ate-editor.provider.mjs +38 -0
  5. package/esm2022/lib/components/bubble-menus/base/ate-base-bubble-menu.mjs +207 -0
  6. package/esm2022/lib/components/bubble-menus/base/ate-base-sub-bubble-menu.mjs +137 -0
  7. package/esm2022/lib/components/bubble-menus/color/ate-color-bubble-menu.component.mjs +365 -0
  8. package/esm2022/lib/components/bubble-menus/image/ate-image-bubble-menu.component.mjs +309 -0
  9. package/esm2022/lib/components/bubble-menus/link/ate-link-bubble-menu.component.mjs +247 -0
  10. package/esm2022/lib/components/bubble-menus/table/ate-cell-bubble-menu.component.mjs +126 -0
  11. package/esm2022/lib/components/bubble-menus/table/ate-table-bubble-menu.component.mjs +271 -0
  12. package/esm2022/lib/components/bubble-menus/text/ate-bubble-menu.component.mjs +272 -0
  13. package/esm2022/lib/components/color-picker/ate-color-picker.component.mjs +123 -0
  14. package/esm2022/lib/components/edit-toggle/ate-edit-toggle.component.mjs +42 -0
  15. package/esm2022/lib/components/editor/angular-tiptap-editor.component.mjs +1031 -0
  16. package/esm2022/lib/components/editor/ate-block-controls.component.mjs +256 -0
  17. package/esm2022/lib/components/slash-commands/ate-slash-commands.component.mjs +328 -0
  18. package/esm2022/lib/components/toolbar/ate-toolbar.component.mjs +531 -0
  19. package/esm2022/lib/components/ui/ate-button.component.mjs +91 -0
  20. package/esm2022/lib/components/ui/ate-separator.component.mjs +11 -0
  21. package/esm2022/lib/config/ate-editor.config.mjs +133 -0
  22. package/esm2022/lib/config/ate-global-config.token.mjs +6 -0
  23. package/esm2022/lib/config/ate-slash-commands.config.mjs +130 -0
  24. package/esm2022/lib/directives/ate-noop-value-accessor.directive.mjs +40 -0
  25. package/esm2022/lib/directives/ate-tooltip.directive.mjs +138 -0
  26. package/esm2022/lib/extensions/ate-block-controls.extension.mjs +156 -0
  27. package/esm2022/lib/extensions/ate-link-click-behavior.extension.mjs +32 -0
  28. package/esm2022/lib/extensions/ate-resizable-image.extension.mjs +277 -0
  29. package/esm2022/lib/extensions/ate-table.extension.mjs +27 -0
  30. package/esm2022/lib/extensions/ate-tiptap-state.extension.mjs +85 -0
  31. package/esm2022/lib/extensions/ate-upload-progress.extension.mjs +195 -0
  32. package/esm2022/lib/extensions/calculators/ate-discovery.calculator.mjs +62 -0
  33. package/esm2022/lib/extensions/calculators/ate-image.calculator.mjs +8 -0
  34. package/esm2022/lib/extensions/calculators/ate-marks.calculator.mjs +75 -0
  35. package/esm2022/lib/extensions/calculators/ate-selection.calculator.mjs +35 -0
  36. package/esm2022/lib/extensions/calculators/ate-structure.calculator.mjs +34 -0
  37. package/esm2022/lib/extensions/calculators/ate-table.calculator.mjs +38 -0
  38. package/esm2022/lib/models/ate-bubble-menu.model.mjs +53 -0
  39. package/esm2022/lib/models/ate-editor-config.model.mjs +2 -0
  40. package/esm2022/lib/models/ate-editor-state.model.mjs +90 -0
  41. package/esm2022/lib/models/ate-image.model.mjs +2 -0
  42. package/esm2022/lib/models/ate-slash-command.model.mjs +2 -0
  43. package/esm2022/lib/models/ate-toolbar.model.mjs +35 -0
  44. package/esm2022/lib/node-view/ate-angular-node-view.mjs +97 -0
  45. package/esm2022/lib/node-view/ate-injector.registry.mjs +16 -0
  46. package/esm2022/lib/node-view/ate-node-view.factory.mjs +125 -0
  47. package/esm2022/lib/node-view/ate-node-view.models.mjs +2 -0
  48. package/esm2022/lib/node-view/ate-node-view.renderer.mjs +154 -0
  49. package/esm2022/lib/node-view/ate-register-angular-component.mjs +49 -0
  50. package/esm2022/lib/services/ate-color-picker.service.mjs +194 -0
  51. package/esm2022/lib/services/ate-editor-commands.service.mjs +474 -0
  52. package/esm2022/lib/services/ate-i18n.service.mjs +422 -0
  53. package/esm2022/lib/services/ate-image.service.mjs +459 -0
  54. package/esm2022/lib/services/ate-link.service.mjs +99 -0
  55. package/esm2022/lib/utils/ate-color.utils.mjs +60 -0
  56. package/esm2022/public-api.mjs +40 -0
  57. package/fesm2022/flogeez-angular-tiptap-editor.mjs +321 -354
  58. package/fesm2022/flogeez-angular-tiptap-editor.mjs.map +1 -1
  59. package/index.d.ts +3 -1734
  60. package/lib/ate-editor.provider.d.ts +21 -0
  61. package/lib/components/bubble-menus/base/ate-base-bubble-menu.d.ts +71 -0
  62. package/lib/components/bubble-menus/base/ate-base-sub-bubble-menu.d.ts +60 -0
  63. package/lib/components/bubble-menus/color/ate-color-bubble-menu.component.d.ts +77 -0
  64. package/lib/components/bubble-menus/image/ate-image-bubble-menu.component.d.ts +49 -0
  65. package/lib/components/bubble-menus/link/ate-link-bubble-menu.component.d.ts +55 -0
  66. package/lib/components/bubble-menus/table/ate-cell-bubble-menu.component.d.ts +16 -0
  67. package/lib/components/bubble-menus/table/ate-table-bubble-menu.component.d.ts +25 -0
  68. package/lib/components/bubble-menus/text/ate-bubble-menu.component.d.ts +53 -0
  69. package/lib/components/color-picker/ate-color-picker.component.d.ts +54 -0
  70. package/lib/components/edit-toggle/ate-edit-toggle.component.d.ts +13 -0
  71. package/lib/components/editor/angular-tiptap-editor.component.d.ts +242 -0
  72. package/lib/components/editor/ate-block-controls.component.d.ts +44 -0
  73. package/lib/components/slash-commands/ate-slash-commands.component.d.ts +34 -0
  74. package/lib/components/toolbar/ate-toolbar.component.d.ts +47 -0
  75. package/lib/components/ui/ate-button.component.d.ts +25 -0
  76. package/lib/components/ui/ate-separator.component.d.ts +5 -0
  77. package/lib/config/ate-editor.config.d.ts +19 -0
  78. package/lib/config/ate-global-config.token.d.ts +6 -0
  79. package/lib/config/ate-slash-commands.config.d.ts +41 -0
  80. package/lib/directives/ate-noop-value-accessor.directive.d.ts +13 -0
  81. package/lib/directives/ate-tooltip.directive.d.ts +30 -0
  82. package/lib/extensions/ate-block-controls.extension.d.ts +10 -0
  83. package/lib/extensions/ate-link-click-behavior.extension.d.ts +2 -0
  84. package/lib/extensions/ate-resizable-image.extension.d.ts +27 -0
  85. package/lib/extensions/ate-table.extension.d.ts +2 -0
  86. package/lib/extensions/ate-tiptap-state.extension.d.ts +7 -0
  87. package/lib/extensions/ate-upload-progress.extension.d.ts +7 -0
  88. package/lib/extensions/calculators/ate-discovery.calculator.d.ts +7 -0
  89. package/lib/extensions/calculators/ate-image.calculator.d.ts +2 -0
  90. package/lib/extensions/calculators/ate-marks.calculator.d.ts +2 -0
  91. package/lib/extensions/calculators/ate-selection.calculator.d.ts +2 -0
  92. package/lib/extensions/calculators/ate-structure.calculator.d.ts +2 -0
  93. package/lib/extensions/calculators/ate-table.calculator.d.ts +2 -0
  94. package/lib/models/ate-bubble-menu.model.d.ts +33 -0
  95. package/lib/models/ate-editor-config.model.d.ts +113 -0
  96. package/lib/models/ate-editor-state.model.d.ts +109 -0
  97. package/lib/models/ate-image.model.d.ts +104 -0
  98. package/lib/models/ate-slash-command.model.d.ts +17 -0
  99. package/lib/models/ate-toolbar.model.d.ts +18 -0
  100. package/lib/node-view/ate-angular-node-view.d.ts +115 -0
  101. package/lib/node-view/ate-injector.registry.d.ts +3 -0
  102. package/lib/node-view/ate-node-view.factory.d.ts +10 -0
  103. package/lib/node-view/ate-node-view.models.d.ts +138 -0
  104. package/lib/node-view/ate-node-view.renderer.d.ts +23 -0
  105. package/lib/node-view/ate-register-angular-component.d.ts +35 -0
  106. package/lib/services/ate-color-picker.service.d.ts +65 -0
  107. package/lib/services/ate-editor-commands.service.d.ts +75 -0
  108. package/lib/services/ate-i18n.service.d.ts +406 -0
  109. package/lib/services/ate-image.service.d.ts +82 -0
  110. package/lib/services/ate-link.service.d.ts +42 -0
  111. package/lib/utils/ate-color.utils.d.ts +12 -0
  112. package/package.json +3 -1
  113. package/public-api.d.ts +31 -0
@@ -0,0 +1,422 @@
1
+ import { Injectable, signal, computed } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ const ENGLISH_TRANSLATIONS = {
4
+ toolbar: {
5
+ bold: "Bold\nCtrl+B",
6
+ italic: "Italic\nCtrl+I",
7
+ underline: "Underline\nCtrl+U",
8
+ strike: "Strikethrough\nCtrl+Shift+X",
9
+ code: "Inline Code\nCtrl+E",
10
+ codeBlock: "Code Block",
11
+ superscript: "Superscript",
12
+ subscript: "Subscript",
13
+ highlight: "Highlight",
14
+ highlightPicker: "Background Color",
15
+ heading1: "Heading 1",
16
+ heading2: "Heading 2",
17
+ heading3: "Heading 3",
18
+ bulletList: "Bullet List",
19
+ orderedList: "Ordered List",
20
+ blockquote: "Blockquote",
21
+ alignLeft: "Align Left",
22
+ alignCenter: "Align Center",
23
+ alignRight: "Align Right",
24
+ alignJustify: "Align Justify",
25
+ link: "Add Link",
26
+ image: "Add Image",
27
+ horizontalRule: "Horizontal Rule",
28
+ table: "Insert Table",
29
+ undo: "Undo\nCtrl+Z",
30
+ redo: "Redo\nCtrl+Shift+Z",
31
+ clear: "Clear",
32
+ textColor: "Text Color",
33
+ customColor: "Custom Color",
34
+ presets: "Presets",
35
+ },
36
+ bubbleMenu: {
37
+ bold: "Bold\nCtrl+B",
38
+ italic: "Italic\nCtrl+I",
39
+ underline: "Underline\nCtrl+U",
40
+ strike: "Strikethrough\nCtrl+Shift+X",
41
+ code: "Code\nCtrl+E",
42
+ superscript: "Superscript",
43
+ subscript: "Subscript",
44
+ highlight: "Highlight",
45
+ highlightPicker: "Background Color",
46
+ textColor: "Text Color",
47
+ link: "Link",
48
+ addLink: "Add Link",
49
+ editLink: "Edit Link",
50
+ removeLink: "Remove Link",
51
+ linkUrl: "Link URL",
52
+ linkText: "Link Text",
53
+ openLink: "Open Link",
54
+ customColor: "Custom Color",
55
+ presets: "Presets",
56
+ },
57
+ slashCommands: {
58
+ heading1: {
59
+ title: "Heading 1",
60
+ description: "Large section heading",
61
+ keywords: ["heading", "h1", "title", "1", "header"],
62
+ },
63
+ heading2: {
64
+ title: "Heading 2",
65
+ description: "Medium section heading",
66
+ keywords: ["heading", "h2", "title", "2", "header"],
67
+ },
68
+ heading3: {
69
+ title: "Heading 3",
70
+ description: "Small section heading",
71
+ keywords: ["heading", "h3", "title", "3", "header"],
72
+ },
73
+ bulletList: {
74
+ title: "Bullet List",
75
+ description: "Create a bullet list",
76
+ keywords: ["bullet", "list", "ul", "unordered"],
77
+ },
78
+ orderedList: {
79
+ title: "Ordered List",
80
+ description: "Create an ordered list",
81
+ keywords: ["ordered", "list", "ol", "numbered"],
82
+ },
83
+ blockquote: {
84
+ title: "Blockquote",
85
+ description: "Add a blockquote",
86
+ keywords: ["quote", "blockquote", "citation"],
87
+ },
88
+ code: {
89
+ title: "Code Block",
90
+ description: "Add a code block",
91
+ keywords: ["code", "codeblock", "pre", "programming"],
92
+ },
93
+ image: {
94
+ title: "Image",
95
+ description: "Insert an image",
96
+ keywords: ["image", "photo", "picture", "img"],
97
+ },
98
+ horizontalRule: {
99
+ title: "Horizontal Rule",
100
+ description: "Add a horizontal line",
101
+ keywords: ["hr", "horizontal", "rule", "line", "separator"],
102
+ },
103
+ table: {
104
+ title: "Table",
105
+ description: "Insert a table",
106
+ keywords: ["table", "grid", "data", "rows", "columns"],
107
+ },
108
+ },
109
+ table: {
110
+ addRowBefore: "Add row before",
111
+ addRowAfter: "Add row after",
112
+ deleteRow: "Delete row",
113
+ addColumnBefore: "Add column before",
114
+ addColumnAfter: "Add column after",
115
+ deleteColumn: "Delete column",
116
+ deleteTable: "Delete table",
117
+ toggleHeaderRow: "Toggle header row",
118
+ toggleHeaderColumn: "Toggle header column",
119
+ mergeCells: "Merge cells",
120
+ splitCell: "Split cell",
121
+ },
122
+ imageUpload: {
123
+ selectImage: "Select Image",
124
+ loadError: "Error loading image",
125
+ uploadingImage: "Uploading image...",
126
+ uploadProgress: "Upload Progress",
127
+ uploadError: "Upload Error",
128
+ uploadSuccess: "Upload Success",
129
+ imageTooLarge: "Image too large",
130
+ invalidFileType: "Invalid file type",
131
+ dragDropText: "Drag and drop images here",
132
+ changeImage: "Change Image",
133
+ downloadImage: "Download Image",
134
+ deleteImage: "Delete Image",
135
+ resizeSmall: "Small",
136
+ resizeMedium: "Medium",
137
+ resizeLarge: "Large",
138
+ resizeOriginal: "Original",
139
+ alignLeft: "Align Left",
140
+ alignCenter: "Align Center",
141
+ alignRight: "Align Right",
142
+ resizing: "Resizing...",
143
+ compressing: "Compressing...",
144
+ compressionError: "Error during compression",
145
+ validating: "Validating file...",
146
+ uploadingToServer: "Uploading to server...",
147
+ replacingImage: "Replacing image...",
148
+ insertingImage: "Inserting into editor...",
149
+ noFileSelected: "No image file selected",
150
+ selectionCancelled: "Selection cancelled",
151
+ },
152
+ editor: {
153
+ placeholder: "Start typing...",
154
+ character: "character",
155
+ word: "word",
156
+ linkPrompt: "Enter link URL",
157
+ linkUrlPrompt: "Enter URL",
158
+ confirmDelete: "Are you sure you want to delete this?",
159
+ toggleEdit: "Switch to Edit Mode",
160
+ viewMode: "Switch to View Mode",
161
+ blockAdd: "Click to add a block",
162
+ blockDrag: "Drag to move this block",
163
+ },
164
+ common: {
165
+ cancel: "Cancel",
166
+ confirm: "Confirm",
167
+ apply: "Apply",
168
+ delete: "Delete",
169
+ save: "Save",
170
+ close: "Close",
171
+ loading: "Loading",
172
+ error: "Error",
173
+ success: "Success",
174
+ },
175
+ };
176
+ const FRENCH_TRANSLATIONS = {
177
+ toolbar: {
178
+ bold: "Gras\nCtrl+B",
179
+ italic: "Italique\nCtrl+I",
180
+ underline: "Souligné\nCtrl+U",
181
+ strike: "Barré\nCtrl+Shift+X",
182
+ code: "Code en ligne\nCtrl+E",
183
+ codeBlock: "Bloc de code",
184
+ superscript: "Exposant",
185
+ subscript: "Indice",
186
+ highlight: "Surligner",
187
+ highlightPicker: "Couleur de fond",
188
+ heading1: "Titre 1",
189
+ heading2: "Titre 2",
190
+ heading3: "Titre 3",
191
+ bulletList: "Liste à puces",
192
+ orderedList: "Liste numérotée",
193
+ blockquote: "Citation",
194
+ alignLeft: "Aligner à gauche",
195
+ alignCenter: "Centrer",
196
+ alignRight: "Aligner à droite",
197
+ alignJustify: "Justifier",
198
+ link: "Ajouter un lien",
199
+ image: "Ajouter une image",
200
+ horizontalRule: "Ligne horizontale",
201
+ table: "Insérer un tableau",
202
+ undo: "Annuler\nCtrl+Z",
203
+ redo: "Refaire\nCtrl+Shift+Z",
204
+ clear: "Vider",
205
+ textColor: "Couleur du texte",
206
+ customColor: "Couleur personnalisée",
207
+ presets: "Préréglages",
208
+ },
209
+ bubbleMenu: {
210
+ bold: "Gras\nCtrl+B",
211
+ italic: "Italique\nCtrl+I",
212
+ underline: "Souligné\nCtrl+U",
213
+ strike: "Barré\nCtrl+Shift+X",
214
+ code: "Code\nCtrl+E",
215
+ superscript: "Exposant",
216
+ subscript: "Indice",
217
+ highlight: "Surligner",
218
+ highlightPicker: "Couleur de fond",
219
+ textColor: "Couleur du texte",
220
+ link: "Lien",
221
+ addLink: "Ajouter un lien",
222
+ editLink: "Modifier le lien",
223
+ removeLink: "Supprimer le lien",
224
+ linkUrl: "URL du lien",
225
+ linkText: "Texte du lien",
226
+ openLink: "Ouvrir le lien",
227
+ customColor: "Couleur personnalisée",
228
+ presets: "Préréglages",
229
+ },
230
+ slashCommands: {
231
+ heading1: {
232
+ title: "Titre 1",
233
+ description: "Grand titre de section",
234
+ keywords: ["heading", "h1", "titre", "title", "1", "header"],
235
+ },
236
+ heading2: {
237
+ title: "Titre 2",
238
+ description: "Titre de sous-section",
239
+ keywords: ["heading", "h2", "titre", "title", "2", "header"],
240
+ },
241
+ heading3: {
242
+ title: "Titre 3",
243
+ description: "Petit titre",
244
+ keywords: ["heading", "h3", "titre", "title", "3", "header"],
245
+ },
246
+ bulletList: {
247
+ title: "Liste à puces",
248
+ description: "Créer une liste à puces",
249
+ keywords: ["bullet", "list", "liste", "puces", "ul"],
250
+ },
251
+ orderedList: {
252
+ title: "Liste numérotée",
253
+ description: "Créer une liste numérotée",
254
+ keywords: ["numbered", "list", "liste", "numérotée", "ol", "ordered"],
255
+ },
256
+ blockquote: {
257
+ title: "Citation",
258
+ description: "Ajouter une citation",
259
+ keywords: ["quote", "blockquote", "citation"],
260
+ },
261
+ code: {
262
+ title: "Bloc de code",
263
+ description: "Ajouter un bloc de code",
264
+ keywords: ["code", "codeblock", "pre", "programmation"],
265
+ },
266
+ image: {
267
+ title: "Image",
268
+ description: "Insérer une image",
269
+ keywords: ["image", "photo", "picture", "img"],
270
+ },
271
+ horizontalRule: {
272
+ title: "Ligne horizontale",
273
+ description: "Ajouter une ligne de séparation",
274
+ keywords: ["hr", "horizontal", "rule", "ligne", "séparation"],
275
+ },
276
+ table: {
277
+ title: "Tableau",
278
+ description: "Insérer un tableau",
279
+ keywords: ["table", "tableau", "grid", "grille", "data", "données", "rows", "colonnes"],
280
+ },
281
+ },
282
+ table: {
283
+ addRowBefore: "Ajouter une ligne avant",
284
+ addRowAfter: "Ajouter une ligne après",
285
+ deleteRow: "Supprimer la ligne",
286
+ addColumnBefore: "Ajouter une colonne avant",
287
+ addColumnAfter: "Ajouter une colonne après",
288
+ deleteColumn: "Supprimer la colonne",
289
+ deleteTable: "Supprimer le tableau",
290
+ toggleHeaderRow: "Basculer ligne d'en-tête",
291
+ toggleHeaderColumn: "Basculer colonne d'en-tête",
292
+ mergeCells: "Fusionner les cellules",
293
+ splitCell: "Diviser la cellule",
294
+ },
295
+ imageUpload: {
296
+ selectImage: "Sélectionner une image",
297
+ loadError: "Erreur de chargement de l'image",
298
+ uploadingImage: "Téléchargement de l'image...",
299
+ uploadProgress: "Progression du téléchargement",
300
+ uploadError: "Erreur de téléchargement",
301
+ uploadSuccess: "Téléchargement réussi",
302
+ imageTooLarge: "Image trop volumineuse",
303
+ invalidFileType: "Type de fichier invalide",
304
+ dragDropText: "Glissez et déposez des images ici",
305
+ changeImage: "Changer l'image",
306
+ downloadImage: "Télécharger l'image",
307
+ deleteImage: "Supprimer l'image",
308
+ resizeSmall: "Petit",
309
+ resizeMedium: "Moyen",
310
+ resizeLarge: "Grand",
311
+ resizeOriginal: "Original",
312
+ alignLeft: "Aligner à gauche",
313
+ alignCenter: "Aligner au centre",
314
+ alignRight: "Aligner à droite",
315
+ resizing: "Redimensionnement...",
316
+ compressing: "Compression...",
317
+ compressionError: "Erreur lors de la compression",
318
+ validating: "Validation du fichier...",
319
+ uploadingToServer: "Upload vers le serveur...",
320
+ replacingImage: "Remplacement de l'image...",
321
+ insertingImage: "Insertion dans l'éditeur...",
322
+ noFileSelected: "Aucun fichier image sélectionné",
323
+ selectionCancelled: "Sélection annulée",
324
+ },
325
+ editor: {
326
+ placeholder: "Commencez à écrire...",
327
+ character: "caractère",
328
+ word: "mot",
329
+ linkPrompt: "Entrez l'URL du lien",
330
+ linkUrlPrompt: "Entrez l'URL",
331
+ confirmDelete: "Êtes-vous sûr de vouloir supprimer ceci ?",
332
+ toggleEdit: "Passer en mode édition",
333
+ viewMode: "Passer en mode affichage",
334
+ blockAdd: "Cliquer pour ajouter un bloc",
335
+ blockDrag: "Faire glisser pour déplacer ce bloc",
336
+ },
337
+ common: {
338
+ cancel: "Annuler",
339
+ confirm: "Confirmer",
340
+ apply: "Appliquer",
341
+ delete: "Supprimer",
342
+ save: "Sauvegarder",
343
+ close: "Fermer",
344
+ loading: "Chargement",
345
+ error: "Erreur",
346
+ success: "Succès",
347
+ },
348
+ };
349
+ export class AteI18nService {
350
+ constructor() {
351
+ this._currentLocale = signal("en");
352
+ this._translations = signal({
353
+ en: ENGLISH_TRANSLATIONS,
354
+ fr: FRENCH_TRANSLATIONS,
355
+ });
356
+ // Public signals
357
+ this.currentLocale = this._currentLocale.asReadonly();
358
+ /** All loaded translations (useful for dynamic key access) */
359
+ this.allTranslations = this._translations.asReadonly();
360
+ this.translations = computed(() => this._translations()[this._currentLocale()]);
361
+ // Fast translation methods
362
+ this.t = computed(() => this.translations());
363
+ this.toolbar = computed(() => this.translations().toolbar);
364
+ this.bubbleMenu = computed(() => this.translations().bubbleMenu);
365
+ this.slashCommands = computed(() => this.translations().slashCommands);
366
+ this.table = computed(() => this.translations().table);
367
+ this.imageUpload = computed(() => this.translations().imageUpload);
368
+ this.editor = computed(() => this.translations().editor);
369
+ this.common = computed(() => this.translations().common);
370
+ // Automatically detect browser language
371
+ this.detectBrowserLanguage();
372
+ }
373
+ setLocale(locale) {
374
+ this._currentLocale.set(locale);
375
+ }
376
+ autoDetectLocale() {
377
+ this.detectBrowserLanguage();
378
+ }
379
+ getSupportedLocales() {
380
+ return Object.keys(this._translations());
381
+ }
382
+ addTranslations(locale, translations) {
383
+ this._translations.update(current => {
384
+ const existing = current[locale] || ENGLISH_TRANSLATIONS;
385
+ return {
386
+ ...current,
387
+ [locale]: {
388
+ ...existing,
389
+ ...translations,
390
+ },
391
+ };
392
+ });
393
+ }
394
+ detectBrowserLanguage() {
395
+ const browserLang = navigator.language.toLowerCase();
396
+ if (browserLang.startsWith("fr")) {
397
+ this._currentLocale.set("fr");
398
+ }
399
+ else {
400
+ this._currentLocale.set("en");
401
+ }
402
+ }
403
+ // Utility methods for components
404
+ getToolbarTitle(key) {
405
+ return this.translations().toolbar[key];
406
+ }
407
+ getBubbleMenuTitle(key) {
408
+ return this.translations().bubbleMenu[key];
409
+ }
410
+ getSlashCommand(key) {
411
+ return this.translations().slashCommands[key];
412
+ }
413
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AteI18nService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
414
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AteI18nService, providedIn: "root" }); }
415
+ }
416
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AteI18nService, decorators: [{
417
+ type: Injectable,
418
+ args: [{
419
+ providedIn: "root",
420
+ }]
421
+ }], ctorParameters: () => [] });
422
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLWkxOG4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdGlwdGFwLWVkaXRvci9zcmMvbGliL3NlcnZpY2VzL2F0ZS1pMThuLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQStMN0QsTUFBTSxvQkFBb0IsR0FBb0I7SUFDNUMsT0FBTyxFQUFFO1FBQ1AsSUFBSSxFQUFFLGNBQWM7UUFDcEIsTUFBTSxFQUFFLGdCQUFnQjtRQUN4QixTQUFTLEVBQUUsbUJBQW1CO1FBQzlCLE1BQU0sRUFBRSw2QkFBNkI7UUFDckMsSUFBSSxFQUFFLHFCQUFxQjtRQUMzQixTQUFTLEVBQUUsWUFBWTtRQUN2QixXQUFXLEVBQUUsYUFBYTtRQUMxQixTQUFTLEVBQUUsV0FBVztRQUN0QixTQUFTLEVBQUUsV0FBVztRQUN0QixlQUFlLEVBQUUsa0JBQWtCO1FBQ25DLFFBQVEsRUFBRSxXQUFXO1FBQ3JCLFFBQVEsRUFBRSxXQUFXO1FBQ3JCLFFBQVEsRUFBRSxXQUFXO1FBQ3JCLFVBQVUsRUFBRSxhQUFhO1FBQ3pCLFdBQVcsRUFBRSxjQUFjO1FBQzNCLFVBQVUsRUFBRSxZQUFZO1FBQ3hCLFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFdBQVcsRUFBRSxjQUFjO1FBQzNCLFVBQVUsRUFBRSxhQUFhO1FBQ3pCLFlBQVksRUFBRSxlQUFlO1FBQzdCLElBQUksRUFBRSxVQUFVO1FBQ2hCLEtBQUssRUFBRSxXQUFXO1FBQ2xCLGNBQWMsRUFBRSxpQkFBaUI7UUFDakMsS0FBSyxFQUFFLGNBQWM7UUFDckIsSUFBSSxFQUFFLGNBQWM7UUFDcEIsSUFBSSxFQUFFLG9CQUFvQjtRQUMxQixLQUFLLEVBQUUsT0FBTztRQUNkLFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFdBQVcsRUFBRSxjQUFj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QUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELGtCQUFrQixDQUFDLEdBQXdDO1FBQ3pELE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsZUFBZSxDQUFDLEdBQTJDO1FBQ3pELE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoRCxDQUFDOytHQTFFVSxjQUFjO21IQUFkLGNBQWMsY0FGYixNQUFNOzs0RkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIHNpZ25hbCwgY29tcHV0ZWQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5leHBvcnQgdHlwZSBTdXBwb3J0ZWRMb2NhbGUgPSBcImVuXCIgfCBcImZyXCIgfCAoc3RyaW5nICYge30pO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF0ZVRyYW5zbGF0aW9ucyB7XG4gIC8vIFRvb2xiYXJcbiAgdG9vbGJhcjoge1xuICAgIGJvbGQ6IHN0cmluZztcbiAgICBpdGFsaWM6IHN0cmluZztcbiAgICB1bmRlcmxpbmU6IHN0cmluZztcbiAgICBzdHJpa2U6IHN0cmluZztcbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgY29kZUJsb2NrOiBzdHJpbmc7XG4gICAgc3VwZXJzY3JpcHQ6IHN0cmluZztcbiAgICBzdWJzY3JpcHQ6IHN0cmluZztcbiAgICBoaWdobGlnaHQ6IHN0cmluZztcbiAgICBoaWdobGlnaHRQaWNrZXI6IHN0cmluZztcbiAgICBoZWFkaW5nMTogc3RyaW5nO1xuICAgIGhlYWRpbmcyOiBzdHJpbmc7XG4gICAgaGVhZGluZzM6IHN0cmluZztcbiAgICBidWxsZXRMaXN0OiBzdHJpbmc7XG4gICAgb3JkZXJlZExpc3Q6IHN0cmluZztcbiAgICBibG9ja3F1b3RlOiBzdHJpbmc7XG4gICAgYWxpZ25MZWZ0OiBzdHJpbmc7XG4gICAgYWxpZ25DZW50ZXI6IHN0cmluZztcbiAgICBhbGlnblJpZ2h0OiBzdHJpbmc7XG4gICAgYWxpZ25KdXN0aWZ5OiBzdHJpbmc7XG4gICAgbGluazogc3RyaW5nO1xuICAgIGltYWdlOiBzdHJpbmc7XG4gICAgaG9yaXpvbnRhbFJ1bGU6IHN0cmluZztcbiAgICB0YWJsZTogc3RyaW5nO1xuICAgIHVuZG86IHN0cmluZztcbiAgICByZWRvOiBzdHJpbmc7XG4gICAgY2xlYXI6IHN0cmluZztcbiAgICB0ZXh0Q29sb3I6IHN0cmluZztcbiAgICBjdXN0b21Db2xvcjogc3RyaW5nO1xuICAgIHByZXNldHM6IHN0cmluZztcbiAgfTtcblxuICAvLyBCdWJibGUgTWVudVxuICBidWJibGVNZW51OiB7XG4gICAgYm9sZDogc3RyaW5nO1xuICAgIGl0YWxpYzogc3RyaW5nO1xuICAgIHVuZGVybGluZTogc3RyaW5nO1xuICAgIHN0cmlrZTogc3RyaW5nO1xuICAgIGNvZGU6IHN0cmluZztcbiAgICBzdXBlcnNjcmlwdDogc3RyaW5nO1xuICAgIHN1YnNjcmlwdDogc3RyaW5nO1xuICAgIGhpZ2hsaWdodDogc3RyaW5nO1xuICAgIGhpZ2hsaWdodFBpY2tlcjogc3RyaW5nO1xuICAgIHRleHRDb2xvcjogc3RyaW5nO1xuICAgIGxpbms6IHN0cmluZztcbiAgICBhZGRMaW5rOiBzdHJpbmc7XG4gICAgZWRpdExpbms6IHN0cmluZztcbiAgICByZW1vdmVMaW5rOiBzdHJpbmc7XG4gICAgbGlua1VybDogc3RyaW5nO1xuICAgIGxpbmtUZXh0OiBzdHJpbmc7XG4gICAgb3Blbkxpbms6IHN0cmluZztcbiAgICBjdXN0b21Db2xvcjogc3RyaW5nO1xuICAgIHByZXNldHM6IHN0cmluZztcbiAgfTtcblxuICAvLyBTbGFzaCBDb21tYW5kc1xuICBzbGFzaENvbW1hbmRzOiB7XG4gICAgaGVhZGluZzE6IHtcbiAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgICAga2V5d29yZHM6IHN0cmluZ1tdO1xuICAgIH07XG4gICAgaGVhZGluZzI6IHtcbiAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgICAga2V5d29yZHM6IHN0cmluZ1tdO1xuICAgIH07XG4gICAgaGVhZGluZzM6IHtcbiAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgICAga2V5d29yZHM6IHN0cmluZ1tdO1xuICAgIH07XG4gICAgYnVsbGV0TGlzdDoge1xuICAgICAgdGl0bGU6IHN0cmluZztcbiAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgICBrZXl3b3Jkczogc3RyaW5nW107XG4gICAgfTtcbiAgICBvcmRlcmVkTGlzdDoge1xuICAgICAgdGl0bGU6IHN0cmluZztcbiAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgICBrZXl3b3Jkczogc3RyaW5nW107XG4gICAgfTtcbiAgICBibG9ja3F1b3RlOiB7XG4gICAgICB0aXRsZTogc3RyaW5nO1xuICAgICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICAgIGtleXdvcmRzOiBzdHJpbmdbXTtcbiAgICB9O1xuICAgIGNvZGU6IHtcbiAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgICAga2V5d29yZHM6IHN0cmluZ1tdO1xuICAgIH07XG4gICAgaW1hZ2U6IHtcbiAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgICAga2V5d29yZHM6IHN0cmluZ1tdO1xuICAgIH07XG4gICAgaG9yaXpvbnRhbFJ1bGU6IHtcbiAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgICAga2V5d29yZHM6IHN0cmluZ1tdO1xuICAgIH07XG4gICAgdGFibGU6IHtcbiAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgICAga2V5d29yZHM6IHN0cmluZ1tdO1xuICAgIH07XG4gIH07XG5cbiAgLy8gVGFibGUgQWN0aW9uc1xuICB0YWJsZToge1xuICAgIGFkZFJvd0JlZm9yZTogc3RyaW5nO1xuICAgIGFkZFJvd0FmdGVyOiBzdHJpbmc7XG4gICAgZGVsZXRlUm93OiBzdHJpbmc7XG4gICAgYWRkQ29sdW1uQmVmb3JlOiBzdHJpbmc7XG4gICAgYWRkQ29sdW1uQWZ0ZXI6IHN0cmluZztcbiAgICBkZWxldGVDb2x1bW46IHN0cmluZztcbiAgICBkZWxldGVUYWJsZTogc3RyaW5nO1xuICAgIHRvZ2dsZUhlYWRlclJvdzogc3RyaW5nO1xuICAgIHRvZ2dsZUhlYWRlckNvbHVtbjogc3RyaW5nO1xuICAgIG1lcmdlQ2VsbHM6IHN0cmluZztcbiAgICBzcGxpdENlbGw6IHN0cmluZztcbiAgfTtcblxuICAvLyBJbWFnZSBVcGxvYWRcbiAgaW1hZ2VVcGxvYWQ6IHtcbiAgICBzZWxlY3RJbWFnZTogc3RyaW5nO1xuICAgIGxvYWRFcnJvcjogc3RyaW5nO1xuICAgIHVwbG9hZGluZ0ltYWdlOiBzdHJpbmc7XG4gICAgdXBsb2FkUHJvZ3Jlc3M6IHN0cmluZztcbiAgICB1cGxvYWRFcnJvcjogc3RyaW5nO1xuICAgIHVwbG9hZFN1Y2Nlc3M6IHN0cmluZztcbiAgICBpbWFnZVRvb0xhcmdlOiBzdHJpbmc7XG4gICAgaW52YWxpZEZpbGVUeXBlOiBzdHJpbmc7XG4gICAgZHJhZ0Ryb3BUZXh0OiBzdHJpbmc7XG4gICAgY2hhbmdlSW1hZ2U6IHN0cmluZztcbiAgICBkb3dubG9hZEltYWdlOiBzdHJpbmc7XG4gICAgZGVsZXRlSW1hZ2U6IHN0cmluZztcbiAgICByZXNpemVTbWFsbDogc3RyaW5nO1xuICAgIHJlc2l6ZU1lZGl1bTogc3RyaW5nO1xuICAgIHJlc2l6ZUxhcmdlOiBzdHJpbmc7XG4gICAgcmVzaXplT3JpZ2luYWw6IHN0cmluZztcbiAgICBhbGlnbkxlZnQ6IHN0cmluZztcbiAgICBhbGlnbkNlbnRlcjogc3RyaW5nO1xuICAgIGFsaWduUmlnaHQ6IHN0cmluZztcbiAgICByZXNpemluZzogc3RyaW5nO1xuICAgIGNvbXByZXNzaW5nOiBzdHJpbmc7XG4gICAgY29tcHJlc3Npb25FcnJvcjogc3RyaW5nO1xuICAgIHZhbGlkYXRpbmc6IHN0cmluZztcbiAgICB1cGxvYWRpbmdUb1NlcnZlcjogc3RyaW5nO1xuICAgIHJlcGxhY2luZ0ltYWdlOiBzdHJpbmc7XG4gICAgaW5zZXJ0aW5nSW1hZ2U6IHN0cmluZztcbiAgICBub0ZpbGVTZWxlY3RlZDogc3RyaW5nO1xuICAgIHNlbGVjdGlvbkNhbmNlbGxlZDogc3RyaW5nO1xuICB9O1xuXG4gIC8vIEVkaXRvclxuICBlZGl0b3I6IHtcbiAgICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICAgIGNoYXJhY3Rlcjogc3RyaW5nO1xuICAgIHdvcmQ6IHN0cmluZztcbiAgICBsaW5rUHJvbXB0OiBzdHJpbmc7XG4gICAgbGlua1VybFByb21wdDogc3RyaW5nO1xuICAgIGNvbmZpcm1EZWxldGU6IHN0cmluZztcbiAgICB0b2dnbGVFZGl0OiBzdHJpbmc7XG4gICAgdmlld01vZGU6IHN0cmluZztcbiAgICBibG9ja0FkZDogc3RyaW5nO1xuICAgIGJsb2NrRHJhZzogc3RyaW5nO1xuICB9O1xuXG4gIC8vIENvbW1vblxuICBjb21tb246IHtcbiAgICBjYW5jZWw6IHN0cmluZztcbiAgICBjb25maXJtOiBzdHJpbmc7XG4gICAgYXBwbHk6IHN0cmluZztcbiAgICBkZWxldGU6IHN0cmluZztcbiAgICBzYXZlOiBzdHJpbmc7XG4gICAgY2xvc2U6IHN0cmluZztcbiAgICBsb2FkaW5nOiBzdHJpbmc7XG4gICAgZXJyb3I6IHN0cmluZztcbiAgICBzdWNjZXNzOiBzdHJpbmc7XG4gIH07XG59XG5cbmNvbnN0IEVOR0xJU0hfVFJBTlNMQVRJT05TOiBBdGVUcmFuc2xhdGlvbnMgPSB7XG4gIHRvb2xiYXI6IHtcbiAgICBib2xkOiBcIkJvbGRcXG5DdHJsK0JcIixcbiAgICBpdGFsaWM6IFwiSXRhbGljXFxuQ3RybCtJXCIsXG4gICAgdW5kZXJsaW5lOiBcIlVuZGVybGluZVxcbkN0cmwrVVwiLFxuICAgIHN0cmlrZTogXCJTdHJpa2V0aHJvdWdoXFxuQ3RybCtTaGlmdCtYXCIsXG4gICAgY29kZTogXCJJbmxpbmUgQ29kZVxcbkN0cmwrRVwiLFxuICAgIGNvZGVCbG9jazogXCJDb2RlIEJsb2NrXCIsXG4gICAgc3VwZXJzY3JpcHQ6IFwiU3VwZXJzY3JpcHRcIixcbiAgICBzdWJzY3JpcHQ6IFwiU3Vic2NyaXB0XCIsXG4gICAgaGlnaGxpZ2h0OiBcIkhpZ2hsaWdodFwiLFxuICAgIGhpZ2hsaWdodFBpY2tlcjogXCJCYWNrZ3JvdW5kIENvbG9yXCIsXG4gICAgaGVhZGluZzE6IFwiSGVhZGluZyAxXCIsXG4gICAgaGVhZGluZzI6IFwiSGVhZGluZyAyXCIsXG4gICAgaGVhZGluZzM6IFwiSGVhZGluZyAzXCIsXG4gICAgYnVsbGV0TGlzdDogXCJCdWxsZXQgTGlzdFwiLFxuICAgIG9yZGVyZWRMaXN0OiBcIk9yZGVyZWQgTGlzdFwiLFxuICAgIGJsb2NrcXVvdGU6IFwiQmxvY2txdW90ZVwiLFxuICAgIGFsaWduTGVmdDogXCJBbGlnbiBMZWZ0XCIsXG4gICAgYWxpZ25DZW50ZXI6IFwiQWxpZ24gQ2VudGVyXCIsXG4gICAgYWxpZ25SaWdodDogXCJBbGlnbiBSaWdodFwiLFxuICAgIGFsaWduSnVzdGlmeTogXCJBbGlnbiBKdXN0aWZ5XCIsXG4gICAgbGluazogXCJBZGQgTGlua1wiLFxuICAgIGltYWdlOiBcIkFkZCBJbWFnZVwiLFxuICAgIGhvcml6b250YWxSdWxlOiBcIkhvcml6b250YWwgUnVsZVwiLFxuICAgIHRhYmxlOiBcIkluc2VydCBUYWJsZVwiLFxuICAgIHVuZG86IFwiVW5kb1xcbkN0cmwrWlwiLFxuICAgIHJlZG86IFwiUmVkb1xcbkN0cmwrU2hpZnQrWlwiLFxuICAgIGNsZWFyOiBcIkNsZWFyXCIsXG4gICAgdGV4dENvbG9yOiBcIlRleHQgQ29sb3JcIixcbiAgICBjdXN0b21Db2xvcjogXCJDdXN0b20gQ29sb3JcIixcbiAgICBwcmVzZXRzOiBcIlByZXNldHNcIixcbiAgfSxcbiAgYnViYmxlTWVudToge1xuICAgIGJvbGQ6IFwiQm9sZFxcbkN0cmwrQlwiLFxuICAgIGl0YWxpYzogXCJJdGFsaWNcXG5DdHJsK0lcIixcbiAgICB1bmRlcmxpbmU6IFwiVW5kZXJsaW5lXFxuQ3RybCtVXCIsXG4gICAgc3RyaWtlOiBcIlN0cmlrZXRocm91Z2hcXG5DdHJsK1NoaWZ0K1hcIixcbiAgICBjb2RlOiBcIkNvZGVcXG5DdHJsK0VcIixcbiAgICBzdXBlcnNjcmlwdDogXCJTdXBlcnNjcmlwdFwiLFxuICAgIHN1YnNjcmlwdDogXCJTdWJzY3JpcHRcIixcbiAgICBoaWdobGlnaHQ6IFwiSGlnaGxpZ2h0XCIsXG4gICAgaGlnaGxpZ2h0UGlja2VyOiBcIkJhY2tncm91bmQgQ29sb3JcIixcbiAgICB0ZXh0Q29sb3I6IFwiVGV4dCBDb2xvclwiLFxuICAgIGxpbms6IFwiTGlua1wiLFxuICAgIGFkZExpbms6IFwiQWRkIExpbmtcIixcbiAgICBlZGl0TGluazogXCJFZGl0IExpbmtcIixcbiAgICByZW1vdmVMaW5rOiBcIlJlbW92ZSBMaW5rXCIsXG4gICAgbGlua1VybDogXCJMaW5rIFVSTFwiLFxuICAgIGxpbmtUZXh0OiBcIkxpbmsgVGV4dFwiLFxuICAgIG9wZW5MaW5rOiBcIk9wZW4gTGlua1wiLFxuICAgIGN1c3RvbUNvbG9yOiBcIkN1c3RvbSBDb2xvclwiLFxuICAgIHByZXNldHM6IFwiUHJlc2V0c1wiLFxuICB9LFxuICBzbGFzaENvbW1hbmRzOiB7XG4gICAgaGVhZGluZzE6IHtcbiAgICAgIHRpdGxlOiBcIkhlYWRpbmcgMVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGFyZ2Ugc2VjdGlvbiBoZWFkaW5nXCIsXG4gICAgICBrZXl3b3JkczogW1wiaGVhZGluZ1wiLCBcImgxXCIsIFwidGl0bGVcIiwgXCIxXCIsIFwiaGVhZGVyXCJdLFxuICAgIH0sXG4gICAgaGVhZGluZzI6IHtcbiAgICAgIHRpdGxlOiBcIkhlYWRpbmcgMlwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiTWVkaXVtIHNlY3Rpb24gaGVhZGluZ1wiLFxuICAgICAga2V5d29yZHM6IFtcImhlYWRpbmdcIiwgXCJoMlwiLCBcInRpdGxlXCIsIFwiMlwiLCBcImhlYWRlclwiXSxcbiAgICB9LFxuICAgIGhlYWRpbmczOiB7XG4gICAgICB0aXRsZTogXCJIZWFkaW5nIDNcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlNtYWxsIHNlY3Rpb24gaGVhZGluZ1wiLFxuICAgICAga2V5d29yZHM6IFtcImhlYWRpbmdcIiwgXCJoM1wiLCBcInRpdGxlXCIsIFwiM1wiLCBcImhlYWRlclwiXSxcbiAgICB9LFxuICAgIGJ1bGxldExpc3Q6IHtcbiAgICAgIHRpdGxlOiBcIkJ1bGxldCBMaXN0XCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJDcmVhdGUgYSBidWxsZXQgbGlzdFwiLFxuICAgICAga2V5d29yZHM6IFtcImJ1bGxldFwiLCBcImxpc3RcIiwgXCJ1bFwiLCBcInVub3JkZXJlZFwiXSxcbiAgICB9LFxuICAgIG9yZGVyZWRMaXN0OiB7XG4gICAgICB0aXRsZTogXCJPcmRlcmVkIExpc3RcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNyZWF0ZSBhbiBvcmRlcmVkIGxpc3RcIixcbiAgICAgIGtleXdvcmRzOiBbXCJvcmRlcmVkXCIsIFwibGlzdFwiLCBcIm9sXCIsIFwibnVtYmVyZWRcIl0sXG4gICAgfSxcbiAgICBibG9ja3F1b3RlOiB7XG4gICAgICB0aXRsZTogXCJCbG9ja3F1b3RlXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJBZGQgYSBibG9ja3F1b3RlXCIsXG4gICAgICBrZXl3b3JkczogW1wicXVvdGVcIiwgXCJibG9ja3F1b3RlXCIsIFwiY2l0YXRpb25cIl0sXG4gICAgfSxcbiAgICBjb2RlOiB7XG4gICAgICB0aXRsZTogXCJDb2RlIEJsb2NrXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJBZGQgYSBjb2RlIGJsb2NrXCIsXG4gICAgICBrZXl3b3JkczogW1wiY29kZVwiLCBcImNvZGVibG9ja1wiLCBcInByZVwiLCBcInByb2dyYW1taW5nXCJdLFxuICAgIH0sXG4gICAgaW1hZ2U6IHtcbiAgICAgIHRpdGxlOiBcIkltYWdlXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJJbnNlcnQgYW4gaW1hZ2VcIixcbiAgICAgIGtleXdvcmRzOiBbXCJpbWFnZVwiLCBcInBob3RvXCIsIFwicGljdHVyZVwiLCBcImltZ1wiXSxcbiAgICB9LFxuICAgIGhvcml6b250YWxSdWxlOiB7XG4gICAgICB0aXRsZTogXCJIb3Jpem9udGFsIFJ1bGVcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFkZCBhIGhvcml6b250YWwgbGluZVwiLFxuICAgICAga2V5d29yZHM6IFtcImhyXCIsIFwiaG9yaXpvbnRhbFwiLCBcInJ1bGVcIiwgXCJsaW5lXCIsIFwic2VwYXJhdG9yXCJdLFxuICAgIH0sXG4gICAgdGFibGU6IHtcbiAgICAgIHRpdGxlOiBcIlRhYmxlXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJJbnNlcnQgYSB0YWJsZVwiLFxuICAgICAga2V5d29yZHM6IFtcInRhYmxlXCIsIFwiZ3JpZFwiLCBcImRhdGFcIiwgXCJyb3dzXCIsIFwiY29sdW1uc1wiXSxcbiAgICB9LFxuICB9LFxuICB0YWJsZToge1xuICAgIGFkZFJvd0JlZm9yZTogXCJBZGQgcm93IGJlZm9yZVwiLFxuICAgIGFkZFJvd0FmdGVyOiBcIkFkZCByb3cgYWZ0ZXJcIixcbiAgICBkZWxldGVSb3c6IFwiRGVsZXRlIHJvd1wiLFxuICAgIGFkZENvbHVtbkJlZm9yZTogXCJBZGQgY29sdW1uIGJlZm9yZVwiLFxuICAgIGFkZENvbHVtbkFmdGVyOiBcIkFkZCBjb2x1bW4gYWZ0ZXJcIixcbiAgICBkZWxldGVDb2x1bW46IFwiRGVsZXRlIGNvbHVtblwiLFxuICAgIGRlbGV0ZVRhYmxlOiBcIkRlbGV0ZSB0YWJsZVwiLFxuICAgIHRvZ2dsZUhlYWRlclJvdzogXCJUb2dnbGUgaGVhZGVyIHJvd1wiLFxuICAgIHRvZ2dsZUhlYWRlckNvbHVtbjogXCJUb2dnbGUgaGVhZGVyIGNvbHVtblwiLFxuICAgIG1lcmdlQ2VsbHM6IFwiTWVyZ2UgY2VsbHNcIixcbiAgICBzcGxpdENlbGw6IFwiU3BsaXQgY2VsbFwiLFxuICB9LFxuICBpbWFnZVVwbG9hZDoge1xuICAgIHNlbGVjdEltYWdlOiBcIlNlbGVjdCBJbWFnZVwiLFxuICAgIGxvYWRFcnJvcjogXCJFcnJvciBsb2FkaW5nIGltYWdlXCIsXG4gICAgdXBsb2FkaW5nSW1hZ2U6IFwiVXBsb2FkaW5nIGltYWdlLi4uXCIsXG4gICAgdXBsb2FkUHJvZ3Jlc3M6IFwiVXBsb2FkIFByb2dyZXNzXCIsXG4gICAgdXBsb2FkRXJyb3I6IFwiVXBsb2FkIEVycm9yXCIsXG4gICAgdXBsb2FkU3VjY2VzczogXCJVcGxvYWQgU3VjY2Vzc1wiLFxuICAgIGltYWdlVG9vTGFyZ2U6IFwiSW1hZ2UgdG9vIGxhcmdlXCIsXG4gICAgaW52YWxpZEZpbGVUeXBlOiBcIkludmFsaWQgZmlsZSB0eXBlXCIsXG4gICAgZHJhZ0Ryb3BUZXh0OiBcIkRyYWcgYW5kIGRyb3AgaW1hZ2VzIGhlcmVcIixcbiAgICBjaGFuZ2VJbWFnZTogXCJDaGFuZ2UgSW1hZ2VcIixcbiAgICBkb3dubG9hZEltYWdlOiBcIkRvd25sb2FkIEltYWdlXCIsXG4gICAgZGVsZXRlSW1hZ2U6IFwiRGVsZXRlIEltYWdlXCIsXG4gICAgcmVzaXplU21hbGw6IFwiU21hbGxcIixcbiAgICByZXNpemVNZWRpdW06IFwiTWVkaXVtXCIsXG4gICAgcmVzaXplTGFyZ2U6IFwiTGFyZ2VcIixcbiAgICByZXNpemVPcmlnaW5hbDogXCJPcmlnaW5hbFwiLFxuICAgIGFsaWduTGVmdDogXCJBbGlnbiBMZWZ0XCIsXG4gICAgYWxpZ25DZW50ZXI6IFwiQWxpZ24gQ2VudGVyXCIsXG4gICAgYWxpZ25SaWdodDogXCJBbGlnbiBSaWdodFwiLFxuICAgIHJlc2l6aW5nOiBcIlJlc2l6aW5nLi4uXCIsXG4gICAgY29tcHJlc3Npbmc6IFwiQ29tcHJlc3NpbmcuLi5cIixcbiAgICBjb21wcmVzc2lvbkVycm9yOiBcIkVycm9yIGR1cmluZyBjb21wcmVzc2lvblwiLFxuICAgIHZhbGlkYXRpbmc6IFwiVmFsaWRhdGluZyBmaWxlLi4uXCIsXG4gICAgdXBsb2FkaW5nVG9TZXJ2ZXI6IFwiVXBsb2FkaW5nIHRvIHNlcnZlci4uLlwiLFxuICAgIHJlcGxhY2luZ0ltYWdlOiBcIlJlcGxhY2luZyBpbWFnZS4uLlwiLFxuICAgIGluc2VydGluZ0ltYWdlOiBcIkluc2VydGluZyBpbnRvIGVkaXRvci4uLlwiLFxuICAgIG5vRmlsZVNlbGVjdGVkOiBcIk5vIGltYWdlIGZpbGUgc2VsZWN0ZWRcIixcbiAgICBzZWxlY3Rpb25DYW5jZWxsZWQ6IFwiU2VsZWN0aW9uIGNhbmNlbGxlZFwiLFxuICB9LFxuICBlZGl0b3I6IHtcbiAgICBwbGFjZWhvbGRlcjogXCJTdGFydCB0eXBpbmcuLi5cIixcbiAgICBjaGFyYWN0ZXI6IFwiY2hhcmFjdGVyXCIsXG4gICAgd29yZDogXCJ3b3JkXCIsXG4gICAgbGlua1Byb21wdDogXCJFbnRlciBsaW5rIFVSTFwiLFxuICAgIGxpbmtVcmxQcm9tcHQ6IFwiRW50ZXIgVVJMXCIsXG4gICAgY29uZmlybURlbGV0ZTogXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXM/XCIsXG4gICAgdG9nZ2xlRWRpdDogXCJTd2l0Y2ggdG8gRWRpdCBNb2RlXCIsXG4gICAgdmlld01vZGU6IFwiU3dpdGNoIHRvIFZpZXcgTW9kZVwiLFxuICAgIGJsb2NrQWRkOiBcIkNsaWNrIHRvIGFkZCBhIGJsb2NrXCIsXG4gICAgYmxvY2tEcmFnOiBcIkRyYWcgdG8gbW92ZSB0aGlzIGJsb2NrXCIsXG4gIH0sXG4gIGNvbW1vbjoge1xuICAgIGNhbmNlbDogXCJDYW5jZWxcIixcbiAgICBjb25maXJtOiBcIkNvbmZpcm1cIixcbiAgICBhcHBseTogXCJBcHBseVwiLFxuICAgIGRlbGV0ZTogXCJEZWxldGVcIixcbiAgICBzYXZlOiBcIlNhdmVcIixcbiAgICBjbG9zZTogXCJDbG9zZVwiLFxuICAgIGxvYWRpbmc6IFwiTG9hZGluZ1wiLFxuICAgIGVycm9yOiBcIkVycm9yXCIsXG4gICAgc3VjY2VzczogXCJTdWNjZXNzXCIsXG4gIH0sXG59O1xuXG5jb25zdCBGUkVOQ0hfVFJBTlNMQVRJT05TOiBBdGVUcmFuc2xhdGlvbnMgPSB7XG4gIHRvb2xiYXI6IHtcbiAgICBib2xkOiBcIkdyYXNcXG5DdHJsK0JcIixcbiAgICBpdGFsaWM6IFwiSXRhbGlxdWVcXG5DdHJsK0lcIixcbiAgICB1bmRlcmxpbmU6IFwiU291bGlnbsOpXFxuQ3RybCtVXCIsXG4gICAgc3RyaWtlOiBcIkJhcnLDqVxcbkN0cmwrU2hpZnQrWFwiLFxuICAgIGNvZGU6IFwiQ29kZSBlbiBsaWduZVxcbkN0cmwrRVwiLFxuICAgIGNvZGVCbG9jazogXCJCbG9jIGRlIGNvZGVcIixcbiAgICBzdXBlcnNjcmlwdDogXCJFeHBvc2FudFwiLFxuICAgIHN1YnNjcmlwdDogXCJJbmRpY2VcIixcbiAgICBoaWdobGlnaHQ6IFwiU3VybGlnbmVyXCIsXG4gICAgaGlnaGxpZ2h0UGlja2VyOiBcIkNvdWxldXIgZGUgZm9uZFwiLFxuICAgIGhlYWRpbmcxOiBcIlRpdHJlIDFcIixcbiAgICBoZWFkaW5nMjogXCJUaXRyZSAyXCIsXG4gICAgaGVhZGluZzM6IFwiVGl0cmUgM1wiLFxuICAgIGJ1bGxldExpc3Q6IFwiTGlzdGUgw6AgcHVjZXNcIixcbiAgICBvcmRlcmVkTGlzdDogXCJMaXN0ZSBudW3DqXJvdMOpZVwiLFxuICAgIGJsb2NrcXVvdGU6IFwiQ2l0YXRpb25cIixcbiAgICBhbGlnbkxlZnQ6IFwiQWxpZ25lciDDoCBnYXVjaGVcIixcbiAgICBhbGlnbkNlbnRlcjogXCJDZW50cmVyXCIsXG4gICAgYWxpZ25SaWdodDogXCJBbGlnbmVyIMOgIGRyb2l0ZVwiLFxuICAgIGFsaWduSnVzdGlmeTogXCJKdXN0aWZpZXJcIixcbiAgICBsaW5rOiBcIkFqb3V0ZXIgdW4gbGllblwiLFxuICAgIGltYWdlOiBcIkFqb3V0ZXIgdW5lIGltYWdlXCIsXG4gICAgaG9yaXpvbnRhbFJ1bGU6IFwiTGlnbmUgaG9yaXpvbnRhbGVcIixcbiAgICB0YWJsZTogXCJJbnPDqXJlciB1biB0YWJsZWF1XCIsXG4gICAgdW5kbzogXCJBbm51bGVyXFxuQ3RybCtaXCIsXG4gICAgcmVkbzogXCJSZWZhaXJlXFxuQ3RybCtTaGlmdCtaXCIsXG4gICAgY2xlYXI6IFwiVmlkZXJcIixcbiAgICB0ZXh0Q29sb3I6IFwiQ291bGV1ciBkdSB0ZXh0ZVwiLFxuICAgIGN1c3RvbUNvbG9yOiBcIkNvdWxldXIgcGVyc29ubmFsaXPDqWVcIixcbiAgICBwcmVzZXRzOiBcIlByw6lyw6lnbGFnZXNcIixcbiAgfSxcbiAgYnViYmxlTWVudToge1xuICAgIGJvbGQ6IFwiR3Jhc1xcbkN0cmwrQlwiLFxuICAgIGl0YWxpYzogXCJJdGFsaXF1ZVxcbkN0cmwrSVwiLFxuICAgIHVuZGVybGluZTogXCJTb3VsaWduw6lcXG5DdHJsK1VcIixcbiAgICBzdHJpa2U6IFwiQmFycsOpXFxuQ3RybCtTaGlmdCtYXCIsXG4gICAgY29kZTogXCJDb2RlXFxuQ3RybCtFXCIsXG4gICAgc3VwZXJzY3JpcHQ6IFwiRXhwb3NhbnRcIixcbiAgICBzdWJzY3JpcHQ6IFwiSW5kaWNlXCIsXG4gICAgaGlnaGxpZ2h0OiBcIlN1cmxpZ25lclwiLFxuICAgIGhpZ2hsaWdodFBpY2tlcjogXCJDb3VsZXVyIGRlIGZvbmRcIixcbiAgICB0ZXh0Q29sb3I6IFwiQ291bGV1ciBkdSB0ZXh0ZVwiLFxuICAgIGxpbms6IFwiTGllblwiLFxuICAgIGFkZExpbms6IFwiQWpvdXRlciB1biBsaWVuXCIsXG4gICAgZWRpdExpbms6IFwiTW9kaWZpZXIgbGUgbGllblwiLFxuICAgIHJlbW92ZUxpbms6IFwiU3VwcHJpbWVyIGxlIGxpZW5cIixcbiAgICBsaW5rVXJsOiBcIlVSTCBkdSBsaWVuXCIsXG4gICAgbGlua1RleHQ6IFwiVGV4dGUgZHUgbGllblwiLFxuICAgIG9wZW5MaW5rOiBcIk91dnJpciBsZSBsaWVuXCIsXG4gICAgY3VzdG9tQ29sb3I6IFwiQ291bGV1ciBwZXJzb25uYWxpc8OpZVwiLFxuICAgIHByZXNldHM6IFwiUHLDqXLDqWdsYWdlc1wiLFxuICB9LFxuICBzbGFzaENvbW1hbmRzOiB7XG4gICAgaGVhZGluZzE6IHtcbiAgICAgIHRpdGxlOiBcIlRpdHJlIDFcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkdyYW5kIHRpdHJlIGRlIHNlY3Rpb25cIixcbiAgICAgIGtleXdvcmRzOiBbXCJoZWFkaW5nXCIsIFwiaDFcIiwgXCJ0aXRyZVwiLCBcInRpdGxlXCIsIFwiMVwiLCBcImhlYWRlclwiXSxcbiAgICB9LFxuICAgIGhlYWRpbmcyOiB7XG4gICAgICB0aXRsZTogXCJUaXRyZSAyXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaXRyZSBkZSBzb3VzLXNlY3Rpb25cIixcbiAgICAgIGtleXdvcmRzOiBbXCJoZWFkaW5nXCIsIFwiaDJcIiwgXCJ0aXRyZVwiLCBcInRpdGxlXCIsIFwiMlwiLCBcImhlYWRlclwiXSxcbiAgICB9LFxuICAgIGhlYWRpbmczOiB7XG4gICAgICB0aXRsZTogXCJUaXRyZSAzXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJQZXRpdCB0aXRyZVwiLFxuICAgICAga2V5d29yZHM6IFtcImhlYWRpbmdcIiwgXCJoM1wiLCBcInRpdHJlXCIsIFwidGl0bGVcIiwgXCIzXCIsIFwiaGVhZGVyXCJdLFxuICAgIH0sXG4gICAgYnVsbGV0TGlzdDoge1xuICAgICAgdGl0bGU6IFwiTGlzdGUgw6AgcHVjZXNcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNyw6llciB1bmUgbGlzdGUgw6AgcHVjZXNcIixcbiAgICAgIGtleXdvcmRzOiBbXCJidWxsZXRcIiwgXCJsaXN0XCIsIFwibGlzdGVcIiwgXCJwdWNlc1wiLCBcInVsXCJdLFxuICAgIH0sXG4gICAgb3JkZXJlZExpc3Q6IHtcbiAgICAgIHRpdGxlOiBcIkxpc3RlIG51bcOpcm90w6llXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJDcsOpZXIgdW5lIGxpc3RlIG51bcOpcm90w6llXCIsXG4gICAgICBrZXl3b3JkczogW1wibnVtYmVyZWRcIiwgXCJsaXN0XCIsIFwibGlzdGVcIiwgXCJudW3DqXJvdMOpZVwiLCBcIm9sXCIsIFwib3JkZXJlZFwiXSxcbiAgICB9LFxuICAgIGJsb2NrcXVvdGU6IHtcbiAgICAgIHRpdGxlOiBcIkNpdGF0aW9uXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJBam91dGVyIHVuZSBjaXRhdGlvblwiLFxuICAgICAga2V5d29yZHM6IFtcInF1b3RlXCIsIFwiYmxvY2txdW90ZVwiLCBcImNpdGF0aW9uXCJdLFxuICAgIH0sXG4gICAgY29kZToge1xuICAgICAgdGl0bGU6IFwiQmxvYyBkZSBjb2RlXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJBam91dGVyIHVuIGJsb2MgZGUgY29kZVwiLFxuICAgICAga2V5d29yZHM6IFtcImNvZGVcIiwgXCJjb2RlYmxvY2tcIiwgXCJwcmVcIiwgXCJwcm9ncmFtbWF0aW9uXCJdLFxuICAgIH0sXG4gICAgaW1hZ2U6IHtcbiAgICAgIHRpdGxlOiBcIkltYWdlXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJJbnPDqXJlciB1bmUgaW1hZ2VcIixcbiAgICAgIGtleXdvcmRzOiBbXCJpbWFnZVwiLCBcInBob3RvXCIsIFwicGljdHVyZVwiLCBcImltZ1wiXSxcbiAgICB9LFxuICAgIGhvcml6b250YWxSdWxlOiB7XG4gICAgICB0aXRsZTogXCJMaWduZSBob3Jpem9udGFsZVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiQWpvdXRlciB1bmUgbGlnbmUgZGUgc8OpcGFyYXRpb25cIixcbiAgICAgIGtleXdvcmRzOiBbXCJoclwiLCBcImhvcml6b250YWxcIiwgXCJydWxlXCIsIFwibGlnbmVcIiwgXCJzw6lwYXJhdGlvblwiXSxcbiAgICB9LFxuICAgIHRhYmxlOiB7XG4gICAgICB0aXRsZTogXCJUYWJsZWF1XCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJJbnPDqXJlciB1biB0YWJsZWF1XCIsXG4gICAgICBrZXl3b3JkczogW1widGFibGVcIiwgXCJ0YWJsZWF1XCIsIFwiZ3JpZFwiLCBcImdyaWxsZVwiLCBcImRhdGFcIiwgXCJkb25uw6llc1wiLCBcInJvd3NcIiwgXCJjb2xvbm5lc1wiXSxcbiAgICB9LFxuICB9LFxuICB0YWJsZToge1xuICAgIGFkZFJvd0JlZm9yZTogXCJBam91dGVyIHVuZSBsaWduZSBhdmFudFwiLFxuICAgIGFkZFJvd0FmdGVyOiBcIkFqb3V0ZXIgdW5lIGxpZ25lIGFwcsOoc1wiLFxuICAgIGRlbGV0ZVJvdzogXCJTdXBwcmltZXIgbGEgbGlnbmVcIixcbiAgICBhZGRDb2x1bW5CZWZvcmU6IFwiQWpvdXRlciB1bmUgY29sb25uZSBhdmFudFwiLFxuICAgIGFkZENvbHVtbkFmdGVyOiBcIkFqb3V0ZXIgdW5lIGNvbG9ubmUgYXByw6hzXCIsXG4gICAgZGVsZXRlQ29sdW1uOiBcIlN1cHByaW1lciBsYSBjb2xvbm5lXCIsXG4gICAgZGVsZXRlVGFibGU6IFwiU3VwcHJpbWVyIGxlIHRhYmxlYXVcIixcbiAgICB0b2dnbGVIZWFkZXJSb3c6IFwiQmFzY3VsZXIgbGlnbmUgZCdlbi10w6p0ZVwiLFxuICAgIHRvZ2dsZUhlYWRlckNvbHVtbjogXCJCYXNjdWxlciBjb2xvbm5lIGQnZW4tdMOqdGVcIixcbiAgICBtZXJnZUNlbGxzOiBcIkZ1c2lvbm5lciBsZXMgY2VsbHVsZXNcIixcbiAgICBzcGxpdENlbGw6IFwiRGl2aXNlciBsYSBjZWxsdWxlXCIsXG4gIH0sXG4gIGltYWdlVXBsb2FkOiB7XG4gICAgc2VsZWN0SW1hZ2U6IFwiU8OpbGVjdGlvbm5lciB1bmUgaW1hZ2VcIixcbiAgICBsb2FkRXJyb3I6IFwiRXJyZXVyIGRlIGNoYXJnZW1lbnQgZGUgbCdpbWFnZVwiLFxuICAgIHVwbG9hZGluZ0ltYWdlOiBcIlTDqWzDqWNoYXJnZW1lbnQgZGUgbCdpbWFnZS4uLlwiLFxuICAgIHVwbG9hZFByb2dyZXNzOiBcIlByb2dyZXNzaW9uIGR1IHTDqWzDqWNoYXJnZW1lbnRcIixcbiAgICB1cGxvYWRFcnJvcjogXCJFcnJldXIgZGUgdMOpbMOpY2hhcmdlbWVudFwiLFxuICAgIHVwbG9hZFN1Y2Nlc3M6IFwiVMOpbMOpY2hhcmdlbWVudCByw6l1c3NpXCIsXG4gICAgaW1hZ2VUb29MYXJnZTogXCJJbWFnZSB0cm9wIHZvbHVtaW5ldXNlXCIsXG4gICAgaW52YWxpZEZpbGVUeXBlOiBcIlR5cGUgZGUgZmljaGllciBpbnZhbGlkZVwiLFxuICAgIGRyYWdEcm9wVGV4dDogXCJHbGlzc2V6IGV0IGTDqXBvc2V6IGRlcyBpbWFnZXMgaWNpXCIsXG4gICAgY2hhbmdlSW1hZ2U6IFwiQ2hhbmdlciBsJ2ltYWdlXCIsXG4gICAgZG93bmxvYWRJbWFnZTogXCJUw6lsw6ljaGFyZ2VyIGwnaW1hZ2VcIixcbiAgICBkZWxldGVJbWFnZTogXCJTdXBwcmltZXIgbCdpbWFnZVwiLFxuICAgIHJlc2l6ZVNtYWxsOiBcIlBldGl0XCIsXG4gICAgcmVzaXplTWVkaXVtOiBcIk1veWVuXCIsXG4gICAgcmVzaXplTGFyZ2U6IFwiR3JhbmRcIixcbiAgICByZXNpemVPcmlnaW5hbDogXCJPcmlnaW5hbFwiLFxuICAgIGFsaWduTGVmdDogXCJBbGlnbmVyIMOgIGdhdWNoZVwiLFxuICAgIGFsaWduQ2VudGVyOiBcIkFsaWduZXIgYXUgY2VudHJlXCIsXG4gICAgYWxpZ25SaWdodDogXCJBbGlnbmVyIMOgIGRyb2l0ZVwiLFxuICAgIHJlc2l6aW5nOiBcIlJlZGltZW5zaW9ubmVtZW50Li4uXCIsXG4gICAgY29tcHJlc3Npbmc6IFwiQ29tcHJlc3Npb24uLi5cIixcbiAgICBjb21wcmVzc2lvbkVycm9yOiBcIkVycmV1ciBsb3JzIGRlIGxhIGNvbXByZXNzaW9uXCIsXG4gICAgdmFsaWRhdGluZzogXCJWYWxpZGF0aW9uIGR1IGZpY2hpZXIuLi5cIixcbiAgICB1cGxvYWRpbmdUb1NlcnZlcjogXCJVcGxvYWQgdmVycyBsZSBzZXJ2ZXVyLi4uXCIsXG4gICAgcmVwbGFjaW5nSW1hZ2U6IFwiUmVtcGxhY2VtZW50IGRlIGwnaW1hZ2UuLi5cIixcbiAgICBpbnNlcnRpbmdJbWFnZTogXCJJbnNlcnRpb24gZGFucyBsJ8OpZGl0ZXVyLi4uXCIsXG4gICAgbm9GaWxlU2VsZWN0ZWQ6IFwiQXVjdW4gZmljaGllciBpbWFnZSBzw6lsZWN0aW9ubsOpXCIsXG4gICAgc2VsZWN0aW9uQ2FuY2VsbGVkOiBcIlPDqWxlY3Rpb24gYW5udWzDqWVcIixcbiAgfSxcbiAgZWRpdG9yOiB7XG4gICAgcGxhY2Vob2xkZXI6IFwiQ29tbWVuY2V6IMOgIMOpY3JpcmUuLi5cIixcbiAgICBjaGFyYWN0ZXI6IFwiY2FyYWN0w6hyZVwiLFxuICAgIHdvcmQ6IFwibW90XCIsXG4gICAgbGlua1Byb21wdDogXCJFbnRyZXogbCdVUkwgZHUgbGllblwiLFxuICAgIGxpbmtVcmxQcm9tcHQ6IFwiRW50cmV6IGwnVVJMXCIsXG4gICAgY29uZmlybURlbGV0ZTogXCLDinRlcy12b3VzIHPDu3IgZGUgdm91bG9pciBzdXBwcmltZXIgY2VjaSA/XCIsXG4gICAgdG9nZ2xlRWRpdDogXCJQYXNzZXIgZW4gbW9kZSDDqWRpdGlvblwiLFxuICAgIHZpZXdNb2RlOiBcIlBhc3NlciBlbiBtb2RlIGFmZmljaGFnZVwiLFxuICAgIGJsb2NrQWRkOiBcIkNsaXF1ZXIgcG91ciBham91dGVyIHVuIGJsb2NcIixcbiAgICBibG9ja0RyYWc6IFwiRmFpcmUgZ2xpc3NlciBwb3VyIGTDqXBsYWNlciBjZSBibG9jXCIsXG4gIH0sXG4gIGNvbW1vbjoge1xuICAgIGNhbmNlbDogXCJBbm51bGVyXCIsXG4gICAgY29uZmlybTogXCJDb25maXJtZXJcIixcbiAgICBhcHBseTogXCJBcHBsaXF1ZXJcIixcbiAgICBkZWxldGU6IFwiU3VwcHJpbWVyXCIsXG4gICAgc2F2ZTogXCJTYXV2ZWdhcmRlclwiLFxuICAgIGNsb3NlOiBcIkZlcm1lclwiLFxuICAgIGxvYWRpbmc6IFwiQ2hhcmdlbWVudFwiLFxuICAgIGVycm9yOiBcIkVycmV1clwiLFxuICAgIHN1Y2Nlc3M6IFwiU3VjY8Ooc1wiLFxuICB9LFxufTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiBcInJvb3RcIixcbn0pXG5leHBvcnQgY2xhc3MgQXRlSTE4blNlcnZpY2Uge1xuICBwcml2YXRlIF9jdXJyZW50TG9jYWxlID0gc2lnbmFsPFN1cHBvcnRlZExvY2FsZT4oXCJlblwiKTtcbiAgcHJpdmF0ZSBfdHJhbnNsYXRpb25zID0gc2lnbmFsPFJlY29yZDxTdXBwb3J0ZWRMb2NhbGUsIEF0ZVRyYW5zbGF0aW9ucz4+KHtcbiAgICBlbjogRU5HTElTSF9UUkFOU0xBVElPTlMsXG4gICAgZnI6IEZSRU5DSF9UUkFOU0xBVElPTlMsXG4gIH0pO1xuXG4gIC8vIFB1YmxpYyBzaWduYWxzXG4gIHJlYWRvbmx5IGN1cnJlbnRMb2NhbGUgPSB0aGlzLl9jdXJyZW50TG9jYWxlLmFzUmVhZG9ubHkoKTtcbiAgLyoqIEFsbCBsb2FkZWQgdHJhbnNsYXRpb25zICh1c2VmdWwgZm9yIGR5bmFtaWMga2V5IGFjY2VzcykgKi9cbiAgcmVhZG9ubHkgYWxsVHJhbnNsYXRpb25zID0gdGhpcy5fdHJhbnNsYXRpb25zLmFzUmVhZG9ubHkoKTtcblxuICByZWFkb25seSB0cmFuc2xhdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl90cmFuc2xhdGlvbnMoKVt0aGlzLl9jdXJyZW50TG9jYWxlKCldKTtcblxuICAvLyBGYXN0IHRyYW5zbGF0aW9uIG1ldGhvZHNcbiAgcmVhZG9ubHkgdCA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHJhbnNsYXRpb25zKCkpO1xuICByZWFkb25seSB0b29sYmFyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50cmFuc2xhdGlvbnMoKS50b29sYmFyKTtcbiAgcmVhZG9ubHkgYnViYmxlTWVudSA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHJhbnNsYXRpb25zKCkuYnViYmxlTWVudSk7XG4gIHJlYWRvbmx5IHNsYXNoQ29tbWFuZHMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnRyYW5zbGF0aW9ucygpLnNsYXNoQ29tbWFuZHMpO1xuICByZWFkb25seSB0YWJsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHJhbnNsYXRpb25zKCkudGFibGUpO1xuICByZWFkb25seSBpbWFnZVVwbG9hZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHJhbnNsYXRpb25zKCkuaW1hZ2VVcGxvYWQpO1xuICByZWFkb25seSBlZGl0b3IgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnRyYW5zbGF0aW9ucygpLmVkaXRvcik7XG4gIHJlYWRvbmx5IGNvbW1vbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHJhbnNsYXRpb25zKCkuY29tbW9uKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBBdXRvbWF0aWNhbGx5IGRldGVjdCBicm93c2VyIGxhbmd1YWdlXG4gICAgdGhpcy5kZXRlY3RCcm93c2VyTGFuZ3VhZ2UoKTtcbiAgfVxuXG4gIHNldExvY2FsZShsb2NhbGU6IFN1cHBvcnRlZExvY2FsZSk6IHZvaWQge1xuICAgIHRoaXMuX2N1cnJlbnRMb2NhbGUuc2V0KGxvY2FsZSk7XG4gIH1cblxuICBhdXRvRGV0ZWN0TG9jYWxlKCk6IHZvaWQge1xuICAgIHRoaXMuZGV0ZWN0QnJvd3Nlckxhbmd1YWdlKCk7XG4gIH1cblxuICBnZXRTdXBwb3J0ZWRMb2NhbGVzKCk6IFN1cHBvcnRlZExvY2FsZVtdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fdHJhbnNsYXRpb25zKCkpIGFzIFN1cHBvcnRlZExvY2FsZVtdO1xuICB9XG5cbiAgYWRkVHJhbnNsYXRpb25zKGxvY2FsZTogc3RyaW5nLCB0cmFuc2xhdGlvbnM6IEF0ZVRyYW5zbGF0aW9ucyB8IFBhcnRpYWw8QXRlVHJhbnNsYXRpb25zPik6IHZvaWQge1xuICAgIHRoaXMuX3RyYW5zbGF0aW9ucy51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IGN1cnJlbnRbbG9jYWxlXSB8fCBFTkdMSVNIX1RSQU5TTEFUSU9OUztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgIFtsb2NhbGVdOiB7XG4gICAgICAgICAgLi4uZXhpc3RpbmcsXG4gICAgICAgICAgLi4udHJhbnNsYXRpb25zLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZWN0QnJvd3Nlckxhbmd1YWdlKCk6IHZvaWQge1xuICAgIGNvbnN0IGJyb3dzZXJMYW5nID0gbmF2aWdhdG9yLmxhbmd1YWdlLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGJyb3dzZXJMYW5nLnN0YXJ0c1dpdGgoXCJmclwiKSkge1xuICAgICAgdGhpcy5fY3VycmVudExvY2FsZS5zZXQoXCJmclwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY3VycmVudExvY2FsZS5zZXQoXCJlblwiKTtcbiAgICB9XG4gIH1cblxuICAvLyBVdGlsaXR5IG1ldGhvZHMgZm9yIGNvbXBvbmVudHNcbiAgZ2V0VG9vbGJhclRpdGxlKGtleToga2V5b2YgQXRlVHJhbnNsYXRpb25zW1widG9vbGJhclwiXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb25zKCkudG9vbGJhcltrZXldO1xuICB9XG5cbiAgZ2V0QnViYmxlTWVudVRpdGxlKGtleToga2V5b2YgQXRlVHJhbnNsYXRpb25zW1wiYnViYmxlTWVudVwiXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb25zKCkuYnViYmxlTWVudVtrZXldO1xuICB9XG5cbiAgZ2V0U2xhc2hDb21tYW5kKGtleToga2V5b2YgQXRlVHJhbnNsYXRpb25zW1wic2xhc2hDb21tYW5kc1wiXSkge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9ucygpLnNsYXNoQ29tbWFuZHNba2V5XTtcbiAgfVxufVxuIl19