dmencu 3.2.21 → 3.3.1
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/README.md +42 -42
- package/dist/client/client/client.js +3 -3
- package/dist/client/unlogged/abrir-formulario.js +1 -1
- package/dist/client/unlogged/bypass-formulario.d.ts +6 -42
- package/dist/client/unlogged/bypass-formulario.js +84 -219
- package/dist/client/unlogged/calculos-encuesta.js +112 -38
- package/dist/client/unlogged/helpers-casilleros.d.ts +1 -1
- package/dist/client/unlogged/helpers-casilleros.js +12 -18
- package/dist/client/unlogged/helpers-formulario.d.ts +16 -0
- package/dist/client/unlogged/helpers-formulario.js +88 -0
- package/dist/client/unlogged/redux-formulario.d.ts +1 -2
- package/dist/client/unlogged/redux-formulario.js +21 -31
- package/dist/client/unlogged/render-formulario.d.ts +2 -6
- package/dist/client/unlogged/render-formulario.js +29 -68
- package/dist/client/unlogged/render-formulario.tsx +29 -57
- package/dist/client/unlogged/render-general.js +1 -1
- package/dist/client/unlogged/render-general.tsx +1 -1
- package/dist/client/unlogged/tipos.d.ts +74 -40
- package/dist/client/unlogged/tipos.js +1 -1
- package/dist/server/app-dmencu.d.ts +1428 -0
- package/dist/server/app-dmencu.js +1054 -0
- package/dist/server/def-config.d.ts +1 -0
- package/dist/server/def-config.js +123 -0
- package/dist/server/procedures-dmencu.d.ts +43 -0
- package/dist/server/procedures-dmencu.js +2295 -0
- package/dist/server/server/app-dmencu.d.ts +42 -91
- package/dist/server/server/app-dmencu.js +114 -52
- package/dist/server/server/procedures-dmencu.d.ts +34 -2
- package/dist/server/server/procedures-dmencu.js +77 -51
- package/dist/server/server/setters-rea-no-rea.d.ts +13 -0
- package/dist/server/server/setters-rea-no-rea.js +35 -0
- package/dist/server/server/table-areas.js +4 -4
- package/dist/server/server/table-areas_asignacion_general.js +2 -1
- package/dist/server/server/table-control_campo.js +4 -4
- package/dist/server/server/table-no_rea.js +4 -2
- package/dist/server/server/table-no_rea_sup.js +7 -3
- package/dist/server/server/table-personal.js +1 -1
- package/dist/server/server/table-tareas_tem.js +2 -2
- package/dist/server/server/table-tem.js +2 -2
- package/dist/server/server/types-dmencu.d.ts +34 -2
- package/dist/server/server/types-dmencu.js +2 -1
- package/dist/server/setters-rea-no-rea.d.ts +13 -0
- package/dist/server/setters-rea-no-rea.js +35 -0
- package/dist/server/table-acciones.d.ts +2 -0
- package/dist/server/table-acciones.js +45 -0
- package/dist/server/table-area_enc_proximas.d.ts +2 -0
- package/dist/server/table-area_enc_proximas.js +30 -0
- package/dist/server/table-areas.d.ts +4 -0
- package/dist/server/table-areas.js +112 -0
- package/dist/server/table-areas_asignacion_general.d.ts +2 -0
- package/dist/server/table-areas_asignacion_general.js +86 -0
- package/dist/server/table-barrios.d.ts +2 -0
- package/dist/server/table-barrios.js +35 -0
- package/dist/server/table-comunas.d.ts +2 -0
- package/dist/server/table-comunas.js +33 -0
- package/dist/server/table-control_campo.d.ts +12 -0
- package/dist/server/table-control_campo.js +119 -0
- package/dist/server/table-control_dias_carga.d.ts +2 -0
- package/dist/server/table-control_dias_carga.js +63 -0
- package/dist/server/table-control_resumen.d.ts +2 -0
- package/dist/server/table-control_resumen.js +19 -0
- package/dist/server/table-diccionario.d.ts +2 -0
- package/dist/server/table-diccionario.js +32 -0
- package/dist/server/table-dictra.d.ts +2 -0
- package/dist/server/table-dictra.js +46 -0
- package/dist/server/table-dicvar.d.ts +2 -0
- package/dist/server/table-dicvar.js +32 -0
- package/dist/server/table-encuestadores.d.ts +13 -0
- package/dist/server/table-encuestadores.js +75 -0
- package/dist/server/table-estados.d.ts +2 -0
- package/dist/server/table-estados.js +47 -0
- package/dist/server/table-estados_acciones.d.ts +2 -0
- package/dist/server/table-estados_acciones.js +40 -0
- package/dist/server/table-fracciones.d.ts +2 -0
- package/dist/server/table-fracciones.js +37 -0
- package/dist/server/table-grilla_hoja_ruta.d.ts +2 -0
- package/dist/server/table-grilla_hoja_ruta.js +93 -0
- package/dist/server/table-historial_tem.d.ts +2 -0
- package/dist/server/table-historial_tem.js +57 -0
- package/dist/server/table-hogares.d.ts +2 -0
- package/dist/server/table-hogares.js +156 -0
- package/dist/server/table-hogares_sup.d.ts +2 -0
- package/dist/server/table-hogares_sup.js +191 -0
- package/dist/server/table-inconsistencias_cumplen_condicion.d.ts +2 -0
- package/dist/server/table-inconsistencias_cumplen_condicion.js +33 -0
- package/dist/server/table-manzanas.d.ts +2 -0
- package/dist/server/table-manzanas.js +36 -0
- package/dist/server/table-mis_encuestadores.d.ts +2 -0
- package/dist/server/table-mis_encuestadores.js +77 -0
- package/dist/server/table-mis_tareas.d.ts +2 -0
- package/dist/server/table-mis_tareas.js +18 -0
- package/dist/server/table-mis_tareas_areas.d.ts +2 -0
- package/dist/server/table-mis_tareas_areas.js +20 -0
- package/dist/server/table-modos_dm.d.ts +2 -0
- package/dist/server/table-modos_dm.js +28 -0
- package/dist/server/table-no_rea.js +38 -0
- package/dist/server/table-no_rea_sup.js +36 -0
- package/dist/server/table-operaciones.d.ts +2 -0
- package/dist/server/table-operaciones.js +30 -0
- package/dist/server/table-parametros.d.ts +2 -0
- package/dist/server/table-parametros.js +40 -0
- package/dist/server/table-permisos.d.ts +2 -0
- package/dist/server/table-permisos.js +31 -0
- package/dist/server/table-personal.d.ts +5 -0
- package/dist/server/table-personal.js +62 -0
- package/dist/server/table-personal_rol.d.ts +2 -0
- package/dist/server/table-personal_rol.js +42 -0
- package/dist/server/table-personas.d.ts +2 -0
- package/dist/server/table-personas.js +448 -0
- package/dist/server/table-personas_sup.d.ts +2 -0
- package/dist/server/table-personas_sup.js +93 -0
- package/dist/server/table-radios.d.ts +2 -0
- package/dist/server/table-radios.js +37 -0
- package/dist/server/table-rea.d.ts +2 -0
- package/dist/server/table-rea.js +38 -0
- package/dist/server/table-rea_sup.d.ts +2 -0
- package/dist/server/table-rea_sup.js +38 -0
- package/dist/server/table-recepcionistas.d.ts +2 -0
- package/dist/server/table-recepcionistas.js +18 -0
- package/dist/server/table-recuperadores.d.ts +2 -0
- package/dist/server/table-recuperadores.js +18 -0
- package/dist/server/table-roles.d.ts +2 -0
- package/dist/server/table-roles.js +33 -0
- package/dist/server/table-roles_permisos.d.ts +2 -0
- package/dist/server/table-roles_permisos.js +36 -0
- package/dist/server/table-roles_subordinados.d.ts +2 -0
- package/dist/server/table-roles_subordinados.js +31 -0
- package/dist/server/table-semanas.d.ts +2 -0
- package/dist/server/table-semanas.js +42 -0
- package/dist/server/table-sincronizaciones.d.ts +2 -0
- package/dist/server/table-sincronizaciones.js +30 -0
- package/dist/server/table-supervisores.d.ts +2 -0
- package/dist/server/table-supervisores.js +18 -0
- package/dist/server/table-tareas.d.ts +2 -0
- package/dist/server/table-tareas.js +48 -0
- package/dist/server/table-tareas_areas.d.ts +7 -0
- package/dist/server/table-tareas_areas.js +112 -0
- package/dist/server/table-tareas_proximas.d.ts +2 -0
- package/dist/server/table-tareas_proximas.js +48 -0
- package/dist/server/table-tareas_tem.d.ts +14 -0
- package/dist/server/table-tareas_tem.js +206 -0
- package/dist/server/table-tareas_tem_analisis_campo.d.ts +2 -0
- package/dist/server/table-tareas_tem_analisis_campo.js +31 -0
- package/dist/server/table-tareas_tem_fin_campo.d.ts +3 -0
- package/dist/server/table-tareas_tem_fin_campo.js +56 -0
- package/dist/server/table-tareas_tem_ingreso.d.ts +2 -0
- package/dist/server/table-tareas_tem_ingreso.js +31 -0
- package/dist/server/table-tareas_tem_procesamiento.d.ts +2 -0
- package/dist/server/table-tareas_tem_procesamiento.js +34 -0
- package/dist/server/table-tareas_tem_recepcion.d.ts +6 -0
- package/dist/server/table-tareas_tem_recepcion.js +59 -0
- package/dist/server/table-tem.d.ts +3 -0
- package/dist/server/table-tem.js +247 -0
- package/dist/server/table-tem_asignacion.d.ts +2 -0
- package/dist/server/table-tem_asignacion.js +50 -0
- package/dist/server/table-tem_borradas.d.ts +2 -0
- package/dist/server/table-tem_borradas.js +35 -0
- package/dist/server/table-usuarios.d.ts +2 -0
- package/dist/server/table-usuarios.js +63 -0
- package/dist/server/table-visitas.d.ts +2 -0
- package/dist/server/table-visitas.js +91 -0
- package/dist/server/table-visitas_sup.d.ts +2 -0
- package/dist/server/table-visitas_sup.js +91 -0
- package/dist/server/table-viviendas.d.ts +2 -0
- package/dist/server/table-viviendas.js +299 -0
- package/dist/server/types-dmencu.d.ts +95 -0
- package/dist/server/types-dmencu.js +34 -0
- package/dist/server/unlogged/tipos.d.ts +74 -40
- package/dist/server/unlogged/tipos.js +1 -1
- package/dist/test/app-para-tests.d.ts +1115 -0
- package/dist/test/app-para-tests.js +95 -0
- package/dist/test/test-caches-rea.d.ts +1 -0
- package/dist/test/test-caches-rea.js +243 -0
- package/dist/test/test-helpers-casilleros.d.ts +1 -0
- package/dist/test/test-helpers-casilleros.js +154 -0
- package/dist/test/test-helpers-formulario.d.ts +1 -0
- package/dist/test/test-helpers-formulario.js +95 -0
- package/dist/test/test-impacto-rea-no-rea-en-bd.d.ts +1 -0
- package/dist/test/test-impacto-rea-no-rea-en-bd.js +243 -0
- package/dist/test/test-menu-segun-rol.d.ts +1 -0
- package/dist/test/test-menu-segun-rol.js +170 -0
- package/dist/test/test-setters-rea-no-rea.d.ts +1 -0
- package/dist/test/test-setters-rea-no-rea.js +95 -0
- package/dist/test/test.d.ts +6 -0
- package/dist/test/test.js +8 -2
- package/dist/unlogged/helpers-casilleros.d.ts +1 -1
- package/dist/unlogged/helpers-casilleros.js +12 -18
- package/dist/unlogged/helpers-formulario.d.ts +16 -0
- package/dist/unlogged/helpers-formulario.js +88 -0
- package/dist/unlogged/tipos.d.ts +1 -1
- package/dist/unlogged/tipos.js +1 -1
- package/dist/unlogged/unlogged/abrir-formulario.js +1 -1
- package/dist/unlogged/unlogged/bypass-formulario.d.ts +6 -42
- package/dist/unlogged/unlogged/bypass-formulario.js +84 -219
- package/dist/unlogged/unlogged/helpers-casilleros.js +7 -14
- package/dist/unlogged/unlogged/helpers-formulario.d.ts +16 -0
- package/dist/unlogged/unlogged/helpers-formulario.js +88 -0
- package/dist/unlogged/unlogged/redux-formulario.d.ts +1 -2
- package/dist/unlogged/unlogged/redux-formulario.js +21 -31
- package/dist/unlogged/unlogged/render-formulario.d.ts +2 -6
- package/dist/unlogged/unlogged/render-formulario.js +29 -68
- package/dist/unlogged/unlogged/render-formulario.tsx +29 -57
- package/dist/unlogged/unlogged/render-general.js +1 -1
- package/dist/unlogged/unlogged/render-general.tsx +1 -1
- package/dist/unlogged/unlogged/tipos.d.ts +74 -40
- package/dist/unlogged/unlogged/tipos.js +1 -1
- package/dist/unlogged/unlogged/unlogged.js +2 -2
- package/install/accion_cumple_condicion.sql +1 -1
- package/install/generador_accion_cumple_condicion.sql +2 -2
- package/install/tarea_cumple_condicion.sql +1 -1
- package/install/xcalcular_resultado_trg.sql +1 -1
- package/package.json +20 -17
- package/dist/server/server/table-no_rea copy.js +0 -38
- package/dist/server/server/table-no_rea_sup copy.js +0 -36
- package/dist/unlogged/bypass-formulario.d.ts +0 -198
- package/dist/unlogged/bypass-formulario.js +0 -1226
- package/dist/unlogged/redux-formulario.d.ts +0 -440
- package/dist/unlogged/redux-formulario.js +0 -324
- package/dist/unlogged/render-config.d.ts +0 -52
- package/dist/unlogged/render-config.js +0 -161
- package/dist/unlogged/unlogged/bypass-formulario copy.d.ts +0 -198
- package/dist/unlogged/unlogged/bypass-formulario copy.js +0 -1226
- package/dist/unlogged/unlogged/helpers.d.ts +0 -14
- package/dist/unlogged/unlogged/helpers.js +0 -129
- /package/dist/server/{server/table-no_rea copy.d.ts → table-no_rea.d.ts} +0 -0
- /package/dist/server/{server/table-no_rea_sup copy.d.ts → table-no_rea_sup.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
# dmencu
|
|
4
|
-
|
|
5
|
-
Comprehensive system for field operations management, survey collection, and tracking based on Backend-Plus.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
[](https://npmjs.org/package/dmencu)
|
|
9
|
-
[](https://npmjs.org/package/dmencu)
|
|
10
|
-
[](https://github.com/codenautas/dmencu/actions/workflows/build-and-test.yml)
|
|
11
|
-
[](https://coveralls.io/r/codenautas/dmencu)
|
|
12
|
-
[](https://socket.dev/npm/package/dmencu)
|
|
13
|
-
[](https://github.com/codenautas/dmencu/actions/workflows/qa-control.yml)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
language: 
|
|
17
|
-
also available in:
|
|
18
|
-
[](LEEME.md)
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
An advanced framework and application specialized in statistical field operation management, field roadmaps (Hdr), survey data collection, and quality control. Built on top of the **Backend-Plus** ecosystem and PostgreSQL, it is fully optimized for field deployment via an Offline-First/PWA architecture.
|
|
22
|
-
|
|
23
|
-
Main features are:
|
|
24
|
-
|
|
25
|
-
1. **Field Operations & Roadmap Management (Hdr):**
|
|
26
|
-
- Dynamic assignment and allocation of workloads per zone, area, surveyor, and supervisor.
|
|
27
|
-
- Real-time tracking of survey progress at the dwelling, household, and individual levels.
|
|
28
|
-
- Visit logging, non-response reason tracking, re-entries, and supervisory escalation workflows.
|
|
29
|
-
2. **Task Engine & Actions:**
|
|
30
|
-
- Allows modeling tasks, configuring available actions for each, and assembling an operational workflow around them.
|
|
31
|
-
- Automated audit logs tracking user activity, timestamped transitions, and historical edits.
|
|
32
|
-
3. **Centralized Metadata Architecture:**
|
|
33
|
-
- Allows questionnaire modeling driven by metadata, validating skip patterns and valid inclusions through the "meta-enc" metadata engine.
|
|
34
|
-
- **Consistency Engine & Validation Rules:** Automated real-time or post-entry logical and range validation.
|
|
35
|
-
- **Permissions & Processes:** Granular access control for views, tables, and operational actions based on field roles (Surveyor, Supervisor, Data Entry, Field Coordinator).
|
|
36
|
-
4. **Offline-First Architecture (PWA) & Installer:**
|
|
37
|
-
- Seamless background installation and updates managed via Service Worker (`swa`).
|
|
38
|
-
- Publicly served static assets, manifests, and App Shell (decoupled from session cookies) ensuring total application resilience in low/no-signal areas.
|
|
39
|
-
- Floating installation log console and non-intrusive overlay for credential re-validation.
|
|
40
|
-
5. **Advanced Grids & Survey UI:**
|
|
41
|
-
- Interactive, editable, filterable, and sortable data grids with native XLSX export support.
|
|
42
|
-
- Responsive user interface optimized for mobile devices and desktop operation.
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
# dmencu
|
|
4
|
+
|
|
5
|
+
Comprehensive system for field operations management, survey collection, and tracking based on Backend-Plus.
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
[](https://npmjs.org/package/dmencu)
|
|
9
|
+
[](https://npmjs.org/package/dmencu)
|
|
10
|
+
[](https://github.com/codenautas/dmencu/actions/workflows/build-and-test.yml)
|
|
11
|
+
[](https://coveralls.io/r/codenautas/dmencu)
|
|
12
|
+
[](https://socket.dev/npm/package/dmencu)
|
|
13
|
+
[](https://github.com/codenautas/dmencu/actions/workflows/qa-control.yml)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
language: 
|
|
17
|
+
also available in:
|
|
18
|
+
[](LEEME.md)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
An advanced framework and application specialized in statistical field operation management, field roadmaps (Hdr), survey data collection, and quality control. Built on top of the **Backend-Plus** ecosystem and PostgreSQL, it is fully optimized for field deployment via an Offline-First/PWA architecture.
|
|
22
|
+
|
|
23
|
+
Main features are:
|
|
24
|
+
|
|
25
|
+
1. **Field Operations & Roadmap Management (Hdr):**
|
|
26
|
+
- Dynamic assignment and allocation of workloads per zone, area, surveyor, and supervisor.
|
|
27
|
+
- Real-time tracking of survey progress at the dwelling, household, and individual levels.
|
|
28
|
+
- Visit logging, non-response reason tracking, re-entries, and supervisory escalation workflows.
|
|
29
|
+
2. **Task Engine & Actions:**
|
|
30
|
+
- Allows modeling tasks, configuring available actions for each, and assembling an operational workflow around them.
|
|
31
|
+
- Automated audit logs tracking user activity, timestamped transitions, and historical edits.
|
|
32
|
+
3. **Centralized Metadata Architecture:**
|
|
33
|
+
- Allows questionnaire modeling driven by metadata, validating skip patterns and valid inclusions through the "meta-enc" metadata engine.
|
|
34
|
+
- **Consistency Engine & Validation Rules:** Automated real-time or post-entry logical and range validation.
|
|
35
|
+
- **Permissions & Processes:** Granular access control for views, tables, and operational actions based on field roles (Surveyor, Supervisor, Data Entry, Field Coordinator).
|
|
36
|
+
4. **Offline-First Architecture (PWA) & Installer:**
|
|
37
|
+
- Seamless background installation and updates managed via Service Worker (`swa`).
|
|
38
|
+
- Publicly served static assets, manifests, and App Shell (decoupled from session cookies) ensuring total application resilience in low/no-signal areas.
|
|
39
|
+
- Floating installation log console and non-intrusive overlay for credential re-validation.
|
|
40
|
+
5. **Advanced Grids & Survey UI:**
|
|
41
|
+
- Interactive, editable, filterable, and sortable data grids with native XLSX export support.
|
|
42
|
+
- Responsive user interface optimized for mobile devices and desktop operation.
|
|
@@ -161,7 +161,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
161
161
|
ver.onclick = () => abrirEncuestaEnPestanniaDedicada(location.origin + location.pathname + my.menuSeparator + `w=abrir_encuesta&up=${JSON.stringify(up)}&autoproced=true`);
|
|
162
162
|
return ver;
|
|
163
163
|
};
|
|
164
|
-
var crearBotonesVerAbrirTareas = (depot, fieldName,
|
|
164
|
+
var crearBotonesVerAbrirTareas = (depot, fieldName, _label) => __awaiter(void 0, void 0, void 0, function* () {
|
|
165
165
|
tareas = tareas ? tareas : (yield myOwn.ajax.table_data({ table: `tareas`, fixedFields: [] }));
|
|
166
166
|
var misTareas = tareas.filter((tarea) =>
|
|
167
167
|
//@ts-ignore def existe en manager y muestraAbrirEnTodasLasTareas tambien (en esa grilla)
|
|
@@ -588,7 +588,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
588
588
|
nroSincro ? js_to_html_1.html.p(["Número de sincronización: ", js_to_html_1.html.b("" + nroSincro.toString())]) : null,
|
|
589
589
|
js_to_html_1.html.h4(titulo),
|
|
590
590
|
js_to_html_1.html.p([htmlNumero(likeAr(datos.cargas).array().length), ' areas: ', likeAr(datos.cargas).keys().join(', ')]),
|
|
591
|
-
js_to_html_1.html.p([htmlNumero(likeAr(datos.respuestas[estructura.uaPpal]).array().length), ' ' + estructura.uaPpal]),
|
|
591
|
+
estructura ? js_to_html_1.html.p([htmlNumero(likeAr(datos.respuestas[estructura.uaPpal]).array().length), ' ' + estructura.uaPpal]) : null,
|
|
592
592
|
mostrarLinkHdr ? js_to_html_1.html.a({ href: './campo' }, [js_to_html_1.html.b('IR A LA HOJA DE RUTA')]) : null
|
|
593
593
|
]).create());
|
|
594
594
|
}
|
|
@@ -698,4 +698,4 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
698
698
|
};
|
|
699
699
|
});
|
|
700
700
|
/* FIN sincronizar y cambio de modo LEGACY */
|
|
701
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaWVudC9jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUFBLDJDQUFrQztJQUNsQywyQ0FBa0Q7SUFDbEQsbUVBQWlGO0lBUWpGLGtDQUFrQztJQUNsQyxtRUFBd0U7SUFDeEUseURBQXlFO0lBQ3pFLDZEQUE0RDtJQUM1RCxxRUFBMEU7SUFHMUUsa0JBQWtCO0lBRWxCLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQztJQUM3QixJQUFJLGlCQUFpQixHQUFrQixJQUFJLENBQUM7SUFFckMsTUFBTSxlQUFlLEdBQUcsQ0FBTyxNQUFnQyxFQUF1QixFQUFFLGtEQUMzRixPQUFBLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQSxHQUFBLENBQUM7SUFEdkUsUUFBQSxlQUFlLG1CQUN3RDtJQUdwRixLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQVMsRUFBRTtRQUNyQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDZixJQUFJLENBQUM7WUFDRCxpQkFBaUIsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ1gsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLENBQUM7UUFDRCxNQUFNLFlBQVksR0FBRyxJQUFBLDRDQUE4QixFQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELEtBQUssQ0FBQyxRQUFRLENBQUMsY0FBYyxHQUFHO1lBQzVCLFVBQVUsRUFBRTtnQkFDUixFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUs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LEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTt3QkFDakMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7cUJBQ3RDO2lCQUNKLENBQUMsQ0FBQztnQkFDSCxJQUFJLGdCQUFnQixFQUFFLENBQUM7b0JBQ25CLElBQUksZ0JBQWdCLENBQUMsS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO3dCQUNuQyxJQUFJLENBQUM7NEJBQ0QsY0FBYyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7NEJBQy9CLE1BQU0saUJBQWlCLENBQUMsY0FBYyxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQzs0QkFDOUQsVUFBVSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7NEJBQzFCLFVBQVUsQ0FBQyxXQUFXLENBQ2xCLGlCQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBQSwrQkFBZSxHQUFFLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUN0RSxDQUFBO3dCQUNMLENBQUM7d0JBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQzs0QkFDWCxZQUFZLENBQUMsSUFBQSx1QkFBVSxFQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUMxQyxDQUFDO2dDQUFTLENBQUM7NEJBQ1AsY0FBYyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7d0JBQ3BDLENBQUM7d0JBQUEsQ0FBQztvQkFDTixDQUFDO3lCQUFNLENBQUM7d0JBQ0osWUFBWSxDQUFDLHdCQUF3QixDQUFDLENBQUE7b0JBQzFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUMsQ0FBQSxDQUFBO1FBQ0wsQ0FBQztLQUFBLENBQUM7O0FBRUYsNkNBQTZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaHRtbCB9IGZyb20gXCJqcy10by1odG1sXCI7XHJcbmltcG9ydCB7IGV4cGVjdGVkLCB1bmV4cGVjdGVkIH0gZnJvbSBcImNhc3QtZXJyb3JcIjtcclxuaW1wb3J0IHsgZGlzcGF0Y2hlcnMsIGNyZWFyU3RvcmVGb3JtdWxhcmlvIH0gZnJvbSBcIi4uL3VubG9nZ2VkL3JlZHV4LWZvcm11bGFyaW9cIjtcclxuaW1wb3J0IHtcclxuICAgIENhc29TdGF0ZSxcclxuICAgIElkRm9ybXVsYXJpbywgRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMsIElkRW5jLCBJZE9wZXJhdGl2bywgSWRUYXJlYSwgRXN0YWRvQWNjaW9uLCBEaXJlY2Npb25BY2Npb24sXHJcbiAgICBDYW1wb1BrUmFpeiwgTW9kb0RNLFxyXG4gICAgRXN0cnVjdHVyYSxcclxuICAgIEZvclBrUmFpelxyXG59IGZyb20gXCIuLi91bmxvZ2dlZC90aXBvc1wiO1xyXG5pbXBvcnQgKiBhcyBsaWtlQXIgZnJvbSBcImxpa2UtYXJcIjtcclxuaW1wb3J0IHsgQkFDS1VQUywgY2FyZ2FyRXN0cnVjdHVyYSB9IGZyb20gXCIuLi91bmxvZ2dlZC9hYnJpci1mb3JtdWxhcmlvXCJcclxuaW1wb3J0IHsgY3JlYXRlTG9jYWxTdG9yYWdlRm9ybVJlbmRlcmVyIH0gZnJvbSBcIi4uL3VubG9nZ2VkL3JlbmRlci1pbml0XCI7XHJcbmltcG9ydCB7IGdldEZvcm1SZW5kZXJlciB9IGZyb20gXCIuLi91bmxvZ2dlZC9yZW5kZXItY29uZmlnXCI7XHJcbmltcG9ydCB7IGRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwgfSBmcm9tICcuLi91bmxvZ2dlZC9yZW5kZXItZm9ybXVsYXJpbyc7XHJcbmltcG9ydCB7IGhheURhdG9zQnlQYXNzQWxtYWNlbmFkb3MgfSBmcm9tIFwiLi4vdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW9cIjtcclxuXHJcbi8vVE9ETyBHRU5FUkFMSVpBUlxyXG5cclxuY29uc3QgVEFSRUFfREVGQVVMVCA9ICdlbmN1JztcclxudmFyIE9QRVJBVElWT19ERUZBVUxUOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbmV4cG9ydCBjb25zdCB0cmFlckVzdHJ1Y3R1cmEgPSBhc3luYyAocGFyYW1zOiB7b3BlcmF0aXZvOklkT3BlcmF0aXZvIH0pOiBQcm9taXNlPEVzdHJ1Y3R1cmE+ID0+XHJcbiAgICBhd2FpdCBteU93bi5hamF4Lm9wZXJhdGl2b19lc3RydWN0dXJhX2NvbXBsZXRhKHsgb3BlcmF0aXZvOiBwYXJhbXMub3BlcmF0aXZvIH0pO1xyXG5cclxuXHJcbm15T3duLmF1dG9TZXR1cEZ1bmN0aW9ucy5wdXNoKGFzeW5jICgpID0+IHtcclxuICAgIHZhciBteSA9IG15T3duO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBPUEVSQVRJVk9fREVGQVVMVCA9IGF3YWl0IG15LmFqYXgub3BlcmF0aXZvX2dldCh7fSk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICBPUEVSQVRJVk9fREVGQVVMVCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBmb3JtUmVuZGVyZXIgPSBjcmVhdGVMb2NhbFN0b3JhZ2VGb3JtUmVuZGVyZXIoe30pO1xyXG4gICAgbXlPd24ud1NjcmVlbnMuYWJyaXJfZW5jdWVzdGEgPSB7XHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCBkZWZhdWx0VmFsdWU6IE9QRVJBVElWT19ERUZBVUxULCByZWZlcmVuY2VzOiAnb3BlcmF0aXZvcycgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnLCBkZWZhdWx0VmFsdWU6IFRBUkVBX0RFRkFVTFQsIHJlZmVyZW5jZXM6ICd0YXJlYXMnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAnaW50ZWdlcicsIGRlZmF1bHRWYWx1ZTogMTMwMDMxIH1cclxuICAgICAgICBdLFxyXG4gICAgICAgIGF1dG9wcm9jZWQ6IHRydWUsXHJcbiAgICAgICAgbWFpbkFjdGlvbjogYXN5bmMgKHBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICAvLyBhbnRlczogYWJyaXJEaXJlY3RvXHJcbiAgICAgICAgICAgIHZhciB7IG9wZXJhdGl2bywgZW5jLCB0YXJlYSB9ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICBmb3JtUmVuZGVyZXIudXBkYXRlQ29uZmlnKHtcclxuICAgICAgICAgICAgICAgIGxlZXJEYXRvczogYXN5bmMgZnVuY3Rpb24gbGVlckRhdG9zRW5CYXNlRGVEYXRvcygpOiBQcm9taXNlPERhdG9zQnlQYXNzUGVyc2lzdGlibGVzPiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IG15LmFqYXguZG1fZm9ycGtyYWl6X2Nhcmdhcih7IG9wZXJhdGl2bywgcGtfcmFpel92YWx1ZTogZW5jLCB0YXJlYSB9KSBhcyBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcztcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBwZXJzaXN0aXJEYXRvczogYXN5bmMgZnVuY3Rpb24gcGVyc2lzdGlyRGF0b3NFbkJhc2VEZURhdG9zKHBlcnNpc3RlbnRlczogRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGVyc2lzdGVudGVzLnNvbG9MZWN0dXJhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVzdMOhIGludGVudGFuZG8gbW9kaWZpY2FyIHVuYSBlbmN1ZXN0YSBhYmllcnRhIGNvbW8gc29sbyBsZWN0dXJhLCBubyBzZSBndWFyZGFyb24gbG9zIGNhbWJpb3NcIilcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbXkuYWpheC5kbV9mb3Jwa3JhaXpfZGVzY2FyZ2FyKHsgb3BlcmF0aXZvLCBwZXJzaXN0ZW50ZXMgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB2YXIgZXN0cnVjdHVyYSA9IGF3YWl0IGZvcm1SZW5kZXJlci5sZWVyRXN0cnVjdHVyYSgpO1xyXG4gICAgICAgICAgICB2YXIgY2FyZ2EgPSBhd2FpdCBmb3JtUmVuZGVyZXIubGVlckRhdG9zKCk7XHJcbiAgICAgICAgICAgIGlmICghZXN0cnVjdHVyYSB8fCAhZXN0cnVjdHVyYS5zZW1hbmFzIHx8IChlc3RydWN0dXJhLnRpbWVzdGFtcCA/PyAwKSA8IGNhcmdhPy50aW1lc3RhbXBFc3RydWN0dXJhISB8fCBlc3RydWN0dXJhLm9wZXJhdGl2byAhPSBvcGVyYXRpdm8gfHwgbXkuY29uZmlnLmNvbmZpZy5kZXZlbCkge1xyXG4gICAgICAgICAgICAgICAgZXN0cnVjdHVyYSA9IGF3YWl0IHRyYWVyRXN0cnVjdHVyYSh7IG9wZXJhdGl2byB9KVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgZm9ybVJlbmRlcmVyLnBlcnNpc3RpckVzdHJ1Y3R1cmEoZXN0cnVjdHVyYSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICAgIC8vdmFyIHN0YXRlOiBDYXNvU3RhdGUgPSB7fVxyXG4gICAgICAgICAgICAvL2luaWNpYWxpemFyU3RhdGUoc3RhdGUpO1xyXG4gICAgICAgICAgICB2YXIgZm9yUGtSYWl6ID0geyBmb3JtdWxhcmlvOiBjYXJnYS5pbmZvcm1hY2lvbkhkcltlbmMgYXMgSWRFbmNdLnRhcmVhLm1haW5fZm9ybSwgW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF06IGVuYyB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjYXJnYT8ucmVzcHVlc3Rhc1tlc3RydWN0dXJhLnVhUHBhbF1bZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbCBhcyBDYW1wb1BrUmFpel1dKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHNlIGVuY3VlbnRyYSBlbC9sYSAke2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbH0gJHtmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZXNwbGVnYXJGb3JtdWxhcmlvQWN0dWFsKGZvcm1SZW5kZXJlciwgeyBmb3JQa1JhaXo6Zm9yUGtSYWl6IGFzIEZvclBrUmFpeiB9KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgbXlPd24ud1NjcmVlbnMuY29uc2lzdGlyX2VuY3Vlc3RhID0ge1xyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgZGVmYXVsdFZhbHVlOiBPUEVSQVRJVk9fREVGQVVMVCwgcmVmZXJlbmNlczogJ29wZXJhdGl2b3MnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ2ludGVnZXInIH1cclxuICAgICAgICBdLFxyXG4gICAgICAgIGF1dG9wcm9jZWQ6IHRydWUsXHJcbiAgICAgICAgbWFpbkFjdGlvbjogYXN5bmMgKHBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICBpZiAod2luZG93Lm9wZW5lcikge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1haW5Ub3BCYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbi10b3AtYmFyJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAobWFpblRvcEJhcikge1xyXG4gICAgICAgICAgICAgICAgICAgIG1haW5Ub3BCYXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgeyBvcGVyYXRpdm8sIHRhcmVhLCBlbmMgfSA9IHBhcmFtcztcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IG15T3duLmFqYXguY29uc2lzdGlyX2VuY3Vlc3RhKHtcclxuICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogb3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgaWRfY2FzbzogZW5jXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0Lm9rKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZml4ZWRGaWVsZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZpeGVkRmllbGRzLnB1c2goeyBmaWVsZE5hbWU6ICdvcGVyYXRpdm8nLCB2YWx1ZTogb3BlcmF0aXZvIH0pO1xyXG4gICAgICAgICAgICAgICAgZml4ZWRGaWVsZHMucHVzaCh7IGZpZWxkTmFtZTogJ3ZpdmllbmRhJywgdmFsdWU6IGVuYyB9KTtcclxuICAgICAgICAgICAgICAgIHZhciBtYWluTGF5b3V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JykhO1xyXG4gICAgICAgICAgICAgICAgdmFyIGRpdkdyaWxsYSA9IGh0bWwuZGl2KHsgaWQ6ICdpbmNvbnNpc3RlbmNpYXMnIH0pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgbWFpbkxheW91dC5pbnNlcnRCZWZvcmUoZGl2R3JpbGxhLCBtYWluTGF5b3V0LmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGRpdkJvdG9uZXMgPSBodG1sLmRpdih7IGlkOiAnYm90b25lcy1wb3N0LWNvbnNpc3RpcicgfSwgW1xyXG4gICAgICAgICAgICAgICAgICAgIGNyZWFyQm90b25DZXJyYXJFbmN1ZXN0YShcclxuICAgICAgICAgICAgICAgICAgICAgICAgYGNlcnJhciBlbmN1ZXN0YWBcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIGNyZWFyQm90b25WZXJBYnJpckVuY3Vlc3RhKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGB2b2x2ZXIgYSBlbmN1ZXN0YSAke2VuY31gXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgXSkuY3JlYXRlKClcclxuICAgICAgICAgICAgICAgIG1haW5MYXlvdXQuaW5zZXJ0QmVmb3JlKGRpdkJvdG9uZXMsIG1haW5MYXlvdXQuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICBteS50YWJsZUdyaWQoXCJpbmNvbnNpc3RlbmNpYXNfY3VtcGxlbl9jb25kaWNpb25cIiwgZGl2R3JpbGxhLCB7IHRhYmxlRGVmOiB7fSwgZml4ZWRGaWVsZHM6IGZpeGVkRmllbGRzIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5cclxuLy9xdWl0YSBib290c3RyYXAgZGVsIGhlYWQgcGFyYSBxdWUgbm8gcm9tcGEgbG9zIGVzdGlsb3MgZGUgQkVQbHVzIChzb2xvIHNlIHVzYSBib290c3RyYXAgZW4gZWwgZm9ybSlcclxudmFyIGxpbmtOb2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2hyZWY9XCJjc3MvYm9vdHN0cmFwLm1pbi5jc3NcIl0nKTtcclxubGlua05vZGVbMF0/LnBhcmVudE5vZGU/LnJlbW92ZUNoaWxkKGxpbmtOb2RlWzBdKTtcclxuXHJcbmZ1bmN0aW9uIGNvbnNpc3Rpcl9maWx0cm8odGFyZWE6IHN0cmluZywgcmVhX3RlbTogbnVtYmVyIHwgbnVsbCwgcmVhOiBudW1iZXIgfCBudWxsKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGFyZWEgPyByZWFfdGVtIDogcmVhO1xyXG59O1xyXG5cclxudmFyIHRhcmVhczogYW55ID0gbnVsbDtcclxuXHJcbmZ1bmN0aW9uIGh0bWxOdW1lcm8obnVtOiBudW1iZXIpIHtcclxuICAgIHJldHVybiBodG1sLnNwYW4oeyBjbGFzczogJ251bWVybycgfSwgJycgKyAobnVtID8/ICcnKSlcclxufVxyXG5cclxudmFyIGNyZWFyQm90b25DZXJyYXJFbmN1ZXN0YSA9IChsYWJlbDogc3RyaW5nKSA9PiB7XHJcbiAgICBsZXQgcGF0aCA9IFwiTTMgM3YxOGgxOFYzSDN6bTE0IDEyLjU5TDE1LjU5IDE3IDEyIDEzLjQxIDguNDEgMTcgNyAxNS41OSAxMC41OSAxMiA3IDguNDEgOC40MSA3IDEyIDEwLjU5IDE1LjU5IDcgMTcgOC40MSAxMy40MSAxMiAxNyAxNS41OXpcIjtcclxuICAgIHZhciBzdmcgPSBodG1sLnN2Zyh7IGNsYXNzOiBcInN2Zy1jZXJyYXItZW5jdWVzdGFcIiB9LCBbXHJcbiAgICAgICAgaHRtbC5wYXRoKHtcclxuICAgICAgICAgICAgZDogcGF0aFxyXG4gICAgICAgIH0pXHJcbiAgICBdKS5jcmVhdGUoKTtcclxuICAgIHN2Zy5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsIFwiMCAwIDI2IDI2XCIpO1xyXG4gICAgLy9AdHMtaWdub3JlIHN2ZyBwdWVkZSBzZXIgaGlqbyBkZSB1biBib3RvblxyXG4gICAgbGV0IHZlciA9IGh0bWwuYnV0dG9uKHsgaWQ6ICdib3Rvbi1jZXJyYXItZW5jdWVzdGEnIH0sIFtzdmcsIGxhYmVsXSkuY3JlYXRlKCk7XHJcbiAgICB2ZXIub25jbGljayA9ICgpID0+IGNsb3NlKCk7XHJcbiAgICByZXR1cm4gdmVyXHJcbn1cclxuXHJcbmNvbnN0IGFicmlyRW5jdWVzdGFFblBlc3Rhbm5pYURlZGljYWRhID0gKHVybDogc3RyaW5nKSA9PiB7XHJcbiAgICBjb25zdCBBQlJJUl9UQUIgPSBcIl9hYnJpclwiO1xyXG4gICAgd2luZG93Lm9wZW4odXJsLCBBQlJJUl9UQUIpO1xyXG59XHJcblxyXG52YXIgY3JlYXJCb3RvblZlckFicmlyRW5jdWVzdGEgPSAob3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IElkVGFyZWEsIGVuY3Vlc3RhOiBudW1iZXIsIGxhYmVsOiBzdHJpbmcpID0+IHtcclxuICAgIHZhciB1cCA9IHtcclxuICAgICAgICBvcGVyYXRpdm86IG9wZXJhdGl2byxcclxuICAgICAgICB0YXJlYTogdGFyZWEsXHJcbiAgICAgICAgZW5jOiBlbmN1ZXN0YVxyXG4gICAgfVxyXG4gICAgbGV0IHZlciA9IGh0bWwuYnV0dG9uKHsgaWQ6ICdib3Rvbi12b2x2ZXItYS1lbmN1ZXN0YScgfSwgbGFiZWwpLmNyZWF0ZSgpO1xyXG4gICAgdmVyLm9uY2xpY2sgPSAoKSA9PiBhYnJpckVuY3Vlc3RhRW5QZXN0YW5uaWFEZWRpY2FkYShsb2NhdGlvbi5vcmlnaW4gKyBsb2NhdGlvbi5wYXRobmFtZSArIG15Lm1lbnVTZXBhcmF0b3IgKyBgdz1hYnJpcl9lbmN1ZXN0YSZ1cD0ke0pTT04uc3RyaW5naWZ5KHVwKX0mYXV0b3Byb2NlZD10cnVlYClcclxuICAgIHJldHVybiB2ZXJcclxufVxyXG5cclxudmFyIGNyZWFyQm90b25lc1ZlckFicmlyVGFyZWFzID0gYXN5bmMgKGRlcG90OiBteU93bi5EZXBvdCwgZmllbGROYW1lOiBzdHJpbmcsIGxhYmVsOiAnYWJyaXInIHwgJ3ZlcicpID0+IHtcclxuICAgIHRhcmVhcyA9IHRhcmVhcyA/IHRhcmVhcyA6IChhd2FpdCBteU93bi5hamF4LnRhYmxlX2RhdGEoeyB0YWJsZTogYHRhcmVhc2AsIGZpeGVkRmllbGRzOiBbXSB9KSk7XHJcbiAgICB2YXIgbWlzVGFyZWFzID0gdGFyZWFzLmZpbHRlcigodGFyZWE6YW55KSA9PlxyXG4gICAgICAgIC8vQHRzLWlnbm9yZSBkZWYgZXhpc3RlIGVuIG1hbmFnZXIgeSBtdWVzdHJhQWJyaXJFblRvZGFzTGFzVGFyZWFzIHRhbWJpZW4gKGVuIGVzYSBncmlsbGEpXHJcbiAgICAgICAgISF0YXJlYS5tYWluX2Zvcm0gJiYgdGFyZWEub3BlcmF0aXZvID09IGRlcG90LnJvdy5vcGVyYXRpdm8gJiYgKGRlcG90Lm1hbmFnZXIuZGVmLm11ZXN0cmFBYnJpckVuVG9kYXNMYXNUYXJlYXMgPyB0cnVlIDogZGVwb3Qucm93LnRhcmVhID09IHRhcmVhLnRhcmVhKVxyXG4gICAgKTtcclxuICAgIGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV0uaW5uZXJIVE1MID0gJyc7XHJcbiAgICBtaXNUYXJlYXMuZm9yRWFjaCgodGFyZWE6IHsgdGFyZWE6IHN0cmluZywgbm9tYnJlOiBzdHJpbmcsIG1haW5fZm9ybTogSWRGb3JtdWxhcmlvIH0pID0+IHtcclxuICAgICAgICBsZXQgYnV0dG9uTGFiZWwgPSBgJHt0YXJlYS50YXJlYX1gO1xyXG4gICAgICAgIGxldCB2ZXIgPSBjcmVhckJvdG9uVmVyQWJyaXJFbmN1ZXN0YShcclxuICAgICAgICAgICAgZGVwb3Qucm93Lm9wZXJhdGl2byBhcyBJZE9wZXJhdGl2byxcclxuICAgICAgICAgICAgdGFyZWEudGFyZWEgYXMgSWRUYXJlYSxcclxuICAgICAgICAgICAgTnVtYmVyKGRlcG90LnJvdy5lbmMpLFxyXG4gICAgICAgICAgICBidXR0b25MYWJlbFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdmVyLnN0eWxlID0gJ21hcmdpbjowcHggMnB4Oyc7XHJcbiAgICAgICAgZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXS5hcHBlbmRDaGlsZCh2ZXIpO1xyXG4gICAgfSlcclxufVxyXG5cclxudmFyIGdldEFicmlyT3ZlciA9IChfZGVwb3Q6IG15T3duLkRlcG90LCBfZmllbGROYW1lOiBzdHJpbmcpOiAnYWJyaXInID0+ICdhYnJpcidcclxuLy9cclxuLyooZGVwb3Qucm93LmNhcmdhZG9fZG0gfHwgIWRlcG90LnJvd1snZXN0YWRvc19fcGVybWl0ZV9lZGl0YXJfZW5jdWVzdGEnXSAmJiBkZXBvdC5yb3cuYXNpZ25hZG8gIT0gbXkuY29uZmlnLmlkcGVyKT9cclxuICAgICd2ZXInOidhYnJpcidcclxuKi9cclxuXHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5hYnJpciA9IHtcclxuICAgIHByZXBhcmU6IChfZGVwb3QsIF9maWVsZE5hbWUpID0+IHsgfSxcclxuICAgIHVwZGF0ZTogKGRlcG90LCBmaWVsZE5hbWUpID0+IHtcclxuICAgICAgICB2YXIgbGFiZWw6ICd2ZXInIHwgJ2FicmlyJyA9IGdldEFicmlyT3ZlcihkZXBvdCwgZmllbGROYW1lKTtcclxuICAgICAgICBjcmVhckJvdG9uZXNWZXJBYnJpclRhcmVhcyhkZXBvdCwgZmllbGROYW1lLCBsYWJlbCk7IC8vbm8gZXNwZXJvIHByb21lc2EgcG9ycXVlIG5vIGVzIG5lY2VzYXJpb1xyXG4gICAgfVxyXG59O1xyXG5cclxubXlPd24uY2xpZW50U2lkZXMuYWJyaXJSZWNlcGNpb24gPSB7XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKSA9PiB7IH0sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKSA9PiB7XHJcbiAgICAgICAgdmFyIGxhYmVsOiAndmVyJyB8ICdhYnJpcicgPSBnZXRBYnJpck92ZXIoZGVwb3QsIGZpZWxkTmFtZSk7XHJcbiAgICAgICAgY3JlYXJCb3RvbmVzVmVyQWJyaXJUYXJlYXMoZGVwb3QsIGZpZWxkTmFtZSwgbGFiZWwpOyAvL25vIGVzcGVybyBwcm9tZXNhIHBvcnF1ZSBubyBlcyBuZWNlc2FyaW9cclxuICAgIH1cclxufTtcclxuXHJcbm15T3duLmNsaWVudFNpZGVzLnZlckljb25vU3ZnID0ge1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSkgPT4geyB9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSkgPT4ge1xyXG4gICAgICAgIGxldCB0ZCA9IGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV07XHJcbiAgICAgICAgdGQuaW5uZXJIVE1MID0gJyc7XHJcbiAgICAgICAgaWYgKGRlcG90LnJvdy5wYXRoX2ljb25vX3N2Zykge1xyXG4gICAgICAgICAgICB2YXIgc3ZnID0gaHRtbC5zdmcoe1xyXG4gICAgICAgICAgICAgICAgY2xhc3M6IFwic3ZnLWFjY2lvbmVzXCJcclxuICAgICAgICAgICAgfSwgW1xyXG4gICAgICAgICAgICAgICAgaHRtbC5wYXRoKHtcclxuICAgICAgICAgICAgICAgICAgICBkOiBkZXBvdC5yb3cucGF0aF9pY29ub19zdmdcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIF0pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICBzdmcuc2V0QXR0cmlidXRlKFwidmlld0JveFwiLCBcIjAgMCA1MCA1MFwiKTtcclxuICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoc3ZnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG52YXIgY3JlYXJTVkcgPSAocGF0aDogc3RyaW5nLCBwcm9wczogYW55KSA9PiB7XHJcbiAgICB2YXIgc3ZnID0gaHRtbC5zdmcocHJvcHMgfHwge30sIFtcclxuICAgICAgICBodG1sLnBhdGgoe1xyXG4gICAgICAgICAgICBkOiBwYXRoXHJcbiAgICAgICAgfSlcclxuICAgIF0pLmNyZWF0ZSgpO1xyXG4gICAgc3ZnLnNldEF0dHJpYnV0ZShcInZpZXdCb3hcIiwgXCIwIDAgNTAgNTBcIik7XHJcbiAgICByZXR1cm4gc3ZnXHJcbn1cclxudmFyIGNyZWFyQm90b25BY2Npb24gPSAoZGVwb3Q6IG15T3duLkRlcG90LCBhY3Rpb246IEVzdGFkb0FjY2lvbikgPT4ge1xyXG4gICAgbGV0IGFjY2lvblNpbkd1aW9uZXMgPSBhY3Rpb24uZWFjY2lvbi5yZXBsYWNlKCdfJywgJyAnKTtcclxuICAgIHZhciBzdmcgPSBjcmVhclNWRyhhY3Rpb24ucGF0aF9pY29ub19zdmcsIHsgY2xhc3M6IFwic3ZnLWFjY2lvbmVzXCIgfSlcclxuICAgIGlmIChhY3Rpb24uZGVzYWN0aXZhX2JvdG9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGh0bWwuc3Bhbih7IGNsYXNzOiBgc2luLWJvdG9uLWFjY2lvbmAgfSwgW2FjY2lvblNpbkd1aW9uZXMsIHN2ZyBhcyB1bmtub3duIGFzIEhUTUxFbGVtZW50XSkuY3JlYXRlKClcclxuICAgIH1cclxuICAgIGxldCBidXR0b24gPSBodG1sLmJ1dHRvbih7XHJcbiAgICAgICAgY2xhc3M6IGBib3Rvbi1hY2Npb24gYm90b24tYWNjaW9uLSR7YWN0aW9uLmVhY2Npb25fZGlyZWNjaW9ufWBcclxuICAgIH0sIFtcclxuICAgICAgICBgJHthY2Npb25TaW5HdWlvbmVzfWAsXHJcbiAgICAgICAgLy9AdHMtaWdub3JlIHN2ZyBlcyBodG1sZWxlbWVudFxyXG4gICAgICAgIGFjdGlvbi5wYXRoX2ljb25vX3N2ZyA/IHN2ZyA6IG51bGwsXHJcbiAgICBdKS5jcmVhdGUoKTtcclxuICAgIGJ1dHRvbi5vbmNsaWNrID0gKCkgPT4ge1xyXG4gICAgICAgIHZhciBhY3Rpb25GdW4gPSBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIGJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBteS5hamF4LmFjY2lvbl90YXJlYXNfdGVtX2VqZWN1dGFyKHtcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm86IGRlcG90LnJvdy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZWE6IGRlcG90LnJvdy50YXJlYSxcclxuICAgICAgICAgICAgICAgICAgICBlbmM6IGRlcG90LnJvdy5lbmMsXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZGljaW9uOiBhY3Rpb24uY29uZGljaW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjY2lvbjogYWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIHRhcmVhc1RlbVRhYmxlOiBkZXBvdC5kZWYubmFtZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgZ3JpZCA9IGRlcG90Lm1hbmFnZXI7XHJcbiAgICAgICAgICAgICAgICBncmlkLnJldHJpZXZlUm93QW5kUmVmcmVzaChkZXBvdCwgeyByZXRyaWV2ZVdpdGhCcm9hZFdoZXJlOiB0cnVlIH0pXHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLm5vbWJyZV93c2NyZWVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9UT0RPIGFjb21vZGFyIGVzdG8gZW4gYWxndW4gbW9tZW50b1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbXMgPSBkZXBvdC5yb3c7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVwID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm86IHBhcmFtcy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhOiBwYXJhbXMudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuYzogTnVtYmVyKHBhcmFtcy5lbmMpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGFicmlyRW5jdWVzdGFFblBlc3Rhbm5pYURlZGljYWRhKGxvY2F0aW9uLm9yaWdpbiArIGxvY2F0aW9uLnBhdGhuYW1lICsgbXkubWVudVNlcGFyYXRvciArIGB3PSR7YWN0aW9uLm5vbWJyZV93c2NyZWVufSZ1cD0ke0pTT04uc3RyaW5naWZ5KHVwKX0mYXV0b3Byb2NlZD10cnVlYClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydFByb21pc2UodW5leHBlY3RlZChlcnIpLm1lc3NhZ2UpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJcclxuICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgIC8vcmV0cmFzbyBsYSBoYWJpbGl0YWNpw7NuIHBvcnF1ZSBhIHZlY2VzIHRhcmRhIGVuIHJlZGlidWphcnNlIGxhIGJvdG9uZXJhIHkgcHVlZGUgdHJhZXIgcHJvYmxlbWFzIHNpIGRhbiBkb2JsZSBjbGljayBcclxuICAgICAgICAgICAgICAgIC8veWEgcXVlIGVqZWN1dGEgbnVldmFtZW50ZSB1bmEgYWNjacOzbiBxdWUgeWEgc2UgZWplY3V0w7MgKHkgdGVybWluw7MpIGFudGVzXHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IGJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlLCAzMDAwKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY29uZmlybVByb21pc2VPcHRzOiBEaWFsb2dPcHRpb25zID0ge31cclxuICAgICAgICBpZiAoYWN0aW9uLmNvbmZpcm1hKSB7XHJcbiAgICAgICAgICAgIGNvbmZpcm1Qcm9taXNlT3B0cy5hc2tGb3JOb1JlcGVhdCA9ICdubyB2b2x2ZXIgYSBtb3N0cmFyJzsgLy9tdWVzdHJhIG1lbnNhamUgcG9yIGRlZmF1bHQgcGVybyBhbmRhIGlndWFsXHJcbiAgICAgICAgICAgIHZhciBidXR0b25zRGVmID0gW1xyXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ3PDrScsIHZhbHVlOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnbm8nLCB2YWx1ZTogZmFsc2UgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIGNvbmZpcm1Qcm9taXNlKGBjb25maXJtYSBhY2Npw7NuIFwiJHthY2Npb25TaW5HdWlvbmVzfVwiP2AsIHsgLi4uY29uZmlybVByb21pc2VPcHRzLCBidXR0b25zRGVmIH0pLnRoZW4oYWN0aW9uRnVuKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhY3Rpb25GdW4oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYnV0dG9uXHJcbn1cclxuXHJcbnZhciBjcmVhckJvdG9uZXNBY2Npb25lcyA9IGFzeW5jIChvcHRzOiB7IGRlcG90OiBteU93bi5EZXBvdCwgZmllbGROYW1lOiBzdHJpbmcsIGRpcmVjY2lvbjogRGlyZWNjaW9uQWNjaW9uIH0pID0+IHtcclxuICAgIGxldCB7IGRlcG90LCBmaWVsZE5hbWUsIGRpcmVjY2lvbiB9ID0gb3B0cztcclxuICAgIGxldCB0ZCA9IGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV07XHJcbiAgICB0ZC5pbm5lckhUTUwgPSAnJztcclxuICAgIChkZXBvdC5yb3dDb250cm9scy5hY2Npb25lcy5nZXRUeXBlZFZhbHVlKCkgfHwgW10pXHJcbiAgICAgICAgLmZpbHRlcigoYWN0aW9uOiBFc3RhZG9BY2Npb24pID0+IGFjdGlvbi5lYWNjaW9uX2RpcmVjY2lvbiA9PSBkaXJlY2Npb24pXHJcbiAgICAgICAgLmZvckVhY2goKGFjdGlvbjogRXN0YWRvQWNjaW9uKSA9PiB0ZC5hcHBlbmRDaGlsZChjcmVhckJvdG9uQWNjaW9uKGRlcG90LCBhY3Rpb24pKSk7XHJcbn1cclxuXHJcbnZhciBjcmVhclN3aXRjaCA9IChvcHRzOiB7IHJvdW5kPzogYm9vbGVhbiwgZGlzYWJsZWQ/OiBib29sZWFuLCBjaGVja2VkPzogYm9vbGVhbiwgb25DbGlja0Z1bjogRnVuY3Rpb24sIG9uRXJyRnVuPzogRnVuY3Rpb24gfSkgPT4ge1xyXG4gICAgdmFyIGNoZWNrYm94ID0gaHRtbC5pbnB1dCh7IHR5cGU6ICdjaGVja2JveCcsIGNoZWNrZWQ6IG9wdHMuY2hlY2tlZCB9KS5jcmVhdGUoKTtcclxuICAgIGNoZWNrYm94Lm9uY2xpY2sgPSBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY2hlY2tib3guZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBhd2FpdCBvcHRzLm9uQ2xpY2tGdW4oKVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBhbGVydFByb21pc2UodW5leHBlY3RlZChlcnIpLm1lc3NhZ2UpXHJcbiAgICAgICAgICAgIHRocm93IGVyclxyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIGNoZWNrYm94LmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGh0bWwubGFiZWwoeyBjbGFzczogJ3N3aXRjaCcgfSwgW1xyXG4gICAgICAgIGNoZWNrYm94LFxyXG4gICAgICAgIGh0bWwuc3Bhbih7IGNsYXNzOiBgc2xpZGVyICR7b3B0cy5yb3VuZCA/ICdyb3VuZCcgOiAnJ31gIH0pLFxyXG4gICAgXSkuY3JlYXRlKCk7XHJcbn1cclxuXHJcbm15T3duLmNsaWVudFNpZGVzLmhhYmlsaXRhciA9IHtcclxuICAgIHByZXBhcmU6IChfZGVwb3QsIF9maWVsZE5hbWUpID0+IHsgfSxcclxuICAgIHVwZGF0ZTogKGRlcG90LCBmaWVsZE5hbWUpID0+IHtcclxuICAgICAgICB2YXIgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgIHRkLmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgdGQuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgICAgIGNyZWFyU3dpdGNoKHtcclxuICAgICAgICAgICAgICAgIHJvdW5kOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY2hlY2tlZDogZGVwb3Qucm93LmhhYmlsaXRhZGEsXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrRnVuOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbXkuYWpheC5lbmN1ZXN0YV9oYWJpbGl0YXJfZGVzaGFiaWxpdGFyKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBkZXBvdC5yb3cub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmM6IGRlcG90LnJvdy5lbmNcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZ3JpZCA9IGRlcG90Lm1hbmFnZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBncmlkLnJldHJpZXZlUm93QW5kUmVmcmVzaChkZXBvdCksIDMwMCk7Ly9wYXJhIHF1ZSBzZSB2ZWEgZWwgZWZlY3RvXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufTtcclxuXHJcbm15T3duLmNsaWVudFNpZGVzLmFjY2lvbmVzQXZhbmNlID0ge1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSkgPT4geyB9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSkgPT4ge1xyXG4gICAgICAgIGNyZWFyQm90b25lc0FjY2lvbmVzKHsgZGVwb3QsIGZpZWxkTmFtZSwgZGlyZWNjaW9uOiAnYXZhbmNlJyB9KTtcclxuICAgIH1cclxufTtcclxuXHJcbm15T3duLmNsaWVudFNpZGVzLmFjY2lvbmVzUmV0cm9jZXNvID0ge1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSkgPT4geyB9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSkgPT4ge1xyXG4gICAgICAgIGNyZWFyQm90b25lc0FjY2lvbmVzKHsgZGVwb3QsIGZpZWxkTmFtZSwgZGlyZWNjaW9uOiAncmV0cm9jZXNvJyB9KTtcclxuICAgIH1cclxufTtcclxuXHJcbm15T3duLmNsaWVudFNpZGVzLmFjY2lvbmVzQmxhbnF1ZW8gPSB7XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKSA9PiB7IH0sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKSA9PiB7XHJcbiAgICAgICAgY3JlYXJCb3RvbmVzQWNjaW9uZXMoeyBkZXBvdCwgZmllbGROYW1lLCBkaXJlY2Npb246ICdibGFucXVlbycgfSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5mdW5jdGlvblxyXG4gICAgYm90b25DbGllbnRTaWRlRW5HcmlsbGEob3B0czogeyBub21icmVCb3Rvbjogc3RyaW5nLCBsbGFtYWRhOiAoZGVwb3Q6IG15T3duLkRlcG90KSA9PiBQcm9taXNlPGFueT4gfSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBwcmVwYXJlOiBmdW5jdGlvbiAoZGVwb3Q6IG15T3duLkRlcG90LCBmaWVsZE5hbWU6IHN0cmluZykge1xyXG4gICAgICAgICAgICB2YXIgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgICAgICB2YXIgYm90b24gPSBodG1sLmJ1dHRvbihvcHRzLm5vbWJyZUJvdG9uKS5jcmVhdGUoKTtcclxuICAgICAgICAgICAgdGQuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoYm90b24pO1xyXG4gICAgICAgICAgICB2YXIgcmVzdGF1cmFyQm90b24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBib3Rvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYm90b24udGV4dENvbnRlbnQgPSBvcHRzLm5vbWJyZUJvdG9uO1xyXG4gICAgICAgICAgICAgICAgYm90b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGJvdG9uLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBib3Rvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBib3Rvbi50ZXh0Q29udGVudCA9ICdwcm9jZXNhbmRvLi4uJztcclxuICAgICAgICAgICAgICAgIG9wdHMubGxhbWFkYShkZXBvdCkudGhlbihhc3luYyBmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiAnb2snIGluIHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lm9rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JpZCA9IGRlcG90Lm1hbmFnZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBncmlkLnJldHJpZXZlUm93QW5kUmVmcmVzaChkZXBvdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVwb3QuZGV0YWlsQ29udHJvbHMuaW5jb25zaXN0ZW5jaWFzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwb3QuZGV0YWlsQ29udHJvbHMuaW5jb25zaXN0ZW5jaWFzLmZvcmNlRGlzcGxheURldGFpbEdyaWQoe30pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90b24udGV4dENvbnRlbnQgPSByZXN1bHQubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdG9uLnRpdGxlID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyM4RjgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHJlc3RhdXJhckJvdG9uLCAyNTAwKTtcclxuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSBleHBlY3RlZChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJvdG9uLnRleHRDb250ZW50ID0gJ2Vycm9yJztcclxuICAgICAgICAgICAgICAgICAgICBib3Rvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI0ZGOCc7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZW4gYWNjacOzbiBkZSBncmlsbGE6JywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShlcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9pZiAoKGRlcG90LnJvdy5jb25zaXN0aWRvPT1udWxsICAmJiBkZXBvdC5yb3cucmVhIT1udWxsKSB8fCBkZXBvdC5yb3cubW9kaWZpY2FkbyE9bnVsbCAmJiBkZXBvdC5yb3cuY29uc2lzdGlkbyE9bnVsbCAmJiBkZXBvdC5yb3cubW9kaWZpY2FkbyA+ZGVwb3Qucm93LmNvbnNpc3RpZG8pe1xyXG4gICAgICAgICAgICAvLyAgICBib3Rvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9JyM4Q0YnXHJcbiAgICAgICAgICAgIC8vfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5jb25zaXN0aXIgPSBib3RvbkNsaWVudFNpZGVFbkdyaWxsYSh7XHJcbiAgICBub21icmVCb3RvbjogJ2NvbnNpc3RpcicsXHJcbiAgICBsbGFtYWRhOiBmdW5jdGlvbiAoZGVwb3Q6IG15T3duLkRlcG90KSB7XHJcbiAgICAgICAgdmFyIGZpbHRyb1JlYSA9IGNvbnNpc3Rpcl9maWx0cm8oZGVwb3Qucm93LnRhcmVhLCBkZXBvdC5yb3dbJ3JlYSddLCBkZXBvdC5yb3cucmVhKVxyXG4gICAgICAgIHJldHVybiBmaWx0cm9SZWEgPyBteU93bi5hamF4LmNvbnNpc3Rpcl9lbmN1ZXN0YSh7XHJcbiAgICAgICAgICAgIG9wZXJhdGl2bzogZGVwb3Qucm93Lm9wZXJhdGl2byxcclxuICAgICAgICAgICAgaWRfY2FzbzogZGVwb3Qucm93LmVuY1xyXG4gICAgICAgIH0pIDogYWxlcnRQcm9taXNlKCdMYSBlbmN1ZXN0YSBkZWJlIHRlbmVyIGRhdG8gZW4gcmVhIHBhcmEgcG9kZXIgY29uc2lzdGlybGEuJyk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxubXlPd24ud1NjcmVlbnMucHJvYy5yZXN1bHQubW9zdHJhcl9lbmN1ZXN0YXNfYV9ibGFucXVlYXIgPSBmdW5jdGlvbiAocmVzdWx0LCBkaXZSZXN1bHQpIHtcclxuICAgIGlmIChyZXN1bHQucm93cy5sZW5ndGgpIHtcclxuICAgICAgICB2YXIgY3VycmVudFRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbFxyXG4gICAgICAgIHZhciBucm9DYXJnYSA9IDA7XHJcbiAgICAgICAgdmFyIGVuY3Vlc3Rhc0RpdjogbnVsbCB8IEhUTUxEaXZFbGVtZW50ID0gbnVsbDtcclxuICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoaHRtbC5oMignb3BlcmF0aXZvOiAnICsgcmVzdWx0Lm9wZXJhdGl2bykuY3JlYXRlKCkpO1xyXG4gICAgICAgIHJlc3VsdC5yb3dzLmZvckVhY2goKGVuY3Vlc3RhOmFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFRva2VuICE9IGVuY3Vlc3RhLmNhcmdhZG9fZG0pIHtcclxuICAgICAgICAgICAgICAgIG5yb0NhcmdhKys7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VG9rZW4gPSBlbmN1ZXN0YS5jYXJnYWRvX2RtO1xyXG4gICAgICAgICAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGh0bWwuaDQoJ2NhcmdhIE7CuiAnICsgbnJvQ2FyZ2EudG9TdHJpbmcoKSkuY3JlYXRlKCkpO1xyXG4gICAgICAgICAgICAgICAgZW5jdWVzdGFzRGl2ID0gaHRtbC5kaXYoeyBjbGFzczogJ2VuY3Vlc3Rhcy1hLWJsYW5xdWVhcicgfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAvL2xhcyBjb3BpbyBjb24gbGV0IHBhcmEgcXVlIHRvbWUgZWwgdmFsb3IgYWN0dWFsIHkgbm8gZWwgw7psdGltb1xyXG4gICAgICAgICAgICAgICAgbGV0IG1pVG9rZW4gPSBjdXJyZW50VG9rZW47XHJcbiAgICAgICAgICAgICAgICBsZXQgbWlOcm9DYXJnYSA9IG5yb0NhcmdhO1xyXG4gICAgICAgICAgICAgICAgdmFyIGJ1dHRvbiA9IGh0bWwuYnV0dG9uKHtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzczogYGJvdG9uLWJsYW5xdWVhci1kbSBib3Rvbi1hY2Npb25gXHJcbiAgICAgICAgICAgICAgICB9LCAnYmxhbnF1ZWFyIGNhcmdhICcgKyBucm9DYXJnYS50b1N0cmluZygpKS5jcmVhdGUoKTtcclxuICAgICAgICAgICAgICAgIGJ1dHRvbi5vbmNsaWNrID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtYWluRGl2ID0gaHRtbC5kaXYoKS5jcmVhdGUoKVxyXG4gICAgICAgICAgICAgICAgICAgIG1haW5EaXYuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KHt9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdih7IGNsYXNzOiAnZGFuZ2VyJyB9LCBbYEVzdMOhIHBvciBibGFucXVlYXIgbGEgY2FyZ2EgJHttaU5yb0NhcmdhfS4gTm8gc2UgcG9kcsOhIGRlc2NhcmdhciBlbCBkaXNwb3NpdGl2by5gXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSkuY3JlYXRlKClcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dEZvcnphciA9IGh0bWwuaW5wdXQoeyBjbGFzczogJ2lucHV0LWZvcnphcicgfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFpbkRpdi5hcHBlbmRDaGlsZChodG1sLmRpdihbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KFsnU2UgcHVlZGUgZm9yemFyIGVsIGJsYW5xdWVvICcsIGlucHV0Rm9yemFyXSlcclxuICAgICAgICAgICAgICAgICAgICBdKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvcnphciA9IGF3YWl0IGNvbmZpcm1Qcm9taXNlKG1haW5EaXYsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aENsb3NlQnV0dG9uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uc0RlZjogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbDogJ2ZvcnphciBibGFucXVlbycsIHZhbHVlOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsOiAnY2FuY2VsYXIgYmxhbnF1ZW8nLCB2YWx1ZTogZmFsc2UgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcnphcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRGb3J6YXIudmFsdWUgPT0gJ2ZvcnphcicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0QmxhbnF1ZW8gPSBhd2FpdCBteS5hamF4LmRtX2JsYW5xdWVhcih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogcmVzdWx0Lm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46IG1pVG9rZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZSZXN1bHQuaW5uZXJIVE1MID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0QmxhbnF1ZW8uZm9yRWFjaCgodHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdih7fSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuc3Bhbih7fSwgYCR7dHQucmVzdWx0X2JsYW5xdWVvfWApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkuY3JlYXRlKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydFByb21pc2UodW5leHBlY3RlZChlcnIpLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydFByb21pc2UoJ3NpIG5lY2VzaXRhIGJsYW5xdWVhciBlc2NyaWJhIGZvcnphci4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGVuY3Vlc3Rhc0Rpdik7XHJcbiAgICAgICAgICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbmN1ZXN0YXNEaXY/LmFwcGVuZENoaWxkKGh0bWwuZGl2KHt9LCBbXHJcbiAgICAgICAgICAgICAgICBodG1sLnNwYW4oYGVuY3Vlc3RhOiAke2VuY3Vlc3RhLmVuY30gYCksXHJcbiAgICAgICAgICAgICAgICBodG1sLnNwYW4oYHRhcmVhOiAgJHtlbmN1ZXN0YS50YXJlYX0gYCksXHJcbiAgICAgICAgICAgIF0pLmNyZWF0ZSgpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbn1cclxuXHJcbm15T3duLndTY3JlZW5zLnByb2MucmVzdWx0LmRvd25sb2FkX3NxbCA9IGZ1bmN0aW9uIChyZXN1bHQsIGRpdlJlc3VsdCkge1xyXG4gICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW3Jlc3VsdF0sIHsgdHlwZTogJ3RleHQvc3FsJyB9KSk7XHJcblxyXG4gICAgZGl2UmVzdWx0LmlubmVySFRNTCA9ICcnO1xyXG5cclxuICAgIGNvbnN0IGxpbmsgPSBodG1sLmEoJ0Rlc2NhcmdhciBhcmNoaXZvIFNRTCcpLmNyZWF0ZSgpXHJcbiAgICBsaW5rLmhyZWYgPSB1cmw7XHJcbiAgICBsaW5rLmRvd25sb2FkID0gJ21pZ3Jhcl9vcGVyYXRpdm8uc3FsJztcclxuICAgIGRpdlJlc3VsdC5hcHBlbmRDaGlsZChsaW5rKTtcclxufVxyXG5cclxuY29uc3QgcHJldmlzdWFsaXphckVuY3Vlc3RhID0gKFxyXG4gICAgcmVzdWx0VGVtOiBhbnksXHJcbiAgICBkaXZSZXN1bHQ6IEhUTUxEaXZFbGVtZW50LFxyXG4gICAgcGFyYW1zOiB7XHJcbiAgICAgICAgbm9tYnJlUHJvY2VkdXJlOiBzdHJpbmcsXHJcbiAgICAgICAgaWdub3JhSnNvbkVuY3Vlc3RhVmFjaW86IGJvb2xlYW5cclxuICAgICAgICBsYWJlbEFjdGlvbjogc3RyaW5nXHJcbiAgICB9XHJcbikgPT4ge1xyXG4gICAgbGV0IHsgY2Fzb1RlbSB9ID0gcmVzdWx0VGVtO1xyXG4gICAgaWYgKCFjYXNvVGVtLmpzb25fZW5jdWVzdGEpIHtcclxuICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoaHRtbC5wKHsgaWQ6ICdtZW5zYWplLW5vLWhheS1qc29uLWVuY3Vlc3RhJyB9LCBgbm8gc2UgZW5jb250csOzIGluZm9ybWFjaW9uIGNhcmdhZGEgZW4gbGEgZW5jdWVzdGEgJHtjYXNvVGVtLmVuY31gKS5jcmVhdGUoKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2Fzb1RlbS5qc29uX2VuY3Vlc3RhIHx8IHBhcmFtcy5pZ25vcmFKc29uRW5jdWVzdGFWYWNpbykge1xyXG4gICAgICAgIHZhciBlbmN1ZXN0YURpdiA9IGh0bWwuZGl2KHsgaWQ6ICdiYWNrdXAtZGl2JyB9KS5jcmVhdGUoKTtcclxuICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoZW5jdWVzdGFEaXYpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIG15LmFncmVnYXJfanNvbihlbmN1ZXN0YURpdiwgY2Fzb1RlbS5qc29uX2VuY3Vlc3RhKTtcclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGh0bWwucCh7IGlkOiAnbWVuc2FqZS1lcnJvci1qc29uLWVuY3Vlc3RhJyB9LCBgbm8gc2UgcHVkbyBhbCBwcmV2aXN1YWxpemFyIGxhIGVuY3Vlc3RhICR7Y2Fzb1RlbS5lbmN9IGNvcnJlY3RhbWVudGUuICR7dW5leHBlY3RlZChlcnIpLm1lc3NhZ2V9YCkuY3JlYXRlKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYnV0dG9uID0gaHRtbC5idXR0b24oe1xyXG4gICAgICAgICAgICBjbGFzczogYGJvdG9uLWJsYW5xdWVhci1lbmN1ZXN0YS1hY2Npb25gXHJcbiAgICAgICAgfSwgYCR7cGFyYW1zLmxhYmVsQWN0aW9ufSBlbmN1ZXN0YWApLmNyZWF0ZSgpO1xyXG4gICAgICAgIGJ1dHRvbi5vbmNsaWNrID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgbWFpbkRpdiA9IGh0bWwuZGl2KCkuY3JlYXRlKClcclxuICAgICAgICAgICAgbWFpbkRpdi5hcHBlbmRDaGlsZChcclxuICAgICAgICAgICAgICAgIGh0bWwuZGl2KHt9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoeyBjbGFzczogJ2RhbmdlcicgfSwgW2BFc3TDoSBwb3IgJHtwYXJhbXMubGFiZWxBY3Rpb259IGxhIGVuY3Vlc3RhICR7Y2Fzb1RlbS5lbmN9LiBTZSBwZXJkZXLDoW4gbG9zIGRhdG9zIGRlIGxhIG1pc21hLmBdKVxyXG4gICAgICAgICAgICAgICAgXSkuY3JlYXRlKClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdmFyIGlucHV0Rm9yemFyID0gaHRtbC5pbnB1dCh7IGNsYXNzOiAnaW5wdXQtZm9yemFyJyB9KS5jcmVhdGUoKTtcclxuICAgICAgICAgICAgbWFpbkRpdi5hcHBlbmRDaGlsZChodG1sLmRpdihbXHJcbiAgICAgICAgICAgICAgICBodG1sLmRpdihbYHBhcmEgJHtwYXJhbXMubGFiZWxBY3Rpb259IGVzY3JpYmEgZm9yemFyIGAsIGlucHV0Rm9yemFyXSlcclxuICAgICAgICAgICAgXSkuY3JlYXRlKCkpO1xyXG4gICAgICAgICAgICB2YXIgZm9yemFyID0gYXdhaXQgY29uZmlybVByb21pc2UobWFpbkRpdiwge1xyXG4gICAgICAgICAgICAgICAgd2l0aENsb3NlQnV0dG9uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlamVjdDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBidXR0b25zRGVmOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgeyBsYWJlbDogJ2ZvcnphcicsIHZhbHVlOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBsYWJlbDogJ2NhbmNlbGFyJywgdmFsdWU6IGZhbHNlIH1cclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChmb3J6YXIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dEZvcnphci52YWx1ZSA9PSAnZm9yemFyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB3YWl0R2lmID0gaHRtbC5pbWcoeyBzcmM6ICdpbWcvbG9hZGluZzE2LmdpZicgfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2FpdEdpZi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKHdhaXRHaWYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0QmxhbnF1ZW8gPSBhd2FpdCBteS5hamF4W3BhcmFtcy5ub21icmVQcm9jZWR1cmVdKGNhc29UZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXZSZXN1bHQuaW5uZXJIVE1MID0gcmVzdWx0QmxhbnF1ZW87XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGVydFByb21pc2UodW5leHBlY3RlZChlcnIpLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3YWl0R2lmLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxlcnRQcm9taXNlKGBzaSBuZWNlc2l0YSAke3BhcmFtcy5sYWJlbEFjdGlvbn0gZXNjcmliYSBmb3J6YXIuYClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcclxuICAgIH1cclxufVxyXG5cclxubXlPd24ud1NjcmVlbnMucHJvYy5yZXN1bHQubW9zdHJhcl9lbmN1ZXN0YV9hX2JsYW5xdWVhcl9jb250ZW5pZG8gPSBmdW5jdGlvbiAocmVzdWx0LCBkaXZSZXN1bHQpIHtcclxuICAgIHByZXZpc3VhbGl6YXJFbmN1ZXN0YShyZXN1bHQsIGRpdlJlc3VsdCwge1xyXG4gICAgICAgIG5vbWJyZVByb2NlZHVyZTogJ2VuY3Vlc3RhX2JsYW5xdWVhcicsXHJcbiAgICAgICAgaWdub3JhSnNvbkVuY3Vlc3RhVmFjaW86IGZhbHNlLFxyXG4gICAgICAgIGxhYmVsQWN0aW9uOiAnYmxhbnF1ZWFyJ1xyXG4gICAgfSlcclxufVxyXG5cclxubXlPd24ud1NjcmVlbnMucHJvYy5yZXN1bHQubW9zdHJhcl9lbmN1ZXN0YV9hX2JvcnJhciA9IGZ1bmN0aW9uIChyZXN1bHQsIGRpdlJlc3VsdCkge1xyXG4gICAgcHJldmlzdWFsaXphckVuY3Vlc3RhKHJlc3VsdCwgZGl2UmVzdWx0LCB7XHJcbiAgICAgICAgbm9tYnJlUHJvY2VkdXJlOiAnZW5jdWVzdGFfYm9ycmFyJyxcclxuICAgICAgICBpZ25vcmFKc29uRW5jdWVzdGFWYWNpbzogdHJ1ZSxcclxuICAgICAgICBsYWJlbEFjdGlvbjogJ2JvcnJhcidcclxuICAgIH0pXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFycmF5RmxhdDxUPihhcnJheXM6IFRbXVtdKTogVFtdIHtcclxuICAgIHJldHVybiAoW10gYXMgVFtdKS5jb25jYXQuYXBwbHkoW10sIGFycmF5cyk7XHJcbn1cclxuXHJcblxyXG4vKnNpbmNyb25pemFyIHkgY2FtYmlvIGRlIG1vZG8gTEVHQUNZICovXHJcbmFzeW5jIGZ1bmN0aW9uIHNpbmNyb25pemFyRGF0b3MocGVyc2lzdGVudGVzOiBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyB8IG51bGwsIGNhbWJpYU1vZG9ETTogYm9vbGVhbikge1xyXG4gICAgY29uc3QgZm9ybVJlbmRlcmVyID0gZ2V0Rm9ybVJlbmRlcmVyKCk7XHJcbiAgICBsZXQgbW9kb0RNOiBNb2RvRE0gPSBmb3JtUmVuZGVyZXIuZ2V0TW9kb0RNKCkgfHwgYXdhaXQgbXkuYWpheC5tb2RvX2RtX2RlZmVjdG9fb2J0ZW5lcih7fSk7XHJcbiAgICBmb3JtUmVuZGVyZXIuc2V0TW9kb0RNKG1vZG9ETSk7XHJcbiAgICBjb25zdCBpZHBlcl9sb2d1ZWFkb190YWJsZXQgPSBmb3JtUmVuZGVyZXIuZ2V0SWRwZXJMb2d1ZWFkbygpO1xyXG4gICAgdmFyIGRhdG9zID0gYXdhaXQgbXkuYWpheC5kbV9zaW5jcm9uaXphcih7IHBlcnNpc3RlbnRlcywgbW9kb19kbTogbW9kb0RNLCBjYW1iaWFfbW9kb19kbTogY2FtYmlhTW9kb0RNLCBpZHBlcl9sb2d1ZWFkb190YWJsZXQgfSk7XHJcbiAgICBhd2FpdCBmb3JtUmVuZGVyZXIucGVyc2lzdGlyRGF0b3MoeyAuLi5kYXRvcywgbW9kb0FsbWFjZW5hbWllbnRvOiAnbG9jYWwnIH0pO1xyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBhd2FpdCBteU93bi5hamF4Lm9wZXJhdGl2b19lc3RydWN0dXJhX2NvbXBsZXRhKHsgb3BlcmF0aXZvOiBkYXRvcy5vcGVyYXRpdm8sIGlkcGVyX2xvZ3VlYWRvX3RhYmxldCB9KTtcclxuICAgIGF3YWl0IGZvcm1SZW5kZXJlci5wZXJzaXN0aXJFc3RydWN0dXJhKGVzdHJ1Y3R1cmEpO1xyXG4gICAgbXkucmVtb3ZlTG9jYWxWYXIoQkFDS1VQUyk7XHJcbiAgICByZXR1cm4gZGF0b3M7XHJcbn1cclxuXHJcbmNvbnN0IG1vc3RyYXJJbmZvTG9jYWwgPSBhc3luYyAoZGl2QXZpc29TaW5jcm86IEhUTUxEaXZFbGVtZW50LCB0aXR1bG86IHN0cmluZywgbnJvU2luY3JvOiBudW1iZXIgfCBudWxsLCBtb3N0cmFyTGlua0hkcjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgZGF0b3MgPSBhd2FpdCBnZXRGb3JtUmVuZGVyZXIoKS5sZWVyRGF0b3MoKTtcclxuICAgIGNvbnN0IGVzdHJ1Y3R1cmEgPSBhd2FpdCBnZXRGb3JtUmVuZGVyZXIoKS5sZWVyRXN0cnVjdHVyYSgpO1xyXG4gICAgaWYgKGRhdG9zKSB7XHJcbiAgICAgICAgZGl2QXZpc29TaW5jcm8uYXBwZW5kKGh0bWwuZGl2KHsgaWQ6ICdhdmlzby1zaW5jcm8nIH0sIFtcclxuICAgICAgICAgICAgbnJvU2luY3JvID8gaHRtbC5wKFtcIk7Dum1lcm8gZGUgc2luY3Jvbml6YWNpw7NuOiBcIiwgaHRtbC5iKFwiXCIgKyBucm9TaW5jcm8udG9TdHJpbmcoKSldKSA6IG51bGwsXHJcbiAgICAgICAgICAgIGh0bWwuaDQodGl0dWxvKSxcclxuICAgICAgICAgICAgaHRtbC5wKFtodG1sTnVtZXJvKGxpa2VBcihkYXRvcy5jYXJnYXMpLmFycmF5KCkubGVuZ3RoKSwgJyBhcmVhczogJywgbGlrZUFyKGRhdG9zLmNhcmdhcykua2V5cygpLmpvaW4oJywgJyldKSxcclxuICAgICAgICAgICAgaHRtbC5wKFtodG1sTnVtZXJvKGxpa2VBcihkYXRvcy5yZXNwdWVzdGFzW2VzdHJ1Y3R1cmEudWFQcGFsXSkuYXJyYXkoKS5sZW5ndGgpLCAnICcgKyBlc3RydWN0dXJhLnVhUHBhbF0pLFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgbW9zdHJhckxpbmtIZHIgPyBodG1sLmEoeyBocmVmOiAnLi9jYW1wbycgfSwgW2h0bWwuYignSVIgQSBMQSBIT0pBIERFIFJVVEEnKV0pIDogbnVsbFxyXG4gICAgICAgIF0pLmNyZWF0ZSgpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZGl2QXZpc29TaW5jcm8uYXBwZW5kQ2hpbGQoaHRtbC5kaXYoeyBjbGFzczogJ2F2aXNvJyB9LCBbXHJcbiAgICAgICAgICAgIGh0bWwuaDQoJ1Npc3RlbWEgdmFjw61vJyksXHJcbiAgICAgICAgICAgIGh0bWwucCgnTm8gaGF5IGluZm9ybWFjacOzbiBkZSBmb3JtdWxhcmlvcycpLFxyXG4gICAgICAgIF0pLmNyZWF0ZSgpKTtcclxuICAgIH1cclxufVxyXG5cclxuY29uc3QgbW9zdHJhckluZm9Nb2RvID0gYXN5bmMgKG1haW5MYXlvdXQ6IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICBsZXQgbW9kb0RNOiBNb2RvRE0gPSBnZXRGb3JtUmVuZGVyZXIoKS5nZXRNb2RvRE0oKSB8fCBhd2FpdCBteS5hamF4Lm1vZG9fZG1fZGVmZWN0b19vYnRlbmVyKHt9KTtcclxuICAgIGdldEZvcm1SZW5kZXJlcigpLnNldE1vZG9ETShtb2RvRE0pO1xyXG4gICAgLy9AdHMtaWdub3JlIHNldGVvIHVuIGF0cmlidXRvXHJcbiAgICB2YXIgZGl2QXZpc29Nb2RvOiBIVE1MRGl2RWxlbWVudCA9IGh0bWwuZGl2KHsgY2xhc3M6IFwiaW5mby1tb2RvXCIsIFwibW9kby1kbVwiOiBtb2RvRE0gfSwgYG1vZG8gYWN0dWFsOiAke21vZG9ETX1gKS5jcmVhdGUoKVxyXG4gICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChkaXZBdmlzb01vZG8pXHJcbiAgICByZXR1cm4gbW9kb0RNO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjYW1iaWFyTW9kb0RNRW5Mb2NhbFN0b3JhZ2UobW9kb0FjdHVhbDogTW9kb0RNKSB7XHJcbiAgICBtb2RvQWN0dWFsID0gbW9kb0FjdHVhbCA9PSAncHJvZHVjJyA/ICdjYXBhJyA6ICdwcm9kdWMnO1xyXG4gICAgZ2V0Rm9ybVJlbmRlcmVyKCkuc2V0TW9kb0RNKG1vZG9BY3R1YWwpO1xyXG59XHJcblxyXG52YXIgcHJvY2VkZXJTaW5jcm9GdW4gPSBhc3luYyAoYnV0dG9uOiBIVE1MQnV0dG9uRWxlbWVudCwgZGl2QXZpc29TaW5jcm86IEhUTUxEaXZFbGVtZW50LCBjYW1iaWFNb2RvRE06IGJvb2xlYW4pID0+IHtcclxuICAgIGJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICBidXR0b24uY2xhc3NOYW1lID0gJ2Rvd25sb2FkLWRtLWJ1dHRvbic7XHJcbiAgICBkaXZBdmlzb1NpbmNyby5pbm5lckhUTUwgPSAnJztcclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcGVyc2lzdGVudGVzID0gYXdhaXQgZ2V0Rm9ybVJlbmRlcmVyKCkubGVlckRhdG9zKCk7XHJcbiAgICAgICAgY29uc3QgZGF0b3MgPSBhd2FpdCBzaW5jcm9uaXphckRhdG9zKHBlcnNpc3RlbnRlcywgY2FtYmlhTW9kb0RNKTtcclxuICAgICAgICBsZXQgbW9kb0RNQWN0dWFsOiBNb2RvRE0gPSBnZXRGb3JtUmVuZGVyZXIoKS5nZXRNb2RvRE0oKSB8fCBhd2FpdCBteS5hamF4Lm1vZG9fZG1fZGVmZWN0b19vYnRlbmVyKHt9KTtcclxuICAgICAgICBpZiAoY2FtYmlhTW9kb0RNKSB7XHJcbiAgICAgICAgICAgIGNhbWJpYXJNb2RvRE1FbkxvY2FsU3RvcmFnZShtb2RvRE1BY3R1YWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCBtb3N0cmFySW5mb0xvY2FsKGRpdkF2aXNvU2luY3JvLCAnZGF0b3MgcmVjaWJpZG9zJywgZGF0b3MubnVtX3NpbmNybywgdHJ1ZSk7XHJcbiAgICAgICAgKGF3YWl0IGNyZWFyU3RvcmVGb3JtdWxhcmlvKHt9KSkuZGlzcGF0Y2goZGlzcGF0Y2hlcnMuUkVTRVRfT1BDSU9ORVMoe30pKTtcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIGFsZXJ0UHJvbWlzZSh1bmV4cGVjdGVkKGVycikubWVzc2FnZSlcclxuICAgICAgICB0aHJvdyBlcnJcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgYnV0dG9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgYnV0dG9uLmNsYXNzTmFtZSA9ICdkb3dubG9hZC1kbS1idXR0b24tY29udCc7XHJcbiAgICB9XHJcbn1cclxubXlPd24ud1NjcmVlbnMuc2luY3Jvbml6YXJfZG0gPSBhc3luYyBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgbWFpbkxheW91dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpITtcclxuICAgIGNvbnN0IG1vZG9ETSA9IGF3YWl0IG1vc3RyYXJJbmZvTW9kbyhtYWluTGF5b3V0KTtcclxuICAgIHZhciBwcm9jZWRlckJ1dHRvbiA9IGh0bWwuYnV0dG9uKHsgY2xhc3M6ICdkb3dubG9hZC1kbS1idXR0b24tY29udCcgfSwgJ3NpbmNyb25pemFyJykuY3JlYXRlKCk7XHJcbiAgICBwcm9jZWRlckJ1dHRvbi5zZXRBdHRyaWJ1dGUoXCJtb2RvLWRtXCIsIG1vZG9ETSk7XHJcbiAgICB2YXIgZGl2QXZpc29TaW5jcm86IEhUTUxEaXZFbGVtZW50ID0gaHRtbC5kaXYoKS5jcmVhdGUoKTtcclxuICAgIGF3YWl0IG1vc3RyYXJJbmZvTG9jYWwobWFpbkxheW91dCBhcyBIVE1MRGl2RWxlbWVudCwgJ2luZm9ybWFjacOzbiBhIHRyYW5zbWl0aXInLCBudWxsLCBmYWxzZSlcclxuICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQocHJvY2VkZXJCdXR0b24pO1xyXG4gICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChkaXZBdmlzb1NpbmNybyk7XHJcbiAgICBwcm9jZWRlckJ1dHRvbi5vbmNsaWNrID0gKCkgPT4gcHJvY2VkZXJTaW5jcm9GdW4ocHJvY2VkZXJCdXR0b24sIGRpdkF2aXNvU2luY3JvLCBmYWxzZSlcclxufTtcclxuXHJcbm15T3duLndTY3JlZW5zLmNhbWJpYXJfbW9kb19kbSA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBtYWluTGF5b3V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JykhO1xyXG4gICAgY29uc3QgbW9kb0RNID0gYXdhaXQgbW9zdHJhckluZm9Nb2RvKG1haW5MYXlvdXQpO1xyXG4gICAgdmFyIHByb2NlZGVyQnV0dG9uID0gaHRtbC5idXR0b24oeyBjbGFzczogJ2NhbWJpYXItbW9kby1kbS1idXR0b24nIH0sIGBjYW1iaWFyIGEgbW9kbyAke21vZG9ETSA9PSAncHJvZHVjJyA/ICdjYXBhJyA6ICdwcm9kdWMnfSDih5JgKS5jcmVhdGUoKTtcclxuICAgIHZhciBkaXZBdmlzb1NpbmNybzogSFRNTERpdkVsZW1lbnQgPSBodG1sLmRpdigpLmNyZWF0ZSgpO1xyXG4gICAgYXdhaXQgbW9zdHJhckluZm9Mb2NhbChtYWluTGF5b3V0IGFzIEhUTUxEaXZFbGVtZW50LCBgaW5mb3JtYWNpw7NuIG1vZG8gXCIke21vZG9ETX1cIiBhIHRyYW5zbWl0aXJgLCBudWxsLCBmYWxzZSlcclxuICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQocHJvY2VkZXJCdXR0b24pO1xyXG4gICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChkaXZBdmlzb1NpbmNybyk7XHJcbiAgICBwcm9jZWRlckJ1dHRvbi5vbmNsaWNrID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIHZhciBtYWluRGl2ID0gaHRtbC5kaXYoKS5jcmVhdGUoKVxyXG4gICAgICAgIG1haW5EaXYuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgICAgIGh0bWwuZGl2KHt9LCBbXHJcbiAgICAgICAgICAgICAgICBodG1sLmRpdih7fSwgW2BDb25maXJtYSBjYW1iaW8gZGUgbW9kbyBcIiR7bW9kb0RNfVwiIGEgJHttb2RvRE0gPT0gJ3Byb2R1YycgPyAnXCJjYXBhXCInIDogJ1wicHJvZHVjXCInfS5gXSlcclxuICAgICAgICAgICAgXSkuY3JlYXRlKClcclxuICAgICAgICApO1xyXG4gICAgICAgIHZhciBpbnB1dENhbWJpYXJNb2RvID0gaHRtbC5pbnB1dCh7IGNsYXNzOiAnaW5wdXQtY2FtYmlhci1tb2RvJyB9KS5jcmVhdGUoKTtcclxuICAgICAgICBtYWluRGl2LmFwcGVuZENoaWxkKGh0bWwuZGl2KFtcclxuICAgICAgICAgICAgaHRtbC5kaXYoWydQb3IgZmF2b3IgaW5ncmVzZSBsYSBjb250cmFzZcOxYSAnLCBpbnB1dENhbWJpYXJNb2RvXSlcclxuICAgICAgICBdKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgdmFyIGNhbWJpYXJNb2RvVmFsdWUgPSBhd2FpdCBjb25maXJtUHJvbWlzZShtYWluRGl2LCB7XHJcbiAgICAgICAgICAgIHdpdGhDbG9zZUJ1dHRvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlamVjdDogZmFsc2UsXHJcbiAgICAgICAgICAgIGJ1dHRvbnNEZWY6IFtcclxuICAgICAgICAgICAgICAgIHsgbGFiZWw6IGBjYW1iaWFyYCwgdmFsdWU6IHRydWUgfSxcclxuICAgICAgICAgICAgICAgIHsgbGFiZWw6IGBjYW5jZWxhcmAsIHZhbHVlOiBmYWxzZSB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoY2FtYmlhck1vZG9WYWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAoaW5wdXRDYW1iaWFyTW9kby52YWx1ZSA9PSAnMTIzNCcpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvY2VkZXJCdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHByb2NlZGVyU2luY3JvRnVuKHByb2NlZGVyQnV0dG9uLCBkaXZBdmlzb1NpbmNybywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFpbkxheW91dC5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICBtYWluTGF5b3V0LmFwcGVuZENoaWxkKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdihgTU9ETyAke2dldEZvcm1SZW5kZXJlcigpLmdldE1vZG9ETSgpfSBBQ1RJVkFET2ApLmNyZWF0ZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxlcnRQcm9taXNlKHVuZXhwZWN0ZWQoZXJyKS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvY2VkZXJCdXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydFByb21pc2UoJ2NvbnRyYXNlw7FhIGluY29ycmVjdGEuJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbi8qIEZJTiBzaW5jcm9uaXphciB5IGNhbWJpbyBkZSBtb2RvIExFR0FDWSAqL1xyXG4iXX0=
|
|
701
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaWVudC9jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUFBLDJDQUFrQztJQUNsQywyQ0FBa0Q7SUFDbEQsbUVBQWlGO0lBUWpGLGtDQUFtQztJQUNuQyxtRUFBd0U7SUFDeEUseURBQXlFO0lBQ3pFLDZEQUE0RDtJQUM1RCxxRUFBMEU7SUFHMUUsa0JBQWtCO0lBRWxCLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQztJQUM3QixJQUFJLGlCQUFpQixHQUFrQixJQUFJLENBQUM7SUFFckMsTUFBTSxlQUFlLEdBQUcsQ0FBTyxNQUFnQyxFQUF1QixFQUFFLGtEQUMzRixPQUFBLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQSxHQUFBLENBQUM7SUFEdkUsUUFBQSxlQUFlLG1CQUN3RDtJQUdwRixLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQVMsRUFBRTtRQUNyQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDZixJQUFJLENBQUM7WUFDRCxpQkFBaUIsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ1gsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLENBQUM7UUFDRCxNQUFNLFlBQVksR0FBRyxJQUFBLDRDQUE4QixFQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELEtBQUssQ0FBQyxRQUFRLENBQUMsY0FBYyxHQUFHO1lBQzVCLFVBQVUsRUFBRTtnQkFDUixFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUs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QUFNLEVBQUUsS0FBSztvQkFDYixVQUFVLEVBQUU7d0JBQ1IsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7d0JBQ2pDLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO3FCQUN0QztpQkFDSixDQUFDLENBQUM7Z0JBQ0gsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO29CQUNuQixJQUFJLGdCQUFnQixDQUFDLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQzt3QkFDbkMsSUFBSSxDQUFDOzRCQUNELGNBQWMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDOzRCQUMvQixNQUFNLGlCQUFpQixDQUFDLGNBQWMsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7NEJBQzlELFVBQVUsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDOzRCQUMxQixVQUFVLENBQUMsV0FBVyxDQUNsQixpQkFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUEsK0JBQWUsR0FBRSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FDdEUsQ0FBQTt3QkFDTCxDQUFDO3dCQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7NEJBQ1gsWUFBWSxDQUFDLElBQUEsdUJBQVUsRUFBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDMUMsQ0FBQztnQ0FBUyxDQUFDOzRCQUNQLGNBQWMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO3dCQUNwQyxDQUFDO3dCQUFBLENBQUM7b0JBQ04sQ0FBQzt5QkFBTSxDQUFDO3dCQUNKLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO29CQUMxQyxDQUFDO2dCQUNMLENBQUM7WUFDTCxDQUFDLENBQUEsQ0FBQTtRQUNMLENBQUM7S0FBQSxDQUFDOztBQUVGLDZDQUE2QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGh0bWwgfSBmcm9tIFwianMtdG8taHRtbFwiO1xyXG5pbXBvcnQgeyBleHBlY3RlZCwgdW5leHBlY3RlZCB9IGZyb20gXCJjYXN0LWVycm9yXCI7XHJcbmltcG9ydCB7IGRpc3BhdGNoZXJzLCBjcmVhclN0b3JlRm9ybXVsYXJpbyB9IGZyb20gXCIuLi91bmxvZ2dlZC9yZWR1eC1mb3JtdWxhcmlvXCI7XHJcbmltcG9ydCB7XHJcbiAgICBDYXNvU3RhdGUsXHJcbiAgICBJZEZvcm11bGFyaW8sIERhdG9zQnlQYXNzUGVyc2lzdGlibGVzLCBJZEVuYywgSWRPcGVyYXRpdm8sIElkVGFyZWEsIEVzdGFkb0FjY2lvbiwgRGlyZWNjaW9uQWNjaW9uLFxyXG4gICAgQ2FtcG9Qa1JhaXosIE1vZG9ETSxcclxuICAgIEVzdHJ1Y3R1cmEsXHJcbiAgICBGb3JQa1JhaXpcclxufSBmcm9tIFwiLi4vdW5sb2dnZWQvdGlwb3NcIjtcclxuaW1wb3J0IGxpa2VBciA9IHJlcXVpcmUoXCJsaWtlLWFyXCIpO1xyXG5pbXBvcnQgeyBCQUNLVVBTLCBjYXJnYXJFc3RydWN0dXJhIH0gZnJvbSBcIi4uL3VubG9nZ2VkL2FicmlyLWZvcm11bGFyaW9cIlxyXG5pbXBvcnQgeyBjcmVhdGVMb2NhbFN0b3JhZ2VGb3JtUmVuZGVyZXIgfSBmcm9tIFwiLi4vdW5sb2dnZWQvcmVuZGVyLWluaXRcIjtcclxuaW1wb3J0IHsgZ2V0Rm9ybVJlbmRlcmVyIH0gZnJvbSBcIi4uL3VubG9nZ2VkL3JlbmRlci1jb25maWdcIjtcclxuaW1wb3J0IHsgZGVzcGxlZ2FyRm9ybXVsYXJpb0FjdHVhbCB9IGZyb20gJy4uL3VubG9nZ2VkL3JlbmRlci1mb3JtdWxhcmlvJztcclxuaW1wb3J0IHsgaGF5RGF0b3NCeVBhc3NBbG1hY2VuYWRvcyB9IGZyb20gXCIuLi91bmxvZ2dlZC9ieXBhc3MtZm9ybXVsYXJpb1wiO1xyXG5cclxuLy9UT0RPIEdFTkVSQUxJWkFSXHJcblxyXG5jb25zdCBUQVJFQV9ERUZBVUxUID0gJ2VuY3UnO1xyXG52YXIgT1BFUkFUSVZPX0RFRkFVTFQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuZXhwb3J0IGNvbnN0IHRyYWVyRXN0cnVjdHVyYSA9IGFzeW5jIChwYXJhbXM6IHtvcGVyYXRpdm86SWRPcGVyYXRpdm8gfSk6IFByb21pc2U8RXN0cnVjdHVyYT4gPT5cclxuICAgIGF3YWl0IG15T3duLmFqYXgub3BlcmF0aXZvX2VzdHJ1Y3R1cmFfY29tcGxldGEoeyBvcGVyYXRpdm86IHBhcmFtcy5vcGVyYXRpdm8gfSk7XHJcblxyXG5cclxubXlPd24uYXV0b1NldHVwRnVuY3Rpb25zLnB1c2goYXN5bmMgKCkgPT4ge1xyXG4gICAgdmFyIG15ID0gbXlPd247XHJcbiAgICB0cnkge1xyXG4gICAgICAgIE9QRVJBVElWT19ERUZBVUxUID0gYXdhaXQgbXkuYWpheC5vcGVyYXRpdm9fZ2V0KHt9KTtcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIE9QRVJBVElWT19ERUZBVUxUID0gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IGZvcm1SZW5kZXJlciA9IGNyZWF0ZUxvY2FsU3RvcmFnZUZvcm1SZW5kZXJlcih7fSk7XHJcbiAgICBteU93bi53U2NyZWVucy5hYnJpcl9lbmN1ZXN0YSA9IHtcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIGRlZmF1bHRWYWx1ZTogT1BFUkFUSVZPX0RFRkFVTFQsIHJlZmVyZW5jZXM6ICdvcGVyYXRpdm9zJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcsIGRlZmF1bHRWYWx1ZTogVEFSRUFfREVGQVVMVCwgcmVmZXJlbmNlczogJ3RhcmVhcycgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICdpbnRlZ2VyJywgZGVmYXVsdFZhbHVlOiAxMzAwMzEgfVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgYXV0b3Byb2NlZDogdHJ1ZSxcclxuICAgICAgICBtYWluQWN0aW9uOiBhc3luYyAocGFyYW1zKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIGFudGVzOiBhYnJpckRpcmVjdG9cclxuICAgICAgICAgICAgdmFyIHsgb3BlcmF0aXZvLCBlbmMsIHRhcmVhIH0gPSBwYXJhbXM7XHJcbiAgICAgICAgICAgIGZvcm1SZW5kZXJlci51cGRhdGVDb25maWcoe1xyXG4gICAgICAgICAgICAgICAgbGVlckRhdG9zOiBhc3luYyBmdW5jdGlvbiBsZWVyRGF0b3NFbkJhc2VEZURhdG9zKCk6IFByb21pc2U8RGF0b3NCeVBhc3NQZXJzaXN0aWJsZXM+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgbXkuYWpheC5kbV9mb3Jwa3JhaXpfY2FyZ2FyKHsgb3BlcmF0aXZvLCBwa19yYWl6X3ZhbHVlOiBlbmMsIHRhcmVhIH0pIGFzIERhdG9zQnlQYXNzUGVyc2lzdGlibGVzO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHBlcnNpc3RpckRhdG9zOiBhc3luYyBmdW5jdGlvbiBwZXJzaXN0aXJEYXRvc0VuQmFzZURlRGF0b3MocGVyc2lzdGVudGVzOiBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwZXJzaXN0ZW50ZXMuc29sb0xlY3R1cmEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXN0w6EgaW50ZW50YW5kbyBtb2RpZmljYXIgdW5hIGVuY3Vlc3RhIGFiaWVydGEgY29tbyBzb2xvIGxlY3R1cmEsIG5vIHNlIGd1YXJkYXJvbiBsb3MgY2FtYmlvc1wiKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBteS5hamF4LmRtX2ZvcnBrcmFpel9kZXNjYXJnYXIoeyBvcGVyYXRpdm8sIHBlcnNpc3RlbnRlcyB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHZhciBlc3RydWN0dXJhID0gYXdhaXQgZm9ybVJlbmRlcmVyLmxlZXJFc3RydWN0dXJhKCk7XHJcbiAgICAgICAgICAgIHZhciBjYXJnYSA9IGF3YWl0IGZvcm1SZW5kZXJlci5sZWVyRGF0b3MoKTtcclxuICAgICAgICAgICAgaWYgKCFlc3RydWN0dXJhIHx8ICFlc3RydWN0dXJhLnNlbWFuYXMgfHwgKGVzdHJ1Y3R1cmEudGltZXN0YW1wID8/IDApIDwgY2FyZ2E/LnRpbWVzdGFtcEVzdHJ1Y3R1cmEhIHx8IGVzdHJ1Y3R1cmEub3BlcmF0aXZvICE9IG9wZXJhdGl2byB8fCBteS5jb25maWcuY29uZmlnLmRldmVsKSB7XHJcbiAgICAgICAgICAgICAgICBlc3RydWN0dXJhID0gYXdhaXQgdHJhZXJFc3RydWN0dXJhKHsgb3BlcmF0aXZvIH0pXHJcbiAgICAgICAgICAgICAgICBhd2FpdCBmb3JtUmVuZGVyZXIucGVyc2lzdGlyRXN0cnVjdHVyYShlc3RydWN0dXJhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgICAgICAgLy92YXIgc3RhdGU6IENhc29TdGF0ZSA9IHt9XHJcbiAgICAgICAgICAgIC8vaW5pY2lhbGl6YXJTdGF0ZShzdGF0ZSk7XHJcbiAgICAgICAgICAgIHZhciBmb3JQa1JhaXogPSB7IGZvcm11bGFyaW86IGNhcmdhLmluZm9ybWFjaW9uSGRyW2VuYyBhcyBJZEVuY10udGFyZWEubWFpbl9mb3JtLCBbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXTogZW5jIH07XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNhcmdhPy5yZXNwdWVzdGFzW2VzdHJ1Y3R1cmEudWFQcGFsXVtmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsIGFzIENhbXBvUGtSYWl6XV0pIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gc2UgZW5jdWVudHJhIGVsL2xhICR7ZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsfSAke2ZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwoZm9ybVJlbmRlcmVyLCB7IGZvclBrUmFpejpmb3JQa1JhaXogYXMgRm9yUGtSYWl6IH0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBteU93bi53U2NyZWVucy5jb25zaXN0aXJfZW5jdWVzdGEgPSB7XHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCBkZWZhdWx0VmFsdWU6IE9QRVJBVElWT19ERUZBVUxULCByZWZlcmVuY2VzOiAnb3BlcmF0aXZvcycgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAnaW50ZWdlcicgfVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgYXV0b3Byb2NlZDogdHJ1ZSxcclxuICAgICAgICBtYWluQWN0aW9uOiBhc3luYyAocGFyYW1zKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh3aW5kb3cub3BlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWFpblRvcEJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluLXRvcC1iYXInKTtcclxuICAgICAgICAgICAgICAgIGlmIChtYWluVG9wQmFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFpblRvcEJhci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB7IG9wZXJhdGl2bywgdGFyZWEsIGVuYyB9ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgbXlPd24uYWpheC5jb25zaXN0aXJfZW5jdWVzdGEoe1xyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBvcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICBpZF9jYXNvOiBlbmNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQub2spIHtcclxuICAgICAgICAgICAgICAgIHZhciBmaXhlZEZpZWxkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZml4ZWRGaWVsZHMucHVzaCh7IGZpZWxkTmFtZTogJ29wZXJhdGl2bycsIHZhbHVlOiBvcGVyYXRpdm8gfSk7XHJcbiAgICAgICAgICAgICAgICBmaXhlZEZpZWxkcy5wdXNoKHsgZmllbGROYW1lOiAndml2aWVuZGEnLCB2YWx1ZTogZW5jIH0pO1xyXG4gICAgICAgICAgICAgICAgdmFyIG1haW5MYXlvdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKSE7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGl2R3JpbGxhID0gaHRtbC5kaXYoeyBpZDogJ2luY29uc2lzdGVuY2lhcycgfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBtYWluTGF5b3V0Lmluc2VydEJlZm9yZShkaXZHcmlsbGEsIG1haW5MYXlvdXQuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGl2Qm90b25lcyA9IGh0bWwuZGl2KHsgaWQ6ICdib3RvbmVzLXBvc3QtY29uc2lzdGlyJyB9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXJCb3RvbkNlcnJhckVuY3Vlc3RhKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgY2VycmFyIGVuY3Vlc3RhYFxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXJCb3RvblZlckFicmlyRW5jdWVzdGEoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuYyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYHZvbHZlciBhIGVuY3Vlc3RhICR7ZW5jfWBcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICBdKS5jcmVhdGUoKVxyXG4gICAgICAgICAgICAgICAgbWFpbkxheW91dC5pbnNlcnRCZWZvcmUoZGl2Qm90b25lcywgbWFpbkxheW91dC5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgIG15LnRhYmxlR3JpZChcImluY29uc2lzdGVuY2lhc19jdW1wbGVuX2NvbmRpY2lvblwiLCBkaXZHcmlsbGEsIHsgdGFibGVEZWY6IHt9LCBmaXhlZEZpZWxkczogZml4ZWRGaWVsZHMgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzdWx0Lm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuXHJcblxyXG4vL3F1aXRhIGJvb3RzdHJhcCBkZWwgaGVhZCBwYXJhIHF1ZSBubyByb21wYSBsb3MgZXN0aWxvcyBkZSBCRVBsdXMgKHNvbG8gc2UgdXNhIGJvb3RzdHJhcCBlbiBlbCBmb3JtKVxyXG52YXIgbGlua05vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaHJlZj1cImNzcy9ib290c3RyYXAubWluLmNzc1wiXScpO1xyXG5saW5rTm9kZVswXT8ucGFyZW50Tm9kZT8ucmVtb3ZlQ2hpbGQobGlua05vZGVbMF0pO1xyXG5cclxuZnVuY3Rpb24gY29uc2lzdGlyX2ZpbHRybyh0YXJlYTogc3RyaW5nLCByZWFfdGVtOiBudW1iZXIgfCBudWxsLCByZWE6IG51bWJlciB8IG51bGwpOiBudW1iZXIgfCBudWxsIHtcclxuICAgIHJldHVybiB0YXJlYSA/IHJlYV90ZW0gOiByZWE7XHJcbn07XHJcblxyXG52YXIgdGFyZWFzOiBhbnkgPSBudWxsO1xyXG5cclxuZnVuY3Rpb24gaHRtbE51bWVybyhudW06IG51bWJlcikge1xyXG4gICAgcmV0dXJuIGh0bWwuc3Bhbih7IGNsYXNzOiAnbnVtZXJvJyB9LCAnJyArIChudW0gPz8gJycpKVxyXG59XHJcblxyXG52YXIgY3JlYXJCb3RvbkNlcnJhckVuY3Vlc3RhID0gKGxhYmVsOiBzdHJpbmcpID0+IHtcclxuICAgIGxldCBwYXRoID0gXCJNMyAzdjE4aDE4VjNIM3ptMTQgMTIuNTlMMTUuNTkgMTcgMTIgMTMuNDEgOC40MSAxNyA3IDE1LjU5IDEwLjU5IDEyIDcgOC40MSA4LjQxIDcgMTIgMTAuNTkgMTUuNTkgNyAxNyA4LjQxIDEzLjQxIDEyIDE3IDE1LjU5elwiO1xyXG4gICAgdmFyIHN2ZyA9IGh0bWwuc3ZnKHsgY2xhc3M6IFwic3ZnLWNlcnJhci1lbmN1ZXN0YVwiIH0sIFtcclxuICAgICAgICBodG1sLnBhdGgoe1xyXG4gICAgICAgICAgICBkOiBwYXRoXHJcbiAgICAgICAgfSlcclxuICAgIF0pLmNyZWF0ZSgpO1xyXG4gICAgc3ZnLnNldEF0dHJpYnV0ZShcInZpZXdCb3hcIiwgXCIwIDAgMjYgMjZcIik7XHJcbiAgICAvL0B0cy1pZ25vcmUgc3ZnIHB1ZWRlIHNlciBoaWpvIGRlIHVuIGJvdG9uXHJcbiAgICBsZXQgdmVyID0gaHRtbC5idXR0b24oeyBpZDogJ2JvdG9uLWNlcnJhci1lbmN1ZXN0YScgfSwgW3N2ZywgbGFiZWxdKS5jcmVhdGUoKTtcclxuICAgIHZlci5vbmNsaWNrID0gKCkgPT4gY2xvc2UoKTtcclxuICAgIHJldHVybiB2ZXJcclxufVxyXG5cclxuY29uc3QgYWJyaXJFbmN1ZXN0YUVuUGVzdGFubmlhRGVkaWNhZGEgPSAodXJsOiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IEFCUklSX1RBQiA9IFwiX2FicmlyXCI7XHJcbiAgICB3aW5kb3cub3Blbih1cmwsIEFCUklSX1RBQik7XHJcbn1cclxuXHJcbnZhciBjcmVhckJvdG9uVmVyQWJyaXJFbmN1ZXN0YSA9IChvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogSWRUYXJlYSwgZW5jdWVzdGE6IG51bWJlciwgbGFiZWw6IHN0cmluZykgPT4ge1xyXG4gICAgdmFyIHVwID0ge1xyXG4gICAgICAgIG9wZXJhdGl2bzogb3BlcmF0aXZvLFxyXG4gICAgICAgIHRhcmVhOiB0YXJlYSxcclxuICAgICAgICBlbmM6IGVuY3Vlc3RhXHJcbiAgICB9XHJcbiAgICBsZXQgdmVyID0gaHRtbC5idXR0b24oeyBpZDogJ2JvdG9uLXZvbHZlci1hLWVuY3Vlc3RhJyB9LCBsYWJlbCkuY3JlYXRlKCk7XHJcbiAgICB2ZXIub25jbGljayA9ICgpID0+IGFicmlyRW5jdWVzdGFFblBlc3Rhbm5pYURlZGljYWRhKGxvY2F0aW9uLm9yaWdpbiArIGxvY2F0aW9uLnBhdGhuYW1lICsgbXkubWVudVNlcGFyYXRvciArIGB3PWFicmlyX2VuY3Vlc3RhJnVwPSR7SlNPTi5zdHJpbmdpZnkodXApfSZhdXRvcHJvY2VkPXRydWVgKVxyXG4gICAgcmV0dXJuIHZlclxyXG59XHJcblxyXG52YXIgY3JlYXJCb3RvbmVzVmVyQWJyaXJUYXJlYXMgPSBhc3luYyAoZGVwb3Q6IG15T3duLkRlcG90LCBmaWVsZE5hbWU6IHN0cmluZywgX2xhYmVsOiAnYWJyaXInIHwgJ3ZlcicpID0+IHtcclxuICAgIHRhcmVhcyA9IHRhcmVhcyA/IHRhcmVhcyA6IChhd2FpdCBteU93bi5hamF4LnRhYmxlX2RhdGEoeyB0YWJsZTogYHRhcmVhc2AsIGZpeGVkRmllbGRzOiBbXSB9KSk7XHJcbiAgICB2YXIgbWlzVGFyZWFzID0gdGFyZWFzLmZpbHRlcigodGFyZWE6YW55KSA9PlxyXG4gICAgICAgIC8vQHRzLWlnbm9yZSBkZWYgZXhpc3RlIGVuIG1hbmFnZXIgeSBtdWVzdHJhQWJyaXJFblRvZGFzTGFzVGFyZWFzIHRhbWJpZW4gKGVuIGVzYSBncmlsbGEpXHJcbiAgICAgICAgISF0YXJlYS5tYWluX2Zvcm0gJiYgdGFyZWEub3BlcmF0aXZvID09IGRlcG90LnJvdy5vcGVyYXRpdm8gJiYgKGRlcG90Lm1hbmFnZXIuZGVmLm11ZXN0cmFBYnJpckVuVG9kYXNMYXNUYXJlYXMgPyB0cnVlIDogZGVwb3Qucm93LnRhcmVhID09IHRhcmVhLnRhcmVhKVxyXG4gICAgKTtcclxuICAgIGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV0uaW5uZXJIVE1MID0gJyc7XHJcbiAgICBtaXNUYXJlYXMuZm9yRWFjaCgodGFyZWE6IHsgdGFyZWE6IHN0cmluZywgbm9tYnJlOiBzdHJpbmcsIG1haW5fZm9ybTogSWRGb3JtdWxhcmlvIH0pID0+IHtcclxuICAgICAgICBsZXQgYnV0dG9uTGFiZWwgPSBgJHt0YXJlYS50YXJlYX1gO1xyXG4gICAgICAgIGxldCB2ZXIgPSBjcmVhckJvdG9uVmVyQWJyaXJFbmN1ZXN0YShcclxuICAgICAgICAgICAgZGVwb3Qucm93Lm9wZXJhdGl2byBhcyBJZE9wZXJhdGl2byxcclxuICAgICAgICAgICAgdGFyZWEudGFyZWEgYXMgSWRUYXJlYSxcclxuICAgICAgICAgICAgTnVtYmVyKGRlcG90LnJvdy5lbmMpLFxyXG4gICAgICAgICAgICBidXR0b25MYWJlbFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdmVyLnN0eWxlID0gJ21hcmdpbjowcHggMnB4Oyc7XHJcbiAgICAgICAgZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXS5hcHBlbmRDaGlsZCh2ZXIpO1xyXG4gICAgfSlcclxufVxyXG5cclxudmFyIGdldEFicmlyT3ZlciA9IChfZGVwb3Q6IG15T3duLkRlcG90LCBfZmllbGROYW1lOiBzdHJpbmcpOiAnYWJyaXInID0+ICdhYnJpcidcclxuLy9cclxuLyooZGVwb3Qucm93LmNhcmdhZG9fZG0gfHwgIWRlcG90LnJvd1snZXN0YWRvc19fcGVybWl0ZV9lZGl0YXJfZW5jdWVzdGEnXSAmJiBkZXBvdC5yb3cuYXNpZ25hZG8gIT0gbXkuY29uZmlnLmlkcGVyKT9cclxuICAgICd2ZXInOidhYnJpcidcclxuKi9cclxuXHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5hYnJpciA9IHtcclxuICAgIHByZXBhcmU6IChfZGVwb3QsIF9maWVsZE5hbWUpID0+IHsgfSxcclxuICAgIHVwZGF0ZTogKGRlcG90LCBmaWVsZE5hbWUpID0+IHtcclxuICAgICAgICB2YXIgbGFiZWw6ICd2ZXInIHwgJ2FicmlyJyA9IGdldEFicmlyT3ZlcihkZXBvdCwgZmllbGROYW1lKTtcclxuICAgICAgICBjcmVhckJvdG9uZXNWZXJBYnJpclRhcmVhcyhkZXBvdCwgZmllbGROYW1lLCBsYWJlbCk7IC8vbm8gZXNwZXJvIHByb21lc2EgcG9ycXVlIG5vIGVzIG5lY2VzYXJpb1xyXG4gICAgfVxyXG59O1xyXG5cclxubXlPd24uY2xpZW50U2lkZXMuYWJyaXJSZWNlcGNpb24gPSB7XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKSA9PiB7IH0sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKSA9PiB7XHJcbiAgICAgICAgdmFyIGxhYmVsOiAndmVyJyB8ICdhYnJpcicgPSBnZXRBYnJpck92ZXIoZGVwb3QsIGZpZWxkTmFtZSk7XHJcbiAgICAgICAgY3JlYXJCb3RvbmVzVmVyQWJyaXJUYXJlYXMoZGVwb3QsIGZpZWxkTmFtZSwgbGFiZWwpOyAvL25vIGVzcGVybyBwcm9tZXNhIHBvcnF1ZSBubyBlcyBuZWNlc2FyaW9cclxuICAgIH1cclxufTtcclxuXHJcbm15T3duLmNsaWVudFNpZGVzLnZlckljb25vU3ZnID0ge1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSkgPT4geyB9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSkgPT4ge1xyXG4gICAgICAgIGxldCB0ZCA9IGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV07XHJcbiAgICAgICAgdGQuaW5uZXJIVE1MID0gJyc7XHJcbiAgICAgICAgaWYgKGRlcG90LnJvdy5wYXRoX2ljb25vX3N2Zykge1xyXG4gICAgICAgICAgICB2YXIgc3ZnID0gaHRtbC5zdmcoe1xyXG4gICAgICAgICAgICAgICAgY2xhc3M6IFwic3ZnLWFjY2lvbmVzXCJcclxuICAgICAgICAgICAgfSwgW1xyXG4gICAgICAgICAgICAgICAgaHRtbC5wYXRoKHtcclxuICAgICAgICAgICAgICAgICAgICBkOiBkZXBvdC5yb3cucGF0aF9pY29ub19zdmdcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIF0pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICBzdmcuc2V0QXR0cmlidXRlKFwidmlld0JveFwiLCBcIjAgMCA1MCA1MFwiKTtcclxuICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoc3ZnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG52YXIgY3JlYXJTVkcgPSAocGF0aDogc3RyaW5nLCBwcm9wczogYW55KSA9PiB7XHJcbiAgICB2YXIgc3ZnID0gaHRtbC5zdmcocHJvcHMgfHwge30sIFtcclxuICAgICAgICBodG1sLnBhdGgoe1xyXG4gICAgICAgICAgICBkOiBwYXRoXHJcbiAgICAgICAgfSlcclxuICAgIF0pLmNyZWF0ZSgpO1xyXG4gICAgc3ZnLnNldEF0dHJpYnV0ZShcInZpZXdCb3hcIiwgXCIwIDAgNTAgNTBcIik7XHJcbiAgICByZXR1cm4gc3ZnXHJcbn1cclxudmFyIGNyZWFyQm90b25BY2Npb24gPSAoZGVwb3Q6IG15T3duLkRlcG90LCBhY3Rpb246IEVzdGFkb0FjY2lvbikgPT4ge1xyXG4gICAgbGV0IGFjY2lvblNpbkd1aW9uZXMgPSBhY3Rpb24uZWFjY2lvbi5yZXBsYWNlKCdfJywgJyAnKTtcclxuICAgIHZhciBzdmcgPSBjcmVhclNWRyhhY3Rpb24ucGF0aF9pY29ub19zdmcsIHsgY2xhc3M6IFwic3ZnLWFjY2lvbmVzXCIgfSlcclxuICAgIGlmIChhY3Rpb24uZGVzYWN0aXZhX2JvdG9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGh0bWwuc3Bhbih7IGNsYXNzOiBgc2luLWJvdG9uLWFjY2lvbmAgfSwgW2FjY2lvblNpbkd1aW9uZXMsIHN2ZyBhcyB1bmtub3duIGFzIEhUTUxFbGVtZW50XSkuY3JlYXRlKClcclxuICAgIH1cclxuICAgIGxldCBidXR0b24gPSBodG1sLmJ1dHRvbih7XHJcbiAgICAgICAgY2xhc3M6IGBib3Rvbi1hY2Npb24gYm90b24tYWNjaW9uLSR7YWN0aW9uLmVhY2Npb25fZGlyZWNjaW9ufWBcclxuICAgIH0sIFtcclxuICAgICAgICBgJHthY2Npb25TaW5HdWlvbmVzfWAsXHJcbiAgICAgICAgLy9AdHMtaWdub3JlIHN2ZyBlcyBodG1sZWxlbWVudFxyXG4gICAgICAgIGFjdGlvbi5wYXRoX2ljb25vX3N2ZyA/IHN2ZyA6IG51bGwsXHJcbiAgICBdKS5jcmVhdGUoKTtcclxuICAgIGJ1dHRvbi5vbmNsaWNrID0gKCkgPT4ge1xyXG4gICAgICAgIHZhciBhY3Rpb25GdW4gPSBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIGJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBteS5hamF4LmFjY2lvbl90YXJlYXNfdGVtX2VqZWN1dGFyKHtcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm86IGRlcG90LnJvdy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZWE6IGRlcG90LnJvdy50YXJlYSxcclxuICAgICAgICAgICAgICAgICAgICBlbmM6IGRlcG90LnJvdy5lbmMsXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZGljaW9uOiBhY3Rpb24uY29uZGljaW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjY2lvbjogYWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIHRhcmVhc1RlbVRhYmxlOiBkZXBvdC5kZWYubmFtZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgZ3JpZCA9IGRlcG90Lm1hbmFnZXI7XHJcbiAgICAgICAgICAgICAgICBncmlkLnJldHJpZXZlUm93QW5kUmVmcmVzaChkZXBvdCwgeyByZXRyaWV2ZVdpdGhCcm9hZFdoZXJlOiB0cnVlIH0pXHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLm5vbWJyZV93c2NyZWVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9UT0RPIGFjb21vZGFyIGVzdG8gZW4gYWxndW4gbW9tZW50b1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbXMgPSBkZXBvdC5yb3c7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVwID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm86IHBhcmFtcy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhOiBwYXJhbXMudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuYzogTnVtYmVyKHBhcmFtcy5lbmMpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGFicmlyRW5jdWVzdGFFblBlc3Rhbm5pYURlZGljYWRhKGxvY2F0aW9uLm9yaWdpbiArIGxvY2F0aW9uLnBhdGhuYW1lICsgbXkubWVudVNlcGFyYXRvciArIGB3PSR7YWN0aW9uLm5vbWJyZV93c2NyZWVufSZ1cD0ke0pTT04uc3RyaW5naWZ5KHVwKX0mYXV0b3Byb2NlZD10cnVlYClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydFByb21pc2UodW5leHBlY3RlZChlcnIpLm1lc3NhZ2UpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJcclxuICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgIC8vcmV0cmFzbyBsYSBoYWJpbGl0YWNpw7NuIHBvcnF1ZSBhIHZlY2VzIHRhcmRhIGVuIHJlZGlidWphcnNlIGxhIGJvdG9uZXJhIHkgcHVlZGUgdHJhZXIgcHJvYmxlbWFzIHNpIGRhbiBkb2JsZSBjbGljayBcclxuICAgICAgICAgICAgICAgIC8veWEgcXVlIGVqZWN1dGEgbnVldmFtZW50ZSB1bmEgYWNjacOzbiBxdWUgeWEgc2UgZWplY3V0w7MgKHkgdGVybWluw7MpIGFudGVzXHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IGJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlLCAzMDAwKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY29uZmlybVByb21pc2VPcHRzOiBEaWFsb2dPcHRpb25zID0ge31cclxuICAgICAgICBpZiAoYWN0aW9uLmNvbmZpcm1hKSB7XHJcbiAgICAgICAgICAgIGNvbmZpcm1Qcm9taXNlT3B0cy5hc2tGb3JOb1JlcGVhdCA9ICdubyB2b2x2ZXIgYSBtb3N0cmFyJzsgLy9tdWVzdHJhIG1lbnNhamUgcG9yIGRlZmF1bHQgcGVybyBhbmRhIGlndWFsXHJcbiAgICAgICAgICAgIHZhciBidXR0b25zRGVmID0gW1xyXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ3PDrScsIHZhbHVlOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnbm8nLCB2YWx1ZTogZmFsc2UgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIGNvbmZpcm1Qcm9taXNlKGBjb25maXJtYSBhY2Npw7NuIFwiJHthY2Npb25TaW5HdWlvbmVzfVwiP2AsIHsgLi4uY29uZmlybVByb21pc2VPcHRzLCBidXR0b25zRGVmIH0pLnRoZW4oYWN0aW9uRnVuKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhY3Rpb25GdW4oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYnV0dG9uXHJcbn1cclxuXHJcbnZhciBjcmVhckJvdG9uZXNBY2Npb25lcyA9IGFzeW5jIChvcHRzOiB7IGRlcG90OiBteU93bi5EZXBvdCwgZmllbGROYW1lOiBzdHJpbmcsIGRpcmVjY2lvbjogRGlyZWNjaW9uQWNjaW9uIH0pID0+IHtcclxuICAgIGxldCB7IGRlcG90LCBmaWVsZE5hbWUsIGRpcmVjY2lvbiB9ID0gb3B0cztcclxuICAgIGxldCB0ZCA9IGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV07XHJcbiAgICB0ZC5pbm5lckhUTUwgPSAnJztcclxuICAgIChkZXBvdC5yb3dDb250cm9scy5hY2Npb25lcy5nZXRUeXBlZFZhbHVlKCkgfHwgW10pXHJcbiAgICAgICAgLmZpbHRlcigoYWN0aW9uOiBFc3RhZG9BY2Npb24pID0+IGFjdGlvbi5lYWNjaW9uX2RpcmVjY2lvbiA9PSBkaXJlY2Npb24pXHJcbiAgICAgICAgLmZvckVhY2goKGFjdGlvbjogRXN0YWRvQWNjaW9uKSA9PiB0ZC5hcHBlbmRDaGlsZChjcmVhckJvdG9uQWNjaW9uKGRlcG90LCBhY3Rpb24pKSk7XHJcbn1cclxuXHJcbnZhciBjcmVhclN3aXRjaCA9IChvcHRzOiB7IHJvdW5kPzogYm9vbGVhbiwgZGlzYWJsZWQ/OiBib29sZWFuLCBjaGVja2VkPzogYm9vbGVhbiwgb25DbGlja0Z1bjogRnVuY3Rpb24sIG9uRXJyRnVuPzogRnVuY3Rpb24gfSkgPT4ge1xyXG4gICAgdmFyIGNoZWNrYm94ID0gaHRtbC5pbnB1dCh7IHR5cGU6ICdjaGVja2JveCcsIGNoZWNrZWQ6IG9wdHMuY2hlY2tlZCB9KS5jcmVhdGUoKTtcclxuICAgIGNoZWNrYm94Lm9uY2xpY2sgPSBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY2hlY2tib3guZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBhd2FpdCBvcHRzLm9uQ2xpY2tGdW4oKVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBhbGVydFByb21pc2UodW5leHBlY3RlZChlcnIpLm1lc3NhZ2UpXHJcbiAgICAgICAgICAgIHRocm93IGVyclxyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIGNoZWNrYm94LmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGh0bWwubGFiZWwoeyBjbGFzczogJ3N3aXRjaCcgfSwgW1xyXG4gICAgICAgIGNoZWNrYm94LFxyXG4gICAgICAgIGh0bWwuc3Bhbih7IGNsYXNzOiBgc2xpZGVyICR7b3B0cy5yb3VuZCA/ICdyb3VuZCcgOiAnJ31gIH0pLFxyXG4gICAgXSkuY3JlYXRlKCk7XHJcbn1cclxuXHJcbm15T3duLmNsaWVudFNpZGVzLmhhYmlsaXRhciA9IHtcclxuICAgIHByZXBhcmU6IChfZGVwb3QsIF9maWVsZE5hbWUpID0+IHsgfSxcclxuICAgIHVwZGF0ZTogKGRlcG90LCBmaWVsZE5hbWUpID0+IHtcclxuICAgICAgICB2YXIgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgIHRkLmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgdGQuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgICAgIGNyZWFyU3dpdGNoKHtcclxuICAgICAgICAgICAgICAgIHJvdW5kOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY2hlY2tlZDogZGVwb3Qucm93LmhhYmlsaXRhZGEsXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrRnVuOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbXkuYWpheC5lbmN1ZXN0YV9oYWJpbGl0YXJfZGVzaGFiaWxpdGFyKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBkZXBvdC5yb3cub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmM6IGRlcG90LnJvdy5lbmNcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZ3JpZCA9IGRlcG90Lm1hbmFnZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBncmlkLnJldHJpZXZlUm93QW5kUmVmcmVzaChkZXBvdCksIDMwMCk7Ly9wYXJhIHF1ZSBzZSB2ZWEgZWwgZWZlY3RvXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufTtcclxuXHJcbm15T3duLmNsaWVudFNpZGVzLmFjY2lvbmVzQXZhbmNlID0ge1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSkgPT4geyB9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSkgPT4ge1xyXG4gICAgICAgIGNyZWFyQm90b25lc0FjY2lvbmVzKHsgZGVwb3QsIGZpZWxkTmFtZSwgZGlyZWNjaW9uOiAnYXZhbmNlJyB9KTtcclxuICAgIH1cclxufTtcclxuXHJcbm15T3duLmNsaWVudFNpZGVzLmFjY2lvbmVzUmV0cm9jZXNvID0ge1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSkgPT4geyB9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSkgPT4ge1xyXG4gICAgICAgIGNyZWFyQm90b25lc0FjY2lvbmVzKHsgZGVwb3QsIGZpZWxkTmFtZSwgZGlyZWNjaW9uOiAncmV0cm9jZXNvJyB9KTtcclxuICAgIH1cclxufTtcclxuXHJcbm15T3duLmNsaWVudFNpZGVzLmFjY2lvbmVzQmxhbnF1ZW8gPSB7XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKSA9PiB7IH0sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKSA9PiB7XHJcbiAgICAgICAgY3JlYXJCb3RvbmVzQWNjaW9uZXMoeyBkZXBvdCwgZmllbGROYW1lLCBkaXJlY2Npb246ICdibGFucXVlbycgfSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5mdW5jdGlvblxyXG4gICAgYm90b25DbGllbnRTaWRlRW5HcmlsbGEob3B0czogeyBub21icmVCb3Rvbjogc3RyaW5nLCBsbGFtYWRhOiAoZGVwb3Q6IG15T3duLkRlcG90KSA9PiBQcm9taXNlPGFueT4gfSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBwcmVwYXJlOiBmdW5jdGlvbiAoZGVwb3Q6IG15T3duLkRlcG90LCBmaWVsZE5hbWU6IHN0cmluZykge1xyXG4gICAgICAgICAgICB2YXIgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgICAgICB2YXIgYm90b24gPSBodG1sLmJ1dHRvbihvcHRzLm5vbWJyZUJvdG9uKS5jcmVhdGUoKTtcclxuICAgICAgICAgICAgdGQuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoYm90b24pO1xyXG4gICAgICAgICAgICB2YXIgcmVzdGF1cmFyQm90b24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBib3Rvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYm90b24udGV4dENvbnRlbnQgPSBvcHRzLm5vbWJyZUJvdG9uO1xyXG4gICAgICAgICAgICAgICAgYm90b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGJvdG9uLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBib3Rvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBib3Rvbi50ZXh0Q29udGVudCA9ICdwcm9jZXNhbmRvLi4uJztcclxuICAgICAgICAgICAgICAgIG9wdHMubGxhbWFkYShkZXBvdCkudGhlbihhc3luYyBmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiAnb2snIGluIHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lm9rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JpZCA9IGRlcG90Lm1hbmFnZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBncmlkLnJldHJpZXZlUm93QW5kUmVmcmVzaChkZXBvdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVwb3QuZGV0YWlsQ29udHJvbHMuaW5jb25zaXN0ZW5jaWFzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwb3QuZGV0YWlsQ29udHJvbHMuaW5jb25zaXN0ZW5jaWFzLmZvcmNlRGlzcGxheURldGFpbEdyaWQoe30pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90b24udGV4dENvbnRlbnQgPSByZXN1bHQubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdG9uLnRpdGxlID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyM4RjgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHJlc3RhdXJhckJvdG9uLCAyNTAwKTtcclxuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSBleHBlY3RlZChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJvdG9uLnRleHRDb250ZW50ID0gJ2Vycm9yJztcclxuICAgICAgICAgICAgICAgICAgICBib3Rvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI0ZGOCc7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZW4gYWNjacOzbiBkZSBncmlsbGE6JywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShlcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9pZiAoKGRlcG90LnJvdy5jb25zaXN0aWRvPT1udWxsICAmJiBkZXBvdC5yb3cucmVhIT1udWxsKSB8fCBkZXBvdC5yb3cubW9kaWZpY2FkbyE9bnVsbCAmJiBkZXBvdC5yb3cuY29uc2lzdGlkbyE9bnVsbCAmJiBkZXBvdC5yb3cubW9kaWZpY2FkbyA+ZGVwb3Qucm93LmNvbnNpc3RpZG8pe1xyXG4gICAgICAgICAgICAvLyAgICBib3Rvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9JyM4Q0YnXHJcbiAgICAgICAgICAgIC8vfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5jb25zaXN0aXIgPSBib3RvbkNsaWVudFNpZGVFbkdyaWxsYSh7XHJcbiAgICBub21icmVCb3RvbjogJ2NvbnNpc3RpcicsXHJcbiAgICBsbGFtYWRhOiBmdW5jdGlvbiAoZGVwb3Q6IG15T3duLkRlcG90KSB7XHJcbiAgICAgICAgdmFyIGZpbHRyb1JlYSA9IGNvbnNpc3Rpcl9maWx0cm8oZGVwb3Qucm93LnRhcmVhLCBkZXBvdC5yb3dbJ3JlYSddLCBkZXBvdC5yb3cucmVhKVxyXG4gICAgICAgIHJldHVybiBmaWx0cm9SZWEgPyBteU93bi5hamF4LmNvbnNpc3Rpcl9lbmN1ZXN0YSh7XHJcbiAgICAgICAgICAgIG9wZXJhdGl2bzogZGVwb3Qucm93Lm9wZXJhdGl2byxcclxuICAgICAgICAgICAgaWRfY2FzbzogZGVwb3Qucm93LmVuY1xyXG4gICAgICAgIH0pIDogYWxlcnRQcm9taXNlKCdMYSBlbmN1ZXN0YSBkZWJlIHRlbmVyIGRhdG8gZW4gcmVhIHBhcmEgcG9kZXIgY29uc2lzdGlybGEuJyk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxubXlPd24ud1NjcmVlbnMucHJvYy5yZXN1bHQubW9zdHJhcl9lbmN1ZXN0YXNfYV9ibGFucXVlYXIgPSBmdW5jdGlvbiAocmVzdWx0LCBkaXZSZXN1bHQpIHtcclxuICAgIGlmIChyZXN1bHQucm93cy5sZW5ndGgpIHtcclxuICAgICAgICB2YXIgY3VycmVudFRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbFxyXG4gICAgICAgIHZhciBucm9DYXJnYSA9IDA7XHJcbiAgICAgICAgdmFyIGVuY3Vlc3Rhc0RpdjogbnVsbCB8IEhUTUxEaXZFbGVtZW50ID0gbnVsbDtcclxuICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoaHRtbC5oMignb3BlcmF0aXZvOiAnICsgcmVzdWx0Lm9wZXJhdGl2bykuY3JlYXRlKCkpO1xyXG4gICAgICAgIHJlc3VsdC5yb3dzLmZvckVhY2goKGVuY3Vlc3RhOmFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFRva2VuICE9IGVuY3Vlc3RhLmNhcmdhZG9fZG0pIHtcclxuICAgICAgICAgICAgICAgIG5yb0NhcmdhKys7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VG9rZW4gPSBlbmN1ZXN0YS5jYXJnYWRvX2RtO1xyXG4gICAgICAgICAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGh0bWwuaDQoJ2NhcmdhIE7CuiAnICsgbnJvQ2FyZ2EudG9TdHJpbmcoKSkuY3JlYXRlKCkpO1xyXG4gICAgICAgICAgICAgICAgZW5jdWVzdGFzRGl2ID0gaHRtbC5kaXYoeyBjbGFzczogJ2VuY3Vlc3Rhcy1hLWJsYW5xdWVhcicgfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAvL2xhcyBjb3BpbyBjb24gbGV0IHBhcmEgcXVlIHRvbWUgZWwgdmFsb3IgYWN0dWFsIHkgbm8gZWwgw7psdGltb1xyXG4gICAgICAgICAgICAgICAgbGV0IG1pVG9rZW4gPSBjdXJyZW50VG9rZW47XHJcbiAgICAgICAgICAgICAgICBsZXQgbWlOcm9DYXJnYSA9IG5yb0NhcmdhO1xyXG4gICAgICAgICAgICAgICAgdmFyIGJ1dHRvbiA9IGh0bWwuYnV0dG9uKHtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzczogYGJvdG9uLWJsYW5xdWVhci1kbSBib3Rvbi1hY2Npb25gXHJcbiAgICAgICAgICAgICAgICB9LCAnYmxhbnF1ZWFyIGNhcmdhICcgKyBucm9DYXJnYS50b1N0cmluZygpKS5jcmVhdGUoKTtcclxuICAgICAgICAgICAgICAgIGJ1dHRvbi5vbmNsaWNrID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtYWluRGl2ID0gaHRtbC5kaXYoKS5jcmVhdGUoKVxyXG4gICAgICAgICAgICAgICAgICAgIG1haW5EaXYuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KHt9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdih7IGNsYXNzOiAnZGFuZ2VyJyB9LCBbYEVzdMOhIHBvciBibGFucXVlYXIgbGEgY2FyZ2EgJHttaU5yb0NhcmdhfS4gTm8gc2UgcG9kcsOhIGRlc2NhcmdhciBlbCBkaXNwb3NpdGl2by5gXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSkuY3JlYXRlKClcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dEZvcnphciA9IGh0bWwuaW5wdXQoeyBjbGFzczogJ2lucHV0LWZvcnphcicgfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFpbkRpdi5hcHBlbmRDaGlsZChodG1sLmRpdihbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KFsnU2UgcHVlZGUgZm9yemFyIGVsIGJsYW5xdWVvICcsIGlucHV0Rm9yemFyXSlcclxuICAgICAgICAgICAgICAgICAgICBdKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvcnphciA9IGF3YWl0IGNvbmZpcm1Qcm9taXNlKG1haW5EaXYsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aENsb3NlQnV0dG9uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uc0RlZjogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbDogJ2ZvcnphciBibGFucXVlbycsIHZhbHVlOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsOiAnY2FuY2VsYXIgYmxhbnF1ZW8nLCB2YWx1ZTogZmFsc2UgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcnphcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRGb3J6YXIudmFsdWUgPT0gJ2ZvcnphcicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0QmxhbnF1ZW8gPSBhd2FpdCBteS5hamF4LmRtX2JsYW5xdWVhcih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogcmVzdWx0Lm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46IG1pVG9rZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZSZXN1bHQuaW5uZXJIVE1MID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0QmxhbnF1ZW8uZm9yRWFjaCgodHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdih7fSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuc3Bhbih7fSwgYCR7dHQucmVzdWx0X2JsYW5xdWVvfWApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkuY3JlYXRlKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydFByb21pc2UodW5leHBlY3RlZChlcnIpLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydFByb21pc2UoJ3NpIG5lY2VzaXRhIGJsYW5xdWVhciBlc2NyaWJhIGZvcnphci4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGVuY3Vlc3Rhc0Rpdik7XHJcbiAgICAgICAgICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbmN1ZXN0YXNEaXY/LmFwcGVuZENoaWxkKGh0bWwuZGl2KHt9LCBbXHJcbiAgICAgICAgICAgICAgICBodG1sLnNwYW4oYGVuY3Vlc3RhOiAke2VuY3Vlc3RhLmVuY30gYCksXHJcbiAgICAgICAgICAgICAgICBodG1sLnNwYW4oYHRhcmVhOiAgJHtlbmN1ZXN0YS50YXJlYX0gYCksXHJcbiAgICAgICAgICAgIF0pLmNyZWF0ZSgpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbn1cclxuXHJcbm15T3duLndTY3JlZW5zLnByb2MucmVzdWx0LmRvd25sb2FkX3NxbCA9IGZ1bmN0aW9uIChyZXN1bHQsIGRpdlJlc3VsdCkge1xyXG4gICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW3Jlc3VsdF0sIHsgdHlwZTogJ3RleHQvc3FsJyB9KSk7XHJcblxyXG4gICAgZGl2UmVzdWx0LmlubmVySFRNTCA9ICcnO1xyXG5cclxuICAgIGNvbnN0IGxpbmsgPSBodG1sLmEoJ0Rlc2NhcmdhciBhcmNoaXZvIFNRTCcpLmNyZWF0ZSgpXHJcbiAgICBsaW5rLmhyZWYgPSB1cmw7XHJcbiAgICBsaW5rLmRvd25sb2FkID0gJ21pZ3Jhcl9vcGVyYXRpdm8uc3FsJztcclxuICAgIGRpdlJlc3VsdC5hcHBlbmRDaGlsZChsaW5rKTtcclxufVxyXG5cclxuY29uc3QgcHJldmlzdWFsaXphckVuY3Vlc3RhID0gKFxyXG4gICAgcmVzdWx0VGVtOiBhbnksXHJcbiAgICBkaXZSZXN1bHQ6IEhUTUxEaXZFbGVtZW50LFxyXG4gICAgcGFyYW1zOiB7XHJcbiAgICAgICAgbm9tYnJlUHJvY2VkdXJlOiBzdHJpbmcsXHJcbiAgICAgICAgaWdub3JhSnNvbkVuY3Vlc3RhVmFjaW86IGJvb2xlYW5cclxuICAgICAgICBsYWJlbEFjdGlvbjogc3RyaW5nXHJcbiAgICB9XHJcbikgPT4ge1xyXG4gICAgbGV0IHsgY2Fzb1RlbSB9ID0gcmVzdWx0VGVtO1xyXG4gICAgaWYgKCFjYXNvVGVtLmpzb25fZW5jdWVzdGEpIHtcclxuICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoaHRtbC5wKHsgaWQ6ICdtZW5zYWplLW5vLWhheS1qc29uLWVuY3Vlc3RhJyB9LCBgbm8gc2UgZW5jb250csOzIGluZm9ybWFjaW9uIGNhcmdhZGEgZW4gbGEgZW5jdWVzdGEgJHtjYXNvVGVtLmVuY31gKS5jcmVhdGUoKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2Fzb1RlbS5qc29uX2VuY3Vlc3RhIHx8IHBhcmFtcy5pZ25vcmFKc29uRW5jdWVzdGFWYWNpbykge1xyXG4gICAgICAgIHZhciBlbmN1ZXN0YURpdiA9IGh0bWwuZGl2KHsgaWQ6ICdiYWNrdXAtZGl2JyB9KS5jcmVhdGUoKTtcclxuICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoZW5jdWVzdGFEaXYpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIG15LmFncmVnYXJfanNvbihlbmN1ZXN0YURpdiwgY2Fzb1RlbS5qc29uX2VuY3Vlc3RhKTtcclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGh0bWwucCh7IGlkOiAnbWVuc2FqZS1lcnJvci1qc29uLWVuY3Vlc3RhJyB9LCBgbm8gc2UgcHVkbyBhbCBwcmV2aXN1YWxpemFyIGxhIGVuY3Vlc3RhICR7Y2Fzb1RlbS5lbmN9IGNvcnJlY3RhbWVudGUuICR7dW5leHBlY3RlZChlcnIpLm1lc3NhZ2V9YCkuY3JlYXRlKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYnV0dG9uID0gaHRtbC5idXR0b24oe1xyXG4gICAgICAgICAgICBjbGFzczogYGJvdG9uLWJsYW5xdWVhci1lbmN1ZXN0YS1hY2Npb25gXHJcbiAgICAgICAgfSwgYCR7cGFyYW1zLmxhYmVsQWN0aW9ufSBlbmN1ZXN0YWApLmNyZWF0ZSgpO1xyXG4gICAgICAgIGJ1dHRvbi5vbmNsaWNrID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgbWFpbkRpdiA9IGh0bWwuZGl2KCkuY3JlYXRlKClcclxuICAgICAgICAgICAgbWFpbkRpdi5hcHBlbmRDaGlsZChcclxuICAgICAgICAgICAgICAgIGh0bWwuZGl2KHt9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoeyBjbGFzczogJ2RhbmdlcicgfSwgW2BFc3TDoSBwb3IgJHtwYXJhbXMubGFiZWxBY3Rpb259IGxhIGVuY3Vlc3RhICR7Y2Fzb1RlbS5lbmN9LiBTZSBwZXJkZXLDoW4gbG9zIGRhdG9zIGRlIGxhIG1pc21hLmBdKVxyXG4gICAgICAgICAgICAgICAgXSkuY3JlYXRlKClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdmFyIGlucHV0Rm9yemFyID0gaHRtbC5pbnB1dCh7IGNsYXNzOiAnaW5wdXQtZm9yemFyJyB9KS5jcmVhdGUoKTtcclxuICAgICAgICAgICAgbWFpbkRpdi5hcHBlbmRDaGlsZChodG1sLmRpdihbXHJcbiAgICAgICAgICAgICAgICBodG1sLmRpdihbYHBhcmEgJHtwYXJhbXMubGFiZWxBY3Rpb259IGVzY3JpYmEgZm9yemFyIGAsIGlucHV0Rm9yemFyXSlcclxuICAgICAgICAgICAgXSkuY3JlYXRlKCkpO1xyXG4gICAgICAgICAgICB2YXIgZm9yemFyID0gYXdhaXQgY29uZmlybVByb21pc2UobWFpbkRpdiwge1xyXG4gICAgICAgICAgICAgICAgd2l0aENsb3NlQnV0dG9uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlamVjdDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBidXR0b25zRGVmOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgeyBsYWJlbDogJ2ZvcnphcicsIHZhbHVlOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBsYWJlbDogJ2NhbmNlbGFyJywgdmFsdWU6IGZhbHNlIH1cclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChmb3J6YXIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dEZvcnphci52YWx1ZSA9PSAnZm9yemFyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB3YWl0R2lmID0gaHRtbC5pbWcoeyBzcmM6ICdpbWcvbG9hZGluZzE2LmdpZicgfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2FpdEdpZi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKHdhaXRHaWYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0QmxhbnF1ZW8gPSBhd2FpdCBteS5hamF4W3BhcmFtcy5ub21icmVQcm9jZWR1cmVdKGNhc29UZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXZSZXN1bHQuaW5uZXJIVE1MID0gcmVzdWx0QmxhbnF1ZW87XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGVydFByb21pc2UodW5leHBlY3RlZChlcnIpLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3YWl0R2lmLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxlcnRQcm9taXNlKGBzaSBuZWNlc2l0YSAke3BhcmFtcy5sYWJlbEFjdGlvbn0gZXNjcmliYSBmb3J6YXIuYClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcclxuICAgIH1cclxufVxyXG5cclxubXlPd24ud1NjcmVlbnMucHJvYy5yZXN1bHQubW9zdHJhcl9lbmN1ZXN0YV9hX2JsYW5xdWVhcl9jb250ZW5pZG8gPSBmdW5jdGlvbiAocmVzdWx0LCBkaXZSZXN1bHQpIHtcclxuICAgIHByZXZpc3VhbGl6YXJFbmN1ZXN0YShyZXN1bHQsIGRpdlJlc3VsdCwge1xyXG4gICAgICAgIG5vbWJyZVByb2NlZHVyZTogJ2VuY3Vlc3RhX2JsYW5xdWVhcicsXHJcbiAgICAgICAgaWdub3JhSnNvbkVuY3Vlc3RhVmFjaW86IGZhbHNlLFxyXG4gICAgICAgIGxhYmVsQWN0aW9uOiAnYmxhbnF1ZWFyJ1xyXG4gICAgfSlcclxufVxyXG5cclxubXlPd24ud1NjcmVlbnMucHJvYy5yZXN1bHQubW9zdHJhcl9lbmN1ZXN0YV9hX2JvcnJhciA9IGZ1bmN0aW9uIChyZXN1bHQsIGRpdlJlc3VsdCkge1xyXG4gICAgcHJldmlzdWFsaXphckVuY3Vlc3RhKHJlc3VsdCwgZGl2UmVzdWx0LCB7XHJcbiAgICAgICAgbm9tYnJlUHJvY2VkdXJlOiAnZW5jdWVzdGFfYm9ycmFyJyxcclxuICAgICAgICBpZ25vcmFKc29uRW5jdWVzdGFWYWNpbzogdHJ1ZSxcclxuICAgICAgICBsYWJlbEFjdGlvbjogJ2JvcnJhcidcclxuICAgIH0pXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFycmF5RmxhdDxUPihhcnJheXM6IFRbXVtdKTogVFtdIHtcclxuICAgIHJldHVybiAoW10gYXMgVFtdKS5jb25jYXQuYXBwbHkoW10sIGFycmF5cyk7XHJcbn1cclxuXHJcblxyXG4vKnNpbmNyb25pemFyIHkgY2FtYmlvIGRlIG1vZG8gTEVHQUNZICovXHJcbmFzeW5jIGZ1bmN0aW9uIHNpbmNyb25pemFyRGF0b3MocGVyc2lzdGVudGVzOiBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyB8IG51bGwsIGNhbWJpYU1vZG9ETTogYm9vbGVhbikge1xyXG4gICAgY29uc3QgZm9ybVJlbmRlcmVyID0gZ2V0Rm9ybVJlbmRlcmVyKCk7XHJcbiAgICBsZXQgbW9kb0RNOiBNb2RvRE0gPSBmb3JtUmVuZGVyZXIuZ2V0TW9kb0RNKCkgfHwgYXdhaXQgbXkuYWpheC5tb2RvX2RtX2RlZmVjdG9fb2J0ZW5lcih7fSk7XHJcbiAgICBmb3JtUmVuZGVyZXIuc2V0TW9kb0RNKG1vZG9ETSk7XHJcbiAgICBjb25zdCBpZHBlcl9sb2d1ZWFkb190YWJsZXQgPSBmb3JtUmVuZGVyZXIuZ2V0SWRwZXJMb2d1ZWFkbygpO1xyXG4gICAgdmFyIGRhdG9zID0gYXdhaXQgbXkuYWpheC5kbV9zaW5jcm9uaXphcih7IHBlcnNpc3RlbnRlcywgbW9kb19kbTogbW9kb0RNLCBjYW1iaWFfbW9kb19kbTogY2FtYmlhTW9kb0RNLCBpZHBlcl9sb2d1ZWFkb190YWJsZXQgfSk7XHJcbiAgICBhd2FpdCBmb3JtUmVuZGVyZXIucGVyc2lzdGlyRGF0b3MoeyAuLi5kYXRvcywgbW9kb0FsbWFjZW5hbWllbnRvOiAnbG9jYWwnIH0pO1xyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBhd2FpdCBteU93bi5hamF4Lm9wZXJhdGl2b19lc3RydWN0dXJhX2NvbXBsZXRhKHsgb3BlcmF0aXZvOiBkYXRvcy5vcGVyYXRpdm8sIGlkcGVyX2xvZ3VlYWRvX3RhYmxldCB9KTtcclxuICAgIGF3YWl0IGZvcm1SZW5kZXJlci5wZXJzaXN0aXJFc3RydWN0dXJhKGVzdHJ1Y3R1cmEpO1xyXG4gICAgbXkucmVtb3ZlTG9jYWxWYXIoQkFDS1VQUyk7XHJcbiAgICByZXR1cm4gZGF0b3M7XHJcbn1cclxuXHJcbmNvbnN0IG1vc3RyYXJJbmZvTG9jYWwgPSBhc3luYyAoZGl2QXZpc29TaW5jcm86IEhUTUxEaXZFbGVtZW50LCB0aXR1bG86IHN0cmluZywgbnJvU2luY3JvOiBudW1iZXIgfCBudWxsLCBtb3N0cmFyTGlua0hkcjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgZGF0b3MgPSBhd2FpdCBnZXRGb3JtUmVuZGVyZXIoKS5sZWVyRGF0b3MoKTtcclxuICAgIGNvbnN0IGVzdHJ1Y3R1cmEgPSBhd2FpdCBnZXRGb3JtUmVuZGVyZXIoKS5sZWVyRXN0cnVjdHVyYSgpO1xyXG4gICAgaWYgKGRhdG9zKSB7XHJcbiAgICAgICAgZGl2QXZpc29TaW5jcm8uYXBwZW5kKGh0bWwuZGl2KHsgaWQ6ICdhdmlzby1zaW5jcm8nIH0sIFtcclxuICAgICAgICAgICAgbnJvU2luY3JvID8gaHRtbC5wKFtcIk7Dum1lcm8gZGUgc2luY3Jvbml6YWNpw7NuOiBcIiwgaHRtbC5iKFwiXCIgKyBucm9TaW5jcm8udG9TdHJpbmcoKSldKSA6IG51bGwsXHJcbiAgICAgICAgICAgIGh0bWwuaDQodGl0dWxvKSxcclxuICAgICAgICAgICAgaHRtbC5wKFtodG1sTnVtZXJvKGxpa2VBcihkYXRvcy5jYXJnYXMpLmFycmF5KCkubGVuZ3RoKSwgJyBhcmVhczogJywgbGlrZUFyKGRhdG9zLmNhcmdhcykua2V5cygpLmpvaW4oJywgJyldKSxcclxuICAgICAgICAgICAgZXN0cnVjdHVyYSA/IGh0bWwucChbaHRtbE51bWVybyhsaWtlQXIoZGF0b3MucmVzcHVlc3Rhc1tlc3RydWN0dXJhLnVhUHBhbF0pLmFycmF5KCkubGVuZ3RoKSwgJyAnICsgZXN0cnVjdHVyYS51YVBwYWxdKSA6IG51bGwsXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBtb3N0cmFyTGlua0hkciA/IGh0bWwuYSh7IGhyZWY6ICcuL2NhbXBvJyB9LCBbaHRtbC5iKCdJUiBBIExBIEhPSkEgREUgUlVUQScpXSkgOiBudWxsXHJcbiAgICAgICAgXSkuY3JlYXRlKCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBkaXZBdmlzb1NpbmNyby5hcHBlbmRDaGlsZChodG1sLmRpdih7IGNsYXNzOiAnYXZpc28nIH0sIFtcclxuICAgICAgICAgICAgaHRtbC5oNCgnU2lzdGVtYSB2YWPDrW8nKSxcclxuICAgICAgICAgICAgaHRtbC5wKCdObyBoYXkgaW5mb3JtYWNpw7NuIGRlIGZvcm11bGFyaW9zJyksXHJcbiAgICAgICAgXSkuY3JlYXRlKCkpO1xyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBtb3N0cmFySW5mb01vZG8gPSBhc3luYyAobWFpbkxheW91dDogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIGxldCBtb2RvRE06IE1vZG9ETSA9IGdldEZvcm1SZW5kZXJlcigpLmdldE1vZG9ETSgpIHx8IGF3YWl0IG15LmFqYXgubW9kb19kbV9kZWZlY3RvX29idGVuZXIoe30pO1xyXG4gICAgZ2V0Rm9ybVJlbmRlcmVyKCkuc2V0TW9kb0RNKG1vZG9ETSk7XHJcbiAgICAvL0B0cy1pZ25vcmUgc2V0ZW8gdW4gYXRyaWJ1dG9cclxuICAgIHZhciBkaXZBdmlzb01vZG86IEhUTUxEaXZFbGVtZW50ID0gaHRtbC5kaXYoeyBjbGFzczogXCJpbmZvLW1vZG9cIiwgXCJtb2RvLWRtXCI6IG1vZG9ETSB9LCBgbW9kbyBhY3R1YWw6ICR7bW9kb0RNfWApLmNyZWF0ZSgpXHJcbiAgICBtYWluTGF5b3V0LmFwcGVuZENoaWxkKGRpdkF2aXNvTW9kbylcclxuICAgIHJldHVybiBtb2RvRE07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbWJpYXJNb2RvRE1FbkxvY2FsU3RvcmFnZShtb2RvQWN0dWFsOiBNb2RvRE0pIHtcclxuICAgIG1vZG9BY3R1YWwgPSBtb2RvQWN0dWFsID09ICdwcm9kdWMnID8gJ2NhcGEnIDogJ3Byb2R1Yyc7XHJcbiAgICBnZXRGb3JtUmVuZGVyZXIoKS5zZXRNb2RvRE0obW9kb0FjdHVhbCk7XHJcbn1cclxuXHJcbnZhciBwcm9jZWRlclNpbmNyb0Z1biA9IGFzeW5jIChidXR0b246IEhUTUxCdXR0b25FbGVtZW50LCBkaXZBdmlzb1NpbmNybzogSFRNTERpdkVsZW1lbnQsIGNhbWJpYU1vZG9ETTogYm9vbGVhbikgPT4ge1xyXG4gICAgYnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIGJ1dHRvbi5jbGFzc05hbWUgPSAnZG93bmxvYWQtZG0tYnV0dG9uJztcclxuICAgIGRpdkF2aXNvU2luY3JvLmlubmVySFRNTCA9ICcnO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBwZXJzaXN0ZW50ZXMgPSBhd2FpdCBnZXRGb3JtUmVuZGVyZXIoKS5sZWVyRGF0b3MoKTtcclxuICAgICAgICBjb25zdCBkYXRvcyA9IGF3YWl0IHNpbmNyb25pemFyRGF0b3MocGVyc2lzdGVudGVzLCBjYW1iaWFNb2RvRE0pO1xyXG4gICAgICAgIGxldCBtb2RvRE1BY3R1YWw6IE1vZG9ETSA9IGdldEZvcm1SZW5kZXJlcigpLmdldE1vZG9ETSgpIHx8IGF3YWl0IG15LmFqYXgubW9kb19kbV9kZWZlY3RvX29idGVuZXIoe30pO1xyXG4gICAgICAgIGlmIChjYW1iaWFNb2RvRE0pIHtcclxuICAgICAgICAgICAgY2FtYmlhck1vZG9ETUVuTG9jYWxTdG9yYWdlKG1vZG9ETUFjdHVhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF3YWl0IG1vc3RyYXJJbmZvTG9jYWwoZGl2QXZpc29TaW5jcm8sICdkYXRvcyByZWNpYmlkb3MnLCBkYXRvcy5udW1fc2luY3JvLCB0cnVlKTtcclxuICAgICAgICAoYXdhaXQgY3JlYXJTdG9yZUZvcm11bGFyaW8oe30pKS5kaXNwYXRjaChkaXNwYXRjaGVycy5SRVNFVF9PUENJT05FUyh7fSkpO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgYWxlcnRQcm9taXNlKHVuZXhwZWN0ZWQoZXJyKS5tZXNzYWdlKVxyXG4gICAgICAgIHRocm93IGVyclxyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgICBidXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICBidXR0b24uY2xhc3NOYW1lID0gJ2Rvd25sb2FkLWRtLWJ1dHRvbi1jb250JztcclxuICAgIH1cclxufVxyXG5teU93bi53U2NyZWVucy5zaW5jcm9uaXphcl9kbSA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBtYWluTGF5b3V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JykhO1xyXG4gICAgY29uc3QgbW9kb0RNID0gYXdhaXQgbW9zdHJhckluZm9Nb2RvKG1haW5MYXlvdXQpO1xyXG4gICAgdmFyIHByb2NlZGVyQnV0dG9uID0gaHRtbC5idXR0b24oeyBjbGFzczogJ2Rvd25sb2FkLWRtLWJ1dHRvbi1jb250JyB9LCAnc2luY3Jvbml6YXInKS5jcmVhdGUoKTtcclxuICAgIHByb2NlZGVyQnV0dG9uLnNldEF0dHJpYnV0ZShcIm1vZG8tZG1cIiwgbW9kb0RNKTtcclxuICAgIHZhciBkaXZBdmlzb1NpbmNybzogSFRNTERpdkVsZW1lbnQgPSBodG1sLmRpdigpLmNyZWF0ZSgpO1xyXG4gICAgYXdhaXQgbW9zdHJhckluZm9Mb2NhbChtYWluTGF5b3V0IGFzIEhUTUxEaXZFbGVtZW50LCAnaW5mb3JtYWNpw7NuIGEgdHJhbnNtaXRpcicsIG51bGwsIGZhbHNlKVxyXG4gICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChwcm9jZWRlckJ1dHRvbik7XHJcbiAgICBtYWluTGF5b3V0LmFwcGVuZENoaWxkKGRpdkF2aXNvU2luY3JvKTtcclxuICAgIHByb2NlZGVyQnV0dG9uLm9uY2xpY2sgPSAoKSA9PiBwcm9jZWRlclNpbmNyb0Z1bihwcm9jZWRlckJ1dHRvbiwgZGl2QXZpc29TaW5jcm8sIGZhbHNlKVxyXG59O1xyXG5cclxubXlPd24ud1NjcmVlbnMuY2FtYmlhcl9tb2RvX2RtID0gYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIG1haW5MYXlvdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKSE7XHJcbiAgICBjb25zdCBtb2RvRE0gPSBhd2FpdCBtb3N0cmFySW5mb01vZG8obWFpbkxheW91dCk7XHJcbiAgICB2YXIgcHJvY2VkZXJCdXR0b24gPSBodG1sLmJ1dHRvbih7IGNsYXNzOiAnY2FtYmlhci1tb2RvLWRtLWJ1dHRvbicgfSwgYGNhbWJpYXIgYSBtb2RvICR7bW9kb0RNID09ICdwcm9kdWMnID8gJ2NhcGEnIDogJ3Byb2R1Yyd9IOKHkmApLmNyZWF0ZSgpO1xyXG4gICAgdmFyIGRpdkF2aXNvU2luY3JvOiBIVE1MRGl2RWxlbWVudCA9IGh0bWwuZGl2KCkuY3JlYXRlKCk7XHJcbiAgICBhd2FpdCBtb3N0cmFySW5mb0xvY2FsKG1haW5MYXlvdXQgYXMgSFRNTERpdkVsZW1lbnQsIGBpbmZvcm1hY2nDs24gbW9kbyBcIiR7bW9kb0RNfVwiIGEgdHJhbnNtaXRpcmAsIG51bGwsIGZhbHNlKVxyXG4gICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChwcm9jZWRlckJ1dHRvbik7XHJcbiAgICBtYWluTGF5b3V0LmFwcGVuZENoaWxkKGRpdkF2aXNvU2luY3JvKTtcclxuICAgIHByb2NlZGVyQnV0dG9uLm9uY2xpY2sgPSBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgdmFyIG1haW5EaXYgPSBodG1sLmRpdigpLmNyZWF0ZSgpXHJcbiAgICAgICAgbWFpbkRpdi5hcHBlbmRDaGlsZChcclxuICAgICAgICAgICAgaHRtbC5kaXYoe30sIFtcclxuICAgICAgICAgICAgICAgIGh0bWwuZGl2KHt9LCBbYENvbmZpcm1hIGNhbWJpbyBkZSBtb2RvIFwiJHttb2RvRE19XCIgYSAke21vZG9ETSA9PSAncHJvZHVjJyA/ICdcImNhcGFcIicgOiAnXCJwcm9kdWNcIid9LmBdKVxyXG4gICAgICAgICAgICBdKS5jcmVhdGUoKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdmFyIGlucHV0Q2FtYmlhck1vZG8gPSBodG1sLmlucHV0KHsgY2xhc3M6ICdpbnB1dC1jYW1iaWFyLW1vZG8nIH0pLmNyZWF0ZSgpO1xyXG4gICAgICAgIG1haW5EaXYuYXBwZW5kQ2hpbGQoaHRtbC5kaXYoW1xyXG4gICAgICAgICAgICBodG1sLmRpdihbJ1BvciBmYXZvciBpbmdyZXNlIGxhIGNvbnRyYXNlw7FhICcsIGlucHV0Q2FtYmlhck1vZG9dKVxyXG4gICAgICAgIF0pLmNyZWF0ZSgpKTtcclxuICAgICAgICB2YXIgY2FtYmlhck1vZG9WYWx1ZSA9IGF3YWl0IGNvbmZpcm1Qcm9taXNlKG1haW5EaXYsIHtcclxuICAgICAgICAgICAgd2l0aENsb3NlQnV0dG9uOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVqZWN0OiBmYWxzZSxcclxuICAgICAgICAgICAgYnV0dG9uc0RlZjogW1xyXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogYGNhbWJpYXJgLCB2YWx1ZTogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogYGNhbmNlbGFyYCwgdmFsdWU6IGZhbHNlIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChjYW1iaWFyTW9kb1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmIChpbnB1dENhbWJpYXJNb2RvLnZhbHVlID09ICcxMjM0Jykge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZWRlckJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgcHJvY2VkZXJTaW5jcm9GdW4ocHJvY2VkZXJCdXR0b24sIGRpdkF2aXNvU2luY3JvLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICBtYWluTGF5b3V0LmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KGBNT0RPICR7Z2V0Rm9ybVJlbmRlcmVyKCkuZ2V0TW9kb0RNKCl9IEFDVElWQURPYCkuY3JlYXRlKClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICBhbGVydFByb21pc2UodW5leHBlY3RlZChlcnIpLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZWRlckJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0UHJvbWlzZSgnY29udHJhc2XDsWEgaW5jb3JyZWN0YS4nKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuLyogRklOIHNpbmNyb25pemFyIHkgY2FtYmlvIGRlIG1vZG8gTEVHQUNZICovXHJcbiJdfQ==
|
|
@@ -66,4 +66,4 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
66
66
|
backupPendiente = backupPendiente.then(enviarBackup);
|
|
67
67
|
});
|
|
68
68
|
});
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJyaXItZm9ybXVsYXJpby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91bmxvZ2dlZC9hYnJpci1mb3JtdWxhcmlvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQTBCQSw0Q0FFQztJQTVCRCxtQ0FZaUI7SUFFakIsa0NBQW1DO0lBQ25DLDJDQUFzQztJQUV0QywyREFJNEI7SUFDNUIsNkRBQTREO0lBRS9DLFFBQUEsT0FBTyxHQUFHLFNBQVMsQ0FBQztJQUVqQyxTQUFnQixnQkFBZ0IsQ0FBQyxpQkFBNkI7UUFDMUQsSUFBQSxpQ0FBYSxFQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDckMsQ0FBQztJQVdELElBQUksZUFBZSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUV4QyxTQUFlLFlBQVk7O1lBQ3ZCLElBQUksT0FBTyxHQUFZLEVBQUUsQ0FBQyxXQUFXLENBQUMsZUFBTyxDQUFDLENBQUM7WUFDL0MsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUM7WUFDN0IsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQztvQkFDRCxJQUFJLE1BQU0sR0FBVyxJQUFBLCtCQUFlLEdBQUUsQ0FBQyxTQUFTLEVBQUUsS0FBSSxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsRUFBRSxDQUFDLENBQUEsQ0FBQztvQkFDaEcsSUFBQSwrQkFBZSxHQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNwQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztvQkFDekQsMEVBQTBFO29CQUMxRSxJQUFJLGVBQWUsR0FBWSxFQUFFLENBQUMsV0FBVyxDQUFDLGVBQU8sQ0FBQyxDQUFDO29CQUN2RCxlQUFlLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQzNHLEVBQUUsQ0FBQyxXQUFXLENBQUMsZUFBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUM3QyxDQUFDO2dCQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7b0JBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsRUFBRSxJQUFBLHFCQUFRLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDNUQsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO0tBQUE7SUFFRCxJQUFBLG9DQUFnQixFQUNaLFNBQVMsYUFBYSxDQUFDLEtBQXlCLEVBQUUsU0FBb0IsRUFBRSxjQUEwQjtRQUM5RixJQUFJLE9BQU8sR0FBWSxFQUFFLENBQUMsY0FBYyxDQUFDLGVBQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLGVBQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRSxRQUFRLEVBQUUsQ0FBQztZQUNYLEdBQUcsRUFBRSxFQUFFO1NBQ1YsQ0FBQztRQUNGLE9BQU8sQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDO1FBQ3RCLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksVUFBVSxHQUFHLElBQUEsb0JBQVksRUFBQyxTQUFTLENBQUMsQ0FBQztRQUN6QyxNQUFNLFdBQVcsR0FBRyxJQUFBLGtDQUFjLEdBQUUsQ0FBQztRQUNyQyxJQUFJLFVBQVUsR0FBRyxJQUFBLGlDQUFhLEdBQUUsQ0FBQztRQUNqQyxJQUFJLEtBQUssR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBVSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQWdCLENBQUMsQ0FBQztRQUNqSSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNySCxFQUFFLENBQUMsV0FBVyxDQUFDLGVBQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqQyxlQUFlLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUN4RCxDQUFDLENBQ0osQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMsIEVzdHJ1Y3R1cmEsIEZvclBrUmFpeixcbiAgICBSZXNwdWVzdGFzLFxuICAgIE1vZG9BbG1hY2VuYW1pZW50byxcbiAgICBQbGFpbkZvclBrLFxuICAgIHRvUGxhaW5Gb3JQayxcbiAgICBDYXJnYSxcbiAgICBJZEVuYyxcbiAgICBJZENhcmdhLFxuICAgIENhbXBvUGssXG4gICAgQ2FtcG9Qa1JhaXosXG4gICAgTW9kb0RNXG59IGZyb20gXCIuL3RpcG9zXCI7XG5cbmltcG9ydCBsaWtlQXIgPSByZXF1aXJlKFwibGlrZS1hclwiKTtcbmltcG9ydCB7IGV4cGVjdGVkIH0gZnJvbSBcImNhc3QtZXJyb3JcIjtcblxuaW1wb3J0IHtcbiAgICBnZXREYXRvc0J5UGFzcyxcbiAgICBnZXRFc3RydWN0dXJhLFxuICAgIHNldEVuY29sYXJCYWNrdXAsIHNldEVzdHJ1Y3R1cmEsXG59IGZyb20gXCIuL2J5cGFzcy1mb3JtdWxhcmlvXCJcbmltcG9ydCB7IGdldEZvcm1SZW5kZXJlciB9IGZyb20gXCIuLi91bmxvZ2dlZC9yZW5kZXItY29uZmlnXCI7XG5cbmV4cG9ydCBjb25zdCBCQUNLVVBTID0gJ2JhY2t1cHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY2FyZ2FyRXN0cnVjdHVyYShlc3RydWN0dXJhQUNhcmdhcjogRXN0cnVjdHVyYSkge1xuICAgIHNldEVzdHJ1Y3R1cmEoZXN0cnVjdHVyYUFDYXJnYXIpO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5cbnR5cGUgQmFja3VwcyA9IHtcbiAgICBpZEFjdHVhbDogbnVtYmVyLFxuICAgIHRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgdGVtOiB7IFtrZXkgaW4gUGxhaW5Gb3JQa106IHsgaWRCYWNrdXA6IG51bWJlciwgZm9yUGtSYWl6OiBGb3JQa1JhaXosIHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzLCBjYXJnYTogQ2FyZ2EsIGlkcGVyOiBzdHJpbmcgfSB9LFxufVxuXG52YXIgYmFja3VwUGVuZGllbnRlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbmFzeW5jIGZ1bmN0aW9uIGVudmlhckJhY2t1cCgpIHtcbiAgICB2YXIgYmFja3VwczogQmFja3VwcyA9IG15LmdldExvY2FsVmFyKEJBQ0tVUFMpO1xuICAgIHZhciB7IHRva2VuLCB0ZW0gfSA9IGJhY2t1cHM7XG4gICAgaWYgKGxpa2VBcih0ZW0pLmFycmF5KCkubGVuZ3RoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgbW9kb0RNOiBNb2RvRE0gPSBnZXRGb3JtUmVuZGVyZXIoKS5nZXRNb2RvRE0oKSB8fCBhd2FpdCBteS5hamF4Lm1vZG9fZG1fZGVmZWN0b19vYnRlbmVyKHt9KTtcbiAgICAgICAgICAgIGdldEZvcm1SZW5kZXJlcigpLnNldE1vZG9ETShtb2RvRE0pO1xuICAgICAgICAgICAgYXdhaXQgbXkuYWpheC5kbV9iYWNrdXAoeyB0b2tlbiwgdGVtLCBtb2RvX2RtOiBtb2RvRE0gfSk7XG4gICAgICAgICAgICAvLyB0ZW5nbyBxdWUgbGV2YW50YXJsbyBkZSBudWV2byBwb3JxdWUgYWPDoSBoYXkgdW5hIGludGVycnVwY2nDs24gZGVsIGZsdWpvXG4gICAgICAgICAgICB2YXIgYmFja3Vwc0FMaW1waWFyOiBCYWNrdXBzID0gbXkuZ2V0TG9jYWxWYXIoQkFDS1VQUyk7XG4gICAgICAgICAgICBiYWNrdXBzQUxpbXBpYXIudGVtID0gbGlrZUFyKGJhY2t1cHNBTGltcGlhci50ZW0pLmZpbHRlcihjYXNvID0+IGNhc28uaWRCYWNrdXAgPiBiYWNrdXBzLmlkQWN0dWFsKS5wbGFpbigpO1xuICAgICAgICAgICAgbXkuc2V0TG9jYWxWYXIoQkFDS1VQUywgYmFja3Vwc0FMaW1waWFyKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdubyBzZSBwdWRvIGhhY2VyIGJhY2t1cCcsIGV4cGVjdGVkKGVycikpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5zZXRFbmNvbGFyQmFja3VwKFxuICAgIGZ1bmN0aW9uIGVuY29sYXJCYWNrdXAodG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCwgZm9yUGtSYWl6OiBGb3JQa1JhaXosIHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzKSB7XG4gICAgICAgIHZhciBiYWNrdXBzOiBCYWNrdXBzID0gbXkuZXhpc3RzTG9jYWxWYXIoQkFDS1VQUykgPyBteS5nZXRMb2NhbFZhcihCQUNLVVBTKSA6IHtcbiAgICAgICAgICAgIGlkQWN0dWFsOiAwLFxuICAgICAgICAgICAgdGVtOiB7fSxcbiAgICAgICAgfTtcbiAgICAgICAgYmFja3Vwcy5pZEFjdHVhbCArPSAxO1xuICAgICAgICBiYWNrdXBzLnRva2VuID0gdG9rZW47XG4gICAgICAgIGxldCBwbGFpbkZvclBrID0gdG9QbGFpbkZvclBrKGZvclBrUmFpeik7XG4gICAgICAgIGNvbnN0IGRhdG9zQnlQYXNzID0gZ2V0RGF0b3NCeVBhc3MoKTtcbiAgICAgICAgbGV0IGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XG4gICAgICAgIGxldCBjYXJnYSA9IGRhdG9zQnlQYXNzLmNhcmdhc1tkYXRvc0J5UGFzcy5pbmZvcm1hY2lvbkhkcltmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSBhcyBJZEVuY10udGVtLmNhcmdhIGFzIElkQ2FyZ2FdO1xuICAgICAgICBiYWNrdXBzLnRlbVtwbGFpbkZvclBrXSA9IHsgaWRCYWNrdXA6IGJhY2t1cHMuaWRBY3R1YWwsIGZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXosIGNhcmdhLCBpZHBlcjogZGF0b3NCeVBhc3MuaWRwZXIgfTtcbiAgICAgICAgbXkuc2V0TG9jYWxWYXIoQkFDS1VQUywgYmFja3Vwcyk7XG4gICAgICAgIGJhY2t1cFBlbmRpZW50ZSA9IGJhY2t1cFBlbmRpZW50ZS50aGVuKGVudmlhckJhY2t1cClcbiAgICB9XG4pXG4iXX0=
|