@soyfri/shared-library 4.0.2 → 4.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/{Autocomplete-Bd3bN4Cw.cjs → Autocomplete-Baqwboth.cjs} +59 -38
  2. package/Autocomplete-Baqwboth.cjs.map +1 -0
  3. package/{Autocomplete-E5aSUGVK.js → Autocomplete-Cvf16lFk.js} +59 -38
  4. package/Autocomplete-Cvf16lFk.js.map +1 -0
  5. package/{DatePicker-D__RSgs-.js → DatePicker-D5BH4v1p.js} +3 -2
  6. package/{DatePicker-D__RSgs-.js.map → DatePicker-D5BH4v1p.js.map} +1 -1
  7. package/{DatePicker-CMcQddi1.cjs → DatePicker-mz7CYtVw.cjs} +3 -2
  8. package/{DatePicker-CMcQddi1.cjs.map → DatePicker-mz7CYtVw.cjs.map} +1 -1
  9. package/{DateTimePicker-LeaE716a.js → DateTimePicker-ZCf0Wh4r.js} +6 -2
  10. package/DateTimePicker-ZCf0Wh4r.js.map +1 -0
  11. package/{DateTimePicker-BVJGq1A0.cjs → DateTimePicker-ejQDpjgX.cjs} +6 -2
  12. package/DateTimePicker-ejQDpjgX.cjs.map +1 -0
  13. package/{Input-BibHlnGN.js → Input-CmvuMwXZ.js} +3 -2
  14. package/{Input-BibHlnGN.js.map → Input-CmvuMwXZ.js.map} +1 -1
  15. package/{Input-Bpjw7qwq.cjs → Input-hnQ7g6b7.cjs} +3 -2
  16. package/{Input-Bpjw7qwq.cjs.map → Input-hnQ7g6b7.cjs.map} +1 -1
  17. package/{Select-BIUq3ZPy.js → Select-CZ0BiKVN.js} +3 -2
  18. package/{Select-BIUq3ZPy.js.map → Select-CZ0BiKVN.js.map} +1 -1
  19. package/{Select-C06gHRqZ.cjs → Select-ZhFf4SBp.cjs} +3 -2
  20. package/{Select-C06gHRqZ.cjs.map → Select-ZhFf4SBp.cjs.map} +1 -1
  21. package/{StatusMessage-B3nXpuRl.cjs → StatusMessageContext-BMsbLKRq.cjs} +19 -1
  22. package/StatusMessageContext-BMsbLKRq.cjs.map +1 -0
  23. package/{StatusMessage-D0WgSBx7.js → StatusMessageContext-DgYiObYE.js} +21 -3
  24. package/StatusMessageContext-DgYiObYE.js.map +1 -0
  25. package/components/Autocomplete/Autocomplete.cjs +1 -1
  26. package/components/Autocomplete/Autocomplete.d.ts +30 -13
  27. package/components/Autocomplete/Autocomplete.helpers.d.ts +4 -4
  28. package/components/Autocomplete/Autocomplete.js +1 -1
  29. package/components/Autocomplete/_parts/AutocompleteChips.d.ts +7 -6
  30. package/components/Autocomplete/_parts/AutocompleteOption.d.ts +5 -5
  31. package/components/Autocomplete/index.d.ts +1 -1
  32. package/components/DatePicker/DatePicker.cjs +1 -1
  33. package/components/DatePicker/DatePicker.js +1 -1
  34. package/components/DateTimePicker/DateTimePicker.cjs +1 -1
  35. package/components/DateTimePicker/DateTimePicker.d.ts +9 -0
  36. package/components/DateTimePicker/DateTimePicker.js +1 -1
  37. package/components/Input/Input.cjs +1 -1
  38. package/components/Input/Input.js +1 -1
  39. package/components/Select/Select.cjs +1 -1
  40. package/components/Select/Select.js +1 -1
  41. package/components/StatusMessage/StatusMessage.cjs +5 -3
  42. package/components/StatusMessage/StatusMessage.cjs.map +1 -1
  43. package/components/StatusMessage/StatusMessage.js +4 -2
  44. package/components/StatusMessage/index.d.ts +2 -0
  45. package/components/_shared/resolvePreset.d.ts +9 -5
  46. package/index.cjs +25 -9
  47. package/index.cjs.map +1 -1
  48. package/index.d.ts +4 -4
  49. package/index.js +13 -9
  50. package/mui.d.ts +1 -1
  51. package/package.json +2 -3
  52. package/resolvePreset-CxTI6_Ln.cjs.map +1 -1
  53. package/resolvePreset-K6_BfWHD.js.map +1 -1
  54. package/Autocomplete-Bd3bN4Cw.cjs.map +0 -1
  55. package/Autocomplete-E5aSUGVK.js.map +0 -1
  56. package/DateTimePicker-BVJGq1A0.cjs.map +0 -1
  57. package/DateTimePicker-LeaE716a.js.map +0 -1
  58. package/README.md +0 -251
  59. package/StatusMessage-B3nXpuRl.cjs.map +0 -1
  60. package/StatusMessage-D0WgSBx7.js.map +0 -1
  61. package/local/affiliations/affiliations.dev.soyfri.com-key.pem +0 -28
  62. package/local/affiliations/affiliations.dev.soyfri.com.pem +0 -27
  63. package/local/aficiliaciones/afiliaciones.dev.soyfri.com-key.pem +0 -28
  64. package/local/aficiliaciones/afiliaciones.dev.soyfri.com.pem +0 -27
  65. package/local/afiliaciones/afiliaciones.dev.soyfri.com-key.pem +0 -28
  66. package/local/afiliaciones/afiliaciones.dev.soyfri.com.pem +0 -27
  67. package/local/root/rootCA-key.pem +0 -40
  68. package/local/root/rootCA.pem +0 -30
  69. package/local/soporte/supportweb.dev.soyfri.com-key.pem +0 -28
  70. package/local/soporte/supportweb.dev.soyfri.com.pem +0 -27
  71. package/local/support/supportweb.dev.soyfri.com-key.pem +0 -28
  72. package/local/support/supportweb.dev.soyfri.com.pem +0 -27
