@seniorsistemas/components-ai 0.0.0-master-d2ced108 → 0.0.0-master-e597799c

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.
@@ -0,0 +1,43 @@
1
+ {
2
+ "design.components_ai.bulk_delete_title": "Bulk Delete",
3
+ "design.components_ai.bulk_delete_warning": "You are about to delete <strong>{{count}}</strong> record(s).",
4
+ "design.components_ai.bulk_delete_description": "This action cannot be undone. Records will be deleted one by one.",
5
+ "design.components_ai.bulk_delete_progress": "Progress",
6
+ "design.components_ai.bulk_delete_success_count": "success",
7
+ "design.components_ai.bulk_delete_error_count": "error(s)",
8
+ "design.components_ai.bulk_delete_code_label": "Code",
9
+ "design.components_ai.bulk_delete_success_message": "All records were deleted successfully!",
10
+ "design.components_ai.bulk_delete_completed_with_errors": "Process completed with {{count}} error(s).",
11
+ "design.components_ai.bulk_delete_status_pending": "Pending",
12
+ "design.components_ai.bulk_delete_status_processing": "Processing...",
13
+ "design.components_ai.bulk_delete_status_success": "Deleted",
14
+ "design.components_ai.bulk_delete_status_error": "Error",
15
+ "design.components_ai.bulk_delete_error_generic": "Error deleting",
16
+ "design.components_ai.bulk_delete_confirm": "Confirm Deletion",
17
+ "design.components_ai.export_data_title": "Export Data",
18
+ "design.components_ai.export_format_title": "Export Format",
19
+ "design.components_ai.export_scope_title": "Records to Export",
20
+ "design.components_ai.export_columns_title": "Columns to Export",
21
+ "design.components_ai.export_excel_description": "Editable spreadsheet with formatting",
22
+ "design.components_ai.export_pdf_description": "Portable document for printing",
23
+ "design.components_ai.export_all_records": "All records",
24
+ "design.components_ai.export_all_records_description": "Export all table records",
25
+ "design.components_ai.export_selected_records": "Selected records",
26
+ "design.components_ai.export_selected_records_description": "Export only marked records",
27
+ "design.components_ai.export_records_count": "record(s)",
28
+ "design.components_ai.export_select_all_columns": "Select all",
29
+ "design.components_ai.export_clear_selection": "Clear selection",
30
+ "design.components_ai.export_columns_summary": "of",
31
+ "design.components_ai.export_columns_selected": "column(s) selected",
32
+ "design.components_ai.export_data_sheet_name": "Data",
33
+ "design.components_ai.export_pdf_title": "Data Export",
34
+ "design.components_ai.export_exported_at": "Exported at",
35
+ "design.components_ai.export_total_records": "Total records",
36
+ "design.components_ai.breadcrumb_home": "Home",
37
+ "design.components_ai.components.form": "Form",
38
+ "design.components_ai.components.save": "Save",
39
+ "design.components_ai.components.cancel": "Cancel",
40
+ "design.components_ai.cancel": "Cancel",
41
+ "design.components_ai.close": "Close",
42
+ "design.components_ai.export": "Export"
43
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "design.components_ai.bulk_delete_title": "Eliminación Masiva",
3
+ "design.components_ai.bulk_delete_warning": "Está a punto de eliminar <strong>{{count}}</strong> registro(s).",
4
+ "design.components_ai.bulk_delete_description": "Esta acción no se puede deshacer. Los registros se eliminarán uno por uno.",
5
+ "design.components_ai.bulk_delete_progress": "Progreso",
6
+ "design.components_ai.bulk_delete_success_count": "éxito",
7
+ "design.components_ai.bulk_delete_error_count": "error(es)",
8
+ "design.components_ai.bulk_delete_code_label": "Código",
9
+ "design.components_ai.bulk_delete_success_message": "¡Todos los registros fueron eliminados con éxito!",
10
+ "design.components_ai.bulk_delete_completed_with_errors": "Proceso completado con {{count}} error(es).",
11
+ "design.components_ai.bulk_delete_status_pending": "Pendiente",
12
+ "design.components_ai.bulk_delete_status_processing": "Procesando...",
13
+ "design.components_ai.bulk_delete_status_success": "Eliminado",
14
+ "design.components_ai.bulk_delete_status_error": "Error",
15
+ "design.components_ai.bulk_delete_error_generic": "Error al eliminar",
16
+ "design.components_ai.bulk_delete_confirm": "Confirmar Eliminación",
17
+ "design.components_ai.export_data_title": "Exportar Datos",
18
+ "design.components_ai.export_format_title": "Formato de Exportación",
19
+ "design.components_ai.export_scope_title": "Registros a Exportar",
20
+ "design.components_ai.export_columns_title": "Columnas a Exportar",
21
+ "design.components_ai.export_excel_description": "Hoja de cálculo editable con formato",
22
+ "design.components_ai.export_pdf_description": "Documento portátil para impresión",
23
+ "design.components_ai.export_all_records": "Todos los registros",
24
+ "design.components_ai.export_all_records_description": "Exportar todos los registros de la tabla",
25
+ "design.components_ai.export_selected_records": "Registros seleccionados",
26
+ "design.components_ai.export_selected_records_description": "Exportar solo los registros marcados",
27
+ "design.components_ai.export_records_count": "registro(s)",
28
+ "design.components_ai.export_select_all_columns": "Seleccionar todas",
29
+ "design.components_ai.export_clear_selection": "Limpiar selección",
30
+ "design.components_ai.export_columns_summary": "de",
31
+ "design.components_ai.export_columns_selected": "columna(s) seleccionada(s)",
32
+ "design.components_ai.export_data_sheet_name": "Datos",
33
+ "design.components_ai.export_pdf_title": "Exportación de Datos",
34
+ "design.components_ai.export_exported_at": "Exportado en",
35
+ "design.components_ai.export_total_records": "Total de registros",
36
+ "design.components_ai.breadcrumb_home": "Inicio",
37
+ "design.components_ai.components.form": "Formulario",
38
+ "design.components_ai.components.save": "Guardar",
39
+ "design.components_ai.components.cancel": "Cancelar",
40
+ "design.components_ai.cancel": "Cancelar",
41
+ "design.components_ai.close": "Cerrar",
42
+ "design.components_ai.export": "Exportar"
43
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "design.components_ai.bulk_delete_title": "Exclusão em Massa",
3
+ "design.components_ai.bulk_delete_warning": "Você está prestes a excluir <strong>{{count}}</strong> registro(s).",
4
+ "design.components_ai.bulk_delete_description": "Esta ação não pode ser desfeita. Os registros serão excluídos um por vez.",
5
+ "design.components_ai.bulk_delete_progress": "Progresso",
6
+ "design.components_ai.bulk_delete_success_count": "sucesso",
7
+ "design.components_ai.bulk_delete_error_count": "erro(s)",
8
+ "design.components_ai.bulk_delete_code_label": "Código",
9
+ "design.components_ai.bulk_delete_success_message": "Todos os registros foram excluídos com sucesso!",
10
+ "design.components_ai.bulk_delete_completed_with_errors": "Processo concluído com {{count}} erro(s).",
11
+ "design.components_ai.bulk_delete_status_pending": "Pendente",
12
+ "design.components_ai.bulk_delete_status_processing": "Processando...",
13
+ "design.components_ai.bulk_delete_status_success": "Excluído",
14
+ "design.components_ai.bulk_delete_status_error": "Erro",
15
+ "design.components_ai.bulk_delete_error_generic": "Erro ao excluir",
16
+ "design.components_ai.bulk_delete_confirm": "Confirmar Exclusão",
17
+ "design.components_ai.export_data_title": "Exportar Dados",
18
+ "design.components_ai.export_format_title": "Formato de Exportação",
19
+ "design.components_ai.export_scope_title": "Registros a Exportar",
20
+ "design.components_ai.export_columns_title": "Colunas a Exportar",
21
+ "design.components_ai.export_excel_description": "Planilha editável com formatação",
22
+ "design.components_ai.export_pdf_description": "Documento portátil para impressão",
23
+ "design.components_ai.export_all_records": "Todos os registros",
24
+ "design.components_ai.export_all_records_description": "Exportar todos os registros da tabela",
25
+ "design.components_ai.export_selected_records": "Registros selecionados",
26
+ "design.components_ai.export_selected_records_description": "Exportar apenas os registros marcados",
27
+ "design.components_ai.export_records_count": "registro(s)",
28
+ "design.components_ai.export_select_all_columns": "Selecionar todas",
29
+ "design.components_ai.export_clear_selection": "Limpar seleção",
30
+ "design.components_ai.export_columns_summary": "de",
31
+ "design.components_ai.export_columns_selected": "coluna(s) selecionada(s)",
32
+ "design.components_ai.export_data_sheet_name": "Dados",
33
+ "design.components_ai.export_pdf_title": "Exportação de Dados",
34
+ "design.components_ai.export_exported_at": "Exportado em",
35
+ "design.components_ai.export_total_records": "Total de registros",
36
+ "design.components_ai.breadcrumb_home": "Início",
37
+ "design.components_ai.components.form": "Formulário",
38
+ "design.components_ai.components.save": "Salvar",
39
+ "design.components_ai.components.cancel": "Cancelar",
40
+ "design.components_ai.cancel": "Cancelar",
41
+ "design.components_ai.close": "Fechar",
42
+ "design.components_ai.export": "Exportar"
43
+ }
@@ -1,8 +1,18 @@
1
1
  import { Injectable, Optional, Inject } from '@angular/core';
2
2
  import { BehaviorSubject } from 'rxjs';
3
3
  import { TRANSLATION_CONFIG, mapTokenLocaleToLanguage } from '../config/translation.config';
