dmencu 3.2.3 → 3.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/client/client/client.js +2 -2
  2. package/dist/client/unlogged/bypass-formulario.d.ts +5 -0
  3. package/dist/client/unlogged/bypass-formulario.js +58 -1
  4. package/dist/client/unlogged/redux-formulario.d.ts +44 -2
  5. package/dist/client/unlogged/redux-formulario.js +44 -4
  6. package/dist/client/unlogged/render-formulario.d.ts +6 -0
  7. package/dist/client/unlogged/render-formulario.js +205 -14
  8. package/dist/client/unlogged/render-formulario.tsx +252 -18
  9. package/dist/client/unlogged/render-general.d.ts +8 -0
  10. package/dist/client/unlogged/render-general.js +29 -2
  11. package/dist/client/unlogged/render-general.tsx +30 -0
  12. package/dist/client/unlogged/tipos.d.ts +7 -2
  13. package/dist/client/unlogged/tipos.js +1 -1
  14. package/dist/server/server/app-dmencu.js +2 -2
  15. package/dist/server/server/procedures-dmencu.js +6 -4
  16. package/dist/server/server/table-tareas_tem_fin_campo.js +13 -3
  17. package/dist/server/unlogged/tipos.d.ts +7 -2
  18. package/dist/server/unlogged/tipos.js +1 -1
  19. package/dist/unlogged/unlogged/bypass-formulario.d.ts +5 -0
  20. package/dist/unlogged/unlogged/bypass-formulario.js +58 -1
  21. package/dist/unlogged/unlogged/redux-formulario.d.ts +44 -2
  22. package/dist/unlogged/unlogged/redux-formulario.js +44 -4
  23. package/dist/unlogged/unlogged/render-formulario.d.ts +6 -0
  24. package/dist/unlogged/unlogged/render-formulario.js +205 -14
  25. package/dist/unlogged/unlogged/render-formulario.tsx +252 -18
  26. package/dist/unlogged/unlogged/render-general.d.ts +8 -0
  27. package/dist/unlogged/unlogged/render-general.js +29 -2
  28. package/dist/unlogged/unlogged/render-general.tsx +30 -0
  29. package/dist/unlogged/unlogged/tipos.d.ts +7 -2
  30. package/dist/unlogged/unlogged/tipos.js +1 -1
  31. package/package.json +1 -1
@@ -8,6 +8,9 @@ import {
8
8
  materialIoIconsSvgPath,
9
9
  useOnlineStatus,
10
10
  RenderizadorJSON,
11
+ fechaReferencia,
12
+ mesReferencia,
13
+ obtenerTextoParentesco,
11
14
  } from "./render-general";
