dmencu 3.3.1 → 3.5.0

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 (83) hide show
  1. package/ayuda/asignacion.md +16 -0
  2. package/ayuda/circuito-encuesta.md +27 -0
  3. package/ayuda/control.md +13 -0
  4. package/ayuda/dm-cambiar-modo.md +16 -0
  5. package/ayuda/dm-relevamiento.md +20 -0
  6. package/ayuda/dm-sincronizar.md +18 -0
  7. package/ayuda/fin-de-campo.md +14 -0
  8. package/ayuda/metadatos.md +14 -0
  9. package/ayuda/muestra.md +14 -0
  10. package/ayuda/procesar.md +13 -0
  11. package/ayuda/recepcion.md +20 -0
  12. package/ayuda/supervision.md +9 -0
  13. package/ayuda/usuarios.md +12 -0
  14. package/ayuda/varios.md +23 -0
  15. package/dist/client/client/client.js +99 -2
  16. package/dist/client/client/css/menu.styl +29 -0
  17. package/dist/client/unlogged/css/formulario-react.styl +9 -0
  18. package/dist/client/unlogged/render-config.d.ts +5 -1
  19. package/dist/client/unlogged/render-config.js +14 -1
  20. package/dist/client/unlogged/render-formulario.d.ts +1 -0
  21. package/dist/client/unlogged/render-formulario.js +43 -2
  22. package/dist/client/unlogged/render-formulario.tsx +71 -0
  23. package/dist/client/unlogged/render-general.d.ts +2 -0
  24. package/dist/client/unlogged/render-general.js +2 -1
  25. package/dist/client/unlogged/render-general.tsx +1 -0
  26. package/dist/client/unlogged/render-init.d.ts +1 -0
  27. package/dist/client/unlogged/render-init.js +9 -2
  28. package/dist/client/unlogged/tipos.d.ts +19 -1
  29. package/dist/client/unlogged/tipos.js +1 -1
  30. package/dist/server/app-dmencu.d.ts +8 -1
  31. package/dist/server/app-dmencu.js +42 -2
  32. package/dist/server/ayuda.d.ts +19 -0
  33. package/dist/server/ayuda.js +224 -0
  34. package/dist/server/def-config.d.ts +1 -1
  35. package/dist/server/def-config.js +2 -1
  36. package/dist/server/procedures-dmencu.js +20 -2
  37. package/dist/server/server/app-dmencu.d.ts +8 -1
  38. package/dist/server/server/app-dmencu.js +42 -2
  39. package/dist/server/server/ayuda.d.ts +19 -0
  40. package/dist/server/server/ayuda.js +224 -0
  41. package/dist/server/server/def-config.d.ts +1 -1
  42. package/dist/server/server/def-config.js +2 -1
  43. package/dist/server/server/procedures-dmencu.js +18 -2
  44. package/dist/server/server/table-tem.d.ts +1 -0
  45. package/dist/server/server/table-tem.js +25 -21
  46. package/dist/server/server/table-tem_edicion.d.ts +2 -0
  47. package/dist/server/server/table-tem_edicion.js +62 -0
  48. package/dist/server/server/types-dmencu.d.ts +20 -1
  49. package/dist/server/server/types-dmencu.js +1 -1
  50. package/dist/server/table-tem.d.ts +1 -0
  51. package/dist/server/table-tem.js +25 -21
  52. package/dist/server/table-tem_edicion.d.ts +2 -0
  53. package/dist/server/table-tem_edicion.js +62 -0
  54. package/dist/server/types-dmencu.d.ts +20 -1
  55. package/dist/server/types-dmencu.js +1 -1
  56. package/dist/server/unlogged/tipos.d.ts +19 -1
  57. package/dist/server/unlogged/tipos.js +1 -1
  58. package/dist/test/app-para-tests.d.ts +11 -8
  59. package/dist/test/app-para-tests.js +8 -2
  60. package/dist/test/test-ayuda.d.ts +1 -0
  61. package/dist/test/test-ayuda.js +183 -0
  62. package/dist/test/test-tem-edicion.d.ts +1 -0
  63. package/dist/test/test-tem-edicion.js +103 -0
  64. package/dist/test/test.d.ts +2 -0
  65. package/dist/test/test.js +4 -2
  66. package/dist/unlogged/tipos.d.ts +19 -1
  67. package/dist/unlogged/tipos.js +1 -1
  68. package/dist/unlogged/unlogged/css/formulario-react.styl +9 -0
  69. package/dist/unlogged/unlogged/render-config.d.ts +5 -1
  70. package/dist/unlogged/unlogged/render-config.js +14 -1
  71. package/dist/unlogged/unlogged/render-formulario.d.ts +1 -0
  72. package/dist/unlogged/unlogged/render-formulario.js +43 -2
  73. package/dist/unlogged/unlogged/render-formulario.tsx +71 -0
  74. package/dist/unlogged/unlogged/render-general.d.ts +2 -0
  75. package/dist/unlogged/unlogged/render-general.js +2 -1
  76. package/dist/unlogged/unlogged/render-general.tsx +1 -0
  77. package/dist/unlogged/unlogged/render-init.d.ts +1 -0
  78. package/dist/unlogged/unlogged/render-init.js +9 -2
  79. package/dist/unlogged/unlogged/tipos.d.ts +19 -1
  80. package/dist/unlogged/unlogged/tipos.js +1 -1
  81. package/dist/unlogged/unlogged/unlogged.js +14 -1
  82. package/install/validar_manzana_casa_tem_trg.sql +25 -0
  83. package/package.json +5 -2
