@flogeez/angular-tiptap-editor 3.1.3 → 3.1.5

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 (117) hide show
  1. package/CHANGELOG.md +24 -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 +1032 -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 +507 -0
  52. package/esm2022/lib/services/ate-export.service.mjs +71 -0
  53. package/esm2022/lib/services/ate-i18n.service.mjs +449 -0
  54. package/esm2022/lib/services/ate-image.service.mjs +459 -0
  55. package/esm2022/lib/services/ate-link.service.mjs +99 -0
  56. package/esm2022/lib/utils/ate-color.utils.mjs +60 -0
  57. package/esm2022/lib/utils/ate-markdown.utils.mjs +179 -0
  58. package/esm2022/public-api.mjs +41 -0
  59. package/fesm2022/flogeez-angular-tiptap-editor.mjs +627 -354
  60. package/fesm2022/flogeez-angular-tiptap-editor.mjs.map +1 -1
  61. package/index.d.ts +3 -1734
  62. package/lib/ate-editor.provider.d.ts +21 -0
  63. package/lib/components/bubble-menus/base/ate-base-bubble-menu.d.ts +71 -0
  64. package/lib/components/bubble-menus/base/ate-base-sub-bubble-menu.d.ts +60 -0
  65. package/lib/components/bubble-menus/color/ate-color-bubble-menu.component.d.ts +77 -0
  66. package/lib/components/bubble-menus/image/ate-image-bubble-menu.component.d.ts +49 -0
  67. package/lib/components/bubble-menus/link/ate-link-bubble-menu.component.d.ts +55 -0
  68. package/lib/components/bubble-menus/table/ate-cell-bubble-menu.component.d.ts +16 -0
  69. package/lib/components/bubble-menus/table/ate-table-bubble-menu.component.d.ts +25 -0
  70. package/lib/components/bubble-menus/text/ate-bubble-menu.component.d.ts +53 -0
  71. package/lib/components/color-picker/ate-color-picker.component.d.ts +54 -0
  72. package/lib/components/edit-toggle/ate-edit-toggle.component.d.ts +13 -0
  73. package/lib/components/editor/angular-tiptap-editor.component.d.ts +242 -0
  74. package/lib/components/editor/ate-block-controls.component.d.ts +44 -0
  75. package/lib/components/slash-commands/ate-slash-commands.component.d.ts +34 -0
  76. package/lib/components/toolbar/ate-toolbar.component.d.ts +47 -0
  77. package/lib/components/ui/ate-button.component.d.ts +25 -0
  78. package/lib/components/ui/ate-separator.component.d.ts +5 -0
  79. package/lib/config/ate-editor.config.d.ts +19 -0
  80. package/lib/config/ate-global-config.token.d.ts +6 -0
  81. package/lib/config/ate-slash-commands.config.d.ts +41 -0
  82. package/lib/directives/ate-noop-value-accessor.directive.d.ts +13 -0
  83. package/lib/directives/ate-tooltip.directive.d.ts +30 -0
  84. package/lib/extensions/ate-block-controls.extension.d.ts +10 -0
  85. package/lib/extensions/ate-link-click-behavior.extension.d.ts +2 -0
  86. package/lib/extensions/ate-resizable-image.extension.d.ts +27 -0
  87. package/lib/extensions/ate-table.extension.d.ts +2 -0
  88. package/lib/extensions/ate-tiptap-state.extension.d.ts +7 -0
  89. package/lib/extensions/ate-upload-progress.extension.d.ts +7 -0
  90. package/lib/extensions/calculators/ate-discovery.calculator.d.ts +7 -0
  91. package/lib/extensions/calculators/ate-image.calculator.d.ts +2 -0
  92. package/lib/extensions/calculators/ate-marks.calculator.d.ts +2 -0
  93. package/lib/extensions/calculators/ate-selection.calculator.d.ts +2 -0
  94. package/lib/extensions/calculators/ate-structure.calculator.d.ts +2 -0
  95. package/lib/extensions/calculators/ate-table.calculator.d.ts +2 -0
  96. package/lib/models/ate-bubble-menu.model.d.ts +33 -0
  97. package/lib/models/ate-editor-config.model.d.ts +113 -0
  98. package/lib/models/ate-editor-state.model.d.ts +109 -0
  99. package/lib/models/ate-image.model.d.ts +104 -0
  100. package/lib/models/ate-slash-command.model.d.ts +17 -0
  101. package/lib/models/ate-toolbar.model.d.ts +18 -0
  102. package/lib/node-view/ate-angular-node-view.d.ts +115 -0
  103. package/lib/node-view/ate-injector.registry.d.ts +3 -0
  104. package/lib/node-view/ate-node-view.factory.d.ts +10 -0
  105. package/lib/node-view/ate-node-view.models.d.ts +138 -0
  106. package/lib/node-view/ate-node-view.renderer.d.ts +23 -0
  107. package/lib/node-view/ate-register-angular-component.d.ts +35 -0
  108. package/lib/services/ate-color-picker.service.d.ts +65 -0
  109. package/lib/services/ate-editor-commands.service.d.ts +89 -0
  110. package/lib/services/ate-export.service.d.ts +27 -0
  111. package/lib/services/ate-i18n.service.d.ts +432 -0
  112. package/lib/services/ate-image.service.d.ts +82 -0
  113. package/lib/services/ate-link.service.d.ts +42 -0
  114. package/lib/utils/ate-color.utils.d.ts +12 -0
  115. package/lib/utils/ate-markdown.utils.d.ts +4 -0
  116. package/package.json +3 -1
  117. package/public-api.d.ts +32 -0
