dmencu 3.2.20 → 3.2.21
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.
- package/dist/client/unlogged/calculos-encuesta.d.ts +7 -0
- package/dist/client/unlogged/calculos-encuesta.js +139 -0
- package/dist/client/unlogged/helpers-casilleros.d.ts +14 -0
- package/dist/client/unlogged/helpers-casilleros.js +129 -0
- package/dist/server/server/procedures-dmencu.js +141 -28
- package/dist/server/server/table-rea.js +9 -5
- package/dist/server/server/table-rea_sup.js +8 -4
- package/dist/test/test-ejemplo.d.ts +1 -0
- package/dist/test/test-ejemplo.js +29 -0
- package/dist/test/test-rea-no-rea.d.ts +1 -0
- package/dist/test/test-rea-no-rea.js +589 -0
- package/dist/test/test.d.ts +2 -0
- package/dist/test/test.js +15 -0
- package/dist/unlogged/bypass-formulario.d.ts +198 -0
- package/dist/unlogged/bypass-formulario.js +1226 -0
- package/dist/unlogged/calculos-encuesta.d.ts +7 -0
- package/dist/unlogged/calculos-encuesta.js +213 -0
- package/dist/unlogged/helpers-casilleros.d.ts +14 -0
- package/dist/unlogged/helpers-casilleros.js +129 -0
- package/dist/unlogged/redux-formulario.d.ts +440 -0
- package/dist/unlogged/redux-formulario.js +324 -0
- package/dist/unlogged/render-config.d.ts +52 -0
- package/dist/unlogged/render-config.js +161 -0
- package/dist/unlogged/tipos.d.ts +575 -0
- package/dist/unlogged/tipos.js +21 -0
- package/dist/unlogged/unlogged/bypass-formulario copy.d.ts +198 -0
- package/dist/unlogged/unlogged/bypass-formulario copy.js +1226 -0
- package/dist/unlogged/unlogged/calculos-encuesta.d.ts +7 -0
- package/dist/unlogged/unlogged/calculos-encuesta.js +213 -0
- package/dist/unlogged/unlogged/helpers-casilleros.d.ts +14 -0
- package/dist/unlogged/unlogged/helpers-casilleros.js +130 -0
- package/dist/unlogged/unlogged/helpers.d.ts +14 -0
- package/dist/unlogged/unlogged/helpers.js +129 -0
- package/package.json +1 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { MapeoTipoItem, Respuestas, TipoCondicion, UnidadAnalisis } from "./tipos";
|
|
2
|
+
export type EvaluadorExpresion = (condicionJs: string, respuestas: Respuestas) => boolean;
|
|
3
|
+
export type ResultadoBusqueda = {
|
|
4
|
+
codigo: number | null;
|
|
5
|
+
resultado: boolean;
|
|
6
|
+
};
|
|
7
|
+
export declare function buscarReaNoReaEnRespuestas<T extends TipoCondicion>(unidadAnalisis: UnidadAnalisis, respuestas: Respuestas, lista: MapeoTipoItem[T][], tipo: T, tarea: string, evaluarExpresion?: EvaluadorExpresion): ResultadoBusqueda;
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
(function (factory) {
|
|
2
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
+
var v = factory(require, exports);
|
|
4
|
+
if (v !== undefined) module.exports = v;
|
|
5
|
+
}
|
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
|
7
|
+
define(["require", "exports", "like-ar"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.buscarReaNoReaEnRespuestas = buscarReaNoReaEnRespuestas;
|
|
13
|
+
const likeAr = require("like-ar");
|
|
14
|
+
const estrategiasCondicion = {
|
|
15
|
+
'rea': {
|
|
16
|
+
getCondicion: (item) => item.condicion_js,
|
|
17
|
+
getVariable: () => null,
|
|
18
|
+
getValor: () => null,
|
|
19
|
+
getCodigo: (item) => item.rea,
|
|
20
|
+
getResultado: (item) => item.es_positiva,
|
|
21
|
+
getTarea: (item) => { var _a; return (_a = item.tarea) !== null && _a !== void 0 ? _a : null; },
|
|
22
|
+
},
|
|
23
|
+
'no_rea': {
|
|
24
|
+
getCondicion: () => null,
|
|
25
|
+
getVariable: (item) => item.variable,
|
|
26
|
+
getValor: (item) => item.valor,
|
|
27
|
+
getCodigo: (item) => item.no_rea,
|
|
28
|
+
getResultado: () => true,
|
|
29
|
+
getTarea: (_item) => null,
|
|
30
|
+
},
|
|
31
|
+
'rea_sup': {
|
|
32
|
+
getCondicion: (item) => item.condicion_js,
|
|
33
|
+
getVariable: () => null,
|
|
34
|
+
getValor: () => null,
|
|
35
|
+
getCodigo: (item) => item.rea_sup,
|
|
36
|
+
getResultado: (item) => item.es_positiva,
|
|
37
|
+
getTarea: (item) => { var _a; return (_a = item.tarea) !== null && _a !== void 0 ? _a : null; },
|
|
38
|
+
},
|
|
39
|
+
'no_rea_sup': {
|
|
40
|
+
getCondicion: () => null,
|
|
41
|
+
getVariable: (item) => item.variable_sup,
|
|
42
|
+
getValor: (item) => item.valor_sup,
|
|
43
|
+
getCodigo: (item) => item.no_rea_sup,
|
|
44
|
+
getResultado: () => true,
|
|
45
|
+
getTarea: (_item) => null,
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
function itemCumpleCondicion(item, respuestas, estrategia, evaluarExpresion) {
|
|
49
|
+
const condicion = estrategia.getCondicion(item);
|
|
50
|
+
if (condicion !== null) {
|
|
51
|
+
if (!evaluarExpresion) {
|
|
52
|
+
throw new Error('Se requiere evaluarExpresion para evaluar una condicion JS');
|
|
53
|
+
}
|
|
54
|
+
return evaluarExpresion(condicion, respuestas);
|
|
55
|
+
}
|
|
56
|
+
const variable = estrategia.getVariable(item);
|
|
57
|
+
const valor = estrategia.getValor(item);
|
|
58
|
+
return !!variable && variable in respuestas && respuestas[variable] == valor;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Recorre la estructura completa desde la raíz y extrae el contexto combinado de
|
|
62
|
+
* TODAS las instancias de la UA 'targetUaNombre' (hermanas, primas, etc.).
|
|
63
|
+
*/
|
|
64
|
+
function obtenerTodasLasInstanciasDeUa(unidadAnalisis, respuestas, targetUaNombre, contextoAcumulado = {}) {
|
|
65
|
+
const resultados = [];
|
|
66
|
+
const respuestasPlanas = {};
|
|
67
|
+
for (const [key, value] of Object.keys(respuestas)) {
|
|
68
|
+
if (!Array.isArray(value)) {
|
|
69
|
+
respuestasPlanas[key] = value;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const contextoActual = Object.assign(Object.assign({}, contextoAcumulado), respuestasPlanas);
|
|
73
|
+
if ((unidadAnalisis === null || unidadAnalisis === void 0 ? void 0 : unidadAnalisis.unidad_analisis) === targetUaNombre) {
|
|
74
|
+
return [contextoActual];
|
|
75
|
+
}
|
|
76
|
+
const hijas = likeAr(unidadAnalisis === null || unidadAnalisis === void 0 ? void 0 : unidadAnalisis.hijas).array();
|
|
77
|
+
for (const uaHija of hijas) {
|
|
78
|
+
const nombreUaHija = uaHija === null || uaHija === void 0 ? void 0 : uaHija.unidad_analisis;
|
|
79
|
+
if (nombreUaHija && Array.isArray(respuestas[nombreUaHija])) {
|
|
80
|
+
for (const respuestasHija of respuestas[nombreUaHija]) {
|
|
81
|
+
const res = obtenerTodasLasInstanciasDeUa(uaHija, respuestasHija, targetUaNombre, contextoActual);
|
|
82
|
+
resultados.push(...res);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return resultados;
|
|
87
|
+
}
|
|
88
|
+
function buscarRecursivo(uaRaiz, respuestasRaiz, unidadAnalisisActual, respuestasActuales, listaOrdenada, tipo, tarea, evaluarExpresion) {
|
|
89
|
+
const estrategia = estrategiasCondicion[tipo];
|
|
90
|
+
for (const item of listaOrdenada) {
|
|
91
|
+
const itemTarea = estrategia.getTarea(item);
|
|
92
|
+
if (itemTarea && itemTarea !== tarea) {
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
if (itemCumpleCondicion(item, respuestasActuales, estrategia, evaluarExpresion)) {
|
|
96
|
+
const resultado = estrategia.getResultado(item);
|
|
97
|
+
const esReaPositiva = (tipo === 'rea' || tipo === 'rea_sup') && resultado === true;
|
|
98
|
+
if (esReaPositiva) {
|
|
99
|
+
const nombreUaActual = unidadAnalisisActual === null || unidadAnalisisActual === void 0 ? void 0 : unidadAnalisisActual.unidad_analisis;
|
|
100
|
+
if (nombreUaActual) {
|
|
101
|
+
// Obtener todas las personas/hogares de la encuesta (hermanas + primas)
|
|
102
|
+
const todasLasInstancias = obtenerTodasLasInstanciasDeUa(uaRaiz, respuestasRaiz, nombreUaActual);
|
|
103
|
+
if (todasLasInstancias.length > 1) {
|
|
104
|
+
const todasCumplen = todasLasInstancias.every((instanciaContexto) => itemCumpleCondicion(item, instanciaContexto, estrategia, evaluarExpresion));
|
|
105
|
+
if (!todasCumplen) {
|
|
106
|
+
continue; // Si alguna hermana o prima no cumple, se descarta este item
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
codigo: estrategia.getCodigo(item),
|
|
113
|
+
resultado,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const hijas = likeAr(unidadAnalisisActual === null || unidadAnalisisActual === void 0 ? void 0 : unidadAnalisisActual.hijas).array();
|
|
118
|
+
for (const uaHija of hijas) {
|
|
119
|
+
const nombreUaHija = uaHija === null || uaHija === void 0 ? void 0 : uaHija.unidad_analisis;
|
|
120
|
+
if (nombreUaHija && Array.isArray(respuestasActuales[nombreUaHija])) {
|
|
121
|
+
for (const respuestasHija of respuestasActuales[nombreUaHija]) {
|
|
122
|
+
const res = buscarRecursivo(uaRaiz, respuestasRaiz, uaHija, Object.assign(Object.assign({}, respuestasActuales), respuestasHija), listaOrdenada, tipo, tarea, evaluarExpresion);
|
|
123
|
+
if (res.codigo !== null) {
|
|
124
|
+
return res;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return { codigo: null, resultado: false };
|
|
130
|
+
}
|
|
131
|
+
function buscarReaNoReaEnRespuestas(unidadAnalisis, respuestas, lista, tipo, tarea, evaluarExpresion) {
|
|
132
|
+
if (!estrategiasCondicion[tipo]) {
|
|
133
|
+
throw new Error(`Tipo de condición desconocido: ${tipo}`);
|
|
134
|
+
}
|
|
135
|
+
const listaOrdenada = [...lista].sort((a, b) => { var _a, _b; return ((_a = a.orden) !== null && _a !== void 0 ? _a : 0) - ((_b = b.orden) !== null && _b !== void 0 ? _b : 0); });
|
|
136
|
+
return buscarRecursivo(unidadAnalisis, respuestas, unidadAnalisis, respuestas, listaOrdenada, tipo, tarea, evaluarExpresion);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3Vsb3MtZW5jdWVzdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvY2FsY3Vsb3MtZW5jdWVzdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUFnTUEsZ0VBd0JDO0lBeE5ELGtDQUFtQztJQUtuQyxNQUFNLG9CQUFvQixHQVN0QjtRQUNBLEtBQUssRUFBRTtZQUNILFlBQVksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUUsSUFBWSxDQUFDLFlBQVk7WUFDbEQsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7WUFDdkIsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7WUFDcEIsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBRSxJQUFZLENBQUMsR0FBRztZQUN0QyxZQUFZLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFFLElBQVksQ0FBQyxXQUFXO1lBQ2pELFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLFdBQUMsT0FBQSxNQUFDLElBQVksQ0FBQyxLQUFLLG1DQUFJLElBQUksQ0FBQSxFQUFBO1NBQ2xEO1FBQ0QsUUFBUSxFQUFFO1lBQ04sWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7WUFDeEIsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBRSxJQUFjLENBQUMsUUFBUTtZQUMvQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFFLElBQWMsQ0FBQyxLQUFLO1lBQ3pDLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUUsSUFBYyxDQUFDLE1BQU07WUFDM0MsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7WUFDeEIsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJO1NBQzVCO1FBQ0QsU0FBUyxFQUFFO1lBQ1AsWUFBWSxFQUFFLENBQUMsSUFBSSxFQUFFLEVB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Y2VzQ29udGVudCI6WyJpbXBvcnQgbGlrZUFyID0gcmVxdWlyZShcImxpa2UtYXJcIik7XG5pbXBvcnQgeyBJZFZhcmlhYmxlLCBNYXBlb1RpcG9JdGVtLCBOb1JlYSwgTm9SZWFTdXAsIFJlYSwgUmVhU3VwLCBSZXNwdWVzdGFzLCBUaXBvQ29uZGljaW9uLCBVbmlkYWRBbmFsaXNpcyB9IGZyb20gXCIuL3RpcG9zXCI7XG5cbmV4cG9ydCB0eXBlIEV2YWx1YWRvckV4cHJlc2lvbiA9IChjb25kaWNpb25Kczogc3RyaW5nLCByZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiBib29sZWFuO1xuXG5jb25zdCBlc3RyYXRlZ2lhc0NvbmRpY2lvbjoge1xuICAgIFtLIGluIFRpcG9Db25kaWNpb25dOiB7XG4gICAgICAgIGdldENvbmRpY2lvbjogKGl0ZW06IE1hcGVvVGlwb0l0ZW1bS10pID0+IHN0cmluZyB8IG51bGw7XG4gICAgICAgIGdldFZhcmlhYmxlOiAoaXRlbTogTWFwZW9UaXBvSXRlbVtLXSkgPT4gc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgZ2V0VmFsb3I6IChpdGVtOiBNYXBlb1RpcG9JdGVtW0tdKSA9PiBzdHJpbmcgfCBudWxsO1xuICAgICAgICBnZXRDb2RpZ286IChpdGVtOiBNYXBlb1RpcG9JdGVtW0tdKSA9PiBudW1iZXI7XG4gICAgICAgIGdldFJlc3VsdGFkbzogKGl0ZW06IE1hcGVvVGlwb0l0ZW1bS10pID0+IGJvb2xlYW47XG4gICAgICAgIGdldFRhcmVhOiAoaXRlbTogTWFwZW9UaXBvSXRlbVtLXSkgPT4gc3RyaW5nIHwgbnVsbDtcbiAgICB9XG59ID0ge1xuICAgICdyZWEnOiB7XG4gICAgICAgIGdldENvbmRpY2lvbjogKGl0ZW0pID0+IChpdGVtIGFzIFJlYSkuY29uZGljaW9uX2pzLFxuICAgICAgICBnZXRWYXJpYWJsZTogKCkgPT4gbnVsbCxcbiAgICAgICAgZ2V0VmFsb3I6ICgpID0+IG51bGwsXG4gICAgICAgIGdldENvZGlnbzogKGl0ZW0pID0+IChpdGVtIGFzIFJlYSkucmVhLFxuICAgICAgICBnZXRSZXN1bHRhZG86IChpdGVtKSA9PiAoaXRlbSBhcyBSZWEpLmVzX3Bvc2l0aXZhLFxuICAgICAgICBnZXRUYXJlYTogKGl0ZW0pID0+IChpdGVtIGFzIFJlYSkudGFyZWEgPz8gbnVsbCxcbiAgICB9LFxuICAgICdub19yZWEnOiB7XG4gICAgICAgIGdldENvbmRpY2lvbjogKCkgPT4gbnVsbCxcbiAgICAgICAgZ2V0VmFyaWFibGU6IChpdGVtKSA9PiAoaXRlbSBhcyBOb1JlYSkudmFyaWFibGUsXG4gICAgICAgIGdldFZhbG9yOiAoaXRlbSkgPT4gKGl0ZW0gYXMgTm9SZWEpLnZhbG9yLFxuICAgICAgICBnZXRDb2RpZ286IChpdGVtKSA9PiAoaXRlbSBhcyBOb1JlYSkubm9fcmVhLFxuICAgICAgICBnZXRSZXN1bHRhZG86ICgpID0+IHRydWUsXG4gICAgICAgIGdldFRhcmVhOiAoX2l0ZW0pID0+IG51bGwsXG4gICAgfSxcbiAgICAncmVhX3N1cCc6IHtcbiAgICAgICAgZ2V0Q29uZGljaW9uOiAoaXRlbSkgPT4gKGl0ZW0gYXMgUmVhU3VwKS5jb25kaWNpb25fanMsXG4gICAgICAgIGdldFZhcmlhYmxlOiAoKSA9PiBudWxsLFxuICAgICAgICBnZXRWYWxvcjogKCkgPT4gbnVsbCxcbiAgICAgICAgZ2V0Q29kaWdvOiAoaXRlbSkgPT4gKGl0ZW0gYXMgUmVhU3VwKS5yZWFfc3VwLFxuICAgICAgICBnZXRSZXN1bHRhZG86IChpdGVtKSA9PiAoaXRlbSBhcyBSZWFTdXApLmVzX3Bvc2l0aXZhLFxuICAgICAgICBnZXRUYXJlYTogKGl0ZW0pID0+IChpdGVtIGFzIFJlYVN1cCkudGFyZWEgPz8gbnVsbCxcbiAgICB9LFxuICAgICdub19yZWFfc3VwJzoge1xuICAgICAgICBnZXRDb25kaWNpb246ICgpID0+IG51bGwsXG4gICAgICAgIGdldFZhcmlhYmxlOiAoaXRlbSkgPT4gKGl0ZW0gYXMgTm9SZWFTdXApLnZhcmlhYmxlX3N1cCxcbiAgICAgICAgZ2V0VmFsb3I6IChpdGVtKSA9PiAoaXRlbSBhcyBOb1JlYVN1cCkudmFsb3Jfc3VwLFxuICAgICAgICBnZXRDb2RpZ286IChpdGVtKSA9PiAoaXRlbSBhcyBOb1JlYVN1cCkubm9fcmVhX3N1cCxcbiAgICAgICAgZ2V0UmVzdWx0YWRvOiAoKSA9PiB0cnVlLFxuICAgICAgICBnZXRUYXJlYTogKF9pdGVtKSA9PiBudWxsLFxuICAgIH1cbn07XG5cbmV4cG9ydCB0eXBlIFJlc3VsdGFkb0J1c3F1ZWRhID0ge1xuICAgIGNvZGlnbzogbnVtYmVyIHwgbnVsbDtcbiAgICByZXN1bHRhZG86IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBpdGVtQ3VtcGxlQ29uZGljaW9uPFQgZXh0ZW5kcyBUaXBvQ29uZGljaW9uPihcbiAgICBpdGVtOiBNYXBlb1RpcG9JdGVtW1RdLFxuICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMsXG4gICAgZXN0cmF0ZWdpYTogdHlwZW9mIGVzdHJhdGVnaWFzQ29uZGljaW9uW1RdLFxuICAgIGV2YWx1YXJFeHByZXNpb246IEV2YWx1YWRvckV4cHJlc2lvbiB8IHVuZGVmaW5lZFxuKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29uZGljaW9uID0gZXN0cmF0ZWdpYS5nZXRDb25kaWNpb24oaXRlbSk7XG4gICAgaWYgKGNvbmRpY2lvbiAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoIWV2YWx1YXJFeHByZXNpb24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2UgcmVxdWllcmUgZXZhbHVhckV4cHJlc2lvbiBwYXJhIGV2YWx1YXIgdW5hIGNvbmRpY2lvbiBKUycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmFsdWFyRXhwcmVzaW9uKGNvbmRpY2lvbiwgcmVzcHVlc3Rhcyk7XG4gICAgfVxuICAgIGNvbnN0IHZhcmlhYmxlID0gZXN0cmF0ZWdpYS5nZXRWYXJpYWJsZShpdGVtKTtcbiAgICBjb25zdCB2YWxvciA9IGVzdHJhdGVnaWEuZ2V0VmFsb3IoaXRlbSk7XG4gICAgcmV0dXJuICEhdmFyaWFibGUgJiYgdmFyaWFibGUgaW4gcmVzcHVlc3RhcyAmJiByZXNwdWVzdGFzW3ZhcmlhYmxlIGFzIElkVmFyaWFibGVdID09IHZhbG9yO1xufVxuXG4vKipcbiAqIFJlY29ycmUgbGEgZXN0cnVjdHVyYSBjb21wbGV0YSBkZXNkZSBsYSByYcOteiB5IGV4dHJhZSBlbCBjb250ZXh0byBjb21iaW5hZG8gZGVcbiAqIFRPREFTIGxhcyBpbnN0YW5jaWFzIGRlIGxhIFVBICd0YXJnZXRVYU5vbWJyZScgKGhlcm1hbmFzLCBwcmltYXMsIGV0Yy4pLlxuICovXG5mdW5jdGlvbiBvYnRlbmVyVG9kYXNMYXNJbnN0YW5jaWFzRGVVYShcbiAgICB1bmlkYWRBbmFsaXNpczogVW5pZGFkQW5hbGlzaXMsXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhcyxcbiAgICB0YXJnZXRVYU5vbWJyZTogc3RyaW5nLFxuICAgIGNvbnRleHRvQWN1bXVsYWRvID0ge30gYXMgUmVzcHVlc3Rhc1xuKTogUmVzcHVlc3Rhc1tdIHtcbiAgICBjb25zdCByZXN1bHRhZG9zOiBSZXNwdWVzdGFzW10gPSBbXTtcblxuICAgIGNvbnN0IHJlc3B1ZXN0YXNQbGFuYXMgPSB7fSBhcyBSZXNwdWVzdGFzO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5rZXlzKHJlc3B1ZXN0YXMpKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNQbGFuYXNba2V5IGFzIElkVmFyaWFibGVdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY29udGV4dG9BY3R1YWwgPSB7IC4uLmNvbnRleHRvQWN1bXVsYWRvLCAuLi5yZXNwdWVzdGFzUGxhbmFzIH07XG5cbiAgICBpZiAodW5pZGFkQW5hbGlzaXM/LnVuaWRhZF9hbmFsaXNpcyA9PT0gdGFyZ2V0VWFOb21icmUpIHtcbiAgICAgICAgcmV0dXJuIFtjb250ZXh0b0FjdHVhbF07XG4gICAgfVxuXG4gICAgY29uc3QgaGlqYXMgPSBsaWtlQXIodW5pZGFkQW5hbGlzaXM/LmhpamFzKS5hcnJheSgpO1xuICAgIGZvciAoY29uc3QgdWFIaWphIG9mIGhpamFzKSB7XG4gICAgICAgIGNvbnN0IG5vbWJyZVVhSGlqYSA9IHVhSGlqYT8udW5pZGFkX2FuYWxpc2lzO1xuICAgICAgICBpZiAobm9tYnJlVWFIaWphICYmIEFycmF5LmlzQXJyYXkocmVzcHVlc3Rhc1tub21icmVVYUhpamFdKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCByZXNwdWVzdGFzSGlqYSBvZiByZXNwdWVzdGFzW25vbWJyZVVhSGlqYV0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBvYnRlbmVyVG9kYXNMYXNJbnN0YW5jaWFzRGVVYShcbiAgICAgICAgICAgICAgICAgICAgdWFIaWphLFxuICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzSGlqYSxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VWFOb21icmUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHRvQWN0dWFsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXN1bHRhZG9zLnB1c2goLi4ucmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRhZG9zO1xufVxuXG5mdW5jdGlvbiBidXNjYXJSZWN1cnNpdm88VCBleHRlbmRzIFRpcG9Db25kaWNpb24+KFxuICAgIHVhUmFpejogVW5pZGFkQW5hbGlzaXMsXG4gICAgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXMsXG4gICAgdW5pZGFkQW5hbGlzaXNBY3R1YWw6IFVuaWRhZEFuYWxpc2lzLFxuICAgIHJlc3B1ZXN0YXNBY3R1YWxlczogUmVzcHVlc3RhcyxcbiAgICBsaXN0YU9yZGVuYWRhOiBNYXBlb1RpcG9JdGVtW1RdW10sXG4gICAgdGlwbzogVCxcbiAgICB0YXJlYTogc3RyaW5nLFxuICAgIGV2YWx1YXJFeHByZXNpb246IEV2YWx1YWRvckV4cHJlc2lvbiB8IHVuZGVmaW5lZFxuKTogUmVzdWx0YWRvQnVzcXVlZGEge1xuXG4gICAgY29uc3QgZXN0cmF0ZWdpYSA9IGVzdHJhdGVnaWFzQ29uZGljaW9uW3RpcG9dO1xuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGxpc3RhT3JkZW5hZGEpIHtcbiAgICAgICAgY29uc3QgaXRlbVRhcmVhID0gZXN0cmF0ZWdpYS5nZXRUYXJlYShpdGVtKTtcbiAgICAgICAgaWYgKGl0ZW1UYXJlYSAmJiBpdGVtVGFyZWEgIT09IHRhcmVhKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdGVtQ3VtcGxlQ29uZGljaW9uKGl0ZW0sIHJlc3B1ZXN0YXNBY3R1YWxlcywgZXN0cmF0ZWdpYSwgZXZhbHVhckV4cHJlc2lvbikpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdGFkbyA9IGVzdHJhdGVnaWEuZ2V0UmVzdWx0YWRvKGl0ZW0pO1xuICAgICAgICAgICAgY29uc3QgZXNSZWFQb3NpdGl2YSA9ICh0aXBvID09PSAncmVhJyB8fCB0aXBvID09PSAncmVhX3N1cCcpICYmIHJlc3VsdGFkbyA9PT0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGVzUmVhUG9zaXRpdmEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub21icmVVYUFjdHVhbCA9IHVuaWRhZEFuYWxpc2lzQWN0dWFsPy51bmlkYWRfYW5hbGlzaXM7XG4gICAgICAgICAgICAgICAgaWYgKG5vbWJyZVVhQWN0dWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE9idGVuZXIgdG9kYXMgbGFzIHBlcnNvbmFzL2hvZ2FyZXMgZGUgbGEgZW5jdWVzdGEgKGhlcm1hbmFzICsgcHJpbWFzKVxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b2Rhc0xhc0luc3RhbmNpYXMgPSBvYnRlbmVyVG9kYXNMYXNJbnN0YW5jaWFzRGVVYShcbiAgICAgICAgICAgICAgICAgICAgICAgIHVhUmFpeixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNSYWl6LFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9tYnJlVWFBY3R1YWxcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodG9kYXNMYXNJbnN0YW5jaWFzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvZGFzQ3VtcGxlbiA9IHRvZGFzTGFzSW5zdGFuY2lhcy5ldmVyeSgoaW5zdGFuY2lhQ29udGV4dG8pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUN1bXBsZUNvbmRpY2lvbihpdGVtLCBpbnN0YW5jaWFDb250ZXh0bywgZXN0cmF0ZWdpYSwgZXZhbHVhckV4cHJlc2lvbilcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdG9kYXNDdW1wbGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIFNpIGFsZ3VuYSBoZXJtYW5hIG8gcHJpbWEgbm8gY3VtcGxlLCBzZSBkZXNjYXJ0YSBlc3RlIGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb2RpZ286IGVzdHJhdGVnaWEuZ2V0Q29kaWdvKGl0ZW0pLFxuICAgICAgICAgICAgICAgIHJlc3VsdGFkbyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBoaWphcyA9IGxpa2VBcih1bmlkYWRBbmFsaXNpc0FjdHVhbD8uaGlqYXMpLmFycmF5KCk7XG4gICAgZm9yIChjb25zdCB1YUhpamEgb2YgaGlqYXMpIHtcbiAgICAgICAgY29uc3Qgbm9tYnJlVWFIaWphID0gdWFIaWphPy51bmlkYWRfYW5hbGlzaXM7XG4gICAgICAgIGlmIChub21icmVVYUhpamEgJiYgQXJyYXkuaXNBcnJheShyZXNwdWVzdGFzQWN0dWFsZXNbbm9tYnJlVWFIaWphXSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVzcHVlc3Rhc0hpamEgb2YgcmVzcHVlc3Rhc0FjdHVhbGVzW25vbWJyZVVhSGlqYV0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBidXNjYXJSZWN1cnNpdm8oXG4gICAgICAgICAgICAgICAgICAgIHVhUmFpeixcbiAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1JhaXosXG4gICAgICAgICAgICAgICAgICAgIHVhSGlqYSxcbiAgICAgICAgICAgICAgICAgICAgeyAuLi5yZXNwdWVzdGFzQWN0dWFsZXMsIC4uLnJlc3B1ZXN0YXNIaWphIH0sXG4gICAgICAgICAgICAgICAgICAgIGxpc3RhT3JkZW5hZGEsXG4gICAgICAgICAgICAgICAgICAgIHRpcG8sXG4gICAgICAgICAgICAgICAgICAgIHRhcmVhLFxuICAgICAgICAgICAgICAgICAgICBldmFsdWFyRXhwcmVzaW9uXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzLmNvZGlnbyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGNvZGlnbzogbnVsbCwgcmVzdWx0YWRvOiBmYWxzZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVzY2FyUmVhTm9SZWFFblJlc3B1ZXN0YXM8VCBleHRlbmRzIFRpcG9Db25kaWNpb24+KFxuICAgIHVuaWRhZEFuYWxpc2lzOiBVbmlkYWRBbmFsaXNpcyxcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFzLFxuICAgIGxpc3RhOiBNYXBlb1RpcG9JdGVtW1RdW10sXG4gICAgdGlwbzogVCxcbiAgICB0YXJlYTogc3RyaW5nLFxuICAgIGV2YWx1YXJFeHByZXNpb24/OiBFdmFsdWFkb3JFeHByZXNpb25cbik6IFJlc3VsdGFkb0J1c3F1ZWRhIHtcblxuICAgIGlmICghZXN0cmF0ZWdpYXNDb25kaWNpb25bdGlwb10pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaXBvIGRlIGNvbmRpY2nDs24gZGVzY29ub2NpZG86ICR7dGlwb31gKTtcbiAgICB9XG5cbiAgICBjb25zdCBsaXN0YU9yZGVuYWRhID0gWy4uLmxpc3RhXS5zb3J0KChhLCBiKSA9PiAoYS5vcmRlbiA/PyAwKSAtIChiLm9yZGVuID8/IDApKTtcbiAgICByZXR1cm4gYnVzY2FyUmVjdXJzaXZvKFxuICAgICAgICB1bmlkYWRBbmFsaXNpcyxcbiAgICAgICAgcmVzcHVlc3RhcyxcbiAgICAgICAgdW5pZGFkQW5hbGlzaXMsXG4gICAgICAgIHJlc3B1ZXN0YXMsXG4gICAgICAgIGxpc3RhT3JkZW5hZGEsXG4gICAgICAgIHRpcG8sXG4gICAgICAgIHRhcmVhLFxuICAgICAgICBldmFsdWFyRXhwcmVzaW9uXG4gICAgKTtcbn0iXX0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const helpersCasilleros: {
|
|
2
|
+
null2zero(posibleNull: any): any;
|
|
3
|
+
div0err(numerador: number, denominador: number, pk: string): number;
|
|
4
|
+
funs: {
|
|
5
|
+
blanco(x: any): boolean;
|
|
6
|
+
hoy(): any;
|
|
7
|
+
fecha_valida(x: string): boolean;
|
|
8
|
+
mesanio_valido(x: string): boolean;
|
|
9
|
+
informado(x: any): boolean;
|
|
10
|
+
nsnc(x: any): boolean;
|
|
11
|
+
par(x: number): boolean;
|
|
12
|
+
edad_mes_annio_valido(edad: number, mesAnnio: string, fechaRealizacionDDMMYYYY: string): boolean;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
(function (factory) {
|
|
2
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
+
var v = factory(require, exports);
|
|
4
|
+
if (v !== undefined) module.exports = v;
|
|
5
|
+
}
|
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
|
7
|
+
define(["require", "exports"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.helpersCasilleros = void 0;
|
|
13
|
+
exports.helpersCasilleros = {
|
|
14
|
+
null2zero(posibleNull) {
|
|
15
|
+
if (posibleNull == null) {
|
|
16
|
+
return 0;
|
|
17
|
+
}
|
|
18
|
+
return posibleNull;
|
|
19
|
+
},
|
|
20
|
+
div0err(numerador, denominador, pk) {
|
|
21
|
+
if (denominador == 0) {
|
|
22
|
+
throw new Error("Error en " + pk + " division por cero de " + numerador);
|
|
23
|
+
}
|
|
24
|
+
return numerador / denominador;
|
|
25
|
+
},
|
|
26
|
+
funs: {
|
|
27
|
+
blanco(x) {
|
|
28
|
+
return x !== 0 && !x;
|
|
29
|
+
},
|
|
30
|
+
hoy() {
|
|
31
|
+
return date.today().toDmy();
|
|
32
|
+
},
|
|
33
|
+
fecha_valida(x) {
|
|
34
|
+
var formato_valido = /^([1-9]|0[1-9]|[12]\d|3[01])\/([1-9]|0[1-9]|1[012])\/20\d\d$/.test(x);
|
|
35
|
+
var xDate;
|
|
36
|
+
var conversionOk;
|
|
37
|
+
conversionOk = true;
|
|
38
|
+
if (formato_valido) {
|
|
39
|
+
const [d, m, y] = x.split('/');
|
|
40
|
+
try {
|
|
41
|
+
xDate = new Date(`${y}/${m}/${d}`);
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
conversionOk = false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
;
|
|
48
|
+
//faltaria validar que no sea una fecha futura y que sea una fecha en el rango del operativo
|
|
49
|
+
return formato_valido && conversionOk;
|
|
50
|
+
},
|
|
51
|
+
mesanio_valido(x) {
|
|
52
|
+
var formato_valido = /^([1-9]|0[1-9]|1[012])\/(19|20)\d\d$/.test(x);
|
|
53
|
+
return formato_valido;
|
|
54
|
+
},
|
|
55
|
+
informado(x) {
|
|
56
|
+
return x !== undefined && x !== null && (!(x instanceof Array) || x.length !== 0)
|
|
57
|
+
&& (!(x instanceof Object) || Object.keys(x).length !== 0);
|
|
58
|
+
},
|
|
59
|
+
nsnc(x) {
|
|
60
|
+
return x == -9;
|
|
61
|
+
},
|
|
62
|
+
par(x) {
|
|
63
|
+
return x % 2 == 0;
|
|
64
|
+
},
|
|
65
|
+
edad_mes_annio_valido(edad, mesAnnio, fechaRealizacionDDMMYYYY) {
|
|
66
|
+
var mesesDiferencia = (d1, d2) => {
|
|
67
|
+
var months;
|
|
68
|
+
months = (d2.getFullYear() - d1.getFullYear()) * 12;
|
|
69
|
+
months -= d1.getMonth();
|
|
70
|
+
months += d2.getMonth();
|
|
71
|
+
return months <= 0 ? 0 : months;
|
|
72
|
+
};
|
|
73
|
+
var partesRealizacion = fechaRealizacionDDMMYYYY.split("/");
|
|
74
|
+
//@ts-ignore las partes corresponden a una fecha válida
|
|
75
|
+
var today = date.ymd(Number(partesRealizacion[2]), Number(partesRealizacion[1]), Number(partesRealizacion[0]));
|
|
76
|
+
var partesMesAnnio = mesAnnio.split('/');
|
|
77
|
+
//@ts-ignore las partes corresponden a una fecha válida
|
|
78
|
+
var nacimiento = date.ymd(Number(partesMesAnnio[1]), Number(partesMesAnnio[0]), 1);
|
|
79
|
+
//@ts-ignore RealDate es Date y se puede restar
|
|
80
|
+
var diferenciaMeses = mesesDiferencia(nacimiento, today);
|
|
81
|
+
var edadDecimales = diferenciaMeses / 12; //ej 36.5
|
|
82
|
+
return (Math.floor(edadDecimales) == edad || //misma edad
|
|
83
|
+
edadDecimales == edad + 1 //mes de tolerancia
|
|
84
|
+
);
|
|
85
|
+
},
|
|
86
|
+
//copiar_campo_ua_rama(respuestasOrigen:Respuestas[], posicion:number, variableOrigen: IdVariable, camino:string, condicion:boolean){
|
|
87
|
+
// return condicion?(respuestasOrigen && respuestasOrigen[posicion-1] && respuestasOrigen[posicion-1][`${camino}`][variableOrigen]):null
|
|
88
|
+
// return condicion?eval(`respuestasOrigen[${posicion-1}].`+camino+'.'+variableOrigen):null;
|
|
89
|
+
//}
|
|
90
|
+
/*
|
|
91
|
+
dbo:{
|
|
92
|
+
datoFamiliar(encu:string,hog:number,per:number, dato:string){
|
|
93
|
+
var xpersonas=personas;
|
|
94
|
+
return encu==enc && hog==hogar && informado(xpersonas) && per<= xpersonas.length && per>=1 && !!xpersonas[per-1][dato]? xpersonas[per-1][dato]:null
|
|
95
|
+
},
|
|
96
|
+
edadfamiliar(encu:string,hog:number,per:number){
|
|
97
|
+
var xpersonas=personas;
|
|
98
|
+
return datoFamiliar(encu:string,hog:number,per:number,'edad')
|
|
99
|
+
},
|
|
100
|
+
existeindividual(encu:string,hog:number,per:number){
|
|
101
|
+
var xpersonas=personas;
|
|
102
|
+
return encu==enc && hog==hogar && !!personas && per<= personas.length && per>=1 && !!personas[per-1]['entreaind']
|
|
103
|
+
},
|
|
104
|
+
existemiembro(encu:string,hog:number,per:number){
|
|
105
|
+
var xpersonas=personas;
|
|
106
|
+
return encu==enc && hog==hogar && !!personas && per<= personas.length && per>=1
|
|
107
|
+
},
|
|
108
|
+
nroconyuges(encu:string,hog:number){
|
|
109
|
+
var xpersonas=personas
|
|
110
|
+
return xpersonas.filter( per->per.p4==2).length
|
|
111
|
+
},
|
|
112
|
+
nrojefes(encu:string,hog:number,per:number){
|
|
113
|
+
return personas.filter( per->per.p4==1).length
|
|
114
|
+
},
|
|
115
|
+
parentescofamiliar(encu:string,hog:number,per:number){
|
|
116
|
+
return datoFamiliar(encu:string,hog:number,per:number,'p4')
|
|
117
|
+
},
|
|
118
|
+
sexofamiliar(encu:string,hog:number,per:number){
|
|
119
|
+
var xpersonas=personas;
|
|
120
|
+
return encu==enc && hog==hogar && !!xpersonas && per<= xpersonas.length && per>=1 && !!xpersonas[per-1].sexo? xpersonas[per-1]['sexo']:null
|
|
121
|
+
},
|
|
122
|
+
sitconyjefe(encu:string,hog:number){
|
|
123
|
+
return datoFamiliar(encu:string,hog:number,1,'p5')
|
|
124
|
+
}
|
|
125
|
+
} */
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
});
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy1jYXNpbGxlcm9zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3VubG9nZ2VkL2hlbHBlcnMtY2FzaWxsZXJvcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFDYSxRQUFBLGlCQUFpQixHQUFHO1FBQzdCLFNBQVMsQ0FBQyxXQUFnQjtZQUN0QixJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDdEIsT0FBTyxDQUFDLENBQUM7WUFDYixDQUFDO1lBQ0QsT0FBTyxXQUFXLENBQUM7UUFDdkIsQ0FBQztRQUNELE9BQU8sQ0FBQyxTQUFpQixFQUFFLFdBQW1CLEVBQUUsRUFBVTtZQUN0RCxJQUFJLFdBQVcsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLHdCQUF3QixHQUFHLFNBQVMsQ0FBQyxDQUFDO1lBQzdFLENBQUM7WUFDRCxPQUFPLFNBQVMsR0FBRyxXQUFXLENBQUM7UUFDbkMsQ0FBQztRQUNELElBQUksRUFBRTtZQUNGLE1BQU0sQ0FBQyxDQUFNO2dCQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtZQUN4QixDQUFDO1lBQ0QsR0FBRztnQkFDQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtZQUMvQixDQUFDO1lBQ0QsWUFBWSxDQUFDLENBQVM7Z0JBQ2xCLElBQUksY0FBYyxHQUFHLDhEQUE4RCxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDM0YsSUFBSSxLQUFXLENBQUM7Z0JBQ2hCLElBQUksWUFBcUIsQ0FBQztnQkFDMUIsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDcEIsSUFBSSxjQUFjLEVBQUUsQ0FBQztvQkFDakIsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxD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QUFJLFlBQVk7b0JBQ2pELGFBQWEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLG1CQUFtQjtpQkFDaEQsQ0FBQTtZQUNMLENBQUM7WUFDRCxxSUFBcUk7WUFDckksMklBQTJJO1lBQzNJLCtGQUErRjtZQUMvRixHQUFHO1lBQ0g7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dCQW1DSTtTQUNQO0tBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5leHBvcnQgY29uc3QgaGVscGVyc0Nhc2lsbGVyb3MgPSB7XHJcbiAgICBudWxsMnplcm8ocG9zaWJsZU51bGw6IGFueSkge1xyXG4gICAgICAgIGlmIChwb3NpYmxlTnVsbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcG9zaWJsZU51bGw7XHJcbiAgICB9LFxyXG4gICAgZGl2MGVycihudW1lcmFkb3I6IG51bWJlciwgZGVub21pbmFkb3I6IG51bWJlciwgcGs6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChkZW5vbWluYWRvciA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVycm9yIGVuIFwiICsgcGsgKyBcIiBkaXZpc2lvbiBwb3IgY2VybyBkZSBcIiArIG51bWVyYWRvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudW1lcmFkb3IgLyBkZW5vbWluYWRvcjtcclxuICAgIH0sXHJcbiAgICBmdW5zOiB7XHJcbiAgICAgICAgYmxhbmNvKHg6IGFueSkge1xyXG4gICAgICAgICAgICByZXR1cm4geCAhPT0gMCAmJiAheFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaG95KCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0ZS50b2RheSgpLnRvRG15KClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZlY2hhX3ZhbGlkYSh4OiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdG9fdmFsaWRvID0gL14oWzEtOV18MFsxLTldfFsxMl1cXGR8M1swMV0pXFwvKFsxLTldfDBbMS05XXwxWzAxMl0pXFwvMjBcXGRcXGQkLy50ZXN0KHgpXHJcbiAgICAgICAgICAgIHZhciB4RGF0ZTogRGF0ZTtcclxuICAgICAgICAgICAgdmFyIGNvbnZlcnNpb25PazogYm9vbGVhbjtcclxuICAgICAgICAgICAgY29udmVyc2lvbk9rID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGZvcm1hdG9fdmFsaWRvKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBbZCwgbSwgeV0gPSB4LnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHhEYXRlID0gbmV3IERhdGUoYCR7eX0vJHttfS8ke2R9YCk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzaW9uT2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLy9mYWx0YXJpYSB2YWxpZGFyIHF1ZSBubyBzZWEgdW5hIGZlY2hhIGZ1dHVyYSB5IHF1ZSBzZWEgdW5hIGZlY2hhIGVuIGVsIHJhbmdvIGRlbCBvcGVyYXRpdm9cclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdG9fdmFsaWRvICYmIGNvbnZlcnNpb25Pa1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWVzYW5pb192YWxpZG8oeDogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHZhciBmb3JtYXRvX3ZhbGlkbyA9IC9eKFsxLTldfDBbMS05XXwxWzAxMl0pXFwvKDE5fDIwKVxcZFxcZCQvLnRlc3QoeClcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdG9fdmFsaWRvXHJcbiAgICAgICAgfSxcclxuICAgICAgICBpbmZvcm1hZG8oeDogYW55KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB4ICE9PSB1bmRlZmluZWQgJiYgeCAhPT0gbnVsbCAmJiAoISh4IGluc3RhbmNlb2YgQXJyYXkpIHx8IHgubGVuZ3RoICE9PSAwKVxyXG4gICAgICAgICAgICAgICAgJiYgKCEoeCBpbnN0YW5jZW9mIE9iamVjdCkgfHwgT2JqZWN0LmtleXMoeCkubGVuZ3RoICE9PSAwKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbnNuYyh4OiBhbnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHggPT0gLTlcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBhcih4OiBudW1iZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHggJSAyID09IDBcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVkYWRfbWVzX2FubmlvX3ZhbGlkbyhlZGFkOiBudW1iZXIsIG1lc0FubmlvOiBzdHJpbmcsIGZlY2hhUmVhbGl6YWNpb25ERE1NWVlZWTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHZhciBtZXNlc0RpZmVyZW5jaWEgPSAoZDE6IERhdGUsIGQyOiBEYXRlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbW9udGhzO1xyXG4gICAgICAgICAgICAgICAgbW9udGhzID0gKGQyLmdldEZ1bGxZZWFyKCkgLSBkMS5nZXRGdWxsWWVhcigpKSAqIDEyO1xyXG4gICAgICAgICAgICAgICAgbW9udGhzIC09IGQxLmdldE1vbnRoKCk7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgKz0gZDIuZ2V0TW9udGgoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHMgPD0gMCA/IDAgOiBtb250aHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHBhcnRlc1JlYWxpemFjaW9uID0gZmVjaGFSZWFsaXphY2lvbkRETU1ZWVlZLnNwbGl0KFwiL1wiKTtcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIGxhcyBwYXJ0ZXMgY29ycmVzcG9uZGVuIGEgdW5hIGZlY2hhIHbDoWxpZGFcclxuICAgICAgICAgICAgdmFyIHRvZGF5ID0gZGF0ZS55bWQoTnVtYmVyKHBhcnRlc1JlYWxpemFjaW9uWzJdKSwgTnVtYmVyKHBhcnRlc1JlYWxpemFjaW9uWzFdKSwgTnVtYmVyKHBhcnRlc1JlYWxpemFjaW9uWzBdKSlcclxuICAgICAgICAgICAgdmFyIHBhcnRlc01lc0FubmlvID0gbWVzQW5uaW8uc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIGxhcyBwYXJ0ZXMgY29ycmVzcG9uZGVuIGEgdW5hIGZlY2hhIHbDoWxpZGFcclxuICAgICAgICAgICAgdmFyIG5hY2ltaWVudG8gPSBkYXRlLnltZChOdW1iZXIocGFydGVzTWVzQW5uaW9bMV0pLCBOdW1iZXIocGFydGVzTWVzQW5uaW9bMF0pLCAxKVxyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgUmVhbERhdGUgZXMgRGF0ZSB5IHNlIHB1ZWRlIHJlc3RhclxyXG4gICAgICAgICAgICB2YXIgZGlmZXJlbmNpYU1lc2VzID0gbWVzZXNEaWZlcmVuY2lhKG5hY2ltaWVudG8sIHRvZGF5KTtcclxuICAgICAgICAgICAgdmFyIGVkYWREZWNpbWFsZXMgPSBkaWZlcmVuY2lhTWVzZXMgLyAxMjsgLy9laiAzNi41XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBNYXRoLmZsb29yKGVkYWREZWNpbWFsZXMpID09IGVkYWQgfHwgLy9taXNtYSBlZGFkXHJcbiAgICAgICAgICAgICAgICBlZGFkRGVjaW1hbGVzID09IGVkYWQgKyAxIC8vbWVzIGRlIHRvbGVyYW5jaWFcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy9jb3BpYXJfY2FtcG9fdWFfcmFtYShyZXNwdWVzdGFzT3JpZ2VuOlJlc3B1ZXN0YXNbXSwgcG9zaWNpb246bnVtYmVyLCB2YXJpYWJsZU9yaWdlbjogSWRWYXJpYWJsZSwgY2FtaW5vOnN0cmluZywgY29uZGljaW9uOmJvb2xlYW4pe1xyXG4gICAgICAgIC8vICAgIHJldHVybiBjb25kaWNpb24/KHJlc3B1ZXN0YXNPcmlnZW4gJiYgcmVzcHVlc3Rhc09yaWdlbltwb3NpY2lvbi0xXSAmJiByZXNwdWVzdGFzT3JpZ2VuW3Bvc2ljaW9uLTFdW2Ake2NhbWlub31gXVt2YXJpYWJsZU9yaWdlbl0pOm51bGxcclxuICAgICAgICAvLyAgICByZXR1cm4gY29uZGljaW9uP2V2YWwoYHJlc3B1ZXN0YXNPcmlnZW5bJHtwb3NpY2lvbi0xfV0uYCtjYW1pbm8rJy4nK3ZhcmlhYmxlT3JpZ2VuKTpudWxsO1xyXG4gICAgICAgIC8vfVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgZGJvOntcclxuICAgICAgICAgICAgZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlciwgZGF0bzpzdHJpbmcpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiBpbmZvcm1hZG8oeHBlcnNvbmFzKSAmJiBwZXI8PSB4cGVyc29uYXMubGVuZ3RoICYmIHBlcj49MSAmJiAhIXhwZXJzb25hc1twZXItMV1bZGF0b10/IHhwZXJzb25hc1twZXItMV1bZGF0b106bnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlZGFkZmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlciwnZWRhZCcpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGV4aXN0ZWluZGl2aWR1YWwoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgISFwZXJzb25hcyAmJiBwZXI8PSBwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xICYmICEhcGVyc29uYXNbcGVyLTFdWydlbnRyZWFpbmQnXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBleGlzdGVtaWVtYnJvKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmICEhcGVyc29uYXMgJiYgcGVyPD0gcGVyc29uYXMubGVuZ3RoICYmIHBlcj49MVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBucm9jb255dWdlcyhlbmN1OnN0cmluZyxob2c6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXNcclxuICAgICAgICAgICAgICAgIHJldHVybiB4cGVyc29uYXMuZmlsdGVyKCBwZXItPnBlci5wND09MikubGVuZ3RoXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG5yb2plZmVzKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGVyc29uYXMuZmlsdGVyKCBwZXItPnBlci5wND09MSkubGVuZ3RoXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHBhcmVudGVzY29mYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIsJ3A0JylcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V4b2ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmICEheHBlcnNvbmFzICYmIHBlcjw9IHhwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xICYmICEheHBlcnNvbmFzW3Blci0xXS5zZXhvPyB4cGVyc29uYXNbcGVyLTFdWydzZXhvJ106bnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaXRjb255amVmZShlbmN1OnN0cmluZyxob2c6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlciwxLCdwNScpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICovXHJcbiAgICB9XHJcbn07Il19
|