@@ -0,0 +1,19 @@
1
+ import type { AyudaOpcionMenu, ModoApp } from "../unlogged/tipos";
2
+ import type { AyudaFuente, AyudaTema, MenuInfoBase, Puede } from "./types-dmencu";
3
+ export type QuienConsultaAyuda = {
4
+ rol: string | null;
5
+ superuser: boolean;
6
+ puede: Puede | undefined;
7
+ modo: ModoApp;
8
+ };
9
+ export declare function parsearTemaDeAyuda(contenido: string, archivo: string, origen: string): AyudaTema;
10
+ export declare function carpetaDelPaquete(desde: string): string;
11
+ export declare function leerFuenteDeAyuda(fuente: AyudaFuente): AyudaTema[];
12
+ export declare function combinarTemasDeAyuda(temasPorFuente: AyudaTema[][]): AyudaTema[];
13
+ export declare function cargarAyuda(fuentes: AyudaFuente[]): AyudaTema[];
14
+ export declare function tienePermiso(puede: Puede | undefined, permisoAccion: string): boolean;
15
+ export declare function temaVisible(tema: AyudaTema, quien: QuienConsultaAyuda): boolean;
16
+ export declare function temasVisibles(temas: AyudaTema[], quien: QuienConsultaAyuda): AyudaTema[];
17
+ export declare function menuConAyuda(menu: MenuInfoBase[], temas: AyudaTema[], prefijo?: string): AyudaOpcionMenu[];
18
+ export declare function rutasDelMenu(menu: MenuInfoBase[], prefijo?: string): string[];
19
+ export declare function problemasDeAyuda(temas: AyudaTema[], permisosExistentes: Puede, rolesExistentes: string[], rutasExistentes: string[]): string[];
@@ -0,0 +1,224 @@
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", "fs", "path", "js-yaml", "markdown-it"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.parsearTemaDeAyuda = parsearTemaDeAyuda;
13
+ exports.carpetaDelPaquete = carpetaDelPaquete;
14
+ exports.leerFuenteDeAyuda = leerFuenteDeAyuda;
15
+ exports.combinarTemasDeAyuda = combinarTemasDeAyuda;
16
+ exports.cargarAyuda = cargarAyuda;
17
+ exports.tienePermiso = tienePermiso;
18
+ exports.temaVisible = temaVisible;
19
+ exports.temasVisibles = temasVisibles;
20
+ exports.menuConAyuda = menuConAyuda;
21
+ exports.rutasDelMenu = rutasDelMenu;
22
+ exports.problemasDeAyuda = problemasDeAyuda;
23
+ // Ayuda en línea para usuarios: temas en archivos .md con un encabezado YAML que dice a quién se muestran.
24
+ // Las apps finales agregan, reemplazan u ocultan temas con getAyudaFuentes (ver docs/ayuda-online.md).
25
+ const fs = require("fs");
26
+ const path = require("path");
27
+ const jsYaml = require("js-yaml");
28
+ const MarkdownIt = require("markdown-it");
29
+ const ENCABEZADO = /^---\r?\n([\s\S]*?)\r?\n---[ \t]*(?:\r?\n|$)/;
30
+ const CAMPOS_DEL_ENCABEZADO = ['id', 'titulo', 'orden', 'permisos', 'roles', 'modo', 'menu', 'ocultar'];
31
+ const ORDEN_PREDETERMINADO = 100;
32
+ // html: false porque el contenido es texto para usuarios, no páginas; los enlaces "ayuda:id" llevan a otro tema
33
+ const markdown = new MarkdownIt({ html: false, linkify: true, typographer: true });
34
+ function errorDeAyuda(archivo, mensaje) {
35
+ return new Error(`ayuda ${archivo}: ${mensaje}`);
36
+ }
37
+ function texto(valor, campo, archivo) {
38
+ if (typeof valor != 'string' || valor.trim() == '') {
39
+ throw errorDeAyuda(archivo, `${campo} debe ser un texto no vacío`);
40
+ }
41
+ return valor.trim();
42
+ }
43
+ function listaDeTextos(valor, campo, archivo) {
44
+ if (valor == null) {
45
+ return [];
46
+ }
47
+ if (typeof valor == 'string') {
48
+ return [texto(valor, campo, archivo)];
49
+ }
50
+ if (!Array.isArray(valor)) {
51
+ throw errorDeAyuda(archivo, `${campo} debe ser una lista de textos`);
52
+ }
53
+ var elementos = valor;
54
+ return elementos.map(elemento => texto(elemento, campo, archivo));
55
+ }
56
+ function modoApp(valor, archivo) {
57
+ if (valor == null) {
58
+ return null;
59
+ }
60
+ if (valor === 'RELEVAMIENTO' || valor === 'GABINETE') {
61
+ return valor;
62
+ }
63
+ throw errorDeAyuda(archivo, `modo debe ser RELEVAMIENTO o GABINETE`);
64
+ }
65
+ // lee el texto de un archivo de ayuda (encabezado + markdown)
66
+ function parsearTemaDeAyuda(contenido, archivo, origen) {
67
+ var _a, _b;
68
+ var sinBom = contenido.replace(/^/, '');
69
+ var partes = ENCABEZADO.exec(sinBom);
70
+ if (partes == null) {
71
+ throw errorDeAyuda(archivo, 'falta el encabezado entre líneas ---');
72
+ }
73
+ var yaml = jsYaml.load(partes[1]);
74
+ if (yaml == null || typeof yaml != 'object' || Array.isArray(yaml)) {
75
+ throw errorDeAyuda(archivo, 'el encabezado debe tener la forma "campo: valor"');
76
+ }
77
+ var encabezado = new Map();
78
+ for (var campo of Object.keys(yaml)) {
79
+ if (!CAMPOS_DEL_ENCABEZADO.includes(campo)) {
80
+ throw errorDeAyuda(archivo, `campo desconocido "${campo}" (los válidos son: ${CAMPOS_DEL_ENCABEZADO.join(', ')})`);
81
+ }
82
+ encabezado.set(campo, Reflect.get(yaml, campo));
83
+ }
84
+ var id = texto(encabezado.get('id'), 'id', archivo);
85
+ if (!/^[a-z0-9_-]+$/.test(id)) {
86
+ throw errorDeAyuda(archivo, `el id "${id}" sólo puede tener minúsculas, números, "_" y "-"`);
87
+ }
88
+ var ocultar = (_a = encabezado.get('ocultar')) !== null && _a !== void 0 ? _a : false;
89
+ if (typeof ocultar != 'boolean') {
90
+ throw errorDeAyuda(archivo, 'ocultar debe ser true o false');
91
+ }
92
+ var orden = (_b = encabezado.get('orden')) !== null && _b !== void 0 ? _b : ORDEN_PREDETERMINADO;
93
+ if (typeof orden != 'number') {
94
+ throw errorDeAyuda(archivo, 'orden debe ser un número');
95
+ }
96
+ var permisos = listaDeTextos(encabezado.get('permisos'), 'permisos', archivo);
97
+ permisos.forEach(permiso => {
98
+ if (!/^\w+\.\w+$/.test(permiso)) {
99
+ throw errorDeAyuda(archivo, `el permiso "${permiso}" debe tener la forma permiso.accion`);
100
+ }
101
+ });
102
+ return {
103
+ id,
104
+ // un tema que sólo oculta otro no necesita título
105
+ titulo: ocultar && encabezado.get('titulo') == null ? id : texto(encabezado.get('titulo'), 'titulo', archivo),
106
+ orden,
107
+ permisos,
108
+ roles: listaDeTextos(encabezado.get('roles'), 'roles', archivo),
109
+ modo: modoApp(encabezado.get('modo'), archivo),
110
+ menu: listaDeTextos(encabezado.get('menu'), 'menu', archivo),
111
+ ocultar,
112
+ origen,
113
+ archivo,
114
+ html: ocultar ? '' : markdown.render(sinBom.slice(partes[0].length)),
115
+ };
116
+ }
117
+ // carpeta del paquete (la que tiene el package.json) que contiene a la carpeta "desde" (normalmente __dirname);
118
+ // así se ubica la carpeta ayuda/ sin importar si el js está en dist/server/server, en dist/server (tests) o en node_modules
119
+ function carpetaDelPaquete(desde) {
120
+ var carpeta = path.resolve(desde);
121
+ while (!fs.existsSync(path.join(carpeta, 'package.json'))) {
122
+ var padre = path.dirname(carpeta);
123
+ if (padre == carpeta) {
124
+ throw new Error(`ayuda: no se encontró el package.json de ${desde}`);
125
+ }
126
+ carpeta = padre;
127
+ }
128
+ return carpeta;
129
+ }
130
+ // lee los .md de la carpeta de una fuente (sin subcarpetas)
131
+ function leerFuenteDeAyuda(fuente) {
132
+ if (!fs.existsSync(fuente.carpeta)) {
133
+ throw new Error(`ayuda: no existe la carpeta ${fuente.carpeta} de ${fuente.origen}`);
134
+ }
135
+ var temas = fs.readdirSync(fuente.carpeta)
136
+ .filter(nombre => nombre.endsWith('.md'))
137
+ .sort()
138
+ .map(nombre => {
139
+ var archivo = path.join(fuente.carpeta, nombre);
140
+ return parsearTemaDeAyuda(fs.readFileSync(archivo, 'utf8'), archivo, fuente.origen);
141
+ });
142
+ var vistos = new Map();
143
+ temas.forEach(tema => {
144
+ var anterior = vistos.get(tema.id);
145
+ if (anterior != null) {
146
+ throw errorDeAyuda(tema.archivo, `el id "${tema.id}" ya está en ${anterior}`);
147
+ }
148
+ vistos.set(tema.id, tema.archivo);
149
+ });
150
+ return temas;
151
+ }
152
+ // combina los temas de varias fuentes en orden: un id repetido reemplaza al anterior y "ocultar" lo quita
153
+ function combinarTemasDeAyuda(temasPorFuente) {
154
+ var temas = new Map();
155
+ temasPorFuente.forEach(temasDeLaFuente => temasDeLaFuente.forEach(tema => {
156
+ if (tema.ocultar) {
157
+ temas.delete(tema.id);
158
+ }
159
+ else {
160
+ temas.set(tema.id, tema);
161
+ }
162
+ }));
163
+ return Array.from(temas.values()).sort((a, b) => a.orden - b.orden || a.titulo.localeCompare(b.titulo));
164
+ }
165
+ function cargarAyuda(fuentes) {
166
+ return combinarTemasDeAyuda(fuentes.map(leerFuenteDeAyuda));
167
+ }
168
+ function tienePermiso(puede, permisoAccion) {
169
+ var _a;
170
+ var [permiso, accion] = permisoAccion.split('.');
171
+ var acciones = puede !== null && puede !== void 0 ? puede : {};
172
+ return ((_a = acciones[permiso]) === null || _a === void 0 ? void 0 : _a[accion]) === true;
173
+ }
174
+ function temaVisible(tema, quien) {
175
+ if (tema.modo != null && tema.modo != quien.modo) {
176
+ return false;
177
+ }
178
+ if (quien.superuser || tema.permisos.length == 0 && tema.roles.length == 0) {
179
+ return true;
180
+ }
181
+ return quien.rol != null && tema.roles.includes(quien.rol)
182
+ || tema.permisos.some(permiso => tienePermiso(quien.puede, permiso));
183
+ }
184
+ function temasVisibles(temas, quien) {
185
+ return temas.filter(tema => temaVisible(tema, quien));
186
+ }
187
+ // el menú del usuario (el que arma getMenu) con el tema de ayuda de cada opción
188
+ function menuConAyuda(menu, temas, prefijo = '') {
189
+ return menu.filter(opcion => opcion.menuType != 'ayuda').map(opcion => {
190
+ var _a, _b;
191
+ var ruta = prefijo + opcion.name;
192
+ var contenido = opcion.menuType == 'menu' ? opcion.menuContent : [];
193
+ var tema = temas.find(tema => tema.menu.includes(ruta));
194
+ return {
195
+ ruta,
196
+ label: (_a = opcion.label) !== null && _a !== void 0 ? _a : opcion.name.replace(/_/g, ' '),
197
+ tema: (_b = tema === null || tema === void 0 ? void 0 : tema.id) !== null && _b !== void 0 ? _b : null,
198
+ opciones: menuConAyuda(contenido, temas, ruta + '/'),
199
+ };
200
+ });
201
+ }
202
+ // rutas de todas las opciones de un menú (para validar las que mencionan los temas)
203
+ function rutasDelMenu(menu, prefijo = '') {
204
+ return menu.reduce((rutas, opcion) => {
205
+ var contenido = opcion.menuType == 'menu' ? opcion.menuContent : [];
206
+ return rutas.concat(prefijo + opcion.name, rutasDelMenu(contenido, prefijo + opcion.name + '/'));
207
+ }, []);
208
+ }
209
+ // problemas que no impiden mostrar la ayuda pero indican un error en los temas:
210
+ // permisos o roles que no existen y opciones de menú que nadie ve
211
+ function problemasDeAyuda(temas, permisosExistentes, rolesExistentes, rutasExistentes) {
212
+ var problemas = [];
213
+ temas.forEach(tema => {
214
+ tema.permisos.filter(permiso => !tienePermiso(permisosExistentes, permiso))
215
+ .forEach(permiso => problemas.push(`ayuda ${tema.archivo}: no existe el permiso ${permiso}`));
216
+ tema.roles.filter(rol => !rolesExistentes.includes(rol))
217
+ .forEach(rol => problemas.push(`ayuda ${tema.archivo}: no existe el rol ${rol}`));
218
+ tema.menu.filter(ruta => !rutasExistentes.includes(ruta))
219
+ .forEach(ruta => problemas.push(`ayuda ${tema.archivo}: ningún rol tiene la opción de menú ${ruta}`));
220
+ });
221
+ return problemas;
222
+ }
223
+ });
224
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXl1ZGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmVyL2F5dWRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztJQUFBLFlBQVksQ0FBQzs7SUFnRWIsZ0RBaURDO0lBSUQsOENBVUM7SUFHRCw4Q0FvQkM7SUFHRCxvREFVQztJQUVELGtDQUVDO0lBRUQsb0NBSUM7SUFFRCxrQ0FTQztJQUVELHNDQUVDO0lBR0Qsb0NBWUM7SUFHRCxvQ0FLQztJQUlELDRDQVdDO0lBaE9ELDJHQUEyRztJQUMzRyx1R0FBdUc7SUFFdkcseUJBQXlCO0lBQ3pCLDZCQUE2QjtJQUM3QixrQ0FBa0M7SUFDbEMsMENBQTJDO0lBYTNDLE1BQU0sVUFBVSxHQUFHLDhDQUE4QyxDQUFDO0lBQ2xFLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDeEcsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7SUFFakMsZ0hBQWdIO0lBQ2hILE1BQU0sUUFBUSxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRW5GLFNBQVMsWUFBWSxDQUFDLE9BQWUsRUFBRSxPQUFlO1FBQ2xELE9BQU8sSUFBSSxLQUFLLENBQUMsU0FBUyxPQUFPLEtBQUssT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsU0FBUyxLQUFLLENBQUMsS0FBYyxFQUFFLEtBQWEsRUFBRSxPQUFlO1FBQ3pELElBQUksT0FBTyxLQUFLLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNqRCxNQUFNLFlBQVksQ0FBQyxPQUFPLEVBQUUs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QUMsQ0FBQztRQUNILE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLy8gQXl1ZGEgZW4gbMOtbmVhIHBhcmEgdXN1YXJpb3M6IHRlbWFzIGVuIGFyY2hpdm9zIC5tZCBjb24gdW4gZW5jYWJlemFkbyBZQU1MIHF1ZSBkaWNlIGEgcXVpw6luIHNlIG11ZXN0cmFuLlxuLy8gTGFzIGFwcHMgZmluYWxlcyBhZ3JlZ2FuLCByZWVtcGxhemFuIHUgb2N1bHRhbiB0ZW1hcyBjb24gZ2V0QXl1ZGFGdWVudGVzICh2ZXIgZG9jcy9heXVkYS1vbmxpbmUubWQpLlxuXG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCAqIGFzIGpzWWFtbCBmcm9tIFwianMteWFtbFwiO1xuaW1wb3J0IE1hcmtkb3duSXQgPSByZXF1aXJlKFwibWFya2Rvd24taXRcIik7XG5cbmltcG9ydCB0eXBlIHsgQXl1ZGFPcGNpb25NZW51LCBNb2RvQXBwIH0gZnJvbSBcIi4uL3VubG9nZ2VkL3RpcG9zXCI7XG5pbXBvcnQgdHlwZSB7IEF5dWRhRnVlbnRlLCBBeXVkYVRlbWEsIE1lbnVJbmZvQmFzZSwgUHVlZGUgfSBmcm9tIFwiLi90eXBlcy1kbWVuY3VcIjtcblxuLy8gcXVpZW4gY29uc3VsdGEgbGEgYXl1ZGE6IGxvIHF1ZSBoYWNlIGZhbHRhIGRlbCBjb250ZXh0IHBhcmEgZGVjaWRpciBxdcOpIHRlbWFzIHZlXG5leHBvcnQgdHlwZSBRdWllbkNvbnN1bHRhQXl1ZGEgPSB7XG4gICAgcm9sOiBzdHJpbmcgfCBudWxsXG4gICAgc3VwZXJ1c2VyOiBib29sZWFuXG4gICAgcHVlZGU6IFB1ZWRlIHwgdW5kZWZpbmVkXG4gICAgbW9kbzogTW9kb0FwcFxufVxuXG5jb25zdCBFTkNBQkVaQURPID0gL14tLS1cXHI/XFxuKFtcXHNcXFNdKj8pXFxyP1xcbi0tLVsgXFx0XSooPzpcXHI/XFxufCQpLztcbmNvbnN0IENBTVBPU19ERUxfRU5DQUJFWkFETyA9IFsnaWQnLCAndGl0dWxvJywgJ29yZGVuJywgJ3Blcm1pc29zJywgJ3JvbGVzJywgJ21vZG8nLCAnbWVudScsICdvY3VsdGFyJ107XG5jb25zdCBPUkRFTl9QUkVERVRFUk1JTkFETyA9IDEwMDtcblxuLy8gaHRtbDogZmFsc2UgcG9ycXVlIGVsIGNvbnRlbmlkbyBlcyB0ZXh0byBwYXJhIHVzdWFyaW9zLCBubyBww6FnaW5hczsgbG9zIGVubGFjZXMgXCJheXVkYTppZFwiIGxsZXZhbiBhIG90cm8gdGVtYVxuY29uc3QgbWFya2Rvd24gPSBuZXcgTWFya2Rvd25JdCh7IGh0bWw6IGZhbHNlLCBsaW5raWZ5OiB0cnVlLCB0eXBvZ3JhcGhlcjogdHJ1ZSB9KTtcblxuZnVuY3Rpb24gZXJyb3JEZUF5dWRhKGFyY2hpdm86IHN0cmluZywgbWVuc2FqZTogc3RyaW5nKTogRXJyb3Ige1xuICAgIHJldHVybiBuZXcgRXJyb3IoYGF5dWRhICR7YXJjaGl2b306ICR7bWVuc2FqZX1gKTtcbn1cblxuZnVuY3Rpb24gdGV4dG8odmFsb3I6IHVua25vd24sIGNhbXBvOiBzdHJpbmcsIGFyY2hpdm86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiB2YWxvciAhPSAnc3RyaW5nJyB8fCB2YWxvci50cmltKCkgPT0gJycpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JEZUF5dWRhKGFyY2hpdm8sIGAke2NhbXBvfSBkZWJlIHNlciB1biB0ZXh0byBubyB2YWPDrW9gKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbG9yLnRyaW0oKTtcbn1cblxuZnVuY3Rpb24gbGlzdGFEZVRleHRvcyh2YWxvcjogdW5rbm93biwgY2FtcG86IHN0cmluZywgYXJjaGl2bzogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGlmICh2YWxvciA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWxvciA9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gW3RleHRvKHZhbG9yLCBjYW1wbywgYXJjaGl2byldO1xuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsb3IpKSB7XG4gICAgICAgIHRocm93IGVycm9yRGVBeXVkYShhcmNoaXZvLCBgJHtjYW1wb30gZGViZSBzZXIgdW5hIGxpc3RhIGRlIHRleHRvc2ApO1xuICAgIH1cbiAgICB2YXIgZWxlbWVudG9zOiB1bmtub3duW10gPSB2YWxvcjtcbiAgICByZXR1cm4gZWxlbWVudG9zLm1hcChlbGVtZW50byA9PiB0ZXh0byhlbGVtZW50bywgY2FtcG8sIGFyY2hpdm8pKTtcbn1cblxuZnVuY3Rpb24gbW9kb0FwcCh2YWxvcjogdW5rbm93biwgYXJjaGl2bzogc3RyaW5nKTogTW9kb0FwcCB8IG51bGwge1xuICAgIGlmICh2YWxvciA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodmFsb3IgPT09ICdSRUxFVkFNSUVOVE8nIHx8IHZhbG9yID09PSAnR0FCSU5FVEUnKSB7XG4gICAgICAgIHJldHVybiB2YWxvcjtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3JEZUF5dWRhKGFyY2hpdm8sIGBtb2RvIGRlYmUgc2VyIFJFTEVWQU1JRU5UTyBvIEdBQklORVRFYCk7XG59XG5cbi8vIGxlZSBlbCB0ZXh0byBkZSB1biBhcmNoaXZvIGRlIGF5dWRhIChlbmNhYmV6YWRvICsgbWFya2Rvd24pXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VhclRlbWFEZUF5dWRhKGNvbnRlbmlkbzogc3RyaW5nLCBhcmNoaXZvOiBzdHJpbmcsIG9yaWdlbjogc3RyaW5nKTogQXl1ZGFUZW1hIHtcbiAgICB2YXIgc2luQm9tID0gY29udGVuaWRvLnJlcGxhY2UoL17vu78vLCAnJyk7XG4gICAgdmFyIHBhcnRlcyA9IEVOQ0FCRVpBRE8uZXhlYyhzaW5Cb20pO1xuICAgIGlmIChwYXJ0ZXMgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBlcnJvckRlQXl1ZGEoYXJjaGl2bywgJ2ZhbHRhIGVsIGVuY2FiZXphZG8gZW50cmUgbMOtbmVhcyAtLS0nKTtcbiAgICB9XG4gICAgdmFyIHlhbWw6IHVua25vd24gPSBqc1lhbWwubG9hZChwYXJ0ZXNbMV0pO1xuICAgIGlmICh5YW1sID09IG51bGwgfHwgdHlwZW9mIHlhbWwgIT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheSh5YW1sKSkge1xuICAgICAgICB0aHJvdyBlcnJvckRlQXl1ZGEoYXJjaGl2bywgJ2VsIGVuY2FiZXphZG8gZGViZSB0ZW5lciBsYSBmb3JtYSBcImNhbXBvOiB2YWxvclwiJyk7XG4gICAgfVxuICAgIHZhciBlbmNhYmV6YWRvOiBNYXA8c3RyaW5nLCB1bmtub3duPiA9IG5ldyBNYXAoKTtcbiAgICBmb3IgKHZhciBjYW1wbyBvZiBPYmplY3Qua2V5cyh5YW1sKSkge1xuICAgICAgICBpZiAoIUNBTVBPU19ERUxfRU5DQUJFWkFETy5pbmNsdWRlcyhjYW1wbykpIHtcbiAgICAgICAgICAgIHRocm93IGVycm9yRGVBeXVkYShhcmNoaXZvLCBgY2FtcG8gZGVzY29ub2NpZG8gXCIke2NhbXBvfVwiIChsb3MgdsOhbGlkb3Mgc29uOiAke0NBTVBPU19ERUxfRU5DQUJFWkFETy5qb2luKCcsICcpfSlgKTtcbiAgICAgICAgfVxuICAgICAgICBlbmNhYmV6YWRvLnNldChjYW1wbywgUmVmbGVjdC5nZXQoeWFtbCwgY2FtcG8pKTtcbiAgICB9XG4gICAgdmFyIGlkID0gdGV4dG8oZW5jYWJlemFkby5nZXQoJ2lkJyksICdpZCcsIGFyY2hpdm8pO1xuICAgIGlmICghL15bYS16MC05Xy1dKyQvLnRlc3QoaWQpKSB7XG4gICAgICAgIHRocm93IGVycm9yRGVBeXVkYShhcmNoaXZvLCBgZWwgaWQgXCIke2lkfVwiIHPDs2xvIHB1ZWRlIHRlbmVyIG1pbsO6c2N1bGFzLCBuw7ptZXJvcywgXCJfXCIgeSBcIi1cImApO1xuICAgIH1cbiAgICB2YXIgb2N1bHRhciA9IGVuY2FiZXphZG8uZ2V0KCdvY3VsdGFyJykgPz8gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBvY3VsdGFyICE9ICdib29sZWFuJykge1xuICAgICAgICB0aHJvdyBlcnJvckRlQXl1ZGEoYXJjaGl2bywgJ29jdWx0YXIgZGViZSBzZXIgdHJ1ZSBvIGZhbHNlJyk7XG4gICAgfVxuICAgIHZhciBvcmRlbiA9IGVuY2FiZXphZG8uZ2V0KCdvcmRlbicpID8/IE9SREVOX1BSRURFVEVSTUlOQURPO1xuICAgIGlmICh0eXBlb2Ygb3JkZW4gIT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JEZUF5dWRhKGFyY2hpdm8sICdvcmRlbiBkZWJlIHNlciB1biBuw7ptZXJvJyk7XG4gICAgfVxuICAgIHZhciBwZXJtaXNvcyA9IGxpc3RhRGVUZXh0b3MoZW5jYWJlemFkby5nZXQoJ3Blcm1pc29zJyksICdwZXJtaXNvcycsIGFyY2hpdm8pO1xuICAgIHBlcm1pc29zLmZvckVhY2gocGVybWlzbyA9PiB7XG4gICAgICAgIGlmICghL15cXHcrXFwuXFx3KyQvLnRlc3QocGVybWlzbykpIHtcbiAgICAgICAgICAgIHRocm93IGVycm9yRGVBeXVkYShhcmNoaXZvLCBgZWwgcGVybWlzbyBcIiR7cGVybWlzb31cIiBkZWJlIHRlbmVyIGxhIGZvcm1hIHBlcm1pc28uYWNjaW9uYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBpZCxcbiAgICAgICAgLy8gdW4gdGVtYSBxdWUgc8OzbG8gb2N1bHRhIG90cm8gbm8gbmVjZXNpdGEgdMOtdHVsb1xuICAgICAgICB0aXR1bG86IG9jdWx0YXIgJiYgZW5jYWJlemFkby5nZXQoJ3RpdHVsbycpID09IG51bGwgPyBpZCA6IHRleHRvKGVuY2FiZXphZG8uZ2V0KCd0aXR1bG8nKSwgJ3RpdHVsbycsIGFyY2hpdm8pLFxuICAgICAgICBvcmRlbixcbiAgICAgICAgcGVybWlzb3MsXG4gICAgICAgIHJvbGVzOiBsaXN0YURlVGV4dG9zKGVuY2FiZXphZG8uZ2V0KCdyb2xlcycpLCAncm9sZXMnLCBhcmNoaXZvKSxcbiAgICAgICAgbW9kbzogbW9kb0FwcChlbmNhYmV6YWRvLmdldCgnbW9kbycpLCBhcmNoaXZvKSxcbiAgICAgICAgbWVudTogbGlzdGFEZVRleHRvcyhlbmNhYmV6YWRvLmdldCgnbWVudScpLCAnbWVudScsIGFyY2hpdm8pLFxuICAgICAgICBvY3VsdGFyLFxuICAgICAgICBvcmlnZW4sXG4gICAgICAgIGFyY2hpdm8sXG4gICAgICAgIGh0bWw6IG9jdWx0YXIgPyAnJyA6IG1hcmtkb3duLnJlbmRlcihzaW5Cb20uc2xpY2UocGFydGVzWzBdLmxlbmd0aCkpLFxuICAgIH07XG59XG5cbi8vIGNhcnBldGEgZGVsIHBhcXVldGUgKGxhIHF1ZSB0aWVuZSBlbCBwYWNrYWdlLmpzb24pIHF1ZSBjb250aWVuZSBhIGxhIGNhcnBldGEgXCJkZXNkZVwiIChub3JtYWxtZW50ZSBfX2Rpcm5hbWUpO1xuLy8gYXPDrSBzZSB1YmljYSBsYSBjYXJwZXRhIGF5dWRhLyBzaW4gaW1wb3J0YXIgc2kgZWwganMgZXN0w6EgZW4gZGlzdC9zZXJ2ZXIvc2VydmVyLCBlbiBkaXN0L3NlcnZlciAodGVzdHMpIG8gZW4gbm9kZV9tb2R1bGVzXG5leHBvcnQgZnVuY3Rpb24gY2FycGV0YURlbFBhcXVldGUoZGVzZGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdmFyIGNhcnBldGEgPSBwYXRoLnJlc29sdmUoZGVzZGUpO1xuICAgIHdoaWxlICghZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4oY2FycGV0YSwgJ3BhY2thZ2UuanNvbicpKSkge1xuICAgICAgICB2YXIgcGFkcmUgPSBwYXRoLmRpcm5hbWUoY2FycGV0YSk7XG4gICAgICAgIGlmIChwYWRyZSA9PSBjYXJwZXRhKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGF5dWRhOiBubyBzZSBlbmNvbnRyw7MgZWwgcGFja2FnZS5qc29uIGRlICR7ZGVzZGV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY2FycGV0YSA9IHBhZHJlO1xuICAgIH1cbiAgICByZXR1cm4gY2FycGV0YTtcbn1cblxuLy8gbGVlIGxvcyAubWQgZGUgbGEgY2FycGV0YSBkZSB1bmEgZnVlbnRlIChzaW4gc3ViY2FycGV0YXMpXG5leHBvcnQgZnVuY3Rpb24gbGVlckZ1ZW50ZURlQXl1ZGEoZnVlbnRlOiBBeXVkYUZ1ZW50ZSk6IEF5dWRhVGVtYVtdIHtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZnVlbnRlLmNhcnBldGEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgYXl1ZGE6IG5vIGV4aXN0ZSBsYSBjYXJwZXRhICR7ZnVlbnRlLmNhcnBldGF9IGRlICR7ZnVlbnRlLm9yaWdlbn1gKTtcbiAgICB9XG4gICAgdmFyIHRlbWFzID0gZnMucmVhZGRpclN5bmMoZnVlbnRlLmNhcnBldGEpXG4gICAgICAgIC5maWx0ZXIobm9tYnJlID0+IG5vbWJyZS5lbmRzV2l0aCgnLm1kJykpXG4gICAgICAgIC5zb3J0KClcbiAgICAgICAgLm1hcChub21icmUgPT4ge1xuICAgICAgICAgICAgdmFyIGFyY2hpdm8gPSBwYXRoLmpvaW4oZnVlbnRlLmNhcnBldGEsIG5vbWJyZSk7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VhclRlbWFEZUF5dWRhKGZzLnJlYWRGaWxlU3luYyhhcmNoaXZvLCAndXRmOCcpLCBhcmNoaXZvLCBmdWVudGUub3JpZ2VuKTtcbiAgICAgICAgfSk7XG4gICAgdmFyIHZpc3RvczogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTtcbiAgICB0ZW1hcy5mb3JFYWNoKHRlbWEgPT4ge1xuICAgICAgICB2YXIgYW50ZXJpb3IgPSB2aXN0b3MuZ2V0KHRlbWEuaWQpO1xuICAgICAgICBpZiAoYW50ZXJpb3IgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgZXJyb3JEZUF5dWRhKHRlbWEuYXJjaGl2bywgYGVsIGlkIFwiJHt0ZW1hLmlkfVwiIHlhIGVzdMOhIGVuICR7YW50ZXJpb3J9YCk7XG4gICAgICAgIH1cbiAgICAgICAgdmlzdG9zLnNldCh0ZW1hLmlkLCB0ZW1hLmFyY2hpdm8pO1xuICAgIH0pO1xuICAgIHJldHVybiB0ZW1hcztcbn1cblxuLy8gY29tYmluYSBsb3MgdGVtYXMgZGUgdmFyaWFzIGZ1ZW50ZXMgZW4gb3JkZW46IHVuIGlkIHJlcGV0aWRvIHJlZW1wbGF6YSBhbCBhbnRlcmlvciB5IFwib2N1bHRhclwiIGxvIHF1aXRhXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXJUZW1hc0RlQXl1ZGEodGVtYXNQb3JGdWVudGU6IEF5dWRhVGVtYVtdW10pOiBBeXVkYVRlbWFbXSB7XG4gICAgdmFyIHRlbWFzOiBNYXA8c3RyaW5nLCBBeXVkYVRlbWE+ID0gbmV3IE1hcCgpO1xuICAgIHRlbWFzUG9yRnVlbnRlLmZvckVhY2godGVtYXNEZUxhRnVlbnRlID0+IHRlbWFzRGVMYUZ1ZW50ZS5mb3JFYWNoKHRlbWEgPT4ge1xuICAgICAgICBpZiAodGVtYS5vY3VsdGFyKSB7XG4gICAgICAgICAgICB0ZW1hcy5kZWxldGUodGVtYS5pZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZW1hcy5zZXQodGVtYS5pZCwgdGVtYSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGVtYXMudmFsdWVzKCkpLnNvcnQoKGEsIGIpID0+IGEub3JkZW4gLSBiLm9yZGVuIHx8IGEudGl0dWxvLmxvY2FsZUNvbXBhcmUoYi50aXR1bG8pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhcmdhckF5dWRhKGZ1ZW50ZXM6IEF5dWRhRnVlbnRlW10pOiBBeXVkYVRlbWFbXSB7XG4gICAgcmV0dXJuIGNvbWJpbmFyVGVtYXNEZUF5dWRhKGZ1ZW50ZXMubWFwKGxlZXJGdWVudGVEZUF5dWRhKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aWVuZVBlcm1pc28ocHVlZGU6IFB1ZWRlIHwgdW5kZWZpbmVkLCBwZXJtaXNvQWNjaW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB2YXIgW3Blcm1pc28sIGFjY2lvbl0gPSBwZXJtaXNvQWNjaW9uLnNwbGl0KCcuJyk7XG4gICAgdmFyIGFjY2lvbmVzOiB7IFtwZXJtaXNvOiBzdHJpbmddOiB7IFthY2Npb246IHN0cmluZ106IGJvb2xlYW4gfCB1bmRlZmluZWQgfSB8IHVuZGVmaW5lZCB9ID0gcHVlZGUgPz8ge307XG4gICAgcmV0dXJuIGFjY2lvbmVzW3Blcm1pc29dPy5bYWNjaW9uXSA9PT0gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlbWFWaXNpYmxlKHRlbWE6IEF5dWRhVGVtYSwgcXVpZW46IFF1aWVuQ29uc3VsdGFBeXVkYSk6IGJvb2xlYW4ge1xuICAgIGlmICh0ZW1hLm1vZG8gIT0gbnVsbCAmJiB0ZW1hLm1vZG8gIT0gcXVpZW4ubW9kbykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChxdWllbi5zdXBlcnVzZXIgfHwgdGVtYS5wZXJtaXNvcy5sZW5ndGggPT0gMCAmJiB0ZW1hLnJvbGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gcXVpZW4ucm9sICE9IG51bGwgJiYgdGVtYS5yb2xlcy5pbmNsdWRlcyhxdWllbi5yb2wpXG4gICAgICAgIHx8IHRlbWEucGVybWlzb3Muc29tZShwZXJtaXNvID0+IHRpZW5lUGVybWlzbyhxdWllbi5wdWVkZSwgcGVybWlzbykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVtYXNWaXNpYmxlcyh0ZW1hczogQXl1ZGFUZW1hW10sIHF1aWVuOiBRdWllbkNvbnN1bHRhQXl1ZGEpOiBBeXVkYVRlbWFbXSB7XG4gICAgcmV0dXJuIHRlbWFzLmZpbHRlcih0ZW1hID0+IHRlbWFWaXNpYmxlKHRlbWEsIHF1aWVuKSk7XG59XG5cbi8vIGVsIG1lbsO6IGRlbCB1c3VhcmlvIChlbCBxdWUgYXJtYSBnZXRNZW51KSBjb24gZWwgdGVtYSBkZSBheXVkYSBkZSBjYWRhIG9wY2nDs25cbmV4cG9ydCBmdW5jdGlvbiBtZW51Q29uQXl1ZGEobWVudTogTWVudUluZm9CYXNlW10sIHRlbWFzOiBBeXVkYVRlbWFbXSwgcHJlZmlqbzogc3RyaW5nID0gJycpOiBBeXVkYU9wY2lvbk1lbnVbXSB7XG4gICAgcmV0dXJuIG1lbnUuZmlsdGVyKG9wY2lvbiA9PiBvcGNpb24ubWVudVR5cGUgIT0gJ2F5dWRhJykubWFwKG9wY2lvbiA9PiB7XG4gICAgICAgIHZhciBydXRhID0gcHJlZmlqbyArIG9wY2lvbi5uYW1lO1xuICAgICAgICB2YXIgY29udGVuaWRvOiBNZW51SW5mb0Jhc2VbXSA9IG9wY2lvbi5tZW51VHlwZSA9PSAnbWVudScgPyBvcGNpb24ubWVudUNvbnRlbnQgOiBbXTtcbiAgICAgICAgdmFyIHRlbWEgPSB0ZW1hcy5maW5kKHRlbWEgPT4gdGVtYS5tZW51LmluY2x1ZGVzKHJ1dGEpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJ1dGEsXG4gICAgICAgICAgICBsYWJlbDogb3BjaW9uLmxhYmVsID8/IG9wY2lvbi5uYW1lLnJlcGxhY2UoL18vZywgJyAnKSxcbiAgICAgICAgICAgIHRlbWE6IHRlbWE/LmlkID8/IG51bGwsXG4gICAgICAgICAgICBvcGNpb25lczogbWVudUNvbkF5dWRhKGNvbnRlbmlkbywgdGVtYXMsIHJ1dGEgKyAnLycpLFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG4vLyBydXRhcyBkZSB0b2RhcyBsYXMgb3BjaW9uZXMgZGUgdW4gbWVuw7ogKHBhcmEgdmFsaWRhciBsYXMgcXVlIG1lbmNpb25hbiBsb3MgdGVtYXMpXG5leHBvcnQgZnVuY3Rpb24gcnV0YXNEZWxNZW51KG1lbnU6IE1lbnVJbmZvQmFzZVtdLCBwcmVmaWpvOiBzdHJpbmcgPSAnJyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gbWVudS5yZWR1Y2UoKHJ1dGFzOiBzdHJpbmdbXSwgb3BjaW9uKSA9PiB7XG4gICAgICAgIHZhciBjb250ZW5pZG86IE1lbnVJbmZvQmFzZVtdID0gb3BjaW9uLm1lbnVUeXBlID09ICdtZW51JyA/IG9wY2lvbi5tZW51Q29udGVudCA6IFtdO1xuICAgICAgICByZXR1cm4gcnV0YXMuY29uY2F0KHByZWZpam8gKyBvcGNpb24ubmFtZSwgcnV0YXNEZWxNZW51KGNvbnRlbmlkbywgcHJlZmlqbyArIG9wY2lvbi5uYW1lICsgJy8nKSk7XG4gICAgfSwgW10pO1xufVxuXG4vLyBwcm9ibGVtYXMgcXVlIG5vIGltcGlkZW4gbW9zdHJhciBsYSBheXVkYSBwZXJvIGluZGljYW4gdW4gZXJyb3IgZW4gbG9zIHRlbWFzOlxuLy8gcGVybWlzb3MgbyByb2xlcyBxdWUgbm8gZXhpc3RlbiB5IG9wY2lvbmVzIGRlIG1lbsO6IHF1ZSBuYWRpZSB2ZVxuZXhwb3J0IGZ1bmN0aW9uIHByb2JsZW1hc0RlQXl1ZGEodGVtYXM6IEF5dWRhVGVtYVtdLCBwZXJtaXNvc0V4aXN0ZW50ZXM6IFB1ZWRlLCByb2xlc0V4aXN0ZW50ZXM6IHN0cmluZ1tdLCBydXRhc0V4aXN0ZW50ZXM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIHZhciBwcm9ibGVtYXM6IHN0cmluZ1tdID0gW107XG4gICAgdGVtYXMuZm9yRWFjaCh0ZW1hID0+IHtcbiAgICAgICAgdGVtYS5wZXJtaXNvcy5maWx0ZXIocGVybWlzbyA9PiAhdGllbmVQZXJtaXNvKHBlcm1pc29zRXhpc3RlbnRlcywgcGVybWlzbykpXG4gICAgICAgICAgICAuZm9yRWFjaChwZXJtaXNvID0+IHByb2JsZW1hcy5wdXNoKGBheXVkYSAke3RlbWEuYXJjaGl2b306IG5vIGV4aXN0ZSBlbCBwZXJtaXNvICR7cGVybWlzb31gKSk7XG4gICAgICAgIHRlbWEucm9sZXMuZmlsdGVyKHJvbCA9PiAhcm9sZXNFeGlzdGVudGVzLmluY2x1ZGVzKHJvbCkpXG4gICAgICAgICAgICAuZm9yRWFjaChyb2wgPT4gcHJvYmxlbWFzLnB1c2goYGF5dWRhICR7dGVtYS5hcmNoaXZvfTogbm8gZXhpc3RlIGVsIHJvbCAke3JvbH1gKSk7XG4gICAgICAgIHRlbWEubWVudS5maWx0ZXIocnV0YSA9PiAhcnV0YXNFeGlzdGVudGVzLmluY2x1ZGVzKHJ1dGEpKVxuICAgICAgICAgICAgLmZvckVhY2gocnV0YSA9PiBwcm9ibGVtYXMucHVzaChgYXl1ZGEgJHt0ZW1hLmFyY2hpdm99OiBuaW5nw7puIHJvbCB0aWVuZSBsYSBvcGNpw7NuIGRlIG1lbsO6ICR7cnV0YX1gKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByb2JsZW1hcztcbn1cbiJdfQ==
@@ -1 +1 @@
1
- export declare const defConfig = "\nserver:\n port: 3068\n base-url: /dmencu\n session-store: memory-saved\n skins:\n \"\":\n local-path: client/\n modern:\n local-path: node_modules/backend-skins/dist/\ndb:\n user: dmencu_admin\n motor: postgresql\n host: localhost\n database: dmencu_db\n schema: base\n search_path: [base, comun, his]\ninstall:\n dump:\n db:\n owner: dmencu_owner\n apply-generic-user-replaces: true\n admin-can-create-tables: true\n enances: inline\n skip-content: true\n scripts:\n prepare:\n - ../node_modules/operativos/install/rel_tabla_relacionada.sql\n - esquema_comun.sql\n - esquema_comun_sin_dato.sql\n - esquema_comun_nsnc.sql\n - ../node_modules/meta-enc/install/prepare.sql\n - ../node_modules/varcal/install/wrappers.sql\n - ../node_modules/operativos/install/sql2tabla_datos.sql\n post-adapt: \n - para-install.sql\n - ../node_modules/pg-triggers/lib/recreate-his.sql\n - ../node_modules/pg-triggers/lib/table-changes.sql\n - ../node_modules/pg-triggers/lib/function-changes-trg.sql\n - ../node_modules/pg-triggers/lib/enance.sql\n - ../node_modules/datos-ext/install/controlar_modificacion_estructura_cerrada.sql\n - ../node_modules/meta-enc/install/casilleros_orden_total_fun.sql\n - ../node_modules/meta-enc/install/casilleros_jerarquizados_fun.sql\n - ../node_modules/consistencias/install/try_sql.sql\n - esquema_dbo.sql \n - varcal_manual/estructura.sql\n - varcal_manual/funcion_update.sql\n - fun_validar_tipodato.sql\n - desintegrarpk.sql\n - agregar_adjunto_carto_trg\n - sincro_tareas_areas_tareas_tem_trg.sql\n - sincronizacion_tareas_tem.sql\n - sincronizacion_tem.sql\n - control_disform_cerrado_trg.sql\n - control_cargado_tareas_tem_trg.sql\n - generador_accion_cumple_condicion.sql\n - tarea_cumple_condicion.sql\n - momento_consistencia_cumple_condicion.sql\n - agregar_historial_tem_trg.sql\n - carga_inicial_tareas_tem.sql\n - validar_tareas_tem_trg.sql\n - asignar_desasignar_tareas_tem_trg.sql\n - desverificar_tarea_trg.sql\n - inicial_update_varcal_por_encuesta.sql\n - diccionario_func.sql\n - obtener_siguiente_contador_area.sql\nlogin:\n infoFieldList: [usuario, rol, idper, muestra_encuestas_prod, muestra_encuestas_capa]\n table: usuarios\n userFieldName: usuario\n passFieldName: md5clave\n rolFieldName: rol\n activeClausule: activo\n lockedClausule: not activo\n plus:\n maxAge-5-sec: 5000 \n maxAge: 864000000\n maxAge-10-day: 864000000\n allowHttpLogin: true\n fileStore: false\n skipCheckAlreadyLoggedIn: true\n loginForm:\n formTitle: dmencu\n usernameLabel: usuario\n passwordLabel: clave\n buttonLabel: entrar\n formImg: img/login-lock-icon.png\n chPassForm:\n usernameLabel: usuario\n oldPasswordLabel: clave anterior\n newPasswordLabel: nueva clave\n repPasswordLabel: repetir nueva clave\n buttonLabel: Cambiar\n formTitle: Cambio de clave\n messages:\n userOrPassFail: el nombre de usuario no existe o la clave no corresponde\n lockedFail: el usuario se encuentra bloqueado\n inactiveFail: es usuario est\u00E1 marcado como inactivo\nclient-setup:\n title: SIEH 2.0\n cursors: true\n lang: es\n menu: true\n background-img: ../img/background-test.png\n grid-row-retain-moved-or-deleted: true\n deviceWidthForMobile: device-width\n user-scalable: no\n skin: modern\n";
1
+ export declare const defConfig = "\nserver:\n port: 3068\n base-url: /dmencu\n session-store: memory-saved\n skins:\n \"\":\n local-path: client/\n modern:\n local-path: node_modules/backend-skins/dist/\ndb:\n user: dmencu_admin\n motor: postgresql\n host: localhost\n database: dmencu_db\n schema: base\n search_path: [base, comun, his]\ninstall:\n dump:\n db:\n owner: dmencu_owner\n apply-generic-user-replaces: true\n admin-can-create-tables: true\n enances: inline\n skip-content: true\n scripts:\n prepare:\n - ../node_modules/operativos/install/rel_tabla_relacionada.sql\n - esquema_comun.sql\n - esquema_comun_sin_dato.sql\n - esquema_comun_nsnc.sql\n - ../node_modules/meta-enc/install/prepare.sql\n - ../node_modules/varcal/install/wrappers.sql\n - ../node_modules/operativos/install/sql2tabla_datos.sql\n post-adapt: \n - para-install.sql\n - ../node_modules/pg-triggers/lib/recreate-his.sql\n - ../node_modules/pg-triggers/lib/table-changes.sql\n - ../node_modules/pg-triggers/lib/function-changes-trg.sql\n - ../node_modules/pg-triggers/lib/enance.sql\n - ../node_modules/datos-ext/install/controlar_modificacion_estructura_cerrada.sql\n - ../node_modules/meta-enc/install/casilleros_orden_total_fun.sql\n - ../node_modules/meta-enc/install/casilleros_jerarquizados_fun.sql\n - ../node_modules/consistencias/install/try_sql.sql\n - esquema_dbo.sql \n - varcal_manual/estructura.sql\n - varcal_manual/funcion_update.sql\n - fun_validar_tipodato.sql\n - desintegrarpk.sql\n - agregar_adjunto_carto_trg\n - sincro_tareas_areas_tareas_tem_trg.sql\n - sincronizacion_tareas_tem.sql\n - sincronizacion_tem.sql\n - control_disform_cerrado_trg.sql\n - control_cargado_tareas_tem_trg.sql\n - generador_accion_cumple_condicion.sql\n - tarea_cumple_condicion.sql\n - momento_consistencia_cumple_condicion.sql\n - agregar_historial_tem_trg.sql\n - carga_inicial_tareas_tem.sql\n - validar_tareas_tem_trg.sql\n - validar_manzana_casa_tem_trg.sql\n - asignar_desasignar_tareas_tem_trg.sql\n - desverificar_tarea_trg.sql\n - inicial_update_varcal_por_encuesta.sql\n - diccionario_func.sql\n - obtener_siguiente_contador_area.sql\nlogin:\n infoFieldList: [usuario, rol, idper, muestra_encuestas_prod, muestra_encuestas_capa]\n table: usuarios\n userFieldName: usuario\n passFieldName: md5clave\n rolFieldName: rol\n activeClausule: activo\n lockedClausule: not activo\n plus:\n maxAge-5-sec: 5000 \n maxAge: 864000000\n maxAge-10-day: 864000000\n allowHttpLogin: true\n fileStore: false\n skipCheckAlreadyLoggedIn: true\n loginForm:\n formTitle: dmencu\n usernameLabel: usuario\n passwordLabel: clave\n buttonLabel: entrar\n formImg: img/login-lock-icon.png\n chPassForm:\n usernameLabel: usuario\n oldPasswordLabel: clave anterior\n newPasswordLabel: nueva clave\n repPasswordLabel: repetir nueva clave\n buttonLabel: Cambiar\n formTitle: Cambio de clave\n messages:\n userOrPassFail: el nombre de usuario no existe o la clave no corresponde\n lockedFail: el usuario se encuentra bloqueado\n inactiveFail: es usuario est\u00E1 marcado como inactivo\nclient-setup:\n title: SIEH 2.0\n cursors: true\n lang: es\n menu: true\n background-img: ../img/background-test.png\n grid-row-retain-moved-or-deleted: true\n deviceWidthForMobile: device-width\n user-scalable: no\n skin: modern\n";
@@ -71,6 +71,7 @@ install:
71
71
  - agregar_historial_tem_trg.sql