@@ -0,0 +1,449 @@
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
+ export: {
176
+ export: "Export",
177
+ html: "HTML",
178
+ markdown: "Markdown",
179
+ text: "Plain Text",
180
+ copyHtml: "Copy as HTML",
181
+ copyMarkdown: "Copy as Markdown",
182
+ copyText: "Copy as plain text",
183
+ downloadHtml: "Download .html",
184
+ downloadMarkdown: "Download .md",
185
+ downloadText: "Download .txt",
186
+ copiedSuccess: "Copied to clipboard!",
187
+ },
188
+ };
189
+ const FRENCH_TRANSLATIONS = {
190
+ toolbar: {
191
+ bold: "Gras\nCtrl+B",
192
+ italic: "Italique\nCtrl+I",
193
+ underline: "Souligné\nCtrl+U",
194
+ strike: "Barré\nCtrl+Shift+X",
195
+ code: "Code en ligne\nCtrl+E",
196
+ codeBlock: "Bloc de code",
197
+ superscript: "Exposant",
198
+ subscript: "Indice",
199
+ highlight: "Surligner",
200
+ highlightPicker: "Couleur de fond",
201
+ heading1: "Titre 1",
202
+ heading2: "Titre 2",
203
+ heading3: "Titre 3",
204
+ bulletList: "Liste à puces",
205
+ orderedList: "Liste numérotée",
206
+ blockquote: "Citation",
207
+ alignLeft: "Aligner à gauche",
208
+ alignCenter: "Centrer",
209
+ alignRight: "Aligner à droite",
210
+ alignJustify: "Justifier",
211
+ link: "Ajouter un lien",
212
+ image: "Ajouter une image",
213
+ horizontalRule: "Ligne horizontale",
214
+ table: "Insérer un tableau",
215
+ undo: "Annuler\nCtrl+Z",
216
+ redo: "Refaire\nCtrl+Shift+Z",
217
+ clear: "Vider",
218
+ textColor: "Couleur du texte",
219
+ customColor: "Couleur personnalisée",
220
+ presets: "Préréglages",
221
+ },
222
+ bubbleMenu: {
223
+ bold: "Gras\nCtrl+B",
224
+ italic: "Italique\nCtrl+I",
225
+ underline: "Souligné\nCtrl+U",
226
+ strike: "Barré\nCtrl+Shift+X",
227
+ code: "Code\nCtrl+E",
228
+ superscript: "Exposant",
229
+ subscript: "Indice",
230
+ highlight: "Surligner",
231
+ highlightPicker: "Couleur de fond",
232
+ textColor: "Couleur du texte",
233
+ link: "Lien",
234
+ addLink: "Ajouter un lien",
235
+ editLink: "Modifier le lien",
236
+ removeLink: "Supprimer le lien",
237
+ linkUrl: "URL du lien",
238
+ linkText: "Texte du lien",
239
+ openLink: "Ouvrir le lien",
240
+ customColor: "Couleur personnalisée",
241
+ presets: "Préréglages",
242
+ },
243
+ slashCommands: {
244
+ heading1: {
245
+ title: "Titre 1",
246
+ description: "Grand titre de section",
247
+ keywords: ["heading", "h1", "titre", "title", "1", "header"],
248
+ },
249
+ heading2: {
250
+ title: "Titre 2",
251
+ description: "Titre de sous-section",
252
+ keywords: ["heading", "h2", "titre", "title", "2", "header"],
253
+ },
254
+ heading3: {
255
+ title: "Titre 3",
256
+ description: "Petit titre",
257
+ keywords: ["heading", "h3", "titre", "title", "3", "header"],
258
+ },
259
+ bulletList: {
260
+ title: "Liste à puces",
261
+ description: "Créer une liste à puces",
262
+ keywords: ["bullet", "list", "liste", "puces", "ul"],
263
+ },
264
+ orderedList: {
265
+ title: "Liste numérotée",
266
+ description: "Créer une liste numérotée",
267
+ keywords: ["numbered", "list", "liste", "numérotée", "ol", "ordered"],
268
+ },
269
+ blockquote: {
270
+ title: "Citation",
271
+ description: "Ajouter une citation",
272
+ keywords: ["quote", "blockquote", "citation"],
273
+ },
274
+ code: {
275
+ title: "Bloc de code",
276
+ description: "Ajouter un bloc de code",
277
+ keywords: ["code", "codeblock", "pre", "programmation"],
278
+ },
279
+ image: {
280
+ title: "Image",
281
+ description: "Insérer une image",
282
+ keywords: ["image", "photo", "picture", "img"],
283
+ },
284
+ horizontalRule: {
285
+ title: "Ligne horizontale",
286
+ description: "Ajouter une ligne de séparation",
287
+ keywords: ["hr", "horizontal", "rule", "ligne", "séparation"],
288
+ },
289
+ table: {
290
+ title: "Tableau",
291
+ description: "Insérer un tableau",
292
+ keywords: ["table", "tableau", "grid", "grille", "data", "données", "rows", "colonnes"],
293
+ },
294
+ },
295
+ table: {
296
+ addRowBefore: "Ajouter une ligne avant",
297
+ addRowAfter: "Ajouter une ligne après",
298
+ deleteRow: "Supprimer la ligne",
299
+ addColumnBefore: "Ajouter une colonne avant",
300
+ addColumnAfter: "Ajouter une colonne après",
301
+ deleteColumn: "Supprimer la colonne",
302
+ deleteTable: "Supprimer le tableau",
303
+ toggleHeaderRow: "Basculer ligne d'en-tête",
304
+ toggleHeaderColumn: "Basculer colonne d'en-tête",
305
+ mergeCells: "Fusionner les cellules",
306
+ splitCell: "Diviser la cellule",
307
+ },
308
+ imageUpload: {
309
+ selectImage: "Sélectionner une image",
310
+ loadError: "Erreur de chargement de l'image",
311
+ uploadingImage: "Téléchargement de l'image...",
312
+ uploadProgress: "Progression du téléchargement",
313
+ uploadError: "Erreur de téléchargement",
314
+ uploadSuccess: "Téléchargement réussi",
315
+ imageTooLarge: "Image trop volumineuse",
316
+ invalidFileType: "Type de fichier invalide",
317
+ dragDropText: "Glissez et déposez des images ici",
318
+ changeImage: "Changer l'image",
319
+ downloadImage: "Télécharger l'image",
320
+ deleteImage: "Supprimer l'image",
321
+ resizeSmall: "Petit",
322
+ resizeMedium: "Moyen",
323
+ resizeLarge: "Grand",
324
+ resizeOriginal: "Original",
325
+ alignLeft: "Aligner à gauche",
326
+ alignCenter: "Aligner au centre",
327
+ alignRight: "Aligner à droite",
328
+ resizing: "Redimensionnement...",
329
+ compressing: "Compression...",
330
+ compressionError: "Erreur lors de la compression",
331
+ validating: "Validation du fichier...",
332
+ uploadingToServer: "Upload vers le serveur...",
333
+ replacingImage: "Remplacement de l'image...",
334
+ insertingImage: "Insertion dans l'éditeur...",
335
+ noFileSelected: "Aucun fichier image sélectionné",
336
+ selectionCancelled: "Sélection annulée",
337
+ },
338
+ editor: {
339
+ placeholder: "Commencez à écrire...",
340
+ character: "caractère",
341
+ word: "mot",
342
+ linkPrompt: "Entrez l'URL du lien",
343
+ linkUrlPrompt: "Entrez l'URL",
344
+ confirmDelete: "Êtes-vous sûr de vouloir supprimer ceci ?",
345
+ toggleEdit: "Passer en mode édition",
346
+ viewMode: "Passer en mode affichage",
347
+ blockAdd: "Cliquer pour ajouter un bloc",
348
+ blockDrag: "Faire glisser pour déplacer ce bloc",
349
+ },
350
+ common: {
351
+ cancel: "Annuler",
352
+ confirm: "Confirmer",
353
+ apply: "Appliquer",
354
+ delete: "Supprimer",
355
+ save: "Sauvegarder",
356
+ close: "Fermer",
357
+ loading: "Chargement",
358
+ error: "Erreur",
359
+ success: "Succès",
360
+ },
361
+ export: {
362
+ export: "Exporter",
363
+ html: "HTML",
364
+ markdown: "Markdown",
365
+ text: "Texte brut",
366
+ copyHtml: "Copier en HTML",
367
+ copyMarkdown: "Copier en Markdown",
368
+ copyText: "Copier en texte brut",
369
+ downloadHtml: "Télécharger .html",
370
+ downloadMarkdown: "Télécharger .md",
371
+ downloadText: "Télécharger .txt",
372
+ copiedSuccess: "Copié dans le presse-papiers !",
373
+ },
374
+ };
375
+ export class AteI18nService {
376
+ constructor() {
377
+ this._currentLocale = signal("en");
378
+ this._translations = signal({
379
+ en: ENGLISH_TRANSLATIONS,
380
+ fr: FRENCH_TRANSLATIONS,
381
+ });
382
+ // Public signals
383
+ this.currentLocale = this._currentLocale.asReadonly();
384
+ /** All loaded translations (useful for dynamic key access) */
385
+ this.allTranslations = this._translations.asReadonly();
386
+ this.translations = computed(() => this._translations()[this._currentLocale()]);
387
+ // Fast translation methods
388
+ this.t = computed(() => this.translations());
389
+ this.toolbar = computed(() => this.translations().toolbar);
390
+ this.bubbleMenu = computed(() => this.translations().bubbleMenu);
391
+ this.slashCommands = computed(() => this.translations().slashCommands);
392
+ this.table = computed(() => this.translations().table);
393
+ this.imageUpload = computed(() => this.translations().imageUpload);
394
+ this.editor = computed(() => this.translations().editor);
395
+ this.common = computed(() => this.translations().common);
396
+ this.export = computed(() => this.translations().export);
397
+ // Automatically detect browser language
398
+ this.detectBrowserLanguage();
399
+ }
400
+ setLocale(locale) {
401
+ this._currentLocale.set(locale);
402
+ }
403
+ autoDetectLocale() {
404
+ this.detectBrowserLanguage();
405
+ }
406
+ getSupportedLocales() {
407
+ return Object.keys(this._translations());
408
+ }
409
+ addTranslations(locale, translations) {
410
+ this._translations.update(current => {
411
+ const existing = current[locale] || ENGLISH_TRANSLATIONS;
412
+ return {
413
+ ...current,
414
+ [locale]: {
415
+ ...existing,
416
+ ...translations,
417
+ },
418
+ };
419
+ });
420
+ }
421
+ detectBrowserLanguage() {
422
+ const browserLang = navigator.language.toLowerCase();
423
+ if (browserLang.startsWith("fr")) {
424
+ this._currentLocale.set("fr");
425
+ }
426
+ else {
427
+ this._currentLocale.set("en");
428
+ }
429
+ }
430
+ // Utility methods for components
431
+ getToolbarTitle(key) {
432
+ return this.translations().toolbar[key];
433
+ }
434
+ getBubbleMenuTitle(key) {
435
+ return this.translations().bubbleMenu[key];
436
+ }
437
+ getSlashCommand(key) {
438
+ return this.translations().slashCommands[key];
439
+ }
440
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AteI18nService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
441
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AteI18nService, providedIn: "root" }); }
442
+ }
443
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AteI18nService, decorators: [{
444
+ type: Injectable,
445
+ args: [{
446
+ providedIn: "root",
447
+ }]
448
+ }], ctorParameters: () => [] });
449
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLWkxOG4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdGlwdGFwLWVkaXRvci9zcmMvbGliL3NlcnZpY2VzL2F0ZS1pMThuLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQThNN0QsTUFBTSxvQkFBb0IsR0FBb0I7SUFDNUMsT0FBTyxFQUFFO1FBQ1AsSUFBSSxFQUFFLGNBQWM7UUFDcEIsTUFBTSxFQUFFLGdCQUFnQjtRQUN4QixTQUFTLEVBQUUsbUJBQW1CO1FBQzlCLE1BQU0sRUFBRSw2QkFBNkI7UUFDckMsSUFBSSxFQUFFLHFCQUFxQjtRQUMzQixTQUFTLEVBQUUsWUFBWTtRQUN2QixXQUFXLEVBQUUsYUFBYTtRQUMxQixTQUFTLEVBQUUsV0FBVztRQUN0QixTQUFTLEVBQUUsV0FBVztRQUN0QixlQUFlLEVBQUUsa0JBQWtCO1FBQ25DLFFBQVEsRUFBRSxXQUFXO1FBQ3JCLFFBQVEsRUFBRSxXQUFXO1FBQ3JCLFFBQVEsRUFBRSxXQUFXO1FBQ3JCLFVBQVUsRUFBRSxhQUFhO1FBQ3pCLFdBQVcsRUFBRSxjQUFjO1FBQzNCLFVBQVUsRUFBRSxZQUFZO1FBQ3hCLFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFdBQVcsRUFBRSxjQUFjO1FBQzNCLFVBQVUsRUFBRSxhQUFhO1FBQ3pCLFlBQVksRUFBRSxlQUFlO1FBQzdCLElBQUksRUFBRSxVQUFVO1FBQ2hCLEtBQUssRUFBRSxXQUFXO1FBQ2xCLGNBQWMsRUFBRSxpQkFBaUI7UUFDakMsS0FBSyxFQUFFLGNBQWM7UUFDckIsSUFBSSxFQUFFLGNBQWM7UUFDcEIsSUFBSSxFQUFFLG9CQUFvQjtRQUMxQixLQUFLLEVBQUUsT0FBTztRQUNkLFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFdBQVcsRUFBRSxjQUFj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QUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBzaWduYWwsIGNvbXB1dGVkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuZXhwb3J0IHR5cGUgU3VwcG9ydGVkTG9jYWxlID0gXCJlblwiIHwgXCJmclwiIHwgKHN0cmluZyAmIHt9KTtcblxuZXhwb3J0IGludGVyZmFjZSBBdGVUcmFuc2xhdGlvbnMge1xuICAvLyBUb29sYmFyXG4gIHRvb2xiYXI6IHtcbiAgICBib2xkOiBzdHJpbmc7XG4gICAgaXRhbGljOiBzdHJpbmc7XG4gICAgdW5kZXJsaW5lOiBzdHJpbmc7XG4gICAgc3RyaWtlOiBzdHJpbmc7XG4gICAgY29kZTogc3RyaW5nO1xuICAgIGNvZGVCbG9jazogc3RyaW5nO1xuICAgIHN1cGVyc2NyaXB0OiBzdHJpbmc7XG4gICAgc3Vic2NyaXB0OiBzdHJpbmc7XG4gICAgaGlnaGxpZ2h0OiBzdHJpbmc7XG4gICAgaGlnaGxpZ2h0UGlja2VyOiBzdHJpbmc7XG4gICAgaGVhZGluZzE6IHN0cmluZztcbiAgICBoZWFkaW5nMjogc3RyaW5nO1xuICAgIGhlYWRpbmczOiBzdHJpbmc7XG4gICAgYnVsbGV0TGlzdDogc3RyaW5nO1xuICAgIG9yZGVyZWRMaXN0OiBzdHJpbmc7XG4gICAgYmxvY2txdW90ZTogc3RyaW5nO1xuICAgIGFsaWduTGVmdDogc3RyaW5nO1xuICAgIGFsaWduQ2VudGVyOiBzdHJpbmc7XG4gICAgYWxpZ25SaWdodDogc3RyaW5nO1xuICAgIGFsaWduSnVzdGlmeTogc3RyaW5nO1xuICAgIGxpbms6IHN0cmluZztcbiAgICBpbWFnZTogc3RyaW5nO1xuICAgIGhvcml6b250YWxSdWxlOiBzdHJpbmc7XG4gICAgdGFibGU6IHN0cmluZztcbiAgICB1bmRvOiBzdHJpbmc7XG4gICAgcmVkbzogc3RyaW5nO1xuICAgIGNsZWFyOiBzdHJpbmc7XG4gICAgdGV4dENvbG9yOiBzdHJpbmc7XG4gICAgY3VzdG9tQ29sb3I6IHN0cmluZztcbiAgICBwcmVzZXRzOiBzdHJpbmc7XG4gIH07XG5cbiAgLy8gQnViYmxlIE1lbnVcbiAgYnViYmxlTWVudToge1xuICAgIGJvbGQ6IHN0cmluZztcbiAgICBpdGFsaWM6IHN0cmluZztcbiAgICB1bmRlcmxpbmU6IHN0cmluZztcbiAgICBzdHJpa2U6IHN0cmluZztcbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgc3VwZXJzY3JpcHQ6IHN0cmluZztcbiAgICBzdWJzY3JpcHQ6IHN0cmluZztcbiAgICBoaWdobGlnaHQ6IHN0cmluZztcbiAgICBoaWdobGlnaHRQaWNrZXI6IHN0cmluZztcbiAgICB0ZXh0Q29sb3I6IHN0cmluZztcbiAgICBsaW5rOiBzdHJpbmc7XG4gICAgYWRkTGluazogc3RyaW5nO1xuICAgIGVkaXRMaW5rOiBzdHJpbmc7XG4gICAgcmVtb3ZlTGluazogc3RyaW5nO1xuICAgIGxpbmtVcmw6IHN0cmluZztcbiAgICBsaW5rVGV4dDogc3RyaW5nO1xuICAgIG9wZW5MaW5rOiBzdHJpbmc7XG4gICAgY3VzdG9tQ29sb3I6IHN0cmluZztcbiAgICBwcmVzZXRzOiBzdHJpbmc7XG4gIH07XG5cbiAgLy8gU2xhc2ggQ29tbWFuZHNcbiAgc2xhc2hDb21tYW5kczoge1xuICAgIGhlYWRpbmcxOiB7XG4gICAgICB0aXRsZTogc3RyaW5nO1xuICAgICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICAgIGtleXdvcmRzOiBzdHJpbmdbXTtcbiAgICB9O1xuICAgIGhlYWRpbmcyOiB7XG4gICAgICB0aXRsZTogc3RyaW5nO1xuICAgICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICAgIGtleXdvcmRzOiBzdHJpbmdbXTtcbiAgICB9O1xuICAgIGhlYWRpbmczOiB7XG4gICAgICB0aXRsZTogc3RyaW5nO1xuICAgICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICAgIGtleXdvcmRzOiBzdHJpbmdbXTtcbiAgICB9O1xuICAgIGJ1bGxldExpc3Q6IHtcbiAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgICAga2V5d29yZHM6IHN0cmluZ1tdO1xuICAgIH07XG4gICAgb3JkZXJlZExpc3Q6IHtcbiAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgICAga2V5d29yZHM6IHN0cmluZ1tdO1xuICAgIH07XG4gICAgYmxvY2txdW90ZToge1xuICAgICAgdGl0bGU6IHN0cmluZztcbiAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgICBrZXl3b3Jkczogc3RyaW5nW107XG4gICAgfTtcbiAgICBjb2RlOiB7XG4gICAgICB0aXRsZTogc3RyaW5nO1xuICAgICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICAgIGtleXdvcmRzOiBzdHJpbmdbXTtcbiAgICB9O1xuICAgIGltYWdlOiB7XG4gICAgICB0aXRsZTogc3RyaW5nO1xuICAgICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICAgIGtleXdvcmRzOiBzdHJpbmdbXTtcbiAgICB9O1xuICAgIGhvcml6b250YWxSdWxlOiB7XG4gICAgICB0aXRsZTogc3RyaW5nO1xuICAgICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICAgIGtleXdvcmRzOiBzdHJpbmdbXTtcbiAgICB9O1xuICAgIHRhYmxlOiB7XG4gICAgICB0aXRsZTogc3RyaW5nO1xuICAgICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICAgIGtleXdvcmRzOiBzdHJpbmdbXTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFRhYmxlIEFjdGlvbnNcbiAgdGFibGU6IHtcbiAgICBhZGRSb3dCZWZvcmU6IHN0cmluZztcbiAgICBhZGRSb3dBZnRlcjogc3RyaW5nO1xuICAgIGRlbGV0ZVJvdzogc3RyaW5nO1xuICAgIGFkZENvbHVtbkJlZm9yZTogc3RyaW5nO1xuICAgIGFkZENvbHVtbkFmdGVyOiBzdHJpbmc7XG4gICAgZGVsZXRlQ29sdW1uOiBzdHJpbmc7XG4gICAgZGVsZXRlVGFibGU6IHN0cmluZztcbiAgICB0b2dnbGVIZWFkZXJSb3c6IHN0cmluZztcbiAgICB0b2dnbGVIZWFkZXJDb2x1bW46IHN0cmluZztcbiAgICBtZXJnZUNlbGxzOiBzdHJpbmc7XG4gICAgc3BsaXRDZWxsOiBzdHJpbmc7XG4gIH07XG5cbiAgLy8gSW1hZ2UgVXBsb2FkXG4gIGltYWdlVXBsb2FkOiB7XG4gICAgc2VsZWN0SW1hZ2U6IHN0cmluZztcbiAgICBsb2FkRXJyb3I6IHN0cmluZztcbiAgICB1cGxvYWRpbmdJbWFnZTogc3RyaW5nO1xuICAgIHVwbG9hZFByb2dyZXNzOiBzdHJpbmc7XG4gICAgdXBsb2FkRXJyb3I6IHN0cmluZztcbiAgICB1cGxvYWRTdWNjZXNzOiBzdHJpbmc7XG4gICAgaW1hZ2VUb29MYXJnZTogc3RyaW5nO1xuICAgIGludmFsaWRGaWxlVHlwZTogc3RyaW5nO1xuICAgIGRyYWdEcm9wVGV4dDogc3RyaW5nO1xuICAgIGNoYW5nZUltYWdlOiBzdHJpbmc7XG4gICAgZG93bmxvYWRJbWFnZTogc3RyaW5nO1xuICAgIGRlbGV0ZUltYWdlOiBzdHJpbmc7XG4gICAgcmVzaXplU21hbGw6IHN0cmluZztcbiAgICByZXNpemVNZWRpdW06IHN0cmluZztcbiAgICByZXNpemVMYXJnZTogc3RyaW5nO1xuICAgIHJlc2l6ZU9yaWdpbmFsOiBzdHJpbmc7XG4gICAgYWxpZ25MZWZ0OiBzdHJpbmc7XG4gICAgYWxpZ25DZW50ZXI6IHN0cmluZztcbiAgICBhbGlnblJpZ2h0OiBzdHJpbmc7XG4gICAgcmVzaXppbmc6IHN0cmluZztcbiAgICBjb21wcmVzc2luZzogc3RyaW5nO1xuICAgIGNvbXByZXNzaW9uRXJyb3I6IHN0cmluZztcbiAgICB2YWxpZGF0aW5nOiBzdHJpbmc7XG4gICAgdXBsb2FkaW5nVG9TZXJ2ZXI6IHN0cmluZztcbiAgICByZXBsYWNpbmdJbWFnZTogc3RyaW5nO1xuICAgIGluc2VydGluZ0ltYWdlOiBzdHJpbmc7XG4gICAgbm9GaWxlU2VsZWN0ZWQ6IHN0cmluZztcbiAgICBzZWxlY3Rpb25DYW5jZWxsZWQ6IHN0cmluZztcbiAgfTtcblxuICAvLyBFZGl0b3JcbiAgZWRpdG9yOiB7XG4gICAgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgICBjaGFyYWN0ZXI6IHN0cmluZztcbiAgICB3b3JkOiBzdHJpbmc7XG4gICAgbGlua1Byb21wdDogc3RyaW5nO1xuICAgIGxpbmtVcmxQcm9tcHQ6IHN0cmluZztcbiAgICBjb25maXJtRGVsZXRlOiBzdHJpbmc7XG4gICAgdG9nZ2xlRWRpdDogc3RyaW5nO1xuICAgIHZpZXdNb2RlOiBzdHJpbmc7XG4gICAgYmxvY2tBZGQ6IHN0cmluZztcbiAgICBibG9ja0RyYWc6IHN0cmluZztcbiAgfTtcblxuICAvLyBDb21tb25cbiAgY29tbW9uOiB7XG4gICAgY2FuY2VsOiBzdHJpbmc7XG4gICAgY29uZmlybTogc3RyaW5nO1xuICAgIGFwcGx5OiBzdHJpbmc7XG4gICAgZGVsZXRlOiBzdHJpbmc7XG4gICAgc2F2ZTogc3RyaW5nO1xuICAgIGNsb3NlOiBzdHJpbmc7XG4gICAgbG9hZGluZzogc3RyaW5nO1xuICAgIGVycm9yOiBzdHJpbmc7XG4gICAgc3VjY2Vzczogc3RyaW5nO1xuICB9O1xuXG4gIC8vIEV4cG9ydFxuICBleHBvcnQ6IHtcbiAgICBleHBvcnQ6IHN0cmluZztcbiAgICBodG1sOiBzdHJpbmc7XG4gICAgbWFya2Rvd246IHN0cmluZztcbiAgICB0ZXh0OiBzdHJpbmc7XG4gICAgY29weUh0bWw6IHN0cmluZztcbiAgICBjb3B5TWFya2Rvd246IHN0cmluZztcbiAgICBjb3B5VGV4dDogc3RyaW5nO1xuICAgIGRvd25sb2FkSHRtbDogc3RyaW5nO1xuICAgIGRvd25sb2FkTWFya2Rvd246IHN0cmluZztcbiAgICBkb3dubG9hZFRleHQ6IHN0cmluZztcbiAgICBjb3BpZWRTdWNjZXNzOiBzdHJpbmc7XG4gIH07XG59XG5cbmNvbnN0IEVOR0xJU0hfVFJBTlNMQVRJT05TOiBBdGVUcmFuc2xhdGlvbnMgPSB7XG4gIHRvb2xiYXI6IHtcbiAgICBib2xkOiBcIkJvbGRcXG5DdHJsK0JcIixcbiAgICBpdGFsaWM6IFwiSXRhbGljXFxuQ3RybCtJXCIsXG4gICAgdW5kZXJsaW5lOiBcIlVuZGVybGluZVxcbkN0cmwrVVwiLFxuICAgIHN0cmlrZTogXCJTdHJpa2V0aHJvdWdoXFxuQ3RybCtTaGlmdCtYXCIsXG4gICAgY29kZTogXCJJbmxpbmUgQ29kZVxcbkN0cmwrRVwiLFxuICAgIGNvZGVCbG9jazogXCJDb2RlIEJsb2NrXCIsXG4gICAgc3VwZXJzY3JpcHQ6IFwiU3VwZXJzY3JpcHRcIixcbiAgICBzdWJzY3JpcHQ6IFwiU3Vic2NyaXB0XCIsXG4gICAgaGlnaGxpZ2h0OiBcIkhpZ2hsaWdodFwiLFxuICAgIGhpZ2hsaWdodFBpY2tlcjogXCJCYWNrZ3JvdW5kIENvbG9yXCIsXG4gICAgaGVhZGluZzE6IFwiSGVhZGluZyAxXCIsXG4gICAgaGVhZGluZzI6IFwiSGVhZGluZyAyXCIsXG4gICAgaGVhZGluZzM6IFwiSGVhZGluZyAzXCIsXG4gICAgYnVsbGV0TGlzdDogXCJCdWxsZXQgTGlzdFwiLFxuICAgIG9yZGVyZWRMaXN0OiBcIk9yZGVyZWQgTGlzdFwiLFxuICAgIGJsb2NrcXVvdGU6IFwiQmxvY2txdW90ZVwiLFxuICAgIGFsaWduTGVmdDogXCJBbGlnbiBMZWZ0XCIsXG4gICAgYWxpZ25DZW50ZXI6IFwiQWxpZ24gQ2VudGVyXCIsXG4gICAgYWxpZ25SaWdodDogXCJBbGlnbiBSaWdodFwiLFxuICAgIGFsaWduSnVzdGlmeTogXCJBbGlnbiBKdXN0aWZ5XCIsXG4gICAgbGluazogXCJBZGQgTGlua1wiLFxuICAgIGltYWdlOiBcIkFkZCBJbWFnZVwiLFxuICAgIGhvcml6b250YWxSdWxlOiBcIkhvcml6b250YWwgUnVsZVwiLFxuICAgIHRhYmxlOiBcIkluc2VydCBUYWJsZVwiLFxuICAgIHVuZG86IFwiVW5kb1xcbkN0cmwrWlwiLFxuICAgIHJlZG86IFwiUmVkb1xcbkN0cmwrU2hpZnQrWlwiLFxuICAgIGNsZWFyOiBcIkNsZWFyXCIsXG4gICAgdGV4dENvbG9yOiBcIlRleHQgQ29sb3JcIixcbiAgICBjdXN0b21Db2xvcjogXCJDdXN0b20gQ29sb3JcIixcbiAgICBwcmVzZXRzOiBcIlByZXNldHNcIixcbiAgfSxcbiAgYnViYmxlTWVudToge1xuICAgIGJvbGQ6IFwiQm9sZFxcbkN0cmwrQlwiLFxuICAgIGl0YWxpYzogXCJJdGFsaWNcXG5DdHJsK0lcIixcbiAgICB1bmRlcmxpbmU6IFwiVW5kZXJsaW5lXFxuQ3RybCtVXCIsXG4gICAgc3RyaWtlOiBcIlN0cmlrZXRocm91Z2hcXG5DdHJsK1NoaWZ0K1hcIixcbiAgICBjb2RlOiBcIkNvZGVcXG5DdHJsK0VcIixcbiAgICBzdXBlcnNjcmlwdDogXCJTdXBlcnNjcmlwdFwiLFxuICAgIHN1YnNjcmlwdDogXCJTdWJzY3JpcHRcIixcbiAgICBoaWdobGlnaHQ6IFwiSGlnaGxpZ2h0XCIsXG4gICAgaGlnaGxpZ2h0UGlja2VyOiBcIkJhY2tncm91bmQgQ29sb3JcIixcbiAgICB0ZXh0Q29sb3I6IFwiVGV4dCBDb2xvclwiLFxuICAgIGxpbms6IFwiTGlua1wiLFxuICAgIGFkZExpbms6IFwiQWRkIExpbmtcIixcbiAgICBlZGl0TGluazogXCJFZGl0IExpbmtcIixcbiAgICByZW1vdmVMaW5rOiBcIlJlbW92ZSBMaW5rXCIsXG4gICAgbGlua1VybDogXCJMaW5rIFVSTFwiLFxuICAgIGxpbmtUZXh0OiBcIkxpbmsgVGV4dFwiLFxuICAgIG9wZW5MaW5rOiBcIk9wZW4gTGlua1wiLFxuICAgIGN1c3RvbUNvbG9yOiBcIkN1c3RvbSBDb2xvclwiLFxuICAgIHByZXNldHM6IFwiUHJlc2V0c1wiLFxuICB9LFxuICBzbGFzaENvbW1hbmRzOiB7XG4gICAgaGVhZGluZzE6IHtcbiAgICAgIHRpdGxlOiBcIkhlYWRpbmcgMVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGFyZ2Ugc2VjdGlvbiBoZWFkaW5nXCIsXG4gICAgICBrZXl3b3JkczogW1wiaGVhZGluZ1wiLCBcImgxXCIsIFwidGl0bGVcIiwgXCIxXCIsIFwiaGVhZGVyXCJdLFxuICAgIH0sXG4gICAgaGVhZGluZzI6IHtcbiAgICAgIHRpdGxlOiBcIkhlYWRpbmcgMlwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiTWVkaXVtIHNlY3Rpb24gaGVhZGluZ1wiLFxuICAgICAga2V5d29yZHM6IFtcImhlYWRpbmdcIiwgXCJoMlwiLCBcInRpdGxlXCIsIFwiMlwiLCBcImhlYWRlclwiXSxcbiAgICB9LFxuICAgIGhlYWRpbmczOiB7XG4gICAgICB0aXRsZTogXCJIZWFkaW5nIDNcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlNtYWxsIHNlY3Rpb24gaGVhZGluZ1wiLFxuICAgICAga2V5d29yZHM6IFtcImhlYWRpbmdcIiwgXCJoM1wiLCBcInRpdGxlXCIsIFwiM1wiLCBcImhlYWRlclwiXSxcbiAgICB9LFxuICAgIGJ1bGxldExpc3Q6IHtcbiAgICAgIHRpdGxlOiBcIkJ1bGxldCBMaXN0XCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJDcmVhdGUgYSBidWxsZXQgbGlzdFwiLFxuICAgICAga2V5d29yZHM6IFtcImJ1bGxldFwiLCBcImxpc3RcIiwgXCJ1bFwiLCBcInVub3JkZXJlZFwiXSxcbiAgICB9LFxuICAgIG9yZGVyZWRMaXN0OiB7XG4gICAgICB0aXRsZTogXCJPcmRlcmVkIExpc3RcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNyZWF0ZSBhbiBvcmRlcmVkIGxpc3RcIixcbiAgICAgIGtleXdvcmRzOiBbXCJvcmRlcmVkXCIsIFwibGlzdFwiLCBcIm9sXCIsIFwibnVtYmVyZWRcIl0sXG4gICAgfSxcbiAgICBibG9ja3F1b3RlOiB7XG4gICAgICB0aXRsZTogXCJCbG9ja3F1b3RlXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJBZGQgYSBibG9ja3F1b3RlXCIsXG4gICAgICBrZXl3b3JkczogW1wicXVvdGVcIiwgXCJibG9ja3F1b3RlXCIsIFwiY2l0YXRpb25cIl0sXG4gICAgfSxcbiAgICBjb2RlOiB7XG4gICAgICB0aXRsZTogXCJDb2RlIEJsb2NrXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJBZGQgYSBjb2RlIGJsb2NrXCIsXG4gICAgICBrZXl3b3JkczogW1wiY29kZVwiLCBcImNvZGVibG9ja1wiLCBcInByZVwiLCBcInByb2dyYW1taW5nXCJdLFxuICAgIH0sXG4gICAgaW1hZ2U6IHtcbiAgICAgIHRpdGxlOiBcIkltYWdlXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJJbnNlcnQgYW4gaW1hZ2VcIixcbiAgICAgIGtleXdvcmRzOiBbXCJpbWFnZVwiLCBcInBob3RvXCIsIFwicGljdHVyZVwiLCBcImltZ1wiXSxcbiAgICB9LFxuICAgIGhvcml6b250YWxSdWxlOiB7XG4gICAgICB0aXRsZTogXCJIb3Jpem9udGFsIFJ1bGVcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFkZCBhIGhvcml6b250YWwgbGluZVwiLFxuICAgICAga2V5d29yZHM6IFtcImhyXCIsIFwiaG9yaXpvbnRhbFwiLCBcInJ1bGVcIiwgXCJsaW5lXCIsIFwic2VwYXJhdG9yXCJdLFxuICAgIH0sXG4gICAgdGFibGU6IHtcbiAgICAgIHRpdGxlOiBcIlRhYmxlXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJJbnNlcnQgYSB0YWJsZVwiLFxuICAgICAga2V5d29yZHM6IFtcInRhYmxlXCIsIFwiZ3JpZFwiLCBcImRhdGFcIiwgXCJyb3dzXCIsIFwiY29sdW1uc1wiXSxcbiAgICB9LFxuICB9LFxuICB0YWJsZToge1xuICAgIGFkZFJvd0JlZm9yZTogXCJBZGQgcm93IGJlZm9yZVwiLFxuICAgIGFkZFJvd0FmdGVyOiBcIkFkZCByb3cgYWZ0ZXJcIixcbiAgICBkZWxldGVSb3c6IFwiRGVsZXRlIHJvd1wiLFxuICAgIGFkZENvbHVtbkJlZm9yZTogXCJBZGQgY29sdW1uIGJlZm9yZVwiLFxuICAgIGFkZENvbHVtbkFmdGVyOiBcIkFkZCBjb2x1bW4gYWZ0ZXJcIixcbiAgICBkZWxldGVDb2x1bW46IFwiRGVsZXRlIGNvbHVtblwiLFxuICAgIGRlbGV0ZVRhYmxlOiBcIkRlbGV0ZSB0YWJsZVwiLFxuICAgIHRvZ2dsZUhlYWRlclJvdzogXCJUb2dnbGUgaGVhZGVyIHJvd1wiLFxuICAgIHRvZ2dsZUhlYWRlckNvbHVtbjogXCJUb2dnbGUgaGVhZGVyIGNvbHVtblwiLFxuICAgIG1lcmdlQ2VsbHM6IFwiTWVyZ2UgY2VsbHNcIixcbiAgICBzcGxpdENlbGw6IFwiU3BsaXQgY2VsbFwiLFxuICB9LFxuICBpbWFnZVVwbG9hZDoge1xuICAgIHNlbGVjdEltYWdlOiBcIlNlbGVjdCBJbWFnZVwiLFxuICAgIGxvYWRFcnJvcjogXCJFcnJvciBsb2FkaW5nIGltYWdlXCIsXG4gICAgdXBsb2FkaW5nSW1hZ2U6IFwiVXBsb2FkaW5nIGltYWdlLi4uXCIsXG4gICAgdXBsb2FkUHJvZ3Jlc3M6IFwiVXBsb2FkIFByb2dyZXNzXCIsXG4gICAgdXBsb2FkRXJyb3I6IFwiVXBsb2FkIEVycm9yXCIsXG4gICAgdXBsb2FkU3VjY2VzczogXCJVcGxvYWQgU3VjY2Vzc1wiLFxuICAgIGltYWdlVG9vTGFyZ2U6IFwiSW1hZ2UgdG9vIGxhcmdlXCIsXG4gICAgaW52YWxpZEZpbGVUeXBlOiBcIkludmFsaWQgZmlsZSB0eXBlXCIsXG4gICAgZHJhZ0Ryb3BUZXh0OiBcIkRyYWcgYW5kIGRyb3AgaW1hZ2VzIGhlcmVcIixcbiAgICBjaGFuZ2VJbWFnZTogXCJDaGFuZ2UgSW1hZ2VcIixcbiAgICBkb3dubG9hZEltYWdlOiBcIkRvd25sb2FkIEltYWdlXCIsXG4gICAgZGVsZXRlSW1hZ2U6IFwiRGVsZXRlIEltYWdlXCIsXG4gICAgcmVzaXplU21hbGw6IFwiU21hbGxcIixcbiAgICByZXNpemVNZWRpdW06IFwiTWVkaXVtXCIsXG4gICAgcmVzaXplTGFyZ2U6IFwiTGFyZ2VcIixcbiAgICByZXNpemVPcmlnaW5hbDogXCJPcmlnaW5hbFwiLFxuICAgIGFsaWduTGVmdDogXCJBbGlnbiBMZWZ0XCIsXG4gICAgYWxpZ25DZW50ZXI6IFwiQWxpZ24gQ2VudGVyXCIsXG4gICAgYWxpZ25SaWdodDogXCJBbGlnbiBSaWdodFwiLFxuICAgIHJlc2l6aW5nOiBcIlJlc2l6aW5nLi4uXCIsXG4gICAgY29tcHJlc3Npbmc6IFwiQ29tcHJlc3NpbmcuLi5cIixcbiAgICBjb21wcmVzc2lvbkVycm9yOiBcIkVycm9yIGR1cmluZyBjb21wcmVzc2lvblwiLFxuICAgIHZhbGlkYXRpbmc6IFwiVmFsaWRhdGluZyBmaWxlLi4uXCIsXG4gICAgdXBsb2FkaW5nVG9TZXJ2ZXI6IFwiVXBsb2FkaW5nIHRvIHNlcnZlci4uLlwiLFxuICAgIHJlcGxhY2luZ0ltYWdlOiBcIlJlcGxhY2luZyBpbWFnZS4uLlwiLFxuICAgIGluc2VydGluZ0ltYWdlOiBcIkluc2VydGluZyBpbnRvIGVkaXRvci4uLlwiLFxuICAgIG5vRmlsZVNlbGVjdGVkOiBcIk5vIGltYWdlIGZpbGUgc2VsZWN0ZWRcIixcbiAgICBzZWxlY3Rpb25DYW5jZWxsZWQ6IFwiU2VsZWN0aW9uIGNhbmNlbGxlZFwiLFxuICB9LFxuICBlZGl0b3I6IHtcbiAgICBwbGFjZWhvbGRlcjogXCJTdGFydCB0eXBpbmcuLi5cIixcbiAgICBjaGFyYWN0ZXI6IFwiY2hhcmFjdGVyXCIsXG4gICAgd29yZDogXCJ3b3JkXCIsXG4gICAgbGlua1Byb21wdDogXCJFbnRlciBsaW5rIFVSTFwiLFxuICAgIGxpbmtVcmxQcm9tcHQ6IFwiRW50ZXIgVVJMXCIsXG4gICAgY29uZmlybURlbGV0ZTogXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXM/XCIsXG4gICAgdG9nZ2xlRWRpdDogXCJTd2l0Y2ggdG8gRWRpdCBNb2RlXCIsXG4gICAgdmlld01vZGU6IFwiU3dpdGNoIHRvIFZpZXcgTW9kZVwiLFxuICAgIGJsb2NrQWRkOiBcIkNsaWNrIHRvIGFkZCBhIGJsb2NrXCIsXG4gICAgYmxvY2tEcmFnOiBcIkRyYWcgdG8gbW92ZSB0aGlzIGJsb2NrXCIsXG4gIH0sXG4gIGNvbW1vbjoge1xuICAgIGNhbmNlbDogXCJDYW5jZWxcIixcbiAgICBjb25maXJtOiBcIkNvbmZpcm1cIixcbiAgICBhcHBseTogXCJBcHBseVwiLFxuICAgIGRlbGV0ZTogXCJEZWxldGVcIixcbiAgICBzYXZlOiBcIlNhdmVcIixcbiAgICBjbG9zZTogXCJDbG9zZVwiLFxuICAgIGxvYWRpbmc6IFwiTG9hZGluZ1wiLFxuICAgIGVycm9yOiBcIkVycm9yXCIsXG4gICAgc3VjY2VzczogXCJTdWNjZXNzXCIsXG4gIH0sXG4gIGV4cG9ydDoge1xuICAgIGV4cG9ydDogXCJFeHBvcnRcIixcbiAgICBodG1sOiBcIkhUTUxcIixcbiAgICBtYXJrZG93bjogXCJNYXJrZG93blwiLFxuICAgIHRleHQ6IFwiUGxhaW4gVGV4dFwiLFxuICAgIGNvcHlIdG1sOiBcIkNvcHkgYXMgSFRNTFwiLFxuICAgIGNvcHlNYXJrZG93bjogXCJDb3B5IGFzIE1hcmtkb3duXCIsXG4gICAgY29weVRleHQ6IFwiQ29weSBhcyBwbGFpbiB0ZXh0XCIsXG4gICAgZG93bmxvYWRIdG1sOiBcIkRvd25sb2FkIC5odG1sXCIsXG4gICAgZG93bmxvYWRNYXJrZG93bjogXCJEb3dubG9hZCAubWRcIixcbiAgICBkb3dubG9hZFRleHQ6IFwiRG93bmxvYWQgLnR4dFwiLFxuICAgIGNvcGllZFN1Y2Nlc3M6IFwiQ29waWVkIHRvIGNsaXBib2FyZCFcIixcbiAgfSxcbn07XG5cbmNvbnN0IEZSRU5DSF9UUkFOU0xBVElPTlM6IEF0ZVRyYW5zbGF0aW9ucyA9IHtcbiAgdG9vbGJhcjoge1xuICAgIGJvbGQ6IFwiR3Jhc1xcbkN0cmwrQlwiLFxuICAgIGl0YWxpYzogXCJJdGFsaXF1ZVxcbkN0cmwrSVwiLFxuICAgIHVuZGVybGluZTogXCJTb3VsaWduw6lcXG5DdHJsK1VcIixcbiAgICBzdHJpa2U6IFwiQmFycsOpXFxuQ3RybCtTaGlmdCtYXCIsXG4gICAgY29kZTogXCJDb2RlIGVuIGxpZ25lXFxuQ3RybCtFXCIsXG4gICAgY29kZUJsb2NrOiBcIkJsb2MgZGUgY29kZVwiLFxuICAgIHN1cGVyc2NyaXB0OiBcIkV4cG9zYW50XCIsXG4gICAgc3Vic2NyaXB0OiBcIkluZGljZVwiLFxuICAgIGhpZ2hsaWdodDogXCJTdXJsaWduZXJcIixcbiAgICBoaWdobGlnaHRQaWNrZXI6IFwiQ291bGV1ciBkZSBmb25kXCIsXG4gICAgaGVhZGluZzE6IFwiVGl0cmUgMVwiLFxuICAgIGhlYWRpbmcyOiBcIlRpdHJlIDJcIixcbiAgICBoZWFkaW5nMzogXCJUaXRyZSAzXCIsXG4gICAgYnVsbGV0TGlzdDogXCJMaXN0ZSDDoCBwdWNlc1wiLFxuICAgIG9yZGVyZWRMaXN0OiBcIkxpc3RlIG51bcOpcm90w6llXCIsXG4gICAgYmxvY2txdW90ZTogXCJDaXRhdGlvblwiLFxuICAgIGFsaWduTGVmdDogXCJBbGlnbmVyIMOgIGdhdWNoZVwiLFxuICAgIGFsaWduQ2VudGVyOiBcIkNlbnRyZXJcIixcbiAgICBhbGlnblJpZ2h0OiBcIkFsaWduZXIgw6AgZHJvaXRlXCIsXG4gICAgYWxpZ25KdXN0aWZ5OiBcIkp1c3RpZmllclwiLFxuICAgIGxpbms6IFwiQWpvdXRlciB1biBsaWVuXCIsXG4gICAgaW1hZ2U6IFwiQWpvdXRlciB1bmUgaW1hZ2VcIixcbiAgICBob3Jpem9udGFsUnVsZTogXCJMaWduZSBob3Jpem9udGFsZVwiLFxuICAgIHRhYmxlOiBcIkluc8OpcmVyIHVuIHRhYmxlYXVcIixcbiAgICB1bmRvOiBcIkFubnVsZXJcXG5DdHJsK1pcIixcbiAgICByZWRvOiBcIlJlZmFpcmVcXG5DdHJsK1NoaWZ0K1pcIixcbiAgICBjbGVhcjogXCJWaWRlclwiLFxuICAgIHRleHRDb2xvcjogXCJDb3VsZXVyIGR1IHRleHRlXCIsXG4gICAgY3VzdG9tQ29sb3I6IFwiQ291bGV1ciBwZXJzb25uYWxpc8OpZVwiLFxuICAgIHByZXNldHM6IFwiUHLDqXLDqWdsYWdlc1wiLFxuICB9LFxuICBidWJibGVNZW51OiB7XG4gICAgYm9sZDogXCJHcmFzXFxuQ3RybCtCXCIsXG4gICAgaXRhbGljOiBcIkl0YWxpcXVlXFxuQ3RybCtJXCIsXG4gICAgdW5kZXJsaW5lOiBcIlNvdWxpZ27DqVxcbkN0cmwrVVwiLFxuICAgIHN0cmlrZTogXCJCYXJyw6lcXG5DdHJsK1NoaWZ0K1hcIixcbiAgICBjb2RlOiBcIkNvZGVcXG5DdHJsK0VcIixcbiAgICBzdXBlcnNjcmlwdDogXCJFeHBvc2FudFwiLFxuICAgIHN1YnNjcmlwdDogXCJJbmRpY2VcIixcbiAgICBoaWdobGlnaHQ6IFwiU3VybGlnbmVyXCIsXG4gICAgaGlnaGxpZ2h0UGlja2VyOiBcIkNvdWxldXIgZGUgZm9uZFwiLFxuICAgIHRleHRDb2xvcjogXCJDb3VsZXVyIGR1IHRleHRlXCIsXG4gICAgbGluazogXCJMaWVuXCIsXG4gICAgYWRkTGluazogXCJBam91dGVyIHVuIGxpZW5cIixcbiAgICBlZGl0TGluazogXCJNb2RpZmllciBsZSBsaWVuXCIsXG4gICAgcmVtb3ZlTGluazogXCJTdXBwcmltZXIgbGUgbGllblwiLFxuICAgIGxpbmtVcmw6IFwiVVJMIGR1IGxpZW5cIixcbiAgICBsaW5rVGV4dDogXCJUZXh0ZSBkdSBsaWVuXCIsXG4gICAgb3Blbkxpbms6IFwiT3V2cmlyIGxlIGxpZW5cIixcbiAgICBjdXN0b21Db2xvcjogXCJDb3VsZXVyIHBlcnNvbm5hbGlzw6llXCIsXG4gICAgcHJlc2V0czogXCJQcsOpcsOpZ2xhZ2VzXCIsXG4gIH0sXG4gIHNsYXNoQ29tbWFuZHM6IHtcbiAgICBoZWFkaW5nMToge1xuICAgICAgdGl0bGU6IFwiVGl0cmUgMVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiR3JhbmQgdGl0cmUgZGUgc2VjdGlvblwiLFxuICAgICAga2V5d29yZHM6IFtcImhlYWRpbmdcIiwgXCJoMVwiLCBcInRpdHJlXCIsIFwidGl0bGVcIiwgXCIxXCIsIFwiaGVhZGVyXCJdLFxuICAgIH0sXG4gICAgaGVhZGluZzI6IHtcbiAgICAgIHRpdGxlOiBcIlRpdHJlIDJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRpdHJlIGRlIHNvdXMtc2VjdGlvblwiLFxuICAgICAga2V5d29yZHM6IFtcImhlYWRpbmdcIiwgXCJoMlwiLCBcInRpdHJlXCIsIFwidGl0bGVcIiwgXCIyXCIsIFwiaGVhZGVyXCJdLFxuICAgIH0sXG4gICAgaGVhZGluZzM6IHtcbiAgICAgIHRpdGxlOiBcIlRpdHJlIDNcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlBldGl0IHRpdHJlXCIsXG4gICAgICBrZXl3b3JkczogW1wiaGVhZGluZ1wiLCBcImgzXCIsIFwidGl0cmVcIiwgXCJ0aXRsZVwiLCBcIjNcIiwgXCJoZWFkZXJcIl0sXG4gICAgfSxcbiAgICBidWxsZXRMaXN0OiB7XG4gICAgICB0aXRsZTogXCJMaXN0ZSDDoCBwdWNlc1wiLFxuICAgICAgZGVzY3JpcHRpb246IFwiQ3LDqWVyIHVuZSBsaXN0ZSDDoCBwdWNlc1wiLFxuICAgICAga2V5d29yZHM6IFtcImJ1bGxldFwiLCBcImxpc3RcIiwgXCJsaXN0ZVwiLCBcInB1Y2VzXCIsIFwidWxcIl0sXG4gICAgfSxcbiAgICBvcmRlcmVkTGlzdDoge1xuICAgICAgdGl0bGU6IFwiTGlzdGUgbnVtw6lyb3TDqWVcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNyw6llciB1bmUgbGlzdGUgbnVtw6lyb3TDqWVcIixcbiAgICAgIGtleXdvcmRzOiBbXCJudW1iZXJlZFwiLCBcImxpc3RcIiwgXCJsaXN0ZVwiLCBcIm51bcOpcm90w6llXCIsIFwib2xcIiwgXCJvcmRlcmVkXCJdLFxuICAgIH0sXG4gICAgYmxvY2txdW90ZToge1xuICAgICAgdGl0bGU6IFwiQ2l0YXRpb25cIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFqb3V0ZXIgdW5lIGNpdGF0aW9uXCIsXG4gICAgICBrZXl3b3JkczogW1wicXVvdGVcIiwgXCJibG9ja3F1b3RlXCIsIFwiY2l0YXRpb25cIl0sXG4gICAgfSxcbiAgICBjb2RlOiB7XG4gICAgICB0aXRsZTogXCJCbG9jIGRlIGNvZGVcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFqb3V0ZXIgdW4gYmxvYyBkZSBjb2RlXCIsXG4gICAgICBrZXl3b3JkczogW1wiY29kZVwiLCBcImNvZGVibG9ja1wiLCBcInByZVwiLCBcInByb2dyYW1tYXRpb25cIl0sXG4gICAgfSxcbiAgICBpbWFnZToge1xuICAgICAgdGl0bGU6IFwiSW1hZ2VcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkluc8OpcmVyIHVuZSBpbWFnZVwiLFxuICAgICAga2V5d29yZHM6IFtcImltYWdlXCIsIFwicGhvdG9cIiwgXCJwaWN0dXJlXCIsIFwiaW1nXCJdLFxuICAgIH0sXG4gICAgaG9yaXpvbnRhbFJ1bGU6IHtcbiAgICAgIHRpdGxlOiBcIkxpZ25lIGhvcml6b250YWxlXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJBam91dGVyIHVuZSBsaWduZSBkZSBzw6lwYXJhdGlvblwiLFxuICAgICAga2V5d29yZHM6IFtcImhyXCIsIFwiaG9yaXpvbnRhbFwiLCBcInJ1bGVcIiwgXCJsaWduZVwiLCBcInPDqXBhcmF0aW9uXCJdLFxuICAgIH0sXG4gICAgdGFibGU6IHtcbiAgICAgIHRpdGxlOiBcIlRhYmxlYXVcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkluc8OpcmVyIHVuIHRhYmxlYXVcIixcbiAgICAgIGtleXdvcmRzOiBbXCJ0YWJsZVwiLCBcInRhYmxlYXVcIiwgXCJncmlkXCIsIFwiZ3JpbGxlXCIsIFwiZGF0YVwiLCBcImRvbm7DqWVzXCIsIFwicm93c1wiLCBcImNvbG9ubmVzXCJdLFxuICAgIH0sXG4gIH0sXG4gIHRhYmxlOiB7XG4gICAgYWRkUm93QmVmb3JlOiBcIkFqb3V0ZXIgdW5lIGxpZ25lIGF2YW50XCIsXG4gICAgYWRkUm93QWZ0ZXI6IFwiQWpvdXRlciB1bmUgbGlnbmUgYXByw6hzXCIsXG4gICAgZGVsZXRlUm93OiBcIlN1cHByaW1lciBsYSBsaWduZVwiLFxuICAgIGFkZENvbHVtbkJlZm9yZTogXCJBam91dGVyIHVuZSBjb2xvbm5lIGF2YW50XCIsXG4gICAgYWRkQ29sdW1uQWZ0ZXI6IFwiQWpvdXRlciB1bmUgY29sb25uZSBhcHLDqHNcIixcbiAgICBkZWxldGVDb2x1bW46IFwiU3VwcHJpbWVyIGxhIGNvbG9ubmVcIixcbiAgICBkZWxldGVUYWJsZTogXCJTdXBwcmltZXIgbGUgdGFibGVhdVwiLFxuICAgIHRvZ2dsZUhlYWRlclJvdzogXCJCYXNjdWxlciBsaWduZSBkJ2VuLXTDqnRlXCIsXG4gICAgdG9nZ2xlSGVhZGVyQ29sdW1uOiBcIkJhc2N1bGVyIGNvbG9ubmUgZCdlbi10w6p0ZVwiLFxuICAgIG1lcmdlQ2VsbHM6IFwiRnVzaW9ubmVyIGxlcyBjZWxsdWxlc1wiLFxuICAgIHNwbGl0Q2VsbDogXCJEaXZpc2VyIGxhIGNlbGx1bGVcIixcbiAgfSxcbiAgaW1hZ2VVcGxvYWQ6IHtcbiAgICBzZWxlY3RJbWFnZTogXCJTw6lsZWN0aW9ubmVyIHVuZSBpbWFnZVwiLFxuICAgIGxvYWRFcnJvcjogXCJFcnJldXIgZGUgY2hhcmdlbWVudCBkZSBsJ2ltYWdlXCIsXG4gICAgdXBsb2FkaW5nSW1hZ2U6IFwiVMOpbMOpY2hhcmdlbWVudCBkZSBsJ2ltYWdlLi4uXCIsXG4gICAgdXBsb2FkUHJvZ3Jlc3M6IFwiUHJvZ3Jlc3Npb24gZHUgdMOpbMOpY2hhcmdlbWVudFwiLFxuICAgIHVwbG9hZEVycm9yOiBcIkVycmV1ciBkZSB0w6lsw6ljaGFyZ2VtZW50XCIsXG4gICAgdXBsb2FkU3VjY2VzczogXCJUw6lsw6ljaGFyZ2VtZW50IHLDqXVzc2lcIixcbiAgICBpbWFnZVRvb0xhcmdlOiBcIkltYWdlIHRyb3Agdm9sdW1pbmV1c2VcIixcbiAgICBpbnZhbGlkRmlsZVR5cGU6IFwiVHlwZSBkZSBmaWNoaWVyIGludmFsaWRlXCIsXG4gICAgZHJhZ0Ryb3BUZXh0OiBcIkdsaXNzZXogZXQgZMOpcG9zZXogZGVzIGltYWdlcyBpY2lcIixcbiAgICBjaGFuZ2VJbWFnZTogXCJDaGFuZ2VyIGwnaW1hZ2VcIixcbiAgICBkb3dubG9hZEltYWdlOiBcIlTDqWzDqWNoYXJnZXIgbCdpbWFnZVwiLFxuICAgIGRlbGV0ZUltYWdlOiBcIlN1cHByaW1lciBsJ2ltYWdlXCIsXG4gICAgcmVzaXplU21hbGw6IFwiUGV0aXRcIixcbiAgICByZXNpemVNZWRpdW06IFwiTW95ZW5cIixcbiAgICByZXNpemVMYXJnZTogXCJHcmFuZFwiLFxuICAgIHJlc2l6ZU9yaWdpbmFsOiBcIk9yaWdpbmFsXCIsXG4gICAgYWxpZ25MZWZ0OiBcIkFsaWduZXIgw6AgZ2F1Y2hlXCIsXG4gICAgYWxpZ25DZW50ZXI6IFwiQWxpZ25lciBhdSBjZW50cmVcIixcbiAgICBhbGlnblJpZ2h0OiBcIkFsaWduZXIgw6AgZHJvaXRlXCIsXG4gICAgcmVzaXppbmc6IFwiUmVkaW1lbnNpb25uZW1lbnQuLi5cIixcbiAgICBjb21wcmVzc2luZzogXCJDb21wcmVzc2lvbi4uLlwiLFxuICAgIGNvbXByZXNzaW9uRXJyb3I6IFwiRXJyZXVyIGxvcnMgZGUgbGEgY29tcHJlc3Npb25cIixcbiAgICB2YWxpZGF0aW5nOiBcIlZhbGlkYXRpb24gZHUgZmljaGllci4uLlwiLFxuICAgIHVwbG9hZGluZ1RvU2VydmVyOiBcIlVwbG9hZCB2ZXJzIGxlIHNlcnZldXIuLi5cIixcbiAgICByZXBsYWNpbmdJbWFnZTogXCJSZW1wbGFjZW1lbnQgZGUgbCdpbWFnZS4uLlwiLFxuICAgIGluc2VydGluZ0ltYWdlOiBcIkluc2VydGlvbiBkYW5zIGwnw6lkaXRldXIuLi5cIixcbiAgICBub0ZpbGVTZWxlY3RlZDogXCJBdWN1biBmaWNoaWVyIGltYWdlIHPDqWxlY3Rpb25uw6lcIixcbiAgICBzZWxlY3Rpb25DYW5jZWxsZWQ6IFwiU8OpbGVjdGlvbiBhbm51bMOpZVwiLFxuICB9LFxuICBlZGl0b3I6IHtcbiAgICBwbGFjZWhvbGRlcjogXCJDb21tZW5jZXogw6Agw6ljcmlyZS4uLlwiLFxuICAgIGNoYXJhY3RlcjogXCJjYXJhY3TDqHJlXCIsXG4gICAgd29yZDogXCJtb3RcIixcbiAgICBsaW5rUHJvbXB0OiBcIkVudHJleiBsJ1VSTCBkdSBsaWVuXCIsXG4gICAgbGlua1VybFByb21wdDogXCJFbnRyZXogbCdVUkxcIixcbiAgICBjb25maXJtRGVsZXRlOiBcIsOKdGVzLXZvdXMgc8O7ciBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZWNpID9cIixcbiAgICB0b2dnbGVFZGl0OiBcIlBhc3NlciBlbiBtb2RlIMOpZGl0aW9uXCIsXG4gICAgdmlld01vZGU6IFwiUGFzc2VyIGVuIG1vZGUgYWZmaWNoYWdlXCIsXG4gICAgYmxvY2tBZGQ6IFwiQ2xpcXVlciBwb3VyIGFqb3V0ZXIgdW4gYmxvY1wiLFxuICAgIGJsb2NrRHJhZzogXCJGYWlyZSBnbGlzc2VyIHBvdXIgZMOpcGxhY2VyIGNlIGJsb2NcIixcbiAgfSxcbiAgY29tbW9uOiB7XG4gICAgY2FuY2VsOiBcIkFubnVsZXJcIixcbiAgICBjb25maXJtOiBcIkNvbmZpcm1lclwiLFxuICAgIGFwcGx5OiBcIkFwcGxpcXVlclwiLFxuICAgIGRlbGV0ZTogXCJTdXBwcmltZXJcIixcbiAgICBzYXZlOiBcIlNhdXZlZ2FyZGVyXCIsXG4gICAgY2xvc2U6IFwiRmVybWVyXCIsXG4gICAgbG9hZGluZzogXCJDaGFyZ2VtZW50XCIsXG4gICAgZXJyb3I6IFwiRXJyZXVyXCIsXG4gICAgc3VjY2VzczogXCJTdWNjw6hzXCIsXG4gIH0sXG4gIGV4cG9ydDoge1xuICAgIGV4cG9ydDogXCJFeHBvcnRlclwiLFxuICAgIGh0bWw6IFwiSFRNTFwiLFxuICAgIG1hcmtkb3duOiBcIk1hcmtkb3duXCIsXG4gICAgdGV4dDogXCJUZXh0ZSBicnV0XCIsXG4gICAgY29weUh0bWw6IFwiQ29waWVyIGVuIEhUTUxcIixcbiAgICBjb3B5TWFya2Rvd246IFwiQ29waWVyIGVuIE1hcmtkb3duXCIsXG4gICAgY29weVRleHQ6IFwiQ29waWVyIGVuIHRleHRlIGJydXRcIixcbiAgICBkb3dubG9hZEh0bWw6IFwiVMOpbMOpY2hhcmdlciAuaHRtbFwiLFxuICAgIGRvd25sb2FkTWFya2Rvd246IFwiVMOpbMOpY2hhcmdlciAubWRcIixcbiAgICBkb3dubG9hZFRleHQ6IFwiVMOpbMOpY2hhcmdlciAudHh0XCIsXG4gICAgY29waWVkU3VjY2VzczogXCJDb3Bpw6kgZGFucyBsZSBwcmVzc2UtcGFwaWVycyAhXCIsXG4gIH0sXG59O1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46IFwicm9vdFwiLFxufSlcbmV4cG9ydCBjbGFzcyBBdGVJMThuU2VydmljZSB7XG4gIHByaXZhdGUgX2N1cnJlbnRMb2NhbGUgPSBzaWduYWw8U3VwcG9ydGVkTG9jYWxlPihcImVuXCIpO1xuICBwcml2YXRlIF90cmFuc2xhdGlvbnMgPSBzaWduYWw8UmVjb3JkPFN1cHBvcnRlZExvY2FsZSwgQXRlVHJhbnNsYXRpb25zPj4oe1xuICAgIGVuOiBFTkdMSVNIX1RSQU5TTEFUSU9OUyxcbiAgICBmcjogRlJFTkNIX1RSQU5TTEFUSU9OUyxcbiAgfSk7XG5cbiAgLy8gUHVibGljIHNpZ25hbHNcbiAgcmVhZG9ubHkgY3VycmVudExvY2FsZSA9IHRoaXMuX2N1cnJlbnRMb2NhbGUuYXNSZWFkb25seSgpO1xuICAvKiogQWxsIGxvYWRlZCB0cmFuc2xhdGlvbnMgKHVzZWZ1bCBmb3IgZHluYW1pYyBrZXkgYWNjZXNzKSAqL1xuICByZWFkb25seSBhbGxUcmFuc2xhdGlvbnMgPSB0aGlzLl90cmFuc2xhdGlvbnMuYXNSZWFkb25seSgpO1xuXG4gIHJlYWRvbmx5IHRyYW5zbGF0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX3RyYW5zbGF0aW9ucygpW3RoaXMuX2N1cnJlbnRMb2NhbGUoKV0pO1xuXG4gIC8vIEZhc3QgdHJhbnNsYXRpb24gbWV0aG9kc1xuICByZWFkb25seSB0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50cmFuc2xhdGlvbnMoKSk7XG4gIHJlYWRvbmx5IHRvb2xiYXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnRyYW5zbGF0aW9ucygpLnRvb2xiYXIpO1xuICByZWFkb25seSBidWJibGVNZW51ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50cmFuc2xhdGlvbnMoKS5idWJibGVNZW51KTtcbiAgcmVhZG9ubHkgc2xhc2hDb21tYW5kcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHJhbnNsYXRpb25zKCkuc2xhc2hDb21tYW5kcyk7XG4gIHJlYWRvbmx5IHRhYmxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50cmFuc2xhdGlvbnMoKS50YWJsZSk7XG4gIHJlYWRvbmx5IGltYWdlVXBsb2FkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50cmFuc2xhdGlvbnMoKS5pbWFnZVVwbG9hZCk7XG4gIHJlYWRvbmx5IGVkaXRvciA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHJhbnNsYXRpb25zKCkuZWRpdG9yKTtcbiAgcmVhZG9ubHkgY29tbW9uID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50cmFuc2xhdGlvbnMoKS5jb21tb24pO1xuICByZWFkb25seSBleHBvcnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnRyYW5zbGF0aW9ucygpLmV4cG9ydCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gQXV0b21hdGljYWxseSBkZXRlY3QgYnJvd3NlciBsYW5ndWFnZVxuICAgIHRoaXMuZGV0ZWN0QnJvd3Nlckxhbmd1YWdlKCk7XG4gIH1cblxuICBzZXRMb2NhbGUobG9jYWxlOiBTdXBwb3J0ZWRMb2NhbGUpOiB2b2lkIHtcbiAgICB0aGlzLl9jdXJyZW50TG9jYWxlLnNldChsb2NhbGUpO1xuICB9XG5cbiAgYXV0b0RldGVjdExvY2FsZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRldGVjdEJyb3dzZXJMYW5ndWFnZSgpO1xuICB9XG5cbiAgZ2V0U3VwcG9ydGVkTG9jYWxlcygpOiBTdXBwb3J0ZWRMb2NhbGVbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX3RyYW5zbGF0aW9ucygpKSBhcyBTdXBwb3J0ZWRMb2NhbGVbXTtcbiAgfVxuXG4gIGFkZFRyYW5zbGF0aW9ucyhsb2NhbGU6IHN0cmluZywgdHJhbnNsYXRpb25zOiBBdGVUcmFuc2xhdGlvbnMgfCBQYXJ0aWFsPEF0ZVRyYW5zbGF0aW9ucz4pOiB2b2lkIHtcbiAgICB0aGlzLl90cmFuc2xhdGlvbnMudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBjdXJyZW50W2xvY2FsZV0gfHwgRU5HTElTSF9UUkFOU0xBVElPTlM7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICBbbG9jYWxlXToge1xuICAgICAgICAgIC4uLmV4aXN0aW5nLFxuICAgICAgICAgIC4uLnRyYW5zbGF0aW9ucyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGRldGVjdEJyb3dzZXJMYW5ndWFnZSgpOiB2b2lkIHtcbiAgICBjb25zdCBicm93c2VyTGFuZyA9IG5hdmlnYXRvci5sYW5ndWFnZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChicm93c2VyTGFuZy5zdGFydHNXaXRoKFwiZnJcIikpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRMb2NhbGUuc2V0KFwiZnJcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRMb2NhbGUuc2V0KFwiZW5cIik7XG4gICAgfVxuICB9XG5cbiAgLy8gVXRpbGl0eSBtZXRob2RzIGZvciBjb21wb25lbnRzXG4gIGdldFRvb2xiYXJUaXRsZShrZXk6IGtleW9mIEF0ZVRyYW5zbGF0aW9uc1tcInRvb2xiYXJcIl0pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9ucygpLnRvb2xiYXJba2V5XTtcbiAgfVxuXG4gIGdldEJ1YmJsZU1lbnVUaXRsZShrZXk6IGtleW9mIEF0ZVRyYW5zbGF0aW9uc1tcImJ1YmJsZU1lbnVcIl0pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9ucygpLmJ1YmJsZU1lbnVba2V5XTtcbiAgfVxuXG4gIGdldFNsYXNoQ29tbWFuZChrZXk6IGtleW9mIEF0ZVRyYW5zbGF0aW9uc1tcInNsYXNoQ29tbWFuZHNcIl0pIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvbnMoKS5zbGFzaENvbW1hbmRzW2tleV07XG4gIH1cbn1cbiJdfQ==