4
+ // Importar traduções estaticamente
5
+ import translationsPtBR from '../i18n/pt-BR.json';
6
+ import translationsEnUS from '../i18n/en-US.json';
7
+ import translationsEsES from '../i18n/es-ES.json';
4
8
  import * as i0 from "@angular/core";
5
9
  import * as i1 from "./senior-token.service";
10
+ // Mapa de traduções internas da biblioteca
11
+ const LIBRARY_TRANSLATIONS = {
12
+ 'pt-BR': translationsPtBR,
13
+ 'en-US': translationsEnUS,
14
+ 'es-ES': translationsEsES
15
+ };
6
16
  export class TranslationService {
7
17
  seniorTokenService;
8
18
  currentLanguage;
@@ -162,8 +172,7 @@ export class TranslationService {
162
172
  */
163
173
  async loadLibraryTranslations(language) {
164
174
  try {
165
- const translations = await import(`../i18n/${language}.json`);
166
- return translations.default || translations;
175
+ return LIBRARY_TRANSLATIONS[language] || {};
167
176
  }
168
177
  catch (error) {
169
178
  console.warn(`No library translations found for ${language}`);
@@ -273,4 +282,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
273
282
  type: Inject,
274
283
  args: ['TranslationLoader']
275
284
  }] }] });