12
15
  import {
13
16
  Bloque, BotonFormulario,
@@ -25,6 +28,8 @@ import {
25
28
  iterator, empty, ConfiguracionHabilitarBotonFormulario,
26
29
  PMatriz,
27
30
  ModoDM,
31
+ IdComodin,
32
+ IdSemana,
28
33
  } from "./tipos";
29
34
  import {
30
35
  accion_abrir_formulario,
@@ -42,14 +47,19 @@ import {
42
47
  respuestasForPk,
43
48
  setCalcularVariables,
44
49
  setDatosByPass,
45
- setEstructura
50
+ setEstructura,
51
+ setCalcularComodines,
52
+ suscribirCambioVariable,
53
+ ListenerCambioVariable
46
54
  } from "./bypass-formulario"
47
55
  import {
56
+ comodinesIniciales,
48
57
  crearStoreFormulario, dispatchers,
58
+ getStoreFormulario,
49
59
  gotoConsistir,
50
60
  } from "./redux-formulario";
51
- import { useState, useEffect } from "react";
52
- import { useSelector, useDispatch } from "react-redux";
61
+ import { useState, useEffect, useMemo } from "react";
62
+ import { useSelector, useDispatch, shallowEqual } from "react-redux";
53
63
  import { strict as likeAr } from "like-ar";
54
64
  import { sleep, coalesce, datetime } from "best-globals";
55
65
  import { unexpected } from "cast-error";
@@ -103,13 +113,178 @@ function breakeableText(text: string | null): string | null;
103
113
  function breakeableText(text: string | null, diccionario?: { [clave: string]: React.ReactNode }) {
104
114
  if (typeof text != "string") return null;
105
115
  text = text.replace(/\//g, "/\u2063").replace(/\/\u2063(\w)\b/g, '/$1');
106
- text = text.replace(/___*/g, (todo) => `[${todo}]`).replace(/\@\w+\@/g, (todo) => `[${todo}]`);
116
+ text = text.replace(/___*/g, (todo) => `[${todo}]`).replace(/\@#?[\w-]+@/g, (todo) => `[${todo}]`);
107
117
  if (!diccionario || true) return text;
108
118
  /*
109
119
  return <span>{partes.map((parte:string, i:number) => <span style={i%2==1?{textDecoration:"underline"}:{}}> {parte+" "} </span>)}</span>
110
120
  */
111
121
  }
112
122
 
123
+ export const BreakeableText = React.memo(function BreakeableText(props: {
124
+ text: string | null | undefined,
125
+ className?: string,
126
+ style?: React.CSSProperties,
127
+ forPk?: ForPk,
128
+ }) {
129
+ const { text, className, style } = props;
130
+
131
+ // Comodines clásicos presentes en el texto (ej: @resps1@ -> "resps1")
132
+ const comodinesInteres = useMemo(() => {
133
+ if (typeof text !== "string" || !text.includes('@')) return [];
134
+ const matches = text.match(/@([a-zA-Z0-9_-]+)@/g);
135
+ if (!matches) return [];
136
+ const ids: IdComodin[] = [];
137
+ for (let i = 0; i < matches.length; i++) {
138
+ const m = matches[i];
139
+ if (!m.startsWith('@#')) {
140
+ const id = m.slice(1, -1) as IdComodin;
141
+ if (ids.indexOf(id) === -1) {
142
+ ids.push(id);
143
+ }
144
+ }
145
+ }
146
+ return ids;
147
+ }, [text]);
148
+
149
+ // Selector granular con shallowEqual: sólo suscribe y re-evalúa si cambian SUS comodines
150
+ const comodinesValores = useSelector((state: CasoState) => {
151
+ if (comodinesInteres.length === 0) return null;
152
+ const storeComodines = state?.opciones?.comodines || comodinesIniciales;
153
+ const resultado: { [id: string]: string } = {};
154
+ for (let i = 0; i < comodinesInteres.length; i++) {
155
+ const id = comodinesInteres[i];
156
+ resultado[id] = storeComodines[id] ?? comodinesIniciales[id] ?? '';
157
+ }
158
+ return resultado;
159
+ }, shallowEqual);
160
+
161
+ const reduxForPk = useSelector((state: CasoState) => state?.opciones?.forPk);
162
+ const forPk = props.forPk || reduxForPk;
163
+
164
+ // Variable de estado que se actualiza cada vez que llega un cambio de una variable de interés
165
+ const [valoresVariables, setValoresVariables] = useState<{ [nombreVariable: string]: any }>({});
166
+
167
+ // Variables de interés: el nombre de variable indicado después de # dentro de los arrobas (ej: @#edad@ -> "edad")
168
+ const variablesInteres = useMemo(() => {
169
+ if (typeof text !== "string") return [];
170
+ const matches = text.match(/@#([^@]+)@/g);
171
+ if (!matches) return [];
172
+ const vars: string[] = [];
173
+ for (let i = 0; i < matches.length; i++) {
174
+ const m = matches[i];
175
+ const match = m.match(/^@#([\w-]+)@$/);
176
+ if (match) {
177
+ const varName = match[1];
178
+ if (vars.indexOf(varName) === -1) {
179
+ vars.push(varName);
180
+ }
181
+ }
182
+ }
183
+ return vars;
184
+ }, [text]);
185
+
186
+ useEffect(() => {
187
+ if (!text || variablesInteres.length === 0) return;
188
+
189
+ const listener: ListenerCambioVariable = (varModificada, nuevoValor, _forPk, respuestasAumentadas) => {
190
+ let huboCambio = false;
191
+ const nuevosValores: { [k: string]: any } = {};
192
+
193
+ if (respuestasAumentadas) {
194
+ for (let i = 0; i < variablesInteres.length; i++) {
195
+ const varName = variablesInteres[i];
196
+ if (varName in respuestasAumentadas) {
197
+ const val = respuestasAumentadas[varName as IdVariable];
198
+ nuevosValores[varName] = (val != null && val !== '') ? String(val) : '........';
199
+ huboCambio = true;
200
+ }
201
+ }
202
+ }
203
+ if (!huboCambio && variablesInteres.indexOf(varModificada) !== -1) {
204
+ nuevosValores[varModificada] = (nuevoValor != null && nuevoValor !== '') ? String(nuevoValor) : '........';
205
+ huboCambio = true;
206
+ }
207
+
208
+ if (huboCambio) {
209
+ setValoresVariables(prev => {
210
+ const next: { [k: string]: any } = {};
211
+ for (const k in prev) {
212
+ next[k] = prev[k];
213
+ }
214
+ for (const k in nuevosValores) {
215
+ next[k] = nuevosValores[k];
216
+ }
217
+ return next;
218
+ });
219
+ }
220
+ };
221
+
222
+ const desuscribir = suscribirCambioVariable(listener, variablesInteres);
223
+ return () => {
224
+ desuscribir();
225
+ };
226
+ }, [text, variablesInteres]);
227
+
228
+ if (typeof text !== "string") return null;
229
+
230
+ let procesado = text.replace(/\//g, "/\u2063").replace(/\/\u2063(\w)\b/g, '/$1');
231
+ procesado = procesado.replace(/___*/g, (todo) => `[${todo}]`);
232
+
233
+ const partes = procesado.split(/(@#?[\w-]+@)/g);
234
+ const contenido = partes.map((parte, index) => {
235
+ const match = parte.match(/^@(#?)([\w-]+)@$/);
236
+ if (match) {
237
+ const tieneHash = match[1] === '#';
238
+ const id = match[2];
239
+
240
+ let valor: any = undefined;
241
+
242
+ // 1. Si es variable con #, buscar el valor de la variable indicada después de # en el estado del listener (actualizado desde respuestasAumentadas)
243
+ if (tieneHash) {
244
+ if (valoresVariables[id] !== undefined) {
245
+ valor = valoresVariables[id];
246
+ }
247
+ }
248
+
249
+ // 2. Si tiene # y aún no está definido, buscar directamente en respuestasAumentadas
250
+ if (valor === undefined && tieneHash && forPk) {
251
+ try {
252
+ const { respuestasAumentadas } = respuestasForPk(forPk, true);
253
+ const val = respuestasAumentadas?.[id as IdVariable];
254
+ if (val != null && val !== '') {
255
+ valor = String(val);
256
+ }
257
+ } catch {
258
+ // Ignorar error si no se pudo acceder a respuestas
259
+ }
260
+ }
261
+
262
+ // 3. Buscar en comodines (Redux granular o comodinesIniciales)
263
+ if (valor === undefined) {
264
+ valor = comodinesValores ? comodinesValores[id] : comodinesIniciales[id as IdComodin];
265
+ }
266
+
267
+ if (valor !== undefined && valor !== null && valor !== '') {
268
+ return valor;
269
+ }
270
+ if (tieneHash && (valor === '' || valor === null)) {
271
+ return '........';
272
+ }
273
+ if (valor !== undefined && valor !== null) {
274
+ return valor;
275
+ }
276
+ return (
277
+ <span key={index} style={{ color: 'red' }}>
278
+ {`No se encontró ${parte}`}
279
+ </span>
280
+ );
281
+ }
282
+ return parte;
283
+ });
284
+
285
+ return <span className={className} style={style}>{contenido}</span>;
286
+ });
287
+
113
288
  export function getBFVarNames(salto: string | null) {
114
289
  const armoNomSalto = salto?.substring(0, 2) == 'F:' ? salto.slice(2) : salto;
115
290
  return {
@@ -175,9 +350,14 @@ export const Button = ({ variant, onClick, disabled, children, className, color,
175
350
 
176
351
  const styleToCss = (style: React.CSSProperties | string | undefined): string | undefined => {
177
352
  if (typeof style === 'string' || style == null) return style;
178
- return Object.entries(style).map(([k, v]) =>
179
- `${k.replace(/[A-Z]/g, m => "-" + m.toLowerCase())}:${v}`
180
- ).join(';');
353
+ const res: string[] = [];
354
+ for (const k in style) {
355
+ const v = (style as any)[k];
356
+ if (v != null) {
357
+ res.push(`${k.replace(/[A-Z]/g, (m: string) => "-" + m.toLowerCase())}:${v}`);
358
+ }
359
+ }
360
+ return res.join(';');
181
361
  }
182
362
 
183
363
  const Button2 = ({ variant, onClick, disabled, children, className, color, size, style, ...other }: {
@@ -413,9 +593,9 @@ function OpcionDespliegue(props: { casillero: Opcion, valorOpcion: number, varia
413
593
  {casillero.ver_id || casillero.casillero}
414
594
  </Grid>
415
595
  <Grid className="opcion-texto">
416
- <Typography debe-leer={casillero.leer ? 'SI' : casillero.leer === false ? 'NO' : props.leer ? 'SI' : 'NO'}>{breakeableText(casillero.nombre)}</Typography>
596
+ <Typography debe-leer={casillero.leer ? 'SI' : casillero.leer === false ? 'NO' : props.leer ? 'SI' : 'NO'}><BreakeableText text={casillero.nombre} /></Typography>
417
597
  {casillero.aclaracion ?
418
- <Typography className='aclaracion'>{breakeableText(casillero.aclaracion)}</Typography>
598
+ <Typography className='aclaracion'><BreakeableText text={casillero.aclaracion} /></Typography>
419
599
  : null}
420
600
  </Grid>
421
601
  </Grid>
@@ -592,7 +772,7 @@ function EncabezadoDespliegue(props: {
592
772
  </div>
593
773
  </div>
594
774
  <div className="nombre-div">
595
- <div className="nombre">{breakeableText(casillero.nombre)}
775
+ <div className="nombre"><BreakeableText text={casillero.nombre} />
596
776
  {casillero.especial?.gps ?
597
777
  <span>
598
778
  <Button color="primary" variant="outlined" style={{ marginLeft: '10px' }} onClick={(_event) => {
@@ -628,7 +808,7 @@ function EncabezadoDespliegue(props: {
628
808
  {casillero.salto && casillero.tipoc == 'FILTRO' ?
629
809
  <SaltoDespliegue casillero={casillero} prefijo={breakeableText(casillero.aclaracion)!} />
630
810
  :
631
- breakeableText(casillero.aclaracion)
811
+ <BreakeableText text={casillero.aclaracion} />
632
812
  }
633
813
  </div>
634
814
  : null}
@@ -854,8 +1034,6 @@ function PreguntaDespliegue(props: {
854
1034
  paraPMatriz?: true
855
1035
  }) {
856
1036
  var { pregunta } = props;
857
- const dispatch = useDispatch();
858
- var estado: EstadoVariable;
859
1037
  var id = `pregunta-${pregunta.id_casillero}`
860
1038
  registrarElemento({
861
1039
  id,
@@ -1930,11 +2108,11 @@ function BotonVolverEnDiv({ id }: { id: string }) {
1930
2108
  }
1931
2109
 
1932
2110
  function FormularioDespliegue(props: { forPk: ForPk }) {
1933
- var forPk = props.forPk;
2111
+ const dispatch = useDispatch();
2112
+ const forPk = props.forPk;
1934
2113
  var { formulario, modoDespliegue, opciones }
1935
- = useSelectorVivienda(props.forPk);
2114
+ = useSelectorVivienda(forPk);
1936
2115
  var soloLectura = getDatosByPass().soloLectura;
1937
- const dispatch = useDispatch();
1938
2116
  var esVolver = opciones.pilaForPk.length > 0;
1939
2117
  useEffect(() => {
1940
2118
  var controlScroll = () => {
@@ -1955,12 +2133,13 @@ function FormularioDespliegue(props: { forPk: ForPk }) {
1955
2133
  );
1956
2134
  }
1957
2135
  }
1958
- const idCaso = likeAr(props.forPk).find((_, k) => {
2136
+ const idCaso = likeAr(forPk).find((_, k) => {
1959
2137
  return k != 'formulario'
1960
2138
  })?.toString();
1961
2139
  window.document.title = getEstructura().operativo + '- ' + idCaso;
1962
2140
  window.addEventListener('scroll', controlScroll);
1963
2141
  controlScroll();
2142
+ calcularComodines(forPk);
1964
2143
  return () => {
1965
2144
  window.removeEventListener('scroll', controlScroll);
1966
2145
  }
@@ -2838,7 +3017,7 @@ export async function desplegarFormularioActual(
2838
3017
  opts: { forPkRaiz?: ForPkRaiz } = {}
2839
3018
  ) {
2840
3019
  await formRenderer.cargarMotor();
2841
- const store = await crearStoreFormulario(opts)
3020
+ const store = await crearStoreFormulario(opts);
2842
3021
  try {
2843
3022
  await loadCSS(BOOTSTRAP_5_1_3_SRC);
2844
3023
  } catch (err) {
@@ -2976,6 +3155,61 @@ setCalcularVariables((respuestasRaiz: RespuestasRaiz, forPk: ForPk) => {
2976
3155
  window.addEventListener('load', function () {
2977
3156
  loadInstance()
2978
3157
  })
3158
+
3159
+ function calcularComodines(forPk: ForPk) {
3160
+ const estructura = getEstructura();
3161
+ const infoHdr = getDatosByPass().informacionHdr[forPk[estructura.pkAgregadaUaPpal]];
3162
+ const semanaNumero = infoHdr?.tem?.semana;
3163
+ const semanaObj = semanaNumero != null ? estructura.semanas?.[semanaNumero as IdSemana] : null;
3164
+ const { respuestasAumentadas } = respuestasForPk(forPk, true);
3165
+ const rangoFecha = (desde?: string | null, hasta?: string | null) =>
3166
+ (desde && hasta) ? `${fechaReferencia(desde)} a ${fechaReferencia(hasta)}` : null;
3167
+ const semRef = rangoFecha(semanaObj?.semana_referencia_desde, semanaObj?.semana_referencia_hasta);
3168
+ const d30Ref = rangoFecha(semanaObj?.d30_referencia_desde, semanaObj?.d30_referencia_hasta);
3169
+ const personasArray = Array.isArray(respuestasAumentadas?.['personas' as IdUnidadAnalisis])
3170
+ ? respuestasAumentadas['personas' as IdUnidadAnalisis] as any[] : [];
3171
+ const buscarPersona = (num?: any) =>
3172
+ num != null ? personasArray.find((p: any, idx: number) => (p?.persona != null ? Number(p.persona) === Number(num) : (idx + 1) === Number(num))) : null;
3173
+ const textoParentesco = (p: any) => {
3174
+ const p4 = p?.p4 ?? p?.p4r;
3175
+ return p4 != null ? obtenerTextoParentesco(Number(p4), estructura.operativo) : null;
3176
+ };
3177
+ const esEntrea = respuestasAumentadas?.['entrea' as IdVariable] == 1;
3178
+ const nombrer = respuestasAumentadas?.['nombrer' as IdVariable];
3179
+ const personaResp = esEntrea ? buscarPersona(respuestasAumentadas?.['respond' as IdVariable]) : null;
3180
+ const personaRespi = esEntrea ? buscarPersona(respuestasAumentadas?.['cr_num_miembro' as IdVariable]) : null;
3181
+ const jefe = esEntrea ? buscarPersona(1) : null;
3182
+ const parentResp = textoParentesco(personaResp);
3183
+ const parentRespi = textoParentesco(personaRespi);
3184
+ const totalH = respuestasAumentadas?.['total_h' as IdVariable] ?? respuestasAumentadas?.['total_h_sup' as IdVariable];
3185
+ const fRealiz = respuestasAumentadas?.['f_realiz_o' as IdVariable];
3186
+ const comodinesCalculados: Record<IdComodin, string> = {
3187
+ ...comodinesIniciales,
3188
+ canti_hogares: totalH != null ? String(totalH) : '........',
3189
+ frealiz: fRealiz != null ? String(fRealiz) : '........',
3190
+ resps1: (esEntrea && nombrer) ? String(nombrer) : '........',
3191
+ parents1: (esEntrea && parentResp) ? parentResp : '........',
3192
+ respi1: (esEntrea && personaRespi?.nombre) ? String(personaRespi.nombre) : '........',
3193
+ parenti1: (esEntrea && parentRespi) ? parentRespi : '........',
3194
+ njefe: (esEntrea && jefe?.nombre) ? String(jefe.nombre) : '........',
3195
+ ...(semRef && { SEM_REF: semRef }),
3196
+ ...(d30Ref && { D30_REF: d30Ref }),
3197
+ ...(semanaObj?.mes_referencia && { MES_REF: mesReferencia(semanaObj.mes_referencia) }),
3198
+ ...(semanaNumero != null && { SEM_NUM: String(semanaNumero) }),
3199
+ };
3200
+ const store = getStoreFormulario();
3201
+ if (!store) return;
3202
+ const actual = (store.getState() as CasoState)?.opciones?.comodines || comodinesIniciales;
3203
+ const cambio = Object.keys(comodinesCalculados).some(
3204
+ (key) => actual[key as IdComodin] !== comodinesCalculados[key as IdComodin]
3205
+ );
3206
+ if (cambio) {
3207
+ store.dispatch(dispatchers.CAMBIAR_COMODINES(comodinesCalculados));
3208
+ }
3209
+ }
3210
+
3211
+ setCalcularComodines(calcularComodines);
3212
+
2979
3213
  //FIN CONTROL PESTAÑAS
2980
3214
 
2981
3215
  function loadCSS(cssURL: string, id?: string): Promise<void> {
@@ -144,4 +144,12 @@ export declare function RenderPrincipal<T, T2 extends Action>(props: {
144
144
  mensajeRetorno: string;
145
145
  children: React.ReactNode;
146
146
  }): React.JSX.Element;
147
+ export declare const nombreMeses: string[];
148
+ export declare const nombreDias: string[];
149
+ export declare function crearFechaDesdeTextoISO(texto: string): Date;
150
+ export declare function mesReferencia(fecha: string): string;
151
+ export declare function fechaReferencia(fecha: string): string;
152
+ export declare const textoParentesco: string[];
153
+ export declare const textoParentescoVcm: string[];
154
+ export declare function obtenerTextoParentesco(p4: number | null | undefined, operativo?: string): string;
147
155
  export {};
@@ -9,13 +9,17 @@
9
9
  })(function (require, exports) {
10
10
  "use strict";
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.RenderAndCaptureError = exports.RenderizadorJSON = exports.scrollToBottom = exports.scrollToTop = exports.ICON = exports.materialIoIconsSvgPath = void 0;
12
+ exports.textoParentescoVcm = exports.textoParentesco = exports.nombreDias = exports.nombreMeses = exports.RenderAndCaptureError = exports.RenderizadorJSON = exports.scrollToBottom = exports.scrollToTop = exports.ICON = exports.materialIoIconsSvgPath = void 0;
13
13
  exports.adaptarTipoVarCasillero = adaptarTipoVarCasillero;
14
14
  exports.ScrollTop = ScrollTop;
15
15
  exports.focusToId = focusToId;
16
16
  exports.ReseterForm = ReseterForm;
17
17
  exports.useOnlineStatus = useOnlineStatus;
18
18
  exports.RenderPrincipal = RenderPrincipal;
19
+ exports.crearFechaDesdeTextoISO = crearFechaDesdeTextoISO;
20
+ exports.mesReferencia = mesReferencia;
21
+ exports.fechaReferencia = fechaReferencia;
22
+ exports.obtenerTextoParentesco = obtenerTextoParentesco;
19
23
  const React = require("react");
20
24
  const react_1 = require("react");
21
25
  const react_redux_1 = require("react-redux");
@@ -250,5 +254,28 @@
250
254
  React.createElement(material_1.CssBaseline, null),
251
255
  props.children))));
252
256
  }
257
+ exports.nombreMeses = ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'];
258
+ exports.nombreDias = ['domingo', 'lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado'];
259
+ function crearFechaDesdeTextoISO(texto) {
260
+ var partes = texto.split(/[/-]/g);
261
+ return new Date(Number(partes[0]), Number(partes[1]) - 1, Number(partes[2]));
262
+ }
263
+ function mesReferencia(fecha) {
264
+ var d = crearFechaDesdeTextoISO(fecha);
265
+ return exports.nombreMeses[d.getMonth()];
266
+ }
267
+ function fechaReferencia(fecha) {
268
+ var d = crearFechaDesdeTextoISO(fecha);
269
+ return `${exports.nombreDias[d.getDay()]} ${d.getDate()} de ${mesReferencia(fecha)}`;
270
+ }
271
+ exports.textoParentesco = ['Jefe/a', 'Cónyuge/pareja', 'Hijo/a', 'Hijastro/a', 'Yerno o nuera', 'Nieto/a', 'Padre/madre/suegro/a', 'Hermano/a', 'Cuñado/a', 'Sobrino/a', 'Abuelo/a', 'Otro familiar', 'Otro no familiar'];
272
+ exports.textoParentescoVcm = ['Respondente', 'Cónyuge/pareja', 'Hijo/a', 'Hijastro/a', 'Yerno o nuera', 'Nieto/a', 'Padre/madre/suegro/a', 'Hermano/a', 'Cuñado/a', 'Sobrino/a', 'Abuelo/a', 'Otro familiar', 'Otro no familiar'];
273
+ function obtenerTextoParentesco(p4, operativo) {
274
+ if (p4 == null || p4 < 1)
275
+ return '........';
276
+ const esVcm = operativo ? operativo.startsWith('vcm') : false;
277
+ const lista = esVcm ? exports.textoParentescoVcm : exports.textoParentesco;
278
+ return lista[p4 - 1] || '........';
279
+ }
253
280
  });
254
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWdlbmVyYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvcmVuZGVyLWdlbmVyYWwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQTBFQSwwREFXQztJQVdELDhCQWlCQztJQU9ELDhCQWdCQztJQTBHRCxrQ0FVQztJQThDRCwwQ0FjQztJQUVELDBDQVdDO0lBclVELCtCQUErQjtJQUMvQixpQ0FBNEM7SUFDNUMsNkNBQW9EO0lBQ3BELGtDQUFrQztJQUVsQywyQ0FBc0M7SUFFdEMsNENBSXVCO0lBSXZCLHFEQUFxRDtJQUN4QyxRQUFBLHNCQUFzQixHQUFHO1FBQ2xDLEdBQUcsRUFBRSxxQ0FBcUM7UUFDMUMsU0FBUyxFQUFFLDhEQUE4RDtRQUN6RSxVQUFVLEVBQUUsZ09BQWdPO1FBQzVPLGNBQWMsRUFBRSwwTEFBMEw7UUFDMU0sS0FBSyxFQUFFLG1EQUFtRDtRQUMxRCw0QkFBNEIsRUFBRSw0RkFBNEY7UUFDMUgsZ0JBQWdCLEVBQUUsdUpBQXVKO1FBQ3pLLFdBQVcsRUFBRSx3S0FBd0s7UUFDckwsWUFBWSxFQUFFLDBLQUEwSztRQUN4TCxLQUFLLEVBQUUsdUdBQXVHO1FBQzlHLEtBQUssRUFBRSx1R0FBdUc7UUFDOUcsU0FBUyxFQUFDLDRYQUE0WDtRQUN0WSxJQUFJLEVBQUUsNEZBQTRGO1FBQ2xHLE1BQU0sRUFBRSxxSkFBcUo7UUFDN0osTUFBTSxFQUFFLCtFQUErRTtRQUN2RixhQUFhLEVBQUUsNk1BQTZNO1FBQzVOLGFBQWEsRUFBRSx5RkFBeUY7UUFDeEcsV0FBVyxFQUFFLGdJQUFnSTtRQUM3SSxZQUFZLEVBQUUsbVdBQW1XO1FBQ2pYLFNBQVMsRUFBRSxzS0FBc0s7UUFDakwsVUFBVSxFQUFFLGdEQUFnRDtRQUM1RCxVQUFVLEVBQUUsOENBQThDO1FBQzFELGlCQUFpQixFQUFFLGtHQUFrRztRQUNySCxPQUFPLEVBQUUseUJBQXlCO1FBQ2xDLGVBQWUs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Q2QsS0FBSyxDQUFDLFFBQVEsQ0FDSyxDQUNaLENBQ1QsQ0FDSSxDQUFBO0lBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBQcm92aWRlciwgdXNlRGlzcGF0Y2ggfSBmcm9tIFwicmVhY3QtcmVkdXhcIjtcclxuaW1wb3J0ICogYXMgbGlrZUFyIGZyb20gXCJsaWtlLWFyXCI7XHJcblxyXG5pbXBvcnQgeyBleHBlY3RlZCB9IGZyb20gXCJjYXN0LWVycm9yXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgQ3NzQmFzZWxpbmUsIFN2Z0ljb24sIFRoZW1lUHJvdmlkZXIsIFR5cG9ncmFwaHksIFpvb20sIHVzZVNjcm9sbFRyaWdnZXIsIGNyZWF0ZVRoZW1lLFxyXG4gICAgTWVudSxcclxuICAgIEJ1dHRvblxyXG59IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XHJcbmltcG9ydCB7IFN0b3JlLCBBY3Rpb24gfSBmcm9tIFwicmVkdXhcIjtcclxuaW1wb3J0IHsgVGlwb1ZhcmlhYmxlcyB9IGZyb20gXCIuL3RpcG9zXCI7XHJcblxyXG4vLyBodHRwczovL21hdGVyaWFsLXVpLmNvbS9jb21wb25lbnRzL21hdGVyaWFsLWljb25zL1xyXG5leHBvcnQgY29uc3QgbWF0ZXJpYWxJb0ljb25zU3ZnUGF0aCA9IHtcclxuICAgIEFkZDogXCJNMTkgMTNoLTZ2NmgtMnYtNkg1di0yaDZWNWgydjZoNnYyelwiLFxyXG4gICAgQXJyb3dCYWNrOiBcIk0yMCAxMUg3LjgzbDUuNTktNS41OUwxMiA0bC04IDggOCA4IDEuNDEtMS40MUw3LjgzIDEzSDIwdi0yelwiLFxyXG4gICAgQXNzaWdubWVudDogXCJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTIgMTRIN3YtMmg3djJ6bTMtNEg3di0yaDEwdjJ6bTAtNEg3VjdoMTB2MnpcIixcclxuICAgIEJ1c2luZXNzQ2VudGVyOiBcIk0xMCAxNnYtMUgzLjAxTDMgMTljMCAxLjExLjg5IDIgMiAyaDE0YzEuMTEgMCAyLS44OSAyLTJ2LTRoLTd2MXptMTAtOWgtNC4wMVY1bC0yLTJoLTRsLTIgMnYySDRjLTEuMSAwLTIgLjktMiAydjNjMCAxLjExLjg5IDIgMiAyaDZ2LTJoNHYyaDZjMS4xIDAgMi0uOSAyLTJWOWMwLTEuMS0uOS0yLTItMm0tNiAwaC00VjVoNHpcIixcclxuICAgIENoZWNrOiBcIk05IDE2LjE3TDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXpcIixcclxuICAgIENoZWNrQm94T3V0bGluZUJsYW5rT3V0bGluZWQ6IFwiTTE5IDV2MTRINVY1aDE0bTAtMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6XCIsXHJcbiAgICBDaGVja0JveE91dGxpbmVkOiBcIk0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg1VjVoMTR2MTR6TTE3Ljk5IDlsLTEuNDEtMS40Mi02LjU5IDYuNTktMi41OC0yLjU3LTEuNDIgMS40MSA0IDMuOTl6XCIsXHJcbiAgICBDaGV2cm9uTGVmdDogXCJNMTQuNzEgNi43MWEuOTk1OS45OTU5IDAgMDAtMS40MSAwTDguNzEgMTEuM2MtLjM5LjM5LS4zOSAxLjAyIDAgMS40MWw0LjU5IDQuNTljLjM5LjM5IDEuMDIuMzkgMS40MSAwIC4zOS0uMzkuMzktMS4wMiAwLTEuNDFMMTAuODMgMTJsMy44OC0zLjg4Yy4zOS0uMzkuMzgtMS4wMyAwLTEuNDF6XCIsXHJcbiAgICBDaGV2cm9uUmlnaHQ6IFwiTTkuMjkgNi43MWMtLjM5LjM5LS4zOSAxLjAyIDAgMS40MUwxMy4xNyAxMmwtMy44OCAzLjg4Yy0uMzkuMzktLjM5IDEuMDIgMCAxLjQxLjM5LjM5IDEuMDIuMzkgMS40MSAwbDQuNTktNC41OWMuMzktLjM5LjM5LTEuMDIgMC0xLjQxTDEwLjcgNi43Yy0uMzgtLjM4LTEuMDItLjM4LTEuNDEuMDF6XCIsXHJcbiAgICBDbGVhcjogXCJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyelwiLFxyXG4gICAgQ2xvc2U6IFwiTTE5IDYuNDFMMTcuNTkgNSAxMiAxMC41OSA2LjQxIDUgNSA2LjQxIDEwLjU5IDEyIDUgMTcuNTkgNi40MSAxOSAxMiAxMy40MSAxNy41OSAxOSAxOSAxNy41OSAxMy40MSAxMnpcIixcclxuICAgIENsb3VkU3luYzpcIk0yMS41IDE0Ljk4Yy0uMDIgMC0uMDMgMC0uMDUuMDFDMjEuMiAxMy4zIDE5Ljc2IDEyIDE4IDEyYy0xLjQgMC0yLjYuODMtMy4xNiAyLjAyQzEzLjI2IDE0LjEgMTIgMTUuNCAxMiAxN2MwIDEuNjYgMS4zNCAzIDMgM2w2LjUtLjAyYzEuMzggMCAyLjUtMS4xMiAyLjUtMi41cy0xLjEyLTIuNS0yLjUtMi41TTEwIDQuMjZ2Mi4wOUM3LjY3IDcuMTggNiA5LjM5IDYgMTJjMCAxLjc3Ljc4IDMuMzQgMiA0LjQ0VjE0aDJ2Nkg0di0yaDIuNzNDNS4wNiAxNi41NCA0IDE0LjQgNCAxMmMwLTMuNzMgMi41NS02Ljg1IDYtNy43NE0yMCA2aC0yLjczYzEuNDMgMS4yNiAyLjQxIDMuMDEgMi42NiA1aC0yLjAyYy0uMjMtMS4zNi0uOTMtMi41NS0xLjkxLTMuNDRWMTBoLTJWNGg2elwiLFxyXG4gICAgQ29kZTogXCJNOS40IDE2LjZMNC44IDEybDQuNi00LjZMOCA2bC02IDYgNiA2IDEuNC0xLjR6bTUuMiAwbDQuNi00LjYtNC42LTQuNkwxNiA2bDYgNi02IDYtMS40LTEuNHpcIixcclxuICAgIENyZWF0ZTogXCJNMyAxNy4yNVYyMWgzLjc1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzIDE3LjI1ek0yMC43MSA3LjA0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTIuMzQtMi4zNGEuOTk1OS45OTU5IDAgMDAtMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3pcIixcclxuICAgIERlbGV0ZTogXCJNNiAxOWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWN0g2djEyek0xOSA0aC0zLjVsLTEtMWgtNWwtMSAxSDV2MmgxNFY0elwiLFxyXG4gICAgRGVsZXRlRm9yZXZlcjogXCJNNiAxOWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWN0g2djEyem0yLjQ2LTcuMTJsMS40MS0xLjQxTDEyIDEyLjU5bDIuMTItMi4xMiAxLjQxIDEuNDFMMTMuNDEgMTRsMi4xMiAyLjEyLTEuNDEgMS40MUwxMiAxNS40MWwtMi4xMiAyLjEyLTEuNDEtMS40MUwxMC41OSAxNGwtMi4xMy0yLjEyek0xNS41IDRsLTEtMWgtNWwtMSAxSDV2MmgxNFY0elwiLFxyXG4gICAgRGVsZXRlT3V0bGluZTogXCJNNiAxOWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWN0g2djEyek04IDloOHYxMEg4Vjl6bTcuNS01bC0xLTFoLTVsLTEgMUg1djJoMTRWNHpcIixcclxuICAgIERlc2NyaXB0aW9uOiBcIk0xNCAySDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAyMGMwIDEuMS44OSAyIDEuOTkgMkgxOGMxLjEgMCAyLS45IDItMlY4bC02LTZ6bTIgMTZIOHYtMmg4djJ6bTAtNEg4di0yaDh2MnptLTMtNVYzLjVMMTguNSA5SDEzelwiLFxyXG4gICAgRW1vamlPYmplY3RzOiBcIk0xMiAzYy0uNDYgMC0uOTMuMDQtMS40LjE0LTIuNzYuNTMtNC45NiAyLjc2LTUuNDggNS41Mi0uNDggMi42MS40OCA1LjAxIDIuMjIgNi41Ni40My4zOC42Ni45MS42NiAxLjQ3VjE5YzAgMS4xLjkgMiAyIDJoLjI4Yy4zNS42Ljk4IDEgMS43MiAxczEuMzgtLjQgMS43Mi0xSDE0YzEuMSAwIDItLjkgMi0ydi0yLjMxYzAtLjU1LjIyLTEuMDkuNjQtMS40NkMxOC4wOSAxMy45NSAxOSAxMi4wOCAxOSAxMGMwLTMuODctMy4xMy03LTctN3ptMiAxNmgtNHYtMWg0djF6bTAtMmgtNHYtMWg0djF6bS0xLjUtNS41OVYxNGgtMXYtMi41OUw5LjY3IDkuNTlsLjcxLS43MUwxMiAxMC41bDEuNjItMS42Mi43MS43MS0xLjgzIDEuODJ6XCIsXHJcbiAgICBFeGl0VG9BcHA6IFwiTTEwLjA5IDE1LjU5TDExLjUgMTdsNS01LTUtNS0xLjQxIDEuNDFMMTIuNjcgMTFIM3YyaDkuNjdsLTIuNTggMi41OXpNMTkgM0g1Yy0xLjExIDAtMiAuOS0yIDJ2NGgyVjVoMTR2MTRINXYtNEgzdjRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpcIixcclxuICAgIEV4cGFuZExlc3M6IFwiTTEyIDhsLTYgNiAxLjQxIDEuNDFMMTIgMTAuODNsNC41OSA0LjU4TDE4IDE0elwiLFxyXG4gICAgRXhwYW5kTW9yZTogXCJNMTYuNTkgOC41OUwxMiAxMy4xNyA3LjQxIDguNTkgNiAxMGw2IDYgNi02elwiLFxyXG4gICAgRm9ybWF0TGluZVNwYWNpbmc6IFwiTTYgN2gyLjVMNSAzLjUgMS41IDdINHYxMEgxLjVMNSAyMC41IDguNSAxN0g2Vjd6bTQtMnYyaDEyVjVIMTB6bTAgMTRoMTJ2LTJIMTB2MnptMC02aDEydi0ySDEwdjJ6XCIsXHJcbiAgICBGb3J3YXJkOiBcIk0xMiA4VjRsOCA4LTggOHYtNEg0Vjh6XCIsXHJcbiAgICBGb3J3YXJkT3V0bGluZWQ6IFwiTTE0IDguODNMMTcuMTcgMTIgMTQgMTUuMTdWMTRINnYtNGg4VjguODNNMTIgNHY0SDR2OGg4djRsOC04LTgtOHpcIixcclxuICAgIEluZm86IFwiTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTVoLTJ2LTZoMnY2em0wLThoLTJWN2gydjJ6XCIsXHJcbiAgICBLZXlib2FyZEFycm93VXA6IFwiTTcuNDEgMTUuNDFMMTIgMTAuODNsNC41OSA0LjU4TDE4IDE0bC02LTYtNiA2elwiLFxyXG4gICAgS2V5Ym9hcmRBcnJvd0Rvd246IFwiTTcuNDEgOC41OUwxMiAxMy4xN2w0LjU5LTQuNThMMTggMTBsLTYgNi02LTYgMS40MS0xLjQxelwiLFxyXG4gICAgTGFiZWw6IFwiTTE3LjYzIDUuODRDMTcuMjcgNS4zMyAxNi42NyA1IDE2IDVMNSA1LjAxQzMuOSA1LjAxIDMgNS45IDMgN3YxMGMwIDEuMS45IDEuOTkgMiAxLjk5TDE2IDE5Yy42NyAwIDEuMjctLjMzIDEuNjMtLjg0TDIyIDEybC00LjM3LTYuMTZ6XCIsXHJcbiAgICBMb2NhbEF0bTogXCJNMTEgMTdoMnYtMWgxYy41NSAwIDEtLjQ1IDEtMXYtM2MwLS41NS0uNDUtMS0xLTFoLTN2LTFoNFY4aC0yVjdoLTJ2MWgtMWMtLjU1IDAtMSAuNDUtMSAxdjNjMCAuNTUuNDUgMSAxIDFoM3YxSDl2MmgydjF6bTktMTNINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMThjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWNmMwLTEuMTEtLjg5LTItMi0yem0wIDE0SDRWNmgxNnYxMnpcIixcclxuICAgIExvY2F0aW9uOiBcIk0xMiAyQzguMTMgMiA1IDUuMTMgNSA5YzAgNS4yNSA3IDEzIDcgMTNzNy03Ljc1IDctMTNjMC0zLjg3LTMuMTMtNy03LTdtMCA5LjVjLTEuMzggMC0yLjUtMS4xMi0yLjUtMi41czEuMTItMi41IDIuNS0yLjUgMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41XCIsXHJcbiAgICBNZW51OiBcIk0zIDE4aDE4di0ySDN2MnptMC01aDE4di0ySDN2MnptMC03djJoMThWNkgzelwiLFxyXG4gICAgTmF2aWdhdGlvbjogXCJNMTIgMkw0LjUgMjAuMjlsLjcxLjcxTDEyIDE4bDYuNzkgMyAuNzEtLjcxelwiLFxyXG4gICAgTmF2aWdhdGlvbkRvd246IFwiTTEyIDIyTDQuNSAzLjcxbC43MSAtLjcxTDEyIDZsNi43OSAtMyAuNzEgLjcxelwiLFxyXG4gICAgUmVmcmVzaDogXCJNMTcuNjUgNi4zNUMxNi4yIDQuOSAxNC4yMSA0IDEyIDRjLTQuNDIgMC03Ljk5IDMuNTgtNy45OSA4czMuNTcgOCA3Ljk5IDhjMy43MyAwIDYuODQtMi41NSA3LjczLTZoLTIuMDhjLS44MiAyLjMzLTMuMDQgNC01LjY1IDQtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNmMxLjY2IDAgMy4xNC42OSA0LjIyIDEuNzhMMTMgMTFoN1Y0elwiLFxyXG4gICAgUmVtb3ZlU2hvcHBpbmdDYXJ0OiBcIk0yMi43MyAyMi43M0wyLjc3IDIuNzcgMiAybC0uNzMtLjczTDAgMi41NGw0LjM5IDQuMzkgMi4yMSA0LjY2LTEuMzUgMi40NWMtLjE2LjI4LS4yNS42MS0uMjUuOTYgMCAxLjEuOSAyIDIgMmg3LjQ2bDEuMzggMS4zOGMtLjUuMzYtLjgzLjk1LS44MyAxLjYyIDAgMS4xLjg5IDIgMS45OSAyIC42NyAwIDEuMjYtLjMzIDEuNjItLjg0TDIxLjQ2IDI0bDEuMjctMS4yN3pNNy40MiAxNWMtLjE0IDAtLjI1LS4xMS0uMjUtLjI1bC4wMy0uMTIuOS0xLjYzaDIuMzZsMiAySDcuNDJ6bTguMTMtMmMuNzUgMCAxLjQxLS40MSAxLjc1LTEuMDNsMy41OC02LjQ5Yy4wOC0uMTQuMTItLjMxLjEyLS40OCAwLS41NS0uNDUtMS0xLTFINi41NGw5LjAxIDl6TTcgMThjLTEuMSAwLTEuOTkuOS0xLjk5IDJTNS45IDIyIDcgMjJzMi0uOSAyLTItLjktMi0yLTJ6XCIsXHJcbiAgICBTYXZlOiBcIk0xNyAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY3bC00LTR6bS01IDE2Yy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zIDMgMS4zNCAzIDMtMS4zNCAzLTMgM3ptMy0xMEg1VjVoMTB2NHpcIixcclxuICAgIFNjaG9vbDogXCJNNSAxMy4xOHY0TDEyIDIxbDctMy44MnYtNEwxMiAxN3pNMTIgMyAxIDlsMTEgNiA5LTQuOTFWMTdoMlY5elwiLFxyXG4gICAgU2VhcmNoOiBcIk0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0elwiLFxyXG4gICAgU2VuZDogXCJNMi4wMSAyMUwyMyAxMiAyLjAxIDMgMiAxMGwxNSAyLTE1IDJ6XCIsXHJcbiAgICBTZXR0aW5nczogXCJNMTUuOTUgMTAuNzhjLjAzLS4yNS4wNS0uNTEuMDUtLjc4cy0uMDItLjUzLS4wNi0uNzhsMS42OS0xLjMyYy4xNS0uMTIuMTktLjM0LjEtLjUxbC0xLjYtMi43N2MtLjEtLjE4LS4zMS0uMjQtLjQ5LS4xOGwtMS45OS44Yy0uNDItLjMyLS44Ni0uNTgtMS4zNS0uNzhMMTIgMi4zNGMtLjAzLS4yLS4yLS4zNC0uNC0uMzRIOC40Yy0uMiAwLS4zNi4xNC0uMzkuMzRsLS4zIDIuMTJjLS40OS4yLS45NC40Ny0xLjM1Ljc4bC0xLjk5LS44Yy0uMTgtLjA3LS4zOSAwLS40OS4xOGwtMS42IDIuNzdjLS4xLjE4LS4wNi4zOS4xLjUxbDEuNjkgMS4zMmMtLjA0LjI1LS4wNy41Mi0uMDcuNzhzLjAyLjUzLjA2Ljc4TDIuMzcgMTIuMWMtLjE1LjEyLS4xOS4zNC0uMS41MWwxLjYgMi43N2MuMS4xOC4zMS4yNC40OS4xOGwxLjk5LS44Yy40Mi4zMi44Ni41OCAxLjM1Ljc4bC4zIDIuMTJjLjA0LjIuMi4zNC40LjM0aDMuMmMuMiAwIC4zNy0uMTQuMzktLjM0bC4zLTIuMTJjLjQ5LS4yLjk0LS40NyAxLjM1LS43OGwxLjk5LjhjLjE4LjA3LjM5IDAgLjQ5LS4xOGwxLjYtMi43N2MuMS0uMTguMDYtLjM5LS4xLS41MWwtMS42Ny0xLjMyek0xMCAxM2MtMS42NSAwLTMtMS4zNS0zLTNzMS4zNS0zIDMtMyAzIDEuMzUgMyAzLTEuMzUgMy0zIDN6XCIsXHJcbiAgICBTeW5jQWx0OiBcIk0yMiA4bC00LTR2M0gzdjJoMTV2M2w0LTR6TTIgMTZsNCA0di0zaDE1di0ySDZ2LTNsLTQgNHpcIixcclxuICAgIFNwb3J0c0VzcG9ydHM6IFwibTIxLjU4IDE2LjA5LTEuMDktNy42NkMyMC4yMSA2LjQ2IDE4LjUyIDUgMTYuNTMgNUg3LjQ3QzUuNDggNSAzLjc5IDYuNDYgMy41MSA4LjQzbC0xLjA5IDcuNjZDMi4yIDE3LjYzIDMuMzkgMTkgNC45NCAxOWMuNjggMCAxLjMyLS4yNyAxLjgtLjc1TDkgMTZoNmwyLjI1IDIuMjVjLjQ4LjQ4IDEuMTMuNzUgMS44Ljc1IDEuNTYgMCAyLjc1LTEuMzcgMi41My0yLjkxTTExIDExSDl2Mkg4di0ySDZ2LTFoMlY4aDF2Mmgyem00LTFjLS41NSAwLTEtLjQ1LTEtMXMuNDUtMSAxLTEgMSAuNDUgMSAxLS40NSAxLTEgMW0yIDNjLS41NSAwLTEtLjQ1LTEtMXMuNDUtMSAxLTEgMSAuNDUgMSAxLS40NSAxLTEgMVwiLFxyXG4gICAgVHJlbmRpbmdGbGF0OiBcIk0yMiAxMmwtNC00djNIM3YyaDE1djN6XCIsXHJcbiAgICBXYXJuaW5nOiBcIk0xIDIxaDIyTDEyIDIgMSAyMXptMTItM2gtMnYtMmgydjJ6bTAtNGgtMnYtNGgydjR6XCIsXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBJQ09OID0gbGlrZUFyKG1hdGVyaWFsSW9JY29uc1N2Z1BhdGgpLm1hcChzdmdUZXh0ID0+ICgpID0+XHJcbiAgICA8U3ZnSWNvbj48cGF0aCBkPXtzdmdUZXh0fSAvPjwvU3ZnSWNvbj5cclxuKS5wbGFpbigpO1xyXG5cclxuZXhwb3J0IHR5cGUgU3R5bGVzID0gUmVhY3QuQ1NTUHJvcGVydGllcztcclxuXHJcbmV4cG9ydCB0eXBlIE9uVXBkYXRlPFQ+ID0gKGRhdGE6IFQpID0+IHZvaWRcclxuXHJcbmV4cG9ydCB0eXBlIElucHV0VHlwZXMgPSAnZGF0ZScgfCAnbnVtYmVyJyB8ICd0ZWwnIHwgJ3RleHQnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFkYXB0YXJUaXBvVmFyQ2FzaWxsZXJvKGNhc2lsbGVyb0RhdGFUeXBlOiBUaXBvVmFyaWFibGVzIHwgJ29wY2lvbmVzJyB8ICdzaV9ubycpOiBJbnB1dFR5cGVzIHtcclxuICAgIGNvbnN0IGFkYXB0ZXI6IHsgW2tleSBpbiBUaXBvVmFyaWFibGVzIHwgJ29wY2lvbmVzJyB8ICdzaV9ubyddOiBJbnB1dFR5cGVzIH0gPSB7XHJcbiAgICAgICAgJ29wY2lvbmVzJzogJ251bWJlcicsXHJcbiAgICAgICAgJ3NpX25vJzogJ251bWJlcicsXHJcbiAgICAgICAgJ251bWVybyc6ICdudW1iZXInLFxyXG4gICAgICAgICdob3JhJzogJ3RlbCcsXHJcbiAgICAgICAgJ2hvcmFzJzogJ251bWJlcicsXHJcbiAgICAgICAgJ3RleHRvJzogJ3RleHQnLFxyXG4gICAgICAgICdmZWNoYSc6ICd0ZXh0J1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFkYXB0ZXJbY2FzaWxsZXJvRGF0YVR5cGVdXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBzY3JvbGxUb1RvcCA9ICgpID0+IHtcclxuICAgIHdpbmRvdy5zY3JvbGwoeyBiZWhhdmlvcjogJ3Ntb290aCcsIHRvcDogMCwgbGVmdDogMCB9KVxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IHNjcm9sbFRvQm90dG9tID0gKCkgPT4ge1xyXG4gICAgd2luZG93LnNjcm9sbCh7IGJlaGF2aW9yOiAnc21vb3RoJywgdG9wOiBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCAtIHdpbmRvdy5pbm5lckhlaWdodCwgbGVmdDogMCB9KVxyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBTY3JvbGxUb3AocHJvcHM6IHsgY2hpbGRyZW46IFJlYWN0LlJlYWN0RWxlbWVudCB9KSB7XHJcbiAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBwcm9wcztcclxuICAgIC8vY29uc3QgY2xhc3NlcyA9IHVzZVN0eWxlc1Njcm9sbFRvcCgpO1xyXG4gICAgLy8gTm90ZSB0aGF0IHlvdSBub3JtYWxseSB3b24ndCBuZWVkIHRvIHNldCB0aGUgd2luZG93IHJlZiBhcyB1c2VTY3JvbGxUcmlnZ2VyXHJcbiAgICAvLyB3aWxsIGRlZmF1bHQgdG8gd2luZG93LlxyXG4gICAgLy8gVGhpcyBpcyBvbmx5IGJlaW5nIHNldCBoZXJlIGJlY2F1c2UgdGhlIGRlbW8gaXMgaW4gYW4gaWZyYW1lLlxyXG4gICAgY29uc3QgdHJpZ2dlciA9IHVzZVNjcm9sbFRyaWdnZXIoe1xyXG4gICAgICAgIGRpc2FibGVIeXN0ZXJlc2lzOiB0cnVlLFxyXG4gICAgICAgIHRocmVzaG9sZDogMTAwLFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDxab29tIGluPXt0cmlnZ2VyfT5cclxuICAgICAgICAgICAgPGRpdiBvbkNsaWNrPXtzY3JvbGxUb1RvcH0gcm9sZT1cInByZXNlbnRhdGlvblwiIC8qY2xhc3NOYW1lPXtjbGFzc2VzLnJvb3R9Ki8+XHJcbiAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvWm9vbT5cclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEZvY3VzT3B0cyA9IHtcclxuICAgIG1vdmVUb0VsZW1lbnQ6IGJvb2xlYW5cclxuICAgIG1vdmVCZWhhdmlvcj86ICdhdXRvJyB8ICdzbW9vdGgnXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb2N1c1RvSWQoaWQ6IHN0cmluZywgb3B0czogRm9jdXNPcHRzLCBjYj86IChlOiBIVE1MRWxlbWVudCkgPT4gdm9pZCkge1xyXG4gICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XHJcbiAgICB2YXIgcGFkcmUgPSBlbGVtZW50O1xyXG4gICAgd2hpbGUgKHBhZHJlICYmIHBhZHJlLmNsYXNzTmFtZSAhPSAncHJlZ3VudGEnICYmIHBhZHJlICE9IGRvY3VtZW50LmJvZHkpIHBhZHJlID0gcGFkcmUucGFyZW50RWxlbWVudDtcclxuICAgIGlmIChwYWRyZSAmJiBwYWRyZS5jbGFzc05hbWUgPT0gJ3ByZWd1bnRhJykgZWxlbWVudCA9IHBhZHJlO1xyXG4gICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoY2IpIHtcclxuICAgICAgICAgICAgY2IoZWxlbWVudCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgICAgICBpZiAob3B0cy5tb3ZlVG9FbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnNjcm9sbEludG9WaWV3KCk7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsKHsgYmVoYXZpb3I6IG9wdHMubW92ZUJlaGF2aW9yIHx8ICdhdXRvJywgdG9wOiB3aW5kb3cuc2Nyb2xsWSAtIDEwMCwgbGVmdDogMCB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBJRGlzcGF0Y2hlcnMgPSB7IFJFU0VUX09QQ0lPTkVTOiBGdW5jdGlvbiB9O1xyXG5cclxuZnVuY3Rpb24gZ2V0QmFkZ2VTdHlsZShlc3RhZG86IHN0cmluZyk6IFJlYWN0LkNTU1Byb3BlcnRpZXMge1xyXG4gICAgY29uc3QgYmFzZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcclxuICAgICAgICBwYWRkaW5nOiAnMnB4IDZweCcsXHJcbiAgICAgICAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcclxuICAgICAgICBmb250U2l6ZTogJzExcHgnLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcclxuICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcclxuICAgICAgICB0ZXh0VHJhbnNmb3JtOiAndXBwZXJjYXNlJ1xyXG4gICAgfTtcclxuICAgIGlmIChlc3RhZG8gPT09ICdvaycpIHJldHVybiB7IC4uLmJhc2UsIGJhY2tncm91bmRDb2xvcjogJyNjNmY2ZDUnLCBjb2xvcjogJyMyMjU0M2QnIH07XHJcbiAgICBpZiAoZXN0YWRvID09PSAnaW5jb21wbGV0bycgfHwgZXN0YWRvID09PSAnY29uIHByb2JsZW1hcycpIHJldHVybiB7IC4uLmJhc2UsIGJhY2tncm91bmRDb2xvcjogJyNmZWViYzgnLCBjb2xvcjogJyM3NDQyMTAnIH07XHJcbiAgICByZXR1cm4geyAuLi5iYXNlLCBiYWNrZ3JvdW5kQ29sb3I6ICcjZWRmMmY3JywgY29sb3I6ICcjNGE1NTY4JyB9O1xyXG59XHJcbmludGVyZmFjZSBSZW5kZXJpemFkb3JKU09OUHJvcHMge1xyXG4gICAgZGF0b3M6IFJlY29yZDxzdHJpbmcsIGFueT47XHJcbiAgICBuaXZlbD86IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IFJlbmRlcml6YWRvckpTT046IFJlYWN0LkZDPFJlbmRlcml6YWRvckpTT05Qcm9wcz4gPSAoeyBkYXRvcywgbml2ZWwgPSAwIH0pID0+IHtcclxuXHJcbiAgICBjb25zdCBjbGF2ZXNGaWx0cmFkYXMgPSBPYmplY3Qua2V5cyhkYXRvcykuZmlsdGVyKFxyXG4gICAgICAgIGNsYXZlID0+ICFjbGF2ZS5zdGFydHNXaXRoKCckJykgJiYgY2xhdmUgIT09ICd0aW1lc3RhbXBFc3RydWN0dXJhJ1xyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgcGFkZGluZ0xlZnQ6IG5pdmVsID4gMCA/ICcxNnB4JyA6ICcwcHgnIH19PlxyXG4gICAgICAgICAgICB7Y2xhdmVzRmlsdHJhZGFzLm1hcChjbGF2ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxvciA9IGRhdG9zW2NsYXZlXTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBERVRFQ0NJw5NOIERFIFNVQi1VTklEQURFUyBERSBBTsOBTElTSVMgKGhvZ2FyZXMsIHBlcnNvbmFzLCBldGMuKVxyXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsb3IpICYmIHZhbG9yLmxlbmd0aCA+IDAgJiYgdHlwZW9mIHZhbG9yWzBdID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17Y2xhdmV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogJzEycHggMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyTGVmdDogJzRweCBzb2xpZCAjMzE4MmNlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZjdmYWZjJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICcwIDZweCA2cHggMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogJzhweCAxMnB4J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgey8qIFTDrXR1bG8gZGUgbGEgVUEgKi99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRXZWlnaHQ6ICdib2xkJywgY29sb3I6ICcjMmI2Y2IwJywgZm9udFNpemU6ICcxM3B4JywgdGV4dFRyYW5zZm9ybTogJ3VwcGVyY2FzZScsIG1hcmdpbkJvdHRvbTogJzZweCcgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pZGFkIGRlIEFuw6FsaXNpczoge2NsYXZlfSAoe3ZhbG9yLmxlbmd0aH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dmFsb3IubWFwKChyZWdpc3RybywgZmlsYUluZGV4KSA9PiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2ZpbGFJbmRleH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkJvdHRvbTogZmlsYUluZGV4IDwgdmFsb3IubGVuZ3RoIC0gMSA/ICcxMHB4JyA6ICcwJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdUb3A6IGZpbGFJbmRleCA+IDAgPyAnNnB4JyA6ICcwJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclRvcDogZmlsYUluZGV4ID4gMCA/ICcxcHggZGFzaGVkICNlMmU4ZjAnIDogJ25vbmUnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmVuZGVyaXphZG9ySlNPTiBkYXRvcz17cmVnaXN0cm99IG5pdmVsPXtuaXZlbCArIDF9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBTaSBwb3IgbGFzIGR1ZGFzIGVzIHVuIG9iamV0byBkaXJlY3RvIHF1ZSBubyBlcyBhcnJheSwgbG8gc2FsdGVhbW9zXHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbG9yID09PSAnb2JqZWN0JyAmJiB2YWxvciAhPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gVkFSSUFCTEVTIEVTVMOBTkRBUiAoQ2xhdmUgeSB2YWxvciBqdW50b3MpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtjbGF2ZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleFdyYXA6ICd3cmFwJywgLy8gUG9yIHNpIGVsIHZhbG9yIGVzIG11eSBsYXJnbywgcXVlIGJhamUgbGltcGlvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnNHB4IDAnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxM3B4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZUhlaWdodDogJzEuNCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsvKiBDbGF2ZTogYWhvcmEgc2luIGFuY2hvIGZpam8sIHNlIGFkYXB0YSBhbCB0ZXh0byAqL31cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBjb2xvcjogJyM0YTU1NjgnLCBmb250V2VpZ2h0OiA1MDAsIG1hcmdpblJpZ2h0OiAnNnB4JyB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGF2ZX06XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgey8qIFZhbG9yOiBwZWdhZG8gaW5tZWRpYXRhbWVudGUgYSBsYSBjbGF2ZSAqL31cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBjb2xvcjogJyMxYTIwMmMnLCBmb250V2VpZ2h0OiA2MDAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhdmUuc3RhcnRzV2l0aCgncmVzdW1lbkVzdGFkbycpID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXtnZXRCYWRnZVN0eWxlKFN0cmluZyh2YWxvcikpfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1N0cmluZyh2YWxvcil9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcodmFsb3IgPz8gJycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBSZXNldGVyRm9ybShwcm9wczogeyBvblRyeUFnYWluOiAoKSA9PiB2b2lkLCBkaXNwYXRjaGVyczogSURpc3BhdGNoZXJzLCBtZW5zYWplOiBzdHJpbmcgfSkge1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgcmV0dXJuIDw+XHJcbiAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaChwcm9wcy5kaXNwYXRjaGVycy5SRVNFVF9PUENJT05FUyh7fSkpO1xyXG4gICAgICAgICAgICAgICAgcHJvcHMub25UcnlBZ2FpbigpO1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgID57cHJvcHMubWVuc2FqZX08L0J1dHRvbj5cclxuICAgIDwvPjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJlbmRlckFuZENhcHR1cmVFcnJvciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcclxuICAgIHsgZGlzcGF0Y2hlcnM6IElEaXNwYXRjaGVycywgbWVuc2FqZVJldG9ybm86IHN0cmluZyB9LFxyXG4gICAgeyBoYXNFcnJvcjogYm9vbGVhbiwgZXJyb3I6IEVycm9yIHwge30sIGluZm8/OiBhbnkgfVxyXG4+IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiB7IGRpc3BhdGNoZXJzOiBJRGlzcGF0Y2hlcnMsIG1lbnNhamVSZXRvcm5vOiBzdHJpbmcgfSkge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0geyBoYXNFcnJvcjogZmFsc2UsIGVycm9yOiB7fSB9O1xyXG4gICAgfVxyXG4gICAgb3ZlcnJpZGUgY29tcG9uZW50RGlkQ2F0Y2goZXJyb3I6IEVycm9yLCBpbmZvOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgaGFzRXJyb3I6IHRydWUsIGVycm9yLCBpbmZvIH0pO1xyXG4gICAgfVxyXG4gICAgb3ZlcnJpZGUgcmVuZGVyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmhhc0Vycm9yKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA8PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+SHVibyB1biBwcm9ibGVtYSBlbiBsYSBwcm9ncmFtYWNpw7NuIGRlIGxhIHBhbnRhbGxhLjwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgIDxSZXNldGVyRm9ybSBkaXNwYXRjaGVycz17dGhpcy5wcm9wcy5kaXNwYXRjaGVyc30gbWVuc2FqZT17dGhpcy5wcm9wcy5tZW5zYWplUmV0b3Jub30gb25UcnlBZ2Fpbj17KCkgPT5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgaGFzRXJyb3I6IGZhbHNlLCBlcnJvcjoge30gfSlcclxuICAgICAgICAgICAgICAgIH0gLz5cclxuICAgICAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cIm91dGxpbmVkXCIgY29sb3I9XCJzZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9nb3RvU2luY3Jvbml6YXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPmlyIGEgbGEgcGFudGFsbGEgZGUgc2luY3Jvbml6YWNpw7NuPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5FcnJvciBkZXRlY3RhZG86PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+e2V4cGVjdGVkKHRoaXMuc3RhdGUuZXJyb3IpLm1lc3NhZ2V9PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+e0pTT04uc3RyaW5naWZ5KHRoaXMuc3RhdGUuaW5mbyl9PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICA8Lz47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCB0aGVtZSA9IGNyZWF0ZVRoZW1lKHtcclxuICAgIGNvbXBvbmVudHM6IHtcclxuICAgICAgICBNdWlDc3NCYXNlbGluZToge1xyXG4gICAgICAgICAgICBzdHlsZU92ZXJyaWRlczoge1xyXG4gICAgICAgICAgICAgICAgaHRtbDoge1xyXG4gICAgICAgICAgICAgICAgICAgIFdlYmtpdEZvbnRTbW9vdGhpbmc6ICdhdXRvJyxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgIH0sXHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHVzZU9ubGluZVN0YXR1cygpIHtcclxuICAgIGNvbnN0IFtvbmxpbmUsIHNldE9ubGluZV0gPSB1c2VTdGF0ZSh3aW5kb3cubmF2aWdhdG9yLm9uTGluZSk7XHJcblxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBoYW5kbGVyID0gKCkgPT4gc2V0T25saW5lKHdpbmRvdy5uYXZpZ2F0b3Iub25MaW5lKTtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb25saW5lJywgaGFuZGxlcik7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29mZmxpbmUnLCBoYW5kbGVyKTtcclxuICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignb25saW5lJywgaGFuZGxlcik7XHJcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgaGFuZGxlcik7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuXHJcbiAgICByZXR1cm4gb25saW5lO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gUmVuZGVyUHJpbmNpcGFsPFQsIFQyIGV4dGVuZHMgQWN0aW9uPihwcm9wczogeyBzdG9yZTogU3RvcmU8VCwgVDI+LCBkaXNwYXRjaGVyczogSURpc3BhdGNoZXJzLCBtZW5zYWplUmV0b3Jubzogc3RyaW5nLCBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlIH0pIHtcclxuICAgIHJldHVybiA8UmVhY3QuU3RyaWN0TW9kZT5cclxuICAgICAgICA8UHJvdmlkZXIgc3RvcmU9e3Byb3BzLnN0b3JlfT5cclxuICAgICAgICAgICAgPFRoZW1lUHJvdmlkZXIgdGhlbWU9e3RoZW1lfT5cclxuICAgICAgICAgICAgICAgIDxSZW5kZXJBbmRDYXB0dXJlRXJyb3IgZGlzcGF0Y2hlcnM9e3Byb3BzLmRpc3BhdGNoZXJzfSBtZW5zYWplUmV0b3Jubz17cHJvcHMubWVuc2FqZVJldG9ybm99PlxyXG4gICAgICAgICAgICAgICAgICAgIDxDc3NCYXNlbGluZSAvPlxyXG4gICAgICAgICAgICAgICAgICAgIHtwcm9wcy5jaGlsZHJlbn1cclxuICAgICAgICAgICAgICAgIDwvUmVuZGVyQW5kQ2FwdHVyZUVycm9yPlxyXG4gICAgICAgICAgICA8L1RoZW1lUHJvdmlkZXI+XHJcbiAgICAgICAgPC9Qcm92aWRlcj5cclxuICAgIDwvUmVhY3QuU3RyaWN0TW9kZT5cclxufVxyXG5cclxuIl19
281
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWdlbmVyYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvcmVuZGVyLWdlbmVyYWwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQTBFQSwwREFXQztJQVdELDhCQWlCQztJQU9ELDhCQWdCQztJQTBHRCxrQ0FVQztJQThDRCwwQ0FjQztJQUVELDBDQVdDO0lBS0QsMERBR0M7SUFFRCxzQ0FHQztJQUVELDBDQUdDO0lBS0Qsd0RBS0M7SUFqV0QsK0JBQStCO0lBQy9CLGlDQUE0QztJQUM1Qyw2Q0FBb0Q7SUFDcEQsa0NBQWtDO0lBRWxDLDJDQUFzQztJQUV0Qyw0Q0FJdUI7SUFJdkIscURBQXFEO0lBQ3hDLFFBQUEsc0JBQXNCLEdBQUc7UUFDbEMsR0FBRyxFQUFFLHFDQUFxQztRQUMxQyxTQUFTLEVBQUUsOERBQThEO1FBQ3pFLFVBQVUsRUFBRSxnT0FBZ087UUFDNU8sY0FBYyxFQUFFLDBMQUEwTDtRQUMxTSxLQUFLLEVBQUUsbURBQW1EO1FBQzFELDRCQUE0QixFQUFFLDRGQUE0RjtRQUMxSCxnQkFBZ0IsRUFBRSx1SkFBdUo7UUFDekssV0FBVyxFQUFFLHdLQUF3SztRQUNyTCxZQUFZLEVBQUUsMEtBQTBLO1FBQ3hMLEtBQUssRUFBRSx1R0FBdUc7UUFDOUcsS0FBSyxFQUFFLHVHQUF1RztRQUM5RyxTQUFTLEVBQUMsNFhBQTRYO1FBQ3RZLElBQUksRUFBRSw0RkFBNEY7UUFDbEcsTUFBTSxFQUFFLHFKQUFxSjtRQUM3SixNQUFNLEVBQUUsK0VBQStFO1FBQ3ZGLGFBQWEsRUFBRSw2TUFBNk07UUFDNU4sYUFBYSxFQUFFLHlGQUF5RjtRQUN4RyxXQUFXLEVBQUUsZ0lBQWdJO1FBQzdJLFlBQVksRUFBRSxtV0FBbVc7UUFDalgsU0FBUyxFQUFFLHNLQUFzSztRQUNqTCxVQUFVLEVBQUUsZ0RBQWdEO1FBQzVELFVBQVUsRUFBRSw4Q0FBOEM7UUFDMUQsaUJBQWlCLEVB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QUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUNqRixDQUFDO0lBRVksUUFBQSxlQUFlLEdBQUcsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUNsTixRQUFBLGtCQUFrQixHQUFHLENBQUMsYUFBYSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFFdk8sU0FBZ0Isc0JBQXNCLENBQUMsRUFBNkIsRUFBRSxTQUFrQjtRQUNwRixJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxHQUFHLENBQUM7WUFBRSxPQUFPLFVBQVUsQ0FBQztRQUM1QyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUM5RCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLDBCQUFrQixDQUFDLENBQUMsQ0FBQyx1QkFBZSxDQUFDO1FBQzNELE9BQU8sS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUM7SUFDdkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IFByb3ZpZGVyLCB1c2VEaXNwYXRjaCB9IGZyb20gXCJyZWFjdC1yZWR1eFwiO1xyXG5pbXBvcnQgKiBhcyBsaWtlQXIgZnJvbSBcImxpa2UtYXJcIjtcclxuXHJcbmltcG9ydCB7IGV4cGVjdGVkIH0gZnJvbSBcImNhc3QtZXJyb3JcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgICBDc3NCYXNlbGluZSwgU3ZnSWNvbiwgVGhlbWVQcm92aWRlciwgVHlwb2dyYXBoeSwgWm9vbSwgdXNlU2Nyb2xsVHJpZ2dlciwgY3JlYXRlVGhlbWUsXHJcbiAgICBNZW51LFxyXG4gICAgQnV0dG9uXHJcbn0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcclxuaW1wb3J0IHsgU3RvcmUsIEFjdGlvbiB9IGZyb20gXCJyZWR1eFwiO1xyXG5pbXBvcnQgeyBUaXBvVmFyaWFibGVzIH0gZnJvbSBcIi4vdGlwb3NcIjtcclxuXHJcbi8vIGh0dHBzOi8vbWF0ZXJpYWwtdWkuY29tL2NvbXBvbmVudHMvbWF0ZXJpYWwtaWNvbnMvXHJcbmV4cG9ydCBjb25zdCBtYXRlcmlhbElvSWNvbnNTdmdQYXRoID0ge1xyXG4gICAgQWRkOiBcIk0xOSAxM2gtNnY2aC0ydi02SDV2LTJoNlY1aDJ2Nmg2djJ6XCIsXHJcbiAgICBBcnJvd0JhY2s6IFwiTTIwIDExSDcuODNsNS41OS01LjU5TDEyIDRsLTggOCA4IDggMS40MS0xLjQxTDcuODMgMTNIMjB2LTJ6XCIsXHJcbiAgICBBc3NpZ25tZW50OiBcIk0xOSAzaC00LjE4QzE0LjQgMS44NCAxMy4zIDEgMTIgMWMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptMiAxNEg3di0yaDd2MnptMy00SDd2LTJoMTB2MnptMC00SDdWN2gxMHYyelwiLFxyXG4gICAgQnVzaW5lc3NDZW50ZXI6IFwiTTEwIDE2di0xSDMuMDFMMyAxOWMwIDEuMTEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjg5IDItMnYtNGgtN3Yxem0xMC05aC00LjAxVjVsLTItMmgtNGwtMiAydjJINGMtMS4xIDAtMiAuOS0yIDJ2M2MwIDEuMTEuODkgMiAyIDJoNnYtMmg0djJoNmMxLjEgMCAyLS45IDItMlY5YzAtMS4xLS45LTItMi0ybS02IDBoLTRWNWg0elwiLFxyXG4gICAgQ2hlY2s6IFwiTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxelwiLFxyXG4gICAgQ2hlY2tCb3hPdXRsaW5lQmxhbmtPdXRsaW5lZDogXCJNMTkgNXYxNEg1VjVoMTRtMC0ySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpcIixcclxuICAgIENoZWNrQm94T3V0bGluZWQ6IFwiTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDVWNWgxNHYxNHpNMTcuOTkgOWwtMS40MS0xLjQyLTYuNTkgNi41OS0yLjU4LTIuNTctMS40MiAxLjQxIDQgMy45OXpcIixcclxuICAgIENoZXZyb25MZWZ0OiBcIk0xNC43MSA2LjcxYS45OTU5Ljk5NTkgMCAwMC0xLjQxIDBMOC43MSAxMS4zYy0uMzkuMzktLjM5IDEuMDIgMCAxLjQxbDQuNTkgNC41OWMuMzkuMzkgMS4wMi4zOSAxLjQxIDAgLjM5LS4zOS4zOS0xLjAyIDAtMS40MUwxMC44MyAxMmwzLjg4LTMuODhjLjM5LS4zOS4zOC0xLjAzIDAtMS40MXpcIixcclxuICAgIENoZXZyb25SaWdodDogXCJNOS4yOSA2LjcxYy0uMzkuMzktLjM5IDEuMDIgMCAxLjQxTDEzLjE3IDEybC0zLjg4IDMuODhjLS4zOS4zOS0uMzkgMS4wMiAwIDEuNDEuMzkuMzkgMS4wMi4zOSAxLjQxIDBsNC41OS00LjU5Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFMMTAuNyA2LjdjLS4zOC0uMzgtMS4wMi0uMzgtMS40MS4wMXpcIixcclxuICAgIENsZWFyOiBcIk0xOSA2LjQxTDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6XCIsXHJcbiAgICBDbG9zZTogXCJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyelwiLFxyXG4gICAgQ2xvdWRTeW5jOlwiTTIxLjUgMTQuOThjLS4wMiAwLS4wMyAwLS4wNS4wMUMyMS4yIDEzLjMgMTkuNzYgMTIgMTggMTJjLTEuNCAwLTIuNi44My0zLjE2IDIuMDJDMTMuMjYgMTQuMSAxMiAxNS40IDEyIDE3YzAgMS42NiAxLjM0IDMgMyAzbDYuNS0uMDJjMS4zOCAwIDIuNS0xLjEyIDIuNS0yLjVzLTEuMTItMi41LTIuNS0yLjVNMTAgNC4yNnYyLjA5QzcuNjcgNy4xOCA2IDkuMzkgNiAxMmMwIDEuNzcuNzggMy4zNCAyIDQuNDRWMTRoMnY2SDR2LTJoMi43M0M1LjA2IDE2LjU0IDQgMTQuNCA0IDEyYzAtMy43MyAyLjU1LTYuODUgNi03Ljc0TTIwIDZoLTIuNzNjMS40MyAxLjI2IDIuNDEgMy4wMSAyLjY2IDVoLTIuMDJjLS4yMy0xLjM2LS45My0yLjU1LTEuOTEtMy40NFYxMGgtMlY0aDZ6XCIsXHJcbiAgICBDb2RlOiBcIk05LjQgMTYuNkw0LjggMTJsNC42LTQuNkw4IDZsLTYgNiA2IDYgMS40LTEuNHptNS4yIDBsNC42LTQuNi00LjYtNC42TDE2IDZsNiA2LTYgNi0xLjQtMS40elwiLFxyXG4gICAgQ3JlYXRlOiBcIk0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0YS45OTU5Ljk5NTkgMCAwMC0xLjQxIDBsLTEuODMgMS44MyAzLjc1IDMuNzUgMS44My0xLjgzelwiLFxyXG4gICAgRGVsZXRlOiBcIk02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6TTE5IDRoLTMuNWwtMS0xaC01bC0xIDFINXYyaDE0VjR6XCIsXHJcbiAgICBEZWxldGVGb3JldmVyOiBcIk02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6bTIuNDYtNy4xMmwxLjQxLTEuNDFMMTIgMTIuNTlsMi4xMi0yLjEyIDEuNDEgMS40MUwxMy40MSAxNGwyLjEyIDIuMTItMS40MSAxLjQxTDEyIDE1LjQxbC0yLjEyIDIuMTItMS40MS0xLjQxTDEwLjU5IDE0bC0yLjEzLTIuMTJ6TTE1LjUgNGwtMS0xaC01bC0xIDFINXYyaDE0VjR6XCIsXHJcbiAgICBEZWxldGVPdXRsaW5lOiBcIk02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6TTggOWg4djEwSDhWOXptNy41LTVsLTEtMWgtNWwtMSAxSDV2MmgxNFY0elwiLFxyXG4gICAgRGVzY3JpcHRpb246IFwiTTE0IDJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDIwYzAgMS4xLjg5IDIgMS45OSAySDE4YzEuMSAwIDItLjkgMi0yVjhsLTYtNnptMiAxNkg4di0yaDh2MnptMC00SDh2LTJoOHYyem0tMy01VjMuNUwxOC41IDlIMTN6XCIsXHJcbiAgICBFbW9qaU9iamVjdHM6IFwiTTEyIDNjLS40NiAwLS45My4wNC0xLjQuMTQtMi43Ni41My00Ljk2IDIuNzYtNS40OCA1LjUyLS40OCAyLjYxLjQ4IDUuMDEgMi4yMiA2LjU2LjQzLjM4LjY2LjkxLjY2IDEuNDdWMTljMCAxLjEuOSAyIDIgMmguMjhjLjM1LjYuOTggMSAxLjcyIDFzMS4zOC0uNCAxLjcyLTFIMTRjMS4xIDAgMi0uOSAyLTJ2LTIuMzFjMC0uNTUuMjItMS4wOS42NC0xLjQ2QzE4LjA5IDEzLjk1IDE5IDEyLjA4IDE5IDEwYzAtMy44Ny0zLjEzLTctNy03em0yIDE2aC00di0xaDR2MXptMC0yaC00di0xaDR2MXptLTEuNS01LjU5VjE0aC0xdi0yLjU5TDkuNjcgOS41OWwuNzEtLjcxTDEyIDEwLjVsMS42Mi0xLjYyLjcxLjcxLTEuODMgMS44MnpcIixcclxuICAgIEV4aXRUb0FwcDogXCJNMTAuMDkgMTUuNTlMMTEuNSAxN2w1LTUtNS01LTEuNDEgMS40MUwxMi42NyAxMUgzdjJoOS42N2wtMi41OCAyLjU5ek0xOSAzSDVjLTEuMTEgMC0yIC45LTIgMnY0aDJWNWgxNHYxNEg1di00SDN2NGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yelwiLFxyXG4gICAgRXhwYW5kTGVzczogXCJNMTIgOGwtNiA2IDEuNDEgMS40MUwxMiAxMC44M2w0LjU5IDQuNThMMTggMTR6XCIsXHJcbiAgICBFeHBhbmRNb3JlOiBcIk0xNi41OSA4LjU5TDEyIDEzLjE3IDcuNDEgOC41OSA2IDEwbDYgNiA2LTZ6XCIsXHJcbiAgICBGb3JtYXRMaW5lU3BhY2luZzogXCJNNiA3aDIuNUw1IDMuNSAxLjUgN0g0djEwSDEuNUw1IDIwLjUgOC41IDE3SDZWN3ptNC0ydjJoMTJWNUgxMHptMCAxNGgxMnYtMkgxMHYyem0wLTZoMTJ2LTJIMTB2MnpcIixcclxuICAgIEZvcndhcmQ6IFwiTTEyIDhWNGw4IDgtOCA4di00SDRWOHpcIixcclxuICAgIEZvcndhcmRPdXRsaW5lZDogXCJNMTQgOC44M0wxNy4xNyAxMiAxNCAxNS4xN1YxNEg2di00aDhWOC44M00xMiA0djRINHY4aDh2NGw4LTgtOC04elwiLFxyXG4gICAgSW5mbzogXCJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxNWgtMnYtNmgydjZ6bTAtOGgtMlY3aDJ2MnpcIixcclxuICAgIEtleWJvYXJkQXJyb3dVcDogXCJNNy40MSAxNS40MUwxMiAxMC44M2w0LjU5IDQuNThMMTggMTRsLTYtNi02IDZ6XCIsXHJcbiAgICBLZXlib2FyZEFycm93RG93bjogXCJNNy40MSA4LjU5TDEyIDEzLjE3bDQuNTktNC41OEwxOCAxMGwtNiA2LTYtNiAxLjQxLTEuNDF6XCIsXHJcbiAgICBMYWJlbDogXCJNMTcuNjMgNS44NEMxNy4yNyA1LjMzIDE2LjY3IDUgMTYgNUw1IDUuMDFDMy45IDUuMDEgMyA1LjkgMyA3djEwYzAgMS4xLjkgMS45OSAyIDEuOTlMMTYgMTljLjY3IDAgMS4yNy0uMzMgMS42My0uODRMMjIgMTJsLTQuMzctNi4xNnpcIixcclxuICAgIExvY2FsQXRtOiBcIk0xMSAxN2gydi0xaDFjLjU1IDAgMS0uNDUgMS0xdi0zYzAtLjU1LS40NS0xLTEtMWgtM3YtMWg0VjhoLTJWN2gtMnYxaC0xYy0uNTUgMC0xIC40NS0xIDF2M2MwIC41NS40NSAxIDEgMWgzdjFIOXYyaDJ2MXptOS0xM0g0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY2YzAtMS4xMS0uODktMi0yLTJ6bTAgMTRINFY2aDE2djEyelwiLFxyXG4gICAgTG9jYXRpb246IFwiTTEyIDJDOC4xMyAyIDUgNS4xMyA1IDljMCA1LjI1IDcgMTMgNyAxM3M3LTcuNzUgNy0xM2MwLTMuODctMy4xMy03LTctN20wIDkuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjVcIixcclxuICAgIE1lbnU6IFwiTTMgMThoMTh2LTJIM3Yyem0wLTVoMTh2LTJIM3Yyem0wLTd2MmgxOFY2SDN6XCIsXHJcbiAgICBOYXZpZ2F0aW9uOiBcIk0xMiAyTDQuNSAyMC4yOWwuNzEuNzFMMTIgMThsNi43OSAzIC43MS0uNzF6XCIsXHJcbiAgICBOYXZpZ2F0aW9uRG93bjogXCJNMTIgMjJMNC41IDMuNzFsLjcxIC0uNzFMMTIgNmw2Ljc5IC0zIC43MSAuNzF6XCIsXHJcbiAgICBSZWZyZXNoOiBcIk0xNy42NSA2LjM1QzE2LjIgNC45IDE0LjIxIDQgMTIgNGMtNC40MiAwLTcuOTkgMy41OC03Ljk5IDhzMy41NyA4IDcuOTkgOGMzLjczIDAgNi44NC0yLjU1IDcuNzMtNmgtMi4wOGMtLjgyIDIuMzMtMy4wNCA0LTUuNjUgNC0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02YzEuNjYgMCAzLjE0LjY5IDQuMjIgMS43OEwxMyAxMWg3VjR6XCIsXHJcbiAgICBSZW1vdmVTaG9wcGluZ0NhcnQ6IFwiTTIyLjczIDIyLjczTDIuNzcgMi43NyAyIDJsLS43My0uNzNMMCAyLjU0bDQuMzkgNC4zOSAyLjIxIDQuNjYtMS4zNSAyLjQ1Yy0uMTYuMjgtLjI1LjYxLS4yNS45NiAwIDEuMS45IDIgMiAyaDcuNDZsMS4zOCAxLjM4Yy0uNS4zNi0uODMuOTUtLjgzIDEuNjIgMCAxLjEuODkgMiAxLjk5IDIgLjY3IDAgMS4yNi0uMzMgMS42Mi0uODRMMjEuNDYgMjRsMS4yNy0xLjI3ek03LjQyIDE1Yy0uMTQgMC0uMjUtLjExLS4yNS0uMjVsLjAzLS4xMi45LTEuNjNoMi4zNmwyIDJINy40MnptOC4xMy0yYy43NSAwIDEuNDEtLjQxIDEuNzUtMS4wM2wzLjU4LTYuNDljLjA4LS4xNC4xMi0uMzEuMTItLjQ4IDAtLjU1LS40NS0xLTEtMUg2LjU0bDkuMDEgOXpNNyAxOGMtMS4xIDAtMS45OS45LTEuOTkgMlM1LjkgMjIgNyAyMnMyLS45IDItMi0uOS0yLTItMnpcIixcclxuICAgIFNhdmU6IFwiTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0elwiLFxyXG4gICAgU2Nob29sOiBcIk01IDEzLjE4djRMMTIgMjFsNy0zLjgydi00TDEyIDE3ek0xMiAzIDEgOWwxMSA2IDktNC45MVYxN2gyVjl6XCIsXHJcbiAgICBTZWFyY2g6IFwiTTE1LjUgMTRoLS43OWwtLjI4LS4yN0MxNS40MSAxMi41OSAxNiAxMS4xMSAxNiA5LjUgMTYgNS45MSAxMy4wOSAzIDkuNSAzUzMgNS45MSAzIDkuNSA1LjkxIDE2IDkuNSAxNmMxLjYxIDAgMy4wOS0uNTkgNC4yMy0xLjU3bC4yNy4yOHYuNzlsNSA0Ljk5TDIwLjQ5IDE5bC00Ljk5LTV6bS02IDBDNy4wMSAxNCA1IDExLjk5IDUgOS41UzcuMDEgNSA5LjUgNSAxNCA3LjAxIDE0IDkuNSAxMS45OSAxNCA5LjUgMTR6XCIsXHJcbiAgICBTZW5kOiBcIk0yLjAxIDIxTDIzIDEyIDIuMDEgMyAyIDEwbDE1IDItMTUgMnpcIixcclxuICAgIFNldHRpbmdzOiBcIk0xNS45NSAxMC43OGMuMDMtLjI1LjA1LS41MS4wNS0uNzhzLS4wMi0uNTMtLjA2LS43OGwxLjY5LTEuMzJjLjE1LS4xMi4xOS0uMzQuMS0uNTFsLTEuNi0yLjc3Yy0uMS0uMTgtLjMxLS4yNC0uNDktLjE4bC0xLjk5LjhjLS40Mi0uMzItLjg2LS41OC0xLjM1LS43OEwxMiAyLjM0Yy0uMDMtLjItLjItLjM0LS40LS4zNEg4LjRjLS4yIDAtLjM2LjE0LS4zOS4zNGwtLjMgMi4xMmMtLjQ5LjItLjk0LjQ3LTEuMzUuNzhsLTEuOTktLjhjLS4xOC0uMDctLjM5IDAtLjQ5LjE4bC0xLjYgMi43N2MtLjEuMTgtLjA2LjM5LjEuNTFsMS42OSAxLjMyYy0uMDQuMjUtLjA3LjUyLS4wNy43OHMuMDIuNTMuMDYuNzhMMi4zNyAxMi4xYy0uMTUuMTItLjE5LjM0LS4xLjUxbDEuNiAyLjc3Yy4xLjE4LjMxLjI0LjQ5LjE4bDEuOTktLjhjLjQyLjMyLjg2LjU4IDEuMzUuNzhsLjMgMi4xMmMuMDQuMi4yLjM0LjQuMzRoMy4yYy4yIDAgLjM3LS4xNC4zOS0uMzRsLjMtMi4xMmMuNDktLjIuOTQtLjQ3IDEuMzUtLjc4bDEuOTkuOGMuMTguMDcuMzkgMCAuNDktLjE4bDEuNi0yLjc3Yy4xLS4xOC4wNi0uMzktLjEtLjUxbC0xLjY3LTEuMzJ6TTEwIDEzYy0xLjY1IDAtMy0xLjM1LTMtM3MxLjM1LTMgMy0zIDMgMS4zNSAzIDMtMS4zNSAzLTMgM3pcIixcclxuICAgIFN5bmNBbHQ6IFwiTTIyIDhsLTQtNHYzSDN2MmgxNXYzbDQtNHpNMiAxNmw0IDR2LTNoMTV2LTJINnYtM2wtNCA0elwiLFxyXG4gICAgU3BvcnRzRXNwb3J0czogXCJtMjEuNTggMTYuMDktMS4wOS03LjY2QzIwLjIxIDYuNDYgMTguNTIgNSAxNi41MyA1SDcuNDdDNS40OCA1IDMuNzkgNi40NiAzLjUxIDguNDNsLTEuMDkgNy42NkMyLjIgMTcuNjMgMy4zOSAxOSA0Ljk0IDE5Yy42OCAwIDEuMzItLjI3IDEuOC0uNzVMOSAxNmg2bDIuMjUgMi4yNWMuNDguNDggMS4xMy43NSAxLjguNzUgMS41NiAwIDIuNzUtMS4zNyAyLjUzLTIuOTFNMTEgMTFIOXYySDh2LTJINnYtMWgyVjhoMXYyaDJ6bTQtMWMtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxbTIgM2MtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxXCIsXHJcbiAgICBUcmVuZGluZ0ZsYXQ6IFwiTTIyIDEybC00LTR2M0gzdjJoMTV2M3pcIixcclxuICAgIFdhcm5pbmc6IFwiTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHpcIixcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IElDT04gPSBsaWtlQXIobWF0ZXJpYWxJb0ljb25zU3ZnUGF0aCkubWFwKHN2Z1RleHQgPT4gKCkgPT5cclxuICAgIDxTdmdJY29uPjxwYXRoIGQ9e3N2Z1RleHR9IC8+PC9TdmdJY29uPlxyXG4pLnBsYWluKCk7XHJcblxyXG5leHBvcnQgdHlwZSBTdHlsZXMgPSBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xyXG5cclxuZXhwb3J0IHR5cGUgT25VcGRhdGU8VD4gPSAoZGF0YTogVCkgPT4gdm9pZFxyXG5cclxuZXhwb3J0IHR5cGUgSW5wdXRUeXBlcyA9ICdkYXRlJyB8ICdudW1iZXInIHwgJ3RlbCcgfCAndGV4dCc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWRhcHRhclRpcG9WYXJDYXNpbGxlcm8oY2FzaWxsZXJvRGF0YVR5cGU6IFRpcG9WYXJpYWJsZXMgfCAnb3BjaW9uZXMnIHwgJ3NpX25vJyk6IElucHV0VHlwZXMge1xyXG4gICAgY29uc3QgYWRhcHRlcjogeyBba2V5IGluIFRpcG9WYXJpYWJsZXMgfCAnb3BjaW9uZXMnIHwgJ3NpX25vJ106IElucHV0VHlwZXMgfSA9IHtcclxuICAgICAgICAnb3BjaW9uZXMnOiAnbnVtYmVyJyxcclxuICAgICAgICAnc2lfbm8nOiAnbnVtYmVyJyxcclxuICAgICAgICAnbnVtZXJvJzogJ251bWJlcicsXHJcbiAgICAgICAgJ2hvcmEnOiAndGVsJyxcclxuICAgICAgICAnaG9yYXMnOiAnbnVtYmVyJyxcclxuICAgICAgICAndGV4dG8nOiAndGV4dCcsXHJcbiAgICAgICAgJ2ZlY2hhJzogJ3RleHQnXHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWRhcHRlcltjYXNpbGxlcm9EYXRhVHlwZV1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHNjcm9sbFRvVG9wID0gKCkgPT4ge1xyXG4gICAgd2luZG93LnNjcm9sbCh7IGJlaGF2aW9yOiAnc21vb3RoJywgdG9wOiAwLCBsZWZ0OiAwIH0pXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3Qgc2Nyb2xsVG9Cb3R0b20gPSAoKSA9PiB7XHJcbiAgICB3aW5kb3cuc2Nyb2xsKHsgYmVoYXZpb3I6ICdzbW9vdGgnLCB0b3A6IGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0IC0gd2luZG93LmlubmVySGVpZ2h0LCBsZWZ0OiAwIH0pXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFNjcm9sbFRvcChwcm9wczogeyBjaGlsZHJlbjogUmVhY3QuUmVhY3RFbGVtZW50IH0pIHtcclxuICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHByb3BzO1xyXG4gICAgLy9jb25zdCBjbGFzc2VzID0gdXNlU3R5bGVzU2Nyb2xsVG9wKCk7XHJcbiAgICAvLyBOb3RlIHRoYXQgeW91IG5vcm1hbGx5IHdvbid0IG5lZWQgdG8gc2V0IHRoZSB3aW5kb3cgcmVmIGFzIHVzZVNjcm9sbFRyaWdnZXJcclxuICAgIC8vIHdpbGwgZGVmYXVsdCB0byB3aW5kb3cuXHJcbiAgICAvLyBUaGlzIGlzIG9ubHkgYmVpbmcgc2V0IGhlcmUgYmVjYXVzZSB0aGUgZGVtbyBpcyBpbiBhbiBpZnJhbWUuXHJcbiAgICBjb25zdCB0cmlnZ2VyID0gdXNlU2Nyb2xsVHJpZ2dlcih7XHJcbiAgICAgICAgZGlzYWJsZUh5c3RlcmVzaXM6IHRydWUsXHJcbiAgICAgICAgdGhyZXNob2xkOiAxMDAsXHJcbiAgICB9KTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPFpvb20gaW49e3RyaWdnZXJ9PlxyXG4gICAgICAgICAgICA8ZGl2IG9uQ2xpY2s9e3Njcm9sbFRvVG9wfSByb2xlPVwicHJlc2VudGF0aW9uXCIgLypjbGFzc05hbWU9e2NsYXNzZXMucm9vdH0qLz5cclxuICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9ab29tPlxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgRm9jdXNPcHRzID0ge1xyXG4gICAgbW92ZVRvRWxlbWVudDogYm9vbGVhblxyXG4gICAgbW92ZUJlaGF2aW9yPzogJ2F1dG8nIHwgJ3Ntb290aCdcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZvY3VzVG9JZChpZDogc3RyaW5nLCBvcHRzOiBGb2N1c09wdHMsIGNiPzogKGU6IEhUTUxFbGVtZW50KSA9PiB2b2lkKSB7XHJcbiAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuICAgIHZhciBwYWRyZSA9IGVsZW1lbnQ7XHJcbiAgICB3aGlsZSAocGFkcmUgJiYgcGFkcmUuY2xhc3NOYW1lICE9ICdwcmVndW50YScgJiYgcGFkcmUgIT0gZG9jdW1lbnQuYm9keSkgcGFkcmUgPSBwYWRyZS5wYXJlbnRFbGVtZW50O1xyXG4gICAgaWYgKHBhZHJlICYmIHBhZHJlLmNsYXNzTmFtZSA9PSAncHJlZ3VudGEnKSBlbGVtZW50ID0gcGFkcmU7XHJcbiAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICAgIGlmIChjYikge1xyXG4gICAgICAgICAgICBjYihlbGVtZW50KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIGlmIChvcHRzLm1vdmVUb0VsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoKTtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGwoeyBiZWhhdmlvcjogb3B0cy5tb3ZlQmVoYXZpb3IgfHwgJ2F1dG8nLCB0b3A6IHdpbmRvdy5zY3JvbGxZIC0gMTAwLCBsZWZ0OiAwIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIElEaXNwYXRjaGVycyA9IHsgUkVTRVRfT1BDSU9ORVM6IEZ1bmN0aW9uIH07XHJcblxyXG5mdW5jdGlvbiBnZXRCYWRnZVN0eWxlKGVzdGFkbzogc3RyaW5nKTogUmVhY3QuQ1NTUHJvcGVydGllcyB7XHJcbiAgICBjb25zdCBiYXNlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgIHBhZGRpbmc6ICcycHggNnB4JyxcclxuICAgICAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxyXG4gICAgICAgIGZvbnRTaXplOiAnMTFweCcsXHJcbiAgICAgICAgZm9udFdlaWdodDogJ2JvbGQnLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxyXG4gICAgICAgIHRleHRUcmFuc2Zvcm06ICd1cHBlcmNhc2UnXHJcbiAgICB9O1xyXG4gICAgaWYgKGVzdGFkbyA9PT0gJ29rJykgcmV0dXJuIHsgLi4uYmFzZSwgYmFja2dyb3VuZENvbG9yOiAnI2M2ZjZkNScsIGNvbG9yOiAnIzIyNTQzZCcgfTtcclxuICAgIGlmIChlc3RhZG8gPT09ICdpbmNvbXBsZXRvJyB8fCBlc3RhZG8gPT09ICdjb24gcHJvYmxlbWFzJykgcmV0dXJuIHsgLi4uYmFzZSwgYmFja2dyb3VuZENvbG9yOiAnI2ZlZWJjOCcsIGNvbG9yOiAnIzc0NDIxMCcgfTtcclxuICAgIHJldHVybiB7IC4uLmJhc2UsIGJhY2tncm91bmRDb2xvcjogJyNlZGYyZjcnLCBjb2xvcjogJyM0YTU1NjgnIH07XHJcbn1cclxuaW50ZXJmYWNlIFJlbmRlcml6YWRvckpTT05Qcm9wcyB7XHJcbiAgICBkYXRvczogUmVjb3JkPHN0cmluZywgYW55PjtcclxuICAgIG5pdmVsPzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgUmVuZGVyaXphZG9ySlNPTjogUmVhY3QuRkM8UmVuZGVyaXphZG9ySlNPTlByb3BzPiA9ICh7IGRhdG9zLCBuaXZlbCA9IDAgfSkgPT4ge1xyXG5cclxuICAgIGNvbnN0IGNsYXZlc0ZpbHRyYWRhcyA9IE9iamVjdC5rZXlzKGRhdG9zKS5maWx0ZXIoXHJcbiAgICAgICAgY2xhdmUgPT4gIWNsYXZlLnN0YXJ0c1dpdGgoJyQnKSAmJiBjbGF2ZSAhPT0gJ3RpbWVzdGFtcEVzdHJ1Y3R1cmEnXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPGRpdiBzdHlsZT17eyBwYWRkaW5nTGVmdDogbml2ZWwgPiAwID8gJzE2cHgnIDogJzBweCcgfX0+XHJcbiAgICAgICAgICAgIHtjbGF2ZXNGaWx0cmFkYXMubWFwKGNsYXZlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbG9yID0gZGF0b3NbY2xhdmVdO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIERFVEVDQ0nDk04gREUgU1VCLVVOSURBREVTIERFIEFOw4FMSVNJUyAoaG9nYXJlcywgcGVyc29uYXMsIGV0Yy4pXHJcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWxvcikgJiYgdmFsb3IubGVuZ3RoID4gMCAmJiB0eXBlb2YgdmFsb3JbMF0gPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtjbGF2ZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAnMTJweCAwJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJMZWZ0OiAnNHB4IHNvbGlkICMzMTgyY2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmN2ZhZmMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzAgNnB4IDZweCAwJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnOHB4IDEycHgnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7LyogVMOtdHVsbyBkZSBsYSBVQSAqL31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFdlaWdodDogJ2JvbGQnLCBjb2xvcjogJyMyYjZjYjAnLCBmb250U2l6ZTogJzEzcHgnLCB0ZXh0VHJhbnNmb3JtOiAndXBwZXJjYXNlJywgbWFyZ2luQm90dG9tOiAnNnB4JyB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbmlkYWQgZGUgQW7DoWxpc2lzOiB7Y2xhdmV9ICh7dmFsb3IubGVuZ3RofSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2YWxvci5tYXAoKHJlZ2lzdHJvLCBmaWxhSW5kZXgpID0+IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17ZmlsYUluZGV4fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luQm90dG9tOiBmaWxhSW5kZXggPCB2YWxvci5sZW5ndGggLSAxID8gJzEwcHgnIDogJzAnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ1RvcDogZmlsYUluZGV4ID4gMCA/ICc2cHgnIDogJzAnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyVG9wOiBmaWxhSW5kZXggPiAwID8gJzFweCBkYXNoZWQgI2UyZThmMCcgOiAnbm9uZSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSZW5kZXJpemFkb3JKU09OIGRhdG9zPXtyZWdpc3Ryb30gbml2ZWw9e25pdmVsICsgMX0gLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIFNpIHBvciBsYXMgZHVkYXMgZXMgdW4gb2JqZXRvIGRpcmVjdG8gcXVlIG5vIGVzIGFycmF5LCBsbyBzYWx0ZWFtb3NcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsb3IgPT09ICdvYmplY3QnICYmIHZhbG9yICE9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBWQVJJQUJMRVMgRVNUw4FOREFSIChDbGF2ZSB5IHZhbG9yIGp1bnRvcylcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2NsYXZlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ3JvdycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4V3JhcDogJ3dyYXAnLCAvLyBQb3Igc2kgZWwgdmFsb3IgZXMgbXV5IGxhcmdvLCBxdWUgYmFqZSBsaW1waW9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICc0cHggMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzEzcHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiAnMS40J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgey8qIENsYXZlOiBhaG9yYSBzaW4gYW5jaG8gZmlqbywgc2UgYWRhcHRhIGFsIHRleHRvICovfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGNvbG9yOiAnIzRhNTU2OCcsIGZvbnRXZWlnaHQ6IDUwMCwgbWFyZ2luUmlnaHQ6ICc2cHgnIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXZlfTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7LyogVmFsb3I6IHBlZ2FkbyBpbm1lZGlhdGFtZW50ZSBhIGxhIGNsYXZlICovfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGNvbG9yOiAnIzFhMjAyYycsIGZvbnRXZWlnaHQ6IDYwMCB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGF2ZS5zdGFydHNXaXRoKCdyZXN1bWVuRXN0YWRvJykgPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e2dldEJhZGdlU3R5bGUoU3RyaW5nKHZhbG9yKSl9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7U3RyaW5nKHZhbG9yKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyh2YWxvciA/PyAnJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFJlc2V0ZXJGb3JtKHByb3BzOiB7IG9uVHJ5QWdhaW46ICgpID0+IHZvaWQsIGRpc3BhdGNoZXJzOiBJRGlzcGF0Y2hlcnMsIG1lbnNhamU6IHN0cmluZyB9KSB7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICByZXR1cm4gPD5cclxuICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHByb3BzLmRpc3BhdGNoZXJzLlJFU0VUX09QQ0lPTkVTKHt9KSk7XHJcbiAgICAgICAgICAgICAgICBwcm9wcy5vblRyeUFnYWluKCk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPntwcm9wcy5tZW5zYWplfTwvQnV0dG9uPlxyXG4gICAgPC8+O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmVuZGVyQW5kQ2FwdHVyZUVycm9yIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFxyXG4gICAgeyBkaXNwYXRjaGVyczogSURpc3BhdGNoZXJzLCBtZW5zYWplUmV0b3Jubzogc3RyaW5nIH0sXHJcbiAgICB7IGhhc0Vycm9yOiBib29sZWFuLCBlcnJvcjogRXJyb3IgfCB7fSwgaW5mbz86IGFueSB9XHJcbj4ge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IHsgZGlzcGF0Y2hlcnM6IElEaXNwYXRjaGVycywgbWVuc2FqZVJldG9ybm86IHN0cmluZyB9KSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7IGhhc0Vycm9yOiBmYWxzZSwgZXJyb3I6IHt9IH07XHJcbiAgICB9XHJcbiAgICBvdmVycmlkZSBjb21wb25lbnREaWRDYXRjaChlcnJvcjogRXJyb3IsIGluZm86IGFueSkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBoYXNFcnJvcjogdHJ1ZSwgZXJyb3IsIGluZm8gfSk7XHJcbiAgICB9XHJcbiAgICBvdmVycmlkZSByZW5kZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuaGFzRXJyb3IpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDw+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5IdWJvIHVuIHByb2JsZW1hIGVuIGxhIHByb2dyYW1hY2nDs24gZGUgbGEgcGFudGFsbGEuPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPFJlc2V0ZXJGb3JtIGRpc3BhdGNoZXJzPXt0aGlzLnByb3BzLmRpc3BhdGNoZXJzfSBtZW5zYWplPXt0aGlzLnByb3BzLm1lbnNhamVSZXRvcm5vfSBvblRyeUFnYWluPXsoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBoYXNFcnJvcjogZmFsc2UsIGVycm9yOiB7fSB9KVxyXG4gICAgICAgICAgICAgICAgfSAvPlxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwib3V0bGluZWRcIiBjb2xvcj1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2dvdG9TaW5jcm9uaXphcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA+aXIgYSBsYSBwYW50YWxsYSBkZSBzaW5jcm9uaXphY2nDs248L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PkVycm9yIGRldGVjdGFkbzo8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT57ZXhwZWN0ZWQodGhpcy5zdGF0ZS5lcnJvcikubWVzc2FnZX08L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT57SlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0ZS5pbmZvKX08L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgIDwvPjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47XHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IHRoZW1lID0gY3JlYXRlVGhlbWUoe1xyXG4gICAgY29tcG9uZW50czoge1xyXG4gICAgICAgIE11aUNzc0Jhc2VsaW5lOiB7XHJcbiAgICAgICAgICAgIHN0eWxlT3ZlcnJpZGVzOiB7XHJcbiAgICAgICAgICAgICAgICBodG1sOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgV2Via2l0Rm9udFNtb290aGluZzogJ2F1dG8nLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgfSxcclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdXNlT25saW5lU3RhdHVzKCkge1xyXG4gICAgY29uc3QgW29ubGluZSwgc2V0T25saW5lXSA9IHVzZVN0YXRlKHdpbmRvdy5uYXZpZ2F0b3Iub25MaW5lKTtcclxuXHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiBzZXRPbmxpbmUod2luZG93Lm5hdmlnYXRvci5vbkxpbmUpO1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCBoYW5kbGVyKTtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb2ZmbGluZScsIGhhbmRsZXIpO1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvbmxpbmUnLCBoYW5kbGVyKTtcclxuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29mZmxpbmUnLCBoYW5kbGVyKTtcclxuICAgICAgICB9O1xyXG4gICAgfSwgW10pO1xyXG5cclxuICAgIHJldHVybiBvbmxpbmU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBSZW5kZXJQcmluY2lwYWw8VCwgVDIgZXh0ZW5kcyBBY3Rpb24+KHByb3BzOiB7IHN0b3JlOiBTdG9yZTxULCBUMj4sIGRpc3BhdGNoZXJzOiBJRGlzcGF0Y2hlcnMsIG1lbnNhamVSZXRvcm5vOiBzdHJpbmcsIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfSkge1xyXG4gICAgcmV0dXJuIDxSZWFjdC5TdHJpY3RNb2RlPlxyXG4gICAgICAgIDxQcm92aWRlciBzdG9yZT17cHJvcHMuc3RvcmV9PlxyXG4gICAgICAgICAgICA8VGhlbWVQcm92aWRlciB0aGVtZT17dGhlbWV9PlxyXG4gICAgICAgICAgICAgICAgPFJlbmRlckFuZENhcHR1cmVFcnJvciBkaXNwYXRjaGVycz17cHJvcHMuZGlzcGF0Y2hlcnN9IG1lbnNhamVSZXRvcm5vPXtwcm9wcy5tZW5zYWplUmV0b3Jub30+XHJcbiAgICAgICAgICAgICAgICAgICAgPENzc0Jhc2VsaW5lIC8+XHJcbiAgICAgICAgICAgICAgICAgICAge3Byb3BzLmNoaWxkcmVufVxyXG4gICAgICAgICAgICAgICAgPC9SZW5kZXJBbmRDYXB0dXJlRXJyb3I+XHJcbiAgICAgICAgICAgIDwvVGhlbWVQcm92aWRlcj5cclxuICAgICAgICA8L1Byb3ZpZGVyPlxyXG4gICAgPC9SZWFjdC5TdHJpY3RNb2RlPlxyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgbm9tYnJlTWVzZXMgPSBbJ2VuZXJvJywgJ2ZlYnJlcm8nLCAnbWFyem8nLCAnYWJyaWwnLCAnbWF5bycsICdqdW5pbycsICdqdWxpbycsICdhZ29zdG8nLCAnc2VwdGllbWJyZScsICdvY3R1YnJlJywgJ25vdmllbWJyZScsICdkaWNpZW1icmUnXTtcclxuZXhwb3J0IGNvbnN0IG5vbWJyZURpYXMgPSBbJ2RvbWluZ28nLCAnbHVuZXMnLCAnbWFydGVzJywgJ21pw6lyY29sZXMnLCAnanVldmVzJywgJ3ZpZXJuZXMnLCAnc8OhYmFkbyddO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWFyRmVjaGFEZXNkZVRleHRvSVNPKHRleHRvOiBzdHJpbmcpOiBEYXRlIHtcclxuICAgIHZhciBwYXJ0ZXMgPSB0ZXh0by5zcGxpdCgvWy8tXS9nKTtcclxuICAgIHJldHVybiBuZXcgRGF0ZShOdW1iZXIocGFydGVzWzBdKSwgTnVtYmVyKHBhcnRlc1sxXSkgLSAxLCBOdW1iZXIocGFydGVzWzJdKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZXNSZWZlcmVuY2lhKGZlY2hhOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgdmFyIGQgPSBjcmVhckZlY2hhRGVzZGVUZXh0b0lTTyhmZWNoYSk7XHJcbiAgICByZXR1cm4gbm9tYnJlTWVzZXNbZC5nZXRNb250aCgpXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZlY2hhUmVmZXJlbmNpYShmZWNoYTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHZhciBkID0gY3JlYXJGZWNoYURlc2RlVGV4dG9JU08oZmVjaGEpO1xyXG4gICAgcmV0dXJuIGAke25vbWJyZURpYXNbZC5nZXREYXkoKV19ICR7ZC5nZXREYXRlKCl9IGRlICR7bWVzUmVmZXJlbmNpYShmZWNoYSl9YDtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHRleHRvUGFyZW50ZXNjbyA9IFsnSmVmZS9hJywgJ0PDs255dWdlL3BhcmVqYScsICdIaWpvL2EnLCAnSGlqYXN0cm8vYScsICdZZXJubyBvIG51ZXJhJywgJ05pZXRvL2EnLCAnUGFkcmUvbWFkcmUvc3VlZ3JvL2EnLCAnSGVybWFuby9hJywgJ0N1w7FhZG8vYScsICdTb2JyaW5vL2EnLCAnQWJ1ZWxvL2EnLCAnT3RybyBmYW1pbGlhcicsICdPdHJvIG5vIGZhbWlsaWFyJ107XHJcbmV4cG9ydCBjb25zdCB0ZXh0b1BhcmVudGVzY29WY20gPSBbJ1Jlc3BvbmRlbnRlJywgJ0PDs255dWdlL3BhcmVqYScsICdIaWpvL2EnLCAnSGlqYXN0cm8vYScsICdZZXJubyBvIG51ZXJhJywgJ05pZXRvL2EnLCAnUGFkcmUvbWFkcmUvc3VlZ3JvL2EnLCAnSGVybWFuby9hJywgJ0N1w7FhZG8vYScsICdTb2JyaW5vL2EnLCAnQWJ1ZWxvL2EnLCAnT3RybyBmYW1pbGlhcicsICdPdHJvIG5vIGZhbWlsaWFyJ107XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gb2J0ZW5lclRleHRvUGFyZW50ZXNjbyhwNDogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgb3BlcmF0aXZvPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmIChwNCA9PSBudWxsIHx8IHA0IDwgMSkgcmV0dXJuICcuLi4uLi4uLic7XHJcbiAgICBjb25zdCBlc1ZjbSA9IG9wZXJhdGl2byA/IG9wZXJhdGl2by5zdGFydHNXaXRoKCd2Y20nKSA6IGZhbHNlO1xyXG4gICAgY29uc3QgbGlzdGEgPSBlc1ZjbSA/IHRleHRvUGFyZW50ZXNjb1ZjbSA6IHRleHRvUGFyZW50ZXNjbztcclxuICAgIHJldHVybiBsaXN0YVtwNCAtIDFdIHx8ICcuLi4uLi4uLic7XHJcbn1cclxuXHJcblxyXG5cclxuIl19
@@ -325,3 +325,33 @@ export function RenderPrincipal<T, T2 extends Action>(props: { store: Store<T, T
325
325
  </React.StrictMode>
326
326
  }
327
327
 
328
+ export const nombreMeses = ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'];
329
+ export const nombreDias = ['domingo', 'lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado'];
330
+
331
+ export function crearFechaDesdeTextoISO(texto: string): Date {
332
+ var partes = texto.split(/[/-]/g);
333
+ return new Date(Number(partes[0]), Number(partes[1]) - 1, Number(partes[2]));
334
+ }
335
+
336
+ export function mesReferencia(fecha: string): string {
337
+ var d = crearFechaDesdeTextoISO(fecha);
338
+ return nombreMeses[d.getMonth()];
339
+ }
340
+
341
+ export function fechaReferencia(fecha: string): string {
342
+ var d = crearFechaDesdeTextoISO(fecha);
343
+ return `${nombreDias[d.getDay()]} ${d.getDate()} de ${mesReferencia(fecha)}`;
344
+ }
345
+
346
+ export const textoParentesco = ['Jefe/a', 'Cónyuge/pareja', 'Hijo/a', 'Hijastro/a', 'Yerno o nuera', 'Nieto/a', 'Padre/madre/suegro/a', 'Hermano/a', 'Cuñado/a', 'Sobrino/a', 'Abuelo/a', 'Otro familiar', 'Otro no familiar'];
347
+ export const textoParentescoVcm = ['Respondente', 'Cónyuge/pareja', 'Hijo/a', 'Hijastro/a', 'Yerno o nuera', 'Nieto/a', 'Padre/madre/suegro/a', 'Hermano/a', 'Cuñado/a', 'Sobrino/a', 'Abuelo/a', 'Otro familiar', 'Otro no familiar'];
348
+
349
+ export function obtenerTextoParentesco(p4: number | null | undefined, operativo?: string): string {
350
+ if (p4 == null || p4 < 1) return '........';
351
+ const esVcm = operativo ? operativo.startsWith('vcm') : false;
352
+ const lista = esVcm ? textoParentescoVcm : textoParentesco;
353
+ return lista[p4 - 1] || '........';
354
+ }
355
+
356
+
357
+