72
72
  - carga_inicial_tareas_tem.sql
73
73
  - validar_tareas_tem_trg.sql
74
+ - validar_manzana_casa_tem_trg.sql
74
75
  - asignar_desasignar_tareas_tem_trg.sql
75
76
  - desverificar_tarea_trg.sql
76
77
  - inicial_update_varcal_por_encuesta.sql
@@ -120,4 +121,4 @@ client-setup:
120
121
  skin: modern
121
122
  `;
122
123
  });
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2ZXIvZGVmLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFBYSxRQUFBLFNBQVMsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBNEd4QixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGRlZkNvbmZpZyA9IGBcclxuc2VydmVyOlxyXG4gIHBvcnQ6IDMwNjhcclxuICBiYXNlLXVybDogL2RtZW5jdVxyXG4gIHNlc3Npb24tc3RvcmU6IG1lbW9yeS1zYXZlZFxyXG4gIHNraW5zOlxyXG4gICAgXCJcIjpcclxuICAgICAgbG9jYWwtcGF0aDogY2xpZW50L1xyXG4gICAgbW9kZXJuOlxyXG4gICAgICBsb2NhbC1wYXRoOiBub2RlX21vZHVsZXMvYmFja2VuZC1za2lucy9kaXN0L1xyXG5kYjpcclxuICB1c2VyOiBkbWVuY3VfYWRtaW5cclxuICBtb3RvcjogcG9zdGdyZXNxbFxyXG4gIGhvc3Q6IGxvY2FsaG9zdFxyXG4gIGRhdGFiYXNlOiBkbWVuY3VfZGJcclxuICBzY2hlbWE6IGJhc2VcclxuICBzZWFyY2hfcGF0aDogW2Jhc2UsIGNvbXVuLCBoaXNdXHJcbmluc3RhbGw6XHJcbiAgZHVtcDpcclxuICAgIGRiOlxyXG4gICAgICBvd25lcjogZG1lbmN1X293bmVyXHJcbiAgICAgIGFwcGx5LWdlbmVyaWMtdXNlci1yZXBsYWNlczogdHJ1ZVxyXG4gICAgYWRtaW4tY2FuLWNyZWF0ZS10YWJsZXM6IHRydWVcclxuICAgIGVuYW5jZXM6IGlubGluZVxyXG4gICAgc2tpcC1jb250ZW50OiB0cnVlXHJcbiAgICBzY3JpcHRzOlxyXG4gICAgICBwcmVwYXJlOlxyXG4gICAgICAtIC4uL25vZGVfbW9kdWxlcy9vcGVyYXRpdm9zL2luc3RhbGwvcmVsX3RhYmxhX3JlbGFjaW9uYWRhLnNxbFxyXG4gICAgICAtIGVzcXVlbWFfY29tdW4uc3FsXHJcbiAgICAgIC0gZXNxdWVtYV9jb211bl9zaW5fZGF0by5zcWxcclxuICAgICAgLSBlc3F1ZW1hX2NvbXVuX25zbmMuc3FsXHJcbiAgICAgIC0gLi4vbm9kZV9tb2R1bGVzL21ldGEtZW5jL2luc3RhbGwvcHJlcGFyZS5zcWxcclxuICAgICAgLSAuLi9ub2RlX21vZHVsZXMvdmFyY2FsL2luc3RhbGwvd3JhcHBlcnMuc3FsXHJcbiAgICAgIC0gLi4vbm9kZV9tb2R1bGVzL29wZXJhdGl2b3MvaW5zdGFsbC9zcWwydGFibGFfZGF0b3Muc3FsXHJcbiAgICAgIHBvc3QtYWRhcHQ6IFxyXG4gICAgICAtIHBhcmEtaW5zdGFsbC5zcWxcclxuICAgICAgLSAuLi9ub2RlX21vZHVsZXMvcGctdHJpZ2dlcnMvbGliL3JlY3JlYXRlLWhpcy5zcWxcclxuICAgICAgLSAuLi9ub2RlX21vZHVsZXMvcGctdHJpZ2dlcnMvbGliL3RhYmxlLWNoYW5nZXMuc3FsXHJcbiAgICAgIC0gLi4vbm9kZV9tb2R1bGVzL3BnLXRyaWdnZXJzL2xpYi9mdW5jdGlvbi1jaGFuZ2VzLXRyZy5zcWxcclxuICAgICAgLSAuLi9ub2RlX21vZHVsZXMvcGctdHJpZ2dlcnMvbGliL2VuYW5jZS5zcWxcclxuICAgICAgLSAuLi9ub2RlX21vZHVsZXMvZGF0b3MtZXh0L2luc3RhbGwvY29udHJvbGFyX21vZGlmaWNhY2lvbl9lc3RydWN0dXJhX2NlcnJhZGEuc3FsXHJcbiAgICAgIC0gLi4vbm9kZV9tb2R1bGVzL21ldGEtZW5jL2luc3RhbGwvY2FzaWxsZXJvc19vcmRlbl90b3RhbF9mdW4uc3FsXHJcbiAgICAgIC0gLi4vbm9kZV9tb2R1bGVzL21ldGEtZW5jL2luc3RhbGwvY2FzaWxsZXJvc19qZXJhcnF1aXphZG9zX2Z1bi5zcWxcclxuICAgICAgLSAuLi9ub2RlX21vZHVsZXMvY29uc2lzdGVuY2lhcy9pbnN0YWxsL3RyeV9zcWwuc3FsXHJcbiAgICAgIC0gZXNxdWVtYV9kYm8uc3FsIFxyXG4gICAgICAtIHZhcmNhbF9tYW51YWwvZXN0cnVjdHVyYS5zcWxcclxuICAgICAgLSB2YXJjYWxfbWFudWFsL2Z1bmNpb25fdXBkYXRlLnNxbFxyXG4gICAgICAtIGZ1bl92YWxpZGFyX3RpcG9kYXRvLnNxbFxyXG4gICAgICAtIGRlc2ludGVncmFycGsuc3FsXHJcbiAgICAgIC0gYWdyZWdhcl9hZGp1bnRvX2NhcnRvX3RyZ1xyXG4gICAgICAtIHNpbmNyb190YXJlYXNfYXJlYXNfdGFyZWFzX3RlbV90cmcuc3FsXHJcbiAgICAgIC0gc2luY3Jvbml6YWNpb25fdGFyZWFzX3RlbS5zcWxcclxuICAgICAgLSBzaW5jcm9uaXphY2lvbl90ZW0uc3FsXHJcbiAgICAgIC0gY29udHJvbF9kaXNmb3JtX2NlcnJhZG9fdHJnLnNxbFxyXG4gICAgICAtIGNvbnRyb2xfY2FyZ2Fkb190YXJlYXNfdGVtX3RyZy5zcWxcclxuICAgICAgLSBnZW5lcmFkb3JfYWNjaW9uX2N1bXBsZV9jb25kaWNpb24uc3FsXHJcbiAgICAgIC0gdGFyZWFfY3VtcGxlX2NvbmRpY2lvbi5zcWxcclxuICAgICAgLSBtb21lbnRvX2NvbnNpc3RlbmNpYV9jdW1wbGVfY29uZGljaW9uLnNxbFxyXG4gICAgICAtIGFncmVnYXJfaGlzdG9yaWFsX3RlbV90cmcuc3FsXHJcbiAgICAgIC0gY2FyZ2FfaW5pY2lhbF90YXJlYXNfdGVtLnNxbFxyXG4gICAgICAtIHZhbGlkYXJfdGFyZWFzX3RlbV90cmcuc3FsXHJcbiAgICAgIC0gYXNpZ25hcl9kZXNhc2lnbmFyX3RhcmVhc190ZW1fdHJnLnNxbFxyXG4gICAgICAtIGRlc3ZlcmlmaWNhcl90YXJlYV90cmcuc3FsXHJcbiAgICAgIC0gaW5pY2lhbF91cGRhdGVfdmFyY2FsX3Bvcl9lbmN1ZXN0YS5zcWxcclxuICAgICAgLSBkaWNjaW9uYXJpb19mdW5jLnNxbFxyXG4gICAgICAtIG9idGVuZXJfc2lndWllbnRlX2NvbnRhZG9yX2FyZWEuc3FsXHJcbmxvZ2luOlxyXG4gIGluZm9GaWVsZExpc3Q6IFt1c3VhcmlvLCByb2wsIGlkcGVyLCBtdWVzdHJhX2VuY3Vlc3Rhc19wcm9kLCBtdWVzdHJhX2VuY3Vlc3Rhc19jYXBhXVxyXG4gIHRhYmxlOiB1c3Vhcmlvc1xyXG4gIHVzZXJGaWVsZE5hbWU6IHVzdWFyaW9cclxuICBwYXNzRmllbGROYW1lOiBtZDVjbGF2ZVxyXG4gIHJvbEZpZWxkTmFtZTogcm9sXHJcbiAgYWN0aXZlQ2xhdXN1bGU6IGFjdGl2b1xyXG4gIGxvY2tlZENsYXVzdWxlOiBub3QgYWN0aXZvXHJcbiAgcGx1czpcclxuICAgIG1heEFnZS01LXNlYzogNTAwMCAgICBcclxuICAgIG1heEFnZTogODY0MDAwMDAwXHJcbiAgICBtYXhBZ2UtMTAtZGF5OiA4NjQwMDAwMDBcclxuICAgIGFsbG93SHR0cExvZ2luOiB0cnVlXHJcbiAgICBmaWxlU3RvcmU6IGZhbHNlXHJcbiAgICBza2lwQ2hlY2tBbHJlYWR5TG9nZ2VkSW46IHRydWVcclxuICAgIGxvZ2luRm9ybTpcclxuICAgICAgZm9ybVRpdGxlOiBkbWVuY3VcclxuICAgICAgdXNlcm5hbWVMYWJlbDogdXN1YXJpb1xyXG4gICAgICBwYXNzd29yZExhYmVsOiBjbGF2ZVxyXG4gICAgICBidXR0b25MYWJlbDogZW50cmFyXHJcbiAgICAgIGZvcm1JbWc6IGltZy9sb2dpbi1sb2NrLWljb24ucG5nXHJcbiAgICBjaFBhc3NGb3JtOlxyXG4gICAgICB1c2VybmFtZUxhYmVsOiB1c3VhcmlvXHJcbiAgICAgIG9sZFBhc3N3b3JkTGFiZWw6IGNsYXZlIGFudGVyaW9yXHJcbiAgICAgIG5ld1Bhc3N3b3JkTGFiZWw6IG51ZXZhIGNsYXZlXHJcbiAgICAgIHJlcFBhc3N3b3JkTGFiZWw6IHJlcGV0aXIgbnVldmEgY2xhdmVcclxuICAgICAgYnV0dG9uTGFiZWw6IENhbWJpYXJcclxuICAgICAgZm9ybVRpdGxlOiBDYW1iaW8gZGUgY2xhdmVcclxuICBtZXNzYWdlczpcclxuICAgIHVzZXJPclBhc3NGYWlsOiBlbCBub21icmUgZGUgdXN1YXJpbyBubyBleGlzdGUgbyBsYSBjbGF2ZSBubyBjb3JyZXNwb25kZVxyXG4gICAgbG9ja2VkRmFpbDogZWwgdXN1YXJpbyBzZSBlbmN1ZW50cmEgYmxvcXVlYWRvXHJcbiAgICBpbmFjdGl2ZUZhaWw6IGVzIHVzdWFyaW8gZXN0w6EgbWFyY2FkbyBjb21vIGluYWN0aXZvXHJcbmNsaWVudC1zZXR1cDpcclxuICB0aXRsZTogU0lFSCAyLjBcclxuICBjdXJzb3JzOiB0cnVlXHJcbiAgbGFuZzogZXNcclxuICBtZW51OiB0cnVlXHJcbiAgYmFja2dyb3VuZC1pbWc6IC4uL2ltZy9iYWNrZ3JvdW5kLXRlc3QucG5nXHJcbiAgZ3JpZC1yb3ctcmV0YWluLW1vdmVkLW9yLWRlbGV0ZWQ6IHRydWVcclxuICBkZXZpY2VXaWR0aEZvck1vYmlsZTogZGV2aWNlLXdpZHRoXHJcbiAgdXNlci1zY2FsYWJsZTogbm9cclxuICBza2luOiBtb2Rlcm5cclxuYCJdfQ==
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2ZXIvZGVmLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFBYSxRQUFBLFNBQVMsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTZHeEIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBkZWZDb25maWcgPSBgXHJcbnNlcnZlcjpcclxuICBwb3J0OiAzMDY4XHJcbiAgYmFzZS11cmw6IC9kbWVuY3VcclxuICBzZXNzaW9uLXN0b3JlOiBtZW1vcnktc2F2ZWRcclxuICBza2luczpcclxuICAgIFwiXCI6XHJcbiAgICAgIGxvY2FsLXBhdGg6IGNsaWVudC9cclxuICAgIG1vZGVybjpcclxuICAgICAgbG9jYWwtcGF0aDogbm9kZV9tb2R1bGVzL2JhY2tlbmQtc2tpbnMvZGlzdC9cclxuZGI6XHJcbiAgdXNlcjogZG1lbmN1X2FkbWluXHJcbiAgbW90b3I6IHBvc3RncmVzcWxcclxuICBob3N0OiBsb2NhbGhvc3RcclxuICBkYXRhYmFzZTogZG1lbmN1X2RiXHJcbiAgc2NoZW1hOiBiYXNlXHJcbiAgc2VhcmNoX3BhdGg6IFtiYXNlLCBjb211biwgaGlzXVxyXG5pbnN0YWxsOlxyXG4gIGR1bXA6XHJcbiAgICBkYjpcclxuICAgICAgb3duZXI6IGRtZW5jdV9vd25lclxyXG4gICAgICBhcHBseS1nZW5lcmljLXVzZXItcmVwbGFjZXM6IHRydWVcclxuICAgIGFkbWluLWNhbi1jcmVhdGUtdGFibGVzOiB0cnVlXHJcbiAgICBlbmFuY2VzOiBpbmxpbmVcclxuICAgIHNraXAtY29udGVudDogdHJ1ZVxyXG4gICAgc2NyaXB0czpcclxuICAgICAgcHJlcGFyZTpcclxuICAgICAgLSAuLi9ub2RlX21vZHVsZXMvb3BlcmF0aXZvcy9pbnN0YWxsL3JlbF90YWJsYV9yZWxhY2lvbmFkYS5zcWxcclxuICAgICAgLSBlc3F1ZW1hX2NvbXVuLnNxbFxyXG4gICAgICAtIGVzcXVlbWFfY29tdW5fc2luX2RhdG8uc3FsXHJcbiAgICAgIC0gZXNxdWVtYV9jb211bl9uc25jLnNxbFxyXG4gICAgICAtIC4uL25vZGVfbW9kdWxlcy9tZXRhLWVuYy9pbnN0YWxsL3ByZXBhcmUuc3FsXHJcbiAgICAgIC0gLi4vbm9kZV9tb2R1bGVzL3ZhcmNhbC9pbnN0YWxsL3dyYXBwZXJzLnNxbFxyXG4gICAgICAtIC4uL25vZGVfbW9kdWxlcy9vcGVyYXRpdm9zL2luc3RhbGwvc3FsMnRhYmxhX2RhdG9zLnNxbFxyXG4gICAgICBwb3N0LWFkYXB0OiBcclxuICAgICAgLSBwYXJhLWluc3RhbGwuc3FsXHJcbiAgICAgIC0gLi4vbm9kZV9tb2R1bGVzL3BnLXRyaWdnZXJzL2xpYi9yZWNyZWF0ZS1oaXMuc3FsXHJcbiAgICAgIC0gLi4vbm9kZV9tb2R1bGVzL3BnLXRyaWdnZXJzL2xpYi90YWJsZS1jaGFuZ2VzLnNxbFxyXG4gICAgICAtIC4uL25vZGVfbW9kdWxlcy9wZy10cmlnZ2Vycy9saWIvZnVuY3Rpb24tY2hhbmdlcy10cmcuc3FsXHJcbiAgICAgIC0gLi4vbm9kZV9tb2R1bGVzL3BnLXRyaWdnZXJzL2xpYi9lbmFuY2Uuc3FsXHJcbiAgICAgIC0gLi4vbm9kZV9tb2R1bGVzL2RhdG9zLWV4dC9pbnN0YWxsL2NvbnRyb2xhcl9tb2RpZmljYWNpb25fZXN0cnVjdHVyYV9jZXJyYWRhLnNxbFxyXG4gICAgICAtIC4uL25vZGVfbW9kdWxlcy9tZXRhLWVuYy9pbnN0YWxsL2Nhc2lsbGVyb3Nfb3JkZW5fdG90YWxfZnVuLnNxbFxyXG4gICAgICAtIC4uL25vZGVfbW9kdWxlcy9tZXRhLWVuYy9pbnN0YWxsL2Nhc2lsbGVyb3NfamVyYXJxdWl6YWRvc19mdW4uc3FsXHJcbiAgICAgIC0gLi4vbm9kZV9tb2R1bGVzL2NvbnNpc3RlbmNpYXMvaW5zdGFsbC90cnlfc3FsLnNxbFxyXG4gICAgICAtIGVzcXVlbWFfZGJvLnNxbCBcclxuICAgICAgLSB2YXJjYWxfbWFudWFsL2VzdHJ1Y3R1cmEuc3FsXHJcbiAgICAgIC0gdmFyY2FsX21hbnVhbC9mdW5jaW9uX3VwZGF0ZS5zcWxcclxuICAgICAgLSBmdW5fdmFsaWRhcl90aXBvZGF0by5zcWxcclxuICAgICAgLSBkZXNpbnRlZ3JhcnBrLnNxbFxyXG4gICAgICAtIGFncmVnYXJfYWRqdW50b19jYXJ0b190cmdcclxuICAgICAgLSBzaW5jcm9fdGFyZWFzX2FyZWFzX3RhcmVhc190ZW1fdHJnLnNxbFxyXG4gICAgICAtIHNpbmNyb25pemFjaW9uX3RhcmVhc190ZW0uc3FsXHJcbiAgICAgIC0gc2luY3Jvbml6YWNpb25fdGVtLnNxbFxyXG4gICAgICAtIGNvbnRyb2xfZGlzZm9ybV9jZXJyYWRvX3RyZy5zcWxcclxuICAgICAgLSBjb250cm9sX2NhcmdhZG9fdGFyZWFzX3RlbV90cmcuc3FsXHJcbiAgICAgIC0gZ2VuZXJhZG9yX2FjY2lvbl9jdW1wbGVfY29uZGljaW9uLnNxbFxyXG4gICAgICAtIHRhcmVhX2N1bXBsZV9jb25kaWNpb24uc3FsXHJcbiAgICAgIC0gbW9tZW50b19jb25zaXN0ZW5jaWFfY3VtcGxlX2NvbmRpY2lvbi5zcWxcclxuICAgICAgLSBhZ3JlZ2FyX2hpc3RvcmlhbF90ZW1fdHJnLnNxbFxyXG4gICAgICAtIGNhcmdhX2luaWNpYWxfdGFyZWFzX3RlbS5zcWxcclxuICAgICAgLSB2YWxpZGFyX3RhcmVhc190ZW1fdHJnLnNxbFxyXG4gICAgICAtIHZhbGlkYXJfbWFuemFuYV9jYXNhX3RlbV90cmcuc3FsXHJcbiAgICAgIC0gYXNpZ25hcl9kZXNhc2lnbmFyX3RhcmVhc190ZW1fdHJnLnNxbFxyXG4gICAgICAtIGRlc3ZlcmlmaWNhcl90YXJlYV90cmcuc3FsXHJcbiAgICAgIC0gaW5pY2lhbF91cGRhdGVfdmFyY2FsX3Bvcl9lbmN1ZXN0YS5zcWxcclxuICAgICAgLSBkaWNjaW9uYXJpb19mdW5jLnNxbFxyXG4gICAgICAtIG9idGVuZXJfc2lndWllbnRlX2NvbnRhZG9yX2FyZWEuc3FsXHJcbmxvZ2luOlxyXG4gIGluZm9GaWVsZExpc3Q6IFt1c3VhcmlvLCByb2wsIGlkcGVyLCBtdWVzdHJhX2VuY3Vlc3Rhc19wcm9kLCBtdWVzdHJhX2VuY3Vlc3Rhc19jYXBhXVxyXG4gIHRhYmxlOiB1c3Vhcmlvc1xyXG4gIHVzZXJGaWVsZE5hbWU6IHVzdWFyaW9cclxuICBwYXNzRmllbGROYW1lOiBtZDVjbGF2ZVxyXG4gIHJvbEZpZWxkTmFtZTogcm9sXHJcbiAgYWN0aXZlQ2xhdXN1bGU6IGFjdGl2b1xyXG4gIGxvY2tlZENsYXVzdWxlOiBub3QgYWN0aXZvXHJcbiAgcGx1czpcclxuICAgIG1heEFnZS01LXNlYzogNTAwMCAgICBcclxuICAgIG1heEFnZTogODY0MDAwMDAwXHJcbiAgICBtYXhBZ2UtMTAtZGF5OiA4NjQwMDAwMDBcclxuICAgIGFsbG93SHR0cExvZ2luOiB0cnVlXHJcbiAgICBmaWxlU3RvcmU6IGZhbHNlXHJcbiAgICBza2lwQ2hlY2tBbHJlYWR5TG9nZ2VkSW46IHRydWVcclxuICAgIGxvZ2luRm9ybTpcclxuICAgICAgZm9ybVRpdGxlOiBkbWVuY3VcclxuICAgICAgdXNlcm5hbWVMYWJlbDogdXN1YXJpb1xyXG4gICAgICBwYXNzd29yZExhYmVsOiBjbGF2ZVxyXG4gICAgICBidXR0b25MYWJlbDogZW50cmFyXHJcbiAgICAgIGZvcm1JbWc6IGltZy9sb2dpbi1sb2NrLWljb24ucG5nXHJcbiAgICBjaFBhc3NGb3JtOlxyXG4gICAgICB1c2VybmFtZUxhYmVsOiB1c3VhcmlvXHJcbiAgICAgIG9sZFBhc3N3b3JkTGFiZWw6IGNsYXZlIGFudGVyaW9yXHJcbiAgICAgIG5ld1Bhc3N3b3JkTGFiZWw6IG51ZXZhIGNsYXZlXHJcbiAgICAgIHJlcFBhc3N3b3JkTGFiZWw6IHJlcGV0aXIgbnVldmEgY2xhdmVcclxuICAgICAgYnV0dG9uTGFiZWw6IENhbWJpYXJcclxuICAgICAgZm9ybVRpdGxlOiBDYW1iaW8gZGUgY2xhdmVcclxuICBtZXNzYWdlczpcclxuICAgIHVzZXJPclBhc3NGYWlsOiBlbCBub21icmUgZGUgdXN1YXJpbyBubyBleGlzdGUgbyBsYSBjbGF2ZSBubyBjb3JyZXNwb25kZVxyXG4gICAgbG9ja2VkRmFpbDogZWwgdXN1YXJpbyBzZSBlbmN1ZW50cmEgYmxvcXVlYWRvXHJcbiAgICBpbmFjdGl2ZUZhaWw6IGVzIHVzdWFyaW8gZXN0w6EgbWFyY2FkbyBjb21vIGluYWN0aXZvXHJcbmNsaWVudC1zZXR1cDpcclxuICB0aXRsZTogU0lFSCAyLjBcclxuICBjdXJzb3JzOiB0cnVlXHJcbiAgbGFuZzogZXNcclxuICBtZW51OiB0cnVlXHJcbiAgYmFja2dyb3VuZC1pbWc6IC4uL2ltZy9iYWNrZ3JvdW5kLXRlc3QucG5nXHJcbiAgZ3JpZC1yb3ctcmV0YWluLW1vdmVkLW9yLWRlbGV0ZWQ6IHRydWVcclxuICBkZXZpY2VXaWR0aEZvck1vYmlsZTogZGV2aWNlLXdpZHRoXHJcbiAgdXNlci1zY2FsYWJsZTogbm9cclxuICBza2luOiBtb2Rlcm5cclxuYCJdfQ==