276
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMtYWkvc3JjL2xpYi9zZXJ2aWNlcy90cmFuc2xhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBa0Isd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7O0FBYTVHLE1BQU0sT0FBTyxrQkFBa0I7SUFPbkI7SUFORixlQUFlLENBQXNDO0lBQ3JELFlBQVksR0FBMkIsRUFBRSxDQUFDO0lBQzFDLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDckMsaUJBQWlCLENBQXFCO0lBRTlDLFlBQ1Usa0JBQXNDLEVBQ0wsTUFBMEI7UUFEM0QsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUc5Qyw4Q0FBOEM7UUFDOUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FDeEMsa0JBQWtCLENBQUMsZUFBb0MsQ0FDeEQsQ0FBQztRQUNGLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUM7UUFFaEMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIscURBQXFEO1FBQ3JELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRXhCLG9EQUFvRDtRQUNwRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEtB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QUM7Z0JBRWpELElBQUksU0FBUyxLQUFLLGFBQWEsRUFBRSxDQUFDO29CQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxXQUFXLE9BQU8sU0FBUyxFQUFFLENBQUMsQ0FBQztvQkFDM0UsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNwQyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO3dHQW5TVSxrQkFBa0Isb0RBUVAsbUJBQW1COzRHQVI5QixrQkFBa0IsY0FGakIsTUFBTTs7NEZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBU0ksUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRSQU5TTEFUSU9OX0NPTkZJRywgTGFuZ3VhZ2VDb25maWcsIG1hcFRva2VuTG9jYWxlVG9MYW5ndWFnZSB9IGZyb20gJy4uL2NvbmZpZy90cmFuc2xhdGlvbi5jb25maWcnO1xuaW1wb3J0IHsgU2VuaW9yVG9rZW5TZXJ2aWNlIH0gZnJvbSAnLi9zZW5pb3ItdG9rZW4uc2VydmljZSc7XG5cbmV4cG9ydCB0eXBlIFN1cHBvcnRlZExhbmd1YWdlID0gJ3B0LUJSJyB8ICdlbi1VUycgfCAnZXMtRVMnO1xuXG4vLyBJbnRlcmZhY2UgcGFyYSBvIGxvYWRlciBkZSB0cmFkdcOnw7VlcyAoZHVjayB0eXBpbmcpXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zbGF0aW9uTG9hZGVyIHtcbiAgbG9hZFRyYW5zbGF0aW9ucyhsYW5ndWFnZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvblNlcnZpY2Uge1xuICBwcml2YXRlIGN1cnJlbnRMYW5ndWFnZSE6IEJlaGF2aW9yU3ViamVjdDxTdXBwb3J0ZWRMYW5ndWFnZT47XG4gIHByaXZhdGUgdHJhbnNsYXRpb25zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gIHByaXZhdGUgbG9hZGluZ0xhbmd1YWdlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIHRyYW5zbGF0aW9uTG9hZGVyPzogVHJhbnNsYXRpb25Mb2FkZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzZW5pb3JUb2tlblNlcnZpY2U6IFNlbmlvclRva2VuU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KCdUcmFuc2xhdGlvbkxvYWRlcicpIGxvYWRlcj86IFRyYW5zbGF0aW9uTG9hZGVyXG4gICkge1xuICAgIC8vIEluaWNpYWxpemFyIG8gQmVoYXZpb3JTdWJqZWN0IG5vIGNvbnN0cnV0b3JcbiAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3VwcG9ydGVkTGFuZ3VhZ2U+KFxuICAgICAgVFJBTlNMQVRJT05fQ09ORklHLmRlZmF1bHRMYW5ndWFnZSBhcyBTdXBwb3J0ZWRMYW5ndWFnZVxuICAgICk7XG4gICAgdGhpcy50cmFuc2xhdGlvbkxvYWRlciA9IGxvYWRlcjtcbiAgICBcbiAgICB0aGlzLmxvYWRTdG9yZWRMYW5ndWFnZSgpO1xuICAgIC8vIENhcnJlZ2FyIHRyYWR1w6fDtWVzIGRvIGlkaW9tYSBpbmljaWFsIGltZWRpYXRhbWVudGVcbiAgICB0aGlzLmxvYWRUcmFuc2xhdGlvbnMoKTtcbiAgICBcbiAgICAvLyBNb25pdG9yYXIgbXVkYW7Dp2FzIG5vIHRva2VuIHBhcmEgYXR1YWxpemFyIGlkaW9tYVxuICAgIHRoaXMud2F0Y2hUb2tlbkNoYW5nZXMoKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50TGFuZ3VhZ2UkKCk6IE9ic2VydmFibGU8U3VwcG9ydGVkTGFuZ3VhZ2U+IHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50TGFuZ3VhZ2UuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXRDdXJyZW50TGFuZ3VhZ2UoKTogU3VwcG9ydGVkTGFuZ3VhZ2Uge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRMYW5ndWFnZS52YWx1ZTtcbiAgfVxuXG4gIGFzeW5jIHNldExhbmd1YWdlKGxhbmd1YWdlOiBTdXBwb3J0ZWRMYW5ndWFnZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY3VycmVudExhbmd1YWdlLm5leHQobGFuZ3VhZ2UpO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFRSQU5TTEFUSU9OX0NPTkZJRy5zdG9yYWdlS2V5LCBsYW5ndWFnZSk7XG4gICAgYXdhaXQgdGhpcy5sb2FkVHJhbnNsYXRpb25zKCk7XG4gIH1cblxuICBhc3luYyB3YWl0Rm9yVHJhbnNsYXRpb25zKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGxhbmd1YWdlID0gdGhpcy5jdXJyZW50TGFuZ3VhZ2UudmFsdWU7XG4gICAgaWYgKCF0aGlzLmlzTGFuZ3VhZ2VMb2FkZWQobGFuZ3VhZ2UpKSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRUcmFuc2xhdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2UgYXMgdHJhZHXDp8O1ZXMgZG8gaWRpb21hIGF0dWFsIGVzdMOjbyBjYXJyZWdhZGFzXG4gICAqL1xuICBpc0xhbmd1YWdlTG9hZGVkKGxhbmd1YWdlPzogU3VwcG9ydGVkTGFuZ3VhZ2UpOiBib29sZWFuIHtcbiAgICBjb25zdCBsYW5nID0gbGFuZ3VhZ2UgfHwgdGhpcy5jdXJyZW50TGFuZ3VhZ2UudmFsdWU7XG4gICAgcmV0dXJuICEhdGhpcy50cmFuc2xhdGlvbnNbbGFuZ10gJiYgT2JqZWN0LmtleXModGhpcy50cmFuc2xhdGlvbnNbbGFuZ10pLmxlbmd0aCA+IDA7XG4gIH1cblxuICB0cmFuc2xhdGUoa2V5OiBzdHJpbmcsIHBhcmFtcz86IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBzdHJpbmcge1xuICAgIGNvbnN0IGN1cnJlbnRMYW5nID0gdGhpcy5jdXJyZW50TGFuZ3VhZ2UudmFsdWU7XG4gICAgY29uc3QgdHJhbnNsYXRpb25zID0gdGhpcy50cmFuc2xhdGlvbnNbY3VycmVudExhbmddO1xuICAgIFxuICAgIGlmICghdHJhbnNsYXRpb25zIHx8IE9iamVjdC5rZXlzKHRyYW5zbGF0aW9ucykubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBTZSBhcyB0cmFkdcOnw7VlcyBuw6NvIGVzdMOjbyBjYXJyZWdhZGFzLCB0ZW50YXIgY2FycmVnYXIgZGUgZm9ybWEgYXNzw61uY3JvbmFcbiAgICAgIGlmICghdGhpcy5sb2FkaW5nTGFuZ3VhZ2VzLmhhcyhjdXJyZW50TGFuZykpIHtcbiAgICAgICAgdGhpcy5sb2FkVHJhbnNsYXRpb25zKCkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgdHJhbnNsYXRpb25zOicsIGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zb2xlLndhcm4oYE5vIHRyYW5zbGF0aW9ucyBsb2FkZWQgZm9yIGxhbmd1YWdlOiAke2N1cnJlbnRMYW5nfWApO1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG5cbiAgICAvLyBCdXNjYXIgdHJhZHXDp8OjbyAoc3Vwb3J0YSBlc3RydXR1cmEgcGxhbmEgZSBhbmluaGFkYSlcbiAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHRoaXMuZ2V0TmVzdGVkVHJhbnNsYXRpb24odHJhbnNsYXRpb25zLCBrZXkpO1xuICAgIFxuICAgIGlmICghdHJhbnNsYXRpb24pIHtcbiAgICAgIGNvbnNvbGUud2FybihgVHJhbnNsYXRpb24ga2V5IG5vdCBmb3VuZDogJHtrZXl9YCk7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdHJhbnNsYXRpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFRyYW5zbGF0aW9uIGtleSBpcyBub3QgYSBzdHJpbmc6ICR7a2V5fWApO1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG5cbiAgICAvLyBSZXBsYWNlIHBhcmFtZXRlcnMgaWYgcHJvdmlkZWRcbiAgICBpZiAocGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXBsYWNlUGFyYW1zKHRyYW5zbGF0aW9uLCBwYXJhbXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0cmFuc2xhdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdXNjYSB0cmFkdcOnw6NvIGVtIGVzdHJ1dHVyYSBhbmluaGFkYSBvdSBwbGFuYVxuICAgKi9cbiAgcHJpdmF0ZSBnZXROZXN0ZWRUcmFuc2xhdGlvbih0cmFuc2xhdGlvbnM6IGFueSwga2V5OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIC8vIFByaW1laXJvIHRlbnRhIGJ1c2NhciBkaXJldGFtZW50ZSAoZXN0cnV0dXJhIHBsYW5hKVxuICAgIGlmICh0cmFuc2xhdGlvbnNba2V5XSkge1xuICAgICAgcmV0dXJuIHRyYW5zbGF0aW9uc1trZXldO1xuICAgIH1cblxuICAgIC8vIFNlIG7Do28gZW5jb250cm91LCB0ZW50YSBidXNjYXIgZW0gZXN0cnV0dXJhIGFuaW5oYWRhXG4gICAgY29uc3Qga2V5cyA9IGtleS5zcGxpdCgnLicpO1xuICAgIGxldCBjdXJyZW50ID0gdHJhbnNsYXRpb25zO1xuICAgIFxuICAgIGZvciAoY29uc3QgayBvZiBrZXlzKSB7XG4gICAgICBpZiAoY3VycmVudCAmJiB0eXBlb2YgY3VycmVudCA9PT0gJ29iamVjdCcgJiYgayBpbiBjdXJyZW50KSB7XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50W2tdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHR5cGVvZiBjdXJyZW50ID09PSAnc3RyaW5nJyA/IGN1cnJlbnQgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRUcmFuc2xhdGlvbnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLmN1cnJlbnRMYW5ndWFnZS52YWx1ZTtcbiAgICBcbiAgICAvLyBTZSBqw6EgZXN0w6EgY2FycmVnYWRvLCBuw6NvIGNhcnJlZ2FyIG5vdmFtZW50ZVxuICAgIGlmICh0aGlzLmlzTGFuZ3VhZ2VMb2FkZWQobGFuZ3VhZ2UpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIEV2aXRhciBjYXJyZWdhbWVudG9zIGR1cGxpY2Fkb3NcbiAgICBpZiAodGhpcy5sb2FkaW5nTGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHtcbiAgICAgIC8vIEFndWFyZGFyIHVtIHBvdWNvIGUgdGVudGFyIG5vdmFtZW50ZVxuICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xuICAgICAgaWYgKHRoaXMuaXNMYW5ndWFnZUxvYWRlZChsYW5ndWFnZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICB0aGlzLmxvYWRpbmdMYW5ndWFnZXMuYWRkKGxhbmd1YWdlKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5kb0xvYWRUcmFuc2xhdGlvbnMobGFuZ3VhZ2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBsb2FkVHJhbnNsYXRpb25zOicsIGVycm9yKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5sb2FkaW5nTGFuZ3VhZ2VzLmRlbGV0ZShsYW5ndWFnZSk7XG4gICAgfVxuICB9XG4gIFxuICBwcml2YXRlIGFzeW5jIGRvTG9hZFRyYW5zbGF0aW9ucyhsYW5ndWFnZTogU3VwcG9ydGVkTGFuZ3VhZ2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gMS4gQ2FycmVnYXIgdHJhZHXDp8O1ZXMgaW50ZXJuYXMgZGEgYmlibGlvdGVjYVxuICAgICAgY29uc3QgbGliVHJhbnNsYXRpb25zID0gYXdhaXQgdGhpcy5sb2FkTGlicmFyeVRyYW5zbGF0aW9ucyhsYW5ndWFnZSk7XG4gICAgICBcbiAgICAgIC8vIDIuIFNlIGjDoSB1bSBsb2FkZXIgY3VzdG9taXphZG8sIGNhcnJlZ2FyIHRyYWR1w6fDtWVzIGRhIGFwbGljYcOnw6NvXG4gICAgICBpZiAodGhpcy50cmFuc2xhdGlvbkxvYWRlcikge1xuICAgICAgICBjb25zdCBhcHBUcmFuc2xhdGlvbnMgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uTG9hZGVyLmxvYWRUcmFuc2xhdGlvbnMobGFuZ3VhZ2UpO1xuICAgICAgICAvLyBNZXJnZTogdHJhZHXDp8O1ZXMgZGEgYXBwIHNvYnJlc2NyZXZlbSBhcyBkYSBsaWJcbiAgICAgICAgdGhpcy50cmFuc2xhdGlvbnNbbGFuZ3VhZ2VdID0geyAuLi5saWJUcmFuc2xhdGlvbnMsIC4uLmFwcFRyYW5zbGF0aW9ucyB9O1xuICAgICAgICBjb25zb2xlLmxvZyhgVHJhbnNsYXRpb25zIGxvYWRlZCBmb3IgJHtsYW5ndWFnZX06YCwgT2JqZWN0LmtleXModGhpcy50cmFuc2xhdGlvbnNbbGFuZ3VhZ2VdKS5sZW5ndGgsICdrZXlzJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gU2UgbsOjbyBow6EgbG9hZGVyLCB1c2FyIGFwZW5hcyB0cmFkdcOnw7VlcyBkYSBsaWJcbiAgICAgIHRoaXMudHJhbnNsYXRpb25zW2xhbmd1YWdlXSA9IGxpYlRyYW5zbGF0aW9ucztcbiAgICAgIGNvbnNvbGUubG9nKGBMaWJyYXJ5IHRyYW5zbGF0aW9ucyBsb2FkZWQgZm9yICR7bGFuZ3VhZ2V9OmAsIE9iamVjdC5rZXlzKHRoaXMudHJhbnNsYXRpb25zW2xhbmd1YWdlXSkubGVuZ3RoLCAna2V5cycpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBFcnJvciBsb2FkaW5nIHRyYW5zbGF0aW9ucyBmb3IgJHtsYW5ndWFnZX06YCwgZXJyb3IpO1xuICAgICAgLy8gRmFsbGJhY2sgcGFyYSBvIGlkaW9tYSBwYWRyw6NvIHNlIGhvdXZlciBlcnJvXG4gICAgICBpZiAobGFuZ3VhZ2UgIT09IFRSQU5TTEFUSU9OX0NPTkZJRy5mYWxsYmFja0xhbmd1YWdlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZmFsbGJhY2tMaWJUcmFuc2xhdGlvbnMgPSBhd2FpdCB0aGlzLmxvYWRMaWJyYXJ5VHJhbnNsYXRpb25zKFRSQU5TTEFUSU9OX0NPTkZJRy5mYWxsYmFja0xhbmd1YWdlIGFzIFN1cHBvcnRlZExhbmd1YWdlKTtcbiAgICAgICAgICBpZiAodGhpcy50cmFuc2xhdGlvbkxvYWRlcikge1xuICAgICAgICAgICAgY29uc3QgZmFsbGJhY2tBcHBUcmFuc2xhdGlvbnMgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uTG9hZGVyLmxvYWRUcmFuc2xhdGlvbnMoVFJBTlNMQVRJT05fQ09ORklHLmZhbGxiYWNrTGFuZ3VhZ2UpO1xuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGlvbnNbbGFuZ3VhZ2VdID0geyAuLi5mYWxsYmFja0xpYlRyYW5zbGF0aW9ucywgLi4uZmFsbGJhY2tBcHBUcmFuc2xhdGlvbnMgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGlvbnNbbGFuZ3VhZ2VdID0gZmFsbGJhY2tMaWJUcmFuc2xhdGlvbnM7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUubG9nKGBGYWxsYmFjayB0cmFuc2xhdGlvbnMgbG9hZGVkIGZvciAke2xhbmd1YWdlfWApO1xuICAgICAgICB9IGNhdGNoIChmYWxsYmFja0Vycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgbG9hZGluZyBmYWxsYmFjayB0cmFuc2xhdGlvbnM6YCwgZmFsbGJhY2tFcnJvcik7XG4gICAgICAgICAgdGhpcy50cmFuc2xhdGlvbnNbbGFuZ3VhZ2VdID0ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FycmVnYSB0cmFkdcOnw7VlcyBpbnRlcm5hcyBkYSBiaWJsaW90ZWNhXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGxvYWRMaWJyYXJ5VHJhbnNsYXRpb25zKGxhbmd1YWdlOiBTdXBwb3J0ZWRMYW5ndWFnZSk6IFByb21pc2U8YW55PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IGF3YWl0IGltcG9ydChgLi4vaTE4bi8ke2xhbmd1YWdlfS5qc29uYCk7XG4gICAgICByZXR1cm4gdHJhbnNsYXRpb25zLmRlZmF1bHQgfHwgdHJhbnNsYXRpb25zO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oYE5vIGxpYnJhcnkgdHJhbnNsYXRpb25zIGZvdW5kIGZvciAke2xhbmd1YWdlfWApO1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZFN0b3JlZExhbmd1YWdlKCk6IHZvaWQge1xuICAgIC8vIDEuIFByaW1laXJvLCB0ZW50YXIgb2J0ZXIgZG8gdG9rZW4gU2VuaW9yXG4gICAgY29uc3QgdG9rZW5Mb2NhbGUgPSB0aGlzLnNlbmlvclRva2VuU2VydmljZS5nZXRVc2VyTG9jYWxlKCk7XG4gICAgaWYgKHRva2VuTG9jYWxlKSB7XG4gICAgICBjb25zdCBtYXBwZWRMYW5ndWFnZSA9IG1hcFRva2VuTG9jYWxlVG9MYW5ndWFnZSh0b2tlbkxvY2FsZSk7XG4gICAgICBpZiAobWFwcGVkTGFuZ3VhZ2UpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFVzaW5nIGxhbmd1YWdlIGZyb20gU2VuaW9yIHRva2VuOiAke3Rva2VuTG9jYWxlfSAtPiAke21hcHBlZExhbmd1YWdlfWApO1xuICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZS5uZXh0KG1hcHBlZExhbmd1YWdlIGFzIFN1cHBvcnRlZExhbmd1YWdlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDIuIFNlZ3VuZG8sIHRlbnRhciBvYnRlciBkbyBsb2NhbFN0b3JhZ2VcbiAgICBjb25zdCBzdG9yZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShUUkFOU0xBVElPTl9DT05GSUcuc3RvcmFnZUtleSkgYXMgU3VwcG9ydGVkTGFuZ3VhZ2U7XG4gICAgY29uc3Qgc3VwcG9ydGVkQ29kZXMgPSBUUkFOU0xBVElPTl9DT05GSUcuc3VwcG9ydGVkTGFuZ3VhZ2VzLm1hcChsYW5nID0+IGxhbmcuY29kZSk7XG4gICAgaWYgKHN0b3JlZCAmJiBzdXBwb3J0ZWRDb2Rlcy5pbmNsdWRlcyhzdG9yZWQpKSB7XG4gICAgICBjb25zb2xlLmxvZygnVXNpbmcgbGFuZ3VhZ2UgZnJvbSBsb2NhbFN0b3JhZ2U6Jywgc3RvcmVkKTtcbiAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlLm5leHQoc3RvcmVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyAzLiBQb3Igw7psdGltbywgdXNhciBpZGlvbWEgcGFkcsOjb1xuICAgIGNvbnNvbGUubG9nKCdVc2luZyBkZWZhdWx0IGxhbmd1YWdlOicsIFRSQU5TTEFUSU9OX0NPTkZJRy5kZWZhdWx0TGFuZ3VhZ2UpO1xuICAgIHRoaXMuY3VycmVudExhbmd1YWdlLm5leHQoVFJBTlNMQVRJT05fQ09ORklHLmRlZmF1bHRMYW5ndWFnZSBhcyBTdXBwb3J0ZWRMYW5ndWFnZSk7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VQYXJhbXModGV4dDogc3RyaW5nLCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBzdHJpbmcge1xuICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoL1xce1xceyhcXHcrKVxcfVxcfS9nLCAobWF0Y2gsIGtleSkgPT4ge1xuICAgICAgcmV0dXJuIHBhcmFtc1trZXldICE9PSB1bmRlZmluZWQgPyBwYXJhbXNba2V5XSA6IG1hdGNoO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0U3VwcG9ydGVkTGFuZ3VhZ2VzKCk6IExhbmd1YWdlQ29uZmlnW10ge1xuICAgIHJldHVybiBUUkFOU0xBVElPTl9DT05GSUcuc3VwcG9ydGVkTGFuZ3VhZ2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcsOnYSBvIHJlY2FycmVnYW1lbnRvIGRhcyB0cmFkdcOnw7VlcyAow7p0aWwgcGFyYSBkZXNlbnZvbHZpbWVudG8pXG4gICAqL1xuICBhc3luYyByZWxvYWRUcmFuc2xhdGlvbnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLmN1cnJlbnRMYW5ndWFnZS52YWx1ZTtcbiAgICBkZWxldGUgdGhpcy50cmFuc2xhdGlvbnNbbGFuZ3VhZ2VdO1xuICAgIGF3YWl0IHRoaXMubG9hZFRyYW5zbGF0aW9ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idMOpbSB0b2RhcyBhcyBjaGF2ZXMgZGUgdHJhZHXDp8OjbyBjYXJyZWdhZGFzXG4gICAqL1xuICBnZXRMb2FkZWRLZXlzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuY3VycmVudExhbmd1YWdlLnZhbHVlO1xuICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IHRoaXMudHJhbnNsYXRpb25zW2xhbmd1YWdlXTtcbiAgICByZXR1cm4gdHJhbnNsYXRpb25zID8gT2JqZWN0LmtleXModHJhbnNsYXRpb25zKSA6IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNlIHVtIGPDs2RpZ28gZGUgaWRpb21hIMOpIHN1cG9ydGFkb1xuICAgKi9cbiAgcHJpdmF0ZSBpc1ZhbGlkTGFuZ3VhZ2UobG9jYWxlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdXBwb3J0ZWRDb2RlcyA9IFRSQU5TTEFUSU9OX0NPTkZJRy5zdXBwb3J0ZWRMYW5ndWFnZXMubWFwKGxhbmcgPT4gbGFuZy5jb2RlKTtcbiAgICByZXR1cm4gc3VwcG9ydGVkQ29kZXMuaW5jbHVkZXMobG9jYWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb25pdG9yYSBtdWRhbsOnYXMgbm8gdG9rZW4gU2VuaW9yIHBhcmEgYXR1YWxpemFyIGlkaW9tYSBhdXRvbWF0aWNhbWVudGVcbiAgICovXG4gIHByaXZhdGUgd2F0Y2hUb2tlbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5zZW5pb3JUb2tlblNlcnZpY2Uud2F0Y2hUb2tlbkNoYW5nZXMoKHRva2VuRGF0YSkgPT4ge1xuICAgICAgaWYgKHRva2VuRGF0YT8ubG9jYWxlKSB7XG4gICAgICAgIGNvbnN0IG1hcHBlZExhbmd1YWdlID0gbWFwVG9rZW5Mb2NhbGVUb0xhbmd1YWdlKHRva2VuRGF0YS5sb2NhbGUpO1xuICAgICAgICBpZiAobWFwcGVkTGFuZ3VhZ2UpIHtcbiAgICAgICAgICBjb25zdCBuZXdMb2NhbGUgPSBtYXBwZWRMYW5ndWFnZSBhcyBTdXBwb3J0ZWRMYW5ndWFnZTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50TG9jYWxlID0gdGhpcy5jdXJyZW50TGFuZ3VhZ2UudmFsdWU7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKG5ld0xvY2FsZSAhPT0gY3VycmVudExvY2FsZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFRva2VuIGxvY2FsZSBjaGFuZ2VkOiAke3Rva2VuRGF0YS5sb2NhbGV9IC0+ICR7bmV3TG9jYWxlfWApO1xuICAgICAgICAgICAgdGhpcy5zZXRMYW5ndWFnZShuZXdMb2NhbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcsOnYSBhdHVhbGl6YcOnw6NvIGRvIGlkaW9tYSBiYXNlYWRvIG5vIHRva2VuIGF0dWFsXG4gICAqL1xuICBhc3luYyBzeW5jV2l0aFRva2VuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRva2VuTG9jYWxlID0gdGhpcy5zZW5pb3JUb2tlblNlcnZpY2UuZ2V0VXNlckxvY2FsZSgpO1xuICAgIGlmICh0b2tlbkxvY2FsZSkge1xuICAgICAgY29uc3QgbWFwcGVkTGFuZ3VhZ2UgPSBtYXBUb2tlbkxvY2FsZVRvTGFuZ3VhZ2UodG9rZW5Mb2NhbGUpO1xuICAgICAgaWYgKG1hcHBlZExhbmd1YWdlKSB7XG4gICAgICAgIGNvbnN0IG5ld0xvY2FsZSA9IG1hcHBlZExhbmd1YWdlIGFzIFN1cHBvcnRlZExhbmd1YWdlO1xuICAgICAgICBjb25zdCBjdXJyZW50TG9jYWxlID0gdGhpcy5jdXJyZW50TGFuZ3VhZ2UudmFsdWU7XG4gICAgICAgIFxuICAgICAgICBpZiAobmV3TG9jYWxlICE9PSBjdXJyZW50TG9jYWxlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYFN5bmNpbmcgbGFuZ3VhZ2Ugd2l0aCB0b2tlbjogJHt0b2tlbkxvY2FsZX0gLT4gJHtuZXdMb2NhbGV9YCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zZXRMYW5ndWFnZShuZXdMb2NhbGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
285
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMtYWkvc3JjL2xpYi9zZXJ2aWNlcy90cmFuc2xhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBa0Isd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUc1RyxtQ0FBbUM7QUFDbkMsT0FBTyxnQkFBZ0IsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLGdCQUFnQixNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sZ0JBQWdCLE1BQU0sb0JBQW9CLENBQUM7OztBQUlsRCwyQ0FBMkM7QUFDM0MsTUFBTSxvQkFBb0IsR0FBbUM7SUFDM0QsT0FBTyxFQUFFLGdCQUFnQjtJQUN6QixPQUFPLEVBQUUsZ0JBQWdCO0lBQ3pCLE9BQU8sRUFBRSxnQkFBZ0I7Q0FDMUIsQ0FBQztBQVVGLE1BQU0sT0FBTyxrQkFBa0I7SUFPbkI7SUFORixlQUFlLENBQXNDO0lBQ3JELFlBQVksR0FBMkIsRUFBRSxDQUFDO0lBQzFDLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDckMsaUJBQWlCLENBQXFCO0lBRTlDLFlBQ1Usa0JBQXNDLEVBQ0wsTUFBMEI7UUFEM0QsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUc5Qyw4Q0FBOEM7UUFDOUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FDeEMsa0JBQWtCLENBQUMsZUFBb0MsQ0FDeEQsQ0FBQztRQUNGLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUM7UUFFaEMsSUFBSSxDQUFDLGtCQUFr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QzVELElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsTUFBTSxjQUFjLEdBQUcsd0JBQXdCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDN0QsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxTQUFTLEdBQUcsY0FBbUMsQ0FBQztnQkFDdEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUM7Z0JBRWpELElBQUksU0FBUyxLQUFLLGFBQWEsRUFBRSxDQUFDO29CQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxXQUFXLE9BQU8sU0FBUyxFQUFFLENBQUMsQ0FBQztvQkFDM0UsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNwQyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO3dHQWxTVSxrQkFBa0Isb0RBUVAsbUJBQW1COzRHQVI5QixrQkFBa0IsY0FGakIsTUFBTTs7NEZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBU0ksUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRSQU5TTEFUSU9OX0NPTkZJRywgTGFuZ3VhZ2VDb25maWcsIG1hcFRva2VuTG9jYWxlVG9MYW5ndWFnZSB9IGZyb20gJy4uL2NvbmZpZy90cmFuc2xhdGlvbi5jb25maWcnO1xuaW1wb3J0IHsgU2VuaW9yVG9rZW5TZXJ2aWNlIH0gZnJvbSAnLi9zZW5pb3ItdG9rZW4uc2VydmljZSc7XG5cbi8vIEltcG9ydGFyIHRyYWR1w6fDtWVzIGVzdGF0aWNhbWVudGVcbmltcG9ydCB0cmFuc2xhdGlvbnNQdEJSIGZyb20gJy4uL2kxOG4vcHQtQlIuanNvbic7XG5pbXBvcnQgdHJhbnNsYXRpb25zRW5VUyBmcm9tICcuLi9pMThuL2VuLVVTLmpzb24nO1xuaW1wb3J0IHRyYW5zbGF0aW9uc0VzRVMgZnJvbSAnLi4vaTE4bi9lcy1FUy5qc29uJztcblxuZXhwb3J0IHR5cGUgU3VwcG9ydGVkTGFuZ3VhZ2UgPSAncHQtQlInIHwgJ2VuLVVTJyB8ICdlcy1FUyc7XG5cbi8vIE1hcGEgZGUgdHJhZHXDp8O1ZXMgaW50ZXJuYXMgZGEgYmlibGlvdGVjYVxuY29uc3QgTElCUkFSWV9UUkFOU0xBVElPTlM6IFJlY29yZDxTdXBwb3J0ZWRMYW5ndWFnZSwgYW55PiA9IHtcbiAgJ3B0LUJSJzogdHJhbnNsYXRpb25zUHRCUixcbiAgJ2VuLVVTJzogdHJhbnNsYXRpb25zRW5VUyxcbiAgJ2VzLUVTJzogdHJhbnNsYXRpb25zRXNFU1xufTtcblxuLy8gSW50ZXJmYWNlIHBhcmEgbyBsb2FkZXIgZGUgdHJhZHXDp8O1ZXMgKGR1Y2sgdHlwaW5nKVxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2xhdGlvbkxvYWRlciB7XG4gIGxvYWRUcmFuc2xhdGlvbnMobGFuZ3VhZ2U6IHN0cmluZyk6IFByb21pc2U8YW55Pjtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjdXJyZW50TGFuZ3VhZ2UhOiBCZWhhdmlvclN1YmplY3Q8U3VwcG9ydGVkTGFuZ3VhZ2U+O1xuICBwcml2YXRlIHRyYW5zbGF0aW9uczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBwcml2YXRlIGxvYWRpbmdMYW5ndWFnZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSB0cmFuc2xhdGlvbkxvYWRlcj86IFRyYW5zbGF0aW9uTG9hZGVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2VuaW9yVG9rZW5TZXJ2aWNlOiBTZW5pb3JUb2tlblNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdCgnVHJhbnNsYXRpb25Mb2FkZXInKSBsb2FkZXI/OiBUcmFuc2xhdGlvbkxvYWRlclxuICApIHtcbiAgICAvLyBJbmljaWFsaXphciBvIEJlaGF2aW9yU3ViamVjdCBubyBjb25zdHJ1dG9yXG4gICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFN1cHBvcnRlZExhbmd1YWdlPihcbiAgICAgIFRSQU5TTEFUSU9OX0NPTkZJRy5kZWZhdWx0TGFuZ3VhZ2UgYXMgU3VwcG9ydGVkTGFuZ3VhZ2VcbiAgICApO1xuICAgIHRoaXMudHJhbnNsYXRpb25Mb2FkZXIgPSBsb2FkZXI7XG4gICAgXG4gICAgdGhpcy5sb2FkU3RvcmVkTGFuZ3VhZ2UoKTtcbiAgICAvLyBDYXJyZWdhciB0cmFkdcOnw7VlcyBkbyBpZGlvbWEgaW5pY2lhbCBpbWVkaWF0YW1lbnRlXG4gICAgdGhpcy5sb2FkVHJhbnNsYXRpb25zKCk7XG4gICAgXG4gICAgLy8gTW9uaXRvcmFyIG11ZGFuw6dhcyBubyB0b2tlbiBwYXJhIGF0dWFsaXphciBpZGlvbWFcbiAgICB0aGlzLndhdGNoVG9rZW5DaGFuZ2VzKCk7XG4gIH1cblxuICBnZXQgY3VycmVudExhbmd1YWdlJCgpOiBPYnNlcnZhYmxlPFN1cHBvcnRlZExhbmd1YWdlPiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudExhbmd1YWdlLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0Q3VycmVudExhbmd1YWdlKCk6IFN1cHBvcnRlZExhbmd1YWdlIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50TGFuZ3VhZ2UudmFsdWU7XG4gIH1cblxuICBhc3luYyBzZXRMYW5ndWFnZShsYW5ndWFnZTogU3VwcG9ydGVkTGFuZ3VhZ2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZS5uZXh0KGxhbmd1YWdlKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShUUkFOU0xBVElPTl9DT05GSUcuc3RvcmFnZUtleSwgbGFuZ3VhZ2UpO1xuICAgIGF3YWl0IHRoaXMubG9hZFRyYW5zbGF0aW9ucygpO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvclRyYW5zbGF0aW9ucygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuY3VycmVudExhbmd1YWdlLnZhbHVlO1xuICAgIGlmICghdGhpcy5pc0xhbmd1YWdlTG9hZGVkKGxhbmd1YWdlKSkge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkVHJhbnNsYXRpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNlIGFzIHRyYWR1w6fDtWVzIGRvIGlkaW9tYSBhdHVhbCBlc3TDo28gY2FycmVnYWRhc1xuICAgKi9cbiAgaXNMYW5ndWFnZUxvYWRlZChsYW5ndWFnZT86IFN1cHBvcnRlZExhbmd1YWdlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbGFuZyA9IGxhbmd1YWdlIHx8IHRoaXMuY3VycmVudExhbmd1YWdlLnZhbHVlO1xuICAgIHJldHVybiAhIXRoaXMudHJhbnNsYXRpb25zW2xhbmddICYmIE9iamVjdC5rZXlzKHRoaXMudHJhbnNsYXRpb25zW2xhbmddKS5sZW5ndGggPiAwO1xuICB9XG5cbiAgdHJhbnNsYXRlKGtleTogc3RyaW5nLCBwYXJhbXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogc3RyaW5nIHtcbiAgICBjb25zdCBjdXJyZW50TGFuZyA9IHRoaXMuY3VycmVudExhbmd1YWdlLnZhbHVlO1xuICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IHRoaXMudHJhbnNsYXRpb25zW2N1cnJlbnRMYW5nXTtcbiAgICBcbiAgICBpZiAoIXRyYW5zbGF0aW9ucyB8fCBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gU2UgYXMgdHJhZHXDp8O1ZXMgbsOjbyBlc3TDo28gY2FycmVnYWRhcywgdGVudGFyIGNhcnJlZ2FyIGRlIGZvcm1hIGFzc8OtbmNyb25hXG4gICAgICBpZiAoIXRoaXMubG9hZGluZ0xhbmd1YWdlcy5oYXMoY3VycmVudExhbmcpKSB7XG4gICAgICAgIHRoaXMubG9hZFRyYW5zbGF0aW9ucygpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIHRyYW5zbGF0aW9uczonLCBlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc29sZS53YXJuKGBObyB0cmFuc2xhdGlvbnMgbG9hZGVkIGZvciBsYW5ndWFnZTogJHtjdXJyZW50TGFuZ31gKTtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuXG4gICAgLy8gQnVzY2FyIHRyYWR1w6fDo28gKHN1cG9ydGEgZXN0cnV0dXJhIHBsYW5hIGUgYW5pbmhhZGEpXG4gICAgY29uc3QgdHJhbnNsYXRpb24gPSB0aGlzLmdldE5lc3RlZFRyYW5zbGF0aW9uKHRyYW5zbGF0aW9ucywga2V5KTtcbiAgICBcbiAgICBpZiAoIXRyYW5zbGF0aW9uKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFRyYW5zbGF0aW9uIGtleSBub3QgZm91bmQ6ICR7a2V5fWApO1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRyYW5zbGF0aW9uICE9PSAnc3RyaW5nJykge1xuICAgICAgY29uc29sZS53YXJuKGBUcmFuc2xhdGlvbiBrZXkgaXMgbm90IGEgc3RyaW5nOiAke2tleX1gKTtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuXG4gICAgLy8gUmVwbGFjZSBwYXJhbWV0ZXJzIGlmIHByb3ZpZGVkXG4gICAgaWYgKHBhcmFtcykge1xuICAgICAgcmV0dXJuIHRoaXMucmVwbGFjZVBhcmFtcyh0cmFuc2xhdGlvbiwgcGFyYW1zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNsYXRpb247XG4gIH1cblxuICAvKipcbiAgICogQnVzY2EgdHJhZHXDp8OjbyBlbSBlc3RydXR1cmEgYW5pbmhhZGEgb3UgcGxhbmFcbiAgICovXG4gIHByaXZhdGUgZ2V0TmVzdGVkVHJhbnNsYXRpb24odHJhbnNsYXRpb25zOiBhbnksIGtleTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAvLyBQcmltZWlybyB0ZW50YSBidXNjYXIgZGlyZXRhbWVudGUgKGVzdHJ1dHVyYSBwbGFuYSlcbiAgICBpZiAodHJhbnNsYXRpb25zW2tleV0pIHtcbiAgICAgIHJldHVybiB0cmFuc2xhdGlvbnNba2V5XTtcbiAgICB9XG5cbiAgICAvLyBTZSBuw6NvIGVuY29udHJvdSwgdGVudGEgYnVzY2FyIGVtIGVzdHJ1dHVyYSBhbmluaGFkYVxuICAgIGNvbnN0IGtleXMgPSBrZXkuc3BsaXQoJy4nKTtcbiAgICBsZXQgY3VycmVudCA9IHRyYW5zbGF0aW9ucztcbiAgICBcbiAgICBmb3IgKGNvbnN0IGsgb2Yga2V5cykge1xuICAgICAgaWYgKGN1cnJlbnQgJiYgdHlwZW9mIGN1cnJlbnQgPT09ICdvYmplY3QnICYmIGsgaW4gY3VycmVudCkge1xuICAgICAgICBjdXJyZW50ID0gY3VycmVudFtrXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB0eXBlb2YgY3VycmVudCA9PT0gJ3N0cmluZycgPyBjdXJyZW50IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkVHJhbnNsYXRpb25zKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGxhbmd1YWdlID0gdGhpcy5jdXJyZW50TGFuZ3VhZ2UudmFsdWU7XG4gICAgXG4gICAgLy8gU2UgasOhIGVzdMOhIGNhcnJlZ2FkbywgbsOjbyBjYXJyZWdhciBub3ZhbWVudGVcbiAgICBpZiAodGhpcy5pc0xhbmd1YWdlTG9hZGVkKGxhbmd1YWdlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBFdml0YXIgY2FycmVnYW1lbnRvcyBkdXBsaWNhZG9zXG4gICAgaWYgKHRoaXMubG9hZGluZ0xhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSB7XG4gICAgICAvLyBBZ3VhcmRhciB1bSBwb3VjbyBlIHRlbnRhciBub3ZhbWVudGVcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDApKTtcbiAgICAgIGlmICh0aGlzLmlzTGFuZ3VhZ2VMb2FkZWQobGFuZ3VhZ2UpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdGhpcy5sb2FkaW5nTGFuZ3VhZ2VzLmFkZChsYW5ndWFnZSk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZG9Mb2FkVHJhbnNsYXRpb25zKGxhbmd1YWdlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gbG9hZFRyYW5zbGF0aW9uczonLCBlcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubG9hZGluZ0xhbmd1YWdlcy5kZWxldGUobGFuZ3VhZ2UpO1xuICAgIH1cbiAgfVxuICBcbiAgcHJpdmF0ZSBhc3luYyBkb0xvYWRUcmFuc2xhdGlvbnMobGFuZ3VhZ2U6IFN1cHBvcnRlZExhbmd1YWdlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIDEuIENhcnJlZ2FyIHRyYWR1w6fDtWVzIGludGVybmFzIGRhIGJpYmxpb3RlY2FcbiAgICAgIGNvbnN0IGxpYlRyYW5zbGF0aW9ucyA9IGF3YWl0IHRoaXMubG9hZExpYnJhcnlUcmFuc2xhdGlvbnMobGFuZ3VhZ2UpO1xuICAgICAgXG4gICAgICAvLyAyLiBTZSBow6EgdW0gbG9hZGVyIGN1c3RvbWl6YWRvLCBjYXJyZWdhciB0cmFkdcOnw7VlcyBkYSBhcGxpY2HDp8Ojb1xuICAgICAgaWYgKHRoaXMudHJhbnNsYXRpb25Mb2FkZXIpIHtcbiAgICAgICAgY29uc3QgYXBwVHJhbnNsYXRpb25zID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvbkxvYWRlci5sb2FkVHJhbnNsYXRpb25zKGxhbmd1YWdlKTtcbiAgICAgICAgLy8gTWVyZ2U6IHRyYWR1w6fDtWVzIGRhIGFwcCBzb2JyZXNjcmV2ZW0gYXMgZGEgbGliXG4gICAgICAgIHRoaXMudHJhbnNsYXRpb25zW2xhbmd1YWdlXSA9IHsgLi4ubGliVHJhbnNsYXRpb25zLCAuLi5hcHBUcmFuc2xhdGlvbnMgfTtcbiAgICAgICAgY29uc29sZS5sb2coYFRyYW5zbGF0aW9ucyBsb2FkZWQgZm9yICR7bGFuZ3VhZ2V9OmAsIE9iamVjdC5rZXlzKHRoaXMudHJhbnNsYXRpb25zW2xhbmd1YWdlXSkubGVuZ3RoLCAna2V5cycpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFNlIG7Do28gaMOhIGxvYWRlciwgdXNhciBhcGVuYXMgdHJhZHXDp8O1ZXMgZGEgbGliXG4gICAgICB0aGlzLnRyYW5zbGF0aW9uc1tsYW5ndWFnZV0gPSBsaWJUcmFuc2xhdGlvbnM7XG4gICAgICBjb25zb2xlLmxvZyhgTGlicmFyeSB0cmFuc2xhdGlvbnMgbG9hZGVkIGZvciAke2xhbmd1YWdlfTpgLCBPYmplY3Qua2V5cyh0aGlzLnRyYW5zbGF0aW9uc1tsYW5ndWFnZV0pLmxlbmd0aCwgJ2tleXMnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgbG9hZGluZyB0cmFuc2xhdGlvbnMgZm9yICR7bGFuZ3VhZ2V9OmAsIGVycm9yKTtcbiAgICAgIC8vIEZhbGxiYWNrIHBhcmEgbyBpZGlvbWEgcGFkcsOjbyBzZSBob3V2ZXIgZXJyb1xuICAgICAgaWYgKGxhbmd1YWdlICE9PSBUUkFOU0xBVElPTl9DT05GSUcuZmFsbGJhY2tMYW5ndWFnZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGZhbGxiYWNrTGliVHJhbnNsYXRpb25zID0gYXdhaXQgdGhpcy5sb2FkTGlicmFyeVRyYW5zbGF0aW9ucyhUUkFOU0xBVElPTl9DT05GSUcuZmFsbGJhY2tMYW5ndWFnZSBhcyBTdXBwb3J0ZWRMYW5ndWFnZSk7XG4gICAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRpb25Mb2FkZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGZhbGxiYWNrQXBwVHJhbnNsYXRpb25zID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvbkxvYWRlci5sb2FkVHJhbnNsYXRpb25zKFRSQU5TTEFUSU9OX0NPTkZJRy5mYWxsYmFja0xhbmd1YWdlKTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb25zW2xhbmd1YWdlXSA9IHsgLi4uZmFsbGJhY2tMaWJUcmFuc2xhdGlvbnMsIC4uLmZhbGxiYWNrQXBwVHJhbnNsYXRpb25zIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb25zW2xhbmd1YWdlXSA9IGZhbGxiYWNrTGliVHJhbnNsYXRpb25zO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zb2xlLmxvZyhgRmFsbGJhY2sgdHJhbnNsYXRpb25zIGxvYWRlZCBmb3IgJHtsYW5ndWFnZX1gKTtcbiAgICAgICAgfSBjYXRjaCAoZmFsbGJhY2tFcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGxvYWRpbmcgZmFsbGJhY2sgdHJhbnNsYXRpb25zOmAsIGZhbGxiYWNrRXJyb3IpO1xuICAgICAgICAgIHRoaXMudHJhbnNsYXRpb25zW2xhbmd1YWdlXSA9IHt9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhcnJlZ2EgdHJhZHXDp8O1ZXMgaW50ZXJuYXMgZGEgYmlibGlvdGVjYVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsb2FkTGlicmFyeVRyYW5zbGF0aW9ucyhsYW5ndWFnZTogU3VwcG9ydGVkTGFuZ3VhZ2UpOiBQcm9taXNlPGFueT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gTElCUkFSWV9UUkFOU0xBVElPTlNbbGFuZ3VhZ2VdIHx8IHt9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oYE5vIGxpYnJhcnkgdHJhbnNsYXRpb25zIGZvdW5kIGZvciAke2xhbmd1YWdlfWApO1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZFN0b3JlZExhbmd1YWdlKCk6IHZvaWQge1xuICAgIC8vIDEuIFByaW1laXJvLCB0ZW50YXIgb2J0ZXIgZG8gdG9rZW4gU2VuaW9yXG4gICAgY29uc3QgdG9rZW5Mb2NhbGUgPSB0aGlzLnNlbmlvclRva2VuU2VydmljZS5nZXRVc2VyTG9jYWxlKCk7XG4gICAgaWYgKHRva2VuTG9jYWxlKSB7XG4gICAgICBjb25zdCBtYXBwZWRMYW5ndWFnZSA9IG1hcFRva2VuTG9jYWxlVG9MYW5ndWFnZSh0b2tlbkxvY2FsZSk7XG4gICAgICBpZiAobWFwcGVkTGFuZ3VhZ2UpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFVzaW5nIGxhbmd1YWdlIGZyb20gU2VuaW9yIHRva2VuOiAke3Rva2VuTG9jYWxlfSAtPiAke21hcHBlZExhbmd1YWdlfWApO1xuICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZS5uZXh0KG1hcHBlZExhbmd1YWdlIGFzIFN1cHBvcnRlZExhbmd1YWdlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDIuIFNlZ3VuZG8sIHRlbnRhciBvYnRlciBkbyBsb2NhbFN0b3JhZ2VcbiAgICBjb25zdCBzdG9yZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShUUkFOU0xBVElPTl9DT05GSUcuc3RvcmFnZUtleSkgYXMgU3VwcG9ydGVkTGFuZ3VhZ2U7XG4gICAgY29uc3Qgc3VwcG9ydGVkQ29kZXMgPSBUUkFOU0xBVElPTl9DT05GSUcuc3VwcG9ydGVkTGFuZ3VhZ2VzLm1hcChsYW5nID0+IGxhbmcuY29kZSk7XG4gICAgaWYgKHN0b3JlZCAmJiBzdXBwb3J0ZWRDb2Rlcy5pbmNsdWRlcyhzdG9yZWQpKSB7XG4gICAgICBjb25zb2xlLmxvZygnVXNpbmcgbGFuZ3VhZ2UgZnJvbSBsb2NhbFN0b3JhZ2U6Jywgc3RvcmVkKTtcbiAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlLm5leHQoc3RvcmVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyAzLiBQb3Igw7psdGltbywgdXNhciBpZGlvbWEgcGFkcsOjb1xuICAgIGNvbnNvbGUubG9nKCdVc2luZyBkZWZhdWx0IGxhbmd1YWdlOicsIFRSQU5TTEFUSU9OX0NPTkZJRy5kZWZhdWx0TGFuZ3VhZ2UpO1xuICAgIHRoaXMuY3VycmVudExhbmd1YWdlLm5leHQoVFJBTlNMQVRJT05fQ09ORklHLmRlZmF1bHRMYW5ndWFnZSBhcyBTdXBwb3J0ZWRMYW5ndWFnZSk7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VQYXJhbXModGV4dDogc3RyaW5nLCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBzdHJpbmcge1xuICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoL1xce1xceyhcXHcrKVxcfVxcfS9nLCAobWF0Y2gsIGtleSkgPT4ge1xuICAgICAgcmV0dXJuIHBhcmFtc1trZXldICE9PSB1bmRlZmluZWQgPyBwYXJhbXNba2V5XSA6IG1hdGNoO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0U3VwcG9ydGVkTGFuZ3VhZ2VzKCk6IExhbmd1YWdlQ29uZmlnW10ge1xuICAgIHJldHVybiBUUkFOU0xBVElPTl9DT05GSUcuc3VwcG9ydGVkTGFuZ3VhZ2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcsOnYSBvIHJlY2FycmVnYW1lbnRvIGRhcyB0cmFkdcOnw7VlcyAow7p0aWwgcGFyYSBkZXNlbnZvbHZpbWVudG8pXG4gICAqL1xuICBhc3luYyByZWxvYWRUcmFuc2xhdGlvbnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLmN1cnJlbnRMYW5ndWFnZS52YWx1ZTtcbiAgICBkZWxldGUgdGhpcy50cmFuc2xhdGlvbnNbbGFuZ3VhZ2VdO1xuICAgIGF3YWl0IHRoaXMubG9hZFRyYW5zbGF0aW9ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idMOpbSB0b2RhcyBhcyBjaGF2ZXMgZGUgdHJhZHXDp8OjbyBjYXJyZWdhZGFzXG4gICAqL1xuICBnZXRMb2FkZWRLZXlzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuY3VycmVudExhbmd1YWdlLnZhbHVlO1xuICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IHRoaXMudHJhbnNsYXRpb25zW2xhbmd1YWdlXTtcbiAgICByZXR1cm4gdHJhbnNsYXRpb25zID8gT2JqZWN0LmtleXModHJhbnNsYXRpb25zKSA6IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNlIHVtIGPDs2RpZ28gZGUgaWRpb21hIMOpIHN1cG9ydGFkb1xuICAgKi9cbiAgcHJpdmF0ZSBpc1ZhbGlkTGFuZ3VhZ2UobG9jYWxlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdXBwb3J0ZWRDb2RlcyA9IFRSQU5TTEFUSU9OX0NPTkZJRy5zdXBwb3J0ZWRMYW5ndWFnZXMubWFwKGxhbmcgPT4gbGFuZy5jb2RlKTtcbiAgICByZXR1cm4gc3VwcG9ydGVkQ29kZXMuaW5jbHVkZXMobG9jYWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb25pdG9yYSBtdWRhbsOnYXMgbm8gdG9rZW4gU2VuaW9yIHBhcmEgYXR1YWxpemFyIGlkaW9tYSBhdXRvbWF0aWNhbWVudGVcbiAgICovXG4gIHByaXZhdGUgd2F0Y2hUb2tlbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5zZW5pb3JUb2tlblNlcnZpY2Uud2F0Y2hUb2tlbkNoYW5nZXMoKHRva2VuRGF0YSkgPT4ge1xuICAgICAgaWYgKHRva2VuRGF0YT8ubG9jYWxlKSB7XG4gICAgICAgIGNvbnN0IG1hcHBlZExhbmd1YWdlID0gbWFwVG9rZW5Mb2NhbGVUb0xhbmd1YWdlKHRva2VuRGF0YS5sb2NhbGUpO1xuICAgICAgICBpZiAobWFwcGVkTGFuZ3VhZ2UpIHtcbiAgICAgICAgICBjb25zdCBuZXdMb2NhbGUgPSBtYXBwZWRMYW5ndWFnZSBhcyBTdXBwb3J0ZWRMYW5ndWFnZTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50TG9jYWxlID0gdGhpcy5jdXJyZW50TGFuZ3VhZ2UudmFsdWU7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKG5ld0xvY2FsZSAhPT0gY3VycmVudExvY2FsZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFRva2VuIGxvY2FsZSBjaGFuZ2VkOiAke3Rva2VuRGF0YS5sb2NhbGV9IC0+ICR7bmV3TG9jYWxlfWApO1xuICAgICAgICAgICAgdGhpcy5zZXRMYW5ndWFnZShuZXdMb2NhbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcsOnYSBhdHVhbGl6YcOnw6NvIGRvIGlkaW9tYSBiYXNlYWRvIG5vIHRva2VuIGF0dWFsXG4gICAqL1xuICBhc3luYyBzeW5jV2l0aFRva2VuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRva2VuTG9jYWxlID0gdGhpcy5zZW5pb3JUb2tlblNlcnZpY2UuZ2V0VXNlckxvY2FsZSgpO1xuICAgIGlmICh0b2tlbkxvY2FsZSkge1xuICAgICAgY29uc3QgbWFwcGVkTGFuZ3VhZ2UgPSBtYXBUb2tlbkxvY2FsZVRvTGFuZ3VhZ2UodG9rZW5Mb2NhbGUpO1xuICAgICAgaWYgKG1hcHBlZExhbmd1YWdlKSB7XG4gICAgICAgIGNvbnN0IG5ld0xvY2FsZSA9IG1hcHBlZExhbmd1YWdlIGFzIFN1cHBvcnRlZExhbmd1YWdlO1xuICAgICAgICBjb25zdCBjdXJyZW50TG9jYWxlID0gdGhpcy5jdXJyZW50TGFuZ3VhZ2UudmFsdWU7XG4gICAgICAgIFxuICAgICAgICBpZiAobmV3TG9jYWxlICE9PSBjdXJyZW50TG9jYWxlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYFN5bmNpbmcgbGFuZ3VhZ2Ugd2l0aCB0b2tlbjogJHt0b2tlbkxvY2FsZX0gLT4gJHtuZXdMb2NhbGV9YCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zZXRMYW5ndWFnZShuZXdMb2NhbGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1054,6 +1054,144 @@ function getLanguageInfo(code) {
1054
1054
  return SUPPORTED_LANGUAGES.find(lang => lang.code === code) || null;
1055
1055
  }