@@ -1 +0,0 @@
1
- {"version":3,"file":"DateTimePicker-LeaE716a.js","sources":["../src/components/DateTimePicker/DateTimePicker.sx.ts","../src/components/DateTimePicker/DateTimePicker.helpers.ts","../src/components/DateTimePicker/DateTimePicker.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material';\n\nimport { buildFormFieldSx } from '../_shared/formField.sx';\nimport type { LabelPosition } from './DateTimePicker';\n\n/**\n * Builder de sx para el DateTimePicker. Mismo patrón que DatePicker.\n * Usa `includePickersApi: true` para soportar la API nueva de MUI X v8.\n */\nexport const buildDateTimePickerSx = (\n borderRadius: number | string,\n labelPosition: LabelPosition,\n): SxProps<Theme> =>\n buildFormFieldSx({\n borderRadius,\n labelPosition,\n includePickersApi: true,\n });\n","import type { DateTimeValidationError } from '@mui/x-date-pickers/models';\n\n/**\n * Traduce el error del DateTimePicker a un mensaje en español. Se usa\n * internamente para poblar `helperText` cuando hay error de validación.\n * Cubre tanto errores de fecha (`minDate`, `maxDate`, etc.) como de hora\n * (`minTime`, `maxTime`, `minutesStep`, etc.).\n */\nexport const getDateTimeValidationMessage = (\n error: DateTimeValidationError | null,\n): string => {\n switch (error) {\n case 'minDate':\n case 'maxDate':\n case 'minTime':\n case 'maxTime':\n return 'Fecha/hora fuera del rango permitido';\n case 'invalidDate':\n return 'Formato de fecha/hora inválido';\n case 'disableFuture':\n return 'No se permiten fechas/horas futuras';\n case 'disablePast':\n return 'No se permiten fechas/horas pasadas';\n case 'minutesStep':\n return 'Minutos no válidos para el paso configurado';\n default:\n return '';\n }\n};\n\n/**\n * Construye el `localeText` que MUI acepta para overridear los labels de los\n * botones del popover (Cancel / OK / Clear).\n */\nexport const buildLocaleText = (\n clearButtonText?: string,\n cancelButtonText?: string,\n acceptButtonText?: string,\n): Record<string, string> => {\n const text: Record<string, string> = {};\n if (clearButtonText) text.clearButtonLabel = clearButtonText;\n if (cancelButtonText) text.cancelButtonLabel = cancelButtonText;\n if (acceptButtonText) text.okButtonLabel = acceptButtonText;\n return text;\n};\n","import React, { useMemo } from 'react';\nimport type { SxProps, Theme } from '@mui/material';\nimport { useTheme } from '@mui/material/styles';\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\nimport {\n DateTimePicker as MuiDateTimePicker,\n type DateTimePickerProps as MuiDateTimePickerProps,\n} from '@mui/x-date-pickers/DateTimePicker';\nimport type { DateTimeValidationError } from '@mui/x-date-pickers/models';\nimport { esES } from '@mui/x-date-pickers/locales';\nimport { Dayjs } from 'dayjs';\nimport { Controller, type Control, type RegisterOptions } from 'react-hook-form';\n\nimport { buildDateTimePickerSx } from './DateTimePicker.sx';\nimport {\n buildLocaleText,\n getDateTimeValidationMessage,\n} from './DateTimePicker.helpers';\nimport { resolvePreset } from '../_shared/resolvePreset';\nimport { FIELD_BORDER_RADIUS } from '../../theme/tokens';\n\n// ── Tipos de dominio ─────────────────────────────────────────────────────\nexport type LabelPosition = 'outside' | 'floating';\nexport type DateTimePickerSize = 'small' | 'medium';\n\n// ── Props base ───────────────────────────────────────────────────────────\nexport interface BaseDateTimePickerProps\n extends Omit<MuiDateTimePickerProps, 'value' | 'onChange' | 'slotProps' | 'format'> {\n label?: string;\n minDateTime?: Dayjs;\n maxDateTime?: Dayjs;\n disabled?: boolean;\n readOnly?: boolean;\n /** Formato de la fecha/hora. Default: 'DD/MM/YYYY HH:mm'. */\n inputFormat?: string;\n /** Border radius del input. Default: 10. */\n borderRadius?: number | string;\n /** \"outside\" (default) o \"floating\". */\n labelPosition?: LabelPosition;\n /** Tamaño del TextField. Default: 'small'. */\n size?: DateTimePickerSize;\n helperText?: string;\n error?: boolean;\n sx?: SxProps<Theme>;\n className?: string;\n /**\n * Nombre del preset de estilo registrado en `theme.styles.DateTimePicker`.\n * - `\"default\"` (o ausente) = estilo built-in del paquete.\n * - Cualquier otro string = mergea el preset encima del estilo built-in.\n */\n preset?: string;\n /** Locale del adaptador dayjs. */\n adapterLocale?: string;\n /** Textos de los botones del popover. */\n clearButtonText?: string;\n cancelButtonText?: string;\n acceptButtonText?: string;\n minutesStep?: number;\n minTime?: Dayjs;\n /** Si es true usa formato 12h (AM/PM), false = 24h. Default: false. */\n ampm?: boolean;\n viewRenderers?: MuiDateTimePickerProps['viewRenderers'];\n timeSteps?: MuiDateTimePickerProps['timeSteps'];\n textFieldProps?: Record<string, any>;\n /** Passthrough completo a slotProps del MuiDateTimePicker. */\n slotProps?: MuiDateTimePickerProps['slotProps'];\n}\n\n// ── Variantes discriminadas (RHF vs controlado) ──────────────────────────\nexport interface RHFDateTimePickerProps extends BaseDateTimePickerProps {\n name: string;\n // `any` plano (no `Control<any>`): RHF tipa `Control<T>` con generics en\n // posiciones tanto contravariantes como covariantes (ej. `_subjects.state`).\n // Cuando el componente o su uso involucra generics adicionales, TS se\n // confunde narroweando el discriminated union y `Control<any>` no logra\n // absorber `Control<MyForm>` en la comparación estructural profunda. El\n // `any` plano elimina ese ruido. RHF adentro sigue teniendo sus tipos\n // fuertes — solo degradamos la superficie del prop del componente.\n control: any;\n validation?: RegisterOptions;\n /**\n * Side-effect que corre después de que RHF actualiza el form state.\n * Útil para cascadas entre campos. NO reemplaza al handler de RHF.\n */\n onValueChange?: (dateTime: Dayjs | null) => void;\n selectedDateTime?: never;\n onDateTimeChange?: never;\n}\n\nexport interface ControlledDateTimePickerProps extends BaseDateTimePickerProps {\n name?: string;\n control?: never;\n validation?: never;\n selectedDateTime: Dayjs | null;\n onDateTimeChange: (dateTime: Dayjs | null) => void;\n}\n\n// ── API pública final ────────────────────────────────────────────────────\nexport type DateTimePickerProps =\n | RHFDateTimePickerProps\n | ControlledDateTimePickerProps;\n\nexport const DateTimePicker: React.FC<DateTimePickerProps> = (props) => {\n const {\n label,\n minDateTime,\n maxDateTime,\n disabled,\n readOnly,\n inputFormat,\n borderRadius = FIELD_BORDER_RADIUS,\n labelPosition = 'outside',\n size = 'small',\n helperText,\n error: errorProp,\n sx,\n className,\n preset,\n adapterLocale,\n clearButtonText,\n cancelButtonText,\n acceptButtonText,\n minutesStep,\n minTime,\n ampm = false,\n viewRenderers,\n timeSteps,\n textFieldProps,\n slotProps: slotPropsProp,\n ...rest\n } = props as ControlledDateTimePickerProps & {\n control?: Control<any>;\n validation?: RegisterOptions;\n };\n\n const [validationError, setValidationError] = React.useState<DateTimeValidationError | null>(null);\n\n const validationErrorMessage = useMemo(\n () => getDateTimeValidationMessage(validationError),\n [validationError],\n );\n\n const customLocaleText = useMemo(\n () => buildLocaleText(clearButtonText, cancelButtonText, acceptButtonText),\n [clearButtonText, cancelButtonText, acceptButtonText],\n );\n\n const theme = useTheme();\n const presetSx = resolvePreset('DateTimePicker', preset, theme);\n\n const mergedSx = [\n ...(presetSx ? [presetSx] : [buildDateTimePickerSx(borderRadius, labelPosition)]),\n ...(Array.isArray(sx) ? sx : sx ? [sx] : []),\n ];\n\n const renderPicker = (\n value: Dayjs | null,\n onChange: (date: Dayjs | null) => void,\n onBlur?: () => void,\n inputRef?: React.Ref<any>,\n rhfError?: boolean,\n rhfHelperText?: string,\n ) => {\n const finalError = rhfError || !!validationErrorMessage || !!errorProp;\n const finalHelperText = rhfHelperText || validationErrorMessage || helperText;\n\n return (\n <LocalizationProvider\n dateAdapter={AdapterDayjs}\n adapterLocale={adapterLocale}\n localeText={esES.components.MuiLocalizationProvider.defaultProps.localeText}\n >\n <MuiDateTimePicker\n className={className}\n label={label}\n value={value}\n onChange={onChange}\n onError={setValidationError}\n minDateTime={minDateTime}\n maxDateTime={maxDateTime}\n minutesStep={minutesStep}\n disabled={disabled}\n readOnly={readOnly}\n minTime={minTime}\n format={inputFormat ?? 'DD/MM/YYYY HH:mm'}\n ampm={ampm}\n viewRenderers={viewRenderers}\n timeSteps={timeSteps}\n sx={mergedSx}\n slotProps={{\n ...slotPropsProp,\n textField: {\n fullWidth: true,\n size,\n variant: 'outlined',\n // Consumer overrides visuales / de comportamiento opcionales.\n ...(slotPropsProp?.textField as Record<string, any> | undefined),\n ...textFieldProps,\n // Props críticas al final: ganan al consumer para no romper la\n // integración con RHF ni desactivar el visual de error.\n onBlur,\n inputRef,\n error: !!finalError,\n helperText: finalHelperText,\n } as any,\n }}\n localeText={customLocaleText}\n {...rest}\n />\n </LocalizationProvider>\n );\n };\n\n if ('control' in props && props.control) {\n const { name, control, validation, onValueChange } = props as RHFDateTimePickerProps;\n return (\n <Controller\n name={name}\n control={control}\n rules={validation}\n render={({ field, fieldState: { error: fieldError } }) =>\n renderPicker(\n field.value ?? null,\n (next) => {\n field.onChange(next);\n onValueChange?.(next);\n },\n field.onBlur,\n field.ref,\n !!fieldError,\n fieldError?.message,\n )\n }\n />\n );\n }\n\n const { selectedDateTime, onDateTimeChange } = props as ControlledDateTimePickerProps;\n return renderPicker(selectedDateTime, onDateTimeChange);\n};\n\nexport default DateTimePicker;\n"],"names":["React","MuiDateTimePicker","_a"],"mappings":"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"}
package/README.md DELETED
@@ -1,251 +0,0 @@
1
- # @soyfri/shared-library
2
-
3
- Librería de componentes React de FRI, construida sobre **Material UI v7** + TypeScript. Provee componentes UI consistentes y tipados para los frontends del ecosistema (`soporte`, `afiliaciones`, …).
4
-
5
- ## Instalación
6
-
7
- ```bash
8
- npm install @soyfri/shared-library
9
- ```
10
-
11
- ### Peer dependencies
12
-
13
- El consumidor debe tener instaladas (la librería no las empaqueta):
14
-
15
- ```
16
- react >=18 react-dom >=18 react-hook-form ^7
17
- @mui/material ^7 @mui/icons-material ^7 @mui/x-date-pickers ^8 @mui/lab ^7
18
- @emotion/react ^11 @emotion/styled ^11 dayjs ^1
19
- ```
20
-
21
- ## Setup
22
-
23
- 1. Envuelve la app en el `ThemeProvider` de MUI (los componentes leen el theme del contexto).
24
- 2. Importa los estilos una vez. El barrel los importa solo; si **solo** usas subpaths, impórtalos manualmente:
25
-
26
- ```tsx
27
- import '@soyfri/shared-library/styles.css'
28
- ```
29
-
30
- ## Dos formas de importar
31
-
32
- ```tsx
33
- // 1) Subpath por componente (recomendado — tree-shaking, lo que usan los proyectos)
34
- import { Button } from '@soyfri/shared-library/components/Button'
35
- import { Table } from '@soyfri/shared-library/components/Table'
36
-
37
- // 2) Barrel raíz (importa styles.css automáticamente)
38
- import { Button, Table, Select } from '@soyfri/shared-library'
39
- ```
40
-
41
- > Cada componente se publica como subpath `@soyfri/shared-library/components/<Nombre>`.
42
-
43
- ---
44
-
45
- ## Componentes
46
-
47
- Uso mínimo de cada componente. Todos aceptan `sx` y son tipados.
48
-
49
- ### Formularios e inputs
50
-
51
- **Button** — `variant` (`text`/`outlined`/`contained`), `color`, `size`, `loading`, `startIcon`/`endIcon`.
52
- ```tsx
53
- <Button variant="contained" color="primary" onClick={fn}>Guardar</Button>
54
- ```
55
-
56
- **Input** — campo de texto. Modo controlado (`value`/`onChange`) o RHF (`name`/`control`).
57
- ```tsx
58
- <Input label="Nombre" value={v} onChange={setV} />
59
- <Input label="Correo" type="email" name="email" control={control} />
60
- ```
61
-
62
- **InputGroup** — agrupa inputs/botones adyacentes con bordes unificados.
63
- ```tsx
64
- <InputGroup><Input label="Buscar" value={q} onChange={setQ} /><Button>Ir</Button></InputGroup>
65
- ```
66
-
67
- **Select** + **Option** — single, múltiple y filtrable. Modo controlado o RHF.
68
- ```tsx
69
- <Select label="País" value={v} onChange={setV} options={[{value:'gt',label:'Guatemala'}]} />
70
- <Select label="Tags" multiple value={vals} onChange={setVals} options={opts} filterable />
71
- ```
72
-
73
- **Autocomplete** — búsqueda con `options` (`{value,label,img?}`), `multiple`.
74
- ```tsx
75
- <Autocomplete label="Usuario" options={opts} value={v} onChange={setV} />
76
- ```
77
-
78
- **Checkbox** / **Switch** — `label`, controlado (`checked`/`onChange`) o RHF (`name`/`control`).
79
- ```tsx
80
- <Checkbox label="Acepto" checked={ok} onChange={setOk} />
81
- <Switch label="Activo" checked={on} onChange={setOn} />
82
- ```
83
-
84
- **RadioGroup** — `options` (`{value,label}`), `row`.
85
- ```tsx
86
- <RadioGroup label="Tipo" options={[{value:'a',label:'A'},{value:'b',label:'B'}]} value={v} onChange={setV} />
87
- ```
88
-
89
- **DatePicker** / **DateTimePicker** — valor `Dayjs`, `minDate`/`maxDate`.
90
- ```tsx
91
- <DatePicker label="Fecha" value={date} onChange={setDate} />
92
- ```
93
-
94
- ### Datos y visualización
95
-
96
- **Table** + **Column** — paginación interna o externa, render por columna.
97
- ```tsx
98
- <Table data={rows}>
99
- <Column name="Nombre" field="name">{({name}) => <b>{name}</b>}</Column>
100
- <Column name="Estado" field="status">{({status}) => <Chip label={status} />}</Column>
101
- </Table>
102
- ```
103
-
104
- **Avatar** — uno (`src`/`alt`/`fallback`) o grupo apilado (`items`).
105
- ```tsx
106
- <Avatar src={url} alt="Ada" fallback="AL" />
107
- <Avatar items={[{imageUrl:u1,text:'Ada'},{imageUrl:u2,text:'Bob'}]} displayedAvatars={3} />
108
- ```
109
-
110
- **Chip** — `label`, `color`, `variant`, `onDelete`.
111
- ```tsx
112
- <Chip label="Activo" color="success" size="small" />
113
- ```
114
-
115
- **Stat** — KPI con plantillas `simple`/`chip`/`chipList`.
116
- ```tsx
117
- <Stat simple statDisplay={() => <>Q 1,200</>} />
118
- ```
119
-
120
- **Icon** — SVG por `path`/`url` o `children`, con `badge`, `spin`.
121
- ```tsx
122
- <Icon url="/icons/user.svg" size="md" />
123
- ```
124
-
125
- **Gallery** — galería con lightbox; `items` (`{url,type,title}`).
126
- ```tsx
127
- <Gallery items={[{url:img,type:'image',title:'Doc'}]} />
128
- ```
129
-
130
- **Timeline** + **TimelineItem** — línea temporal.
131
- ```tsx
132
- <Timeline><TimelineItem>Creado</TimelineItem><TimelineItem>Aprobado</TimelineItem></Timeline>
133
- ```
134
-
135
- **Stepper** + **Step** — pasos `horizontal`/`vertical`, `currentStep`.
136
- ```tsx
137
- <Stepper currentStep={1}><Step label="Datos" /><Step label="Pago" /></Stepper>
138
- ```
139
-
140
- ### Feedback
141
-
142
- **Alert** — `severity` (`success`/`info`/`warning`/`error`), `variant`.
143
- ```tsx
144
- <Alert severity="error">No se pudo guardar</Alert>
145
- ```
146
-
147
- **Spinner** — `size`, `color`.
148
- ```tsx
149
- <Spinner size={16} />
150
- ```
151
-
152
- **StatusMessage** — mensaje de estado como `alert` o `modal`.
153
- ```tsx
154
- <StatusMessage open messageType="success" title="Listo" description="Guardado" close={fn} />
155
- ```
156
-
157
- **Tooltip** — `text` envolviendo un hijo.
158
- ```tsx
159
- <Tooltip text="Editar"><Button>✎</Button></Tooltip>
160
- ```
161
-
162
- **Modal** (+ `ModalHeader`/`ModalBody`/`ModalFooter`) — `open`/`onClose`, `actions`, `staticBackdrop`, `maxWidth`.
163
- ```tsx
164
- <Modal open={open} onClose={close} title="Confirmar" actions={[{text:'OK',onClick:save}]} staticBackdrop />
165
- ```
166
-
167
- ### Navegación
168
-
169
- **Tabs** + **Tab** — paneles por contenido, o modo `nav` (enlaces controlados por ruta).
170
- ```tsx
171
- <Tabs onChangeValue={setV}>
172
- <Tab value={0} label="General">…</Tab>
173
- <Tab value={1} label="Historial">…</Tab>
174
- </Tabs>
175
- // Modo nav (router): value controlado, sin paneles
176
- <Tabs nav value={current}>
177
- <Tab value="info" label="Info" component={Link} to="info" />
178
- </Tabs>
179
- ```
180
-
181
- **Breadcrumbs** — migas; los hijos son `Link`/`Typography`.
182
- ```tsx
183
- <Breadcrumbs><Link href="/">Inicio</Link><Typography>Detalle</Typography></Breadcrumbs>
184
- ```
185
-
186
- **Drawer** + **DrawerItem** — panel lateral colapsable.
187
- ```tsx
188
- <Drawer open variant="permanent"><DrawerItem>Inicio</DrawerItem></Drawer>
189
- ```
190
-
191
- **AppBar** — barra superior (incluye `AppBarMenuToggle`, `useAppBarContext`).
192
-
193
- **MenuButton** — botón que abre un menú de `options`.
194
- ```tsx
195
- <MenuButton buttonText="Acciones" options={[{label:'Editar',onClick:fn}]} />
196
- ```
197
-
198
- **ActionMenu** + **ActionMenuItem** — menú contextual (compound; `trigger` opcional, default ⋮).
199
- ```tsx
200
- <ActionMenu><ActionMenuItem onClick={edit}>Editar</ActionMenuItem><ActionMenuItem onClick={del}>Eliminar</ActionMenuItem></ActionMenu>
201
- ```
202
-
203
- ### Layout y contenedores
204
-
205
- **Card** — `variant`, `padding`; o composición con `title`/`subheader`/`action` y `contentSx`.
206
- ```tsx
207
- <Card title="Resumen" action={<Button>Editar</Button>}>…</Card>
208
- <Card contentSx={{ p: 0 }}><Table data={rows}>…</Table></Card> // tabla flush
209
- ```
210
-
211
- **Divider** — separador `horizontal`/`vertical`.
212
- ```tsx
213
- <Divider sx={{ my: 2 }} />
214
- ```
215
-
216
- **ButtonGroup** — agrupa botones.
217
- ```tsx
218
- <ButtonGroup><Button>Día</Button><Button>Mes</Button></ButtonGroup>
219
- ```
220
-
221
- **Flyout** — panel flotante `open`/`onClose`, `anchor`.
222
- ```tsx
223
- <Flyout open={open} onClose={close} anchor="right">…</Flyout>
224
- ```
225
-
226
- ### Hooks
227
-
228
- **useClipboard** — copiar al portapapeles con feedback.
229
- ```tsx
230
- import { useClipboard } from '@soyfri/shared-library/hooks/ClipBoard'
231
- const { copy, CopyMessage } = useClipboard({ message: 'Copiado', severity: 'success' })
232
- ```
233
-
234
- ---
235
-
236
- ## Desarrollo
237
-
238
- ```bash
239
- npm install
240
- npm run dev # build en watch (tsup)
241
- npm run storybook # Storybook en :6006 (documentación interactiva, 260+ stories)
242
- npm run build # build de producción (vite + postbuild genera subpaths en dist/)
243
- ```
244
-
245
- ## Tecnologías
246
-
247
- React 18/19 · Material UI v7 · TypeScript 5 · Tailwind CSS 4 · Storybook 9 · Vite/Rollup · Vitest + Playwright.
248
-
249
- ## Licencia
250
-
251
- ISC
@@ -1 +0,0 @@
1
- {"version":3,"file":"StatusMessage-B3nXpuRl.cjs","sources":["../src/components/StatusMessage/StatusMessage.tsx"],"sourcesContent":["import { useId, useState, type FC } from 'react';\nimport {\n Alert,\n Box,\n Typography,\n Dialog,\n DialogContent,\n DialogActions,\n Button,\n} from '@mui/material';\nimport {\n ErrorOutline as ErrorOutlineIcon,\n CheckCircleOutline as CheckCircleOutlineIcon,\n WarningAmber as WarningAmberIcon,\n} from '@mui/icons-material';\n\nexport interface StatusMessageProps {\n /** Título del mensaje. */\n title?: string;\n /** Descripción/contenido detallado. Requerido para que el componente renderice. */\n description?: string;\n /** Tipo de mensaje (controla color + icono). `danger` mapea a `error` de MUI. */\n messageType?: 'success' | 'danger' | 'warning';\n /** Forma de presentación: alerta inline o modal. Default: `'alert'`. */\n displayType?: 'alert' | 'modal';\n /** Callback al cerrar. Si se omite, no se muestra botón de cerrar. */\n close?: () => void;\n /**\n * Controla visibilidad. Si se omite, el componente maneja su propio\n * state (se oculta solo al llamar `close`). Si se pasa, queda controlled\n * y el consumer es responsable de actualizarlo.\n */\n open?: boolean;\n}\n\n/**\n * Mensaje de éxito / error / advertencia en forma de alerta inline o modal.\n *\n * - **Uncontrolled**: sin pasar `open`, el componente maneja su propia\n * visibilidad. Al llamar `close`, se oculta automáticamente.\n * - **Controlled**: pasando `open`, el consumer decide cuándo mostrar/ocultar.\n */\nexport const StatusMessage: FC<StatusMessageProps> = ({\n title,\n description,\n messageType = 'success',\n displayType = 'alert',\n close,\n open: controlledOpen,\n}) => {\n const [internalOpen, setInternalOpen] = useState(true);\n const titleId = useId();\n const descId = useId();\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const handleClose = () => {\n if (!isControlled) setInternalOpen(false);\n close?.();\n };\n\n const alertVariant = messageType === 'danger' ? 'error' : messageType;\n\n const icon =\n messageType === 'success' ? (\n <CheckCircleOutlineIcon sx={{ fontSize: 64, color: 'success.main' }} />\n ) : messageType === 'danger' ? (\n <ErrorOutlineIcon sx={{ fontSize: 64, color: 'error.main' }} />\n ) : (\n <WarningAmberIcon sx={{ fontSize: 64, color: 'warning.main' }} />\n );\n\n if (!description) return null;\n if (!isOpen) return null;\n\n if (displayType === 'modal') {\n return (\n <Dialog\n open={isOpen}\n onClose={handleClose}\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={descId}\n maxWidth=\"md\"\n slotProps={{\n paper: {\n sx: { borderRadius: '16px', p: 2 },\n },\n }}\n >\n <DialogContent\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n textAlign: 'center',\n p: 4,\n gap: 2,\n }}\n >\n <Box sx={{ mb: 2 }}>{icon}</Box>\n {title && (\n <Typography\n id={titleId}\n variant=\"h4\"\n component=\"h2\"\n sx={{ fontWeight: 'bold' }}\n >\n {title}\n </Typography>\n )}\n <Typography id={descId} variant=\"body1\" color=\"text.secondary\">\n {description}\n </Typography>\n </DialogContent>\n <DialogActions sx={{ justifyContent: 'center', p: 2 }}>\n <Button onClick={handleClose} variant=\"contained\" color={alertVariant}>\n Aceptar\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n return (\n <Alert\n severity={alertVariant}\n sx={{ mb: 2, mt: 2 }}\n onClose={close !== undefined ? handleClose : undefined}\n >\n {title && (\n <Typography variant=\"h6\" sx={{ fontWeight: 'bold' }}>\n {title}\n </Typography>\n )}\n <Typography variant=\"body2\" sx={{ mt: 1 }}>\n {description}\n </Typography>\n </Alert>\n );\n};\n\nexport default StatusMessage;\n"],"names":["useState","useId","jsx","CheckCircleOutlineIcon","ErrorOutlineIcon","WarningAmberIcon","jsxs","Dialog","DialogContent","Box","Typography","DialogActions","Button","Alert"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"StatusMessage-D0WgSBx7.js","sources":["../src/components/StatusMessage/StatusMessage.tsx"],"sourcesContent":["import { useId, useState, type FC } from 'react';\nimport {\n Alert,\n Box,\n Typography,\n Dialog,\n DialogContent,\n DialogActions,\n Button,\n} from '@mui/material';\nimport {\n ErrorOutline as ErrorOutlineIcon,\n CheckCircleOutline as CheckCircleOutlineIcon,\n WarningAmber as WarningAmberIcon,\n} from '@mui/icons-material';\n\nexport interface StatusMessageProps {\n /** Título del mensaje. */\n title?: string;\n /** Descripción/contenido detallado. Requerido para que el componente renderice. */\n description?: string;\n /** Tipo de mensaje (controla color + icono). `danger` mapea a `error` de MUI. */\n messageType?: 'success' | 'danger' | 'warning';\n /** Forma de presentación: alerta inline o modal. Default: `'alert'`. */\n displayType?: 'alert' | 'modal';\n /** Callback al cerrar. Si se omite, no se muestra botón de cerrar. */\n close?: () => void;\n /**\n * Controla visibilidad. Si se omite, el componente maneja su propio\n * state (se oculta solo al llamar `close`). Si se pasa, queda controlled\n * y el consumer es responsable de actualizarlo.\n */\n open?: boolean;\n}\n\n/**\n * Mensaje de éxito / error / advertencia en forma de alerta inline o modal.\n *\n * - **Uncontrolled**: sin pasar `open`, el componente maneja su propia\n * visibilidad. Al llamar `close`, se oculta automáticamente.\n * - **Controlled**: pasando `open`, el consumer decide cuándo mostrar/ocultar.\n */\nexport const StatusMessage: FC<StatusMessageProps> = ({\n title,\n description,\n messageType = 'success',\n displayType = 'alert',\n close,\n open: controlledOpen,\n}) => {\n const [internalOpen, setInternalOpen] = useState(true);\n const titleId = useId();\n const descId = useId();\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const handleClose = () => {\n if (!isControlled) setInternalOpen(false);\n close?.();\n };\n\n const alertVariant = messageType === 'danger' ? 'error' : messageType;\n\n const icon =\n messageType === 'success' ? (\n <CheckCircleOutlineIcon sx={{ fontSize: 64, color: 'success.main' }} />\n ) : messageType === 'danger' ? (\n <ErrorOutlineIcon sx={{ fontSize: 64, color: 'error.main' }} />\n ) : (\n <WarningAmberIcon sx={{ fontSize: 64, color: 'warning.main' }} />\n );\n\n if (!description) return null;\n if (!isOpen) return null;\n\n if (displayType === 'modal') {\n return (\n <Dialog\n open={isOpen}\n onClose={handleClose}\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={descId}\n maxWidth=\"md\"\n slotProps={{\n paper: {\n sx: { borderRadius: '16px', p: 2 },\n },\n }}\n >\n <DialogContent\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n textAlign: 'center',\n p: 4,\n gap: 2,\n }}\n >\n <Box sx={{ mb: 2 }}>{icon}</Box>\n {title && (\n <Typography\n id={titleId}\n variant=\"h4\"\n component=\"h2\"\n sx={{ fontWeight: 'bold' }}\n >\n {title}\n </Typography>\n )}\n <Typography id={descId} variant=\"body1\" color=\"text.secondary\">\n {description}\n </Typography>\n </DialogContent>\n <DialogActions sx={{ justifyContent: 'center', p: 2 }}>\n <Button onClick={handleClose} variant=\"contained\" color={alertVariant}>\n Aceptar\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n return (\n <Alert\n severity={alertVariant}\n sx={{ mb: 2, mt: 2 }}\n onClose={close !== undefined ? handleClose : undefined}\n >\n {title && (\n <Typography variant=\"h6\" sx={{ fontWeight: 'bold' }}>\n {title}\n </Typography>\n )}\n <Typography variant=\"body2\" sx={{ mt: 1 }}>\n {description}\n </Typography>\n </Alert>\n );\n};\n\nexport default StatusMessage;\n"],"names":["CheckCircleOutlineIcon","ErrorOutlineIcon","WarningAmberIcon"],"mappings":";;;;AA0CO,MAAM,gBAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,cAAc;AAAA,EACd;AAAA,EACA,MAAM;AACR,MAAM;AACJ,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,IAAI;AACrD,QAAM,UAAU,MAAA;AAChB,QAAM,SAAS,MAAA;AAEf,QAAM,eAAe,mBAAmB;AACxC,QAAM,SAAS,eAAe,iBAAiB;AAE/C,QAAM,cAAc,MAAM;AACxB,QAAI,CAAC,aAAc,iBAAgB,KAAK;AACxC;AAAA,EACF;AAEA,QAAM,eAAe,gBAAgB,WAAW,UAAU;AAE1D,QAAM,OACJ,gBAAgB,YACd,oBAACA,sBAAuB,IAAI,EAAE,UAAU,IAAI,OAAO,eAAA,EAAe,CAAG,IACnE,gBAAgB,WAClB,oBAACC,cAAA,EAAiB,IAAI,EAAE,UAAU,IAAI,OAAO,eAAa,CAAG,IAE7D,oBAACC,cAAA,EAAiB,IAAI,EAAE,UAAU,IAAI,OAAO,kBAAkB;AAGnE,MAAI,CAAC,YAAa,QAAO;AACzB,MAAI,CAAC,OAAQ,QAAO;AAEpB,MAAI,gBAAgB,SAAS;AAC3B,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAM;AAAA,QACN,SAAS;AAAA,QACT,mBAAiB,QAAQ,UAAU;AAAA,QACnC,oBAAkB;AAAA,QAClB,UAAS;AAAA,QACT,WAAW;AAAA,UACT,OAAO;AAAA,YACL,IAAI,EAAE,cAAc,QAAQ,GAAG,EAAA;AAAA,UAAE;AAAA,QACnC;AAAA,QAGF,UAAA;AAAA,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,IAAI;AAAA,gBACF,SAAS;AAAA,gBACT,eAAe;AAAA,gBACf,YAAY;AAAA,gBACZ,WAAW;AAAA,gBACX,GAAG;AAAA,gBACH,KAAK;AAAA,cAAA;AAAA,cAGP,UAAA;AAAA,gBAAA,oBAAC,OAAI,IAAI,EAAE,IAAI,EAAA,GAAM,UAAA,MAAK;AAAA,gBACzB,SACC;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,IAAI;AAAA,oBACJ,SAAQ;AAAA,oBACR,WAAU;AAAA,oBACV,IAAI,EAAE,YAAY,OAAA;AAAA,oBAEjB,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAGL,oBAAC,cAAW,IAAI,QAAQ,SAAQ,SAAQ,OAAM,kBAC3C,UAAA,YAAA,CACH;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,8BAED,eAAA,EAAc,IAAI,EAAE,gBAAgB,UAAU,GAAG,EAAA,GAChD,UAAA,oBAAC,QAAA,EAAO,SAAS,aAAa,SAAQ,aAAY,OAAO,cAAc,qBAEvE,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AAEA,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,UAAU;AAAA,MACV,IAAI,EAAE,IAAI,GAAG,IAAI,EAAA;AAAA,MACjB,SAAS,UAAU,SAAY,cAAc;AAAA,MAE5C,UAAA;AAAA,QAAA,SACC,oBAAC,cAAW,SAAQ,MAAK,IAAI,EAAE,YAAY,OAAA,GACxC,UAAA,MAAA,CACH;AAAA,QAEF,oBAAC,cAAW,SAAQ,SAAQ,IAAI,EAAE,IAAI,EAAA,GACnC,UAAA,YAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -1,28 +0,0 @@
1
- -----BEGIN PRIVATE KEY-----
2
- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDZcr2LK3io3W9A
3
- 8yJ+Kq+lUH3HQsBzt7stQGFxsWpEhS0bJzHO3HkmG6vD9SD3l61GXJlFJByXoKNb
4
- lUdMSQZYz6kv/yvdN2bvhyP8FOpATE5euzxRqIyU71B5caGeRhwSLR4TJfAtqmMg
5
- yCogVVh6S1Nmhs+/QqXxS6YILHmHfmT13suVXfhR8bnaNj/laG0fCXkkCDgZZrHT
6
- tiLH3adfg0bqHnc38cL4w1jnlrrq6tHWnZls4BX991YW2aQdTPn6sQuGEYvNsHLc
7
- WN9SqD4m8YhGnt9uicJm65hLzbsWJaernd1j02LkPmkh+ngh1+GZ5KWOoU3Lgji1
8
- EscRgUAhAgMBAAECggEAOGYAL2Z5ByNXxbrKCXs8z13PIa14iQrwa041d+2SKG96
9
- QX6q9oJMkcu/gzXC9TTL5mICBuLU36b0d76CHZEbKlHCCgbe86N4+UtN1AYAs+iW
10
- sw9RF8TloYNolfcY+hopEbXOBR1j7BQzXb9M3dIE/sMmwILawzqgG7OJPrl6U9/E
11
- G1lsAMkbb4ddrsEEpGTSOhstO5DsC/RNNcb/uUYCNaUd+HkKfHFST5x19riKvUEg
12
- PRGmn5P/hmIN0AfrjAkQz1VDCROMh+xrKSFxzFYUBuWwWUEjpVen5oYmbUrAUVAO
13
- El1MMU3JVN/l0UHNAHs6pgkOyr97YcwSNy6J2DiPIQKBgQDwDAp7xVkq4FvGIWdR
14
- 2Pj7HOrVCWxdRyDBN44a0kC+bJNPzvyVwahldJnPYRdrptbx1Ld3JJhMCgfgNKJl
15
- HW3PbqgO+HWvpXNYO1Zqdg/hHeDD37Z6kOHmEYA/eofnRnS4doJhSJg/IuSRw+h1
16
- ZqQToBljxjpljStTOFPF63FiNQKBgQDn5jjOSc/oB/gCJe1FYPamZ7o6GKYKpAB2
17
- f1t8UEBqYovokEneAYJ2trGpSRKUjDhMl2RgX6zb5jyRWlfX9KCXfUZOx2cQPqJy
18
- DCQ9DOlS3rBzc79D2IP3tgwemgND85cKGW98AcdnjFGyuQMREI/1WvBxtWQxwAT3
19
- c2WuALSjvQKBgQDWc5tmCd/oWzoCHtOEHpgJF0OAgYOrLaFInM46jf3DYZKVqTCk
20
- xbcgtHO4/l+DEDFVKRmiujHJNOjmV3+BYDI7L/u6LCRPgDs05wYD5Ge5UQz9UL5g
21
- b1ExTg9KJriFWL9sEIvYR5ekSBL1WpUxVTpeQhiMt4pyMRU0qszEs9u+xQKBgQCo
22
- qBfIcIZ1CtalOVBHlS3N+MLIXgTk2EI97IJs9zDiLqnyin4uqIpqLJUpuat5vkFz
23
- 8udd8DeX9us2C663sYLaqpHn2b5rYiJjL9FrVWicjLloPlZs0ZupHQ3Tc8/MK+09
24
- uyIJ3oFYHgWNJmHEl3cbyvf0uygTxsPV9GePFZRLQQKBgBiR6XauolWxVyjBLD0v
25
- sTREXA2cIOHo56jgVgzmSdZrmu5+mDwDE2xhipVlH956auIGqwlqqA7Z0+e5pCyl
26
- fYdcbiNBoCxwp7tldkLpvWdvyXcXwYFH1f2pSPv2BGYTc8y+vnBj0FdOZfcM3sUS
27
- RzPbnNW06jPwsTBI+RYtPuFD
28
- -----END PRIVATE KEY-----
@@ -1,27 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIEkjCCAvqgAwIBAgIRALd7KkzMFo7baHGZyS6rWDUwDQYJKoZIhvcNAQELBQAw
3
- gasxHjAcBgNVBAoTFW1rY2VydCBkZXZlbG9wbWVudCBDQTFAMD4GA1UECww3YW5k
4
- cmVhdmljZW50ZUBNYWNCb29rLVByby1BbmRyZWEubG9jYWwgKEFuZHJlYSBWaWNl
5
- bnRlKTFHMEUGA1UEAww+bWtjZXJ0IGFuZHJlYXZpY2VudGVATWFjQm9vay1Qcm8t
6
- QW5kcmVhLmxvY2FsIChBbmRyZWEgVmljZW50ZSkwHhcNMjUwNTA2MDMyMTMyWhcN
7
- MjcwODA2MDMyMTMyWjBrMScwJQYDVQQKEx5ta2NlcnQgZGV2ZWxvcG1lbnQgY2Vy
8
- dGlmaWNhdGUxQDA+BgNVBAsMN2FuZHJlYXZpY2VudGVATWFjQm9vay1Qcm8tQW5k
9
- cmVhLmxvY2FsIChBbmRyZWEgVmljZW50ZSkwggEiMA0GCSqGSIb3DQEBAQUAA4IB
10
- DwAwggEKAoIBAQDZcr2LK3io3W9A8yJ+Kq+lUH3HQsBzt7stQGFxsWpEhS0bJzHO
11
- 3HkmG6vD9SD3l61GXJlFJByXoKNblUdMSQZYz6kv/yvdN2bvhyP8FOpATE5euzxR
12
- qIyU71B5caGeRhwSLR4TJfAtqmMgyCogVVh6S1Nmhs+/QqXxS6YILHmHfmT13suV
13
- XfhR8bnaNj/laG0fCXkkCDgZZrHTtiLH3adfg0bqHnc38cL4w1jnlrrq6tHWnZls
14
- 4BX991YW2aQdTPn6sQuGEYvNsHLcWN9SqD4m8YhGnt9uicJm65hLzbsWJaernd1j
15
- 02LkPmkh+ngh1+GZ5KWOoU3Lgji1EscRgUAhAgMBAAGjcDBuMA4GA1UdDwEB/wQE
16
- AwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATAfBgNVHSMEGDAWgBT7rStyqYaZXALZ
17
- AJwTa6y41GftvTAmBgNVHREEHzAdghthZmlsaWFjaW9uZXMuZGV2LnNveWZyaS5j
18
- b20wDQYJKoZIhvcNAQELBQADggGBAD8wk8sbLIkNuthGu+mstEwgeEXXn1BlU5dX
19
- 07UR9KQhXela7b03NxkbnF8hcGq93vn50Xpu0qLJfpPqDXpbRpRSKTJYEL6VpYJR
20
- c/8SfbLK7y1Vfjm+xMrs1+MC44BfqEDtg7ZDm3cI8xkmAgeMsTj7fcxS0T47Vw19
21
- TjaeerzkY+8i1mWu10ijLFvFkRoe+vJk/K4c3jrPRfyLQAn20m8qKmVSFCrKh7fx
22
- 0z1XlNzhOEE74iJwACVMaETUZEaESOlp6CWOHYGXqrxzncYo+WhVp3jiVgWs+A7Y
23
- uAYGu3iyAmmdicriyo9aTN4+elaQtFXkOaB5I4cyI0o1oPDpJuv9NcMVmECMKQts
24
- e7XrqFPJVe4eXdk7dE6Y4GzDwH6zQEU8Q1doy6oITyKHxl4m4ypskGo5qTPoL0Ty
25
- ZFRCaTw9lMLtmFbZPjacsTN99a3q3bYCsS5O1s6m1r+OAyi1QnvcPppqTQuEtYAq
26
- jzEpZueH/vw+ffR6UZX+7LvGFPc/2Q==
27
- -----END CERTIFICATE-----
@@ -1,28 +0,0 @@
1
- -----BEGIN PRIVATE KEY-----
2
- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDcuGBDQBQIlUKU
3
- 4FaP5JdvB+V9px15KZwLEN8h40xAOCMJTKUjYq+31jeSarNj1zHveZCYM/HrFB4f
4
- S3Gwx7nLtN+xWSr0xuqF8MnBYhlQcVV5nuN3cGZEKfEMWl+SjvNWMWYaqGpGWYW4
5
- kyAq4MKzYs0tXqWvBjXU1LctxW7Oia5QN8MBNdDL8HJ7fAvd//EjJP6TJQEMIC1B
6
- 69CFQmnZkG840Qzp0sdWpc2dChIVijP9kzYmxYdZMmw4pdK3xya+4hkcFUburCEf
7
- mwfH1/B1SEP1dP6NfMQ1EgIxhmPLh5owVzhTnJwreFSfGNaO/Y35MzjFWrRRc5fp
8
- vhu7kE0bAgMBAAECggEBALkGLlvxqVmQleHrNWUmQPOocO6mWoSpJs/38rSbr93d
9
- sTEoeP5yyc6X2rn4jCzTxl5zT4znbpKbqKyfN8zzgIKNOz+V+fZ7kTl6ogZkT8gp
10
- WXe8g/4p0PCvIAw07g0TnFTS0D7kk0Ip5XjWjI6lH1H1Lv4ra0SPNi0VrADIkpy7
11
- Koe75xHW8uzUwvqEH8FSSZf3pKeSRt7JmAhRgBL/64GW4DugoAdvpdzKImSLHrfU
12
- YAjPdEheBFZDeyAw3XQZA7xc3+/gRIHOrhl7Hd0683Na0ownHAUo+lQh4uf3a8t9
13
- CF78bmW3tro+rOIB6+jyqlPLgguVOTzg1Y6XhO68dpECgYEA/LB2yDAb0zs8KBV3
14
- y6AVJKwtLe0u1IajDufyTLjEDAt4WNpzWHVvdE7IabmVUkBZFMJcOjEfz7JqSNKh
15
- oTy6a27Z3uteM/nY4xBZGjZ2wRaFfaGDsZKBMfU2aNz2EDBLOOtSYaoiVwaedIx5
16
- /fLCzQ2aYCRIgqGLKWMNYOnN7pcCgYEA35yvh5vxRQUGCwKNf9dkYL0CI2Qt9+Eg
17
- TQY/5QS8xwQqI+hbeES13wvahghHsUovXHljYK/EgYzH7UDQBhpPZUIkoc1UevGt
18
- zlhHvLaDsTzAmoyZFwTIQo1qHABGnBSl0C6Z/gI34nC3IsneM32tXCxeeBBSj4tY
19
- yWncHV0Uqh0CgYB1XOSekDGsRzvmhioQynZnhQyq4xm4HhyH5NUWK07rJTytUDD4
20
- qfqtM5ZD/K1M+ZQmXyuE36Idzoks75+gitsu4NqSfhFP5MCGneY0lY1Mm1A/DJBl
21
- Hl2hPXoa9F3ZIQUfF7U4pVOzxeA8064pc+JkaOgFtXR0L+G5xEbHd3BtWwKBgFPI
22
- 9cwuFhzyYO1HK5W3Mxk8OMziAIdchynVKaO6PrGjUdbafUt3E15bpqmJ+LLpRQ21
23
- PhNASLTx9wdivY9L1GvweKFXukvGuoUSdu6yxG1oghJmlAYX+KFXM2cCg3KAGhED
24
- JRgT5LSn3zbdxLAuawKabVs3Ynf+kmoFjEBEXDXRAoGBAMaPbyhOBIB6uk8oOeJD
25
- QlopmQ4f9TPvG9D5mX3gQSZbW3zIkgERXHrc6m3MlWv5sO0Occfv7mN6sC5HiX43
26
- MO5YRxdqPdZ0QocXdDL5y8mVbiXdiAQ1WypjkpPI7RI9aVG2lAvEYdj9QL0lMufN
27
- /FFXWhymChUpON5/VLJNGVpa
28
- -----END PRIVATE KEY-----
@@ -1,27 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIEgjCCAuqgAwIBAgIQYIZrZForwN2y0psiKchASTANBgkqhkiG9w0BAQsFADCB
3
- oTEeMBwGA1UEChMVbWtjZXJ0IGRldmVsb3BtZW50IENBMTswOQYDVQQLDDJndHNh
4
- bHZhQFNhbHZhZG9ycy1NYWNCb29rLVByby5sb2NhbCAoU2FsdmFkb3IgVG9qKTFC
5
- MEAGA1UEAww5bWtjZXJ0IGd0c2FsdmFAU2FsdmFkb3JzLU1hY0Jvb2stUHJvLmxv
6
- Y2FsIChTYWx2YWRvciBUb2opMB4XDTI1MTAwNzE3MTY0MloXDTI4MDEwNzE3MTY0
7
- MlowZjEnMCUGA1UEChMebWtjZXJ0IGRldmVsb3BtZW50IGNlcnRpZmljYXRlMTsw
8
- OQYDVQQLDDJndHNhbHZhQFNhbHZhZG9ycy1NYWNCb29rLVByby5sb2NhbCAoU2Fs
9
- dmFkb3IgVG9qKTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANy4YENA
10
- FAiVQpTgVo/kl28H5X2nHXkpnAsQ3yHjTEA4IwlMpSNir7fWN5Jqs2PXMe95kJgz
11
- 8esUHh9LcbDHucu037FZKvTG6oXwycFiGVBxVXme43dwZkQp8QxaX5KO81YxZhqo
12
- akZZhbiTICrgwrNizS1epa8GNdTUty3Fbs6JrlA3wwE10Mvwcnt8C93/8SMk/pMl
13
- AQwgLUHr0IVCadmQbzjRDOnSx1alzZ0KEhWKM/2TNibFh1kybDil0rfHJr7iGRwV
14
- Ru6sIR+bB8fX8HVIQ/V0/o18xDUSAjGGY8uHmjBXOFOcnCt4VJ8Y1o79jfkzOMVa
15
- tFFzl+m+G7uQTRsCAwEAAaNwMG4wDgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoG
16
- CCsGAQUFBwMBMB8GA1UdIwQYMBaAFNwCpG72rRYTLtS+QPMs57rv+XlnMCYGA1Ud
17
- EQQfMB2CG2FmaWxpYWNpb25lcy5kZXYuc295ZnJpLmNvbTANBgkqhkiG9w0BAQsF
18
- AAOCAYEAaWbz4p8b3tw95OKww4dOgWgM3Vm9nTbE1OknuiMKsrBe5jZ6Lll3lm8/
19
- NibaIZYEBm1pgofwK2a8B0YksD3IJdCo4KzQIxHzZAzWWiuiY7WOb6+kWlQktLGM
20
- 3PQg67S573+HPGtQzbGnus1JbYMC9iInYOhLSjbHv9pQeLHsYpV7mphzeIfK2Byi
21
- K7HGKucPCbnhQ4rdLWTf+3h2INKjId+sYQCwJWDutsKZBJKfRiu3E9/jsalV53cM
22
- lh0Y0OnsL6b6dY1Q94mLPDTMJvyd6h0S4PaNJ6Vfe1I1Psj/KeoPHwUM1+2A/L3C
23
- 1UOI9rpchvGwhq8Yw58kmIfru1jG5k4syYrsz2VtZAwl8lLtos9ZVzqX2hKhH+mE
24
- m6FKSZ+tOxuuBTV3f16L3cEDtbzQiEck/ksYIDlGJO3ebvbAw+VGZuQ8p1UdyTay
25
- Ibd/iHA7/N2xGwAu98nrtE/chONH42yPzSfi2+QEeWu68qYJRNeOL2ielq9b/yqK
26
- m3vOhbVR
27
- -----END CERTIFICATE-----
@@ -1,28 +0,0 @@
1
- -----BEGIN PRIVATE KEY-----
2
- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDcuGBDQBQIlUKU
3
- 4FaP5JdvB+V9px15KZwLEN8h40xAOCMJTKUjYq+31jeSarNj1zHveZCYM/HrFB4f
4
- S3Gwx7nLtN+xWSr0xuqF8MnBYhlQcVV5nuN3cGZEKfEMWl+SjvNWMWYaqGpGWYW4
5
- kyAq4MKzYs0tXqWvBjXU1LctxW7Oia5QN8MBNdDL8HJ7fAvd//EjJP6TJQEMIC1B
6
- 69CFQmnZkG840Qzp0sdWpc2dChIVijP9kzYmxYdZMmw4pdK3xya+4hkcFUburCEf
7
- mwfH1/B1SEP1dP6NfMQ1EgIxhmPLh5owVzhTnJwreFSfGNaO/Y35MzjFWrRRc5fp
8
- vhu7kE0bAgMBAAECggEBALkGLlvxqVmQleHrNWUmQPOocO6mWoSpJs/38rSbr93d
9
- sTEoeP5yyc6X2rn4jCzTxl5zT4znbpKbqKyfN8zzgIKNOz+V+fZ7kTl6ogZkT8gp
10
- WXe8g/4p0PCvIAw07g0TnFTS0D7kk0Ip5XjWjI6lH1H1Lv4ra0SPNi0VrADIkpy7
11
- Koe75xHW8uzUwvqEH8FSSZf3pKeSRt7JmAhRgBL/64GW4DugoAdvpdzKImSLHrfU
12
- YAjPdEheBFZDeyAw3XQZA7xc3+/gRIHOrhl7Hd0683Na0ownHAUo+lQh4uf3a8t9
13
- CF78bmW3tro+rOIB6+jyqlPLgguVOTzg1Y6XhO68dpECgYEA/LB2yDAb0zs8KBV3
14
- y6AVJKwtLe0u1IajDufyTLjEDAt4WNpzWHVvdE7IabmVUkBZFMJcOjEfz7JqSNKh
15
- oTy6a27Z3uteM/nY4xBZGjZ2wRaFfaGDsZKBMfU2aNz2EDBLOOtSYaoiVwaedIx5
16
- /fLCzQ2aYCRIgqGLKWMNYOnN7pcCgYEA35yvh5vxRQUGCwKNf9dkYL0CI2Qt9+Eg
17
- TQY/5QS8xwQqI+hbeES13wvahghHsUovXHljYK/EgYzH7UDQBhpPZUIkoc1UevGt
18
- zlhHvLaDsTzAmoyZFwTIQo1qHABGnBSl0C6Z/gI34nC3IsneM32tXCxeeBBSj4tY
19
- yWncHV0Uqh0CgYB1XOSekDGsRzvmhioQynZnhQyq4xm4HhyH5NUWK07rJTytUDD4
20
- qfqtM5ZD/K1M+ZQmXyuE36Idzoks75+gitsu4NqSfhFP5MCGneY0lY1Mm1A/DJBl
21
- Hl2hPXoa9F3ZIQUfF7U4pVOzxeA8064pc+JkaOgFtXR0L+G5xEbHd3BtWwKBgFPI
22
- 9cwuFhzyYO1HK5W3Mxk8OMziAIdchynVKaO6PrGjUdbafUt3E15bpqmJ+LLpRQ21
23
- PhNASLTx9wdivY9L1GvweKFXukvGuoUSdu6yxG1oghJmlAYX+KFXM2cCg3KAGhED
24
- JRgT5LSn3zbdxLAuawKabVs3Ynf+kmoFjEBEXDXRAoGBAMaPbyhOBIB6uk8oOeJD
25
- QlopmQ4f9TPvG9D5mX3gQSZbW3zIkgERXHrc6m3MlWv5sO0Occfv7mN6sC5HiX43
26
- MO5YRxdqPdZ0QocXdDL5y8mVbiXdiAQ1WypjkpPI7RI9aVG2lAvEYdj9QL0lMufN
27
- /FFXWhymChUpON5/VLJNGVpa
28
- -----END PRIVATE KEY-----
@@ -1,27 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIEgjCCAuqgAwIBAgIQYIZrZForwN2y0psiKchASTANBgkqhkiG9w0BAQsFADCB
3
- oTEeMBwGA1UEChMVbWtjZXJ0IGRldmVsb3BtZW50IENBMTswOQYDVQQLDDJndHNh
4
- bHZhQFNhbHZhZG9ycy1NYWNCb29rLVByby5sb2NhbCAoU2FsdmFkb3IgVG9qKTFC
5
- MEAGA1UEAww5bWtjZXJ0IGd0c2FsdmFAU2FsdmFkb3JzLU1hY0Jvb2stUHJvLmxv
6
- Y2FsIChTYWx2YWRvciBUb2opMB4XDTI1MTAwNzE3MTY0MloXDTI4MDEwNzE3MTY0
7
- MlowZjEnMCUGA1UEChMebWtjZXJ0IGRldmVsb3BtZW50IGNlcnRpZmljYXRlMTsw
8
- OQYDVQQLDDJndHNhbHZhQFNhbHZhZG9ycy1NYWNCb29rLVByby5sb2NhbCAoU2Fs
9
- dmFkb3IgVG9qKTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANy4YENA
10
- FAiVQpTgVo/kl28H5X2nHXkpnAsQ3yHjTEA4IwlMpSNir7fWN5Jqs2PXMe95kJgz
11
- 8esUHh9LcbDHucu037FZKvTG6oXwycFiGVBxVXme43dwZkQp8QxaX5KO81YxZhqo
12
- akZZhbiTICrgwrNizS1epa8GNdTUty3Fbs6JrlA3wwE10Mvwcnt8C93/8SMk/pMl
13
- AQwgLUHr0IVCadmQbzjRDOnSx1alzZ0KEhWKM/2TNibFh1kybDil0rfHJr7iGRwV
14
- Ru6sIR+bB8fX8HVIQ/V0/o18xDUSAjGGY8uHmjBXOFOcnCt4VJ8Y1o79jfkzOMVa
15
- tFFzl+m+G7uQTRsCAwEAAaNwMG4wDgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoG
16
- CCsGAQUFBwMBMB8GA1UdIwQYMBaAFNwCpG72rRYTLtS+QPMs57rv+XlnMCYGA1Ud
17
- EQQfMB2CG2FmaWxpYWNpb25lcy5kZXYuc295ZnJpLmNvbTANBgkqhkiG9w0BAQsF
18
- AAOCAYEAaWbz4p8b3tw95OKww4dOgWgM3Vm9nTbE1OknuiMKsrBe5jZ6Lll3lm8/
19
- NibaIZYEBm1pgofwK2a8B0YksD3IJdCo4KzQIxHzZAzWWiuiY7WOb6+kWlQktLGM
20
- 3PQg67S573+HPGtQzbGnus1JbYMC9iInYOhLSjbHv9pQeLHsYpV7mphzeIfK2Byi
21
- K7HGKucPCbnhQ4rdLWTf+3h2INKjId+sYQCwJWDutsKZBJKfRiu3E9/jsalV53cM
22
- lh0Y0OnsL6b6dY1Q94mLPDTMJvyd6h0S4PaNJ6Vfe1I1Psj/KeoPHwUM1+2A/L3C
23
- 1UOI9rpchvGwhq8Yw58kmIfru1jG5k4syYrsz2VtZAwl8lLtos9ZVzqX2hKhH+mE
24
- m6FKSZ+tOxuuBTV3f16L3cEDtbzQiEck/ksYIDlGJO3ebvbAw+VGZuQ8p1UdyTay
25
- Ibd/iHA7/N2xGwAu98nrtE/chONH42yPzSfi2+QEeWu68qYJRNeOL2ielq9b/yqK
26
- m3vOhbVR
27
- -----END CERTIFICATE-----
@@ -1,40 +0,0 @@
1
- -----BEGIN PRIVATE KEY-----
2
- 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
- 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
- xQplL6Tb1M45ekLJMjldqDrrs9A+Nf7AJy85B1SKFmLkQrnntolN6hbpfq6NnsBq
5
- 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
- 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
- B5ET66P0VG1JUc20NDANBHniWwPA6Q6bWtZdRsATvP5K61Y7JySo1B44lQISw/em
8
- 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
- m8r+OmkwgyMO0tocIUwKJaXrhdlVeUDh9V6/Ro3M5P3B6IiapV5DAcnLb75WPHZy
10
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- SkhcQkjUDNb6gsWLMJG0KM6FIB82N7iXz0gRaNPyrF5+SgKyNNLB1zUecACQuObk
25
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
39
- zMiIdLiDTAW/vX/ye48qp1Y=
40
- -----END PRIVATE KEY-----
@@ -1,30 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIFEzCCA3ugAwIBAgIQVZFXeBZDDaWG/ZLO+9xwODANBgkqhkiG9w0BAQsFADCB
3
- oTEeMBwGA1UEChMVbWtjZXJ0IGRldmVsb3BtZW50IENBMTswOQYDVQQLDDJndHNh
4
- bHZhQFNhbHZhZG9ycy1NYWNCb29rLVByby5sb2NhbCAoU2FsdmFkb3IgVG9qKTFC
5
- MEAGA1UEAww5bWtjZXJ0IGd0c2FsdmFAU2FsdmFkb3JzLU1hY0Jvb2stUHJvLmxv
6
- Y2FsIChTYWx2YWRvciBUb2opMB4XDTI1MDUyMjAwMTMzM1oXDTM1MDUyMjAwMTMz
7
- M1owgaExHjAcBgNVBAoTFW1rY2VydCBkZXZlbG9wbWVudCBDQTE7MDkGA1UECwwy
8
- Z3RzYWx2YUBTYWx2YWRvcnMtTWFjQm9vay1Qcm8ubG9jYWwgKFNhbHZhZG9yIFRv
9
- aikxQjBABgNVBAMMOW1rY2VydCBndHNhbHZhQFNhbHZhZG9ycy1NYWNCb29rLVBy
10
- by5sb2NhbCAoU2FsdmFkb3IgVG9qKTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCC
11
- AYoCggGBANUYrIv2iLtW4OugC+J++csbqHvqJXedULeYyRsY1WiBhNXjTnMLXgfc
12
- /jXZZymw7Dg/53tZ2SEHE8/FCmUvpNvUzjl6QskyOV2oOuuz0D41/sAnLzkHVIoW
13
- YuRCuee2iU3qFul+ro2ewGpfDLDEzHQU2cTBLuT4eHhUt7Q3fiZPsroTEH/Ok/rY
14
- Nh3LgcL73T1qsFSFMvy3cyfesV6AdRL7czhklwnCQ8d9z/skTCzsj3dnUIV15Wle
15
- SgUwus5G4LA/SwKBBjn0o34HkRPro/RUbUlRzbQ0MA0EeeJbA8DpDpta1l1GwBO8
16
- /krrVjsnJKjUHjiVAhLD96Z3Te0QiKDeeei7qfEJoHOJdOQUs9rPPlRothVgWDq1
17
- jI4yrZQTDFu+TzQ1DHhd1QObyv46aTCDIw7S2hwhTAolpeuF2VV5QOH1Xr9Gjczk
18
- /cHoiJqlXkMByctvvlY8dnKG0r6La+oSAgvqDPLjdmvzK7KU7eJwfFxWl1azXdGT
19
- WDWrSC0RYwIDAQABo0UwQzAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB
20
- /wIBADAdBgNVHQ4EFgQU3AKkbvatFhMu1L5A8yznuu/5eWcwDQYJKoZIhvcNAQEL
21
- BQADggGBAF9FOey7mzem4FUzbM8nJwCHkAxthCftNGU+B+FfsMD4PJJIxrbdrONp
22
- twcWv4Od6heM4Fm+WRXuvjoq2hSlQpPF8JSrne0uBCgU6zkjb1Wbl9KZEAGTqCSW
23
- +tZ92OcYS+p1z16trwXovyDwy5Ta7JHmaiT3ri+z2zD+ebW1p6fMG/gSZ0j7spaU
24
- 2UQqEB2i+0pSddC2TQnLCICEqbpJgbpSq9Cv1Nc/3thhvFO5e+Ycpu5VWJSR+e5z
25
- xo1TtlvQPzyFCsxszU/uaAlXpx0pQkFKS4FSf21WIqsTFPaI7t8NlYp9YuB0tfgT
26
- BBYsN6msaK3kQEJMHl5DjHKjedgyK6w8lyDdZEB9YKVBU3mdPFdOMH3FYOWWn8Ex
27
- C3y/3NnqvCU/HCy7PzlXmOveKrIqTCymK0zP2DzGUJhvDuYDSZunQJ2xdfcTaRTI
28
- fUTKAfhwQHADOllUedjLWFPKqUZpydbko6eMiEycNbf0q/wd2DJZ0qV23Y3tPXAB
29
- A4YrfP4w2Q==
30
- -----END CERTIFICATE-----
@@ -1,28 +0,0 @@
1
- -----BEGIN PRIVATE KEY-----
2
- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDZqrWDLJqgcajw
3
- 38Gy7jqIbtQmbi+VGFw5f0c9uJ7ftqm2lj5e+jSRWZfKeL1T3fxWM/QhX480a2FY
4
- vNJq6BJT+Gv6FQg22ODRCkfYip0nuyh++BE6bQU1TB9I7lDovXXtkHNNzsBD69zD
5
- zqj4+BNceHXQKmMuUnZrRWhsnvArnrzwqdkFY8kvEtiGxdJ/BpjJyKlwYdfIYPcx
6
- dAZDaTeOfHsj6v9RhNXwgZnYRiDaa02PNUhSV/sz/X22QrsDqe/O1ID+ScNd0Lmd
7
- b6sZggeZDL+j9P2RbjmZ6eLlxA3yqYO4jkxvXy2dK2hGlv5uT/i6Hainfb57iVif
8
- vNsTuxXxAgMBAAECggEBALX6yxaITB6n6B66dC8sjTNTtXsL1CxK2ZAYoW8w02Mm
9
- TG2i3zJ47Uo4JXfZyjA7/6Pye8ELK6cfv5t5AlLvA6PApkXHH777Q7qBZd/cw9db
10
- 2leM/ppiW2Bb7CwFUw/Clr2vbzc2C/i9US1DsnG0tjsxWw5W4eTwfKDivpNRrmpI
11
- GeevF4tsTdKKW+4kEtn5SrBc7j6i4k+mRJKtbw0ch2VWUGcsFJZkuinHTVtMXew+
12
- eUQ/5hh9XAOmLL6gerH7aZ1nDHKtx+t1PhbSVRe3ZqovKsKq2XYwsZ0WltMjUGxP
13
- kiRNlnBD1yHOG6AKNb4rTyXG24OEn2sGjKweEle96gECgYEA7KjkUmFsGLvNyIfR
14
- c0ixN3bELTnp128AqMS3hT0wHzvnL8QKFeKG467w+OSPre3TNkAtSi9FNk4HchxU
15
- QiPhtjvHKOEj5RlCygEVjuvGA1DPQ6nl6wHilYoStkhoEZQ76iXFgLmnRhxf9vRe
16
- daboK2WT46p975AKm1SiBHne5ekCgYEA63R4fnr7y4RjTuZ43w2cHUoC4myWH5XG
17
- oHbkygLXoVcw+7JszJD/4ymZV34dRPJd+vazxQ81qKxjoowm8Ze6CryAPBKPQuIA
18
- rahPlrF4S72w68PVwM+QPT8CoFP6E7G+OxoOOxFuwkkwhiYzMxuAHDEwK0et5mUO
19
- kf9dYLjOwskCgYBltMuzD8VJ9+QfSydbeSEYKgVzPlFd0Ymh/jC0pTA6LB9V6tU+
20
- xISd8wACpw+MewnrZbdRC3GePfh7NOuNJSiKjbQwwFkRy0Jl2ANw0ajeoesBNFHo
21
- Jn4/MACMsB9xdpgtL6Bqit71hZpEYo751wouJFBjZlELFIdKbBvY+pstiQKBgFr0
22
- 2ltZ3Q1IrihbphPcqRMzdRvNAM1gyaNRap6TLIN6MET7L0ZzOTai6ka/REVPL3j0
23
- dovIjV0Eg1TWuXCYwVjGau9J6CfZMJPlMiGvmx3/QGpDc76RMFJIlhYjerbC8g7Y
24
- yOiOmm/ZYDJibWLv27SIV+hQP2CCZ3eE46iqm8zpAoGAarH1aFv2H+R+WqD0aLx1
25
- Wj00h/0JNxyRHYn/1VMACOYIMuEimgxGv1oJ5ZlaGKF6Cmdr6Mf0ZvbDmdcx4D3/
26
- XacoDafKhDvpouHuEhJhzM722/E444nwBItDekKIsPCNh42R9GnISTknPbTmYGk5
27
- QXmgyFFqJfk+vnhmbCuTsjo=
28
- -----END PRIVATE KEY-----
@@ -1,27 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIEgDCCAuigAwIBAgIQEWt9iwh3lSSVV3g2zYfhWzANBgkqhkiG9w0BAQsFADCB
3
- oTEeMBwGA1UEChMVbWtjZXJ0IGRldmVsb3BtZW50IENBMTswOQYDVQQLDDJndHNh
4
- bHZhQFNhbHZhZG9ycy1NYWNCb29rLVByby5sb2NhbCAoU2FsdmFkb3IgVG9qKTFC
5
- MEAGA1UEAww5bWtjZXJ0IGd0c2FsdmFAU2FsdmFkb3JzLU1hY0Jvb2stUHJvLmxv
6
- Y2FsIChTYWx2YWRvciBUb2opMB4XDTI1MTAwNzE3MjgwMFoXDTI4MDEwNzE3Mjgw
7
- MFowZjEnMCUGA1UEChMebWtjZXJ0IGRldmVsb3BtZW50IGNlcnRpZmljYXRlMTsw
8
- OQYDVQQLDDJndHNhbHZhQFNhbHZhZG9ycy1NYWNCb29rLVByby5sb2NhbCAoU2Fs
9
- dmFkb3IgVG9qKTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANmqtYMs
10
- mqBxqPDfwbLuOohu1CZuL5UYXDl/Rz24nt+2qbaWPl76NJFZl8p4vVPd/FYz9CFf
11
- jzRrYVi80mroElP4a/oVCDbY4NEKR9iKnSe7KH74ETptBTVMH0juUOi9de2Qc03O
12
- wEPr3MPOqPj4E1x4ddAqYy5SdmtFaGye8CuevPCp2QVjyS8S2IbF0n8GmMnIqXBh
13
- 18hg9zF0BkNpN458eyPq/1GE1fCBmdhGINprTY81SFJX+zP9fbZCuwOp787UgP5J
14
- w13QuZ1vqxmCB5kMv6P0/ZFuOZnp4uXEDfKpg7iOTG9fLZ0raEaW/m5P+LodqKd9
15
- vnuJWJ+82xO7FfECAwEAAaNuMGwwDgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoG
16
- CCsGAQUFBwMBMB8GA1UdIwQYMBaAFNwCpG72rRYTLtS+QPMs57rv+XlnMCQGA1Ud
17
- EQQdMBuCGXN1cHBvcnR3ZWIuZGV2LnNveWZyaS5jb20wDQYJKoZIhvcNAQELBQAD
18
- ggGBAANLcZsvqyarK1qpwLIJHtYwzOrtqGI7+hE7P4kjUciZq4c0VDcCUP23Ydxv
19
- ABd1BDFv25iWA7XwkuRFd2I71b8KntZEjVa9eLxkREOLP7aJxUzJoqWFMTwQo5m6
20
- 8Va9iKinUMAWcPUbPh5gVFWaehkn9RGDD3/Ijnmw2lSvuOL7xPUDf/M93HkfCUSz
21
- Oe0TrWgqPufHZRniunuP/TfA1499hRa2YWqlC6efOioCKRySs9V6At88RQaMyDjJ
22
- G9v3k4s4nLAmr0oDKOwi5SiHx0kD+mBSEWKu3/+1Pxr9WJdt6wK5h+oIId648rpr
23
- IdRsvF4zCoToqsbTEvwHofbwW9RVi9t5O/1gDeEc8FI7li6O5S6yJHkTaZD1YFN/
24
- iA44HiIN4cfca8A7JIcEa2A0+3lfNTUxmz/HBi2HrXoJYkaWt7IaxPpcDSEEPR59
25
- RWWvBPTRhMF65her2db+EBJtpnUJEDXO/3ftgr/JuBXh4Hxk16vVm+fYOq/yOLHE
26
- YGWLpg==
27
- -----END CERTIFICATE-----