1056
1056
 
1057
+ var translationsPtBR = {
1058
+ "design.components_ai.bulk_delete_title": "Exclusão em Massa",
1059
+ "design.components_ai.bulk_delete_warning": "Você está prestes a excluir <strong>{{count}}</strong> registro(s).",
1060
+ "design.components_ai.bulk_delete_description": "Esta ação não pode ser desfeita. Os registros serão excluídos um por vez.",
1061
+ "design.components_ai.bulk_delete_progress": "Progresso",
1062
+ "design.components_ai.bulk_delete_success_count": "sucesso",
1063
+ "design.components_ai.bulk_delete_error_count": "erro(s)",
1064
+ "design.components_ai.bulk_delete_code_label": "Código",
1065
+ "design.components_ai.bulk_delete_success_message": "Todos os registros foram excluídos com sucesso!",
1066
+ "design.components_ai.bulk_delete_completed_with_errors": "Processo concluído com {{count}} erro(s).",
1067
+ "design.components_ai.bulk_delete_status_pending": "Pendente",
1068
+ "design.components_ai.bulk_delete_status_processing": "Processando...",
1069
+ "design.components_ai.bulk_delete_status_success": "Excluído",
1070
+ "design.components_ai.bulk_delete_status_error": "Erro",
1071
+ "design.components_ai.bulk_delete_error_generic": "Erro ao excluir",
1072
+ "design.components_ai.bulk_delete_confirm": "Confirmar Exclusão",
1073
+ "design.components_ai.export_data_title": "Exportar Dados",
1074
+ "design.components_ai.export_format_title": "Formato de Exportação",
1075
+ "design.components_ai.export_scope_title": "Registros a Exportar",
1076
+ "design.components_ai.export_columns_title": "Colunas a Exportar",
1077
+ "design.components_ai.export_excel_description": "Planilha editável com formatação",
1078
+ "design.components_ai.export_pdf_description": "Documento portátil para impressão",
1079
+ "design.components_ai.export_all_records": "Todos os registros",
1080
+ "design.components_ai.export_all_records_description": "Exportar todos os registros da tabela",
1081
+ "design.components_ai.export_selected_records": "Registros selecionados",
1082
+ "design.components_ai.export_selected_records_description": "Exportar apenas os registros marcados",
1083
+ "design.components_ai.export_records_count": "registro(s)",
1084
+ "design.components_ai.export_select_all_columns": "Selecionar todas",
1085
+ "design.components_ai.export_clear_selection": "Limpar seleção",
1086
+ "design.components_ai.export_columns_summary": "de",
1087
+ "design.components_ai.export_columns_selected": "coluna(s) selecionada(s)",
1088
+ "design.components_ai.export_data_sheet_name": "Dados",
1089
+ "design.components_ai.export_pdf_title": "Exportação de Dados",
1090
+ "design.components_ai.export_exported_at": "Exportado em",
1091
+ "design.components_ai.export_total_records": "Total de registros",
1092
+ "design.components_ai.breadcrumb_home": "Início",
1093
+ "design.components_ai.components.form": "Formulário",
1094
+ "design.components_ai.components.save": "Salvar",
1095
+ "design.components_ai.components.cancel": "Cancelar",
1096
+ "design.components_ai.cancel": "Cancelar",
1097
+ "design.components_ai.close": "Fechar",
1098
+ "design.components_ai.export": "Exportar"
1099
+ };
1100
+
1101
+ var translationsEnUS = {
1102
+ "design.components_ai.bulk_delete_title": "Bulk Delete",
1103
+ "design.components_ai.bulk_delete_warning": "You are about to delete <strong>{{count}}</strong> record(s).",
1104
+ "design.components_ai.bulk_delete_description": "This action cannot be undone. Records will be deleted one by one.",
1105
+ "design.components_ai.bulk_delete_progress": "Progress",
1106
+ "design.components_ai.bulk_delete_success_count": "success",
1107
+ "design.components_ai.bulk_delete_error_count": "error(s)",
1108
+ "design.components_ai.bulk_delete_code_label": "Code",
1109
+ "design.components_ai.bulk_delete_success_message": "All records were deleted successfully!",
1110
+ "design.components_ai.bulk_delete_completed_with_errors": "Process completed with {{count}} error(s).",
1111
+ "design.components_ai.bulk_delete_status_pending": "Pending",
1112
+ "design.components_ai.bulk_delete_status_processing": "Processing...",
1113
+ "design.components_ai.bulk_delete_status_success": "Deleted",
1114
+ "design.components_ai.bulk_delete_status_error": "Error",
1115
+ "design.components_ai.bulk_delete_error_generic": "Error deleting",
1116
+ "design.components_ai.bulk_delete_confirm": "Confirm Deletion",
1117
+ "design.components_ai.export_data_title": "Export Data",
1118
+ "design.components_ai.export_format_title": "Export Format",
1119
+ "design.components_ai.export_scope_title": "Records to Export",
1120
+ "design.components_ai.export_columns_title": "Columns to Export",
1121
+ "design.components_ai.export_excel_description": "Editable spreadsheet with formatting",
1122
+ "design.components_ai.export_pdf_description": "Portable document for printing",
1123
+ "design.components_ai.export_all_records": "All records",
1124
+ "design.components_ai.export_all_records_description": "Export all table records",
1125
+ "design.components_ai.export_selected_records": "Selected records",
1126
+ "design.components_ai.export_selected_records_description": "Export only marked records",
1127
+ "design.components_ai.export_records_count": "record(s)",
1128
+ "design.components_ai.export_select_all_columns": "Select all",
1129
+ "design.components_ai.export_clear_selection": "Clear selection",
1130
+ "design.components_ai.export_columns_summary": "of",
1131
+ "design.components_ai.export_columns_selected": "column(s) selected",
1132
+ "design.components_ai.export_data_sheet_name": "Data",
1133
+ "design.components_ai.export_pdf_title": "Data Export",
1134
+ "design.components_ai.export_exported_at": "Exported at",
1135
+ "design.components_ai.export_total_records": "Total records",
1136
+ "design.components_ai.breadcrumb_home": "Home",
1137
+ "design.components_ai.components.form": "Form",
1138
+ "design.components_ai.components.save": "Save",
1139
+ "design.components_ai.components.cancel": "Cancel",
1140
+ "design.components_ai.cancel": "Cancel",
1141
+ "design.components_ai.close": "Close",
1142
+ "design.components_ai.export": "Export"
1143
+ };
1144
+
1145
+ var translationsEsES = {
1146
+ "design.components_ai.bulk_delete_title": "Eliminación Masiva",
1147
+ "design.components_ai.bulk_delete_warning": "Está a punto de eliminar <strong>{{count}}</strong> registro(s).",
1148
+ "design.components_ai.bulk_delete_description": "Esta acción no se puede deshacer. Los registros se eliminarán uno por uno.",
1149
+ "design.components_ai.bulk_delete_progress": "Progreso",
1150
+ "design.components_ai.bulk_delete_success_count": "éxito",
1151
+ "design.components_ai.bulk_delete_error_count": "error(es)",
1152
+ "design.components_ai.bulk_delete_code_label": "Código",
1153
+ "design.components_ai.bulk_delete_success_message": "¡Todos los registros fueron eliminados con éxito!",
1154
+ "design.components_ai.bulk_delete_completed_with_errors": "Proceso completado con {{count}} error(es).",
1155
+ "design.components_ai.bulk_delete_status_pending": "Pendiente",
1156
+ "design.components_ai.bulk_delete_status_processing": "Procesando...",
1157
+ "design.components_ai.bulk_delete_status_success": "Eliminado",
1158
+ "design.components_ai.bulk_delete_status_error": "Error",
1159
+ "design.components_ai.bulk_delete_error_generic": "Error al eliminar",
1160
+ "design.components_ai.bulk_delete_confirm": "Confirmar Eliminación",
1161
+ "design.components_ai.export_data_title": "Exportar Datos",
1162
+ "design.components_ai.export_format_title": "Formato de Exportación",
1163
+ "design.components_ai.export_scope_title": "Registros a Exportar",
1164
+ "design.components_ai.export_columns_title": "Columnas a Exportar",
1165
+ "design.components_ai.export_excel_description": "Hoja de cálculo editable con formato",
1166
+ "design.components_ai.export_pdf_description": "Documento portátil para impresión",
1167
+ "design.components_ai.export_all_records": "Todos los registros",
1168
+ "design.components_ai.export_all_records_description": "Exportar todos los registros de la tabla",
1169
+ "design.components_ai.export_selected_records": "Registros seleccionados",
1170
+ "design.components_ai.export_selected_records_description": "Exportar solo los registros marcados",
1171
+ "design.components_ai.export_records_count": "registro(s)",
1172
+ "design.components_ai.export_select_all_columns": "Seleccionar todas",
1173
+ "design.components_ai.export_clear_selection": "Limpiar selección",
1174
+ "design.components_ai.export_columns_summary": "de",
1175
+ "design.components_ai.export_columns_selected": "columna(s) seleccionada(s)",
1176
+ "design.components_ai.export_data_sheet_name": "Datos",
1177
+ "design.components_ai.export_pdf_title": "Exportación de Datos",
1178
+ "design.components_ai.export_exported_at": "Exportado en",
1179
+ "design.components_ai.export_total_records": "Total de registros",
1180
+ "design.components_ai.breadcrumb_home": "Inicio",
1181
+ "design.components_ai.components.form": "Formulario",
1182
+ "design.components_ai.components.save": "Guardar",
1183
+ "design.components_ai.components.cancel": "Cancelar",
1184
+ "design.components_ai.cancel": "Cancelar",
1185
+ "design.components_ai.close": "Cerrar",
1186
+ "design.components_ai.export": "Exportar"
1187
+ };
1188
+
1189
+ // Mapa de traduções internas da biblioteca
1190
+ const LIBRARY_TRANSLATIONS = {
1191
+ 'pt-BR': translationsPtBR,
1192
+ 'en-US': translationsEnUS,
1193
+ 'es-ES': translationsEsES
1194
+ };
1057
1195
  class TranslationService {
1058
1196
  seniorTokenService;
1059
1197
  currentLanguage;
@@ -1213,8 +1351,7 @@ class TranslationService {
1213
1351
  */
1214
1352
  async loadLibraryTranslations(language) {
1215
1353
  try {
1216
- const translations = await import(`../i18n/${language}.json`);
1217
- return translations.default || translations;
1354
+ return LIBRARY_TRANSLATIONS[language] || {};
1218
1355
  }
1219
1356
  catch (error) {
1220
1357
  console.warn(`No library translations found for ${language}`);